diff options
| author | Adam Mathes <adam@adammathes.com> | 2026-02-13 21:34:48 -0800 |
|---|---|---|
| committer | Adam Mathes <adam@adammathes.com> | 2026-02-13 21:34:48 -0800 |
| commit | 76cb9c2a39d477a64824a985ade40507e3bbade1 (patch) | |
| tree | 41e997aa9c6f538d3a136af61dae9424db2005a9 /vanilla/node_modules/@asamuzakjp/css-color | |
| parent | 819a39a21ac992b1393244a4c283bbb125208c69 (diff) | |
| download | neko-76cb9c2a39d477a64824a985ade40507e3bbade1.tar.gz neko-76cb9c2a39d477a64824a985ade40507e3bbade1.tar.bz2 neko-76cb9c2a39d477a64824a985ade40507e3bbade1.zip | |
feat(vanilla): add testing infrastructure and tests (NK-wjnczv)
Diffstat (limited to 'vanilla/node_modules/@asamuzakjp/css-color')
58 files changed, 20826 insertions, 0 deletions
diff --git a/vanilla/node_modules/@asamuzakjp/css-color/LICENSE b/vanilla/node_modules/@asamuzakjp/css-color/LICENSE new file mode 100644 index 0000000..0004c52 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/LICENSE @@ -0,0 +1,21 @@ +MIT License
+
+Copyright (c) 2024 asamuzaK (Kazz)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/vanilla/node_modules/@asamuzakjp/css-color/README.md b/vanilla/node_modules/@asamuzakjp/css-color/README.md new file mode 100644 index 0000000..715b6c3 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/README.md @@ -0,0 +1,316 @@ +# CSS color + +[](https://github.com/asamuzaK/cssColor/actions/workflows/node.js.yml) +[](https://github.com/asamuzaK/cssColor/actions/workflows/github-code-scanning/codeql) +[](https://www.npmjs.com/package/@asamuzakjp/css-color) + +Resolve and convert CSS colors. + +## Install + +```console +npm i @asamuzakjp/css-color +``` + +## Usage + +```javascript +import { convert, resolve, utils } from '@asamuzakjp/css-color'; + +const resolvedValue = resolve( + 'color-mix(in oklab, lch(67.5345 42.5 258.2), color(srgb 0 0.5 0))' +); +// 'oklab(0.620754 -0.0931934 -0.00374881)' + +const convertedValue = convert.colorToHex('lab(46.2775% -47.5621 48.5837)'); +// '#008000' + +const result = utils.isColor('green'); +// true +``` + +<!-- Generated by documentation.js. Update this documentation by updating the source code. --> + +### resolve(color, opt) + +resolves CSS color + +#### Parameters + +- `color` **[string][133]** color value + - system colors are not supported +- `opt` **[object][135]?** options (optional, default `{}`) + - `opt.currentColor` **[string][133]?** + - color to use for `currentcolor` keyword + - if omitted, it will be treated as a missing color, + i.e. `rgb(none none none / none)` + - `opt.customProperty` **[object][135]?** + - custom properties + - pair of `--` prefixed property name as a key and it's value, + e.g. + ```javascript + const opt = { + customProperty: { + '--some-color': '#008000', + '--some-length': '16px' + } + }; + ``` + - and/or `callback` function to get the value of the custom property, + e.g. + ```javascript + const node = document.getElementById('foo'); + const opt = { + customProperty: { + callback: node.style.getPropertyValue + } + }; + ``` + - `opt.dimension` **[object][135]?** + - dimension, e.g. for converting relative length to pixels + - pair of unit as a key and number in pixels as it's value, + e.g. suppose `1em === 12px`, `1rem === 16px` and `100vw === 1024px`, then + ```javascript + const opt = { + dimension: { + em: 12, + rem: 16, + vw: 10.24 + } + }; + ``` + - and/or `callback` function to get the value as a number in pixels, + e.g. + ```javascript + const opt = { + dimension: { + callback: unit => { + switch (unit) { + case 'em': + return 12; + case 'rem': + return 16; + case 'vw': + return 10.24; + default: + return; + } + } + } + }; + ``` + - `opt.format` **[string][133]?** + - output format, one of below + - `computedValue` (default), [computed value][139] of the color + - `specifiedValue`, [specified value][140] of the color + - `hex`, hex color notation, i.e. `#rrggbb` + - `hexAlpha`, hex color notation with alpha channel, i.e. `#rrggbbaa` + +Returns **[string][133]?** one of `rgba?()`, `#rrggbb(aa)?`, `color-name`, `color(color-space r g b / alpha)`, `color(color-space x y z / alpha)`, `(ok)?lab(l a b / alpha)`, `(ok)?lch(l c h / alpha)`, `'(empty-string)'`, `null` + +- in `computedValue`, values are numbers, however `rgb()` values are integers +- in `specifiedValue`, returns `empty string` for unknown and/or invalid color +- in `hex`, returns `null` for `transparent`, and also returns `null` if any of `r`, `g`, `b`, `alpha` is not a number +- in `hexAlpha`, returns `#00000000` for `transparent`, however returns `null` if any of `r`, `g`, `b`, `alpha` is not a number + +### convert + +Contains various color conversion functions. + +### convert.numberToHex(value) + +convert number to hex string + +#### Parameters + +- `value` **[number][134]** color value + +Returns **[string][133]** hex string: 00..ff + +### convert.colorToHex(value, opt) + +convert color to hex + +#### Parameters + +- `value` **[string][133]** color value +- `opt` **[object][135]?** options (optional, default `{}`) + - `opt.alpha` **[boolean][136]?** return in #rrggbbaa notation + - `opt.customProperty` **[object][135]?** + - custom properties, see `resolve()` function above + - `opt.dimension` **[object][135]?** + - dimension, see `resolve()` function above + +Returns **[string][133]** #rrggbb(aa)? + +### convert.colorToHsl(value, opt) + +convert color to hsl + +#### Parameters + +- `value` **[string][133]** color value +- `opt` **[object][135]?** options (optional, default `{}`) + - `opt.customProperty` **[object][135]?** + - custom properties, see `resolve()` function above + - `opt.dimension` **[object][135]?** + - dimension, see `resolve()` function above + +Returns **[Array][137]<[number][134]>** \[h, s, l, alpha] + +### convert.colorToHwb(value, opt) + +convert color to hwb + +#### Parameters + +- `value` **[string][133]** color value +- `opt` **[object][135]?** options (optional, default `{}`) + - `opt.customProperty` **[object][135]?** + - custom properties, see `resolve()` function above + - `opt.dimension` **[object][135]?** + - dimension, see `resolve()` function above + +Returns **[Array][137]<[number][134]>** \[h, w, b, alpha] + +### convert.colorToLab(value, opt) + +convert color to lab + +#### Parameters + +- `value` **[string][133]** color value +- `opt` **[object][135]?** options (optional, default `{}`) + - `opt.customProperty` **[object][135]?** + - custom properties, see `resolve()` function above + - `opt.dimension` **[object][135]?** + - dimension, see `resolve()` function above + +Returns **[Array][137]<[number][134]>** \[l, a, b, alpha] + +### convert.colorToLch(value, opt) + +convert color to lch + +#### Parameters + +- `value` **[string][133]** color value +- `opt` **[object][135]?** options (optional, default `{}`) + - `opt.customProperty` **[object][135]?** + - custom properties, see `resolve()` function above + - `opt.dimension` **[object][135]?** + - dimension, see `resolve()` function above + +Returns **[Array][137]<[number][134]>** \[l, c, h, alpha] + +### convert.colorToOklab(value, opt) + +convert color to oklab + +#### Parameters + +- `value` **[string][133]** color value +- `opt` **[object][135]?** options (optional, default `{}`) + - `opt.customProperty` **[object][135]?** + - custom properties, see `resolve()` function above + - `opt.dimension` **[object][135]?** + - dimension, see `resolve()` function above + +Returns **[Array][137]<[number][134]>** \[l, a, b, alpha] + +### convert.colorToOklch(value, opt) + +convert color to oklch + +#### Parameters + +- `value` **[string][133]** color value +- `opt` **[object][135]?** options (optional, default `{}`) + - `opt.customProperty` **[object][135]?** + - custom properties, see `resolve()` function above + - `opt.dimension` **[object][135]?** + - dimension, see `resolve()` function above + +Returns **[Array][137]<[number][134]>** \[l, c, h, alpha] + +### convert.colorToRgb(value, opt) + +convert color to rgb + +#### Parameters + +- `value` **[string][133]** color value +- `opt` **[object][135]?** options (optional, default `{}`) + - `opt.customProperty` **[object][135]?** + - custom properties, see `resolve()` function above + - `opt.dimension` **[object][135]?** + - dimension, see `resolve()` function above + +Returns **[Array][137]<[number][134]>** \[r, g, b, alpha] + +### convert.colorToXyz(value, opt) + +convert color to xyz + +#### Parameters + +- `value` **[string][133]** color value +- `opt` **[object][135]?** options (optional, default `{}`) + - `opt.customProperty` **[object][135]?** + - custom properties, see `resolve()` function above + - `opt.dimension` **[object][135]?** + - dimension, see `resolve()` function above + - `opt.d50` **[boolean][136]?** xyz in d50 white point + +Returns **[Array][137]<[number][134]>** \[x, y, z, alpha] + +### convert.colorToXyzD50(value, opt) + +convert color to xyz-d50 + +#### Parameters + +- `value` **[string][133]** color value +- `opt` **[object][135]?** options (optional, default `{}`) + - `opt.customProperty` **[object][135]?** + - custom properties, see `resolve()` function above + - `opt.dimension` **[object][135]?** + - dimension, see `resolve()` function above + +Returns **[Array][137]<[number][134]>** \[x, y, z, alpha] + +### utils + +Contains utility functions. + +### utils.isColor(color) + +is valid color type + +#### Parameters + +- `color` **[string][133]** color value + - system colors are not supported + +Returns **[boolean][136]** + +## Acknowledgments + +The following resources have been of great help in the development of the CSS color. + +- [csstools/postcss-plugins](https://github.com/csstools/postcss-plugins) +- [lru-cache](https://github.com/isaacs/node-lru-cache) + +--- + +Copyright (c) 2024 [asamuzaK (Kazz)](https://github.com/asamuzaK/) + +[133]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String +[134]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number +[135]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object +[136]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean +[137]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array +[138]: https://w3c.github.io/csswg-drafts/css-color-4/#color-conversion-code +[139]: https://developer.mozilla.org/en-US/docs/Web/CSS/computed_value +[140]: https://developer.mozilla.org/en-US/docs/Web/CSS/specified_value +[141]: https://www.npmjs.com/package/@csstools/css-calc diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/browser/css-color.min.js b/vanilla/node_modules/@asamuzakjp/css-color/dist/browser/css-color.min.js new file mode 100644 index 0000000..3061ad6 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/browser/css-color.min.js @@ -0,0 +1 @@ +class En extends Error{sourceStart;sourceEnd;parserState;constructor(t,n,r,s){super(t),this.name="ParseError",this.sourceStart=n,this.sourceEnd=r,this.parserState=s}}class At extends En{token;constructor(t,n,r,s,a){super(t,n,r,s),this.token=a}}const wt={UnexpectedNewLineInString:"Unexpected newline while consuming a string token.",UnexpectedEOFInString:"Unexpected EOF while consuming a string token.",UnexpectedEOFInComment:"Unexpected EOF while consuming a comment.",UnexpectedEOFInURL:"Unexpected EOF while consuming a url token.",UnexpectedEOFInEscapedCodePoint:"Unexpected EOF while consuming an escaped code point.",UnexpectedCharacterInURL:"Unexpected character while consuming a url token.",InvalidEscapeSequenceInURL:"Invalid escape sequence while consuming a url token.",InvalidEscapeSequenceAfterBackslash:'Invalid escape sequence after "\\"'};function $t(...e){let t="";for(let n=0;n<e.length;n++)t+=e[n][1];return t}const Vt=13,be=45,jt=10,qt=43,Pt=65533;function Xo(e){return e.source.codePointAt(e.cursor)===60&&e.source.codePointAt(e.cursor+1)===33&&e.source.codePointAt(e.cursor+2)===be&&e.source.codePointAt(e.cursor+3)===be}function qe(e){return e>=48&&e<=57}function Ko(e){return e>=65&&e<=90}function Zo(e){return e>=97&&e<=122}function Yt(e){return e>=48&&e<=57||e>=97&&e<=102||e>=65&&e<=70}function Jo(e){return Zo(e)||Ko(e)}function Xt(e){return Jo(e)||Qo(e)||e===95}function Lr(e){return Xt(e)||qe(e)||e===be}function Qo(e){return e===183||e===8204||e===8205||e===8255||e===8256||e===8204||192<=e&&e<=214||216<=e&&e<=246||248<=e&&e<=893||895<=e&&e<=8191||8304<=e&&e<=8591||11264<=e&&e<=12271||12289<=e&&e<=55295||63744<=e&&e<=64975||65008<=e&&e<=65533||e===0||!!Kt(e)||e>=65536}function ei(e){return e===11||e===127||0<=e&&e<=8||14<=e&&e<=31}function Jn(e){return e===jt||e===Vt||e===12}function Lt(e){return e===32||e===jt||e===9||e===Vt||e===12}function Kt(e){return e>=55296&&e<=57343}function Zt(e){return e.source.codePointAt(e.cursor)===92&&!Jn(e.source.codePointAt(e.cursor+1)??-1)}function Qn(e,t){return t.source.codePointAt(t.cursor)===be?t.source.codePointAt(t.cursor+1)===be||!!Xt(t.source.codePointAt(t.cursor+1)??-1)||t.source.codePointAt(t.cursor+1)===92&&!Jn(t.source.codePointAt(t.cursor+2)??-1):!!Xt(t.source.codePointAt(t.cursor)??-1)||Zt(t)}function js(e){return e.source.codePointAt(e.cursor)===qt||e.source.codePointAt(e.cursor)===be?!!qe(e.source.codePointAt(e.cursor+1)??-1)||e.source.codePointAt(e.cursor+1)===46&&qe(e.source.codePointAt(e.cursor+2)??-1):e.source.codePointAt(e.cursor)===46?qe(e.source.codePointAt(e.cursor+1)??-1):qe(e.source.codePointAt(e.cursor)??-1)}function ti(e){return e.source.codePointAt(e.cursor)===47&&e.source.codePointAt(e.cursor+1)===42}function ni(e){return e.source.codePointAt(e.cursor)===be&&e.source.codePointAt(e.cursor+1)===be&&e.source.codePointAt(e.cursor+2)===62}var g,F,er;function ri(e){switch(e){case g.OpenParen:return g.CloseParen;case g.CloseParen:return g.OpenParen;case g.OpenCurly:return g.CloseCurly;case g.CloseCurly:return g.OpenCurly;case g.OpenSquare:return g.CloseSquare;case g.CloseSquare:return g.OpenSquare;default:return null}}function si(e){switch(e[0]){case g.OpenParen:return[g.CloseParen,")",-1,-1,void 0];case g.CloseParen:return[g.OpenParen,"(",-1,-1,void 0];case g.OpenCurly:return[g.CloseCurly,"}",-1,-1,void 0];case g.CloseCurly:return[g.OpenCurly,"{",-1,-1,void 0];case g.OpenSquare:return[g.CloseSquare,"]",-1,-1,void 0];case g.CloseSquare:return[g.OpenSquare,"[",-1,-1,void 0];default:return null}}function ai(e,t){for(t.advanceCodePoint(2);;){const n=t.readCodePoint();if(n===void 0){const r=[g.Comment,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,void 0];return e.onParseError(new At(wt.UnexpectedEOFInComment,t.representationStart,t.representationEnd,["4.3.2. Consume comments","Unexpected EOF"],r)),r}if(n===42&&t.source.codePointAt(t.cursor)!==void 0&&t.source.codePointAt(t.cursor)===47){t.advanceCodePoint();break}}return[g.Comment,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,void 0]}function tr(e,t){const n=t.readCodePoint();if(n===void 0)return e.onParseError(new En(wt.UnexpectedEOFInEscapedCodePoint,t.representationStart,t.representationEnd,["4.3.7. Consume an escaped code point","Unexpected EOF"])),Pt;if(Yt(n)){const r=[n];let s;for(;(s=t.source.codePointAt(t.cursor))!==void 0&&Yt(s)&&r.length<6;)r.push(s),t.advanceCodePoint();Lt(t.source.codePointAt(t.cursor)??-1)&&(t.source.codePointAt(t.cursor)===Vt&&t.source.codePointAt(t.cursor+1)===jt&&t.advanceCodePoint(),t.advanceCodePoint());const a=parseInt(String.fromCodePoint(...r),16);return a===0||Kt(a)||a>1114111?Pt:a}return n===0||Kt(n)?Pt:n}function nr(e,t){const n=[];for(;;){const r=t.source.codePointAt(t.cursor)??-1;if(r===0||Kt(r))n.push(Pt),t.advanceCodePoint(+(r>65535)+1);else if(Lr(r))n.push(r),t.advanceCodePoint(+(r>65535)+1);else{if(!Zt(t))return n;t.advanceCodePoint(),n.push(tr(e,t))}}}function oi(e,t){t.advanceCodePoint();const n=t.source.codePointAt(t.cursor);if(n!==void 0&&(Lr(n)||Zt(t))){let r=er.Unrestricted;Qn(0,t)&&(r=er.ID);const s=nr(e,t);return[g.Hash,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,{value:String.fromCodePoint(...s),type:r}]}return[g.Delim,"#",t.representationStart,t.representationEnd,{value:"#"}]}function ii(e,t){let n=F.Integer;for(t.source.codePointAt(t.cursor)!==qt&&t.source.codePointAt(t.cursor)!==be||t.advanceCodePoint();qe(t.source.codePointAt(t.cursor)??-1);)t.advanceCodePoint();if(t.source.codePointAt(t.cursor)===46&&qe(t.source.codePointAt(t.cursor+1)??-1))for(t.advanceCodePoint(2),n=F.Number;qe(t.source.codePointAt(t.cursor)??-1);)t.advanceCodePoint();if(t.source.codePointAt(t.cursor)===101||t.source.codePointAt(t.cursor)===69){if(qe(t.source.codePointAt(t.cursor+1)??-1))t.advanceCodePoint(2);else{if(t.source.codePointAt(t.cursor+1)!==be&&t.source.codePointAt(t.cursor+1)!==qt||!qe(t.source.codePointAt(t.cursor+2)??-1))return n;t.advanceCodePoint(3)}for(n=F.Number;qe(t.source.codePointAt(t.cursor)??-1);)t.advanceCodePoint()}return n}function Tr(e,t){let n;{const a=t.source.codePointAt(t.cursor);a===be?n="-":a===qt&&(n="+")}const r=ii(0,t),s=parseFloat(t.source.slice(t.representationStart,t.representationEnd+1));if(Qn(0,t)){const a=nr(e,t);return[g.Dimension,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,{value:s,signCharacter:n,type:r,unit:String.fromCodePoint(...a)}]}return t.source.codePointAt(t.cursor)===37?(t.advanceCodePoint(),[g.Percentage,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,{value:s,signCharacter:n}]):[g.Number,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,{value:s,signCharacter:n,type:r}]}function li(e){for(;Lt(e.source.codePointAt(e.cursor)??-1);)e.advanceCodePoint();return[g.Whitespace,e.source.slice(e.representationStart,e.representationEnd+1),e.representationStart,e.representationEnd,void 0]}(function(e){e.Comment="comment",e.AtKeyword="at-keyword-token",e.BadString="bad-string-token",e.BadURL="bad-url-token",e.CDC="CDC-token",e.CDO="CDO-token",e.Colon="colon-token",e.Comma="comma-token",e.Delim="delim-token",e.Dimension="dimension-token",e.EOF="EOF-token",e.Function="function-token",e.Hash="hash-token",e.Ident="ident-token",e.Number="number-token",e.Percentage="percentage-token",e.Semicolon="semicolon-token",e.String="string-token",e.URL="url-token",e.Whitespace="whitespace-token",e.OpenParen="(-token",e.CloseParen=")-token",e.OpenSquare="[-token",e.CloseSquare="]-token",e.OpenCurly="{-token",e.CloseCurly="}-token",e.UnicodeRange="unicode-range-token"})(g||(g={})),(function(e){e.Integer="integer",e.Number="number"})(F||(F={})),(function(e){e.Unrestricted="unrestricted",e.ID="id"})(er||(er={}));class ci{cursor=0;source="";representationStart=0;representationEnd=-1;constructor(t){this.source=t}advanceCodePoint(t=1){this.cursor=this.cursor+t,this.representationEnd=this.cursor-1}readCodePoint(){const t=this.source.codePointAt(this.cursor);if(t!==void 0)return this.cursor=this.cursor+1,this.representationEnd=this.cursor-1,t}unreadCodePoint(t=1){this.cursor=this.cursor-t,this.representationEnd=this.cursor-1}resetRepresentation(){this.representationStart=this.cursor,this.representationEnd=-1}}function ui(e,t){let n="";const r=t.readCodePoint();for(;;){const s=t.readCodePoint();if(s===void 0){const a=[g.String,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,{value:n}];return e.onParseError(new At(wt.UnexpectedEOFInString,t.representationStart,t.representationEnd,["4.3.5. Consume a string token","Unexpected EOF"],a)),a}if(Jn(s)){t.unreadCodePoint();const a=[g.BadString,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,void 0];return e.onParseError(new At(wt.UnexpectedNewLineInString,t.representationStart,t.source.codePointAt(t.cursor)===Vt&&t.source.codePointAt(t.cursor+1)===jt?t.representationEnd+2:t.representationEnd+1,["4.3.5. Consume a string token","Unexpected newline"],a)),a}if(s===r)return[g.String,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,{value:n}];if(s!==92)s===0||Kt(s)?n+=String.fromCodePoint(Pt):n+=String.fromCodePoint(s);else{if(t.source.codePointAt(t.cursor)===void 0)continue;if(Jn(t.source.codePointAt(t.cursor)??-1)){t.source.codePointAt(t.cursor)===Vt&&t.source.codePointAt(t.cursor+1)===jt&&t.advanceCodePoint(),t.advanceCodePoint();continue}n+=String.fromCodePoint(tr(e,t))}}}function hi(e){return!(e.length!==3||e[0]!==117&&e[0]!==85||e[1]!==114&&e[1]!==82||e[2]!==108&&e[2]!==76)}function _r(e,t){for(;;){const n=t.source.codePointAt(t.cursor);if(n===void 0)return;if(n===41)return void t.advanceCodePoint();Zt(t)?(t.advanceCodePoint(),tr(e,t)):t.advanceCodePoint()}}function fi(e,t){for(;Lt(t.source.codePointAt(t.cursor)??-1);)t.advanceCodePoint();let n="";for(;;){if(t.source.codePointAt(t.cursor)===void 0){const s=[g.URL,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,{value:n}];return e.onParseError(new At(wt.UnexpectedEOFInURL,t.representationStart,t.representationEnd,["4.3.6. Consume a url token","Unexpected EOF"],s)),s}if(t.source.codePointAt(t.cursor)===41)return t.advanceCodePoint(),[g.URL,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,{value:n}];if(Lt(t.source.codePointAt(t.cursor)??-1)){for(t.advanceCodePoint();Lt(t.source.codePointAt(t.cursor)??-1);)t.advanceCodePoint();if(t.source.codePointAt(t.cursor)===void 0){const s=[g.URL,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,{value:n}];return e.onParseError(new At(wt.UnexpectedEOFInURL,t.representationStart,t.representationEnd,["4.3.6. Consume a url token","Consume as much whitespace as possible","Unexpected EOF"],s)),s}return t.source.codePointAt(t.cursor)===41?(t.advanceCodePoint(),[g.URL,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,{value:n}]):(_r(e,t),[g.BadURL,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,void 0])}const r=t.source.codePointAt(t.cursor);if(r===34||r===39||r===40||ei(r??-1)){_r(e,t);const s=[g.BadURL,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,void 0];return e.onParseError(new At(wt.UnexpectedCharacterInURL,t.representationStart,t.representationEnd,["4.3.6. Consume a url token",`Unexpected U+0022 QUOTATION MARK ("), U+0027 APOSTROPHE ('), U+0028 LEFT PARENTHESIS (() or non-printable code point`],s)),s}if(r===92){if(Zt(t)){t.advanceCodePoint(),n+=String.fromCodePoint(tr(e,t));continue}_r(e,t);const s=[g.BadURL,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,void 0];return e.onParseError(new At(wt.InvalidEscapeSequenceInURL,t.representationStart,t.representationEnd,["4.3.6. Consume a url token","U+005C REVERSE SOLIDUS (\\)","The input stream does not start with a valid escape sequence"],s)),s}t.source.codePointAt(t.cursor)===0||Kt(t.source.codePointAt(t.cursor)??-1)?(n+=String.fromCodePoint(Pt),t.advanceCodePoint()):(n+=t.source[t.cursor],t.advanceCodePoint())}}function Wr(e,t){const n=nr(e,t);if(t.source.codePointAt(t.cursor)!==40)return[g.Ident,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,{value:String.fromCodePoint(...n)}];if(hi(n)){t.advanceCodePoint();let r=0;for(;;){const s=Lt(t.source.codePointAt(t.cursor)??-1),a=Lt(t.source.codePointAt(t.cursor+1)??-1);if(s&&a){r+=1,t.advanceCodePoint(1);continue}const o=s?t.source.codePointAt(t.cursor+1):t.source.codePointAt(t.cursor);if(o===34||o===39)return r>0&&t.unreadCodePoint(r),[g.Function,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,{value:String.fromCodePoint(...n)}];break}return fi(e,t)}return t.advanceCodePoint(),[g.Function,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,{value:String.fromCodePoint(...n)}]}function pi(e){return!(e.source.codePointAt(e.cursor)!==117&&e.source.codePointAt(e.cursor)!==85||e.source.codePointAt(e.cursor+1)!==qt||e.source.codePointAt(e.cursor+2)!==63&&!Yt(e.source.codePointAt(e.cursor+2)??-1))}function di(e,t){t.advanceCodePoint(2);const n=[],r=[];let s;for(;(s=t.source.codePointAt(t.cursor))!==void 0&&n.length<6&&Yt(s);)n.push(s),t.advanceCodePoint();for(;(s=t.source.codePointAt(t.cursor))!==void 0&&n.length<6&&s===63;)r.length===0&&r.push(...n),n.push(48),r.push(70),t.advanceCodePoint();if(!r.length&&t.source.codePointAt(t.cursor)===be&&Yt(t.source.codePointAt(t.cursor+1)??-1))for(t.advanceCodePoint();(s=t.source.codePointAt(t.cursor))!==void 0&&r.length<6&&Yt(s);)r.push(s),t.advanceCodePoint();if(!r.length){const i=parseInt(String.fromCodePoint(...n),16);return[g.UnicodeRange,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,{startOfRange:i,endOfRange:i}]}const a=parseInt(String.fromCodePoint(...n),16),o=parseInt(String.fromCodePoint(...r),16);return[g.UnicodeRange,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,{startOfRange:a,endOfRange:o}]}function Nt(e,t){const n=qs(e),r=[];for(;!n.endOfFile();)r.push(n.nextToken());return r.push(n.nextToken()),r}function qs(e,t){const n=e.css.valueOf(),r=e.unicodeRangesAllowed??!1,s=new ci(n),a={onParseError:mi};return{nextToken:function(){s.resetRepresentation();const o=s.source.codePointAt(s.cursor);if(o===void 0)return[g.EOF,"",-1,-1,void 0];if(o===47&&ti(s))return ai(a,s);if(r&&(o===117||o===85)&&pi(s))return di(0,s);if(Xt(o))return Wr(a,s);if(qe(o))return Tr(a,s);switch(o){case 44:return s.advanceCodePoint(),[g.Comma,",",s.representationStart,s.representationEnd,void 0];case 58:return s.advanceCodePoint(),[g.Colon,":",s.representationStart,s.representationEnd,void 0];case 59:return s.advanceCodePoint(),[g.Semicolon,";",s.representationStart,s.representationEnd,void 0];case 40:return s.advanceCodePoint(),[g.OpenParen,"(",s.representationStart,s.representationEnd,void 0];case 41:return s.advanceCodePoint(),[g.CloseParen,")",s.representationStart,s.representationEnd,void 0];case 91:return s.advanceCodePoint(),[g.OpenSquare,"[",s.representationStart,s.representationEnd,void 0];case 93:return s.advanceCodePoint(),[g.CloseSquare,"]",s.representationStart,s.representationEnd,void 0];case 123:return s.advanceCodePoint(),[g.OpenCurly,"{",s.representationStart,s.representationEnd,void 0];case 125:return s.advanceCodePoint(),[g.CloseCurly,"}",s.representationStart,s.representationEnd,void 0];case 39:case 34:return ui(a,s);case 35:return oi(a,s);case qt:case 46:return js(s)?Tr(a,s):(s.advanceCodePoint(),[g.Delim,s.source[s.representationStart],s.representationStart,s.representationEnd,{value:s.source[s.representationStart]}]);case jt:case Vt:case 12:case 9:case 32:return li(s);case be:return js(s)?Tr(a,s):ni(s)?(s.advanceCodePoint(3),[g.CDC,"-->",s.representationStart,s.representationEnd,void 0]):Qn(0,s)?Wr(a,s):(s.advanceCodePoint(),[g.Delim,"-",s.representationStart,s.representationEnd,{value:"-"}]);case 60:return Xo(s)?(s.advanceCodePoint(4),[g.CDO,"<!--",s.representationStart,s.representationEnd,void 0]):(s.advanceCodePoint(),[g.Delim,"<",s.representationStart,s.representationEnd,{value:"<"}]);case 64:if(s.advanceCodePoint(),Qn(0,s)){const i=nr(a,s);return[g.AtKeyword,s.source.slice(s.representationStart,s.representationEnd+1),s.representationStart,s.representationEnd,{value:String.fromCodePoint(...i)}]}return[g.Delim,"@",s.representationStart,s.representationEnd,{value:"@"}];case 92:{if(Zt(s))return Wr(a,s);s.advanceCodePoint();const i=[g.Delim,"\\",s.representationStart,s.representationEnd,{value:"\\"}];return a.onParseError(new At(wt.InvalidEscapeSequenceAfterBackslash,s.representationStart,s.representationEnd,["4.3.1. Consume a token","U+005C REVERSE SOLIDUS (\\)","The input stream does not start with a valid escape sequence"],i)),i}}return s.advanceCodePoint(),[g.Delim,s.source[s.representationStart],s.representationStart,s.representationEnd,{value:s.source[s.representationStart]}]},endOfFile:function(){return s.source.codePointAt(s.cursor)===void 0}}}function mi(){}function Ys(e,t){const n=[];for(const i of t)n.push(i.codePointAt(0));const r=gi(n);r[0]===101&&Hr(r,0,r[0]);const s=String.fromCodePoint(...r),a=e[4].signCharacter==="+"?e[4].signCharacter:"",o=e[4].value.toString();e[1]=`${a}${o}${s}`,e[4].unit=t}function gi(e){let t=0;if(e[0]===0)e.splice(0,1,Pt),t=1;else if(e[0]===be&&e[1]===be)t=2;else if(e[0]===be&&e[1])t=2,Xt(e[1])||(t+=Hr(e,1,e[1]));else{if(e[0]===be&&!e[1])return[92,e[0]];Xt(e[0])?t=1:(t=1,t+=Hr(e,0,e[0]))}for(let n=t;n<e.length;n++)e[n]!==0?Lr(e[n])||(n+=vi(e,n,e[n])):(e.splice(n,1,Pt),n++);return e}function vi(e,t,n){return e.splice(t,1,92,n),1}function Hr(e,t,n){const r=n.toString(16),s=[];for(const a of r)s.push(a.codePointAt(0));return e.splice(t,1,92,...s,32),1+s.length}const bi=Object.values(g);function zr(e){return!!Array.isArray(e)&&!(e.length<4)&&!!bi.includes(e[0])&&typeof e[1]=="string"&&typeof e[2]=="number"&&typeof e[3]=="number"}function re(e){if(!e)return!1;switch(e[0]){case g.Dimension:case g.Number:case g.Percentage:return!0;default:return!1}}function Xs(e){if(!e)return!1;switch(e[0]){case g.Whitespace:case g.Comment:return!0;default:return!1}}function tt(e){return!!e&&e[0]===g.Comma}function Ks(e){return!!e&&e[0]===g.Comment}function Cn(e){return!!e&&e[0]===g.Delim}function J(e){return!!e&&e[0]===g.Dimension}function ht(e){return!!e&&e[0]===g.EOF}function wi(e){return!!e&&e[0]===g.Function}function $i(e){return!!e&&e[0]===g.Hash}function ne(e){return!!e&&e[0]===g.Ident}function L(e){return!!e&&e[0]===g.Number}function X(e){return!!e&&e[0]===g.Percentage}function Ur(e){return!!e&&e[0]===g.Whitespace}function Zs(e){return!!e&&e[0]===g.OpenParen}function Ni(e){return!!e&&e[0]===g.CloseParen}function yi(e){return!!e&&e[0]===g.OpenSquare}function Ei(e){return!!e&&e[0]===g.OpenCurly}var Ye;function Js(e){let t=e.slice();return(n,r,s)=>{let a=-1;for(let o=t.indexOf(r);o<t.length&&(a=n.indexOf(t[o]),a===-1||a<s);o++);return a===-1||a===s&&r===n[s]&&(a++,a>=n.length)?-1:(t=n.slice(),a)}}function rr(e,t){const n=t[0];if(Zs(n)||Ei(n)||yi(n)){const r=xi(e,t);return{advance:r.advance,node:r.node}}if(wi(n)){const r=Ci(e,t);return{advance:r.advance,node:r.node}}if(Ur(n)){const r=ea(e,t);return{advance:r.advance,node:r.node}}if(Ks(n)){const r=Fi(e,t);return{advance:r.advance,node:r.node}}return{advance:1,node:new T(n)}}(function(e){e.Function="function",e.SimpleBlock="simple-block",e.Whitespace="whitespace",e.Comment="comment",e.Token="token"})(Ye||(Ye={}));class Qs{value=[];indexOf(t){return this.value.indexOf(t)}at(t){if(typeof t=="number")return t<0&&(t=this.value.length+t),this.value[t]}forEach(t,n){if(this.value.length===0)return;const r=Js(this.value);let s=0;for(;s<this.value.length;){const a=this.value[s];let o;if(n&&(o={...n}),t({node:a,parent:this,state:o},s)===!1)return!1;if(s=r(this.value,a,s),s===-1)break}}walk(t,n){this.value.length!==0&&this.forEach((r,s)=>t(r,s)!==!1&&(!("walk"in r.node)||!this.value.includes(r.node)||r.node.walk(t,r.state)!==!1)&&void 0,n)}}class Me extends Qs{type=Ye.Function;name;endToken;constructor(t,n,r){super(),this.name=t,this.endToken=n,this.value=r}getName(){return this.name[4].value}normalize(){ht(this.endToken)&&(this.endToken=[g.CloseParen,")",-1,-1,void 0])}tokens(){return ht(this.endToken)?[this.name,...this.value.flatMap(t=>t.tokens())]:[this.name,...this.value.flatMap(t=>t.tokens()),this.endToken]}toString(){const t=this.value.map(n=>zr(n)?$t(n):n.toString()).join("");return $t(this.name)+t+$t(this.endToken)}toJSON(){return{type:this.type,name:this.getName(),tokens:this.tokens(),value:this.value.map(t=>t.toJSON())}}isFunctionNode(){return Me.isFunctionNode(this)}static isFunctionNode(t){return!!t&&t instanceof Me&&t.type===Ye.Function}}function Ci(e,t){const n=[];let r=1;for(;;){const s=t[r];if(!s||ht(s))return e.onParseError(new En("Unexpected EOF while consuming a function.",t[0][2],t[t.length-1][3],["5.4.9. Consume a function","Unexpected EOF"])),{advance:t.length,node:new Me(t[0],s,n)};if(Ni(s))return{advance:r+1,node:new Me(t[0],s,n)};if(Xs(s)){const o=ta(e,t.slice(r));r+=o.advance,n.push(...o.nodes);continue}const a=rr(e,t.slice(r));r+=a.advance,n.push(a.node)}}class Nn extends Qs{type=Ye.SimpleBlock;startToken;endToken;constructor(t,n,r){super(),this.startToken=t,this.endToken=n,this.value=r}normalize(){if(ht(this.endToken)){const t=si(this.startToken);t&&(this.endToken=t)}}tokens(){return ht(this.endToken)?[this.startToken,...this.value.flatMap(t=>t.tokens())]:[this.startToken,...this.value.flatMap(t=>t.tokens()),this.endToken]}toString(){const t=this.value.map(n=>zr(n)?$t(n):n.toString()).join("");return $t(this.startToken)+t+$t(this.endToken)}toJSON(){return{type:this.type,startToken:this.startToken,tokens:this.tokens(),value:this.value.map(t=>t.toJSON())}}isSimpleBlockNode(){return Nn.isSimpleBlockNode(this)}static isSimpleBlockNode(t){return!!t&&t instanceof Nn&&t.type===Ye.SimpleBlock}}function xi(e,t){const n=ri(t[0][0]);if(!n)throw new Error("Failed to parse, a mirror variant must exist for all block open tokens.");const r=[];let s=1;for(;;){const a=t[s];if(!a||ht(a))return e.onParseError(new En("Unexpected EOF while consuming a simple block.",t[0][2],t[t.length-1][3],["5.4.8. Consume a simple block","Unexpected EOF"])),{advance:t.length,node:new Nn(t[0],a,r)};if(a[0]===n)return{advance:s+1,node:new Nn(t[0],a,r)};if(Xs(a)){const i=ta(e,t.slice(s));s+=i.advance,r.push(...i.nodes);continue}const o=rr(e,t.slice(s));s+=o.advance,r.push(o.node)}}class je{type=Ye.Whitespace;value;constructor(t){this.value=t}tokens(){return this.value}toString(){return $t(...this.value)}toJSON(){return{type:this.type,tokens:this.tokens()}}isWhitespaceNode(){return je.isWhitespaceNode(this)}static isWhitespaceNode(t){return!!t&&t instanceof je&&t.type===Ye.Whitespace}}function ea(e,t){let n=0;for(;;){const r=t[n];if(!Ur(r))return{advance:n,node:new je(t.slice(0,n))};n++}}class yn{type=Ye.Comment;value;constructor(t){this.value=t}tokens(){return[this.value]}toString(){return $t(this.value)}toJSON(){return{type:this.type,tokens:this.tokens()}}isCommentNode(){return yn.isCommentNode(this)}static isCommentNode(t){return!!t&&t instanceof yn&&t.type===Ye.Comment}}function Fi(e,t){return{advance:1,node:new yn(t[0])}}function ta(e,t){const n=[];let r=0;for(;;){if(Ur(t[r])){const s=ea(0,t.slice(r));r+=s.advance,n.push(s.node);continue}if(!Ks(t[r]))return{advance:r,nodes:n};n.push(new yn(t[r])),r++}}class T{type=Ye.Token;value;constructor(t){this.value=t}tokens(){return[this.value]}toString(){return this.value[1]}toJSON(){return{type:this.type,tokens:this.tokens()}}isTokenNode(){return T.isTokenNode(this)}static isTokenNode(t){return!!t&&t instanceof T&&t.type===Ye.Token}}function Si(e,t){const n={onParseError:(()=>{})},r=[...e];ht(r[r.length-1])||r.push([g.EOF,"",r[r.length-1][2],r[r.length-1][3],void 0]);const s=rr(n,r);if(ht(r[Math.min(s.advance,r.length-1)]))return s.node;n.onParseError(new En("Expected EOF after parsing a component value.",e[0][2],e[e.length-1][3],["5.3.9. Parse a component value","Expected EOF"]))}function ki(e,t){const n={onParseError:t?.onParseError??(()=>{})},r=[...e];if(e.length===0)return[];ht(r[r.length-1])&&r.push([g.EOF,"",r[r.length-1][2],r[r.length-1][3],void 0]);const s=[];let a=[],o=0;for(;;){if(!r[o]||ht(r[o]))return a.length&&s.push(a),s;if(tt(r[o])){s.push(a),a=[],o++;continue}const i=rr(n,e.slice(o));a.push(i.node),o+=i.advance}}function Ai(e,t,n){if(e.length===0)return;const r=Js(e);let s=0;for(;s<e.length;){const a=e[s];if(t({node:a,parent:{value:e},state:void 0},s)===!1)return!1;if(s=r(e,a,s),s===-1)break}}function Pi(e,t,n){e.length!==0&&Ai(e,(r,s)=>t(r,s)!==!1&&(!("walk"in r.node)||!e.includes(r.node)||r.node.walk(t,r.state)!==!1)&&void 0)}function na(e,t){for(let n=0;n<e.length;n++)Pi(e[n],(r,s)=>{if(typeof s!="number")return;const a=t(r.node);a&&(Array.isArray(a)?r.parent.value.splice(s,1,...a):r.parent.value.splice(s,1,a))});return e}function Di(e){return Nn.isSimpleBlockNode(e)}function Be(e){return Me.isFunctionNode(e)}function He(e){return je.isWhitespaceNode(e)}function ze(e){return yn.isCommentNode(e)}function yt(e){return He(e)||ze(e)}function O(e){return T.isTokenNode(e)}const Mi=/[A-Z]/g;function Re(e){return e.replace(Mi,t=>String.fromCharCode(t.charCodeAt(0)+32))}const Bi={cm:"px",in:"px",mm:"px",pc:"px",pt:"px",px:"px",q:"px",deg:"deg",grad:"deg",rad:"deg",turn:"deg",ms:"s",s:"s",hz:"hz",khz:"hz"},Ri=new Map([["cm",e=>e],["mm",e=>10*e],["q",e=>40*e],["in",e=>e/2.54],["pc",e=>e/2.54*6],["pt",e=>e/2.54*72],["px",e=>e/2.54*96]]),sr=new Map([["deg",e=>e],["grad",e=>e/.9],["rad",e=>e/180*Math.PI],["turn",e=>e/360]]),xn=new Map([["deg",e=>.9*e],["grad",e=>e],["rad",e=>.9*e/180*Math.PI],["turn",e=>.9*e/360]]),Oi=new Map([["hz",e=>e],["khz",e=>e/1e3]]),Ii=new Map([["cm",e=>2.54*e],["mm",e=>25.4*e],["q",e=>25.4*e*4],["in",e=>e],["pc",e=>6*e],["pt",e=>72*e],["px",e=>96*e]]),Li=new Map([["hz",e=>1e3*e],["khz",e=>e]]),Ti=new Map([["cm",e=>e/10],["mm",e=>e],["q",e=>4*e],["in",e=>e/25.4],["pc",e=>e/25.4*6],["pt",e=>e/25.4*72],["px",e=>e/25.4*96]]),_i=new Map([["ms",e=>e],["s",e=>e/1e3]]),Wi=new Map([["cm",e=>e/6*2.54],["mm",e=>e/6*25.4],["q",e=>e/6*25.4*4],["in",e=>e/6],["pc",e=>e],["pt",e=>e/6*72],["px",e=>e/6*96]]),Hi=new Map([["cm",e=>e/72*2.54],["mm",e=>e/72*25.4],["q",e=>e/72*25.4*4],["in",e=>e/72],["pc",e=>e/72*6],["pt",e=>e],["px",e=>e/72*96]]),zi=new Map([["cm",e=>e/96*2.54],["mm",e=>e/96*25.4],["q",e=>e/96*25.4*4],["in",e=>e/96],["pc",e=>e/96*6],["pt",e=>e/96*72],["px",e=>e]]),Ui=new Map([["cm",e=>e/4/10],["mm",e=>e/4],["q",e=>e],["in",e=>e/4/25.4],["pc",e=>e/4/25.4*6],["pt",e=>e/4/25.4*72],["px",e=>e/4/25.4*96]]),ra=new Map([["deg",e=>180*e/Math.PI],["grad",e=>180*e/Math.PI/.9],["rad",e=>e],["turn",e=>180*e/Math.PI/360]]),Gi=new Map([["ms",e=>1e3*e],["s",e=>e]]),Fn=new Map([["deg",e=>360*e],["grad",e=>360*e/.9],["rad",e=>360*e/180*Math.PI],["turn",e=>e]]),sa=new Map([["cm",Ri],["mm",Ti],["q",Ui],["in",Ii],["pc",Wi],["pt",Hi],["px",zi],["ms",_i],["s",Gi],["deg",sr],["grad",xn],["rad",ra],["turn",Fn],["hz",Oi],["khz",Li]]);function Ue(e,t){if(!J(e)||!J(t))return t;const n=Re(e[4].unit),r=Re(t[4].unit);if(n===r)return t;const s=sa.get(r);if(!s)return t;const a=s.get(n);if(!a)return t;const o=a(t[4].value),i=[g.Dimension,"",t[2],t[3],{...t[4],signCharacter:o<0?"-":void 0,type:Number.isInteger(o)?F.Integer:F.Number,value:o}];return Ys(i,e[4].unit),i}function Vi(e){if(!J(e))return e;const t=Re(e[4].unit),n=Bi[t];if(t===n)return e;const r=sa.get(t);if(!r)return e;const s=r.get(n);if(!s)return e;const a=s(e[4].value),o=[g.Dimension,"",e[2],e[3],{...e[4],signCharacter:a<0?"-":void 0,type:Number.isInteger(a)?F.Integer:F.Number,value:a}];return Ys(o,n),o}function ji(e){if(e.length!==2)return-1;const t=e[0].value;let n=e[1].value;if(L(t)&&L(n)){const r=t[4].value+n[4].value;return new T([g.Number,r.toString(),t[2],n[3],{value:r,type:t[4].type===F.Integer&&n[4].type===F.Integer?F.Integer:F.Number}])}if(X(t)&&X(n)){const r=t[4].value+n[4].value;return new T([g.Percentage,r.toString()+"%",t[2],n[3],{value:r}])}if(J(t)&&J(n)&&(n=Ue(t,n),Re(t[4].unit)===Re(n[4].unit))){const r=t[4].value+n[4].value;return new T([g.Dimension,r.toString()+t[4].unit,t[2],n[3],{value:r,type:t[4].type===F.Integer&&n[4].type===F.Integer?F.Integer:F.Number,unit:t[4].unit}])}return-1}function qi(e){if(e.length!==2)return-1;const t=e[0].value,n=e[1].value;if(L(t)&&L(n)){const r=t[4].value/n[4].value;return new T([g.Number,r.toString(),t[2],n[3],{value:r,type:Number.isInteger(r)?F.Integer:F.Number}])}if(X(t)&&L(n)){const r=t[4].value/n[4].value;return new T([g.Percentage,r.toString()+"%",t[2],n[3],{value:r}])}if(J(t)&&L(n)){const r=t[4].value/n[4].value;return new T([g.Dimension,r.toString()+t[4].unit,t[2],n[3],{value:r,type:Number.isInteger(r)?F.Integer:F.Number,unit:t[4].unit}])}return-1}function Tt(e){return!!e&&typeof e=="object"&&"inputs"in e&&Array.isArray(e.inputs)&&"operation"in e}function Oe(e){if(e===-1)return-1;const t=[];for(let n=0;n<e.inputs.length;n++){const r=e.inputs[n];if(O(r)){t.push(r);continue}const s=Oe(r);if(s===-1)return-1;t.push(s)}return e.operation(t)}function Yi(e){if(e.length!==2)return-1;const t=e[0].value,n=e[1].value;if(L(t)&&L(n)){const r=t[4].value*n[4].value;return new T([g.Number,r.toString(),t[2],n[3],{value:r,type:t[4].type===F.Integer&&n[4].type===F.Integer?F.Integer:F.Number}])}if(X(t)&&L(n)){const r=t[4].value*n[4].value;return new T([g.Percentage,r.toString()+"%",t[2],n[3],{value:r}])}if(L(t)&&X(n)){const r=t[4].value*n[4].value;return new T([g.Percentage,r.toString()+"%",t[2],n[3],{value:r}])}if(J(t)&&L(n)){const r=t[4].value*n[4].value;return new T([g.Dimension,r.toString()+t[4].unit,t[2],n[3],{value:r,type:t[4].type===F.Integer&&n[4].type===F.Integer?F.Integer:F.Number,unit:t[4].unit}])}if(L(t)&&J(n)){const r=t[4].value*n[4].value;return new T([g.Dimension,r.toString()+n[4].unit,t[2],n[3],{value:r,type:t[4].type===F.Integer&&n[4].type===F.Integer?F.Integer:F.Number,unit:n[4].unit}])}return-1}function Jt(e,t){for(let n=0;n<e.length;n++){const r=e[n];if(!O(r))continue;const s=r.value;if(!ne(s))continue;const a=Re(s[4].value);switch(a){case"e":e.splice(n,1,new T([g.Number,Math.E.toString(),s[2],s[3],{value:Math.E,type:F.Number}]));break;case"pi":e.splice(n,1,new T([g.Number,Math.PI.toString(),s[2],s[3],{value:Math.PI,type:F.Number}]));break;case"infinity":e.splice(n,1,new T([g.Number,"infinity",s[2],s[3],{value:1/0,type:F.Number}]));break;case"-infinity":e.splice(n,1,new T([g.Number,"-infinity",s[2],s[3],{value:-1/0,type:F.Number}]));break;case"nan":e.splice(n,1,new T([g.Number,"NaN",s[2],s[3],{value:Number.NaN,type:F.Number}]));break;default:if(t.has(a)){const o=t.get(a);e.splice(n,1,new T(o))}}}return e}function ar(e){if(e.length!==1)return-1;const t=e[0].value;return re(t)?e[0]:-1}function Xe(e,t,n){return J(t)?Sn(e,t[4].unit,n):X(t)?Xi(e,n):L(t)?ft(e,n):-1}function Sn(e,t,n){const r=e.tokens();return{inputs:[new T([g.Dimension,n.toString()+t,r[0][2],r[r.length-1][3],{value:n,type:Number.isInteger(n)?F.Integer:F.Number,unit:t}])],operation:ar}}function Xi(e,t){const n=e.tokens();return{inputs:[new T([g.Percentage,t.toString()+"%",n[0][2],n[n.length-1][3],{value:t}])],operation:ar}}function ft(e,t){const n=e.tokens();return{inputs:[new T([g.Number,t.toString(),n[0][2],n[n.length-1][3],{value:t,type:Number.isInteger(t)?F.Integer:F.Number}])],operation:ar}}function Ki(e,t){const n=t.value;return L(n)?Sn(e,"rad",Math.acos(n[4].value)):-1}function Zi(e,t){const n=t.value;return L(n)?Sn(e,"rad",Math.asin(n[4].value)):-1}function Ji(e,t){const n=t.value;return L(n)?Sn(e,"rad",Math.atan(n[4].value)):-1}function or(e){return J(e)||L(e)}function Gr(e){if(e.length===0)return!0;const t=e[0];if(!re(t))return!1;if(e.length===1)return!0;if(J(t)){const n=Re(t[4].unit);for(let r=1;r<e.length;r++){const s=e[r];if(t[0]!==s[0]||n!==Re(s[4].unit))return!1}return!0}for(let n=1;n<e.length;n++){const r=e[n];if(t[0]!==r[0])return!1}return!0}function Et(e,t){return!!re(e)&&(J(e)?e[0]===t[0]&&Re(e[4].unit)===Re(t[4].unit):e[0]===t[0])}function Qi(e,t,n){const r=t.value;if(!or(r))return-1;const s=Ue(r,n.value);return Et(r,s)?Sn(e,"rad",Math.atan2(r[4].value,s[4].value)):-1}function el(e,t,n){const r=t.value;return!re(r)||!n.rawPercentages&&X(r)?-1:Xe(e,r,Math.abs(r[4].value))}function tl(e,t,n,r,s){if(!O(t)||!O(n)||!O(r))return-1;const a=t.value;if(!re(a)||!s.rawPercentages&&X(a))return-1;const o=Ue(a,n.value);if(!Et(a,o))return-1;const i=Ue(a,r.value);return Et(a,i)?Xe(e,a,Math.max(a[4].value,Math.min(o[4].value,i[4].value))):-1}function nl(e,t){const n=t.value;if(!or(n))return-1;let r=n[4].value;if(J(n))switch(n[4].unit.toLowerCase()){case"rad":break;case"deg":r=sr.get("rad")(n[4].value);break;case"grad":r=xn.get("rad")(n[4].value);break;case"turn":r=Fn.get("rad")(n[4].value);break;default:return-1}return r=Math.cos(r),ft(e,r)}function rl(e,t){const n=t.value;return L(n)?ft(e,Math.exp(n[4].value)):-1}function sl(e,t,n){if(!t.every(O))return-1;const r=t[0].value;if(!re(r)||!n.rawPercentages&&X(r))return-1;const s=t.map(i=>Ue(r,i.value));if(!Gr(s))return-1;const a=s.map(i=>i[4].value),o=Math.hypot(...a);return Xe(e,r,o)}function aa(e,t,n){if(!t.every(O))return-1;const r=t[0].value;if(!re(r)||!n.rawPercentages&&X(r))return-1;const s=t.map(i=>Ue(r,i.value));if(!Gr(s))return-1;const a=s.map(i=>i[4].value),o=Math.max(...a);return Xe(e,r,o)}function oa(e,t,n){if(!t.every(O))return-1;const r=t[0].value;if(!re(r)||!n.rawPercentages&&X(r))return-1;const s=t.map(i=>Ue(r,i.value));if(!Gr(s))return-1;const a=s.map(i=>i[4].value),o=Math.min(...a);return Xe(e,r,o)}function al(e,t,n){const r=t.value;if(!re(r))return-1;const s=Ue(r,n.value);if(!Et(r,s))return-1;let a;return a=s[4].value===0?Number.NaN:Number.isFinite(r[4].value)&&(Number.isFinite(s[4].value)||(s[4].value!==Number.POSITIVE_INFINITY||r[4].value!==Number.NEGATIVE_INFINITY&&!Object.is(0*r[4].value,-0))&&(s[4].value!==Number.NEGATIVE_INFINITY||r[4].value!==Number.POSITIVE_INFINITY&&!Object.is(0*r[4].value,0)))?Number.isFinite(s[4].value)?(r[4].value%s[4].value+s[4].value)%s[4].value:r[4].value:Number.NaN,Xe(e,r,a)}function ol(e,t,n){const r=t.value,s=n.value;return!L(r)||!Et(r,s)?-1:ft(e,Math.pow(r[4].value,s[4].value))}function il(e,t,n){const r=t.value;if(!re(r))return-1;const s=Ue(r,n.value);if(!Et(r,s))return-1;let a;return a=s[4].value===0?Number.NaN:Number.isFinite(r[4].value)?Number.isFinite(s[4].value)?r[4].value%s[4].value:r[4].value:Number.NaN,Xe(e,r,a)}function ll(e,t,n,r,s){const a=n.value;if(!re(a)||!s.rawPercentages&&X(a))return-1;const o=Ue(a,r.value);if(!Et(a,o))return-1;let i;if(o[4].value===0)i=Number.NaN;else if(Number.isFinite(a[4].value)||Number.isFinite(o[4].value))if(!Number.isFinite(a[4].value)&&Number.isFinite(o[4].value))i=a[4].value;else if(Number.isFinite(a[4].value)&&!Number.isFinite(o[4].value))switch(t){case"down":i=a[4].value<0?-1/0:Object.is(-0,0*a[4].value)?-0:0;break;case"up":i=a[4].value>0?1/0:Object.is(0,0*a[4].value)?0:-0;break;default:i=Object.is(0,0*a[4].value)?0:-0}else if(Number.isFinite(o[4].value))switch(t){case"down":i=Math.floor(a[4].value/o[4].value)*o[4].value;break;case"up":i=Math.ceil(a[4].value/o[4].value)*o[4].value;break;case"to-zero":i=Math.trunc(a[4].value/o[4].value)*o[4].value;break;default:{let l=Math.floor(a[4].value/o[4].value)*o[4].value,c=Math.ceil(a[4].value/o[4].value)*o[4].value;if(l>c){const p=l;l=c,c=p}const u=Math.abs(a[4].value-l),h=Math.abs(a[4].value-c);i=u===h?c:u<h?l:c;break}}else i=a[4].value;else i=Number.NaN;return Xe(e,a,i)}function cl(e,t,n){const r=t.value;return!re(r)||!n.rawPercentages&&X(r)?-1:ft(e,Math.sign(r[4].value))}function ul(e,t){const n=t.value;if(!or(n))return-1;let r=n[4].value;if(J(n))switch(Re(n[4].unit)){case"rad":break;case"deg":r=sr.get("rad")(n[4].value);break;case"grad":r=xn.get("rad")(n[4].value);break;case"turn":r=Fn.get("rad")(n[4].value);break;default:return-1}return r=Math.sin(r),ft(e,r)}function hl(e,t){const n=t.value;return L(n)?ft(e,Math.sqrt(n[4].value)):-1}function fl(e,t){const n=t.value;if(!or(n))return-1;const r=n[4].value;let s=0,a=n[4].value;if(J(n))switch(Re(n[4].unit)){case"rad":s=ra.get("deg")(r);break;case"deg":s=r,a=sr.get("rad")(r);break;case"grad":s=xn.get("deg")(r),a=xn.get("rad")(r);break;case"turn":s=Fn.get("deg")(r),a=Fn.get("rad")(r);break;default:return-1}const o=s/90;return a=s%90==0&&o%2!=0?o>0?1/0:-1/0:Math.tan(a),ft(e,a)}function pl(e){if(e.length!==2)return-1;const t=e[0].value;let n=e[1].value;if(L(t)&&L(n)){const r=t[4].value-n[4].value;return new T([g.Number,r.toString(),t[2],n[3],{value:r,type:t[4].type===F.Integer&&n[4].type===F.Integer?F.Integer:F.Number}])}if(X(t)&&X(n)){const r=t[4].value-n[4].value;return new T([g.Percentage,r.toString()+"%",t[2],n[3],{value:r}])}if(J(t)&&J(n)&&(n=Ue(t,n),Re(t[4].unit)===Re(n[4].unit))){const r=t[4].value-n[4].value;return new T([g.Dimension,r.toString()+t[4].unit,t[2],n[3],{value:r,type:t[4].type===F.Integer&&n[4].type===F.Integer?F.Integer:F.Number,unit:t[4].unit}])}return-1}function dl(e,t){if(t.length===1){const n=t[0];if(!n||!O(n))return-1;const r=n.value;return L(r)?ft(e,Math.log(r[4].value)):-1}if(t.length===2){const n=t[0];if(!n||!O(n))return-1;const r=n.value;if(!L(r))return-1;const s=t[1];if(!s||!O(s))return-1;const a=s.value;return L(a)?ft(e,Math.log(r[4].value)/Math.log(a[4].value)):-1}return-1}const ml=/^none$/i;function Vr(e){if(Array.isArray(e)){const n=e.filter(r=>!(He(r)&&ze(r)));return n.length===1&&Vr(n[0])}if(!O(e))return!1;const t=e.value;return!!ne(t)&&ml.test(t[4].value)}const gl=String.fromCodePoint(0);function vl(e,t,n,r,s,a){if(t.fixed===-1&&!a.randomCaching)return-1;a.randomCaching||(a.randomCaching={propertyName:"",propertyN:0,elementID:"",documentID:""}),a.randomCaching&&!a.randomCaching.propertyN&&(a.randomCaching.propertyN=0);const o=n.value;if(!re(o))return-1;const i=Ue(o,r.value);if(!Et(o,i))return-1;let l=null;if(s&&(l=Ue(o,s.value),!Et(o,l)))return-1;if(!Number.isFinite(o[4].value)||!Number.isFinite(i[4].value)||!Number.isFinite(i[4].value-o[4].value))return Xe(e,o,Number.NaN);if(l&&!Number.isFinite(l[4].value))return Xe(e,o,o[4].value);const c=t.fixed===-1?bl(wl([t.dashedIdent?t.dashedIdent:`${a.randomCaching?.propertyName} ${a.randomCaching.propertyN++}`,t.elementShared?"":a.randomCaching.elementID,a.randomCaching.documentID].join(gl))):()=>t.fixed;let u=o[4].value,h=i[4].value;if(u>h&&([u,h]=[h,u]),l&&(l[4].value<=0||Math.abs(u-h)/l[4].value>1e10)&&(l=null),l){const d=Math.max(l[4].value/1e3,1e-9),f=[u];let v=0;for(;;){v+=l[4].value;const b=u+v;if(!(b+d<h)){f.push(h);break}if(f.push(b),b+l[4].value-d>h)break}const $=c();return Xe(e,o,Number(f[Math.floor(f.length*$)].toFixed(5)))}const p=c();return Xe(e,o,Number((p*(h-u)+u).toFixed(5)))}function bl(e=.34944106645296036,t=.19228640875738723,n=.8784393832007205,r=.04850964319275053){return()=>{const s=((e|=0)+(t|=0)|0)+(r|=0)|0;return r=r+1|0,e=t^t>>>9,t=(n|=0)+(n<<3)|0,n=(n=n<<21|n>>>11)+s|0,(s>>>0)/4294967296}}function wl(e){let t=0,n=0,r=0;t^=-1;for(let s=0,a=e.length;s<a;s++)r=255&(t^e.charCodeAt(s)),n=+("0x"+"00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 0EDB8832 79DCB8A4 E0D5E91E 97D2D988 09B64C2B 7EB17CBD E7B82D07 90BF1D91 1DB71064 6AB020F2 F3B97148 84BE41DE 1ADAD47D 6DDDE4EB F4D4B551 83D385C7 136C9856 646BA8C0 FD62F97A 8A65C9EC 14015C4F 63066CD9 FA0F3D63 8D080DF5 3B6E20C8 4C69105E D56041E4 A2677172 3C03E4D1 4B04D447 D20D85FD A50AB56B 35B5A8FA 42B2986C DBBBC9D6 ACBCF940 32D86CE3 45DF5C75 DCD60DCF ABD13D59 26D930AC 51DE003A C8D75180 BFD06116 21B4F4B5 56B3C423 CFBA9599 B8BDA50F 2802B89E 5F058808 C60CD9B2 B10BE924 2F6F7C87 58684C11 C1611DAB B6662D3D 76DC4190 01DB7106 98D220BC EFD5102A 71B18589 06B6B51F 9FBFE4A5 E8B8D433 7807C9A2 0F00F934 9609A88E E10E9818 7F6A0DBB 086D3D2D 91646C97 E6635C01 6B6B51F4 1C6C6162 856530D8 F262004E 6C0695ED 1B01A57B 8208F4C1 F50FC457 65B0D9C6 12B7E950 8BBEB8EA FCB9887C 62DD1DDF 15DA2D49 8CD37CF3 FBD44C65 4DB26158 3AB551CE A3BC0074 D4BB30E2 4ADFA541 3DD895D7 A4D1C46D D3D6F4FB 4369E96A 346ED9FC AD678846 DA60B8D0 44042D73 33031DE5 AA0A4C5F DD0D7CC9 5005713C 270241AA BE0B1010 C90C2086 5768B525 206F85B3 B966D409 CE61E49F 5EDEF90E 29D9C998 B0D09822 C7D7A8B4 59B33D17 2EB40D81 B7BD5C3B C0BA6CAD EDB88320 9ABFB3B6 03B6E20C 74B1D29A EAD54739 9DD277AF 04DB2615 73DC1683 E3630B12 94643B84 0D6D6A3E 7A6A5AA8 E40ECF0B 9309FF9D 0A00AE27 7D079EB1 F00F9344 8708A3D2 1E01F268 6906C2FE F762575D 806567CB 196C3671 6E6B06E7 FED41B76 89D32BE0 10DA7A5A 67DD4ACC F9B9DF6F 8EBEEFF9 17B7BE43 60B08ED5 D6D6A3E8 A1D1937E 38D8C2C4 4FDFF252 D1BB67F1 A6BC5767 3FB506DD 48B2364B D80D2BDA AF0A1B4C 36034AF6 41047A60 DF60EFC3 A867DF55 316E8EEF 4669BE79 CB61B38C BC66831A 256FD2A0 5268E236 CC0C7795 BB0B4703 220216B9 5505262F C5BA3BBE B2BD0B28 2BB45A92 5CB36A04 C2D7FFA7 B5D0CF31 2CD99E8B 5BDEAE1D 9B64C2B0 EC63F226 756AA39C 026D930A 9C0906A9 EB0E363F 72076785 05005713 95BF4A82 E2B87A14 7BB12BAE 0CB61B38 92D28E9B E5D5BE0D 7CDCEFB7 0BDBDF21 86D3D2D4 F1D4E242 68DDB3F8 1FDA836E 81BE16CD F6B9265B 6FB077E1 18B74777 88085AE6 FF0F6A70 66063BCA 11010B5C 8F659EFF F862AE69 616BFFD3 166CCF45 A00AE278 D70DD2EE 4E048354 3903B3C2 A7672661 D06016F7 4969474D 3E6E77DB AED16A4A D9D65ADC 40DF0B66 37D83BF0 A9BCAE53 DEBB9EC5 47B2CF7F 30B5FFE9 BDBDF21C CABAC28A 53B39330 24B4A3A6 BAD03605 CDD70693 54DE5729 23D967BF B3667A2E C4614AB8 5D681B02 2A6F2B94 B40BBE37 C30C8EA1 5A05DF1B 2D02EF8D".substring(9*r,9*r+8)),t=t>>>8^n;return(-1^t)>>>0}const jr=new Map([["abs",function(e,t,n){return pt(e,t,n,el)}],["acos",function(e,t,n){return pt(e,t,n,Ki)}],["asin",function(e,t,n){return pt(e,t,n,Zi)}],["atan",function(e,t,n){return pt(e,t,n,Ji)}],["atan2",function(e,t,n){return ir(e,t,n,Qi)}],["calc",Se],["clamp",function(e,t,n){const r=Jt([...e.value.filter(f=>!yt(f))],t),s=[],a=[],o=[];{let f=s;for(let v=0;v<r.length;v++){const $=r[v];if(O($)&&tt($.value)){if(f===o)return-1;if(f===a){f=o;continue}if(f===s){f=a;continue}return-1}f.push($)}}const i=Vr(s),l=Vr(o);if(i&&l)return Se(Ge(a),t,n);const c=Oe(Se(Ge(a),t,n));if(c===-1)return-1;if(i){const f=Oe(Se(Ge(o),t,n));return f===-1?-1:oa((u=c,h=f,new Me([g.Function,"min(",-1,-1,{value:"min"}],[g.CloseParen,")",-1,-1,void 0],[u,new T([g.Comma,",",-1,-1,void 0]),h])),[c,f],n)}if(l){const f=Oe(Se(Ge(s),t,n));return f===-1?-1:aa(Cl(f,c),[f,c],n)}var u,h;const p=Oe(Se(Ge(s),t,n));if(p===-1)return-1;const d=Oe(Se(Ge(o),t,n));return d===-1?-1:tl(e,p,c,d,n)}],["cos",function(e,t,n){return pt(e,t,n,nl)}],["exp",function(e,t,n){return pt(e,t,n,rl)}],["hypot",function(e,t,n){return lr(e,e.value,t,n,sl)}],["log",function(e,t,n){return lr(e,e.value,t,n,dl)}],["max",function(e,t,n){return lr(e,e.value,t,n,aa)}],["min",function(e,t,n){return lr(e,e.value,t,n,oa)}],["mod",function(e,t,n){return ir(e,t,n,al)}],["pow",function(e,t,n){return ir(e,t,n,ol)}],["random",function(e,t,n){const r=El(e.value.filter(u=>!yt(u)),t,n);if(r===-1)return-1;const[s,a]=r,o=ia(a,t,n);if(o===-1)return-1;const[i,l,c]=o;return!i||!l?-1:vl(e,s,i,l,c,n)}],["rem",function(e,t,n){return ir(e,t,n,il)}],["round",function(e,t,n){const r=Jt([...e.value.filter(u=>!yt(u))],t);let s="",a=!1;const o=[],i=[];{let u=o;for(let h=0;h<r.length;h++){const p=r[h];if(!s&&o.length===0&&i.length===0&&O(p)&&ne(p.value)){const d=p.value[4].value.toLowerCase();if(yl.has(d)){s=d;continue}}if(O(p)&&tt(p.value)){if(u===i)return-1;if(u===o&&s&&o.length===0)continue;if(u===o){a=!0,u=i;continue}return-1}u.push(p)}}const l=Oe(Se(Ge(o),t,n));if(l===-1)return-1;a||i.length!==0||i.push(new T([g.Number,"1",-1,-1,{value:1,type:F.Integer}]));const c=Oe(Se(Ge(i),t,n));return c===-1?-1:(s||(s="nearest"),ll(e,s,l,c,n))}],["sign",function(e,t,n){return pt(e,t,n,cl)}],["sin",function(e,t,n){return pt(e,t,n,ul)}],["sqrt",function(e,t,n){return pt(e,t,n,hl)}],["tan",function(e,t,n){return pt(e,t,n,fl)}]]);function Se(e,t,n){const r=Jt([...e.value.filter(a=>!yt(a))],t);if(r.length===1&&O(r[0]))return{inputs:[r[0]],operation:ar};let s=0;for(;s<r.length;){const a=r[s];if(Di(a)&&Zs(a.startToken)){const o=Se(a,t,n);if(o===-1)return-1;r.splice(s,1,o);continue}if(Be(a)){const o=jr.get(a.getName().toLowerCase());if(!o)return-1;const i=o(a,t,n);if(i===-1)return-1;r.splice(s,1,i);continue}s++}if(s=0,r.length===1&&Tt(r[0]))return r[0];for(;s<r.length;){const a=r[s];if(!a||!O(a)&&!Tt(a)){s++;continue}const o=r[s+1];if(!o||!O(o)){s++;continue}const i=o.value;if(!Cn(i)||i[4].value!=="*"&&i[4].value!=="/"){s++;continue}const l=r[s+2];if(!l||!O(l)&&!Tt(l))return-1;i[4].value!=="*"?i[4].value!=="/"?s++:r.splice(s,3,{inputs:[a,l],operation:qi}):r.splice(s,3,{inputs:[a,l],operation:Yi})}if(s=0,r.length===1&&Tt(r[0]))return r[0];for(;s<r.length;){const a=r[s];if(!a||!O(a)&&!Tt(a)){s++;continue}const o=r[s+1];if(!o||!O(o)){s++;continue}const i=o.value;if(!Cn(i)||i[4].value!=="+"&&i[4].value!=="-"){s++;continue}const l=r[s+2];if(!l||!O(l)&&!Tt(l))return-1;i[4].value!=="+"?i[4].value!=="-"?s++:r.splice(s,3,{inputs:[a,l],operation:pl}):r.splice(s,3,{inputs:[a,l],operation:ji})}return r.length===1&&Tt(r[0])?r[0]:-1}function pt(e,t,n,r){const s=$l(e.value,t,n);return s===-1?-1:r(e,s,n)}function $l(e,t,n){const r=Oe(Se(Ge(Jt([...e.filter(s=>!yt(s))],t)),t,n));return r===-1?-1:r}function ir(e,t,n,r){const s=Nl(e.value,t,n);if(s===-1)return-1;const[a,o]=s;return r(e,a,o,n)}function Nl(e,t,n){const r=Jt([...e.filter(l=>!yt(l))],t),s=[],a=[];{let l=s;for(let c=0;c<r.length;c++){const u=r[c];if(O(u)&&tt(u.value)){if(l===a)return-1;if(l===s){l=a;continue}return-1}l.push(u)}}const o=Oe(Se(Ge(s),t,n));if(o===-1)return-1;const i=Oe(Se(Ge(a),t,n));return i===-1?-1:[o,i]}function lr(e,t,n,r,s){const a=ia(e.value,n,r);return a===-1?-1:s(e,a,r)}function ia(e,t,n){const r=Jt([...e.filter(a=>!yt(a))],t),s=[];{const a=[];let o=[];for(let i=0;i<r.length;i++){const l=r[i];O(l)&&tt(l.value)?(a.push(o),o=[]):o.push(l)}a.push(o);for(let i=0;i<a.length;i++){if(a[i].length===0)return-1;const l=Oe(Se(Ge(a[i]),t,n));if(l===-1)return-1;s.push(l)}}return s}const yl=new Set(["nearest","up","down","to-zero"]);function El(e,t,n){const r={isAuto:!1,dashedIdent:"",fixed:-1,elementShared:!1},s=e[0];if(!O(s)||!ne(s.value))return[r,e];for(let a=0;a<e.length;a++){const o=e[a];if(!O(o))return-1;if(tt(o.value))return[r,e.slice(a+1)];if(!ne(o.value))return-1;const i=o.value[4].value.toLowerCase();if(i!=="element-shared"){if(i==="fixed"){if(r.elementShared||r.dashedIdent||r.isAuto)return-1;a++;const l=e[a];if(!l)return-1;const c=Oe(Se(Ge([l]),t,n));if(c===-1||!L(c.value)||c.value[4].value<0||c.value[4].value>1)return-1;r.fixed=Math.max(0,Math.min(c.value[4].value,1-1e-9));continue}if(i!=="auto"){if(i.startsWith("--")){if(r.fixed!==-1||r.isAuto)return-1;r.dashedIdent=i}}else{if(r.fixed!==-1||r.dashedIdent)return-1;r.isAuto=!0}}else{if(r.fixed!==-1)return-1;r.elementShared=!0}}return-1}function Ge(e){return new Me([g.Function,"calc(",-1,-1,{value:"calc"}],[g.CloseParen,")",-1,-1,void 0],e)}function Cl(e,t){return new Me([g.Function,"max(",-1,-1,{value:"max"}],[g.CloseParen,")",-1,-1,void 0],[e,new T([g.Comma,",",-1,-1,void 0]),t])}function xl(e){if(e===-1)return-1;if(Be(e))return e;const t=e.value;return re(t)&&Number.isNaN(t[4].value)?L(t)?new Me([g.Function,"calc(",t[2],t[3],{value:"calc"}],[g.CloseParen,")",t[2],t[3],void 0],[new T([g.Ident,"NaN",t[2],t[3],{value:"NaN"}])]):J(t)?new Me([g.Function,"calc(",t[2],t[3],{value:"calc"}],[g.CloseParen,")",t[2],t[3],void 0],[new T([g.Ident,"NaN",t[2],t[3],{value:"NaN"}]),new je([[g.Whitespace," ",t[2],t[3],void 0]]),new T([g.Delim,"*",t[2],t[3],{value:"*"}]),new je([[g.Whitespace," ",t[2],t[3],void 0]]),new T([g.Dimension,"1"+t[4].unit,t[2],t[3],{value:1,type:F.Integer,unit:t[4].unit}])]):X(t)?new Me([g.Function,"calc(",t[2],t[3],{value:"calc"}],[g.CloseParen,")",t[2],t[3],void 0],[new T([g.Ident,"NaN",t[2],t[3],{value:"NaN"}]),new je([[g.Whitespace," ",t[2],t[3],void 0]]),new T([g.Delim,"*",t[2],t[3],{value:"*"}]),new je([[g.Whitespace," ",t[2],t[3],void 0]]),new T([g.Percentage,"1%",t[2],t[3],{value:1}])]):-1:e}function Fl(e){if(e===-1)return-1;if(Be(e))return e;const t=e.value;if(!re(t)||Number.isFinite(t[4].value)||Number.isNaN(t[4].value))return e;let n="";return Number.NEGATIVE_INFINITY===t[4].value&&(n="-"),L(t)?new Me([g.Function,"calc(",t[2],t[3],{value:"calc"}],[g.CloseParen,")",t[2],t[3],void 0],[new T([g.Ident,n+"infinity",t[2],t[3],{value:n+"infinity"}])]):J(t)?new Me([g.Function,"calc(",t[2],t[3],{value:"calc"}],[g.CloseParen,")",t[2],t[3],void 0],[new T([g.Ident,n+"infinity",t[2],t[3],{value:n+"infinity"}]),new je([[g.Whitespace," ",t[2],t[3],void 0]]),new T([g.Delim,"*",t[2],t[3],{value:"*"}]),new je([[g.Whitespace," ",t[2],t[3],void 0]]),new T([g.Dimension,"1"+t[4].unit,t[2],t[3],{value:1,type:F.Integer,unit:t[4].unit}])]):new Me([g.Function,"calc(",t[2],t[3],{value:"calc"}],[g.CloseParen,")",t[2],t[3],void 0],[new T([g.Ident,n+"infinity",t[2],t[3],{value:n+"infinity"}]),new je([[g.Whitespace," ",t[2],t[3],void 0]]),new T([g.Delim,"*",t[2],t[3],{value:"*"}]),new je([[g.Whitespace," ",t[2],t[3],void 0]]),new T([g.Percentage,"1%",t[2],t[3],{value:1}])])}function Sl(e){if(e===-1)return-1;if(Be(e))return e;const t=e.value;return re(t)&&Object.is(-0,t[4].value)&&(t[1]==="-0"||(X(t)?t[1]="-0%":J(t)?t[1]="-0"+t[4].unit:t[1]="-0")),e}function kl(e,t=13){if(e===-1)return-1;if(t<=0||Be(e))return e;const n=e.value;if(!re(n)||Number.isInteger(n[4].value))return e;const r=Number(n[4].value.toFixed(t)).toString();return L(n)?n[1]=r:X(n)?n[1]=r+"%":J(n)&&(n[1]=r+n[4].unit),e}function Al(e){return e===-1?-1:(Be(e)||J(e.value)&&(e.value=Vi(e.value)),e)}function Pl(e,t){let n=e;return t?.toCanonicalUnits&&(n=Al(n)),n=kl(n,t?.precision),n=Sl(n),t?.censorIntoStandardRepresentableValues||(n=xl(n),n=Fl(n)),n}function Dl(e){const t=new Map;if(!e)return t;for(const[n,r]of e)if(zr(r))t.set(n,r);else if(typeof r=="string"){const s=qs({css:r}),a=s.nextToken();if(s.nextToken(),!s.endOfFile()||!re(a))continue;t.set(n,a);continue}return t}function ke(e,t){return Qt(ki(Nt({css:e}),{}),t).map(n=>n.map(r=>$t(...r.tokens())).join("")).join(",")}function Qt(e,t){const n=Dl(t?.globals);return na(e,r=>{if(!Be(r))return;const s=jr.get(r.getName().toLowerCase());if(!s)return;const a=Pl(Oe(s(r,n,t??{})),t);return a!==-1?a:void 0})}const kn=new Set(jr.keys()),Ml=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,la=new Set,qr=typeof process=="object"&&process?process:{},ca=(e,t,n,r)=>{typeof qr.emitWarning=="function"?qr.emitWarning(e,t,n,r):console.error(`[${n}] ${t}: ${e}`)};let cr=globalThis.AbortController,ua=globalThis.AbortSignal;if(typeof cr>"u"){ua=class{onabort;_onabort=[];reason;aborted=!1;addEventListener(n,r){this._onabort.push(r)}},cr=class{constructor(){t()}signal=new ua;abort(n){if(!this.signal.aborted){this.signal.reason=n,this.signal.aborted=!0;for(const r of this.signal._onabort)r(n);this.signal.onabort?.(n)}}};let e=qr.env?.LRU_CACHE_IGNORE_AC_WARNING!=="1";const t=()=>{e&&(e=!1,ca("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",t))}}const Bl=e=>!la.has(e),Dt=e=>e&&e===Math.floor(e)&&e>0&&isFinite(e),ha=e=>Dt(e)?e<=Math.pow(2,8)?Uint8Array:e<=Math.pow(2,16)?Uint16Array:e<=Math.pow(2,32)?Uint32Array:e<=Number.MAX_SAFE_INTEGER?ur:null:null;class ur extends Array{constructor(t){super(t),this.fill(0)}}class $n{heap;length;static#s=!1;static create(t){const n=ha(t);if(!n)return[];$n.#s=!0;const r=new $n(t,n);return $n.#s=!1,r}constructor(t,n){if(!$n.#s)throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new n(t),this.length=0}push(t){this.heap[this.length++]=t}pop(){return this.heap[--this.length]}}class Vs{#s;#l;#d;#g;#m;#y;#v;#p;get perf(){return this.#p}ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;#a;#c;#n;#t;#e;#o;#u;#i;#h;#E;#f;#C;#x;#w;#$;#F;#D;#b;#O;static unsafeExposeInternals(t){return{starts:t.#x,ttls:t.#w,autopurgeTimers:t.#$,sizes:t.#C,keyMap:t.#n,keyList:t.#t,valList:t.#e,next:t.#o,prev:t.#u,get head(){return t.#i},get tail(){return t.#h},free:t.#E,isBackgroundFetch:n=>t.#r(n),backgroundFetch:(n,r,s,a)=>t.#T(n,r,s,a),moveToTail:n=>t.#R(n),indexes:n=>t.#S(n),rindexes:n=>t.#k(n),isStale:n=>t.#N(n)}}get max(){return this.#s}get maxSize(){return this.#l}get calculatedSize(){return this.#c}get size(){return this.#a}get fetchMethod(){return this.#y}get memoMethod(){return this.#v}get dispose(){return this.#d}get onInsert(){return this.#g}get disposeAfter(){return this.#m}constructor(t){const{max:n=0,ttl:r,ttlResolution:s=1,ttlAutopurge:a,updateAgeOnGet:o,updateAgeOnHas:i,allowStale:l,dispose:c,onInsert:u,disposeAfter:h,noDisposeOnSet:p,noUpdateTTL:d,maxSize:f=0,maxEntrySize:v=0,sizeCalculation:$,fetchMethod:b,memoMethod:N,noDeleteOnFetchRejection:E,noDeleteOnStaleGet:y,allowStaleOnFetchRejection:_,allowStaleOnFetchAbort:A,ignoreFetchAbort:D,perf:k}=t;if(k!==void 0&&typeof k?.now!="function")throw new TypeError("perf option must have a now() method if specified");if(this.#p=k??Ml,n!==0&&!Dt(n))throw new TypeError("max option must be a nonnegative integer");const B=n?ha(n):Array;if(!B)throw new Error("invalid max value: "+n);if(this.#s=n,this.#l=f,this.maxEntrySize=v||this.#l,this.sizeCalculation=$,this.sizeCalculation){if(!this.#l&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if(typeof this.sizeCalculation!="function")throw new TypeError("sizeCalculation set to non-function")}if(N!==void 0&&typeof N!="function")throw new TypeError("memoMethod must be a function if defined");if(this.#v=N,b!==void 0&&typeof b!="function")throw new TypeError("fetchMethod must be a function if specified");if(this.#y=b,this.#D=!!b,this.#n=new Map,this.#t=new Array(n).fill(void 0),this.#e=new Array(n).fill(void 0),this.#o=new B(n),this.#u=new B(n),this.#i=0,this.#h=0,this.#E=$n.create(n),this.#a=0,this.#c=0,typeof c=="function"&&(this.#d=c),typeof u=="function"&&(this.#g=u),typeof h=="function"?(this.#m=h,this.#f=[]):(this.#m=void 0,this.#f=void 0),this.#F=!!this.#d,this.#O=!!this.#g,this.#b=!!this.#m,this.noDisposeOnSet=!!p,this.noUpdateTTL=!!d,this.noDeleteOnFetchRejection=!!E,this.allowStaleOnFetchRejection=!!_,this.allowStaleOnFetchAbort=!!A,this.ignoreFetchAbort=!!D,this.maxEntrySize!==0){if(this.#l!==0&&!Dt(this.#l))throw new TypeError("maxSize must be a positive integer if specified");if(!Dt(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#V()}if(this.allowStale=!!l,this.noDeleteOnStaleGet=!!y,this.updateAgeOnGet=!!o,this.updateAgeOnHas=!!i,this.ttlResolution=Dt(s)||s===0?s:1,this.ttlAutopurge=!!a,this.ttl=r||0,this.ttl){if(!Dt(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.#_()}if(this.#s===0&&this.ttl===0&&this.#l===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!this.#s&&!this.#l){const W="LRU_CACHE_UNBOUNDED";Bl(W)&&(la.add(W),ca("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",W,Vs))}}getRemainingTTL(t){return this.#n.has(t)?1/0:0}#_(){const t=new ur(this.#s),n=new ur(this.#s);this.#w=t,this.#x=n;const r=this.ttlAutopurge?new Array(this.#s):void 0;this.#$=r,this.#W=(o,i,l=this.#p.now())=>{if(n[o]=i!==0?l:0,t[o]=i,r?.[o]&&(clearTimeout(r[o]),r[o]=void 0),i!==0&&r){const c=setTimeout(()=>{this.#N(o)&&this.#A(this.#t[o],"expire")},i+1);c.unref&&c.unref(),r[o]=c}},this.#M=o=>{n[o]=t[o]!==0?this.#p.now():0},this.#P=(o,i)=>{if(t[i]){const l=t[i],c=n[i];if(!l||!c)return;o.ttl=l,o.start=c,o.now=s||a();const u=o.now-c;o.remainingTTL=l-u}};let s=0;const a=()=>{const o=this.#p.now();if(this.ttlResolution>0){s=o;const i=setTimeout(()=>s=0,this.ttlResolution);i.unref&&i.unref()}return o};this.getRemainingTTL=o=>{const i=this.#n.get(o);if(i===void 0)return 0;const l=t[i],c=n[i];if(!l||!c)return 1/0;const u=(s||a())-c;return l-u},this.#N=o=>{const i=n[o],l=t[o];return!!l&&!!i&&(s||a())-i>l}}#M=()=>{};#P=()=>{};#W=()=>{};#N=()=>!1;#V(){const t=new ur(this.#s);this.#c=0,this.#C=t,this.#B=n=>{this.#c-=t[n],t[n]=0},this.#H=(n,r,s,a)=>{if(this.#r(r))return 0;if(!Dt(s))if(a){if(typeof a!="function")throw new TypeError("sizeCalculation must be a function");if(s=a(r,n),!Dt(s))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");return s},this.#I=(n,r,s)=>{if(t[n]=r,this.#l){const a=this.#l-t[n];for(;this.#c>a;)this.#L(!0)}this.#c+=t[n],s&&(s.entrySize=r,s.totalCalculatedSize=this.#c)}}#B=t=>{};#I=(t,n,r)=>{};#H=(t,n,r,s)=>{if(r||s)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0};*#S({allowStale:t=this.allowStale}={}){if(this.#a)for(let n=this.#h;!(!this.#z(n)||((t||!this.#N(n))&&(yield n),n===this.#i));)n=this.#u[n]}*#k({allowStale:t=this.allowStale}={}){if(this.#a)for(let n=this.#i;!(!this.#z(n)||((t||!this.#N(n))&&(yield n),n===this.#h));)n=this.#o[n]}#z(t){return t!==void 0&&this.#n.get(this.#t[t])===t}*entries(){for(const t of this.#S())this.#e[t]!==void 0&&this.#t[t]!==void 0&&!this.#r(this.#e[t])&&(yield[this.#t[t],this.#e[t]])}*rentries(){for(const t of this.#k())this.#e[t]!==void 0&&this.#t[t]!==void 0&&!this.#r(this.#e[t])&&(yield[this.#t[t],this.#e[t]])}*keys(){for(const t of this.#S()){const n=this.#t[t];n!==void 0&&!this.#r(this.#e[t])&&(yield n)}}*rkeys(){for(const t of this.#k()){const n=this.#t[t];n!==void 0&&!this.#r(this.#e[t])&&(yield n)}}*values(){for(const t of this.#S())this.#e[t]!==void 0&&!this.#r(this.#e[t])&&(yield this.#e[t])}*rvalues(){for(const t of this.#k())this.#e[t]!==void 0&&!this.#r(this.#e[t])&&(yield this.#e[t])}[Symbol.iterator](){return this.entries()}[Symbol.toStringTag]="LRUCache";find(t,n={}){for(const r of this.#S()){const s=this.#e[r],a=this.#r(s)?s.__staleWhileFetching:s;if(a!==void 0&&t(a,this.#t[r],this))return this.get(this.#t[r],n)}}forEach(t,n=this){for(const r of this.#S()){const s=this.#e[r],a=this.#r(s)?s.__staleWhileFetching:s;a!==void 0&&t.call(n,a,this.#t[r],this)}}rforEach(t,n=this){for(const r of this.#k()){const s=this.#e[r],a=this.#r(s)?s.__staleWhileFetching:s;a!==void 0&&t.call(n,a,this.#t[r],this)}}purgeStale(){let t=!1;for(const n of this.#k({allowStale:!0}))this.#N(n)&&(this.#A(this.#t[n],"expire"),t=!0);return t}info(t){const n=this.#n.get(t);if(n===void 0)return;const r=this.#e[n],s=this.#r(r)?r.__staleWhileFetching:r;if(s===void 0)return;const a={value:s};if(this.#w&&this.#x){const o=this.#w[n],i=this.#x[n];if(o&&i){const l=o-(this.#p.now()-i);a.ttl=l,a.start=Date.now()}}return this.#C&&(a.size=this.#C[n]),a}dump(){const t=[];for(const n of this.#S({allowStale:!0})){const r=this.#t[n],s=this.#e[n],a=this.#r(s)?s.__staleWhileFetching:s;if(a===void 0||r===void 0)continue;const o={value:a};if(this.#w&&this.#x){o.ttl=this.#w[n];const i=this.#p.now()-this.#x[n];o.start=Math.floor(Date.now()-i)}this.#C&&(o.size=this.#C[n]),t.unshift([r,o])}return t}load(t){this.clear();for(const[n,r]of t){if(r.start){const s=Date.now()-r.start;r.start=this.#p.now()-s}this.set(n,r.value,r)}}set(t,n,r={}){if(n===void 0)return this.delete(t),this;const{ttl:s=this.ttl,start:a,noDisposeOnSet:o=this.noDisposeOnSet,sizeCalculation:i=this.sizeCalculation,status:l}=r;let{noUpdateTTL:c=this.noUpdateTTL}=r;const u=this.#H(t,n,r.size||0,i);if(this.maxEntrySize&&u>this.maxEntrySize)return l&&(l.set="miss",l.maxEntrySizeExceeded=!0),this.#A(t,"set"),this;let h=this.#a===0?void 0:this.#n.get(t);if(h===void 0)h=this.#a===0?this.#h:this.#E.length!==0?this.#E.pop():this.#a===this.#s?this.#L(!1):this.#a,this.#t[h]=t,this.#e[h]=n,this.#n.set(t,h),this.#o[this.#h]=h,this.#u[h]=this.#h,this.#h=h,this.#a++,this.#I(h,u,l),l&&(l.set="add"),c=!1,this.#O&&this.#g?.(n,t,"add");else{this.#R(h);const p=this.#e[h];if(n!==p){if(this.#D&&this.#r(p)){p.__abortController.abort(new Error("replaced"));const{__staleWhileFetching:d}=p;d!==void 0&&!o&&(this.#F&&this.#d?.(d,t,"set"),this.#b&&this.#f?.push([d,t,"set"]))}else o||(this.#F&&this.#d?.(p,t,"set"),this.#b&&this.#f?.push([p,t,"set"]));if(this.#B(h),this.#I(h,u,l),this.#e[h]=n,l){l.set="replace";const d=p&&this.#r(p)?p.__staleWhileFetching:p;d!==void 0&&(l.oldValue=d)}}else l&&(l.set="update");this.#O&&this.onInsert?.(n,t,n===p?"update":"replace")}if(s!==0&&!this.#w&&this.#_(),this.#w&&(c||this.#W(h,s,a),l&&this.#P(l,h)),!o&&this.#b&&this.#f){const p=this.#f;let d;for(;d=p?.shift();)this.#m?.(...d)}return this}pop(){try{for(;this.#a;){const t=this.#e[this.#i];if(this.#L(!0),this.#r(t)){if(t.__staleWhileFetching)return t.__staleWhileFetching}else if(t!==void 0)return t}}finally{if(this.#b&&this.#f){const t=this.#f;let n;for(;n=t?.shift();)this.#m?.(...n)}}}#L(t){const n=this.#i,r=this.#t[n],s=this.#e[n];return this.#D&&this.#r(s)?s.__abortController.abort(new Error("evicted")):(this.#F||this.#b)&&(this.#F&&this.#d?.(s,r,"evict"),this.#b&&this.#f?.push([s,r,"evict"])),this.#B(n),this.#$?.[n]&&(clearTimeout(this.#$[n]),this.#$[n]=void 0),t&&(this.#t[n]=void 0,this.#e[n]=void 0,this.#E.push(n)),this.#a===1?(this.#i=this.#h=0,this.#E.length=0):this.#i=this.#o[n],this.#n.delete(r),this.#a--,n}has(t,n={}){const{updateAgeOnHas:r=this.updateAgeOnHas,status:s}=n,a=this.#n.get(t);if(a!==void 0){const o=this.#e[a];if(this.#r(o)&&o.__staleWhileFetching===void 0)return!1;if(this.#N(a))s&&(s.has="stale",this.#P(s,a));else return r&&this.#M(a),s&&(s.has="hit",this.#P(s,a)),!0}else s&&(s.has="miss");return!1}peek(t,n={}){const{allowStale:r=this.allowStale}=n,s=this.#n.get(t);if(s===void 0||!r&&this.#N(s))return;const a=this.#e[s];return this.#r(a)?a.__staleWhileFetching:a}#T(t,n,r,s){const a=n===void 0?void 0:this.#e[n];if(this.#r(a))return a;const o=new cr,{signal:i}=r;i?.addEventListener("abort",()=>o.abort(i.reason),{signal:o.signal});const l={signal:o.signal,options:r,context:s},c=(v,$=!1)=>{const{aborted:b}=o.signal,N=r.ignoreFetchAbort&&v!==void 0,E=r.ignoreFetchAbort||!!(r.allowStaleOnFetchAbort&&v!==void 0);if(r.status&&(b&&!$?(r.status.fetchAborted=!0,r.status.fetchError=o.signal.reason,N&&(r.status.fetchAbortIgnored=!0)):r.status.fetchResolved=!0),b&&!N&&!$)return h(o.signal.reason,E);const y=d,_=this.#e[n];return(_===d||N&&$&&_===void 0)&&(v===void 0?y.__staleWhileFetching!==void 0?this.#e[n]=y.__staleWhileFetching:this.#A(t,"fetch"):(r.status&&(r.status.fetchUpdated=!0),this.set(t,v,l.options))),v},u=v=>(r.status&&(r.status.fetchRejected=!0,r.status.fetchError=v),h(v,!1)),h=(v,$)=>{const{aborted:b}=o.signal,N=b&&r.allowStaleOnFetchAbort,E=N||r.allowStaleOnFetchRejection,y=E||r.noDeleteOnFetchRejection,_=d;if(this.#e[n]===d&&(!y||!$&&_.__staleWhileFetching===void 0?this.#A(t,"fetch"):N||(this.#e[n]=_.__staleWhileFetching)),E)return r.status&&_.__staleWhileFetching!==void 0&&(r.status.returnedStale=!0),_.__staleWhileFetching;if(_.__returned===_)throw v},p=(v,$)=>{const b=this.#y?.(t,a,l);b&&b instanceof Promise&&b.then(N=>v(N===void 0?void 0:N),$),o.signal.addEventListener("abort",()=>{(!r.ignoreFetchAbort||r.allowStaleOnFetchAbort)&&(v(void 0),r.allowStaleOnFetchAbort&&(v=N=>c(N,!0)))})};r.status&&(r.status.fetchDispatched=!0);const d=new Promise(p).then(c,u),f=Object.assign(d,{__abortController:o,__staleWhileFetching:a,__returned:void 0});return n===void 0?(this.set(t,f,{...l.options,status:void 0}),n=this.#n.get(t)):this.#e[n]=f,f}#r(t){if(!this.#D)return!1;const n=t;return!!n&&n instanceof Promise&&n.hasOwnProperty("__staleWhileFetching")&&n.__abortController instanceof cr}async fetch(t,n={}){const{allowStale:r=this.allowStale,updateAgeOnGet:s=this.updateAgeOnGet,noDeleteOnStaleGet:a=this.noDeleteOnStaleGet,ttl:o=this.ttl,noDisposeOnSet:i=this.noDisposeOnSet,size:l=0,sizeCalculation:c=this.sizeCalculation,noUpdateTTL:u=this.noUpdateTTL,noDeleteOnFetchRejection:h=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:p=this.allowStaleOnFetchRejection,ignoreFetchAbort:d=this.ignoreFetchAbort,allowStaleOnFetchAbort:f=this.allowStaleOnFetchAbort,context:v,forceRefresh:$=!1,status:b,signal:N}=n;if(!this.#D)return b&&(b.fetch="get"),this.get(t,{allowStale:r,updateAgeOnGet:s,noDeleteOnStaleGet:a,status:b});const E={allowStale:r,updateAgeOnGet:s,noDeleteOnStaleGet:a,ttl:o,noDisposeOnSet:i,size:l,sizeCalculation:c,noUpdateTTL:u,noDeleteOnFetchRejection:h,allowStaleOnFetchRejection:p,allowStaleOnFetchAbort:f,ignoreFetchAbort:d,status:b,signal:N};let y=this.#n.get(t);if(y===void 0){b&&(b.fetch="miss");const _=this.#T(t,y,E,v);return _.__returned=_}else{const _=this.#e[y];if(this.#r(_)){const B=r&&_.__staleWhileFetching!==void 0;return b&&(b.fetch="inflight",B&&(b.returnedStale=!0)),B?_.__staleWhileFetching:_.__returned=_}const A=this.#N(y);if(!$&&!A)return b&&(b.fetch="hit"),this.#R(y),s&&this.#M(y),b&&this.#P(b,y),_;const D=this.#T(t,y,E,v),k=D.__staleWhileFetching!==void 0&&r;return b&&(b.fetch=A?"stale":"refresh",k&&A&&(b.returnedStale=!0)),k?D.__staleWhileFetching:D.__returned=D}}async forceFetch(t,n={}){const r=await this.fetch(t,n);if(r===void 0)throw new Error("fetch() returned undefined");return r}memo(t,n={}){const r=this.#v;if(!r)throw new Error("no memoMethod provided to constructor");const{context:s,forceRefresh:a,...o}=n,i=this.get(t,o);if(!a&&i!==void 0)return i;const l=r(t,i,{options:o,context:s});return this.set(t,l,o),l}get(t,n={}){const{allowStale:r=this.allowStale,updateAgeOnGet:s=this.updateAgeOnGet,noDeleteOnStaleGet:a=this.noDeleteOnStaleGet,status:o}=n,i=this.#n.get(t);if(i!==void 0){const l=this.#e[i],c=this.#r(l);return o&&this.#P(o,i),this.#N(i)?(o&&(o.get="stale"),c?(o&&r&&l.__staleWhileFetching!==void 0&&(o.returnedStale=!0),r?l.__staleWhileFetching:void 0):(a||this.#A(t,"expire"),o&&r&&(o.returnedStale=!0),r?l:void 0)):(o&&(o.get="hit"),c?l.__staleWhileFetching:(this.#R(i),s&&this.#M(i),l))}else o&&(o.get="miss")}#U(t,n){this.#u[n]=t,this.#o[t]=n}#R(t){t!==this.#h&&(t===this.#i?this.#i=this.#o[t]:this.#U(this.#u[t],this.#o[t]),this.#U(this.#h,t),this.#h=t)}delete(t){return this.#A(t,"delete")}#A(t,n){let r=!1;if(this.#a!==0){const s=this.#n.get(t);if(s!==void 0)if(this.#$?.[s]&&(clearTimeout(this.#$?.[s]),this.#$[s]=void 0),r=!0,this.#a===1)this.#G(n);else{this.#B(s);const a=this.#e[s];if(this.#r(a)?a.__abortController.abort(new Error("deleted")):(this.#F||this.#b)&&(this.#F&&this.#d?.(a,t,n),this.#b&&this.#f?.push([a,t,n])),this.#n.delete(t),this.#t[s]=void 0,this.#e[s]=void 0,s===this.#h)this.#h=this.#u[s];else if(s===this.#i)this.#i=this.#o[s];else{const o=this.#u[s];this.#o[o]=this.#o[s];const i=this.#o[s];this.#u[i]=this.#u[s]}this.#a--,this.#E.push(s)}}if(this.#b&&this.#f?.length){const s=this.#f;let a;for(;a=s?.shift();)this.#m?.(...a)}return r}clear(){return this.#G("delete")}#G(t){for(const n of this.#k({allowStale:!0})){const r=this.#e[n];if(this.#r(r))r.__abortController.abort(new Error("deleted"));else{const s=this.#t[n];this.#F&&this.#d?.(r,s,t),this.#b&&this.#f?.push([r,s,t])}}if(this.#n.clear(),this.#e.fill(void 0),this.#t.fill(void 0),this.#w&&this.#x){this.#w.fill(0),this.#x.fill(0);for(const n of this.#$??[])n!==void 0&&clearTimeout(n);this.#$?.fill(void 0)}if(this.#C&&this.#C.fill(0),this.#i=0,this.#h=0,this.#E.length=0,this.#c=0,this.#a=0,this.#b&&this.#f){const n=this.#f;let r;for(;r=n?.shift();)this.#m?.(...r)}}}const x=e=>typeof e=="string"||e instanceof String,en=e=>x(e)||typeof e=="number",hr="(?:0|[1-9]\\d*)",Rl="clamp|max|min",Ol="exp|hypot|log|pow|sqrt",Il="abs|sign",Ll="mod|rem|round",Tl="a?(?:cos|sin|tan)|atan2",fa=`${Rl}|${Ol}|${Il}|${Ll}|${Tl}`,Yr=`calc|${fa}`,_l=`var|${Yr}`,tn="deg|g?rad|turn",An="[cm]m|[dls]?v(?:[bhiw]|max|min)|in|p[ctx]|q|r?(?:[cl]h|cap|e[mx]|ic)",Ae=`[+-]?(?:${hr}(?:\\.\\d*)?|\\.\\d+)(?:e-?${hr})?`,pa=`\\+?(?:${hr}(?:\\.\\d*)?|\\.\\d+)(?:e-?${hr})?`,m="none",Pe=`${Ae}%`,fr=`^(?:${Yr})\\(|(?<=[*\\/\\s\\(])(?:${Yr})\\(`,da=`^(?:${fa})\\($`,Pn="^var\\(|(?<=[*\\/\\s\\(])var\\(",Wl=`^(?:${_l})\\(`,pr=`(?:\\s*\\/\\s*(?:${Ae}|${Pe}|${m}))?`,ma=`(?:\\s*,\\s*(?:${Ae}|${Pe}))?`,ga="(?:ok)?l(?:ab|ch)|color|hsla?|hwb|rgba?",Hl="[a-z]+|#[\\da-f]{3}|#[\\da-f]{4}|#[\\da-f]{6}|#[\\da-f]{8}",va="(?:ok)?lch|hsl|hwb",ba="(?:de|in)creasing|longer|shorter",zl=`${Ae}(?:${tn})?`,wa=`(?:${Ae}(?:${tn})?|${m})`,Dn=`(?:${Ae}|${Pe}|${m})`,$a=`(?:${va})(?:\\s(?:${ba})\\shue)?`,Ul=`(${va})(?:\\s(${ba})\\shue)?`,Na="(?:ok)?lab",Gl="(?:ok)?lch",Vl="srgb(?:-linear)?",Xr=`(?:a98|prophoto)-rgb|display-p3|rec2020|${Vl}`,Kr="xyz(?:-d(?:50|65))?",ya=`${Na}|${Xr}|${Kr}`,dr=`${$a}|${ya}`,se="color(",mr="light-dark(",Mt="color-mix(",Mn=`(?:${ga})\\(\\s*from\\s+`,jl=`(${ga})\\(\\s*from\\s+`,Zr="var(",Ea=`(?:${Xr}|${Kr})(?:\\s+${Dn}){3}${pr}`,ql="^light-dark\\(",Ca=`^${Mn}|(?<=[\\s])${Mn}`,Jr=`${wa}(?:\\s+${Dn}){2}${pr}`,xa=`${zl}(?:\\s*,\\s*${Pe}){2}${ma}`,Qr=`(?:${Dn}\\s+){2}${wa}${pr}`,gr=`${Dn}(?:\\s+${Dn}){2}${pr}`,Fa=`(?:${Ae}(?:\\s*,\\s*${Ae}){2}|${Pe}(?:\\s*,\\s*${Pe}){2})${ma}`,nn=`${Hl}|hsla?\\(\\s*${xa}\\s*\\)|rgba?\\(\\s*${Fa}\\s*\\)|(?:hsla?|hwb)\\(\\s*${Jr}\\s*\\)|(?:(?:ok)?lab|rgba?)\\(\\s*${gr}\\s*\\)|(?:ok)?lch\\(\\s*${Qr}\\s*\\)|color\\(\\s*${Ea}\\s*\\)`,rn=`(?:${nn})(?:\\s+${Pe})?`,vr=`color-mix\\(\\s*in\\s+(?:${dr})\\s*,\\s*${rn}\\s*,\\s*${rn}\\s*\\)`,Yl=`color-mix\\(\\s*in\\s+(${dr})\\s*,\\s*(${rn})\\s*,\\s*(${rn})\\s*\\)`,Q="computedValue",V="mixValue",j="specifiedValue",es="color",ts=.001,Bn=.5,ns=2,le=3,dt=4,mt=8,Rn=10,br=12,R=16,Xl=60,sn=180,Ke=360,z=100,I=255,_t=2,On=3,an=2.4,on=12.92,Ze=.055,In=116,Sa=500,ka=200,rs=216/24389,wr=24389/27,Aa=[.3457/.3585,1,(1-.3457-.3585)/.3585],Ln=[[.955473421488075,-.02309845494876471,.06325924320057072],[-.0283697093338637,1.0099953980813041,.021041441191917323],[.012314014864481998,-.020507649298898964,1.330365926242124]],nt=[[1.0479297925449969,.022946870601609652,-.05019226628920524],[.02962780877005599,.9904344267538799,-.017073799063418826],[-.009243040646204504,.015055191490298152,.7518742814281371]],ss=[[506752/1228815,87881/245763,12673/70218],[87098/409605,175762/245763,12673/175545],[7918/409605,87881/737289,1001167/1053270]],$r=[[12831/3959,-329/214,-1974/3959],[-851781/878810,1648619/878810,36519/878810],[705/12673,-2585/12673,705/667]],Kl=[[.819022437996703,.3619062600528904,-.1288737815209879],[.0329836539323885,.9292868615863434,.0361446663506424],[.0481771893596242,.2642395317527308,.6335478284694309]],Pa=[[1.2268798758459243,-.5578149944602171,.2813910456659647],[-.0405757452148008,1.112286803280317,-.0717110580655164],[-.0763729366746601,-.4214933324022432,1.5869240198367816]],Da=[[1,.3963377773761749,.2158037573099136],[1,-.1055613458156586,-.0638541728258133],[1,-.0894841775298119,-1.2914855480194092]],Zl=[[.210454268309314,.7936177747023054,-.0040720430116193],[1.9779985324311684,-2.42859224204858,.450593709617411],[.0259040424655478,.7827717124575296,-.8086757549230774]],Jl=[[608311/1250200,189793/714400,198249/1000160],[35783/156275,247089/357200,198249/2500400],[0/1,32229/714400,5220557/5000800]],Ql=[[63426534/99577255,20160776/139408157,47086771/278816314],[26158966/99577255,472592308/697040785,8267143/139408157],[0/1,19567812/697040785,295819943/278816314]],ec=[[573536/994567,263643/1420810,187206/994567],[591459/1989134,6239551/9945670,374412/4972835],[53769/1989134,351524/4972835,4929758/4972835]],tc=[[.7977666449006423,.13518129740053308,.0313477341283922],[.2880748288194013,.711835234241873,8993693872564e-17],[0,0,.8251046025104602]],Ma=new RegExp(`^(?:${nn})$`),ln=new RegExp(`^${Ul}$`),nc=/^xyz(?:-d(?:50|65))?$/,fe=/^currentColor$/i,cn=new RegExp(`^color\\(\\s*(${Ea})\\s*\\)$`),as=new RegExp(`^hsla?\\(\\s*(${Jr}|${xa})\\s*\\)$`),os=new RegExp(`^hwb\\(\\s*(${Jr})\\s*\\)$`),is=new RegExp(`^lab\\(\\s*(${gr})\\s*\\)$`),ls=new RegExp(`^lch\\(\\s*(${Qr})\\s*\\)$`),Ba=new RegExp(`^${vr}$`),rc=new RegExp(`^${Yl}$`),Ra=new RegExp(`${vr}`,"g"),cs=new RegExp(`^oklab\\(\\s*(${gr})\\s*\\)$`),us=new RegExp(`^oklch\\(\\s*(${Qr})\\s*\\)$`),Ie=/^(?:specifi|comput)edValue$/,un={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},rt=(e,t,n=!1)=>{if(t===j)return C(e,""),"";if(n)return C(e,null),new S;const r=["rgb",0,0,0,0];return C(e,r),r},st=(e,t=!1)=>{switch(e){case"hsl":case"hwb":case V:return new S;case j:return"";default:return t?new S:["rgb",0,0,0,0]}},Je=(e,t={})=>{if(!Array.isArray(e))throw new TypeError(`${e} is not an array.`);const{alpha:n=!1,minLength:r=le,maxLength:s=dt,minRange:a=0,maxRange:o=1,validateRange:i=!0}=t;if(!Number.isFinite(r))throw new TypeError(`${r} is not a number.`);if(!Number.isFinite(s))throw new TypeError(`${s} is not a number.`);if(!Number.isFinite(a))throw new TypeError(`${a} is not a number.`);if(!Number.isFinite(o))throw new TypeError(`${o} is not a number.`);const l=e.length;if(l<r||l>s)throw new Error(`Unexpected array length ${l}.`);let c=0;for(;c<l;){const u=e[c];if(Number.isFinite(u)){if(c<le&&i&&(u<a||u>o))throw new RangeError(`${u} is not between ${a} and ${o}.`);if(c===le&&(u<0||u>1))throw new RangeError(`${u} is not between 0 and 1.`)}else throw new TypeError(`${u} is not a number.`);c++}return n&&l===le&&e.push(1),e},Y=(e,t,n=!1)=>{if(Array.isArray(e)){if(e.length!==le)throw new Error(`Unexpected array length ${e.length}.`);if(!n)for(let N of e)N=Je(N,{maxLength:le,validateRange:!1})}else throw new TypeError(`${e} is not an array.`);const[[r,s,a],[o,i,l],[c,u,h]]=e;let p,d,f;n?[p,d,f]=t:[p,d,f]=Je(t,{maxLength:le,validateRange:!1});const v=r*p+s*d+a*f,$=o*p+i*d+l*f,b=c*p+u*d+h*f;return[v,$,b]},Tn=(e,t,n=!1)=>{if(Array.isArray(e)){if(e.length!==dt)throw new Error(`Unexpected array length ${e.length}.`)}else throw new TypeError(`${e} is not an array.`);if(Array.isArray(t)){if(t.length!==dt)throw new Error(`Unexpected array length ${t.length}.`)}else throw new TypeError(`${t} is not an array.`);let r=0;for(;r<dt;)e[r]===m&&t[r]===m?(e[r]=0,t[r]=0):e[r]===m?e[r]=t[r]:t[r]===m&&(t[r]=e[r]),r++;if(n)return[e,t];const s=Je(e,{minLength:dt,validateRange:!1}),a=Je(t,{minLength:dt,validateRange:!1});return[s,a]},_n=e=>{if(Number.isFinite(e)){if(e=Math.round(e),e<0||e>I)throw new RangeError(`${e} is not between 0 and ${I}.`)}else throw new TypeError(`${e} is not a number.`);let t=e.toString(R);return t.length===1&&(t=`0${t}`),t},Nr=e=>{if(x(e))e=e.trim();else throw new TypeError(`${e} is not a string.`);const t=Ke/400,n=Ke/(Math.PI*ns),r=new RegExp(`^(${Ae})(${tn})?$`);if(!r.test(e))throw new SyntaxError(`Invalid property value: ${e}`);const[,s,a]=e.match(r);let o;switch(a){case"grad":o=parseFloat(s)*t;break;case"rad":o=parseFloat(s)*n;break;case"turn":o=parseFloat(s)*Ke;break;default:o=parseFloat(s)}return o%=Ke,o<0?o+=Ke:Object.is(o,-0)&&(o=0),o},Ct=(e="")=>{if(x(e))if(e=e.trim(),!e)e="1";else if(e===m)e="0";else{let t;if(e.endsWith("%")?t=parseFloat(e)/z:t=parseFloat(e),!Number.isFinite(t))throw new TypeError(`${t} is not a finite number.`);t<ts?e="0":t>1?e="1":e=t.toFixed(le)}else e="1";return parseFloat(e)},Oa=e=>{if(x(e)){if(e==="")throw new SyntaxError("Invalid property value: (empty string)");e=e.trim()}else throw new TypeError(`${e} is not a string.`);let t=parseInt(e,R);if(t<=0)return 0;if(t>=I)return 1;const n=new Map;for(let r=1;r<z;r++)n.set(Math.round(r*I/z),r);return n.has(t)?t=n.get(t)/z:t=Math.round(t/I/ts)*ts,parseFloat(t.toFixed(le))},hs=(e,t=!1)=>{let n,r,s;t?[n,r,s]=e:[n,r,s]=Je(e,{maxLength:le,maxRange:I});let a=n/I,o=r/I,i=s/I;const l=.04045;return a>l?a=Math.pow((a+Ze)/(1+Ze),an):a/=on,o>l?o=Math.pow((o+Ze)/(1+Ze),an):o/=on,i>l?i=Math.pow((i+Ze)/(1+Ze),an):i/=on,[a,o,i]},fs=(e,t=!1)=>(t||(e=Je(e,{maxLength:le,maxRange:I})),e=hs(e,!0),Y(ss,e,!0)),Ia=(e,t=!1)=>{let[n,r,s]=Je(e,{maxLength:le});const a=809/258400;return n>a?n=Math.pow(n,1/an)*(1+Ze)-Ze:n*=on,n*=I,r>a?r=Math.pow(r,1/an)*(1+Ze)-Ze:r*=on,r*=I,s>a?s=Math.pow(s,1/an)*(1+Ze)-Ze:s*=on,s*=I,[t?Math.round(n):n,t?Math.round(r):r,t?Math.round(s):s]},hn=(e,t=!1)=>{t||(e=Je(e,{maxLength:le,validateRange:!1}));let[n,r,s]=Y($r,e,!0);return[n,r,s]=Ia([Math.min(Math.max(n,0),1),Math.min(Math.max(r,0),1),Math.min(Math.max(s,0),1)],!0),[n,r,s]},La=(e,t=!1)=>{const[n,r,s]=hn(e,t),a=n/I,o=r/I,i=s/I,l=Math.max(a,o,i),c=Math.min(a,o,i),u=l-c,h=(l+c)*Bn*z;let p,d;if(Math.round(h)===0||Math.round(h)===z)p=0,d=0;else if(d=u/(1-Math.abs(l+c-1))*z,d===0)p=0;else{switch(l){case a:p=(o-i)/u;break;case o:p=(i-a)/u+ns;break;case i:default:p=(a-o)/u+dt;break}p=p*Xl%Ke,p<0&&(p+=Ke)}return[p,d,h]},sc=(e,t=!1)=>{const[n,r,s]=hn(e,t),a=Math.min(n,r,s)/I,o=1-Math.max(n,r,s)/I;let i;return a+o===1?i=0:[i]=La(e),[i,a*z,o*z]},Ta=(e,t=!1)=>{t||(e=Je(e,{maxLength:le,validateRange:!1}));const n=Y(Kl,e,!0).map(i=>Math.cbrt(i));let[r,s,a]=Y(Zl,n,!0);r=Math.min(Math.max(r,0),1);const o=Math.round(parseFloat(r.toFixed(dt))*z);return(o===0||o===z)&&(s=0,a=0),[r,s,a]},ac=(e,t=!1)=>{const[n,r,s]=Ta(e,t);let a,o;const i=Math.round(parseFloat(n.toFixed(dt))*z);return i===0||i===z?(a=0,o=0):(a=Math.max(Math.sqrt(Math.pow(r,_t)+Math.pow(s,_t)),0),parseFloat(a.toFixed(dt))===0?o=0:(o=Math.atan2(s,r)*sn/Math.PI,o<0&&(o+=Ke))),[n,a,o]},_a=(e,t=!1)=>{t||(e=Je(e,{maxLength:le,validateRange:!1}));const n=Y(Ln,e,!0);return hn(n,!0)},Wa=(e,t=!1)=>{t||(e=Je(e,{maxLength:le,validateRange:!1}));const n=e.map((c,u)=>c/Aa[u]),[r,s,a]=n.map(c=>c>rs?Math.cbrt(c):(c*wr+R)/In),o=Math.min(Math.max(In*s-R,0),z);let i,l;return o===0||o===z?(i=0,l=0):(i=(r-s)*Sa,l=(s-a)*ka),[o,i,l]},oc=(e,t=!1)=>{const[n,r,s]=Wa(e,t);let a,o;return n===0||n===z?(a=0,o=0):(a=Math.max(Math.sqrt(Math.pow(r,_t)+Math.pow(s,_t)),0),o=Math.atan2(s,r)*sn/Math.PI,o<0&&(o+=Ke)),[n,a,o]},Ha=e=>{const[t,n,r,s]=Je(e,{alpha:!0,maxRange:I}),a=_n(t),o=_n(n),i=_n(r),l=_n(s*I);let c;return l==="ff"?c=`#${a}${o}${i}`:c=`#${a}${o}${i}${l}`,c},ps=e=>{if(x(e))e=e.toLowerCase().trim();else throw new TypeError(`${e} is not a string.`);if(!(/^#[\da-f]{6}$/.test(e)||/^#[\da-f]{3}$/.test(e)||/^#[\da-f]{8}$/.test(e)||/^#[\da-f]{4}$/.test(e)))throw new SyntaxError(`Invalid property value: ${e}`);const t=[];if(/^#[\da-f]{3}$/.test(e)){const[,n,r,s]=e.match(/^#([\da-f])([\da-f])([\da-f])$/);t.push(parseInt(`${n}${n}`,R),parseInt(`${r}${r}`,R),parseInt(`${s}${s}`,R),1)}else if(/^#[\da-f]{4}$/.test(e)){const[,n,r,s,a]=e.match(/^#([\da-f])([\da-f])([\da-f])([\da-f])$/);t.push(parseInt(`${n}${n}`,R),parseInt(`${r}${r}`,R),parseInt(`${s}${s}`,R),Oa(`${a}${a}`))}else if(/^#[\da-f]{8}$/.test(e)){const[,n,r,s,a]=e.match(/^#([\da-f]{2})([\da-f]{2})([\da-f]{2})([\da-f]{2})$/);t.push(parseInt(n,R),parseInt(r,R),parseInt(s,R),Oa(a))}else{const[,n,r,s]=e.match(/^#([\da-f]{2})([\da-f]{2})([\da-f]{2})$/);t.push(parseInt(n,R),parseInt(r,R),parseInt(s,R),1)}return t},ic=e=>{const[t,n,r,s]=ps(e),[a,o,i]=hs([t,n,r],!0);return[a,o,i,s]},lc=e=>{const[t,n,r,s]=ic(e),[a,o,i]=Y(ss,[t,n,r],!0);return[a,o,i,s]},za=(e,t={})=>{if(x(e))e=e.toLowerCase().trim();else throw new TypeError(`${e} is not a string.`);const{format:n="",nullable:r=!1}=t,s=new RegExp(`^rgba?\\(\\s*(${gr}|${Fa})\\s*\\)$`);if(!s.test(e)){const f=st(n,r);return f instanceof S||x(f),f}const[,a]=e.match(s),[o,i,l,c=""]=a.replace(/[,/]/g," ").split(/\s+/);let u,h,p;o===m?u=0:(o.endsWith("%")?u=parseFloat(o)*I/z:u=parseFloat(o),u=Math.min(Math.max(M(u,mt),0),I)),i===m?h=0:(i.endsWith("%")?h=parseFloat(i)*I/z:h=parseFloat(i),h=Math.min(Math.max(M(h,mt),0),I)),l===m?p=0:(l.endsWith("%")?p=parseFloat(l)*I/z:p=parseFloat(l),p=Math.min(Math.max(M(p,mt),0),I));const d=Ct(c);return["rgb",u,h,p,n===V&&c===m?m:d]},yr=(e,t={})=>{if(x(e))e=e.trim();else throw new TypeError(`${e} is not a string.`);const{format:n="",nullable:r=!1}=t;if(!as.test(e)){const y=st(n,r);return y instanceof S||x(y),y}const[,s]=e.match(as),[a,o,i,l=""]=s.replace(/[,/]/g," ").split(/\s+/);let c,u,h;a===m?c=0:c=Nr(a),o===m?u=0:u=Math.min(Math.max(parseFloat(o),0),z),i===m?h=0:h=Math.min(Math.max(parseFloat(i),0),z);const p=Ct(l);if(n==="hsl")return[n,a===m?a:c,o===m?o:u,i===m?i:h,l===m?l:p];c=c/Ke*br,h/=z;const d=u/z*Math.min(h,1-h),f=c%br,v=(8+c)%br,$=(4+c)%br,b=h-d*Math.max(-1,Math.min(f-le,le**_t-f,1)),N=h-d*Math.max(-1,Math.min(v-le,le**_t-v,1)),E=h-d*Math.max(-1,Math.min($-le,le**_t-$,1));return["rgb",Math.min(Math.max(M(b*I,mt),0),I),Math.min(Math.max(M(N*I,mt),0),I),Math.min(Math.max(M(E*I,mt),0),I),p]},ds=(e,t={})=>{if(x(e))e=e.trim();else throw new TypeError(`${e} is not a string.`);const{format:n="",nullable:r=!1}=t;if(!os.test(e)){const b=st(n,r);return b instanceof S||x(b),b}const[,s]=e.match(os),[a,o,i,l=""]=s.replace("/"," ").split(/\s+/);let c,u,h;a===m?c=0:c=Nr(a),o===m?u=0:u=Math.min(Math.max(parseFloat(o),0),z)/z,i===m?h=0:h=Math.min(Math.max(parseFloat(i),0),z)/z;const p=Ct(l);if(n==="hwb")return[n,a===m?a:c,o===m?o:u*z,i===m?i:h*z,l===m?l:p];if(u+h>=1){const b=M(u/(u+h)*I,mt);return["rgb",b,b,b,p]}const d=(1-u-h)/I;let[,f,v,$]=yr(`hsl(${c} 100 50)`);return f=M((f*d+u)*I,mt),v=M((v*d+u)*I,mt),$=M(($*d+u)*I,mt),["rgb",Math.min(Math.max(f,0),I),Math.min(Math.max(v,0),I),Math.min(Math.max($,0),I),p]},Wn=(e,t={})=>{if(x(e))e=e.trim();else throw new TypeError(`${e} is not a string.`);const{format:n="",nullable:r=!1}=t;if(!is.test(e)){const B=st(n,r);return B instanceof S||x(B),B}const s=1.25,a=8,[,o]=e.match(is),[i,l,c,u=""]=o.replace("/"," ").split(/\s+/);let h,p,d;i===m?h=0:(i.endsWith("%")?(h=parseFloat(i),h>z&&(h=z)):h=parseFloat(i),h<0&&(h=0)),l===m?p=0:p=l.endsWith("%")?parseFloat(l)*s:parseFloat(l),c===m?d=0:d=c.endsWith("%")?parseFloat(c)*s:parseFloat(c);const f=Ct(u);if(Ie.test(n))return["lab",i===m?i:M(h,R),l===m?l:M(p,R),c===m?c:M(d,R),u===m?u:f];const v=(h+R)/In,$=p/Sa+v,b=v-d/ka,N=Math.pow(v,On),E=Math.pow($,On),y=Math.pow(b,On),_=[E>rs?E:($*In-R)/wr,h>a?N:h/wr,y>rs?y:(b*In-R)/wr],[A,D,k]=_.map((B,W)=>B*Aa[W]);return["xyz-d50",M(A,R),M(D,R),M(k,R),f]},Er=(e,t={})=>{if(x(e))e=e.trim();else throw new TypeError(`${e} is not a string.`);const{format:n="",nullable:r=!1}=t;if(!ls.test(e)){const E=st(n,r);return E instanceof S||x(E),E}const s=1.5,[,a]=e.match(ls),[o,i,l,c=""]=a.replace("/"," ").split(/\s+/);let u,h,p;o===m?u=0:(u=parseFloat(o),u<0&&(u=0)),i===m?h=0:h=i.endsWith("%")?parseFloat(i)*s:parseFloat(i),l===m?p=0:p=Nr(l);const d=Ct(c);if(Ie.test(n))return["lch",o===m?o:M(u,R),i===m?i:M(h,R),l===m?l:M(p,R),c===m?c:d];const f=h*Math.cos(p*Math.PI/sn),v=h*Math.sin(p*Math.PI/sn),[,$,b,N]=Wn(`lab(${u} ${f} ${v})`);return["xyz-d50",M($,R),M(b,R),M(N,R),d]},Cr=(e,t={})=>{if(x(e))e=e.trim();else throw new TypeError(`${e} is not a string.`);const{format:n="",nullable:r=!1}=t;if(!cs.test(e)){const N=st(n,r);return N instanceof S||x(N),N}const s=.4,[,a]=e.match(cs),[o,i,l,c=""]=a.replace("/"," ").split(/\s+/);let u,h,p;o===m?u=0:(u=o.endsWith("%")?parseFloat(o)/z:parseFloat(o),u<0&&(u=0)),i===m?h=0:i.endsWith("%")?h=parseFloat(i)*s/z:h=parseFloat(i),l===m?p=0:l.endsWith("%")?p=parseFloat(l)*s/z:p=parseFloat(l);const d=Ct(c);if(Ie.test(n))return["oklab",o===m?o:M(u,R),i===m?i:M(h,R),l===m?l:M(p,R),c===m?c:d];const f=Y(Da,[u,h,p]).map(N=>Math.pow(N,On)),[v,$,b]=Y(Pa,f,!0);return["xyz-d65",M(v,R),M($,R),M(b,R),d]},xr=(e,t={})=>{if(x(e))e=e.trim();else throw new TypeError(`${e} is not a string.`);const{format:n="",nullable:r=!1}=t;if(!us.test(e)){const y=st(n,r);return y instanceof S||x(y),y}const s=.4,[,a]=e.match(us),[o,i,l,c=""]=a.replace("/"," ").split(/\s+/);let u,h,p;o===m?u=0:(u=o.endsWith("%")?parseFloat(o)/z:parseFloat(o),u<0&&(u=0)),i===m?h=0:(i.endsWith("%")?h=parseFloat(i)*s/z:h=parseFloat(i),h<0&&(h=0)),l===m?p=0:p=Nr(l);const d=Ct(c);if(Ie.test(n))return["oklch",o===m?o:M(u,R),i===m?i:M(h,R),l===m?l:M(p,R),c===m?c:d];const f=h*Math.cos(p*Math.PI/sn),v=h*Math.sin(p*Math.PI/sn),$=Y(Da,[u,f,v]).map(y=>Math.pow(y,On)),[b,N,E]=Y(Pa,$,!0);return["xyz-d65",M(b,R),M(N,R),M(E,R),d]},he=(e,t={})=>{if(x(e))e=e.trim();else throw new TypeError(`${e} is not a string.`);const{colorSpace:n="",d50:r=!1,format:s="",nullable:a=!1}=t;if(!cn.test(e)){const E=st(s,a);return E instanceof S||x(E),E}const[,o]=e.match(cn);let[i,l,c,u,h=""]=o.replace("/"," ").split(/\s+/),p,d,f;i==="xyz"&&(i="xyz-d65"),l===m?p=0:p=l.endsWith("%")?parseFloat(l)/z:parseFloat(l),c===m?d=0:d=c.endsWith("%")?parseFloat(c)/z:parseFloat(c),u===m?f=0:f=u.endsWith("%")?parseFloat(u)/z:parseFloat(u);const v=Ct(h);if(Ie.test(s)||s===V&&i===n)return[i,l===m?l:M(p,Rn),c===m?c:M(d,Rn),u===m?u:M(f,Rn),h===m?h:v];let $=0,b=0,N=0;if(i==="srgb-linear")[$,b,N]=Y(ss,[p,d,f]),r&&([$,b,N]=Y(nt,[$,b,N],!0));else if(i==="display-p3"){const E=hs([p*I,d*I,f*I]);[$,b,N]=Y(Jl,E),r&&([$,b,N]=Y(nt,[$,b,N],!0))}else if(i==="rec2020"){const E=1.09929682680944,y=.018053968510807,_=.45,A=[p,d,f].map(D=>{let k;return D<y*_*Rn?k=D/(_*Rn):k=Math.pow((D+E-1)/E,1/_),k});[$,b,N]=Y(Ql,A),r&&([$,b,N]=Y(nt,[$,b,N],!0))}else if(i==="a98-rgb"){const E=2.19921875,y=[p,d,f].map(_=>Math.pow(_,E));[$,b,N]=Y(ec,y),r&&([$,b,N]=Y(nt,[$,b,N],!0))}else if(i==="prophoto-rgb"){const E=[p,d,f].map(y=>{let _;return y>1/(R*ns)?_=Math.pow(y,1.8):_=y/R,_});[$,b,N]=Y(tc,E),r||([$,b,N]=Y(Ln,[$,b,N],!0))}else/^xyz(?:-d(?:50|65))?$/.test(i)?([$,b,N]=[p,d,f],i==="xyz-d50"?r||([$,b,N]=Y(Ln,[$,b,N])):r&&([$,b,N]=Y(nt,[$,b,N],!0))):([$,b,N]=fs([p*I,d*I,f*I]),r&&([$,b,N]=Y(nt,[$,b,N],!0)));return[r?"xyz-d50":"xyz-d65",M($,R),M(b,R),M(N,R),s===V&&h===m?h:v]},de=(e,t={})=>{if(x(e))e=e.toLowerCase().trim();else throw new TypeError(`${e} is not a string.`);const{d50:n=!1,format:r="",nullable:s=!1}=t;if(!Ma.test(e)){const c=st(r,s);return c instanceof S||x(c),c}let a=0,o=0,i=0,l=0;if(fe.test(e)){if(r===Q)return["rgb",0,0,0,0];if(r===j)return e}else if(/^[a-z]+$/.test(e))if(Object.hasOwn(un,e)){if(r===j)return e;const[c,u,h]=un[e];if(l=1,r===Q)return["rgb",c,u,h,l];[a,o,i]=fs([c,u,h],!0),n&&([a,o,i]=Y(nt,[a,o,i],!0))}else switch(r){case Q:return s&&e!=="transparent"?new S:["rgb",0,0,0,0];case j:return e==="transparent"?e:"";case V:return e==="transparent"?["rgb",0,0,0,0]:new S}else if(e[0]==="#"){if(Ie.test(r))return["rgb",...ps(e)];[a,o,i,l]=lc(e),n&&([a,o,i]=Y(nt,[a,o,i],!0))}else if(e.startsWith("lab")){if(Ie.test(r))return Wn(e,t);[,a,o,i,l]=Wn(e),n||([a,o,i]=Y(Ln,[a,o,i],!0))}else if(e.startsWith("lch")){if(Ie.test(r))return Er(e,t);[,a,o,i,l]=Er(e),n||([a,o,i]=Y(Ln,[a,o,i],!0))}else if(e.startsWith("oklab")){if(Ie.test(r))return Cr(e,t);[,a,o,i,l]=Cr(e),n&&([a,o,i]=Y(nt,[a,o,i],!0))}else if(e.startsWith("oklch")){if(Ie.test(r))return xr(e,t);[,a,o,i,l]=xr(e),n&&([a,o,i]=Y(nt,[a,o,i],!0))}else{let c,u,h;if(e.startsWith("hsl")?[,c,u,h,l]=yr(e):e.startsWith("hwb")?[,c,u,h,l]=ds(e):[,c,u,h,l]=za(e,t),Ie.test(r))return["rgb",Math.round(c),Math.round(u),Math.round(h),l];[a,o,i]=fs([c,u,h]),n&&([a,o,i]=Y(nt,[a,o,i],!0))}return[n?"xyz-d50":"xyz-d65",M(a,R),M(o,R),M(i,R),l]},Wt=(e,t={})=>{if(x(e))e=e.toLowerCase().trim();else throw new TypeError(`${e} is not a string.`);const{colorSpace:n="",format:r="",nullable:s=!1}=t,a=ue({namespace:es,name:"resolveColorValue",value:e},t),o=ce(a);if(o instanceof te){if(o.isNull)return o;const d=o.item;return x(d),d}if(!Ma.test(e)){const d=st(r,s);return d instanceof S?(C(a,null),d):(C(a,d),x(d),d)}let i="",l=0,c=0,u=0,h=0;if(fe.test(e)){if(r===j)return C(a,e),e}else if(/^[a-z]+$/.test(e))if(Object.hasOwn(un,e)){if(r===j)return C(a,e),e;[l,c,u]=un[e],h=1}else switch(r){case j:{if(e==="transparent")return C(a,e),e;const d="";return C(a,d),d}case V:{if(e==="transparent"){const d=["rgb",0,0,0,0];return C(a,d),d}return C(a,null),new S}case Q:default:{if(s&&e!=="transparent")return C(a,null),new S;const d=["rgb",0,0,0,0];return C(a,d),d}}else if(e[0]==="#")[l,c,u,h]=ps(e);else if(e.startsWith("hsl"))[,l,c,u,h]=yr(e,t);else if(e.startsWith("hwb"))[,l,c,u,h]=ds(e,t);else if(/^l(?:ab|ch)/.test(e)){let d,f,v;if(e.startsWith("lab")?[i,d,f,v,h]=Wn(e,t):[i,d,f,v,h]=Er(e,t),Ie.test(r)){const $=[i,d,f,v,h];return C(a,$),$}[l,c,u]=_a([d,f,v])}else if(/^okl(?:ab|ch)/.test(e)){let d,f,v;if(e.startsWith("oklab")?[i,d,f,v,h]=Cr(e,t):[i,d,f,v,h]=xr(e,t),Ie.test(r)){const $=[i,d,f,v,h];return C(a,$),$}[l,c,u]=hn([d,f,v])}else[,l,c,u,h]=za(e,t);if(r===V&&n==="srgb"){const d=["srgb",l/I,c/I,u/I,h];return C(a,d),d}const p=["rgb",Math.round(l),Math.round(c),Math.round(u),h];return C(a,p),p},xt=(e,t={})=>{if(x(e))e=e.toLowerCase().trim();else throw new TypeError(`${e} is not a string.`);const{colorSpace:n="",format:r="",nullable:s=!1}=t,a=ue({namespace:es,name:"resolveColorFunc",value:e},t),o=ce(a);if(o instanceof te){if(o.isNull)return o;const y=o.item;return x(y),y}if(!cn.test(e)){const y=st(r,s);return y instanceof S?(C(a,null),y):(C(a,y),x(y),y)}const[i,l,c,u,h]=he(e,t);if(Ie.test(r)||r===V&&i===n){const y=[i,l,c,u,h];return C(a,y),y}const p=parseFloat(`${l}`),d=parseFloat(`${c}`),f=parseFloat(`${u}`),v=Ct(`${h}`),[$,b,N]=hn([p,d,f],!0),E=["rgb",$,b,N,v];return C(a,E),E},ms=(e,t={})=>{if(x(e))e=e.trim();else throw new TypeError(`${e} is not a string.`);const{colorSpace:n="",format:r=""}=t;let s="",a,o,i,l,c,u,h;if(r===V){let p;if(e.startsWith(se)?p=he(e,t):p=de(e,t),p instanceof S)return p;if([s,c,u,h,l]=p,s===n)return[c,u,h,l];[a,o,i]=Y($r,[c,u,h],!0)}else if(e.startsWith(se)){const[,p]=e.match(cn),[d]=p.replace("/"," ").split(/\s+/);d==="srgb-linear"?[,a,o,i,l]=xt(e,{format:Q}):([,c,u,h,l]=he(e),[a,o,i]=Y($r,[c,u,h],!0))}else[,c,u,h,l]=de(e),[a,o,i]=Y($r,[c,u,h],!0);return[Math.min(Math.max(a,0),1),Math.min(Math.max(o,0),1),Math.min(Math.max(i,0),1),l]},Hn=(e,t={})=>{if(x(e))e=e.trim();else throw new TypeError(`${e} is not a string.`);const{format:n=""}=t;let r,s,a,o;if(n===V){let i;if(e.startsWith(se)?i=xt(e,t):i=Wt(e,t),i instanceof S)return i;[,r,s,a,o]=i}else if(e.startsWith(se)){const[,i]=e.match(cn),[l]=i.replace("/"," ").split(/\s+/);l==="srgb"?([,r,s,a,o]=xt(e,{format:Q}),r*=I,s*=I,a*=I):[,r,s,a,o]=xt(e)}else/^(?:ok)?l(?:ab|ch)/.test(e)?([r,s,a,o]=ms(e),[r,s,a]=Ia([r,s,a])):[,r,s,a,o]=Wt(e,{format:Q});return[r,s,a,o]},Ua=(e,t={})=>{if(x(e))e=e.trim();else throw new TypeError(`${e} is not a string.`);const{d50:n=!1,format:r=""}=t;let s,a,o,i;if(r===V){let l;if(e.startsWith(se)?l=he(e,t):l=de(e,t),l instanceof S)return l;[,s,a,o,i]=l}else if(e.startsWith(se)){const[,l]=e.match(cn),[c]=l.replace("/"," ").split(/\s+/);n?c==="xyz-d50"?[,s,a,o,i]=xt(e,{format:Q}):[,s,a,o,i]=he(e,t):/^xyz(?:-d65)?$/.test(c)?[,s,a,o,i]=xt(e,{format:Q}):[,s,a,o,i]=he(e)}else[,s,a,o,i]=de(e,t);return[s,a,o,i]},gs=(e,t={})=>{if(x(e))e=e.trim();else throw new TypeError(`${e} is not a string.`);const{format:n=""}=t;let r,s,a,o;if(as.test(e))return[,r,s,a,o]=yr(e,{format:"hsl"}),n==="hsl"?[Math.round(r),Math.round(s),Math.round(a),o]:[r,s,a,o];let i,l,c;if(n===V){let u;if(e.startsWith(se)?u=he(e,t):u=de(e,t),u instanceof S)return u;[,i,l,c,o]=u}else e.startsWith(se)?[,i,l,c,o]=he(e):[,i,l,c,o]=de(e);return[r,s,a]=La([i,l,c],!0),n==="hsl"?[Math.round(r),Math.round(s),Math.round(a),o]:[n===V&&s===0?m:r,s,a,o]},vs=(e,t={})=>{if(x(e))e=e.trim();else throw new TypeError(`${e} is not a string.`);const{format:n=""}=t;let r,s,a,o;if(os.test(e))return[,r,s,a,o]=ds(e,{format:"hwb"}),n==="hwb"?[Math.round(r),Math.round(s),Math.round(a),o]:[r,s,a,o];let i,l,c;if(n===V){let u;if(e.startsWith(se)?u=he(e,t):u=de(e,t),u instanceof S)return u;[,i,l,c,o]=u}else e.startsWith(se)?[,i,l,c,o]=he(e):[,i,l,c,o]=de(e);return[r,s,a]=sc([i,l,c],!0),n==="hwb"?[Math.round(r),Math.round(s),Math.round(a),o]:[n===V&&s+a>=100?m:r,s,a,o]},bs=(e,t={})=>{if(x(e))e=e.trim();else throw new TypeError(`${e} is not a string.`);const{format:n=""}=t;let r,s,a,o;if(is.test(e))return[,r,s,a,o]=Wn(e,{format:Q}),[r,s,a,o];let i,l,c;if(n===V){let u;if(t.d50=!0,e.startsWith(se)?u=he(e,t):u=de(e,t),u instanceof S)return u;[,i,l,c,o]=u}else e.startsWith(se)?[,i,l,c,o]=he(e,{d50:!0}):[,i,l,c,o]=de(e,{d50:!0});return[r,s,a]=Wa([i,l,c],!0),[r,s,a,o]},ws=(e,t={})=>{if(x(e))e=e.trim();else throw new TypeError(`${e} is not a string.`);const{format:n=""}=t;let r,s,a,o;if(ls.test(e))return[,r,s,a,o]=Er(e,{format:Q}),[r,s,a,o];let i,l,c;if(n===V){let u;if(t.d50=!0,e.startsWith(se)?u=he(e,t):u=de(e,t),u instanceof S)return u;[,i,l,c,o]=u}else e.startsWith(se)?[,i,l,c,o]=he(e,{d50:!0}):[,i,l,c,o]=de(e,{d50:!0});return[r,s,a]=oc([i,l,c],!0),[r,s,n===V&&s===0?m:a,o]},$s=(e,t={})=>{if(x(e))e=e.trim();else throw new TypeError(`${e} is not a string.`);const{format:n=""}=t;let r,s,a,o;if(cs.test(e))return[,r,s,a,o]=Cr(e,{format:Q}),[r,s,a,o];let i,l,c;if(n===V){let u;if(e.startsWith(se)?u=he(e,t):u=de(e,t),u instanceof S)return u;[,i,l,c,o]=u}else e.startsWith(se)?[,i,l,c,o]=he(e):[,i,l,c,o]=de(e);return[r,s,a]=Ta([i,l,c],!0),[r,s,a,o]},Ns=(e,t={})=>{if(x(e))e=e.trim();else throw new TypeError(`${e} is not a string.`);const{format:n=""}=t;let r,s,a,o;if(us.test(e))return[,r,s,a,o]=xr(e,{format:Q}),[r,s,a,o];let i,l,c;if(n===V){let u;if(e.startsWith(se)?u=he(e,t):u=de(e,t),u instanceof S)return u;[,i,l,c,o]=u}else e.startsWith(se)?[,i,l,c,o]=he(e):[,i,l,c,o]=de(e);return[r,s,a]=ac([i,l,c],!0),[r,s,n===V&&s===0?m:a,o]},Fr=(e,t={})=>{if(x(e))e=e.toLowerCase().trim();else throw new TypeError(`${e} is not a string.`);const{format:n="",nullable:r=!1}=t,s=ue({namespace:es,name:"resolveColorMix",value:e},t),a=ce(s);if(a instanceof te){if(a.isNull)return a;const A=a.item;return x(A),A}const o=[];let i="",l="",c="",u="",h="",p="",d=!1;if(!Ba.test(e))if(e.startsWith(Mt)&&Ra.test(e)){const A=new RegExp(`^(?:${Xr}|${Kr})$`),D=e.match(Ra);for(const k of D)if(k){let B=Fr(k,{format:n===j?n:Q});if(Array.isArray(B)){const[W,H,G,q,ee]=B;if(H===0&&G===0&&q===0&&ee===0){e="";break}A.test(W)?ee===1?B=`color(${W} ${H} ${G} ${q})`:B=`color(${W} ${H} ${G} ${q} / ${ee})`:ee===1?B=`${W}(${H} ${G} ${q})`:B=`${W}(${H} ${G} ${q} / ${ee})`}else if(!Ba.test(B)){e="";break}o.push(B),e=e.replace(k,B)}if(!e)return rt(s,n,r)}else if(e.startsWith(Mt)&&e.endsWith(")")&&e.includes(mr)){const A=new RegExp(`in\\s+(${dr})`),D=e.replace(Mt,"").replace(/\)$/,""),[k="",B="",W=""]=Gt(D,{delimiter:","}),[H="",G=""]=Gt(B),[q="",ee=""]=Gt(W),ae=me(H,{format:j}),ve=me(q,{format:j});if(A.test(k)&&ae&&ve)if(n===j){const[,ge]=k.match(A);ln.test(ge)?[,i,l]=ge.match(ln):i=ge,c=ae,G&&(u=G),h=ve,ee&&(p=ee),e=e.replace(H,ae).replace(q,ve),d=!0}else{const ge=me(H,t),Te=me(q,t);x(ge)&&x(Te)&&(e=e.replace(H,ge).replace(q,Te))}else return rt(s,n,r)}else return rt(s,n,r);if(o.length&&n===j){const A=new RegExp(`^color-mix\\(\\s*in\\s+(${dr})\\s*,`),[,D]=e.match(A);if(ln.test(D)?[,i,l]=D.match(ln):i=D,o.length===2){let[k,B]=o;k=k.replace(/(?=[()])/g,"\\"),B=B.replace(/(?=[()])/g,"\\");const W=new RegExp(`(${k})(?:\\s+(${Pe}))?`),H=new RegExp(`(${B})(?:\\s+(${Pe}))?`);[,c,u]=e.match(W),[,h,p]=e.match(H)}else{let[k]=o;k=k.replace(/(?=[()])/g,"\\");const B=`${k}(?:\\s+${Pe})?`,W=`(${k})(?:\\s+(${Pe}))?`,H=new RegExp(`^${W}$`),G=new RegExp(`${W}\\s*\\)$`),q=new RegExp(`^(${nn})(?:\\s+(${Pe}))?$`);if(G.test(e)){const ee=new RegExp(`(${rn})\\s*,\\s*(${B})\\s*\\)$`),[,ae,ve]=e.match(ee);[,c,u]=ae.match(q),[,h,p]=ve.match(H)}else{const ee=new RegExp(`(${B})\\s*,\\s*(${rn})\\s*\\)$`),[,ae,ve]=e.match(ee);[,c,u]=ae.match(H),[,h,p]=ve.match(q)}}}else if(!d){const[,A,D,k]=e.match(rc),B=new RegExp(`^(${nn})(?:\\s+(${Pe}))?$`);[,c,u]=D.match(B),[,h,p]=k.match(B),ln.test(A)?[,i,l]=A.match(ln):i=A}let f,v,$;if(u&&p){const A=parseFloat(u)/z,D=parseFloat(p)/z;if(A<0||A>1||D<0||D>1||A===0&&D===0)return rt(s,n,r);const k=A+D;f=A/k,v=D/k,$=k<1?k:1}else{if(u){if(f=parseFloat(u)/z,f<0||f>1)return rt(s,n,r);v=1-f}else if(p){if(v=parseFloat(p)/z,v<0||v>1)return rt(s,n,r);f=1-v}else f=Bn,v=Bn;$=1}if(i==="xyz"&&(i="xyz-d65"),n===j){let A="",D="";if(c.startsWith(Mt)||c.startsWith(mr))A=c;else if(c.startsWith(se)){const[k,B,W,H,G]=he(c,t);G===1?A=`color(${k} ${B} ${W} ${H})`:A=`color(${k} ${B} ${W} ${H} / ${G})`}else{const k=de(c,t);if(Array.isArray(k)){const[B,W,H,G,q]=k;q===1?B==="rgb"?A=`${B}(${W}, ${H}, ${G})`:A=`${B}(${W} ${H} ${G})`:B==="rgb"?A=`${B}a(${W}, ${H}, ${G}, ${q})`:A=`${B}(${W} ${H} ${G} / ${q})`}else{if(!x(k)||!k)return C(s,""),"";A=k}}if(h.startsWith(Mt)||h.startsWith(mr))D=h;else if(h.startsWith(se)){const[k,B,W,H,G]=he(h,t);G===1?D=`color(${k} ${B} ${W} ${H})`:D=`color(${k} ${B} ${W} ${H} / ${G})`}else{const k=de(h,t);if(Array.isArray(k)){const[B,W,H,G,q]=k;q===1?B==="rgb"?D=`${B}(${W}, ${H}, ${G})`:D=`${B}(${W} ${H} ${G})`:B==="rgb"?D=`${B}a(${W}, ${H}, ${G}, ${q})`:D=`${B}(${W} ${H} ${G} / ${q})`}else{if(!x(k)||!k)return C(s,""),"";D=k}}if(u&&p)A+=` ${parseFloat(u)}%`,D+=` ${parseFloat(p)}%`;else if(u){const k=parseFloat(u);k!==z*Bn&&(A+=` ${k}%`)}else if(p){const k=z-parseFloat(p);k!==z*Bn&&(A+=` ${k}%`)}if(l){const k=`color-mix(in ${i} ${l} hue, ${A}, ${D})`;return C(s,k),k}else{const k=`color-mix(in ${i}, ${A}, ${D})`;return C(s,k),k}}let b=0,N=0,E=0,y=0;if(/^srgb(?:-linear)?$/.test(i)){let A,D;if(i==="srgb"?(fe.test(c)?A=[m,m,m,m]:A=Hn(c,{colorSpace:i,format:V}),fe.test(h)?D=[m,m,m,m]:D=Hn(h,{colorSpace:i,format:V})):(fe.test(c)?A=[m,m,m,m]:A=ms(c,{colorSpace:i,format:V}),fe.test(h)?D=[m,m,m,m]:D=ms(h,{colorSpace:i,format:V})),A instanceof S||D instanceof S)return rt(s,n,r);const[k,B,W,H]=A,[G,q,ee,ae]=D,ve=k===m&&G===m,ge=B===m&&q===m,Te=W===m&&ee===m,ct=H===m&&ae===m,[[_e,ye,Ee,ut],[We,Ce,$e,bt]]=Tn([k,B,W,H],[G,q,ee,ae],!0),oe=ut*f,ie=bt*v;if(y=oe+ie,y===0?(b=_e*f+We*v,N=ye*f+Ce*v,E=Ee*f+$e*v):(b=(_e*oe+We*ie)/y,N=(ye*oe+Ce*ie)/y,E=(Ee*oe+$e*ie)/y,y=parseFloat(y.toFixed(3))),n===Q){const pe=[i,ve?m:M(b,R),ge?m:M(N,R),Te?m:M(E,R),ct?m:y*$];return C(s,pe),pe}b*=I,N*=I,E*=I}else if(nc.test(i)){let A,D;if(fe.test(c)?A=[m,m,m,m]:A=Ua(c,{colorSpace:i,d50:i==="xyz-d50",format:V}),fe.test(h)?D=[m,m,m,m]:D=Ua(h,{colorSpace:i,d50:i==="xyz-d50",format:V}),A instanceof S||D instanceof S)return rt(s,n,r);const[k,B,W,H]=A,[G,q,ee,ae]=D,ve=k===m&&G===m,ge=B===m&&q===m,Te=W===m&&ee===m,ct=H===m&&ae===m,[[_e,ye,Ee,ut],[We,Ce,$e,bt]]=Tn([k,B,W,H],[G,q,ee,ae],!0),oe=ut*f,ie=bt*v;y=oe+ie;let pe,xe,Fe;if(y===0?(pe=_e*f+We*v,xe=ye*f+Ce*v,Fe=Ee*f+$e*v):(pe=(_e*oe+We*ie)/y,xe=(ye*oe+Ce*ie)/y,Fe=(Ee*oe+$e*ie)/y,y=parseFloat(y.toFixed(3))),n===Q){const kt=[i,ve?m:M(pe,R),ge?m:M(xe,R),Te?m:M(Fe,R),ct?m:y*$];return C(s,kt),kt}i==="xyz-d50"?[b,N,E]=_a([pe,xe,Fe],!0):[b,N,E]=hn([pe,xe,Fe],!0)}else if(/^h(?:sl|wb)$/.test(i)){let A,D;if(i==="hsl"?(fe.test(c)?A=[m,m,m,m]:A=gs(c,{colorSpace:i,format:V}),fe.test(h)?D=[m,m,m,m]:D=gs(h,{colorSpace:i,format:V})):(fe.test(c)?A=[m,m,m,m]:A=vs(c,{colorSpace:i,format:V}),fe.test(h)?D=[m,m,m,m]:D=vs(h,{colorSpace:i,format:V})),A instanceof S||D instanceof S)return rt(s,n,r);const[k,B,W,H]=A,[G,q,ee,ae]=D,ve=H===m&&ae===m;let[[ge,Te,ct,_e],[ye,Ee,ut,We]]=Tn([k,B,W,H],[G,q,ee,ae],!0);l&&([ge,ye]=Fo(ge,ye,l));const Ce=_e*f,$e=We*v;y=Ce+$e;const bt=(ge*f+ye*v)%Ke;let oe,ie;if(y===0?(oe=Te*f+Ee*v,ie=ct*f+ut*v):(oe=(Te*Ce+Ee*$e)/y,ie=(ct*Ce+ut*$e)/y,y=parseFloat(y.toFixed(3))),[b,N,E]=Hn(`${i}(${bt} ${oe} ${ie})`),n===Q){const pe=["srgb",M(b/I,R),M(N/I,R),M(E/I,R),ve?m:y*$];return C(s,pe),pe}}else if(/^(?:ok)?lch$/.test(i)){let A,D;if(i==="lch"?(fe.test(c)?A=[m,m,m,m]:A=ws(c,{colorSpace:i,format:V}),fe.test(h)?D=[m,m,m,m]:D=ws(h,{colorSpace:i,format:V})):(fe.test(c)?A=[m,m,m,m]:A=Ns(c,{colorSpace:i,format:V}),fe.test(h)?D=[m,m,m,m]:D=Ns(h,{colorSpace:i,format:V})),A instanceof S||D instanceof S)return rt(s,n,r);const[k,B,W,H]=A,[G,q,ee,ae]=D,ve=k===m&&G===m,ge=B===m&&q===m,Te=W===m&&ee===m,ct=H===m&&ae===m;let[[_e,ye,Ee,ut],[We,Ce,$e,bt]]=Tn([k,B,W,H],[G,q,ee,ae],!0);l&&([Ee,$e]=Fo(Ee,$e,l));const oe=ut*f,ie=bt*v;y=oe+ie;const pe=(Ee*f+$e*v)%Ke;let xe,Fe;if(y===0?(xe=_e*f+We*v,Fe=ye*f+Ce*v):(xe=(_e*oe+We*ie)/y,Fe=(ye*oe+Ce*ie)/y,y=parseFloat(y.toFixed(3))),n===Q){const kt=[i,ve?m:M(xe,R),ge?m:M(Fe,R),Te?m:M(pe,R),ct?m:y*$];return C(s,kt),kt}[,b,N,E]=Wt(`${i}(${xe} ${Fe} ${pe})`)}else{let A,D;if(i==="lab"?(fe.test(c)?A=[m,m,m,m]:A=bs(c,{colorSpace:i,format:V}),fe.test(h)?D=[m,m,m,m]:D=bs(h,{colorSpace:i,format:V})):(fe.test(c)?A=[m,m,m,m]:A=$s(c,{colorSpace:i,format:V}),fe.test(h)?D=[m,m,m,m]:D=$s(h,{colorSpace:i,format:V})),A instanceof S||D instanceof S)return rt(s,n,r);const[k,B,W,H]=A,[G,q,ee,ae]=D,ve=k===m&&G===m,ge=B===m&&q===m,Te=W===m&&ee===m,ct=H===m&&ae===m,[[_e,ye,Ee,ut],[We,Ce,$e,bt]]=Tn([k,B,W,H],[G,q,ee,ae],!0),oe=ut*f,ie=bt*v;y=oe+ie;let pe,xe,Fe;if(y===0?(pe=_e*f+We*v,xe=ye*f+Ce*v,Fe=Ee*f+$e*v):(pe=(_e*oe+We*ie)/y,xe=(ye*oe+Ce*ie)/y,Fe=(Ee*oe+$e*ie)/y,y=parseFloat(y.toFixed(3))),n===Q){const kt=[i,ve?m:M(pe,R),ge?m:M(xe,R),Te?m:M(Fe,R),ct?m:y*$];return C(s,kt),kt}[,b,N,E]=Wt(`${i}(${pe} ${xe} ${Fe})`)}const _=["rgb",Math.round(b),Math.round(N),Math.round(E),parseFloat((y*$).toFixed(3))];return C(s,_),_},{CloseParen:Ga,Comment:cc,EOF:uc,Ident:hc,Whitespace:fc}=g,pc="css-var",Va=new RegExp(fr),ja=new RegExp(Pn);function qa(e,t={}){if(!Array.isArray(e))throw new TypeError(`${e} is not an array.`);const{customProperty:n={}}=t,r=[];for(;e.length;){const o=e.shift();if(!Array.isArray(o))throw new TypeError(`${o} is not an array.`);const[i,l]=o;if(i===Ga)break;if(l===Zr){const[c,u]=qa(e,t);e=c,u&&r.push(u)}else if(i===hc)if(l.startsWith("--")){let c;Object.hasOwn(n,l)?c=n[l]:typeof n.callback=="function"&&(c=n.callback(l)),c&&r.push(c)}else l&&r.push(l)}let s=!1;if(r.length>1){const o=r[r.length-1];s=Rt(o)}let a="";for(let o of r){if(o=o.trim(),ja.test(o)){const i=zn(o,t);x(i)&&(s?Rt(i)&&(a=i):a=i)}else Va.test(o)?(o=Xn(o,t),s?Rt(o)&&(a=o):a=o):o&&!/^(?:inherit|initial|revert(?:-layer)?|unset)$/.test(o)&&(s?Rt(o)&&(a=o):a=o);if(a)break}return[e,a]}function dc(e,t={}){const n=[];for(;e.length;){const r=e.shift(),[s="",a=""]=r;if(a===Zr){const[o,i]=qa(e,t);if(!i)return new S;e=o,n.push(i)}else switch(s){case Ga:{n.length&&n[n.length-1]===" "?n.splice(-1,1,a):n.push(a);break}case fc:{if(n.length){const o=n[n.length-1];x(o)&&!o.endsWith("(")&&o!==" "&&n.push(a)}break}default:s!==cc&&s!==uc&&n.push(a)}}return n}function zn(e,t={}){const{format:n=""}=t;if(x(e)){if(!ja.test(e)||n===j)return e;e=e.trim()}else throw new TypeError(`${e} is not a string.`);const r=ue({namespace:pc,name:"resolveVar",value:e},t),s=ce(r);if(s instanceof te)return s.isNull?s:s.item;const a=Nt({css:e}),o=dc(a,t);if(Array.isArray(o)){let i=o.join("");return Va.test(i)&&(i=Xn(i,t)),C(r,i),i}else return C(r,null),new S}const mc=(e,t={})=>{const n=zn(e,t);return x(n)?n:""};function Ne(e,t){return[e[0]*t[0]+e[1]*t[1]+e[2]*t[2],e[3]*t[0]+e[4]*t[1]+e[5]*t[2],e[6]*t[0]+e[7]*t[1]+e[8]*t[2]]}const gc=[.955473421488075,-.02309845494876471,.06325924320057072,-.0283697093338637,1.0099953980813041,.021041441191917323,.012314014864481998,-.020507649298898964,1.330365926242124];function at(e){return Ne(gc,e)}const vc=[1.0479297925449969,.022946870601609652,-.05019226628920524,.02962780877005599,.9904344267538799,-.017073799063418826,-.009243040646204504,.015055191490298152,.7518742814281371];function ot(e){return Ne(vc,e)}function Ya(e){let t=e[0]%360;const n=e[1]/100,r=e[2]/100;return t<0&&(t+=360),[ys(0,t,n,r),ys(8,t,n,r),ys(4,t,n,r)]}function ys(e,t,n,r){const s=(e+t/30)%12;return r-n*Math.min(r,1-r)*Math.max(-1,Math.min(s-3,9-s,1))}function bc(e){const t=e[0],n=e[1]/100,r=e[2]/100;if(n+r>=1){const o=n/(n+r);return[o,o,o]}const s=Ya([t,100,50]),a=1-n-r;return[s[0]*a+n,s[1]*a+n,s[2]*a+n]}function wc(e){const t=e[2]*Math.PI/180;return[e[0],e[1]*Math.cos(t),e[1]*Math.sin(t)]}function $c(e){const t=Math.sqrt(Math.pow(e[1],2)+Math.pow(e[2],2));let n=180*Math.atan2(e[2],e[1])/Math.PI;return n<0&&(n+=360),t<=.0015&&(n=NaN),[e[0],t,n]}const fn=[.3457/.3585,1,.2958/.3585];function Xa(e){const t=903.2962962962963,n=216/24389,r=(e[0]+16)/116,s=e[1]/500+r,a=r-e[2]/200;return[(Math.pow(s,3)>n?Math.pow(s,3):(116*s-16)/t)*fn[0],(e[0]>8?Math.pow((e[0]+16)/116,3):e[0]/t)*fn[1],(Math.pow(a,3)>n?Math.pow(a,3):(116*a-16)/t)*fn[2]]}function Ka(e){const t=e[2]*Math.PI/180;return[e[0],e[1]*Math.cos(t),e[1]*Math.sin(t)]}function Za(e){const t=Math.sqrt(e[1]**2+e[2]**2);let n=180*Math.atan2(e[2],e[1])/Math.PI;return n<0&&(n+=360),t<=4e-6&&(n=NaN),[e[0],t,n]}const Nc=[1.2268798758459243,-.5578149944602171,.2813910456659647,-.0405757452148008,1.112286803280317,-.0717110580655164,-.0763729366746601,-.4214933324022432,1.5869240198367816],yc=[1,.3963377773761749,.2158037573099136,1,-.1055613458156586,-.0638541728258133,1,-.0894841775298119,-1.2914855480194092];function Es(e){const t=Ne(yc,e);return Ne(Nc,[t[0]**3,t[1]**3,t[2]**3])}function Ja(e){const t=Cs(e[0]/fn[0]),n=Cs(e[1]/fn[1]);return[116*n-16,500*(t-n),200*(n-Cs(e[2]/fn[2]))]}const Ec=216/24389,Cc=24389/27;function Cs(e){return e>Ec?Math.cbrt(e):(Cc*e+16)/116}const xc=[.819022437996703,.3619062600528904,-.1288737815209879,.0329836539323885,.9292868615863434,.0361446663506424,.0481771893596242,.2642395317527308,.6335478284694309],Fc=[.210454268309314,.7936177747023054,-.0040720430116193,1.9779985324311684,-2.42859224204858,.450593709617411,.0259040424655478,.7827717124575296,-.8086757549230774];function xs(e){const t=Ne(xc,e);return Ne(Fc,[Math.cbrt(t[0]),Math.cbrt(t[1]),Math.cbrt(t[2])])}const Sc=[30757411/17917100,-6372589/17917100,-4539589/17917100,-.666684351832489,1.616481236634939,467509/29648200,792561/44930125,-1921689/44930125,.942103121235474],kc=[446124/178915,-333277/357830,-72051/178915,-14852/17905,63121/35810,423/17905,11844/330415,-50337/660830,316169/330415];function Qa(e){return Ne(kc,e)}const Ac=[1.3457868816471583,-.25557208737979464,-.05110186497554526,-.5446307051249019,1.5082477428451468,.02052744743642139,0,0,1.2119675456389452],Pc=[1829569/896150,-506331/896150,-308931/896150,-851781/878810,1648619/878810,36519/878810,16779/1248040,-147721/1248040,1266979/1248040],Dc=[12831/3959,-329/214,-1974/3959,-851781/878810,1648619/878810,36519/878810,705/12673,-2585/12673,705/667];function Un(e){return Ne(Dc,e)}function Fs(e){const t=e<0?-1:1,n=Math.abs(e);return t*Math.pow(n,1/2.4)}function Gn(e){return[Ss(e[0]),Ss(e[1]),Ss(e[2])]}function Ss(e){const t=e<0?-1:1,n=Math.abs(e);return n>.0031308?t*(1.055*Math.pow(n,1/2.4)-.055):12.92*e}function Mc(e){return Gn(e)}const Bc=1/512;function ks(e){const t=e<0?-1:1,n=Math.abs(e);return n>=Bc?t*Math.pow(n,1/1.8):16*e}function As(e){const t=e<0?-1:1,n=Math.abs(e);return t*Math.pow(n,256/563)}function Ps(e){const t=e<0?-1:1,n=Math.abs(e);return t*Math.pow(n,2.4)}const Rc=[63426534/99577255,20160776/139408157,47086771/278816314,26158966/99577255,.677998071518871,8267143/139408157,0,19567812/697040785,1.0609850577107909];function Sr(e){return[Ds(e[0]),Ds(e[1]),Ds(e[2])]}function Ds(e){const t=e<0?-1:1,n=Math.abs(e);return n<=.04045?e/12.92:t*Math.pow((n+.055)/1.055,2.4)}function Oc(e){return Sr(e)}const Ic=[608311/1250200,189793/714400,198249/1000160,35783/156275,247089/357200,198249/2500400,0,32229/714400,5220557/5000800];function eo(e){return Ne(Ic,e)}const Lc=16/512;function Ms(e){const t=e<0?-1:1,n=Math.abs(e);return n<=Lc?e/16:t*Math.pow(n,1.8)}const Tc=[.7977666449006423,.13518129740053308,.0313477341283922,.2880748288194013,.711835234241873,8993693872564e-17,0,0,.8251046025104602];function Bs(e){const t=e<0?-1:1,n=Math.abs(e);return t*Math.pow(n,563/256)}const _c=[573536/994567,263643/1420810,187206/994567,591459/1989134,6239551/9945670,374412/4972835,53769/1989134,351524/4972835,4929758/4972835],Wc=[506752/1228815,87881/245763,12673/70218,87098/409605,175762/245763,12673/175545,7918/409605,87881/737289,1001167/1053270];function Vn(e){return Ne(Wc,e)}function Hc(e){const t=e[0],n=e[1],r=e[2],s=Math.max(t,n,r),a=Math.min(t,n,r),o=(a+s)/2,i=s-a;let l=Number.NaN,c=0;if(Math.round(1e5*i)!==0){const u=Math.round(1e5*o);switch(c=u===0||u===1e5?0:(s-o)/Math.min(o,1-o),s){case t:l=(n-r)/i+(n<r?6:0);break;case n:l=(r-t)/i+2;break;case r:l=(t-n)/i+4}l*=60}return c<0&&(l+=180,c=Math.abs(c)),l>=360&&(l-=360),c<=1e-5&&(l=NaN),[l,100*c,100*o]}function zc(e){const t=e[0],n=e[1],r=e[2],s=Math.max(t,n,r),a=Math.min(t,n,r);let o=Number.NaN;const i=s-a;if(i!==0){switch(s){case t:o=(n-r)/i+(n<r?6:0);break;case n:o=(r-t)/i+2;break;case r:o=(t-n)/i+4}o*=60}return o>=360&&(o-=360),o}function Uc(e){let t=e;return t=Sr(t),t=Vn(t),t=ot(t),t}function Rs(e){let t=e;return t=at(t),t=Un(t),t=Gn(t),t}function Gc(e){let t=e;return t=Ya(t),t=Sr(t),t=Vn(t),t=ot(t),t}function Vc(e){let t=e;return t=at(t),t=Un(t),t=Gn(t),t=Hc(t),t}function jc(e){let t=e;return t=bc(t),t=Sr(t),t=Vn(t),t=ot(t),t}function qc(e){let t=e;t=at(t),t=Un(t);const n=Gn(t),r=Math.min(n[0],n[1],n[2]),s=1-Math.max(n[0],n[1],n[2]);let a=zc(n);return r+s>=.99999&&(a=NaN),[a,100*r,100*s]}function Yc(e){let t=e;return t=Xa(t),t}function Xc(e){let t=e;return t=Ja(t),t}function Kc(e){let t=e;return t=wc(t),t=Xa(t),t}function Zc(e){let t=e;return t=Ja(t),t=$c(t),t}function Jc(e){let t=e;return t=Es(t),t=ot(t),t}function Qc(e){let t=e;return t=at(t),t=xs(t),t}function eu(e){let t=e;return t=Ka(t),t=Es(t),t=ot(t),t}function to(e){let t=e;return t=at(t),t=xs(t),t=Za(t),t}function tu(e){let t=e;return t=Vn(t),t=ot(t),t}function nu(e){let t=e;return t=at(t),t=Un(t),t}function ru(e){let t=e;var n;return t=[Bs((n=t)[0]),Bs(n[1]),Bs(n[2])],t=Ne(_c,t),t=ot(t),t}function su(e){let t=e;var n;return t=at(t),t=Ne(Pc,t),t=[As((n=t)[0]),As(n[1]),As(n[2])],t}function au(e){let t=e;return t=Oc(t),t=eo(t),t=ot(t),t}function ou(e){let t=e;return t=at(t),t=Qa(t),t=Mc(t),t}function iu(e){let t=e;return t=eo(t),t=ot(t),t}function lu(e){let t=e;return t=at(t),t=Qa(t),t}function cu(e){let t=e;var n;return t=[Ps((n=t)[0]),Ps(n[1]),Ps(n[2])],t=Ne(Rc,t),t=ot(t),t}function uu(e){let t=e;var n;return t=at(t),t=Ne(Sc,t),t=[Fs((n=t)[0]),Fs(n[1]),Fs(n[2])],t}function hu(e){let t=e;var n;return t=[Ms((n=t)[0]),Ms(n[1]),Ms(n[2])],t=Ne(Tc,t),t}function fu(e){let t=e;var n;return t=Ne(Ac,t),t=[ks((n=t)[0]),ks(n[1]),ks(n[2])],t}function pu(e){let t=e;return t=ot(t),t}function du(e){let t=e;return t=at(t),t}function mu(e){return e[0]>=-1e-4&&e[0]<=1.0001&&e[1]>=-1e-4&&e[1]<=1.0001&&e[2]>=-1e-4&&e[2]<=1.0001}function no(e){return[e[0]<0?0:e[0]>1?1:e[0],e[1]<0?0:e[1]>1?1:e[1],e[2]<0?0:e[2]>1?1:e[2]]}function gu(e,t,n){const r=e[0],s=e[2];let a=t(e);const o=t([r,0,s]);for(let i=0;i<4;i++){if(i>0){const c=n(a);c[0]=r,c[2]=s,a=t(c)}const l=vu(o,a);if(!l)break;a=l}return no(a)}function vu(e,t){let n=1/0,r=-1/0;const s=[0,0,0];for(let a=0;a<3;a++){const o=e[a],i=t[a]-o;s[a]=i;const l=0,c=1;if(i){const u=1/i,h=(l-o)*u,p=(c-o)*u;r=Math.max(Math.min(h,p),r),n=Math.min(Math.max(h,p),n)}else if(o<l||o>c)return!1}return!(r>n||n<0)&&(r<0&&(r=n),!!isFinite(r)&&[e[0]+s[0]*r,e[1]+s[1]*r,e[2]+s[2]*r])}const bu={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]};function ro(e){const[t,n,r]=e.map(s=>s<=.04045?s/12.92:Math.pow((s+.055)/1.055,2.4));return .2126*t+.7152*n+.0722*r}function so(e,t){const n=ro(e),r=ro(t);return(Math.max(n,r)+.05)/(Math.min(n,r)+.05)}var w,P;function we(e){return[Number.isNaN(e[0])?0:e[0],Number.isNaN(e[1])?0:e[1],Number.isNaN(e[2])?0:e[2]]}function ao(e){switch(e.colorNotation){case w.HEX:case w.RGB:case w.sRGB:return{...e,colorNotation:w.XYZ_D50,channels:Uc(we(e.channels))};case w.Linear_sRGB:return{...e,colorNotation:w.XYZ_D50,channels:tu(we(e.channels))};case w.Display_P3:return{...e,colorNotation:w.XYZ_D50,channels:au(we(e.channels))};case w.Linear_Display_P3:return{...e,colorNotation:w.XYZ_D50,channels:iu(we(e.channels))};case w.Rec2020:return{...e,colorNotation:w.XYZ_D50,channels:cu(we(e.channels))};case w.A98_RGB:return{...e,colorNotation:w.XYZ_D50,channels:ru(we(e.channels))};case w.ProPhoto_RGB:return{...e,colorNotation:w.XYZ_D50,channels:hu(we(e.channels))};case w.HSL:return{...e,colorNotation:w.XYZ_D50,channels:Gc(we(e.channels))};case w.HWB:return{...e,colorNotation:w.XYZ_D50,channels:jc(we(e.channels))};case w.Lab:return{...e,colorNotation:w.XYZ_D50,channels:Yc(we(e.channels))};case w.OKLab:return{...e,colorNotation:w.XYZ_D50,channels:Jc(we(e.channels))};case w.LCH:return{...e,colorNotation:w.XYZ_D50,channels:Kc(we(e.channels))};case w.OKLCH:return{...e,colorNotation:w.XYZ_D50,channels:eu(we(e.channels))};case w.XYZ_D50:return{...e,colorNotation:w.XYZ_D50,channels:we(e.channels)};case w.XYZ_D65:return{...e,colorNotation:w.XYZ_D50,channels:pu(we(e.channels))};default:throw new Error("Unsupported color notation")}}(function(e){e.A98_RGB="a98-rgb",e.Display_P3="display-p3",e.Linear_Display_P3="display-p3-linear",e.HEX="hex",e.HSL="hsl",e.HWB="hwb",e.LCH="lch",e.Lab="lab",e.Linear_sRGB="srgb-linear",e.OKLCH="oklch",e.OKLab="oklab",e.ProPhoto_RGB="prophoto-rgb",e.RGB="rgb",e.sRGB="srgb",e.Rec2020="rec2020",e.XYZ_D50="xyz-d50",e.XYZ_D65="xyz-d65"})(w||(w={})),(function(e){e.ColorKeyword="color-keyword",e.HasAlpha="has-alpha",e.HasDimensionValues="has-dimension-values",e.HasNoneKeywords="has-none-keywords",e.HasNumberValues="has-number-values",e.HasPercentageAlpha="has-percentage-alpha",e.HasPercentageValues="has-percentage-values",e.HasVariableAlpha="has-variable-alpha",e.Hex="hex",e.LegacyHSL="legacy-hsl",e.LegacyRGB="legacy-rgb",e.NamedColor="named-color",e.RelativeColorSyntax="relative-color-syntax",e.ColorMix="color-mix",e.ColorMixVariadic="color-mix-variadic",e.ContrastColor="contrast-color",e.RelativeAlphaSyntax="relative-alpha-syntax",e.Experimental="experimental"})(P||(P={}));const oo=new Set([w.A98_RGB,w.Display_P3,w.Linear_Display_P3,w.HEX,w.Linear_sRGB,w.ProPhoto_RGB,w.RGB,w.sRGB,w.Rec2020,w.XYZ_D50,w.XYZ_D65]);function Bt(e,t){const n={...e};if(e.colorNotation!==t){const r=ao(n);switch(t){case w.HEX:case w.RGB:n.colorNotation=w.RGB,n.channels=Rs(r.channels);break;case w.sRGB:n.colorNotation=w.sRGB,n.channels=Rs(r.channels);break;case w.Linear_sRGB:n.colorNotation=w.Linear_sRGB,n.channels=nu(r.channels);break;case w.Display_P3:n.colorNotation=w.Display_P3,n.channels=ou(r.channels);break;case w.Linear_Display_P3:n.colorNotation=w.Linear_Display_P3,n.channels=lu(r.channels);break;case w.Rec2020:n.colorNotation=w.Rec2020,n.channels=uu(r.channels);break;case w.ProPhoto_RGB:n.colorNotation=w.ProPhoto_RGB,n.channels=fu(r.channels);break;case w.A98_RGB:n.colorNotation=w.A98_RGB,n.channels=su(r.channels);break;case w.HSL:n.colorNotation=w.HSL,n.channels=Vc(r.channels);break;case w.HWB:n.colorNotation=w.HWB,n.channels=qc(r.channels);break;case w.Lab:n.colorNotation=w.Lab,n.channels=Xc(r.channels);break;case w.LCH:n.colorNotation=w.LCH,n.channels=Zc(r.channels);break;case w.OKLCH:n.colorNotation=w.OKLCH,n.channels=to(r.channels);break;case w.OKLab:n.colorNotation=w.OKLab,n.channels=Qc(r.channels);break;case w.XYZ_D50:n.colorNotation=w.XYZ_D50,n.channels=r.channels;break;case w.XYZ_D65:n.colorNotation=w.XYZ_D65,n.channels=du(r.channels);break;default:throw new Error("Unsupported color notation")}}else n.channels=we(e.channels);if(t===e.colorNotation)n.channels=Le(e.channels,[0,1,2],n.channels,[0,1,2]);else if(oo.has(t)&&oo.has(e.colorNotation))n.channels=Le(e.channels,[0,1,2],n.channels,[0,1,2]);else switch(t){case w.HSL:switch(e.colorNotation){case w.HWB:n.channels=Le(e.channels,[0],n.channels,[0]);break;case w.Lab:case w.OKLab:n.channels=Le(e.channels,[2],n.channels,[0]);break;case w.LCH:case w.OKLCH:n.channels=Le(e.channels,[0,1,2],n.channels,[2,1,0])}break;case w.HWB:switch(e.colorNotation){case w.HSL:n.channels=Le(e.channels,[0],n.channels,[0]);break;case w.LCH:case w.OKLCH:n.channels=Le(e.channels,[0],n.channels,[2])}break;case w.Lab:case w.OKLab:switch(e.colorNotation){case w.HSL:n.channels=Le(e.channels,[0],n.channels,[2]);break;case w.Lab:case w.OKLab:n.channels=Le(e.channels,[0,1,2],n.channels,[0,1,2]);break;case w.LCH:case w.OKLCH:n.channels=Le(e.channels,[0],n.channels,[0])}break;case w.LCH:case w.OKLCH:switch(e.colorNotation){case w.HSL:n.channels=Le(e.channels,[0,1,2],n.channels,[2,1,0]);break;case w.HWB:n.channels=Le(e.channels,[0],n.channels,[2]);break;case w.Lab:case w.OKLab:n.channels=Le(e.channels,[0],n.channels,[0]);break;case w.LCH:case w.OKLCH:n.channels=Le(e.channels,[0,1,2],n.channels,[0,1,2])}}return n.channels=wu(n.channels,t),n}function wu(e,t){const n=[...e];switch(t){case w.HSL:!Number.isNaN(n[1])&&jn(n[1],4)<=0&&(n[0]=Number.NaN);break;case w.HWB:Math.max(0,jn(n[1],4))+Math.max(0,jn(n[2],4))>=100&&(n[0]=Number.NaN);break;case w.LCH:!Number.isNaN(n[1])&&jn(n[1],4)<=0&&(n[2]=Number.NaN);break;case w.OKLCH:!Number.isNaN(n[1])&&jn(n[1],6)<=0&&(n[2]=Number.NaN)}return n}function Le(e,t,n,r){const s=[...n];for(const a of t)Number.isNaN(e[t[a]])&&(s[r[a]]=Number.NaN);return s}function Os(e){const t=new Map;switch(e.colorNotation){case w.RGB:case w.HEX:t.set("r",K(255*e.channels[0])),t.set("g",K(255*e.channels[1])),t.set("b",K(255*e.channels[2])),typeof e.alpha=="number"&&t.set("alpha",K(e.alpha));break;case w.HSL:t.set("h",K(e.channels[0])),t.set("s",K(e.channels[1])),t.set("l",K(e.channels[2])),typeof e.alpha=="number"&&t.set("alpha",K(e.alpha));break;case w.HWB:t.set("h",K(e.channels[0])),t.set("w",K(e.channels[1])),t.set("b",K(e.channels[2])),typeof e.alpha=="number"&&t.set("alpha",K(e.alpha));break;case w.Lab:case w.OKLab:t.set("l",K(e.channels[0])),t.set("a",K(e.channels[1])),t.set("b",K(e.channels[2])),typeof e.alpha=="number"&&t.set("alpha",K(e.alpha));break;case w.LCH:case w.OKLCH:t.set("l",K(e.channels[0])),t.set("c",K(e.channels[1])),t.set("h",K(e.channels[2])),typeof e.alpha=="number"&&t.set("alpha",K(e.alpha));break;case w.sRGB:case w.A98_RGB:case w.Display_P3:case w.Linear_Display_P3:case w.Rec2020:case w.Linear_sRGB:case w.ProPhoto_RGB:t.set("r",K(e.channels[0])),t.set("g",K(e.channels[1])),t.set("b",K(e.channels[2])),typeof e.alpha=="number"&&t.set("alpha",K(e.alpha));break;case w.XYZ_D50:case w.XYZ_D65:t.set("x",K(e.channels[0])),t.set("y",K(e.channels[1])),t.set("z",K(e.channels[2])),typeof e.alpha=="number"&&t.set("alpha",K(e.alpha))}return t}function Is(e){const t=new Map(e);for(const[n,r]of e)Number.isNaN(r[4].value)&&t.set(n,K(0));return t}function K(e){return Number.isNaN(e)?[g.Number,"none",-1,-1,{value:Number.NaN,type:F.Number}]:[g.Number,e.toString(),-1,-1,{value:e,type:F.Number}]}function jn(e,t=7){if(Number.isNaN(e))return 0;const n=Math.pow(10,t);return Math.round(e*n)/n}function U(e,t,n,r){return Math.min(Math.max(e/t,n),r)}const $u=/[A-Z]/g;function Z(e){return e.replace($u,t=>String.fromCharCode(t.charCodeAt(0)+32))}function pn(e,t,n){if(ne(e)&&Z(e[4].value)==="none")return n.syntaxFlags.add(P.HasNoneKeywords),[g.Number,"none",e[2],e[3],{value:Number.NaN,type:F.Number}];if(X(e)){t!==3&&n.syntaxFlags.add(P.HasPercentageValues);let r=U(e[4].value,100,-2147483647,2147483647);return t===3&&(r=U(e[4].value,100,0,1)),[g.Number,r.toString(),e[2],e[3],{value:r,type:F.Number}]}if(L(e)){t!==3&&n.syntaxFlags.add(P.HasNumberValues);let r=U(e[4].value,1,-2147483647,2147483647);return t===3&&(r=U(e[4].value,1,0,1)),[g.Number,r.toString(),e[2],e[3],{value:r,type:F.Number}]}return!1}const Nu=new Set(["srgb","srgb-linear","display-p3","display-p3-linear","a98-rgb","prophoto-rgb","rec2020","xyz","xyz-d50","xyz-d65"]);function yu(e,t){const n=[],r=[],s=[],a=[];let o,i,l=!1,c=!1;const u={colorNotation:w.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};let h=n;for(let $=0;$<e.value.length;$++){let b=e.value[$];if(He(b)||ze(b))for(;He(e.value[$+1])||ze(e.value[$+1]);)$++;else if(h===n&&n.length&&(h=r),h===r&&r.length&&(h=s),O(b)&&Cn(b.value)&&b.value[4].value==="/"){if(h===a)return!1;h=a}else{if(Be(b)){if(h===a&&Z(b.getName())==="var"){u.syntaxFlags.add(P.HasVariableAlpha),h.push(b);continue}if(!kn.has(Z(b.getName())))return!1;const[[N]]=Qt([[b]],{censorIntoStandardRepresentableValues:!0,globals:i,precision:-1,toCanonicalUnits:!0,rawPercentages:!0});if(!N||!O(N)||!re(N.value))return!1;Number.isNaN(N.value[4].value)&&(N.value[4].value=0),b=N}if(h===n&&n.length===0&&O(b)&&ne(b.value)&&Nu.has(Z(b.value[4].value))){if(l)return!1;l=Z(b.value[4].value),u.colorNotation=Eu(l),c&&(c.colorNotation!==u.colorNotation&&(c=Bt(c,u.colorNotation)),o=Os(c),i=Is(o))}else if(h===n&&n.length===0&&O(b)&&ne(b.value)&&Z(b.value[4].value)==="from"){if(c||l)return!1;for(;He(e.value[$+1])||ze(e.value[$+1]);)$++;if($++,b=e.value[$],c=t(b),c===!1)return!1;c.syntaxFlags.has(P.Experimental)&&u.syntaxFlags.add(P.Experimental),u.syntaxFlags.add(P.RelativeColorSyntax)}else{if(!O(b))return!1;if(ne(b.value)&&o&&o.has(Z(b.value[4].value))){h.push(new T(o.get(Z(b.value[4].value))));continue}h.push(b)}}}if(!l||h.length!==1||n.length!==1||r.length!==1||s.length!==1||!O(n[0])||!O(r[0])||!O(s[0])||o&&!o.has("alpha"))return!1;const p=pn(n[0].value,0,u);if(!p||!L(p))return!1;const d=pn(r[0].value,1,u);if(!d||!L(d))return!1;const f=pn(s[0].value,2,u);if(!f||!L(f))return!1;const v=[p,d,f];if(a.length===1)if(u.syntaxFlags.add(P.HasAlpha),O(a[0])){const $=pn(a[0].value,3,u);if(!$||!L($))return!1;v.push($)}else u.alpha=a[0];else if(o&&o.has("alpha")){const $=pn(o.get("alpha"),3,u);if(!$||!L($))return!1;v.push($)}return u.channels=[v[0][4].value,v[1][4].value,v[2][4].value],v.length===4&&(u.alpha=v[3][4].value),u}function Eu(e){switch(e){case"srgb":return w.sRGB;case"srgb-linear":return w.Linear_sRGB;case"display-p3":return w.Display_P3;case"display-p3-linear":return w.Linear_Display_P3;case"a98-rgb":return w.A98_RGB;case"prophoto-rgb":return w.ProPhoto_RGB;case"rec2020":return w.Rec2020;case"xyz":case"xyz-d65":return w.XYZ_D65;case"xyz-d50":return w.XYZ_D50;default:throw new Error("Unknown color space name: "+e)}}const Cu=new Set(["srgb","srgb-linear","display-p3","display-p3-linear","a98-rgb","prophoto-rgb","rec2020","lab","oklab","xyz","xyz-d50","xyz-d65"]),Ls=new Set(["hsl","hwb","lch","oklch"]),xu=new Set(["shorter","longer","increasing","decreasing"]);function Fu(e,t){let n=null,r=null,s=null,a=!1;for(let o=0;o<e.value.length;o++){const i=e.value[o];if(!yt(i)){if(!(n||O(i)&&ne(i.value)&&Z(i.value[4].value)==="in"))return io("oklab",kr(e.value,t));if(O(i)&&ne(i.value)){if(!n&&Z(i.value[4].value)==="in"){n=i;continue}if(n&&!r){r=Z(i.value[4].value);continue}if(n&&r&&!s&&Ls.has(r)){s=Z(i.value[4].value);continue}if(n&&r&&s&&!a&&Z(i.value[4].value)==="hue"){a=!0;continue}return!1}return!(!O(i)||!tt(i.value))&&!!r&&(s||a?!!(r&&s&&a&&Ls.has(r)&&xu.has(s))&&lo(r,s,kr(e.value.slice(o+1),t)):Cu.has(r)?io(r,kr(e.value.slice(o+1),t)):!!Ls.has(r)&&lo(r,"shorter",kr(e.value.slice(o+1),t)))}}return!1}function kr(e,t){const n=[];let r=1,s=!1,a=!1;for(let c=0;c<e.length;c++){let u=e[c];if(!yt(u)){if(!O(u)||!tt(u.value)){if(!s){const h=t(u);if(h){s=h;continue}}if(!a){if(Be(u)&&kn.has(Z(u.getName()))){if([[u]]=Qt([[u]],{censorIntoStandardRepresentableValues:!0,precision:-1,toCanonicalUnits:!0,rawPercentages:!0}),!u||!O(u)||!re(u.value))return!1;Number.isNaN(u.value[4].value)&&(u.value[4].value=0)}if(O(u)&&X(u.value)&&u.value[4].value>=0){a=u.value[4].value;continue}}return!1}if(!s)return!1;n.push({color:s,percentage:a}),s=!1,a=!1}}if(!s)return!1;n.push({color:s,percentage:a});let o=0,i=0;for(let c=0;c<n.length;c++){const u=n[c].percentage;if(u!==!1){if(u<0||u>100)return!1;o+=u}else i++}const l=Math.max(0,100-o);o=0;for(let c=0;c<n.length;c++)n[c].percentage===!1&&(n[c].percentage=l/i),o+=n[c].percentage;if(o===0)return{colors:[{color:{channels:[0,0,0],colorNotation:w.sRGB,alpha:0,syntaxFlags:new Set},percentage:0}],alphaMultiplier:0};if(o>100)for(let c=0;c<n.length;c++){let u=n[c].percentage;u=u/o*100,n[c].percentage=u}if(o<100){r=o/100;for(let c=0;c<n.length;c++){let u=n[c].percentage;u=u/o*100,n[c].percentage=u}}return{colors:n,alphaMultiplier:r}}function io(e,t){if(!t||!t.colors.length)return!1;const n=t.colors.slice();n.reverse();let r=w.RGB;switch(e){case"srgb":r=w.RGB;break;case"srgb-linear":r=w.Linear_sRGB;break;case"display-p3":r=w.Display_P3;break;case"display-p3-linear":r=w.Linear_Display_P3;break;case"a98-rgb":r=w.A98_RGB;break;case"prophoto-rgb":r=w.ProPhoto_RGB;break;case"rec2020":r=w.Rec2020;break;case"lab":r=w.Lab;break;case"oklab":r=w.OKLab;break;case"xyz-d50":r=w.XYZ_D50;break;case"xyz":case"xyz-d65":r=w.XYZ_D65;break;default:return!1}if(n.length===1){const a=Bt(n[0].color,r);return a.colorNotation=r,a.syntaxFlags.add(P.ColorMixVariadic),typeof a.alpha!="number"?!1:(a.alpha=a.alpha*t.alphaMultiplier,a)}for(;n.length>=2;){const a=n.pop(),o=n.pop();if(!a||!o)return!1;const i=Su(r,a.color,a.percentage,o.color,o.percentage);if(!i)return!1;n.push({color:i,percentage:a.percentage+o.percentage})}const s=n[0]?.color;return!!s&&(t.colors.some(a=>a.color.syntaxFlags.has(P.Experimental))&&s.syntaxFlags.add(P.Experimental),typeof s.alpha=="number"&&(s.alpha=s.alpha*t.alphaMultiplier,t.colors.length!==2&&s.syntaxFlags.add(P.ColorMixVariadic),s))}function Su(e,t,n,r,s){const a=n/(n+s);let o=t.alpha;if(typeof o!="number")return!1;let i=r.alpha;if(typeof i!="number")return!1;o=Number.isNaN(o)?i:o,i=Number.isNaN(i)?o:i;const l=Bt(t,e).channels,c=Bt(r,e).channels;l[0]=Qe(l[0],c[0]),c[0]=Qe(c[0],l[0]),l[1]=Qe(l[1],c[1]),c[1]=Qe(c[1],l[1]),l[2]=Qe(l[2],c[2]),c[2]=Qe(c[2],l[2]),l[0]=gt(l[0],o),l[1]=gt(l[1],o),l[2]=gt(l[2],o),c[0]=gt(c[0],i),c[1]=gt(c[1],i),c[2]=gt(c[2],i);const u=it(o,i,a);return{colorNotation:e,channels:[Ht(it(l[0],c[0],a),u),Ht(it(l[1],c[1],a),u),Ht(it(l[2],c[2],a),u)],alpha:u,syntaxFlags:new Set([P.ColorMix])}}function lo(e,t,n){if(!n||!n.colors.length)return!1;const r=n.colors.slice();r.reverse();let s=w.HSL;switch(e){case"hsl":s=w.HSL;break;case"hwb":s=w.HWB;break;case"lch":s=w.LCH;break;case"oklch":s=w.OKLCH;break;default:return!1}if(r.length===1){const o=Bt(r[0].color,s);return o.colorNotation=s,o.syntaxFlags.add(P.ColorMixVariadic),typeof o.alpha!="number"?!1:(o.alpha=o.alpha*n.alphaMultiplier,o)}for(;r.length>=2;){const o=r.pop(),i=r.pop();if(!o||!i)return!1;const l=ku(s,t,o.color,o.percentage,i.color,i.percentage);if(!l)return!1;r.push({color:l,percentage:o.percentage+i.percentage})}const a=r[0]?.color;return!!a&&(n.colors.some(o=>o.color.syntaxFlags.has(P.Experimental))&&a.syntaxFlags.add(P.Experimental),typeof a.alpha=="number"&&(a.alpha=a.alpha*n.alphaMultiplier,n.colors.length!==2&&a.syntaxFlags.add(P.ColorMixVariadic),a))}function ku(e,t,n,r,s,a){const o=r/(r+a);let i=0,l=0,c=0,u=0,h=0,p=0,d=n.alpha;if(typeof d!="number")return!1;let f=s.alpha;if(typeof f!="number")return!1;d=Number.isNaN(d)?f:d,f=Number.isNaN(f)?d:f;const v=Bt(n,e).channels,$=Bt(s,e).channels;switch(e){case w.HSL:case w.HWB:i=v[0],l=$[0],c=v[1],u=$[1],h=v[2],p=$[2];break;case w.LCH:case w.OKLCH:c=v[0],u=$[0],h=v[1],p=$[1],i=v[2],l=$[2]}i=Qe(i,l),Number.isNaN(i)&&(i=0),l=Qe(l,i),Number.isNaN(l)&&(l=0),c=Qe(c,u),u=Qe(u,c),h=Qe(h,p),p=Qe(p,h);const b=l-i;switch(t){case"shorter":b>180?i+=360:b<-180&&(l+=360);break;case"longer":-180<b&&b<180&&(b>0?i+=360:l+=360);break;case"increasing":b<0&&(l+=360);break;case"decreasing":b>0&&(i+=360);break;default:throw new Error("Unknown hue interpolation method")}c=gt(c,d),h=gt(h,d),u=gt(u,f),p=gt(p,f);let N=[0,0,0];const E=it(d,f,o);switch(e){case w.HSL:case w.HWB:N=[it(i,l,o),Ht(it(c,u,o),E),Ht(it(h,p,o),E)];break;case w.LCH:case w.OKLCH:N=[Ht(it(c,u,o),E),Ht(it(h,p,o),E),it(i,l,o)]}return{colorNotation:e,channels:N,alpha:E,syntaxFlags:new Set([P.ColorMix])}}function Qe(e,t){return Number.isNaN(e)?t:e}function it(e,t,n){return e*n+t*(1-n)}function gt(e,t){return Number.isNaN(t)?e:Number.isNaN(e)?Number.NaN:e*t}function Ht(e,t){return t===0||Number.isNaN(t)?e:Number.isNaN(e)?Number.NaN:e/t}function Au(e){const t=Z(e[4].value);if(t.match(/[^a-f0-9]/))return!1;const n={colorNotation:w.HEX,channels:[0,0,0],alpha:1,syntaxFlags:new Set([P.Hex])},r=t.length;if(r===3){const s=t[0],a=t[1],o=t[2];return n.channels=[parseInt(s+s,16)/255,parseInt(a+a,16)/255,parseInt(o+o,16)/255],n}if(r===6){const s=t[0]+t[1],a=t[2]+t[3],o=t[4]+t[5];return n.channels=[parseInt(s,16)/255,parseInt(a,16)/255,parseInt(o,16)/255],n}if(r===4){const s=t[0],a=t[1],o=t[2],i=t[3];return n.channels=[parseInt(s+s,16)/255,parseInt(a+a,16)/255,parseInt(o+o,16)/255],n.alpha=parseInt(i+i,16)/255,n.syntaxFlags.add(P.HasAlpha),n}if(r===8){const s=t[0]+t[1],a=t[2]+t[3],o=t[4]+t[5],i=t[6]+t[7];return n.channels=[parseInt(s,16)/255,parseInt(a,16)/255,parseInt(o,16)/255],n.alpha=parseInt(i,16)/255,n.syntaxFlags.add(P.HasAlpha),n}return!1}function qn(e){if(L(e))return e[4].value=e[4].value%360,e[1]=e[4].value.toString(),e;if(J(e)){let t=e[4].value;switch(Z(e[4].unit)){case"deg":break;case"rad":t=180*e[4].value/Math.PI;break;case"grad":t=.9*e[4].value;break;case"turn":t=360*e[4].value;break;default:return!1}return t%=360,[g.Number,t.toString(),e[2],e[3],{value:t,type:F.Number}]}return!1}function Pu(e,t,n){if(t===0){const r=qn(e);return r!==!1&&(J(e)&&n.syntaxFlags.add(P.HasDimensionValues),r)}if(X(e)){t===3?n.syntaxFlags.add(P.HasPercentageAlpha):n.syntaxFlags.add(P.HasPercentageValues);let r=U(e[4].value,1,0,100);return t===3&&(r=U(e[4].value,100,0,1)),[g.Number,r.toString(),e[2],e[3],{value:r,type:F.Number}]}if(L(e)){if(t!==3)return!1;let r=U(e[4].value,1,0,100);return t===3&&(r=U(e[4].value,1,0,1)),[g.Number,r.toString(),e[2],e[3],{value:r,type:F.Number}]}return!1}function Du(e,t,n){if(ne(e)&&Z(e[4].value)==="none")return n.syntaxFlags.add(P.HasNoneKeywords),[g.Number,"none",e[2],e[3],{value:Number.NaN,type:F.Number}];if(t===0){const r=qn(e);return r!==!1&&(J(e)&&n.syntaxFlags.add(P.HasDimensionValues),r)}if(X(e)){t===3?n.syntaxFlags.add(P.HasPercentageAlpha):n.syntaxFlags.add(P.HasPercentageValues);let r=e[4].value;return t===3?r=U(e[4].value,100,0,1):t===1&&(r=U(e[4].value,1,0,2147483647)),[g.Number,r.toString(),e[2],e[3],{value:r,type:F.Number}]}if(L(e)){t!==3&&n.syntaxFlags.add(P.HasNumberValues);let r=e[4].value;return t===3?r=U(e[4].value,1,0,1):t===1&&(r=U(e[4].value,1,0,2147483647)),[g.Number,r.toString(),e[2],e[3],{value:r,type:F.Number}]}return!1}function co(e,t,n,r){const s=[],a=[],o=[],i=[],l={colorNotation:n,channels:[0,0,0],alpha:1,syntaxFlags:new Set(r)};let c=s;for(let f=0;f<e.value.length;f++){let v=e.value[f];if(!He(v)&&!ze(v)){if(O(v)&&tt(v.value)){if(c===s){c=a;continue}if(c===a){c=o;continue}if(c===o){c=i;continue}if(c===i)return!1}if(Be(v)){if(c===i&&v.getName().toLowerCase()==="var"){l.syntaxFlags.add(P.HasVariableAlpha),c.push(v);continue}if(!kn.has(v.getName().toLowerCase()))return!1;const[[$]]=Qt([[v]],{censorIntoStandardRepresentableValues:!0,precision:-1,toCanonicalUnits:!0,rawPercentages:!0});if(!$||!O($)||!re($.value))return!1;Number.isNaN($.value[4].value)&&($.value[4].value=0),v=$}if(!O(v))return!1;c.push(v)}}if(c.length!==1||s.length!==1||a.length!==1||o.length!==1||!O(s[0])||!O(a[0])||!O(o[0]))return!1;const u=t(s[0].value,0,l);if(!u||!L(u))return!1;const h=t(a[0].value,1,l);if(!h||!L(h))return!1;const p=t(o[0].value,2,l);if(!p||!L(p))return!1;const d=[u,h,p];if(i.length===1)if(l.syntaxFlags.add(P.HasAlpha),O(i[0])){const f=t(i[0].value,3,l);if(!f||!L(f))return!1;d.push(f)}else l.alpha=i[0];return l.channels=[d[0][4].value,d[1][4].value,d[2][4].value],d.length===4&&(l.alpha=d[3][4].value),l}function zt(e,t,n,r,s){const a=[],o=[],i=[],l=[];let c,u,h=!1;const p={colorNotation:n,channels:[0,0,0],alpha:1,syntaxFlags:new Set(r)};let d=a;for(let N=0;N<e.value.length;N++){let E=e.value[N];if(He(E)||ze(E))for(;He(e.value[N+1])||ze(e.value[N+1]);)N++;else if(d===a&&a.length&&(d=o),d===o&&o.length&&(d=i),O(E)&&Cn(E.value)&&E.value[4].value==="/"){if(d===l)return!1;d=l}else{if(Be(E)){if(d===l&&E.getName().toLowerCase()==="var"){p.syntaxFlags.add(P.HasVariableAlpha),d.push(E);continue}if(!kn.has(E.getName().toLowerCase()))return!1;const[[y]]=Qt([[E]],{censorIntoStandardRepresentableValues:!0,globals:u,precision:-1,toCanonicalUnits:!0,rawPercentages:!0});if(!y||!O(y)||!re(y.value))return!1;Number.isNaN(y.value[4].value)&&(y.value[4].value=0),E=y}if(d===a&&a.length===0&&O(E)&&ne(E.value)&&E.value[4].value.toLowerCase()==="from"){if(h)return!1;for(;He(e.value[N+1])||ze(e.value[N+1]);)N++;if(N++,E=e.value[N],h=s(E),h===!1)return!1;h.syntaxFlags.has(P.Experimental)&&p.syntaxFlags.add(P.Experimental),p.syntaxFlags.add(P.RelativeColorSyntax),h.colorNotation!==n&&(h=Bt(h,n)),c=Os(h),u=Is(c)}else{if(!O(E))return!1;if(ne(E.value)&&c){const y=E.value[4].value.toLowerCase();if(c.has(y)){d.push(new T(c.get(y)));continue}}d.push(E)}}}if(d.length!==1||a.length!==1||o.length!==1||i.length!==1||!O(a[0])||!O(o[0])||!O(i[0])||c&&!c.has("alpha"))return!1;const f=t(a[0].value,0,p);if(!f||!L(f))return!1;const v=t(o[0].value,1,p);if(!v||!L(v))return!1;const $=t(i[0].value,2,p);if(!$||!L($))return!1;const b=[f,v,$];if(l.length===1)if(p.syntaxFlags.add(P.HasAlpha),O(l[0])){const N=t(l[0].value,3,p);if(!N||!L(N))return!1;b.push(N)}else p.alpha=l[0];else if(c&&c.has("alpha")){const N=t(c.get("alpha"),3,p);if(!N||!L(N))return!1;b.push(N)}return p.channels=[b[0][4].value,b[1][4].value,b[2][4].value],b.length===4&&(p.alpha=b[3][4].value),p}function Mu(e,t){if(e.value.some(n=>O(n)&&tt(n.value))){const n=Bu(e);if(n!==!1)return n}{const n=Ru(e,t);if(n!==!1)return n}return!1}function Bu(e){return co(e,Pu,w.HSL,[P.LegacyHSL])}function Ru(e,t){return zt(e,Du,w.HSL,[],t)}function Ou(e,t,n){if(ne(e)&&Z(e[4].value)==="none")return n.syntaxFlags.add(P.HasNoneKeywords),[g.Number,"none",e[2],e[3],{value:Number.NaN,type:F.Number}];if(t===0){const r=qn(e);return r!==!1&&(J(e)&&n.syntaxFlags.add(P.HasDimensionValues),r)}if(X(e)){t===3?n.syntaxFlags.add(P.HasPercentageAlpha):n.syntaxFlags.add(P.HasPercentageValues);let r=e[4].value;return t===3&&(r=U(e[4].value,100,0,1)),[g.Number,r.toString(),e[2],e[3],{value:r,type:F.Number}]}if(L(e)){t!==3&&n.syntaxFlags.add(P.HasNumberValues);let r=e[4].value;return t===3&&(r=U(e[4].value,1,0,1)),[g.Number,r.toString(),e[2],e[3],{value:r,type:F.Number}]}return!1}function Iu(e,t,n){if(ne(e)&&Z(e[4].value)==="none")return n.syntaxFlags.add(P.HasNoneKeywords),[g.Number,"none",e[2],e[3],{value:Number.NaN,type:F.Number}];if(X(e)){t!==3&&n.syntaxFlags.add(P.HasPercentageValues);let r=U(e[4].value,1,0,100);return t===1||t===2?r=U(e[4].value,.8,-2147483647,2147483647):t===3&&(r=U(e[4].value,100,0,1)),[g.Number,r.toString(),e[2],e[3],{value:r,type:F.Number}]}if(L(e)){t!==3&&n.syntaxFlags.add(P.HasNumberValues);let r=U(e[4].value,1,0,100);return t===1||t===2?r=U(e[4].value,1,-2147483647,2147483647):t===3&&(r=U(e[4].value,1,0,1)),[g.Number,r.toString(),e[2],e[3],{value:r,type:F.Number}]}return!1}function Lu(e,t){return zt(e,Iu,w.Lab,[],t)}function Tu(e,t,n){if(ne(e)&&Z(e[4].value)==="none")return n.syntaxFlags.add(P.HasNoneKeywords),[g.Number,"none",e[2],e[3],{value:Number.NaN,type:F.Number}];if(t===2){const r=qn(e);return r!==!1&&(J(e)&&n.syntaxFlags.add(P.HasDimensionValues),r)}if(X(e)){t!==3&&n.syntaxFlags.add(P.HasPercentageValues);let r=U(e[4].value,1,0,100);return t===1?r=U(e[4].value,100/150,0,2147483647):t===3&&(r=U(e[4].value,100,0,1)),[g.Number,r.toString(),e[2],e[3],{value:r,type:F.Number}]}if(L(e)){t!==3&&n.syntaxFlags.add(P.HasNumberValues);let r=U(e[4].value,1,0,100);return t===1?r=U(e[4].value,1,0,2147483647):t===3&&(r=U(e[4].value,1,0,1)),[g.Number,r.toString(),e[2],e[3],{value:r,type:F.Number}]}return!1}function _u(e,t){return zt(e,Tu,w.LCH,[],t)}const uo=new Map;for(const[e,t]of Object.entries(bu))uo.set(e,t);function Wu(e){const t=uo.get(Z(e));return!!t&&{colorNotation:w.RGB,channels:[t[0]/255,t[1]/255,t[2]/255],alpha:1,syntaxFlags:new Set([P.ColorKeyword,P.NamedColor])}}function Hu(e,t,n){if(ne(e)&&Z(e[4].value)==="none")return n.syntaxFlags.add(P.HasNoneKeywords),[g.Number,"none",e[2],e[3],{value:Number.NaN,type:F.Number}];if(X(e)){t!==3&&n.syntaxFlags.add(P.HasPercentageValues);let r=U(e[4].value,100,0,1);return t===1||t===2?r=U(e[4].value,250,-2147483647,2147483647):t===3&&(r=U(e[4].value,100,0,1)),[g.Number,r.toString(),e[2],e[3],{value:r,type:F.Number}]}if(L(e)){t!==3&&n.syntaxFlags.add(P.HasNumberValues);let r=U(e[4].value,1,0,1);return t===1||t===2?r=U(e[4].value,1,-2147483647,2147483647):t===3&&(r=U(e[4].value,1,0,1)),[g.Number,r.toString(),e[2],e[3],{value:r,type:F.Number}]}return!1}function zu(e,t){return zt(e,Hu,w.OKLab,[],t)}function Uu(e,t,n){if(ne(e)&&Z(e[4].value)==="none")return n.syntaxFlags.add(P.HasNoneKeywords),[g.Number,"none",e[2],e[3],{value:Number.NaN,type:F.Number}];if(t===2){const r=qn(e);return r!==!1&&(J(e)&&n.syntaxFlags.add(P.HasDimensionValues),r)}if(X(e)){t!==3&&n.syntaxFlags.add(P.HasPercentageValues);let r=U(e[4].value,100,0,1);return t===1?r=U(e[4].value,250,0,2147483647):t===3&&(r=U(e[4].value,100,0,1)),[g.Number,r.toString(),e[2],e[3],{value:r,type:F.Number}]}if(L(e)){t!==3&&n.syntaxFlags.add(P.HasNumberValues);let r=U(e[4].value,1,0,1);return t===1?r=U(e[4].value,1,0,2147483647):t===3&&(r=U(e[4].value,1,0,1)),[g.Number,r.toString(),e[2],e[3],{value:r,type:F.Number}]}return!1}function Gu(e,t){return zt(e,Uu,w.OKLCH,[],t)}function Vu(e,t,n){if(X(e)){t===3?n.syntaxFlags.add(P.HasPercentageAlpha):n.syntaxFlags.add(P.HasPercentageValues);const r=U(e[4].value,100,0,1);return[g.Number,r.toString(),e[2],e[3],{value:r,type:F.Number}]}if(L(e)){t!==3&&n.syntaxFlags.add(P.HasNumberValues);let r=U(e[4].value,255,0,1);return t===3&&(r=U(e[4].value,1,0,1)),[g.Number,r.toString(),e[2],e[3],{value:r,type:F.Number}]}return!1}function ju(e,t,n){if(ne(e)&&e[4].value.toLowerCase()==="none")return n.syntaxFlags.add(P.HasNoneKeywords),[g.Number,"none",e[2],e[3],{value:Number.NaN,type:F.Number}];if(X(e)){t!==3&&n.syntaxFlags.add(P.HasPercentageValues);let r=U(e[4].value,100,-2147483647,2147483647);return t===3&&(r=U(e[4].value,100,0,1)),[g.Number,r.toString(),e[2],e[3],{value:r,type:F.Number}]}if(L(e)){t!==3&&n.syntaxFlags.add(P.HasNumberValues);let r=U(e[4].value,255,-2147483647,2147483647);return t===3&&(r=U(e[4].value,1,0,1)),[g.Number,r.toString(),e[2],e[3],{value:r,type:F.Number}]}return!1}function qu(e,t){if(e.value.some(n=>O(n)&&tt(n.value))){const n=Yu(e);if(n!==!1)return(!n.syntaxFlags.has(P.HasNumberValues)||!n.syntaxFlags.has(P.HasPercentageValues))&&n}else{const n=Xu(e,t);if(n!==!1)return n}return!1}function Yu(e){return co(e,Vu,w.RGB,[P.LegacyRGB])}function Xu(e,t){return zt(e,ju,w.RGB,[],t)}function Ku(e){const t=Rs(e);if(mu(t))return no(t);let n=e;return n=to(n),n[0]<1e-6&&(n=[0,0,0]),n[0]>.999999&&(n=[1,0,0]),Gn(gu(n,Zu,Ju))}function Zu(e){return e=Ka(e),e=Es(e),Un(e)}function Ju(e){return e=Vn(e),e=xs(e),Za(e)}function Qu(e,t){let n=!1;for(let o=0;o<e.value.length;o++){const i=e.value[o];if(!He(i)&&!ze(i)&&(n||(n=t(i),!n)))return!1}if(!n)return!1;n.channels=we(n.channels),n.channels=Ku(ao(n).channels),n.colorNotation=w.sRGB;const r={colorNotation:w.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([P.ContrastColor,P.Experimental])},s=so(n.channels,[1,1,1]),a=so(n.channels,[0,0,0]);return r.channels=s>a?[1,1,1]:[0,0,0],r}function eh(e,t){let n,r,s=!1,a=!1,o=!1;const i={colorNotation:w.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};for(let l=0;l<e.value.length;l++){let c=e.value[l];if(He(c)||ze(c))for(;He(e.value[l+1])||ze(e.value[l+1]);)l++;else if(o&&!s&&!a&&O(c)&&Cn(c.value)&&c.value[4].value==="/")s=!0;else{if(Be(c)&&kn.has(Z(c.getName()))){const[[u]]=Qt([[c]],{censorIntoStandardRepresentableValues:!0,globals:r,precision:-1,toCanonicalUnits:!0,rawPercentages:!0});if(!u||!O(u)||!re(u.value))return!1;Number.isNaN(u.value[4].value)&&(u.value[4].value=0),c=u}if(s||a||!O(c)||!ne(c.value)||Z(c.value[4].value)!=="from"){if(!s||a)return!1;if(O(c)){if(ne(c.value)&&Z(c.value[4].value)==="alpha"&&n&&n.has("alpha")){i.alpha=n.get("alpha")[4].value,a=!0;continue}const u=pn(c.value,3,i);if(!u||!L(u))return!1;i.alpha=new T(u),a=!0;continue}if(Be(c)){const u=na([[c]],h=>{if(O(h)&&ne(h.value)&&Z(h.value[4].value)==="alpha"&&n&&n.has("alpha"))return new T(n.get("alpha"))});i.alpha=u[0][0],a=!0;continue}return!1}if(o)return!1;for(;He(e.value[l+1])||ze(e.value[l+1]);)l++;if(l++,c=e.value[l],o=t(c),o===!1)return!1;n=Os(o),r=Is(n),i.syntaxFlags=new Set(o.syntaxFlags),i.syntaxFlags.add(P.RelativeAlphaSyntax),i.channels=[...o.channels],i.colorNotation=o.colorNotation,i.alpha=o.alpha}}return!!n&&i}function et(e){if(Be(e))switch(Z(e.getName())){case"rgb":case"rgba":return qu(e,et);case"hsl":case"hsla":return Mu(e,et);case"hwb":return t=et,zt(e,Ou,w.HWB,[],t);case"lab":return Lu(e,et);case"lch":return _u(e,et);case"oklab":return zu(e,et);case"oklch":return Gu(e,et);case"color":return yu(e,et);case"color-mix":return Fu(e,et);case"contrast-color":return Qu(e,et);case"alpha":return eh(e,et)}var t;if(O(e)){if($i(e.value))return Au(e.value);if(ne(e.value)){const n=Wu(e.value[4].value);return n!==!1?n:Z(e.value[4].value)==="transparent"&&{colorNotation:w.RGB,channels:[0,0,0],alpha:0,syntaxFlags:new Set([P.ColorKeyword])}}}return!1}const{CloseParen:ho,Comment:fo,Delim:th,Dimension:nh,EOF:po,Function:mo,Ident:rh,Number:sh,OpenParen:go,Percentage:ah,Whitespace:vo}=g,{HasNoneKeywords:Ts}=P,bo="relative-color",oh=8,dn=10,_s=16,ih=100,Ws=255,wo=new RegExp(`^${Mn}(${nn}|${vr})\\s+`),lh=/(?:hsla?|hwb)$/,ch=new RegExp(`^(?:${Na}|${Gl})$`),Hs=/^(?:abs|sig?n|cos|tan)\(/,uh=new RegExp(da),hh=new RegExp(Mn),$o=new RegExp(`^${jl}`),No=new RegExp(`^${Mn}`),fh=new RegExp(Pn);function yo(e,t={}){if(!Array.isArray(e))throw new TypeError(`${e} is not an array.`);const{colorSpace:n="",format:r=""}=t,s=new Map([["color",["r","g","b","alpha"]],["hsl",["h","s","l","alpha"]],["hsla",["h","s","l","alpha"]],["hwb",["h","w","b","alpha"]],["lab",["l","a","b","alpha"]],["lch",["l","c","h","alpha"]],["oklab",["l","a","b","alpha"]],["oklch",["l","c","h","alpha"]],["rgb",["r","g","b","alpha"]],["rgba",["r","g","b","alpha"]]]).get(n);if(!s)return new S;const a=new Set,o=[[],[],[],[]];let i=0,l=0,c="",u=!1;for(;e.length;){const p=e.shift();if(!Array.isArray(p))throw new TypeError(`${p} is not an array.`);const[d,f,,,v]=p,$=o[i];if(Array.isArray($))switch(d){case th:{if(c){if((f==="+"||f==="-")&&u&&!Hs.test(c))return new S;u=!1,$.push(f)}break}case nh:{if(!c||!Hs.test(c))return new S;const b=_o(p,t);x(b)?$.push(b):$.push(f);break}case mo:{$.push(f),c=f,l++,uh.test(f)&&a.add(l);break}case rh:{if(!s.includes(f))return new S;$.push(f),c||i++;break}case sh:{$.push(Number(v?.value)),c||i++;break}case go:{$.push(f),l++;break}case ho:{c&&($[$.length-1]===" "?$.splice(-1,1,f):$.push(f),a.has(l)&&a.delete(l),l--,l===0&&(c="",i++));break}case ah:{if(c){if(!Hs.test(c)){const b=$.toReversed().find(N=>N!==" ");if(b==="+"||b==="-")return new S;b==="*"||b==="/"?u=!1:u=!0}}else return new S;$.push(Number(v?.value)/ih),c||i++;break}case vo:{if($.length&&c){const b=$[$.length-1];(typeof b=="number"||x(b)&&!b.endsWith("(")&&b!==" ")&&$.push(f)}break}default:d!==fo&&d!==po&&c&&$.push(f)}}const h=[];for(const p of o)if(p.length===1){const[d]=p;en(d)&&h.push(d)}else if(p.length){const d=To(p.join(""),{format:r});h.push(d)}return h}function ph(e,t={}){const{colorScheme:n="normal",currentColor:r="",format:s=""}=t;if(x(e)){if(e=e.toLowerCase().trim(),!e)return new S;if(!No.test(e))return e}else return new S;const a=ue({namespace:bo,name:"extractOriginColor",value:e},t),o=ce(a);if(o instanceof te)return o.isNull?o:o.item;if(/currentcolor/.test(e))if(r)e=e.replace(/currentcolor/g,r);else return C(a,null),new S;let i="";if($o.test(e)&&([,i]=e.match($o)),t.colorSpace=i,e.includes(mr)){const l=e.replace(new RegExp(`^${i}\\(`),"").replace(/\)$/,""),[,c=""]=Gt(l),u=me(c,{colorScheme:n,format:j});if(u==="")return C(a,null),new S;if(s===j)e=e.replace(c,u);else{const h=me(u,t);x(h)&&(e=e.replace(c,h))}}if(wo.test(e)){const[,l]=e.match(wo),[,c]=e.split(l);if(/^[a-z]+$/.test(l)){if(!/^transparent$/.test(l)&&!Object.hasOwn(un,l))return C(a,null),new S}else if(s===j){const u=me(l,t);x(u)&&(e=e.replace(l,u))}if(s===j){const u=Nt({css:c}),h=yo(u,t);if(h instanceof S)return C(a,null),h;const[p,d,f,v]=h;let $="";en(v)?$=` ${p} ${d} ${f} / ${v})`:$=` ${h.join(" ")})`,c!==$&&(e=e.replace(c,$))}}else{const[,l]=e.split(No),c=Nt({css:l}),u=[];let h=0;for(;c.length;){const[E,y]=c.shift();switch(E){case mo:case go:{u.push(y),h++;break}case ho:{const _=u[u.length-1];_===" "?u.splice(-1,1,y):x(_)&&u.push(y),h--;break}case vo:{const _=u[u.length-1];x(_)&&!_.endsWith("(")&&_!==" "&&u.push(y);break}default:E!==fo&&E!==po&&u.push(y)}if(h===0)break}const p=zs(u.join("").trim(),t);if(p instanceof S)return C(a,null),p;const d=yo(c,t);if(d instanceof S)return C(a,null),d;const[f,v,$,b]=d;let N="";en(b)?N=` ${f} ${v} ${$} / ${b})`:N=` ${d.join(" ")})`,e=e.replace(l,`${p}${N}`)}return C(a,e),e}function zs(e,t={}){const{format:n=""}=t;if(x(e)){if(fh.test(e)){if(n===j)return e;throw new SyntaxError(`Unexpected token ${Zr} found.`)}else if(!hh.test(e))return e;e=e.toLowerCase().trim()}else throw new TypeError(`${e} is not a string.`);const r=ue({namespace:bo,name:"resolveRelativeColor",value:e},t),s=ce(r);if(s instanceof te)return s.isNull?s:s.item;const a=ph(e,t);if(a instanceof S)return C(r,null),a;if(e=a,n===j)return e.startsWith("rgba(")?e=e.replace(/^rgba\(/,"rgb("):e.startsWith("hsla(")&&(e=e.replace(/^hsla\(/,"hsl(")),e;const o=Nt({css:e}),i=Si(o),l=et(i);if(!l)return C(r,null),new S;const{alpha:c,channels:u,colorNotation:h,syntaxFlags:p}=l;let d;Number.isNaN(Number(c))?p instanceof Set&&p.has(Ts)?d=m:d=0:d=M(Number(c),oh);let f,v,$;[f,v,$]=u;let b;if(ch.test(h)){const N=p instanceof Set&&p.has(Ts);Number.isNaN(f)?N?f=m:f=0:f=M(f,_s),Number.isNaN(v)?N?v=m:v=0:v=M(v,_s),Number.isNaN($)?N?$=m:$=0:$=M($,_s),d===1?b=`${h}(${f} ${v} ${$})`:b=`${h}(${f} ${v} ${$} / ${d})`}else if(lh.test(h)){Number.isNaN(f)&&(f=0),Number.isNaN(v)&&(v=0),Number.isNaN($)&&($=0);let[N,E,y]=Hn(`${h}(${f} ${v} ${$} / ${d})`);N=M(N/Ws,dn),E=M(E/Ws,dn),y=M(y/Ws,dn),d===1?b=`color(srgb ${N} ${E} ${y})`:b=`color(srgb ${N} ${E} ${y} / ${d})`}else{const N=h==="rgb"?"srgb":h,E=p instanceof Set&&p.has(Ts);Number.isNaN(f)?E?f=m:f=0:f=M(f,dn),Number.isNaN(v)?E?v=m:v=0:v=M(v,dn),Number.isNaN($)?E?$=m:$=0:$=M($,dn),d===1?b=`color(${N} ${f} ${v} ${$})`:b=`color(${N} ${f} ${v} ${$} / ${d})`}return C(r,b),b}const dh="resolve",Ut="rgba(0, 0, 0, 0)",mh=new RegExp(fr),Eo=new RegExp(ql),gh=new RegExp(Ca),vh=new RegExp(Pn),me=(e,t={})=>{if(x(e))e=e.trim();else throw new TypeError(`${e} is not a string.`);const{colorScheme:n="normal",currentColor:r="",format:s=Q,nullable:a=!1}=t,o=ue({namespace:dh,name:"resolve",value:e},t),i=ce(o);if(i instanceof te)return i.isNull?i:i.item;if(vh.test(e)){if(s===j)return C(o,e),e;const f=zn(e,t);if(f instanceof S)switch(s){case"hex":case"hexAlpha":return C(o,f),f;default:{if(a)return C(o,f),f;const v=Ut;return C(o,v),v}}else e=f}if(t.format!==s&&(t.format=s),e=e.toLowerCase(),Eo.test(e)&&e.endsWith(")")){const f=e.replace(Eo,"").replace(/\)$/,""),[v="",$=""]=Gt(f,{delimiter:","});if(v&&$){if(s===j){const E=me(v,t),y=me($,t);let _;return E&&y?_=`light-dark(${E}, ${y})`:_="",C(o,_),_}let b;n==="dark"?b=me($,t):b=me(v,t);let N;return b instanceof S?a?N=b:N=Ut:N=b,C(o,N),N}switch(s){case j:return C(o,""),"";case"hex":case"hexAlpha":return C(o,null),new S;case Q:default:{const b=Ut;return C(o,b),b}}}if(gh.test(e)){const f=zs(e,t);if(s===Q){let v;return f instanceof S?a?v=f:v=Ut:v=f,C(o,v),v}if(s===j){let v="";return f instanceof S?v="":v=f,C(o,v),v}f instanceof S?e="":e=f}mh.test(e)&&(e=Xn(e,t));let l="",c=NaN,u=NaN,h=NaN,p=NaN;if(e==="transparent")switch(s){case j:return C(o,e),e;case"hex":return C(o,null),new S;case"hexAlpha":{const f="#00000000";return C(o,f),f}case Q:default:{const f=Ut;return C(o,f),f}}else if(e==="currentcolor"){if(s===j)return C(o,e),e;if(r){let f;if(r.startsWith(Mt)?f=Fr(r,t):r.startsWith(se)?f=xt(r,t):f=Wt(r,t),f instanceof S)return C(o,f),f;[l,c,u,h,p]=f}else if(s===Q){const f=Ut;return C(o,f),f}}else if(s===j)if(e.startsWith(Mt)){const f=Fr(e,t);return C(o,f),f}else if(e.startsWith(se)){const[f,v,$,b,N]=xt(e,t);let E="";return N===1?E=`color(${f} ${v} ${$} ${b})`:E=`color(${f} ${v} ${$} ${b} / ${N})`,C(o,E),E}else{const f=Wt(e,t);if(x(f))return C(o,f),f;const[v,$,b,N,E]=f;let y="";return v==="rgb"?E===1?y=`${v}(${$}, ${b}, ${N})`:y=`${v}a(${$}, ${b}, ${N}, ${E})`:E===1?y=`${v}(${$} ${b} ${N})`:y=`${v}(${$} ${b} ${N} / ${E})`,C(o,y),y}else if(e.startsWith(Mt)){/currentcolor/.test(e)&&r&&(e=e.replace(/currentcolor/g,r)),/transparent/.test(e)&&(e=e.replace(/transparent/g,Ut));const f=Fr(e,t);if(f instanceof S)return C(o,f),f;[l,c,u,h,p]=f}else if(e.startsWith(se)){const f=xt(e,t);if(f instanceof S)return C(o,f),f;[l,c,u,h,p]=f}else if(e){const f=Wt(e,t);if(f instanceof S)return C(o,f),f;[l,c,u,h,p]=f}let d="";switch(s){case"hex":{if(Number.isNaN(c)||Number.isNaN(u)||Number.isNaN(h)||Number.isNaN(p)||p===0)return C(o,null),new S;d=Ha([c,u,h,1]);break}case"hexAlpha":{if(Number.isNaN(c)||Number.isNaN(u)||Number.isNaN(h)||Number.isNaN(p))return C(o,null),new S;d=Ha([c,u,h,p]);break}case Q:default:switch(l){case"rgb":{p===1?d=`${l}(${c}, ${u}, ${h})`:d=`${l}a(${c}, ${u}, ${h}, ${p})`;break}case"lab":case"lch":case"oklab":case"oklch":{p===1?d=`${l}(${c} ${u} ${h})`:d=`${l}(${c} ${u} ${h} / ${p})`;break}default:p===1?d=`color(${l} ${c} ${u} ${h})`:d=`color(${l} ${c} ${u} ${h} / ${p})`}}return C(o,d),d},bh=(e,t={})=>{t.nullable=!1;const n=me(e,t);return n instanceof S?null:n},{CloseParen:wh,Comma:$h,Comment:Nh,Delim:yh,EOF:Eh,Function:Ch,Ident:xh,OpenParen:Fh,Whitespace:Sh}=g,Co="util",kh=10,Ar=16,mn=360,Pr=180,Ah=new RegExp(`^(?:${nn})$`),Ph=/^(?:(?:ok)?l(?:ab|ch)|color(?:-mix)?|hsla?|hwb|rgba?|var)\(/,Dh=new RegExp(vr),Gt=(e,t={})=>{if(x(e))e=e.trim();else throw new TypeError(`${e} is not a string.`);const{delimiter:n=" ",preserveComment:r=!1}=t,s=ue({namespace:Co,name:"splitValue",value:e},{delimiter:n,preserveComment:r}),a=ce(s);if(a instanceof te)return a.item;let o;n===","?o=/^,$/:n==="/"?o=/^\/$/:o=/^\s+$/;const i=Nt({css:e});let l=0,c="";const u=[];for(;i.length;){const[h,p]=i.shift();switch(h){case $h:{o.test(p)&&l===0?(u.push(c.trim()),c=""):c+=p;break}case yh:{o.test(p)&&l===0?(u.push(c.trim()),c=""):c+=p;break}case Nh:{r&&(n===","||n==="/")&&(c+=p);break}case Ch:case Fh:{c+=p,l++;break}case wh:{c+=p,l--;break}case Sh:{o.test(p)?l===0?c&&(u.push(c.trim()),c=""):c+=" ":c.endsWith(" ")||(c+=" ");break}default:h===Eh?(u.push(c.trim()),c=""):c+=p}}return C(s,u),u},Mh=e=>{if(x(e))e=e.trim();else throw new TypeError(`${e} is not a string.`);const t=ue({namespace:Co,name:"extractDashedIdent",value:e}),n=ce(t);if(n instanceof te)return n.item;const r=Nt({css:e}),s=new Set;for(;r.length;){const[o,i]=r.shift();o===xh&&i.startsWith("--")&&s.add(i)}const a=[...s];return C(t,a),a},Rt=(e,t={})=>{if(x(e)&&(e=e.toLowerCase().trim(),e&&x(e))){if(/^[a-z]+$/.test(e)){if(/^(?:currentcolor|transparent)$/.test(e)||Object.hasOwn(un,e))return!0}else if(Ah.test(e)||Dh.test(e)||Ph.test(e)&&(t.nullable=!0,t.format||(t.format=j),me(e,t)))return!0}return!1},xo=(e,t=!1)=>typeof e>"u"?"":JSON.stringify(e,(n,r)=>{let s;return typeof r>"u"?s=null:typeof r=="function"?t?s=r.toString().replace(/\s/g,"").substring(0,Ar):s=r.name:r instanceof Map||r instanceof Set?s=[...r]:typeof r=="bigint"?s=r.toString():s=r,s}),M=(e,t=0)=>{if(!Number.isFinite(e))throw new TypeError(`${e} is not a finite number.`);if(Number.isFinite(t)){if(t<0||t>Ar)throw new RangeError(`${t} is not between 0 and ${Ar}.`)}else throw new TypeError(`${t} is not a finite number.`);if(t===0)return Math.round(e);let n;return t===Ar?n=e.toPrecision(6):t<kh?n=e.toPrecision(4):n=e.toPrecision(5),parseFloat(n)},Fo=(e,t,n="shorter")=>{if(!Number.isFinite(e))throw new TypeError(`${e} is not a finite number.`);if(!Number.isFinite(t))throw new TypeError(`${t} is not a finite number.`);switch(n){case"decreasing":{t>e&&(e+=mn);break}case"increasing":{t<e&&(t+=mn);break}case"longer":{t>e&&t<e+Pr?e+=mn:t>e+Pr*-1&&t<=e&&(t+=mn);break}default:t>e+Pr?e+=mn:t<e+Pr*-1&&(t+=mn)}return[e,t]},So=new Map([["xx-small",3/5],["x-small",3/4],["small",8/9],["medium",1],["large",6/5],["x-large",3/2],["xx-large",2],["xxx-large",3]]),ko=new Map([["smaller",1/1.2],["larger",1.2]]),Ao=new Map([["cm",96/2.54],["mm",96/2.54/10],["q",96/2.54/40],["in",96],["pc",96/6],["pt",96/72],["px",1]]),Dr=new Map([["rcap",1],["rch",.5],["rem",1],["rex",.5],["ric",1],["rlh",1.2]]),Po=(e,t,n={})=>{const{dimension:r={}}=n,{callback:s,em:a,rem:o,vh:i,vw:l}=r;if(x(e))return e=e.toLowerCase().trim(),So.has(e)?Number(So.get(e))*o:ko.has(e)?Number(ko.get(e))*a:Number.NaN;if(Number.isFinite(e)&&t){if(Object.hasOwn(r,t))return e*Number(r[t]);if(typeof s=="function")return e*s(t);if(Ao.has(t))return e*Number(Ao.get(t));if(Dr.has(t))return e*Number(Dr.get(t))*o;if(Dr.has(`r${t}`))return e*Number(Dr.get(`r${t}`))*a;switch(t){case"vb":case"vi":return e*l;case"vmax":return i>l?e*i:e*l;case"vmin":return i<l?e*i:e*l;default:return Number.NaN}}return Number.NaN},Bh=4096;class te{#s;#l;constructor(t,n=!1){this.#l=t,this.#s=!!n}get item(){return this.#l}get isNull(){return this.#s}}class S extends te{constructor(){super(Symbol("null"),!0)}}const gn=new Vs({max:Bh}),C=(e,t)=>{e&&(t===null?gn.set(e,new S):t instanceof te?gn.set(e,t):gn.set(e,new te(t)))},ce=e=>{if(e&&gn.has(e)){const t=gn.get(e);return t instanceof te?t:(gn.delete(e),!1)}return!1},ue=(e,t={})=>{const{customProperty:n={},dimension:r={}}=t;let s="";return e&&Object.keys(e).length&&typeof n.callback!="function"&&typeof r.callback!="function"&&(e.opt=xo(t),s=xo(e)),s},{CloseParen:Rh,Comment:Do,Dimension:Oh,EOF:Ih,Function:Lh,OpenParen:Th,Whitespace:Mo}=g,Bo="css-calc",_h=3,Yn=16,Ro=100,Wh=new RegExp(fr),Oo=new RegExp(`^calc\\((${Ae})\\)$`),Hh=new RegExp(da),zh=new RegExp(Pn),Mr=new RegExp(Wl),Io=/\s[*+/-]\s/,Br=new RegExp(`^(${Ae})(${tn}|${An})$`),vn=new RegExp(`^(${Ae})(${tn}|${An}|%)$`),Ot=new RegExp(`^(${Ae})%$`);class Uh{#s;#l;#d;#g;#m;#y;#v;#p;#a;#c;#n;#t;#e;#o;#u;#i;constructor(){this.#s=!1,this.#l=[],this.#d=[],this.#g=!1,this.#m=[],this.#y=[],this.#v=!1,this.#p=[],this.#a=[],this.#c=[],this.#n=[],this.#t=!1,this.#e=[],this.#o=[],this.#u=[],this.#i=[]}get hasNum(){return this.#s}set hasNum(t){this.#s=!!t}get numSum(){return this.#l}get numMul(){return this.#d}get hasPct(){return this.#g}set hasPct(t){this.#g=!!t}get pctSum(){return this.#m}get pctMul(){return this.#y}get hasDim(){return this.#v}set hasDim(t){this.#v=!!t}get dimSum(){return this.#p}get dimSub(){return this.#a}get dimMul(){return this.#c}get dimDiv(){return this.#n}get hasEtc(){return this.#t}set hasEtc(t){this.#t=!!t}get etcSum(){return this.#e}get etcSub(){return this.#o}get etcMul(){return this.#u}get etcDiv(){return this.#i}clear(){this.#s=!1,this.#l=[],this.#d=[],this.#g=!1,this.#m=[],this.#y=[],this.#v=!1,this.#p=[],this.#a=[],this.#c=[],this.#n=[],this.#t=!1,this.#e=[],this.#o=[],this.#u=[],this.#i=[]}sort(t=[]){const n=[...t];return n.length>1&&n.sort((r,s)=>{let a;if(vn.test(r)&&vn.test(s)){const[,o,i]=r.match(vn),[,l,c]=s.match(vn);i===c?Number(o)===Number(l)?a=0:Number(o)>Number(l)?a=1:a=-1:i>c?a=1:a=-1}else r===s?a=0:r>s?a=1:a=-1;return a}),n}multiply(){const t=[];let n;if(this.#s){n=1;for(const r of this.#d)if(n*=r,n===0||!Number.isFinite(n)||Number.isNaN(n))break;!this.#g&&!this.#v&&!this.hasEtc&&(Number.isFinite(n)&&(n=M(n,Yn)),t.push(n))}if(this.#g){typeof n!="number"&&(n=1);for(const r of this.#y)if(n*=r,n===0||!Number.isFinite(n)||Number.isNaN(n))break;Number.isFinite(n)&&(n=`${M(n,Yn)}%`),!this.#v&&!this.hasEtc&&t.push(n)}if(this.#v){let r="",s="",a="";this.#c.length&&(this.#c.length===1?[s]=this.#c:s=`${this.sort(this.#c).join(" * ")}`),this.#n.length&&(this.#n.length===1?[a]=this.#n:a=`${this.sort(this.#n).join(" * ")}`),Number.isFinite(n)?(s?a?a.includes("*")?r=ke(`calc(${n} * ${s} / (${a}))`,{toCanonicalUnits:!0}):r=ke(`calc(${n} * ${s} / ${a})`,{toCanonicalUnits:!0}):r=ke(`calc(${n} * ${s})`,{toCanonicalUnits:!0}):a.includes("*")?r=ke(`calc(${n} / (${a}))`,{toCanonicalUnits:!0}):r=ke(`calc(${n} / ${a})`,{toCanonicalUnits:!0}),t.push(r.replace(/^calc/,""))):(!t.length&&n!==void 0&&t.push(n),s?(a?a.includes("*")?r=ke(`calc(${s} / (${a}))`,{toCanonicalUnits:!0}):r=ke(`calc(${s} / ${a})`,{toCanonicalUnits:!0}):r=ke(`calc(${s})`,{toCanonicalUnits:!0}),t.length?t.push("*",r.replace(/^calc/,"")):t.push(r.replace(/^calc/,""))):(r=ke(`calc(${a})`,{toCanonicalUnits:!0}),t.length?t.push("/",r.replace(/^calc/,"")):t.push("1","/",r.replace(/^calc/,""))))}if(this.#t){if(this.#u.length){!t.length&&n!==void 0&&t.push(n);const r=this.sort(this.#u).join(" * ");t.length?t.push(`* ${r}`):t.push(`${r}`)}if(this.#i.length){const r=this.sort(this.#i).join(" * ");r.includes("*")?t.length?t.push(`/ (${r})`):t.push(`1 / (${r})`):t.length?t.push(`/ ${r}`):t.push(`1 / ${r}`)}}return t.length?t.join(" "):""}sum(){const t=[];if(this.#s){let n=0;for(const r of this.#l)if(n+=r,!Number.isFinite(n)||Number.isNaN(n))break;t.push(n)}if(this.#g){let n=0;for(const r of this.#m)if(n+=r,!Number.isFinite(n))break;Number.isFinite(n)&&(n=`${n}%`),t.length?t.push(`+ ${n}`):t.push(n)}if(this.#v){let n,r,s;this.#p.length&&(r=this.sort(this.#p).join(" + ")),this.#a.length&&(s=this.sort(this.#a).join(" + ")),r?s?s.includes("-")?n=ke(`calc(${r} - (${s}))`,{toCanonicalUnits:!0}):n=ke(`calc(${r} - ${s})`,{toCanonicalUnits:!0}):n=ke(`calc(${r})`,{toCanonicalUnits:!0}):n=ke(`calc(-1 * (${s}))`,{toCanonicalUnits:!0}),t.length?t.push("+",n.replace(/^calc/,"")):t.push(n.replace(/^calc/,""))}if(this.#t){if(this.#e.length){const n=this.sort(this.#e).map(r=>{let s;return Io.test(r)&&!r.startsWith("(")&&!r.endsWith(")")?s=`(${r})`:s=r,s}).join(" + ");t.length?this.#e.length>1?t.push(`+ (${n})`):t.push(`+ ${n}`):t.push(`${n}`)}if(this.#o.length){const n=this.sort(this.#o).map(r=>{let s;return Io.test(r)&&!r.startsWith("(")&&!r.endsWith(")")?s=`(${r})`:s=r,s}).join(" + ");t.length?this.#o.length>1?t.push(`- (${n})`):t.push(`- ${n}`):this.#o.length>1?t.push(`-1 * (${n})`):t.push(`-1 * ${n}`)}}return t.length?t.join(" "):""}}const Lo=(e=[],t=!1)=>{if(e.length<_h)throw new Error(`Unexpected array length ${e.length}.`);const n=e.shift();if(!x(n)||!n.endsWith("("))throw new Error(`Unexpected token ${n}.`);const r=e.pop();if(r!==")")throw new Error(`Unexpected token ${r}.`);if(e.length===1){const[c]=e;if(!en(c))throw new Error(`Unexpected token ${c}.`);return`${n}${c}${r}`}const s=[],a=new Uh;let o="";const i=e.length;for(let c=0;c<i;c++){const u=e[c];if(!en(u))throw new Error(`Unexpected token ${u}.`);if(u==="*"||u==="/")o=u;else if(u==="+"||u==="-"){const h=a.multiply();h&&s.push(h,u),a.clear(),o=""}else{const h=Number(u),p=`${u}`;switch(o){case"/":{if(Number.isFinite(h))a.hasNum=!0,a.numMul.push(1/h);else if(Ot.test(p)){const[,d]=p.match(Ot);a.hasPct=!0,a.pctMul.push(Ro*Ro/Number(d))}else Br.test(p)?(a.hasDim=!0,a.dimDiv.push(p)):(a.hasEtc=!0,a.etcDiv.push(p));break}default:if(Number.isFinite(h))a.hasNum=!0,a.numMul.push(h);else if(Ot.test(p)){const[,d]=p.match(Ot);a.hasPct=!0,a.pctMul.push(Number(d))}else Br.test(p)?(a.hasDim=!0,a.dimMul.push(p)):(a.hasEtc=!0,a.etcMul.push(p))}}if(c===i-1){const h=a.multiply();h&&s.push(h),a.clear(),o=""}}let l="";if(t&&(s.includes("+")||s.includes("-"))){const c=[];a.clear(),o="";const u=s.length;for(let h=0;h<u;h++){const p=s[h];if(en(p))if(p==="+"||p==="-")o=p;else{const d=Number(p),f=`${p}`;switch(o){case"-":{if(Number.isFinite(d))a.hasNum=!0,a.numSum.push(-1*d);else if(Ot.test(f)){const[,v]=f.match(Ot);a.hasPct=!0,a.pctSum.push(-1*Number(v))}else Br.test(f)?(a.hasDim=!0,a.dimSub.push(f)):(a.hasEtc=!0,a.etcSub.push(f));break}default:if(Number.isFinite(d))a.hasNum=!0,a.numSum.push(d);else if(Ot.test(f)){const[,v]=f.match(Ot);a.hasPct=!0,a.pctSum.push(Number(v))}else Br.test(f)?(a.hasDim=!0,a.dimSum.push(f)):(a.hasEtc=!0,a.etcSum.push(f))}}if(h===u-1){const d=a.sum();d&&c.push(d),a.clear(),o=""}}l=c.join(" ").replace(/\+\s-/g,"- ")}else l=s.join(" ").replace(/\+\s-/g,"- ");return l.startsWith("(")&&l.endsWith(")")&&l.lastIndexOf("(")===0&&l.indexOf(")")===l.length-1&&(l=l.replace(/^\(/,"").replace(/\)$/,"")),`${n}${l}${r}`},To=(e,t={})=>{const{format:n=""}=t;if(x(e)){if(!Mr.test(e)||n!==j)return e;e=e.toLowerCase().trim()}else throw new TypeError(`${e} is not a string.`);const r=ue({namespace:Bo,name:"serializeCalc",value:e},t),s=ce(r);if(s instanceof te)return s.item;const a=Nt({css:e}).map(l=>{const[c,u]=l;let h="";return c!==Mo&&c!==Do&&(h=u),h}).filter(l=>l);let o=a.findLastIndex(l=>/\($/.test(l));for(;o;){const l=a.findIndex((h,p)=>h===")"&&p>o),c=a.slice(o,l+1);let u=Lo(c);Mr.test(u)&&(u=ke(u,{toCanonicalUnits:!0})),a.splice(o,l-o+1,u),o=a.findLastIndex(h=>/\($/.test(h))}const i=Lo(a,!0);return C(r,i),i},_o=(e,t={})=>{if(!Array.isArray(e))throw new TypeError(`${e} is not an array.`);const[,,,,n={}]=e,{unit:r,value:s}=n;if(r==="px")return`${s}${r}`;const a=Po(Number(s),r,t);return Number.isFinite(a)?`${M(a,Yn)}px`:new S},Gh=(e,t={})=>{if(!Array.isArray(e))throw new TypeError(`${e} is not an array.`);const{format:n=""}=t,r=new Set;let s=0;const a=[];for(;e.length;){const o=e.shift();if(!Array.isArray(o))throw new TypeError(`${o} is not an array.`);const[i="",l=""]=o;switch(i){case Oh:{if(n===j&&!r.has(s))a.push(l);else{const c=_o(o,t);x(c)?a.push(c):a.push(l)}break}case Lh:case Th:{a.push(l),s++,Hh.test(l)&&r.add(s);break}case Rh:{a.length&&a[a.length-1]===" "?a.splice(-1,1,l):a.push(l),r.has(s)&&r.delete(s),s--;break}case Mo:{if(a.length){const c=a[a.length-1];x(c)&&!c.endsWith("(")&&c!==" "&&a.push(l)}break}default:i!==Do&&i!==Ih&&a.push(l)}}return a},Xn=(e,t={})=>{const{format:n=""}=t;if(x(e)){if(zh.test(e)){if(n===j)return e;{const l=zn(e,t);return x(l)?l:""}}else if(!Wh.test(e))return e;e=e.toLowerCase().trim()}else throw new TypeError(`${e} is not a string.`);const r=ue({namespace:Bo,name:"cssCalc",value:e},t),s=ce(r);if(s instanceof te)return s.item;const a=Nt({css:e}),o=Gh(a,t);let i=ke(o.join(""),{toCanonicalUnits:!0});if(Mr.test(e)){if(vn.test(i)){const[,l,c]=i.match(vn);i=`${M(Number(l),Yn)}${c}`}i&&!Mr.test(i)&&n===j&&(i=`calc(${i})`)}if(n===j){if(/\s[-+*/]\s/.test(i)&&!i.includes("NaN"))i=To(i,t);else if(Oo.test(i)){const[,l]=i.match(Oo);i=`calc(${M(Number(l),Yn)})`}}return C(r,i),i},Vh="css-gradient",Rr=`${Ae}(?:${tn})`,Wo=`${Rr}|${Pe}`,jh=`${Ae}(?:${An})|0`,De=`${jh}|${Pe}`,Ho=`${pa}(?:${An}|%)|0`,qh=`${pa}(?:${An})|0`,Ve="center",Us="left|right",Gs="top|bottom",It="start|end",bn=`${Us}|x-(?:${It})`,wn=`${Gs}|y-(?:${It})`,Kn=`block-(?:${It})`,Zn=`inline-(?:${It})`,Yh=`${Ve}|${bn}|${wn}|${Kn}|${Zn}|${De}`,Xh=[`(?:${Ve}|${bn})\\s+(?:${Ve}|${wn})`,`(?:${Ve}|${wn})\\s+(?:${Ve}|${bn})`,`(?:${Ve}|${bn}|${De})\\s+(?:${Ve}|${wn}|${De})`,`(?:${Ve}|${Kn})\\s+(?:${Ve}|${Zn})`,`(?:${Ve}|${Zn})\\s+(?:${Ve}|${Kn})`,`(?:${Ve}|${It})\\s+(?:${Ve}|${It})`].join("|"),Kh=[`(?:${bn})\\s+(?:${De})\\s+(?:${wn})\\s+(?:${De})`,`(?:${wn})\\s+(?:${De})\\s+(?:${bn})\\s+(?:${De})`,`(?:${Kn})\\s+(?:${De})\\s+(?:${Zn})\\s+(?:${De})`,`(?:${Zn})\\s+(?:${De})\\s+(?:${Kn})\\s+(?:${De})`,`(?:${It})\\s+(?:${De})\\s+(?:${It})\\s+(?:${De})`].join("|"),zo="(?:clos|farth)est-(?:corner|side)",Or=[`${zo}(?:\\s+${zo})?`,`${qh}`,`(?:${Ho})\\s+(?:${Ho})`].join("|"),Ir="circle|ellipse",Uo=`from\\s+${Rr}`,Ft=`at\\s+(?:${Yh}|${Xh}|${Kh})`,Go=`to\\s+(?:(?:${Us})(?:\\s(?:${Gs}))?|(?:${Gs})(?:\\s(?:${Us}))?)`,lt=`in\\s+(?:${ya}|${$a})`,Vo=/^(?:repeating-)?(?:conic|linear|radial)-gradient\(/,Zh=/^((?:repeating-)?(?:conic|linear|radial)-gradient)\(/,Jh=e=>{if(x(e)&&(e=e.trim(),Vo.test(e))){const[,t]=e.match(Zh);return t}return""},Qh=(e,t)=>{if(x(e)&&x(t)){e=e.trim(),t=t.trim();let n="";const r=[];if(/^(?:repeating-)?linear-gradient$/.test(t)?(n=[`(?:${Rr}|${Go})(?:\\s+${lt})?`,`${lt}(?:\\s+(?:${Rr}|${Go}))?`].join("|"),r.push(/to\s+bottom/)):/^(?:repeating-)?radial-gradient$/.test(t)?(n=[`(?:${Ir})(?:\\s+(?:${Or}))?(?:\\s+${Ft})?(?:\\s+${lt})?`,`(?:${Or})(?:\\s+(?:${Ir}))?(?:\\s+${Ft})?(?:\\s+${lt})?`,`${Ft}(?:\\s+${lt})?`,`${lt}(?:\\s+${Ir})(?:\\s+(?:${Or}))?(?:\\s+${Ft})?`,`${lt}(?:\\s+${Or})(?:\\s+(?:${Ir}))?(?:\\s+${Ft})?`,`${lt}(?:\\s+${Ft})?`].join("|"),r.push(/ellipse/,/farthest-corner/,/at\s+center/)):/^(?:repeating-)?conic-gradient$/.test(t)&&(n=[`${Uo}(?:\\s+${Ft})?(?:\\s+${lt})?`,`${Ft}(?:\\s+${lt})?`,`${lt}(?:\\s+${Uo})?(?:\\s+${Ft})?`].join("|"),r.push(/at\s+center/)),n){const s=new RegExp(`^(?:${n})$`).test(e);if(s){let a=e;for(const o of r)a=a.replace(o,"");return a=a.replace(/\s{2,}/g," ").trim(),{line:a,valid:s}}return{valid:s,line:e}}}return{line:e,valid:!1}},jo=(e,t,n={})=>{if(Array.isArray(e)&&e.length>1){const r=/^(?:repeating-)?conic-gradient$/.test(t)?Wo:De,s=new RegExp(`^(?:${r})$`),a=new RegExp(`(?:\\s+(?:${r})){1,2}$`),o=[],i=[];for(const l of e)if(x(l))if(s.test(l))o.push("hint"),i.push(l);else{const c=l.replace(a,"");if(Rt(c,{format:j})){const u=me(c,n);o.push("color"),i.push(l.replace(c,u))}else return{colorStops:e,valid:!1}}return{valid:/^color(?:,(?:hint,)?color)+$/.test(o.join(",")),colorStops:i}}return{colorStops:e,valid:!1}},qo=(e,t={})=>{if(x(e)){e=e.trim();const n=ue({namespace:Vh,name:"parseGradient",value:e},t),r=ce(n);if(r instanceof te)return r.isNull?null:r.item;const s=Jh(e),a=e.replace(Vo,"").replace(/\)$/,"");if(s&&a){const[o="",...i]=Gt(a,{delimiter:","}),l=/^(?:repeating-)?conic-gradient$/.test(s)?Wo:De,c=new RegExp(`(?:\\s+(?:${l})){1,2}$`);let u="";if(c.test(o)){const h=o.replace(c,"");if(Rt(h,{format:j})){const p=me(h,t);u=o.replace(h,p)}}else Rt(o,{format:j})&&(u=me(o,t));if(u){i.unshift(u);const{colorStops:h,valid:p}=jo(i,s,t);if(p){const d={value:e,type:s,colorStopList:h};return C(n,d),d}}else if(i.length>1){const{line:h,valid:p}=Qh(o,s),{colorStops:d,valid:f}=jo(i,s,t);if(p&&f){const v={value:e,type:s,gradientLine:h,colorStopList:d};return C(n,v),v}}}return C(n,null),null}return null},e0=(e,t={})=>{const{format:n=Q}=t,r=qo(e,t);if(r){const{type:s="",gradientLine:a="",colorStopList:o=[]}=r;if(s&&Array.isArray(o)&&o.length>1)return a?`${s}(${a}, ${o.join(", ")})`:`${s}(${o.join(", ")})`}return n===j?"":"none"},t0=(e,t={})=>qo(e,t)!==null,vt="convert",n0=new RegExp(fr),r0=new RegExp(Ca),s0=new RegExp(Pn),St=(e,t={})=>{if(x(e)){if(e=e.trim(),!e)return new S}else return new S;const n=ue({namespace:vt,name:"preProcess",value:e},t),r=ce(n);if(r instanceof te)return r.isNull?r:r.item;if(s0.test(e)){const s=zn(e,t);if(x(s))e=s;else return C(n,null),new S}if(r0.test(e)){const s=zs(e,t);if(x(s))e=s;else return C(n,null),new S}else n0.test(e)&&(e=Xn(e,t));if(e.startsWith("color-mix")){const s=structuredClone(t);s.format=Q,s.nullable=!0;const a=me(e,s);return C(n,a),a}return C(n,e),e},a0=e=>_n(e),o0=(e,t={})=>{if(x(e)){const o=St(e,t);if(o instanceof S)return null;e=o.toLowerCase()}else throw new TypeError(`${e} is not a string.`);const{alpha:n=!1}=t,r=ue({namespace:vt,name:"colorToHex",value:e},t),s=ce(r);if(s instanceof te)return s.isNull?null:s.item;let a;return t.nullable=!0,n?(t.format="hexAlpha",a=me(e,t)):(t.format="hex",a=me(e,t)),x(a)?(C(r,a),a):(C(r,null),null)},i0=(e,t={})=>{if(x(e)){const a=St(e,t);if(a instanceof S)return[0,0,0,0];e=a.toLowerCase()}else throw new TypeError(`${e} is not a string.`);const n=ue({namespace:vt,name:"colorToHsl",value:e},t),r=ce(n);if(r instanceof te)return r.item;t.format="hsl";const s=gs(e,t);return C(n,s),s},l0=(e,t={})=>{if(x(e)){const a=St(e,t);if(a instanceof S)return[0,0,0,0];e=a.toLowerCase()}else throw new TypeError(`${e} is not a string.`);const n=ue({namespace:vt,name:"colorToHwb",value:e},t),r=ce(n);if(r instanceof te)return r.item;t.format="hwb";const s=vs(e,t);return C(n,s),s},c0=(e,t={})=>{if(x(e)){const a=St(e,t);if(a instanceof S)return[0,0,0,0];e=a.toLowerCase()}else throw new TypeError(`${e} is not a string.`);const n=ue({namespace:vt,name:"colorToLab",value:e},t),r=ce(n);if(r instanceof te)return r.item;const s=bs(e,t);return C(n,s),s},u0=(e,t={})=>{if(x(e)){const a=St(e,t);if(a instanceof S)return[0,0,0,0];e=a.toLowerCase()}else throw new TypeError(`${e} is not a string.`);const n=ue({namespace:vt,name:"colorToLch",value:e},t),r=ce(n);if(r instanceof te)return r.item;const s=ws(e,t);return C(n,s),s},h0=(e,t={})=>{if(x(e)){const a=St(e,t);if(a instanceof S)return[0,0,0,0];e=a.toLowerCase()}else throw new TypeError(`${e} is not a string.`);const n=ue({namespace:vt,name:"colorToOklab",value:e},t),r=ce(n);if(r instanceof te)return r.item;const s=$s(e,t);return C(n,s),s},f0=(e,t={})=>{if(x(e)){const a=St(e,t);if(a instanceof S)return[0,0,0,0];e=a.toLowerCase()}else throw new TypeError(`${e} is not a string.`);const n=ue({namespace:vt,name:"colorToOklch",value:e},t),r=ce(n);if(r instanceof te)return r.item;const s=Ns(e,t);return C(n,s),s},p0=(e,t={})=>{if(x(e)){const a=St(e,t);if(a instanceof S)return[0,0,0,0];e=a.toLowerCase()}else throw new TypeError(`${e} is not a string.`);const n=ue({namespace:vt,name:"colorToRgb",value:e},t),r=ce(n);if(r instanceof te)return r.item;const s=Hn(e,t);return C(n,s),s},Yo=(e,t={})=>{if(x(e)){const a=St(e,t);if(a instanceof S)return[0,0,0,0];e=a.toLowerCase()}else throw new TypeError(`${e} is not a string.`);const n=ue({namespace:vt,name:"colorToXyz",value:e},t),r=ce(n);if(r instanceof te)return r.item;let s;return e.startsWith("color(")?[,...s]=he(e,t):[,...s]=de(e,t),C(n,s),s},d0=(e,t={})=>(t.d50=!0,Yo(e,t)),m0={colorToHex:o0,colorToHsl:i0,colorToHwb:l0,colorToLab:c0,colorToLch:u0,colorToOklab:h0,colorToOklch:f0,colorToRgb:p0,colorToXyz:Yo,colorToXyzD50:d0,numberToHex:a0},g0={cssCalc:Xn,cssVar:mc,extractDashedIdent:Mh,isColor:Rt,isGradient:t0,resolveGradient:e0,resolveLengthInPixels:Po,splitValue:Gt};export{m0 as convert,bh as resolve,g0 as utils}; diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/browser/css-color.min.js.map b/vanilla/node_modules/@asamuzakjp/css-color/dist/browser/css-color.min.js.map new file mode 100644 index 0000000..5b4cc66 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/browser/css-color.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"css-color.min.js","sources":["../../node_modules/.pnpm/@csstools+css-tokenizer@4.0.0/node_modules/@csstools/css-tokenizer/dist/index.mjs","../../node_modules/.pnpm/@csstools+css-parser-algori_b9ad755ebdc6dc54abc499015fcb7df0/node_modules/@csstools/css-parser-algorithms/dist/index.mjs","../../node_modules/.pnpm/@csstools+css-calc@3.0.0_@c_479a7e09acf06f73ef5a27b24ba01946/node_modules/@csstools/css-calc/dist/index.mjs","../../node_modules/.pnpm/lru-cache@11.2.5/node_modules/lru-cache/dist/esm/index.js","../../src/js/common.ts","../../src/js/constant.ts","../../src/js/color.ts","../../src/js/css-var.ts","../../node_modules/.pnpm/@csstools+color-helpers@6.0.1/node_modules/@csstools/color-helpers/dist/index.mjs","../../node_modules/.pnpm/@csstools+css-color-parser@_f33f4d3d4c7dd5361da31c3109709b84/node_modules/@csstools/css-color-parser/dist/index.mjs","../../src/js/relative-color.ts","../../src/js/resolve.ts","../../src/js/util.ts","../../src/js/cache.ts","../../src/js/css-calc.ts","../../src/js/css-gradient.ts","../../src/js/convert.ts","../../src/index.ts"],"sourcesContent":["class ParseError extends Error{sourceStart;sourceEnd;parserState;constructor(e,n,t,o){super(e),this.name=\"ParseError\",this.sourceStart=n,this.sourceEnd=t,this.parserState=o}}class ParseErrorWithToken extends ParseError{token;constructor(e,n,t,o,r){super(e,n,t,o),this.token=r}}const e={UnexpectedNewLineInString:\"Unexpected newline while consuming a string token.\",UnexpectedEOFInString:\"Unexpected EOF while consuming a string token.\",UnexpectedEOFInComment:\"Unexpected EOF while consuming a comment.\",UnexpectedEOFInURL:\"Unexpected EOF while consuming a url token.\",UnexpectedEOFInEscapedCodePoint:\"Unexpected EOF while consuming an escaped code point.\",UnexpectedCharacterInURL:\"Unexpected character while consuming a url token.\",InvalidEscapeSequenceInURL:\"Invalid escape sequence while consuming a url token.\",InvalidEscapeSequenceAfterBackslash:'Invalid escape sequence after \"\\\\\"'},n=\"undefined\"!=typeof globalThis&&\"structuredClone\"in globalThis;function cloneTokens(e){return n?structuredClone(e):JSON.parse(JSON.stringify(e))}function stringify(...e){let n=\"\";for(let t=0;t<e.length;t++)n+=e[t][1];return n}const t=13,o=45,r=10,i=43,s=65533;function checkIfFourCodePointsWouldStartCDO(e){return 60===e.source.codePointAt(e.cursor)&&33===e.source.codePointAt(e.cursor+1)&&e.source.codePointAt(e.cursor+2)===o&&e.source.codePointAt(e.cursor+3)===o}function isDigitCodePoint(e){return e>=48&&e<=57}function isUppercaseLetterCodePoint(e){return e>=65&&e<=90}function isLowercaseLetterCodePoint(e){return e>=97&&e<=122}function isHexDigitCodePoint(e){return e>=48&&e<=57||e>=97&&e<=102||e>=65&&e<=70}function isLetterCodePoint(e){return isLowercaseLetterCodePoint(e)||isUppercaseLetterCodePoint(e)}function isIdentStartCodePoint(e){return isLetterCodePoint(e)||isNonASCII_IdentCodePoint(e)||95===e}function isIdentCodePoint(e){return isIdentStartCodePoint(e)||isDigitCodePoint(e)||e===o}function isNonASCII_IdentCodePoint(e){return 183===e||8204===e||8205===e||8255===e||8256===e||8204===e||(192<=e&&e<=214||216<=e&&e<=246||248<=e&&e<=893||895<=e&&e<=8191||8304<=e&&e<=8591||11264<=e&&e<=12271||12289<=e&&e<=55295||63744<=e&&e<=64975||65008<=e&&e<=65533||(0===e||(!!isSurrogate(e)||e>=65536)))}function isNonPrintableCodePoint(e){return 11===e||127===e||0<=e&&e<=8||14<=e&&e<=31}function isNewLine(e){return e===r||e===t||12===e}function isWhitespace(e){return 32===e||e===r||9===e||e===t||12===e}function isSurrogate(e){return e>=55296&&e<=57343}function checkIfTwoCodePointsAreAValidEscape(e){return 92===e.source.codePointAt(e.cursor)&&!isNewLine(e.source.codePointAt(e.cursor+1)??-1)}function checkIfThreeCodePointsWouldStartAnIdentSequence(e,n){return n.source.codePointAt(n.cursor)===o?n.source.codePointAt(n.cursor+1)===o||(!!isIdentStartCodePoint(n.source.codePointAt(n.cursor+1)??-1)||92===n.source.codePointAt(n.cursor+1)&&!isNewLine(n.source.codePointAt(n.cursor+2)??-1)):!!isIdentStartCodePoint(n.source.codePointAt(n.cursor)??-1)||checkIfTwoCodePointsAreAValidEscape(n)}function checkIfThreeCodePointsWouldStartANumber(e){return e.source.codePointAt(e.cursor)===i||e.source.codePointAt(e.cursor)===o?!!isDigitCodePoint(e.source.codePointAt(e.cursor+1)??-1)||46===e.source.codePointAt(e.cursor+1)&&isDigitCodePoint(e.source.codePointAt(e.cursor+2)??-1):46===e.source.codePointAt(e.cursor)?isDigitCodePoint(e.source.codePointAt(e.cursor+1)??-1):isDigitCodePoint(e.source.codePointAt(e.cursor)??-1)}function checkIfTwoCodePointsStartAComment(e){return 47===e.source.codePointAt(e.cursor)&&42===e.source.codePointAt(e.cursor+1)}function checkIfThreeCodePointsWouldStartCDC(e){return e.source.codePointAt(e.cursor)===o&&e.source.codePointAt(e.cursor+1)===o&&62===e.source.codePointAt(e.cursor+2)}var c,a,u;function mirrorVariantType(e){switch(e){case c.OpenParen:return c.CloseParen;case c.CloseParen:return c.OpenParen;case c.OpenCurly:return c.CloseCurly;case c.CloseCurly:return c.OpenCurly;case c.OpenSquare:return c.CloseSquare;case c.CloseSquare:return c.OpenSquare;default:return null}}function mirrorVariant(e){switch(e[0]){case c.OpenParen:return[c.CloseParen,\")\",-1,-1,void 0];case c.CloseParen:return[c.OpenParen,\"(\",-1,-1,void 0];case c.OpenCurly:return[c.CloseCurly,\"}\",-1,-1,void 0];case c.CloseCurly:return[c.OpenCurly,\"{\",-1,-1,void 0];case c.OpenSquare:return[c.CloseSquare,\"]\",-1,-1,void 0];case c.CloseSquare:return[c.OpenSquare,\"[\",-1,-1,void 0];default:return null}}function consumeComment(n,t){for(t.advanceCodePoint(2);;){const o=t.readCodePoint();if(void 0===o){const o=[c.Comment,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,void 0];return n.onParseError(new ParseErrorWithToken(e.UnexpectedEOFInComment,t.representationStart,t.representationEnd,[\"4.3.2. Consume comments\",\"Unexpected EOF\"],o)),o}if(42===o&&(void 0!==t.source.codePointAt(t.cursor)&&47===t.source.codePointAt(t.cursor))){t.advanceCodePoint();break}}return[c.Comment,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,void 0]}function consumeEscapedCodePoint(n,o){const i=o.readCodePoint();if(void 0===i)return n.onParseError(new ParseError(e.UnexpectedEOFInEscapedCodePoint,o.representationStart,o.representationEnd,[\"4.3.7. Consume an escaped code point\",\"Unexpected EOF\"])),s;if(isHexDigitCodePoint(i)){const e=[i];let n;for(;void 0!==(n=o.source.codePointAt(o.cursor))&&isHexDigitCodePoint(n)&&e.length<6;)e.push(n),o.advanceCodePoint();isWhitespace(o.source.codePointAt(o.cursor)??-1)&&(o.source.codePointAt(o.cursor)===t&&o.source.codePointAt(o.cursor+1)===r&&o.advanceCodePoint(),o.advanceCodePoint());const c=parseInt(String.fromCodePoint(...e),16);return 0===c||isSurrogate(c)||c>1114111?s:c}return 0===i||isSurrogate(i)?s:i}function consumeIdentSequence(e,n){const t=[];for(;;){const o=n.source.codePointAt(n.cursor)??-1;if(0===o||isSurrogate(o))t.push(s),n.advanceCodePoint(+(o>65535)+1);else if(isIdentCodePoint(o))t.push(o),n.advanceCodePoint(+(o>65535)+1);else{if(!checkIfTwoCodePointsAreAValidEscape(n))return t;n.advanceCodePoint(),t.push(consumeEscapedCodePoint(e,n))}}}function consumeHashToken(e,n){n.advanceCodePoint();const t=n.source.codePointAt(n.cursor);if(void 0!==t&&(isIdentCodePoint(t)||checkIfTwoCodePointsAreAValidEscape(n))){let t=u.Unrestricted;checkIfThreeCodePointsWouldStartAnIdentSequence(0,n)&&(t=u.ID);const o=consumeIdentSequence(e,n);return[c.Hash,n.source.slice(n.representationStart,n.representationEnd+1),n.representationStart,n.representationEnd,{value:String.fromCodePoint(...o),type:t}]}return[c.Delim,\"#\",n.representationStart,n.representationEnd,{value:\"#\"}]}function consumeNumber(e,n){let t=a.Integer;for(n.source.codePointAt(n.cursor)!==i&&n.source.codePointAt(n.cursor)!==o||n.advanceCodePoint();isDigitCodePoint(n.source.codePointAt(n.cursor)??-1);)n.advanceCodePoint();if(46===n.source.codePointAt(n.cursor)&&isDigitCodePoint(n.source.codePointAt(n.cursor+1)??-1))for(n.advanceCodePoint(2),t=a.Number;isDigitCodePoint(n.source.codePointAt(n.cursor)??-1);)n.advanceCodePoint();if(101===n.source.codePointAt(n.cursor)||69===n.source.codePointAt(n.cursor)){if(isDigitCodePoint(n.source.codePointAt(n.cursor+1)??-1))n.advanceCodePoint(2);else{if(n.source.codePointAt(n.cursor+1)!==o&&n.source.codePointAt(n.cursor+1)!==i||!isDigitCodePoint(n.source.codePointAt(n.cursor+2)??-1))return t;n.advanceCodePoint(3)}for(t=a.Number;isDigitCodePoint(n.source.codePointAt(n.cursor)??-1);)n.advanceCodePoint()}return t}function consumeNumericToken(e,n){let t;{const e=n.source.codePointAt(n.cursor);e===o?t=\"-\":e===i&&(t=\"+\")}const r=consumeNumber(0,n),s=parseFloat(n.source.slice(n.representationStart,n.representationEnd+1));if(checkIfThreeCodePointsWouldStartAnIdentSequence(0,n)){const o=consumeIdentSequence(e,n);return[c.Dimension,n.source.slice(n.representationStart,n.representationEnd+1),n.representationStart,n.representationEnd,{value:s,signCharacter:t,type:r,unit:String.fromCodePoint(...o)}]}return 37===n.source.codePointAt(n.cursor)?(n.advanceCodePoint(),[c.Percentage,n.source.slice(n.representationStart,n.representationEnd+1),n.representationStart,n.representationEnd,{value:s,signCharacter:t}]):[c.Number,n.source.slice(n.representationStart,n.representationEnd+1),n.representationStart,n.representationEnd,{value:s,signCharacter:t,type:r}]}function consumeWhiteSpace(e){for(;isWhitespace(e.source.codePointAt(e.cursor)??-1);)e.advanceCodePoint();return[c.Whitespace,e.source.slice(e.representationStart,e.representationEnd+1),e.representationStart,e.representationEnd,void 0]}!function(e){e.Comment=\"comment\",e.AtKeyword=\"at-keyword-token\",e.BadString=\"bad-string-token\",e.BadURL=\"bad-url-token\",e.CDC=\"CDC-token\",e.CDO=\"CDO-token\",e.Colon=\"colon-token\",e.Comma=\"comma-token\",e.Delim=\"delim-token\",e.Dimension=\"dimension-token\",e.EOF=\"EOF-token\",e.Function=\"function-token\",e.Hash=\"hash-token\",e.Ident=\"ident-token\",e.Number=\"number-token\",e.Percentage=\"percentage-token\",e.Semicolon=\"semicolon-token\",e.String=\"string-token\",e.URL=\"url-token\",e.Whitespace=\"whitespace-token\",e.OpenParen=\"(-token\",e.CloseParen=\")-token\",e.OpenSquare=\"[-token\",e.CloseSquare=\"]-token\",e.OpenCurly=\"{-token\",e.CloseCurly=\"}-token\",e.UnicodeRange=\"unicode-range-token\"}(c||(c={})),function(e){e.Integer=\"integer\",e.Number=\"number\"}(a||(a={})),function(e){e.Unrestricted=\"unrestricted\",e.ID=\"id\"}(u||(u={}));class Reader{cursor=0;source=\"\";representationStart=0;representationEnd=-1;constructor(e){this.source=e}advanceCodePoint(e=1){this.cursor=this.cursor+e,this.representationEnd=this.cursor-1}readCodePoint(){const e=this.source.codePointAt(this.cursor);if(void 0!==e)return this.cursor=this.cursor+1,this.representationEnd=this.cursor-1,e}unreadCodePoint(e=1){this.cursor=this.cursor-e,this.representationEnd=this.cursor-1}resetRepresentation(){this.representationStart=this.cursor,this.representationEnd=-1}}function consumeStringToken(n,o){let i=\"\";const a=o.readCodePoint();for(;;){const u=o.readCodePoint();if(void 0===u){const t=[c.String,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{value:i}];return n.onParseError(new ParseErrorWithToken(e.UnexpectedEOFInString,o.representationStart,o.representationEnd,[\"4.3.5. Consume a string token\",\"Unexpected EOF\"],t)),t}if(isNewLine(u)){o.unreadCodePoint();const i=[c.BadString,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,void 0];return n.onParseError(new ParseErrorWithToken(e.UnexpectedNewLineInString,o.representationStart,o.source.codePointAt(o.cursor)===t&&o.source.codePointAt(o.cursor+1)===r?o.representationEnd+2:o.representationEnd+1,[\"4.3.5. Consume a string token\",\"Unexpected newline\"],i)),i}if(u===a)return[c.String,o.source.slice(o.representationStart,o.representationEnd+1),o.representationStart,o.representationEnd,{value:i}];if(92!==u)0===u||isSurrogate(u)?i+=String.fromCodePoint(s):i+=String.fromCodePoint(u);else{if(void 0===o.source.codePointAt(o.cursor))continue;if(isNewLine(o.source.codePointAt(o.cursor)??-1)){o.source.codePointAt(o.cursor)===t&&o.source.codePointAt(o.cursor+1)===r&&o.advanceCodePoint(),o.advanceCodePoint();continue}i+=String.fromCodePoint(consumeEscapedCodePoint(n,o))}}}function checkIfCodePointsMatchURLIdent(e){return!(3!==e.length||117!==e[0]&&85!==e[0]||114!==e[1]&&82!==e[1]||108!==e[2]&&76!==e[2])}function consumeBadURL(e,n){for(;;){const t=n.source.codePointAt(n.cursor);if(void 0===t)return;if(41===t)return void n.advanceCodePoint();checkIfTwoCodePointsAreAValidEscape(n)?(n.advanceCodePoint(),consumeEscapedCodePoint(e,n)):n.advanceCodePoint()}}function consumeUrlToken(n,t){for(;isWhitespace(t.source.codePointAt(t.cursor)??-1);)t.advanceCodePoint();let o=\"\";for(;;){if(void 0===t.source.codePointAt(t.cursor)){const r=[c.URL,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,{value:o}];return n.onParseError(new ParseErrorWithToken(e.UnexpectedEOFInURL,t.representationStart,t.representationEnd,[\"4.3.6. Consume a url token\",\"Unexpected EOF\"],r)),r}if(41===t.source.codePointAt(t.cursor))return t.advanceCodePoint(),[c.URL,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,{value:o}];if(isWhitespace(t.source.codePointAt(t.cursor)??-1)){for(t.advanceCodePoint();isWhitespace(t.source.codePointAt(t.cursor)??-1);)t.advanceCodePoint();if(void 0===t.source.codePointAt(t.cursor)){const r=[c.URL,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,{value:o}];return n.onParseError(new ParseErrorWithToken(e.UnexpectedEOFInURL,t.representationStart,t.representationEnd,[\"4.3.6. Consume a url token\",\"Consume as much whitespace as possible\",\"Unexpected EOF\"],r)),r}return 41===t.source.codePointAt(t.cursor)?(t.advanceCodePoint(),[c.URL,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,{value:o}]):(consumeBadURL(n,t),[c.BadURL,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,void 0])}const r=t.source.codePointAt(t.cursor);if(34===r||39===r||40===r||isNonPrintableCodePoint(r??-1)){consumeBadURL(n,t);const o=[c.BadURL,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,void 0];return n.onParseError(new ParseErrorWithToken(e.UnexpectedCharacterInURL,t.representationStart,t.representationEnd,[\"4.3.6. Consume a url token\",\"Unexpected U+0022 QUOTATION MARK (\\\"), U+0027 APOSTROPHE ('), U+0028 LEFT PARENTHESIS (() or non-printable code point\"],o)),o}if(92===r){if(checkIfTwoCodePointsAreAValidEscape(t)){t.advanceCodePoint(),o+=String.fromCodePoint(consumeEscapedCodePoint(n,t));continue}consumeBadURL(n,t);const r=[c.BadURL,t.source.slice(t.representationStart,t.representationEnd+1),t.representationStart,t.representationEnd,void 0];return n.onParseError(new ParseErrorWithToken(e.InvalidEscapeSequenceInURL,t.representationStart,t.representationEnd,[\"4.3.6. Consume a url token\",\"U+005C REVERSE SOLIDUS (\\\\)\",\"The input stream does not start with a valid escape sequence\"],r)),r}0===t.source.codePointAt(t.cursor)||isSurrogate(t.source.codePointAt(t.cursor)??-1)?(o+=String.fromCodePoint(s),t.advanceCodePoint()):(o+=t.source[t.cursor],t.advanceCodePoint())}}function consumeIdentLikeToken(e,n){const t=consumeIdentSequence(e,n);if(40!==n.source.codePointAt(n.cursor))return[c.Ident,n.source.slice(n.representationStart,n.representationEnd+1),n.representationStart,n.representationEnd,{value:String.fromCodePoint(...t)}];if(checkIfCodePointsMatchURLIdent(t)){n.advanceCodePoint();let o=0;for(;;){const e=isWhitespace(n.source.codePointAt(n.cursor)??-1),r=isWhitespace(n.source.codePointAt(n.cursor+1)??-1);if(e&&r){o+=1,n.advanceCodePoint(1);continue}const i=e?n.source.codePointAt(n.cursor+1):n.source.codePointAt(n.cursor);if(34===i||39===i)return o>0&&n.unreadCodePoint(o),[c.Function,n.source.slice(n.representationStart,n.representationEnd+1),n.representationStart,n.representationEnd,{value:String.fromCodePoint(...t)}];break}return consumeUrlToken(e,n)}return n.advanceCodePoint(),[c.Function,n.source.slice(n.representationStart,n.representationEnd+1),n.representationStart,n.representationEnd,{value:String.fromCodePoint(...t)}]}function checkIfThreeCodePointsWouldStartAUnicodeRange(e){return!(117!==e.source.codePointAt(e.cursor)&&85!==e.source.codePointAt(e.cursor)||e.source.codePointAt(e.cursor+1)!==i||63!==e.source.codePointAt(e.cursor+2)&&!isHexDigitCodePoint(e.source.codePointAt(e.cursor+2)??-1))}function consumeUnicodeRangeToken(e,n){n.advanceCodePoint(2);const t=[],r=[];let i;for(;void 0!==(i=n.source.codePointAt(n.cursor))&&t.length<6&&isHexDigitCodePoint(i);)t.push(i),n.advanceCodePoint();for(;void 0!==(i=n.source.codePointAt(n.cursor))&&t.length<6&&63===i;)0===r.length&&r.push(...t),t.push(48),r.push(70),n.advanceCodePoint();if(!r.length&&n.source.codePointAt(n.cursor)===o&&isHexDigitCodePoint(n.source.codePointAt(n.cursor+1)??-1))for(n.advanceCodePoint();void 0!==(i=n.source.codePointAt(n.cursor))&&r.length<6&&isHexDigitCodePoint(i);)r.push(i),n.advanceCodePoint();if(!r.length){const e=parseInt(String.fromCodePoint(...t),16);return[c.UnicodeRange,n.source.slice(n.representationStart,n.representationEnd+1),n.representationStart,n.representationEnd,{startOfRange:e,endOfRange:e}]}const s=parseInt(String.fromCodePoint(...t),16),a=parseInt(String.fromCodePoint(...r),16);return[c.UnicodeRange,n.source.slice(n.representationStart,n.representationEnd+1),n.representationStart,n.representationEnd,{startOfRange:s,endOfRange:a}]}function tokenize(e,n){const t=tokenizer(e,n),o=[];for(;!t.endOfFile();)o.push(t.nextToken());return o.push(t.nextToken()),o}function tokenizer(n,s){const a=n.css.valueOf(),u=n.unicodeRangesAllowed??!1,d=new Reader(a),p={onParseError:s?.onParseError??noop};return{nextToken:function nextToken(){d.resetRepresentation();const n=d.source.codePointAt(d.cursor);if(void 0===n)return[c.EOF,\"\",-1,-1,void 0];if(47===n&&checkIfTwoCodePointsStartAComment(d))return consumeComment(p,d);if(u&&(117===n||85===n)&&checkIfThreeCodePointsWouldStartAUnicodeRange(d))return consumeUnicodeRangeToken(0,d);if(isIdentStartCodePoint(n))return consumeIdentLikeToken(p,d);if(isDigitCodePoint(n))return consumeNumericToken(p,d);switch(n){case 44:return d.advanceCodePoint(),[c.Comma,\",\",d.representationStart,d.representationEnd,void 0];case 58:return d.advanceCodePoint(),[c.Colon,\":\",d.representationStart,d.representationEnd,void 0];case 59:return d.advanceCodePoint(),[c.Semicolon,\";\",d.representationStart,d.representationEnd,void 0];case 40:return d.advanceCodePoint(),[c.OpenParen,\"(\",d.representationStart,d.representationEnd,void 0];case 41:return d.advanceCodePoint(),[c.CloseParen,\")\",d.representationStart,d.representationEnd,void 0];case 91:return d.advanceCodePoint(),[c.OpenSquare,\"[\",d.representationStart,d.representationEnd,void 0];case 93:return d.advanceCodePoint(),[c.CloseSquare,\"]\",d.representationStart,d.representationEnd,void 0];case 123:return d.advanceCodePoint(),[c.OpenCurly,\"{\",d.representationStart,d.representationEnd,void 0];case 125:return d.advanceCodePoint(),[c.CloseCurly,\"}\",d.representationStart,d.representationEnd,void 0];case 39:case 34:return consumeStringToken(p,d);case 35:return consumeHashToken(p,d);case i:case 46:return checkIfThreeCodePointsWouldStartANumber(d)?consumeNumericToken(p,d):(d.advanceCodePoint(),[c.Delim,d.source[d.representationStart],d.representationStart,d.representationEnd,{value:d.source[d.representationStart]}]);case r:case t:case 12:case 9:case 32:return consumeWhiteSpace(d);case o:return checkIfThreeCodePointsWouldStartANumber(d)?consumeNumericToken(p,d):checkIfThreeCodePointsWouldStartCDC(d)?(d.advanceCodePoint(3),[c.CDC,\"--\\x3e\",d.representationStart,d.representationEnd,void 0]):checkIfThreeCodePointsWouldStartAnIdentSequence(0,d)?consumeIdentLikeToken(p,d):(d.advanceCodePoint(),[c.Delim,\"-\",d.representationStart,d.representationEnd,{value:\"-\"}]);case 60:return checkIfFourCodePointsWouldStartCDO(d)?(d.advanceCodePoint(4),[c.CDO,\"\\x3c!--\",d.representationStart,d.representationEnd,void 0]):(d.advanceCodePoint(),[c.Delim,\"<\",d.representationStart,d.representationEnd,{value:\"<\"}]);case 64:if(d.advanceCodePoint(),checkIfThreeCodePointsWouldStartAnIdentSequence(0,d)){const e=consumeIdentSequence(p,d);return[c.AtKeyword,d.source.slice(d.representationStart,d.representationEnd+1),d.representationStart,d.representationEnd,{value:String.fromCodePoint(...e)}]}return[c.Delim,\"@\",d.representationStart,d.representationEnd,{value:\"@\"}];case 92:{if(checkIfTwoCodePointsAreAValidEscape(d))return consumeIdentLikeToken(p,d);d.advanceCodePoint();const n=[c.Delim,\"\\\\\",d.representationStart,d.representationEnd,{value:\"\\\\\"}];return p.onParseError(new ParseErrorWithToken(e.InvalidEscapeSequenceAfterBackslash,d.representationStart,d.representationEnd,[\"4.3.1. Consume a token\",\"U+005C REVERSE SOLIDUS (\\\\)\",\"The input stream does not start with a valid escape sequence\"],n)),n}}return d.advanceCodePoint(),[c.Delim,d.source[d.representationStart],d.representationStart,d.representationEnd,{value:d.source[d.representationStart]}]},endOfFile:function endOfFile(){return void 0===d.source.codePointAt(d.cursor)}}}function noop(){}function mutateIdent(e,n){const t=[];for(const e of n)t.push(e.codePointAt(0));const o=String.fromCodePoint(...serializeIdent(t));e[1]=o,e[4].value=n}function mutateUnit(e,n){const t=[];for(const e of n)t.push(e.codePointAt(0));const o=serializeIdent(t);101===o[0]&&insertEscapedCodePoint(o,0,o[0]);const r=String.fromCodePoint(...o),i=\"+\"===e[4].signCharacter?e[4].signCharacter:\"\",s=e[4].value.toString();e[1]=`${i}${s}${r}`,e[4].unit=n}function serializeIdent(e){let n=0;if(0===e[0])e.splice(0,1,s),n=1;else if(e[0]===o&&e[1]===o)n=2;else if(e[0]===o&&e[1])n=2,isIdentStartCodePoint(e[1])||(n+=insertEscapedCodePoint(e,1,e[1]));else{if(e[0]===o&&!e[1])return[92,e[0]];isIdentStartCodePoint(e[0])?n=1:(n=1,n+=insertEscapedCodePoint(e,0,e[0]))}for(let t=n;t<e.length;t++)0!==e[t]?isIdentCodePoint(e[t])||(t+=insertEscapedCharacter(e,t,e[t])):(e.splice(t,1,s),t++);return e}function insertEscapedCharacter(e,n,t){return e.splice(n,1,92,t),1}function insertEscapedCodePoint(e,n,t){const o=t.toString(16),r=[];for(const e of o)r.push(e.codePointAt(0));return e.splice(n,1,92,...r,32),1+r.length}const d=Object.values(c);function isToken(e){return!!Array.isArray(e)&&(!(e.length<4)&&(!!d.includes(e[0])&&(\"string\"==typeof e[1]&&(\"number\"==typeof e[2]&&\"number\"==typeof e[3]))))}function isTokenNumeric(e){if(!e)return!1;switch(e[0]){case c.Dimension:case c.Number:case c.Percentage:return!0;default:return!1}}function isTokenWhiteSpaceOrComment(e){if(!e)return!1;switch(e[0]){case c.Whitespace:case c.Comment:return!0;default:return!1}}function isTokenAtKeyword(e){return!!e&&e[0]===c.AtKeyword}function isTokenBadString(e){return!!e&&e[0]===c.BadString}function isTokenBadURL(e){return!!e&&e[0]===c.BadURL}function isTokenCDC(e){return!!e&&e[0]===c.CDC}function isTokenCDO(e){return!!e&&e[0]===c.CDO}function isTokenColon(e){return!!e&&e[0]===c.Colon}function isTokenComma(e){return!!e&&e[0]===c.Comma}function isTokenComment(e){return!!e&&e[0]===c.Comment}function isTokenDelim(e){return!!e&&e[0]===c.Delim}function isTokenDimension(e){return!!e&&e[0]===c.Dimension}function isTokenEOF(e){return!!e&&e[0]===c.EOF}function isTokenFunction(e){return!!e&&e[0]===c.Function}function isTokenHash(e){return!!e&&e[0]===c.Hash}function isTokenIdent(e){return!!e&&e[0]===c.Ident}function isTokenNumber(e){return!!e&&e[0]===c.Number}function isTokenPercentage(e){return!!e&&e[0]===c.Percentage}function isTokenSemicolon(e){return!!e&&e[0]===c.Semicolon}function isTokenString(e){return!!e&&e[0]===c.String}function isTokenURL(e){return!!e&&e[0]===c.URL}function isTokenWhitespace(e){return!!e&&e[0]===c.Whitespace}function isTokenOpenParen(e){return!!e&&e[0]===c.OpenParen}function isTokenCloseParen(e){return!!e&&e[0]===c.CloseParen}function isTokenOpenSquare(e){return!!e&&e[0]===c.OpenSquare}function isTokenCloseSquare(e){return!!e&&e[0]===c.CloseSquare}function isTokenOpenCurly(e){return!!e&&e[0]===c.OpenCurly}function isTokenCloseCurly(e){return!!e&&e[0]===c.CloseCurly}function isTokenUnicodeRange(e){return!!e&&e[0]===c.UnicodeRange}export{u as HashType,a as NumberType,ParseError,e as ParseErrorMessage,ParseErrorWithToken,c as TokenType,cloneTokens,isToken,isTokenAtKeyword,isTokenBadString,isTokenBadURL,isTokenCDC,isTokenCDO,isTokenCloseCurly,isTokenCloseParen,isTokenCloseSquare,isTokenColon,isTokenComma,isTokenComment,isTokenDelim,isTokenDimension,isTokenEOF,isTokenFunction,isTokenHash,isTokenIdent,isTokenNumber,isTokenNumeric,isTokenOpenCurly,isTokenOpenParen,isTokenOpenSquare,isTokenPercentage,isTokenSemicolon,isTokenString,isTokenURL,isTokenUnicodeRange,isTokenWhiteSpaceOrComment,isTokenWhitespace,mirrorVariant,mirrorVariantType,mutateIdent,mutateUnit,stringify,tokenize,tokenizer};\n","import{isTokenEOF as e,TokenType as n,isToken as t,stringify as o,mirrorVariant as s,isTokenOpenParen as i,isTokenOpenCurly as r,isTokenOpenSquare as a,isTokenFunction as c,isTokenWhitespace as u,isTokenComment as l,mirrorVariantType as d,ParseError as h,isTokenWhiteSpaceOrComment as p,isTokenCloseParen as m,isTokenComma as k}from\"@csstools/css-tokenizer\";var f;function walkerIndexGenerator(e){let n=e.slice();return(e,t,o)=>{let s=-1;for(let i=n.indexOf(t);i<n.length&&(s=e.indexOf(n[i]),-1===s||s<o);i++);return-1===s||s===o&&t===e[o]&&(s++,s>=e.length)?-1:(n=e.slice(),s)}}function consumeComponentValue(e,n){const t=n[0];if(i(t)||r(t)||a(t)){const t=consumeSimpleBlock(e,n);return{advance:t.advance,node:t.node}}if(c(t)){const t=consumeFunction(e,n);return{advance:t.advance,node:t.node}}if(u(t)){const t=consumeWhitespace(e,n);return{advance:t.advance,node:t.node}}if(l(t)){const t=consumeComment(e,n);return{advance:t.advance,node:t.node}}return{advance:1,node:new TokenNode(t)}}!function(e){e.Function=\"function\",e.SimpleBlock=\"simple-block\",e.Whitespace=\"whitespace\",e.Comment=\"comment\",e.Token=\"token\"}(f||(f={}));class ContainerNodeBaseClass{value=[];indexOf(e){return this.value.indexOf(e)}at(e){if(\"number\"==typeof e)return e<0&&(e=this.value.length+e),this.value[e]}forEach(e,n){if(0===this.value.length)return;const t=walkerIndexGenerator(this.value);let o=0;for(;o<this.value.length;){const s=this.value[o];let i;if(n&&(i={...n}),!1===e({node:s,parent:this,state:i},o))return!1;if(o=t(this.value,s,o),-1===o)break}}walk(e,n){0!==this.value.length&&this.forEach((n,t)=>!1!==e(n,t)&&((!(\"walk\"in n.node)||!this.value.includes(n.node)||!1!==n.node.walk(e,n.state))&&void 0),n)}}class FunctionNode extends ContainerNodeBaseClass{type=f.Function;name;endToken;constructor(e,n,t){super(),this.name=e,this.endToken=n,this.value=t}getName(){return this.name[4].value}normalize(){e(this.endToken)&&(this.endToken=[n.CloseParen,\")\",-1,-1,void 0])}tokens(){return e(this.endToken)?[this.name,...this.value.flatMap(e=>e.tokens())]:[this.name,...this.value.flatMap(e=>e.tokens()),this.endToken]}toString(){const e=this.value.map(e=>t(e)?o(e):e.toString()).join(\"\");return o(this.name)+e+o(this.endToken)}toJSON(){return{type:this.type,name:this.getName(),tokens:this.tokens(),value:this.value.map(e=>e.toJSON())}}isFunctionNode(){return FunctionNode.isFunctionNode(this)}static isFunctionNode(e){return!!e&&(e instanceof FunctionNode&&e.type===f.Function)}}function consumeFunction(n,t){const o=[];let s=1;for(;;){const i=t[s];if(!i||e(i))return n.onParseError(new h(\"Unexpected EOF while consuming a function.\",t[0][2],t[t.length-1][3],[\"5.4.9. Consume a function\",\"Unexpected EOF\"])),{advance:t.length,node:new FunctionNode(t[0],i,o)};if(m(i))return{advance:s+1,node:new FunctionNode(t[0],i,o)};if(p(i)){const e=consumeAllCommentsAndWhitespace(n,t.slice(s));s+=e.advance,o.push(...e.nodes);continue}const r=consumeComponentValue(n,t.slice(s));s+=r.advance,o.push(r.node)}}class SimpleBlockNode extends ContainerNodeBaseClass{type=f.SimpleBlock;startToken;endToken;constructor(e,n,t){super(),this.startToken=e,this.endToken=n,this.value=t}normalize(){if(e(this.endToken)){const e=s(this.startToken);e&&(this.endToken=e)}}tokens(){return e(this.endToken)?[this.startToken,...this.value.flatMap(e=>e.tokens())]:[this.startToken,...this.value.flatMap(e=>e.tokens()),this.endToken]}toString(){const e=this.value.map(e=>t(e)?o(e):e.toString()).join(\"\");return o(this.startToken)+e+o(this.endToken)}toJSON(){return{type:this.type,startToken:this.startToken,tokens:this.tokens(),value:this.value.map(e=>e.toJSON())}}isSimpleBlockNode(){return SimpleBlockNode.isSimpleBlockNode(this)}static isSimpleBlockNode(e){return!!e&&(e instanceof SimpleBlockNode&&e.type===f.SimpleBlock)}}function consumeSimpleBlock(n,t){const o=d(t[0][0]);if(!o)throw new Error(\"Failed to parse, a mirror variant must exist for all block open tokens.\");const s=[];let i=1;for(;;){const r=t[i];if(!r||e(r))return n.onParseError(new h(\"Unexpected EOF while consuming a simple block.\",t[0][2],t[t.length-1][3],[\"5.4.8. Consume a simple block\",\"Unexpected EOF\"])),{advance:t.length,node:new SimpleBlockNode(t[0],r,s)};if(r[0]===o)return{advance:i+1,node:new SimpleBlockNode(t[0],r,s)};if(p(r)){const e=consumeAllCommentsAndWhitespace(n,t.slice(i));i+=e.advance,s.push(...e.nodes);continue}const a=consumeComponentValue(n,t.slice(i));i+=a.advance,s.push(a.node)}}class WhitespaceNode{type=f.Whitespace;value;constructor(e){this.value=e}tokens(){return this.value}toString(){return o(...this.value)}toJSON(){return{type:this.type,tokens:this.tokens()}}isWhitespaceNode(){return WhitespaceNode.isWhitespaceNode(this)}static isWhitespaceNode(e){return!!e&&(e instanceof WhitespaceNode&&e.type===f.Whitespace)}}function consumeWhitespace(e,n){let t=0;for(;;){const e=n[t];if(!u(e))return{advance:t,node:new WhitespaceNode(n.slice(0,t))};t++}}class CommentNode{type=f.Comment;value;constructor(e){this.value=e}tokens(){return[this.value]}toString(){return o(this.value)}toJSON(){return{type:this.type,tokens:this.tokens()}}isCommentNode(){return CommentNode.isCommentNode(this)}static isCommentNode(e){return!!e&&(e instanceof CommentNode&&e.type===f.Comment)}}function consumeComment(e,n){return{advance:1,node:new CommentNode(n[0])}}function consumeAllCommentsAndWhitespace(e,n){const t=[];let o=0;for(;;){if(u(n[o])){const e=consumeWhitespace(0,n.slice(o));o+=e.advance,t.push(e.node);continue}if(!l(n[o]))return{advance:o,nodes:t};t.push(new CommentNode(n[o])),o++}}class TokenNode{type=f.Token;value;constructor(e){this.value=e}tokens(){return[this.value]}toString(){return this.value[1]}toJSON(){return{type:this.type,tokens:this.tokens()}}isTokenNode(){return TokenNode.isTokenNode(this)}static isTokenNode(e){return!!e&&(e instanceof TokenNode&&e.type===f.Token)}}function parseComponentValue(t,o){const s={onParseError:o?.onParseError??(()=>{})},i=[...t];e(i[i.length-1])||i.push([n.EOF,\"\",i[i.length-1][2],i[i.length-1][3],void 0]);const r=consumeComponentValue(s,i);if(e(i[Math.min(r.advance,i.length-1)]))return r.node;s.onParseError(new h(\"Expected EOF after parsing a component value.\",t[0][2],t[t.length-1][3],[\"5.3.9. Parse a component value\",\"Expected EOF\"]))}function parseListOfComponentValues(t,o){const s={onParseError:o?.onParseError??(()=>{})},i=[...t];e(i[i.length-1])&&i.push([n.EOF,\"\",i[i.length-1][2],i[i.length-1][3],void 0]);const r=[];let a=0;for(;;){if(!i[a]||e(i[a]))return r;const n=consumeComponentValue(s,i.slice(a));r.push(n.node),a+=n.advance}}function parseCommaSeparatedListOfComponentValues(t,o){const s={onParseError:o?.onParseError??(()=>{})},i=[...t];if(0===t.length)return[];e(i[i.length-1])&&i.push([n.EOF,\"\",i[i.length-1][2],i[i.length-1][3],void 0]);const r=[];let a=[],c=0;for(;;){if(!i[c]||e(i[c]))return a.length&&r.push(a),r;if(k(i[c])){r.push(a),a=[],c++;continue}const n=consumeComponentValue(s,t.slice(c));a.push(n.node),c+=n.advance}}function gatherNodeAncestry(e){const n=new Map;return e.walk(e=>{Array.isArray(e.node)?e.node.forEach(t=>{n.set(t,e.parent)}):n.set(e.node,e.parent)}),n}function forEach(e,n,t){if(0===e.length)return;const o=walkerIndexGenerator(e);let s=0;for(;s<e.length;){const i=e[s];let r;if(t&&(r={...t}),!1===n({node:i,parent:{value:e},state:r},s))return!1;if(s=o(e,i,s),-1===s)break}}function walk(e,n,t){0!==e.length&&forEach(e,(t,o)=>!1!==n(t,o)&&((!(\"walk\"in t.node)||!e.includes(t.node)||!1!==t.node.walk(n,t.state))&&void 0),t)}function replaceComponentValues(e,n){for(let t=0;t<e.length;t++){walk(e[t],(e,t)=>{if(\"number\"!=typeof t)return;const o=n(e.node);o&&(Array.isArray(o)?e.parent.value.splice(t,1,...o):e.parent.value.splice(t,1,o))})}return e}function stringify(e){return e.map(e=>e.map(e=>o(...e.tokens())).join(\"\")).join(\",\")}function isSimpleBlockNode(e){return SimpleBlockNode.isSimpleBlockNode(e)}function isFunctionNode(e){return FunctionNode.isFunctionNode(e)}function isWhitespaceNode(e){return WhitespaceNode.isWhitespaceNode(e)}function isCommentNode(e){return CommentNode.isCommentNode(e)}function isWhiteSpaceOrCommentNode(e){return isWhitespaceNode(e)||isCommentNode(e)}function isTokenNode(e){return TokenNode.isTokenNode(e)}function sourceIndices(e){if(Array.isArray(e)){const n=e[0];if(!n)return[0,0];const t=e[e.length-1]||n;return[sourceIndices(n)[0],sourceIndices(t)[1]]}const n=e.tokens(),t=n[0],o=n[n.length-1];return t&&o?[t[2],o[3]]:[0,0]}export{CommentNode,f as ComponentValueType,ContainerNodeBaseClass,FunctionNode,SimpleBlockNode,TokenNode,WhitespaceNode,forEach,gatherNodeAncestry,isCommentNode,isFunctionNode,isSimpleBlockNode,isTokenNode,isWhiteSpaceOrCommentNode,isWhitespaceNode,parseCommaSeparatedListOfComponentValues,parseComponentValue,parseListOfComponentValues,replaceComponentValues,sourceIndices,stringify,walk,walkerIndexGenerator};\n","import{TokenNode as e,isTokenNode as n,isWhitespaceNode as t,isCommentNode as r,isWhiteSpaceOrCommentNode as u,isSimpleBlockNode as a,isFunctionNode as i,FunctionNode as o,WhitespaceNode as l,parseCommaSeparatedListOfComponentValues as c,replaceComponentValues as s}from\"@csstools/css-parser-algorithms\";import{isTokenDimension as v,TokenType as f,NumberType as m,mutateUnit as p,isTokenNumber as C,isTokenPercentage as g,isTokenIdent as d,isTokenNumeric as D,isTokenOpenParen as N,isTokenDelim as B,isTokenComma as A,isToken as h,tokenizer as F,tokenize as b,stringify as w}from\"@csstools/css-tokenizer\";const E=/[A-Z]/g;function toLowerCaseAZ(e){return e.replace(E,e=>String.fromCharCode(e.charCodeAt(0)+32))}const I={cm:\"px\",in:\"px\",mm:\"px\",pc:\"px\",pt:\"px\",px:\"px\",q:\"px\",deg:\"deg\",grad:\"deg\",rad:\"deg\",turn:\"deg\",ms:\"s\",s:\"s\",hz:\"hz\",khz:\"hz\"},S=new Map([[\"cm\",e=>e],[\"mm\",e=>10*e],[\"q\",e=>40*e],[\"in\",e=>e/2.54],[\"pc\",e=>e/2.54*6],[\"pt\",e=>e/2.54*72],[\"px\",e=>e/2.54*96]]),y=new Map([[\"deg\",e=>e],[\"grad\",e=>e/.9],[\"rad\",e=>e/180*Math.PI],[\"turn\",e=>e/360]]),M=new Map([[\"deg\",e=>.9*e],[\"grad\",e=>e],[\"rad\",e=>.9*e/180*Math.PI],[\"turn\",e=>.9*e/360]]),T=new Map([[\"hz\",e=>e],[\"khz\",e=>e/1e3]]),x=new Map([[\"cm\",e=>2.54*e],[\"mm\",e=>25.4*e],[\"q\",e=>25.4*e*4],[\"in\",e=>e],[\"pc\",e=>6*e],[\"pt\",e=>72*e],[\"px\",e=>96*e]]),k=new Map([[\"hz\",e=>1e3*e],[\"khz\",e=>e]]),P=new Map([[\"cm\",e=>e/10],[\"mm\",e=>e],[\"q\",e=>4*e],[\"in\",e=>e/25.4],[\"pc\",e=>e/25.4*6],[\"pt\",e=>e/25.4*72],[\"px\",e=>e/25.4*96]]),O=new Map([[\"ms\",e=>e],[\"s\",e=>e/1e3]]),W=new Map([[\"cm\",e=>e/6*2.54],[\"mm\",e=>e/6*25.4],[\"q\",e=>e/6*25.4*4],[\"in\",e=>e/6],[\"pc\",e=>e],[\"pt\",e=>e/6*72],[\"px\",e=>e/6*96]]),L=new Map([[\"cm\",e=>e/72*2.54],[\"mm\",e=>e/72*25.4],[\"q\",e=>e/72*25.4*4],[\"in\",e=>e/72],[\"pc\",e=>e/72*6],[\"pt\",e=>e],[\"px\",e=>e/72*96]]),U=new Map([[\"cm\",e=>e/96*2.54],[\"mm\",e=>e/96*25.4],[\"q\",e=>e/96*25.4*4],[\"in\",e=>e/96],[\"pc\",e=>e/96*6],[\"pt\",e=>e/96*72],[\"px\",e=>e]]),$=new Map([[\"cm\",e=>e/4/10],[\"mm\",e=>e/4],[\"q\",e=>e],[\"in\",e=>e/4/25.4],[\"pc\",e=>e/4/25.4*6],[\"pt\",e=>e/4/25.4*72],[\"px\",e=>e/4/25.4*96]]),Z=new Map([[\"deg\",e=>180*e/Math.PI],[\"grad\",e=>180*e/Math.PI/.9],[\"rad\",e=>e],[\"turn\",e=>180*e/Math.PI/360]]),z=new Map([[\"ms\",e=>1e3*e],[\"s\",e=>e]]),q=new Map([[\"deg\",e=>360*e],[\"grad\",e=>360*e/.9],[\"rad\",e=>360*e/180*Math.PI],[\"turn\",e=>e]]),G=new Map([[\"cm\",S],[\"mm\",P],[\"q\",$],[\"in\",x],[\"pc\",W],[\"pt\",L],[\"px\",U],[\"ms\",O],[\"s\",z],[\"deg\",y],[\"grad\",M],[\"rad\",Z],[\"turn\",q],[\"hz\",T],[\"khz\",k]]);function convertUnit(e,n){if(!v(e))return n;if(!v(n))return n;const t=toLowerCaseAZ(e[4].unit),r=toLowerCaseAZ(n[4].unit);if(t===r)return n;const u=G.get(r);if(!u)return n;const a=u.get(t);if(!a)return n;const i=a(n[4].value),o=[f.Dimension,\"\",n[2],n[3],{...n[4],signCharacter:i<0?\"-\":void 0,type:Number.isInteger(i)?m.Integer:m.Number,value:i}];return p(o,e[4].unit),o}function toCanonicalUnit(e){if(!v(e))return e;const n=toLowerCaseAZ(e[4].unit),t=I[n];if(n===t)return e;const r=G.get(n);if(!r)return e;const u=r.get(t);if(!u)return e;const a=u(e[4].value),i=[f.Dimension,\"\",e[2],e[3],{...e[4],signCharacter:a<0?\"-\":void 0,type:Number.isInteger(a)?m.Integer:m.Number,value:a}];return p(i,t),i}function addition(n){if(2!==n.length)return-1;const t=n[0].value;let r=n[1].value;if(C(t)&&C(r)){const n=t[4].value+r[4].value;return new e([f.Number,n.toString(),t[2],r[3],{value:n,type:t[4].type===m.Integer&&r[4].type===m.Integer?m.Integer:m.Number}])}if(g(t)&&g(r)){const n=t[4].value+r[4].value;return new e([f.Percentage,n.toString()+\"%\",t[2],r[3],{value:n}])}if(v(t)&&v(r)&&(r=convertUnit(t,r),toLowerCaseAZ(t[4].unit)===toLowerCaseAZ(r[4].unit))){const n=t[4].value+r[4].value;return new e([f.Dimension,n.toString()+t[4].unit,t[2],r[3],{value:n,type:t[4].type===m.Integer&&r[4].type===m.Integer?m.Integer:m.Number,unit:t[4].unit}])}return-1}function division(n){if(2!==n.length)return-1;const t=n[0].value,r=n[1].value;if(C(t)&&C(r)){const n=t[4].value/r[4].value;return new e([f.Number,n.toString(),t[2],r[3],{value:n,type:Number.isInteger(n)?m.Integer:m.Number}])}if(g(t)&&C(r)){const n=t[4].value/r[4].value;return new e([f.Percentage,n.toString()+\"%\",t[2],r[3],{value:n}])}if(v(t)&&C(r)){const n=t[4].value/r[4].value;return new e([f.Dimension,n.toString()+t[4].unit,t[2],r[3],{value:n,type:Number.isInteger(n)?m.Integer:m.Number,unit:t[4].unit}])}return-1}function isCalculation(e){return!!e&&\"object\"==typeof e&&\"inputs\"in e&&Array.isArray(e.inputs)&&\"operation\"in e}function solve(e){if(-1===e)return-1;const t=[];for(let r=0;r<e.inputs.length;r++){const u=e.inputs[r];if(n(u)){t.push(u);continue}const a=solve(u);if(-1===a)return-1;t.push(a)}return e.operation(t)}function multiplication(n){if(2!==n.length)return-1;const t=n[0].value,r=n[1].value;if(C(t)&&C(r)){const n=t[4].value*r[4].value;return new e([f.Number,n.toString(),t[2],r[3],{value:n,type:t[4].type===m.Integer&&r[4].type===m.Integer?m.Integer:m.Number}])}if(g(t)&&C(r)){const n=t[4].value*r[4].value;return new e([f.Percentage,n.toString()+\"%\",t[2],r[3],{value:n}])}if(C(t)&&g(r)){const n=t[4].value*r[4].value;return new e([f.Percentage,n.toString()+\"%\",t[2],r[3],{value:n}])}if(v(t)&&C(r)){const n=t[4].value*r[4].value;return new e([f.Dimension,n.toString()+t[4].unit,t[2],r[3],{value:n,type:t[4].type===m.Integer&&r[4].type===m.Integer?m.Integer:m.Number,unit:t[4].unit}])}if(C(t)&&v(r)){const n=t[4].value*r[4].value;return new e([f.Dimension,n.toString()+r[4].unit,t[2],r[3],{value:n,type:t[4].type===m.Integer&&r[4].type===m.Integer?m.Integer:m.Number,unit:r[4].unit}])}return-1}function resolveGlobalsAndConstants(t,r){for(let u=0;u<t.length;u++){const a=t[u];if(!n(a))continue;const i=a.value;if(!d(i))continue;const o=toLowerCaseAZ(i[4].value);switch(o){case\"e\":t.splice(u,1,new e([f.Number,Math.E.toString(),i[2],i[3],{value:Math.E,type:m.Number}]));break;case\"pi\":t.splice(u,1,new e([f.Number,Math.PI.toString(),i[2],i[3],{value:Math.PI,type:m.Number}]));break;case\"infinity\":t.splice(u,1,new e([f.Number,\"infinity\",i[2],i[3],{value:1/0,type:m.Number}]));break;case\"-infinity\":t.splice(u,1,new e([f.Number,\"-infinity\",i[2],i[3],{value:-1/0,type:m.Number}]));break;case\"nan\":t.splice(u,1,new e([f.Number,\"NaN\",i[2],i[3],{value:Number.NaN,type:m.Number}]));break;default:if(r.has(o)){const n=r.get(o);t.splice(u,1,new e(n))}}}return t}function unary(e){if(1!==e.length)return-1;const n=e[0].value;return D(n)?e[0]:-1}function resultToCalculation(e,n,t){return v(n)?dimensionToCalculation(e,n[4].unit,t):g(n)?percentageToCalculation(e,t):C(n)?numberToCalculation(e,t):-1}function dimensionToCalculation(n,t,r){const u=n.tokens();return{inputs:[new e([f.Dimension,r.toString()+t,u[0][2],u[u.length-1][3],{value:r,type:Number.isInteger(r)?m.Integer:m.Number,unit:t}])],operation:unary}}function percentageToCalculation(n,t){const r=n.tokens();return{inputs:[new e([f.Percentage,t.toString()+\"%\",r[0][2],r[r.length-1][3],{value:t}])],operation:unary}}function numberToCalculation(n,t){const r=n.tokens();return{inputs:[new e([f.Number,t.toString(),r[0][2],r[r.length-1][3],{value:t,type:Number.isInteger(t)?m.Integer:m.Number}])],operation:unary}}function solveACos(e,n){const t=n.value;if(!C(t))return-1;return dimensionToCalculation(e,\"rad\",Math.acos(t[4].value))}function solveASin(e,n){const t=n.value;if(!C(t))return-1;return dimensionToCalculation(e,\"rad\",Math.asin(t[4].value))}function solveATan(e,n){const t=n.value;if(!C(t))return-1;return dimensionToCalculation(e,\"rad\",Math.atan(t[4].value))}function isDimensionOrNumber(e){return v(e)||C(e)}function arrayOfSameNumeric(e){if(0===e.length)return!0;const n=e[0];if(!D(n))return!1;if(1===e.length)return!0;if(v(n)){const t=toLowerCaseAZ(n[4].unit);for(let r=1;r<e.length;r++){const u=e[r];if(n[0]!==u[0])return!1;if(t!==toLowerCaseAZ(u[4].unit))return!1}return!0}for(let t=1;t<e.length;t++){const r=e[t];if(n[0]!==r[0])return!1}return!0}function twoOfSameNumeric(e,n){return!!D(e)&&(v(e)?e[0]===n[0]&&toLowerCaseAZ(e[4].unit)===toLowerCaseAZ(n[4].unit):e[0]===n[0])}function solveATan2(e,n,t){const r=n.value;if(!isDimensionOrNumber(r))return-1;const u=convertUnit(r,t.value);if(!twoOfSameNumeric(r,u))return-1;return dimensionToCalculation(e,\"rad\",Math.atan2(r[4].value,u[4].value))}function solveAbs(e,n,t){const r=n.value;if(!D(r))return-1;if(!t.rawPercentages&&g(r))return-1;return resultToCalculation(e,r,Math.abs(r[4].value))}function solveClamp(e,t,r,u,a){if(!n(t)||!n(r)||!n(u))return-1;const i=t.value;if(!D(i))return-1;if(!a.rawPercentages&&g(i))return-1;const o=convertUnit(i,r.value);if(!twoOfSameNumeric(i,o))return-1;const l=convertUnit(i,u.value);if(!twoOfSameNumeric(i,l))return-1;return resultToCalculation(e,i,Math.max(i[4].value,Math.min(o[4].value,l[4].value)))}function solveCos(e,n){const t=n.value;if(!isDimensionOrNumber(t))return-1;let r=t[4].value;if(v(t))switch(t[4].unit.toLowerCase()){case\"rad\":break;case\"deg\":r=y.get(\"rad\")(t[4].value);break;case\"grad\":r=M.get(\"rad\")(t[4].value);break;case\"turn\":r=q.get(\"rad\")(t[4].value);break;default:return-1}return r=Math.cos(r),numberToCalculation(e,r)}function solveExp(e,n){const t=n.value;if(!C(t))return-1;return numberToCalculation(e,Math.exp(t[4].value))}function solveHypot(e,t,r){if(!t.every(n))return-1;const u=t[0].value;if(!D(u))return-1;if(!r.rawPercentages&&g(u))return-1;const a=t.map(e=>convertUnit(u,e.value));if(!arrayOfSameNumeric(a))return-1;const i=a.map(e=>e[4].value),o=Math.hypot(...i);return resultToCalculation(e,u,o)}function solveMax(e,t,r){if(!t.every(n))return-1;const u=t[0].value;if(!D(u))return-1;if(!r.rawPercentages&&g(u))return-1;const a=t.map(e=>convertUnit(u,e.value));if(!arrayOfSameNumeric(a))return-1;const i=a.map(e=>e[4].value),o=Math.max(...i);return resultToCalculation(e,u,o)}function solveMin(e,t,r){if(!t.every(n))return-1;const u=t[0].value;if(!D(u))return-1;if(!r.rawPercentages&&g(u))return-1;const a=t.map(e=>convertUnit(u,e.value));if(!arrayOfSameNumeric(a))return-1;const i=a.map(e=>e[4].value),o=Math.min(...i);return resultToCalculation(e,u,o)}function solveMod(e,n,t){const r=n.value;if(!D(r))return-1;const u=convertUnit(r,t.value);if(!twoOfSameNumeric(r,u))return-1;let a;return a=0===u[4].value?Number.NaN:Number.isFinite(r[4].value)&&(Number.isFinite(u[4].value)||(u[4].value!==Number.POSITIVE_INFINITY||r[4].value!==Number.NEGATIVE_INFINITY&&!Object.is(0*r[4].value,-0))&&(u[4].value!==Number.NEGATIVE_INFINITY||r[4].value!==Number.POSITIVE_INFINITY&&!Object.is(0*r[4].value,0)))?Number.isFinite(u[4].value)?(r[4].value%u[4].value+u[4].value)%u[4].value:r[4].value:Number.NaN,resultToCalculation(e,r,a)}function solvePow(e,n,t){const r=n.value,u=t.value;if(!C(r))return-1;if(!twoOfSameNumeric(r,u))return-1;return numberToCalculation(e,Math.pow(r[4].value,u[4].value))}function solveRem(e,n,t){const r=n.value;if(!D(r))return-1;const u=convertUnit(r,t.value);if(!twoOfSameNumeric(r,u))return-1;let a;return a=0===u[4].value?Number.NaN:Number.isFinite(r[4].value)?Number.isFinite(u[4].value)?r[4].value%u[4].value:r[4].value:Number.NaN,resultToCalculation(e,r,a)}function solveRound(e,n,t,r,u){const a=t.value;if(!D(a))return-1;if(!u.rawPercentages&&g(a))return-1;const i=convertUnit(a,r.value);if(!twoOfSameNumeric(a,i))return-1;let o;if(0===i[4].value)o=Number.NaN;else if(Number.isFinite(a[4].value)||Number.isFinite(i[4].value))if(!Number.isFinite(a[4].value)&&Number.isFinite(i[4].value))o=a[4].value;else if(Number.isFinite(a[4].value)&&!Number.isFinite(i[4].value))switch(n){case\"down\":o=a[4].value<0?-1/0:Object.is(-0,0*a[4].value)?-0:0;break;case\"up\":o=a[4].value>0?1/0:Object.is(0,0*a[4].value)?0:-0;break;default:o=Object.is(0,0*a[4].value)?0:-0}else if(Number.isFinite(i[4].value))switch(n){case\"down\":o=Math.floor(a[4].value/i[4].value)*i[4].value;break;case\"up\":o=Math.ceil(a[4].value/i[4].value)*i[4].value;break;case\"to-zero\":o=Math.trunc(a[4].value/i[4].value)*i[4].value;break;default:{let e=Math.floor(a[4].value/i[4].value)*i[4].value,n=Math.ceil(a[4].value/i[4].value)*i[4].value;if(e>n){const t=e;e=n,n=t}const t=Math.abs(a[4].value-e),r=Math.abs(a[4].value-n);o=t===r?n:t<r?e:n;break}}else o=a[4].value;else o=Number.NaN;return resultToCalculation(e,a,o)}function solveSign(e,n,t){const r=n.value;if(!D(r))return-1;if(!t.rawPercentages&&g(r))return-1;return numberToCalculation(e,Math.sign(r[4].value))}function solveSin(e,n){const t=n.value;if(!isDimensionOrNumber(t))return-1;let r=t[4].value;if(v(t))switch(toLowerCaseAZ(t[4].unit)){case\"rad\":break;case\"deg\":r=y.get(\"rad\")(t[4].value);break;case\"grad\":r=M.get(\"rad\")(t[4].value);break;case\"turn\":r=q.get(\"rad\")(t[4].value);break;default:return-1}return r=Math.sin(r),numberToCalculation(e,r)}function solveSqrt(e,n){const t=n.value;if(!C(t))return-1;return numberToCalculation(e,Math.sqrt(t[4].value))}function solveTan(e,n){const t=n.value;if(!isDimensionOrNumber(t))return-1;const r=t[4].value;let u=0,a=t[4].value;if(v(t))switch(toLowerCaseAZ(t[4].unit)){case\"rad\":u=Z.get(\"deg\")(r);break;case\"deg\":u=r,a=y.get(\"rad\")(r);break;case\"grad\":u=M.get(\"deg\")(r),a=M.get(\"rad\")(r);break;case\"turn\":u=q.get(\"deg\")(r),a=q.get(\"rad\")(r);break;default:return-1}const i=u/90;return a=u%90==0&&i%2!=0?i>0?1/0:-1/0:Math.tan(a),numberToCalculation(e,a)}function subtraction(n){if(2!==n.length)return-1;const t=n[0].value;let r=n[1].value;if(C(t)&&C(r)){const n=t[4].value-r[4].value;return new e([f.Number,n.toString(),t[2],r[3],{value:n,type:t[4].type===m.Integer&&r[4].type===m.Integer?m.Integer:m.Number}])}if(g(t)&&g(r)){const n=t[4].value-r[4].value;return new e([f.Percentage,n.toString()+\"%\",t[2],r[3],{value:n}])}if(v(t)&&v(r)&&(r=convertUnit(t,r),toLowerCaseAZ(t[4].unit)===toLowerCaseAZ(r[4].unit))){const n=t[4].value-r[4].value;return new e([f.Dimension,n.toString()+t[4].unit,t[2],r[3],{value:n,type:t[4].type===m.Integer&&r[4].type===m.Integer?m.Integer:m.Number,unit:t[4].unit}])}return-1}function solveLog(e,t){if(1===t.length){const r=t[0];if(!r||!n(r))return-1;const u=r.value;if(!C(u))return-1;return numberToCalculation(e,Math.log(u[4].value))}if(2===t.length){const r=t[0];if(!r||!n(r))return-1;const u=r.value;if(!C(u))return-1;const a=t[1];if(!a||!n(a))return-1;const i=a.value;if(!C(i))return-1;return numberToCalculation(e,Math.log(u[4].value)/Math.log(i[4].value))}return-1}const R=/^none$/i;function isNone(e){if(Array.isArray(e)){const n=e.filter(e=>!(t(e)&&r(e)));return 1===n.length&&isNone(n[0])}if(!n(e))return!1;const u=e.value;return!!d(u)&&R.test(u[4].value)}const V=String.fromCodePoint(0);function solveRandom(e,n,t,r,u,a){if(-1===n.fixed&&!a.randomCaching)return-1;a.randomCaching||(a.randomCaching={propertyName:\"\",propertyN:0,elementID:\"\",documentID:\"\"}),a.randomCaching&&!a.randomCaching.propertyN&&(a.randomCaching.propertyN=0);const i=t.value;if(!D(i))return-1;const o=convertUnit(i,r.value);if(!twoOfSameNumeric(i,o))return-1;let l=null;if(u&&(l=convertUnit(i,u.value),!twoOfSameNumeric(i,l)))return-1;if(!Number.isFinite(i[4].value))return resultToCalculation(e,i,Number.NaN);if(!Number.isFinite(o[4].value))return resultToCalculation(e,i,Number.NaN);if(!Number.isFinite(o[4].value-i[4].value))return resultToCalculation(e,i,Number.NaN);if(l&&!Number.isFinite(l[4].value))return resultToCalculation(e,i,i[4].value);const c=-1===n.fixed?sfc32(crc32([n.dashedIdent?n.dashedIdent:`${a.randomCaching?.propertyName} ${a.randomCaching.propertyN++}`,n.elementShared?\"\":a.randomCaching.elementID,a.randomCaching.documentID].join(V))):()=>n.fixed;let s=i[4].value,v=o[4].value;if(s>v&&([s,v]=[v,s]),l&&(l[4].value<=0||Math.abs(s-v)/l[4].value>1e10)&&(l=null),l){const n=Math.max(l[4].value/1e3,1e-9),t=[s];let r=0;for(;;){r+=l[4].value;const e=s+r;if(!(e+n<v)){t.push(v);break}if(t.push(e),e+l[4].value-n>v)break}const u=c();return resultToCalculation(e,i,Number(t[Math.floor(t.length*u)].toFixed(5)))}const f=c();return resultToCalculation(e,i,Number((f*(v-s)+s).toFixed(5)))}function sfc32(e=.34944106645296036,n=.19228640875738723,t=.8784393832007205,r=.04850964319275053){return()=>{const u=((e|=0)+(n|=0)|0)+(r|=0)|0;return r=r+1|0,e=n^n>>>9,n=(t|=0)+(t<<3)|0,t=(t=t<<21|t>>>11)+u|0,(u>>>0)/4294967296}}function crc32(e){let n=0,t=0,r=0;n^=-1;for(let u=0,a=e.length;u<a;u++)r=255&(n^e.charCodeAt(u)),t=Number(\"0x\"+\"00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 0EDB8832 79DCB8A4 E0D5E91E 97D2D988 09B64C2B 7EB17CBD E7B82D07 90BF1D91 1DB71064 6AB020F2 F3B97148 84BE41DE 1ADAD47D 6DDDE4EB F4D4B551 83D385C7 136C9856 646BA8C0 FD62F97A 8A65C9EC 14015C4F 63066CD9 FA0F3D63 8D080DF5 3B6E20C8 4C69105E D56041E4 A2677172 3C03E4D1 4B04D447 D20D85FD A50AB56B 35B5A8FA 42B2986C DBBBC9D6 ACBCF940 32D86CE3 45DF5C75 DCD60DCF ABD13D59 26D930AC 51DE003A C8D75180 BFD06116 21B4F4B5 56B3C423 CFBA9599 B8BDA50F 2802B89E 5F058808 C60CD9B2 B10BE924 2F6F7C87 58684C11 C1611DAB B6662D3D 76DC4190 01DB7106 98D220BC EFD5102A 71B18589 06B6B51F 9FBFE4A5 E8B8D433 7807C9A2 0F00F934 9609A88E E10E9818 7F6A0DBB 086D3D2D 91646C97 E6635C01 6B6B51F4 1C6C6162 856530D8 F262004E 6C0695ED 1B01A57B 8208F4C1 F50FC457 65B0D9C6 12B7E950 8BBEB8EA FCB9887C 62DD1DDF 15DA2D49 8CD37CF3 FBD44C65 4DB26158 3AB551CE A3BC0074 D4BB30E2 4ADFA541 3DD895D7 A4D1C46D D3D6F4FB 4369E96A 346ED9FC AD678846 DA60B8D0 44042D73 33031DE5 AA0A4C5F DD0D7CC9 5005713C 270241AA BE0B1010 C90C2086 5768B525 206F85B3 B966D409 CE61E49F 5EDEF90E 29D9C998 B0D09822 C7D7A8B4 59B33D17 2EB40D81 B7BD5C3B C0BA6CAD EDB88320 9ABFB3B6 03B6E20C 74B1D29A EAD54739 9DD277AF 04DB2615 73DC1683 E3630B12 94643B84 0D6D6A3E 7A6A5AA8 E40ECF0B 9309FF9D 0A00AE27 7D079EB1 F00F9344 8708A3D2 1E01F268 6906C2FE F762575D 806567CB 196C3671 6E6B06E7 FED41B76 89D32BE0 10DA7A5A 67DD4ACC F9B9DF6F 8EBEEFF9 17B7BE43 60B08ED5 D6D6A3E8 A1D1937E 38D8C2C4 4FDFF252 D1BB67F1 A6BC5767 3FB506DD 48B2364B D80D2BDA AF0A1B4C 36034AF6 41047A60 DF60EFC3 A867DF55 316E8EEF 4669BE79 CB61B38C BC66831A 256FD2A0 5268E236 CC0C7795 BB0B4703 220216B9 5505262F C5BA3BBE B2BD0B28 2BB45A92 5CB36A04 C2D7FFA7 B5D0CF31 2CD99E8B 5BDEAE1D 9B64C2B0 EC63F226 756AA39C 026D930A 9C0906A9 EB0E363F 72076785 05005713 95BF4A82 E2B87A14 7BB12BAE 0CB61B38 92D28E9B E5D5BE0D 7CDCEFB7 0BDBDF21 86D3D2D4 F1D4E242 68DDB3F8 1FDA836E 81BE16CD F6B9265B 6FB077E1 18B74777 88085AE6 FF0F6A70 66063BCA 11010B5C 8F659EFF F862AE69 616BFFD3 166CCF45 A00AE278 D70DD2EE 4E048354 3903B3C2 A7672661 D06016F7 4969474D 3E6E77DB AED16A4A D9D65ADC 40DF0B66 37D83BF0 A9BCAE53 DEBB9EC5 47B2CF7F 30B5FFE9 BDBDF21C CABAC28A 53B39330 24B4A3A6 BAD03605 CDD70693 54DE5729 23D967BF B3667A2E C4614AB8 5D681B02 2A6F2B94 B40BBE37 C30C8EA1 5A05DF1B 2D02EF8D\".substring(9*r,9*r+8)),n=n>>>8^t;return(-1^n)>>>0}const j=new Map([[\"abs\",function abs(e,n,t){return singleNodeSolver(e,n,t,solveAbs)}],[\"acos\",function acos(e,n,t){return singleNodeSolver(e,n,t,solveACos)}],[\"asin\",function asin(e,n,t){return singleNodeSolver(e,n,t,solveASin)}],[\"atan\",function atan(e,n,t){return singleNodeSolver(e,n,t,solveATan)}],[\"atan2\",function atan2(e,n,t){return twoCommaSeparatedNodesSolver(e,n,t,solveATan2)}],[\"calc\",calc$1],[\"clamp\",function clamp(t,r,a){const i=resolveGlobalsAndConstants([...t.value.filter(e=>!u(e))],r),l=[],c=[],s=[];{let e=l;for(let t=0;t<i.length;t++){const r=i[t];if(n(r)&&A(r.value)){if(e===s)return-1;if(e===c){e=s;continue}if(e===l){e=c;continue}return-1}e.push(r)}}const v=isNone(l),m=isNone(s);if(v&&m)return calc$1(calcWrapper(c),r,a);const p=solve(calc$1(calcWrapper(c),r,a));if(-1===p)return-1;if(v){const n=solve(calc$1(calcWrapper(s),r,a));return-1===n?-1:solveMin((C=p,g=n,new o([f.Function,\"min(\",-1,-1,{value:\"min\"}],[f.CloseParen,\")\",-1,-1,void 0],[C,new e([f.Comma,\",\",-1,-1,void 0]),g])),[p,n],a)}if(m){const e=solve(calc$1(calcWrapper(l),r,a));return-1===e?-1:solveMax(maxWrapper(e,p),[e,p],a)}var C,g;const d=solve(calc$1(calcWrapper(l),r,a));if(-1===d)return-1;const D=solve(calc$1(calcWrapper(s),r,a));if(-1===D)return-1;return solveClamp(t,d,p,D,a)}],[\"cos\",function cos(e,n,t){return singleNodeSolver(e,n,t,solveCos)}],[\"exp\",function exp(e,n,t){return singleNodeSolver(e,n,t,solveExp)}],[\"hypot\",function hypot(e,n,t){return variadicNodesSolver(e,e.value,n,t,solveHypot)}],[\"log\",function log(e,n,t){return variadicNodesSolver(e,e.value,n,t,solveLog)}],[\"max\",function max(e,n,t){return variadicNodesSolver(e,e.value,n,t,solveMax)}],[\"min\",function min(e,n,t){return variadicNodesSolver(e,e.value,n,t,solveMin)}],[\"mod\",function mod(e,n,t){return twoCommaSeparatedNodesSolver(e,n,t,solveMod)}],[\"pow\",function pow(e,n,t){return twoCommaSeparatedNodesSolver(e,n,t,solvePow)}],[\"random\",function random(e,n,t){const r=parseRandomValueSharing(e.value.filter(e=>!u(e)),n,t);if(-1===r)return-1;const[a,i]=r,o=variadicArguments(i,n,t);if(-1===o)return-1;const[l,c,s]=o;if(!l||!c)return-1;return solveRandom(e,a,l,c,s,t)}],[\"rem\",function rem(e,n,t){return twoCommaSeparatedNodesSolver(e,n,t,solveRem)}],[\"round\",function round(t,r,a){const i=resolveGlobalsAndConstants([...t.value.filter(e=>!u(e))],r);let o=\"\",l=!1;const c=[],s=[];{let e=c;for(let t=0;t<i.length;t++){const r=i[t];if(!o&&0===c.length&&0===s.length&&n(r)&&d(r.value)){const e=r.value[4].value.toLowerCase();if(Y.has(e)){o=e;continue}}if(n(r)&&A(r.value)){if(e===s)return-1;if(e===c&&o&&0===c.length)continue;if(e===c){l=!0,e=s;continue}return-1}e.push(r)}}const v=solve(calc$1(calcWrapper(c),r,a));if(-1===v)return-1;l||0!==s.length||s.push(new e([f.Number,\"1\",-1,-1,{value:1,type:m.Integer}]));const p=solve(calc$1(calcWrapper(s),r,a));if(-1===p)return-1;o||(o=\"nearest\");return solveRound(t,o,v,p,a)}],[\"sign\",function sign(e,n,t){return singleNodeSolver(e,n,t,solveSign)}],[\"sin\",function sin(e,n,t){return singleNodeSolver(e,n,t,solveSin)}],[\"sqrt\",function sqrt(e,n,t){return singleNodeSolver(e,n,t,solveSqrt)}],[\"tan\",function tan(e,n,t){return singleNodeSolver(e,n,t,solveTan)}]]);function calc$1(e,t,r){const o=resolveGlobalsAndConstants([...e.value.filter(e=>!u(e))],t);if(1===o.length&&n(o[0]))return{inputs:[o[0]],operation:unary};let l=0;for(;l<o.length;){const e=o[l];if(a(e)&&N(e.startToken)){const n=calc$1(e,t,r);if(-1===n)return-1;o.splice(l,1,n);continue}if(i(e)){const n=j.get(e.getName().toLowerCase());if(!n)return-1;const u=n(e,t,r);if(-1===u)return-1;o.splice(l,1,u);continue}l++}if(l=0,1===o.length&&isCalculation(o[0]))return o[0];for(;l<o.length;){const e=o[l];if(!e||!n(e)&&!isCalculation(e)){l++;continue}const t=o[l+1];if(!t||!n(t)){l++;continue}const r=t.value;if(!B(r)||\"*\"!==r[4].value&&\"/\"!==r[4].value){l++;continue}const u=o[l+2];if(!u||!n(u)&&!isCalculation(u))return-1;\"*\"!==r[4].value?\"/\"!==r[4].value?l++:o.splice(l,3,{inputs:[e,u],operation:division}):o.splice(l,3,{inputs:[e,u],operation:multiplication})}if(l=0,1===o.length&&isCalculation(o[0]))return o[0];for(;l<o.length;){const e=o[l];if(!e||!n(e)&&!isCalculation(e)){l++;continue}const t=o[l+1];if(!t||!n(t)){l++;continue}const r=t.value;if(!B(r)||\"+\"!==r[4].value&&\"-\"!==r[4].value){l++;continue}const u=o[l+2];if(!u||!n(u)&&!isCalculation(u))return-1;\"+\"!==r[4].value?\"-\"!==r[4].value?l++:o.splice(l,3,{inputs:[e,u],operation:subtraction}):o.splice(l,3,{inputs:[e,u],operation:addition})}return 1===o.length&&isCalculation(o[0])?o[0]:-1}function singleNodeSolver(e,n,t,r){const u=singleArgument(e.value,n,t);return-1===u?-1:r(e,u,t)}function singleArgument(e,n,t){const r=solve(calc$1(calcWrapper(resolveGlobalsAndConstants([...e.filter(e=>!u(e))],n)),n,t));return-1===r?-1:r}function twoCommaSeparatedNodesSolver(e,n,t,r){const u=twoCommaSeparatedArguments(e.value,n,t);if(-1===u)return-1;const[a,i]=u;return r(e,a,i,t)}function twoCommaSeparatedArguments(e,t,r){const a=resolveGlobalsAndConstants([...e.filter(e=>!u(e))],t),i=[],o=[];{let e=i;for(let t=0;t<a.length;t++){const r=a[t];if(n(r)&&A(r.value)){if(e===o)return-1;if(e===i){e=o;continue}return-1}e.push(r)}}const l=solve(calc$1(calcWrapper(i),t,r));if(-1===l)return-1;const c=solve(calc$1(calcWrapper(o),t,r));return-1===c?-1:[l,c]}function variadicNodesSolver(e,n,t,r,u){const a=variadicArguments(e.value,t,r);return-1===a?-1:u(e,a,r)}function variadicArguments(e,t,r){const a=resolveGlobalsAndConstants([...e.filter(e=>!u(e))],t),i=[];{const e=[];let u=[];for(let t=0;t<a.length;t++){const r=a[t];n(r)&&A(r.value)?(e.push(u),u=[]):u.push(r)}e.push(u);for(let n=0;n<e.length;n++){if(0===e[n].length)return-1;const u=solve(calc$1(calcWrapper(e[n]),t,r));if(-1===u)return-1;i.push(u)}}return i}const Y=new Set([\"nearest\",\"up\",\"down\",\"to-zero\"]);function parseRandomValueSharing(e,t,r){const u={isAuto:!1,dashedIdent:\"\",fixed:-1,elementShared:!1},a=e[0];if(!n(a)||!d(a.value))return[u,e];for(let a=0;a<e.length;a++){const i=e[a];if(!n(i))return-1;if(A(i.value))return[u,e.slice(a+1)];if(!d(i.value))return-1;const o=i.value[4].value.toLowerCase();if(\"element-shared\"!==o){if(\"fixed\"===o){if(u.elementShared||u.dashedIdent||u.isAuto)return-1;a++;const n=e[a];if(!n)return-1;const i=solve(calc$1(calcWrapper([n]),t,r));if(-1===i)return-1;if(!C(i.value))return-1;if(i.value[4].value<0||i.value[4].value>1)return-1;u.fixed=Math.max(0,Math.min(i.value[4].value,1-1e-9));continue}if(\"auto\"!==o)if(o.startsWith(\"--\")){if(-1!==u.fixed||u.isAuto)return-1;u.dashedIdent=o}else;else{if(-1!==u.fixed||u.dashedIdent)return-1;u.isAuto=!0}}else{if(-1!==u.fixed)return-1;u.elementShared=!0}}return-1}function calcWrapper(e){return new o([f.Function,\"calc(\",-1,-1,{value:\"calc\"}],[f.CloseParen,\")\",-1,-1,void 0],e)}function maxWrapper(n,t){return new o([f.Function,\"max(\",-1,-1,{value:\"max\"}],[f.CloseParen,\")\",-1,-1,void 0],[n,new e([f.Comma,\",\",-1,-1,void 0]),t])}function patchNaN(n){if(-1===n)return-1;if(i(n))return n;const t=n.value;return D(t)&&Number.isNaN(t[4].value)?C(t)?new o([f.Function,\"calc(\",t[2],t[3],{value:\"calc\"}],[f.CloseParen,\")\",t[2],t[3],void 0],[new e([f.Ident,\"NaN\",t[2],t[3],{value:\"NaN\"}])]):v(t)?new o([f.Function,\"calc(\",t[2],t[3],{value:\"calc\"}],[f.CloseParen,\")\",t[2],t[3],void 0],[new e([f.Ident,\"NaN\",t[2],t[3],{value:\"NaN\"}]),new l([[f.Whitespace,\" \",t[2],t[3],void 0]]),new e([f.Delim,\"*\",t[2],t[3],{value:\"*\"}]),new l([[f.Whitespace,\" \",t[2],t[3],void 0]]),new e([f.Dimension,\"1\"+t[4].unit,t[2],t[3],{value:1,type:m.Integer,unit:t[4].unit}])]):g(t)?new o([f.Function,\"calc(\",t[2],t[3],{value:\"calc\"}],[f.CloseParen,\")\",t[2],t[3],void 0],[new e([f.Ident,\"NaN\",t[2],t[3],{value:\"NaN\"}]),new l([[f.Whitespace,\" \",t[2],t[3],void 0]]),new e([f.Delim,\"*\",t[2],t[3],{value:\"*\"}]),new l([[f.Whitespace,\" \",t[2],t[3],void 0]]),new e([f.Percentage,\"1%\",t[2],t[3],{value:1}])]):-1:n}function patchInfinity(n){if(-1===n)return-1;if(i(n))return n;const t=n.value;if(!D(t))return n;if(Number.isFinite(t[4].value)||Number.isNaN(t[4].value))return n;let r=\"\";return Number.NEGATIVE_INFINITY===t[4].value&&(r=\"-\"),C(t)?new o([f.Function,\"calc(\",t[2],t[3],{value:\"calc\"}],[f.CloseParen,\")\",t[2],t[3],void 0],[new e([f.Ident,r+\"infinity\",t[2],t[3],{value:r+\"infinity\"}])]):v(t)?new o([f.Function,\"calc(\",t[2],t[3],{value:\"calc\"}],[f.CloseParen,\")\",t[2],t[3],void 0],[new e([f.Ident,r+\"infinity\",t[2],t[3],{value:r+\"infinity\"}]),new l([[f.Whitespace,\" \",t[2],t[3],void 0]]),new e([f.Delim,\"*\",t[2],t[3],{value:\"*\"}]),new l([[f.Whitespace,\" \",t[2],t[3],void 0]]),new e([f.Dimension,\"1\"+t[4].unit,t[2],t[3],{value:1,type:m.Integer,unit:t[4].unit}])]):new o([f.Function,\"calc(\",t[2],t[3],{value:\"calc\"}],[f.CloseParen,\")\",t[2],t[3],void 0],[new e([f.Ident,r+\"infinity\",t[2],t[3],{value:r+\"infinity\"}]),new l([[f.Whitespace,\" \",t[2],t[3],void 0]]),new e([f.Delim,\"*\",t[2],t[3],{value:\"*\"}]),new l([[f.Whitespace,\" \",t[2],t[3],void 0]]),new e([f.Percentage,\"1%\",t[2],t[3],{value:1}])])}function patchMinusZero(e){if(-1===e)return-1;if(i(e))return e;const n=e.value;return D(n)&&Object.is(-0,n[4].value)?(\"-0\"===n[1]||(g(n)?n[1]=\"-0%\":v(n)?n[1]=\"-0\"+n[4].unit:n[1]=\"-0\"),e):e}function patchPrecision(e,n=13){if(-1===e)return-1;if(n<=0)return e;if(i(e))return e;const t=e.value;if(!D(t))return e;if(Number.isInteger(t[4].value))return e;const r=Number(t[4].value.toFixed(n)).toString();return C(t)?t[1]=r:g(t)?t[1]=r+\"%\":v(t)&&(t[1]=r+t[4].unit),e}function patchCanonicalUnit(e){return-1===e?-1:i(e)?e:v(e.value)?(e.value=toCanonicalUnit(e.value),e):e}function patchCalcResult(e,n){let t=e;return n?.toCanonicalUnits&&(t=patchCanonicalUnit(t)),t=patchPrecision(t,n?.precision),t=patchMinusZero(t),n?.censorIntoStandardRepresentableValues||(t=patchNaN(t),t=patchInfinity(t)),t}function tokenizeGlobals(e){const n=new Map;if(!e)return n;for(const[t,r]of e)if(h(r))n.set(t,r);else if(\"string\"==typeof r){const e=F({css:r}),u=e.nextToken();if(e.nextToken(),!e.endOfFile())continue;if(!D(u))continue;n.set(t,u);continue}return n}function calc(e,n){return calcFromComponentValues(c(b({css:e}),{}),n).map(e=>e.map(e=>w(...e.tokens())).join(\"\")).join(\",\")}function calcFromComponentValues(e,n){const t=tokenizeGlobals(n?.globals);return s(e,e=>{if(!i(e))return;const r=j.get(e.getName().toLowerCase());if(!r)return;const u=patchCalcResult(solve(r(e,t,n??{})),n);return-1!==u?u:void 0})}const _=new Set(j.keys());export{calc,calcFromComponentValues,_ as mathFunctionNames};\n","/**\n * @module LRUCache\n */\nconst defaultPerf = (typeof performance === 'object' &&\n performance &&\n typeof performance.now === 'function') ?\n performance\n : Date;\nconst warned = new Set();\n/* c8 ignore start */\nconst PROCESS = (typeof process === 'object' && !!process ?\n process\n : {});\n/* c8 ignore start */\nconst emitWarning = (msg, type, code, fn) => {\n typeof PROCESS.emitWarning === 'function' ?\n PROCESS.emitWarning(msg, type, code, fn)\n : console.error(`[${code}] ${type}: ${msg}`);\n};\nlet AC = globalThis.AbortController;\nlet AS = globalThis.AbortSignal;\n/* c8 ignore start */\nif (typeof AC === 'undefined') {\n //@ts-ignore\n AS = class AbortSignal {\n onabort;\n _onabort = [];\n reason;\n aborted = false;\n addEventListener(_, fn) {\n this._onabort.push(fn);\n }\n };\n //@ts-ignore\n AC = class AbortController {\n constructor() {\n warnACPolyfill();\n }\n signal = new AS();\n abort(reason) {\n if (this.signal.aborted)\n return;\n //@ts-ignore\n this.signal.reason = reason;\n //@ts-ignore\n this.signal.aborted = true;\n //@ts-ignore\n for (const fn of this.signal._onabort) {\n fn(reason);\n }\n this.signal.onabort?.(reason);\n }\n };\n let printACPolyfillWarning = PROCESS.env?.LRU_CACHE_IGNORE_AC_WARNING !== '1';\n const warnACPolyfill = () => {\n if (!printACPolyfillWarning)\n return;\n printACPolyfillWarning = false;\n emitWarning('AbortController is not defined. If using lru-cache in ' +\n 'node 14, load an AbortController polyfill from the ' +\n '`node-abort-controller` package. A minimal polyfill is ' +\n 'provided for use by LRUCache.fetch(), but it should not be ' +\n 'relied upon in other contexts (eg, passing it to other APIs that ' +\n 'use AbortController/AbortSignal might have undesirable effects). ' +\n 'You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.', 'NO_ABORT_CONTROLLER', 'ENOTSUP', warnACPolyfill);\n };\n}\n/* c8 ignore stop */\nconst shouldWarn = (code) => !warned.has(code);\nconst TYPE = Symbol('type');\nconst isPosInt = (n) => n && n === Math.floor(n) && n > 0 && isFinite(n);\n/* c8 ignore start */\n// This is a little bit ridiculous, tbh.\n// The maximum array length is 2^32-1 or thereabouts on most JS impls.\n// And well before that point, you're caching the entire world, I mean,\n// that's ~32GB of just integers for the next/prev links, plus whatever\n// else to hold that many keys and values. Just filling the memory with\n// zeroes at init time is brutal when you get that big.\n// But why not be complete?\n// Maybe in the future, these limits will have expanded.\nconst getUintArray = (max) => !isPosInt(max) ? null\n : max <= Math.pow(2, 8) ? Uint8Array\n : max <= Math.pow(2, 16) ? Uint16Array\n : max <= Math.pow(2, 32) ? Uint32Array\n : max <= Number.MAX_SAFE_INTEGER ? ZeroArray\n : null;\n/* c8 ignore stop */\nclass ZeroArray extends Array {\n constructor(size) {\n super(size);\n this.fill(0);\n }\n}\nclass Stack {\n heap;\n length;\n // private constructor\n static #constructing = false;\n static create(max) {\n const HeapCls = getUintArray(max);\n if (!HeapCls)\n return [];\n Stack.#constructing = true;\n const s = new Stack(max, HeapCls);\n Stack.#constructing = false;\n return s;\n }\n constructor(max, HeapCls) {\n /* c8 ignore start */\n if (!Stack.#constructing) {\n throw new TypeError('instantiate Stack using Stack.create(n)');\n }\n /* c8 ignore stop */\n this.heap = new HeapCls(max);\n this.length = 0;\n }\n push(n) {\n this.heap[this.length++] = n;\n }\n pop() {\n return this.heap[--this.length];\n }\n}\n/**\n * Default export, the thing you're using this module to get.\n *\n * The `K` and `V` types define the key and value types, respectively. The\n * optional `FC` type defines the type of the `context` object passed to\n * `cache.fetch()` and `cache.memo()`.\n *\n * Keys and values **must not** be `null` or `undefined`.\n *\n * All properties from the options object (with the exception of `max`,\n * `maxSize`, `fetchMethod`, `memoMethod`, `dispose` and `disposeAfter`) are\n * added as normal public members. (The listed options are read-only getters.)\n *\n * Changing any of these will alter the defaults for subsequent method calls.\n */\nexport class LRUCache {\n // options that cannot be changed without disaster\n #max;\n #maxSize;\n #dispose;\n #onInsert;\n #disposeAfter;\n #fetchMethod;\n #memoMethod;\n #perf;\n /**\n * {@link LRUCache.OptionsBase.perf}\n */\n get perf() {\n return this.#perf;\n }\n /**\n * {@link LRUCache.OptionsBase.ttl}\n */\n ttl;\n /**\n * {@link LRUCache.OptionsBase.ttlResolution}\n */\n ttlResolution;\n /**\n * {@link LRUCache.OptionsBase.ttlAutopurge}\n */\n ttlAutopurge;\n /**\n * {@link LRUCache.OptionsBase.updateAgeOnGet}\n */\n updateAgeOnGet;\n /**\n * {@link LRUCache.OptionsBase.updateAgeOnHas}\n */\n updateAgeOnHas;\n /**\n * {@link LRUCache.OptionsBase.allowStale}\n */\n allowStale;\n /**\n * {@link LRUCache.OptionsBase.noDisposeOnSet}\n */\n noDisposeOnSet;\n /**\n * {@link LRUCache.OptionsBase.noUpdateTTL}\n */\n noUpdateTTL;\n /**\n * {@link LRUCache.OptionsBase.maxEntrySize}\n */\n maxEntrySize;\n /**\n * {@link LRUCache.OptionsBase.sizeCalculation}\n */\n sizeCalculation;\n /**\n * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection}\n */\n noDeleteOnFetchRejection;\n /**\n * {@link LRUCache.OptionsBase.noDeleteOnStaleGet}\n */\n noDeleteOnStaleGet;\n /**\n * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort}\n */\n allowStaleOnFetchAbort;\n /**\n * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection}\n */\n allowStaleOnFetchRejection;\n /**\n * {@link LRUCache.OptionsBase.ignoreFetchAbort}\n */\n ignoreFetchAbort;\n // computed properties\n #size;\n #calculatedSize;\n #keyMap;\n #keyList;\n #valList;\n #next;\n #prev;\n #head;\n #tail;\n #free;\n #disposed;\n #sizes;\n #starts;\n #ttls;\n #autopurgeTimers;\n #hasDispose;\n #hasFetchMethod;\n #hasDisposeAfter;\n #hasOnInsert;\n /**\n * Do not call this method unless you need to inspect the\n * inner workings of the cache. If anything returned by this\n * object is modified in any way, strange breakage may occur.\n *\n * These fields are private for a reason!\n *\n * @internal\n */\n static unsafeExposeInternals(c) {\n return {\n // properties\n starts: c.#starts,\n ttls: c.#ttls,\n autopurgeTimers: c.#autopurgeTimers,\n sizes: c.#sizes,\n keyMap: c.#keyMap,\n keyList: c.#keyList,\n valList: c.#valList,\n next: c.#next,\n prev: c.#prev,\n get head() {\n return c.#head;\n },\n get tail() {\n return c.#tail;\n },\n free: c.#free,\n // methods\n isBackgroundFetch: (p) => c.#isBackgroundFetch(p),\n backgroundFetch: (k, index, options, context) => c.#backgroundFetch(k, index, options, context),\n moveToTail: (index) => c.#moveToTail(index),\n indexes: (options) => c.#indexes(options),\n rindexes: (options) => c.#rindexes(options),\n isStale: (index) => c.#isStale(index),\n };\n }\n // Protected read-only members\n /**\n * {@link LRUCache.OptionsBase.max} (read-only)\n */\n get max() {\n return this.#max;\n }\n /**\n * {@link LRUCache.OptionsBase.maxSize} (read-only)\n */\n get maxSize() {\n return this.#maxSize;\n }\n /**\n * The total computed size of items in the cache (read-only)\n */\n get calculatedSize() {\n return this.#calculatedSize;\n }\n /**\n * The number of items stored in the cache (read-only)\n */\n get size() {\n return this.#size;\n }\n /**\n * {@link LRUCache.OptionsBase.fetchMethod} (read-only)\n */\n get fetchMethod() {\n return this.#fetchMethod;\n }\n get memoMethod() {\n return this.#memoMethod;\n }\n /**\n * {@link LRUCache.OptionsBase.dispose} (read-only)\n */\n get dispose() {\n return this.#dispose;\n }\n /**\n * {@link LRUCache.OptionsBase.onInsert} (read-only)\n */\n get onInsert() {\n return this.#onInsert;\n }\n /**\n * {@link LRUCache.OptionsBase.disposeAfter} (read-only)\n */\n get disposeAfter() {\n return this.#disposeAfter;\n }\n constructor(options) {\n const { max = 0, ttl, ttlResolution = 1, ttlAutopurge, updateAgeOnGet, updateAgeOnHas, allowStale, dispose, onInsert, disposeAfter, noDisposeOnSet, noUpdateTTL, maxSize = 0, maxEntrySize = 0, sizeCalculation, fetchMethod, memoMethod, noDeleteOnFetchRejection, noDeleteOnStaleGet, allowStaleOnFetchRejection, allowStaleOnFetchAbort, ignoreFetchAbort, perf, } = options;\n if (perf !== undefined) {\n if (typeof perf?.now !== 'function') {\n throw new TypeError('perf option must have a now() method if specified');\n }\n }\n this.#perf = perf ?? defaultPerf;\n if (max !== 0 && !isPosInt(max)) {\n throw new TypeError('max option must be a nonnegative integer');\n }\n const UintArray = max ? getUintArray(max) : Array;\n if (!UintArray) {\n throw new Error('invalid max value: ' + max);\n }\n this.#max = max;\n this.#maxSize = maxSize;\n this.maxEntrySize = maxEntrySize || this.#maxSize;\n this.sizeCalculation = sizeCalculation;\n if (this.sizeCalculation) {\n if (!this.#maxSize && !this.maxEntrySize) {\n throw new TypeError('cannot set sizeCalculation without setting maxSize or maxEntrySize');\n }\n if (typeof this.sizeCalculation !== 'function') {\n throw new TypeError('sizeCalculation set to non-function');\n }\n }\n if (memoMethod !== undefined && typeof memoMethod !== 'function') {\n throw new TypeError('memoMethod must be a function if defined');\n }\n this.#memoMethod = memoMethod;\n if (fetchMethod !== undefined && typeof fetchMethod !== 'function') {\n throw new TypeError('fetchMethod must be a function if specified');\n }\n this.#fetchMethod = fetchMethod;\n this.#hasFetchMethod = !!fetchMethod;\n this.#keyMap = new Map();\n this.#keyList = new Array(max).fill(undefined);\n this.#valList = new Array(max).fill(undefined);\n this.#next = new UintArray(max);\n this.#prev = new UintArray(max);\n this.#head = 0;\n this.#tail = 0;\n this.#free = Stack.create(max);\n this.#size = 0;\n this.#calculatedSize = 0;\n if (typeof dispose === 'function') {\n this.#dispose = dispose;\n }\n if (typeof onInsert === 'function') {\n this.#onInsert = onInsert;\n }\n if (typeof disposeAfter === 'function') {\n this.#disposeAfter = disposeAfter;\n this.#disposed = [];\n }\n else {\n this.#disposeAfter = undefined;\n this.#disposed = undefined;\n }\n this.#hasDispose = !!this.#dispose;\n this.#hasOnInsert = !!this.#onInsert;\n this.#hasDisposeAfter = !!this.#disposeAfter;\n this.noDisposeOnSet = !!noDisposeOnSet;\n this.noUpdateTTL = !!noUpdateTTL;\n this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection;\n this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection;\n this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort;\n this.ignoreFetchAbort = !!ignoreFetchAbort;\n // NB: maxEntrySize is set to maxSize if it's set\n if (this.maxEntrySize !== 0) {\n if (this.#maxSize !== 0) {\n if (!isPosInt(this.#maxSize)) {\n throw new TypeError('maxSize must be a positive integer if specified');\n }\n }\n if (!isPosInt(this.maxEntrySize)) {\n throw new TypeError('maxEntrySize must be a positive integer if specified');\n }\n this.#initializeSizeTracking();\n }\n this.allowStale = !!allowStale;\n this.noDeleteOnStaleGet = !!noDeleteOnStaleGet;\n this.updateAgeOnGet = !!updateAgeOnGet;\n this.updateAgeOnHas = !!updateAgeOnHas;\n this.ttlResolution =\n isPosInt(ttlResolution) || ttlResolution === 0 ? ttlResolution : 1;\n this.ttlAutopurge = !!ttlAutopurge;\n this.ttl = ttl || 0;\n if (this.ttl) {\n if (!isPosInt(this.ttl)) {\n throw new TypeError('ttl must be a positive integer if specified');\n }\n this.#initializeTTLTracking();\n }\n // do not allow completely unbounded caches\n if (this.#max === 0 && this.ttl === 0 && this.#maxSize === 0) {\n throw new TypeError('At least one of max, maxSize, or ttl is required');\n }\n if (!this.ttlAutopurge && !this.#max && !this.#maxSize) {\n const code = 'LRU_CACHE_UNBOUNDED';\n if (shouldWarn(code)) {\n warned.add(code);\n const msg = 'TTL caching without ttlAutopurge, max, or maxSize can ' +\n 'result in unbounded memory consumption.';\n emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache);\n }\n }\n }\n /**\n * Return the number of ms left in the item's TTL. If item is not in cache,\n * returns `0`. Returns `Infinity` if item is in cache without a defined TTL.\n */\n getRemainingTTL(key) {\n return this.#keyMap.has(key) ? Infinity : 0;\n }\n #initializeTTLTracking() {\n const ttls = new ZeroArray(this.#max);\n const starts = new ZeroArray(this.#max);\n this.#ttls = ttls;\n this.#starts = starts;\n const purgeTimers = this.ttlAutopurge ?\n new Array(this.#max)\n : undefined;\n this.#autopurgeTimers = purgeTimers;\n this.#setItemTTL = (index, ttl, start = this.#perf.now()) => {\n starts[index] = ttl !== 0 ? start : 0;\n ttls[index] = ttl;\n // clear out the purge timer if we're setting TTL to 0, and\n // previously had a ttl purge timer running, so it doesn't\n // fire unnecessarily.\n if (purgeTimers?.[index]) {\n clearTimeout(purgeTimers[index]);\n purgeTimers[index] = undefined;\n }\n if (ttl !== 0 && purgeTimers) {\n const t = setTimeout(() => {\n if (this.#isStale(index)) {\n this.#delete(this.#keyList[index], 'expire');\n }\n }, ttl + 1);\n // unref() not supported on all platforms\n /* c8 ignore start */\n if (t.unref) {\n t.unref();\n }\n /* c8 ignore stop */\n purgeTimers[index] = t;\n }\n };\n this.#updateItemAge = index => {\n starts[index] = ttls[index] !== 0 ? this.#perf.now() : 0;\n };\n this.#statusTTL = (status, index) => {\n if (ttls[index]) {\n const ttl = ttls[index];\n const start = starts[index];\n /* c8 ignore next */\n if (!ttl || !start)\n return;\n status.ttl = ttl;\n status.start = start;\n status.now = cachedNow || getNow();\n const age = status.now - start;\n status.remainingTTL = ttl - age;\n }\n };\n // debounce calls to perf.now() to 1s so we're not hitting\n // that costly call repeatedly.\n let cachedNow = 0;\n const getNow = () => {\n const n = this.#perf.now();\n if (this.ttlResolution > 0) {\n cachedNow = n;\n const t = setTimeout(() => (cachedNow = 0), this.ttlResolution);\n // not available on all platforms\n /* c8 ignore start */\n if (t.unref) {\n t.unref();\n }\n /* c8 ignore stop */\n }\n return n;\n };\n this.getRemainingTTL = key => {\n const index = this.#keyMap.get(key);\n if (index === undefined) {\n return 0;\n }\n const ttl = ttls[index];\n const start = starts[index];\n if (!ttl || !start) {\n return Infinity;\n }\n const age = (cachedNow || getNow()) - start;\n return ttl - age;\n };\n this.#isStale = index => {\n const s = starts[index];\n const t = ttls[index];\n return !!t && !!s && (cachedNow || getNow()) - s > t;\n };\n }\n // conditionally set private methods related to TTL\n #updateItemAge = () => { };\n #statusTTL = () => { };\n #setItemTTL = () => { };\n /* c8 ignore stop */\n #isStale = () => false;\n #initializeSizeTracking() {\n const sizes = new ZeroArray(this.#max);\n this.#calculatedSize = 0;\n this.#sizes = sizes;\n this.#removeItemSize = index => {\n this.#calculatedSize -= sizes[index];\n sizes[index] = 0;\n };\n this.#requireSize = (k, v, size, sizeCalculation) => {\n // provisionally accept background fetches.\n // actual value size will be checked when they return.\n if (this.#isBackgroundFetch(v)) {\n return 0;\n }\n if (!isPosInt(size)) {\n if (sizeCalculation) {\n if (typeof sizeCalculation !== 'function') {\n throw new TypeError('sizeCalculation must be a function');\n }\n size = sizeCalculation(v, k);\n if (!isPosInt(size)) {\n throw new TypeError('sizeCalculation return invalid (expect positive integer)');\n }\n }\n else {\n throw new TypeError('invalid size value (must be positive integer). ' +\n 'When maxSize or maxEntrySize is used, sizeCalculation ' +\n 'or size must be set.');\n }\n }\n return size;\n };\n this.#addItemSize = (index, size, status) => {\n sizes[index] = size;\n if (this.#maxSize) {\n const maxSize = this.#maxSize - sizes[index];\n while (this.#calculatedSize > maxSize) {\n this.#evict(true);\n }\n }\n this.#calculatedSize += sizes[index];\n if (status) {\n status.entrySize = size;\n status.totalCalculatedSize = this.#calculatedSize;\n }\n };\n }\n #removeItemSize = _i => { };\n #addItemSize = (_i, _s, _st) => { };\n #requireSize = (_k, _v, size, sizeCalculation) => {\n if (size || sizeCalculation) {\n throw new TypeError('cannot set size without setting maxSize or maxEntrySize on cache');\n }\n return 0;\n };\n *#indexes({ allowStale = this.allowStale } = {}) {\n if (this.#size) {\n for (let i = this.#tail; true;) {\n if (!this.#isValidIndex(i)) {\n break;\n }\n if (allowStale || !this.#isStale(i)) {\n yield i;\n }\n if (i === this.#head) {\n break;\n }\n else {\n i = this.#prev[i];\n }\n }\n }\n }\n *#rindexes({ allowStale = this.allowStale } = {}) {\n if (this.#size) {\n for (let i = this.#head; true;) {\n if (!this.#isValidIndex(i)) {\n break;\n }\n if (allowStale || !this.#isStale(i)) {\n yield i;\n }\n if (i === this.#tail) {\n break;\n }\n else {\n i = this.#next[i];\n }\n }\n }\n }\n #isValidIndex(index) {\n return (index !== undefined &&\n this.#keyMap.get(this.#keyList[index]) === index);\n }\n /**\n * Return a generator yielding `[key, value]` pairs,\n * in order from most recently used to least recently used.\n */\n *entries() {\n for (const i of this.#indexes()) {\n if (this.#valList[i] !== undefined &&\n this.#keyList[i] !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])) {\n yield [this.#keyList[i], this.#valList[i]];\n }\n }\n }\n /**\n * Inverse order version of {@link LRUCache.entries}\n *\n * Return a generator yielding `[key, value]` pairs,\n * in order from least recently used to most recently used.\n */\n *rentries() {\n for (const i of this.#rindexes()) {\n if (this.#valList[i] !== undefined &&\n this.#keyList[i] !== undefined &&\n !this.#isBackgroundFetch(this.#valList[i])) {\n yield [this.#keyList[i], this.#valList[i]];\n }\n }\n }\n /**\n * Return a generator yielding the keys in the cache,\n * in order from most recently used to least recently used.\n */\n *keys() {\n for (const i of this.#indexes()) {\n const k = this.#keyList[i];\n if (k !== undefined && !this.#isBackgroundFetch(this.#valList[i])) {\n yield k;\n }\n }\n }\n /**\n * Inverse order version of {@link LRUCache.keys}\n *\n * Return a generator yielding the keys in the cache,\n * in order from least recently used to most recently used.\n */\n *rkeys() {\n for (const i of this.#rindexes()) {\n const k = this.#keyList[i];\n if (k !== undefined && !this.#isBackgroundFetch(this.#valList[i])) {\n yield k;\n }\n }\n }\n /**\n * Return a generator yielding the values in the cache,\n * in order from most recently used to least recently used.\n */\n *values() {\n for (const i of this.#indexes()) {\n const v = this.#valList[i];\n if (v !== undefined && !this.#isBackgroundFetch(this.#valList[i])) {\n yield this.#valList[i];\n }\n }\n }\n /**\n * Inverse order version of {@link LRUCache.values}\n *\n * Return a generator yielding the values in the cache,\n * in order from least recently used to most recently used.\n */\n *rvalues() {\n for (const i of this.#rindexes()) {\n const v = this.#valList[i];\n if (v !== undefined && !this.#isBackgroundFetch(this.#valList[i])) {\n yield this.#valList[i];\n }\n }\n }\n /**\n * Iterating over the cache itself yields the same results as\n * {@link LRUCache.entries}\n */\n [Symbol.iterator]() {\n return this.entries();\n }\n /**\n * A String value that is used in the creation of the default string\n * description of an object. Called by the built-in method\n * `Object.prototype.toString`.\n */\n [Symbol.toStringTag] = 'LRUCache';\n /**\n * Find a value for which the supplied fn method returns a truthy value,\n * similar to `Array.find()`. fn is called as `fn(value, key, cache)`.\n */\n find(fn, getOptions = {}) {\n for (const i of this.#indexes()) {\n const v = this.#valList[i];\n const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;\n if (value === undefined)\n continue;\n if (fn(value, this.#keyList[i], this)) {\n return this.get(this.#keyList[i], getOptions);\n }\n }\n }\n /**\n * Call the supplied function on each item in the cache, in order from most\n * recently used to least recently used.\n *\n * `fn` is called as `fn(value, key, cache)`.\n *\n * If `thisp` is provided, function will be called in the `this`-context of\n * the provided object, or the cache if no `thisp` object is provided.\n *\n * Does not update age or recenty of use, or iterate over stale values.\n */\n forEach(fn, thisp = this) {\n for (const i of this.#indexes()) {\n const v = this.#valList[i];\n const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;\n if (value === undefined)\n continue;\n fn.call(thisp, value, this.#keyList[i], this);\n }\n }\n /**\n * The same as {@link LRUCache.forEach} but items are iterated over in\n * reverse order. (ie, less recently used items are iterated over first.)\n */\n rforEach(fn, thisp = this) {\n for (const i of this.#rindexes()) {\n const v = this.#valList[i];\n const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;\n if (value === undefined)\n continue;\n fn.call(thisp, value, this.#keyList[i], this);\n }\n }\n /**\n * Delete any stale entries. Returns true if anything was removed,\n * false otherwise.\n */\n purgeStale() {\n let deleted = false;\n for (const i of this.#rindexes({ allowStale: true })) {\n if (this.#isStale(i)) {\n this.#delete(this.#keyList[i], 'expire');\n deleted = true;\n }\n }\n return deleted;\n }\n /**\n * Get the extended info about a given entry, to get its value, size, and\n * TTL info simultaneously. Returns `undefined` if the key is not present.\n *\n * Unlike {@link LRUCache#dump}, which is designed to be portable and survive\n * serialization, the `start` value is always the current timestamp, and the\n * `ttl` is a calculated remaining time to live (negative if expired).\n *\n * Always returns stale values, if their info is found in the cache, so be\n * sure to check for expirations (ie, a negative {@link LRUCache.Entry#ttl})\n * if relevant.\n */\n info(key) {\n const i = this.#keyMap.get(key);\n if (i === undefined)\n return undefined;\n const v = this.#valList[i];\n /* c8 ignore start - this isn't tested for the info function,\n * but it's the same logic as found in other places. */\n const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;\n if (value === undefined)\n return undefined;\n /* c8 ignore end */\n const entry = { value };\n if (this.#ttls && this.#starts) {\n const ttl = this.#ttls[i];\n const start = this.#starts[i];\n if (ttl && start) {\n const remain = ttl - (this.#perf.now() - start);\n entry.ttl = remain;\n entry.start = Date.now();\n }\n }\n if (this.#sizes) {\n entry.size = this.#sizes[i];\n }\n return entry;\n }\n /**\n * Return an array of [key, {@link LRUCache.Entry}] tuples which can be\n * passed to {@link LRUCache#load}.\n *\n * The `start` fields are calculated relative to a portable `Date.now()`\n * timestamp, even if `performance.now()` is available.\n *\n * Stale entries are always included in the `dump`, even if\n * {@link LRUCache.OptionsBase.allowStale} is false.\n *\n * Note: this returns an actual array, not a generator, so it can be more\n * easily passed around.\n */\n dump() {\n const arr = [];\n for (const i of this.#indexes({ allowStale: true })) {\n const key = this.#keyList[i];\n const v = this.#valList[i];\n const value = this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;\n if (value === undefined || key === undefined)\n continue;\n const entry = { value };\n if (this.#ttls && this.#starts) {\n entry.ttl = this.#ttls[i];\n // always dump the start relative to a portable timestamp\n // it's ok for this to be a bit slow, it's a rare operation.\n const age = this.#perf.now() - this.#starts[i];\n entry.start = Math.floor(Date.now() - age);\n }\n if (this.#sizes) {\n entry.size = this.#sizes[i];\n }\n arr.unshift([key, entry]);\n }\n return arr;\n }\n /**\n * Reset the cache and load in the items in entries in the order listed.\n *\n * The shape of the resulting cache may be different if the same options are\n * not used in both caches.\n *\n * The `start` fields are assumed to be calculated relative to a portable\n * `Date.now()` timestamp, even if `performance.now()` is available.\n */\n load(arr) {\n this.clear();\n for (const [key, entry] of arr) {\n if (entry.start) {\n // entry.start is a portable timestamp, but we may be using\n // node's performance.now(), so calculate the offset, so that\n // we get the intended remaining TTL, no matter how long it's\n // been on ice.\n //\n // it's ok for this to be a bit slow, it's a rare operation.\n const age = Date.now() - entry.start;\n entry.start = this.#perf.now() - age;\n }\n this.set(key, entry.value, entry);\n }\n }\n /**\n * Add a value to the cache.\n *\n * Note: if `undefined` is specified as a value, this is an alias for\n * {@link LRUCache#delete}\n *\n * Fields on the {@link LRUCache.SetOptions} options param will override\n * their corresponding values in the constructor options for the scope\n * of this single `set()` operation.\n *\n * If `start` is provided, then that will set the effective start\n * time for the TTL calculation. Note that this must be a previous\n * value of `performance.now()` if supported, or a previous value of\n * `Date.now()` if not.\n *\n * Options object may also include `size`, which will prevent\n * calling the `sizeCalculation` function and just use the specified\n * number if it is a positive integer, and `noDisposeOnSet` which\n * will prevent calling a `dispose` function in the case of\n * overwrites.\n *\n * If the `size` (or return value of `sizeCalculation`) for a given\n * entry is greater than `maxEntrySize`, then the item will not be\n * added to the cache.\n *\n * Will update the recency of the entry.\n *\n * If the value is `undefined`, then this is an alias for\n * `cache.delete(key)`. `undefined` is never stored in the cache.\n */\n set(k, v, setOptions = {}) {\n if (v === undefined) {\n this.delete(k);\n return this;\n }\n const { ttl = this.ttl, start, noDisposeOnSet = this.noDisposeOnSet, sizeCalculation = this.sizeCalculation, status, } = setOptions;\n let { noUpdateTTL = this.noUpdateTTL } = setOptions;\n const size = this.#requireSize(k, v, setOptions.size || 0, sizeCalculation);\n // if the item doesn't fit, don't do anything\n // NB: maxEntrySize set to maxSize by default\n if (this.maxEntrySize && size > this.maxEntrySize) {\n if (status) {\n status.set = 'miss';\n status.maxEntrySizeExceeded = true;\n }\n // have to delete, in case something is there already.\n this.#delete(k, 'set');\n return this;\n }\n let index = this.#size === 0 ? undefined : this.#keyMap.get(k);\n if (index === undefined) {\n // addition\n index = (this.#size === 0 ? this.#tail\n : this.#free.length !== 0 ? this.#free.pop()\n : this.#size === this.#max ? this.#evict(false)\n : this.#size);\n this.#keyList[index] = k;\n this.#valList[index] = v;\n this.#keyMap.set(k, index);\n this.#next[this.#tail] = index;\n this.#prev[index] = this.#tail;\n this.#tail = index;\n this.#size++;\n this.#addItemSize(index, size, status);\n if (status)\n status.set = 'add';\n noUpdateTTL = false;\n if (this.#hasOnInsert) {\n this.#onInsert?.(v, k, 'add');\n }\n }\n else {\n // update\n this.#moveToTail(index);\n const oldVal = this.#valList[index];\n if (v !== oldVal) {\n if (this.#hasFetchMethod && this.#isBackgroundFetch(oldVal)) {\n oldVal.__abortController.abort(new Error('replaced'));\n const { __staleWhileFetching: s } = oldVal;\n if (s !== undefined && !noDisposeOnSet) {\n if (this.#hasDispose) {\n this.#dispose?.(s, k, 'set');\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([s, k, 'set']);\n }\n }\n }\n else if (!noDisposeOnSet) {\n if (this.#hasDispose) {\n this.#dispose?.(oldVal, k, 'set');\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([oldVal, k, 'set']);\n }\n }\n this.#removeItemSize(index);\n this.#addItemSize(index, size, status);\n this.#valList[index] = v;\n if (status) {\n status.set = 'replace';\n const oldValue = oldVal && this.#isBackgroundFetch(oldVal) ?\n oldVal.__staleWhileFetching\n : oldVal;\n if (oldValue !== undefined)\n status.oldValue = oldValue;\n }\n }\n else if (status) {\n status.set = 'update';\n }\n if (this.#hasOnInsert) {\n this.onInsert?.(v, k, v === oldVal ? 'update' : 'replace');\n }\n }\n if (ttl !== 0 && !this.#ttls) {\n this.#initializeTTLTracking();\n }\n if (this.#ttls) {\n if (!noUpdateTTL) {\n this.#setItemTTL(index, ttl, start);\n }\n if (status)\n this.#statusTTL(status, index);\n }\n if (!noDisposeOnSet && this.#hasDisposeAfter && this.#disposed) {\n const dt = this.#disposed;\n let task;\n while ((task = dt?.shift())) {\n this.#disposeAfter?.(...task);\n }\n }\n return this;\n }\n /**\n * Evict the least recently used item, returning its value or\n * `undefined` if cache is empty.\n */\n pop() {\n try {\n while (this.#size) {\n const val = this.#valList[this.#head];\n this.#evict(true);\n if (this.#isBackgroundFetch(val)) {\n if (val.__staleWhileFetching) {\n return val.__staleWhileFetching;\n }\n }\n else if (val !== undefined) {\n return val;\n }\n }\n }\n finally {\n if (this.#hasDisposeAfter && this.#disposed) {\n const dt = this.#disposed;\n let task;\n while ((task = dt?.shift())) {\n this.#disposeAfter?.(...task);\n }\n }\n }\n }\n #evict(free) {\n const head = this.#head;\n const k = this.#keyList[head];\n const v = this.#valList[head];\n if (this.#hasFetchMethod && this.#isBackgroundFetch(v)) {\n v.__abortController.abort(new Error('evicted'));\n }\n else if (this.#hasDispose || this.#hasDisposeAfter) {\n if (this.#hasDispose) {\n this.#dispose?.(v, k, 'evict');\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([v, k, 'evict']);\n }\n }\n this.#removeItemSize(head);\n if (this.#autopurgeTimers?.[head]) {\n clearTimeout(this.#autopurgeTimers[head]);\n this.#autopurgeTimers[head] = undefined;\n }\n // if we aren't about to use the index, then null these out\n if (free) {\n this.#keyList[head] = undefined;\n this.#valList[head] = undefined;\n this.#free.push(head);\n }\n if (this.#size === 1) {\n this.#head = this.#tail = 0;\n this.#free.length = 0;\n }\n else {\n this.#head = this.#next[head];\n }\n this.#keyMap.delete(k);\n this.#size--;\n return head;\n }\n /**\n * Check if a key is in the cache, without updating the recency of use.\n * Will return false if the item is stale, even though it is technically\n * in the cache.\n *\n * Check if a key is in the cache, without updating the recency of\n * use. Age is updated if {@link LRUCache.OptionsBase.updateAgeOnHas} is set\n * to `true` in either the options or the constructor.\n *\n * Will return `false` if the item is stale, even though it is technically in\n * the cache. The difference can be determined (if it matters) by using a\n * `status` argument, and inspecting the `has` field.\n *\n * Will not update item age unless\n * {@link LRUCache.OptionsBase.updateAgeOnHas} is set.\n */\n has(k, hasOptions = {}) {\n const { updateAgeOnHas = this.updateAgeOnHas, status } = hasOptions;\n const index = this.#keyMap.get(k);\n if (index !== undefined) {\n const v = this.#valList[index];\n if (this.#isBackgroundFetch(v) &&\n v.__staleWhileFetching === undefined) {\n return false;\n }\n if (!this.#isStale(index)) {\n if (updateAgeOnHas) {\n this.#updateItemAge(index);\n }\n if (status) {\n status.has = 'hit';\n this.#statusTTL(status, index);\n }\n return true;\n }\n else if (status) {\n status.has = 'stale';\n this.#statusTTL(status, index);\n }\n }\n else if (status) {\n status.has = 'miss';\n }\n return false;\n }\n /**\n * Like {@link LRUCache#get} but doesn't update recency or delete stale\n * items.\n *\n * Returns `undefined` if the item is stale, unless\n * {@link LRUCache.OptionsBase.allowStale} is set.\n */\n peek(k, peekOptions = {}) {\n const { allowStale = this.allowStale } = peekOptions;\n const index = this.#keyMap.get(k);\n if (index === undefined || (!allowStale && this.#isStale(index))) {\n return;\n }\n const v = this.#valList[index];\n // either stale and allowed, or forcing a refresh of non-stale value\n return this.#isBackgroundFetch(v) ? v.__staleWhileFetching : v;\n }\n #backgroundFetch(k, index, options, context) {\n const v = index === undefined ? undefined : this.#valList[index];\n if (this.#isBackgroundFetch(v)) {\n return v;\n }\n const ac = new AC();\n const { signal } = options;\n // when/if our AC signals, then stop listening to theirs.\n signal?.addEventListener('abort', () => ac.abort(signal.reason), {\n signal: ac.signal,\n });\n const fetchOpts = {\n signal: ac.signal,\n options,\n context,\n };\n const cb = (v, updateCache = false) => {\n const { aborted } = ac.signal;\n const ignoreAbort = options.ignoreFetchAbort && v !== undefined;\n const proceed = options.ignoreFetchAbort ||\n !!(options.allowStaleOnFetchAbort && v !== undefined);\n if (options.status) {\n if (aborted && !updateCache) {\n options.status.fetchAborted = true;\n options.status.fetchError = ac.signal.reason;\n if (ignoreAbort)\n options.status.fetchAbortIgnored = true;\n }\n else {\n options.status.fetchResolved = true;\n }\n }\n if (aborted && !ignoreAbort && !updateCache) {\n return fetchFail(ac.signal.reason, proceed);\n }\n // either we didn't abort, and are still here, or we did, and ignored\n const bf = p;\n // if nothing else has been written there but we're set to update the\n // cache and ignore the abort, or if it's still pending on this specific\n // background request, then write it to the cache.\n const vl = this.#valList[index];\n if (vl === p || (ignoreAbort && updateCache && vl === undefined)) {\n if (v === undefined) {\n if (bf.__staleWhileFetching !== undefined) {\n this.#valList[index] = bf.__staleWhileFetching;\n }\n else {\n this.#delete(k, 'fetch');\n }\n }\n else {\n if (options.status)\n options.status.fetchUpdated = true;\n this.set(k, v, fetchOpts.options);\n }\n }\n return v;\n };\n const eb = (er) => {\n if (options.status) {\n options.status.fetchRejected = true;\n options.status.fetchError = er;\n }\n // do not pass go, do not collect $200\n return fetchFail(er, false);\n };\n const fetchFail = (er, proceed) => {\n const { aborted } = ac.signal;\n const allowStaleAborted = aborted && options.allowStaleOnFetchAbort;\n const allowStale = allowStaleAborted || options.allowStaleOnFetchRejection;\n const noDelete = allowStale || options.noDeleteOnFetchRejection;\n const bf = p;\n if (this.#valList[index] === p) {\n // if we allow stale on fetch rejections, then we need to ensure that\n // the stale value is not removed from the cache when the fetch fails.\n const del = !noDelete ||\n !proceed && bf.__staleWhileFetching === undefined;\n if (del) {\n this.#delete(k, 'fetch');\n }\n else if (!allowStaleAborted) {\n // still replace the *promise* with the stale value,\n // since we are done with the promise at this point.\n // leave it untouched if we're still waiting for an\n // aborted background fetch that hasn't yet returned.\n this.#valList[index] = bf.__staleWhileFetching;\n }\n }\n if (allowStale) {\n if (options.status && bf.__staleWhileFetching !== undefined) {\n options.status.returnedStale = true;\n }\n return bf.__staleWhileFetching;\n }\n else if (bf.__returned === bf) {\n throw er;\n }\n };\n const pcall = (res, rej) => {\n const fmp = this.#fetchMethod?.(k, v, fetchOpts);\n if (fmp && fmp instanceof Promise) {\n fmp.then(v => res(v === undefined ? undefined : v), rej);\n }\n // ignored, we go until we finish, regardless.\n // defer check until we are actually aborting,\n // so fetchMethod can override.\n ac.signal.addEventListener('abort', () => {\n if (!options.ignoreFetchAbort || options.allowStaleOnFetchAbort) {\n res(undefined);\n // when it eventually resolves, update the cache.\n if (options.allowStaleOnFetchAbort) {\n res = v => cb(v, true);\n }\n }\n });\n };\n if (options.status)\n options.status.fetchDispatched = true;\n const p = new Promise(pcall).then(cb, eb);\n const bf = Object.assign(p, {\n __abortController: ac,\n __staleWhileFetching: v,\n __returned: undefined,\n });\n if (index === undefined) {\n // internal, don't expose status.\n this.set(k, bf, { ...fetchOpts.options, status: undefined });\n index = this.#keyMap.get(k);\n }\n else {\n this.#valList[index] = bf;\n }\n return bf;\n }\n #isBackgroundFetch(p) {\n if (!this.#hasFetchMethod)\n return false;\n const b = p;\n return (!!b &&\n b instanceof Promise &&\n b.hasOwnProperty('__staleWhileFetching') &&\n b.__abortController instanceof AC);\n }\n async fetch(k, fetchOptions = {}) {\n const { \n // get options\n allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet, \n // set options\n ttl = this.ttl, noDisposeOnSet = this.noDisposeOnSet, size = 0, sizeCalculation = this.sizeCalculation, noUpdateTTL = this.noUpdateTTL, \n // fetch exclusive options\n noDeleteOnFetchRejection = this.noDeleteOnFetchRejection, allowStaleOnFetchRejection = this.allowStaleOnFetchRejection, ignoreFetchAbort = this.ignoreFetchAbort, allowStaleOnFetchAbort = this.allowStaleOnFetchAbort, context, forceRefresh = false, status, signal, } = fetchOptions;\n if (!this.#hasFetchMethod) {\n if (status)\n status.fetch = 'get';\n return this.get(k, {\n allowStale,\n updateAgeOnGet,\n noDeleteOnStaleGet,\n status,\n });\n }\n const options = {\n allowStale,\n updateAgeOnGet,\n noDeleteOnStaleGet,\n ttl,\n noDisposeOnSet,\n size,\n sizeCalculation,\n noUpdateTTL,\n noDeleteOnFetchRejection,\n allowStaleOnFetchRejection,\n allowStaleOnFetchAbort,\n ignoreFetchAbort,\n status,\n signal,\n };\n let index = this.#keyMap.get(k);\n if (index === undefined) {\n if (status)\n status.fetch = 'miss';\n const p = this.#backgroundFetch(k, index, options, context);\n return (p.__returned = p);\n }\n else {\n // in cache, maybe already fetching\n const v = this.#valList[index];\n if (this.#isBackgroundFetch(v)) {\n const stale = allowStale && v.__staleWhileFetching !== undefined;\n if (status) {\n status.fetch = 'inflight';\n if (stale)\n status.returnedStale = true;\n }\n return stale ? v.__staleWhileFetching : (v.__returned = v);\n }\n // if we force a refresh, that means do NOT serve the cached value,\n // unless we are already in the process of refreshing the cache.\n const isStale = this.#isStale(index);\n if (!forceRefresh && !isStale) {\n if (status)\n status.fetch = 'hit';\n this.#moveToTail(index);\n if (updateAgeOnGet) {\n this.#updateItemAge(index);\n }\n if (status)\n this.#statusTTL(status, index);\n return v;\n }\n // ok, it is stale or a forced refresh, and not already fetching.\n // refresh the cache.\n const p = this.#backgroundFetch(k, index, options, context);\n const hasStale = p.__staleWhileFetching !== undefined;\n const staleVal = hasStale && allowStale;\n if (status) {\n status.fetch = isStale ? 'stale' : 'refresh';\n if (staleVal && isStale)\n status.returnedStale = true;\n }\n return staleVal ? p.__staleWhileFetching : (p.__returned = p);\n }\n }\n async forceFetch(k, fetchOptions = {}) {\n const v = await this.fetch(k, fetchOptions);\n if (v === undefined)\n throw new Error('fetch() returned undefined');\n return v;\n }\n memo(k, memoOptions = {}) {\n const memoMethod = this.#memoMethod;\n if (!memoMethod) {\n throw new Error('no memoMethod provided to constructor');\n }\n const { context, forceRefresh, ...options } = memoOptions;\n const v = this.get(k, options);\n if (!forceRefresh && v !== undefined)\n return v;\n const vv = memoMethod(k, v, {\n options,\n context,\n });\n this.set(k, vv, options);\n return vv;\n }\n /**\n * Return a value from the cache. Will update the recency of the cache\n * entry found.\n *\n * If the key is not found, get() will return `undefined`.\n */\n get(k, getOptions = {}) {\n const { allowStale = this.allowStale, updateAgeOnGet = this.updateAgeOnGet, noDeleteOnStaleGet = this.noDeleteOnStaleGet, status, } = getOptions;\n const index = this.#keyMap.get(k);\n if (index !== undefined) {\n const value = this.#valList[index];\n const fetching = this.#isBackgroundFetch(value);\n if (status)\n this.#statusTTL(status, index);\n if (this.#isStale(index)) {\n if (status)\n status.get = 'stale';\n // delete only if not an in-flight background fetch\n if (!fetching) {\n if (!noDeleteOnStaleGet) {\n this.#delete(k, 'expire');\n }\n if (status && allowStale)\n status.returnedStale = true;\n return allowStale ? value : undefined;\n }\n else {\n if (status &&\n allowStale &&\n value.__staleWhileFetching !== undefined) {\n status.returnedStale = true;\n }\n return allowStale ? value.__staleWhileFetching : undefined;\n }\n }\n else {\n if (status)\n status.get = 'hit';\n // if we're currently fetching it, we don't actually have it yet\n // it's not stale, which means this isn't a staleWhileRefetching.\n // If it's not stale, and fetching, AND has a __staleWhileFetching\n // value, then that means the user fetched with {forceRefresh:true},\n // so it's safe to return that value.\n if (fetching) {\n return value.__staleWhileFetching;\n }\n this.#moveToTail(index);\n if (updateAgeOnGet) {\n this.#updateItemAge(index);\n }\n return value;\n }\n }\n else if (status) {\n status.get = 'miss';\n }\n }\n #connect(p, n) {\n this.#prev[n] = p;\n this.#next[p] = n;\n }\n #moveToTail(index) {\n // if tail already, nothing to do\n // if head, move head to next[index]\n // else\n // move next[prev[index]] to next[index] (head has no prev)\n // move prev[next[index]] to prev[index]\n // prev[index] = tail\n // next[tail] = index\n // tail = index\n if (index !== this.#tail) {\n if (index === this.#head) {\n this.#head = this.#next[index];\n }\n else {\n this.#connect(this.#prev[index], this.#next[index]);\n }\n this.#connect(this.#tail, index);\n this.#tail = index;\n }\n }\n /**\n * Deletes a key out of the cache.\n *\n * Returns true if the key was deleted, false otherwise.\n */\n delete(k) {\n return this.#delete(k, 'delete');\n }\n #delete(k, reason) {\n let deleted = false;\n if (this.#size !== 0) {\n const index = this.#keyMap.get(k);\n if (index !== undefined) {\n if (this.#autopurgeTimers?.[index]) {\n clearTimeout(this.#autopurgeTimers?.[index]);\n this.#autopurgeTimers[index] = undefined;\n }\n deleted = true;\n if (this.#size === 1) {\n this.#clear(reason);\n }\n else {\n this.#removeItemSize(index);\n const v = this.#valList[index];\n if (this.#isBackgroundFetch(v)) {\n v.__abortController.abort(new Error('deleted'));\n }\n else if (this.#hasDispose || this.#hasDisposeAfter) {\n if (this.#hasDispose) {\n this.#dispose?.(v, k, reason);\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([v, k, reason]);\n }\n }\n this.#keyMap.delete(k);\n this.#keyList[index] = undefined;\n this.#valList[index] = undefined;\n if (index === this.#tail) {\n this.#tail = this.#prev[index];\n }\n else if (index === this.#head) {\n this.#head = this.#next[index];\n }\n else {\n const pi = this.#prev[index];\n this.#next[pi] = this.#next[index];\n const ni = this.#next[index];\n this.#prev[ni] = this.#prev[index];\n }\n this.#size--;\n this.#free.push(index);\n }\n }\n }\n if (this.#hasDisposeAfter && this.#disposed?.length) {\n const dt = this.#disposed;\n let task;\n while ((task = dt?.shift())) {\n this.#disposeAfter?.(...task);\n }\n }\n return deleted;\n }\n /**\n * Clear the cache entirely, throwing away all values.\n */\n clear() {\n return this.#clear('delete');\n }\n #clear(reason) {\n for (const index of this.#rindexes({ allowStale: true })) {\n const v = this.#valList[index];\n if (this.#isBackgroundFetch(v)) {\n v.__abortController.abort(new Error('deleted'));\n }\n else {\n const k = this.#keyList[index];\n if (this.#hasDispose) {\n this.#dispose?.(v, k, reason);\n }\n if (this.#hasDisposeAfter) {\n this.#disposed?.push([v, k, reason]);\n }\n }\n }\n this.#keyMap.clear();\n this.#valList.fill(undefined);\n this.#keyList.fill(undefined);\n if (this.#ttls && this.#starts) {\n this.#ttls.fill(0);\n this.#starts.fill(0);\n for (const t of this.#autopurgeTimers ?? []) {\n if (t !== undefined)\n clearTimeout(t);\n }\n this.#autopurgeTimers?.fill(undefined);\n }\n if (this.#sizes) {\n this.#sizes.fill(0);\n }\n this.#head = 0;\n this.#tail = 0;\n this.#free.length = 0;\n this.#calculatedSize = 0;\n this.#size = 0;\n if (this.#hasDisposeAfter && this.#disposed) {\n const dt = this.#disposed;\n let task;\n while ((task = dt?.shift())) {\n this.#disposeAfter?.(...task);\n }\n }\n }\n}\n//# sourceMappingURL=index.js.map","/**\n * common\n */\n\n/* numeric constants */\nconst TYPE_FROM = 8;\nconst TYPE_TO = -1;\n\n/**\n * get type\n * @param o - object to check\n * @returns type of object\n */\nexport const getType = (o: unknown): string =>\n Object.prototype.toString.call(o).slice(TYPE_FROM, TYPE_TO);\n\n/**\n * is string\n * @param o - object to check\n * @returns result\n */\nexport const isString = (o: unknown): o is string =>\n typeof o === 'string' || o instanceof String;\n\n/**\n * is string or number\n * @param o - object to check\n * @returns result\n */\nexport const isStringOrNumber = (o: unknown): boolean =>\n isString(o) || typeof o === 'number';\n","/**\n * constant\n */\n\n/* values and units */\nconst _DIGIT = '(?:0|[1-9]\\\\d*)';\nconst _COMPARE = 'clamp|max|min';\nconst _EXPO = 'exp|hypot|log|pow|sqrt';\nconst _SIGN = 'abs|sign';\nconst _STEP = 'mod|rem|round';\nconst _TRIG = 'a?(?:cos|sin|tan)|atan2';\nconst _MATH = `${_COMPARE}|${_EXPO}|${_SIGN}|${_STEP}|${_TRIG}`;\nconst _CALC = `calc|${_MATH}`;\nconst _VAR = `var|${_CALC}`;\nexport const ANGLE = 'deg|g?rad|turn';\nexport const LENGTH =\n '[cm]m|[dls]?v(?:[bhiw]|max|min)|in|p[ctx]|q|r?(?:[cl]h|cap|e[mx]|ic)';\nexport const NUM = `[+-]?(?:${_DIGIT}(?:\\\\.\\\\d*)?|\\\\.\\\\d+)(?:e-?${_DIGIT})?`;\nexport const NUM_POSITIVE = `\\\\+?(?:${_DIGIT}(?:\\\\.\\\\d*)?|\\\\.\\\\d+)(?:e-?${_DIGIT})?`;\nexport const NONE = 'none';\nexport const PCT = `${NUM}%`;\nexport const SYN_FN_CALC = `^(?:${_CALC})\\\\(|(?<=[*\\\\/\\\\s\\\\(])(?:${_CALC})\\\\(`;\nexport const SYN_FN_MATH_START = `^(?:${_MATH})\\\\($`;\nexport const SYN_FN_VAR = '^var\\\\(|(?<=[*\\\\/\\\\s\\\\(])var\\\\(';\nexport const SYN_FN_VAR_START = `^(?:${_VAR})\\\\(`;\n\n/* colors */\nconst _ALPHA = `(?:\\\\s*\\\\/\\\\s*(?:${NUM}|${PCT}|${NONE}))?`;\nconst _ALPHA_LV3 = `(?:\\\\s*,\\\\s*(?:${NUM}|${PCT}))?`;\nconst _COLOR_FUNC = '(?:ok)?l(?:ab|ch)|color|hsla?|hwb|rgba?';\nconst _COLOR_KEY = '[a-z]+|#[\\\\da-f]{3}|#[\\\\da-f]{4}|#[\\\\da-f]{6}|#[\\\\da-f]{8}';\nconst _CS_HUE = '(?:ok)?lch|hsl|hwb';\nconst _CS_HUE_ARC = '(?:de|in)creasing|longer|shorter';\nconst _NUM_ANGLE = `${NUM}(?:${ANGLE})?`;\nconst _NUM_ANGLE_NONE = `(?:${NUM}(?:${ANGLE})?|${NONE})`;\nconst _NUM_PCT_NONE = `(?:${NUM}|${PCT}|${NONE})`;\nexport const CS_HUE = `(?:${_CS_HUE})(?:\\\\s(?:${_CS_HUE_ARC})\\\\shue)?`;\nexport const CS_HUE_CAPT = `(${_CS_HUE})(?:\\\\s(${_CS_HUE_ARC})\\\\shue)?`;\nexport const CS_LAB = '(?:ok)?lab';\nexport const CS_LCH = '(?:ok)?lch';\nexport const CS_SRGB = 'srgb(?:-linear)?';\nexport const CS_RGB = `(?:a98|prophoto)-rgb|display-p3|rec2020|${CS_SRGB}`;\nexport const CS_XYZ = 'xyz(?:-d(?:50|65))?';\nexport const CS_RECT = `${CS_LAB}|${CS_RGB}|${CS_XYZ}`;\nexport const CS_MIX = `${CS_HUE}|${CS_RECT}`;\nexport const FN_COLOR = 'color(';\nexport const FN_LIGHT_DARK = 'light-dark(';\nexport const FN_MIX = 'color-mix(';\nexport const FN_REL = `(?:${_COLOR_FUNC})\\\\(\\\\s*from\\\\s+`;\nexport const FN_REL_CAPT = `(${_COLOR_FUNC})\\\\(\\\\s*from\\\\s+`;\nexport const FN_VAR = 'var(';\nexport const SYN_FN_COLOR = `(?:${CS_RGB}|${CS_XYZ})(?:\\\\s+${_NUM_PCT_NONE}){3}${_ALPHA}`;\nexport const SYN_FN_LIGHT_DARK = '^light-dark\\\\(';\nexport const SYN_FN_REL = `^${FN_REL}|(?<=[\\\\s])${FN_REL}`;\nexport const SYN_HSL = `${_NUM_ANGLE_NONE}(?:\\\\s+${_NUM_PCT_NONE}){2}${_ALPHA}`;\nexport const SYN_HSL_LV3 = `${_NUM_ANGLE}(?:\\\\s*,\\\\s*${PCT}){2}${_ALPHA_LV3}`;\nexport const SYN_LCH = `(?:${_NUM_PCT_NONE}\\\\s+){2}${_NUM_ANGLE_NONE}${_ALPHA}`;\nexport const SYN_MOD = `${_NUM_PCT_NONE}(?:\\\\s+${_NUM_PCT_NONE}){2}${_ALPHA}`;\nexport const SYN_RGB_LV3 = `(?:${NUM}(?:\\\\s*,\\\\s*${NUM}){2}|${PCT}(?:\\\\s*,\\\\s*${PCT}){2})${_ALPHA_LV3}`;\nexport const SYN_COLOR_TYPE = `${_COLOR_KEY}|hsla?\\\\(\\\\s*${SYN_HSL_LV3}\\\\s*\\\\)|rgba?\\\\(\\\\s*${SYN_RGB_LV3}\\\\s*\\\\)|(?:hsla?|hwb)\\\\(\\\\s*${SYN_HSL}\\\\s*\\\\)|(?:(?:ok)?lab|rgba?)\\\\(\\\\s*${SYN_MOD}\\\\s*\\\\)|(?:ok)?lch\\\\(\\\\s*${SYN_LCH}\\\\s*\\\\)|color\\\\(\\\\s*${SYN_FN_COLOR}\\\\s*\\\\)`;\nexport const SYN_MIX_PART = `(?:${SYN_COLOR_TYPE})(?:\\\\s+${PCT})?`;\nexport const SYN_MIX = `color-mix\\\\(\\\\s*in\\\\s+(?:${CS_MIX})\\\\s*,\\\\s*${SYN_MIX_PART}\\\\s*,\\\\s*${SYN_MIX_PART}\\\\s*\\\\)`;\nexport const SYN_MIX_CAPT = `color-mix\\\\(\\\\s*in\\\\s+(${CS_MIX})\\\\s*,\\\\s*(${SYN_MIX_PART})\\\\s*,\\\\s*(${SYN_MIX_PART})\\\\s*\\\\)`;\n\n/* formats */\nexport const VAL_COMP = 'computedValue';\nexport const VAL_MIX = 'mixValue';\nexport const VAL_SPEC = 'specifiedValue';\n","/**\n * color\n *\n * Ref: CSS Color Module Level 4\n * Sample code for Color Conversions\n * https://w3c.github.io/csswg-drafts/css-color-4/#color-conversion-code\n */\n\nimport {\n CacheItem,\n NullObject,\n createCacheKey,\n getCache,\n setCache\n} from './cache';\nimport { isString } from './common';\nimport { resolveColor } from './resolve';\nimport { interpolateHue, roundToPrecision, splitValue } from './util';\nimport {\n ColorChannels,\n ComputedColorChannels,\n Options,\n MatchedRegExp,\n SpecifiedColorChannels,\n StringColorChannels,\n StringColorSpacedChannels\n} from './typedef';\n\n/* constants */\nimport {\n ANGLE,\n CS_HUE_CAPT,\n CS_MIX,\n CS_RGB,\n CS_XYZ,\n FN_COLOR,\n FN_LIGHT_DARK,\n FN_MIX,\n NONE,\n NUM,\n PCT,\n SYN_COLOR_TYPE,\n SYN_FN_COLOR,\n SYN_HSL,\n SYN_HSL_LV3,\n SYN_LCH,\n SYN_MIX,\n SYN_MIX_CAPT,\n SYN_MIX_PART,\n SYN_MOD,\n SYN_RGB_LV3,\n VAL_COMP,\n VAL_MIX,\n VAL_SPEC\n} from './constant';\nconst NAMESPACE = 'color';\n\n/* numeric constants */\nconst PPTH = 0.001;\nconst HALF = 0.5;\nconst DUO = 2;\nconst TRIA = 3;\nconst QUAD = 4;\nconst OCT = 8;\nconst DEC = 10;\nconst DOZ = 12;\nconst HEX = 16;\nconst SEXA = 60;\nconst DEG_HALF = 180;\nconst DEG = 360;\nconst MAX_PCT = 100;\nconst MAX_RGB = 255;\nconst POW_SQR = 2;\nconst POW_CUBE = 3;\nconst POW_LINEAR = 2.4;\nconst LINEAR_COEF = 12.92;\nconst LINEAR_OFFSET = 0.055;\nconst LAB_L = 116;\nconst LAB_A = 500;\nconst LAB_B = 200;\nconst LAB_EPSILON = 216 / 24389;\nconst LAB_KAPPA = 24389 / 27;\n\n/* type definitions */\n/**\n * @type NumStrColorChannels - string or numeric color channels\n */\ntype NumStrColorChannels = [\n x: number | string,\n y: number | string,\n z: number | string,\n alpha: number | string\n];\n\n/**\n * @type TriColorChannels - color channels without alpha\n */\ntype TriColorChannels = [x: number, y: number, z: number];\n\n/**\n * @type ColorMatrix - color matrix\n */\ntype ColorMatrix = [\n r1: TriColorChannels,\n r2: TriColorChannels,\n r3: TriColorChannels\n];\n\n/* white point */\nconst D50: TriColorChannels = [\n 0.3457 / 0.3585,\n 1.0,\n (1.0 - 0.3457 - 0.3585) / 0.3585\n];\nconst MATRIX_D50_TO_D65: ColorMatrix = [\n [0.955473421488075, -0.02309845494876471, 0.06325924320057072],\n [-0.0283697093338637, 1.0099953980813041, 0.021041441191917323],\n [0.012314014864481998, -0.020507649298898964, 1.330365926242124]\n];\nconst MATRIX_D65_TO_D50: ColorMatrix = [\n [1.0479297925449969, 0.022946870601609652, -0.05019226628920524],\n [0.02962780877005599, 0.9904344267538799, -0.017073799063418826],\n [-0.009243040646204504, 0.015055191490298152, 0.7518742814281371]\n];\n\n/* color space */\nconst MATRIX_L_RGB_TO_XYZ: ColorMatrix = [\n [506752 / 1228815, 87881 / 245763, 12673 / 70218],\n [87098 / 409605, 175762 / 245763, 12673 / 175545],\n [7918 / 409605, 87881 / 737289, 1001167 / 1053270]\n];\nconst MATRIX_XYZ_TO_L_RGB: ColorMatrix = [\n [12831 / 3959, -329 / 214, -1974 / 3959],\n [-851781 / 878810, 1648619 / 878810, 36519 / 878810],\n [705 / 12673, -2585 / 12673, 705 / 667]\n];\nconst MATRIX_XYZ_TO_LMS: ColorMatrix = [\n [0.819022437996703, 0.3619062600528904, -0.1288737815209879],\n [0.0329836539323885, 0.9292868615863434, 0.0361446663506424],\n [0.0481771893596242, 0.2642395317527308, 0.6335478284694309]\n];\nconst MATRIX_LMS_TO_XYZ: ColorMatrix = [\n [1.2268798758459243, -0.5578149944602171, 0.2813910456659647],\n [-0.0405757452148008, 1.112286803280317, -0.0717110580655164],\n [-0.0763729366746601, -0.4214933324022432, 1.5869240198367816]\n];\nconst MATRIX_OKLAB_TO_LMS: ColorMatrix = [\n [1.0, 0.3963377773761749, 0.2158037573099136],\n [1.0, -0.1055613458156586, -0.0638541728258133],\n [1.0, -0.0894841775298119, -1.2914855480194092]\n];\nconst MATRIX_LMS_TO_OKLAB: ColorMatrix = [\n [0.210454268309314, 0.7936177747023054, -0.0040720430116193],\n [1.9779985324311684, -2.4285922420485799, 0.450593709617411],\n [0.0259040424655478, 0.7827717124575296, -0.8086757549230774]\n];\nconst MATRIX_P3_TO_XYZ: ColorMatrix = [\n [608311 / 1250200, 189793 / 714400, 198249 / 1000160],\n [35783 / 156275, 247089 / 357200, 198249 / 2500400],\n [0 / 1, 32229 / 714400, 5220557 / 5000800]\n];\nconst MATRIX_REC2020_TO_XYZ: ColorMatrix = [\n [63426534 / 99577255, 20160776 / 139408157, 47086771 / 278816314],\n [26158966 / 99577255, 472592308 / 697040785, 8267143 / 139408157],\n [0 / 1, 19567812 / 697040785, 295819943 / 278816314]\n];\nconst MATRIX_A98_TO_XYZ: ColorMatrix = [\n [573536 / 994567, 263643 / 1420810, 187206 / 994567],\n [591459 / 1989134, 6239551 / 9945670, 374412 / 4972835],\n [53769 / 1989134, 351524 / 4972835, 4929758 / 4972835]\n];\nconst MATRIX_PROPHOTO_TO_XYZ_D50: ColorMatrix = [\n [0.7977666449006423, 0.13518129740053308, 0.0313477341283922],\n [0.2880748288194013, 0.711835234241873, 0.00008993693872564],\n [0.0, 0.0, 0.8251046025104602]\n];\n\n/* regexp */\nconst REG_COLOR = new RegExp(`^(?:${SYN_COLOR_TYPE})$`);\nconst REG_CS_HUE = new RegExp(`^${CS_HUE_CAPT}$`);\nconst REG_CS_XYZ = /^xyz(?:-d(?:50|65))?$/;\nconst REG_CURRENT = /^currentColor$/i;\nconst REG_FN_COLOR = new RegExp(`^color\\\\(\\\\s*(${SYN_FN_COLOR})\\\\s*\\\\)$`);\nconst REG_HSL = new RegExp(`^hsla?\\\\(\\\\s*(${SYN_HSL}|${SYN_HSL_LV3})\\\\s*\\\\)$`);\nconst REG_HWB = new RegExp(`^hwb\\\\(\\\\s*(${SYN_HSL})\\\\s*\\\\)$`);\nconst REG_LAB = new RegExp(`^lab\\\\(\\\\s*(${SYN_MOD})\\\\s*\\\\)$`);\nconst REG_LCH = new RegExp(`^lch\\\\(\\\\s*(${SYN_LCH})\\\\s*\\\\)$`);\nconst REG_MIX = new RegExp(`^${SYN_MIX}$`);\nconst REG_MIX_CAPT = new RegExp(`^${SYN_MIX_CAPT}$`);\nconst REG_MIX_NEST = new RegExp(`${SYN_MIX}`, 'g');\nconst REG_OKLAB = new RegExp(`^oklab\\\\(\\\\s*(${SYN_MOD})\\\\s*\\\\)$`);\nconst REG_OKLCH = new RegExp(`^oklch\\\\(\\\\s*(${SYN_LCH})\\\\s*\\\\)$`);\nconst REG_SPEC = /^(?:specifi|comput)edValue$/;\n\n/**\n * named colors\n */\nexport const NAMED_COLORS = {\n aliceblue: [0xf0, 0xf8, 0xff],\n antiquewhite: [0xfa, 0xeb, 0xd7],\n aqua: [0x00, 0xff, 0xff],\n aquamarine: [0x7f, 0xff, 0xd4],\n azure: [0xf0, 0xff, 0xff],\n beige: [0xf5, 0xf5, 0xdc],\n bisque: [0xff, 0xe4, 0xc4],\n black: [0x00, 0x00, 0x00],\n blanchedalmond: [0xff, 0xeb, 0xcd],\n blue: [0x00, 0x00, 0xff],\n blueviolet: [0x8a, 0x2b, 0xe2],\n brown: [0xa5, 0x2a, 0x2a],\n burlywood: [0xde, 0xb8, 0x87],\n cadetblue: [0x5f, 0x9e, 0xa0],\n chartreuse: [0x7f, 0xff, 0x00],\n chocolate: [0xd2, 0x69, 0x1e],\n coral: [0xff, 0x7f, 0x50],\n cornflowerblue: [0x64, 0x95, 0xed],\n cornsilk: [0xff, 0xf8, 0xdc],\n crimson: [0xdc, 0x14, 0x3c],\n cyan: [0x00, 0xff, 0xff],\n darkblue: [0x00, 0x00, 0x8b],\n darkcyan: [0x00, 0x8b, 0x8b],\n darkgoldenrod: [0xb8, 0x86, 0x0b],\n darkgray: [0xa9, 0xa9, 0xa9],\n darkgreen: [0x00, 0x64, 0x00],\n darkgrey: [0xa9, 0xa9, 0xa9],\n darkkhaki: [0xbd, 0xb7, 0x6b],\n darkmagenta: [0x8b, 0x00, 0x8b],\n darkolivegreen: [0x55, 0x6b, 0x2f],\n darkorange: [0xff, 0x8c, 0x00],\n darkorchid: [0x99, 0x32, 0xcc],\n darkred: [0x8b, 0x00, 0x00],\n darksalmon: [0xe9, 0x96, 0x7a],\n darkseagreen: [0x8f, 0xbc, 0x8f],\n darkslateblue: [0x48, 0x3d, 0x8b],\n darkslategray: [0x2f, 0x4f, 0x4f],\n darkslategrey: [0x2f, 0x4f, 0x4f],\n darkturquoise: [0x00, 0xce, 0xd1],\n darkviolet: [0x94, 0x00, 0xd3],\n deeppink: [0xff, 0x14, 0x93],\n deepskyblue: [0x00, 0xbf, 0xff],\n dimgray: [0x69, 0x69, 0x69],\n dimgrey: [0x69, 0x69, 0x69],\n dodgerblue: [0x1e, 0x90, 0xff],\n firebrick: [0xb2, 0x22, 0x22],\n floralwhite: [0xff, 0xfa, 0xf0],\n forestgreen: [0x22, 0x8b, 0x22],\n fuchsia: [0xff, 0x00, 0xff],\n gainsboro: [0xdc, 0xdc, 0xdc],\n ghostwhite: [0xf8, 0xf8, 0xff],\n gold: [0xff, 0xd7, 0x00],\n goldenrod: [0xda, 0xa5, 0x20],\n gray: [0x80, 0x80, 0x80],\n green: [0x00, 0x80, 0x00],\n greenyellow: [0xad, 0xff, 0x2f],\n grey: [0x80, 0x80, 0x80],\n honeydew: [0xf0, 0xff, 0xf0],\n hotpink: [0xff, 0x69, 0xb4],\n indianred: [0xcd, 0x5c, 0x5c],\n indigo: [0x4b, 0x00, 0x82],\n ivory: [0xff, 0xff, 0xf0],\n khaki: [0xf0, 0xe6, 0x8c],\n lavender: [0xe6, 0xe6, 0xfa],\n lavenderblush: [0xff, 0xf0, 0xf5],\n lawngreen: [0x7c, 0xfc, 0x00],\n lemonchiffon: [0xff, 0xfa, 0xcd],\n lightblue: [0xad, 0xd8, 0xe6],\n lightcoral: [0xf0, 0x80, 0x80],\n lightcyan: [0xe0, 0xff, 0xff],\n lightgoldenrodyellow: [0xfa, 0xfa, 0xd2],\n lightgray: [0xd3, 0xd3, 0xd3],\n lightgreen: [0x90, 0xee, 0x90],\n lightgrey: [0xd3, 0xd3, 0xd3],\n lightpink: [0xff, 0xb6, 0xc1],\n lightsalmon: [0xff, 0xa0, 0x7a],\n lightseagreen: [0x20, 0xb2, 0xaa],\n lightskyblue: [0x87, 0xce, 0xfa],\n lightslategray: [0x77, 0x88, 0x99],\n lightslategrey: [0x77, 0x88, 0x99],\n lightsteelblue: [0xb0, 0xc4, 0xde],\n lightyellow: [0xff, 0xff, 0xe0],\n lime: [0x00, 0xff, 0x00],\n limegreen: [0x32, 0xcd, 0x32],\n linen: [0xfa, 0xf0, 0xe6],\n magenta: [0xff, 0x00, 0xff],\n maroon: [0x80, 0x00, 0x00],\n mediumaquamarine: [0x66, 0xcd, 0xaa],\n mediumblue: [0x00, 0x00, 0xcd],\n mediumorchid: [0xba, 0x55, 0xd3],\n mediumpurple: [0x93, 0x70, 0xdb],\n mediumseagreen: [0x3c, 0xb3, 0x71],\n mediumslateblue: [0x7b, 0x68, 0xee],\n mediumspringgreen: [0x00, 0xfa, 0x9a],\n mediumturquoise: [0x48, 0xd1, 0xcc],\n mediumvioletred: [0xc7, 0x15, 0x85],\n midnightblue: [0x19, 0x19, 0x70],\n mintcream: [0xf5, 0xff, 0xfa],\n mistyrose: [0xff, 0xe4, 0xe1],\n moccasin: [0xff, 0xe4, 0xb5],\n navajowhite: [0xff, 0xde, 0xad],\n navy: [0x00, 0x00, 0x80],\n oldlace: [0xfd, 0xf5, 0xe6],\n olive: [0x80, 0x80, 0x00],\n olivedrab: [0x6b, 0x8e, 0x23],\n orange: [0xff, 0xa5, 0x00],\n orangered: [0xff, 0x45, 0x00],\n orchid: [0xda, 0x70, 0xd6],\n palegoldenrod: [0xee, 0xe8, 0xaa],\n palegreen: [0x98, 0xfb, 0x98],\n paleturquoise: [0xaf, 0xee, 0xee],\n palevioletred: [0xdb, 0x70, 0x93],\n papayawhip: [0xff, 0xef, 0xd5],\n peachpuff: [0xff, 0xda, 0xb9],\n peru: [0xcd, 0x85, 0x3f],\n pink: [0xff, 0xc0, 0xcb],\n plum: [0xdd, 0xa0, 0xdd],\n powderblue: [0xb0, 0xe0, 0xe6],\n purple: [0x80, 0x00, 0x80],\n rebeccapurple: [0x66, 0x33, 0x99],\n red: [0xff, 0x00, 0x00],\n rosybrown: [0xbc, 0x8f, 0x8f],\n royalblue: [0x41, 0x69, 0xe1],\n saddlebrown: [0x8b, 0x45, 0x13],\n salmon: [0xfa, 0x80, 0x72],\n sandybrown: [0xf4, 0xa4, 0x60],\n seagreen: [0x2e, 0x8b, 0x57],\n seashell: [0xff, 0xf5, 0xee],\n sienna: [0xa0, 0x52, 0x2d],\n silver: [0xc0, 0xc0, 0xc0],\n skyblue: [0x87, 0xce, 0xeb],\n slateblue: [0x6a, 0x5a, 0xcd],\n slategray: [0x70, 0x80, 0x90],\n slategrey: [0x70, 0x80, 0x90],\n snow: [0xff, 0xfa, 0xfa],\n springgreen: [0x00, 0xff, 0x7f],\n steelblue: [0x46, 0x82, 0xb4],\n tan: [0xd2, 0xb4, 0x8c],\n teal: [0x00, 0x80, 0x80],\n thistle: [0xd8, 0xbf, 0xd8],\n tomato: [0xff, 0x63, 0x47],\n turquoise: [0x40, 0xe0, 0xd0],\n violet: [0xee, 0x82, 0xee],\n wheat: [0xf5, 0xde, 0xb3],\n white: [0xff, 0xff, 0xff],\n whitesmoke: [0xf5, 0xf5, 0xf5],\n yellow: [0xff, 0xff, 0x00],\n yellowgreen: [0x9a, 0xcd, 0x32]\n} as const satisfies {\n [key: string]: TriColorChannels;\n};\n\n/**\n * cache invalid color value\n * @param key - cache key\n * @param nullable - is nullable\n * @returns cached value\n */\nexport const cacheInvalidColorValue = (\n cacheKey: string,\n format: string,\n nullable: boolean = false\n): SpecifiedColorChannels | string | NullObject => {\n if (format === VAL_SPEC) {\n const res = '';\n setCache(cacheKey, res);\n return res;\n }\n if (nullable) {\n setCache(cacheKey, null);\n return new NullObject();\n }\n const res: SpecifiedColorChannels = ['rgb', 0, 0, 0, 0];\n setCache(cacheKey, res);\n return res;\n};\n\n/**\n * resolve invalid color value\n * @param format - output format\n * @param nullable - is nullable\n * @returns resolved value\n */\nexport const resolveInvalidColorValue = (\n format: string,\n nullable: boolean = false\n): SpecifiedColorChannels | string | NullObject => {\n switch (format) {\n case 'hsl':\n case 'hwb':\n case VAL_MIX: {\n return new NullObject();\n }\n case VAL_SPEC: {\n return '';\n }\n default: {\n if (nullable) {\n return new NullObject();\n }\n return ['rgb', 0, 0, 0, 0] as SpecifiedColorChannels;\n }\n }\n};\n\n/**\n * validate color components\n * @param arr - color components\n * @param [opt] - options\n * @param [opt.alpha] - alpha channel\n * @param [opt.minLength] - min length\n * @param [opt.maxLength] - max length\n * @param [opt.minRange] - min range\n * @param [opt.maxRange] - max range\n * @param [opt.validateRange] - validate range\n * @returns result - validated color components\n */\nexport const validateColorComponents = (\n arr: ColorChannels | TriColorChannels,\n opt: {\n alpha?: boolean;\n minLength?: number;\n maxLength?: number;\n minRange?: number;\n maxRange?: number;\n validateRange?: boolean;\n } = {}\n): ColorChannels | TriColorChannels => {\n if (!Array.isArray(arr)) {\n throw new TypeError(`${arr} is not an array.`);\n }\n const {\n alpha = false,\n minLength = TRIA,\n maxLength = QUAD,\n minRange = 0,\n maxRange = 1,\n validateRange = true\n } = opt;\n if (!Number.isFinite(minLength)) {\n throw new TypeError(`${minLength} is not a number.`);\n }\n if (!Number.isFinite(maxLength)) {\n throw new TypeError(`${maxLength} is not a number.`);\n }\n if (!Number.isFinite(minRange)) {\n throw new TypeError(`${minRange} is not a number.`);\n }\n if (!Number.isFinite(maxRange)) {\n throw new TypeError(`${maxRange} is not a number.`);\n }\n const l = arr.length;\n if (l < minLength || l > maxLength) {\n throw new Error(`Unexpected array length ${l}.`);\n }\n let i = 0;\n while (i < l) {\n const v = arr[i] as number;\n if (!Number.isFinite(v)) {\n throw new TypeError(`${v} is not a number.`);\n } else if (i < TRIA && validateRange && (v < minRange || v > maxRange)) {\n throw new RangeError(`${v} is not between ${minRange} and ${maxRange}.`);\n } else if (i === TRIA && (v < 0 || v > 1)) {\n throw new RangeError(`${v} is not between 0 and 1.`);\n }\n i++;\n }\n if (alpha && l === TRIA) {\n arr.push(1);\n }\n return arr;\n};\n\n/**\n * transform matrix\n * @param mtx - 3 * 3 matrix\n * @param vct - vector\n * @param [skip] - skip validate\n * @returns TriColorChannels - [p1, p2, p3]\n */\nexport const transformMatrix = (\n mtx: ColorMatrix,\n vct: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n if (!Array.isArray(mtx)) {\n throw new TypeError(`${mtx} is not an array.`);\n } else if (mtx.length !== TRIA) {\n throw new Error(`Unexpected array length ${mtx.length}.`);\n } else if (!skip) {\n for (let i of mtx) {\n i = validateColorComponents(i as TriColorChannels, {\n maxLength: TRIA,\n validateRange: false\n }) as TriColorChannels;\n }\n }\n const [[r1c1, r1c2, r1c3], [r2c1, r2c2, r2c3], [r3c1, r3c2, r3c3]] = mtx;\n let v1, v2, v3;\n if (skip) {\n [v1, v2, v3] = vct;\n } else {\n [v1, v2, v3] = validateColorComponents(vct, {\n maxLength: TRIA,\n validateRange: false\n });\n }\n const p1 = r1c1 * v1 + r1c2 * v2 + r1c3 * v3;\n const p2 = r2c1 * v1 + r2c2 * v2 + r2c3 * v3;\n const p3 = r3c1 * v1 + r3c2 * v2 + r3c3 * v3;\n return [p1, p2, p3];\n};\n\n/**\n * normalize color components\n * @param colorA - color components [v1, v2, v3, v4]\n * @param colorB - color components [v1, v2, v3, v4]\n * @param [skip] - skip validate\n * @returns result - [colorA, colorB]\n */\nexport const normalizeColorComponents = (\n colorA: [number | string, number | string, number | string, number | string],\n colorB: [number | string, number | string, number | string, number | string],\n skip: boolean = false\n): [ColorChannels, ColorChannels] => {\n if (!Array.isArray(colorA)) {\n throw new TypeError(`${colorA} is not an array.`);\n } else if (colorA.length !== QUAD) {\n throw new Error(`Unexpected array length ${colorA.length}.`);\n }\n if (!Array.isArray(colorB)) {\n throw new TypeError(`${colorB} is not an array.`);\n } else if (colorB.length !== QUAD) {\n throw new Error(`Unexpected array length ${colorB.length}.`);\n }\n let i = 0;\n while (i < QUAD) {\n if (colorA[i] === NONE && colorB[i] === NONE) {\n colorA[i] = 0;\n colorB[i] = 0;\n } else if (colorA[i] === NONE) {\n colorA[i] = colorB[i] as number;\n } else if (colorB[i] === NONE) {\n colorB[i] = colorA[i] as number;\n }\n i++;\n }\n if (skip) {\n return [colorA as ColorChannels, colorB as ColorChannels];\n }\n const validatedColorA = validateColorComponents(colorA as ColorChannels, {\n minLength: QUAD,\n validateRange: false\n });\n const validatedColorB = validateColorComponents(colorB as ColorChannels, {\n minLength: QUAD,\n validateRange: false\n });\n return [validatedColorA as ColorChannels, validatedColorB as ColorChannels];\n};\n\n/**\n * number to hex string\n * @param value - numeric value\n * @returns hex string\n */\nexport const numberToHexString = (value: number): string => {\n if (!Number.isFinite(value)) {\n throw new TypeError(`${value} is not a number.`);\n } else {\n value = Math.round(value);\n if (value < 0 || value > MAX_RGB) {\n throw new RangeError(`${value} is not between 0 and ${MAX_RGB}.`);\n }\n }\n let hex = value.toString(HEX);\n if (hex.length === 1) {\n hex = `0${hex}`;\n }\n return hex;\n};\n\n/**\n * angle to deg\n * @param angle\n * @returns deg: 0..360\n */\nexport const angleToDeg = (angle: string): number => {\n if (isString(angle)) {\n angle = angle.trim();\n } else {\n throw new TypeError(`${angle} is not a string.`);\n }\n const GRAD = DEG / 400;\n const RAD = DEG / (Math.PI * DUO);\n const reg = new RegExp(`^(${NUM})(${ANGLE})?$`);\n if (!reg.test(angle)) {\n throw new SyntaxError(`Invalid property value: ${angle}`);\n }\n const [, value, unit] = angle.match(reg) as MatchedRegExp;\n let deg;\n switch (unit) {\n case 'grad':\n deg = parseFloat(value) * GRAD;\n break;\n case 'rad':\n deg = parseFloat(value) * RAD;\n break;\n case 'turn':\n deg = parseFloat(value) * DEG;\n break;\n default:\n deg = parseFloat(value);\n }\n deg %= DEG;\n if (deg < 0) {\n deg += DEG;\n } else if (Object.is(deg, -0)) {\n deg = 0;\n }\n return deg;\n};\n\n/**\n * parse alpha\n * @param [alpha] - alpha value\n * @returns alpha: 0..1\n */\nexport const parseAlpha = (alpha: string = ''): number => {\n if (isString(alpha)) {\n alpha = alpha.trim();\n if (!alpha) {\n alpha = '1';\n } else if (alpha === NONE) {\n alpha = '0';\n } else {\n let a;\n if (alpha.endsWith('%')) {\n a = parseFloat(alpha) / MAX_PCT;\n } else {\n a = parseFloat(alpha);\n }\n if (!Number.isFinite(a)) {\n throw new TypeError(`${a} is not a finite number.`);\n }\n if (a < PPTH) {\n alpha = '0';\n } else if (a > 1) {\n alpha = '1';\n } else {\n alpha = a.toFixed(TRIA);\n }\n }\n } else {\n alpha = '1';\n }\n return parseFloat(alpha);\n};\n\n/**\n * parse hex alpha\n * @param value - alpha value in hex string\n * @returns alpha: 0..1\n */\nexport const parseHexAlpha = (value: string): number => {\n if (isString(value)) {\n if (value === '') {\n throw new SyntaxError('Invalid property value: (empty string)');\n }\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n let alpha = parseInt(value, HEX);\n if (alpha <= 0) {\n return 0;\n }\n if (alpha >= MAX_RGB) {\n return 1;\n }\n const alphaMap = new Map();\n for (let i = 1; i < MAX_PCT; i++) {\n alphaMap.set(Math.round((i * MAX_RGB) / MAX_PCT), i);\n }\n if (alphaMap.has(alpha)) {\n alpha = alphaMap.get(alpha) / MAX_PCT;\n } else {\n alpha = Math.round(alpha / MAX_RGB / PPTH) * PPTH;\n }\n return parseFloat(alpha.toFixed(TRIA));\n};\n\n/**\n * transform rgb to linear rgb\n * @param rgb - [r, g, b] r|g|b: 0..255\n * @param [skip] - skip validate\n * @returns TriColorChannels - [r, g, b] r|g|b: 0..1\n */\nexport const transformRgbToLinearRgb = (\n rgb: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n let rr, gg, bb;\n if (skip) {\n [rr, gg, bb] = rgb;\n } else {\n [rr, gg, bb] = validateColorComponents(rgb, {\n maxLength: TRIA,\n maxRange: MAX_RGB\n });\n }\n let r = rr / MAX_RGB;\n let g = gg / MAX_RGB;\n let b = bb / MAX_RGB;\n const COND_POW = 0.04045;\n if (r > COND_POW) {\n r = Math.pow((r + LINEAR_OFFSET) / (1 + LINEAR_OFFSET), POW_LINEAR);\n } else {\n r /= LINEAR_COEF;\n }\n if (g > COND_POW) {\n g = Math.pow((g + LINEAR_OFFSET) / (1 + LINEAR_OFFSET), POW_LINEAR);\n } else {\n g /= LINEAR_COEF;\n }\n if (b > COND_POW) {\n b = Math.pow((b + LINEAR_OFFSET) / (1 + LINEAR_OFFSET), POW_LINEAR);\n } else {\n b /= LINEAR_COEF;\n }\n return [r, g, b];\n};\n\n/**\n * transform rgb to xyz\n * @param rgb - [r, g, b] r|g|b: 0..255\n * @param [skip] - skip validate\n * @returns TriColorChannels - [x, y, z]\n */\nexport const transformRgbToXyz = (\n rgb: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n if (!skip) {\n rgb = validateColorComponents(rgb, {\n maxLength: TRIA,\n maxRange: MAX_RGB\n }) as TriColorChannels;\n }\n rgb = transformRgbToLinearRgb(rgb, true);\n const xyz = transformMatrix(MATRIX_L_RGB_TO_XYZ, rgb, true);\n return xyz;\n};\n\n/**\n * transform rgb to xyz-d50\n * @param rgb - [r, g, b] r|g|b: 0..255 alpha: 0..1\n * @returns TriColorChannels - [x, y, z]\n */\nexport const transformRgbToXyzD50 = (\n rgb: TriColorChannels\n): TriColorChannels => {\n let xyz = transformRgbToXyz(rgb);\n xyz = transformMatrix(MATRIX_D65_TO_D50, xyz, true);\n return xyz;\n};\n\n/**\n * transform linear rgb to rgb\n * @param rgb - [r, g, b] r|g|b: 0..1\n * @param [round] - round result\n * @returns TriColorChannels - [r, g, b] r|g|b: 0..255\n */\nexport const transformLinearRgbToRgb = (\n rgb: TriColorChannels,\n round: boolean = false\n): TriColorChannels => {\n let [r, g, b] = validateColorComponents(rgb, {\n maxLength: TRIA\n });\n const COND_POW = 809 / 258400;\n if (r > COND_POW) {\n r = Math.pow(r, 1 / POW_LINEAR) * (1 + LINEAR_OFFSET) - LINEAR_OFFSET;\n } else {\n r *= LINEAR_COEF;\n }\n r *= MAX_RGB;\n if (g > COND_POW) {\n g = Math.pow(g, 1 / POW_LINEAR) * (1 + LINEAR_OFFSET) - LINEAR_OFFSET;\n } else {\n g *= LINEAR_COEF;\n }\n g *= MAX_RGB;\n if (b > COND_POW) {\n b = Math.pow(b, 1 / POW_LINEAR) * (1 + LINEAR_OFFSET) - LINEAR_OFFSET;\n } else {\n b *= LINEAR_COEF;\n }\n b *= MAX_RGB;\n return [\n round ? Math.round(r) : r,\n round ? Math.round(g) : g,\n round ? Math.round(b) : b\n ];\n};\n\n/**\n * transform xyz to rgb\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [r, g, b] r|g|b: 0..255\n */\nexport const transformXyzToRgb = (\n xyz: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n if (!skip) {\n xyz = validateColorComponents(xyz, {\n maxLength: TRIA,\n validateRange: false\n }) as TriColorChannels;\n }\n let [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, xyz, true);\n [r, g, b] = transformLinearRgbToRgb(\n [\n Math.min(Math.max(r, 0), 1),\n Math.min(Math.max(g, 0), 1),\n Math.min(Math.max(b, 0), 1)\n ],\n true\n );\n return [r, g, b];\n};\n\n/**\n * transform xyz to xyz-d50\n * @param xyz - [x, y, z]\n * @returns TriColorChannels - [x, y, z]\n */\nexport const transformXyzToXyzD50 = (\n xyz: TriColorChannels\n): TriColorChannels => {\n xyz = validateColorComponents(xyz, {\n maxLength: TRIA,\n validateRange: false\n }) as TriColorChannels;\n xyz = transformMatrix(MATRIX_D65_TO_D50, xyz, true);\n return xyz;\n};\n\n/**\n * transform xyz to hsl\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [h, s, l]\n */\nexport const transformXyzToHsl = (\n xyz: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n const [rr, gg, bb] = transformXyzToRgb(xyz, skip);\n const r = rr / MAX_RGB;\n const g = gg / MAX_RGB;\n const b = bb / MAX_RGB;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const d = max - min;\n const l = (max + min) * HALF * MAX_PCT;\n let h, s;\n if (Math.round(l) === 0 || Math.round(l) === MAX_PCT) {\n h = 0;\n s = 0;\n } else {\n s = (d / (1 - Math.abs(max + min - 1))) * MAX_PCT;\n if (s === 0) {\n h = 0;\n } else {\n switch (max) {\n case r:\n h = (g - b) / d;\n break;\n case g:\n h = (b - r) / d + DUO;\n break;\n case b:\n default:\n h = (r - g) / d + QUAD;\n break;\n }\n h = (h * SEXA) % DEG;\n if (h < 0) {\n h += DEG;\n }\n }\n }\n return [h, s, l];\n};\n\n/**\n * transform xyz to hwb\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [h, w, b]\n */\nexport const transformXyzToHwb = (\n xyz: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n const [r, g, b] = transformXyzToRgb(xyz, skip);\n const wh = Math.min(r, g, b) / MAX_RGB;\n const bk = 1 - Math.max(r, g, b) / MAX_RGB;\n let h;\n if (wh + bk === 1) {\n h = 0;\n } else {\n [h] = transformXyzToHsl(xyz);\n }\n return [h, wh * MAX_PCT, bk * MAX_PCT];\n};\n\n/**\n * transform xyz to oklab\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [l, a, b]\n */\nexport const transformXyzToOklab = (\n xyz: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n if (!skip) {\n xyz = validateColorComponents(xyz, {\n maxLength: TRIA,\n validateRange: false\n }) as TriColorChannels;\n }\n const lms = transformMatrix(MATRIX_XYZ_TO_LMS, xyz, true);\n const xyzLms = lms.map(c => Math.cbrt(c)) as TriColorChannels;\n let [l, a, b] = transformMatrix(MATRIX_LMS_TO_OKLAB, xyzLms, true);\n l = Math.min(Math.max(l, 0), 1);\n const lPct = Math.round(parseFloat(l.toFixed(QUAD)) * MAX_PCT);\n if (lPct === 0 || lPct === MAX_PCT) {\n a = 0;\n b = 0;\n }\n return [l, a, b];\n};\n\n/**\n * transform xyz to oklch\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [l, c, h]\n */\nexport const transformXyzToOklch = (\n xyz: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n const [l, a, b] = transformXyzToOklab(xyz, skip);\n let c, h;\n const lPct = Math.round(parseFloat(l.toFixed(QUAD)) * MAX_PCT);\n if (lPct === 0 || lPct === MAX_PCT) {\n c = 0;\n h = 0;\n } else {\n c = Math.max(Math.sqrt(Math.pow(a, POW_SQR) + Math.pow(b, POW_SQR)), 0);\n if (parseFloat(c.toFixed(QUAD)) === 0) {\n h = 0;\n } else {\n h = (Math.atan2(b, a) * DEG_HALF) / Math.PI;\n if (h < 0) {\n h += DEG;\n }\n }\n }\n return [l, c, h];\n};\n\n/**\n * transform xyz D50 to rgb\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [r, g, b] r|g|b: 0..255\n */\nexport const transformXyzD50ToRgb = (\n xyz: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n if (!skip) {\n xyz = validateColorComponents(xyz, {\n maxLength: TRIA,\n validateRange: false\n }) as TriColorChannels;\n }\n const xyzD65 = transformMatrix(MATRIX_D50_TO_D65, xyz, true);\n const rgb = transformXyzToRgb(xyzD65, true);\n return rgb;\n};\n\n/**\n * transform xyz-d50 to lab\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [l, a, b]\n */\nexport const transformXyzD50ToLab = (\n xyz: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n if (!skip) {\n xyz = validateColorComponents(xyz, {\n maxLength: TRIA,\n validateRange: false\n }) as TriColorChannels;\n }\n const xyzD50 = xyz.map((val, i) => val / (D50[i] as number));\n const [f0, f1, f2] = xyzD50.map(val =>\n val > LAB_EPSILON ? Math.cbrt(val) : (val * LAB_KAPPA + HEX) / LAB_L\n ) as TriColorChannels;\n const l = Math.min(Math.max(LAB_L * f1 - HEX, 0), MAX_PCT);\n let a, b;\n if (l === 0 || l === MAX_PCT) {\n a = 0;\n b = 0;\n } else {\n a = (f0 - f1) * LAB_A;\n b = (f1 - f2) * LAB_B;\n }\n return [l, a, b];\n};\n\n/**\n * transform xyz-d50 to lch\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [l, c, h]\n */\nexport const transformXyzD50ToLch = (\n xyz: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n const [l, a, b] = transformXyzD50ToLab(xyz, skip);\n let c, h;\n if (l === 0 || l === MAX_PCT) {\n c = 0;\n h = 0;\n } else {\n c = Math.max(Math.sqrt(Math.pow(a, POW_SQR) + Math.pow(b, POW_SQR)), 0);\n h = (Math.atan2(b, a) * DEG_HALF) / Math.PI;\n if (h < 0) {\n h += DEG;\n }\n }\n return [l, c, h];\n};\n\n/**\n * convert rgb to hex color\n * @param rgb - [r, g, b, alpha] r|g|b: 0..255 alpha: 0..1\n * @returns hex color\n */\nexport const convertRgbToHex = (rgb: ColorChannels): string => {\n const [r, g, b, alpha] = validateColorComponents(rgb, {\n alpha: true,\n maxRange: MAX_RGB\n }) as ColorChannels;\n const rr = numberToHexString(r);\n const gg = numberToHexString(g);\n const bb = numberToHexString(b);\n const aa = numberToHexString(alpha * MAX_RGB);\n let hex;\n if (aa === 'ff') {\n hex = `#${rr}${gg}${bb}`;\n } else {\n hex = `#${rr}${gg}${bb}${aa}`;\n }\n return hex;\n};\n\n/**\n * convert linear rgb to hex color\n * @param rgb - [r, g, b, alpha] r|g|b|alpha: 0..1\n * @param [skip] - skip validate\n * @returns hex color\n */\nexport const convertLinearRgbToHex = (\n rgb: ColorChannels,\n skip: boolean = false\n): string => {\n let r, g, b, alpha;\n if (skip) {\n [r, g, b, alpha] = rgb;\n } else {\n [r, g, b, alpha] = validateColorComponents(rgb, {\n minLength: QUAD\n }) as ColorChannels;\n }\n [r, g, b] = transformLinearRgbToRgb([r, g, b], true);\n const rr = numberToHexString(r);\n const gg = numberToHexString(g);\n const bb = numberToHexString(b);\n const aa = numberToHexString(alpha * MAX_RGB);\n let hex;\n if (aa === 'ff') {\n hex = `#${rr}${gg}${bb}`;\n } else {\n hex = `#${rr}${gg}${bb}${aa}`;\n }\n return hex;\n};\n\n/**\n * convert xyz to hex color\n * @param xyz - [x, y, z, alpha]\n * @returns hex color\n */\nexport const convertXyzToHex = (xyz: ColorChannels): string => {\n const [x, y, z, alpha] = validateColorComponents(xyz, {\n minLength: QUAD,\n validateRange: false\n }) as ColorChannels;\n const [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true);\n const hex = convertLinearRgbToHex(\n [\n Math.min(Math.max(r, 0), 1),\n Math.min(Math.max(g, 0), 1),\n Math.min(Math.max(b, 0), 1),\n alpha\n ],\n true\n );\n return hex;\n};\n\n/**\n * convert xyz D50 to hex color\n * @param xyz - [x, y, z, alpha]\n * @returns hex color\n */\nexport const convertXyzD50ToHex = (xyz: ColorChannels): string => {\n const [x, y, z, alpha] = validateColorComponents(xyz, {\n minLength: QUAD,\n validateRange: false\n }) as ColorChannels;\n const xyzD65 = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true);\n const [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, xyzD65, true);\n const hex = convertLinearRgbToHex([\n Math.min(Math.max(r, 0), 1),\n Math.min(Math.max(g, 0), 1),\n Math.min(Math.max(b, 0), 1),\n alpha\n ]);\n return hex;\n};\n\n/**\n * convert hex color to rgb\n * @param value - hex color value\n * @returns ColorChannels - [r, g, b, alpha] r|g|b: 0..255 alpha: 0..1\n */\nexport const convertHexToRgb = (value: string): ColorChannels => {\n if (isString(value)) {\n value = value.toLowerCase().trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n if (\n !(\n /^#[\\da-f]{6}$/.test(value) ||\n /^#[\\da-f]{3}$/.test(value) ||\n /^#[\\da-f]{8}$/.test(value) ||\n /^#[\\da-f]{4}$/.test(value)\n )\n ) {\n throw new SyntaxError(`Invalid property value: ${value}`);\n }\n const arr: number[] = [];\n if (/^#[\\da-f]{3}$/.test(value)) {\n const [, r, g, b] = value.match(\n /^#([\\da-f])([\\da-f])([\\da-f])$/\n ) as MatchedRegExp;\n arr.push(\n parseInt(`${r}${r}`, HEX),\n parseInt(`${g}${g}`, HEX),\n parseInt(`${b}${b}`, HEX),\n 1\n );\n } else if (/^#[\\da-f]{4}$/.test(value)) {\n const [, r, g, b, alpha] = value.match(\n /^#([\\da-f])([\\da-f])([\\da-f])([\\da-f])$/\n ) as MatchedRegExp;\n arr.push(\n parseInt(`${r}${r}`, HEX),\n parseInt(`${g}${g}`, HEX),\n parseInt(`${b}${b}`, HEX),\n parseHexAlpha(`${alpha}${alpha}`)\n );\n } else if (/^#[\\da-f]{8}$/.test(value)) {\n const [, r, g, b, alpha] = value.match(\n /^#([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})$/\n ) as MatchedRegExp;\n arr.push(\n parseInt(r, HEX),\n parseInt(g, HEX),\n parseInt(b, HEX),\n parseHexAlpha(alpha)\n );\n } else {\n const [, r, g, b] = value.match(\n /^#([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})$/\n ) as MatchedRegExp;\n arr.push(parseInt(r, HEX), parseInt(g, HEX), parseInt(b, HEX), 1);\n }\n return arr as ColorChannels;\n};\n\n/**\n * convert hex color to linear rgb\n * @param value - hex color value\n * @returns ColorChannels - [r, g, b, alpha] r|g|b|alpha: 0..1\n */\nexport const convertHexToLinearRgb = (value: string): ColorChannels => {\n const [rr, gg, bb, alpha] = convertHexToRgb(value);\n const [r, g, b] = transformRgbToLinearRgb([rr, gg, bb], true);\n return [r, g, b, alpha];\n};\n\n/**\n * convert hex color to xyz\n * @param value - hex color value\n * @returns ColorChannels - [x, y, z, alpha]\n */\nexport const convertHexToXyz = (value: string): ColorChannels => {\n const [r, g, b, alpha] = convertHexToLinearRgb(value);\n const [x, y, z] = transformMatrix(MATRIX_L_RGB_TO_XYZ, [r, g, b], true);\n return [x, y, z, alpha];\n};\n\n/**\n * parse rgb()\n * @param value - rgb color value\n * @param [opt] - options\n * @returns parsed color - ['rgb', r, g, b, alpha], '(empty)', NullObject\n */\nexport const parseRgb = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.toLowerCase().trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '', nullable = false } = opt;\n const reg = new RegExp(`^rgba?\\\\(\\\\s*(${SYN_MOD}|${SYN_RGB_LV3})\\\\s*\\\\)$`);\n if (!reg.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n return res;\n }\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n const [, val] = value.match(reg) as MatchedRegExp;\n const [v1, v2, v3, v4 = ''] = val\n .replace(/[,/]/g, ' ')\n .split(/\\s+/) as StringColorChannels;\n let r, g, b;\n if (v1 === NONE) {\n r = 0;\n } else {\n if (v1.endsWith('%')) {\n r = (parseFloat(v1) * MAX_RGB) / MAX_PCT;\n } else {\n r = parseFloat(v1);\n }\n r = Math.min(Math.max(roundToPrecision(r, OCT), 0), MAX_RGB);\n }\n if (v2 === NONE) {\n g = 0;\n } else {\n if (v2.endsWith('%')) {\n g = (parseFloat(v2) * MAX_RGB) / MAX_PCT;\n } else {\n g = parseFloat(v2);\n }\n g = Math.min(Math.max(roundToPrecision(g, OCT), 0), MAX_RGB);\n }\n if (v3 === NONE) {\n b = 0;\n } else {\n if (v3.endsWith('%')) {\n b = (parseFloat(v3) * MAX_RGB) / MAX_PCT;\n } else {\n b = parseFloat(v3);\n }\n b = Math.min(Math.max(roundToPrecision(b, OCT), 0), MAX_RGB);\n }\n const alpha = parseAlpha(v4);\n return ['rgb', r, g, b, format === VAL_MIX && v4 === NONE ? NONE : alpha];\n};\n\n/**\n * parse hsl()\n * @param value - hsl color value\n * @param [opt] - options\n * @returns parsed color - ['rgb', r, g, b, alpha], '(empty)', NullObject\n */\nexport const parseHsl = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '', nullable = false } = opt;\n if (!REG_HSL.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n return res;\n }\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n const [, val] = value.match(REG_HSL) as MatchedRegExp;\n const [v1, v2, v3, v4 = ''] = val\n .replace(/[,/]/g, ' ')\n .split(/\\s+/) as StringColorChannels;\n let h, s, l;\n if (v1 === NONE) {\n h = 0;\n } else {\n h = angleToDeg(v1);\n }\n if (v2 === NONE) {\n s = 0;\n } else {\n s = Math.min(Math.max(parseFloat(v2), 0), MAX_PCT);\n }\n if (v3 === NONE) {\n l = 0;\n } else {\n l = Math.min(Math.max(parseFloat(v3), 0), MAX_PCT);\n }\n const alpha = parseAlpha(v4);\n if (format === 'hsl') {\n return [\n format,\n v1 === NONE ? v1 : h,\n v2 === NONE ? v2 : s,\n v3 === NONE ? v3 : l,\n v4 === NONE ? v4 : alpha\n ];\n }\n h = (h / DEG) * DOZ;\n l /= MAX_PCT;\n const sa = (s / MAX_PCT) * Math.min(l, 1 - l);\n const rk = h % DOZ;\n const gk = (8 + h) % DOZ;\n const bk = (4 + h) % DOZ;\n const r = l - sa * Math.max(-1, Math.min(rk - TRIA, TRIA ** POW_SQR - rk, 1));\n const g = l - sa * Math.max(-1, Math.min(gk - TRIA, TRIA ** POW_SQR - gk, 1));\n const b = l - sa * Math.max(-1, Math.min(bk - TRIA, TRIA ** POW_SQR - bk, 1));\n return [\n 'rgb',\n Math.min(Math.max(roundToPrecision(r * MAX_RGB, OCT), 0), MAX_RGB),\n Math.min(Math.max(roundToPrecision(g * MAX_RGB, OCT), 0), MAX_RGB),\n Math.min(Math.max(roundToPrecision(b * MAX_RGB, OCT), 0), MAX_RGB),\n alpha\n ];\n};\n\n/**\n * parse hwb()\n * @param value - hwb color value\n * @param [opt] - options\n * @returns parsed color - ['rgb', r, g, b, alpha], '(empty)', NullObject\n */\nexport const parseHwb = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '', nullable = false } = opt;\n if (!REG_HWB.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n return res;\n }\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n const [, val] = value.match(REG_HWB) as MatchedRegExp;\n const [v1, v2, v3, v4 = ''] = val\n .replace('/', ' ')\n .split(/\\s+/) as StringColorChannels;\n let h, wh, bk;\n if (v1 === NONE) {\n h = 0;\n } else {\n h = angleToDeg(v1);\n }\n if (v2 === NONE) {\n wh = 0;\n } else {\n wh = Math.min(Math.max(parseFloat(v2), 0), MAX_PCT) / MAX_PCT;\n }\n if (v3 === NONE) {\n bk = 0;\n } else {\n bk = Math.min(Math.max(parseFloat(v3), 0), MAX_PCT) / MAX_PCT;\n }\n const alpha = parseAlpha(v4);\n if (format === 'hwb') {\n return [\n format,\n v1 === NONE ? v1 : h,\n v2 === NONE ? v2 : wh * MAX_PCT,\n v3 === NONE ? v3 : bk * MAX_PCT,\n v4 === NONE ? v4 : alpha\n ];\n }\n if (wh + bk >= 1) {\n const v = roundToPrecision((wh / (wh + bk)) * MAX_RGB, OCT);\n return ['rgb', v, v, v, alpha];\n }\n const factor = (1 - wh - bk) / MAX_RGB;\n let [, r, g, b] = parseHsl(`hsl(${h} 100 50)`) as ComputedColorChannels;\n r = roundToPrecision((r * factor + wh) * MAX_RGB, OCT);\n g = roundToPrecision((g * factor + wh) * MAX_RGB, OCT);\n b = roundToPrecision((b * factor + wh) * MAX_RGB, OCT);\n return [\n 'rgb',\n Math.min(Math.max(r, 0), MAX_RGB),\n Math.min(Math.max(g, 0), MAX_RGB),\n Math.min(Math.max(b, 0), MAX_RGB),\n alpha\n ];\n};\n\n/**\n * parse lab()\n * @param value - lab color value\n * @param [opt] - options\n * @returns parsed color\n * - [xyz-d50, x, y, z, alpha], ['lab', l, a, b, alpha], '(empty)', NullObject\n */\nexport const parseLab = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '', nullable = false } = opt;\n if (!REG_LAB.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n return res;\n }\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n const COEF_PCT = 1.25;\n const COND_POW = 8;\n const [, val] = value.match(REG_LAB) as MatchedRegExp;\n const [v1, v2, v3, v4 = ''] = val\n .replace('/', ' ')\n .split(/\\s+/) as StringColorChannels;\n let l, a, b;\n if (v1 === NONE) {\n l = 0;\n } else {\n if (v1.endsWith('%')) {\n l = parseFloat(v1);\n if (l > MAX_PCT) {\n l = MAX_PCT;\n }\n } else {\n l = parseFloat(v1);\n }\n if (l < 0) {\n l = 0;\n }\n }\n if (v2 === NONE) {\n a = 0;\n } else {\n a = v2.endsWith('%') ? parseFloat(v2) * COEF_PCT : parseFloat(v2);\n }\n if (v3 === NONE) {\n b = 0;\n } else {\n b = v3.endsWith('%') ? parseFloat(v3) * COEF_PCT : parseFloat(v3);\n }\n const alpha = parseAlpha(v4);\n if (REG_SPEC.test(format)) {\n return [\n 'lab',\n v1 === NONE ? v1 : roundToPrecision(l, HEX),\n v2 === NONE ? v2 : roundToPrecision(a, HEX),\n v3 === NONE ? v3 : roundToPrecision(b, HEX),\n v4 === NONE ? v4 : alpha\n ];\n }\n const fl = (l + HEX) / LAB_L;\n const fa = a / LAB_A + fl;\n const fb = fl - b / LAB_B;\n const powFl = Math.pow(fl, POW_CUBE);\n const powFa = Math.pow(fa, POW_CUBE);\n const powFb = Math.pow(fb, POW_CUBE);\n const xyz = [\n powFa > LAB_EPSILON ? powFa : (fa * LAB_L - HEX) / LAB_KAPPA,\n l > COND_POW ? powFl : l / LAB_KAPPA,\n powFb > LAB_EPSILON ? powFb : (fb * LAB_L - HEX) / LAB_KAPPA\n ];\n const [x, y, z] = xyz.map(\n (val, i) => val * (D50[i] as number)\n ) as TriColorChannels;\n return [\n 'xyz-d50',\n roundToPrecision(x, HEX),\n roundToPrecision(y, HEX),\n roundToPrecision(z, HEX),\n alpha\n ];\n};\n\n/**\n * parse lch()\n * @param value - lch color value\n * @param [opt] - options\n * @returns parsed color\n * - ['xyz-d50', x, y, z, alpha], ['lch', l, c, h, alpha]\n * - '(empty)', NullObject\n */\nexport const parseLch = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '', nullable = false } = opt;\n if (!REG_LCH.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n return res;\n }\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n const COEF_PCT = 1.5;\n const [, val] = value.match(REG_LCH) as MatchedRegExp;\n const [v1, v2, v3, v4 = ''] = val\n .replace('/', ' ')\n .split(/\\s+/) as StringColorChannels;\n let l, c, h;\n if (v1 === NONE) {\n l = 0;\n } else {\n l = parseFloat(v1);\n if (l < 0) {\n l = 0;\n }\n }\n if (v2 === NONE) {\n c = 0;\n } else {\n c = v2.endsWith('%') ? parseFloat(v2) * COEF_PCT : parseFloat(v2);\n }\n if (v3 === NONE) {\n h = 0;\n } else {\n h = angleToDeg(v3);\n }\n const alpha = parseAlpha(v4);\n if (REG_SPEC.test(format)) {\n return [\n 'lch',\n v1 === NONE ? v1 : roundToPrecision(l, HEX),\n v2 === NONE ? v2 : roundToPrecision(c, HEX),\n v3 === NONE ? v3 : roundToPrecision(h, HEX),\n v4 === NONE ? v4 : alpha\n ];\n }\n const a = c * Math.cos((h * Math.PI) / DEG_HALF);\n const b = c * Math.sin((h * Math.PI) / DEG_HALF);\n const [, x, y, z] = parseLab(`lab(${l} ${a} ${b})`) as ComputedColorChannels;\n return [\n 'xyz-d50',\n roundToPrecision(x, HEX),\n roundToPrecision(y, HEX),\n roundToPrecision(z, HEX),\n alpha as number\n ];\n};\n\n/**\n * parse oklab()\n * @param value - oklab color value\n * @param [opt] - options\n * @returns parsed color\n * - ['xyz-d65', x, y, z, alpha], ['oklab', l, a, b, alpha]\n * - '(empty)', NullObject\n */\nexport const parseOklab = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '', nullable = false } = opt;\n if (!REG_OKLAB.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n return res;\n }\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n const COEF_PCT = 0.4;\n const [, val] = value.match(REG_OKLAB) as MatchedRegExp;\n const [v1, v2, v3, v4 = ''] = val\n .replace('/', ' ')\n .split(/\\s+/) as StringColorChannels;\n let l, a, b;\n if (v1 === NONE) {\n l = 0;\n } else {\n l = v1.endsWith('%') ? parseFloat(v1) / MAX_PCT : parseFloat(v1);\n if (l < 0) {\n l = 0;\n }\n }\n if (v2 === NONE) {\n a = 0;\n } else if (v2.endsWith('%')) {\n a = (parseFloat(v2) * COEF_PCT) / MAX_PCT;\n } else {\n a = parseFloat(v2);\n }\n if (v3 === NONE) {\n b = 0;\n } else if (v3.endsWith('%')) {\n b = (parseFloat(v3) * COEF_PCT) / MAX_PCT;\n } else {\n b = parseFloat(v3);\n }\n const alpha = parseAlpha(v4);\n if (REG_SPEC.test(format)) {\n return [\n 'oklab',\n v1 === NONE ? v1 : roundToPrecision(l, HEX),\n v2 === NONE ? v2 : roundToPrecision(a, HEX),\n v3 === NONE ? v3 : roundToPrecision(b, HEX),\n v4 === NONE ? v4 : alpha\n ];\n }\n const lms = transformMatrix(MATRIX_OKLAB_TO_LMS, [l, a, b]);\n const xyzLms = lms.map(c => Math.pow(c, POW_CUBE)) as TriColorChannels;\n const [x, y, z] = transformMatrix(MATRIX_LMS_TO_XYZ, xyzLms, true);\n return [\n 'xyz-d65',\n roundToPrecision(x, HEX),\n roundToPrecision(y, HEX),\n roundToPrecision(z, HEX),\n alpha as number\n ];\n};\n\n/**\n * parse oklch()\n * @param value - oklch color value\n * @param [opt] - options\n * @returns parsed color\n * - ['xyz-d65', x, y, z, alpha], ['oklch', l, c, h, alpha]\n * - '(empty)', NullObject\n */\nexport const parseOklch = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '', nullable = false } = opt;\n if (!REG_OKLCH.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n return res;\n }\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n const COEF_PCT = 0.4;\n const [, val] = value.match(REG_OKLCH) as MatchedRegExp;\n const [v1, v2, v3, v4 = ''] = val\n .replace('/', ' ')\n .split(/\\s+/) as StringColorChannels;\n let l, c, h;\n if (v1 === NONE) {\n l = 0;\n } else {\n l = v1.endsWith('%') ? parseFloat(v1) / MAX_PCT : parseFloat(v1);\n if (l < 0) {\n l = 0;\n }\n }\n if (v2 === NONE) {\n c = 0;\n } else {\n if (v2.endsWith('%')) {\n c = (parseFloat(v2) * COEF_PCT) / MAX_PCT;\n } else {\n c = parseFloat(v2);\n }\n if (c < 0) {\n c = 0;\n }\n }\n if (v3 === NONE) {\n h = 0;\n } else {\n h = angleToDeg(v3);\n }\n const alpha = parseAlpha(v4);\n if (REG_SPEC.test(format)) {\n return [\n 'oklch',\n v1 === NONE ? v1 : roundToPrecision(l, HEX),\n v2 === NONE ? v2 : roundToPrecision(c, HEX),\n v3 === NONE ? v3 : roundToPrecision(h, HEX),\n v4 === NONE ? v4 : alpha\n ];\n }\n const a = c * Math.cos((h * Math.PI) / DEG_HALF);\n const b = c * Math.sin((h * Math.PI) / DEG_HALF);\n const lms = transformMatrix(MATRIX_OKLAB_TO_LMS, [l, a, b]);\n const xyzLms = lms.map(cc => Math.pow(cc, POW_CUBE)) as TriColorChannels;\n const [x, y, z] = transformMatrix(MATRIX_LMS_TO_XYZ, xyzLms, true);\n return [\n 'xyz-d65',\n roundToPrecision(x, HEX),\n roundToPrecision(y, HEX),\n roundToPrecision(z, HEX),\n alpha\n ];\n};\n\n/**\n * parse color()\n * @param value - color function value\n * @param [opt] - options\n * @returns parsed color\n * - ['xyz-(d50|d65)', x, y, z, alpha], [cs, r, g, b, alpha]\n * - '(empty)', NullObject\n */\nexport const parseColorFunc = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { colorSpace = '', d50 = false, format = '', nullable = false } = opt;\n if (!REG_FN_COLOR.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n return res;\n }\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n const [, val] = value.match(REG_FN_COLOR) as MatchedRegExp;\n let [cs, v1, v2, v3, v4 = ''] = val\n .replace('/', ' ')\n .split(/\\s+/) as StringColorSpacedChannels;\n let r, g, b;\n if (cs === 'xyz') {\n cs = 'xyz-d65';\n }\n if (v1 === NONE) {\n r = 0;\n } else {\n r = v1.endsWith('%') ? parseFloat(v1) / MAX_PCT : parseFloat(v1);\n }\n if (v2 === NONE) {\n g = 0;\n } else {\n g = v2.endsWith('%') ? parseFloat(v2) / MAX_PCT : parseFloat(v2);\n }\n if (v3 === NONE) {\n b = 0;\n } else {\n b = v3.endsWith('%') ? parseFloat(v3) / MAX_PCT : parseFloat(v3);\n }\n const alpha = parseAlpha(v4);\n if (REG_SPEC.test(format) || (format === VAL_MIX && cs === colorSpace)) {\n return [\n cs,\n v1 === NONE ? v1 : roundToPrecision(r, DEC),\n v2 === NONE ? v2 : roundToPrecision(g, DEC),\n v3 === NONE ? v3 : roundToPrecision(b, DEC),\n v4 === NONE ? v4 : alpha\n ];\n }\n let x = 0;\n let y = 0;\n let z = 0;\n // srgb-linear\n if (cs === 'srgb-linear') {\n [x, y, z] = transformMatrix(MATRIX_L_RGB_TO_XYZ, [r, g, b]);\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n // display-p3\n } else if (cs === 'display-p3') {\n const linearRgb = transformRgbToLinearRgb([\n r * MAX_RGB,\n g * MAX_RGB,\n b * MAX_RGB\n ]);\n [x, y, z] = transformMatrix(MATRIX_P3_TO_XYZ, linearRgb);\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n // rec2020\n } else if (cs === 'rec2020') {\n const ALPHA = 1.09929682680944;\n const BETA = 0.018053968510807;\n const REC_COEF = 0.45;\n const rgb = [r, g, b].map(c => {\n let cl;\n if (c < BETA * REC_COEF * DEC) {\n cl = c / (REC_COEF * DEC);\n } else {\n cl = Math.pow((c + ALPHA - 1) / ALPHA, 1 / REC_COEF);\n }\n return cl;\n }) as TriColorChannels;\n [x, y, z] = transformMatrix(MATRIX_REC2020_TO_XYZ, rgb);\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n // a98-rgb\n } else if (cs === 'a98-rgb') {\n const POW_A98 = 563 / 256;\n const rgb = [r, g, b].map(c => {\n const cl = Math.pow(c, POW_A98);\n return cl;\n }) as TriColorChannels;\n [x, y, z] = transformMatrix(MATRIX_A98_TO_XYZ, rgb);\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n // prophoto-rgb\n } else if (cs === 'prophoto-rgb') {\n const POW_PROPHOTO = 1.8;\n const rgb = [r, g, b].map(c => {\n let cl;\n if (c > 1 / (HEX * DUO)) {\n cl = Math.pow(c, POW_PROPHOTO);\n } else {\n cl = c / HEX;\n }\n return cl;\n }) as TriColorChannels;\n [x, y, z] = transformMatrix(MATRIX_PROPHOTO_TO_XYZ_D50, rgb);\n if (!d50) {\n [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true);\n }\n // xyz, xyz-d50, xyz-d65\n } else if (/^xyz(?:-d(?:50|65))?$/.test(cs)) {\n [x, y, z] = [r, g, b];\n if (cs === 'xyz-d50') {\n if (!d50) {\n [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z]);\n }\n } else if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n // srgb\n } else {\n [x, y, z] = transformRgbToXyz([r * MAX_RGB, g * MAX_RGB, b * MAX_RGB]);\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n }\n return [\n d50 ? 'xyz-d50' : 'xyz-d65',\n roundToPrecision(x, HEX),\n roundToPrecision(y, HEX),\n roundToPrecision(z, HEX),\n format === VAL_MIX && v4 === NONE ? v4 : alpha\n ];\n};\n\n/**\n * parse color value\n * @param value - CSS color value\n * @param [opt] - options\n * @returns parsed color\n * - ['xyz-(d50|d65)', x, y, z, alpha], ['rgb', r, g, b, alpha]\n * - value, '(empty)', NullObject\n */\nexport const parseColorValue = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.toLowerCase().trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { d50 = false, format = '', nullable = false } = opt;\n if (!REG_COLOR.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n return res;\n }\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n let x = 0;\n let y = 0;\n let z = 0;\n let alpha = 0;\n // complement currentcolor as a missing color\n if (REG_CURRENT.test(value)) {\n if (format === VAL_COMP) {\n return ['rgb', 0, 0, 0, 0];\n }\n if (format === VAL_SPEC) {\n return value;\n }\n // named-color\n } else if (/^[a-z]+$/.test(value)) {\n if (Object.hasOwn(NAMED_COLORS, value)) {\n if (format === VAL_SPEC) {\n return value;\n }\n const [r, g, b] = NAMED_COLORS[\n value as keyof typeof NAMED_COLORS\n ] as TriColorChannels;\n alpha = 1;\n if (format === VAL_COMP) {\n return ['rgb', r, g, b, alpha];\n }\n [x, y, z] = transformRgbToXyz([r, g, b], true);\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n } else {\n switch (format) {\n case VAL_COMP: {\n if (nullable && value !== 'transparent') {\n return new NullObject();\n }\n return ['rgb', 0, 0, 0, 0];\n }\n case VAL_SPEC: {\n if (value === 'transparent') {\n return value;\n }\n return '';\n }\n case VAL_MIX: {\n if (value === 'transparent') {\n return ['rgb', 0, 0, 0, 0];\n }\n return new NullObject();\n }\n default:\n }\n }\n // hex-color\n } else if (value[0] === '#') {\n if (REG_SPEC.test(format)) {\n const rgb = convertHexToRgb(value);\n return ['rgb', ...rgb];\n }\n [x, y, z, alpha] = convertHexToXyz(value);\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n // lab()\n } else if (value.startsWith('lab')) {\n if (REG_SPEC.test(format)) {\n return parseLab(value, opt);\n }\n [, x, y, z, alpha] = parseLab(value) as ComputedColorChannels;\n if (!d50) {\n [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true);\n }\n // lch()\n } else if (value.startsWith('lch')) {\n if (REG_SPEC.test(format)) {\n return parseLch(value, opt);\n }\n [, x, y, z, alpha] = parseLch(value) as ComputedColorChannels;\n if (!d50) {\n [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true);\n }\n // oklab()\n } else if (value.startsWith('oklab')) {\n if (REG_SPEC.test(format)) {\n return parseOklab(value, opt);\n }\n [, x, y, z, alpha] = parseOklab(value) as ComputedColorChannels;\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n // oklch()\n } else if (value.startsWith('oklch')) {\n if (REG_SPEC.test(format)) {\n return parseOklch(value, opt);\n }\n [, x, y, z, alpha] = parseOklch(value) as ComputedColorChannels;\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n } else {\n let r, g, b;\n // hsl()\n if (value.startsWith('hsl')) {\n [, r, g, b, alpha] = parseHsl(value) as ComputedColorChannels;\n // hwb()\n } else if (value.startsWith('hwb')) {\n [, r, g, b, alpha] = parseHwb(value) as ComputedColorChannels;\n // rgb()\n } else {\n [, r, g, b, alpha] = parseRgb(value, opt) as ComputedColorChannels;\n }\n if (REG_SPEC.test(format)) {\n return ['rgb', Math.round(r), Math.round(g), Math.round(b), alpha];\n }\n [x, y, z] = transformRgbToXyz([r, g, b]);\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n }\n return [\n d50 ? 'xyz-d50' : 'xyz-d65',\n roundToPrecision(x, HEX),\n roundToPrecision(y, HEX),\n roundToPrecision(z, HEX),\n alpha\n ];\n};\n\n/**\n * resolve color value\n * @param value - CSS color value\n * @param [opt] - options\n * @returns resolved color\n * - [cs, v1, v2, v3, alpha], value, '(empty)', NullObject\n */\nexport const resolveColorValue = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.toLowerCase().trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { colorSpace = '', format = '', nullable = false } = opt;\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'resolveColorValue',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return cachedResult as NullObject;\n }\n const cachedItem = cachedResult.item;\n if (isString(cachedItem)) {\n return cachedItem as string;\n }\n return cachedItem as SpecifiedColorChannels;\n }\n if (!REG_COLOR.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n setCache(cacheKey, null);\n return res;\n }\n setCache(cacheKey, res);\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n let cs = '';\n let r = 0;\n let g = 0;\n let b = 0;\n let alpha = 0;\n // complement currentcolor as a missing color\n if (REG_CURRENT.test(value)) {\n if (format === VAL_SPEC) {\n setCache(cacheKey, value);\n return value;\n }\n // named-color\n } else if (/^[a-z]+$/.test(value)) {\n if (Object.hasOwn(NAMED_COLORS, value)) {\n if (format === VAL_SPEC) {\n setCache(cacheKey, value);\n return value;\n }\n [r, g, b] = NAMED_COLORS[\n value as keyof typeof NAMED_COLORS\n ] as TriColorChannels;\n alpha = 1;\n } else {\n switch (format) {\n case VAL_SPEC: {\n if (value === 'transparent') {\n setCache(cacheKey, value);\n return value;\n }\n const res = '';\n setCache(cacheKey, res);\n return res;\n }\n case VAL_MIX: {\n if (value === 'transparent') {\n const res: SpecifiedColorChannels = ['rgb', 0, 0, 0, 0];\n setCache(cacheKey, res);\n return res;\n }\n setCache(cacheKey, null);\n return new NullObject();\n }\n case VAL_COMP:\n default: {\n if (nullable && value !== 'transparent') {\n setCache(cacheKey, null);\n return new NullObject();\n }\n const res: SpecifiedColorChannels = ['rgb', 0, 0, 0, 0];\n setCache(cacheKey, res);\n return res;\n }\n }\n }\n // hex-color\n } else if (value[0] === '#') {\n [r, g, b, alpha] = convertHexToRgb(value);\n // hsl()\n } else if (value.startsWith('hsl')) {\n [, r, g, b, alpha] = parseHsl(value, opt) as ComputedColorChannels;\n // hwb()\n } else if (value.startsWith('hwb')) {\n [, r, g, b, alpha] = parseHwb(value, opt) as ComputedColorChannels;\n // lab(), lch()\n } else if (/^l(?:ab|ch)/.test(value)) {\n let x, y, z;\n if (value.startsWith('lab')) {\n [cs, x, y, z, alpha] = parseLab(value, opt) as ComputedColorChannels;\n } else {\n [cs, x, y, z, alpha] = parseLch(value, opt) as ComputedColorChannels;\n }\n if (REG_SPEC.test(format)) {\n const res: SpecifiedColorChannels = [cs, x, y, z, alpha];\n setCache(cacheKey, res);\n return res;\n }\n [r, g, b] = transformXyzD50ToRgb([x, y, z]);\n // oklab(), oklch()\n } else if (/^okl(?:ab|ch)/.test(value)) {\n let x, y, z;\n if (value.startsWith('oklab')) {\n [cs, x, y, z, alpha] = parseOklab(value, opt) as ComputedColorChannels;\n } else {\n [cs, x, y, z, alpha] = parseOklch(value, opt) as ComputedColorChannels;\n }\n if (REG_SPEC.test(format)) {\n const res: SpecifiedColorChannels = [cs, x, y, z, alpha];\n setCache(cacheKey, res);\n return res;\n }\n [r, g, b] = transformXyzToRgb([x, y, z]);\n // rgb()\n } else {\n [, r, g, b, alpha] = parseRgb(value, opt) as ComputedColorChannels;\n }\n if (format === VAL_MIX && colorSpace === 'srgb') {\n const res: SpecifiedColorChannels = [\n 'srgb',\n r / MAX_RGB,\n g / MAX_RGB,\n b / MAX_RGB,\n alpha\n ];\n setCache(cacheKey, res);\n return res;\n }\n const res: SpecifiedColorChannels = [\n 'rgb',\n Math.round(r),\n Math.round(g),\n Math.round(b),\n alpha\n ];\n setCache(cacheKey, res);\n return res;\n};\n\n/**\n * resolve color()\n * @param value - color function value\n * @param [opt] - options\n * @returns resolved color - [cs, v1, v2, v3, alpha], '(empty)', NullObject\n */\nexport const resolveColorFunc = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.toLowerCase().trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { colorSpace = '', format = '', nullable = false } = opt;\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'resolveColorFunc',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return cachedResult as NullObject;\n }\n const cachedItem = cachedResult.item;\n if (isString(cachedItem)) {\n return cachedItem as string;\n }\n return cachedItem as SpecifiedColorChannels;\n }\n if (!REG_FN_COLOR.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n setCache(cacheKey, null);\n return res;\n }\n setCache(cacheKey, res);\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n const [cs, v1, v2, v3, v4] = parseColorFunc(\n value,\n opt\n ) as SpecifiedColorChannels;\n if (REG_SPEC.test(format) || (format === VAL_MIX && cs === colorSpace)) {\n const res: SpecifiedColorChannels = [cs, v1, v2, v3, v4];\n setCache(cacheKey, res);\n return res;\n }\n const x = parseFloat(`${v1}`);\n const y = parseFloat(`${v2}`);\n const z = parseFloat(`${v3}`);\n const alpha = parseAlpha(`${v4}`);\n const [r, g, b] = transformXyzToRgb([x, y, z], true);\n const res: SpecifiedColorChannels = ['rgb', r, g, b, alpha];\n setCache(cacheKey, res);\n return res;\n};\n\n/**\n * convert color value to linear rgb\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels | NullObject - [r, g, b, alpha] r|g|b|alpha: 0..1\n */\nexport const convertColorToLinearRgb = (\n value: string,\n opt: {\n colorSpace?: string;\n format?: string;\n } = {}\n): ColorChannels | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { colorSpace = '', format = '' } = opt;\n let cs = '';\n let r, g, b, alpha, x, y, z;\n if (format === VAL_MIX) {\n let xyz;\n if (value.startsWith(FN_COLOR)) {\n xyz = parseColorFunc(value, opt);\n } else {\n xyz = parseColorValue(value, opt);\n }\n if (xyz instanceof NullObject) {\n return xyz;\n }\n [cs, x, y, z, alpha] = xyz as ComputedColorChannels;\n if (cs === colorSpace) {\n return [x, y, z, alpha];\n }\n [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true);\n } else if (value.startsWith(FN_COLOR)) {\n const [, val] = value.match(REG_FN_COLOR) as MatchedRegExp;\n const [cs] = val\n .replace('/', ' ')\n .split(/\\s+/) as StringColorSpacedChannels;\n if (cs === 'srgb-linear') {\n [, r, g, b, alpha] = resolveColorFunc(value, {\n format: VAL_COMP\n }) as ComputedColorChannels;\n } else {\n [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;\n [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true);\n }\n } else {\n [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels;\n [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true);\n }\n return [\n Math.min(Math.max(r, 0), 1),\n Math.min(Math.max(g, 0), 1),\n Math.min(Math.max(b, 0), 1),\n alpha\n ];\n};\n\n/**\n * convert color value to rgb\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels | NullObject\n * - [r, g, b, alpha] r|g|b: 0..255 alpha: 0..1\n */\nexport const convertColorToRgb = (\n value: string,\n opt: Options = {}\n): ColorChannels | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '' } = opt;\n let r, g, b, alpha;\n if (format === VAL_MIX) {\n let rgb;\n if (value.startsWith(FN_COLOR)) {\n rgb = resolveColorFunc(value, opt);\n } else {\n rgb = resolveColorValue(value, opt);\n }\n if (rgb instanceof NullObject) {\n return rgb;\n }\n [, r, g, b, alpha] = rgb as ComputedColorChannels;\n } else if (value.startsWith(FN_COLOR)) {\n const [, val] = value.match(REG_FN_COLOR) as MatchedRegExp;\n const [cs] = val\n .replace('/', ' ')\n .split(/\\s+/) as StringColorSpacedChannels;\n if (cs === 'srgb') {\n [, r, g, b, alpha] = resolveColorFunc(value, {\n format: VAL_COMP\n }) as ComputedColorChannels;\n r *= MAX_RGB;\n g *= MAX_RGB;\n b *= MAX_RGB;\n } else {\n [, r, g, b, alpha] = resolveColorFunc(value) as ComputedColorChannels;\n }\n } else if (/^(?:ok)?l(?:ab|ch)/.test(value)) {\n [r, g, b, alpha] = convertColorToLinearRgb(value) as ColorChannels;\n [r, g, b] = transformLinearRgbToRgb([r, g, b]);\n } else {\n [, r, g, b, alpha] = resolveColorValue(value, {\n format: VAL_COMP\n }) as ComputedColorChannels;\n }\n return [r, g, b, alpha];\n};\n\n/**\n * convert color value to xyz\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels | NullObject - [x, y, z, alpha]\n */\nexport const convertColorToXyz = (\n value: string,\n opt: Options = {}\n): ColorChannels | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { d50 = false, format = '' } = opt;\n let x, y, z, alpha;\n if (format === VAL_MIX) {\n let xyz;\n if (value.startsWith(FN_COLOR)) {\n xyz = parseColorFunc(value, opt);\n } else {\n xyz = parseColorValue(value, opt);\n }\n if (xyz instanceof NullObject) {\n return xyz;\n }\n [, x, y, z, alpha] = xyz as ComputedColorChannels;\n } else if (value.startsWith(FN_COLOR)) {\n const [, val] = value.match(REG_FN_COLOR) as MatchedRegExp;\n const [cs] = val\n .replace('/', ' ')\n .split(/\\s+/) as StringColorSpacedChannels;\n if (d50) {\n if (cs === 'xyz-d50') {\n [, x, y, z, alpha] = resolveColorFunc(value, {\n format: VAL_COMP\n }) as ComputedColorChannels;\n } else {\n [, x, y, z, alpha] = parseColorFunc(\n value,\n opt\n ) as ComputedColorChannels;\n }\n } else if (/^xyz(?:-d65)?$/.test(cs)) {\n [, x, y, z, alpha] = resolveColorFunc(value, {\n format: VAL_COMP\n }) as ComputedColorChannels;\n } else {\n [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;\n }\n } else {\n [, x, y, z, alpha] = parseColorValue(value, opt) as ComputedColorChannels;\n }\n return [x, y, z, alpha];\n};\n\n/**\n * convert color value to hsl\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels | NullObject - [h, s, l, alpha], hue may be powerless\n */\nexport const convertColorToHsl = (\n value: string,\n opt: Options = {}\n): ColorChannels | [number | string, number, number, number] | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '' } = opt;\n let h, s, l, alpha;\n if (REG_HSL.test(value)) {\n [, h, s, l, alpha] = parseHsl(value, {\n format: 'hsl'\n }) as ComputedColorChannels;\n if (format === 'hsl') {\n return [Math.round(h), Math.round(s), Math.round(l), alpha];\n }\n return [h, s, l, alpha];\n }\n let x, y, z;\n if (format === VAL_MIX) {\n let xyz;\n if (value.startsWith(FN_COLOR)) {\n xyz = parseColorFunc(value, opt);\n } else {\n xyz = parseColorValue(value, opt);\n }\n if (xyz instanceof NullObject) {\n return xyz;\n }\n [, x, y, z, alpha] = xyz as ComputedColorChannels;\n } else if (value.startsWith(FN_COLOR)) {\n [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;\n } else {\n [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels;\n }\n [h, s, l] = transformXyzToHsl([x, y, z], true) as TriColorChannels;\n if (format === 'hsl') {\n return [Math.round(h), Math.round(s), Math.round(l), alpha];\n }\n return [format === VAL_MIX && s === 0 ? NONE : h, s, l, alpha];\n};\n\n/**\n * convert color value to hwb\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels | NullObject - [h, w, b, alpha], hue may be powerless\n */\nexport const convertColorToHwb = (\n value: string,\n opt: Options = {}\n): ColorChannels | [number | string, number, number, number] | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '' } = opt;\n let h, w, b, alpha;\n if (REG_HWB.test(value)) {\n [, h, w, b, alpha] = parseHwb(value, {\n format: 'hwb'\n }) as ComputedColorChannels;\n if (format === 'hwb') {\n return [Math.round(h), Math.round(w), Math.round(b), alpha];\n }\n return [h, w, b, alpha];\n }\n let x, y, z;\n if (format === VAL_MIX) {\n let xyz;\n if (value.startsWith(FN_COLOR)) {\n xyz = parseColorFunc(value, opt);\n } else {\n xyz = parseColorValue(value, opt);\n }\n if (xyz instanceof NullObject) {\n return xyz;\n }\n [, x, y, z, alpha] = xyz as ComputedColorChannels;\n } else if (value.startsWith(FN_COLOR)) {\n [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;\n } else {\n [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels;\n }\n [h, w, b] = transformXyzToHwb([x, y, z], true) as TriColorChannels;\n if (format === 'hwb') {\n return [Math.round(h), Math.round(w), Math.round(b), alpha];\n }\n return [format === VAL_MIX && w + b >= 100 ? NONE : h, w, b, alpha];\n};\n\n/**\n * convert color value to lab\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels | NullObject - [l, a, b, alpha]\n */\nexport const convertColorToLab = (\n value: string,\n opt: Options = {}\n): ColorChannels | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '' } = opt;\n let l, a, b, alpha;\n if (REG_LAB.test(value)) {\n [, l, a, b, alpha] = parseLab(value, {\n format: VAL_COMP\n }) as ComputedColorChannels;\n return [l, a, b, alpha];\n }\n let x, y, z;\n if (format === VAL_MIX) {\n let xyz;\n opt.d50 = true;\n if (value.startsWith(FN_COLOR)) {\n xyz = parseColorFunc(value, opt);\n } else {\n xyz = parseColorValue(value, opt);\n }\n if (xyz instanceof NullObject) {\n return xyz;\n }\n [, x, y, z, alpha] = xyz as ComputedColorChannels;\n } else if (value.startsWith(FN_COLOR)) {\n [, x, y, z, alpha] = parseColorFunc(value, {\n d50: true\n }) as ComputedColorChannels;\n } else {\n [, x, y, z, alpha] = parseColorValue(value, {\n d50: true\n }) as ComputedColorChannels;\n }\n [l, a, b] = transformXyzD50ToLab([x, y, z], true);\n return [l, a, b, alpha];\n};\n\n/**\n * convert color value to lch\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels | NullObject - [l, c, h, alpha], hue may be powerless\n */\nexport const convertColorToLch = (\n value: string,\n opt: Options = {}\n): ColorChannels | [number, number, number | string, number] | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '' } = opt;\n let l, c, h, alpha;\n if (REG_LCH.test(value)) {\n [, l, c, h, alpha] = parseLch(value, {\n format: VAL_COMP\n }) as ComputedColorChannels;\n return [l, c, h, alpha];\n }\n let x, y, z;\n if (format === VAL_MIX) {\n let xyz;\n opt.d50 = true;\n if (value.startsWith(FN_COLOR)) {\n xyz = parseColorFunc(value, opt);\n } else {\n xyz = parseColorValue(value, opt);\n }\n if (xyz instanceof NullObject) {\n return xyz;\n }\n [, x, y, z, alpha] = xyz as ComputedColorChannels;\n } else if (value.startsWith(FN_COLOR)) {\n [, x, y, z, alpha] = parseColorFunc(value, {\n d50: true\n }) as ComputedColorChannels;\n } else {\n [, x, y, z, alpha] = parseColorValue(value, {\n d50: true\n }) as ComputedColorChannels;\n }\n [l, c, h] = transformXyzD50ToLch([x, y, z], true);\n return [l, c, format === VAL_MIX && c === 0 ? NONE : h, alpha];\n};\n\n/**\n * convert color value to oklab\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels | NullObject - [l, a, b, alpha]\n */\nexport const convertColorToOklab = (\n value: string,\n opt: Options = {}\n): ColorChannels | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '' } = opt;\n let l, a, b, alpha;\n if (REG_OKLAB.test(value)) {\n [, l, a, b, alpha] = parseOklab(value, {\n format: VAL_COMP\n }) as ComputedColorChannels;\n return [l, a, b, alpha];\n }\n let x, y, z;\n if (format === VAL_MIX) {\n let xyz;\n if (value.startsWith(FN_COLOR)) {\n xyz = parseColorFunc(value, opt);\n } else {\n xyz = parseColorValue(value, opt);\n }\n if (xyz instanceof NullObject) {\n return xyz;\n }\n [, x, y, z, alpha] = xyz as ComputedColorChannels;\n } else if (value.startsWith(FN_COLOR)) {\n [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;\n } else {\n [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels;\n }\n [l, a, b] = transformXyzToOklab([x, y, z], true);\n return [l, a, b, alpha];\n};\n\n/**\n * convert color value to oklch\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels | NullObject - [l, c, h, alpha], hue may be powerless\n */\nexport const convertColorToOklch = (\n value: string,\n opt: Options = {}\n): ColorChannels | [number, number, number | string, number] | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '' } = opt;\n let l, c, h, alpha;\n if (REG_OKLCH.test(value)) {\n [, l, c, h, alpha] = parseOklch(value, {\n format: VAL_COMP\n }) as ComputedColorChannels;\n return [l, c, h, alpha];\n }\n let x, y, z;\n if (format === VAL_MIX) {\n let xyz;\n if (value.startsWith(FN_COLOR)) {\n xyz = parseColorFunc(value, opt);\n } else {\n xyz = parseColorValue(value, opt);\n }\n if (xyz instanceof NullObject) {\n return xyz;\n }\n [, x, y, z, alpha] = xyz as ComputedColorChannels;\n } else if (value.startsWith(FN_COLOR)) {\n [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;\n } else {\n [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels;\n }\n [l, c, h] = transformXyzToOklch([x, y, z], true) as TriColorChannels;\n return [l, c, format === VAL_MIX && c === 0 ? NONE : h, alpha];\n};\n\n/**\n * resolve color-mix()\n * @param value - color-mix color value\n * @param [opt] - options\n * @returns resolved color - [cs, v1, v2, v3, alpha], '(empty)'\n */\nexport const resolveColorMix = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.toLowerCase().trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '', nullable = false } = opt;\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'resolveColorMix',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return cachedResult as NullObject;\n }\n const cachedItem = cachedResult.item;\n if (isString(cachedItem)) {\n return cachedItem as string;\n }\n return cachedItem as SpecifiedColorChannels;\n }\n const nestedItems = [];\n let colorSpace = '';\n let hueArc = '';\n let colorA = '';\n let pctA = '';\n let colorB = '';\n let pctB = '';\n let parsed = false;\n if (!REG_MIX.test(value)) {\n // nested color-mix()\n if (value.startsWith(FN_MIX) && REG_MIX_NEST.test(value)) {\n const regColorSpace = new RegExp(`^(?:${CS_RGB}|${CS_XYZ})$`);\n const items = value.match(REG_MIX_NEST) as RegExpMatchArray;\n for (const item of items) {\n if (item) {\n let val = resolveColorMix(item, {\n format: format === VAL_SPEC ? format : VAL_COMP\n }) as ComputedColorChannels | string;\n // computed value\n if (Array.isArray(val)) {\n const [cs, v1, v2, v3, v4] = val as ComputedColorChannels;\n if (v1 === 0 && v2 === 0 && v3 === 0 && v4 === 0) {\n value = '';\n break;\n }\n if (regColorSpace.test(cs)) {\n if (v4 === 1) {\n val = `color(${cs} ${v1} ${v2} ${v3})`;\n } else {\n val = `color(${cs} ${v1} ${v2} ${v3} / ${v4})`;\n }\n } else if (v4 === 1) {\n val = `${cs}(${v1} ${v2} ${v3})`;\n } else {\n val = `${cs}(${v1} ${v2} ${v3} / ${v4})`;\n }\n } else if (!REG_MIX.test(val)) {\n value = '';\n break;\n }\n nestedItems.push(val);\n value = value.replace(item, val);\n }\n }\n if (!value) {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n // contains light-dark()\n } else if (\n value.startsWith(FN_MIX) &&\n value.endsWith(')') &&\n value.includes(FN_LIGHT_DARK)\n ) {\n const regColorSpace = new RegExp(`in\\\\s+(${CS_MIX})`);\n const colorParts = value.replace(FN_MIX, '').replace(/\\)$/, '');\n const [csPart = '', partA = '', partB = ''] = splitValue(colorParts, {\n delimiter: ','\n });\n const [colorPartA = '', pctPartA = ''] = splitValue(partA);\n const [colorPartB = '', pctPartB = ''] = splitValue(partB);\n const specifiedColorA = resolveColor(colorPartA, {\n format: VAL_SPEC\n }) as string;\n const specifiedColorB = resolveColor(colorPartB, {\n format: VAL_SPEC\n }) as string;\n if (regColorSpace.test(csPart) && specifiedColorA && specifiedColorB) {\n if (format === VAL_SPEC) {\n const [, cs] = csPart.match(regColorSpace) as MatchedRegExp;\n if (REG_CS_HUE.test(cs)) {\n [, colorSpace, hueArc] = cs.match(REG_CS_HUE) as MatchedRegExp;\n } else {\n colorSpace = cs;\n }\n colorA = specifiedColorA;\n if (pctPartA) {\n pctA = pctPartA;\n }\n colorB = specifiedColorB;\n if (pctPartB) {\n pctB = pctPartB;\n }\n value = value\n .replace(colorPartA, specifiedColorA)\n .replace(colorPartB, specifiedColorB);\n parsed = true;\n } else {\n const resolvedColorA = resolveColor(colorPartA, opt);\n const resolvedColorB = resolveColor(colorPartB, opt);\n if (isString(resolvedColorA) && isString(resolvedColorB)) {\n value = value\n .replace(colorPartA, resolvedColorA)\n .replace(colorPartB, resolvedColorB);\n }\n }\n } else {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n } else {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n }\n if (nestedItems.length && format === VAL_SPEC) {\n const regColorSpace = new RegExp(`^color-mix\\\\(\\\\s*in\\\\s+(${CS_MIX})\\\\s*,`);\n const [, cs] = value.match(regColorSpace) as MatchedRegExp;\n if (REG_CS_HUE.test(cs)) {\n [, colorSpace, hueArc] = cs.match(REG_CS_HUE) as MatchedRegExp;\n } else {\n colorSpace = cs;\n }\n if (nestedItems.length === 2) {\n let [itemA, itemB] = nestedItems as [string, string];\n itemA = itemA.replace(/(?=[()])/g, '\\\\');\n itemB = itemB.replace(/(?=[()])/g, '\\\\');\n const regA = new RegExp(`(${itemA})(?:\\\\s+(${PCT}))?`);\n const regB = new RegExp(`(${itemB})(?:\\\\s+(${PCT}))?`);\n [, colorA, pctA] = value.match(regA) as MatchedRegExp;\n [, colorB, pctB] = value.match(regB) as MatchedRegExp;\n } else {\n let [item] = nestedItems as [string];\n item = item.replace(/(?=[()])/g, '\\\\');\n const itemPart = `${item}(?:\\\\s+${PCT})?`;\n const itemPartCapt = `(${item})(?:\\\\s+(${PCT}))?`;\n const regItemPart = new RegExp(`^${itemPartCapt}$`);\n const regLastItem = new RegExp(`${itemPartCapt}\\\\s*\\\\)$`);\n const regColorPart = new RegExp(`^(${SYN_COLOR_TYPE})(?:\\\\s+(${PCT}))?$`);\n // item is at the end\n if (regLastItem.test(value)) {\n const reg = new RegExp(\n `(${SYN_MIX_PART})\\\\s*,\\\\s*(${itemPart})\\\\s*\\\\)$`\n );\n const [, colorPartA, colorPartB] = value.match(reg) as MatchedRegExp;\n [, colorA, pctA] = colorPartA.match(regColorPart) as MatchedRegExp;\n [, colorB, pctB] = colorPartB.match(regItemPart) as MatchedRegExp;\n } else {\n const reg = new RegExp(\n `(${itemPart})\\\\s*,\\\\s*(${SYN_MIX_PART})\\\\s*\\\\)$`\n );\n const [, colorPartA, colorPartB] = value.match(reg) as MatchedRegExp;\n [, colorA, pctA] = colorPartA.match(regItemPart) as MatchedRegExp;\n [, colorB, pctB] = colorPartB.match(regColorPart) as MatchedRegExp;\n }\n }\n } else if (!parsed) {\n const [, cs, colorPartA, colorPartB] = value.match(\n REG_MIX_CAPT\n ) as MatchedRegExp;\n const reg = new RegExp(`^(${SYN_COLOR_TYPE})(?:\\\\s+(${PCT}))?$`);\n [, colorA, pctA] = colorPartA.match(reg) as MatchedRegExp;\n [, colorB, pctB] = colorPartB.match(reg) as MatchedRegExp;\n if (REG_CS_HUE.test(cs)) {\n [, colorSpace, hueArc] = cs.match(REG_CS_HUE) as MatchedRegExp;\n } else {\n colorSpace = cs;\n }\n }\n // normalize percentages and set multipler\n let pA, pB, m;\n if (pctA && pctB) {\n const p1 = parseFloat(pctA) / MAX_PCT;\n const p2 = parseFloat(pctB) / MAX_PCT;\n if (p1 < 0 || p1 > 1 || p2 < 0 || p2 > 1 || (p1 === 0 && p2 === 0)) {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n const factor = p1 + p2;\n pA = p1 / factor;\n pB = p2 / factor;\n m = factor < 1 ? factor : 1;\n } else {\n if (pctA) {\n pA = parseFloat(pctA) / MAX_PCT;\n if (pA < 0 || pA > 1) {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n pB = 1 - pA;\n } else if (pctB) {\n pB = parseFloat(pctB) / MAX_PCT;\n if (pB < 0 || pB > 1) {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n pA = 1 - pB;\n } else {\n pA = HALF;\n pB = HALF;\n }\n m = 1;\n }\n if (colorSpace === 'xyz') {\n colorSpace = 'xyz-d65';\n }\n // specified value\n if (format === VAL_SPEC) {\n let valueA = '';\n let valueB = '';\n if (colorA.startsWith(FN_MIX) || colorA.startsWith(FN_LIGHT_DARK)) {\n valueA = colorA;\n } else if (colorA.startsWith(FN_COLOR)) {\n const [cs, v1, v2, v3, v4] = parseColorFunc(\n colorA,\n opt\n ) as SpecifiedColorChannels;\n if (v4 === 1) {\n valueA = `color(${cs} ${v1} ${v2} ${v3})`;\n } else {\n valueA = `color(${cs} ${v1} ${v2} ${v3} / ${v4})`;\n }\n } else {\n const val = parseColorValue(colorA, opt);\n if (Array.isArray(val)) {\n const [cs, v1, v2, v3, v4] = val;\n if (v4 === 1) {\n if (cs === 'rgb') {\n valueA = `${cs}(${v1}, ${v2}, ${v3})`;\n } else {\n valueA = `${cs}(${v1} ${v2} ${v3})`;\n }\n } else if (cs === 'rgb') {\n valueA = `${cs}a(${v1}, ${v2}, ${v3}, ${v4})`;\n } else {\n valueA = `${cs}(${v1} ${v2} ${v3} / ${v4})`;\n }\n } else {\n if (!isString(val) || !val) {\n setCache(cacheKey, '');\n return '';\n }\n valueA = val;\n }\n }\n if (colorB.startsWith(FN_MIX) || colorB.startsWith(FN_LIGHT_DARK)) {\n valueB = colorB;\n } else if (colorB.startsWith(FN_COLOR)) {\n const [cs, v1, v2, v3, v4] = parseColorFunc(\n colorB,\n opt\n ) as SpecifiedColorChannels;\n if (v4 === 1) {\n valueB = `color(${cs} ${v1} ${v2} ${v3})`;\n } else {\n valueB = `color(${cs} ${v1} ${v2} ${v3} / ${v4})`;\n }\n } else {\n const val = parseColorValue(colorB, opt);\n if (Array.isArray(val)) {\n const [cs, v1, v2, v3, v4] = val;\n if (v4 === 1) {\n if (cs === 'rgb') {\n valueB = `${cs}(${v1}, ${v2}, ${v3})`;\n } else {\n valueB = `${cs}(${v1} ${v2} ${v3})`;\n }\n } else if (cs === 'rgb') {\n valueB = `${cs}a(${v1}, ${v2}, ${v3}, ${v4})`;\n } else {\n valueB = `${cs}(${v1} ${v2} ${v3} / ${v4})`;\n }\n } else {\n if (!isString(val) || !val) {\n setCache(cacheKey, '');\n return '';\n }\n valueB = val;\n }\n }\n if (pctA && pctB) {\n valueA += ` ${parseFloat(pctA)}%`;\n valueB += ` ${parseFloat(pctB)}%`;\n } else if (pctA) {\n const pA = parseFloat(pctA);\n if (pA !== MAX_PCT * HALF) {\n valueA += ` ${pA}%`;\n }\n } else if (pctB) {\n const pA = MAX_PCT - parseFloat(pctB);\n if (pA !== MAX_PCT * HALF) {\n valueA += ` ${pA}%`;\n }\n }\n if (hueArc) {\n const res = `color-mix(in ${colorSpace} ${hueArc} hue, ${valueA}, ${valueB})`;\n setCache(cacheKey, res);\n return res;\n } else {\n const res = `color-mix(in ${colorSpace}, ${valueA}, ${valueB})`;\n setCache(cacheKey, res);\n return res;\n }\n }\n let r = 0;\n let g = 0;\n let b = 0;\n let alpha = 0;\n // in srgb, srgb-linear\n if (/^srgb(?:-linear)?$/.test(colorSpace)) {\n let rgbA, rgbB;\n if (colorSpace === 'srgb') {\n if (REG_CURRENT.test(colorA)) {\n rgbA = [NONE, NONE, NONE, NONE];\n } else {\n rgbA = convertColorToRgb(colorA, {\n colorSpace,\n format: VAL_MIX\n });\n }\n if (REG_CURRENT.test(colorB)) {\n rgbB = [NONE, NONE, NONE, NONE];\n } else {\n rgbB = convertColorToRgb(colorB, {\n colorSpace,\n format: VAL_MIX\n });\n }\n } else {\n if (REG_CURRENT.test(colorA)) {\n rgbA = [NONE, NONE, NONE, NONE];\n } else {\n rgbA = convertColorToLinearRgb(colorA, {\n colorSpace,\n format: VAL_MIX\n });\n }\n if (REG_CURRENT.test(colorB)) {\n rgbB = [NONE, NONE, NONE, NONE];\n } else {\n rgbB = convertColorToLinearRgb(colorB, {\n colorSpace,\n format: VAL_MIX\n });\n }\n }\n if (rgbA instanceof NullObject || rgbB instanceof NullObject) {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n const [rrA, ggA, bbA, aaA] = rgbA as NumStrColorChannels;\n const [rrB, ggB, bbB, aaB] = rgbB as NumStrColorChannels;\n const rNone = rrA === NONE && rrB === NONE;\n const gNone = ggA === NONE && ggB === NONE;\n const bNone = bbA === NONE && bbB === NONE;\n const alphaNone = aaA === NONE && aaB === NONE;\n const [[rA, gA, bA, alphaA], [rB, gB, bB, alphaB]] =\n normalizeColorComponents(\n [rrA, ggA, bbA, aaA],\n [rrB, ggB, bbB, aaB],\n true\n );\n const factorA = alphaA * pA;\n const factorB = alphaB * pB;\n alpha = factorA + factorB;\n if (alpha === 0) {\n r = rA * pA + rB * pB;\n g = gA * pA + gB * pB;\n b = bA * pA + bB * pB;\n } else {\n r = (rA * factorA + rB * factorB) / alpha;\n g = (gA * factorA + gB * factorB) / alpha;\n b = (bA * factorA + bB * factorB) / alpha;\n alpha = parseFloat(alpha.toFixed(3));\n }\n if (format === VAL_COMP) {\n const res: SpecifiedColorChannels = [\n colorSpace,\n rNone ? NONE : roundToPrecision(r, HEX),\n gNone ? NONE : roundToPrecision(g, HEX),\n bNone ? NONE : roundToPrecision(b, HEX),\n alphaNone ? NONE : alpha * m\n ];\n setCache(cacheKey, res);\n return res;\n }\n r *= MAX_RGB;\n g *= MAX_RGB;\n b *= MAX_RGB;\n // in xyz, xyz-d65, xyz-d50\n } else if (REG_CS_XYZ.test(colorSpace)) {\n let xyzA, xyzB;\n if (REG_CURRENT.test(colorA)) {\n xyzA = [NONE, NONE, NONE, NONE];\n } else {\n xyzA = convertColorToXyz(colorA, {\n colorSpace,\n d50: colorSpace === 'xyz-d50',\n format: VAL_MIX\n });\n }\n if (REG_CURRENT.test(colorB)) {\n xyzB = [NONE, NONE, NONE, NONE];\n } else {\n xyzB = convertColorToXyz(colorB, {\n colorSpace,\n d50: colorSpace === 'xyz-d50',\n format: VAL_MIX\n });\n }\n if (xyzA instanceof NullObject || xyzB instanceof NullObject) {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n const [xxA, yyA, zzA, aaA] = xyzA;\n const [xxB, yyB, zzB, aaB] = xyzB;\n const xNone = xxA === NONE && xxB === NONE;\n const yNone = yyA === NONE && yyB === NONE;\n const zNone = zzA === NONE && zzB === NONE;\n const alphaNone = aaA === NONE && aaB === NONE;\n const [[xA, yA, zA, alphaA], [xB, yB, zB, alphaB]] =\n normalizeColorComponents(\n [xxA, yyA, zzA, aaA],\n [xxB, yyB, zzB, aaB],\n true\n );\n const factorA = alphaA * pA;\n const factorB = alphaB * pB;\n alpha = factorA + factorB;\n let x, y, z;\n if (alpha === 0) {\n x = xA * pA + xB * pB;\n y = yA * pA + yB * pB;\n z = zA * pA + zB * pB;\n } else {\n x = (xA * factorA + xB * factorB) / alpha;\n y = (yA * factorA + yB * factorB) / alpha;\n z = (zA * factorA + zB * factorB) / alpha;\n alpha = parseFloat(alpha.toFixed(3));\n }\n if (format === VAL_COMP) {\n const res: SpecifiedColorChannels = [\n colorSpace,\n xNone ? NONE : roundToPrecision(x, HEX),\n yNone ? NONE : roundToPrecision(y, HEX),\n zNone ? NONE : roundToPrecision(z, HEX),\n alphaNone ? NONE : alpha * m\n ];\n setCache(cacheKey, res);\n return res;\n }\n if (colorSpace === 'xyz-d50') {\n [r, g, b] = transformXyzD50ToRgb([x, y, z], true);\n } else {\n [r, g, b] = transformXyzToRgb([x, y, z], true);\n }\n // in hsl, hwb\n } else if (/^h(?:sl|wb)$/.test(colorSpace)) {\n let hslA, hslB;\n if (colorSpace === 'hsl') {\n if (REG_CURRENT.test(colorA)) {\n hslA = [NONE, NONE, NONE, NONE];\n } else {\n hslA = convertColorToHsl(colorA, {\n colorSpace,\n format: VAL_MIX\n });\n }\n if (REG_CURRENT.test(colorB)) {\n hslB = [NONE, NONE, NONE, NONE];\n } else {\n hslB = convertColorToHsl(colorB, {\n colorSpace,\n format: VAL_MIX\n });\n }\n } else {\n if (REG_CURRENT.test(colorA)) {\n hslA = [NONE, NONE, NONE, NONE];\n } else {\n hslA = convertColorToHwb(colorA, {\n colorSpace,\n format: VAL_MIX\n });\n }\n if (REG_CURRENT.test(colorB)) {\n hslB = [NONE, NONE, NONE, NONE];\n } else {\n hslB = convertColorToHwb(colorB, {\n colorSpace,\n format: VAL_MIX\n });\n }\n }\n if (hslA instanceof NullObject || hslB instanceof NullObject) {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n const [hhA, ssA, llA, aaA] = hslA;\n const [hhB, ssB, llB, aaB] = hslB;\n const alphaNone = aaA === NONE && aaB === NONE;\n let [[hA, sA, lA, alphaA], [hB, sB, lB, alphaB]] = normalizeColorComponents(\n [hhA, ssA, llA, aaA],\n [hhB, ssB, llB, aaB],\n true\n );\n if (hueArc) {\n [hA, hB] = interpolateHue(hA, hB, hueArc);\n }\n const factorA = alphaA * pA;\n const factorB = alphaB * pB;\n alpha = factorA + factorB;\n const h = (hA * pA + hB * pB) % DEG;\n let s, l;\n if (alpha === 0) {\n s = sA * pA + sB * pB;\n l = lA * pA + lB * pB;\n } else {\n s = (sA * factorA + sB * factorB) / alpha;\n l = (lA * factorA + lB * factorB) / alpha;\n alpha = parseFloat(alpha.toFixed(3));\n }\n [r, g, b] = convertColorToRgb(\n `${colorSpace}(${h} ${s} ${l})`\n ) as ColorChannels;\n if (format === VAL_COMP) {\n const res: SpecifiedColorChannels = [\n 'srgb',\n roundToPrecision(r / MAX_RGB, HEX),\n roundToPrecision(g / MAX_RGB, HEX),\n roundToPrecision(b / MAX_RGB, HEX),\n alphaNone ? NONE : alpha * m\n ];\n setCache(cacheKey, res);\n return res;\n }\n // in lch, oklch\n } else if (/^(?:ok)?lch$/.test(colorSpace)) {\n let lchA, lchB;\n if (colorSpace === 'lch') {\n if (REG_CURRENT.test(colorA)) {\n lchA = [NONE, NONE, NONE, NONE];\n } else {\n lchA = convertColorToLch(colorA, {\n colorSpace,\n format: VAL_MIX\n });\n }\n if (REG_CURRENT.test(colorB)) {\n lchB = [NONE, NONE, NONE, NONE];\n } else {\n lchB = convertColorToLch(colorB, {\n colorSpace,\n format: VAL_MIX\n });\n }\n } else {\n if (REG_CURRENT.test(colorA)) {\n lchA = [NONE, NONE, NONE, NONE];\n } else {\n lchA = convertColorToOklch(colorA, {\n colorSpace,\n format: VAL_MIX\n });\n }\n if (REG_CURRENT.test(colorB)) {\n lchB = [NONE, NONE, NONE, NONE];\n } else {\n lchB = convertColorToOklch(colorB, {\n colorSpace,\n format: VAL_MIX\n });\n }\n }\n if (lchA instanceof NullObject || lchB instanceof NullObject) {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n const [llA, ccA, hhA, aaA] = lchA;\n const [llB, ccB, hhB, aaB] = lchB;\n const lNone = llA === NONE && llB === NONE;\n const cNone = ccA === NONE && ccB === NONE;\n const hNone = hhA === NONE && hhB === NONE;\n const alphaNone = aaA === NONE && aaB === NONE;\n let [[lA, cA, hA, alphaA], [lB, cB, hB, alphaB]] = normalizeColorComponents(\n [llA, ccA, hhA, aaA],\n [llB, ccB, hhB, aaB],\n true\n );\n if (hueArc) {\n [hA, hB] = interpolateHue(hA, hB, hueArc);\n }\n const factorA = alphaA * pA;\n const factorB = alphaB * pB;\n alpha = factorA + factorB;\n const h = (hA * pA + hB * pB) % DEG;\n let l, c;\n if (alpha === 0) {\n l = lA * pA + lB * pB;\n c = cA * pA + cB * pB;\n } else {\n l = (lA * factorA + lB * factorB) / alpha;\n c = (cA * factorA + cB * factorB) / alpha;\n alpha = parseFloat(alpha.toFixed(3));\n }\n if (format === VAL_COMP) {\n const res: SpecifiedColorChannels = [\n colorSpace,\n lNone ? NONE : roundToPrecision(l, HEX),\n cNone ? NONE : roundToPrecision(c, HEX),\n hNone ? NONE : roundToPrecision(h, HEX),\n alphaNone ? NONE : alpha * m\n ];\n setCache(cacheKey, res);\n return res;\n }\n [, r, g, b] = resolveColorValue(\n `${colorSpace}(${l} ${c} ${h})`\n ) as ComputedColorChannels;\n // in lab, oklab\n } else {\n let labA, labB;\n if (colorSpace === 'lab') {\n if (REG_CURRENT.test(colorA)) {\n labA = [NONE, NONE, NONE, NONE];\n } else {\n labA = convertColorToLab(colorA, {\n colorSpace,\n format: VAL_MIX\n });\n }\n if (REG_CURRENT.test(colorB)) {\n labB = [NONE, NONE, NONE, NONE];\n } else {\n labB = convertColorToLab(colorB, {\n colorSpace,\n format: VAL_MIX\n });\n }\n } else {\n if (REG_CURRENT.test(colorA)) {\n labA = [NONE, NONE, NONE, NONE];\n } else {\n labA = convertColorToOklab(colorA, {\n colorSpace,\n format: VAL_MIX\n });\n }\n if (REG_CURRENT.test(colorB)) {\n labB = [NONE, NONE, NONE, NONE];\n } else {\n labB = convertColorToOklab(colorB, {\n colorSpace,\n format: VAL_MIX\n });\n }\n }\n if (labA instanceof NullObject || labB instanceof NullObject) {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n const [llA, aaA, bbA, alA] = labA;\n const [llB, aaB, bbB, alB] = labB;\n const lNone = llA === NONE && llB === NONE;\n const aNone = aaA === NONE && aaB === NONE;\n const bNone = bbA === NONE && bbB === NONE;\n const alphaNone = alA === NONE && alB === NONE;\n const [[lA, aA, bA, alphaA], [lB, aB, bB, alphaB]] =\n normalizeColorComponents(\n [llA, aaA, bbA, alA],\n [llB, aaB, bbB, alB],\n true\n );\n const factorA = alphaA * pA;\n const factorB = alphaB * pB;\n alpha = factorA + factorB;\n let l, aO, bO;\n if (alpha === 0) {\n l = lA * pA + lB * pB;\n aO = aA * pA + aB * pB;\n bO = bA * pA + bB * pB;\n } else {\n l = (lA * factorA + lB * factorB) / alpha;\n aO = (aA * factorA + aB * factorB) / alpha;\n bO = (bA * factorA + bB * factorB) / alpha;\n alpha = parseFloat(alpha.toFixed(3));\n }\n if (format === VAL_COMP) {\n const res: SpecifiedColorChannels = [\n colorSpace,\n lNone ? NONE : roundToPrecision(l, HEX),\n aNone ? NONE : roundToPrecision(aO, HEX),\n bNone ? NONE : roundToPrecision(bO, HEX),\n alphaNone ? NONE : alpha * m\n ];\n setCache(cacheKey, res);\n return res;\n }\n [, r, g, b] = resolveColorValue(\n `${colorSpace}(${l} ${aO} ${bO})`\n ) as ComputedColorChannels;\n }\n const res: SpecifiedColorChannels = [\n 'rgb',\n Math.round(r),\n Math.round(g),\n Math.round(b),\n parseFloat((alpha * m).toFixed(3))\n ];\n setCache(cacheKey, res);\n return res;\n};\n","/**\n * css-var\n */\n\nimport { CSSToken, TokenType, tokenize } from '@csstools/css-tokenizer';\nimport {\n CacheItem,\n NullObject,\n createCacheKey,\n getCache,\n setCache\n} from './cache';\nimport { isString } from './common';\nimport { cssCalc } from './css-calc';\nimport { isColor } from './util';\nimport { Options } from './typedef';\n\n/* constants */\nimport { FN_VAR, SYN_FN_CALC, SYN_FN_VAR, VAL_SPEC } from './constant';\nconst {\n CloseParen: PAREN_CLOSE,\n Comment: COMMENT,\n EOF,\n Ident: IDENT,\n Whitespace: W_SPACE\n} = TokenType;\nconst NAMESPACE = 'css-var';\n\n/* regexp */\nconst REG_FN_CALC = new RegExp(SYN_FN_CALC);\nconst REG_FN_VAR = new RegExp(SYN_FN_VAR);\n\n/**\n * resolve custom property\n * @param tokens - CSS tokens\n * @param [opt] - options\n * @returns result - [tokens, resolvedValue]\n */\nexport function resolveCustomProperty(\n tokens: CSSToken[],\n opt: Options = {}\n): [CSSToken[], string] {\n if (!Array.isArray(tokens)) {\n throw new TypeError(`${tokens} is not an array.`);\n }\n const { customProperty = {} } = opt;\n const items: string[] = [];\n while (tokens.length) {\n const token = tokens.shift();\n if (!Array.isArray(token)) {\n throw new TypeError(`${token} is not an array.`);\n }\n const [type, value] = token as [TokenType, string];\n // end of var()\n if (type === PAREN_CLOSE) {\n break;\n }\n // nested var()\n if (value === FN_VAR) {\n const [restTokens, item] = resolveCustomProperty(tokens, opt);\n tokens = restTokens;\n if (item) {\n items.push(item);\n }\n } else if (type === IDENT) {\n if (value.startsWith('--')) {\n let item;\n if (Object.hasOwn(customProperty, value)) {\n item = customProperty[value] as string;\n } else if (typeof customProperty.callback === 'function') {\n item = customProperty.callback(value);\n }\n if (item) {\n items.push(item);\n }\n } else if (value) {\n items.push(value);\n }\n }\n }\n let resolveAsColor = false;\n if (items.length > 1) {\n const lastValue = items[items.length - 1];\n resolveAsColor = isColor(lastValue);\n }\n let resolvedValue = '';\n for (let item of items) {\n item = item.trim();\n if (REG_FN_VAR.test(item)) {\n // recurse resolveVar()\n const resolvedItem = resolveVar(item, opt);\n if (isString(resolvedItem)) {\n if (resolveAsColor) {\n if (isColor(resolvedItem)) {\n resolvedValue = resolvedItem;\n }\n } else {\n resolvedValue = resolvedItem;\n }\n }\n } else if (REG_FN_CALC.test(item)) {\n item = cssCalc(item, opt);\n if (resolveAsColor) {\n if (isColor(item)) {\n resolvedValue = item;\n }\n } else {\n resolvedValue = item;\n }\n } else if (\n item &&\n !/^(?:inherit|initial|revert(?:-layer)?|unset)$/.test(item)\n ) {\n if (resolveAsColor) {\n if (isColor(item)) {\n resolvedValue = item;\n }\n } else {\n resolvedValue = item;\n }\n }\n if (resolvedValue) {\n break;\n }\n }\n return [tokens, resolvedValue];\n}\n\n/**\n * parse tokens\n * @param tokens - CSS tokens\n * @param [opt] - options\n * @returns parsed tokens\n */\nexport function parseTokens(\n tokens: CSSToken[],\n opt: Options = {}\n): string[] | NullObject {\n const res: string[] = [];\n while (tokens.length) {\n const token = tokens.shift();\n const [type = '', value = ''] = token as [TokenType, string];\n if (value === FN_VAR) {\n const [restTokens, resolvedValue] = resolveCustomProperty(tokens, opt);\n if (!resolvedValue) {\n return new NullObject();\n }\n tokens = restTokens;\n res.push(resolvedValue);\n } else {\n switch (type) {\n case PAREN_CLOSE: {\n if (res.length) {\n const lastValue = res[res.length - 1];\n if (lastValue === ' ') {\n res.splice(-1, 1, value);\n } else {\n res.push(value);\n }\n } else {\n res.push(value);\n }\n break;\n }\n case W_SPACE: {\n if (res.length) {\n const lastValue = res[res.length - 1];\n if (\n isString(lastValue) &&\n !lastValue.endsWith('(') &&\n lastValue !== ' '\n ) {\n res.push(value);\n }\n }\n break;\n }\n default: {\n if (type !== COMMENT && type !== EOF) {\n res.push(value);\n }\n }\n }\n }\n }\n return res;\n}\n\n/**\n * resolve CSS var()\n * @param value - CSS value including var()\n * @param [opt] - options\n * @returns resolved value\n */\nexport function resolveVar(\n value: string,\n opt: Options = {}\n): string | NullObject {\n const { format = '' } = opt;\n if (isString(value)) {\n if (!REG_FN_VAR.test(value) || format === VAL_SPEC) {\n return value;\n }\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'resolveVar',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return cachedResult as NullObject;\n }\n return cachedResult.item as string;\n }\n const tokens = tokenize({ css: value });\n const values = parseTokens(tokens, opt);\n if (Array.isArray(values)) {\n let color = values.join('');\n if (REG_FN_CALC.test(color)) {\n color = cssCalc(color, opt);\n }\n setCache(cacheKey, color);\n return color;\n } else {\n setCache(cacheKey, null);\n return new NullObject();\n }\n}\n\n/**\n * CSS var()\n * @param value - CSS value including var()\n * @param [opt] - options\n * @returns resolved value\n */\nexport const cssVar = (value: string, opt: Options = {}): string => {\n const resolvedValue = resolveVar(value, opt);\n if (isString(resolvedValue)) {\n return resolvedValue;\n }\n return '';\n};\n","function multiplyMatrices(t,n){return[t[0]*n[0]+t[1]*n[1]+t[2]*n[2],t[3]*n[0]+t[4]*n[1]+t[5]*n[2],t[6]*n[0]+t[7]*n[1]+t[8]*n[2]]}const t=[.955473421488075,-.02309845494876471,.06325924320057072,-.0283697093338637,1.0099953980813041,.021041441191917323,.012314014864481998,-.020507649298898964,1.330365926242124];\n/**\n * Bradford chromatic adaptation from D50 to D65\n *\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n */function D50_to_D65(n){return multiplyMatrices(t,n)}const n=[1.0479297925449969,.022946870601609652,-.05019226628920524,.02962780877005599,.9904344267538799,-.017073799063418826,-.009243040646204504,.015055191490298152,.7518742814281371];\n/**\n * Bradford chromatic adaptation from D65 to D50\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n * @see http://www.brucelindbloom.com/index.html?Eqn_ChromAdapt.html\n */function D65_to_D50(t){return multiplyMatrices(n,t)}\n/**\n * @param {number} hue - Hue as degrees 0..360\n * @param {number} sat - Saturation as percentage 0..100\n * @param {number} light - Lightness as percentage 0..100\n * @return {number[]} Array of sRGB components; in-gamut colors in range [0..1]\n *\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/hslToRgb.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n * @see https://github.com/w3c/csswg-drafts/blob/main/css-color-4/hslToRgb.js\n */function HSL_to_sRGB(t){let n=t[0]%360;const _=t[1]/100,o=t[2]/100;return n<0&&(n+=360),[HSL_to_sRGB_channel(0,n,_,o),HSL_to_sRGB_channel(8,n,_,o),HSL_to_sRGB_channel(4,n,_,o)]}function HSL_to_sRGB_channel(t,n,_,o){const e=(t+n/30)%12;return o-_*Math.min(o,1-o)*Math.max(-1,Math.min(e-3,9-e,1))}\n/**\n * @param {number} hue - Hue as degrees 0..360\n * @param {number} white - Whiteness as percentage 0..100\n * @param {number} black - Blackness as percentage 0..100\n * @return {number[]} Array of RGB components 0..1\n *\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/hwbToRgb.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n * @see https://github.com/w3c/csswg-drafts/blob/main/css-color-4/hwbToRgb.js\n */function HWB_to_sRGB(t){const n=t[0],_=t[1]/100,o=t[2]/100;if(_+o>=1){const t=_/(_+o);return[t,t,t]}const e=HSL_to_sRGB([n,100,50]),a=1-_-o;return[e[0]*a+_,e[1]*a+_,e[2]*a+_]}\n/**\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n */function LCH_to_Lab(t){const n=t[2]*Math.PI/180;return[t[0],t[1]*Math.cos(n),t[1]*Math.sin(n)]}\n/**\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n */function Lab_to_LCH(t){const n=Math.sqrt(Math.pow(t[1],2)+Math.pow(t[2],2));let _=180*Math.atan2(t[2],t[1])/Math.PI;return _<0&&(_+=360),n<=.0015&&(_=NaN),[t[0],n,_]}const _=[.3457/.3585,1,.2958/.3585];\n/**\n * Convert Lab to D50-adapted XYZ\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n * @see http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n */function Lab_to_XYZ(t){const n=24389/27,o=216/24389,e=(t[0]+16)/116,a=t[1]/500+e,r=e-t[2]/200;return[(Math.pow(a,3)>o?Math.pow(a,3):(116*a-16)/n)*_[0],(t[0]>8?Math.pow((t[0]+16)/116,3):t[0]/n)*_[1],(Math.pow(r,3)>o?Math.pow(r,3):(116*r-16)/n)*_[2]]}\n/**\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n * @see https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js\n */function OKLCH_to_OKLab(t){const n=t[2]*Math.PI/180;return[t[0],t[1]*Math.cos(n),t[1]*Math.sin(n)]}\n/**\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n * @see https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js\n */function OKLab_to_OKLCH(t){const n=Math.sqrt(t[1]**2+t[2]**2);let _=180*Math.atan2(t[2],t[1])/Math.PI;return _<0&&(_+=360),n<=4e-6&&(_=NaN),[t[0],n,_]}const o=[1.2268798758459243,-.5578149944602171,.2813910456659647,-.0405757452148008,1.112286803280317,-.0717110580655164,-.0763729366746601,-.4214933324022432,1.5869240198367816],e=[1,.3963377773761749,.2158037573099136,1,-.1055613458156586,-.0638541728258133,1,-.0894841775298119,-1.2914855480194092];\n/**\n * Given OKLab, convert to XYZ relative to D65\n *\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n * @see https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js\n */\nfunction OKLab_to_XYZ(t){const n=multiplyMatrices(e,t);return multiplyMatrices(o,[n[0]**3,n[1]**3,n[2]**3])}\n/**\n * Assuming XYZ is relative to D50, convert to CIE Lab\n * from CIE standard, which now defines these as a rational fraction\n *\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n */function XYZ_to_Lab(t){const n=compute_f(t[0]/_[0]),o=compute_f(t[1]/_[1]);return[116*o-16,500*(n-o),200*(o-compute_f(t[2]/_[2]))]}const a=216/24389,r=24389/27;function compute_f(t){return t>a?Math.cbrt(t):(r*t+16)/116}const l=[.819022437996703,.3619062600528904,-.1288737815209879,.0329836539323885,.9292868615863434,.0361446663506424,.0481771893596242,.2642395317527308,.6335478284694309],i=[.210454268309314,.7936177747023054,-.0040720430116193,1.9779985324311684,-2.42859224204858,.450593709617411,.0259040424655478,.7827717124575296,-.8086757549230774];\n/**\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n *\n * XYZ <-> LMS matrices recalculated for consistent reference white\n * @see https://github.com/w3c/csswg-drafts/issues/6642#issuecomment-943521484\n */\nfunction XYZ_to_OKLab(t){const n=multiplyMatrices(l,t);return multiplyMatrices(i,[Math.cbrt(n[0]),Math.cbrt(n[1]),Math.cbrt(n[2])])}const c=[30757411/17917100,-6372589/17917100,-4539589/17917100,-.666684351832489,1.616481236634939,467509/29648200,792561/44930125,-1921689/44930125,.942103121235474];\n/**\n * Convert XYZ to linear-light rec2020\n *\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n */const u=[446124/178915,-333277/357830,-72051/178915,-14852/17905,63121/35810,423/17905,11844/330415,-50337/660830,316169/330415];\n/**\n * Convert XYZ to linear-light P3\n *\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n */function XYZ_to_lin_P3(t){return multiplyMatrices(u,t)}const s=[1.3457868816471583,-.25557208737979464,-.05110186497554526,-.5446307051249019,1.5082477428451468,.02052744743642139,0,0,1.2119675456389452];\n/**\n * Convert D50 XYZ to linear-light prophoto-rgb\n *\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n * @see http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n */const h=[1829569/896150,-506331/896150,-308931/896150,-851781/878810,1648619/878810,36519/878810,16779/1248040,-147721/1248040,1266979/1248040];\n/**\n * Convert XYZ to linear-light a98-rgb\n *\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n */const m=[12831/3959,-329/214,-1974/3959,-851781/878810,1648619/878810,36519/878810,705/12673,-2585/12673,705/667];\n/**\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n */function XYZ_to_lin_sRGB(t){return multiplyMatrices(m,t)}\n/**\n * Convert an array of linear-light rec2020 RGB in the range 0.0-1.0\n * to gamma corrected form ITU-R BT.2020-2 p.4\n *\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n */function gam_2020_channel(t){const n=t<0?-1:1,_=Math.abs(t);return n*Math.pow(_,1/2.4)}\n/**\n * Convert an array of linear-light sRGB values in the range 0.0-1.0 to gamma corrected form\n * Extended transfer function:\n * For negative values, linear portion extends on reflection\n * of axis, then uses reflected pow below that\n *\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n * @see https://en.wikipedia.org/wiki/SRGB\n */function gam_sRGB(t){return[gam_sRGB_channel(t[0]),gam_sRGB_channel(t[1]),gam_sRGB_channel(t[2])]}function gam_sRGB_channel(t){const n=t<0?-1:1,_=Math.abs(t);return _>.0031308?n*(1.055*Math.pow(_,1/2.4)-.055):12.92*t}\n/**\n * Convert an array of linear-light display-p3 RGB in the range 0.0-1.0\n * to gamma corrected form\n *\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n */function gam_P3(t){return gam_sRGB(t)}\n/**\n * Convert an array of linear-light prophoto-rgb in the range 0.0-1.0\n * to gamma corrected form.\n * Transfer curve is gamma 1.8 with a small linear portion.\n *\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n */const D=1/512;function gam_ProPhoto_channel(t){const n=t<0?-1:1,_=Math.abs(t);return _>=D?n*Math.pow(_,1/1.8):16*t}\n/**\n * Convert an array of linear-light a98-rgb in the range 0.0-1.0\n * to gamma corrected form. Negative values are also now accepted\n *\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n */function gam_a98rgb_channel(t){const n=t<0?-1:1,_=Math.abs(t);return n*Math.pow(_,256/563)}\n/**\n * Convert an array of rec2020 RGB values in the range 0.0 - 1.0\n * to linear light (un-companded) form.\n * ITU-R BT.2020-2 p.4\n *\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n */function lin_2020_channel(t){const n=t<0?-1:1,_=Math.abs(t);return n*Math.pow(_,2.4)}const b=[63426534/99577255,20160776/139408157,47086771/278816314,26158966/99577255,.677998071518871,8267143/139408157,0,19567812/697040785,1.0609850577107909];\n/**\n * Convert an array of linear-light rec2020 values to CIE XYZ\n * using D65 (no chromatic adaptation)\n *\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n * @see http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n */\n/**\n * Convert an array of of sRGB values where in-gamut values are in the range\n * [0 - 1] to linear light (un-companded) form.\n * Extended transfer function:\n * For negative values, linear portion is extended on reflection of axis,\n * then reflected power function is used.\n *\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n * @see https://en.wikipedia.org/wiki/SRGB\n */\nfunction lin_sRGB(t){return[lin_sRGB_channel(t[0]),lin_sRGB_channel(t[1]),lin_sRGB_channel(t[2])]}function lin_sRGB_channel(t){const n=t<0?-1:1,_=Math.abs(t);return _<=.04045?t/12.92:n*Math.pow((_+.055)/1.055,2.4)}\n/**\n * Convert an array of display-p3 RGB values in the range 0.0 - 1.0\n * to linear light (un-companded) form.\n *\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n */function lin_P3(t){return lin_sRGB(t)}const g=[608311/1250200,189793/714400,198249/1000160,35783/156275,247089/357200,198249/2500400,0,32229/714400,5220557/5000800];\n/**\n * Convert an array of linear-light display-p3 values to CIE XYZ\n * using D65 (no chromatic adaptation)\n *\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n * @see http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n */function lin_P3_to_XYZ(t){return multiplyMatrices(g,t)}\n/**\n * Convert an array of prophoto-rgb values where in-gamut Colors are in the\n * range [0.0 - 1.0] to linear light (un-companded) form. Transfer curve is\n * gamma 1.8 with a small linear portion. Extended transfer function\n *\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n */const X=16/512;function lin_ProPhoto_channel(t){const n=t<0?-1:1,_=Math.abs(t);return _<=X?t/16:n*Math.pow(_,1.8)}const Y=[.7977666449006423,.13518129740053308,.0313477341283922,.2880748288194013,.711835234241873,8993693872564e-17,0,0,.8251046025104602];\n/**\n * Convert an array of linear-light prophoto-rgb values to CIE D50 XYZ.\n * Matrix cannot be expressed in rational form, but is calculated to 64 bit accuracy.\n *\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n * @see see https://github.com/w3c/csswg-drafts/issues/7675\n */function lin_a98rgb_channel(t){const n=t<0?-1:1,_=Math.abs(t);return n*Math.pow(_,563/256)}const Z=[573536/994567,263643/1420810,187206/994567,591459/1989134,6239551/9945670,374412/4972835,53769/1989134,351524/4972835,4929758/4972835];\n/**\n * Convert an array of linear-light a98-rgb values to CIE XYZ\n * http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n * has greater numerical precision than section 4.3.5.3 of\n * https://www.adobe.com/digitalimag/pdfs/AdobeRGB1998.pdf\n * but the values below were calculated from first principles\n * from the chromaticity coordinates of R G B W\n *\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n * @see http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n * @see https://www.adobe.com/digitalimag/pdfs/AdobeRGB1998.pdf\n * @see https://github.com/w3c/csswg-drafts/blob/main/css-color-4/matrixmaker.html\n */const f=[506752/1228815,87881/245763,12673/70218,87098/409605,175762/245763,12673/175545,7918/409605,87881/737289,1001167/1053270];\n/**\n * Convert an array of linear-light sRGB values to CIE XYZ\n * using sRGB's own white, D65 (no chromatic adaptation)\n *\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n */function lin_sRGB_to_XYZ(t){return multiplyMatrices(f,t)}\n/**\n * Convert an array of gamma-corrected sRGB values in the 0.0 to 1.0 range to HSL.\n *\n * @param {Color} RGB [r, g, b]\n * - Red component 0..1\n * - Green component 0..1\n * - Blue component 0..1\n * @return {number[]} Array of HSL values: Hue as degrees 0..360, Saturation and Lightness as percentages 0..100\n *\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/utilities.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n *\n * @see https://github.com/w3c/csswg-drafts/blob/main/css-color-4/better-rgbToHsl.js\n */function sRGB_to_HSL(t){const n=t[0],_=t[1],o=t[2],e=Math.max(n,_,o),a=Math.min(n,_,o),r=(a+e)/2,l=e-a;let i=Number.NaN,c=0;if(0!==Math.round(1e5*l)){const t=Math.round(1e5*r);switch(c=0===t||1e5===t?0:(e-r)/Math.min(r,1-r),e){case n:i=(_-o)/l+(_<o?6:0);break;case _:i=(o-n)/l+2;break;case o:i=(n-_)/l+4}i*=60}c<0&&(i+=180,c=Math.abs(c)),i>=360&&(i-=360);return c<=1e-5&&(i=NaN),[i,100*c,100*r]}function sRGB_to_Hue(t){const n=t[0],_=t[1],o=t[2],e=Math.max(n,_,o),a=Math.min(n,_,o);let r=Number.NaN;const l=e-a;if(0!==l){switch(e){case n:r=(_-o)/l+(_<o?6:0);break;case _:r=(o-n)/l+2;break;case o:r=(n-_)/l+4}r*=60}return r>=360&&(r-=360),r}function sRGB_to_XYZ_D50(t){let n=t;return n=lin_sRGB(n),n=lin_sRGB_to_XYZ(n),n=D65_to_D50(n),n}function XYZ_D50_to_sRGB(t){let n=t;return n=D50_to_D65(n),n=XYZ_to_lin_sRGB(n),n=gam_sRGB(n),n}function HSL_to_XYZ_D50(t){let n=t;return n=HSL_to_sRGB(n),n=lin_sRGB(n),n=lin_sRGB_to_XYZ(n),n=D65_to_D50(n),n}function XYZ_D50_to_HSL(t){let n=t;return n=D50_to_D65(n),n=XYZ_to_lin_sRGB(n),n=gam_sRGB(n),n=sRGB_to_HSL(n),n}function HWB_to_XYZ_D50(t){let n=t;return n=HWB_to_sRGB(n),n=lin_sRGB(n),n=lin_sRGB_to_XYZ(n),n=D65_to_D50(n),n}function XYZ_D50_to_HWB(t){let n=t;n=D50_to_D65(n),n=XYZ_to_lin_sRGB(n);const _=gam_sRGB(n),o=Math.min(_[0],_[1],_[2]),e=1-Math.max(_[0],_[1],_[2]);let a=sRGB_to_Hue(_);return o+e>=.99999&&(a=NaN),[a,100*o,100*e]}function Lab_to_XYZ_D50(t){let n=t;return n=Lab_to_XYZ(n),n}function XYZ_D50_to_Lab(t){let n=t;return n=XYZ_to_Lab(n),n}function LCH_to_XYZ_D50(t){let n=t;return n=LCH_to_Lab(n),n=Lab_to_XYZ(n),n}function XYZ_D50_to_LCH(t){let n=t;return n=XYZ_to_Lab(n),n=Lab_to_LCH(n),n}function OKLab_to_XYZ_D50(t){let n=t;return n=OKLab_to_XYZ(n),n=D65_to_D50(n),n}function XYZ_D50_to_OKLab(t){let n=t;return n=D50_to_D65(n),n=XYZ_to_OKLab(n),n}function OKLCH_to_XYZ_D50(t){let n=t;return n=OKLCH_to_OKLab(n),n=OKLab_to_XYZ(n),n=D65_to_D50(n),n}function XYZ_D50_to_OKLCH(t){let n=t;return n=D50_to_D65(n),n=XYZ_to_OKLab(n),n=OKLab_to_OKLCH(n),n}function lin_sRGB_to_XYZ_D50(t){let n=t;return n=lin_sRGB_to_XYZ(n),n=D65_to_D50(n),n}function XYZ_D50_to_lin_sRGB(t){let n=t;return n=D50_to_D65(n),n=XYZ_to_lin_sRGB(n),n}function a98_RGB_to_XYZ_D50(t){let n=t;\n/**\n * Convert an array of a98-rgb values in the range 0.0 - 1.0\n * to linear light (un-companded) form. Negative values are also now accepted\n *\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n */\nvar _;return n=[lin_a98rgb_channel((_=n)[0]),lin_a98rgb_channel(_[1]),lin_a98rgb_channel(_[2])],n=multiplyMatrices(Z,n),n=D65_to_D50(n),n}function XYZ_D50_to_a98_RGB(t){let n=t;var _;return n=D50_to_D65(n),n=multiplyMatrices(h,n),n=[gam_a98rgb_channel((_=n)[0]),gam_a98rgb_channel(_[1]),gam_a98rgb_channel(_[2])],n}function P3_to_XYZ_D50(t){let n=t;return n=lin_P3(n),n=lin_P3_to_XYZ(n),n=D65_to_D50(n),n}function XYZ_D50_to_P3(t){let n=t;return n=D50_to_D65(n),n=XYZ_to_lin_P3(n),n=gam_P3(n),n}function lin_P3_to_XYZ_D50(t){let n=t;return n=lin_P3_to_XYZ(n),n=D65_to_D50(n),n}function XYZ_D50_to_lin_P3(t){let n=t;return n=D50_to_D65(n),n=XYZ_to_lin_P3(n),n}function rec_2020_to_XYZ_D50(t){let n=t;var _;return n=[lin_2020_channel((_=n)[0]),lin_2020_channel(_[1]),lin_2020_channel(_[2])],n=multiplyMatrices(b,n),n=D65_to_D50(n),n}function XYZ_D50_to_rec_2020(t){let n=t;var _;return n=D50_to_D65(n),n=multiplyMatrices(c,n),n=[gam_2020_channel((_=n)[0]),gam_2020_channel(_[1]),gam_2020_channel(_[2])],n}function ProPhoto_RGB_to_XYZ_D50(t){let n=t;var _;return n=[lin_ProPhoto_channel((_=n)[0]),lin_ProPhoto_channel(_[1]),lin_ProPhoto_channel(_[2])],n=multiplyMatrices(Y,n),n}function XYZ_D50_to_ProPhoto(t){let n=t;var _;return n=multiplyMatrices(s,n),n=[gam_ProPhoto_channel((_=n)[0]),gam_ProPhoto_channel(_[1]),gam_ProPhoto_channel(_[2])],n}function XYZ_D65_to_XYZ_D50(t){let n=t;return n=D65_to_D50(n),n}function XYZ_D50_to_XYZ_D65(t){let n=t;return n=D50_to_D65(n),n}function XYZ_D50_to_XYZ_D50(t){return t}function inGamut(t){return t[0]>=-1e-4&&t[0]<=1.0001&&t[1]>=-1e-4&&t[1]<=1.0001&&t[2]>=-1e-4&&t[2]<=1.0001}function clip(t){return[t[0]<0?0:t[0]>1?1:t[0],t[1]<0?0:t[1]>1?1:t[1],t[2]<0?0:t[2]>1?1:t[2]]}\n/**\n * @description Calculate deltaE OK which is the simple root sum of squares\n * @param {number[]} reference - Array of OKLab values: L as 0..1, a and b as -1..1\n * @param {number[]} sample - Array of OKLab values: L as 0..1, a and b as -1..1\n * @return {number} How different a color sample is from reference\n *\n * @license W3C https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/deltaEOK.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).\n * @see https://github.com/w3c/csswg-drafts/blob/main/css-color-4/deltaEOK.js\n */function deltaEOK(t,n){const[_,o,e]=t,[a,r,l]=n,i=_-a,c=o-r,u=e-l;return Math.sqrt(i**2+c**2+u**2)}const M=.02,p=1e-4;function mapGamut(t,n,_){const o=t;let e=clip(n(o)),a=deltaEOK(OKLCH_to_OKLab(_(e)),OKLCH_to_OKLab(o));if(a<M)return e;let r=0,l=o[1],i=!0;for(;l-r>p;){const t=(r+l)/2;if(o[1]=t,i&&inGamut(n(o)))r=t;else if(e=clip(n(o)),a=deltaEOK(OKLCH_to_OKLab(_(e)),OKLCH_to_OKLab(o)),a<M){if(M-a<p)return e;i=!1,r=t}else l=t}return clip(n([...o]))}\n/**\n * @license MIT https://github.com/facelessuser/coloraide/blob/main/LICENSE.md\n */function mapGamutRayTrace(t,n,_){const o=t[0],e=t[2];let a=n(t);const r=n([o,0,e]);for(let t=0;t<4;t++){if(t>0){const t=_(a);t[0]=o,t[2]=e,a=n(t)}const l=rayTraceBox(r,a);if(!l)break;a=l}return clip(a)}function rayTraceBox(t,n){let _=1/0,o=-1/0;const e=[0,0,0];for(let a=0;a<3;a++){const r=t[a],l=n[a]-r;e[a]=l;const i=0,c=1;if(l){const t=1/l,n=(i-r)*t,e=(c-r)*t;o=Math.max(Math.min(n,e),o),_=Math.min(Math.max(n,e),_)}else if(r<i||r>c)return!1}return!(o>_||_<0)&&(o<0&&(o=_),!!isFinite(o)&&[t[0]+e[0]*o,t[1]+e[1]*o,t[2]+e[2]*o])}const d={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]};function luminance(t){const[n,_,o]=t.map(t=>t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4));return.2126*n+.7152*_+.0722*o}function contrast_ratio_wcag_2_1(t,n){const _=luminance(t),o=luminance(n);return(Math.max(_,o)+.05)/(Math.min(_,o)+.05)}export{HSL_to_XYZ_D50,HWB_to_XYZ_D50,LCH_to_XYZ_D50,Lab_to_XYZ_D50,OKLCH_to_OKLab,OKLCH_to_XYZ_D50,OKLab_to_OKLCH,OKLab_to_XYZ,OKLab_to_XYZ_D50,P3_to_XYZ_D50,ProPhoto_RGB_to_XYZ_D50,XYZ_D50_to_HSL,XYZ_D50_to_HWB,XYZ_D50_to_LCH,XYZ_D50_to_Lab,XYZ_D50_to_OKLCH,XYZ_D50_to_OKLab,XYZ_D50_to_P3,XYZ_D50_to_ProPhoto,XYZ_D50_to_XYZ_D50,XYZ_D50_to_XYZ_D65,XYZ_D50_to_a98_RGB,XYZ_D50_to_lin_P3,XYZ_D50_to_lin_sRGB,XYZ_D50_to_rec_2020,XYZ_D50_to_sRGB,XYZ_D65_to_XYZ_D50,XYZ_to_OKLab,XYZ_to_lin_P3,XYZ_to_lin_sRGB,a98_RGB_to_XYZ_D50,clip,contrast_ratio_wcag_2_1,gam_P3,gam_sRGB,inGamut,lin_P3,lin_P3_to_XYZ,lin_P3_to_XYZ_D50,lin_sRGB,lin_sRGB_to_XYZ,lin_sRGB_to_XYZ_D50,mapGamut,mapGamutRayTrace,d as namedColors,rec_2020_to_XYZ_D50,sRGB_to_XYZ_D50};\n","import{TokenType as e,NumberType as a,isTokenIdent as n,isTokenPercentage as r,isTokenNumber as o,isTokenDelim as t,isTokenNumeric as l,isTokenComma as s,isTokenDimension as u,isTokenHash as i}from\"@csstools/css-tokenizer\";import{XYZ_D50_to_XYZ_D65 as c,XYZ_D50_to_XYZ_D50 as h,XYZ_D50_to_OKLab as m,XYZ_D50_to_OKLCH as p,XYZ_D50_to_LCH as N,XYZ_D50_to_Lab as b,XYZ_D50_to_HWB as v,XYZ_D50_to_HSL as g,XYZ_D50_to_a98_RGB as f,XYZ_D50_to_ProPhoto as d,XYZ_D50_to_rec_2020 as y,XYZ_D50_to_lin_P3 as _,XYZ_D50_to_P3 as C,XYZ_D50_to_lin_sRGB as w,XYZ_D50_to_sRGB as x,XYZ_D65_to_XYZ_D50 as L,OKLCH_to_XYZ_D50 as H,LCH_to_XYZ_D50 as P,OKLab_to_XYZ_D50 as k,Lab_to_XYZ_D50 as S,HWB_to_XYZ_D50 as D,HSL_to_XYZ_D50 as M,ProPhoto_RGB_to_XYZ_D50 as F,a98_RGB_to_XYZ_D50 as z,rec_2020_to_XYZ_D50 as Z,lin_P3_to_XYZ_D50 as R,P3_to_XYZ_D50 as B,lin_sRGB_to_XYZ_D50 as V,sRGB_to_XYZ_D50 as T,namedColors as G,inGamut as A,clip as X,gam_sRGB as K,mapGamutRayTrace as Y,OKLCH_to_OKLab as I,OKLab_to_XYZ as O,XYZ_to_lin_sRGB as W,lin_sRGB_to_XYZ as E,XYZ_to_OKLab as U,OKLab_to_OKLCH as $,contrast_ratio_wcag_2_1 as j,gam_P3 as q,XYZ_to_lin_P3 as J,lin_P3_to_XYZ as Q}from\"@csstools/color-helpers\";import{isWhitespaceNode as ee,isCommentNode as ae,isTokenNode as ne,isFunctionNode as re,TokenNode as oe,isWhiteSpaceOrCommentNode as te,replaceComponentValues as le,FunctionNode as se,WhitespaceNode as ue}from\"@csstools/css-parser-algorithms\";import{mathFunctionNames as ie,calcFromComponentValues as ce}from\"@csstools/css-calc\";var he,me;function convertNaNToZero(e){return[Number.isNaN(e[0])?0:e[0],Number.isNaN(e[1])?0:e[1],Number.isNaN(e[2])?0:e[2]]}function colorData_to_XYZ_D50(e){switch(e.colorNotation){case he.HEX:case he.RGB:case he.sRGB:return{...e,colorNotation:he.XYZ_D50,channels:T(convertNaNToZero(e.channels))};case he.Linear_sRGB:return{...e,colorNotation:he.XYZ_D50,channels:V(convertNaNToZero(e.channels))};case he.Display_P3:return{...e,colorNotation:he.XYZ_D50,channels:B(convertNaNToZero(e.channels))};case he.Linear_Display_P3:return{...e,colorNotation:he.XYZ_D50,channels:R(convertNaNToZero(e.channels))};case he.Rec2020:return{...e,colorNotation:he.XYZ_D50,channels:Z(convertNaNToZero(e.channels))};case he.A98_RGB:return{...e,colorNotation:he.XYZ_D50,channels:z(convertNaNToZero(e.channels))};case he.ProPhoto_RGB:return{...e,colorNotation:he.XYZ_D50,channels:F(convertNaNToZero(e.channels))};case he.HSL:return{...e,colorNotation:he.XYZ_D50,channels:M(convertNaNToZero(e.channels))};case he.HWB:return{...e,colorNotation:he.XYZ_D50,channels:D(convertNaNToZero(e.channels))};case he.Lab:return{...e,colorNotation:he.XYZ_D50,channels:S(convertNaNToZero(e.channels))};case he.OKLab:return{...e,colorNotation:he.XYZ_D50,channels:k(convertNaNToZero(e.channels))};case he.LCH:return{...e,colorNotation:he.XYZ_D50,channels:P(convertNaNToZero(e.channels))};case he.OKLCH:return{...e,colorNotation:he.XYZ_D50,channels:H(convertNaNToZero(e.channels))};case he.XYZ_D50:return{...e,colorNotation:he.XYZ_D50,channels:h(convertNaNToZero(e.channels))};case he.XYZ_D65:return{...e,colorNotation:he.XYZ_D50,channels:L(convertNaNToZero(e.channels))};default:throw new Error(\"Unsupported color notation\")}}!function(e){e.A98_RGB=\"a98-rgb\",e.Display_P3=\"display-p3\",e.Linear_Display_P3=\"display-p3-linear\",e.HEX=\"hex\",e.HSL=\"hsl\",e.HWB=\"hwb\",e.LCH=\"lch\",e.Lab=\"lab\",e.Linear_sRGB=\"srgb-linear\",e.OKLCH=\"oklch\",e.OKLab=\"oklab\",e.ProPhoto_RGB=\"prophoto-rgb\",e.RGB=\"rgb\",e.sRGB=\"srgb\",e.Rec2020=\"rec2020\",e.XYZ_D50=\"xyz-d50\",e.XYZ_D65=\"xyz-d65\"}(he||(he={})),function(e){e.ColorKeyword=\"color-keyword\",e.HasAlpha=\"has-alpha\",e.HasDimensionValues=\"has-dimension-values\",e.HasNoneKeywords=\"has-none-keywords\",e.HasNumberValues=\"has-number-values\",e.HasPercentageAlpha=\"has-percentage-alpha\",e.HasPercentageValues=\"has-percentage-values\",e.HasVariableAlpha=\"has-variable-alpha\",e.Hex=\"hex\",e.LegacyHSL=\"legacy-hsl\",e.LegacyRGB=\"legacy-rgb\",e.NamedColor=\"named-color\",e.RelativeColorSyntax=\"relative-color-syntax\",e.ColorMix=\"color-mix\",e.ColorMixVariadic=\"color-mix-variadic\",e.ContrastColor=\"contrast-color\",e.RelativeAlphaSyntax=\"relative-alpha-syntax\",e.Experimental=\"experimental\"}(me||(me={}));const pe=new Set([he.A98_RGB,he.Display_P3,he.Linear_Display_P3,he.HEX,he.Linear_sRGB,he.ProPhoto_RGB,he.RGB,he.sRGB,he.Rec2020,he.XYZ_D50,he.XYZ_D65]);function colorDataTo(e,a){const n={...e};if(e.colorNotation!==a){const e=colorData_to_XYZ_D50(n);switch(a){case he.HEX:case he.RGB:n.colorNotation=he.RGB,n.channels=x(e.channels);break;case he.sRGB:n.colorNotation=he.sRGB,n.channels=x(e.channels);break;case he.Linear_sRGB:n.colorNotation=he.Linear_sRGB,n.channels=w(e.channels);break;case he.Display_P3:n.colorNotation=he.Display_P3,n.channels=C(e.channels);break;case he.Linear_Display_P3:n.colorNotation=he.Linear_Display_P3,n.channels=_(e.channels);break;case he.Rec2020:n.colorNotation=he.Rec2020,n.channels=y(e.channels);break;case he.ProPhoto_RGB:n.colorNotation=he.ProPhoto_RGB,n.channels=d(e.channels);break;case he.A98_RGB:n.colorNotation=he.A98_RGB,n.channels=f(e.channels);break;case he.HSL:n.colorNotation=he.HSL,n.channels=g(e.channels);break;case he.HWB:n.colorNotation=he.HWB,n.channels=v(e.channels);break;case he.Lab:n.colorNotation=he.Lab,n.channels=b(e.channels);break;case he.LCH:n.colorNotation=he.LCH,n.channels=N(e.channels);break;case he.OKLCH:n.colorNotation=he.OKLCH,n.channels=p(e.channels);break;case he.OKLab:n.colorNotation=he.OKLab,n.channels=m(e.channels);break;case he.XYZ_D50:n.colorNotation=he.XYZ_D50,n.channels=h(e.channels);break;case he.XYZ_D65:n.colorNotation=he.XYZ_D65,n.channels=c(e.channels);break;default:throw new Error(\"Unsupported color notation\")}}else n.channels=convertNaNToZero(e.channels);if(a===e.colorNotation)n.channels=carryForwardMissingComponents(e.channels,[0,1,2],n.channels,[0,1,2]);else if(pe.has(a)&&pe.has(e.colorNotation))n.channels=carryForwardMissingComponents(e.channels,[0,1,2],n.channels,[0,1,2]);else switch(a){case he.HSL:switch(e.colorNotation){case he.HWB:n.channels=carryForwardMissingComponents(e.channels,[0],n.channels,[0]);break;case he.Lab:case he.OKLab:n.channels=carryForwardMissingComponents(e.channels,[2],n.channels,[0]);break;case he.LCH:case he.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],n.channels,[2,1,0])}break;case he.HWB:switch(e.colorNotation){case he.HSL:n.channels=carryForwardMissingComponents(e.channels,[0],n.channels,[0]);break;case he.LCH:case he.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0],n.channels,[2])}break;case he.Lab:case he.OKLab:switch(e.colorNotation){case he.HSL:n.channels=carryForwardMissingComponents(e.channels,[0],n.channels,[2]);break;case he.Lab:case he.OKLab:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],n.channels,[0,1,2]);break;case he.LCH:case he.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0],n.channels,[0])}break;case he.LCH:case he.OKLCH:switch(e.colorNotation){case he.HSL:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],n.channels,[2,1,0]);break;case he.HWB:n.channels=carryForwardMissingComponents(e.channels,[0],n.channels,[2]);break;case he.Lab:case he.OKLab:n.channels=carryForwardMissingComponents(e.channels,[0],n.channels,[0]);break;case he.LCH:case he.OKLCH:n.channels=carryForwardMissingComponents(e.channels,[0,1,2],n.channels,[0,1,2])}}return n.channels=convertPowerlessComponentsToMissingComponents(n.channels,a),n}function convertPowerlessComponentsToMissingComponents(e,a){const n=[...e];switch(a){case he.HSL:!Number.isNaN(n[1])&&reducePrecision(n[1],4)<=0&&(n[0]=Number.NaN);break;case he.HWB:Math.max(0,reducePrecision(n[1],4))+Math.max(0,reducePrecision(n[2],4))>=100&&(n[0]=Number.NaN);break;case he.LCH:!Number.isNaN(n[1])&&reducePrecision(n[1],4)<=0&&(n[2]=Number.NaN);break;case he.OKLCH:!Number.isNaN(n[1])&&reducePrecision(n[1],6)<=0&&(n[2]=Number.NaN)}return n}function convertPowerlessComponentsToZeroValuesForDisplay(e,a){const n=[...e];switch(a){case he.HSL:(reducePrecision(n[2])<=0||reducePrecision(n[2])>=100)&&(n[0]=Number.NaN,n[1]=Number.NaN),reducePrecision(n[1])<=0&&(n[0]=Number.NaN);break;case he.HWB:Math.max(0,reducePrecision(n[1]))+Math.max(0,reducePrecision(n[2]))>=100&&(n[0]=Number.NaN);break;case he.Lab:(reducePrecision(n[0])<=0||reducePrecision(n[0])>=100)&&(n[1]=Number.NaN,n[2]=Number.NaN);break;case he.LCH:reducePrecision(n[1])<=0&&(n[2]=Number.NaN),(reducePrecision(n[0])<=0||reducePrecision(n[0])>=100)&&(n[1]=Number.NaN,n[2]=Number.NaN);break;case he.OKLab:(reducePrecision(n[0])<=0||reducePrecision(n[0])>=1)&&(n[1]=Number.NaN,n[2]=Number.NaN);break;case he.OKLCH:reducePrecision(n[1])<=0&&(n[2]=Number.NaN),(reducePrecision(n[0])<=0||reducePrecision(n[0])>=1)&&(n[1]=Number.NaN,n[2]=Number.NaN)}return n}function carryForwardMissingComponents(e,a,n,r){const o=[...n];for(const n of a)Number.isNaN(e[a[n]])&&(o[r[n]]=Number.NaN);return o}function normalizeRelativeColorDataChannels(e){const a=new Map;switch(e.colorNotation){case he.RGB:case he.HEX:a.set(\"r\",dummyNumberToken(255*e.channels[0])),a.set(\"g\",dummyNumberToken(255*e.channels[1])),a.set(\"b\",dummyNumberToken(255*e.channels[2])),\"number\"==typeof e.alpha&&a.set(\"alpha\",dummyNumberToken(e.alpha));break;case he.HSL:a.set(\"h\",dummyNumberToken(e.channels[0])),a.set(\"s\",dummyNumberToken(e.channels[1])),a.set(\"l\",dummyNumberToken(e.channels[2])),\"number\"==typeof e.alpha&&a.set(\"alpha\",dummyNumberToken(e.alpha));break;case he.HWB:a.set(\"h\",dummyNumberToken(e.channels[0])),a.set(\"w\",dummyNumberToken(e.channels[1])),a.set(\"b\",dummyNumberToken(e.channels[2])),\"number\"==typeof e.alpha&&a.set(\"alpha\",dummyNumberToken(e.alpha));break;case he.Lab:case he.OKLab:a.set(\"l\",dummyNumberToken(e.channels[0])),a.set(\"a\",dummyNumberToken(e.channels[1])),a.set(\"b\",dummyNumberToken(e.channels[2])),\"number\"==typeof e.alpha&&a.set(\"alpha\",dummyNumberToken(e.alpha));break;case he.LCH:case he.OKLCH:a.set(\"l\",dummyNumberToken(e.channels[0])),a.set(\"c\",dummyNumberToken(e.channels[1])),a.set(\"h\",dummyNumberToken(e.channels[2])),\"number\"==typeof e.alpha&&a.set(\"alpha\",dummyNumberToken(e.alpha));break;case he.sRGB:case he.A98_RGB:case he.Display_P3:case he.Linear_Display_P3:case he.Rec2020:case he.Linear_sRGB:case he.ProPhoto_RGB:a.set(\"r\",dummyNumberToken(e.channels[0])),a.set(\"g\",dummyNumberToken(e.channels[1])),a.set(\"b\",dummyNumberToken(e.channels[2])),\"number\"==typeof e.alpha&&a.set(\"alpha\",dummyNumberToken(e.alpha));break;case he.XYZ_D50:case he.XYZ_D65:a.set(\"x\",dummyNumberToken(e.channels[0])),a.set(\"y\",dummyNumberToken(e.channels[1])),a.set(\"z\",dummyNumberToken(e.channels[2])),\"number\"==typeof e.alpha&&a.set(\"alpha\",dummyNumberToken(e.alpha))}return a}function noneToZeroInRelativeColorDataChannels(e){const a=new Map(e);for(const[n,r]of e)Number.isNaN(r[4].value)&&a.set(n,dummyNumberToken(0));return a}function dummyNumberToken(n){return Number.isNaN(n)?[e.Number,\"none\",-1,-1,{value:Number.NaN,type:a.Number}]:[e.Number,n.toString(),-1,-1,{value:n,type:a.Number}]}function reducePrecision(e,a=7){if(Number.isNaN(e))return 0;const n=Math.pow(10,a);return Math.round(e*n)/n}function colorDataFitsRGB_Gamut(e){const a={...e,channels:[...e.channels]};a.channels=convertPowerlessComponentsToZeroValuesForDisplay(a.channels,a.colorNotation);return!colorDataTo(a,he.RGB).channels.find(e=>e<-1e-5||e>1.00001)}function colorDataFitsDisplayP3_Gamut(e){const a={...e,channels:[...e.channels]};a.channels=convertPowerlessComponentsToZeroValuesForDisplay(a.channels,a.colorNotation);return!colorDataTo(a,he.Display_P3).channels.find(e=>e<-1e-5||e>1.00001)}function normalize(e,a,n,r){return Math.min(Math.max(e/a,n),r)}const Ne=/[A-Z]/g;function toLowerCaseAZ(e){return e.replace(Ne,e=>String.fromCharCode(e.charCodeAt(0)+32))}function normalize_Color_ChannelValues(t,l,s){if(n(t)&&\"none\"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(me.HasNoneKeywords),[e.Number,\"none\",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(me.HasPercentageValues);let n=normalize(t[4].value,100,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(me.HasNumberValues);let n=normalize(t[4].value,1,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}const be=new Set([\"srgb\",\"srgb-linear\",\"display-p3\",\"display-p3-linear\",\"a98-rgb\",\"prophoto-rgb\",\"rec2020\",\"xyz\",\"xyz-d50\",\"xyz-d65\"]);function color$1(e,a){const r=[],s=[],u=[],i=[];let c,h,m=!1,p=!1;const N={colorNotation:he.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};let b=r;for(let o=0;o<e.value.length;o++){let v=e.value[o];if(ee(v)||ae(v))for(;ee(e.value[o+1])||ae(e.value[o+1]);)o++;else if(b===r&&r.length&&(b=s),b===s&&s.length&&(b=u),ne(v)&&t(v.value)&&\"/\"===v.value[4].value){if(b===i)return!1;b=i}else{if(re(v)){if(b===i&&\"var\"===toLowerCaseAZ(v.getName())){N.syntaxFlags.add(me.HasVariableAlpha),b.push(v);continue}if(!ie.has(toLowerCaseAZ(v.getName())))return!1;const[[e]]=ce([[v]],{censorIntoStandardRepresentableValues:!0,globals:h,precision:-1,toCanonicalUnits:!0,rawPercentages:!0});if(!e||!ne(e)||!l(e.value))return!1;Number.isNaN(e.value[4].value)&&(e.value[4].value=0),v=e}if(b===r&&0===r.length&&ne(v)&&n(v.value)&&be.has(toLowerCaseAZ(v.value[4].value))){if(m)return!1;m=toLowerCaseAZ(v.value[4].value),N.colorNotation=colorSpaceNameToColorNotation(m),p&&(p.colorNotation!==N.colorNotation&&(p=colorDataTo(p,N.colorNotation)),c=normalizeRelativeColorDataChannels(p),h=noneToZeroInRelativeColorDataChannels(c))}else if(b===r&&0===r.length&&ne(v)&&n(v.value)&&\"from\"===toLowerCaseAZ(v.value[4].value)){if(p)return!1;if(m)return!1;for(;ee(e.value[o+1])||ae(e.value[o+1]);)o++;if(o++,v=e.value[o],p=a(v),!1===p)return!1;p.syntaxFlags.has(me.Experimental)&&N.syntaxFlags.add(me.Experimental),N.syntaxFlags.add(me.RelativeColorSyntax)}else{if(!ne(v))return!1;if(n(v.value)&&c&&c.has(toLowerCaseAZ(v.value[4].value))){b.push(new oe(c.get(toLowerCaseAZ(v.value[4].value))));continue}b.push(v)}}}if(!m)return!1;if(1!==b.length)return!1;if(1!==r.length||1!==s.length||1!==u.length)return!1;if(!ne(r[0])||!ne(s[0])||!ne(u[0]))return!1;if(c&&!c.has(\"alpha\"))return!1;const v=normalize_Color_ChannelValues(r[0].value,0,N);if(!v||!o(v))return!1;const g=normalize_Color_ChannelValues(s[0].value,1,N);if(!g||!o(g))return!1;const f=normalize_Color_ChannelValues(u[0].value,2,N);if(!f||!o(f))return!1;const d=[v,g,f];if(1===i.length)if(N.syntaxFlags.add(me.HasAlpha),ne(i[0])){const e=normalize_Color_ChannelValues(i[0].value,3,N);if(!e||!o(e))return!1;d.push(e)}else N.alpha=i[0];else if(c&&c.has(\"alpha\")){const e=normalize_Color_ChannelValues(c.get(\"alpha\"),3,N);if(!e||!o(e))return!1;d.push(e)}return N.channels=[d[0][4].value,d[1][4].value,d[2][4].value],4===d.length&&(N.alpha=d[3][4].value),N}function colorSpaceNameToColorNotation(e){switch(e){case\"srgb\":return he.sRGB;case\"srgb-linear\":return he.Linear_sRGB;case\"display-p3\":return he.Display_P3;case\"display-p3-linear\":return he.Linear_Display_P3;case\"a98-rgb\":return he.A98_RGB;case\"prophoto-rgb\":return he.ProPhoto_RGB;case\"rec2020\":return he.Rec2020;case\"xyz\":case\"xyz-d65\":return he.XYZ_D65;case\"xyz-d50\":return he.XYZ_D50;default:throw new Error(\"Unknown color space name: \"+e)}}const ve=new Set([\"srgb\",\"srgb-linear\",\"display-p3\",\"display-p3-linear\",\"a98-rgb\",\"prophoto-rgb\",\"rec2020\",\"lab\",\"oklab\",\"xyz\",\"xyz-d50\",\"xyz-d65\"]),ge=new Set([\"hsl\",\"hwb\",\"lch\",\"oklch\"]),fe=new Set([\"shorter\",\"longer\",\"increasing\",\"decreasing\"]);function colorMix(e,a){let r=null,o=null,t=null,l=!1;for(let u=0;u<e.value.length;u++){const i=e.value[u];if(!te(i)){if(!(r||ne(i)&&n(i.value)&&\"in\"===toLowerCaseAZ(i.value[4].value)))return colorMixRectangular(\"oklab\",colorMixComponents(e.value,a));if(ne(i)&&n(i.value)){if(!r&&\"in\"===toLowerCaseAZ(i.value[4].value)){r=i;continue}if(r&&!o){o=toLowerCaseAZ(i.value[4].value);continue}if(r&&o&&!t&&ge.has(o)){t=toLowerCaseAZ(i.value[4].value);continue}if(r&&o&&t&&!l&&\"hue\"===toLowerCaseAZ(i.value[4].value)){l=!0;continue}return!1}return!(!ne(i)||!s(i.value))&&(!!o&&(t||l?!!(o&&t&&l&&ge.has(o)&&fe.has(t))&&colorMixPolar(o,t,colorMixComponents(e.value.slice(u+1),a)):ve.has(o)?colorMixRectangular(o,colorMixComponents(e.value.slice(u+1),a)):!!ge.has(o)&&colorMixPolar(o,\"shorter\",colorMixComponents(e.value.slice(u+1),a))))}}return!1}function colorMixComponents(e,a){const n=[];let o=1,t=!1,u=!1;for(let o=0;o<e.length;o++){let i=e[o];if(!te(i)){if(!ne(i)||!s(i.value)){if(!t){const e=a(i);if(e){t=e;continue}}if(!u){if(re(i)&&ie.has(toLowerCaseAZ(i.getName()))){if([[i]]=ce([[i]],{censorIntoStandardRepresentableValues:!0,precision:-1,toCanonicalUnits:!0,rawPercentages:!0}),!i||!ne(i)||!l(i.value))return!1;Number.isNaN(i.value[4].value)&&(i.value[4].value=0)}if(ne(i)&&r(i.value)&&i.value[4].value>=0){u=i.value[4].value;continue}}return!1}if(!t)return!1;n.push({color:t,percentage:u}),t=!1,u=!1}}if(!t)return!1;n.push({color:t,percentage:u});let i=0,c=0;for(let e=0;e<n.length;e++){const a=n[e].percentage;if(!1!==a){if(a<0||a>100)return!1;i+=a}else c++}const h=Math.max(0,100-i);i=0;for(let e=0;e<n.length;e++)!1===n[e].percentage&&(n[e].percentage=h/c),i+=n[e].percentage;if(0===i)return{colors:[{color:{channels:[0,0,0],colorNotation:he.sRGB,alpha:0,syntaxFlags:new Set},percentage:0}],alphaMultiplier:0};if(i>100)for(let e=0;e<n.length;e++){let a=n[e].percentage;a=a/i*100,n[e].percentage=a}if(i<100){o=i/100;for(let e=0;e<n.length;e++){let a=n[e].percentage;a=a/i*100,n[e].percentage=a}}return{colors:n,alphaMultiplier:o}}function colorMixRectangular(e,a){if(!a||!a.colors.length)return!1;const n=a.colors.slice();n.reverse();let r=he.RGB;switch(e){case\"srgb\":r=he.RGB;break;case\"srgb-linear\":r=he.Linear_sRGB;break;case\"display-p3\":r=he.Display_P3;break;case\"display-p3-linear\":r=he.Linear_Display_P3;break;case\"a98-rgb\":r=he.A98_RGB;break;case\"prophoto-rgb\":r=he.ProPhoto_RGB;break;case\"rec2020\":r=he.Rec2020;break;case\"lab\":r=he.Lab;break;case\"oklab\":r=he.OKLab;break;case\"xyz-d50\":r=he.XYZ_D50;break;case\"xyz\":case\"xyz-d65\":r=he.XYZ_D65;break;default:return!1}if(1===n.length){const e=colorDataTo(n[0].color,r);return e.colorNotation=r,e.syntaxFlags.add(me.ColorMixVariadic),\"number\"!=typeof e.alpha?!1:(e.alpha=e.alpha*a.alphaMultiplier,e)}for(;n.length>=2;){const e=n.pop(),a=n.pop();if(!e||!a)return!1;const o=colorMixRectangularPair(r,e.color,e.percentage,a.color,a.percentage);if(!o)return!1;n.push({color:o,percentage:e.percentage+a.percentage})}const o=n[0]?.color;return!!o&&(a.colors.some(e=>e.color.syntaxFlags.has(me.Experimental))&&o.syntaxFlags.add(me.Experimental),\"number\"==typeof o.alpha&&(o.alpha=o.alpha*a.alphaMultiplier,2!==a.colors.length&&o.syntaxFlags.add(me.ColorMixVariadic),o))}function colorMixRectangularPair(e,a,n,r,o){const t=n/(n+o);let l=a.alpha;if(\"number\"!=typeof l)return!1;let s=r.alpha;if(\"number\"!=typeof s)return!1;l=Number.isNaN(l)?s:l,s=Number.isNaN(s)?l:s;const u=colorDataTo(a,e).channels,i=colorDataTo(r,e).channels;u[0]=fillInMissingComponent(u[0],i[0]),i[0]=fillInMissingComponent(i[0],u[0]),u[1]=fillInMissingComponent(u[1],i[1]),i[1]=fillInMissingComponent(i[1],u[1]),u[2]=fillInMissingComponent(u[2],i[2]),i[2]=fillInMissingComponent(i[2],u[2]),u[0]=premultiply(u[0],l),u[1]=premultiply(u[1],l),u[2]=premultiply(u[2],l),i[0]=premultiply(i[0],s),i[1]=premultiply(i[1],s),i[2]=premultiply(i[2],s);const c=interpolate(l,s,t);return{colorNotation:e,channels:[un_premultiply(interpolate(u[0],i[0],t),c),un_premultiply(interpolate(u[1],i[1],t),c),un_premultiply(interpolate(u[2],i[2],t),c)],alpha:c,syntaxFlags:new Set([me.ColorMix])}}function colorMixPolar(e,a,n){if(!n||!n.colors.length)return!1;const r=n.colors.slice();r.reverse();let o=he.HSL;switch(e){case\"hsl\":o=he.HSL;break;case\"hwb\":o=he.HWB;break;case\"lch\":o=he.LCH;break;case\"oklch\":o=he.OKLCH;break;default:return!1}if(1===r.length){const e=colorDataTo(r[0].color,o);return e.colorNotation=o,e.syntaxFlags.add(me.ColorMixVariadic),\"number\"!=typeof e.alpha?!1:(e.alpha=e.alpha*n.alphaMultiplier,e)}for(;r.length>=2;){const e=r.pop(),n=r.pop();if(!e||!n)return!1;const t=colorMixPolarPair(o,a,e.color,e.percentage,n.color,n.percentage);if(!t)return!1;r.push({color:t,percentage:e.percentage+n.percentage})}const t=r[0]?.color;return!!t&&(n.colors.some(e=>e.color.syntaxFlags.has(me.Experimental))&&t.syntaxFlags.add(me.Experimental),\"number\"==typeof t.alpha&&(t.alpha=t.alpha*n.alphaMultiplier,2!==n.colors.length&&t.syntaxFlags.add(me.ColorMixVariadic),t))}function colorMixPolarPair(e,a,n,r,o,t){const l=r/(r+t);let s=0,u=0,i=0,c=0,h=0,m=0,p=n.alpha;if(\"number\"!=typeof p)return!1;let N=o.alpha;if(\"number\"!=typeof N)return!1;p=Number.isNaN(p)?N:p,N=Number.isNaN(N)?p:N;const b=colorDataTo(n,e).channels,v=colorDataTo(o,e).channels;switch(e){case he.HSL:case he.HWB:s=b[0],u=v[0],i=b[1],c=v[1],h=b[2],m=v[2];break;case he.LCH:case he.OKLCH:i=b[0],c=v[0],h=b[1],m=v[1],s=b[2],u=v[2]}s=fillInMissingComponent(s,u),Number.isNaN(s)&&(s=0),u=fillInMissingComponent(u,s),Number.isNaN(u)&&(u=0),i=fillInMissingComponent(i,c),c=fillInMissingComponent(c,i),h=fillInMissingComponent(h,m),m=fillInMissingComponent(m,h);const g=u-s;switch(a){case\"shorter\":g>180?s+=360:g<-180&&(u+=360);break;case\"longer\":-180<g&&g<180&&(g>0?s+=360:u+=360);break;case\"increasing\":g<0&&(u+=360);break;case\"decreasing\":g>0&&(s+=360);break;default:throw new Error(\"Unknown hue interpolation method\")}i=premultiply(i,p),h=premultiply(h,p),c=premultiply(c,N),m=premultiply(m,N);let f=[0,0,0];const d=interpolate(p,N,l);switch(e){case he.HSL:case he.HWB:f=[interpolate(s,u,l),un_premultiply(interpolate(i,c,l),d),un_premultiply(interpolate(h,m,l),d)];break;case he.LCH:case he.OKLCH:f=[un_premultiply(interpolate(i,c,l),d),un_premultiply(interpolate(h,m,l),d),interpolate(s,u,l)]}return{colorNotation:e,channels:f,alpha:d,syntaxFlags:new Set([me.ColorMix])}}function fillInMissingComponent(e,a){return Number.isNaN(e)?a:e}function interpolate(e,a,n){return e*n+a*(1-n)}function premultiply(e,a){return Number.isNaN(a)?e:Number.isNaN(e)?Number.NaN:e*a}function un_premultiply(e,a){return 0===a||Number.isNaN(a)?e:Number.isNaN(e)?Number.NaN:e/a}function hex(e){const a=toLowerCaseAZ(e[4].value);if(a.match(/[^a-f0-9]/))return!1;const n={colorNotation:he.HEX,channels:[0,0,0],alpha:1,syntaxFlags:new Set([me.Hex])},r=a.length;if(3===r){const e=a[0],r=a[1],o=a[2];return n.channels=[parseInt(e+e,16)/255,parseInt(r+r,16)/255,parseInt(o+o,16)/255],n}if(6===r){const e=a[0]+a[1],r=a[2]+a[3],o=a[4]+a[5];return n.channels=[parseInt(e,16)/255,parseInt(r,16)/255,parseInt(o,16)/255],n}if(4===r){const e=a[0],r=a[1],o=a[2],t=a[3];return n.channels=[parseInt(e+e,16)/255,parseInt(r+r,16)/255,parseInt(o+o,16)/255],n.alpha=parseInt(t+t,16)/255,n.syntaxFlags.add(me.HasAlpha),n}if(8===r){const e=a[0]+a[1],r=a[2]+a[3],o=a[4]+a[5],t=a[6]+a[7];return n.channels=[parseInt(e,16)/255,parseInt(r,16)/255,parseInt(o,16)/255],n.alpha=parseInt(t,16)/255,n.syntaxFlags.add(me.HasAlpha),n}return!1}function normalizeHue(n){if(o(n))return n[4].value=n[4].value%360,n[1]=n[4].value.toString(),n;if(u(n)){let r=n[4].value;switch(toLowerCaseAZ(n[4].unit)){case\"deg\":break;case\"rad\":r=180*n[4].value/Math.PI;break;case\"grad\":r=.9*n[4].value;break;case\"turn\":r=360*n[4].value;break;default:return!1}return r%=360,[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}return!1}function normalize_legacy_HSL_ChannelValues(n,t,l){if(0===t){const e=normalizeHue(n);return!1!==e&&(u(n)&&l.syntaxFlags.add(me.HasDimensionValues),e)}if(r(n)){3===t?l.syntaxFlags.add(me.HasPercentageAlpha):l.syntaxFlags.add(me.HasPercentageValues);let r=normalize(n[4].value,1,0,100);return 3===t&&(r=normalize(n[4].value,100,0,1)),[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}if(o(n)){if(3!==t)return!1;let r=normalize(n[4].value,1,0,100);return 3===t&&(r=normalize(n[4].value,1,0,1)),[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}return!1}function normalize_modern_HSL_ChannelValues(t,l,s){if(n(t)&&\"none\"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(me.HasNoneKeywords),[e.Number,\"none\",t[2],t[3],{value:Number.NaN,type:a.Number}];if(0===l){const e=normalizeHue(t);return!1!==e&&(u(t)&&s.syntaxFlags.add(me.HasDimensionValues),e)}if(r(t)){3===l?s.syntaxFlags.add(me.HasPercentageAlpha):s.syntaxFlags.add(me.HasPercentageValues);let n=t[4].value;return 3===l?n=normalize(t[4].value,100,0,1):1===l&&(n=normalize(t[4].value,1,0,2147483647)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(me.HasNumberValues);let n=t[4].value;return 3===l?n=normalize(t[4].value,1,0,1):1===l&&(n=normalize(t[4].value,1,0,2147483647)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function threeChannelLegacySyntax(e,a,n,r){const t=[],u=[],i=[],c=[],h={colorNotation:n,channels:[0,0,0],alpha:1,syntaxFlags:new Set(r)};let m=t;for(let a=0;a<e.value.length;a++){let n=e.value[a];if(!ee(n)&&!ae(n)){if(ne(n)&&s(n.value)){if(m===t){m=u;continue}if(m===u){m=i;continue}if(m===i){m=c;continue}if(m===c)return!1}if(re(n)){if(m===c&&\"var\"===n.getName().toLowerCase()){h.syntaxFlags.add(me.HasVariableAlpha),m.push(n);continue}if(!ie.has(n.getName().toLowerCase()))return!1;const[[e]]=ce([[n]],{censorIntoStandardRepresentableValues:!0,precision:-1,toCanonicalUnits:!0,rawPercentages:!0});if(!e||!ne(e)||!l(e.value))return!1;Number.isNaN(e.value[4].value)&&(e.value[4].value=0),n=e}if(!ne(n))return!1;m.push(n)}}if(1!==m.length)return!1;if(1!==t.length||1!==u.length||1!==i.length)return!1;if(!ne(t[0])||!ne(u[0])||!ne(i[0]))return!1;const p=a(t[0].value,0,h);if(!p||!o(p))return!1;const N=a(u[0].value,1,h);if(!N||!o(N))return!1;const b=a(i[0].value,2,h);if(!b||!o(b))return!1;const v=[p,N,b];if(1===c.length)if(h.syntaxFlags.add(me.HasAlpha),ne(c[0])){const e=a(c[0].value,3,h);if(!e||!o(e))return!1;v.push(e)}else h.alpha=c[0];return h.channels=[v[0][4].value,v[1][4].value,v[2][4].value],4===v.length&&(h.alpha=v[3][4].value),h}function threeChannelSpaceSeparated(e,a,r,s,u){const i=[],c=[],h=[],m=[];let p,N,b=!1;const v={colorNotation:r,channels:[0,0,0],alpha:1,syntaxFlags:new Set(s)};let g=i;for(let a=0;a<e.value.length;a++){let o=e.value[a];if(ee(o)||ae(o))for(;ee(e.value[a+1])||ae(e.value[a+1]);)a++;else if(g===i&&i.length&&(g=c),g===c&&c.length&&(g=h),ne(o)&&t(o.value)&&\"/\"===o.value[4].value){if(g===m)return!1;g=m}else{if(re(o)){if(g===m&&\"var\"===o.getName().toLowerCase()){v.syntaxFlags.add(me.HasVariableAlpha),g.push(o);continue}if(!ie.has(o.getName().toLowerCase()))return!1;const[[e]]=ce([[o]],{censorIntoStandardRepresentableValues:!0,globals:N,precision:-1,toCanonicalUnits:!0,rawPercentages:!0});if(!e||!ne(e)||!l(e.value))return!1;Number.isNaN(e.value[4].value)&&(e.value[4].value=0),o=e}if(g===i&&0===i.length&&ne(o)&&n(o.value)&&\"from\"===o.value[4].value.toLowerCase()){if(b)return!1;for(;ee(e.value[a+1])||ae(e.value[a+1]);)a++;if(a++,o=e.value[a],b=u(o),!1===b)return!1;b.syntaxFlags.has(me.Experimental)&&v.syntaxFlags.add(me.Experimental),v.syntaxFlags.add(me.RelativeColorSyntax),b.colorNotation!==r&&(b=colorDataTo(b,r)),p=normalizeRelativeColorDataChannels(b),N=noneToZeroInRelativeColorDataChannels(p)}else{if(!ne(o))return!1;if(n(o.value)&&p){const e=o.value[4].value.toLowerCase();if(p.has(e)){g.push(new oe(p.get(e)));continue}}g.push(o)}}}if(1!==g.length)return!1;if(1!==i.length||1!==c.length||1!==h.length)return!1;if(!ne(i[0])||!ne(c[0])||!ne(h[0]))return!1;if(p&&!p.has(\"alpha\"))return!1;const f=a(i[0].value,0,v);if(!f||!o(f))return!1;const d=a(c[0].value,1,v);if(!d||!o(d))return!1;const y=a(h[0].value,2,v);if(!y||!o(y))return!1;const _=[f,d,y];if(1===m.length)if(v.syntaxFlags.add(me.HasAlpha),ne(m[0])){const e=a(m[0].value,3,v);if(!e||!o(e))return!1;_.push(e)}else v.alpha=m[0];else if(p&&p.has(\"alpha\")){const e=a(p.get(\"alpha\"),3,v);if(!e||!o(e))return!1;_.push(e)}return v.channels=[_[0][4].value,_[1][4].value,_[2][4].value],4===_.length&&(v.alpha=_[3][4].value),v}function hsl(e,a){if(e.value.some(e=>ne(e)&&s(e.value))){const a=hslCommaSeparated(e);if(!1!==a)return a}{const n=hslSpaceSeparated(e,a);if(!1!==n)return n}return!1}function hslCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_HSL_ChannelValues,he.HSL,[me.LegacyHSL])}function hslSpaceSeparated(e,a){return threeChannelSpaceSeparated(e,normalize_modern_HSL_ChannelValues,he.HSL,[],a)}function normalize_HWB_ChannelValues(t,l,s){if(n(t)&&\"none\"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(me.HasNoneKeywords),[e.Number,\"none\",t[2],t[3],{value:Number.NaN,type:a.Number}];if(0===l){const e=normalizeHue(t);return!1!==e&&(u(t)&&s.syntaxFlags.add(me.HasDimensionValues),e)}if(r(t)){3===l?s.syntaxFlags.add(me.HasPercentageAlpha):s.syntaxFlags.add(me.HasPercentageValues);let n=t[4].value;return 3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(me.HasNumberValues);let n=t[4].value;return 3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function normalize_Lab_ChannelValues(t,l,s){if(n(t)&&\"none\"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(me.HasNoneKeywords),[e.Number,\"none\",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(me.HasPercentageValues);let n=normalize(t[4].value,1,0,100);return 1===l||2===l?n=normalize(t[4].value,.8,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(me.HasNumberValues);let n=normalize(t[4].value,1,0,100);return 1===l||2===l?n=normalize(t[4].value,1,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function lab(e,a){return threeChannelSpaceSeparated(e,normalize_Lab_ChannelValues,he.Lab,[],a)}function normalize_LCH_ChannelValues(t,l,s){if(n(t)&&\"none\"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(me.HasNoneKeywords),[e.Number,\"none\",t[2],t[3],{value:Number.NaN,type:a.Number}];if(2===l){const e=normalizeHue(t);return!1!==e&&(u(t)&&s.syntaxFlags.add(me.HasDimensionValues),e)}if(r(t)){3!==l&&s.syntaxFlags.add(me.HasPercentageValues);let n=normalize(t[4].value,1,0,100);return 1===l?n=normalize(t[4].value,100/150,0,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(me.HasNumberValues);let n=normalize(t[4].value,1,0,100);return 1===l?n=normalize(t[4].value,1,0,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function lch(e,a){return threeChannelSpaceSeparated(e,normalize_LCH_ChannelValues,he.LCH,[],a)}const de=new Map;for(const[e,a]of Object.entries(G))de.set(e,a);function namedColor(e){const a=de.get(toLowerCaseAZ(e));return!!a&&{colorNotation:he.RGB,channels:[a[0]/255,a[1]/255,a[2]/255],alpha:1,syntaxFlags:new Set([me.ColorKeyword,me.NamedColor])}}function normalize_OKLab_ChannelValues(t,l,s){if(n(t)&&\"none\"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(me.HasNoneKeywords),[e.Number,\"none\",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(me.HasPercentageValues);let n=normalize(t[4].value,100,0,1);return 1===l||2===l?n=normalize(t[4].value,250,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(me.HasNumberValues);let n=normalize(t[4].value,1,0,1);return 1===l||2===l?n=normalize(t[4].value,1,-2147483647,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function oklab(e,a){return threeChannelSpaceSeparated(e,normalize_OKLab_ChannelValues,he.OKLab,[],a)}function normalize_OKLCH_ChannelValues(t,l,s){if(n(t)&&\"none\"===toLowerCaseAZ(t[4].value))return s.syntaxFlags.add(me.HasNoneKeywords),[e.Number,\"none\",t[2],t[3],{value:Number.NaN,type:a.Number}];if(2===l){const e=normalizeHue(t);return!1!==e&&(u(t)&&s.syntaxFlags.add(me.HasDimensionValues),e)}if(r(t)){3!==l&&s.syntaxFlags.add(me.HasPercentageValues);let n=normalize(t[4].value,100,0,1);return 1===l?n=normalize(t[4].value,250,0,2147483647):3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(me.HasNumberValues);let n=normalize(t[4].value,1,0,1);return 1===l?n=normalize(t[4].value,1,0,2147483647):3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function oklch(e,a){return threeChannelSpaceSeparated(e,normalize_OKLCH_ChannelValues,he.OKLCH,[],a)}function normalize_legacy_sRGB_ChannelValues(n,t,l){if(r(n)){3===t?l.syntaxFlags.add(me.HasPercentageAlpha):l.syntaxFlags.add(me.HasPercentageValues);const r=normalize(n[4].value,100,0,1);return[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}if(o(n)){3!==t&&l.syntaxFlags.add(me.HasNumberValues);let r=normalize(n[4].value,255,0,1);return 3===t&&(r=normalize(n[4].value,1,0,1)),[e.Number,r.toString(),n[2],n[3],{value:r,type:a.Number}]}return!1}function normalize_modern_sRGB_ChannelValues(t,l,s){if(n(t)&&\"none\"===t[4].value.toLowerCase())return s.syntaxFlags.add(me.HasNoneKeywords),[e.Number,\"none\",t[2],t[3],{value:Number.NaN,type:a.Number}];if(r(t)){3!==l&&s.syntaxFlags.add(me.HasPercentageValues);let n=normalize(t[4].value,100,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,100,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}if(o(t)){3!==l&&s.syntaxFlags.add(me.HasNumberValues);let n=normalize(t[4].value,255,-2147483647,2147483647);return 3===l&&(n=normalize(t[4].value,1,0,1)),[e.Number,n.toString(),t[2],t[3],{value:n,type:a.Number}]}return!1}function rgb(e,a){if(e.value.some(e=>ne(e)&&s(e.value))){const a=rgbCommaSeparated(e);if(!1!==a)return(!a.syntaxFlags.has(me.HasNumberValues)||!a.syntaxFlags.has(me.HasPercentageValues))&&a}else{const n=rgbSpaceSeparated(e,a);if(!1!==n)return n}return!1}function rgbCommaSeparated(e){return threeChannelLegacySyntax(e,normalize_legacy_sRGB_ChannelValues,he.RGB,[me.LegacyRGB])}function rgbSpaceSeparated(e,a){return threeChannelSpaceSeparated(e,normalize_modern_sRGB_ChannelValues,he.RGB,[],a)}function XYZ_D50_to_sRGB_Gamut(e){const a=x(e);if(A(a))return X(a);let n=e;return n=p(n),n[0]<1e-6&&(n=[0,0,0]),n[0]>.999999&&(n=[1,0,0]),K(Y(n,oklch_to_lin_srgb,lin_srgb_to_oklch))}function oklch_to_lin_srgb(e){return e=I(e),e=O(e),W(e)}function lin_srgb_to_oklch(e){return e=E(e),e=U(e),$(e)}function contrastColor(e,a){let n=!1;for(let r=0;r<e.value.length;r++){const o=e.value[r];if(!ee(o)&&!ae(o)&&(n||(n=a(o),!n)))return!1}if(!n)return!1;n.channels=convertNaNToZero(n.channels),n.channels=XYZ_D50_to_sRGB_Gamut(colorData_to_XYZ_D50(n).channels),n.colorNotation=he.sRGB;const r={colorNotation:he.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([me.ContrastColor,me.Experimental])},o=j(n.channels,[1,1,1]),t=j(n.channels,[0,0,0]);return r.channels=o>t?[1,1,1]:[0,0,0],r}function alpha(e,a){let r,s,u=!1,i=!1,c=!1;const h={colorNotation:he.sRGB,channels:[0,0,0],alpha:1,syntaxFlags:new Set([])};for(let m=0;m<e.value.length;m++){let p=e.value[m];if(ee(p)||ae(p))for(;ee(e.value[m+1])||ae(e.value[m+1]);)m++;else if(c&&!u&&!i&&ne(p)&&t(p.value)&&\"/\"===p.value[4].value)u=!0;else{if(re(p)&&ie.has(toLowerCaseAZ(p.getName()))){const[[e]]=ce([[p]],{censorIntoStandardRepresentableValues:!0,globals:s,precision:-1,toCanonicalUnits:!0,rawPercentages:!0});if(!e||!ne(e)||!l(e.value))return!1;Number.isNaN(e.value[4].value)&&(e.value[4].value=0),p=e}if(u||i||!ne(p)||!n(p.value)||\"from\"!==toLowerCaseAZ(p.value[4].value)){if(!u)return!1;if(i)return!1;if(ne(p)){if(n(p.value)&&\"alpha\"===toLowerCaseAZ(p.value[4].value)&&r&&r.has(\"alpha\")){h.alpha=r.get(\"alpha\")[4].value,i=!0;continue}const e=normalize_Color_ChannelValues(p.value,3,h);if(!e||!o(e))return!1;h.alpha=new oe(e),i=!0;continue}if(re(p)){const e=le([[p]],e=>{if(ne(e)&&n(e.value)&&\"alpha\"===toLowerCaseAZ(e.value[4].value)&&r&&r.has(\"alpha\"))return new oe(r.get(\"alpha\"))});h.alpha=e[0][0],i=!0;continue}return!1}if(c)return!1;for(;ee(e.value[m+1])||ae(e.value[m+1]);)m++;if(m++,p=e.value[m],c=a(p),!1===c)return!1;r=normalizeRelativeColorDataChannels(c),s=noneToZeroInRelativeColorDataChannels(r),h.syntaxFlags=new Set(c.syntaxFlags),h.syntaxFlags.add(me.RelativeAlphaSyntax),h.channels=[...c.channels],h.colorNotation=c.colorNotation,h.alpha=c.alpha}}return!!r&&h}function XYZ_D50_to_P3_Gamut(e){const a=C(e);if(A(a))return X(a);let n=e;return n=p(n),n[0]<1e-6&&(n=[0,0,0]),n[0]>.999999&&(n=[1,0,0]),q(Y(n,oklch_to_lin_p3,lin_p3_to_oklch))}function oklch_to_lin_p3(e){return e=I(e),e=O(e),J(e)}function lin_p3_to_oklch(e){return e=Q(e),e=U(e),$(e)}function toPrecision(e,a=7){e=+e,a=+a;const n=(Math.floor(Math.abs(e))+\"\").length;if(a>n)return+e.toFixed(a-n);{const r=10**(n-a);return Math.round(e/r)*r}}function serializeWithAlpha(n,r,o,t){const l=[e.CloseParen,\")\",-1,-1,void 0];if(\"number\"==typeof n.alpha){const s=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(s,4)?new se(r,l,t):new se(r,l,[...t,new ue([o]),new oe([e.Delim,\"/\",-1,-1,{value:\"/\"}]),new ue([o]),new oe([e.Number,toPrecision(s,4).toString(),-1,-1,{value:n.alpha,type:a.Integer}])])}return new se(r,l,[...t,new ue([o]),new oe([e.Delim,\"/\",-1,-1,{value:\"/\"}]),new ue([o]),n.alpha])}function serializeP3(n,r=!0){n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation);let o=n.channels.map(e=>Number.isNaN(e)?0:e);r?o=XYZ_D50_to_P3_Gamut(colorData_to_XYZ_D50(n).channels):n.colorNotation!==he.Display_P3&&(o=C(colorData_to_XYZ_D50(n).channels));const t=r?Math.min(1,Math.max(0,toPrecision(o[0],6))):toPrecision(o[0],6),l=r?Math.min(1,Math.max(0,toPrecision(o[1],6))):toPrecision(o[1],6),s=r?Math.min(1,Math.max(0,toPrecision(o[2],6))):toPrecision(o[2],6),u=[e.Function,\"color(\",-1,-1,{value:\"color\"}],i=[e.Whitespace,\" \",-1,-1,void 0];return serializeWithAlpha(n,u,i,[new oe([e.Ident,\"display-p3\",-1,-1,{value:\"display-p3\"}]),new ue([i]),new oe([e.Number,t.toString(),-1,-1,{value:o[0],type:a.Number}]),new ue([i]),new oe([e.Number,l.toString(),-1,-1,{value:o[1],type:a.Number}]),new ue([i]),new oe([e.Number,s.toString(),-1,-1,{value:o[2],type:a.Number}])])}function serializeRGB(n,r=!0){n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation);let o=n.channels.map(e=>Number.isNaN(e)?0:e);o=r?XYZ_D50_to_sRGB_Gamut(colorData_to_XYZ_D50(n).channels):x(colorData_to_XYZ_D50(n).channels);const t=Math.min(255,Math.max(0,Math.round(255*toPrecision(o[0])))),l=Math.min(255,Math.max(0,Math.round(255*toPrecision(o[1])))),s=Math.min(255,Math.max(0,Math.round(255*toPrecision(o[2])))),u=[e.CloseParen,\")\",-1,-1,void 0],i=[e.Whitespace,\" \",-1,-1,void 0],c=[e.Comma,\",\",-1,-1,void 0],h=[new oe([e.Number,t.toString(),-1,-1,{value:Math.min(255,255*Math.max(0,o[0])),type:a.Integer}]),new oe(c),new ue([i]),new oe([e.Number,l.toString(),-1,-1,{value:Math.min(255,255*Math.max(0,o[1])),type:a.Integer}]),new oe(c),new ue([i]),new oe([e.Number,s.toString(),-1,-1,{value:Math.min(255,255*Math.max(0,o[2])),type:a.Integer}])];if(\"number\"==typeof n.alpha){const r=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(r,4)?new se([e.Function,\"rgb(\",-1,-1,{value:\"rgb\"}],u,h):new se([e.Function,\"rgba(\",-1,-1,{value:\"rgba\"}],u,[...h,new oe(c),new ue([i]),new oe([e.Number,toPrecision(r,4).toString(),-1,-1,{value:n.alpha,type:a.Number}])])}return new se([e.Function,\"rgba(\",-1,-1,{value:\"rgba\"}],u,[...h,new oe(c),new ue([i]),n.alpha])}function serializeHSL(n,r=!0){n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation);let o=n.channels.map(e=>Number.isNaN(e)?0:e);o=g(r?T(XYZ_D50_to_sRGB_Gamut(colorData_to_XYZ_D50(n).channels)):colorData_to_XYZ_D50(n).channels),o=o.map(e=>Number.isNaN(e)?0:e);const t=Math.min(360,Math.max(0,Math.round(toPrecision(o[0])))),l=Math.min(100,Math.max(0,Math.round(toPrecision(o[1])))),s=Math.min(100,Math.max(0,Math.round(toPrecision(o[2])))),u=[e.CloseParen,\")\",-1,-1,void 0],i=[e.Whitespace,\" \",-1,-1,void 0],c=[e.Comma,\",\",-1,-1,void 0],h=[new oe([e.Number,t.toString(),-1,-1,{value:o[0],type:a.Integer}]),new oe(c),new ue([i]),new oe([e.Percentage,l.toString()+\"%\",-1,-1,{value:o[1]}]),new oe(c),new ue([i]),new oe([e.Percentage,s.toString()+\"%\",-1,-1,{value:o[2]}])];if(\"number\"==typeof n.alpha){const r=Math.min(1,Math.max(0,toPrecision(Number.isNaN(n.alpha)?0:n.alpha)));return 1===toPrecision(r,4)?new se([e.Function,\"hsl(\",-1,-1,{value:\"hsl\"}],u,h):new se([e.Function,\"hsla(\",-1,-1,{value:\"hsla\"}],u,[...h,new oe(c),new ue([i]),new oe([e.Number,toPrecision(r,4).toString(),-1,-1,{value:n.alpha,type:a.Number}])])}return new se([e.Function,\"hsla(\",-1,-1,{value:\"hsla\"}],u,[...h,new oe(c),new ue([i]),n.alpha])}function serializeOKLCH(n){n.channels=convertPowerlessComponentsToZeroValuesForDisplay(n.channels,n.colorNotation);let r=n.channels.map(e=>Number.isNaN(e)?0:e);n.colorNotation!==he.OKLCH&&(r=p(colorData_to_XYZ_D50(n).channels));const o=toPrecision(r[0],6),t=toPrecision(r[1],6),l=toPrecision(r[2],6),s=[e.Function,\"oklch(\",-1,-1,{value:\"oklch\"}],u=[e.Whitespace,\" \",-1,-1,void 0];return serializeWithAlpha(n,s,u,[new oe([e.Number,o.toString(),-1,-1,{value:r[0],type:a.Number}]),new ue([u]),new oe([e.Number,t.toString(),-1,-1,{value:r[1],type:a.Number}]),new ue([u]),new oe([e.Number,l.toString(),-1,-1,{value:r[2],type:a.Number}])])}function color(e){if(re(e)){switch(toLowerCaseAZ(e.getName())){case\"rgb\":case\"rgba\":return rgb(e,color);case\"hsl\":case\"hsla\":return hsl(e,color);case\"hwb\":return a=color,threeChannelSpaceSeparated(e,normalize_HWB_ChannelValues,he.HWB,[],a);case\"lab\":return lab(e,color);case\"lch\":return lch(e,color);case\"oklab\":return oklab(e,color);case\"oklch\":return oklch(e,color);case\"color\":return color$1(e,color);case\"color-mix\":return colorMix(e,color);case\"contrast-color\":return contrastColor(e,color);case\"alpha\":return alpha(e,color)}}var a;if(ne(e)){if(i(e.value))return hex(e.value);if(n(e.value)){const a=namedColor(e.value[4].value);return!1!==a?a:\"transparent\"===toLowerCaseAZ(e.value[4].value)&&{colorNotation:he.RGB,channels:[0,0,0],alpha:0,syntaxFlags:new Set([me.ColorKeyword])}}}return!1}export{he as ColorNotation,me as SyntaxFlag,color,colorDataFitsDisplayP3_Gamut,colorDataFitsRGB_Gamut,serializeHSL,serializeOKLCH,serializeP3,serializeRGB};\n","/**\n * relative-color\n */\n\nimport { SyntaxFlag, color as colorParser } from '@csstools/css-color-parser';\nimport {\n ComponentValue,\n parseComponentValue\n} from '@csstools/css-parser-algorithms';\nimport { CSSToken, TokenType, tokenize } from '@csstools/css-tokenizer';\nimport {\n CacheItem,\n NullObject,\n createCacheKey,\n getCache,\n setCache\n} from './cache';\nimport { NAMED_COLORS, convertColorToRgb } from './color';\nimport { isString, isStringOrNumber } from './common';\nimport { resolveDimension, serializeCalc } from './css-calc';\nimport { resolveColor } from './resolve';\nimport { roundToPrecision, splitValue } from './util';\nimport {\n ColorChannels,\n MatchedRegExp,\n Options,\n StringColorChannels\n} from './typedef';\n\n/* constants */\nimport {\n CS_LAB,\n CS_LCH,\n FN_LIGHT_DARK,\n FN_REL,\n FN_REL_CAPT,\n FN_VAR,\n NONE,\n SYN_COLOR_TYPE,\n SYN_FN_MATH_START,\n SYN_FN_VAR,\n SYN_MIX,\n VAL_SPEC\n} from './constant';\nconst {\n CloseParen: PAREN_CLOSE,\n Comment: COMMENT,\n Delim: DELIM,\n Dimension: DIM,\n EOF,\n Function: FUNC,\n Ident: IDENT,\n Number: NUM,\n OpenParen: PAREN_OPEN,\n Percentage: PCT,\n Whitespace: W_SPACE\n} = TokenType;\nconst { HasNoneKeywords: KEY_NONE } = SyntaxFlag;\nconst NAMESPACE = 'relative-color';\n\n/* numeric constants */\nconst OCT = 8;\nconst DEC = 10;\nconst HEX = 16;\nconst MAX_PCT = 100;\nconst MAX_RGB = 255;\n\n/* type definitions */\n/**\n * @type NumberOrStringColorChannels - color channel\n */\ntype NumberOrStringColorChannels = ColorChannels & StringColorChannels;\n\n/* regexp */\nconst REG_COLOR_CAPT = new RegExp(\n `^${FN_REL}(${SYN_COLOR_TYPE}|${SYN_MIX})\\\\s+`\n);\nconst REG_CS_HSL = /(?:hsla?|hwb)$/;\nconst REG_CS_CIE = new RegExp(`^(?:${CS_LAB}|${CS_LCH})$`);\nconst REG_FN_CALC_SUM = /^(?:abs|sig?n|cos|tan)\\(/;\nconst REG_FN_MATH_START = new RegExp(SYN_FN_MATH_START);\nconst REG_FN_REL = new RegExp(FN_REL);\nconst REG_FN_REL_CAPT = new RegExp(`^${FN_REL_CAPT}`);\nconst REG_FN_REL_START = new RegExp(`^${FN_REL}`);\nconst REG_FN_VAR = new RegExp(SYN_FN_VAR);\n\n/**\n * resolve relative color channels\n * @param tokens - CSS tokens\n * @param [opt] - options\n * @returns resolved color channels\n */\nexport function resolveColorChannels(\n tokens: CSSToken[],\n opt: Options = {}\n): NumberOrStringColorChannels | NullObject {\n if (!Array.isArray(tokens)) {\n throw new TypeError(`${tokens} is not an array.`);\n }\n const { colorSpace = '', format = '' } = opt;\n const colorChannels = new Map([\n ['color', ['r', 'g', 'b', 'alpha']],\n ['hsl', ['h', 's', 'l', 'alpha']],\n ['hsla', ['h', 's', 'l', 'alpha']],\n ['hwb', ['h', 'w', 'b', 'alpha']],\n ['lab', ['l', 'a', 'b', 'alpha']],\n ['lch', ['l', 'c', 'h', 'alpha']],\n ['oklab', ['l', 'a', 'b', 'alpha']],\n ['oklch', ['l', 'c', 'h', 'alpha']],\n ['rgb', ['r', 'g', 'b', 'alpha']],\n ['rgba', ['r', 'g', 'b', 'alpha']]\n ]);\n const colorChannel = colorChannels.get(colorSpace);\n // invalid color channel\n if (!colorChannel) {\n return new NullObject();\n }\n const mathFunc = new Set();\n const channels: [\n (number | string)[],\n (number | string)[],\n (number | string)[],\n (number | string)[]\n ] = [[], [], [], []];\n let i = 0;\n let nest = 0;\n let func = '';\n let precededPct = false;\n while (tokens.length) {\n const token = tokens.shift();\n if (!Array.isArray(token)) {\n throw new TypeError(`${token} is not an array.`);\n }\n const [type, value, , , detail] = token as [\n TokenType,\n string,\n number,\n number,\n { value: string | number } | undefined\n ];\n const channel = channels[i];\n if (Array.isArray(channel)) {\n switch (type) {\n case DELIM: {\n if (func) {\n if (\n (value === '+' || value === '-') &&\n precededPct &&\n !REG_FN_CALC_SUM.test(func)\n ) {\n return new NullObject();\n }\n precededPct = false;\n channel.push(value);\n }\n break;\n }\n case DIM: {\n if (!func || !REG_FN_CALC_SUM.test(func)) {\n return new NullObject();\n }\n const resolvedValue = resolveDimension(token, opt);\n if (isString(resolvedValue)) {\n channel.push(resolvedValue);\n } else {\n channel.push(value);\n }\n break;\n }\n case FUNC: {\n channel.push(value);\n func = value;\n nest++;\n if (REG_FN_MATH_START.test(value)) {\n mathFunc.add(nest);\n }\n break;\n }\n case IDENT: {\n // invalid channel key\n if (!colorChannel.includes(value)) {\n return new NullObject();\n }\n channel.push(value);\n if (!func) {\n i++;\n }\n break;\n }\n case NUM: {\n channel.push(Number(detail?.value));\n if (!func) {\n i++;\n }\n break;\n }\n case PAREN_OPEN: {\n channel.push(value);\n nest++;\n break;\n }\n case PAREN_CLOSE: {\n if (func) {\n const lastValue = channel[channel.length - 1];\n if (lastValue === ' ') {\n channel.splice(-1, 1, value);\n } else {\n channel.push(value);\n }\n if (mathFunc.has(nest)) {\n mathFunc.delete(nest);\n }\n nest--;\n if (nest === 0) {\n func = '';\n i++;\n }\n }\n break;\n }\n case PCT: {\n if (!func) {\n return new NullObject();\n } else if (!REG_FN_CALC_SUM.test(func)) {\n const lastValue = channel.toReversed().find(v => v !== ' ');\n if (lastValue === '+' || lastValue === '-') {\n return new NullObject();\n } else if (lastValue === '*' || lastValue === '/') {\n precededPct = false;\n } else {\n precededPct = true;\n }\n }\n channel.push(Number(detail?.value) / MAX_PCT);\n if (!func) {\n i++;\n }\n break;\n }\n case W_SPACE: {\n if (channel.length && func) {\n const lastValue = channel[channel.length - 1];\n if (typeof lastValue === 'number') {\n channel.push(value);\n } else if (\n isString(lastValue) &&\n !lastValue.endsWith('(') &&\n lastValue !== ' '\n ) {\n channel.push(value);\n }\n }\n break;\n }\n default: {\n if (type !== COMMENT && type !== EOF && func) {\n channel.push(value);\n }\n }\n }\n }\n }\n const channelValues = [];\n for (const channel of channels) {\n if (channel.length === 1) {\n const [resolvedValue] = channel;\n if (isStringOrNumber(resolvedValue)) {\n channelValues.push(resolvedValue);\n }\n } else if (channel.length) {\n const resolvedValue = serializeCalc(channel.join(''), {\n format\n });\n channelValues.push(resolvedValue);\n }\n }\n return channelValues as NumberOrStringColorChannels;\n}\n\n/**\n * extract origin color\n * @param value - CSS color value\n * @param [opt] - options\n * @returns origin color value\n */\nexport function extractOriginColor(\n value: string,\n opt: Options = {}\n): string | NullObject {\n const { colorScheme = 'normal', currentColor = '', format = '' } = opt;\n if (isString(value)) {\n value = value.toLowerCase().trim();\n if (!value) {\n return new NullObject();\n }\n if (!REG_FN_REL_START.test(value)) {\n return value;\n }\n } else {\n return new NullObject();\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'extractOriginColor',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return cachedResult as NullObject;\n }\n return cachedResult.item as string;\n }\n if (/currentcolor/.test(value)) {\n if (currentColor) {\n value = value.replace(/currentcolor/g, currentColor);\n } else {\n setCache(cacheKey, null);\n return new NullObject();\n }\n }\n let colorSpace = '';\n if (REG_FN_REL_CAPT.test(value)) {\n [, colorSpace] = value.match(REG_FN_REL_CAPT) as MatchedRegExp;\n }\n opt.colorSpace = colorSpace;\n if (value.includes(FN_LIGHT_DARK)) {\n const colorParts = value\n .replace(new RegExp(`^${colorSpace}\\\\(`), '')\n .replace(/\\)$/, '');\n const [, originColor = ''] = splitValue(colorParts);\n const specifiedOriginColor = resolveColor(originColor, {\n colorScheme,\n format: VAL_SPEC\n }) as string;\n if (specifiedOriginColor === '') {\n setCache(cacheKey, null);\n return new NullObject();\n }\n if (format === VAL_SPEC) {\n value = value.replace(originColor, specifiedOriginColor);\n } else {\n const resolvedOriginColor = resolveColor(specifiedOriginColor, opt);\n if (isString(resolvedOriginColor)) {\n value = value.replace(originColor, resolvedOriginColor);\n }\n }\n }\n if (REG_COLOR_CAPT.test(value)) {\n const [, originColor] = value.match(REG_COLOR_CAPT) as MatchedRegExp;\n const [, restValue] = value.split(originColor) as MatchedRegExp;\n if (/^[a-z]+$/.test(originColor)) {\n if (\n !/^transparent$/.test(originColor) &&\n !Object.hasOwn(NAMED_COLORS, originColor)\n ) {\n setCache(cacheKey, null);\n return new NullObject();\n }\n } else if (format === VAL_SPEC) {\n const resolvedOriginColor = resolveColor(originColor, opt);\n if (isString(resolvedOriginColor)) {\n value = value.replace(originColor, resolvedOriginColor);\n }\n }\n if (format === VAL_SPEC) {\n const tokens = tokenize({ css: restValue });\n const channelValues = resolveColorChannels(tokens, opt);\n if (channelValues instanceof NullObject) {\n setCache(cacheKey, null);\n return channelValues;\n }\n const [v1, v2, v3, v4] = channelValues;\n let channelValue = '';\n if (isStringOrNumber(v4)) {\n channelValue = ` ${v1} ${v2} ${v3} / ${v4})`;\n } else {\n channelValue = ` ${channelValues.join(' ')})`;\n }\n if (restValue !== channelValue) {\n value = value.replace(restValue, channelValue);\n }\n }\n // nested relative color\n } else {\n const [, restValue] = value.split(REG_FN_REL_START) as MatchedRegExp;\n const tokens = tokenize({ css: restValue });\n const originColor: string[] = [];\n let nest = 0;\n while (tokens.length) {\n const [type, tokenValue] = tokens.shift() as [TokenType, string];\n switch (type) {\n case FUNC:\n case PAREN_OPEN: {\n originColor.push(tokenValue);\n nest++;\n break;\n }\n case PAREN_CLOSE: {\n const lastValue = originColor[originColor.length - 1];\n if (lastValue === ' ') {\n originColor.splice(-1, 1, tokenValue);\n } else if (isString(lastValue)) {\n originColor.push(tokenValue);\n }\n nest--;\n break;\n }\n case W_SPACE: {\n const lastValue = originColor[originColor.length - 1];\n if (\n isString(lastValue) &&\n !lastValue.endsWith('(') &&\n lastValue !== ' '\n ) {\n originColor.push(tokenValue);\n }\n break;\n }\n default: {\n if (type !== COMMENT && type !== EOF) {\n originColor.push(tokenValue);\n }\n }\n }\n if (nest === 0) {\n break;\n }\n }\n const resolvedOriginColor = resolveRelativeColor(\n originColor.join('').trim(),\n opt\n );\n if (resolvedOriginColor instanceof NullObject) {\n setCache(cacheKey, null);\n return resolvedOriginColor;\n }\n const channelValues = resolveColorChannels(tokens, opt);\n if (channelValues instanceof NullObject) {\n setCache(cacheKey, null);\n return channelValues;\n }\n const [v1, v2, v3, v4] = channelValues;\n let channelValue = '';\n if (isStringOrNumber(v4)) {\n channelValue = ` ${v1} ${v2} ${v3} / ${v4})`;\n } else {\n channelValue = ` ${channelValues.join(' ')})`;\n }\n value = value.replace(restValue, `${resolvedOriginColor}${channelValue}`);\n }\n setCache(cacheKey, value);\n return value;\n}\n\n/**\n * resolve relative color\n * @param value - CSS relative color value\n * @param [opt] - options\n * @returns resolved value\n */\nexport function resolveRelativeColor(\n value: string,\n opt: Options = {}\n): string | NullObject {\n const { format = '' } = opt;\n if (isString(value)) {\n if (REG_FN_VAR.test(value)) {\n if (format === VAL_SPEC) {\n return value;\n // var() must be resolved before resolveRelativeColor()\n } else {\n throw new SyntaxError(`Unexpected token ${FN_VAR} found.`);\n }\n } else if (!REG_FN_REL.test(value)) {\n return value;\n }\n value = value.toLowerCase().trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'resolveRelativeColor',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return cachedResult as NullObject;\n }\n return cachedResult.item as string;\n }\n const originColor = extractOriginColor(value, opt);\n if (originColor instanceof NullObject) {\n setCache(cacheKey, null);\n return originColor;\n }\n value = originColor;\n if (format === VAL_SPEC) {\n if (value.startsWith('rgba(')) {\n value = value.replace(/^rgba\\(/, 'rgb(');\n } else if (value.startsWith('hsla(')) {\n value = value.replace(/^hsla\\(/, 'hsl(');\n }\n return value;\n }\n const tokens = tokenize({ css: value });\n const components = parseComponentValue(tokens) as ComponentValue;\n const parsedComponents = colorParser(components);\n if (!parsedComponents) {\n setCache(cacheKey, null);\n return new NullObject();\n }\n const {\n alpha: alphaComponent,\n channels: channelsComponent,\n colorNotation,\n syntaxFlags\n } = parsedComponents;\n let alpha: number | string;\n if (Number.isNaN(Number(alphaComponent))) {\n if (syntaxFlags instanceof Set && syntaxFlags.has(KEY_NONE)) {\n alpha = NONE;\n } else {\n alpha = 0;\n }\n } else {\n alpha = roundToPrecision(Number(alphaComponent), OCT);\n }\n let v1: number | string;\n let v2: number | string;\n let v3: number | string;\n [v1, v2, v3] = channelsComponent;\n let resolvedValue;\n if (REG_CS_CIE.test(colorNotation)) {\n const hasNone = syntaxFlags instanceof Set && syntaxFlags.has(KEY_NONE);\n if (Number.isNaN(v1)) {\n if (hasNone) {\n v1 = NONE;\n } else {\n v1 = 0;\n }\n } else {\n v1 = roundToPrecision(v1, HEX);\n }\n if (Number.isNaN(v2)) {\n if (hasNone) {\n v2 = NONE;\n } else {\n v2 = 0;\n }\n } else {\n v2 = roundToPrecision(v2, HEX);\n }\n if (Number.isNaN(v3)) {\n if (hasNone) {\n v3 = NONE;\n } else {\n v3 = 0;\n }\n } else {\n v3 = roundToPrecision(v3, HEX);\n }\n if (alpha === 1) {\n resolvedValue = `${colorNotation}(${v1} ${v2} ${v3})`;\n } else {\n resolvedValue = `${colorNotation}(${v1} ${v2} ${v3} / ${alpha})`;\n }\n } else if (REG_CS_HSL.test(colorNotation)) {\n if (Number.isNaN(v1)) {\n v1 = 0;\n }\n if (Number.isNaN(v2)) {\n v2 = 0;\n }\n if (Number.isNaN(v3)) {\n v3 = 0;\n }\n let [r, g, b] = convertColorToRgb(\n `${colorNotation}(${v1} ${v2} ${v3} / ${alpha})`\n ) as ColorChannels;\n r = roundToPrecision(r / MAX_RGB, DEC);\n g = roundToPrecision(g / MAX_RGB, DEC);\n b = roundToPrecision(b / MAX_RGB, DEC);\n if (alpha === 1) {\n resolvedValue = `color(srgb ${r} ${g} ${b})`;\n } else {\n resolvedValue = `color(srgb ${r} ${g} ${b} / ${alpha})`;\n }\n } else {\n const cs = colorNotation === 'rgb' ? 'srgb' : colorNotation;\n const hasNone = syntaxFlags instanceof Set && syntaxFlags.has(KEY_NONE);\n if (Number.isNaN(v1)) {\n if (hasNone) {\n v1 = NONE;\n } else {\n v1 = 0;\n }\n } else {\n v1 = roundToPrecision(v1, DEC);\n }\n if (Number.isNaN(v2)) {\n if (hasNone) {\n v2 = NONE;\n } else {\n v2 = 0;\n }\n } else {\n v2 = roundToPrecision(v2, DEC);\n }\n if (Number.isNaN(v3)) {\n if (hasNone) {\n v3 = NONE;\n } else {\n v3 = 0;\n }\n } else {\n v3 = roundToPrecision(v3, DEC);\n }\n if (alpha === 1) {\n resolvedValue = `color(${cs} ${v1} ${v2} ${v3})`;\n } else {\n resolvedValue = `color(${cs} ${v1} ${v2} ${v3} / ${alpha})`;\n }\n }\n setCache(cacheKey, resolvedValue);\n return resolvedValue;\n}\n","/**\n * resolve\n */\n\nimport {\n CacheItem,\n NullObject,\n createCacheKey,\n getCache,\n setCache\n} from './cache';\nimport {\n convertRgbToHex,\n resolveColorFunc,\n resolveColorMix,\n resolveColorValue\n} from './color';\nimport { isString } from './common';\nimport { cssCalc } from './css-calc';\nimport { resolveVar } from './css-var';\nimport { resolveRelativeColor } from './relative-color';\nimport { splitValue } from './util';\nimport {\n ComputedColorChannels,\n Options,\n SpecifiedColorChannels\n} from './typedef';\n\n/* constants */\nimport {\n FN_COLOR,\n FN_MIX,\n SYN_FN_CALC,\n SYN_FN_LIGHT_DARK,\n SYN_FN_REL,\n SYN_FN_VAR,\n VAL_COMP,\n VAL_SPEC\n} from './constant';\nconst NAMESPACE = 'resolve';\nconst RGB_TRANSPARENT = 'rgba(0, 0, 0, 0)';\n\n/* regexp */\nconst REG_FN_CALC = new RegExp(SYN_FN_CALC);\nconst REG_FN_LIGHT_DARK = new RegExp(SYN_FN_LIGHT_DARK);\nconst REG_FN_REL = new RegExp(SYN_FN_REL);\nconst REG_FN_VAR = new RegExp(SYN_FN_VAR);\n\n/**\n * resolve color\n * @param value - CSS color value\n * @param [opt] - options\n * @returns resolved color\n */\nexport const resolveColor = (\n value: string,\n opt: Options = {}\n): string | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const {\n colorScheme = 'normal',\n currentColor = '',\n format = VAL_COMP,\n nullable = false\n } = opt;\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'resolve',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return cachedResult as NullObject;\n }\n return cachedResult.item as string;\n }\n if (REG_FN_VAR.test(value)) {\n if (format === VAL_SPEC) {\n setCache(cacheKey, value);\n return value;\n }\n const resolvedValue = resolveVar(value, opt);\n if (resolvedValue instanceof NullObject) {\n switch (format) {\n case 'hex':\n case 'hexAlpha': {\n setCache(cacheKey, resolvedValue);\n return resolvedValue;\n }\n default: {\n if (nullable) {\n setCache(cacheKey, resolvedValue);\n return resolvedValue;\n }\n const res = RGB_TRANSPARENT;\n setCache(cacheKey, res);\n return res;\n }\n }\n } else {\n value = resolvedValue;\n }\n }\n if (opt.format !== format) {\n opt.format = format;\n }\n value = value.toLowerCase();\n if (REG_FN_LIGHT_DARK.test(value) && value.endsWith(')')) {\n const colorParts = value.replace(REG_FN_LIGHT_DARK, '').replace(/\\)$/, '');\n const [light = '', dark = ''] = splitValue(colorParts, {\n delimiter: ','\n });\n if (light && dark) {\n if (format === VAL_SPEC) {\n const lightColor = resolveColor(light, opt);\n const darkColor = resolveColor(dark, opt);\n let res;\n if (lightColor && darkColor) {\n res = `light-dark(${lightColor}, ${darkColor})`;\n } else {\n res = '';\n }\n setCache(cacheKey, res);\n return res;\n }\n let resolvedValue;\n if (colorScheme === 'dark') {\n resolvedValue = resolveColor(dark, opt);\n } else {\n resolvedValue = resolveColor(light, opt);\n }\n let res;\n if (resolvedValue instanceof NullObject) {\n if (nullable) {\n res = resolvedValue;\n } else {\n res = RGB_TRANSPARENT;\n }\n } else {\n res = resolvedValue;\n }\n setCache(cacheKey, res);\n return res;\n }\n // invalid value\n switch (format) {\n case VAL_SPEC: {\n setCache(cacheKey, '');\n return '';\n }\n case 'hex':\n case 'hexAlpha': {\n setCache(cacheKey, null);\n return new NullObject();\n }\n case VAL_COMP:\n default: {\n const res = RGB_TRANSPARENT;\n setCache(cacheKey, res);\n return res;\n }\n }\n }\n if (REG_FN_REL.test(value)) {\n const resolvedValue = resolveRelativeColor(value, opt);\n if (format === VAL_COMP) {\n let res;\n if (resolvedValue instanceof NullObject) {\n if (nullable) {\n res = resolvedValue;\n } else {\n res = RGB_TRANSPARENT;\n }\n } else {\n res = resolvedValue;\n }\n setCache(cacheKey, res);\n return res;\n }\n if (format === VAL_SPEC) {\n let res = '';\n if (resolvedValue instanceof NullObject) {\n res = '';\n } else {\n res = resolvedValue;\n }\n setCache(cacheKey, res);\n return res;\n }\n if (resolvedValue instanceof NullObject) {\n value = '';\n } else {\n value = resolvedValue;\n }\n }\n if (REG_FN_CALC.test(value)) {\n value = cssCalc(value, opt);\n }\n let cs = '';\n let r = NaN;\n let g = NaN;\n let b = NaN;\n let alpha = NaN;\n if (value === 'transparent') {\n switch (format) {\n case VAL_SPEC: {\n setCache(cacheKey, value);\n return value;\n }\n case 'hex': {\n setCache(cacheKey, null);\n return new NullObject();\n }\n case 'hexAlpha': {\n const res = '#00000000';\n setCache(cacheKey, res);\n return res;\n }\n case VAL_COMP:\n default: {\n const res = RGB_TRANSPARENT;\n setCache(cacheKey, res);\n return res;\n }\n }\n } else if (value === 'currentcolor') {\n if (format === VAL_SPEC) {\n setCache(cacheKey, value);\n return value;\n }\n if (currentColor) {\n let resolvedValue;\n if (currentColor.startsWith(FN_MIX)) {\n resolvedValue = resolveColorMix(currentColor, opt);\n } else if (currentColor.startsWith(FN_COLOR)) {\n resolvedValue = resolveColorFunc(currentColor, opt);\n } else {\n resolvedValue = resolveColorValue(currentColor, opt);\n }\n if (resolvedValue instanceof NullObject) {\n setCache(cacheKey, resolvedValue);\n return resolvedValue;\n }\n [cs, r, g, b, alpha] = resolvedValue as ComputedColorChannels;\n } else if (format === VAL_COMP) {\n const res = RGB_TRANSPARENT;\n setCache(cacheKey, res);\n return res;\n }\n } else if (format === VAL_SPEC) {\n if (value.startsWith(FN_MIX)) {\n const res = resolveColorMix(value, opt) as string;\n setCache(cacheKey, res);\n return res;\n } else if (value.startsWith(FN_COLOR)) {\n const [scs, rr, gg, bb, aa] = resolveColorFunc(\n value,\n opt\n ) as SpecifiedColorChannels;\n let res = '';\n if (aa === 1) {\n res = `color(${scs} ${rr} ${gg} ${bb})`;\n } else {\n res = `color(${scs} ${rr} ${gg} ${bb} / ${aa})`;\n }\n setCache(cacheKey, res);\n return res;\n } else {\n const rgb = resolveColorValue(value, opt);\n if (isString(rgb)) {\n setCache(cacheKey, rgb);\n return rgb;\n }\n const [scs, rr, gg, bb, aa] = rgb as SpecifiedColorChannels;\n let res = '';\n if (scs === 'rgb') {\n if (aa === 1) {\n res = `${scs}(${rr}, ${gg}, ${bb})`;\n } else {\n res = `${scs}a(${rr}, ${gg}, ${bb}, ${aa})`;\n }\n } else if (aa === 1) {\n res = `${scs}(${rr} ${gg} ${bb})`;\n } else {\n res = `${scs}(${rr} ${gg} ${bb} / ${aa})`;\n }\n setCache(cacheKey, res);\n return res;\n }\n } else if (value.startsWith(FN_MIX)) {\n if (/currentcolor/.test(value)) {\n if (currentColor) {\n value = value.replace(/currentcolor/g, currentColor);\n }\n }\n if (/transparent/.test(value)) {\n value = value.replace(/transparent/g, RGB_TRANSPARENT);\n }\n const resolvedValue = resolveColorMix(value, opt);\n if (resolvedValue instanceof NullObject) {\n setCache(cacheKey, resolvedValue);\n return resolvedValue;\n }\n [cs, r, g, b, alpha] = resolvedValue as ComputedColorChannels;\n } else if (value.startsWith(FN_COLOR)) {\n const resolvedValue = resolveColorFunc(value, opt);\n if (resolvedValue instanceof NullObject) {\n setCache(cacheKey, resolvedValue);\n return resolvedValue;\n }\n [cs, r, g, b, alpha] = resolvedValue as ComputedColorChannels;\n } else if (value) {\n const resolvedValue = resolveColorValue(value, opt);\n if (resolvedValue instanceof NullObject) {\n setCache(cacheKey, resolvedValue);\n return resolvedValue;\n }\n [cs, r, g, b, alpha] = resolvedValue as ComputedColorChannels;\n }\n let res = '';\n switch (format) {\n case 'hex': {\n if (\n Number.isNaN(r) ||\n Number.isNaN(g) ||\n Number.isNaN(b) ||\n Number.isNaN(alpha) ||\n alpha === 0\n ) {\n setCache(cacheKey, null);\n return new NullObject();\n }\n res = convertRgbToHex([r, g, b, 1]);\n break;\n }\n case 'hexAlpha': {\n if (\n Number.isNaN(r) ||\n Number.isNaN(g) ||\n Number.isNaN(b) ||\n Number.isNaN(alpha)\n ) {\n setCache(cacheKey, null);\n return new NullObject();\n }\n res = convertRgbToHex([r, g, b, alpha]);\n break;\n }\n case VAL_COMP:\n default: {\n switch (cs) {\n case 'rgb': {\n if (alpha === 1) {\n res = `${cs}(${r}, ${g}, ${b})`;\n } else {\n res = `${cs}a(${r}, ${g}, ${b}, ${alpha})`;\n }\n break;\n }\n case 'lab':\n case 'lch':\n case 'oklab':\n case 'oklch': {\n if (alpha === 1) {\n res = `${cs}(${r} ${g} ${b})`;\n } else {\n res = `${cs}(${r} ${g} ${b} / ${alpha})`;\n }\n break;\n }\n // color()\n default: {\n if (alpha === 1) {\n res = `color(${cs} ${r} ${g} ${b})`;\n } else {\n res = `color(${cs} ${r} ${g} ${b} / ${alpha})`;\n }\n }\n }\n }\n }\n setCache(cacheKey, res);\n return res;\n};\n\n/**\n * resolve CSS color\n * @param value\n * - CSS color value\n * - system colors are not supported\n * @param [opt] - options\n * @param [opt.currentColor]\n * - color to use for `currentcolor` keyword\n * - if omitted, it will be treated as a missing color\n * i.e. `rgb(none none none / none)`\n * @param [opt.customProperty]\n * - custom properties\n * - pair of `--` prefixed property name and value,\n * e.g. `customProperty: { '--some-color': '#0000ff' }`\n * - and/or `callback` function to get the value of the custom property,\n * e.g. `customProperty: { callback: someDeclaration.getPropertyValue }`\n * @param [opt.dimension]\n * - dimension, convert relative length to pixels\n * - pair of unit and it's value as a number in pixels,\n * e.g. `dimension: { em: 12, rem: 16, vw: 10.26 }`\n * - and/or `callback` function to get the value as a number in pixels,\n * e.g. `dimension: { callback: convertUnitToPixel }`\n * @param [opt.format]\n * - output format, one of below\n * - `computedValue` (default), [computed value][139] of the color\n * - `specifiedValue`, [specified value][140] of the color\n * - `hex`, hex color notation, i.e. `rrggbb`\n * - `hexAlpha`, hex color notation with alpha channel, i.e. `#rrggbbaa`\n * @returns\n * - one of rgba?(), #rrggbb(aa)?, color-name, '(empty-string)',\n * color(color-space r g b / alpha), color(color-space x y z / alpha),\n * lab(l a b / alpha), lch(l c h / alpha), oklab(l a b / alpha),\n * oklch(l c h / alpha), null\n * - in `computedValue`, values are numbers, however `rgb()` values are\n * integers\n * - in `specifiedValue`, returns `empty string` for unknown and/or invalid\n * color\n * - in `hex`, returns `null` for `transparent`, and also returns `null` if\n * any of `r`, `g`, `b`, `alpha` is not a number\n * - in `hexAlpha`, returns `#00000000` for `transparent`,\n * however returns `null` if any of `r`, `g`, `b`, `alpha` is not a number\n */\nexport const resolve = (value: string, opt: Options = {}): string | null => {\n opt.nullable = false;\n const resolvedValue = resolveColor(value, opt);\n if (resolvedValue instanceof NullObject) {\n return null;\n }\n return resolvedValue as string;\n};\n","/**\n * util\n */\n\nimport { TokenType, tokenize } from '@csstools/css-tokenizer';\nimport { CacheItem, createCacheKey, getCache, setCache } from './cache';\nimport { isString } from './common';\nimport { resolveColor } from './resolve';\nimport { Options } from './typedef';\n\n/* constants */\nimport { NAMED_COLORS } from './color';\nimport { SYN_COLOR_TYPE, SYN_MIX, VAL_SPEC } from './constant';\nconst {\n CloseParen: PAREN_CLOSE,\n Comma: COMMA,\n Comment: COMMENT,\n Delim: DELIM,\n EOF,\n Function: FUNC,\n Ident: IDENT,\n OpenParen: PAREN_OPEN,\n Whitespace: W_SPACE\n} = TokenType;\nconst NAMESPACE = 'util';\n\n/* numeric constants */\nconst DEC = 10;\nconst HEX = 16;\nconst DEG = 360;\nconst DEG_HALF = 180;\n\n/* regexp */\nconst REG_COLOR = new RegExp(`^(?:${SYN_COLOR_TYPE})$`);\nconst REG_FN_COLOR =\n /^(?:(?:ok)?l(?:ab|ch)|color(?:-mix)?|hsla?|hwb|rgba?|var)\\(/;\nconst REG_MIX = new RegExp(SYN_MIX);\n\n/**\n * split value\n * NOTE: comments are stripped, it can be preserved if, in the options param,\n * `delimiter` is either ',' or '/' and with `preserveComment` set to `true`\n * @param value - CSS value\n * @param [opt] - options\n * @returns array of values\n */\nexport const splitValue = (value: string, opt: Options = {}): string[] => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { delimiter = ' ', preserveComment = false } = opt;\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'splitValue',\n value\n },\n {\n delimiter,\n preserveComment\n }\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as string[];\n }\n let regDelimiter;\n if (delimiter === ',') {\n regDelimiter = /^,$/;\n } else if (delimiter === '/') {\n regDelimiter = /^\\/$/;\n } else {\n regDelimiter = /^\\s+$/;\n }\n const tokens = tokenize({ css: value });\n let nest = 0;\n let str = '';\n const res: string[] = [];\n while (tokens.length) {\n const [type, value] = tokens.shift() as [TokenType, string];\n switch (type) {\n case COMMA: {\n if (regDelimiter.test(value)) {\n if (nest === 0) {\n res.push(str.trim());\n str = '';\n } else {\n str += value;\n }\n } else {\n str += value;\n }\n break;\n }\n case DELIM: {\n if (regDelimiter.test(value)) {\n if (nest === 0) {\n res.push(str.trim());\n str = '';\n } else {\n str += value;\n }\n } else {\n str += value;\n }\n break;\n }\n case COMMENT: {\n if (preserveComment && (delimiter === ',' || delimiter === '/')) {\n str += value;\n }\n break;\n }\n case FUNC:\n case PAREN_OPEN: {\n str += value;\n nest++;\n break;\n }\n case PAREN_CLOSE: {\n str += value;\n nest--;\n break;\n }\n case W_SPACE: {\n if (regDelimiter.test(value)) {\n if (nest === 0) {\n if (str) {\n res.push(str.trim());\n str = '';\n }\n } else {\n str += ' ';\n }\n } else if (!str.endsWith(' ')) {\n str += ' ';\n }\n break;\n }\n default: {\n if (type === EOF) {\n res.push(str.trim());\n str = '';\n } else {\n str += value;\n }\n }\n }\n }\n setCache(cacheKey, res);\n return res;\n};\n\n/**\n * extract dashed-ident tokens\n * @param value - CSS value\n * @returns array of dashed-ident tokens\n */\nexport const extractDashedIdent = (value: string): string[] => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey({\n namespace: NAMESPACE,\n name: 'extractDashedIdent',\n value\n });\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as string[];\n }\n const tokens = tokenize({ css: value });\n const items = new Set();\n while (tokens.length) {\n const [type, value] = tokens.shift() as [TokenType, string];\n if (type === IDENT && value.startsWith('--')) {\n items.add(value);\n }\n }\n const res = [...items] as string[];\n setCache(cacheKey, res);\n return res;\n};\n\n/**\n * is color\n * @param value - CSS value\n * @param [opt] - options\n * @returns result\n */\nexport const isColor = (value: unknown, opt: Options = {}): boolean => {\n if (isString(value)) {\n value = value.toLowerCase().trim();\n if (value && isString(value)) {\n if (/^[a-z]+$/.test(value)) {\n if (\n /^(?:currentcolor|transparent)$/.test(value) ||\n Object.hasOwn(NAMED_COLORS, value)\n ) {\n return true;\n }\n } else if (REG_COLOR.test(value) || REG_MIX.test(value)) {\n return true;\n } else if (REG_FN_COLOR.test(value)) {\n opt.nullable = true;\n if (!opt.format) {\n opt.format = VAL_SPEC;\n }\n const resolvedValue = resolveColor(value, opt);\n if (resolvedValue) {\n return true;\n }\n }\n }\n }\n return false;\n};\n\n/**\n * value to JSON string\n * @param value - CSS value\n * @param [func] - stringify function\n * @returns stringified value in JSON notation\n */\nexport const valueToJsonString = (\n value: unknown,\n func: boolean = false\n): string => {\n if (typeof value === 'undefined') {\n return '';\n }\n const res = JSON.stringify(value, (_key, val) => {\n let replacedValue;\n if (typeof val === 'undefined') {\n replacedValue = null;\n } else if (typeof val === 'function') {\n if (func) {\n replacedValue = val.toString().replace(/\\s/g, '').substring(0, HEX);\n } else {\n replacedValue = val.name;\n }\n } else if (val instanceof Map || val instanceof Set) {\n replacedValue = [...val];\n } else if (typeof val === 'bigint') {\n replacedValue = val.toString();\n } else {\n replacedValue = val;\n }\n return replacedValue;\n });\n return res;\n};\n\n/**\n * round to specified precision\n * @param value - numeric value\n * @param bit - minimum bits\n * @returns rounded value\n */\nexport const roundToPrecision = (value: number, bit: number = 0): number => {\n if (!Number.isFinite(value)) {\n throw new TypeError(`${value} is not a finite number.`);\n }\n if (!Number.isFinite(bit)) {\n throw new TypeError(`${bit} is not a finite number.`);\n } else if (bit < 0 || bit > HEX) {\n throw new RangeError(`${bit} is not between 0 and ${HEX}.`);\n }\n if (bit === 0) {\n return Math.round(value);\n }\n let val;\n if (bit === HEX) {\n val = value.toPrecision(6);\n } else if (bit < DEC) {\n val = value.toPrecision(4);\n } else {\n val = value.toPrecision(5);\n }\n return parseFloat(val);\n};\n\n/**\n * interpolate hue\n * @param hueA - hue value\n * @param hueB - hue value\n * @param arc - shorter | longer | increasing | decreasing\n * @returns result - [hueA, hueB]\n */\nexport const interpolateHue = (\n hueA: number,\n hueB: number,\n arc: string = 'shorter'\n): [number, number] => {\n if (!Number.isFinite(hueA)) {\n throw new TypeError(`${hueA} is not a finite number.`);\n }\n if (!Number.isFinite(hueB)) {\n throw new TypeError(`${hueB} is not a finite number.`);\n }\n switch (arc) {\n case 'decreasing': {\n if (hueB > hueA) {\n hueA += DEG;\n }\n break;\n }\n case 'increasing': {\n if (hueB < hueA) {\n hueB += DEG;\n }\n break;\n }\n case 'longer': {\n if (hueB > hueA && hueB < hueA + DEG_HALF) {\n hueA += DEG;\n } else if (hueB > hueA + DEG_HALF * -1 && hueB <= hueA) {\n hueB += DEG;\n }\n break;\n }\n case 'shorter':\n default: {\n if (hueB > hueA + DEG_HALF) {\n hueA += DEG;\n } else if (hueB < hueA + DEG_HALF * -1) {\n hueB += DEG;\n }\n }\n }\n return [hueA, hueB];\n};\n\n/* absolute font size to pixel ratio */\nconst absoluteFontSize = new Map([\n ['xx-small', 3 / 5],\n ['x-small', 3 / 4],\n ['small', 8 / 9],\n ['medium', 1],\n ['large', 6 / 5],\n ['x-large', 3 / 2],\n ['xx-large', 2],\n ['xxx-large', 3]\n]);\n\n/* relative font size to pixel ratio */\nconst relativeFontSize = new Map([\n ['smaller', 1 / 1.2],\n ['larger', 1.2]\n]);\n\n/* absolute length to pixel ratio */\nconst absoluteLength = new Map([\n ['cm', 96 / 2.54],\n ['mm', 96 / 2.54 / 10],\n ['q', 96 / 2.54 / 40],\n ['in', 96],\n ['pc', 96 / 6],\n ['pt', 96 / 72],\n ['px', 1]\n]);\n\n/* relative length to pixel ratio */\nconst relativeLength = new Map([\n ['rcap', 1],\n ['rch', 0.5],\n ['rem', 1],\n ['rex', 0.5],\n ['ric', 1],\n ['rlh', 1.2]\n]);\n\n/**\n * resolve length in pixels\n * @param value - value\n * @param unit - unit\n * @param [opt] - options\n * @returns pixelated value\n */\nexport const resolveLengthInPixels = (\n value: number | string,\n unit: string | undefined,\n opt: Options = {}\n): number => {\n const { dimension = {} } = opt;\n const { callback, em, rem, vh, vw } = dimension as {\n callback: (K: string) => number;\n em: number;\n rem: number;\n vh: number;\n vw: number;\n };\n if (isString(value)) {\n value = value.toLowerCase().trim();\n if (absoluteFontSize.has(value)) {\n return Number(absoluteFontSize.get(value)) * rem;\n } else if (relativeFontSize.has(value)) {\n return Number(relativeFontSize.get(value)) * em;\n }\n return Number.NaN;\n } else if (Number.isFinite(value) && unit) {\n if (Object.hasOwn(dimension, unit)) {\n return value * Number(dimension[unit]);\n } else if (typeof callback === 'function') {\n return value * callback(unit);\n } else if (absoluteLength.has(unit)) {\n return value * Number(absoluteLength.get(unit));\n } else if (relativeLength.has(unit)) {\n return value * Number(relativeLength.get(unit)) * rem;\n } else if (relativeLength.has(`r${unit}`)) {\n return value * Number(relativeLength.get(`r${unit}`)) * em;\n } else {\n switch (unit) {\n case 'vb':\n case 'vi': {\n return value * vw;\n }\n case 'vmax': {\n if (vh > vw) {\n return value * vh;\n }\n return value * vw;\n }\n case 'vmin': {\n if (vh < vw) {\n return value * vh;\n }\n return value * vw;\n }\n default: {\n // unsupported or invalid unit\n return Number.NaN;\n }\n }\n }\n }\n // unsupported or invalid value\n return Number.NaN;\n};\n","/**\n * cache\n */\n\nimport { LRUCache } from 'lru-cache';\nimport { Options } from './typedef';\nimport { valueToJsonString } from './util';\n\n/* numeric constants */\nconst MAX_CACHE = 4096;\n\n/**\n * CacheItem\n */\nexport class CacheItem {\n /* private */\n #isNull: boolean;\n #item: unknown;\n\n /**\n * constructor\n */\n constructor(item: unknown, isNull: boolean = false) {\n this.#item = item;\n this.#isNull = !!isNull;\n }\n\n get item() {\n return this.#item;\n }\n\n get isNull() {\n return this.#isNull;\n }\n}\n\n/**\n * NullObject\n */\nexport class NullObject extends CacheItem {\n /**\n * constructor\n */\n constructor() {\n super(Symbol('null'), true);\n }\n}\n\n/*\n * lru cache\n */\nexport const lruCache = new LRUCache({\n max: MAX_CACHE\n});\n\n/**\n * set cache\n * @param key - cache key\n * @param value - value to cache\n * @returns void\n */\nexport const setCache = (key: string, value: unknown): void => {\n if (key) {\n if (value === null) {\n lruCache.set(key, new NullObject());\n } else if (value instanceof CacheItem) {\n lruCache.set(key, value);\n } else {\n lruCache.set(key, new CacheItem(value));\n }\n }\n};\n\n/**\n * get cache\n * @param key - cache key\n * @returns cached item or false otherwise\n */\nexport const getCache = (key: string): CacheItem | boolean => {\n if (key && lruCache.has(key)) {\n const item = lruCache.get(key);\n if (item instanceof CacheItem) {\n return item;\n }\n // delete unexpected cached item\n lruCache.delete(key);\n return false;\n }\n return false;\n};\n\n/**\n * create cache key\n * @param keyData - key data\n * @param [opt] - options\n * @returns cache key\n */\nexport const createCacheKey = (\n keyData: Record<string, string>,\n opt: Options = {}\n): string => {\n const { customProperty = {}, dimension = {} } = opt;\n let cacheKey = '';\n if (\n keyData &&\n Object.keys(keyData).length &&\n typeof customProperty.callback !== 'function' &&\n typeof dimension.callback !== 'function'\n ) {\n keyData.opt = valueToJsonString(opt);\n cacheKey = valueToJsonString(keyData);\n }\n return cacheKey;\n};\n","/**\n * css-calc\n */\n\nimport { calc } from '@csstools/css-calc';\nimport { CSSToken, TokenType, tokenize } from '@csstools/css-tokenizer';\nimport {\n CacheItem,\n NullObject,\n createCacheKey,\n getCache,\n setCache\n} from './cache';\nimport { isString, isStringOrNumber } from './common';\nimport { resolveVar } from './css-var';\nimport { resolveLengthInPixels, roundToPrecision } from './util';\nimport { MatchedRegExp, Options } from './typedef';\n\n/* constants */\nimport {\n ANGLE,\n LENGTH,\n NUM,\n SYN_FN_CALC,\n SYN_FN_MATH_START,\n SYN_FN_VAR,\n SYN_FN_VAR_START,\n VAL_SPEC\n} from './constant';\nconst {\n CloseParen: PAREN_CLOSE,\n Comment: COMMENT,\n Dimension: DIM,\n EOF,\n Function: FUNC,\n OpenParen: PAREN_OPEN,\n Whitespace: W_SPACE\n} = TokenType;\nconst NAMESPACE = 'css-calc';\n\n/* numeric constants */\nconst TRIA = 3;\nconst HEX = 16;\nconst MAX_PCT = 100;\n\n/* regexp */\nconst REG_FN_CALC = new RegExp(SYN_FN_CALC);\nconst REG_FN_CALC_NUM = new RegExp(`^calc\\\\((${NUM})\\\\)$`);\nconst REG_FN_MATH_START = new RegExp(SYN_FN_MATH_START);\nconst REG_FN_VAR = new RegExp(SYN_FN_VAR);\nconst REG_FN_VAR_START = new RegExp(SYN_FN_VAR_START);\nconst REG_OPERATOR = /\\s[*+/-]\\s/;\nconst REG_TYPE_DIM = new RegExp(`^(${NUM})(${ANGLE}|${LENGTH})$`);\nconst REG_TYPE_DIM_PCT = new RegExp(`^(${NUM})(${ANGLE}|${LENGTH}|%)$`);\nconst REG_TYPE_PCT = new RegExp(`^(${NUM})%$`);\n\n/**\n * Calclator\n */\nexport class Calculator {\n /* private */\n // number\n #hasNum: boolean;\n #numSum: number[];\n #numMul: number[];\n // percentage\n #hasPct: boolean;\n #pctSum: number[];\n #pctMul: number[];\n // dimension\n #hasDim: boolean;\n #dimSum: string[];\n #dimSub: string[];\n #dimMul: string[];\n #dimDiv: string[];\n // et cetra\n #hasEtc: boolean;\n #etcSum: string[];\n #etcSub: string[];\n #etcMul: string[];\n #etcDiv: string[];\n\n /**\n * constructor\n */\n constructor() {\n // number\n this.#hasNum = false;\n this.#numSum = [];\n this.#numMul = [];\n // percentage\n this.#hasPct = false;\n this.#pctSum = [];\n this.#pctMul = [];\n // dimension\n this.#hasDim = false;\n this.#dimSum = [];\n this.#dimSub = [];\n this.#dimMul = [];\n this.#dimDiv = [];\n // et cetra\n this.#hasEtc = false;\n this.#etcSum = [];\n this.#etcSub = [];\n this.#etcMul = [];\n this.#etcDiv = [];\n }\n\n get hasNum() {\n return this.#hasNum;\n }\n\n set hasNum(value: boolean) {\n this.#hasNum = !!value;\n }\n\n get numSum() {\n return this.#numSum;\n }\n\n get numMul() {\n return this.#numMul;\n }\n\n get hasPct() {\n return this.#hasPct;\n }\n\n set hasPct(value: boolean) {\n this.#hasPct = !!value;\n }\n\n get pctSum() {\n return this.#pctSum;\n }\n\n get pctMul() {\n return this.#pctMul;\n }\n\n get hasDim() {\n return this.#hasDim;\n }\n\n set hasDim(value: boolean) {\n this.#hasDim = !!value;\n }\n\n get dimSum() {\n return this.#dimSum;\n }\n\n get dimSub() {\n return this.#dimSub;\n }\n\n get dimMul() {\n return this.#dimMul;\n }\n\n get dimDiv() {\n return this.#dimDiv;\n }\n\n get hasEtc() {\n return this.#hasEtc;\n }\n\n set hasEtc(value: boolean) {\n this.#hasEtc = !!value;\n }\n\n get etcSum() {\n return this.#etcSum;\n }\n\n get etcSub() {\n return this.#etcSub;\n }\n\n get etcMul() {\n return this.#etcMul;\n }\n\n get etcDiv() {\n return this.#etcDiv;\n }\n\n /**\n * clear values\n * @returns void\n */\n clear() {\n // number\n this.#hasNum = false;\n this.#numSum = [];\n this.#numMul = [];\n // percentage\n this.#hasPct = false;\n this.#pctSum = [];\n this.#pctMul = [];\n // dimension\n this.#hasDim = false;\n this.#dimSum = [];\n this.#dimSub = [];\n this.#dimMul = [];\n this.#dimDiv = [];\n // et cetra\n this.#hasEtc = false;\n this.#etcSum = [];\n this.#etcSub = [];\n this.#etcMul = [];\n this.#etcDiv = [];\n }\n\n /**\n * sort values\n * @param values - values\n * @returns sorted values\n */\n sort(values: string[] = []): string[] {\n const arr = [...values];\n if (arr.length > 1) {\n arr.sort((a, b) => {\n let res;\n if (REG_TYPE_DIM_PCT.test(a) && REG_TYPE_DIM_PCT.test(b)) {\n const [, valA, unitA] = a.match(REG_TYPE_DIM_PCT) as MatchedRegExp;\n const [, valB, unitB] = b.match(REG_TYPE_DIM_PCT) as MatchedRegExp;\n if (unitA === unitB) {\n if (Number(valA) === Number(valB)) {\n res = 0;\n } else if (Number(valA) > Number(valB)) {\n res = 1;\n } else {\n res = -1;\n }\n } else if (unitA > unitB) {\n res = 1;\n } else {\n res = -1;\n }\n } else {\n if (a === b) {\n res = 0;\n } else if (a > b) {\n res = 1;\n } else {\n res = -1;\n }\n }\n return res;\n });\n }\n return arr;\n }\n\n /**\n * multiply values\n * @returns resolved value\n */\n multiply(): string {\n const value = [];\n let num;\n if (this.#hasNum) {\n num = 1;\n for (const i of this.#numMul) {\n num *= i;\n if (num === 0 || !Number.isFinite(num) || Number.isNaN(num)) {\n break;\n }\n }\n if (!this.#hasPct && !this.#hasDim && !this.hasEtc) {\n if (Number.isFinite(num)) {\n num = roundToPrecision(num, HEX);\n }\n value.push(num);\n }\n }\n if (this.#hasPct) {\n if (typeof num !== 'number') {\n num = 1;\n }\n for (const i of this.#pctMul) {\n num *= i;\n if (num === 0 || !Number.isFinite(num) || Number.isNaN(num)) {\n break;\n }\n }\n if (Number.isFinite(num)) {\n num = `${roundToPrecision(num, HEX)}%`;\n }\n if (!this.#hasDim && !this.hasEtc) {\n value.push(num);\n }\n }\n if (this.#hasDim) {\n let dim = '';\n let mul = '';\n let div = '';\n if (this.#dimMul.length) {\n if (this.#dimMul.length === 1) {\n [mul] = this.#dimMul as [string];\n } else {\n mul = `${this.sort(this.#dimMul).join(' * ')}`;\n }\n }\n if (this.#dimDiv.length) {\n if (this.#dimDiv.length === 1) {\n [div] = this.#dimDiv as [string];\n } else {\n div = `${this.sort(this.#dimDiv).join(' * ')}`;\n }\n }\n if (Number.isFinite(num)) {\n if (mul) {\n if (div) {\n if (div.includes('*')) {\n dim = calc(`calc(${num} * ${mul} / (${div}))`, {\n toCanonicalUnits: true\n });\n } else {\n dim = calc(`calc(${num} * ${mul} / ${div})`, {\n toCanonicalUnits: true\n });\n }\n } else {\n dim = calc(`calc(${num} * ${mul})`, {\n toCanonicalUnits: true\n });\n }\n } else if (div.includes('*')) {\n dim = calc(`calc(${num} / (${div}))`, {\n toCanonicalUnits: true\n });\n } else {\n dim = calc(`calc(${num} / ${div})`, {\n toCanonicalUnits: true\n });\n }\n value.push(dim.replace(/^calc/, ''));\n } else {\n if (!value.length && num !== undefined) {\n value.push(num);\n }\n if (mul) {\n if (div) {\n if (div.includes('*')) {\n dim = calc(`calc(${mul} / (${div}))`, {\n toCanonicalUnits: true\n });\n } else {\n dim = calc(`calc(${mul} / ${div})`, {\n toCanonicalUnits: true\n });\n }\n } else {\n dim = calc(`calc(${mul})`, {\n toCanonicalUnits: true\n });\n }\n if (value.length) {\n value.push('*', dim.replace(/^calc/, ''));\n } else {\n value.push(dim.replace(/^calc/, ''));\n }\n } else {\n dim = calc(`calc(${div})`, {\n toCanonicalUnits: true\n });\n if (value.length) {\n value.push('/', dim.replace(/^calc/, ''));\n } else {\n value.push('1', '/', dim.replace(/^calc/, ''));\n }\n }\n }\n }\n if (this.#hasEtc) {\n if (this.#etcMul.length) {\n if (!value.length && num !== undefined) {\n value.push(num);\n }\n const mul = this.sort(this.#etcMul).join(' * ');\n if (value.length) {\n value.push(`* ${mul}`);\n } else {\n value.push(`${mul}`);\n }\n }\n if (this.#etcDiv.length) {\n const div = this.sort(this.#etcDiv).join(' * ');\n if (div.includes('*')) {\n if (value.length) {\n value.push(`/ (${div})`);\n } else {\n value.push(`1 / (${div})`);\n }\n } else if (value.length) {\n value.push(`/ ${div}`);\n } else {\n value.push(`1 / ${div}`);\n }\n }\n }\n if (value.length) {\n return value.join(' ');\n }\n return '';\n }\n\n /**\n * sum values\n * @returns resolved value\n */\n sum(): string {\n const value = [];\n if (this.#hasNum) {\n let num = 0;\n for (const i of this.#numSum) {\n num += i;\n if (!Number.isFinite(num) || Number.isNaN(num)) {\n break;\n }\n }\n value.push(num);\n }\n if (this.#hasPct) {\n let num: number | string = 0;\n for (const i of this.#pctSum) {\n num += i;\n if (!Number.isFinite(num)) {\n break;\n }\n }\n if (Number.isFinite(num)) {\n num = `${num}%`;\n }\n if (value.length) {\n value.push(`+ ${num}`);\n } else {\n value.push(num);\n }\n }\n if (this.#hasDim) {\n let dim, sum, sub;\n if (this.#dimSum.length) {\n sum = this.sort(this.#dimSum).join(' + ');\n }\n if (this.#dimSub.length) {\n sub = this.sort(this.#dimSub).join(' + ');\n }\n if (sum) {\n if (sub) {\n if (sub.includes('-')) {\n dim = calc(`calc(${sum} - (${sub}))`, {\n toCanonicalUnits: true\n });\n } else {\n dim = calc(`calc(${sum} - ${sub})`, {\n toCanonicalUnits: true\n });\n }\n } else {\n dim = calc(`calc(${sum})`, {\n toCanonicalUnits: true\n });\n }\n } else {\n dim = calc(`calc(-1 * (${sub}))`, {\n toCanonicalUnits: true\n });\n }\n if (value.length) {\n value.push('+', dim.replace(/^calc/, ''));\n } else {\n value.push(dim.replace(/^calc/, ''));\n }\n }\n if (this.#hasEtc) {\n if (this.#etcSum.length) {\n const sum = this.sort(this.#etcSum)\n .map(item => {\n let res;\n if (\n REG_OPERATOR.test(item) &&\n !item.startsWith('(') &&\n !item.endsWith(')')\n ) {\n res = `(${item})`;\n } else {\n res = item;\n }\n return res;\n })\n .join(' + ');\n if (value.length) {\n if (this.#etcSum.length > 1) {\n value.push(`+ (${sum})`);\n } else {\n value.push(`+ ${sum}`);\n }\n } else {\n value.push(`${sum}`);\n }\n }\n if (this.#etcSub.length) {\n const sub = this.sort(this.#etcSub)\n .map(item => {\n let res;\n if (\n REG_OPERATOR.test(item) &&\n !item.startsWith('(') &&\n !item.endsWith(')')\n ) {\n res = `(${item})`;\n } else {\n res = item;\n }\n return res;\n })\n .join(' + ');\n if (value.length) {\n if (this.#etcSub.length > 1) {\n value.push(`- (${sub})`);\n } else {\n value.push(`- ${sub}`);\n }\n } else if (this.#etcSub.length > 1) {\n value.push(`-1 * (${sub})`);\n } else {\n value.push(`-1 * ${sub}`);\n }\n }\n }\n if (value.length) {\n return value.join(' ');\n }\n return '';\n }\n}\n\n/**\n * sort calc values\n * @param values - values to sort\n * @param [finalize] - finalize values\n * @returns sorted values\n */\nexport const sortCalcValues = (\n values: (number | string)[] = [],\n finalize: boolean = false\n): string => {\n if (values.length < TRIA) {\n throw new Error(`Unexpected array length ${values.length}.`);\n }\n const start = values.shift();\n if (!isString(start) || !start.endsWith('(')) {\n throw new Error(`Unexpected token ${start}.`);\n }\n const end = values.pop();\n if (end !== ')') {\n throw new Error(`Unexpected token ${end}.`);\n }\n if (values.length === 1) {\n const [value] = values;\n if (!isStringOrNumber(value)) {\n throw new Error(`Unexpected token ${value}.`);\n }\n return `${start}${value}${end}`;\n }\n const sortedValues = [];\n const cal = new Calculator();\n let operator: string = '';\n const l = values.length;\n for (let i = 0; i < l; i++) {\n const value = values[i];\n if (!isStringOrNumber(value)) {\n throw new Error(`Unexpected token ${value}.`);\n }\n if (value === '*' || value === '/') {\n operator = value;\n } else if (value === '+' || value === '-') {\n const sortedValue = cal.multiply();\n if (sortedValue) {\n sortedValues.push(sortedValue, value);\n }\n cal.clear();\n operator = '';\n } else {\n const numValue = Number(value);\n const strValue = `${value}`;\n switch (operator) {\n case '/': {\n if (Number.isFinite(numValue)) {\n cal.hasNum = true;\n cal.numMul.push(1 / numValue);\n } else if (REG_TYPE_PCT.test(strValue)) {\n const [, val] = strValue.match(REG_TYPE_PCT) as MatchedRegExp;\n cal.hasPct = true;\n cal.pctMul.push((MAX_PCT * MAX_PCT) / Number(val));\n } else if (REG_TYPE_DIM.test(strValue)) {\n cal.hasDim = true;\n cal.dimDiv.push(strValue);\n } else {\n cal.hasEtc = true;\n cal.etcDiv.push(strValue);\n }\n break;\n }\n case '*':\n default: {\n if (Number.isFinite(numValue)) {\n cal.hasNum = true;\n cal.numMul.push(numValue);\n } else if (REG_TYPE_PCT.test(strValue)) {\n const [, val] = strValue.match(REG_TYPE_PCT) as MatchedRegExp;\n cal.hasPct = true;\n cal.pctMul.push(Number(val));\n } else if (REG_TYPE_DIM.test(strValue)) {\n cal.hasDim = true;\n cal.dimMul.push(strValue);\n } else {\n cal.hasEtc = true;\n cal.etcMul.push(strValue);\n }\n }\n }\n }\n if (i === l - 1) {\n const sortedValue = cal.multiply();\n if (sortedValue) {\n sortedValues.push(sortedValue);\n }\n cal.clear();\n operator = '';\n }\n }\n let resolvedValue = '';\n if (finalize && (sortedValues.includes('+') || sortedValues.includes('-'))) {\n const finalizedValues = [];\n cal.clear();\n operator = '';\n const l = sortedValues.length;\n for (let i = 0; i < l; i++) {\n const value = sortedValues[i];\n if (isStringOrNumber(value)) {\n if (value === '+' || value === '-') {\n operator = value;\n } else {\n const numValue = Number(value);\n const strValue = `${value}`;\n switch (operator) {\n case '-': {\n if (Number.isFinite(numValue)) {\n cal.hasNum = true;\n cal.numSum.push(-1 * numValue);\n } else if (REG_TYPE_PCT.test(strValue)) {\n const [, val] = strValue.match(REG_TYPE_PCT) as MatchedRegExp;\n cal.hasPct = true;\n cal.pctSum.push(-1 * Number(val));\n } else if (REG_TYPE_DIM.test(strValue)) {\n cal.hasDim = true;\n cal.dimSub.push(strValue);\n } else {\n cal.hasEtc = true;\n cal.etcSub.push(strValue);\n }\n break;\n }\n case '+':\n default: {\n if (Number.isFinite(numValue)) {\n cal.hasNum = true;\n cal.numSum.push(numValue);\n } else if (REG_TYPE_PCT.test(strValue)) {\n const [, val] = strValue.match(REG_TYPE_PCT) as MatchedRegExp;\n cal.hasPct = true;\n cal.pctSum.push(Number(val));\n } else if (REG_TYPE_DIM.test(strValue)) {\n cal.hasDim = true;\n cal.dimSum.push(strValue);\n } else {\n cal.hasEtc = true;\n cal.etcSum.push(strValue);\n }\n }\n }\n }\n }\n if (i === l - 1) {\n const sortedValue = cal.sum();\n if (sortedValue) {\n finalizedValues.push(sortedValue);\n }\n cal.clear();\n operator = '';\n }\n }\n resolvedValue = finalizedValues.join(' ').replace(/\\+\\s-/g, '- ');\n } else {\n resolvedValue = sortedValues.join(' ').replace(/\\+\\s-/g, '- ');\n }\n if (\n resolvedValue.startsWith('(') &&\n resolvedValue.endsWith(')') &&\n resolvedValue.lastIndexOf('(') === 0 &&\n resolvedValue.indexOf(')') === resolvedValue.length - 1\n ) {\n resolvedValue = resolvedValue.replace(/^\\(/, '').replace(/\\)$/, '');\n }\n return `${start}${resolvedValue}${end}`;\n};\n\n/**\n * serialize calc\n * @param value - CSS value\n * @param [opt] - options\n * @returns serialized value\n */\nexport const serializeCalc = (value: string, opt: Options = {}): string => {\n const { format = '' } = opt;\n if (isString(value)) {\n if (!REG_FN_VAR_START.test(value) || format !== VAL_SPEC) {\n return value;\n }\n value = value.toLowerCase().trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'serializeCalc',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as string;\n }\n const items: string[] = tokenize({ css: value })\n .map((token: CSSToken): string => {\n const [type, value] = token as [TokenType, string];\n let res = '';\n if (type !== W_SPACE && type !== COMMENT) {\n res = value;\n }\n return res;\n })\n .filter(v => v);\n let startIndex = items.findLastIndex((item: string) => /\\($/.test(item));\n while (startIndex) {\n const endIndex = items.findIndex((item: unknown, index: number) => {\n return item === ')' && index > startIndex;\n });\n const slicedValues: string[] = items.slice(startIndex, endIndex + 1);\n let serializedValue: string = sortCalcValues(slicedValues);\n if (REG_FN_VAR_START.test(serializedValue)) {\n serializedValue = calc(serializedValue, {\n toCanonicalUnits: true\n });\n }\n items.splice(startIndex, endIndex - startIndex + 1, serializedValue);\n startIndex = items.findLastIndex((item: string) => /\\($/.test(item));\n }\n const serializedCalc = sortCalcValues(items, true);\n setCache(cacheKey, serializedCalc);\n return serializedCalc;\n};\n\n/**\n * resolve dimension\n * @param token - CSS token\n * @param [opt] - options\n * @returns resolved value\n */\nexport const resolveDimension = (\n token: CSSToken,\n opt: Options = {}\n): string | NullObject => {\n if (!Array.isArray(token)) {\n throw new TypeError(`${token} is not an array.`);\n }\n const [, , , , detail = {}] = token;\n const { unit, value } = detail as {\n unit: string;\n value: number;\n };\n if (unit === 'px') {\n return `${value}${unit}`;\n }\n const pixelValue = resolveLengthInPixels(Number(value), unit, opt);\n if (Number.isFinite(pixelValue)) {\n return `${roundToPrecision(pixelValue, HEX)}px`;\n }\n return new NullObject();\n};\n\n/**\n * parse tokens\n * @param tokens - CSS tokens\n * @param [opt] - options\n * @returns parsed tokens\n */\nexport const parseTokens = (\n tokens: CSSToken[],\n opt: Options = {}\n): string[] => {\n if (!Array.isArray(tokens)) {\n throw new TypeError(`${tokens} is not an array.`);\n }\n const { format = '' } = opt;\n const mathFunc = new Set();\n let nest = 0;\n const res: string[] = [];\n while (tokens.length) {\n const token = tokens.shift();\n if (!Array.isArray(token)) {\n throw new TypeError(`${token} is not an array.`);\n }\n const [type = '', value = ''] = token as [TokenType, string];\n switch (type) {\n case DIM: {\n if (format === VAL_SPEC && !mathFunc.has(nest)) {\n res.push(value);\n } else {\n const resolvedValue = resolveDimension(token, opt);\n if (isString(resolvedValue)) {\n res.push(resolvedValue);\n } else {\n res.push(value);\n }\n }\n break;\n }\n case FUNC:\n case PAREN_OPEN: {\n res.push(value);\n nest++;\n if (REG_FN_MATH_START.test(value)) {\n mathFunc.add(nest);\n }\n break;\n }\n case PAREN_CLOSE: {\n if (res.length) {\n const lastValue = res[res.length - 1];\n if (lastValue === ' ') {\n res.splice(-1, 1, value);\n } else {\n res.push(value);\n }\n } else {\n res.push(value);\n }\n if (mathFunc.has(nest)) {\n mathFunc.delete(nest);\n }\n nest--;\n break;\n }\n case W_SPACE: {\n if (res.length) {\n const lastValue = res[res.length - 1];\n if (\n isString(lastValue) &&\n !lastValue.endsWith('(') &&\n lastValue !== ' '\n ) {\n res.push(value);\n }\n }\n break;\n }\n default: {\n if (type !== COMMENT && type !== EOF) {\n res.push(value);\n }\n }\n }\n }\n return res;\n};\n\n/**\n * CSS calc()\n * @param value - CSS value including calc()\n * @param [opt] - options\n * @returns resolved value\n */\nexport const cssCalc = (value: string, opt: Options = {}): string => {\n const { format = '' } = opt;\n if (isString(value)) {\n if (REG_FN_VAR.test(value)) {\n if (format === VAL_SPEC) {\n return value;\n } else {\n const resolvedValue = resolveVar(value, opt);\n if (isString(resolvedValue)) {\n return resolvedValue;\n } else {\n return '';\n }\n }\n } else if (!REG_FN_CALC.test(value)) {\n return value;\n }\n value = value.toLowerCase().trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'cssCalc',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as string;\n }\n const tokens = tokenize({ css: value });\n const values = parseTokens(tokens, opt);\n let resolvedValue: string = calc(values.join(''), {\n toCanonicalUnits: true\n });\n if (REG_FN_VAR_START.test(value)) {\n if (REG_TYPE_DIM_PCT.test(resolvedValue)) {\n const [, val, unit] = resolvedValue.match(\n REG_TYPE_DIM_PCT\n ) as MatchedRegExp;\n resolvedValue = `${roundToPrecision(Number(val), HEX)}${unit}`;\n }\n // wrap with `calc()`\n if (\n resolvedValue &&\n !REG_FN_VAR_START.test(resolvedValue) &&\n format === VAL_SPEC\n ) {\n resolvedValue = `calc(${resolvedValue})`;\n }\n }\n if (format === VAL_SPEC) {\n if (/\\s[-+*/]\\s/.test(resolvedValue) && !resolvedValue.includes('NaN')) {\n resolvedValue = serializeCalc(resolvedValue, opt);\n } else if (REG_FN_CALC_NUM.test(resolvedValue)) {\n const [, val] = resolvedValue.match(REG_FN_CALC_NUM) as MatchedRegExp;\n resolvedValue = `calc(${roundToPrecision(Number(val), HEX)})`;\n }\n }\n setCache(cacheKey, resolvedValue);\n return resolvedValue;\n};\n","/**\n * css-gradient\n */\n\nimport { CacheItem, createCacheKey, getCache, setCache } from './cache';\nimport { resolveColor } from './resolve';\nimport { isString } from './common';\nimport { MatchedRegExp, Options } from './typedef';\nimport { isColor, splitValue } from './util';\n\n/* constants */\nimport {\n ANGLE,\n CS_HUE,\n CS_RECT,\n LENGTH,\n NUM,\n NUM_POSITIVE,\n PCT,\n VAL_COMP,\n VAL_SPEC\n} from './constant';\nconst NAMESPACE = 'css-gradient';\nconst DIM_ANGLE = `${NUM}(?:${ANGLE})`;\nconst DIM_ANGLE_PCT = `${DIM_ANGLE}|${PCT}`;\nconst DIM_LEN = `${NUM}(?:${LENGTH})|0`;\nconst DIM_LEN_PCT = `${DIM_LEN}|${PCT}`;\nconst DIM_LEN_PCT_POSI = `${NUM_POSITIVE}(?:${LENGTH}|%)|0`;\nconst DIM_LEN_POSI = `${NUM_POSITIVE}(?:${LENGTH})|0`;\nconst CTR = 'center';\nconst L_R = 'left|right';\nconst T_B = 'top|bottom';\nconst S_E = 'start|end';\nconst AXIS_X = `${L_R}|x-(?:${S_E})`;\nconst AXIS_Y = `${T_B}|y-(?:${S_E})`;\nconst BLOCK = `block-(?:${S_E})`;\nconst INLINE = `inline-(?:${S_E})`;\nconst POS_1 = `${CTR}|${AXIS_X}|${AXIS_Y}|${BLOCK}|${INLINE}|${DIM_LEN_PCT}`;\nconst POS_2 = [\n `(?:${CTR}|${AXIS_X})\\\\s+(?:${CTR}|${AXIS_Y})`,\n `(?:${CTR}|${AXIS_Y})\\\\s+(?:${CTR}|${AXIS_X})`,\n `(?:${CTR}|${AXIS_X}|${DIM_LEN_PCT})\\\\s+(?:${CTR}|${AXIS_Y}|${DIM_LEN_PCT})`,\n `(?:${CTR}|${BLOCK})\\\\s+(?:${CTR}|${INLINE})`,\n `(?:${CTR}|${INLINE})\\\\s+(?:${CTR}|${BLOCK})`,\n `(?:${CTR}|${S_E})\\\\s+(?:${CTR}|${S_E})`\n].join('|');\nconst POS_4 = [\n `(?:${AXIS_X})\\\\s+(?:${DIM_LEN_PCT})\\\\s+(?:${AXIS_Y})\\\\s+(?:${DIM_LEN_PCT})`,\n `(?:${AXIS_Y})\\\\s+(?:${DIM_LEN_PCT})\\\\s+(?:${AXIS_X})\\\\s+(?:${DIM_LEN_PCT})`,\n `(?:${BLOCK})\\\\s+(?:${DIM_LEN_PCT})\\\\s+(?:${INLINE})\\\\s+(?:${DIM_LEN_PCT})`,\n `(?:${INLINE})\\\\s+(?:${DIM_LEN_PCT})\\\\s+(?:${BLOCK})\\\\s+(?:${DIM_LEN_PCT})`,\n `(?:${S_E})\\\\s+(?:${DIM_LEN_PCT})\\\\s+(?:${S_E})\\\\s+(?:${DIM_LEN_PCT})`\n].join('|');\nconst RAD_EXTENT = '(?:clos|farth)est-(?:corner|side)';\nconst RAD_SIZE = [\n `${RAD_EXTENT}(?:\\\\s+${RAD_EXTENT})?`,\n `${DIM_LEN_POSI}`,\n `(?:${DIM_LEN_PCT_POSI})\\\\s+(?:${DIM_LEN_PCT_POSI})`\n].join('|');\nconst RAD_SHAPE = 'circle|ellipse';\nconst FROM_ANGLE = `from\\\\s+${DIM_ANGLE}`;\nconst AT_POSITION = `at\\\\s+(?:${POS_1}|${POS_2}|${POS_4})`;\nconst TO_SIDE_CORNER = `to\\\\s+(?:(?:${L_R})(?:\\\\s(?:${T_B}))?|(?:${T_B})(?:\\\\s(?:${L_R}))?)`;\nconst IN_COLOR_SPACE = `in\\\\s+(?:${CS_RECT}|${CS_HUE})`;\n\n/* type definitions */\n/**\n * @type ColorStopList - list of color stops\n */\ntype ColorStopList = [string, string, ...string[]];\n\n/**\n * @typedef ValidateGradientLine - validate gradient line\n * @property line - gradient line\n * @property valid - result\n */\ninterface ValidateGradientLine {\n line: string;\n valid: boolean;\n}\n\n/**\n * @typedef ValidateColorStops - validate color stops\n * @property colorStops - list of color stops\n * @property valid - result\n */\ninterface ValidateColorStops {\n colorStops: string[];\n valid: boolean;\n}\n\n/**\n * @typedef Gradient - parsed CSS gradient\n * @property value - input value\n * @property type - gradient type\n * @property [gradientLine] - gradient line\n * @property colorStopList - list of color stops\n */\ninterface Gradient {\n value: string;\n type: string;\n gradientLine?: string;\n colorStopList: ColorStopList;\n}\n\n/* regexp */\nconst REG_GRAD = /^(?:repeating-)?(?:conic|linear|radial)-gradient\\(/;\nconst REG_GRAD_CAPT = /^((?:repeating-)?(?:conic|linear|radial)-gradient)\\(/;\n\n/**\n * get gradient type\n * @param value - gradient value\n * @returns gradient type\n */\nexport const getGradientType = (value: string): string => {\n if (isString(value)) {\n value = value.trim();\n if (REG_GRAD.test(value)) {\n const [, type] = value.match(REG_GRAD_CAPT) as MatchedRegExp;\n return type;\n }\n }\n return '';\n};\n\n/**\n * validate gradient line\n * @param value - gradient line value\n * @param type - gradient type\n * @returns result\n */\nexport const validateGradientLine = (\n value: string,\n type: string\n): ValidateGradientLine => {\n if (isString(value) && isString(type)) {\n value = value.trim();\n type = type.trim();\n let lineSyntax = '';\n const defaultValues = [];\n if (/^(?:repeating-)?linear-gradient$/.test(type)) {\n /*\n * <linear-gradient-line> = [\n * [ <angle> | to <side-or-corner> ] ||\n * <color-interpolation-method>\n * ]\n */\n lineSyntax = [\n `(?:${DIM_ANGLE}|${TO_SIDE_CORNER})(?:\\\\s+${IN_COLOR_SPACE})?`,\n `${IN_COLOR_SPACE}(?:\\\\s+(?:${DIM_ANGLE}|${TO_SIDE_CORNER}))?`\n ].join('|');\n defaultValues.push(/to\\s+bottom/);\n } else if (/^(?:repeating-)?radial-gradient$/.test(type)) {\n /*\n * <radial-gradient-line> = [\n * [ [ <radial-shape> || <radial-size> ]? [ at <position> ]? ] ||\n * <color-interpolation-method>]?\n */\n lineSyntax = [\n `(?:${RAD_SHAPE})(?:\\\\s+(?:${RAD_SIZE}))?(?:\\\\s+${AT_POSITION})?(?:\\\\s+${IN_COLOR_SPACE})?`,\n `(?:${RAD_SIZE})(?:\\\\s+(?:${RAD_SHAPE}))?(?:\\\\s+${AT_POSITION})?(?:\\\\s+${IN_COLOR_SPACE})?`,\n `${AT_POSITION}(?:\\\\s+${IN_COLOR_SPACE})?`,\n `${IN_COLOR_SPACE}(?:\\\\s+${RAD_SHAPE})(?:\\\\s+(?:${RAD_SIZE}))?(?:\\\\s+${AT_POSITION})?`,\n `${IN_COLOR_SPACE}(?:\\\\s+${RAD_SIZE})(?:\\\\s+(?:${RAD_SHAPE}))?(?:\\\\s+${AT_POSITION})?`,\n `${IN_COLOR_SPACE}(?:\\\\s+${AT_POSITION})?`\n ].join('|');\n defaultValues.push(/ellipse/, /farthest-corner/, /at\\s+center/);\n } else if (/^(?:repeating-)?conic-gradient$/.test(type)) {\n /*\n * <conic-gradient-line> = [\n * [ [ from <angle> ]? [ at <position> ]? ] ||\n * <color-interpolation-method>\n * ]\n */\n lineSyntax = [\n `${FROM_ANGLE}(?:\\\\s+${AT_POSITION})?(?:\\\\s+${IN_COLOR_SPACE})?`,\n `${AT_POSITION}(?:\\\\s+${IN_COLOR_SPACE})?`,\n `${IN_COLOR_SPACE}(?:\\\\s+${FROM_ANGLE})?(?:\\\\s+${AT_POSITION})?`\n ].join('|');\n defaultValues.push(/at\\s+center/);\n }\n if (lineSyntax) {\n const reg = new RegExp(`^(?:${lineSyntax})$`);\n const valid = reg.test(value);\n if (valid) {\n let line = value;\n for (const defaultValue of defaultValues) {\n line = line.replace(defaultValue, '');\n }\n line = line.replace(/\\s{2,}/g, ' ').trim();\n return {\n line,\n valid\n };\n }\n return {\n valid,\n line: value\n };\n }\n }\n return {\n line: value,\n valid: false\n };\n};\n\n/**\n * validate color stop list\n * @param list\n * @param type\n * @param [opt]\n * @returns result\n */\nexport const validateColorStopList = (\n list: string[],\n type: string,\n opt: Options = {}\n): ValidateColorStops => {\n if (Array.isArray(list) && list.length > 1) {\n const dimension = /^(?:repeating-)?conic-gradient$/.test(type)\n ? DIM_ANGLE_PCT\n : DIM_LEN_PCT;\n const regColorHint = new RegExp(`^(?:${dimension})$`);\n const regDimension = new RegExp(`(?:\\\\s+(?:${dimension})){1,2}$`);\n const valueTypes = [];\n const valueList = [];\n for (const item of list) {\n if (isString(item)) {\n if (regColorHint.test(item)) {\n valueTypes.push('hint');\n valueList.push(item);\n } else {\n const itemColor = item.replace(regDimension, '');\n if (isColor(itemColor, { format: VAL_SPEC })) {\n const resolvedColor = resolveColor(itemColor, opt) as string;\n valueTypes.push('color');\n valueList.push(item.replace(itemColor, resolvedColor));\n } else {\n return {\n colorStops: list,\n valid: false\n };\n }\n }\n }\n }\n const valid = /^color(?:,(?:hint,)?color)+$/.test(valueTypes.join(','));\n return {\n valid,\n colorStops: valueList\n };\n }\n return {\n colorStops: list,\n valid: false\n };\n};\n\n/**\n * parse CSS gradient\n * @param value - gradient value\n * @param [opt] - options\n * @returns parsed result\n */\nexport const parseGradient = (\n value: string,\n opt: Options = {}\n): Gradient | null => {\n if (isString(value)) {\n value = value.trim();\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'parseGradient',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return null;\n }\n return cachedResult.item as Gradient;\n }\n const type = getGradientType(value);\n const gradValue = value.replace(REG_GRAD, '').replace(/\\)$/, '');\n if (type && gradValue) {\n const [lineOrColorStop = '', ...itemList] = splitValue(gradValue, {\n delimiter: ','\n });\n const dimension = /^(?:repeating-)?conic-gradient$/.test(type)\n ? DIM_ANGLE_PCT\n : DIM_LEN_PCT;\n const regDimension = new RegExp(`(?:\\\\s+(?:${dimension})){1,2}$`);\n let colorStop = '';\n if (regDimension.test(lineOrColorStop)) {\n const itemColor = lineOrColorStop.replace(regDimension, '');\n if (isColor(itemColor, { format: VAL_SPEC })) {\n const resolvedColor = resolveColor(itemColor, opt) as string;\n colorStop = lineOrColorStop.replace(itemColor, resolvedColor);\n }\n } else if (isColor(lineOrColorStop, { format: VAL_SPEC })) {\n colorStop = resolveColor(lineOrColorStop, opt) as string;\n }\n if (colorStop) {\n itemList.unshift(colorStop);\n const { colorStops, valid } = validateColorStopList(\n itemList,\n type,\n opt\n );\n if (valid) {\n const res: Gradient = {\n value,\n type,\n colorStopList: colorStops as ColorStopList\n };\n setCache(cacheKey, res);\n return res;\n }\n } else if (itemList.length > 1) {\n const { line: gradientLine, valid: validLine } = validateGradientLine(\n lineOrColorStop,\n type\n );\n const { colorStops, valid: validColorStops } = validateColorStopList(\n itemList,\n type,\n opt\n );\n if (validLine && validColorStops) {\n const res: Gradient = {\n value,\n type,\n gradientLine,\n colorStopList: colorStops as ColorStopList\n };\n setCache(cacheKey, res);\n return res;\n }\n }\n }\n setCache(cacheKey, null);\n return null;\n }\n return null;\n};\n\n/**\n * resolve CSS gradient\n * @param value - CSS value\n * @param [opt] - options\n * @returns result\n */\nexport const resolveGradient = (value: string, opt: Options = {}): string => {\n const { format = VAL_COMP } = opt;\n const gradient = parseGradient(value, opt);\n if (gradient) {\n const { type = '', gradientLine = '', colorStopList = [] } = gradient;\n if (type && Array.isArray(colorStopList) && colorStopList.length > 1) {\n if (gradientLine) {\n return `${type}(${gradientLine}, ${colorStopList.join(', ')})`;\n }\n return `${type}(${colorStopList.join(', ')})`;\n }\n }\n if (format === VAL_SPEC) {\n return '';\n }\n return 'none';\n};\n\n/**\n * is CSS gradient\n * @param value - CSS value\n * @param [opt] - options\n * @returns result\n */\nexport const isGradient = (value: string, opt: Options = {}): boolean => {\n const gradient = parseGradient(value, opt);\n return gradient !== null;\n};\n","/**\n * convert\n */\n\nimport {\n CacheItem,\n NullObject,\n createCacheKey,\n getCache,\n setCache\n} from './cache';\nimport {\n convertColorToHsl,\n convertColorToHwb,\n convertColorToLab,\n convertColorToLch,\n convertColorToOklab,\n convertColorToOklch,\n convertColorToRgb,\n numberToHexString,\n parseColorFunc,\n parseColorValue\n} from './color';\nimport { isString } from './common';\nimport { cssCalc } from './css-calc';\nimport { resolveVar } from './css-var';\nimport { resolveRelativeColor } from './relative-color';\nimport { resolveColor } from './resolve';\nimport { ColorChannels, ComputedColorChannels, Options } from './typedef';\n\n/* constants */\nimport { SYN_FN_CALC, SYN_FN_REL, SYN_FN_VAR, VAL_COMP } from './constant';\nconst NAMESPACE = 'convert';\n\n/* regexp */\nconst REG_FN_CALC = new RegExp(SYN_FN_CALC);\nconst REG_FN_REL = new RegExp(SYN_FN_REL);\nconst REG_FN_VAR = new RegExp(SYN_FN_VAR);\n\n/**\n * pre process\n * @param value - CSS color value\n * @param [opt] - options\n * @returns value\n */\nexport const preProcess = (\n value: string,\n opt: Options = {}\n): string | NullObject => {\n if (isString(value)) {\n value = value.trim();\n if (!value) {\n return new NullObject();\n }\n } else {\n return new NullObject();\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'preProcess',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return cachedResult as NullObject;\n }\n return cachedResult.item as string;\n }\n if (REG_FN_VAR.test(value)) {\n const resolvedValue = resolveVar(value, opt);\n if (isString(resolvedValue)) {\n value = resolvedValue;\n } else {\n setCache(cacheKey, null);\n return new NullObject();\n }\n }\n if (REG_FN_REL.test(value)) {\n const resolvedValue = resolveRelativeColor(value, opt);\n if (isString(resolvedValue)) {\n value = resolvedValue;\n } else {\n setCache(cacheKey, null);\n return new NullObject();\n }\n } else if (REG_FN_CALC.test(value)) {\n value = cssCalc(value, opt);\n }\n if (value.startsWith('color-mix')) {\n const clonedOpt = structuredClone(opt);\n clonedOpt.format = VAL_COMP;\n clonedOpt.nullable = true;\n const resolvedValue = resolveColor(value, clonedOpt);\n setCache(cacheKey, resolvedValue);\n return resolvedValue;\n }\n setCache(cacheKey, value);\n return value;\n};\n\n/**\n * convert number to hex string\n * @param value - numeric value\n * @returns hex string: 00..ff\n */\nexport const numberToHex = (value: number): string => {\n const hex = numberToHexString(value);\n return hex;\n};\n\n/**\n * convert color to hex\n * @param value - CSS color value\n * @param [opt] - options\n * @param [opt.alpha] - enable alpha channel\n * @returns #rrggbb | #rrggbbaa | null\n */\nexport const colorToHex = (value: string, opt: Options = {}): string | null => {\n if (isString(value)) {\n const resolvedValue = preProcess(value, opt);\n if (resolvedValue instanceof NullObject) {\n return null;\n }\n value = resolvedValue.toLowerCase();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { alpha = false } = opt;\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'colorToHex',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return null;\n }\n return cachedResult.item as string;\n }\n let hex;\n opt.nullable = true;\n if (alpha) {\n opt.format = 'hexAlpha';\n hex = resolveColor(value, opt);\n } else {\n opt.format = 'hex';\n hex = resolveColor(value, opt);\n }\n if (isString(hex)) {\n setCache(cacheKey, hex);\n return hex;\n }\n setCache(cacheKey, null);\n return null;\n};\n\n/**\n * convert color to hsl\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels - [h, s, l, alpha]\n */\nexport const colorToHsl = (value: string, opt: Options = {}): ColorChannels => {\n if (isString(value)) {\n const resolvedValue = preProcess(value, opt);\n if (resolvedValue instanceof NullObject) {\n return [0, 0, 0, 0];\n }\n value = resolvedValue.toLowerCase();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'colorToHsl',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as ColorChannels;\n }\n opt.format = 'hsl';\n const hsl = convertColorToHsl(value, opt) as ColorChannels;\n setCache(cacheKey, hsl);\n return hsl;\n};\n\n/**\n * convert color to hwb\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels - [h, w, b, alpha]\n */\nexport const colorToHwb = (value: string, opt: Options = {}): ColorChannels => {\n if (isString(value)) {\n const resolvedValue = preProcess(value, opt);\n if (resolvedValue instanceof NullObject) {\n return [0, 0, 0, 0];\n }\n value = resolvedValue.toLowerCase();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'colorToHwb',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as ColorChannels;\n }\n opt.format = 'hwb';\n const hwb = convertColorToHwb(value, opt) as ColorChannels;\n setCache(cacheKey, hwb);\n return hwb;\n};\n\n/**\n * convert color to lab\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels - [l, a, b, alpha]\n */\nexport const colorToLab = (value: string, opt: Options = {}): ColorChannels => {\n if (isString(value)) {\n const resolvedValue = preProcess(value, opt);\n if (resolvedValue instanceof NullObject) {\n return [0, 0, 0, 0];\n }\n value = resolvedValue.toLowerCase();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'colorToLab',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as ColorChannels;\n }\n const lab = convertColorToLab(value, opt) as ColorChannels;\n setCache(cacheKey, lab);\n return lab;\n};\n\n/**\n * convert color to lch\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels - [l, c, h, alpha]\n */\nexport const colorToLch = (value: string, opt: Options = {}): ColorChannels => {\n if (isString(value)) {\n const resolvedValue = preProcess(value, opt);\n if (resolvedValue instanceof NullObject) {\n return [0, 0, 0, 0];\n }\n value = resolvedValue.toLowerCase();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'colorToLch',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as ColorChannels;\n }\n const lch = convertColorToLch(value, opt) as ColorChannels;\n setCache(cacheKey, lch);\n return lch;\n};\n\n/**\n * convert color to oklab\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels - [l, a, b, alpha]\n */\nexport const colorToOklab = (\n value: string,\n opt: Options = {}\n): ColorChannels => {\n if (isString(value)) {\n const resolvedValue = preProcess(value, opt);\n if (resolvedValue instanceof NullObject) {\n return [0, 0, 0, 0];\n }\n value = resolvedValue.toLowerCase();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'colorToOklab',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as ColorChannels;\n }\n const lab = convertColorToOklab(value, opt) as ColorChannels;\n setCache(cacheKey, lab);\n return lab;\n};\n\n/**\n * convert color to oklch\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels - [l, c, h, alpha]\n */\nexport const colorToOklch = (\n value: string,\n opt: Options = {}\n): ColorChannels => {\n if (isString(value)) {\n const resolvedValue = preProcess(value, opt);\n if (resolvedValue instanceof NullObject) {\n return [0, 0, 0, 0];\n }\n value = resolvedValue.toLowerCase();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'colorToOklch',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as ColorChannels;\n }\n const lch = convertColorToOklch(value, opt) as ColorChannels;\n setCache(cacheKey, lch);\n return lch;\n};\n\n/**\n * convert color to rgb\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels - [r, g, b, alpha]\n */\nexport const colorToRgb = (value: string, opt: Options = {}): ColorChannels => {\n if (isString(value)) {\n const resolvedValue = preProcess(value, opt);\n if (resolvedValue instanceof NullObject) {\n return [0, 0, 0, 0];\n }\n value = resolvedValue.toLowerCase();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'colorToRgb',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as ColorChannels;\n }\n const rgb = convertColorToRgb(value, opt) as ColorChannels;\n setCache(cacheKey, rgb);\n return rgb;\n};\n\n/**\n * convert color to xyz\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels - [x, y, z, alpha]\n */\nexport const colorToXyz = (value: string, opt: Options = {}): ColorChannels => {\n if (isString(value)) {\n const resolvedValue = preProcess(value, opt);\n if (resolvedValue instanceof NullObject) {\n return [0, 0, 0, 0];\n }\n value = resolvedValue.toLowerCase();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'colorToXyz',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as ColorChannels;\n }\n let xyz;\n if (value.startsWith('color(')) {\n [, ...xyz] = parseColorFunc(value, opt) as ComputedColorChannels;\n } else {\n [, ...xyz] = parseColorValue(value, opt) as ComputedColorChannels;\n }\n setCache(cacheKey, xyz);\n return xyz as ColorChannels;\n};\n\n/**\n * convert color to xyz-d50\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels - [x, y, z, alpha]\n */\nexport const colorToXyzD50 = (\n value: string,\n opt: Options = {}\n): ColorChannels => {\n opt.d50 = true;\n return colorToXyz(value, opt);\n};\n\n/* convert */\nexport const convert = {\n colorToHex,\n colorToHsl,\n colorToHwb,\n colorToLab,\n colorToLch,\n colorToOklab,\n colorToOklch,\n colorToRgb,\n colorToXyz,\n colorToXyzD50,\n numberToHex\n};\n","/*!\n * CSS color - Resolve, parse, convert CSS color.\n * @license MIT\n * @copyright asamuzaK (Kazz)\n * @see {@link https://github.com/asamuzaK/cssColor/blob/main/LICENSE}\n */\n\nimport { cssCalc } from './js/css-calc';\nimport { isGradient, resolveGradient } from './js/css-gradient';\nimport { cssVar } from './js/css-var';\nimport {\n extractDashedIdent,\n isColor,\n resolveLengthInPixels,\n splitValue\n} from './js/util';\n\nexport { convert } from './js/convert';\nexport { resolve } from './js/resolve';\n/* utils */\nexport const utils = {\n cssCalc,\n cssVar,\n extractDashedIdent,\n isColor,\n isGradient,\n resolveGradient,\n resolveLengthInPixels,\n splitValue\n};\n"],"names":["ParseError","e","t","o","ParseErrorWithToken","r","stringify","n","i","s","checkIfFourCodePointsWouldStartCDO","isDigitCodePoint","isUppercaseLetterCodePoint","isLowercaseLetterCodePoint","isHexDigitCodePoint","isLetterCodePoint","isIdentStartCodePoint","isNonASCII_IdentCodePoint","isIdentCodePoint","isSurrogate","isNonPrintableCodePoint","isNewLine","isWhitespace","checkIfTwoCodePointsAreAValidEscape","checkIfThreeCodePointsWouldStartAnIdentSequence","checkIfThreeCodePointsWouldStartANumber","checkIfTwoCodePointsStartAComment","checkIfThreeCodePointsWouldStartCDC","c","a","u","mirrorVariantType","mirrorVariant","consumeComment","consumeEscapedCodePoint","consumeIdentSequence","consumeHashToken","consumeNumber","consumeNumericToken","consumeWhiteSpace","Reader","consumeStringToken","checkIfCodePointsMatchURLIdent","consumeBadURL","consumeUrlToken","consumeIdentLikeToken","checkIfThreeCodePointsWouldStartAUnicodeRange","consumeUnicodeRangeToken","tokenize","tokenizer","d","p","noop","mutateUnit","serializeIdent","insertEscapedCodePoint","insertEscapedCharacter","isToken","isTokenNumeric","isTokenWhiteSpaceOrComment","isTokenComma","isTokenComment","isTokenDelim","isTokenDimension","isTokenEOF","isTokenFunction","isTokenHash","isTokenIdent","isTokenNumber","isTokenPercentage","isTokenWhitespace","isTokenOpenParen","isTokenCloseParen","isTokenOpenSquare","isTokenOpenCurly","f","walkerIndexGenerator","consumeComponentValue","consumeSimpleBlock","consumeFunction","consumeWhitespace","l","TokenNode","ContainerNodeBaseClass","FunctionNode","h","m","consumeAllCommentsAndWhitespace","SimpleBlockNode","WhitespaceNode","CommentNode","parseComponentValue","parseCommaSeparatedListOfComponentValues","k","forEach","walk","replaceComponentValues","isSimpleBlockNode","isFunctionNode","isWhitespaceNode","isCommentNode","isWhiteSpaceOrCommentNode","isTokenNode","E","toLowerCaseAZ","I","S","y","M","T","x","P","O","W","L","U","$","Z","z","q","G","convertUnit","v","toCanonicalUnit","addition","C","g","division","isCalculation","solve","multiplication","resolveGlobalsAndConstants","unary","D","resultToCalculation","dimensionToCalculation","percentageToCalculation","numberToCalculation","solveACos","solveASin","solveATan","isDimensionOrNumber","arrayOfSameNumeric","twoOfSameNumeric","solveATan2","solveAbs","solveClamp","solveCos","solveExp","solveHypot","solveMax","solveMin","solveMod","solvePow","solveRem","solveRound","solveSign","solveSin","solveSqrt","solveTan","subtraction","solveLog","R","isNone","V","solveRandom","sfc32","crc32","j","singleNodeSolver","twoCommaSeparatedNodesSolver","calc$1","A","calcWrapper","maxWrapper","variadicNodesSolver","parseRandomValueSharing","variadicArguments","Y","N","B","singleArgument","twoCommaSeparatedArguments","patchNaN","patchInfinity","patchMinusZero","patchPrecision","patchCanonicalUnit","patchCalcResult","tokenizeGlobals","F","calc","calcFromComponentValues","b","w","_","defaultPerf","warned","PROCESS","emitWarning","msg","type","code","fn","AC","AS","warnACPolyfill","reason","printACPolyfillWarning","shouldWarn","isPosInt","getUintArray","max","ZeroArray","size","Stack","#constructing","HeapCls","LRUCache","#max","#maxSize","#dispose","#onInsert","#disposeAfter","#fetchMethod","#memoMethod","#perf","#size","#calculatedSize","#keyMap","#keyList","#valList","#next","#prev","#head","#tail","#free","#disposed","#sizes","#starts","#ttls","#autopurgeTimers","#hasDispose","#hasFetchMethod","#hasDisposeAfter","#hasOnInsert","#isBackgroundFetch","index","options","context","#backgroundFetch","#moveToTail","#indexes","#rindexes","#isStale","ttl","ttlResolution","ttlAutopurge","updateAgeOnGet","updateAgeOnHas","allowStale","dispose","onInsert","disposeAfter","noDisposeOnSet","noUpdateTTL","maxSize","maxEntrySize","sizeCalculation","fetchMethod","memoMethod","noDeleteOnFetchRejection","noDeleteOnStaleGet","allowStaleOnFetchRejection","allowStaleOnFetchAbort","ignoreFetchAbort","perf","UintArray","#initializeSizeTracking","#initializeTTLTracking","key","ttls","starts","purgeTimers","#setItemTTL","start","#delete","#updateItemAge","#statusTTL","status","cachedNow","getNow","age","sizes","#removeItemSize","#requireSize","#addItemSize","#evict","_i","_s","_st","_k","_v","#isValidIndex","getOptions","value","thisp","deleted","entry","remain","arr","setOptions","oldVal","oldValue","dt","task","val","free","head","hasOptions","peekOptions","ac","signal","fetchOpts","cb","updateCache","aborted","ignoreAbort","proceed","fetchFail","bf","vl","eb","er","allowStaleAborted","noDelete","pcall","res","rej","fmp","fetchOptions","forceRefresh","stale","isStale","staleVal","memoOptions","vv","fetching","#connect","#clear","pi","ni","isString","isStringOrNumber","_DIGIT","_COMPARE","_EXPO","_SIGN","_STEP","_TRIG","_MATH","_CALC","_VAR","ANGLE","LENGTH","NUM","NUM_POSITIVE","NONE","PCT","SYN_FN_CALC","SYN_FN_MATH_START","SYN_FN_VAR","SYN_FN_VAR_START","_ALPHA","_ALPHA_LV3","_COLOR_FUNC","_COLOR_KEY","_CS_HUE","_CS_HUE_ARC","_NUM_ANGLE","_NUM_ANGLE_NONE","_NUM_PCT_NONE","CS_HUE","CS_HUE_CAPT","CS_LAB","CS_LCH","CS_SRGB","CS_RGB","CS_XYZ","CS_RECT","CS_MIX","FN_COLOR","FN_LIGHT_DARK","FN_MIX","FN_REL","FN_REL_CAPT","FN_VAR","SYN_FN_COLOR","SYN_FN_LIGHT_DARK","SYN_FN_REL","SYN_HSL","SYN_HSL_LV3","SYN_LCH","SYN_MOD","SYN_RGB_LV3","SYN_COLOR_TYPE","SYN_MIX_PART","SYN_MIX","SYN_MIX_CAPT","VAL_COMP","VAL_MIX","VAL_SPEC","NAMESPACE","PPTH","HALF","DUO","TRIA","QUAD","OCT","DEC","DOZ","HEX","SEXA","DEG_HALF","DEG","MAX_PCT","MAX_RGB","POW_SQR","POW_CUBE","POW_LINEAR","LINEAR_COEF","LINEAR_OFFSET","LAB_L","LAB_A","LAB_B","LAB_EPSILON","LAB_KAPPA","D50","MATRIX_D50_TO_D65","MATRIX_D65_TO_D50","MATRIX_L_RGB_TO_XYZ","MATRIX_XYZ_TO_L_RGB","MATRIX_XYZ_TO_LMS","MATRIX_LMS_TO_XYZ","MATRIX_OKLAB_TO_LMS","MATRIX_LMS_TO_OKLAB","MATRIX_P3_TO_XYZ","MATRIX_REC2020_TO_XYZ","MATRIX_A98_TO_XYZ","MATRIX_PROPHOTO_TO_XYZ_D50","REG_COLOR","REG_CS_HUE","REG_CS_XYZ","REG_CURRENT","REG_FN_COLOR","REG_HSL","REG_HWB","REG_LAB","REG_LCH","REG_MIX","REG_MIX_CAPT","REG_MIX_NEST","REG_OKLAB","REG_OKLCH","REG_SPEC","NAMED_COLORS","cacheInvalidColorValue","cacheKey","format","nullable","setCache","NullObject","resolveInvalidColorValue","validateColorComponents","opt","alpha","minLength","maxLength","minRange","maxRange","validateRange","transformMatrix","mtx","vct","skip","r1c1","r1c2","r1c3","r2c1","r2c2","r2c3","r3c1","r3c2","r3c3","v1","v2","v3","p1","p2","p3","normalizeColorComponents","colorA","colorB","validatedColorA","validatedColorB","numberToHexString","hex","angleToDeg","angle","GRAD","RAD","reg","unit","deg","parseAlpha","parseHexAlpha","alphaMap","transformRgbToLinearRgb","rgb","rr","gg","bb","COND_POW","transformRgbToXyz","transformLinearRgbToRgb","round","transformXyzToRgb","xyz","transformXyzToHsl","min","transformXyzToHwb","wh","bk","transformXyzToOklab","xyzLms","lPct","transformXyzToOklch","transformXyzD50ToRgb","xyzD65","transformXyzD50ToLab","xyzD50","f0","f1","f2","transformXyzD50ToLch","convertRgbToHex","aa","convertHexToRgb","convertHexToLinearRgb","convertHexToXyz","parseRgb","v4","roundToPrecision","parseHsl","sa","rk","gk","parseHwb","factor","parseLab","COEF_PCT","fl","fa","fb","powFl","powFa","powFb","parseLch","parseOklab","parseOklch","cc","parseColorFunc","colorSpace","d50","cs","linearRgb","ALPHA","BETA","REC_COEF","cl","POW_A98","parseColorValue","resolveColorValue","createCacheKey","cachedResult","getCache","CacheItem","cachedItem","resolveColorFunc","convertColorToLinearRgb","convertColorToRgb","convertColorToXyz","convertColorToHsl","convertColorToHwb","convertColorToLab","convertColorToLch","convertColorToOklab","convertColorToOklch","resolveColorMix","nestedItems","hueArc","pctA","pctB","parsed","regColorSpace","items","item","colorParts","csPart","partA","partB","splitValue","colorPartA","pctPartA","colorPartB","pctPartB","specifiedColorA","resolveColor","specifiedColorB","resolvedColorA","resolvedColorB","itemA","itemB","regA","regB","itemPart","itemPartCapt","regItemPart","regLastItem","regColorPart","pA","pB","valueA","valueB","rgbA","rgbB","rrA","ggA","bbA","aaA","rrB","ggB","bbB","aaB","rNone","gNone","bNone","alphaNone","rA","gA","bA","alphaA","rB","gB","bB","alphaB","factorA","factorB","xyzA","xyzB","xxA","yyA","zzA","xxB","yyB","zzB","xNone","yNone","zNone","xA","yA","zA","xB","yB","zB","hslA","hslB","hhA","ssA","llA","hhB","ssB","llB","hA","sA","lA","hB","sB","lB","interpolateHue","lchA","lchB","ccA","ccB","lNone","cNone","hNone","cA","cB","labA","labB","alA","alB","aNone","aA","aB","aO","bO","PAREN_CLOSE","COMMENT","EOF","IDENT","W_SPACE","TokenType","REG_FN_CALC","REG_FN_VAR","resolveCustomProperty","tokens","customProperty","token","restTokens","resolveAsColor","lastValue","isColor","resolvedValue","resolvedItem","resolveVar","cssCalc","parseTokens","values","color","cssVar","multiplyMatrices","D50_to_D65","D65_to_D50","HSL_to_sRGB","HSL_to_sRGB_channel","HWB_to_sRGB","LCH_to_Lab","Lab_to_LCH","Lab_to_XYZ","OKLCH_to_OKLab","OKLab_to_OKLCH","OKLab_to_XYZ","XYZ_to_Lab","compute_f","XYZ_to_OKLab","XYZ_to_lin_P3","XYZ_to_lin_sRGB","gam_2020_channel","gam_sRGB","gam_sRGB_channel","gam_P3","gam_ProPhoto_channel","gam_a98rgb_channel","lin_2020_channel","lin_sRGB","lin_sRGB_channel","lin_P3","lin_P3_to_XYZ","X","lin_ProPhoto_channel","lin_a98rgb_channel","lin_sRGB_to_XYZ","sRGB_to_HSL","sRGB_to_Hue","sRGB_to_XYZ_D50","XYZ_D50_to_sRGB","HSL_to_XYZ_D50","XYZ_D50_to_HSL","HWB_to_XYZ_D50","XYZ_D50_to_HWB","Lab_to_XYZ_D50","XYZ_D50_to_Lab","LCH_to_XYZ_D50","XYZ_D50_to_LCH","OKLab_to_XYZ_D50","XYZ_D50_to_OKLab","OKLCH_to_XYZ_D50","XYZ_D50_to_OKLCH","lin_sRGB_to_XYZ_D50","XYZ_D50_to_lin_sRGB","a98_RGB_to_XYZ_D50","XYZ_D50_to_a98_RGB","P3_to_XYZ_D50","XYZ_D50_to_P3","lin_P3_to_XYZ_D50","XYZ_D50_to_lin_P3","rec_2020_to_XYZ_D50","XYZ_D50_to_rec_2020","ProPhoto_RGB_to_XYZ_D50","XYZ_D50_to_ProPhoto","XYZ_D65_to_XYZ_D50","XYZ_D50_to_XYZ_D65","inGamut","clip","mapGamutRayTrace","rayTraceBox","luminance","contrast_ratio_wcag_2_1","he","me","convertNaNToZero","colorData_to_XYZ_D50","H","pe","colorDataTo","carryForwardMissingComponents","convertPowerlessComponentsToMissingComponents","reducePrecision","normalizeRelativeColorDataChannels","dummyNumberToken","noneToZeroInRelativeColorDataChannels","normalize","Ne","normalize_Color_ChannelValues","be","color$1","ee","ae","ne","re","ie","ce","colorSpaceNameToColorNotation","oe","ve","ge","fe","colorMix","te","colorMixRectangular","colorMixComponents","colorMixPolar","colorMixRectangularPair","fillInMissingComponent","premultiply","interpolate","un_premultiply","colorMixPolarPair","normalizeHue","normalize_legacy_HSL_ChannelValues","normalize_modern_HSL_ChannelValues","threeChannelLegacySyntax","threeChannelSpaceSeparated","hsl","hslCommaSeparated","hslSpaceSeparated","normalize_HWB_ChannelValues","normalize_Lab_ChannelValues","lab","normalize_LCH_ChannelValues","lch","de","namedColor","normalize_OKLab_ChannelValues","oklab","normalize_OKLCH_ChannelValues","oklch","normalize_legacy_sRGB_ChannelValues","normalize_modern_sRGB_ChannelValues","rgbCommaSeparated","rgbSpaceSeparated","XYZ_D50_to_sRGB_Gamut","K","oklch_to_lin_srgb","lin_srgb_to_oklch","contrastColor","le","DELIM","DIM","FUNC","PAREN_OPEN","KEY_NONE","SyntaxFlag","REG_COLOR_CAPT","REG_CS_HSL","REG_CS_CIE","REG_FN_CALC_SUM","REG_FN_MATH_START","REG_FN_REL","REG_FN_REL_CAPT","REG_FN_REL_START","resolveColorChannels","colorChannel","mathFunc","channels","nest","func","precededPct","detail","channel","resolveDimension","channelValues","serializeCalc","extractOriginColor","colorScheme","currentColor","originColor","specifiedOriginColor","resolvedOriginColor","restValue","channelValue","tokenValue","resolveRelativeColor","components","parsedComponents","colorParser","alphaComponent","channelsComponent","colorNotation","syntaxFlags","hasNone","RGB_TRANSPARENT","REG_FN_LIGHT_DARK","light","dark","lightColor","darkColor","scs","resolve","COMMA","delimiter","preserveComment","regDelimiter","str","extractDashedIdent","valueToJsonString","_key","replacedValue","bit","hueA","hueB","arc","absoluteFontSize","relativeFontSize","absoluteLength","relativeLength","resolveLengthInPixels","dimension","callback","em","rem","vh","vw","MAX_CACHE","#isNull","#item","isNull","lruCache","keyData","REG_FN_CALC_NUM","REG_FN_VAR_START","REG_OPERATOR","REG_TYPE_DIM","REG_TYPE_DIM_PCT","REG_TYPE_PCT","Calculator","#hasNum","#numSum","#numMul","#hasPct","#pctSum","#pctMul","#hasDim","#dimSum","#dimSub","#dimMul","#dimDiv","#hasEtc","#etcSum","#etcSub","#etcMul","#etcDiv","valA","unitA","valB","unitB","num","dim","mul","div","sum","sub","sortCalcValues","finalize","end","sortedValues","cal","operator","sortedValue","numValue","strValue","finalizedValues","startIndex","endIndex","slicedValues","serializedValue","serializedCalc","pixelValue","DIM_ANGLE","DIM_ANGLE_PCT","DIM_LEN","DIM_LEN_PCT","DIM_LEN_PCT_POSI","DIM_LEN_POSI","CTR","L_R","T_B","S_E","AXIS_X","AXIS_Y","BLOCK","INLINE","POS_1","POS_2","POS_4","RAD_EXTENT","RAD_SIZE","RAD_SHAPE","FROM_ANGLE","AT_POSITION","TO_SIDE_CORNER","IN_COLOR_SPACE","REG_GRAD","REG_GRAD_CAPT","getGradientType","validateGradientLine","lineSyntax","defaultValues","valid","line","defaultValue","validateColorStopList","list","regColorHint","regDimension","valueTypes","valueList","itemColor","resolvedColor","parseGradient","gradValue","lineOrColorStop","itemList","colorStop","colorStops","gradientLine","validLine","validColorStops","resolveGradient","gradient","colorStopList","isGradient","preProcess","clonedOpt","numberToHex","colorToHex","colorToHsl","colorToHwb","hwb","colorToLab","colorToLch","colorToOklab","colorToOklch","colorToRgb","colorToXyz","colorToXyzD50","convert","utils"],"mappings":"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","x_google_ignoreList":[0,1,2,3,8,9]}
\ No newline at end of file diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/cjs/index.cjs b/vanilla/node_modules/@asamuzakjp/css-color/dist/cjs/index.cjs new file mode 100644 index 0000000..9a91f11 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/cjs/index.cjs @@ -0,0 +1,5764 @@ +"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/index.ts +var index_exports = {}; +__export(index_exports, { + convert: () => convert, + resolve: () => resolve, + utils: () => utils +}); +module.exports = __toCommonJS(index_exports); + +// src/js/css-calc.ts +var import_css_calc4 = require("@csstools/css-calc"); +var import_css_tokenizer4 = require("@csstools/css-tokenizer"); + +// src/js/cache.ts +var import_lru_cache = require("lru-cache"); + +// src/js/util.ts +var import_css_tokenizer3 = require("@csstools/css-tokenizer"); + +// src/js/common.ts +var isString = (o) => typeof o === "string" || o instanceof String; +var isStringOrNumber = (o) => isString(o) || typeof o === "number"; + +// src/js/constant.ts +var _DIGIT = "(?:0|[1-9]\\d*)"; +var _COMPARE = "clamp|max|min"; +var _EXPO = "exp|hypot|log|pow|sqrt"; +var _SIGN = "abs|sign"; +var _STEP = "mod|rem|round"; +var _TRIG = "a?(?:cos|sin|tan)|atan2"; +var _MATH = `${_COMPARE}|${_EXPO}|${_SIGN}|${_STEP}|${_TRIG}`; +var _CALC = `calc|${_MATH}`; +var _VAR = `var|${_CALC}`; +var ANGLE = "deg|g?rad|turn"; +var LENGTH = "[cm]m|[dls]?v(?:[bhiw]|max|min)|in|p[ctx]|q|r?(?:[cl]h|cap|e[mx]|ic)"; +var NUM = `[+-]?(?:${_DIGIT}(?:\\.\\d*)?|\\.\\d+)(?:e-?${_DIGIT})?`; +var NUM_POSITIVE = `\\+?(?:${_DIGIT}(?:\\.\\d*)?|\\.\\d+)(?:e-?${_DIGIT})?`; +var NONE = "none"; +var PCT = `${NUM}%`; +var SYN_FN_CALC = `^(?:${_CALC})\\(|(?<=[*\\/\\s\\(])(?:${_CALC})\\(`; +var SYN_FN_MATH_START = `^(?:${_MATH})\\($`; +var SYN_FN_VAR = "^var\\(|(?<=[*\\/\\s\\(])var\\("; +var SYN_FN_VAR_START = `^(?:${_VAR})\\(`; +var _ALPHA = `(?:\\s*\\/\\s*(?:${NUM}|${PCT}|${NONE}))?`; +var _ALPHA_LV3 = `(?:\\s*,\\s*(?:${NUM}|${PCT}))?`; +var _COLOR_FUNC = "(?:ok)?l(?:ab|ch)|color|hsla?|hwb|rgba?"; +var _COLOR_KEY = "[a-z]+|#[\\da-f]{3}|#[\\da-f]{4}|#[\\da-f]{6}|#[\\da-f]{8}"; +var _CS_HUE = "(?:ok)?lch|hsl|hwb"; +var _CS_HUE_ARC = "(?:de|in)creasing|longer|shorter"; +var _NUM_ANGLE = `${NUM}(?:${ANGLE})?`; +var _NUM_ANGLE_NONE = `(?:${NUM}(?:${ANGLE})?|${NONE})`; +var _NUM_PCT_NONE = `(?:${NUM}|${PCT}|${NONE})`; +var CS_HUE = `(?:${_CS_HUE})(?:\\s(?:${_CS_HUE_ARC})\\shue)?`; +var CS_HUE_CAPT = `(${_CS_HUE})(?:\\s(${_CS_HUE_ARC})\\shue)?`; +var CS_LAB = "(?:ok)?lab"; +var CS_LCH = "(?:ok)?lch"; +var CS_SRGB = "srgb(?:-linear)?"; +var CS_RGB = `(?:a98|prophoto)-rgb|display-p3|rec2020|${CS_SRGB}`; +var CS_XYZ = "xyz(?:-d(?:50|65))?"; +var CS_RECT = `${CS_LAB}|${CS_RGB}|${CS_XYZ}`; +var CS_MIX = `${CS_HUE}|${CS_RECT}`; +var FN_COLOR = "color("; +var FN_LIGHT_DARK = "light-dark("; +var FN_MIX = "color-mix("; +var FN_REL = `(?:${_COLOR_FUNC})\\(\\s*from\\s+`; +var FN_REL_CAPT = `(${_COLOR_FUNC})\\(\\s*from\\s+`; +var FN_VAR = "var("; +var SYN_FN_COLOR = `(?:${CS_RGB}|${CS_XYZ})(?:\\s+${_NUM_PCT_NONE}){3}${_ALPHA}`; +var SYN_FN_LIGHT_DARK = "^light-dark\\("; +var SYN_FN_REL = `^${FN_REL}|(?<=[\\s])${FN_REL}`; +var SYN_HSL = `${_NUM_ANGLE_NONE}(?:\\s+${_NUM_PCT_NONE}){2}${_ALPHA}`; +var SYN_HSL_LV3 = `${_NUM_ANGLE}(?:\\s*,\\s*${PCT}){2}${_ALPHA_LV3}`; +var SYN_LCH = `(?:${_NUM_PCT_NONE}\\s+){2}${_NUM_ANGLE_NONE}${_ALPHA}`; +var SYN_MOD = `${_NUM_PCT_NONE}(?:\\s+${_NUM_PCT_NONE}){2}${_ALPHA}`; +var SYN_RGB_LV3 = `(?:${NUM}(?:\\s*,\\s*${NUM}){2}|${PCT}(?:\\s*,\\s*${PCT}){2})${_ALPHA_LV3}`; +var SYN_COLOR_TYPE = `${_COLOR_KEY}|hsla?\\(\\s*${SYN_HSL_LV3}\\s*\\)|rgba?\\(\\s*${SYN_RGB_LV3}\\s*\\)|(?:hsla?|hwb)\\(\\s*${SYN_HSL}\\s*\\)|(?:(?:ok)?lab|rgba?)\\(\\s*${SYN_MOD}\\s*\\)|(?:ok)?lch\\(\\s*${SYN_LCH}\\s*\\)|color\\(\\s*${SYN_FN_COLOR}\\s*\\)`; +var SYN_MIX_PART = `(?:${SYN_COLOR_TYPE})(?:\\s+${PCT})?`; +var SYN_MIX = `color-mix\\(\\s*in\\s+(?:${CS_MIX})\\s*,\\s*${SYN_MIX_PART}\\s*,\\s*${SYN_MIX_PART}\\s*\\)`; +var SYN_MIX_CAPT = `color-mix\\(\\s*in\\s+(${CS_MIX})\\s*,\\s*(${SYN_MIX_PART})\\s*,\\s*(${SYN_MIX_PART})\\s*\\)`; +var VAL_COMP = "computedValue"; +var VAL_MIX = "mixValue"; +var VAL_SPEC = "specifiedValue"; + +// src/js/color.ts +var NAMESPACE = "color"; +var PPTH = 1e-3; +var HALF = 0.5; +var DUO = 2; +var TRIA = 3; +var QUAD = 4; +var OCT = 8; +var DEC = 10; +var DOZ = 12; +var HEX = 16; +var SEXA = 60; +var DEG_HALF = 180; +var DEG = 360; +var MAX_PCT = 100; +var MAX_RGB = 255; +var POW_SQR = 2; +var POW_CUBE = 3; +var POW_LINEAR = 2.4; +var LINEAR_COEF = 12.92; +var LINEAR_OFFSET = 0.055; +var LAB_L = 116; +var LAB_A = 500; +var LAB_B = 200; +var LAB_EPSILON = 216 / 24389; +var LAB_KAPPA = 24389 / 27; +var D50 = [ + 0.3457 / 0.3585, + 1, + (1 - 0.3457 - 0.3585) / 0.3585 +]; +var MATRIX_D50_TO_D65 = [ + [0.955473421488075, -0.02309845494876471, 0.06325924320057072], + [-0.0283697093338637, 1.0099953980813041, 0.021041441191917323], + [0.012314014864481998, -0.020507649298898964, 1.330365926242124] +]; +var MATRIX_D65_TO_D50 = [ + [1.0479297925449969, 0.022946870601609652, -0.05019226628920524], + [0.02962780877005599, 0.9904344267538799, -0.017073799063418826], + [-0.009243040646204504, 0.015055191490298152, 0.7518742814281371] +]; +var MATRIX_L_RGB_TO_XYZ = [ + [506752 / 1228815, 87881 / 245763, 12673 / 70218], + [87098 / 409605, 175762 / 245763, 12673 / 175545], + [7918 / 409605, 87881 / 737289, 1001167 / 1053270] +]; +var MATRIX_XYZ_TO_L_RGB = [ + [12831 / 3959, -329 / 214, -1974 / 3959], + [-851781 / 878810, 1648619 / 878810, 36519 / 878810], + [705 / 12673, -2585 / 12673, 705 / 667] +]; +var MATRIX_XYZ_TO_LMS = [ + [0.819022437996703, 0.3619062600528904, -0.1288737815209879], + [0.0329836539323885, 0.9292868615863434, 0.0361446663506424], + [0.0481771893596242, 0.2642395317527308, 0.6335478284694309] +]; +var MATRIX_LMS_TO_XYZ = [ + [1.2268798758459243, -0.5578149944602171, 0.2813910456659647], + [-0.0405757452148008, 1.112286803280317, -0.0717110580655164], + [-0.0763729366746601, -0.4214933324022432, 1.5869240198367816] +]; +var MATRIX_OKLAB_TO_LMS = [ + [1, 0.3963377773761749, 0.2158037573099136], + [1, -0.1055613458156586, -0.0638541728258133], + [1, -0.0894841775298119, -1.2914855480194092] +]; +var MATRIX_LMS_TO_OKLAB = [ + [0.210454268309314, 0.7936177747023054, -0.0040720430116193], + [1.9779985324311684, -2.42859224204858, 0.450593709617411], + [0.0259040424655478, 0.7827717124575296, -0.8086757549230774] +]; +var MATRIX_P3_TO_XYZ = [ + [608311 / 1250200, 189793 / 714400, 198249 / 1000160], + [35783 / 156275, 247089 / 357200, 198249 / 2500400], + [0 / 1, 32229 / 714400, 5220557 / 5000800] +]; +var MATRIX_REC2020_TO_XYZ = [ + [63426534 / 99577255, 20160776 / 139408157, 47086771 / 278816314], + [26158966 / 99577255, 472592308 / 697040785, 8267143 / 139408157], + [0 / 1, 19567812 / 697040785, 295819943 / 278816314] +]; +var MATRIX_A98_TO_XYZ = [ + [573536 / 994567, 263643 / 1420810, 187206 / 994567], + [591459 / 1989134, 6239551 / 9945670, 374412 / 4972835], + [53769 / 1989134, 351524 / 4972835, 4929758 / 4972835] +]; +var MATRIX_PROPHOTO_TO_XYZ_D50 = [ + [0.7977666449006423, 0.13518129740053308, 0.0313477341283922], + [0.2880748288194013, 0.711835234241873, 8993693872564e-17], + [0, 0, 0.8251046025104602] +]; +var REG_COLOR = new RegExp(`^(?:${SYN_COLOR_TYPE})$`); +var REG_CS_HUE = new RegExp(`^${CS_HUE_CAPT}$`); +var REG_CS_XYZ = /^xyz(?:-d(?:50|65))?$/; +var REG_CURRENT = /^currentColor$/i; +var REG_FN_COLOR = new RegExp(`^color\\(\\s*(${SYN_FN_COLOR})\\s*\\)$`); +var REG_HSL = new RegExp(`^hsla?\\(\\s*(${SYN_HSL}|${SYN_HSL_LV3})\\s*\\)$`); +var REG_HWB = new RegExp(`^hwb\\(\\s*(${SYN_HSL})\\s*\\)$`); +var REG_LAB = new RegExp(`^lab\\(\\s*(${SYN_MOD})\\s*\\)$`); +var REG_LCH = new RegExp(`^lch\\(\\s*(${SYN_LCH})\\s*\\)$`); +var REG_MIX = new RegExp(`^${SYN_MIX}$`); +var REG_MIX_CAPT = new RegExp(`^${SYN_MIX_CAPT}$`); +var REG_MIX_NEST = new RegExp(`${SYN_MIX}`, "g"); +var REG_OKLAB = new RegExp(`^oklab\\(\\s*(${SYN_MOD})\\s*\\)$`); +var REG_OKLCH = new RegExp(`^oklch\\(\\s*(${SYN_LCH})\\s*\\)$`); +var REG_SPEC = /^(?:specifi|comput)edValue$/; +var NAMED_COLORS = { + aliceblue: [240, 248, 255], + antiquewhite: [250, 235, 215], + aqua: [0, 255, 255], + aquamarine: [127, 255, 212], + azure: [240, 255, 255], + beige: [245, 245, 220], + bisque: [255, 228, 196], + black: [0, 0, 0], + blanchedalmond: [255, 235, 205], + blue: [0, 0, 255], + blueviolet: [138, 43, 226], + brown: [165, 42, 42], + burlywood: [222, 184, 135], + cadetblue: [95, 158, 160], + chartreuse: [127, 255, 0], + chocolate: [210, 105, 30], + coral: [255, 127, 80], + cornflowerblue: [100, 149, 237], + cornsilk: [255, 248, 220], + crimson: [220, 20, 60], + cyan: [0, 255, 255], + darkblue: [0, 0, 139], + darkcyan: [0, 139, 139], + darkgoldenrod: [184, 134, 11], + darkgray: [169, 169, 169], + darkgreen: [0, 100, 0], + darkgrey: [169, 169, 169], + darkkhaki: [189, 183, 107], + darkmagenta: [139, 0, 139], + darkolivegreen: [85, 107, 47], + darkorange: [255, 140, 0], + darkorchid: [153, 50, 204], + darkred: [139, 0, 0], + darksalmon: [233, 150, 122], + darkseagreen: [143, 188, 143], + darkslateblue: [72, 61, 139], + darkslategray: [47, 79, 79], + darkslategrey: [47, 79, 79], + darkturquoise: [0, 206, 209], + darkviolet: [148, 0, 211], + deeppink: [255, 20, 147], + deepskyblue: [0, 191, 255], + dimgray: [105, 105, 105], + dimgrey: [105, 105, 105], + dodgerblue: [30, 144, 255], + firebrick: [178, 34, 34], + floralwhite: [255, 250, 240], + forestgreen: [34, 139, 34], + fuchsia: [255, 0, 255], + gainsboro: [220, 220, 220], + ghostwhite: [248, 248, 255], + gold: [255, 215, 0], + goldenrod: [218, 165, 32], + gray: [128, 128, 128], + green: [0, 128, 0], + greenyellow: [173, 255, 47], + grey: [128, 128, 128], + honeydew: [240, 255, 240], + hotpink: [255, 105, 180], + indianred: [205, 92, 92], + indigo: [75, 0, 130], + ivory: [255, 255, 240], + khaki: [240, 230, 140], + lavender: [230, 230, 250], + lavenderblush: [255, 240, 245], + lawngreen: [124, 252, 0], + lemonchiffon: [255, 250, 205], + lightblue: [173, 216, 230], + lightcoral: [240, 128, 128], + lightcyan: [224, 255, 255], + lightgoldenrodyellow: [250, 250, 210], + lightgray: [211, 211, 211], + lightgreen: [144, 238, 144], + lightgrey: [211, 211, 211], + lightpink: [255, 182, 193], + lightsalmon: [255, 160, 122], + lightseagreen: [32, 178, 170], + lightskyblue: [135, 206, 250], + lightslategray: [119, 136, 153], + lightslategrey: [119, 136, 153], + lightsteelblue: [176, 196, 222], + lightyellow: [255, 255, 224], + lime: [0, 255, 0], + limegreen: [50, 205, 50], + linen: [250, 240, 230], + magenta: [255, 0, 255], + maroon: [128, 0, 0], + mediumaquamarine: [102, 205, 170], + mediumblue: [0, 0, 205], + mediumorchid: [186, 85, 211], + mediumpurple: [147, 112, 219], + mediumseagreen: [60, 179, 113], + mediumslateblue: [123, 104, 238], + mediumspringgreen: [0, 250, 154], + mediumturquoise: [72, 209, 204], + mediumvioletred: [199, 21, 133], + midnightblue: [25, 25, 112], + mintcream: [245, 255, 250], + mistyrose: [255, 228, 225], + moccasin: [255, 228, 181], + navajowhite: [255, 222, 173], + navy: [0, 0, 128], + oldlace: [253, 245, 230], + olive: [128, 128, 0], + olivedrab: [107, 142, 35], + orange: [255, 165, 0], + orangered: [255, 69, 0], + orchid: [218, 112, 214], + palegoldenrod: [238, 232, 170], + palegreen: [152, 251, 152], + paleturquoise: [175, 238, 238], + palevioletred: [219, 112, 147], + papayawhip: [255, 239, 213], + peachpuff: [255, 218, 185], + peru: [205, 133, 63], + pink: [255, 192, 203], + plum: [221, 160, 221], + powderblue: [176, 224, 230], + purple: [128, 0, 128], + rebeccapurple: [102, 51, 153], + red: [255, 0, 0], + rosybrown: [188, 143, 143], + royalblue: [65, 105, 225], + saddlebrown: [139, 69, 19], + salmon: [250, 128, 114], + sandybrown: [244, 164, 96], + seagreen: [46, 139, 87], + seashell: [255, 245, 238], + sienna: [160, 82, 45], + silver: [192, 192, 192], + skyblue: [135, 206, 235], + slateblue: [106, 90, 205], + slategray: [112, 128, 144], + slategrey: [112, 128, 144], + snow: [255, 250, 250], + springgreen: [0, 255, 127], + steelblue: [70, 130, 180], + tan: [210, 180, 140], + teal: [0, 128, 128], + thistle: [216, 191, 216], + tomato: [255, 99, 71], + turquoise: [64, 224, 208], + violet: [238, 130, 238], + wheat: [245, 222, 179], + white: [255, 255, 255], + whitesmoke: [245, 245, 245], + yellow: [255, 255, 0], + yellowgreen: [154, 205, 50] +}; +var cacheInvalidColorValue = (cacheKey, format, nullable = false) => { + if (format === VAL_SPEC) { + const res2 = ""; + setCache(cacheKey, res2); + return res2; + } + if (nullable) { + setCache(cacheKey, null); + return new NullObject(); + } + const res = ["rgb", 0, 0, 0, 0]; + setCache(cacheKey, res); + return res; +}; +var resolveInvalidColorValue = (format, nullable = false) => { + switch (format) { + case "hsl": + case "hwb": + case VAL_MIX: { + return new NullObject(); + } + case VAL_SPEC: { + return ""; + } + default: { + if (nullable) { + return new NullObject(); + } + return ["rgb", 0, 0, 0, 0]; + } + } +}; +var validateColorComponents = (arr, opt = {}) => { + if (!Array.isArray(arr)) { + throw new TypeError(`${arr} is not an array.`); + } + const { + alpha = false, + minLength = TRIA, + maxLength = QUAD, + minRange = 0, + maxRange = 1, + validateRange = true + } = opt; + if (!Number.isFinite(minLength)) { + throw new TypeError(`${minLength} is not a number.`); + } + if (!Number.isFinite(maxLength)) { + throw new TypeError(`${maxLength} is not a number.`); + } + if (!Number.isFinite(minRange)) { + throw new TypeError(`${minRange} is not a number.`); + } + if (!Number.isFinite(maxRange)) { + throw new TypeError(`${maxRange} is not a number.`); + } + const l = arr.length; + if (l < minLength || l > maxLength) { + throw new Error(`Unexpected array length ${l}.`); + } + let i = 0; + while (i < l) { + const v = arr[i]; + if (!Number.isFinite(v)) { + throw new TypeError(`${v} is not a number.`); + } else if (i < TRIA && validateRange && (v < minRange || v > maxRange)) { + throw new RangeError(`${v} is not between ${minRange} and ${maxRange}.`); + } else if (i === TRIA && (v < 0 || v > 1)) { + throw new RangeError(`${v} is not between 0 and 1.`); + } + i++; + } + if (alpha && l === TRIA) { + arr.push(1); + } + return arr; +}; +var transformMatrix = (mtx, vct, skip = false) => { + if (!Array.isArray(mtx)) { + throw new TypeError(`${mtx} is not an array.`); + } else if (mtx.length !== TRIA) { + throw new Error(`Unexpected array length ${mtx.length}.`); + } else if (!skip) { + for (let i of mtx) { + i = validateColorComponents(i, { + maxLength: TRIA, + validateRange: false + }); + } + } + const [[r1c1, r1c2, r1c3], [r2c1, r2c2, r2c3], [r3c1, r3c2, r3c3]] = mtx; + let v1, v2, v3; + if (skip) { + [v1, v2, v3] = vct; + } else { + [v1, v2, v3] = validateColorComponents(vct, { + maxLength: TRIA, + validateRange: false + }); + } + const p1 = r1c1 * v1 + r1c2 * v2 + r1c3 * v3; + const p2 = r2c1 * v1 + r2c2 * v2 + r2c3 * v3; + const p3 = r3c1 * v1 + r3c2 * v2 + r3c3 * v3; + return [p1, p2, p3]; +}; +var normalizeColorComponents = (colorA, colorB, skip = false) => { + if (!Array.isArray(colorA)) { + throw new TypeError(`${colorA} is not an array.`); + } else if (colorA.length !== QUAD) { + throw new Error(`Unexpected array length ${colorA.length}.`); + } + if (!Array.isArray(colorB)) { + throw new TypeError(`${colorB} is not an array.`); + } else if (colorB.length !== QUAD) { + throw new Error(`Unexpected array length ${colorB.length}.`); + } + let i = 0; + while (i < QUAD) { + if (colorA[i] === NONE && colorB[i] === NONE) { + colorA[i] = 0; + colorB[i] = 0; + } else if (colorA[i] === NONE) { + colorA[i] = colorB[i]; + } else if (colorB[i] === NONE) { + colorB[i] = colorA[i]; + } + i++; + } + if (skip) { + return [colorA, colorB]; + } + const validatedColorA = validateColorComponents(colorA, { + minLength: QUAD, + validateRange: false + }); + const validatedColorB = validateColorComponents(colorB, { + minLength: QUAD, + validateRange: false + }); + return [validatedColorA, validatedColorB]; +}; +var numberToHexString = (value) => { + if (!Number.isFinite(value)) { + throw new TypeError(`${value} is not a number.`); + } else { + value = Math.round(value); + if (value < 0 || value > MAX_RGB) { + throw new RangeError(`${value} is not between 0 and ${MAX_RGB}.`); + } + } + let hex = value.toString(HEX); + if (hex.length === 1) { + hex = `0${hex}`; + } + return hex; +}; +var angleToDeg = (angle) => { + if (isString(angle)) { + angle = angle.trim(); + } else { + throw new TypeError(`${angle} is not a string.`); + } + const GRAD = DEG / 400; + const RAD = DEG / (Math.PI * DUO); + const reg = new RegExp(`^(${NUM})(${ANGLE})?$`); + if (!reg.test(angle)) { + throw new SyntaxError(`Invalid property value: ${angle}`); + } + const [, value, unit] = angle.match(reg); + let deg; + switch (unit) { + case "grad": + deg = parseFloat(value) * GRAD; + break; + case "rad": + deg = parseFloat(value) * RAD; + break; + case "turn": + deg = parseFloat(value) * DEG; + break; + default: + deg = parseFloat(value); + } + deg %= DEG; + if (deg < 0) { + deg += DEG; + } else if (Object.is(deg, -0)) { + deg = 0; + } + return deg; +}; +var parseAlpha = (alpha = "") => { + if (isString(alpha)) { + alpha = alpha.trim(); + if (!alpha) { + alpha = "1"; + } else if (alpha === NONE) { + alpha = "0"; + } else { + let a; + if (alpha.endsWith("%")) { + a = parseFloat(alpha) / MAX_PCT; + } else { + a = parseFloat(alpha); + } + if (!Number.isFinite(a)) { + throw new TypeError(`${a} is not a finite number.`); + } + if (a < PPTH) { + alpha = "0"; + } else if (a > 1) { + alpha = "1"; + } else { + alpha = a.toFixed(TRIA); + } + } + } else { + alpha = "1"; + } + return parseFloat(alpha); +}; +var parseHexAlpha = (value) => { + if (isString(value)) { + if (value === "") { + throw new SyntaxError("Invalid property value: (empty string)"); + } + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + let alpha = parseInt(value, HEX); + if (alpha <= 0) { + return 0; + } + if (alpha >= MAX_RGB) { + return 1; + } + const alphaMap = /* @__PURE__ */ new Map(); + for (let i = 1; i < MAX_PCT; i++) { + alphaMap.set(Math.round(i * MAX_RGB / MAX_PCT), i); + } + if (alphaMap.has(alpha)) { + alpha = alphaMap.get(alpha) / MAX_PCT; + } else { + alpha = Math.round(alpha / MAX_RGB / PPTH) * PPTH; + } + return parseFloat(alpha.toFixed(TRIA)); +}; +var transformRgbToLinearRgb = (rgb, skip = false) => { + let rr, gg, bb; + if (skip) { + [rr, gg, bb] = rgb; + } else { + [rr, gg, bb] = validateColorComponents(rgb, { + maxLength: TRIA, + maxRange: MAX_RGB + }); + } + let r = rr / MAX_RGB; + let g = gg / MAX_RGB; + let b = bb / MAX_RGB; + const COND_POW = 0.04045; + if (r > COND_POW) { + r = Math.pow((r + LINEAR_OFFSET) / (1 + LINEAR_OFFSET), POW_LINEAR); + } else { + r /= LINEAR_COEF; + } + if (g > COND_POW) { + g = Math.pow((g + LINEAR_OFFSET) / (1 + LINEAR_OFFSET), POW_LINEAR); + } else { + g /= LINEAR_COEF; + } + if (b > COND_POW) { + b = Math.pow((b + LINEAR_OFFSET) / (1 + LINEAR_OFFSET), POW_LINEAR); + } else { + b /= LINEAR_COEF; + } + return [r, g, b]; +}; +var transformRgbToXyz = (rgb, skip = false) => { + if (!skip) { + rgb = validateColorComponents(rgb, { + maxLength: TRIA, + maxRange: MAX_RGB + }); + } + rgb = transformRgbToLinearRgb(rgb, true); + const xyz = transformMatrix(MATRIX_L_RGB_TO_XYZ, rgb, true); + return xyz; +}; +var transformLinearRgbToRgb = (rgb, round = false) => { + let [r, g, b] = validateColorComponents(rgb, { + maxLength: TRIA + }); + const COND_POW = 809 / 258400; + if (r > COND_POW) { + r = Math.pow(r, 1 / POW_LINEAR) * (1 + LINEAR_OFFSET) - LINEAR_OFFSET; + } else { + r *= LINEAR_COEF; + } + r *= MAX_RGB; + if (g > COND_POW) { + g = Math.pow(g, 1 / POW_LINEAR) * (1 + LINEAR_OFFSET) - LINEAR_OFFSET; + } else { + g *= LINEAR_COEF; + } + g *= MAX_RGB; + if (b > COND_POW) { + b = Math.pow(b, 1 / POW_LINEAR) * (1 + LINEAR_OFFSET) - LINEAR_OFFSET; + } else { + b *= LINEAR_COEF; + } + b *= MAX_RGB; + return [ + round ? Math.round(r) : r, + round ? Math.round(g) : g, + round ? Math.round(b) : b + ]; +}; +var transformXyzToRgb = (xyz, skip = false) => { + if (!skip) { + xyz = validateColorComponents(xyz, { + maxLength: TRIA, + validateRange: false + }); + } + let [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, xyz, true); + [r, g, b] = transformLinearRgbToRgb( + [ + Math.min(Math.max(r, 0), 1), + Math.min(Math.max(g, 0), 1), + Math.min(Math.max(b, 0), 1) + ], + true + ); + return [r, g, b]; +}; +var transformXyzToHsl = (xyz, skip = false) => { + const [rr, gg, bb] = transformXyzToRgb(xyz, skip); + const r = rr / MAX_RGB; + const g = gg / MAX_RGB; + const b = bb / MAX_RGB; + const max = Math.max(r, g, b); + const min = Math.min(r, g, b); + const d = max - min; + const l = (max + min) * HALF * MAX_PCT; + let h, s; + if (Math.round(l) === 0 || Math.round(l) === MAX_PCT) { + h = 0; + s = 0; + } else { + s = d / (1 - Math.abs(max + min - 1)) * MAX_PCT; + if (s === 0) { + h = 0; + } else { + switch (max) { + case r: + h = (g - b) / d; + break; + case g: + h = (b - r) / d + DUO; + break; + case b: + default: + h = (r - g) / d + QUAD; + break; + } + h = h * SEXA % DEG; + if (h < 0) { + h += DEG; + } + } + } + return [h, s, l]; +}; +var transformXyzToHwb = (xyz, skip = false) => { + const [r, g, b] = transformXyzToRgb(xyz, skip); + const wh = Math.min(r, g, b) / MAX_RGB; + const bk = 1 - Math.max(r, g, b) / MAX_RGB; + let h; + if (wh + bk === 1) { + h = 0; + } else { + [h] = transformXyzToHsl(xyz); + } + return [h, wh * MAX_PCT, bk * MAX_PCT]; +}; +var transformXyzToOklab = (xyz, skip = false) => { + if (!skip) { + xyz = validateColorComponents(xyz, { + maxLength: TRIA, + validateRange: false + }); + } + const lms = transformMatrix(MATRIX_XYZ_TO_LMS, xyz, true); + const xyzLms = lms.map((c) => Math.cbrt(c)); + let [l, a, b] = transformMatrix(MATRIX_LMS_TO_OKLAB, xyzLms, true); + l = Math.min(Math.max(l, 0), 1); + const lPct = Math.round(parseFloat(l.toFixed(QUAD)) * MAX_PCT); + if (lPct === 0 || lPct === MAX_PCT) { + a = 0; + b = 0; + } + return [l, a, b]; +}; +var transformXyzToOklch = (xyz, skip = false) => { + const [l, a, b] = transformXyzToOklab(xyz, skip); + let c, h; + const lPct = Math.round(parseFloat(l.toFixed(QUAD)) * MAX_PCT); + if (lPct === 0 || lPct === MAX_PCT) { + c = 0; + h = 0; + } else { + c = Math.max(Math.sqrt(Math.pow(a, POW_SQR) + Math.pow(b, POW_SQR)), 0); + if (parseFloat(c.toFixed(QUAD)) === 0) { + h = 0; + } else { + h = Math.atan2(b, a) * DEG_HALF / Math.PI; + if (h < 0) { + h += DEG; + } + } + } + return [l, c, h]; +}; +var transformXyzD50ToRgb = (xyz, skip = false) => { + if (!skip) { + xyz = validateColorComponents(xyz, { + maxLength: TRIA, + validateRange: false + }); + } + const xyzD65 = transformMatrix(MATRIX_D50_TO_D65, xyz, true); + const rgb = transformXyzToRgb(xyzD65, true); + return rgb; +}; +var transformXyzD50ToLab = (xyz, skip = false) => { + if (!skip) { + xyz = validateColorComponents(xyz, { + maxLength: TRIA, + validateRange: false + }); + } + const xyzD50 = xyz.map((val, i) => val / D50[i]); + const [f0, f1, f2] = xyzD50.map( + (val) => val > LAB_EPSILON ? Math.cbrt(val) : (val * LAB_KAPPA + HEX) / LAB_L + ); + const l = Math.min(Math.max(LAB_L * f1 - HEX, 0), MAX_PCT); + let a, b; + if (l === 0 || l === MAX_PCT) { + a = 0; + b = 0; + } else { + a = (f0 - f1) * LAB_A; + b = (f1 - f2) * LAB_B; + } + return [l, a, b]; +}; +var transformXyzD50ToLch = (xyz, skip = false) => { + const [l, a, b] = transformXyzD50ToLab(xyz, skip); + let c, h; + if (l === 0 || l === MAX_PCT) { + c = 0; + h = 0; + } else { + c = Math.max(Math.sqrt(Math.pow(a, POW_SQR) + Math.pow(b, POW_SQR)), 0); + h = Math.atan2(b, a) * DEG_HALF / Math.PI; + if (h < 0) { + h += DEG; + } + } + return [l, c, h]; +}; +var convertRgbToHex = (rgb) => { + const [r, g, b, alpha] = validateColorComponents(rgb, { + alpha: true, + maxRange: MAX_RGB + }); + const rr = numberToHexString(r); + const gg = numberToHexString(g); + const bb = numberToHexString(b); + const aa = numberToHexString(alpha * MAX_RGB); + let hex; + if (aa === "ff") { + hex = `#${rr}${gg}${bb}`; + } else { + hex = `#${rr}${gg}${bb}${aa}`; + } + return hex; +}; +var convertHexToRgb = (value) => { + if (isString(value)) { + value = value.toLowerCase().trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + if (!(/^#[\da-f]{6}$/.test(value) || /^#[\da-f]{3}$/.test(value) || /^#[\da-f]{8}$/.test(value) || /^#[\da-f]{4}$/.test(value))) { + throw new SyntaxError(`Invalid property value: ${value}`); + } + const arr = []; + if (/^#[\da-f]{3}$/.test(value)) { + const [, r, g, b] = value.match( + /^#([\da-f])([\da-f])([\da-f])$/ + ); + arr.push( + parseInt(`${r}${r}`, HEX), + parseInt(`${g}${g}`, HEX), + parseInt(`${b}${b}`, HEX), + 1 + ); + } else if (/^#[\da-f]{4}$/.test(value)) { + const [, r, g, b, alpha] = value.match( + /^#([\da-f])([\da-f])([\da-f])([\da-f])$/ + ); + arr.push( + parseInt(`${r}${r}`, HEX), + parseInt(`${g}${g}`, HEX), + parseInt(`${b}${b}`, HEX), + parseHexAlpha(`${alpha}${alpha}`) + ); + } else if (/^#[\da-f]{8}$/.test(value)) { + const [, r, g, b, alpha] = value.match( + /^#([\da-f]{2})([\da-f]{2})([\da-f]{2})([\da-f]{2})$/ + ); + arr.push( + parseInt(r, HEX), + parseInt(g, HEX), + parseInt(b, HEX), + parseHexAlpha(alpha) + ); + } else { + const [, r, g, b] = value.match( + /^#([\da-f]{2})([\da-f]{2})([\da-f]{2})$/ + ); + arr.push(parseInt(r, HEX), parseInt(g, HEX), parseInt(b, HEX), 1); + } + return arr; +}; +var convertHexToLinearRgb = (value) => { + const [rr, gg, bb, alpha] = convertHexToRgb(value); + const [r, g, b] = transformRgbToLinearRgb([rr, gg, bb], true); + return [r, g, b, alpha]; +}; +var convertHexToXyz = (value) => { + const [r, g, b, alpha] = convertHexToLinearRgb(value); + const [x, y, z] = transformMatrix(MATRIX_L_RGB_TO_XYZ, [r, g, b], true); + return [x, y, z, alpha]; +}; +var parseRgb = (value, opt = {}) => { + if (isString(value)) { + value = value.toLowerCase().trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "", nullable = false } = opt; + const reg = new RegExp(`^rgba?\\(\\s*(${SYN_MOD}|${SYN_RGB_LV3})\\s*\\)$`); + if (!reg.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + return res; + } + if (isString(res)) { + return res; + } + return res; + } + const [, val] = value.match(reg); + const [v1, v2, v3, v4 = ""] = val.replace(/[,/]/g, " ").split(/\s+/); + let r, g, b; + if (v1 === NONE) { + r = 0; + } else { + if (v1.endsWith("%")) { + r = parseFloat(v1) * MAX_RGB / MAX_PCT; + } else { + r = parseFloat(v1); + } + r = Math.min(Math.max(roundToPrecision(r, OCT), 0), MAX_RGB); + } + if (v2 === NONE) { + g = 0; + } else { + if (v2.endsWith("%")) { + g = parseFloat(v2) * MAX_RGB / MAX_PCT; + } else { + g = parseFloat(v2); + } + g = Math.min(Math.max(roundToPrecision(g, OCT), 0), MAX_RGB); + } + if (v3 === NONE) { + b = 0; + } else { + if (v3.endsWith("%")) { + b = parseFloat(v3) * MAX_RGB / MAX_PCT; + } else { + b = parseFloat(v3); + } + b = Math.min(Math.max(roundToPrecision(b, OCT), 0), MAX_RGB); + } + const alpha = parseAlpha(v4); + return ["rgb", r, g, b, format === VAL_MIX && v4 === NONE ? NONE : alpha]; +}; +var parseHsl = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "", nullable = false } = opt; + if (!REG_HSL.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + return res; + } + if (isString(res)) { + return res; + } + return res; + } + const [, val] = value.match(REG_HSL); + const [v1, v2, v3, v4 = ""] = val.replace(/[,/]/g, " ").split(/\s+/); + let h, s, l; + if (v1 === NONE) { + h = 0; + } else { + h = angleToDeg(v1); + } + if (v2 === NONE) { + s = 0; + } else { + s = Math.min(Math.max(parseFloat(v2), 0), MAX_PCT); + } + if (v3 === NONE) { + l = 0; + } else { + l = Math.min(Math.max(parseFloat(v3), 0), MAX_PCT); + } + const alpha = parseAlpha(v4); + if (format === "hsl") { + return [ + format, + v1 === NONE ? v1 : h, + v2 === NONE ? v2 : s, + v3 === NONE ? v3 : l, + v4 === NONE ? v4 : alpha + ]; + } + h = h / DEG * DOZ; + l /= MAX_PCT; + const sa = s / MAX_PCT * Math.min(l, 1 - l); + const rk = h % DOZ; + const gk = (8 + h) % DOZ; + const bk = (4 + h) % DOZ; + const r = l - sa * Math.max(-1, Math.min(rk - TRIA, TRIA ** POW_SQR - rk, 1)); + const g = l - sa * Math.max(-1, Math.min(gk - TRIA, TRIA ** POW_SQR - gk, 1)); + const b = l - sa * Math.max(-1, Math.min(bk - TRIA, TRIA ** POW_SQR - bk, 1)); + return [ + "rgb", + Math.min(Math.max(roundToPrecision(r * MAX_RGB, OCT), 0), MAX_RGB), + Math.min(Math.max(roundToPrecision(g * MAX_RGB, OCT), 0), MAX_RGB), + Math.min(Math.max(roundToPrecision(b * MAX_RGB, OCT), 0), MAX_RGB), + alpha + ]; +}; +var parseHwb = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "", nullable = false } = opt; + if (!REG_HWB.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + return res; + } + if (isString(res)) { + return res; + } + return res; + } + const [, val] = value.match(REG_HWB); + const [v1, v2, v3, v4 = ""] = val.replace("/", " ").split(/\s+/); + let h, wh, bk; + if (v1 === NONE) { + h = 0; + } else { + h = angleToDeg(v1); + } + if (v2 === NONE) { + wh = 0; + } else { + wh = Math.min(Math.max(parseFloat(v2), 0), MAX_PCT) / MAX_PCT; + } + if (v3 === NONE) { + bk = 0; + } else { + bk = Math.min(Math.max(parseFloat(v3), 0), MAX_PCT) / MAX_PCT; + } + const alpha = parseAlpha(v4); + if (format === "hwb") { + return [ + format, + v1 === NONE ? v1 : h, + v2 === NONE ? v2 : wh * MAX_PCT, + v3 === NONE ? v3 : bk * MAX_PCT, + v4 === NONE ? v4 : alpha + ]; + } + if (wh + bk >= 1) { + const v = roundToPrecision(wh / (wh + bk) * MAX_RGB, OCT); + return ["rgb", v, v, v, alpha]; + } + const factor = (1 - wh - bk) / MAX_RGB; + let [, r, g, b] = parseHsl(`hsl(${h} 100 50)`); + r = roundToPrecision((r * factor + wh) * MAX_RGB, OCT); + g = roundToPrecision((g * factor + wh) * MAX_RGB, OCT); + b = roundToPrecision((b * factor + wh) * MAX_RGB, OCT); + return [ + "rgb", + Math.min(Math.max(r, 0), MAX_RGB), + Math.min(Math.max(g, 0), MAX_RGB), + Math.min(Math.max(b, 0), MAX_RGB), + alpha + ]; +}; +var parseLab = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "", nullable = false } = opt; + if (!REG_LAB.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + return res; + } + if (isString(res)) { + return res; + } + return res; + } + const COEF_PCT = 1.25; + const COND_POW = 8; + const [, val] = value.match(REG_LAB); + const [v1, v2, v3, v4 = ""] = val.replace("/", " ").split(/\s+/); + let l, a, b; + if (v1 === NONE) { + l = 0; + } else { + if (v1.endsWith("%")) { + l = parseFloat(v1); + if (l > MAX_PCT) { + l = MAX_PCT; + } + } else { + l = parseFloat(v1); + } + if (l < 0) { + l = 0; + } + } + if (v2 === NONE) { + a = 0; + } else { + a = v2.endsWith("%") ? parseFloat(v2) * COEF_PCT : parseFloat(v2); + } + if (v3 === NONE) { + b = 0; + } else { + b = v3.endsWith("%") ? parseFloat(v3) * COEF_PCT : parseFloat(v3); + } + const alpha = parseAlpha(v4); + if (REG_SPEC.test(format)) { + return [ + "lab", + v1 === NONE ? v1 : roundToPrecision(l, HEX), + v2 === NONE ? v2 : roundToPrecision(a, HEX), + v3 === NONE ? v3 : roundToPrecision(b, HEX), + v4 === NONE ? v4 : alpha + ]; + } + const fl = (l + HEX) / LAB_L; + const fa = a / LAB_A + fl; + const fb = fl - b / LAB_B; + const powFl = Math.pow(fl, POW_CUBE); + const powFa = Math.pow(fa, POW_CUBE); + const powFb = Math.pow(fb, POW_CUBE); + const xyz = [ + powFa > LAB_EPSILON ? powFa : (fa * LAB_L - HEX) / LAB_KAPPA, + l > COND_POW ? powFl : l / LAB_KAPPA, + powFb > LAB_EPSILON ? powFb : (fb * LAB_L - HEX) / LAB_KAPPA + ]; + const [x, y, z] = xyz.map( + (val2, i) => val2 * D50[i] + ); + return [ + "xyz-d50", + roundToPrecision(x, HEX), + roundToPrecision(y, HEX), + roundToPrecision(z, HEX), + alpha + ]; +}; +var parseLch = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "", nullable = false } = opt; + if (!REG_LCH.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + return res; + } + if (isString(res)) { + return res; + } + return res; + } + const COEF_PCT = 1.5; + const [, val] = value.match(REG_LCH); + const [v1, v2, v3, v4 = ""] = val.replace("/", " ").split(/\s+/); + let l, c, h; + if (v1 === NONE) { + l = 0; + } else { + l = parseFloat(v1); + if (l < 0) { + l = 0; + } + } + if (v2 === NONE) { + c = 0; + } else { + c = v2.endsWith("%") ? parseFloat(v2) * COEF_PCT : parseFloat(v2); + } + if (v3 === NONE) { + h = 0; + } else { + h = angleToDeg(v3); + } + const alpha = parseAlpha(v4); + if (REG_SPEC.test(format)) { + return [ + "lch", + v1 === NONE ? v1 : roundToPrecision(l, HEX), + v2 === NONE ? v2 : roundToPrecision(c, HEX), + v3 === NONE ? v3 : roundToPrecision(h, HEX), + v4 === NONE ? v4 : alpha + ]; + } + const a = c * Math.cos(h * Math.PI / DEG_HALF); + const b = c * Math.sin(h * Math.PI / DEG_HALF); + const [, x, y, z] = parseLab(`lab(${l} ${a} ${b})`); + return [ + "xyz-d50", + roundToPrecision(x, HEX), + roundToPrecision(y, HEX), + roundToPrecision(z, HEX), + alpha + ]; +}; +var parseOklab = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "", nullable = false } = opt; + if (!REG_OKLAB.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + return res; + } + if (isString(res)) { + return res; + } + return res; + } + const COEF_PCT = 0.4; + const [, val] = value.match(REG_OKLAB); + const [v1, v2, v3, v4 = ""] = val.replace("/", " ").split(/\s+/); + let l, a, b; + if (v1 === NONE) { + l = 0; + } else { + l = v1.endsWith("%") ? parseFloat(v1) / MAX_PCT : parseFloat(v1); + if (l < 0) { + l = 0; + } + } + if (v2 === NONE) { + a = 0; + } else if (v2.endsWith("%")) { + a = parseFloat(v2) * COEF_PCT / MAX_PCT; + } else { + a = parseFloat(v2); + } + if (v3 === NONE) { + b = 0; + } else if (v3.endsWith("%")) { + b = parseFloat(v3) * COEF_PCT / MAX_PCT; + } else { + b = parseFloat(v3); + } + const alpha = parseAlpha(v4); + if (REG_SPEC.test(format)) { + return [ + "oklab", + v1 === NONE ? v1 : roundToPrecision(l, HEX), + v2 === NONE ? v2 : roundToPrecision(a, HEX), + v3 === NONE ? v3 : roundToPrecision(b, HEX), + v4 === NONE ? v4 : alpha + ]; + } + const lms = transformMatrix(MATRIX_OKLAB_TO_LMS, [l, a, b]); + const xyzLms = lms.map((c) => Math.pow(c, POW_CUBE)); + const [x, y, z] = transformMatrix(MATRIX_LMS_TO_XYZ, xyzLms, true); + return [ + "xyz-d65", + roundToPrecision(x, HEX), + roundToPrecision(y, HEX), + roundToPrecision(z, HEX), + alpha + ]; +}; +var parseOklch = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "", nullable = false } = opt; + if (!REG_OKLCH.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + return res; + } + if (isString(res)) { + return res; + } + return res; + } + const COEF_PCT = 0.4; + const [, val] = value.match(REG_OKLCH); + const [v1, v2, v3, v4 = ""] = val.replace("/", " ").split(/\s+/); + let l, c, h; + if (v1 === NONE) { + l = 0; + } else { + l = v1.endsWith("%") ? parseFloat(v1) / MAX_PCT : parseFloat(v1); + if (l < 0) { + l = 0; + } + } + if (v2 === NONE) { + c = 0; + } else { + if (v2.endsWith("%")) { + c = parseFloat(v2) * COEF_PCT / MAX_PCT; + } else { + c = parseFloat(v2); + } + if (c < 0) { + c = 0; + } + } + if (v3 === NONE) { + h = 0; + } else { + h = angleToDeg(v3); + } + const alpha = parseAlpha(v4); + if (REG_SPEC.test(format)) { + return [ + "oklch", + v1 === NONE ? v1 : roundToPrecision(l, HEX), + v2 === NONE ? v2 : roundToPrecision(c, HEX), + v3 === NONE ? v3 : roundToPrecision(h, HEX), + v4 === NONE ? v4 : alpha + ]; + } + const a = c * Math.cos(h * Math.PI / DEG_HALF); + const b = c * Math.sin(h * Math.PI / DEG_HALF); + const lms = transformMatrix(MATRIX_OKLAB_TO_LMS, [l, a, b]); + const xyzLms = lms.map((cc) => Math.pow(cc, POW_CUBE)); + const [x, y, z] = transformMatrix(MATRIX_LMS_TO_XYZ, xyzLms, true); + return [ + "xyz-d65", + roundToPrecision(x, HEX), + roundToPrecision(y, HEX), + roundToPrecision(z, HEX), + alpha + ]; +}; +var parseColorFunc = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { colorSpace = "", d50 = false, format = "", nullable = false } = opt; + if (!REG_FN_COLOR.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + return res; + } + if (isString(res)) { + return res; + } + return res; + } + const [, val] = value.match(REG_FN_COLOR); + let [cs, v1, v2, v3, v4 = ""] = val.replace("/", " ").split(/\s+/); + let r, g, b; + if (cs === "xyz") { + cs = "xyz-d65"; + } + if (v1 === NONE) { + r = 0; + } else { + r = v1.endsWith("%") ? parseFloat(v1) / MAX_PCT : parseFloat(v1); + } + if (v2 === NONE) { + g = 0; + } else { + g = v2.endsWith("%") ? parseFloat(v2) / MAX_PCT : parseFloat(v2); + } + if (v3 === NONE) { + b = 0; + } else { + b = v3.endsWith("%") ? parseFloat(v3) / MAX_PCT : parseFloat(v3); + } + const alpha = parseAlpha(v4); + if (REG_SPEC.test(format) || format === VAL_MIX && cs === colorSpace) { + return [ + cs, + v1 === NONE ? v1 : roundToPrecision(r, DEC), + v2 === NONE ? v2 : roundToPrecision(g, DEC), + v3 === NONE ? v3 : roundToPrecision(b, DEC), + v4 === NONE ? v4 : alpha + ]; + } + let x = 0; + let y = 0; + let z = 0; + if (cs === "srgb-linear") { + [x, y, z] = transformMatrix(MATRIX_L_RGB_TO_XYZ, [r, g, b]); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + } else if (cs === "display-p3") { + const linearRgb = transformRgbToLinearRgb([ + r * MAX_RGB, + g * MAX_RGB, + b * MAX_RGB + ]); + [x, y, z] = transformMatrix(MATRIX_P3_TO_XYZ, linearRgb); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + } else if (cs === "rec2020") { + const ALPHA = 1.09929682680944; + const BETA = 0.018053968510807; + const REC_COEF = 0.45; + const rgb = [r, g, b].map((c) => { + let cl; + if (c < BETA * REC_COEF * DEC) { + cl = c / (REC_COEF * DEC); + } else { + cl = Math.pow((c + ALPHA - 1) / ALPHA, 1 / REC_COEF); + } + return cl; + }); + [x, y, z] = transformMatrix(MATRIX_REC2020_TO_XYZ, rgb); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + } else if (cs === "a98-rgb") { + const POW_A98 = 563 / 256; + const rgb = [r, g, b].map((c) => { + const cl = Math.pow(c, POW_A98); + return cl; + }); + [x, y, z] = transformMatrix(MATRIX_A98_TO_XYZ, rgb); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + } else if (cs === "prophoto-rgb") { + const POW_PROPHOTO = 1.8; + const rgb = [r, g, b].map((c) => { + let cl; + if (c > 1 / (HEX * DUO)) { + cl = Math.pow(c, POW_PROPHOTO); + } else { + cl = c / HEX; + } + return cl; + }); + [x, y, z] = transformMatrix(MATRIX_PROPHOTO_TO_XYZ_D50, rgb); + if (!d50) { + [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true); + } + } else if (/^xyz(?:-d(?:50|65))?$/.test(cs)) { + [x, y, z] = [r, g, b]; + if (cs === "xyz-d50") { + if (!d50) { + [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z]); + } + } else if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + } else { + [x, y, z] = transformRgbToXyz([r * MAX_RGB, g * MAX_RGB, b * MAX_RGB]); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + } + return [ + d50 ? "xyz-d50" : "xyz-d65", + roundToPrecision(x, HEX), + roundToPrecision(y, HEX), + roundToPrecision(z, HEX), + format === VAL_MIX && v4 === NONE ? v4 : alpha + ]; +}; +var parseColorValue = (value, opt = {}) => { + if (isString(value)) { + value = value.toLowerCase().trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { d50 = false, format = "", nullable = false } = opt; + if (!REG_COLOR.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + return res; + } + if (isString(res)) { + return res; + } + return res; + } + let x = 0; + let y = 0; + let z = 0; + let alpha = 0; + if (REG_CURRENT.test(value)) { + if (format === VAL_COMP) { + return ["rgb", 0, 0, 0, 0]; + } + if (format === VAL_SPEC) { + return value; + } + } else if (/^[a-z]+$/.test(value)) { + if (Object.hasOwn(NAMED_COLORS, value)) { + if (format === VAL_SPEC) { + return value; + } + const [r, g, b] = NAMED_COLORS[value]; + alpha = 1; + if (format === VAL_COMP) { + return ["rgb", r, g, b, alpha]; + } + [x, y, z] = transformRgbToXyz([r, g, b], true); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + } else { + switch (format) { + case VAL_COMP: { + if (nullable && value !== "transparent") { + return new NullObject(); + } + return ["rgb", 0, 0, 0, 0]; + } + case VAL_SPEC: { + if (value === "transparent") { + return value; + } + return ""; + } + case VAL_MIX: { + if (value === "transparent") { + return ["rgb", 0, 0, 0, 0]; + } + return new NullObject(); + } + default: + } + } + } else if (value[0] === "#") { + if (REG_SPEC.test(format)) { + const rgb = convertHexToRgb(value); + return ["rgb", ...rgb]; + } + [x, y, z, alpha] = convertHexToXyz(value); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + } else if (value.startsWith("lab")) { + if (REG_SPEC.test(format)) { + return parseLab(value, opt); + } + [, x, y, z, alpha] = parseLab(value); + if (!d50) { + [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true); + } + } else if (value.startsWith("lch")) { + if (REG_SPEC.test(format)) { + return parseLch(value, opt); + } + [, x, y, z, alpha] = parseLch(value); + if (!d50) { + [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true); + } + } else if (value.startsWith("oklab")) { + if (REG_SPEC.test(format)) { + return parseOklab(value, opt); + } + [, x, y, z, alpha] = parseOklab(value); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + } else if (value.startsWith("oklch")) { + if (REG_SPEC.test(format)) { + return parseOklch(value, opt); + } + [, x, y, z, alpha] = parseOklch(value); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + } else { + let r, g, b; + if (value.startsWith("hsl")) { + [, r, g, b, alpha] = parseHsl(value); + } else if (value.startsWith("hwb")) { + [, r, g, b, alpha] = parseHwb(value); + } else { + [, r, g, b, alpha] = parseRgb(value, opt); + } + if (REG_SPEC.test(format)) { + return ["rgb", Math.round(r), Math.round(g), Math.round(b), alpha]; + } + [x, y, z] = transformRgbToXyz([r, g, b]); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + } + return [ + d50 ? "xyz-d50" : "xyz-d65", + roundToPrecision(x, HEX), + roundToPrecision(y, HEX), + roundToPrecision(z, HEX), + alpha + ]; +}; +var resolveColorValue = (value, opt = {}) => { + if (isString(value)) { + value = value.toLowerCase().trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { colorSpace = "", format = "", nullable = false } = opt; + const cacheKey = createCacheKey( + { + namespace: NAMESPACE, + name: "resolveColorValue", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return cachedResult; + } + const cachedItem = cachedResult.item; + if (isString(cachedItem)) { + return cachedItem; + } + return cachedItem; + } + if (!REG_COLOR.test(value)) { + const res2 = resolveInvalidColorValue(format, nullable); + if (res2 instanceof NullObject) { + setCache(cacheKey, null); + return res2; + } + setCache(cacheKey, res2); + if (isString(res2)) { + return res2; + } + return res2; + } + let cs = ""; + let r = 0; + let g = 0; + let b = 0; + let alpha = 0; + if (REG_CURRENT.test(value)) { + if (format === VAL_SPEC) { + setCache(cacheKey, value); + return value; + } + } else if (/^[a-z]+$/.test(value)) { + if (Object.hasOwn(NAMED_COLORS, value)) { + if (format === VAL_SPEC) { + setCache(cacheKey, value); + return value; + } + [r, g, b] = NAMED_COLORS[value]; + alpha = 1; + } else { + switch (format) { + case VAL_SPEC: { + if (value === "transparent") { + setCache(cacheKey, value); + return value; + } + const res2 = ""; + setCache(cacheKey, res2); + return res2; + } + case VAL_MIX: { + if (value === "transparent") { + const res2 = ["rgb", 0, 0, 0, 0]; + setCache(cacheKey, res2); + return res2; + } + setCache(cacheKey, null); + return new NullObject(); + } + case VAL_COMP: + default: { + if (nullable && value !== "transparent") { + setCache(cacheKey, null); + return new NullObject(); + } + const res2 = ["rgb", 0, 0, 0, 0]; + setCache(cacheKey, res2); + return res2; + } + } + } + } else if (value[0] === "#") { + [r, g, b, alpha] = convertHexToRgb(value); + } else if (value.startsWith("hsl")) { + [, r, g, b, alpha] = parseHsl(value, opt); + } else if (value.startsWith("hwb")) { + [, r, g, b, alpha] = parseHwb(value, opt); + } else if (/^l(?:ab|ch)/.test(value)) { + let x, y, z; + if (value.startsWith("lab")) { + [cs, x, y, z, alpha] = parseLab(value, opt); + } else { + [cs, x, y, z, alpha] = parseLch(value, opt); + } + if (REG_SPEC.test(format)) { + const res2 = [cs, x, y, z, alpha]; + setCache(cacheKey, res2); + return res2; + } + [r, g, b] = transformXyzD50ToRgb([x, y, z]); + } else if (/^okl(?:ab|ch)/.test(value)) { + let x, y, z; + if (value.startsWith("oklab")) { + [cs, x, y, z, alpha] = parseOklab(value, opt); + } else { + [cs, x, y, z, alpha] = parseOklch(value, opt); + } + if (REG_SPEC.test(format)) { + const res2 = [cs, x, y, z, alpha]; + setCache(cacheKey, res2); + return res2; + } + [r, g, b] = transformXyzToRgb([x, y, z]); + } else { + [, r, g, b, alpha] = parseRgb(value, opt); + } + if (format === VAL_MIX && colorSpace === "srgb") { + const res2 = [ + "srgb", + r / MAX_RGB, + g / MAX_RGB, + b / MAX_RGB, + alpha + ]; + setCache(cacheKey, res2); + return res2; + } + const res = [ + "rgb", + Math.round(r), + Math.round(g), + Math.round(b), + alpha + ]; + setCache(cacheKey, res); + return res; +}; +var resolveColorFunc = (value, opt = {}) => { + if (isString(value)) { + value = value.toLowerCase().trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { colorSpace = "", format = "", nullable = false } = opt; + const cacheKey = createCacheKey( + { + namespace: NAMESPACE, + name: "resolveColorFunc", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return cachedResult; + } + const cachedItem = cachedResult.item; + if (isString(cachedItem)) { + return cachedItem; + } + return cachedItem; + } + if (!REG_FN_COLOR.test(value)) { + const res2 = resolveInvalidColorValue(format, nullable); + if (res2 instanceof NullObject) { + setCache(cacheKey, null); + return res2; + } + setCache(cacheKey, res2); + if (isString(res2)) { + return res2; + } + return res2; + } + const [cs, v1, v2, v3, v4] = parseColorFunc( + value, + opt + ); + if (REG_SPEC.test(format) || format === VAL_MIX && cs === colorSpace) { + const res2 = [cs, v1, v2, v3, v4]; + setCache(cacheKey, res2); + return res2; + } + const x = parseFloat(`${v1}`); + const y = parseFloat(`${v2}`); + const z = parseFloat(`${v3}`); + const alpha = parseAlpha(`${v4}`); + const [r, g, b] = transformXyzToRgb([x, y, z], true); + const res = ["rgb", r, g, b, alpha]; + setCache(cacheKey, res); + return res; +}; +var convertColorToLinearRgb = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { colorSpace = "", format = "" } = opt; + let cs = ""; + let r, g, b, alpha, x, y, z; + if (format === VAL_MIX) { + let xyz; + if (value.startsWith(FN_COLOR)) { + xyz = parseColorFunc(value, opt); + } else { + xyz = parseColorValue(value, opt); + } + if (xyz instanceof NullObject) { + return xyz; + } + [cs, x, y, z, alpha] = xyz; + if (cs === colorSpace) { + return [x, y, z, alpha]; + } + [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true); + } else if (value.startsWith(FN_COLOR)) { + const [, val] = value.match(REG_FN_COLOR); + const [cs2] = val.replace("/", " ").split(/\s+/); + if (cs2 === "srgb-linear") { + [, r, g, b, alpha] = resolveColorFunc(value, { + format: VAL_COMP + }); + } else { + [, x, y, z, alpha] = parseColorFunc(value); + [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true); + } + } else { + [, x, y, z, alpha] = parseColorValue(value); + [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true); + } + return [ + Math.min(Math.max(r, 0), 1), + Math.min(Math.max(g, 0), 1), + Math.min(Math.max(b, 0), 1), + alpha + ]; +}; +var convertColorToRgb = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "" } = opt; + let r, g, b, alpha; + if (format === VAL_MIX) { + let rgb; + if (value.startsWith(FN_COLOR)) { + rgb = resolveColorFunc(value, opt); + } else { + rgb = resolveColorValue(value, opt); + } + if (rgb instanceof NullObject) { + return rgb; + } + [, r, g, b, alpha] = rgb; + } else if (value.startsWith(FN_COLOR)) { + const [, val] = value.match(REG_FN_COLOR); + const [cs] = val.replace("/", " ").split(/\s+/); + if (cs === "srgb") { + [, r, g, b, alpha] = resolveColorFunc(value, { + format: VAL_COMP + }); + r *= MAX_RGB; + g *= MAX_RGB; + b *= MAX_RGB; + } else { + [, r, g, b, alpha] = resolveColorFunc(value); + } + } else if (/^(?:ok)?l(?:ab|ch)/.test(value)) { + [r, g, b, alpha] = convertColorToLinearRgb(value); + [r, g, b] = transformLinearRgbToRgb([r, g, b]); + } else { + [, r, g, b, alpha] = resolveColorValue(value, { + format: VAL_COMP + }); + } + return [r, g, b, alpha]; +}; +var convertColorToXyz = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { d50 = false, format = "" } = opt; + let x, y, z, alpha; + if (format === VAL_MIX) { + let xyz; + if (value.startsWith(FN_COLOR)) { + xyz = parseColorFunc(value, opt); + } else { + xyz = parseColorValue(value, opt); + } + if (xyz instanceof NullObject) { + return xyz; + } + [, x, y, z, alpha] = xyz; + } else if (value.startsWith(FN_COLOR)) { + const [, val] = value.match(REG_FN_COLOR); + const [cs] = val.replace("/", " ").split(/\s+/); + if (d50) { + if (cs === "xyz-d50") { + [, x, y, z, alpha] = resolveColorFunc(value, { + format: VAL_COMP + }); + } else { + [, x, y, z, alpha] = parseColorFunc( + value, + opt + ); + } + } else if (/^xyz(?:-d65)?$/.test(cs)) { + [, x, y, z, alpha] = resolveColorFunc(value, { + format: VAL_COMP + }); + } else { + [, x, y, z, alpha] = parseColorFunc(value); + } + } else { + [, x, y, z, alpha] = parseColorValue(value, opt); + } + return [x, y, z, alpha]; +}; +var convertColorToHsl = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "" } = opt; + let h, s, l, alpha; + if (REG_HSL.test(value)) { + [, h, s, l, alpha] = parseHsl(value, { + format: "hsl" + }); + if (format === "hsl") { + return [Math.round(h), Math.round(s), Math.round(l), alpha]; + } + return [h, s, l, alpha]; + } + let x, y, z; + if (format === VAL_MIX) { + let xyz; + if (value.startsWith(FN_COLOR)) { + xyz = parseColorFunc(value, opt); + } else { + xyz = parseColorValue(value, opt); + } + if (xyz instanceof NullObject) { + return xyz; + } + [, x, y, z, alpha] = xyz; + } else if (value.startsWith(FN_COLOR)) { + [, x, y, z, alpha] = parseColorFunc(value); + } else { + [, x, y, z, alpha] = parseColorValue(value); + } + [h, s, l] = transformXyzToHsl([x, y, z], true); + if (format === "hsl") { + return [Math.round(h), Math.round(s), Math.round(l), alpha]; + } + return [format === VAL_MIX && s === 0 ? NONE : h, s, l, alpha]; +}; +var convertColorToHwb = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "" } = opt; + let h, w, b, alpha; + if (REG_HWB.test(value)) { + [, h, w, b, alpha] = parseHwb(value, { + format: "hwb" + }); + if (format === "hwb") { + return [Math.round(h), Math.round(w), Math.round(b), alpha]; + } + return [h, w, b, alpha]; + } + let x, y, z; + if (format === VAL_MIX) { + let xyz; + if (value.startsWith(FN_COLOR)) { + xyz = parseColorFunc(value, opt); + } else { + xyz = parseColorValue(value, opt); + } + if (xyz instanceof NullObject) { + return xyz; + } + [, x, y, z, alpha] = xyz; + } else if (value.startsWith(FN_COLOR)) { + [, x, y, z, alpha] = parseColorFunc(value); + } else { + [, x, y, z, alpha] = parseColorValue(value); + } + [h, w, b] = transformXyzToHwb([x, y, z], true); + if (format === "hwb") { + return [Math.round(h), Math.round(w), Math.round(b), alpha]; + } + return [format === VAL_MIX && w + b >= 100 ? NONE : h, w, b, alpha]; +}; +var convertColorToLab = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "" } = opt; + let l, a, b, alpha; + if (REG_LAB.test(value)) { + [, l, a, b, alpha] = parseLab(value, { + format: VAL_COMP + }); + return [l, a, b, alpha]; + } + let x, y, z; + if (format === VAL_MIX) { + let xyz; + opt.d50 = true; + if (value.startsWith(FN_COLOR)) { + xyz = parseColorFunc(value, opt); + } else { + xyz = parseColorValue(value, opt); + } + if (xyz instanceof NullObject) { + return xyz; + } + [, x, y, z, alpha] = xyz; + } else if (value.startsWith(FN_COLOR)) { + [, x, y, z, alpha] = parseColorFunc(value, { + d50: true + }); + } else { + [, x, y, z, alpha] = parseColorValue(value, { + d50: true + }); + } + [l, a, b] = transformXyzD50ToLab([x, y, z], true); + return [l, a, b, alpha]; +}; +var convertColorToLch = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "" } = opt; + let l, c, h, alpha; + if (REG_LCH.test(value)) { + [, l, c, h, alpha] = parseLch(value, { + format: VAL_COMP + }); + return [l, c, h, alpha]; + } + let x, y, z; + if (format === VAL_MIX) { + let xyz; + opt.d50 = true; + if (value.startsWith(FN_COLOR)) { + xyz = parseColorFunc(value, opt); + } else { + xyz = parseColorValue(value, opt); + } + if (xyz instanceof NullObject) { + return xyz; + } + [, x, y, z, alpha] = xyz; + } else if (value.startsWith(FN_COLOR)) { + [, x, y, z, alpha] = parseColorFunc(value, { + d50: true + }); + } else { + [, x, y, z, alpha] = parseColorValue(value, { + d50: true + }); + } + [l, c, h] = transformXyzD50ToLch([x, y, z], true); + return [l, c, format === VAL_MIX && c === 0 ? NONE : h, alpha]; +}; +var convertColorToOklab = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "" } = opt; + let l, a, b, alpha; + if (REG_OKLAB.test(value)) { + [, l, a, b, alpha] = parseOklab(value, { + format: VAL_COMP + }); + return [l, a, b, alpha]; + } + let x, y, z; + if (format === VAL_MIX) { + let xyz; + if (value.startsWith(FN_COLOR)) { + xyz = parseColorFunc(value, opt); + } else { + xyz = parseColorValue(value, opt); + } + if (xyz instanceof NullObject) { + return xyz; + } + [, x, y, z, alpha] = xyz; + } else if (value.startsWith(FN_COLOR)) { + [, x, y, z, alpha] = parseColorFunc(value); + } else { + [, x, y, z, alpha] = parseColorValue(value); + } + [l, a, b] = transformXyzToOklab([x, y, z], true); + return [l, a, b, alpha]; +}; +var convertColorToOklch = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "" } = opt; + let l, c, h, alpha; + if (REG_OKLCH.test(value)) { + [, l, c, h, alpha] = parseOklch(value, { + format: VAL_COMP + }); + return [l, c, h, alpha]; + } + let x, y, z; + if (format === VAL_MIX) { + let xyz; + if (value.startsWith(FN_COLOR)) { + xyz = parseColorFunc(value, opt); + } else { + xyz = parseColorValue(value, opt); + } + if (xyz instanceof NullObject) { + return xyz; + } + [, x, y, z, alpha] = xyz; + } else if (value.startsWith(FN_COLOR)) { + [, x, y, z, alpha] = parseColorFunc(value); + } else { + [, x, y, z, alpha] = parseColorValue(value); + } + [l, c, h] = transformXyzToOklch([x, y, z], true); + return [l, c, format === VAL_MIX && c === 0 ? NONE : h, alpha]; +}; +var resolveColorMix = (value, opt = {}) => { + if (isString(value)) { + value = value.toLowerCase().trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "", nullable = false } = opt; + const cacheKey = createCacheKey( + { + namespace: NAMESPACE, + name: "resolveColorMix", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return cachedResult; + } + const cachedItem = cachedResult.item; + if (isString(cachedItem)) { + return cachedItem; + } + return cachedItem; + } + const nestedItems = []; + let colorSpace = ""; + let hueArc = ""; + let colorA = ""; + let pctA = ""; + let colorB = ""; + let pctB = ""; + let parsed = false; + if (!REG_MIX.test(value)) { + if (value.startsWith(FN_MIX) && REG_MIX_NEST.test(value)) { + const regColorSpace = new RegExp(`^(?:${CS_RGB}|${CS_XYZ})$`); + const items = value.match(REG_MIX_NEST); + for (const item of items) { + if (item) { + let val = resolveColorMix(item, { + format: format === VAL_SPEC ? format : VAL_COMP + }); + if (Array.isArray(val)) { + const [cs, v1, v2, v3, v4] = val; + if (v1 === 0 && v2 === 0 && v3 === 0 && v4 === 0) { + value = ""; + break; + } + if (regColorSpace.test(cs)) { + if (v4 === 1) { + val = `color(${cs} ${v1} ${v2} ${v3})`; + } else { + val = `color(${cs} ${v1} ${v2} ${v3} / ${v4})`; + } + } else if (v4 === 1) { + val = `${cs}(${v1} ${v2} ${v3})`; + } else { + val = `${cs}(${v1} ${v2} ${v3} / ${v4})`; + } + } else if (!REG_MIX.test(val)) { + value = ""; + break; + } + nestedItems.push(val); + value = value.replace(item, val); + } + } + if (!value) { + const res2 = cacheInvalidColorValue(cacheKey, format, nullable); + return res2; + } + } else if (value.startsWith(FN_MIX) && value.endsWith(")") && value.includes(FN_LIGHT_DARK)) { + const regColorSpace = new RegExp(`in\\s+(${CS_MIX})`); + const colorParts = value.replace(FN_MIX, "").replace(/\)$/, ""); + const [csPart = "", partA = "", partB = ""] = splitValue(colorParts, { + delimiter: "," + }); + const [colorPartA = "", pctPartA = ""] = splitValue(partA); + const [colorPartB = "", pctPartB = ""] = splitValue(partB); + const specifiedColorA = resolveColor(colorPartA, { + format: VAL_SPEC + }); + const specifiedColorB = resolveColor(colorPartB, { + format: VAL_SPEC + }); + if (regColorSpace.test(csPart) && specifiedColorA && specifiedColorB) { + if (format === VAL_SPEC) { + const [, cs] = csPart.match(regColorSpace); + if (REG_CS_HUE.test(cs)) { + [, colorSpace, hueArc] = cs.match(REG_CS_HUE); + } else { + colorSpace = cs; + } + colorA = specifiedColorA; + if (pctPartA) { + pctA = pctPartA; + } + colorB = specifiedColorB; + if (pctPartB) { + pctB = pctPartB; + } + value = value.replace(colorPartA, specifiedColorA).replace(colorPartB, specifiedColorB); + parsed = true; + } else { + const resolvedColorA = resolveColor(colorPartA, opt); + const resolvedColorB = resolveColor(colorPartB, opt); + if (isString(resolvedColorA) && isString(resolvedColorB)) { + value = value.replace(colorPartA, resolvedColorA).replace(colorPartB, resolvedColorB); + } + } + } else { + const res2 = cacheInvalidColorValue(cacheKey, format, nullable); + return res2; + } + } else { + const res2 = cacheInvalidColorValue(cacheKey, format, nullable); + return res2; + } + } + if (nestedItems.length && format === VAL_SPEC) { + const regColorSpace = new RegExp(`^color-mix\\(\\s*in\\s+(${CS_MIX})\\s*,`); + const [, cs] = value.match(regColorSpace); + if (REG_CS_HUE.test(cs)) { + [, colorSpace, hueArc] = cs.match(REG_CS_HUE); + } else { + colorSpace = cs; + } + if (nestedItems.length === 2) { + let [itemA, itemB] = nestedItems; + itemA = itemA.replace(/(?=[()])/g, "\\"); + itemB = itemB.replace(/(?=[()])/g, "\\"); + const regA = new RegExp(`(${itemA})(?:\\s+(${PCT}))?`); + const regB = new RegExp(`(${itemB})(?:\\s+(${PCT}))?`); + [, colorA, pctA] = value.match(regA); + [, colorB, pctB] = value.match(regB); + } else { + let [item] = nestedItems; + item = item.replace(/(?=[()])/g, "\\"); + const itemPart = `${item}(?:\\s+${PCT})?`; + const itemPartCapt = `(${item})(?:\\s+(${PCT}))?`; + const regItemPart = new RegExp(`^${itemPartCapt}$`); + const regLastItem = new RegExp(`${itemPartCapt}\\s*\\)$`); + const regColorPart = new RegExp(`^(${SYN_COLOR_TYPE})(?:\\s+(${PCT}))?$`); + if (regLastItem.test(value)) { + const reg = new RegExp( + `(${SYN_MIX_PART})\\s*,\\s*(${itemPart})\\s*\\)$` + ); + const [, colorPartA, colorPartB] = value.match(reg); + [, colorA, pctA] = colorPartA.match(regColorPart); + [, colorB, pctB] = colorPartB.match(regItemPart); + } else { + const reg = new RegExp( + `(${itemPart})\\s*,\\s*(${SYN_MIX_PART})\\s*\\)$` + ); + const [, colorPartA, colorPartB] = value.match(reg); + [, colorA, pctA] = colorPartA.match(regItemPart); + [, colorB, pctB] = colorPartB.match(regColorPart); + } + } + } else if (!parsed) { + const [, cs, colorPartA, colorPartB] = value.match( + REG_MIX_CAPT + ); + const reg = new RegExp(`^(${SYN_COLOR_TYPE})(?:\\s+(${PCT}))?$`); + [, colorA, pctA] = colorPartA.match(reg); + [, colorB, pctB] = colorPartB.match(reg); + if (REG_CS_HUE.test(cs)) { + [, colorSpace, hueArc] = cs.match(REG_CS_HUE); + } else { + colorSpace = cs; + } + } + let pA, pB, m; + if (pctA && pctB) { + const p1 = parseFloat(pctA) / MAX_PCT; + const p2 = parseFloat(pctB) / MAX_PCT; + if (p1 < 0 || p1 > 1 || p2 < 0 || p2 > 1 || p1 === 0 && p2 === 0) { + const res2 = cacheInvalidColorValue(cacheKey, format, nullable); + return res2; + } + const factor = p1 + p2; + pA = p1 / factor; + pB = p2 / factor; + m = factor < 1 ? factor : 1; + } else { + if (pctA) { + pA = parseFloat(pctA) / MAX_PCT; + if (pA < 0 || pA > 1) { + const res2 = cacheInvalidColorValue(cacheKey, format, nullable); + return res2; + } + pB = 1 - pA; + } else if (pctB) { + pB = parseFloat(pctB) / MAX_PCT; + if (pB < 0 || pB > 1) { + const res2 = cacheInvalidColorValue(cacheKey, format, nullable); + return res2; + } + pA = 1 - pB; + } else { + pA = HALF; + pB = HALF; + } + m = 1; + } + if (colorSpace === "xyz") { + colorSpace = "xyz-d65"; + } + if (format === VAL_SPEC) { + let valueA = ""; + let valueB = ""; + if (colorA.startsWith(FN_MIX) || colorA.startsWith(FN_LIGHT_DARK)) { + valueA = colorA; + } else if (colorA.startsWith(FN_COLOR)) { + const [cs, v1, v2, v3, v4] = parseColorFunc( + colorA, + opt + ); + if (v4 === 1) { + valueA = `color(${cs} ${v1} ${v2} ${v3})`; + } else { + valueA = `color(${cs} ${v1} ${v2} ${v3} / ${v4})`; + } + } else { + const val = parseColorValue(colorA, opt); + if (Array.isArray(val)) { + const [cs, v1, v2, v3, v4] = val; + if (v4 === 1) { + if (cs === "rgb") { + valueA = `${cs}(${v1}, ${v2}, ${v3})`; + } else { + valueA = `${cs}(${v1} ${v2} ${v3})`; + } + } else if (cs === "rgb") { + valueA = `${cs}a(${v1}, ${v2}, ${v3}, ${v4})`; + } else { + valueA = `${cs}(${v1} ${v2} ${v3} / ${v4})`; + } + } else { + if (!isString(val) || !val) { + setCache(cacheKey, ""); + return ""; + } + valueA = val; + } + } + if (colorB.startsWith(FN_MIX) || colorB.startsWith(FN_LIGHT_DARK)) { + valueB = colorB; + } else if (colorB.startsWith(FN_COLOR)) { + const [cs, v1, v2, v3, v4] = parseColorFunc( + colorB, + opt + ); + if (v4 === 1) { + valueB = `color(${cs} ${v1} ${v2} ${v3})`; + } else { + valueB = `color(${cs} ${v1} ${v2} ${v3} / ${v4})`; + } + } else { + const val = parseColorValue(colorB, opt); + if (Array.isArray(val)) { + const [cs, v1, v2, v3, v4] = val; + if (v4 === 1) { + if (cs === "rgb") { + valueB = `${cs}(${v1}, ${v2}, ${v3})`; + } else { + valueB = `${cs}(${v1} ${v2} ${v3})`; + } + } else if (cs === "rgb") { + valueB = `${cs}a(${v1}, ${v2}, ${v3}, ${v4})`; + } else { + valueB = `${cs}(${v1} ${v2} ${v3} / ${v4})`; + } + } else { + if (!isString(val) || !val) { + setCache(cacheKey, ""); + return ""; + } + valueB = val; + } + } + if (pctA && pctB) { + valueA += ` ${parseFloat(pctA)}%`; + valueB += ` ${parseFloat(pctB)}%`; + } else if (pctA) { + const pA2 = parseFloat(pctA); + if (pA2 !== MAX_PCT * HALF) { + valueA += ` ${pA2}%`; + } + } else if (pctB) { + const pA2 = MAX_PCT - parseFloat(pctB); + if (pA2 !== MAX_PCT * HALF) { + valueA += ` ${pA2}%`; + } + } + if (hueArc) { + const res2 = `color-mix(in ${colorSpace} ${hueArc} hue, ${valueA}, ${valueB})`; + setCache(cacheKey, res2); + return res2; + } else { + const res2 = `color-mix(in ${colorSpace}, ${valueA}, ${valueB})`; + setCache(cacheKey, res2); + return res2; + } + } + let r = 0; + let g = 0; + let b = 0; + let alpha = 0; + if (/^srgb(?:-linear)?$/.test(colorSpace)) { + let rgbA, rgbB; + if (colorSpace === "srgb") { + if (REG_CURRENT.test(colorA)) { + rgbA = [NONE, NONE, NONE, NONE]; + } else { + rgbA = convertColorToRgb(colorA, { + colorSpace, + format: VAL_MIX + }); + } + if (REG_CURRENT.test(colorB)) { + rgbB = [NONE, NONE, NONE, NONE]; + } else { + rgbB = convertColorToRgb(colorB, { + colorSpace, + format: VAL_MIX + }); + } + } else { + if (REG_CURRENT.test(colorA)) { + rgbA = [NONE, NONE, NONE, NONE]; + } else { + rgbA = convertColorToLinearRgb(colorA, { + colorSpace, + format: VAL_MIX + }); + } + if (REG_CURRENT.test(colorB)) { + rgbB = [NONE, NONE, NONE, NONE]; + } else { + rgbB = convertColorToLinearRgb(colorB, { + colorSpace, + format: VAL_MIX + }); + } + } + if (rgbA instanceof NullObject || rgbB instanceof NullObject) { + const res2 = cacheInvalidColorValue(cacheKey, format, nullable); + return res2; + } + const [rrA, ggA, bbA, aaA] = rgbA; + const [rrB, ggB, bbB, aaB] = rgbB; + const rNone = rrA === NONE && rrB === NONE; + const gNone = ggA === NONE && ggB === NONE; + const bNone = bbA === NONE && bbB === NONE; + const alphaNone = aaA === NONE && aaB === NONE; + const [[rA, gA, bA, alphaA], [rB, gB, bB, alphaB]] = normalizeColorComponents( + [rrA, ggA, bbA, aaA], + [rrB, ggB, bbB, aaB], + true + ); + const factorA = alphaA * pA; + const factorB = alphaB * pB; + alpha = factorA + factorB; + if (alpha === 0) { + r = rA * pA + rB * pB; + g = gA * pA + gB * pB; + b = bA * pA + bB * pB; + } else { + r = (rA * factorA + rB * factorB) / alpha; + g = (gA * factorA + gB * factorB) / alpha; + b = (bA * factorA + bB * factorB) / alpha; + alpha = parseFloat(alpha.toFixed(3)); + } + if (format === VAL_COMP) { + const res2 = [ + colorSpace, + rNone ? NONE : roundToPrecision(r, HEX), + gNone ? NONE : roundToPrecision(g, HEX), + bNone ? NONE : roundToPrecision(b, HEX), + alphaNone ? NONE : alpha * m + ]; + setCache(cacheKey, res2); + return res2; + } + r *= MAX_RGB; + g *= MAX_RGB; + b *= MAX_RGB; + } else if (REG_CS_XYZ.test(colorSpace)) { + let xyzA, xyzB; + if (REG_CURRENT.test(colorA)) { + xyzA = [NONE, NONE, NONE, NONE]; + } else { + xyzA = convertColorToXyz(colorA, { + colorSpace, + d50: colorSpace === "xyz-d50", + format: VAL_MIX + }); + } + if (REG_CURRENT.test(colorB)) { + xyzB = [NONE, NONE, NONE, NONE]; + } else { + xyzB = convertColorToXyz(colorB, { + colorSpace, + d50: colorSpace === "xyz-d50", + format: VAL_MIX + }); + } + if (xyzA instanceof NullObject || xyzB instanceof NullObject) { + const res2 = cacheInvalidColorValue(cacheKey, format, nullable); + return res2; + } + const [xxA, yyA, zzA, aaA] = xyzA; + const [xxB, yyB, zzB, aaB] = xyzB; + const xNone = xxA === NONE && xxB === NONE; + const yNone = yyA === NONE && yyB === NONE; + const zNone = zzA === NONE && zzB === NONE; + const alphaNone = aaA === NONE && aaB === NONE; + const [[xA, yA, zA, alphaA], [xB, yB, zB, alphaB]] = normalizeColorComponents( + [xxA, yyA, zzA, aaA], + [xxB, yyB, zzB, aaB], + true + ); + const factorA = alphaA * pA; + const factorB = alphaB * pB; + alpha = factorA + factorB; + let x, y, z; + if (alpha === 0) { + x = xA * pA + xB * pB; + y = yA * pA + yB * pB; + z = zA * pA + zB * pB; + } else { + x = (xA * factorA + xB * factorB) / alpha; + y = (yA * factorA + yB * factorB) / alpha; + z = (zA * factorA + zB * factorB) / alpha; + alpha = parseFloat(alpha.toFixed(3)); + } + if (format === VAL_COMP) { + const res2 = [ + colorSpace, + xNone ? NONE : roundToPrecision(x, HEX), + yNone ? NONE : roundToPrecision(y, HEX), + zNone ? NONE : roundToPrecision(z, HEX), + alphaNone ? NONE : alpha * m + ]; + setCache(cacheKey, res2); + return res2; + } + if (colorSpace === "xyz-d50") { + [r, g, b] = transformXyzD50ToRgb([x, y, z], true); + } else { + [r, g, b] = transformXyzToRgb([x, y, z], true); + } + } else if (/^h(?:sl|wb)$/.test(colorSpace)) { + let hslA, hslB; + if (colorSpace === "hsl") { + if (REG_CURRENT.test(colorA)) { + hslA = [NONE, NONE, NONE, NONE]; + } else { + hslA = convertColorToHsl(colorA, { + colorSpace, + format: VAL_MIX + }); + } + if (REG_CURRENT.test(colorB)) { + hslB = [NONE, NONE, NONE, NONE]; + } else { + hslB = convertColorToHsl(colorB, { + colorSpace, + format: VAL_MIX + }); + } + } else { + if (REG_CURRENT.test(colorA)) { + hslA = [NONE, NONE, NONE, NONE]; + } else { + hslA = convertColorToHwb(colorA, { + colorSpace, + format: VAL_MIX + }); + } + if (REG_CURRENT.test(colorB)) { + hslB = [NONE, NONE, NONE, NONE]; + } else { + hslB = convertColorToHwb(colorB, { + colorSpace, + format: VAL_MIX + }); + } + } + if (hslA instanceof NullObject || hslB instanceof NullObject) { + const res2 = cacheInvalidColorValue(cacheKey, format, nullable); + return res2; + } + const [hhA, ssA, llA, aaA] = hslA; + const [hhB, ssB, llB, aaB] = hslB; + const alphaNone = aaA === NONE && aaB === NONE; + let [[hA, sA, lA, alphaA], [hB, sB, lB, alphaB]] = normalizeColorComponents( + [hhA, ssA, llA, aaA], + [hhB, ssB, llB, aaB], + true + ); + if (hueArc) { + [hA, hB] = interpolateHue(hA, hB, hueArc); + } + const factorA = alphaA * pA; + const factorB = alphaB * pB; + alpha = factorA + factorB; + const h = (hA * pA + hB * pB) % DEG; + let s, l; + if (alpha === 0) { + s = sA * pA + sB * pB; + l = lA * pA + lB * pB; + } else { + s = (sA * factorA + sB * factorB) / alpha; + l = (lA * factorA + lB * factorB) / alpha; + alpha = parseFloat(alpha.toFixed(3)); + } + [r, g, b] = convertColorToRgb( + `${colorSpace}(${h} ${s} ${l})` + ); + if (format === VAL_COMP) { + const res2 = [ + "srgb", + roundToPrecision(r / MAX_RGB, HEX), + roundToPrecision(g / MAX_RGB, HEX), + roundToPrecision(b / MAX_RGB, HEX), + alphaNone ? NONE : alpha * m + ]; + setCache(cacheKey, res2); + return res2; + } + } else if (/^(?:ok)?lch$/.test(colorSpace)) { + let lchA, lchB; + if (colorSpace === "lch") { + if (REG_CURRENT.test(colorA)) { + lchA = [NONE, NONE, NONE, NONE]; + } else { + lchA = convertColorToLch(colorA, { + colorSpace, + format: VAL_MIX + }); + } + if (REG_CURRENT.test(colorB)) { + lchB = [NONE, NONE, NONE, NONE]; + } else { + lchB = convertColorToLch(colorB, { + colorSpace, + format: VAL_MIX + }); + } + } else { + if (REG_CURRENT.test(colorA)) { + lchA = [NONE, NONE, NONE, NONE]; + } else { + lchA = convertColorToOklch(colorA, { + colorSpace, + format: VAL_MIX + }); + } + if (REG_CURRENT.test(colorB)) { + lchB = [NONE, NONE, NONE, NONE]; + } else { + lchB = convertColorToOklch(colorB, { + colorSpace, + format: VAL_MIX + }); + } + } + if (lchA instanceof NullObject || lchB instanceof NullObject) { + const res2 = cacheInvalidColorValue(cacheKey, format, nullable); + return res2; + } + const [llA, ccA, hhA, aaA] = lchA; + const [llB, ccB, hhB, aaB] = lchB; + const lNone = llA === NONE && llB === NONE; + const cNone = ccA === NONE && ccB === NONE; + const hNone = hhA === NONE && hhB === NONE; + const alphaNone = aaA === NONE && aaB === NONE; + let [[lA, cA, hA, alphaA], [lB, cB, hB, alphaB]] = normalizeColorComponents( + [llA, ccA, hhA, aaA], + [llB, ccB, hhB, aaB], + true + ); + if (hueArc) { + [hA, hB] = interpolateHue(hA, hB, hueArc); + } + const factorA = alphaA * pA; + const factorB = alphaB * pB; + alpha = factorA + factorB; + const h = (hA * pA + hB * pB) % DEG; + let l, c; + if (alpha === 0) { + l = lA * pA + lB * pB; + c = cA * pA + cB * pB; + } else { + l = (lA * factorA + lB * factorB) / alpha; + c = (cA * factorA + cB * factorB) / alpha; + alpha = parseFloat(alpha.toFixed(3)); + } + if (format === VAL_COMP) { + const res2 = [ + colorSpace, + lNone ? NONE : roundToPrecision(l, HEX), + cNone ? NONE : roundToPrecision(c, HEX), + hNone ? NONE : roundToPrecision(h, HEX), + alphaNone ? NONE : alpha * m + ]; + setCache(cacheKey, res2); + return res2; + } + [, r, g, b] = resolveColorValue( + `${colorSpace}(${l} ${c} ${h})` + ); + } else { + let labA, labB; + if (colorSpace === "lab") { + if (REG_CURRENT.test(colorA)) { + labA = [NONE, NONE, NONE, NONE]; + } else { + labA = convertColorToLab(colorA, { + colorSpace, + format: VAL_MIX + }); + } + if (REG_CURRENT.test(colorB)) { + labB = [NONE, NONE, NONE, NONE]; + } else { + labB = convertColorToLab(colorB, { + colorSpace, + format: VAL_MIX + }); + } + } else { + if (REG_CURRENT.test(colorA)) { + labA = [NONE, NONE, NONE, NONE]; + } else { + labA = convertColorToOklab(colorA, { + colorSpace, + format: VAL_MIX + }); + } + if (REG_CURRENT.test(colorB)) { + labB = [NONE, NONE, NONE, NONE]; + } else { + labB = convertColorToOklab(colorB, { + colorSpace, + format: VAL_MIX + }); + } + } + if (labA instanceof NullObject || labB instanceof NullObject) { + const res2 = cacheInvalidColorValue(cacheKey, format, nullable); + return res2; + } + const [llA, aaA, bbA, alA] = labA; + const [llB, aaB, bbB, alB] = labB; + const lNone = llA === NONE && llB === NONE; + const aNone = aaA === NONE && aaB === NONE; + const bNone = bbA === NONE && bbB === NONE; + const alphaNone = alA === NONE && alB === NONE; + const [[lA, aA, bA, alphaA], [lB, aB, bB, alphaB]] = normalizeColorComponents( + [llA, aaA, bbA, alA], + [llB, aaB, bbB, alB], + true + ); + const factorA = alphaA * pA; + const factorB = alphaB * pB; + alpha = factorA + factorB; + let l, aO, bO; + if (alpha === 0) { + l = lA * pA + lB * pB; + aO = aA * pA + aB * pB; + bO = bA * pA + bB * pB; + } else { + l = (lA * factorA + lB * factorB) / alpha; + aO = (aA * factorA + aB * factorB) / alpha; + bO = (bA * factorA + bB * factorB) / alpha; + alpha = parseFloat(alpha.toFixed(3)); + } + if (format === VAL_COMP) { + const res2 = [ + colorSpace, + lNone ? NONE : roundToPrecision(l, HEX), + aNone ? NONE : roundToPrecision(aO, HEX), + bNone ? NONE : roundToPrecision(bO, HEX), + alphaNone ? NONE : alpha * m + ]; + setCache(cacheKey, res2); + return res2; + } + [, r, g, b] = resolveColorValue( + `${colorSpace}(${l} ${aO} ${bO})` + ); + } + const res = [ + "rgb", + Math.round(r), + Math.round(g), + Math.round(b), + parseFloat((alpha * m).toFixed(3)) + ]; + setCache(cacheKey, res); + return res; +}; + +// src/js/css-var.ts +var import_css_tokenizer = require("@csstools/css-tokenizer"); +var { + CloseParen: PAREN_CLOSE, + Comment: COMMENT, + EOF, + Ident: IDENT, + Whitespace: W_SPACE +} = import_css_tokenizer.TokenType; +var NAMESPACE2 = "css-var"; +var REG_FN_CALC = new RegExp(SYN_FN_CALC); +var REG_FN_VAR = new RegExp(SYN_FN_VAR); +function resolveCustomProperty(tokens, opt = {}) { + if (!Array.isArray(tokens)) { + throw new TypeError(`${tokens} is not an array.`); + } + const { customProperty = {} } = opt; + const items = []; + while (tokens.length) { + const token = tokens.shift(); + if (!Array.isArray(token)) { + throw new TypeError(`${token} is not an array.`); + } + const [type, value] = token; + if (type === PAREN_CLOSE) { + break; + } + if (value === FN_VAR) { + const [restTokens, item] = resolveCustomProperty(tokens, opt); + tokens = restTokens; + if (item) { + items.push(item); + } + } else if (type === IDENT) { + if (value.startsWith("--")) { + let item; + if (Object.hasOwn(customProperty, value)) { + item = customProperty[value]; + } else if (typeof customProperty.callback === "function") { + item = customProperty.callback(value); + } + if (item) { + items.push(item); + } + } else if (value) { + items.push(value); + } + } + } + let resolveAsColor = false; + if (items.length > 1) { + const lastValue = items[items.length - 1]; + resolveAsColor = isColor(lastValue); + } + let resolvedValue = ""; + for (let item of items) { + item = item.trim(); + if (REG_FN_VAR.test(item)) { + const resolvedItem = resolveVar(item, opt); + if (isString(resolvedItem)) { + if (resolveAsColor) { + if (isColor(resolvedItem)) { + resolvedValue = resolvedItem; + } + } else { + resolvedValue = resolvedItem; + } + } + } else if (REG_FN_CALC.test(item)) { + item = cssCalc(item, opt); + if (resolveAsColor) { + if (isColor(item)) { + resolvedValue = item; + } + } else { + resolvedValue = item; + } + } else if (item && !/^(?:inherit|initial|revert(?:-layer)?|unset)$/.test(item)) { + if (resolveAsColor) { + if (isColor(item)) { + resolvedValue = item; + } + } else { + resolvedValue = item; + } + } + if (resolvedValue) { + break; + } + } + return [tokens, resolvedValue]; +} +function parseTokens(tokens, opt = {}) { + const res = []; + while (tokens.length) { + const token = tokens.shift(); + const [type = "", value = ""] = token; + if (value === FN_VAR) { + const [restTokens, resolvedValue] = resolveCustomProperty(tokens, opt); + if (!resolvedValue) { + return new NullObject(); + } + tokens = restTokens; + res.push(resolvedValue); + } else { + switch (type) { + case PAREN_CLOSE: { + if (res.length) { + const lastValue = res[res.length - 1]; + if (lastValue === " ") { + res.splice(-1, 1, value); + } else { + res.push(value); + } + } else { + res.push(value); + } + break; + } + case W_SPACE: { + if (res.length) { + const lastValue = res[res.length - 1]; + if (isString(lastValue) && !lastValue.endsWith("(") && lastValue !== " ") { + res.push(value); + } + } + break; + } + default: { + if (type !== COMMENT && type !== EOF) { + res.push(value); + } + } + } + } + } + return res; +} +function resolveVar(value, opt = {}) { + const { format = "" } = opt; + if (isString(value)) { + if (!REG_FN_VAR.test(value) || format === VAL_SPEC) { + return value; + } + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE2, + name: "resolveVar", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return cachedResult; + } + return cachedResult.item; + } + const tokens = (0, import_css_tokenizer.tokenize)({ css: value }); + const values = parseTokens(tokens, opt); + if (Array.isArray(values)) { + let color = values.join(""); + if (REG_FN_CALC.test(color)) { + color = cssCalc(color, opt); + } + setCache(cacheKey, color); + return color; + } else { + setCache(cacheKey, null); + return new NullObject(); + } +} +var cssVar = (value, opt = {}) => { + const resolvedValue = resolveVar(value, opt); + if (isString(resolvedValue)) { + return resolvedValue; + } + return ""; +}; + +// src/js/relative-color.ts +var import_css_color_parser = require("@csstools/css-color-parser"); +var import_css_parser_algorithms = require("@csstools/css-parser-algorithms"); +var import_css_tokenizer2 = require("@csstools/css-tokenizer"); +var { + CloseParen: PAREN_CLOSE2, + Comment: COMMENT2, + Delim: DELIM, + Dimension: DIM, + EOF: EOF2, + Function: FUNC, + Ident: IDENT2, + Number: NUM2, + OpenParen: PAREN_OPEN, + Percentage: PCT2, + Whitespace: W_SPACE2 +} = import_css_tokenizer2.TokenType; +var { HasNoneKeywords: KEY_NONE } = import_css_color_parser.SyntaxFlag; +var NAMESPACE3 = "relative-color"; +var OCT2 = 8; +var DEC2 = 10; +var HEX2 = 16; +var MAX_PCT2 = 100; +var MAX_RGB2 = 255; +var REG_COLOR_CAPT = new RegExp( + `^${FN_REL}(${SYN_COLOR_TYPE}|${SYN_MIX})\\s+` +); +var REG_CS_HSL = /(?:hsla?|hwb)$/; +var REG_CS_CIE = new RegExp(`^(?:${CS_LAB}|${CS_LCH})$`); +var REG_FN_CALC_SUM = /^(?:abs|sig?n|cos|tan)\(/; +var REG_FN_MATH_START = new RegExp(SYN_FN_MATH_START); +var REG_FN_REL = new RegExp(FN_REL); +var REG_FN_REL_CAPT = new RegExp(`^${FN_REL_CAPT}`); +var REG_FN_REL_START = new RegExp(`^${FN_REL}`); +var REG_FN_VAR2 = new RegExp(SYN_FN_VAR); +function resolveColorChannels(tokens, opt = {}) { + if (!Array.isArray(tokens)) { + throw new TypeError(`${tokens} is not an array.`); + } + const { colorSpace = "", format = "" } = opt; + const colorChannels = /* @__PURE__ */ new Map([ + ["color", ["r", "g", "b", "alpha"]], + ["hsl", ["h", "s", "l", "alpha"]], + ["hsla", ["h", "s", "l", "alpha"]], + ["hwb", ["h", "w", "b", "alpha"]], + ["lab", ["l", "a", "b", "alpha"]], + ["lch", ["l", "c", "h", "alpha"]], + ["oklab", ["l", "a", "b", "alpha"]], + ["oklch", ["l", "c", "h", "alpha"]], + ["rgb", ["r", "g", "b", "alpha"]], + ["rgba", ["r", "g", "b", "alpha"]] + ]); + const colorChannel = colorChannels.get(colorSpace); + if (!colorChannel) { + return new NullObject(); + } + const mathFunc = /* @__PURE__ */ new Set(); + const channels = [[], [], [], []]; + let i = 0; + let nest = 0; + let func = ""; + let precededPct = false; + while (tokens.length) { + const token = tokens.shift(); + if (!Array.isArray(token)) { + throw new TypeError(`${token} is not an array.`); + } + const [type, value, , , detail] = token; + const channel = channels[i]; + if (Array.isArray(channel)) { + switch (type) { + case DELIM: { + if (func) { + if ((value === "+" || value === "-") && precededPct && !REG_FN_CALC_SUM.test(func)) { + return new NullObject(); + } + precededPct = false; + channel.push(value); + } + break; + } + case DIM: { + if (!func || !REG_FN_CALC_SUM.test(func)) { + return new NullObject(); + } + const resolvedValue = resolveDimension(token, opt); + if (isString(resolvedValue)) { + channel.push(resolvedValue); + } else { + channel.push(value); + } + break; + } + case FUNC: { + channel.push(value); + func = value; + nest++; + if (REG_FN_MATH_START.test(value)) { + mathFunc.add(nest); + } + break; + } + case IDENT2: { + if (!colorChannel.includes(value)) { + return new NullObject(); + } + channel.push(value); + if (!func) { + i++; + } + break; + } + case NUM2: { + channel.push(Number(detail?.value)); + if (!func) { + i++; + } + break; + } + case PAREN_OPEN: { + channel.push(value); + nest++; + break; + } + case PAREN_CLOSE2: { + if (func) { + const lastValue = channel[channel.length - 1]; + if (lastValue === " ") { + channel.splice(-1, 1, value); + } else { + channel.push(value); + } + if (mathFunc.has(nest)) { + mathFunc.delete(nest); + } + nest--; + if (nest === 0) { + func = ""; + i++; + } + } + break; + } + case PCT2: { + if (!func) { + return new NullObject(); + } else if (!REG_FN_CALC_SUM.test(func)) { + const lastValue = channel.toReversed().find((v) => v !== " "); + if (lastValue === "+" || lastValue === "-") { + return new NullObject(); + } else if (lastValue === "*" || lastValue === "/") { + precededPct = false; + } else { + precededPct = true; + } + } + channel.push(Number(detail?.value) / MAX_PCT2); + if (!func) { + i++; + } + break; + } + case W_SPACE2: { + if (channel.length && func) { + const lastValue = channel[channel.length - 1]; + if (typeof lastValue === "number") { + channel.push(value); + } else if (isString(lastValue) && !lastValue.endsWith("(") && lastValue !== " ") { + channel.push(value); + } + } + break; + } + default: { + if (type !== COMMENT2 && type !== EOF2 && func) { + channel.push(value); + } + } + } + } + } + const channelValues = []; + for (const channel of channels) { + if (channel.length === 1) { + const [resolvedValue] = channel; + if (isStringOrNumber(resolvedValue)) { + channelValues.push(resolvedValue); + } + } else if (channel.length) { + const resolvedValue = serializeCalc(channel.join(""), { + format + }); + channelValues.push(resolvedValue); + } + } + return channelValues; +} +function extractOriginColor(value, opt = {}) { + const { colorScheme = "normal", currentColor = "", format = "" } = opt; + if (isString(value)) { + value = value.toLowerCase().trim(); + if (!value) { + return new NullObject(); + } + if (!REG_FN_REL_START.test(value)) { + return value; + } + } else { + return new NullObject(); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE3, + name: "extractOriginColor", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return cachedResult; + } + return cachedResult.item; + } + if (/currentcolor/.test(value)) { + if (currentColor) { + value = value.replace(/currentcolor/g, currentColor); + } else { + setCache(cacheKey, null); + return new NullObject(); + } + } + let colorSpace = ""; + if (REG_FN_REL_CAPT.test(value)) { + [, colorSpace] = value.match(REG_FN_REL_CAPT); + } + opt.colorSpace = colorSpace; + if (value.includes(FN_LIGHT_DARK)) { + const colorParts = value.replace(new RegExp(`^${colorSpace}\\(`), "").replace(/\)$/, ""); + const [, originColor = ""] = splitValue(colorParts); + const specifiedOriginColor = resolveColor(originColor, { + colorScheme, + format: VAL_SPEC + }); + if (specifiedOriginColor === "") { + setCache(cacheKey, null); + return new NullObject(); + } + if (format === VAL_SPEC) { + value = value.replace(originColor, specifiedOriginColor); + } else { + const resolvedOriginColor = resolveColor(specifiedOriginColor, opt); + if (isString(resolvedOriginColor)) { + value = value.replace(originColor, resolvedOriginColor); + } + } + } + if (REG_COLOR_CAPT.test(value)) { + const [, originColor] = value.match(REG_COLOR_CAPT); + const [, restValue] = value.split(originColor); + if (/^[a-z]+$/.test(originColor)) { + if (!/^transparent$/.test(originColor) && !Object.hasOwn(NAMED_COLORS, originColor)) { + setCache(cacheKey, null); + return new NullObject(); + } + } else if (format === VAL_SPEC) { + const resolvedOriginColor = resolveColor(originColor, opt); + if (isString(resolvedOriginColor)) { + value = value.replace(originColor, resolvedOriginColor); + } + } + if (format === VAL_SPEC) { + const tokens = (0, import_css_tokenizer2.tokenize)({ css: restValue }); + const channelValues = resolveColorChannels(tokens, opt); + if (channelValues instanceof NullObject) { + setCache(cacheKey, null); + return channelValues; + } + const [v1, v2, v3, v4] = channelValues; + let channelValue = ""; + if (isStringOrNumber(v4)) { + channelValue = ` ${v1} ${v2} ${v3} / ${v4})`; + } else { + channelValue = ` ${channelValues.join(" ")})`; + } + if (restValue !== channelValue) { + value = value.replace(restValue, channelValue); + } + } + } else { + const [, restValue] = value.split(REG_FN_REL_START); + const tokens = (0, import_css_tokenizer2.tokenize)({ css: restValue }); + const originColor = []; + let nest = 0; + while (tokens.length) { + const [type, tokenValue] = tokens.shift(); + switch (type) { + case FUNC: + case PAREN_OPEN: { + originColor.push(tokenValue); + nest++; + break; + } + case PAREN_CLOSE2: { + const lastValue = originColor[originColor.length - 1]; + if (lastValue === " ") { + originColor.splice(-1, 1, tokenValue); + } else if (isString(lastValue)) { + originColor.push(tokenValue); + } + nest--; + break; + } + case W_SPACE2: { + const lastValue = originColor[originColor.length - 1]; + if (isString(lastValue) && !lastValue.endsWith("(") && lastValue !== " ") { + originColor.push(tokenValue); + } + break; + } + default: { + if (type !== COMMENT2 && type !== EOF2) { + originColor.push(tokenValue); + } + } + } + if (nest === 0) { + break; + } + } + const resolvedOriginColor = resolveRelativeColor( + originColor.join("").trim(), + opt + ); + if (resolvedOriginColor instanceof NullObject) { + setCache(cacheKey, null); + return resolvedOriginColor; + } + const channelValues = resolveColorChannels(tokens, opt); + if (channelValues instanceof NullObject) { + setCache(cacheKey, null); + return channelValues; + } + const [v1, v2, v3, v4] = channelValues; + let channelValue = ""; + if (isStringOrNumber(v4)) { + channelValue = ` ${v1} ${v2} ${v3} / ${v4})`; + } else { + channelValue = ` ${channelValues.join(" ")})`; + } + value = value.replace(restValue, `${resolvedOriginColor}${channelValue}`); + } + setCache(cacheKey, value); + return value; +} +function resolveRelativeColor(value, opt = {}) { + const { format = "" } = opt; + if (isString(value)) { + if (REG_FN_VAR2.test(value)) { + if (format === VAL_SPEC) { + return value; + } else { + throw new SyntaxError(`Unexpected token ${FN_VAR} found.`); + } + } else if (!REG_FN_REL.test(value)) { + return value; + } + value = value.toLowerCase().trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE3, + name: "resolveRelativeColor", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return cachedResult; + } + return cachedResult.item; + } + const originColor = extractOriginColor(value, opt); + if (originColor instanceof NullObject) { + setCache(cacheKey, null); + return originColor; + } + value = originColor; + if (format === VAL_SPEC) { + if (value.startsWith("rgba(")) { + value = value.replace(/^rgba\(/, "rgb("); + } else if (value.startsWith("hsla(")) { + value = value.replace(/^hsla\(/, "hsl("); + } + return value; + } + const tokens = (0, import_css_tokenizer2.tokenize)({ css: value }); + const components = (0, import_css_parser_algorithms.parseComponentValue)(tokens); + const parsedComponents = (0, import_css_color_parser.color)(components); + if (!parsedComponents) { + setCache(cacheKey, null); + return new NullObject(); + } + const { + alpha: alphaComponent, + channels: channelsComponent, + colorNotation, + syntaxFlags + } = parsedComponents; + let alpha; + if (Number.isNaN(Number(alphaComponent))) { + if (syntaxFlags instanceof Set && syntaxFlags.has(KEY_NONE)) { + alpha = NONE; + } else { + alpha = 0; + } + } else { + alpha = roundToPrecision(Number(alphaComponent), OCT2); + } + let v1; + let v2; + let v3; + [v1, v2, v3] = channelsComponent; + let resolvedValue; + if (REG_CS_CIE.test(colorNotation)) { + const hasNone = syntaxFlags instanceof Set && syntaxFlags.has(KEY_NONE); + if (Number.isNaN(v1)) { + if (hasNone) { + v1 = NONE; + } else { + v1 = 0; + } + } else { + v1 = roundToPrecision(v1, HEX2); + } + if (Number.isNaN(v2)) { + if (hasNone) { + v2 = NONE; + } else { + v2 = 0; + } + } else { + v2 = roundToPrecision(v2, HEX2); + } + if (Number.isNaN(v3)) { + if (hasNone) { + v3 = NONE; + } else { + v3 = 0; + } + } else { + v3 = roundToPrecision(v3, HEX2); + } + if (alpha === 1) { + resolvedValue = `${colorNotation}(${v1} ${v2} ${v3})`; + } else { + resolvedValue = `${colorNotation}(${v1} ${v2} ${v3} / ${alpha})`; + } + } else if (REG_CS_HSL.test(colorNotation)) { + if (Number.isNaN(v1)) { + v1 = 0; + } + if (Number.isNaN(v2)) { + v2 = 0; + } + if (Number.isNaN(v3)) { + v3 = 0; + } + let [r, g, b] = convertColorToRgb( + `${colorNotation}(${v1} ${v2} ${v3} / ${alpha})` + ); + r = roundToPrecision(r / MAX_RGB2, DEC2); + g = roundToPrecision(g / MAX_RGB2, DEC2); + b = roundToPrecision(b / MAX_RGB2, DEC2); + if (alpha === 1) { + resolvedValue = `color(srgb ${r} ${g} ${b})`; + } else { + resolvedValue = `color(srgb ${r} ${g} ${b} / ${alpha})`; + } + } else { + const cs = colorNotation === "rgb" ? "srgb" : colorNotation; + const hasNone = syntaxFlags instanceof Set && syntaxFlags.has(KEY_NONE); + if (Number.isNaN(v1)) { + if (hasNone) { + v1 = NONE; + } else { + v1 = 0; + } + } else { + v1 = roundToPrecision(v1, DEC2); + } + if (Number.isNaN(v2)) { + if (hasNone) { + v2 = NONE; + } else { + v2 = 0; + } + } else { + v2 = roundToPrecision(v2, DEC2); + } + if (Number.isNaN(v3)) { + if (hasNone) { + v3 = NONE; + } else { + v3 = 0; + } + } else { + v3 = roundToPrecision(v3, DEC2); + } + if (alpha === 1) { + resolvedValue = `color(${cs} ${v1} ${v2} ${v3})`; + } else { + resolvedValue = `color(${cs} ${v1} ${v2} ${v3} / ${alpha})`; + } + } + setCache(cacheKey, resolvedValue); + return resolvedValue; +} + +// src/js/resolve.ts +var NAMESPACE4 = "resolve"; +var RGB_TRANSPARENT = "rgba(0, 0, 0, 0)"; +var REG_FN_CALC2 = new RegExp(SYN_FN_CALC); +var REG_FN_LIGHT_DARK = new RegExp(SYN_FN_LIGHT_DARK); +var REG_FN_REL2 = new RegExp(SYN_FN_REL); +var REG_FN_VAR3 = new RegExp(SYN_FN_VAR); +var resolveColor = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { + colorScheme = "normal", + currentColor = "", + format = VAL_COMP, + nullable = false + } = opt; + const cacheKey = createCacheKey( + { + namespace: NAMESPACE4, + name: "resolve", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return cachedResult; + } + return cachedResult.item; + } + if (REG_FN_VAR3.test(value)) { + if (format === VAL_SPEC) { + setCache(cacheKey, value); + return value; + } + const resolvedValue = resolveVar(value, opt); + if (resolvedValue instanceof NullObject) { + switch (format) { + case "hex": + case "hexAlpha": { + setCache(cacheKey, resolvedValue); + return resolvedValue; + } + default: { + if (nullable) { + setCache(cacheKey, resolvedValue); + return resolvedValue; + } + const res2 = RGB_TRANSPARENT; + setCache(cacheKey, res2); + return res2; + } + } + } else { + value = resolvedValue; + } + } + if (opt.format !== format) { + opt.format = format; + } + value = value.toLowerCase(); + if (REG_FN_LIGHT_DARK.test(value) && value.endsWith(")")) { + const colorParts = value.replace(REG_FN_LIGHT_DARK, "").replace(/\)$/, ""); + const [light = "", dark = ""] = splitValue(colorParts, { + delimiter: "," + }); + if (light && dark) { + if (format === VAL_SPEC) { + const lightColor = resolveColor(light, opt); + const darkColor = resolveColor(dark, opt); + let res3; + if (lightColor && darkColor) { + res3 = `light-dark(${lightColor}, ${darkColor})`; + } else { + res3 = ""; + } + setCache(cacheKey, res3); + return res3; + } + let resolvedValue; + if (colorScheme === "dark") { + resolvedValue = resolveColor(dark, opt); + } else { + resolvedValue = resolveColor(light, opt); + } + let res2; + if (resolvedValue instanceof NullObject) { + if (nullable) { + res2 = resolvedValue; + } else { + res2 = RGB_TRANSPARENT; + } + } else { + res2 = resolvedValue; + } + setCache(cacheKey, res2); + return res2; + } + switch (format) { + case VAL_SPEC: { + setCache(cacheKey, ""); + return ""; + } + case "hex": + case "hexAlpha": { + setCache(cacheKey, null); + return new NullObject(); + } + case VAL_COMP: + default: { + const res2 = RGB_TRANSPARENT; + setCache(cacheKey, res2); + return res2; + } + } + } + if (REG_FN_REL2.test(value)) { + const resolvedValue = resolveRelativeColor(value, opt); + if (format === VAL_COMP) { + let res2; + if (resolvedValue instanceof NullObject) { + if (nullable) { + res2 = resolvedValue; + } else { + res2 = RGB_TRANSPARENT; + } + } else { + res2 = resolvedValue; + } + setCache(cacheKey, res2); + return res2; + } + if (format === VAL_SPEC) { + let res2 = ""; + if (resolvedValue instanceof NullObject) { + res2 = ""; + } else { + res2 = resolvedValue; + } + setCache(cacheKey, res2); + return res2; + } + if (resolvedValue instanceof NullObject) { + value = ""; + } else { + value = resolvedValue; + } + } + if (REG_FN_CALC2.test(value)) { + value = cssCalc(value, opt); + } + let cs = ""; + let r = NaN; + let g = NaN; + let b = NaN; + let alpha = NaN; + if (value === "transparent") { + switch (format) { + case VAL_SPEC: { + setCache(cacheKey, value); + return value; + } + case "hex": { + setCache(cacheKey, null); + return new NullObject(); + } + case "hexAlpha": { + const res2 = "#00000000"; + setCache(cacheKey, res2); + return res2; + } + case VAL_COMP: + default: { + const res2 = RGB_TRANSPARENT; + setCache(cacheKey, res2); + return res2; + } + } + } else if (value === "currentcolor") { + if (format === VAL_SPEC) { + setCache(cacheKey, value); + return value; + } + if (currentColor) { + let resolvedValue; + if (currentColor.startsWith(FN_MIX)) { + resolvedValue = resolveColorMix(currentColor, opt); + } else if (currentColor.startsWith(FN_COLOR)) { + resolvedValue = resolveColorFunc(currentColor, opt); + } else { + resolvedValue = resolveColorValue(currentColor, opt); + } + if (resolvedValue instanceof NullObject) { + setCache(cacheKey, resolvedValue); + return resolvedValue; + } + [cs, r, g, b, alpha] = resolvedValue; + } else if (format === VAL_COMP) { + const res2 = RGB_TRANSPARENT; + setCache(cacheKey, res2); + return res2; + } + } else if (format === VAL_SPEC) { + if (value.startsWith(FN_MIX)) { + const res2 = resolveColorMix(value, opt); + setCache(cacheKey, res2); + return res2; + } else if (value.startsWith(FN_COLOR)) { + const [scs, rr, gg, bb, aa] = resolveColorFunc( + value, + opt + ); + let res2 = ""; + if (aa === 1) { + res2 = `color(${scs} ${rr} ${gg} ${bb})`; + } else { + res2 = `color(${scs} ${rr} ${gg} ${bb} / ${aa})`; + } + setCache(cacheKey, res2); + return res2; + } else { + const rgb = resolveColorValue(value, opt); + if (isString(rgb)) { + setCache(cacheKey, rgb); + return rgb; + } + const [scs, rr, gg, bb, aa] = rgb; + let res2 = ""; + if (scs === "rgb") { + if (aa === 1) { + res2 = `${scs}(${rr}, ${gg}, ${bb})`; + } else { + res2 = `${scs}a(${rr}, ${gg}, ${bb}, ${aa})`; + } + } else if (aa === 1) { + res2 = `${scs}(${rr} ${gg} ${bb})`; + } else { + res2 = `${scs}(${rr} ${gg} ${bb} / ${aa})`; + } + setCache(cacheKey, res2); + return res2; + } + } else if (value.startsWith(FN_MIX)) { + if (/currentcolor/.test(value)) { + if (currentColor) { + value = value.replace(/currentcolor/g, currentColor); + } + } + if (/transparent/.test(value)) { + value = value.replace(/transparent/g, RGB_TRANSPARENT); + } + const resolvedValue = resolveColorMix(value, opt); + if (resolvedValue instanceof NullObject) { + setCache(cacheKey, resolvedValue); + return resolvedValue; + } + [cs, r, g, b, alpha] = resolvedValue; + } else if (value.startsWith(FN_COLOR)) { + const resolvedValue = resolveColorFunc(value, opt); + if (resolvedValue instanceof NullObject) { + setCache(cacheKey, resolvedValue); + return resolvedValue; + } + [cs, r, g, b, alpha] = resolvedValue; + } else if (value) { + const resolvedValue = resolveColorValue(value, opt); + if (resolvedValue instanceof NullObject) { + setCache(cacheKey, resolvedValue); + return resolvedValue; + } + [cs, r, g, b, alpha] = resolvedValue; + } + let res = ""; + switch (format) { + case "hex": { + if (Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b) || Number.isNaN(alpha) || alpha === 0) { + setCache(cacheKey, null); + return new NullObject(); + } + res = convertRgbToHex([r, g, b, 1]); + break; + } + case "hexAlpha": { + if (Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b) || Number.isNaN(alpha)) { + setCache(cacheKey, null); + return new NullObject(); + } + res = convertRgbToHex([r, g, b, alpha]); + break; + } + case VAL_COMP: + default: { + switch (cs) { + case "rgb": { + if (alpha === 1) { + res = `${cs}(${r}, ${g}, ${b})`; + } else { + res = `${cs}a(${r}, ${g}, ${b}, ${alpha})`; + } + break; + } + case "lab": + case "lch": + case "oklab": + case "oklch": { + if (alpha === 1) { + res = `${cs}(${r} ${g} ${b})`; + } else { + res = `${cs}(${r} ${g} ${b} / ${alpha})`; + } + break; + } + // color() + default: { + if (alpha === 1) { + res = `color(${cs} ${r} ${g} ${b})`; + } else { + res = `color(${cs} ${r} ${g} ${b} / ${alpha})`; + } + } + } + } + } + setCache(cacheKey, res); + return res; +}; +var resolve = (value, opt = {}) => { + opt.nullable = false; + const resolvedValue = resolveColor(value, opt); + if (resolvedValue instanceof NullObject) { + return null; + } + return resolvedValue; +}; + +// src/js/util.ts +var { + CloseParen: PAREN_CLOSE3, + Comma: COMMA, + Comment: COMMENT3, + Delim: DELIM2, + EOF: EOF3, + Function: FUNC2, + Ident: IDENT3, + OpenParen: PAREN_OPEN2, + Whitespace: W_SPACE3 +} = import_css_tokenizer3.TokenType; +var NAMESPACE5 = "util"; +var DEC3 = 10; +var HEX3 = 16; +var DEG2 = 360; +var DEG_HALF2 = 180; +var REG_COLOR2 = new RegExp(`^(?:${SYN_COLOR_TYPE})$`); +var REG_FN_COLOR2 = /^(?:(?:ok)?l(?:ab|ch)|color(?:-mix)?|hsla?|hwb|rgba?|var)\(/; +var REG_MIX2 = new RegExp(SYN_MIX); +var splitValue = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { delimiter = " ", preserveComment = false } = opt; + const cacheKey = createCacheKey( + { + namespace: NAMESPACE5, + name: "splitValue", + value + }, + { + delimiter, + preserveComment + } + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item; + } + let regDelimiter; + if (delimiter === ",") { + regDelimiter = /^,$/; + } else if (delimiter === "/") { + regDelimiter = /^\/$/; + } else { + regDelimiter = /^\s+$/; + } + const tokens = (0, import_css_tokenizer3.tokenize)({ css: value }); + let nest = 0; + let str = ""; + const res = []; + while (tokens.length) { + const [type, value2] = tokens.shift(); + switch (type) { + case COMMA: { + if (regDelimiter.test(value2)) { + if (nest === 0) { + res.push(str.trim()); + str = ""; + } else { + str += value2; + } + } else { + str += value2; + } + break; + } + case DELIM2: { + if (regDelimiter.test(value2)) { + if (nest === 0) { + res.push(str.trim()); + str = ""; + } else { + str += value2; + } + } else { + str += value2; + } + break; + } + case COMMENT3: { + if (preserveComment && (delimiter === "," || delimiter === "/")) { + str += value2; + } + break; + } + case FUNC2: + case PAREN_OPEN2: { + str += value2; + nest++; + break; + } + case PAREN_CLOSE3: { + str += value2; + nest--; + break; + } + case W_SPACE3: { + if (regDelimiter.test(value2)) { + if (nest === 0) { + if (str) { + res.push(str.trim()); + str = ""; + } + } else { + str += " "; + } + } else if (!str.endsWith(" ")) { + str += " "; + } + break; + } + default: { + if (type === EOF3) { + res.push(str.trim()); + str = ""; + } else { + str += value2; + } + } + } + } + setCache(cacheKey, res); + return res; +}; +var extractDashedIdent = (value) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey = createCacheKey({ + namespace: NAMESPACE5, + name: "extractDashedIdent", + value + }); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item; + } + const tokens = (0, import_css_tokenizer3.tokenize)({ css: value }); + const items = /* @__PURE__ */ new Set(); + while (tokens.length) { + const [type, value2] = tokens.shift(); + if (type === IDENT3 && value2.startsWith("--")) { + items.add(value2); + } + } + const res = [...items]; + setCache(cacheKey, res); + return res; +}; +var isColor = (value, opt = {}) => { + if (isString(value)) { + value = value.toLowerCase().trim(); + if (value && isString(value)) { + if (/^[a-z]+$/.test(value)) { + if (/^(?:currentcolor|transparent)$/.test(value) || Object.hasOwn(NAMED_COLORS, value)) { + return true; + } + } else if (REG_COLOR2.test(value) || REG_MIX2.test(value)) { + return true; + } else if (REG_FN_COLOR2.test(value)) { + opt.nullable = true; + if (!opt.format) { + opt.format = VAL_SPEC; + } + const resolvedValue = resolveColor(value, opt); + if (resolvedValue) { + return true; + } + } + } + } + return false; +}; +var valueToJsonString = (value, func = false) => { + if (typeof value === "undefined") { + return ""; + } + const res = JSON.stringify(value, (_key, val) => { + let replacedValue; + if (typeof val === "undefined") { + replacedValue = null; + } else if (typeof val === "function") { + if (func) { + replacedValue = val.toString().replace(/\s/g, "").substring(0, HEX3); + } else { + replacedValue = val.name; + } + } else if (val instanceof Map || val instanceof Set) { + replacedValue = [...val]; + } else if (typeof val === "bigint") { + replacedValue = val.toString(); + } else { + replacedValue = val; + } + return replacedValue; + }); + return res; +}; +var roundToPrecision = (value, bit = 0) => { + if (!Number.isFinite(value)) { + throw new TypeError(`${value} is not a finite number.`); + } + if (!Number.isFinite(bit)) { + throw new TypeError(`${bit} is not a finite number.`); + } else if (bit < 0 || bit > HEX3) { + throw new RangeError(`${bit} is not between 0 and ${HEX3}.`); + } + if (bit === 0) { + return Math.round(value); + } + let val; + if (bit === HEX3) { + val = value.toPrecision(6); + } else if (bit < DEC3) { + val = value.toPrecision(4); + } else { + val = value.toPrecision(5); + } + return parseFloat(val); +}; +var interpolateHue = (hueA, hueB, arc = "shorter") => { + if (!Number.isFinite(hueA)) { + throw new TypeError(`${hueA} is not a finite number.`); + } + if (!Number.isFinite(hueB)) { + throw new TypeError(`${hueB} is not a finite number.`); + } + switch (arc) { + case "decreasing": { + if (hueB > hueA) { + hueA += DEG2; + } + break; + } + case "increasing": { + if (hueB < hueA) { + hueB += DEG2; + } + break; + } + case "longer": { + if (hueB > hueA && hueB < hueA + DEG_HALF2) { + hueA += DEG2; + } else if (hueB > hueA + DEG_HALF2 * -1 && hueB <= hueA) { + hueB += DEG2; + } + break; + } + case "shorter": + default: { + if (hueB > hueA + DEG_HALF2) { + hueA += DEG2; + } else if (hueB < hueA + DEG_HALF2 * -1) { + hueB += DEG2; + } + } + } + return [hueA, hueB]; +}; +var absoluteFontSize = /* @__PURE__ */ new Map([ + ["xx-small", 3 / 5], + ["x-small", 3 / 4], + ["small", 8 / 9], + ["medium", 1], + ["large", 6 / 5], + ["x-large", 3 / 2], + ["xx-large", 2], + ["xxx-large", 3] +]); +var relativeFontSize = /* @__PURE__ */ new Map([ + ["smaller", 1 / 1.2], + ["larger", 1.2] +]); +var absoluteLength = /* @__PURE__ */ new Map([ + ["cm", 96 / 2.54], + ["mm", 96 / 2.54 / 10], + ["q", 96 / 2.54 / 40], + ["in", 96], + ["pc", 96 / 6], + ["pt", 96 / 72], + ["px", 1] +]); +var relativeLength = /* @__PURE__ */ new Map([ + ["rcap", 1], + ["rch", 0.5], + ["rem", 1], + ["rex", 0.5], + ["ric", 1], + ["rlh", 1.2] +]); +var resolveLengthInPixels = (value, unit, opt = {}) => { + const { dimension = {} } = opt; + const { callback, em, rem, vh, vw } = dimension; + if (isString(value)) { + value = value.toLowerCase().trim(); + if (absoluteFontSize.has(value)) { + return Number(absoluteFontSize.get(value)) * rem; + } else if (relativeFontSize.has(value)) { + return Number(relativeFontSize.get(value)) * em; + } + return Number.NaN; + } else if (Number.isFinite(value) && unit) { + if (Object.hasOwn(dimension, unit)) { + return value * Number(dimension[unit]); + } else if (typeof callback === "function") { + return value * callback(unit); + } else if (absoluteLength.has(unit)) { + return value * Number(absoluteLength.get(unit)); + } else if (relativeLength.has(unit)) { + return value * Number(relativeLength.get(unit)) * rem; + } else if (relativeLength.has(`r${unit}`)) { + return value * Number(relativeLength.get(`r${unit}`)) * em; + } else { + switch (unit) { + case "vb": + case "vi": { + return value * vw; + } + case "vmax": { + if (vh > vw) { + return value * vh; + } + return value * vw; + } + case "vmin": { + if (vh < vw) { + return value * vh; + } + return value * vw; + } + default: { + return Number.NaN; + } + } + } + } + return Number.NaN; +}; + +// src/js/cache.ts +var MAX_CACHE = 4096; +var CacheItem = class { + /* private */ + #isNull; + #item; + /** + * constructor + */ + constructor(item, isNull = false) { + this.#item = item; + this.#isNull = !!isNull; + } + get item() { + return this.#item; + } + get isNull() { + return this.#isNull; + } +}; +var NullObject = class extends CacheItem { + /** + * constructor + */ + constructor() { + super(/* @__PURE__ */ Symbol("null"), true); + } +}; +var lruCache = new import_lru_cache.LRUCache({ + max: MAX_CACHE +}); +var setCache = (key, value) => { + if (key) { + if (value === null) { + lruCache.set(key, new NullObject()); + } else if (value instanceof CacheItem) { + lruCache.set(key, value); + } else { + lruCache.set(key, new CacheItem(value)); + } + } +}; +var getCache = (key) => { + if (key && lruCache.has(key)) { + const item = lruCache.get(key); + if (item instanceof CacheItem) { + return item; + } + lruCache.delete(key); + return false; + } + return false; +}; +var createCacheKey = (keyData, opt = {}) => { + const { customProperty = {}, dimension = {} } = opt; + let cacheKey = ""; + if (keyData && Object.keys(keyData).length && typeof customProperty.callback !== "function" && typeof dimension.callback !== "function") { + keyData.opt = valueToJsonString(opt); + cacheKey = valueToJsonString(keyData); + } + return cacheKey; +}; + +// src/js/css-calc.ts +var { + CloseParen: PAREN_CLOSE4, + Comment: COMMENT4, + Dimension: DIM2, + EOF: EOF4, + Function: FUNC3, + OpenParen: PAREN_OPEN3, + Whitespace: W_SPACE4 +} = import_css_tokenizer4.TokenType; +var NAMESPACE6 = "css-calc"; +var TRIA2 = 3; +var HEX4 = 16; +var MAX_PCT3 = 100; +var REG_FN_CALC3 = new RegExp(SYN_FN_CALC); +var REG_FN_CALC_NUM = new RegExp(`^calc\\((${NUM})\\)$`); +var REG_FN_MATH_START2 = new RegExp(SYN_FN_MATH_START); +var REG_FN_VAR4 = new RegExp(SYN_FN_VAR); +var REG_FN_VAR_START = new RegExp(SYN_FN_VAR_START); +var REG_OPERATOR = /\s[*+/-]\s/; +var REG_TYPE_DIM = new RegExp(`^(${NUM})(${ANGLE}|${LENGTH})$`); +var REG_TYPE_DIM_PCT = new RegExp(`^(${NUM})(${ANGLE}|${LENGTH}|%)$`); +var REG_TYPE_PCT = new RegExp(`^(${NUM})%$`); +var Calculator = class { + /* private */ + // number + #hasNum; + #numSum; + #numMul; + // percentage + #hasPct; + #pctSum; + #pctMul; + // dimension + #hasDim; + #dimSum; + #dimSub; + #dimMul; + #dimDiv; + // et cetra + #hasEtc; + #etcSum; + #etcSub; + #etcMul; + #etcDiv; + /** + * constructor + */ + constructor() { + this.#hasNum = false; + this.#numSum = []; + this.#numMul = []; + this.#hasPct = false; + this.#pctSum = []; + this.#pctMul = []; + this.#hasDim = false; + this.#dimSum = []; + this.#dimSub = []; + this.#dimMul = []; + this.#dimDiv = []; + this.#hasEtc = false; + this.#etcSum = []; + this.#etcSub = []; + this.#etcMul = []; + this.#etcDiv = []; + } + get hasNum() { + return this.#hasNum; + } + set hasNum(value) { + this.#hasNum = !!value; + } + get numSum() { + return this.#numSum; + } + get numMul() { + return this.#numMul; + } + get hasPct() { + return this.#hasPct; + } + set hasPct(value) { + this.#hasPct = !!value; + } + get pctSum() { + return this.#pctSum; + } + get pctMul() { + return this.#pctMul; + } + get hasDim() { + return this.#hasDim; + } + set hasDim(value) { + this.#hasDim = !!value; + } + get dimSum() { + return this.#dimSum; + } + get dimSub() { + return this.#dimSub; + } + get dimMul() { + return this.#dimMul; + } + get dimDiv() { + return this.#dimDiv; + } + get hasEtc() { + return this.#hasEtc; + } + set hasEtc(value) { + this.#hasEtc = !!value; + } + get etcSum() { + return this.#etcSum; + } + get etcSub() { + return this.#etcSub; + } + get etcMul() { + return this.#etcMul; + } + get etcDiv() { + return this.#etcDiv; + } + /** + * clear values + * @returns void + */ + clear() { + this.#hasNum = false; + this.#numSum = []; + this.#numMul = []; + this.#hasPct = false; + this.#pctSum = []; + this.#pctMul = []; + this.#hasDim = false; + this.#dimSum = []; + this.#dimSub = []; + this.#dimMul = []; + this.#dimDiv = []; + this.#hasEtc = false; + this.#etcSum = []; + this.#etcSub = []; + this.#etcMul = []; + this.#etcDiv = []; + } + /** + * sort values + * @param values - values + * @returns sorted values + */ + sort(values = []) { + const arr = [...values]; + if (arr.length > 1) { + arr.sort((a, b) => { + let res; + if (REG_TYPE_DIM_PCT.test(a) && REG_TYPE_DIM_PCT.test(b)) { + const [, valA, unitA] = a.match(REG_TYPE_DIM_PCT); + const [, valB, unitB] = b.match(REG_TYPE_DIM_PCT); + if (unitA === unitB) { + if (Number(valA) === Number(valB)) { + res = 0; + } else if (Number(valA) > Number(valB)) { + res = 1; + } else { + res = -1; + } + } else if (unitA > unitB) { + res = 1; + } else { + res = -1; + } + } else { + if (a === b) { + res = 0; + } else if (a > b) { + res = 1; + } else { + res = -1; + } + } + return res; + }); + } + return arr; + } + /** + * multiply values + * @returns resolved value + */ + multiply() { + const value = []; + let num; + if (this.#hasNum) { + num = 1; + for (const i of this.#numMul) { + num *= i; + if (num === 0 || !Number.isFinite(num) || Number.isNaN(num)) { + break; + } + } + if (!this.#hasPct && !this.#hasDim && !this.hasEtc) { + if (Number.isFinite(num)) { + num = roundToPrecision(num, HEX4); + } + value.push(num); + } + } + if (this.#hasPct) { + if (typeof num !== "number") { + num = 1; + } + for (const i of this.#pctMul) { + num *= i; + if (num === 0 || !Number.isFinite(num) || Number.isNaN(num)) { + break; + } + } + if (Number.isFinite(num)) { + num = `${roundToPrecision(num, HEX4)}%`; + } + if (!this.#hasDim && !this.hasEtc) { + value.push(num); + } + } + if (this.#hasDim) { + let dim = ""; + let mul = ""; + let div = ""; + if (this.#dimMul.length) { + if (this.#dimMul.length === 1) { + [mul] = this.#dimMul; + } else { + mul = `${this.sort(this.#dimMul).join(" * ")}`; + } + } + if (this.#dimDiv.length) { + if (this.#dimDiv.length === 1) { + [div] = this.#dimDiv; + } else { + div = `${this.sort(this.#dimDiv).join(" * ")}`; + } + } + if (Number.isFinite(num)) { + if (mul) { + if (div) { + if (div.includes("*")) { + dim = (0, import_css_calc4.calc)(`calc(${num} * ${mul} / (${div}))`, { + toCanonicalUnits: true + }); + } else { + dim = (0, import_css_calc4.calc)(`calc(${num} * ${mul} / ${div})`, { + toCanonicalUnits: true + }); + } + } else { + dim = (0, import_css_calc4.calc)(`calc(${num} * ${mul})`, { + toCanonicalUnits: true + }); + } + } else if (div.includes("*")) { + dim = (0, import_css_calc4.calc)(`calc(${num} / (${div}))`, { + toCanonicalUnits: true + }); + } else { + dim = (0, import_css_calc4.calc)(`calc(${num} / ${div})`, { + toCanonicalUnits: true + }); + } + value.push(dim.replace(/^calc/, "")); + } else { + if (!value.length && num !== void 0) { + value.push(num); + } + if (mul) { + if (div) { + if (div.includes("*")) { + dim = (0, import_css_calc4.calc)(`calc(${mul} / (${div}))`, { + toCanonicalUnits: true + }); + } else { + dim = (0, import_css_calc4.calc)(`calc(${mul} / ${div})`, { + toCanonicalUnits: true + }); + } + } else { + dim = (0, import_css_calc4.calc)(`calc(${mul})`, { + toCanonicalUnits: true + }); + } + if (value.length) { + value.push("*", dim.replace(/^calc/, "")); + } else { + value.push(dim.replace(/^calc/, "")); + } + } else { + dim = (0, import_css_calc4.calc)(`calc(${div})`, { + toCanonicalUnits: true + }); + if (value.length) { + value.push("/", dim.replace(/^calc/, "")); + } else { + value.push("1", "/", dim.replace(/^calc/, "")); + } + } + } + } + if (this.#hasEtc) { + if (this.#etcMul.length) { + if (!value.length && num !== void 0) { + value.push(num); + } + const mul = this.sort(this.#etcMul).join(" * "); + if (value.length) { + value.push(`* ${mul}`); + } else { + value.push(`${mul}`); + } + } + if (this.#etcDiv.length) { + const div = this.sort(this.#etcDiv).join(" * "); + if (div.includes("*")) { + if (value.length) { + value.push(`/ (${div})`); + } else { + value.push(`1 / (${div})`); + } + } else if (value.length) { + value.push(`/ ${div}`); + } else { + value.push(`1 / ${div}`); + } + } + } + if (value.length) { + return value.join(" "); + } + return ""; + } + /** + * sum values + * @returns resolved value + */ + sum() { + const value = []; + if (this.#hasNum) { + let num = 0; + for (const i of this.#numSum) { + num += i; + if (!Number.isFinite(num) || Number.isNaN(num)) { + break; + } + } + value.push(num); + } + if (this.#hasPct) { + let num = 0; + for (const i of this.#pctSum) { + num += i; + if (!Number.isFinite(num)) { + break; + } + } + if (Number.isFinite(num)) { + num = `${num}%`; + } + if (value.length) { + value.push(`+ ${num}`); + } else { + value.push(num); + } + } + if (this.#hasDim) { + let dim, sum, sub; + if (this.#dimSum.length) { + sum = this.sort(this.#dimSum).join(" + "); + } + if (this.#dimSub.length) { + sub = this.sort(this.#dimSub).join(" + "); + } + if (sum) { + if (sub) { + if (sub.includes("-")) { + dim = (0, import_css_calc4.calc)(`calc(${sum} - (${sub}))`, { + toCanonicalUnits: true + }); + } else { + dim = (0, import_css_calc4.calc)(`calc(${sum} - ${sub})`, { + toCanonicalUnits: true + }); + } + } else { + dim = (0, import_css_calc4.calc)(`calc(${sum})`, { + toCanonicalUnits: true + }); + } + } else { + dim = (0, import_css_calc4.calc)(`calc(-1 * (${sub}))`, { + toCanonicalUnits: true + }); + } + if (value.length) { + value.push("+", dim.replace(/^calc/, "")); + } else { + value.push(dim.replace(/^calc/, "")); + } + } + if (this.#hasEtc) { + if (this.#etcSum.length) { + const sum = this.sort(this.#etcSum).map((item) => { + let res; + if (REG_OPERATOR.test(item) && !item.startsWith("(") && !item.endsWith(")")) { + res = `(${item})`; + } else { + res = item; + } + return res; + }).join(" + "); + if (value.length) { + if (this.#etcSum.length > 1) { + value.push(`+ (${sum})`); + } else { + value.push(`+ ${sum}`); + } + } else { + value.push(`${sum}`); + } + } + if (this.#etcSub.length) { + const sub = this.sort(this.#etcSub).map((item) => { + let res; + if (REG_OPERATOR.test(item) && !item.startsWith("(") && !item.endsWith(")")) { + res = `(${item})`; + } else { + res = item; + } + return res; + }).join(" + "); + if (value.length) { + if (this.#etcSub.length > 1) { + value.push(`- (${sub})`); + } else { + value.push(`- ${sub}`); + } + } else if (this.#etcSub.length > 1) { + value.push(`-1 * (${sub})`); + } else { + value.push(`-1 * ${sub}`); + } + } + } + if (value.length) { + return value.join(" "); + } + return ""; + } +}; +var sortCalcValues = (values = [], finalize = false) => { + if (values.length < TRIA2) { + throw new Error(`Unexpected array length ${values.length}.`); + } + const start = values.shift(); + if (!isString(start) || !start.endsWith("(")) { + throw new Error(`Unexpected token ${start}.`); + } + const end = values.pop(); + if (end !== ")") { + throw new Error(`Unexpected token ${end}.`); + } + if (values.length === 1) { + const [value] = values; + if (!isStringOrNumber(value)) { + throw new Error(`Unexpected token ${value}.`); + } + return `${start}${value}${end}`; + } + const sortedValues = []; + const cal = new Calculator(); + let operator = ""; + const l = values.length; + for (let i = 0; i < l; i++) { + const value = values[i]; + if (!isStringOrNumber(value)) { + throw new Error(`Unexpected token ${value}.`); + } + if (value === "*" || value === "/") { + operator = value; + } else if (value === "+" || value === "-") { + const sortedValue = cal.multiply(); + if (sortedValue) { + sortedValues.push(sortedValue, value); + } + cal.clear(); + operator = ""; + } else { + const numValue = Number(value); + const strValue = `${value}`; + switch (operator) { + case "/": { + if (Number.isFinite(numValue)) { + cal.hasNum = true; + cal.numMul.push(1 / numValue); + } else if (REG_TYPE_PCT.test(strValue)) { + const [, val] = strValue.match(REG_TYPE_PCT); + cal.hasPct = true; + cal.pctMul.push(MAX_PCT3 * MAX_PCT3 / Number(val)); + } else if (REG_TYPE_DIM.test(strValue)) { + cal.hasDim = true; + cal.dimDiv.push(strValue); + } else { + cal.hasEtc = true; + cal.etcDiv.push(strValue); + } + break; + } + case "*": + default: { + if (Number.isFinite(numValue)) { + cal.hasNum = true; + cal.numMul.push(numValue); + } else if (REG_TYPE_PCT.test(strValue)) { + const [, val] = strValue.match(REG_TYPE_PCT); + cal.hasPct = true; + cal.pctMul.push(Number(val)); + } else if (REG_TYPE_DIM.test(strValue)) { + cal.hasDim = true; + cal.dimMul.push(strValue); + } else { + cal.hasEtc = true; + cal.etcMul.push(strValue); + } + } + } + } + if (i === l - 1) { + const sortedValue = cal.multiply(); + if (sortedValue) { + sortedValues.push(sortedValue); + } + cal.clear(); + operator = ""; + } + } + let resolvedValue = ""; + if (finalize && (sortedValues.includes("+") || sortedValues.includes("-"))) { + const finalizedValues = []; + cal.clear(); + operator = ""; + const l2 = sortedValues.length; + for (let i = 0; i < l2; i++) { + const value = sortedValues[i]; + if (isStringOrNumber(value)) { + if (value === "+" || value === "-") { + operator = value; + } else { + const numValue = Number(value); + const strValue = `${value}`; + switch (operator) { + case "-": { + if (Number.isFinite(numValue)) { + cal.hasNum = true; + cal.numSum.push(-1 * numValue); + } else if (REG_TYPE_PCT.test(strValue)) { + const [, val] = strValue.match(REG_TYPE_PCT); + cal.hasPct = true; + cal.pctSum.push(-1 * Number(val)); + } else if (REG_TYPE_DIM.test(strValue)) { + cal.hasDim = true; + cal.dimSub.push(strValue); + } else { + cal.hasEtc = true; + cal.etcSub.push(strValue); + } + break; + } + case "+": + default: { + if (Number.isFinite(numValue)) { + cal.hasNum = true; + cal.numSum.push(numValue); + } else if (REG_TYPE_PCT.test(strValue)) { + const [, val] = strValue.match(REG_TYPE_PCT); + cal.hasPct = true; + cal.pctSum.push(Number(val)); + } else if (REG_TYPE_DIM.test(strValue)) { + cal.hasDim = true; + cal.dimSum.push(strValue); + } else { + cal.hasEtc = true; + cal.etcSum.push(strValue); + } + } + } + } + } + if (i === l2 - 1) { + const sortedValue = cal.sum(); + if (sortedValue) { + finalizedValues.push(sortedValue); + } + cal.clear(); + operator = ""; + } + } + resolvedValue = finalizedValues.join(" ").replace(/\+\s-/g, "- "); + } else { + resolvedValue = sortedValues.join(" ").replace(/\+\s-/g, "- "); + } + if (resolvedValue.startsWith("(") && resolvedValue.endsWith(")") && resolvedValue.lastIndexOf("(") === 0 && resolvedValue.indexOf(")") === resolvedValue.length - 1) { + resolvedValue = resolvedValue.replace(/^\(/, "").replace(/\)$/, ""); + } + return `${start}${resolvedValue}${end}`; +}; +var serializeCalc = (value, opt = {}) => { + const { format = "" } = opt; + if (isString(value)) { + if (!REG_FN_VAR_START.test(value) || format !== VAL_SPEC) { + return value; + } + value = value.toLowerCase().trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE6, + name: "serializeCalc", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item; + } + const items = (0, import_css_tokenizer4.tokenize)({ css: value }).map((token) => { + const [type, value2] = token; + let res = ""; + if (type !== W_SPACE4 && type !== COMMENT4) { + res = value2; + } + return res; + }).filter((v) => v); + let startIndex = items.findLastIndex((item) => /\($/.test(item)); + while (startIndex) { + const endIndex = items.findIndex((item, index) => { + return item === ")" && index > startIndex; + }); + const slicedValues = items.slice(startIndex, endIndex + 1); + let serializedValue = sortCalcValues(slicedValues); + if (REG_FN_VAR_START.test(serializedValue)) { + serializedValue = (0, import_css_calc4.calc)(serializedValue, { + toCanonicalUnits: true + }); + } + items.splice(startIndex, endIndex - startIndex + 1, serializedValue); + startIndex = items.findLastIndex((item) => /\($/.test(item)); + } + const serializedCalc = sortCalcValues(items, true); + setCache(cacheKey, serializedCalc); + return serializedCalc; +}; +var resolveDimension = (token, opt = {}) => { + if (!Array.isArray(token)) { + throw new TypeError(`${token} is not an array.`); + } + const [, , , , detail = {}] = token; + const { unit, value } = detail; + if (unit === "px") { + return `${value}${unit}`; + } + const pixelValue = resolveLengthInPixels(Number(value), unit, opt); + if (Number.isFinite(pixelValue)) { + return `${roundToPrecision(pixelValue, HEX4)}px`; + } + return new NullObject(); +}; +var parseTokens2 = (tokens, opt = {}) => { + if (!Array.isArray(tokens)) { + throw new TypeError(`${tokens} is not an array.`); + } + const { format = "" } = opt; + const mathFunc = /* @__PURE__ */ new Set(); + let nest = 0; + const res = []; + while (tokens.length) { + const token = tokens.shift(); + if (!Array.isArray(token)) { + throw new TypeError(`${token} is not an array.`); + } + const [type = "", value = ""] = token; + switch (type) { + case DIM2: { + if (format === VAL_SPEC && !mathFunc.has(nest)) { + res.push(value); + } else { + const resolvedValue = resolveDimension(token, opt); + if (isString(resolvedValue)) { + res.push(resolvedValue); + } else { + res.push(value); + } + } + break; + } + case FUNC3: + case PAREN_OPEN3: { + res.push(value); + nest++; + if (REG_FN_MATH_START2.test(value)) { + mathFunc.add(nest); + } + break; + } + case PAREN_CLOSE4: { + if (res.length) { + const lastValue = res[res.length - 1]; + if (lastValue === " ") { + res.splice(-1, 1, value); + } else { + res.push(value); + } + } else { + res.push(value); + } + if (mathFunc.has(nest)) { + mathFunc.delete(nest); + } + nest--; + break; + } + case W_SPACE4: { + if (res.length) { + const lastValue = res[res.length - 1]; + if (isString(lastValue) && !lastValue.endsWith("(") && lastValue !== " ") { + res.push(value); + } + } + break; + } + default: { + if (type !== COMMENT4 && type !== EOF4) { + res.push(value); + } + } + } + } + return res; +}; +var cssCalc = (value, opt = {}) => { + const { format = "" } = opt; + if (isString(value)) { + if (REG_FN_VAR4.test(value)) { + if (format === VAL_SPEC) { + return value; + } else { + const resolvedValue2 = resolveVar(value, opt); + if (isString(resolvedValue2)) { + return resolvedValue2; + } else { + return ""; + } + } + } else if (!REG_FN_CALC3.test(value)) { + return value; + } + value = value.toLowerCase().trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE6, + name: "cssCalc", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item; + } + const tokens = (0, import_css_tokenizer4.tokenize)({ css: value }); + const values = parseTokens2(tokens, opt); + let resolvedValue = (0, import_css_calc4.calc)(values.join(""), { + toCanonicalUnits: true + }); + if (REG_FN_VAR_START.test(value)) { + if (REG_TYPE_DIM_PCT.test(resolvedValue)) { + const [, val, unit] = resolvedValue.match( + REG_TYPE_DIM_PCT + ); + resolvedValue = `${roundToPrecision(Number(val), HEX4)}${unit}`; + } + if (resolvedValue && !REG_FN_VAR_START.test(resolvedValue) && format === VAL_SPEC) { + resolvedValue = `calc(${resolvedValue})`; + } + } + if (format === VAL_SPEC) { + if (/\s[-+*/]\s/.test(resolvedValue) && !resolvedValue.includes("NaN")) { + resolvedValue = serializeCalc(resolvedValue, opt); + } else if (REG_FN_CALC_NUM.test(resolvedValue)) { + const [, val] = resolvedValue.match(REG_FN_CALC_NUM); + resolvedValue = `calc(${roundToPrecision(Number(val), HEX4)})`; + } + } + setCache(cacheKey, resolvedValue); + return resolvedValue; +}; + +// src/js/css-gradient.ts +var NAMESPACE7 = "css-gradient"; +var DIM_ANGLE = `${NUM}(?:${ANGLE})`; +var DIM_ANGLE_PCT = `${DIM_ANGLE}|${PCT}`; +var DIM_LEN = `${NUM}(?:${LENGTH})|0`; +var DIM_LEN_PCT = `${DIM_LEN}|${PCT}`; +var DIM_LEN_PCT_POSI = `${NUM_POSITIVE}(?:${LENGTH}|%)|0`; +var DIM_LEN_POSI = `${NUM_POSITIVE}(?:${LENGTH})|0`; +var CTR = "center"; +var L_R = "left|right"; +var T_B = "top|bottom"; +var S_E = "start|end"; +var AXIS_X = `${L_R}|x-(?:${S_E})`; +var AXIS_Y = `${T_B}|y-(?:${S_E})`; +var BLOCK = `block-(?:${S_E})`; +var INLINE = `inline-(?:${S_E})`; +var POS_1 = `${CTR}|${AXIS_X}|${AXIS_Y}|${BLOCK}|${INLINE}|${DIM_LEN_PCT}`; +var POS_2 = [ + `(?:${CTR}|${AXIS_X})\\s+(?:${CTR}|${AXIS_Y})`, + `(?:${CTR}|${AXIS_Y})\\s+(?:${CTR}|${AXIS_X})`, + `(?:${CTR}|${AXIS_X}|${DIM_LEN_PCT})\\s+(?:${CTR}|${AXIS_Y}|${DIM_LEN_PCT})`, + `(?:${CTR}|${BLOCK})\\s+(?:${CTR}|${INLINE})`, + `(?:${CTR}|${INLINE})\\s+(?:${CTR}|${BLOCK})`, + `(?:${CTR}|${S_E})\\s+(?:${CTR}|${S_E})` +].join("|"); +var POS_4 = [ + `(?:${AXIS_X})\\s+(?:${DIM_LEN_PCT})\\s+(?:${AXIS_Y})\\s+(?:${DIM_LEN_PCT})`, + `(?:${AXIS_Y})\\s+(?:${DIM_LEN_PCT})\\s+(?:${AXIS_X})\\s+(?:${DIM_LEN_PCT})`, + `(?:${BLOCK})\\s+(?:${DIM_LEN_PCT})\\s+(?:${INLINE})\\s+(?:${DIM_LEN_PCT})`, + `(?:${INLINE})\\s+(?:${DIM_LEN_PCT})\\s+(?:${BLOCK})\\s+(?:${DIM_LEN_PCT})`, + `(?:${S_E})\\s+(?:${DIM_LEN_PCT})\\s+(?:${S_E})\\s+(?:${DIM_LEN_PCT})` +].join("|"); +var RAD_EXTENT = "(?:clos|farth)est-(?:corner|side)"; +var RAD_SIZE = [ + `${RAD_EXTENT}(?:\\s+${RAD_EXTENT})?`, + `${DIM_LEN_POSI}`, + `(?:${DIM_LEN_PCT_POSI})\\s+(?:${DIM_LEN_PCT_POSI})` +].join("|"); +var RAD_SHAPE = "circle|ellipse"; +var FROM_ANGLE = `from\\s+${DIM_ANGLE}`; +var AT_POSITION = `at\\s+(?:${POS_1}|${POS_2}|${POS_4})`; +var TO_SIDE_CORNER = `to\\s+(?:(?:${L_R})(?:\\s(?:${T_B}))?|(?:${T_B})(?:\\s(?:${L_R}))?)`; +var IN_COLOR_SPACE = `in\\s+(?:${CS_RECT}|${CS_HUE})`; +var REG_GRAD = /^(?:repeating-)?(?:conic|linear|radial)-gradient\(/; +var REG_GRAD_CAPT = /^((?:repeating-)?(?:conic|linear|radial)-gradient)\(/; +var getGradientType = (value) => { + if (isString(value)) { + value = value.trim(); + if (REG_GRAD.test(value)) { + const [, type] = value.match(REG_GRAD_CAPT); + return type; + } + } + return ""; +}; +var validateGradientLine = (value, type) => { + if (isString(value) && isString(type)) { + value = value.trim(); + type = type.trim(); + let lineSyntax = ""; + const defaultValues = []; + if (/^(?:repeating-)?linear-gradient$/.test(type)) { + lineSyntax = [ + `(?:${DIM_ANGLE}|${TO_SIDE_CORNER})(?:\\s+${IN_COLOR_SPACE})?`, + `${IN_COLOR_SPACE}(?:\\s+(?:${DIM_ANGLE}|${TO_SIDE_CORNER}))?` + ].join("|"); + defaultValues.push(/to\s+bottom/); + } else if (/^(?:repeating-)?radial-gradient$/.test(type)) { + lineSyntax = [ + `(?:${RAD_SHAPE})(?:\\s+(?:${RAD_SIZE}))?(?:\\s+${AT_POSITION})?(?:\\s+${IN_COLOR_SPACE})?`, + `(?:${RAD_SIZE})(?:\\s+(?:${RAD_SHAPE}))?(?:\\s+${AT_POSITION})?(?:\\s+${IN_COLOR_SPACE})?`, + `${AT_POSITION}(?:\\s+${IN_COLOR_SPACE})?`, + `${IN_COLOR_SPACE}(?:\\s+${RAD_SHAPE})(?:\\s+(?:${RAD_SIZE}))?(?:\\s+${AT_POSITION})?`, + `${IN_COLOR_SPACE}(?:\\s+${RAD_SIZE})(?:\\s+(?:${RAD_SHAPE}))?(?:\\s+${AT_POSITION})?`, + `${IN_COLOR_SPACE}(?:\\s+${AT_POSITION})?` + ].join("|"); + defaultValues.push(/ellipse/, /farthest-corner/, /at\s+center/); + } else if (/^(?:repeating-)?conic-gradient$/.test(type)) { + lineSyntax = [ + `${FROM_ANGLE}(?:\\s+${AT_POSITION})?(?:\\s+${IN_COLOR_SPACE})?`, + `${AT_POSITION}(?:\\s+${IN_COLOR_SPACE})?`, + `${IN_COLOR_SPACE}(?:\\s+${FROM_ANGLE})?(?:\\s+${AT_POSITION})?` + ].join("|"); + defaultValues.push(/at\s+center/); + } + if (lineSyntax) { + const reg = new RegExp(`^(?:${lineSyntax})$`); + const valid = reg.test(value); + if (valid) { + let line = value; + for (const defaultValue of defaultValues) { + line = line.replace(defaultValue, ""); + } + line = line.replace(/\s{2,}/g, " ").trim(); + return { + line, + valid + }; + } + return { + valid, + line: value + }; + } + } + return { + line: value, + valid: false + }; +}; +var validateColorStopList = (list, type, opt = {}) => { + if (Array.isArray(list) && list.length > 1) { + const dimension = /^(?:repeating-)?conic-gradient$/.test(type) ? DIM_ANGLE_PCT : DIM_LEN_PCT; + const regColorHint = new RegExp(`^(?:${dimension})$`); + const regDimension = new RegExp(`(?:\\s+(?:${dimension})){1,2}$`); + const valueTypes = []; + const valueList = []; + for (const item of list) { + if (isString(item)) { + if (regColorHint.test(item)) { + valueTypes.push("hint"); + valueList.push(item); + } else { + const itemColor = item.replace(regDimension, ""); + if (isColor(itemColor, { format: VAL_SPEC })) { + const resolvedColor = resolveColor(itemColor, opt); + valueTypes.push("color"); + valueList.push(item.replace(itemColor, resolvedColor)); + } else { + return { + colorStops: list, + valid: false + }; + } + } + } + } + const valid = /^color(?:,(?:hint,)?color)+$/.test(valueTypes.join(",")); + return { + valid, + colorStops: valueList + }; + } + return { + colorStops: list, + valid: false + }; +}; +var parseGradient = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + const cacheKey = createCacheKey( + { + namespace: NAMESPACE7, + name: "parseGradient", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return null; + } + return cachedResult.item; + } + const type = getGradientType(value); + const gradValue = value.replace(REG_GRAD, "").replace(/\)$/, ""); + if (type && gradValue) { + const [lineOrColorStop = "", ...itemList] = splitValue(gradValue, { + delimiter: "," + }); + const dimension = /^(?:repeating-)?conic-gradient$/.test(type) ? DIM_ANGLE_PCT : DIM_LEN_PCT; + const regDimension = new RegExp(`(?:\\s+(?:${dimension})){1,2}$`); + let colorStop = ""; + if (regDimension.test(lineOrColorStop)) { + const itemColor = lineOrColorStop.replace(regDimension, ""); + if (isColor(itemColor, { format: VAL_SPEC })) { + const resolvedColor = resolveColor(itemColor, opt); + colorStop = lineOrColorStop.replace(itemColor, resolvedColor); + } + } else if (isColor(lineOrColorStop, { format: VAL_SPEC })) { + colorStop = resolveColor(lineOrColorStop, opt); + } + if (colorStop) { + itemList.unshift(colorStop); + const { colorStops, valid } = validateColorStopList( + itemList, + type, + opt + ); + if (valid) { + const res = { + value, + type, + colorStopList: colorStops + }; + setCache(cacheKey, res); + return res; + } + } else if (itemList.length > 1) { + const { line: gradientLine, valid: validLine } = validateGradientLine( + lineOrColorStop, + type + ); + const { colorStops, valid: validColorStops } = validateColorStopList( + itemList, + type, + opt + ); + if (validLine && validColorStops) { + const res = { + value, + type, + gradientLine, + colorStopList: colorStops + }; + setCache(cacheKey, res); + return res; + } + } + } + setCache(cacheKey, null); + return null; + } + return null; +}; +var resolveGradient = (value, opt = {}) => { + const { format = VAL_COMP } = opt; + const gradient = parseGradient(value, opt); + if (gradient) { + const { type = "", gradientLine = "", colorStopList = [] } = gradient; + if (type && Array.isArray(colorStopList) && colorStopList.length > 1) { + if (gradientLine) { + return `${type}(${gradientLine}, ${colorStopList.join(", ")})`; + } + return `${type}(${colorStopList.join(", ")})`; + } + } + if (format === VAL_SPEC) { + return ""; + } + return "none"; +}; +var isGradient = (value, opt = {}) => { + const gradient = parseGradient(value, opt); + return gradient !== null; +}; + +// src/js/convert.ts +var NAMESPACE8 = "convert"; +var REG_FN_CALC4 = new RegExp(SYN_FN_CALC); +var REG_FN_REL3 = new RegExp(SYN_FN_REL); +var REG_FN_VAR5 = new RegExp(SYN_FN_VAR); +var preProcess = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + if (!value) { + return new NullObject(); + } + } else { + return new NullObject(); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE8, + name: "preProcess", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return cachedResult; + } + return cachedResult.item; + } + if (REG_FN_VAR5.test(value)) { + const resolvedValue = resolveVar(value, opt); + if (isString(resolvedValue)) { + value = resolvedValue; + } else { + setCache(cacheKey, null); + return new NullObject(); + } + } + if (REG_FN_REL3.test(value)) { + const resolvedValue = resolveRelativeColor(value, opt); + if (isString(resolvedValue)) { + value = resolvedValue; + } else { + setCache(cacheKey, null); + return new NullObject(); + } + } else if (REG_FN_CALC4.test(value)) { + value = cssCalc(value, opt); + } + if (value.startsWith("color-mix")) { + const clonedOpt = structuredClone(opt); + clonedOpt.format = VAL_COMP; + clonedOpt.nullable = true; + const resolvedValue = resolveColor(value, clonedOpt); + setCache(cacheKey, resolvedValue); + return resolvedValue; + } + setCache(cacheKey, value); + return value; +}; +var numberToHex = (value) => { + const hex = numberToHexString(value); + return hex; +}; +var colorToHex = (value, opt = {}) => { + if (isString(value)) { + const resolvedValue = preProcess(value, opt); + if (resolvedValue instanceof NullObject) { + return null; + } + value = resolvedValue.toLowerCase(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { alpha = false } = opt; + const cacheKey = createCacheKey( + { + namespace: NAMESPACE8, + name: "colorToHex", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return null; + } + return cachedResult.item; + } + let hex; + opt.nullable = true; + if (alpha) { + opt.format = "hexAlpha"; + hex = resolveColor(value, opt); + } else { + opt.format = "hex"; + hex = resolveColor(value, opt); + } + if (isString(hex)) { + setCache(cacheKey, hex); + return hex; + } + setCache(cacheKey, null); + return null; +}; +var colorToHsl = (value, opt = {}) => { + if (isString(value)) { + const resolvedValue = preProcess(value, opt); + if (resolvedValue instanceof NullObject) { + return [0, 0, 0, 0]; + } + value = resolvedValue.toLowerCase(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE8, + name: "colorToHsl", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item; + } + opt.format = "hsl"; + const hsl = convertColorToHsl(value, opt); + setCache(cacheKey, hsl); + return hsl; +}; +var colorToHwb = (value, opt = {}) => { + if (isString(value)) { + const resolvedValue = preProcess(value, opt); + if (resolvedValue instanceof NullObject) { + return [0, 0, 0, 0]; + } + value = resolvedValue.toLowerCase(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE8, + name: "colorToHwb", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item; + } + opt.format = "hwb"; + const hwb = convertColorToHwb(value, opt); + setCache(cacheKey, hwb); + return hwb; +}; +var colorToLab = (value, opt = {}) => { + if (isString(value)) { + const resolvedValue = preProcess(value, opt); + if (resolvedValue instanceof NullObject) { + return [0, 0, 0, 0]; + } + value = resolvedValue.toLowerCase(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE8, + name: "colorToLab", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item; + } + const lab = convertColorToLab(value, opt); + setCache(cacheKey, lab); + return lab; +}; +var colorToLch = (value, opt = {}) => { + if (isString(value)) { + const resolvedValue = preProcess(value, opt); + if (resolvedValue instanceof NullObject) { + return [0, 0, 0, 0]; + } + value = resolvedValue.toLowerCase(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE8, + name: "colorToLch", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item; + } + const lch = convertColorToLch(value, opt); + setCache(cacheKey, lch); + return lch; +}; +var colorToOklab = (value, opt = {}) => { + if (isString(value)) { + const resolvedValue = preProcess(value, opt); + if (resolvedValue instanceof NullObject) { + return [0, 0, 0, 0]; + } + value = resolvedValue.toLowerCase(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE8, + name: "colorToOklab", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item; + } + const lab = convertColorToOklab(value, opt); + setCache(cacheKey, lab); + return lab; +}; +var colorToOklch = (value, opt = {}) => { + if (isString(value)) { + const resolvedValue = preProcess(value, opt); + if (resolvedValue instanceof NullObject) { + return [0, 0, 0, 0]; + } + value = resolvedValue.toLowerCase(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE8, + name: "colorToOklch", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item; + } + const lch = convertColorToOklch(value, opt); + setCache(cacheKey, lch); + return lch; +}; +var colorToRgb = (value, opt = {}) => { + if (isString(value)) { + const resolvedValue = preProcess(value, opt); + if (resolvedValue instanceof NullObject) { + return [0, 0, 0, 0]; + } + value = resolvedValue.toLowerCase(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE8, + name: "colorToRgb", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item; + } + const rgb = convertColorToRgb(value, opt); + setCache(cacheKey, rgb); + return rgb; +}; +var colorToXyz = (value, opt = {}) => { + if (isString(value)) { + const resolvedValue = preProcess(value, opt); + if (resolvedValue instanceof NullObject) { + return [0, 0, 0, 0]; + } + value = resolvedValue.toLowerCase(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE8, + name: "colorToXyz", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item; + } + let xyz; + if (value.startsWith("color(")) { + [, ...xyz] = parseColorFunc(value, opt); + } else { + [, ...xyz] = parseColorValue(value, opt); + } + setCache(cacheKey, xyz); + return xyz; +}; +var colorToXyzD50 = (value, opt = {}) => { + opt.d50 = true; + return colorToXyz(value, opt); +}; +var convert = { + colorToHex, + colorToHsl, + colorToHwb, + colorToLab, + colorToLch, + colorToOklab, + colorToOklch, + colorToRgb, + colorToXyz, + colorToXyzD50, + numberToHex +}; + +// src/index.ts +var utils = { + cssCalc, + cssVar, + extractDashedIdent, + isColor, + isGradient, + resolveGradient, + resolveLengthInPixels, + splitValue +}; +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + convert, + resolve, + utils +}); +/*! + * CSS color - Resolve, parse, convert CSS color. + * @license MIT + * @copyright asamuzaK (Kazz) + * @see {@link https://github.com/asamuzaK/cssColor/blob/main/LICENSE} + */ +//# sourceMappingURL=index.cjs.map
\ No newline at end of file diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/cjs/index.cjs.map b/vanilla/node_modules/@asamuzakjp/css-color/dist/cjs/index.cjs.map new file mode 100644 index 0000000..1b6043d --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/cjs/index.cjs.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../src/index.ts","../../src/js/css-calc.ts","../../src/js/cache.ts","../../src/js/util.ts","../../src/js/common.ts","../../src/js/constant.ts","../../src/js/color.ts","../../src/js/css-var.ts","../../src/js/relative-color.ts","../../src/js/resolve.ts","../../src/js/css-gradient.ts","../../src/js/convert.ts"],"sourcesContent":["/*!\n * CSS color - Resolve, parse, convert CSS color.\n * @license MIT\n * @copyright asamuzaK (Kazz)\n * @see {@link https://github.com/asamuzaK/cssColor/blob/main/LICENSE}\n */\n\nimport { cssCalc } from './js/css-calc';\nimport { isGradient, resolveGradient } from './js/css-gradient';\nimport { cssVar } from './js/css-var';\nimport {\n extractDashedIdent,\n isColor,\n resolveLengthInPixels,\n splitValue\n} from './js/util';\n\nexport { convert } from './js/convert';\nexport { resolve } from './js/resolve';\n/* utils */\nexport const utils = {\n cssCalc,\n cssVar,\n extractDashedIdent,\n isColor,\n isGradient,\n resolveGradient,\n resolveLengthInPixels,\n splitValue\n};\n","/**\n * css-calc\n */\n\nimport { calc } from '@csstools/css-calc';\nimport { CSSToken, TokenType, tokenize } from '@csstools/css-tokenizer';\nimport {\n CacheItem,\n NullObject,\n createCacheKey,\n getCache,\n setCache\n} from './cache';\nimport { isString, isStringOrNumber } from './common';\nimport { resolveVar } from './css-var';\nimport { resolveLengthInPixels, roundToPrecision } from './util';\nimport { MatchedRegExp, Options } from './typedef';\n\n/* constants */\nimport {\n ANGLE,\n LENGTH,\n NUM,\n SYN_FN_CALC,\n SYN_FN_MATH_START,\n SYN_FN_VAR,\n SYN_FN_VAR_START,\n VAL_SPEC\n} from './constant';\nconst {\n CloseParen: PAREN_CLOSE,\n Comment: COMMENT,\n Dimension: DIM,\n EOF,\n Function: FUNC,\n OpenParen: PAREN_OPEN,\n Whitespace: W_SPACE\n} = TokenType;\nconst NAMESPACE = 'css-calc';\n\n/* numeric constants */\nconst TRIA = 3;\nconst HEX = 16;\nconst MAX_PCT = 100;\n\n/* regexp */\nconst REG_FN_CALC = new RegExp(SYN_FN_CALC);\nconst REG_FN_CALC_NUM = new RegExp(`^calc\\\\((${NUM})\\\\)$`);\nconst REG_FN_MATH_START = new RegExp(SYN_FN_MATH_START);\nconst REG_FN_VAR = new RegExp(SYN_FN_VAR);\nconst REG_FN_VAR_START = new RegExp(SYN_FN_VAR_START);\nconst REG_OPERATOR = /\\s[*+/-]\\s/;\nconst REG_TYPE_DIM = new RegExp(`^(${NUM})(${ANGLE}|${LENGTH})$`);\nconst REG_TYPE_DIM_PCT = new RegExp(`^(${NUM})(${ANGLE}|${LENGTH}|%)$`);\nconst REG_TYPE_PCT = new RegExp(`^(${NUM})%$`);\n\n/**\n * Calclator\n */\nexport class Calculator {\n /* private */\n // number\n #hasNum: boolean;\n #numSum: number[];\n #numMul: number[];\n // percentage\n #hasPct: boolean;\n #pctSum: number[];\n #pctMul: number[];\n // dimension\n #hasDim: boolean;\n #dimSum: string[];\n #dimSub: string[];\n #dimMul: string[];\n #dimDiv: string[];\n // et cetra\n #hasEtc: boolean;\n #etcSum: string[];\n #etcSub: string[];\n #etcMul: string[];\n #etcDiv: string[];\n\n /**\n * constructor\n */\n constructor() {\n // number\n this.#hasNum = false;\n this.#numSum = [];\n this.#numMul = [];\n // percentage\n this.#hasPct = false;\n this.#pctSum = [];\n this.#pctMul = [];\n // dimension\n this.#hasDim = false;\n this.#dimSum = [];\n this.#dimSub = [];\n this.#dimMul = [];\n this.#dimDiv = [];\n // et cetra\n this.#hasEtc = false;\n this.#etcSum = [];\n this.#etcSub = [];\n this.#etcMul = [];\n this.#etcDiv = [];\n }\n\n get hasNum() {\n return this.#hasNum;\n }\n\n set hasNum(value: boolean) {\n this.#hasNum = !!value;\n }\n\n get numSum() {\n return this.#numSum;\n }\n\n get numMul() {\n return this.#numMul;\n }\n\n get hasPct() {\n return this.#hasPct;\n }\n\n set hasPct(value: boolean) {\n this.#hasPct = !!value;\n }\n\n get pctSum() {\n return this.#pctSum;\n }\n\n get pctMul() {\n return this.#pctMul;\n }\n\n get hasDim() {\n return this.#hasDim;\n }\n\n set hasDim(value: boolean) {\n this.#hasDim = !!value;\n }\n\n get dimSum() {\n return this.#dimSum;\n }\n\n get dimSub() {\n return this.#dimSub;\n }\n\n get dimMul() {\n return this.#dimMul;\n }\n\n get dimDiv() {\n return this.#dimDiv;\n }\n\n get hasEtc() {\n return this.#hasEtc;\n }\n\n set hasEtc(value: boolean) {\n this.#hasEtc = !!value;\n }\n\n get etcSum() {\n return this.#etcSum;\n }\n\n get etcSub() {\n return this.#etcSub;\n }\n\n get etcMul() {\n return this.#etcMul;\n }\n\n get etcDiv() {\n return this.#etcDiv;\n }\n\n /**\n * clear values\n * @returns void\n */\n clear() {\n // number\n this.#hasNum = false;\n this.#numSum = [];\n this.#numMul = [];\n // percentage\n this.#hasPct = false;\n this.#pctSum = [];\n this.#pctMul = [];\n // dimension\n this.#hasDim = false;\n this.#dimSum = [];\n this.#dimSub = [];\n this.#dimMul = [];\n this.#dimDiv = [];\n // et cetra\n this.#hasEtc = false;\n this.#etcSum = [];\n this.#etcSub = [];\n this.#etcMul = [];\n this.#etcDiv = [];\n }\n\n /**\n * sort values\n * @param values - values\n * @returns sorted values\n */\n sort(values: string[] = []): string[] {\n const arr = [...values];\n if (arr.length > 1) {\n arr.sort((a, b) => {\n let res;\n if (REG_TYPE_DIM_PCT.test(a) && REG_TYPE_DIM_PCT.test(b)) {\n const [, valA, unitA] = a.match(REG_TYPE_DIM_PCT) as MatchedRegExp;\n const [, valB, unitB] = b.match(REG_TYPE_DIM_PCT) as MatchedRegExp;\n if (unitA === unitB) {\n if (Number(valA) === Number(valB)) {\n res = 0;\n } else if (Number(valA) > Number(valB)) {\n res = 1;\n } else {\n res = -1;\n }\n } else if (unitA > unitB) {\n res = 1;\n } else {\n res = -1;\n }\n } else {\n if (a === b) {\n res = 0;\n } else if (a > b) {\n res = 1;\n } else {\n res = -1;\n }\n }\n return res;\n });\n }\n return arr;\n }\n\n /**\n * multiply values\n * @returns resolved value\n */\n multiply(): string {\n const value = [];\n let num;\n if (this.#hasNum) {\n num = 1;\n for (const i of this.#numMul) {\n num *= i;\n if (num === 0 || !Number.isFinite(num) || Number.isNaN(num)) {\n break;\n }\n }\n if (!this.#hasPct && !this.#hasDim && !this.hasEtc) {\n if (Number.isFinite(num)) {\n num = roundToPrecision(num, HEX);\n }\n value.push(num);\n }\n }\n if (this.#hasPct) {\n if (typeof num !== 'number') {\n num = 1;\n }\n for (const i of this.#pctMul) {\n num *= i;\n if (num === 0 || !Number.isFinite(num) || Number.isNaN(num)) {\n break;\n }\n }\n if (Number.isFinite(num)) {\n num = `${roundToPrecision(num, HEX)}%`;\n }\n if (!this.#hasDim && !this.hasEtc) {\n value.push(num);\n }\n }\n if (this.#hasDim) {\n let dim = '';\n let mul = '';\n let div = '';\n if (this.#dimMul.length) {\n if (this.#dimMul.length === 1) {\n [mul] = this.#dimMul as [string];\n } else {\n mul = `${this.sort(this.#dimMul).join(' * ')}`;\n }\n }\n if (this.#dimDiv.length) {\n if (this.#dimDiv.length === 1) {\n [div] = this.#dimDiv as [string];\n } else {\n div = `${this.sort(this.#dimDiv).join(' * ')}`;\n }\n }\n if (Number.isFinite(num)) {\n if (mul) {\n if (div) {\n if (div.includes('*')) {\n dim = calc(`calc(${num} * ${mul} / (${div}))`, {\n toCanonicalUnits: true\n });\n } else {\n dim = calc(`calc(${num} * ${mul} / ${div})`, {\n toCanonicalUnits: true\n });\n }\n } else {\n dim = calc(`calc(${num} * ${mul})`, {\n toCanonicalUnits: true\n });\n }\n } else if (div.includes('*')) {\n dim = calc(`calc(${num} / (${div}))`, {\n toCanonicalUnits: true\n });\n } else {\n dim = calc(`calc(${num} / ${div})`, {\n toCanonicalUnits: true\n });\n }\n value.push(dim.replace(/^calc/, ''));\n } else {\n if (!value.length && num !== undefined) {\n value.push(num);\n }\n if (mul) {\n if (div) {\n if (div.includes('*')) {\n dim = calc(`calc(${mul} / (${div}))`, {\n toCanonicalUnits: true\n });\n } else {\n dim = calc(`calc(${mul} / ${div})`, {\n toCanonicalUnits: true\n });\n }\n } else {\n dim = calc(`calc(${mul})`, {\n toCanonicalUnits: true\n });\n }\n if (value.length) {\n value.push('*', dim.replace(/^calc/, ''));\n } else {\n value.push(dim.replace(/^calc/, ''));\n }\n } else {\n dim = calc(`calc(${div})`, {\n toCanonicalUnits: true\n });\n if (value.length) {\n value.push('/', dim.replace(/^calc/, ''));\n } else {\n value.push('1', '/', dim.replace(/^calc/, ''));\n }\n }\n }\n }\n if (this.#hasEtc) {\n if (this.#etcMul.length) {\n if (!value.length && num !== undefined) {\n value.push(num);\n }\n const mul = this.sort(this.#etcMul).join(' * ');\n if (value.length) {\n value.push(`* ${mul}`);\n } else {\n value.push(`${mul}`);\n }\n }\n if (this.#etcDiv.length) {\n const div = this.sort(this.#etcDiv).join(' * ');\n if (div.includes('*')) {\n if (value.length) {\n value.push(`/ (${div})`);\n } else {\n value.push(`1 / (${div})`);\n }\n } else if (value.length) {\n value.push(`/ ${div}`);\n } else {\n value.push(`1 / ${div}`);\n }\n }\n }\n if (value.length) {\n return value.join(' ');\n }\n return '';\n }\n\n /**\n * sum values\n * @returns resolved value\n */\n sum(): string {\n const value = [];\n if (this.#hasNum) {\n let num = 0;\n for (const i of this.#numSum) {\n num += i;\n if (!Number.isFinite(num) || Number.isNaN(num)) {\n break;\n }\n }\n value.push(num);\n }\n if (this.#hasPct) {\n let num: number | string = 0;\n for (const i of this.#pctSum) {\n num += i;\n if (!Number.isFinite(num)) {\n break;\n }\n }\n if (Number.isFinite(num)) {\n num = `${num}%`;\n }\n if (value.length) {\n value.push(`+ ${num}`);\n } else {\n value.push(num);\n }\n }\n if (this.#hasDim) {\n let dim, sum, sub;\n if (this.#dimSum.length) {\n sum = this.sort(this.#dimSum).join(' + ');\n }\n if (this.#dimSub.length) {\n sub = this.sort(this.#dimSub).join(' + ');\n }\n if (sum) {\n if (sub) {\n if (sub.includes('-')) {\n dim = calc(`calc(${sum} - (${sub}))`, {\n toCanonicalUnits: true\n });\n } else {\n dim = calc(`calc(${sum} - ${sub})`, {\n toCanonicalUnits: true\n });\n }\n } else {\n dim = calc(`calc(${sum})`, {\n toCanonicalUnits: true\n });\n }\n } else {\n dim = calc(`calc(-1 * (${sub}))`, {\n toCanonicalUnits: true\n });\n }\n if (value.length) {\n value.push('+', dim.replace(/^calc/, ''));\n } else {\n value.push(dim.replace(/^calc/, ''));\n }\n }\n if (this.#hasEtc) {\n if (this.#etcSum.length) {\n const sum = this.sort(this.#etcSum)\n .map(item => {\n let res;\n if (\n REG_OPERATOR.test(item) &&\n !item.startsWith('(') &&\n !item.endsWith(')')\n ) {\n res = `(${item})`;\n } else {\n res = item;\n }\n return res;\n })\n .join(' + ');\n if (value.length) {\n if (this.#etcSum.length > 1) {\n value.push(`+ (${sum})`);\n } else {\n value.push(`+ ${sum}`);\n }\n } else {\n value.push(`${sum}`);\n }\n }\n if (this.#etcSub.length) {\n const sub = this.sort(this.#etcSub)\n .map(item => {\n let res;\n if (\n REG_OPERATOR.test(item) &&\n !item.startsWith('(') &&\n !item.endsWith(')')\n ) {\n res = `(${item})`;\n } else {\n res = item;\n }\n return res;\n })\n .join(' + ');\n if (value.length) {\n if (this.#etcSub.length > 1) {\n value.push(`- (${sub})`);\n } else {\n value.push(`- ${sub}`);\n }\n } else if (this.#etcSub.length > 1) {\n value.push(`-1 * (${sub})`);\n } else {\n value.push(`-1 * ${sub}`);\n }\n }\n }\n if (value.length) {\n return value.join(' ');\n }\n return '';\n }\n}\n\n/**\n * sort calc values\n * @param values - values to sort\n * @param [finalize] - finalize values\n * @returns sorted values\n */\nexport const sortCalcValues = (\n values: (number | string)[] = [],\n finalize: boolean = false\n): string => {\n if (values.length < TRIA) {\n throw new Error(`Unexpected array length ${values.length}.`);\n }\n const start = values.shift();\n if (!isString(start) || !start.endsWith('(')) {\n throw new Error(`Unexpected token ${start}.`);\n }\n const end = values.pop();\n if (end !== ')') {\n throw new Error(`Unexpected token ${end}.`);\n }\n if (values.length === 1) {\n const [value] = values;\n if (!isStringOrNumber(value)) {\n throw new Error(`Unexpected token ${value}.`);\n }\n return `${start}${value}${end}`;\n }\n const sortedValues = [];\n const cal = new Calculator();\n let operator: string = '';\n const l = values.length;\n for (let i = 0; i < l; i++) {\n const value = values[i];\n if (!isStringOrNumber(value)) {\n throw new Error(`Unexpected token ${value}.`);\n }\n if (value === '*' || value === '/') {\n operator = value;\n } else if (value === '+' || value === '-') {\n const sortedValue = cal.multiply();\n if (sortedValue) {\n sortedValues.push(sortedValue, value);\n }\n cal.clear();\n operator = '';\n } else {\n const numValue = Number(value);\n const strValue = `${value}`;\n switch (operator) {\n case '/': {\n if (Number.isFinite(numValue)) {\n cal.hasNum = true;\n cal.numMul.push(1 / numValue);\n } else if (REG_TYPE_PCT.test(strValue)) {\n const [, val] = strValue.match(REG_TYPE_PCT) as MatchedRegExp;\n cal.hasPct = true;\n cal.pctMul.push((MAX_PCT * MAX_PCT) / Number(val));\n } else if (REG_TYPE_DIM.test(strValue)) {\n cal.hasDim = true;\n cal.dimDiv.push(strValue);\n } else {\n cal.hasEtc = true;\n cal.etcDiv.push(strValue);\n }\n break;\n }\n case '*':\n default: {\n if (Number.isFinite(numValue)) {\n cal.hasNum = true;\n cal.numMul.push(numValue);\n } else if (REG_TYPE_PCT.test(strValue)) {\n const [, val] = strValue.match(REG_TYPE_PCT) as MatchedRegExp;\n cal.hasPct = true;\n cal.pctMul.push(Number(val));\n } else if (REG_TYPE_DIM.test(strValue)) {\n cal.hasDim = true;\n cal.dimMul.push(strValue);\n } else {\n cal.hasEtc = true;\n cal.etcMul.push(strValue);\n }\n }\n }\n }\n if (i === l - 1) {\n const sortedValue = cal.multiply();\n if (sortedValue) {\n sortedValues.push(sortedValue);\n }\n cal.clear();\n operator = '';\n }\n }\n let resolvedValue = '';\n if (finalize && (sortedValues.includes('+') || sortedValues.includes('-'))) {\n const finalizedValues = [];\n cal.clear();\n operator = '';\n const l = sortedValues.length;\n for (let i = 0; i < l; i++) {\n const value = sortedValues[i];\n if (isStringOrNumber(value)) {\n if (value === '+' || value === '-') {\n operator = value;\n } else {\n const numValue = Number(value);\n const strValue = `${value}`;\n switch (operator) {\n case '-': {\n if (Number.isFinite(numValue)) {\n cal.hasNum = true;\n cal.numSum.push(-1 * numValue);\n } else if (REG_TYPE_PCT.test(strValue)) {\n const [, val] = strValue.match(REG_TYPE_PCT) as MatchedRegExp;\n cal.hasPct = true;\n cal.pctSum.push(-1 * Number(val));\n } else if (REG_TYPE_DIM.test(strValue)) {\n cal.hasDim = true;\n cal.dimSub.push(strValue);\n } else {\n cal.hasEtc = true;\n cal.etcSub.push(strValue);\n }\n break;\n }\n case '+':\n default: {\n if (Number.isFinite(numValue)) {\n cal.hasNum = true;\n cal.numSum.push(numValue);\n } else if (REG_TYPE_PCT.test(strValue)) {\n const [, val] = strValue.match(REG_TYPE_PCT) as MatchedRegExp;\n cal.hasPct = true;\n cal.pctSum.push(Number(val));\n } else if (REG_TYPE_DIM.test(strValue)) {\n cal.hasDim = true;\n cal.dimSum.push(strValue);\n } else {\n cal.hasEtc = true;\n cal.etcSum.push(strValue);\n }\n }\n }\n }\n }\n if (i === l - 1) {\n const sortedValue = cal.sum();\n if (sortedValue) {\n finalizedValues.push(sortedValue);\n }\n cal.clear();\n operator = '';\n }\n }\n resolvedValue = finalizedValues.join(' ').replace(/\\+\\s-/g, '- ');\n } else {\n resolvedValue = sortedValues.join(' ').replace(/\\+\\s-/g, '- ');\n }\n if (\n resolvedValue.startsWith('(') &&\n resolvedValue.endsWith(')') &&\n resolvedValue.lastIndexOf('(') === 0 &&\n resolvedValue.indexOf(')') === resolvedValue.length - 1\n ) {\n resolvedValue = resolvedValue.replace(/^\\(/, '').replace(/\\)$/, '');\n }\n return `${start}${resolvedValue}${end}`;\n};\n\n/**\n * serialize calc\n * @param value - CSS value\n * @param [opt] - options\n * @returns serialized value\n */\nexport const serializeCalc = (value: string, opt: Options = {}): string => {\n const { format = '' } = opt;\n if (isString(value)) {\n if (!REG_FN_VAR_START.test(value) || format !== VAL_SPEC) {\n return value;\n }\n value = value.toLowerCase().trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'serializeCalc',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as string;\n }\n const items: string[] = tokenize({ css: value })\n .map((token: CSSToken): string => {\n const [type, value] = token as [TokenType, string];\n let res = '';\n if (type !== W_SPACE && type !== COMMENT) {\n res = value;\n }\n return res;\n })\n .filter(v => v);\n let startIndex = items.findLastIndex((item: string) => /\\($/.test(item));\n while (startIndex) {\n const endIndex = items.findIndex((item: unknown, index: number) => {\n return item === ')' && index > startIndex;\n });\n const slicedValues: string[] = items.slice(startIndex, endIndex + 1);\n let serializedValue: string = sortCalcValues(slicedValues);\n if (REG_FN_VAR_START.test(serializedValue)) {\n serializedValue = calc(serializedValue, {\n toCanonicalUnits: true\n });\n }\n items.splice(startIndex, endIndex - startIndex + 1, serializedValue);\n startIndex = items.findLastIndex((item: string) => /\\($/.test(item));\n }\n const serializedCalc = sortCalcValues(items, true);\n setCache(cacheKey, serializedCalc);\n return serializedCalc;\n};\n\n/**\n * resolve dimension\n * @param token - CSS token\n * @param [opt] - options\n * @returns resolved value\n */\nexport const resolveDimension = (\n token: CSSToken,\n opt: Options = {}\n): string | NullObject => {\n if (!Array.isArray(token)) {\n throw new TypeError(`${token} is not an array.`);\n }\n const [, , , , detail = {}] = token;\n const { unit, value } = detail as {\n unit: string;\n value: number;\n };\n if (unit === 'px') {\n return `${value}${unit}`;\n }\n const pixelValue = resolveLengthInPixels(Number(value), unit, opt);\n if (Number.isFinite(pixelValue)) {\n return `${roundToPrecision(pixelValue, HEX)}px`;\n }\n return new NullObject();\n};\n\n/**\n * parse tokens\n * @param tokens - CSS tokens\n * @param [opt] - options\n * @returns parsed tokens\n */\nexport const parseTokens = (\n tokens: CSSToken[],\n opt: Options = {}\n): string[] => {\n if (!Array.isArray(tokens)) {\n throw new TypeError(`${tokens} is not an array.`);\n }\n const { format = '' } = opt;\n const mathFunc = new Set();\n let nest = 0;\n const res: string[] = [];\n while (tokens.length) {\n const token = tokens.shift();\n if (!Array.isArray(token)) {\n throw new TypeError(`${token} is not an array.`);\n }\n const [type = '', value = ''] = token as [TokenType, string];\n switch (type) {\n case DIM: {\n if (format === VAL_SPEC && !mathFunc.has(nest)) {\n res.push(value);\n } else {\n const resolvedValue = resolveDimension(token, opt);\n if (isString(resolvedValue)) {\n res.push(resolvedValue);\n } else {\n res.push(value);\n }\n }\n break;\n }\n case FUNC:\n case PAREN_OPEN: {\n res.push(value);\n nest++;\n if (REG_FN_MATH_START.test(value)) {\n mathFunc.add(nest);\n }\n break;\n }\n case PAREN_CLOSE: {\n if (res.length) {\n const lastValue = res[res.length - 1];\n if (lastValue === ' ') {\n res.splice(-1, 1, value);\n } else {\n res.push(value);\n }\n } else {\n res.push(value);\n }\n if (mathFunc.has(nest)) {\n mathFunc.delete(nest);\n }\n nest--;\n break;\n }\n case W_SPACE: {\n if (res.length) {\n const lastValue = res[res.length - 1];\n if (\n isString(lastValue) &&\n !lastValue.endsWith('(') &&\n lastValue !== ' '\n ) {\n res.push(value);\n }\n }\n break;\n }\n default: {\n if (type !== COMMENT && type !== EOF) {\n res.push(value);\n }\n }\n }\n }\n return res;\n};\n\n/**\n * CSS calc()\n * @param value - CSS value including calc()\n * @param [opt] - options\n * @returns resolved value\n */\nexport const cssCalc = (value: string, opt: Options = {}): string => {\n const { format = '' } = opt;\n if (isString(value)) {\n if (REG_FN_VAR.test(value)) {\n if (format === VAL_SPEC) {\n return value;\n } else {\n const resolvedValue = resolveVar(value, opt);\n if (isString(resolvedValue)) {\n return resolvedValue;\n } else {\n return '';\n }\n }\n } else if (!REG_FN_CALC.test(value)) {\n return value;\n }\n value = value.toLowerCase().trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'cssCalc',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as string;\n }\n const tokens = tokenize({ css: value });\n const values = parseTokens(tokens, opt);\n let resolvedValue: string = calc(values.join(''), {\n toCanonicalUnits: true\n });\n if (REG_FN_VAR_START.test(value)) {\n if (REG_TYPE_DIM_PCT.test(resolvedValue)) {\n const [, val, unit] = resolvedValue.match(\n REG_TYPE_DIM_PCT\n ) as MatchedRegExp;\n resolvedValue = `${roundToPrecision(Number(val), HEX)}${unit}`;\n }\n // wrap with `calc()`\n if (\n resolvedValue &&\n !REG_FN_VAR_START.test(resolvedValue) &&\n format === VAL_SPEC\n ) {\n resolvedValue = `calc(${resolvedValue})`;\n }\n }\n if (format === VAL_SPEC) {\n if (/\\s[-+*/]\\s/.test(resolvedValue) && !resolvedValue.includes('NaN')) {\n resolvedValue = serializeCalc(resolvedValue, opt);\n } else if (REG_FN_CALC_NUM.test(resolvedValue)) {\n const [, val] = resolvedValue.match(REG_FN_CALC_NUM) as MatchedRegExp;\n resolvedValue = `calc(${roundToPrecision(Number(val), HEX)})`;\n }\n }\n setCache(cacheKey, resolvedValue);\n return resolvedValue;\n};\n","/**\n * cache\n */\n\nimport { LRUCache } from 'lru-cache';\nimport { Options } from './typedef';\nimport { valueToJsonString } from './util';\n\n/* numeric constants */\nconst MAX_CACHE = 4096;\n\n/**\n * CacheItem\n */\nexport class CacheItem {\n /* private */\n #isNull: boolean;\n #item: unknown;\n\n /**\n * constructor\n */\n constructor(item: unknown, isNull: boolean = false) {\n this.#item = item;\n this.#isNull = !!isNull;\n }\n\n get item() {\n return this.#item;\n }\n\n get isNull() {\n return this.#isNull;\n }\n}\n\n/**\n * NullObject\n */\nexport class NullObject extends CacheItem {\n /**\n * constructor\n */\n constructor() {\n super(Symbol('null'), true);\n }\n}\n\n/*\n * lru cache\n */\nexport const lruCache = new LRUCache({\n max: MAX_CACHE\n});\n\n/**\n * set cache\n * @param key - cache key\n * @param value - value to cache\n * @returns void\n */\nexport const setCache = (key: string, value: unknown): void => {\n if (key) {\n if (value === null) {\n lruCache.set(key, new NullObject());\n } else if (value instanceof CacheItem) {\n lruCache.set(key, value);\n } else {\n lruCache.set(key, new CacheItem(value));\n }\n }\n};\n\n/**\n * get cache\n * @param key - cache key\n * @returns cached item or false otherwise\n */\nexport const getCache = (key: string): CacheItem | boolean => {\n if (key && lruCache.has(key)) {\n const item = lruCache.get(key);\n if (item instanceof CacheItem) {\n return item;\n }\n // delete unexpected cached item\n lruCache.delete(key);\n return false;\n }\n return false;\n};\n\n/**\n * create cache key\n * @param keyData - key data\n * @param [opt] - options\n * @returns cache key\n */\nexport const createCacheKey = (\n keyData: Record<string, string>,\n opt: Options = {}\n): string => {\n const { customProperty = {}, dimension = {} } = opt;\n let cacheKey = '';\n if (\n keyData &&\n Object.keys(keyData).length &&\n typeof customProperty.callback !== 'function' &&\n typeof dimension.callback !== 'function'\n ) {\n keyData.opt = valueToJsonString(opt);\n cacheKey = valueToJsonString(keyData);\n }\n return cacheKey;\n};\n","/**\n * util\n */\n\nimport { TokenType, tokenize } from '@csstools/css-tokenizer';\nimport { CacheItem, createCacheKey, getCache, setCache } from './cache';\nimport { isString } from './common';\nimport { resolveColor } from './resolve';\nimport { Options } from './typedef';\n\n/* constants */\nimport { NAMED_COLORS } from './color';\nimport { SYN_COLOR_TYPE, SYN_MIX, VAL_SPEC } from './constant';\nconst {\n CloseParen: PAREN_CLOSE,\n Comma: COMMA,\n Comment: COMMENT,\n Delim: DELIM,\n EOF,\n Function: FUNC,\n Ident: IDENT,\n OpenParen: PAREN_OPEN,\n Whitespace: W_SPACE\n} = TokenType;\nconst NAMESPACE = 'util';\n\n/* numeric constants */\nconst DEC = 10;\nconst HEX = 16;\nconst DEG = 360;\nconst DEG_HALF = 180;\n\n/* regexp */\nconst REG_COLOR = new RegExp(`^(?:${SYN_COLOR_TYPE})$`);\nconst REG_FN_COLOR =\n /^(?:(?:ok)?l(?:ab|ch)|color(?:-mix)?|hsla?|hwb|rgba?|var)\\(/;\nconst REG_MIX = new RegExp(SYN_MIX);\n\n/**\n * split value\n * NOTE: comments are stripped, it can be preserved if, in the options param,\n * `delimiter` is either ',' or '/' and with `preserveComment` set to `true`\n * @param value - CSS value\n * @param [opt] - options\n * @returns array of values\n */\nexport const splitValue = (value: string, opt: Options = {}): string[] => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { delimiter = ' ', preserveComment = false } = opt;\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'splitValue',\n value\n },\n {\n delimiter,\n preserveComment\n }\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as string[];\n }\n let regDelimiter;\n if (delimiter === ',') {\n regDelimiter = /^,$/;\n } else if (delimiter === '/') {\n regDelimiter = /^\\/$/;\n } else {\n regDelimiter = /^\\s+$/;\n }\n const tokens = tokenize({ css: value });\n let nest = 0;\n let str = '';\n const res: string[] = [];\n while (tokens.length) {\n const [type, value] = tokens.shift() as [TokenType, string];\n switch (type) {\n case COMMA: {\n if (regDelimiter.test(value)) {\n if (nest === 0) {\n res.push(str.trim());\n str = '';\n } else {\n str += value;\n }\n } else {\n str += value;\n }\n break;\n }\n case DELIM: {\n if (regDelimiter.test(value)) {\n if (nest === 0) {\n res.push(str.trim());\n str = '';\n } else {\n str += value;\n }\n } else {\n str += value;\n }\n break;\n }\n case COMMENT: {\n if (preserveComment && (delimiter === ',' || delimiter === '/')) {\n str += value;\n }\n break;\n }\n case FUNC:\n case PAREN_OPEN: {\n str += value;\n nest++;\n break;\n }\n case PAREN_CLOSE: {\n str += value;\n nest--;\n break;\n }\n case W_SPACE: {\n if (regDelimiter.test(value)) {\n if (nest === 0) {\n if (str) {\n res.push(str.trim());\n str = '';\n }\n } else {\n str += ' ';\n }\n } else if (!str.endsWith(' ')) {\n str += ' ';\n }\n break;\n }\n default: {\n if (type === EOF) {\n res.push(str.trim());\n str = '';\n } else {\n str += value;\n }\n }\n }\n }\n setCache(cacheKey, res);\n return res;\n};\n\n/**\n * extract dashed-ident tokens\n * @param value - CSS value\n * @returns array of dashed-ident tokens\n */\nexport const extractDashedIdent = (value: string): string[] => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey({\n namespace: NAMESPACE,\n name: 'extractDashedIdent',\n value\n });\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as string[];\n }\n const tokens = tokenize({ css: value });\n const items = new Set();\n while (tokens.length) {\n const [type, value] = tokens.shift() as [TokenType, string];\n if (type === IDENT && value.startsWith('--')) {\n items.add(value);\n }\n }\n const res = [...items] as string[];\n setCache(cacheKey, res);\n return res;\n};\n\n/**\n * is color\n * @param value - CSS value\n * @param [opt] - options\n * @returns result\n */\nexport const isColor = (value: unknown, opt: Options = {}): boolean => {\n if (isString(value)) {\n value = value.toLowerCase().trim();\n if (value && isString(value)) {\n if (/^[a-z]+$/.test(value)) {\n if (\n /^(?:currentcolor|transparent)$/.test(value) ||\n Object.hasOwn(NAMED_COLORS, value)\n ) {\n return true;\n }\n } else if (REG_COLOR.test(value) || REG_MIX.test(value)) {\n return true;\n } else if (REG_FN_COLOR.test(value)) {\n opt.nullable = true;\n if (!opt.format) {\n opt.format = VAL_SPEC;\n }\n const resolvedValue = resolveColor(value, opt);\n if (resolvedValue) {\n return true;\n }\n }\n }\n }\n return false;\n};\n\n/**\n * value to JSON string\n * @param value - CSS value\n * @param [func] - stringify function\n * @returns stringified value in JSON notation\n */\nexport const valueToJsonString = (\n value: unknown,\n func: boolean = false\n): string => {\n if (typeof value === 'undefined') {\n return '';\n }\n const res = JSON.stringify(value, (_key, val) => {\n let replacedValue;\n if (typeof val === 'undefined') {\n replacedValue = null;\n } else if (typeof val === 'function') {\n if (func) {\n replacedValue = val.toString().replace(/\\s/g, '').substring(0, HEX);\n } else {\n replacedValue = val.name;\n }\n } else if (val instanceof Map || val instanceof Set) {\n replacedValue = [...val];\n } else if (typeof val === 'bigint') {\n replacedValue = val.toString();\n } else {\n replacedValue = val;\n }\n return replacedValue;\n });\n return res;\n};\n\n/**\n * round to specified precision\n * @param value - numeric value\n * @param bit - minimum bits\n * @returns rounded value\n */\nexport const roundToPrecision = (value: number, bit: number = 0): number => {\n if (!Number.isFinite(value)) {\n throw new TypeError(`${value} is not a finite number.`);\n }\n if (!Number.isFinite(bit)) {\n throw new TypeError(`${bit} is not a finite number.`);\n } else if (bit < 0 || bit > HEX) {\n throw new RangeError(`${bit} is not between 0 and ${HEX}.`);\n }\n if (bit === 0) {\n return Math.round(value);\n }\n let val;\n if (bit === HEX) {\n val = value.toPrecision(6);\n } else if (bit < DEC) {\n val = value.toPrecision(4);\n } else {\n val = value.toPrecision(5);\n }\n return parseFloat(val);\n};\n\n/**\n * interpolate hue\n * @param hueA - hue value\n * @param hueB - hue value\n * @param arc - shorter | longer | increasing | decreasing\n * @returns result - [hueA, hueB]\n */\nexport const interpolateHue = (\n hueA: number,\n hueB: number,\n arc: string = 'shorter'\n): [number, number] => {\n if (!Number.isFinite(hueA)) {\n throw new TypeError(`${hueA} is not a finite number.`);\n }\n if (!Number.isFinite(hueB)) {\n throw new TypeError(`${hueB} is not a finite number.`);\n }\n switch (arc) {\n case 'decreasing': {\n if (hueB > hueA) {\n hueA += DEG;\n }\n break;\n }\n case 'increasing': {\n if (hueB < hueA) {\n hueB += DEG;\n }\n break;\n }\n case 'longer': {\n if (hueB > hueA && hueB < hueA + DEG_HALF) {\n hueA += DEG;\n } else if (hueB > hueA + DEG_HALF * -1 && hueB <= hueA) {\n hueB += DEG;\n }\n break;\n }\n case 'shorter':\n default: {\n if (hueB > hueA + DEG_HALF) {\n hueA += DEG;\n } else if (hueB < hueA + DEG_HALF * -1) {\n hueB += DEG;\n }\n }\n }\n return [hueA, hueB];\n};\n\n/* absolute font size to pixel ratio */\nconst absoluteFontSize = new Map([\n ['xx-small', 3 / 5],\n ['x-small', 3 / 4],\n ['small', 8 / 9],\n ['medium', 1],\n ['large', 6 / 5],\n ['x-large', 3 / 2],\n ['xx-large', 2],\n ['xxx-large', 3]\n]);\n\n/* relative font size to pixel ratio */\nconst relativeFontSize = new Map([\n ['smaller', 1 / 1.2],\n ['larger', 1.2]\n]);\n\n/* absolute length to pixel ratio */\nconst absoluteLength = new Map([\n ['cm', 96 / 2.54],\n ['mm', 96 / 2.54 / 10],\n ['q', 96 / 2.54 / 40],\n ['in', 96],\n ['pc', 96 / 6],\n ['pt', 96 / 72],\n ['px', 1]\n]);\n\n/* relative length to pixel ratio */\nconst relativeLength = new Map([\n ['rcap', 1],\n ['rch', 0.5],\n ['rem', 1],\n ['rex', 0.5],\n ['ric', 1],\n ['rlh', 1.2]\n]);\n\n/**\n * resolve length in pixels\n * @param value - value\n * @param unit - unit\n * @param [opt] - options\n * @returns pixelated value\n */\nexport const resolveLengthInPixels = (\n value: number | string,\n unit: string | undefined,\n opt: Options = {}\n): number => {\n const { dimension = {} } = opt;\n const { callback, em, rem, vh, vw } = dimension as {\n callback: (K: string) => number;\n em: number;\n rem: number;\n vh: number;\n vw: number;\n };\n if (isString(value)) {\n value = value.toLowerCase().trim();\n if (absoluteFontSize.has(value)) {\n return Number(absoluteFontSize.get(value)) * rem;\n } else if (relativeFontSize.has(value)) {\n return Number(relativeFontSize.get(value)) * em;\n }\n return Number.NaN;\n } else if (Number.isFinite(value) && unit) {\n if (Object.hasOwn(dimension, unit)) {\n return value * Number(dimension[unit]);\n } else if (typeof callback === 'function') {\n return value * callback(unit);\n } else if (absoluteLength.has(unit)) {\n return value * Number(absoluteLength.get(unit));\n } else if (relativeLength.has(unit)) {\n return value * Number(relativeLength.get(unit)) * rem;\n } else if (relativeLength.has(`r${unit}`)) {\n return value * Number(relativeLength.get(`r${unit}`)) * em;\n } else {\n switch (unit) {\n case 'vb':\n case 'vi': {\n return value * vw;\n }\n case 'vmax': {\n if (vh > vw) {\n return value * vh;\n }\n return value * vw;\n }\n case 'vmin': {\n if (vh < vw) {\n return value * vh;\n }\n return value * vw;\n }\n default: {\n // unsupported or invalid unit\n return Number.NaN;\n }\n }\n }\n }\n // unsupported or invalid value\n return Number.NaN;\n};\n","/**\n * common\n */\n\n/* numeric constants */\nconst TYPE_FROM = 8;\nconst TYPE_TO = -1;\n\n/**\n * get type\n * @param o - object to check\n * @returns type of object\n */\nexport const getType = (o: unknown): string =>\n Object.prototype.toString.call(o).slice(TYPE_FROM, TYPE_TO);\n\n/**\n * is string\n * @param o - object to check\n * @returns result\n */\nexport const isString = (o: unknown): o is string =>\n typeof o === 'string' || o instanceof String;\n\n/**\n * is string or number\n * @param o - object to check\n * @returns result\n */\nexport const isStringOrNumber = (o: unknown): boolean =>\n isString(o) || typeof o === 'number';\n","/**\n * constant\n */\n\n/* values and units */\nconst _DIGIT = '(?:0|[1-9]\\\\d*)';\nconst _COMPARE = 'clamp|max|min';\nconst _EXPO = 'exp|hypot|log|pow|sqrt';\nconst _SIGN = 'abs|sign';\nconst _STEP = 'mod|rem|round';\nconst _TRIG = 'a?(?:cos|sin|tan)|atan2';\nconst _MATH = `${_COMPARE}|${_EXPO}|${_SIGN}|${_STEP}|${_TRIG}`;\nconst _CALC = `calc|${_MATH}`;\nconst _VAR = `var|${_CALC}`;\nexport const ANGLE = 'deg|g?rad|turn';\nexport const LENGTH =\n '[cm]m|[dls]?v(?:[bhiw]|max|min)|in|p[ctx]|q|r?(?:[cl]h|cap|e[mx]|ic)';\nexport const NUM = `[+-]?(?:${_DIGIT}(?:\\\\.\\\\d*)?|\\\\.\\\\d+)(?:e-?${_DIGIT})?`;\nexport const NUM_POSITIVE = `\\\\+?(?:${_DIGIT}(?:\\\\.\\\\d*)?|\\\\.\\\\d+)(?:e-?${_DIGIT})?`;\nexport const NONE = 'none';\nexport const PCT = `${NUM}%`;\nexport const SYN_FN_CALC = `^(?:${_CALC})\\\\(|(?<=[*\\\\/\\\\s\\\\(])(?:${_CALC})\\\\(`;\nexport const SYN_FN_MATH_START = `^(?:${_MATH})\\\\($`;\nexport const SYN_FN_VAR = '^var\\\\(|(?<=[*\\\\/\\\\s\\\\(])var\\\\(';\nexport const SYN_FN_VAR_START = `^(?:${_VAR})\\\\(`;\n\n/* colors */\nconst _ALPHA = `(?:\\\\s*\\\\/\\\\s*(?:${NUM}|${PCT}|${NONE}))?`;\nconst _ALPHA_LV3 = `(?:\\\\s*,\\\\s*(?:${NUM}|${PCT}))?`;\nconst _COLOR_FUNC = '(?:ok)?l(?:ab|ch)|color|hsla?|hwb|rgba?';\nconst _COLOR_KEY = '[a-z]+|#[\\\\da-f]{3}|#[\\\\da-f]{4}|#[\\\\da-f]{6}|#[\\\\da-f]{8}';\nconst _CS_HUE = '(?:ok)?lch|hsl|hwb';\nconst _CS_HUE_ARC = '(?:de|in)creasing|longer|shorter';\nconst _NUM_ANGLE = `${NUM}(?:${ANGLE})?`;\nconst _NUM_ANGLE_NONE = `(?:${NUM}(?:${ANGLE})?|${NONE})`;\nconst _NUM_PCT_NONE = `(?:${NUM}|${PCT}|${NONE})`;\nexport const CS_HUE = `(?:${_CS_HUE})(?:\\\\s(?:${_CS_HUE_ARC})\\\\shue)?`;\nexport const CS_HUE_CAPT = `(${_CS_HUE})(?:\\\\s(${_CS_HUE_ARC})\\\\shue)?`;\nexport const CS_LAB = '(?:ok)?lab';\nexport const CS_LCH = '(?:ok)?lch';\nexport const CS_SRGB = 'srgb(?:-linear)?';\nexport const CS_RGB = `(?:a98|prophoto)-rgb|display-p3|rec2020|${CS_SRGB}`;\nexport const CS_XYZ = 'xyz(?:-d(?:50|65))?';\nexport const CS_RECT = `${CS_LAB}|${CS_RGB}|${CS_XYZ}`;\nexport const CS_MIX = `${CS_HUE}|${CS_RECT}`;\nexport const FN_COLOR = 'color(';\nexport const FN_LIGHT_DARK = 'light-dark(';\nexport const FN_MIX = 'color-mix(';\nexport const FN_REL = `(?:${_COLOR_FUNC})\\\\(\\\\s*from\\\\s+`;\nexport const FN_REL_CAPT = `(${_COLOR_FUNC})\\\\(\\\\s*from\\\\s+`;\nexport const FN_VAR = 'var(';\nexport const SYN_FN_COLOR = `(?:${CS_RGB}|${CS_XYZ})(?:\\\\s+${_NUM_PCT_NONE}){3}${_ALPHA}`;\nexport const SYN_FN_LIGHT_DARK = '^light-dark\\\\(';\nexport const SYN_FN_REL = `^${FN_REL}|(?<=[\\\\s])${FN_REL}`;\nexport const SYN_HSL = `${_NUM_ANGLE_NONE}(?:\\\\s+${_NUM_PCT_NONE}){2}${_ALPHA}`;\nexport const SYN_HSL_LV3 = `${_NUM_ANGLE}(?:\\\\s*,\\\\s*${PCT}){2}${_ALPHA_LV3}`;\nexport const SYN_LCH = `(?:${_NUM_PCT_NONE}\\\\s+){2}${_NUM_ANGLE_NONE}${_ALPHA}`;\nexport const SYN_MOD = `${_NUM_PCT_NONE}(?:\\\\s+${_NUM_PCT_NONE}){2}${_ALPHA}`;\nexport const SYN_RGB_LV3 = `(?:${NUM}(?:\\\\s*,\\\\s*${NUM}){2}|${PCT}(?:\\\\s*,\\\\s*${PCT}){2})${_ALPHA_LV3}`;\nexport const SYN_COLOR_TYPE = `${_COLOR_KEY}|hsla?\\\\(\\\\s*${SYN_HSL_LV3}\\\\s*\\\\)|rgba?\\\\(\\\\s*${SYN_RGB_LV3}\\\\s*\\\\)|(?:hsla?|hwb)\\\\(\\\\s*${SYN_HSL}\\\\s*\\\\)|(?:(?:ok)?lab|rgba?)\\\\(\\\\s*${SYN_MOD}\\\\s*\\\\)|(?:ok)?lch\\\\(\\\\s*${SYN_LCH}\\\\s*\\\\)|color\\\\(\\\\s*${SYN_FN_COLOR}\\\\s*\\\\)`;\nexport const SYN_MIX_PART = `(?:${SYN_COLOR_TYPE})(?:\\\\s+${PCT})?`;\nexport const SYN_MIX = `color-mix\\\\(\\\\s*in\\\\s+(?:${CS_MIX})\\\\s*,\\\\s*${SYN_MIX_PART}\\\\s*,\\\\s*${SYN_MIX_PART}\\\\s*\\\\)`;\nexport const SYN_MIX_CAPT = `color-mix\\\\(\\\\s*in\\\\s+(${CS_MIX})\\\\s*,\\\\s*(${SYN_MIX_PART})\\\\s*,\\\\s*(${SYN_MIX_PART})\\\\s*\\\\)`;\n\n/* formats */\nexport const VAL_COMP = 'computedValue';\nexport const VAL_MIX = 'mixValue';\nexport const VAL_SPEC = 'specifiedValue';\n","/**\n * color\n *\n * Ref: CSS Color Module Level 4\n * Sample code for Color Conversions\n * https://w3c.github.io/csswg-drafts/css-color-4/#color-conversion-code\n */\n\nimport {\n CacheItem,\n NullObject,\n createCacheKey,\n getCache,\n setCache\n} from './cache';\nimport { isString } from './common';\nimport { resolveColor } from './resolve';\nimport { interpolateHue, roundToPrecision, splitValue } from './util';\nimport {\n ColorChannels,\n ComputedColorChannels,\n Options,\n MatchedRegExp,\n SpecifiedColorChannels,\n StringColorChannels,\n StringColorSpacedChannels\n} from './typedef';\n\n/* constants */\nimport {\n ANGLE,\n CS_HUE_CAPT,\n CS_MIX,\n CS_RGB,\n CS_XYZ,\n FN_COLOR,\n FN_LIGHT_DARK,\n FN_MIX,\n NONE,\n NUM,\n PCT,\n SYN_COLOR_TYPE,\n SYN_FN_COLOR,\n SYN_HSL,\n SYN_HSL_LV3,\n SYN_LCH,\n SYN_MIX,\n SYN_MIX_CAPT,\n SYN_MIX_PART,\n SYN_MOD,\n SYN_RGB_LV3,\n VAL_COMP,\n VAL_MIX,\n VAL_SPEC\n} from './constant';\nconst NAMESPACE = 'color';\n\n/* numeric constants */\nconst PPTH = 0.001;\nconst HALF = 0.5;\nconst DUO = 2;\nconst TRIA = 3;\nconst QUAD = 4;\nconst OCT = 8;\nconst DEC = 10;\nconst DOZ = 12;\nconst HEX = 16;\nconst SEXA = 60;\nconst DEG_HALF = 180;\nconst DEG = 360;\nconst MAX_PCT = 100;\nconst MAX_RGB = 255;\nconst POW_SQR = 2;\nconst POW_CUBE = 3;\nconst POW_LINEAR = 2.4;\nconst LINEAR_COEF = 12.92;\nconst LINEAR_OFFSET = 0.055;\nconst LAB_L = 116;\nconst LAB_A = 500;\nconst LAB_B = 200;\nconst LAB_EPSILON = 216 / 24389;\nconst LAB_KAPPA = 24389 / 27;\n\n/* type definitions */\n/**\n * @type NumStrColorChannels - string or numeric color channels\n */\ntype NumStrColorChannels = [\n x: number | string,\n y: number | string,\n z: number | string,\n alpha: number | string\n];\n\n/**\n * @type TriColorChannels - color channels without alpha\n */\ntype TriColorChannels = [x: number, y: number, z: number];\n\n/**\n * @type ColorMatrix - color matrix\n */\ntype ColorMatrix = [\n r1: TriColorChannels,\n r2: TriColorChannels,\n r3: TriColorChannels\n];\n\n/* white point */\nconst D50: TriColorChannels = [\n 0.3457 / 0.3585,\n 1.0,\n (1.0 - 0.3457 - 0.3585) / 0.3585\n];\nconst MATRIX_D50_TO_D65: ColorMatrix = [\n [0.955473421488075, -0.02309845494876471, 0.06325924320057072],\n [-0.0283697093338637, 1.0099953980813041, 0.021041441191917323],\n [0.012314014864481998, -0.020507649298898964, 1.330365926242124]\n];\nconst MATRIX_D65_TO_D50: ColorMatrix = [\n [1.0479297925449969, 0.022946870601609652, -0.05019226628920524],\n [0.02962780877005599, 0.9904344267538799, -0.017073799063418826],\n [-0.009243040646204504, 0.015055191490298152, 0.7518742814281371]\n];\n\n/* color space */\nconst MATRIX_L_RGB_TO_XYZ: ColorMatrix = [\n [506752 / 1228815, 87881 / 245763, 12673 / 70218],\n [87098 / 409605, 175762 / 245763, 12673 / 175545],\n [7918 / 409605, 87881 / 737289, 1001167 / 1053270]\n];\nconst MATRIX_XYZ_TO_L_RGB: ColorMatrix = [\n [12831 / 3959, -329 / 214, -1974 / 3959],\n [-851781 / 878810, 1648619 / 878810, 36519 / 878810],\n [705 / 12673, -2585 / 12673, 705 / 667]\n];\nconst MATRIX_XYZ_TO_LMS: ColorMatrix = [\n [0.819022437996703, 0.3619062600528904, -0.1288737815209879],\n [0.0329836539323885, 0.9292868615863434, 0.0361446663506424],\n [0.0481771893596242, 0.2642395317527308, 0.6335478284694309]\n];\nconst MATRIX_LMS_TO_XYZ: ColorMatrix = [\n [1.2268798758459243, -0.5578149944602171, 0.2813910456659647],\n [-0.0405757452148008, 1.112286803280317, -0.0717110580655164],\n [-0.0763729366746601, -0.4214933324022432, 1.5869240198367816]\n];\nconst MATRIX_OKLAB_TO_LMS: ColorMatrix = [\n [1.0, 0.3963377773761749, 0.2158037573099136],\n [1.0, -0.1055613458156586, -0.0638541728258133],\n [1.0, -0.0894841775298119, -1.2914855480194092]\n];\nconst MATRIX_LMS_TO_OKLAB: ColorMatrix = [\n [0.210454268309314, 0.7936177747023054, -0.0040720430116193],\n [1.9779985324311684, -2.4285922420485799, 0.450593709617411],\n [0.0259040424655478, 0.7827717124575296, -0.8086757549230774]\n];\nconst MATRIX_P3_TO_XYZ: ColorMatrix = [\n [608311 / 1250200, 189793 / 714400, 198249 / 1000160],\n [35783 / 156275, 247089 / 357200, 198249 / 2500400],\n [0 / 1, 32229 / 714400, 5220557 / 5000800]\n];\nconst MATRIX_REC2020_TO_XYZ: ColorMatrix = [\n [63426534 / 99577255, 20160776 / 139408157, 47086771 / 278816314],\n [26158966 / 99577255, 472592308 / 697040785, 8267143 / 139408157],\n [0 / 1, 19567812 / 697040785, 295819943 / 278816314]\n];\nconst MATRIX_A98_TO_XYZ: ColorMatrix = [\n [573536 / 994567, 263643 / 1420810, 187206 / 994567],\n [591459 / 1989134, 6239551 / 9945670, 374412 / 4972835],\n [53769 / 1989134, 351524 / 4972835, 4929758 / 4972835]\n];\nconst MATRIX_PROPHOTO_TO_XYZ_D50: ColorMatrix = [\n [0.7977666449006423, 0.13518129740053308, 0.0313477341283922],\n [0.2880748288194013, 0.711835234241873, 0.00008993693872564],\n [0.0, 0.0, 0.8251046025104602]\n];\n\n/* regexp */\nconst REG_COLOR = new RegExp(`^(?:${SYN_COLOR_TYPE})$`);\nconst REG_CS_HUE = new RegExp(`^${CS_HUE_CAPT}$`);\nconst REG_CS_XYZ = /^xyz(?:-d(?:50|65))?$/;\nconst REG_CURRENT = /^currentColor$/i;\nconst REG_FN_COLOR = new RegExp(`^color\\\\(\\\\s*(${SYN_FN_COLOR})\\\\s*\\\\)$`);\nconst REG_HSL = new RegExp(`^hsla?\\\\(\\\\s*(${SYN_HSL}|${SYN_HSL_LV3})\\\\s*\\\\)$`);\nconst REG_HWB = new RegExp(`^hwb\\\\(\\\\s*(${SYN_HSL})\\\\s*\\\\)$`);\nconst REG_LAB = new RegExp(`^lab\\\\(\\\\s*(${SYN_MOD})\\\\s*\\\\)$`);\nconst REG_LCH = new RegExp(`^lch\\\\(\\\\s*(${SYN_LCH})\\\\s*\\\\)$`);\nconst REG_MIX = new RegExp(`^${SYN_MIX}$`);\nconst REG_MIX_CAPT = new RegExp(`^${SYN_MIX_CAPT}$`);\nconst REG_MIX_NEST = new RegExp(`${SYN_MIX}`, 'g');\nconst REG_OKLAB = new RegExp(`^oklab\\\\(\\\\s*(${SYN_MOD})\\\\s*\\\\)$`);\nconst REG_OKLCH = new RegExp(`^oklch\\\\(\\\\s*(${SYN_LCH})\\\\s*\\\\)$`);\nconst REG_SPEC = /^(?:specifi|comput)edValue$/;\n\n/**\n * named colors\n */\nexport const NAMED_COLORS = {\n aliceblue: [0xf0, 0xf8, 0xff],\n antiquewhite: [0xfa, 0xeb, 0xd7],\n aqua: [0x00, 0xff, 0xff],\n aquamarine: [0x7f, 0xff, 0xd4],\n azure: [0xf0, 0xff, 0xff],\n beige: [0xf5, 0xf5, 0xdc],\n bisque: [0xff, 0xe4, 0xc4],\n black: [0x00, 0x00, 0x00],\n blanchedalmond: [0xff, 0xeb, 0xcd],\n blue: [0x00, 0x00, 0xff],\n blueviolet: [0x8a, 0x2b, 0xe2],\n brown: [0xa5, 0x2a, 0x2a],\n burlywood: [0xde, 0xb8, 0x87],\n cadetblue: [0x5f, 0x9e, 0xa0],\n chartreuse: [0x7f, 0xff, 0x00],\n chocolate: [0xd2, 0x69, 0x1e],\n coral: [0xff, 0x7f, 0x50],\n cornflowerblue: [0x64, 0x95, 0xed],\n cornsilk: [0xff, 0xf8, 0xdc],\n crimson: [0xdc, 0x14, 0x3c],\n cyan: [0x00, 0xff, 0xff],\n darkblue: [0x00, 0x00, 0x8b],\n darkcyan: [0x00, 0x8b, 0x8b],\n darkgoldenrod: [0xb8, 0x86, 0x0b],\n darkgray: [0xa9, 0xa9, 0xa9],\n darkgreen: [0x00, 0x64, 0x00],\n darkgrey: [0xa9, 0xa9, 0xa9],\n darkkhaki: [0xbd, 0xb7, 0x6b],\n darkmagenta: [0x8b, 0x00, 0x8b],\n darkolivegreen: [0x55, 0x6b, 0x2f],\n darkorange: [0xff, 0x8c, 0x00],\n darkorchid: [0x99, 0x32, 0xcc],\n darkred: [0x8b, 0x00, 0x00],\n darksalmon: [0xe9, 0x96, 0x7a],\n darkseagreen: [0x8f, 0xbc, 0x8f],\n darkslateblue: [0x48, 0x3d, 0x8b],\n darkslategray: [0x2f, 0x4f, 0x4f],\n darkslategrey: [0x2f, 0x4f, 0x4f],\n darkturquoise: [0x00, 0xce, 0xd1],\n darkviolet: [0x94, 0x00, 0xd3],\n deeppink: [0xff, 0x14, 0x93],\n deepskyblue: [0x00, 0xbf, 0xff],\n dimgray: [0x69, 0x69, 0x69],\n dimgrey: [0x69, 0x69, 0x69],\n dodgerblue: [0x1e, 0x90, 0xff],\n firebrick: [0xb2, 0x22, 0x22],\n floralwhite: [0xff, 0xfa, 0xf0],\n forestgreen: [0x22, 0x8b, 0x22],\n fuchsia: [0xff, 0x00, 0xff],\n gainsboro: [0xdc, 0xdc, 0xdc],\n ghostwhite: [0xf8, 0xf8, 0xff],\n gold: [0xff, 0xd7, 0x00],\n goldenrod: [0xda, 0xa5, 0x20],\n gray: [0x80, 0x80, 0x80],\n green: [0x00, 0x80, 0x00],\n greenyellow: [0xad, 0xff, 0x2f],\n grey: [0x80, 0x80, 0x80],\n honeydew: [0xf0, 0xff, 0xf0],\n hotpink: [0xff, 0x69, 0xb4],\n indianred: [0xcd, 0x5c, 0x5c],\n indigo: [0x4b, 0x00, 0x82],\n ivory: [0xff, 0xff, 0xf0],\n khaki: [0xf0, 0xe6, 0x8c],\n lavender: [0xe6, 0xe6, 0xfa],\n lavenderblush: [0xff, 0xf0, 0xf5],\n lawngreen: [0x7c, 0xfc, 0x00],\n lemonchiffon: [0xff, 0xfa, 0xcd],\n lightblue: [0xad, 0xd8, 0xe6],\n lightcoral: [0xf0, 0x80, 0x80],\n lightcyan: [0xe0, 0xff, 0xff],\n lightgoldenrodyellow: [0xfa, 0xfa, 0xd2],\n lightgray: [0xd3, 0xd3, 0xd3],\n lightgreen: [0x90, 0xee, 0x90],\n lightgrey: [0xd3, 0xd3, 0xd3],\n lightpink: [0xff, 0xb6, 0xc1],\n lightsalmon: [0xff, 0xa0, 0x7a],\n lightseagreen: [0x20, 0xb2, 0xaa],\n lightskyblue: [0x87, 0xce, 0xfa],\n lightslategray: [0x77, 0x88, 0x99],\n lightslategrey: [0x77, 0x88, 0x99],\n lightsteelblue: [0xb0, 0xc4, 0xde],\n lightyellow: [0xff, 0xff, 0xe0],\n lime: [0x00, 0xff, 0x00],\n limegreen: [0x32, 0xcd, 0x32],\n linen: [0xfa, 0xf0, 0xe6],\n magenta: [0xff, 0x00, 0xff],\n maroon: [0x80, 0x00, 0x00],\n mediumaquamarine: [0x66, 0xcd, 0xaa],\n mediumblue: [0x00, 0x00, 0xcd],\n mediumorchid: [0xba, 0x55, 0xd3],\n mediumpurple: [0x93, 0x70, 0xdb],\n mediumseagreen: [0x3c, 0xb3, 0x71],\n mediumslateblue: [0x7b, 0x68, 0xee],\n mediumspringgreen: [0x00, 0xfa, 0x9a],\n mediumturquoise: [0x48, 0xd1, 0xcc],\n mediumvioletred: [0xc7, 0x15, 0x85],\n midnightblue: [0x19, 0x19, 0x70],\n mintcream: [0xf5, 0xff, 0xfa],\n mistyrose: [0xff, 0xe4, 0xe1],\n moccasin: [0xff, 0xe4, 0xb5],\n navajowhite: [0xff, 0xde, 0xad],\n navy: [0x00, 0x00, 0x80],\n oldlace: [0xfd, 0xf5, 0xe6],\n olive: [0x80, 0x80, 0x00],\n olivedrab: [0x6b, 0x8e, 0x23],\n orange: [0xff, 0xa5, 0x00],\n orangered: [0xff, 0x45, 0x00],\n orchid: [0xda, 0x70, 0xd6],\n palegoldenrod: [0xee, 0xe8, 0xaa],\n palegreen: [0x98, 0xfb, 0x98],\n paleturquoise: [0xaf, 0xee, 0xee],\n palevioletred: [0xdb, 0x70, 0x93],\n papayawhip: [0xff, 0xef, 0xd5],\n peachpuff: [0xff, 0xda, 0xb9],\n peru: [0xcd, 0x85, 0x3f],\n pink: [0xff, 0xc0, 0xcb],\n plum: [0xdd, 0xa0, 0xdd],\n powderblue: [0xb0, 0xe0, 0xe6],\n purple: [0x80, 0x00, 0x80],\n rebeccapurple: [0x66, 0x33, 0x99],\n red: [0xff, 0x00, 0x00],\n rosybrown: [0xbc, 0x8f, 0x8f],\n royalblue: [0x41, 0x69, 0xe1],\n saddlebrown: [0x8b, 0x45, 0x13],\n salmon: [0xfa, 0x80, 0x72],\n sandybrown: [0xf4, 0xa4, 0x60],\n seagreen: [0x2e, 0x8b, 0x57],\n seashell: [0xff, 0xf5, 0xee],\n sienna: [0xa0, 0x52, 0x2d],\n silver: [0xc0, 0xc0, 0xc0],\n skyblue: [0x87, 0xce, 0xeb],\n slateblue: [0x6a, 0x5a, 0xcd],\n slategray: [0x70, 0x80, 0x90],\n slategrey: [0x70, 0x80, 0x90],\n snow: [0xff, 0xfa, 0xfa],\n springgreen: [0x00, 0xff, 0x7f],\n steelblue: [0x46, 0x82, 0xb4],\n tan: [0xd2, 0xb4, 0x8c],\n teal: [0x00, 0x80, 0x80],\n thistle: [0xd8, 0xbf, 0xd8],\n tomato: [0xff, 0x63, 0x47],\n turquoise: [0x40, 0xe0, 0xd0],\n violet: [0xee, 0x82, 0xee],\n wheat: [0xf5, 0xde, 0xb3],\n white: [0xff, 0xff, 0xff],\n whitesmoke: [0xf5, 0xf5, 0xf5],\n yellow: [0xff, 0xff, 0x00],\n yellowgreen: [0x9a, 0xcd, 0x32]\n} as const satisfies {\n [key: string]: TriColorChannels;\n};\n\n/**\n * cache invalid color value\n * @param key - cache key\n * @param nullable - is nullable\n * @returns cached value\n */\nexport const cacheInvalidColorValue = (\n cacheKey: string,\n format: string,\n nullable: boolean = false\n): SpecifiedColorChannels | string | NullObject => {\n if (format === VAL_SPEC) {\n const res = '';\n setCache(cacheKey, res);\n return res;\n }\n if (nullable) {\n setCache(cacheKey, null);\n return new NullObject();\n }\n const res: SpecifiedColorChannels = ['rgb', 0, 0, 0, 0];\n setCache(cacheKey, res);\n return res;\n};\n\n/**\n * resolve invalid color value\n * @param format - output format\n * @param nullable - is nullable\n * @returns resolved value\n */\nexport const resolveInvalidColorValue = (\n format: string,\n nullable: boolean = false\n): SpecifiedColorChannels | string | NullObject => {\n switch (format) {\n case 'hsl':\n case 'hwb':\n case VAL_MIX: {\n return new NullObject();\n }\n case VAL_SPEC: {\n return '';\n }\n default: {\n if (nullable) {\n return new NullObject();\n }\n return ['rgb', 0, 0, 0, 0] as SpecifiedColorChannels;\n }\n }\n};\n\n/**\n * validate color components\n * @param arr - color components\n * @param [opt] - options\n * @param [opt.alpha] - alpha channel\n * @param [opt.minLength] - min length\n * @param [opt.maxLength] - max length\n * @param [opt.minRange] - min range\n * @param [opt.maxRange] - max range\n * @param [opt.validateRange] - validate range\n * @returns result - validated color components\n */\nexport const validateColorComponents = (\n arr: ColorChannels | TriColorChannels,\n opt: {\n alpha?: boolean;\n minLength?: number;\n maxLength?: number;\n minRange?: number;\n maxRange?: number;\n validateRange?: boolean;\n } = {}\n): ColorChannels | TriColorChannels => {\n if (!Array.isArray(arr)) {\n throw new TypeError(`${arr} is not an array.`);\n }\n const {\n alpha = false,\n minLength = TRIA,\n maxLength = QUAD,\n minRange = 0,\n maxRange = 1,\n validateRange = true\n } = opt;\n if (!Number.isFinite(minLength)) {\n throw new TypeError(`${minLength} is not a number.`);\n }\n if (!Number.isFinite(maxLength)) {\n throw new TypeError(`${maxLength} is not a number.`);\n }\n if (!Number.isFinite(minRange)) {\n throw new TypeError(`${minRange} is not a number.`);\n }\n if (!Number.isFinite(maxRange)) {\n throw new TypeError(`${maxRange} is not a number.`);\n }\n const l = arr.length;\n if (l < minLength || l > maxLength) {\n throw new Error(`Unexpected array length ${l}.`);\n }\n let i = 0;\n while (i < l) {\n const v = arr[i] as number;\n if (!Number.isFinite(v)) {\n throw new TypeError(`${v} is not a number.`);\n } else if (i < TRIA && validateRange && (v < minRange || v > maxRange)) {\n throw new RangeError(`${v} is not between ${minRange} and ${maxRange}.`);\n } else if (i === TRIA && (v < 0 || v > 1)) {\n throw new RangeError(`${v} is not between 0 and 1.`);\n }\n i++;\n }\n if (alpha && l === TRIA) {\n arr.push(1);\n }\n return arr;\n};\n\n/**\n * transform matrix\n * @param mtx - 3 * 3 matrix\n * @param vct - vector\n * @param [skip] - skip validate\n * @returns TriColorChannels - [p1, p2, p3]\n */\nexport const transformMatrix = (\n mtx: ColorMatrix,\n vct: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n if (!Array.isArray(mtx)) {\n throw new TypeError(`${mtx} is not an array.`);\n } else if (mtx.length !== TRIA) {\n throw new Error(`Unexpected array length ${mtx.length}.`);\n } else if (!skip) {\n for (let i of mtx) {\n i = validateColorComponents(i as TriColorChannels, {\n maxLength: TRIA,\n validateRange: false\n }) as TriColorChannels;\n }\n }\n const [[r1c1, r1c2, r1c3], [r2c1, r2c2, r2c3], [r3c1, r3c2, r3c3]] = mtx;\n let v1, v2, v3;\n if (skip) {\n [v1, v2, v3] = vct;\n } else {\n [v1, v2, v3] = validateColorComponents(vct, {\n maxLength: TRIA,\n validateRange: false\n });\n }\n const p1 = r1c1 * v1 + r1c2 * v2 + r1c3 * v3;\n const p2 = r2c1 * v1 + r2c2 * v2 + r2c3 * v3;\n const p3 = r3c1 * v1 + r3c2 * v2 + r3c3 * v3;\n return [p1, p2, p3];\n};\n\n/**\n * normalize color components\n * @param colorA - color components [v1, v2, v3, v4]\n * @param colorB - color components [v1, v2, v3, v4]\n * @param [skip] - skip validate\n * @returns result - [colorA, colorB]\n */\nexport const normalizeColorComponents = (\n colorA: [number | string, number | string, number | string, number | string],\n colorB: [number | string, number | string, number | string, number | string],\n skip: boolean = false\n): [ColorChannels, ColorChannels] => {\n if (!Array.isArray(colorA)) {\n throw new TypeError(`${colorA} is not an array.`);\n } else if (colorA.length !== QUAD) {\n throw new Error(`Unexpected array length ${colorA.length}.`);\n }\n if (!Array.isArray(colorB)) {\n throw new TypeError(`${colorB} is not an array.`);\n } else if (colorB.length !== QUAD) {\n throw new Error(`Unexpected array length ${colorB.length}.`);\n }\n let i = 0;\n while (i < QUAD) {\n if (colorA[i] === NONE && colorB[i] === NONE) {\n colorA[i] = 0;\n colorB[i] = 0;\n } else if (colorA[i] === NONE) {\n colorA[i] = colorB[i] as number;\n } else if (colorB[i] === NONE) {\n colorB[i] = colorA[i] as number;\n }\n i++;\n }\n if (skip) {\n return [colorA as ColorChannels, colorB as ColorChannels];\n }\n const validatedColorA = validateColorComponents(colorA as ColorChannels, {\n minLength: QUAD,\n validateRange: false\n });\n const validatedColorB = validateColorComponents(colorB as ColorChannels, {\n minLength: QUAD,\n validateRange: false\n });\n return [validatedColorA as ColorChannels, validatedColorB as ColorChannels];\n};\n\n/**\n * number to hex string\n * @param value - numeric value\n * @returns hex string\n */\nexport const numberToHexString = (value: number): string => {\n if (!Number.isFinite(value)) {\n throw new TypeError(`${value} is not a number.`);\n } else {\n value = Math.round(value);\n if (value < 0 || value > MAX_RGB) {\n throw new RangeError(`${value} is not between 0 and ${MAX_RGB}.`);\n }\n }\n let hex = value.toString(HEX);\n if (hex.length === 1) {\n hex = `0${hex}`;\n }\n return hex;\n};\n\n/**\n * angle to deg\n * @param angle\n * @returns deg: 0..360\n */\nexport const angleToDeg = (angle: string): number => {\n if (isString(angle)) {\n angle = angle.trim();\n } else {\n throw new TypeError(`${angle} is not a string.`);\n }\n const GRAD = DEG / 400;\n const RAD = DEG / (Math.PI * DUO);\n const reg = new RegExp(`^(${NUM})(${ANGLE})?$`);\n if (!reg.test(angle)) {\n throw new SyntaxError(`Invalid property value: ${angle}`);\n }\n const [, value, unit] = angle.match(reg) as MatchedRegExp;\n let deg;\n switch (unit) {\n case 'grad':\n deg = parseFloat(value) * GRAD;\n break;\n case 'rad':\n deg = parseFloat(value) * RAD;\n break;\n case 'turn':\n deg = parseFloat(value) * DEG;\n break;\n default:\n deg = parseFloat(value);\n }\n deg %= DEG;\n if (deg < 0) {\n deg += DEG;\n } else if (Object.is(deg, -0)) {\n deg = 0;\n }\n return deg;\n};\n\n/**\n * parse alpha\n * @param [alpha] - alpha value\n * @returns alpha: 0..1\n */\nexport const parseAlpha = (alpha: string = ''): number => {\n if (isString(alpha)) {\n alpha = alpha.trim();\n if (!alpha) {\n alpha = '1';\n } else if (alpha === NONE) {\n alpha = '0';\n } else {\n let a;\n if (alpha.endsWith('%')) {\n a = parseFloat(alpha) / MAX_PCT;\n } else {\n a = parseFloat(alpha);\n }\n if (!Number.isFinite(a)) {\n throw new TypeError(`${a} is not a finite number.`);\n }\n if (a < PPTH) {\n alpha = '0';\n } else if (a > 1) {\n alpha = '1';\n } else {\n alpha = a.toFixed(TRIA);\n }\n }\n } else {\n alpha = '1';\n }\n return parseFloat(alpha);\n};\n\n/**\n * parse hex alpha\n * @param value - alpha value in hex string\n * @returns alpha: 0..1\n */\nexport const parseHexAlpha = (value: string): number => {\n if (isString(value)) {\n if (value === '') {\n throw new SyntaxError('Invalid property value: (empty string)');\n }\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n let alpha = parseInt(value, HEX);\n if (alpha <= 0) {\n return 0;\n }\n if (alpha >= MAX_RGB) {\n return 1;\n }\n const alphaMap = new Map();\n for (let i = 1; i < MAX_PCT; i++) {\n alphaMap.set(Math.round((i * MAX_RGB) / MAX_PCT), i);\n }\n if (alphaMap.has(alpha)) {\n alpha = alphaMap.get(alpha) / MAX_PCT;\n } else {\n alpha = Math.round(alpha / MAX_RGB / PPTH) * PPTH;\n }\n return parseFloat(alpha.toFixed(TRIA));\n};\n\n/**\n * transform rgb to linear rgb\n * @param rgb - [r, g, b] r|g|b: 0..255\n * @param [skip] - skip validate\n * @returns TriColorChannels - [r, g, b] r|g|b: 0..1\n */\nexport const transformRgbToLinearRgb = (\n rgb: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n let rr, gg, bb;\n if (skip) {\n [rr, gg, bb] = rgb;\n } else {\n [rr, gg, bb] = validateColorComponents(rgb, {\n maxLength: TRIA,\n maxRange: MAX_RGB\n });\n }\n let r = rr / MAX_RGB;\n let g = gg / MAX_RGB;\n let b = bb / MAX_RGB;\n const COND_POW = 0.04045;\n if (r > COND_POW) {\n r = Math.pow((r + LINEAR_OFFSET) / (1 + LINEAR_OFFSET), POW_LINEAR);\n } else {\n r /= LINEAR_COEF;\n }\n if (g > COND_POW) {\n g = Math.pow((g + LINEAR_OFFSET) / (1 + LINEAR_OFFSET), POW_LINEAR);\n } else {\n g /= LINEAR_COEF;\n }\n if (b > COND_POW) {\n b = Math.pow((b + LINEAR_OFFSET) / (1 + LINEAR_OFFSET), POW_LINEAR);\n } else {\n b /= LINEAR_COEF;\n }\n return [r, g, b];\n};\n\n/**\n * transform rgb to xyz\n * @param rgb - [r, g, b] r|g|b: 0..255\n * @param [skip] - skip validate\n * @returns TriColorChannels - [x, y, z]\n */\nexport const transformRgbToXyz = (\n rgb: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n if (!skip) {\n rgb = validateColorComponents(rgb, {\n maxLength: TRIA,\n maxRange: MAX_RGB\n }) as TriColorChannels;\n }\n rgb = transformRgbToLinearRgb(rgb, true);\n const xyz = transformMatrix(MATRIX_L_RGB_TO_XYZ, rgb, true);\n return xyz;\n};\n\n/**\n * transform rgb to xyz-d50\n * @param rgb - [r, g, b] r|g|b: 0..255 alpha: 0..1\n * @returns TriColorChannels - [x, y, z]\n */\nexport const transformRgbToXyzD50 = (\n rgb: TriColorChannels\n): TriColorChannels => {\n let xyz = transformRgbToXyz(rgb);\n xyz = transformMatrix(MATRIX_D65_TO_D50, xyz, true);\n return xyz;\n};\n\n/**\n * transform linear rgb to rgb\n * @param rgb - [r, g, b] r|g|b: 0..1\n * @param [round] - round result\n * @returns TriColorChannels - [r, g, b] r|g|b: 0..255\n */\nexport const transformLinearRgbToRgb = (\n rgb: TriColorChannels,\n round: boolean = false\n): TriColorChannels => {\n let [r, g, b] = validateColorComponents(rgb, {\n maxLength: TRIA\n });\n const COND_POW = 809 / 258400;\n if (r > COND_POW) {\n r = Math.pow(r, 1 / POW_LINEAR) * (1 + LINEAR_OFFSET) - LINEAR_OFFSET;\n } else {\n r *= LINEAR_COEF;\n }\n r *= MAX_RGB;\n if (g > COND_POW) {\n g = Math.pow(g, 1 / POW_LINEAR) * (1 + LINEAR_OFFSET) - LINEAR_OFFSET;\n } else {\n g *= LINEAR_COEF;\n }\n g *= MAX_RGB;\n if (b > COND_POW) {\n b = Math.pow(b, 1 / POW_LINEAR) * (1 + LINEAR_OFFSET) - LINEAR_OFFSET;\n } else {\n b *= LINEAR_COEF;\n }\n b *= MAX_RGB;\n return [\n round ? Math.round(r) : r,\n round ? Math.round(g) : g,\n round ? Math.round(b) : b\n ];\n};\n\n/**\n * transform xyz to rgb\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [r, g, b] r|g|b: 0..255\n */\nexport const transformXyzToRgb = (\n xyz: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n if (!skip) {\n xyz = validateColorComponents(xyz, {\n maxLength: TRIA,\n validateRange: false\n }) as TriColorChannels;\n }\n let [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, xyz, true);\n [r, g, b] = transformLinearRgbToRgb(\n [\n Math.min(Math.max(r, 0), 1),\n Math.min(Math.max(g, 0), 1),\n Math.min(Math.max(b, 0), 1)\n ],\n true\n );\n return [r, g, b];\n};\n\n/**\n * transform xyz to xyz-d50\n * @param xyz - [x, y, z]\n * @returns TriColorChannels - [x, y, z]\n */\nexport const transformXyzToXyzD50 = (\n xyz: TriColorChannels\n): TriColorChannels => {\n xyz = validateColorComponents(xyz, {\n maxLength: TRIA,\n validateRange: false\n }) as TriColorChannels;\n xyz = transformMatrix(MATRIX_D65_TO_D50, xyz, true);\n return xyz;\n};\n\n/**\n * transform xyz to hsl\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [h, s, l]\n */\nexport const transformXyzToHsl = (\n xyz: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n const [rr, gg, bb] = transformXyzToRgb(xyz, skip);\n const r = rr / MAX_RGB;\n const g = gg / MAX_RGB;\n const b = bb / MAX_RGB;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const d = max - min;\n const l = (max + min) * HALF * MAX_PCT;\n let h, s;\n if (Math.round(l) === 0 || Math.round(l) === MAX_PCT) {\n h = 0;\n s = 0;\n } else {\n s = (d / (1 - Math.abs(max + min - 1))) * MAX_PCT;\n if (s === 0) {\n h = 0;\n } else {\n switch (max) {\n case r:\n h = (g - b) / d;\n break;\n case g:\n h = (b - r) / d + DUO;\n break;\n case b:\n default:\n h = (r - g) / d + QUAD;\n break;\n }\n h = (h * SEXA) % DEG;\n if (h < 0) {\n h += DEG;\n }\n }\n }\n return [h, s, l];\n};\n\n/**\n * transform xyz to hwb\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [h, w, b]\n */\nexport const transformXyzToHwb = (\n xyz: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n const [r, g, b] = transformXyzToRgb(xyz, skip);\n const wh = Math.min(r, g, b) / MAX_RGB;\n const bk = 1 - Math.max(r, g, b) / MAX_RGB;\n let h;\n if (wh + bk === 1) {\n h = 0;\n } else {\n [h] = transformXyzToHsl(xyz);\n }\n return [h, wh * MAX_PCT, bk * MAX_PCT];\n};\n\n/**\n * transform xyz to oklab\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [l, a, b]\n */\nexport const transformXyzToOklab = (\n xyz: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n if (!skip) {\n xyz = validateColorComponents(xyz, {\n maxLength: TRIA,\n validateRange: false\n }) as TriColorChannels;\n }\n const lms = transformMatrix(MATRIX_XYZ_TO_LMS, xyz, true);\n const xyzLms = lms.map(c => Math.cbrt(c)) as TriColorChannels;\n let [l, a, b] = transformMatrix(MATRIX_LMS_TO_OKLAB, xyzLms, true);\n l = Math.min(Math.max(l, 0), 1);\n const lPct = Math.round(parseFloat(l.toFixed(QUAD)) * MAX_PCT);\n if (lPct === 0 || lPct === MAX_PCT) {\n a = 0;\n b = 0;\n }\n return [l, a, b];\n};\n\n/**\n * transform xyz to oklch\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [l, c, h]\n */\nexport const transformXyzToOklch = (\n xyz: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n const [l, a, b] = transformXyzToOklab(xyz, skip);\n let c, h;\n const lPct = Math.round(parseFloat(l.toFixed(QUAD)) * MAX_PCT);\n if (lPct === 0 || lPct === MAX_PCT) {\n c = 0;\n h = 0;\n } else {\n c = Math.max(Math.sqrt(Math.pow(a, POW_SQR) + Math.pow(b, POW_SQR)), 0);\n if (parseFloat(c.toFixed(QUAD)) === 0) {\n h = 0;\n } else {\n h = (Math.atan2(b, a) * DEG_HALF) / Math.PI;\n if (h < 0) {\n h += DEG;\n }\n }\n }\n return [l, c, h];\n};\n\n/**\n * transform xyz D50 to rgb\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [r, g, b] r|g|b: 0..255\n */\nexport const transformXyzD50ToRgb = (\n xyz: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n if (!skip) {\n xyz = validateColorComponents(xyz, {\n maxLength: TRIA,\n validateRange: false\n }) as TriColorChannels;\n }\n const xyzD65 = transformMatrix(MATRIX_D50_TO_D65, xyz, true);\n const rgb = transformXyzToRgb(xyzD65, true);\n return rgb;\n};\n\n/**\n * transform xyz-d50 to lab\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [l, a, b]\n */\nexport const transformXyzD50ToLab = (\n xyz: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n if (!skip) {\n xyz = validateColorComponents(xyz, {\n maxLength: TRIA,\n validateRange: false\n }) as TriColorChannels;\n }\n const xyzD50 = xyz.map((val, i) => val / (D50[i] as number));\n const [f0, f1, f2] = xyzD50.map(val =>\n val > LAB_EPSILON ? Math.cbrt(val) : (val * LAB_KAPPA + HEX) / LAB_L\n ) as TriColorChannels;\n const l = Math.min(Math.max(LAB_L * f1 - HEX, 0), MAX_PCT);\n let a, b;\n if (l === 0 || l === MAX_PCT) {\n a = 0;\n b = 0;\n } else {\n a = (f0 - f1) * LAB_A;\n b = (f1 - f2) * LAB_B;\n }\n return [l, a, b];\n};\n\n/**\n * transform xyz-d50 to lch\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [l, c, h]\n */\nexport const transformXyzD50ToLch = (\n xyz: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n const [l, a, b] = transformXyzD50ToLab(xyz, skip);\n let c, h;\n if (l === 0 || l === MAX_PCT) {\n c = 0;\n h = 0;\n } else {\n c = Math.max(Math.sqrt(Math.pow(a, POW_SQR) + Math.pow(b, POW_SQR)), 0);\n h = (Math.atan2(b, a) * DEG_HALF) / Math.PI;\n if (h < 0) {\n h += DEG;\n }\n }\n return [l, c, h];\n};\n\n/**\n * convert rgb to hex color\n * @param rgb - [r, g, b, alpha] r|g|b: 0..255 alpha: 0..1\n * @returns hex color\n */\nexport const convertRgbToHex = (rgb: ColorChannels): string => {\n const [r, g, b, alpha] = validateColorComponents(rgb, {\n alpha: true,\n maxRange: MAX_RGB\n }) as ColorChannels;\n const rr = numberToHexString(r);\n const gg = numberToHexString(g);\n const bb = numberToHexString(b);\n const aa = numberToHexString(alpha * MAX_RGB);\n let hex;\n if (aa === 'ff') {\n hex = `#${rr}${gg}${bb}`;\n } else {\n hex = `#${rr}${gg}${bb}${aa}`;\n }\n return hex;\n};\n\n/**\n * convert linear rgb to hex color\n * @param rgb - [r, g, b, alpha] r|g|b|alpha: 0..1\n * @param [skip] - skip validate\n * @returns hex color\n */\nexport const convertLinearRgbToHex = (\n rgb: ColorChannels,\n skip: boolean = false\n): string => {\n let r, g, b, alpha;\n if (skip) {\n [r, g, b, alpha] = rgb;\n } else {\n [r, g, b, alpha] = validateColorComponents(rgb, {\n minLength: QUAD\n }) as ColorChannels;\n }\n [r, g, b] = transformLinearRgbToRgb([r, g, b], true);\n const rr = numberToHexString(r);\n const gg = numberToHexString(g);\n const bb = numberToHexString(b);\n const aa = numberToHexString(alpha * MAX_RGB);\n let hex;\n if (aa === 'ff') {\n hex = `#${rr}${gg}${bb}`;\n } else {\n hex = `#${rr}${gg}${bb}${aa}`;\n }\n return hex;\n};\n\n/**\n * convert xyz to hex color\n * @param xyz - [x, y, z, alpha]\n * @returns hex color\n */\nexport const convertXyzToHex = (xyz: ColorChannels): string => {\n const [x, y, z, alpha] = validateColorComponents(xyz, {\n minLength: QUAD,\n validateRange: false\n }) as ColorChannels;\n const [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true);\n const hex = convertLinearRgbToHex(\n [\n Math.min(Math.max(r, 0), 1),\n Math.min(Math.max(g, 0), 1),\n Math.min(Math.max(b, 0), 1),\n alpha\n ],\n true\n );\n return hex;\n};\n\n/**\n * convert xyz D50 to hex color\n * @param xyz - [x, y, z, alpha]\n * @returns hex color\n */\nexport const convertXyzD50ToHex = (xyz: ColorChannels): string => {\n const [x, y, z, alpha] = validateColorComponents(xyz, {\n minLength: QUAD,\n validateRange: false\n }) as ColorChannels;\n const xyzD65 = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true);\n const [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, xyzD65, true);\n const hex = convertLinearRgbToHex([\n Math.min(Math.max(r, 0), 1),\n Math.min(Math.max(g, 0), 1),\n Math.min(Math.max(b, 0), 1),\n alpha\n ]);\n return hex;\n};\n\n/**\n * convert hex color to rgb\n * @param value - hex color value\n * @returns ColorChannels - [r, g, b, alpha] r|g|b: 0..255 alpha: 0..1\n */\nexport const convertHexToRgb = (value: string): ColorChannels => {\n if (isString(value)) {\n value = value.toLowerCase().trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n if (\n !(\n /^#[\\da-f]{6}$/.test(value) ||\n /^#[\\da-f]{3}$/.test(value) ||\n /^#[\\da-f]{8}$/.test(value) ||\n /^#[\\da-f]{4}$/.test(value)\n )\n ) {\n throw new SyntaxError(`Invalid property value: ${value}`);\n }\n const arr: number[] = [];\n if (/^#[\\da-f]{3}$/.test(value)) {\n const [, r, g, b] = value.match(\n /^#([\\da-f])([\\da-f])([\\da-f])$/\n ) as MatchedRegExp;\n arr.push(\n parseInt(`${r}${r}`, HEX),\n parseInt(`${g}${g}`, HEX),\n parseInt(`${b}${b}`, HEX),\n 1\n );\n } else if (/^#[\\da-f]{4}$/.test(value)) {\n const [, r, g, b, alpha] = value.match(\n /^#([\\da-f])([\\da-f])([\\da-f])([\\da-f])$/\n ) as MatchedRegExp;\n arr.push(\n parseInt(`${r}${r}`, HEX),\n parseInt(`${g}${g}`, HEX),\n parseInt(`${b}${b}`, HEX),\n parseHexAlpha(`${alpha}${alpha}`)\n );\n } else if (/^#[\\da-f]{8}$/.test(value)) {\n const [, r, g, b, alpha] = value.match(\n /^#([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})$/\n ) as MatchedRegExp;\n arr.push(\n parseInt(r, HEX),\n parseInt(g, HEX),\n parseInt(b, HEX),\n parseHexAlpha(alpha)\n );\n } else {\n const [, r, g, b] = value.match(\n /^#([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})$/\n ) as MatchedRegExp;\n arr.push(parseInt(r, HEX), parseInt(g, HEX), parseInt(b, HEX), 1);\n }\n return arr as ColorChannels;\n};\n\n/**\n * convert hex color to linear rgb\n * @param value - hex color value\n * @returns ColorChannels - [r, g, b, alpha] r|g|b|alpha: 0..1\n */\nexport const convertHexToLinearRgb = (value: string): ColorChannels => {\n const [rr, gg, bb, alpha] = convertHexToRgb(value);\n const [r, g, b] = transformRgbToLinearRgb([rr, gg, bb], true);\n return [r, g, b, alpha];\n};\n\n/**\n * convert hex color to xyz\n * @param value - hex color value\n * @returns ColorChannels - [x, y, z, alpha]\n */\nexport const convertHexToXyz = (value: string): ColorChannels => {\n const [r, g, b, alpha] = convertHexToLinearRgb(value);\n const [x, y, z] = transformMatrix(MATRIX_L_RGB_TO_XYZ, [r, g, b], true);\n return [x, y, z, alpha];\n};\n\n/**\n * parse rgb()\n * @param value - rgb color value\n * @param [opt] - options\n * @returns parsed color - ['rgb', r, g, b, alpha], '(empty)', NullObject\n */\nexport const parseRgb = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.toLowerCase().trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '', nullable = false } = opt;\n const reg = new RegExp(`^rgba?\\\\(\\\\s*(${SYN_MOD}|${SYN_RGB_LV3})\\\\s*\\\\)$`);\n if (!reg.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n return res;\n }\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n const [, val] = value.match(reg) as MatchedRegExp;\n const [v1, v2, v3, v4 = ''] = val\n .replace(/[,/]/g, ' ')\n .split(/\\s+/) as StringColorChannels;\n let r, g, b;\n if (v1 === NONE) {\n r = 0;\n } else {\n if (v1.endsWith('%')) {\n r = (parseFloat(v1) * MAX_RGB) / MAX_PCT;\n } else {\n r = parseFloat(v1);\n }\n r = Math.min(Math.max(roundToPrecision(r, OCT), 0), MAX_RGB);\n }\n if (v2 === NONE) {\n g = 0;\n } else {\n if (v2.endsWith('%')) {\n g = (parseFloat(v2) * MAX_RGB) / MAX_PCT;\n } else {\n g = parseFloat(v2);\n }\n g = Math.min(Math.max(roundToPrecision(g, OCT), 0), MAX_RGB);\n }\n if (v3 === NONE) {\n b = 0;\n } else {\n if (v3.endsWith('%')) {\n b = (parseFloat(v3) * MAX_RGB) / MAX_PCT;\n } else {\n b = parseFloat(v3);\n }\n b = Math.min(Math.max(roundToPrecision(b, OCT), 0), MAX_RGB);\n }\n const alpha = parseAlpha(v4);\n return ['rgb', r, g, b, format === VAL_MIX && v4 === NONE ? NONE : alpha];\n};\n\n/**\n * parse hsl()\n * @param value - hsl color value\n * @param [opt] - options\n * @returns parsed color - ['rgb', r, g, b, alpha], '(empty)', NullObject\n */\nexport const parseHsl = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '', nullable = false } = opt;\n if (!REG_HSL.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n return res;\n }\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n const [, val] = value.match(REG_HSL) as MatchedRegExp;\n const [v1, v2, v3, v4 = ''] = val\n .replace(/[,/]/g, ' ')\n .split(/\\s+/) as StringColorChannels;\n let h, s, l;\n if (v1 === NONE) {\n h = 0;\n } else {\n h = angleToDeg(v1);\n }\n if (v2 === NONE) {\n s = 0;\n } else {\n s = Math.min(Math.max(parseFloat(v2), 0), MAX_PCT);\n }\n if (v3 === NONE) {\n l = 0;\n } else {\n l = Math.min(Math.max(parseFloat(v3), 0), MAX_PCT);\n }\n const alpha = parseAlpha(v4);\n if (format === 'hsl') {\n return [\n format,\n v1 === NONE ? v1 : h,\n v2 === NONE ? v2 : s,\n v3 === NONE ? v3 : l,\n v4 === NONE ? v4 : alpha\n ];\n }\n h = (h / DEG) * DOZ;\n l /= MAX_PCT;\n const sa = (s / MAX_PCT) * Math.min(l, 1 - l);\n const rk = h % DOZ;\n const gk = (8 + h) % DOZ;\n const bk = (4 + h) % DOZ;\n const r = l - sa * Math.max(-1, Math.min(rk - TRIA, TRIA ** POW_SQR - rk, 1));\n const g = l - sa * Math.max(-1, Math.min(gk - TRIA, TRIA ** POW_SQR - gk, 1));\n const b = l - sa * Math.max(-1, Math.min(bk - TRIA, TRIA ** POW_SQR - bk, 1));\n return [\n 'rgb',\n Math.min(Math.max(roundToPrecision(r * MAX_RGB, OCT), 0), MAX_RGB),\n Math.min(Math.max(roundToPrecision(g * MAX_RGB, OCT), 0), MAX_RGB),\n Math.min(Math.max(roundToPrecision(b * MAX_RGB, OCT), 0), MAX_RGB),\n alpha\n ];\n};\n\n/**\n * parse hwb()\n * @param value - hwb color value\n * @param [opt] - options\n * @returns parsed color - ['rgb', r, g, b, alpha], '(empty)', NullObject\n */\nexport const parseHwb = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '', nullable = false } = opt;\n if (!REG_HWB.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n return res;\n }\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n const [, val] = value.match(REG_HWB) as MatchedRegExp;\n const [v1, v2, v3, v4 = ''] = val\n .replace('/', ' ')\n .split(/\\s+/) as StringColorChannels;\n let h, wh, bk;\n if (v1 === NONE) {\n h = 0;\n } else {\n h = angleToDeg(v1);\n }\n if (v2 === NONE) {\n wh = 0;\n } else {\n wh = Math.min(Math.max(parseFloat(v2), 0), MAX_PCT) / MAX_PCT;\n }\n if (v3 === NONE) {\n bk = 0;\n } else {\n bk = Math.min(Math.max(parseFloat(v3), 0), MAX_PCT) / MAX_PCT;\n }\n const alpha = parseAlpha(v4);\n if (format === 'hwb') {\n return [\n format,\n v1 === NONE ? v1 : h,\n v2 === NONE ? v2 : wh * MAX_PCT,\n v3 === NONE ? v3 : bk * MAX_PCT,\n v4 === NONE ? v4 : alpha\n ];\n }\n if (wh + bk >= 1) {\n const v = roundToPrecision((wh / (wh + bk)) * MAX_RGB, OCT);\n return ['rgb', v, v, v, alpha];\n }\n const factor = (1 - wh - bk) / MAX_RGB;\n let [, r, g, b] = parseHsl(`hsl(${h} 100 50)`) as ComputedColorChannels;\n r = roundToPrecision((r * factor + wh) * MAX_RGB, OCT);\n g = roundToPrecision((g * factor + wh) * MAX_RGB, OCT);\n b = roundToPrecision((b * factor + wh) * MAX_RGB, OCT);\n return [\n 'rgb',\n Math.min(Math.max(r, 0), MAX_RGB),\n Math.min(Math.max(g, 0), MAX_RGB),\n Math.min(Math.max(b, 0), MAX_RGB),\n alpha\n ];\n};\n\n/**\n * parse lab()\n * @param value - lab color value\n * @param [opt] - options\n * @returns parsed color\n * - [xyz-d50, x, y, z, alpha], ['lab', l, a, b, alpha], '(empty)', NullObject\n */\nexport const parseLab = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '', nullable = false } = opt;\n if (!REG_LAB.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n return res;\n }\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n const COEF_PCT = 1.25;\n const COND_POW = 8;\n const [, val] = value.match(REG_LAB) as MatchedRegExp;\n const [v1, v2, v3, v4 = ''] = val\n .replace('/', ' ')\n .split(/\\s+/) as StringColorChannels;\n let l, a, b;\n if (v1 === NONE) {\n l = 0;\n } else {\n if (v1.endsWith('%')) {\n l = parseFloat(v1);\n if (l > MAX_PCT) {\n l = MAX_PCT;\n }\n } else {\n l = parseFloat(v1);\n }\n if (l < 0) {\n l = 0;\n }\n }\n if (v2 === NONE) {\n a = 0;\n } else {\n a = v2.endsWith('%') ? parseFloat(v2) * COEF_PCT : parseFloat(v2);\n }\n if (v3 === NONE) {\n b = 0;\n } else {\n b = v3.endsWith('%') ? parseFloat(v3) * COEF_PCT : parseFloat(v3);\n }\n const alpha = parseAlpha(v4);\n if (REG_SPEC.test(format)) {\n return [\n 'lab',\n v1 === NONE ? v1 : roundToPrecision(l, HEX),\n v2 === NONE ? v2 : roundToPrecision(a, HEX),\n v3 === NONE ? v3 : roundToPrecision(b, HEX),\n v4 === NONE ? v4 : alpha\n ];\n }\n const fl = (l + HEX) / LAB_L;\n const fa = a / LAB_A + fl;\n const fb = fl - b / LAB_B;\n const powFl = Math.pow(fl, POW_CUBE);\n const powFa = Math.pow(fa, POW_CUBE);\n const powFb = Math.pow(fb, POW_CUBE);\n const xyz = [\n powFa > LAB_EPSILON ? powFa : (fa * LAB_L - HEX) / LAB_KAPPA,\n l > COND_POW ? powFl : l / LAB_KAPPA,\n powFb > LAB_EPSILON ? powFb : (fb * LAB_L - HEX) / LAB_KAPPA\n ];\n const [x, y, z] = xyz.map(\n (val, i) => val * (D50[i] as number)\n ) as TriColorChannels;\n return [\n 'xyz-d50',\n roundToPrecision(x, HEX),\n roundToPrecision(y, HEX),\n roundToPrecision(z, HEX),\n alpha\n ];\n};\n\n/**\n * parse lch()\n * @param value - lch color value\n * @param [opt] - options\n * @returns parsed color\n * - ['xyz-d50', x, y, z, alpha], ['lch', l, c, h, alpha]\n * - '(empty)', NullObject\n */\nexport const parseLch = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '', nullable = false } = opt;\n if (!REG_LCH.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n return res;\n }\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n const COEF_PCT = 1.5;\n const [, val] = value.match(REG_LCH) as MatchedRegExp;\n const [v1, v2, v3, v4 = ''] = val\n .replace('/', ' ')\n .split(/\\s+/) as StringColorChannels;\n let l, c, h;\n if (v1 === NONE) {\n l = 0;\n } else {\n l = parseFloat(v1);\n if (l < 0) {\n l = 0;\n }\n }\n if (v2 === NONE) {\n c = 0;\n } else {\n c = v2.endsWith('%') ? parseFloat(v2) * COEF_PCT : parseFloat(v2);\n }\n if (v3 === NONE) {\n h = 0;\n } else {\n h = angleToDeg(v3);\n }\n const alpha = parseAlpha(v4);\n if (REG_SPEC.test(format)) {\n return [\n 'lch',\n v1 === NONE ? v1 : roundToPrecision(l, HEX),\n v2 === NONE ? v2 : roundToPrecision(c, HEX),\n v3 === NONE ? v3 : roundToPrecision(h, HEX),\n v4 === NONE ? v4 : alpha\n ];\n }\n const a = c * Math.cos((h * Math.PI) / DEG_HALF);\n const b = c * Math.sin((h * Math.PI) / DEG_HALF);\n const [, x, y, z] = parseLab(`lab(${l} ${a} ${b})`) as ComputedColorChannels;\n return [\n 'xyz-d50',\n roundToPrecision(x, HEX),\n roundToPrecision(y, HEX),\n roundToPrecision(z, HEX),\n alpha as number\n ];\n};\n\n/**\n * parse oklab()\n * @param value - oklab color value\n * @param [opt] - options\n * @returns parsed color\n * - ['xyz-d65', x, y, z, alpha], ['oklab', l, a, b, alpha]\n * - '(empty)', NullObject\n */\nexport const parseOklab = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '', nullable = false } = opt;\n if (!REG_OKLAB.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n return res;\n }\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n const COEF_PCT = 0.4;\n const [, val] = value.match(REG_OKLAB) as MatchedRegExp;\n const [v1, v2, v3, v4 = ''] = val\n .replace('/', ' ')\n .split(/\\s+/) as StringColorChannels;\n let l, a, b;\n if (v1 === NONE) {\n l = 0;\n } else {\n l = v1.endsWith('%') ? parseFloat(v1) / MAX_PCT : parseFloat(v1);\n if (l < 0) {\n l = 0;\n }\n }\n if (v2 === NONE) {\n a = 0;\n } else if (v2.endsWith('%')) {\n a = (parseFloat(v2) * COEF_PCT) / MAX_PCT;\n } else {\n a = parseFloat(v2);\n }\n if (v3 === NONE) {\n b = 0;\n } else if (v3.endsWith('%')) {\n b = (parseFloat(v3) * COEF_PCT) / MAX_PCT;\n } else {\n b = parseFloat(v3);\n }\n const alpha = parseAlpha(v4);\n if (REG_SPEC.test(format)) {\n return [\n 'oklab',\n v1 === NONE ? v1 : roundToPrecision(l, HEX),\n v2 === NONE ? v2 : roundToPrecision(a, HEX),\n v3 === NONE ? v3 : roundToPrecision(b, HEX),\n v4 === NONE ? v4 : alpha\n ];\n }\n const lms = transformMatrix(MATRIX_OKLAB_TO_LMS, [l, a, b]);\n const xyzLms = lms.map(c => Math.pow(c, POW_CUBE)) as TriColorChannels;\n const [x, y, z] = transformMatrix(MATRIX_LMS_TO_XYZ, xyzLms, true);\n return [\n 'xyz-d65',\n roundToPrecision(x, HEX),\n roundToPrecision(y, HEX),\n roundToPrecision(z, HEX),\n alpha as number\n ];\n};\n\n/**\n * parse oklch()\n * @param value - oklch color value\n * @param [opt] - options\n * @returns parsed color\n * - ['xyz-d65', x, y, z, alpha], ['oklch', l, c, h, alpha]\n * - '(empty)', NullObject\n */\nexport const parseOklch = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '', nullable = false } = opt;\n if (!REG_OKLCH.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n return res;\n }\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n const COEF_PCT = 0.4;\n const [, val] = value.match(REG_OKLCH) as MatchedRegExp;\n const [v1, v2, v3, v4 = ''] = val\n .replace('/', ' ')\n .split(/\\s+/) as StringColorChannels;\n let l, c, h;\n if (v1 === NONE) {\n l = 0;\n } else {\n l = v1.endsWith('%') ? parseFloat(v1) / MAX_PCT : parseFloat(v1);\n if (l < 0) {\n l = 0;\n }\n }\n if (v2 === NONE) {\n c = 0;\n } else {\n if (v2.endsWith('%')) {\n c = (parseFloat(v2) * COEF_PCT) / MAX_PCT;\n } else {\n c = parseFloat(v2);\n }\n if (c < 0) {\n c = 0;\n }\n }\n if (v3 === NONE) {\n h = 0;\n } else {\n h = angleToDeg(v3);\n }\n const alpha = parseAlpha(v4);\n if (REG_SPEC.test(format)) {\n return [\n 'oklch',\n v1 === NONE ? v1 : roundToPrecision(l, HEX),\n v2 === NONE ? v2 : roundToPrecision(c, HEX),\n v3 === NONE ? v3 : roundToPrecision(h, HEX),\n v4 === NONE ? v4 : alpha\n ];\n }\n const a = c * Math.cos((h * Math.PI) / DEG_HALF);\n const b = c * Math.sin((h * Math.PI) / DEG_HALF);\n const lms = transformMatrix(MATRIX_OKLAB_TO_LMS, [l, a, b]);\n const xyzLms = lms.map(cc => Math.pow(cc, POW_CUBE)) as TriColorChannels;\n const [x, y, z] = transformMatrix(MATRIX_LMS_TO_XYZ, xyzLms, true);\n return [\n 'xyz-d65',\n roundToPrecision(x, HEX),\n roundToPrecision(y, HEX),\n roundToPrecision(z, HEX),\n alpha\n ];\n};\n\n/**\n * parse color()\n * @param value - color function value\n * @param [opt] - options\n * @returns parsed color\n * - ['xyz-(d50|d65)', x, y, z, alpha], [cs, r, g, b, alpha]\n * - '(empty)', NullObject\n */\nexport const parseColorFunc = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { colorSpace = '', d50 = false, format = '', nullable = false } = opt;\n if (!REG_FN_COLOR.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n return res;\n }\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n const [, val] = value.match(REG_FN_COLOR) as MatchedRegExp;\n let [cs, v1, v2, v3, v4 = ''] = val\n .replace('/', ' ')\n .split(/\\s+/) as StringColorSpacedChannels;\n let r, g, b;\n if (cs === 'xyz') {\n cs = 'xyz-d65';\n }\n if (v1 === NONE) {\n r = 0;\n } else {\n r = v1.endsWith('%') ? parseFloat(v1) / MAX_PCT : parseFloat(v1);\n }\n if (v2 === NONE) {\n g = 0;\n } else {\n g = v2.endsWith('%') ? parseFloat(v2) / MAX_PCT : parseFloat(v2);\n }\n if (v3 === NONE) {\n b = 0;\n } else {\n b = v3.endsWith('%') ? parseFloat(v3) / MAX_PCT : parseFloat(v3);\n }\n const alpha = parseAlpha(v4);\n if (REG_SPEC.test(format) || (format === VAL_MIX && cs === colorSpace)) {\n return [\n cs,\n v1 === NONE ? v1 : roundToPrecision(r, DEC),\n v2 === NONE ? v2 : roundToPrecision(g, DEC),\n v3 === NONE ? v3 : roundToPrecision(b, DEC),\n v4 === NONE ? v4 : alpha\n ];\n }\n let x = 0;\n let y = 0;\n let z = 0;\n // srgb-linear\n if (cs === 'srgb-linear') {\n [x, y, z] = transformMatrix(MATRIX_L_RGB_TO_XYZ, [r, g, b]);\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n // display-p3\n } else if (cs === 'display-p3') {\n const linearRgb = transformRgbToLinearRgb([\n r * MAX_RGB,\n g * MAX_RGB,\n b * MAX_RGB\n ]);\n [x, y, z] = transformMatrix(MATRIX_P3_TO_XYZ, linearRgb);\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n // rec2020\n } else if (cs === 'rec2020') {\n const ALPHA = 1.09929682680944;\n const BETA = 0.018053968510807;\n const REC_COEF = 0.45;\n const rgb = [r, g, b].map(c => {\n let cl;\n if (c < BETA * REC_COEF * DEC) {\n cl = c / (REC_COEF * DEC);\n } else {\n cl = Math.pow((c + ALPHA - 1) / ALPHA, 1 / REC_COEF);\n }\n return cl;\n }) as TriColorChannels;\n [x, y, z] = transformMatrix(MATRIX_REC2020_TO_XYZ, rgb);\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n // a98-rgb\n } else if (cs === 'a98-rgb') {\n const POW_A98 = 563 / 256;\n const rgb = [r, g, b].map(c => {\n const cl = Math.pow(c, POW_A98);\n return cl;\n }) as TriColorChannels;\n [x, y, z] = transformMatrix(MATRIX_A98_TO_XYZ, rgb);\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n // prophoto-rgb\n } else if (cs === 'prophoto-rgb') {\n const POW_PROPHOTO = 1.8;\n const rgb = [r, g, b].map(c => {\n let cl;\n if (c > 1 / (HEX * DUO)) {\n cl = Math.pow(c, POW_PROPHOTO);\n } else {\n cl = c / HEX;\n }\n return cl;\n }) as TriColorChannels;\n [x, y, z] = transformMatrix(MATRIX_PROPHOTO_TO_XYZ_D50, rgb);\n if (!d50) {\n [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true);\n }\n // xyz, xyz-d50, xyz-d65\n } else if (/^xyz(?:-d(?:50|65))?$/.test(cs)) {\n [x, y, z] = [r, g, b];\n if (cs === 'xyz-d50') {\n if (!d50) {\n [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z]);\n }\n } else if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n // srgb\n } else {\n [x, y, z] = transformRgbToXyz([r * MAX_RGB, g * MAX_RGB, b * MAX_RGB]);\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n }\n return [\n d50 ? 'xyz-d50' : 'xyz-d65',\n roundToPrecision(x, HEX),\n roundToPrecision(y, HEX),\n roundToPrecision(z, HEX),\n format === VAL_MIX && v4 === NONE ? v4 : alpha\n ];\n};\n\n/**\n * parse color value\n * @param value - CSS color value\n * @param [opt] - options\n * @returns parsed color\n * - ['xyz-(d50|d65)', x, y, z, alpha], ['rgb', r, g, b, alpha]\n * - value, '(empty)', NullObject\n */\nexport const parseColorValue = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.toLowerCase().trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { d50 = false, format = '', nullable = false } = opt;\n if (!REG_COLOR.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n return res;\n }\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n let x = 0;\n let y = 0;\n let z = 0;\n let alpha = 0;\n // complement currentcolor as a missing color\n if (REG_CURRENT.test(value)) {\n if (format === VAL_COMP) {\n return ['rgb', 0, 0, 0, 0];\n }\n if (format === VAL_SPEC) {\n return value;\n }\n // named-color\n } else if (/^[a-z]+$/.test(value)) {\n if (Object.hasOwn(NAMED_COLORS, value)) {\n if (format === VAL_SPEC) {\n return value;\n }\n const [r, g, b] = NAMED_COLORS[\n value as keyof typeof NAMED_COLORS\n ] as TriColorChannels;\n alpha = 1;\n if (format === VAL_COMP) {\n return ['rgb', r, g, b, alpha];\n }\n [x, y, z] = transformRgbToXyz([r, g, b], true);\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n } else {\n switch (format) {\n case VAL_COMP: {\n if (nullable && value !== 'transparent') {\n return new NullObject();\n }\n return ['rgb', 0, 0, 0, 0];\n }\n case VAL_SPEC: {\n if (value === 'transparent') {\n return value;\n }\n return '';\n }\n case VAL_MIX: {\n if (value === 'transparent') {\n return ['rgb', 0, 0, 0, 0];\n }\n return new NullObject();\n }\n default:\n }\n }\n // hex-color\n } else if (value[0] === '#') {\n if (REG_SPEC.test(format)) {\n const rgb = convertHexToRgb(value);\n return ['rgb', ...rgb];\n }\n [x, y, z, alpha] = convertHexToXyz(value);\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n // lab()\n } else if (value.startsWith('lab')) {\n if (REG_SPEC.test(format)) {\n return parseLab(value, opt);\n }\n [, x, y, z, alpha] = parseLab(value) as ComputedColorChannels;\n if (!d50) {\n [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true);\n }\n // lch()\n } else if (value.startsWith('lch')) {\n if (REG_SPEC.test(format)) {\n return parseLch(value, opt);\n }\n [, x, y, z, alpha] = parseLch(value) as ComputedColorChannels;\n if (!d50) {\n [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true);\n }\n // oklab()\n } else if (value.startsWith('oklab')) {\n if (REG_SPEC.test(format)) {\n return parseOklab(value, opt);\n }\n [, x, y, z, alpha] = parseOklab(value) as ComputedColorChannels;\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n // oklch()\n } else if (value.startsWith('oklch')) {\n if (REG_SPEC.test(format)) {\n return parseOklch(value, opt);\n }\n [, x, y, z, alpha] = parseOklch(value) as ComputedColorChannels;\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n } else {\n let r, g, b;\n // hsl()\n if (value.startsWith('hsl')) {\n [, r, g, b, alpha] = parseHsl(value) as ComputedColorChannels;\n // hwb()\n } else if (value.startsWith('hwb')) {\n [, r, g, b, alpha] = parseHwb(value) as ComputedColorChannels;\n // rgb()\n } else {\n [, r, g, b, alpha] = parseRgb(value, opt) as ComputedColorChannels;\n }\n if (REG_SPEC.test(format)) {\n return ['rgb', Math.round(r), Math.round(g), Math.round(b), alpha];\n }\n [x, y, z] = transformRgbToXyz([r, g, b]);\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n }\n return [\n d50 ? 'xyz-d50' : 'xyz-d65',\n roundToPrecision(x, HEX),\n roundToPrecision(y, HEX),\n roundToPrecision(z, HEX),\n alpha\n ];\n};\n\n/**\n * resolve color value\n * @param value - CSS color value\n * @param [opt] - options\n * @returns resolved color\n * - [cs, v1, v2, v3, alpha], value, '(empty)', NullObject\n */\nexport const resolveColorValue = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.toLowerCase().trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { colorSpace = '', format = '', nullable = false } = opt;\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'resolveColorValue',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return cachedResult as NullObject;\n }\n const cachedItem = cachedResult.item;\n if (isString(cachedItem)) {\n return cachedItem as string;\n }\n return cachedItem as SpecifiedColorChannels;\n }\n if (!REG_COLOR.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n setCache(cacheKey, null);\n return res;\n }\n setCache(cacheKey, res);\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n let cs = '';\n let r = 0;\n let g = 0;\n let b = 0;\n let alpha = 0;\n // complement currentcolor as a missing color\n if (REG_CURRENT.test(value)) {\n if (format === VAL_SPEC) {\n setCache(cacheKey, value);\n return value;\n }\n // named-color\n } else if (/^[a-z]+$/.test(value)) {\n if (Object.hasOwn(NAMED_COLORS, value)) {\n if (format === VAL_SPEC) {\n setCache(cacheKey, value);\n return value;\n }\n [r, g, b] = NAMED_COLORS[\n value as keyof typeof NAMED_COLORS\n ] as TriColorChannels;\n alpha = 1;\n } else {\n switch (format) {\n case VAL_SPEC: {\n if (value === 'transparent') {\n setCache(cacheKey, value);\n return value;\n }\n const res = '';\n setCache(cacheKey, res);\n return res;\n }\n case VAL_MIX: {\n if (value === 'transparent') {\n const res: SpecifiedColorChannels = ['rgb', 0, 0, 0, 0];\n setCache(cacheKey, res);\n return res;\n }\n setCache(cacheKey, null);\n return new NullObject();\n }\n case VAL_COMP:\n default: {\n if (nullable && value !== 'transparent') {\n setCache(cacheKey, null);\n return new NullObject();\n }\n const res: SpecifiedColorChannels = ['rgb', 0, 0, 0, 0];\n setCache(cacheKey, res);\n return res;\n }\n }\n }\n // hex-color\n } else if (value[0] === '#') {\n [r, g, b, alpha] = convertHexToRgb(value);\n // hsl()\n } else if (value.startsWith('hsl')) {\n [, r, g, b, alpha] = parseHsl(value, opt) as ComputedColorChannels;\n // hwb()\n } else if (value.startsWith('hwb')) {\n [, r, g, b, alpha] = parseHwb(value, opt) as ComputedColorChannels;\n // lab(), lch()\n } else if (/^l(?:ab|ch)/.test(value)) {\n let x, y, z;\n if (value.startsWith('lab')) {\n [cs, x, y, z, alpha] = parseLab(value, opt) as ComputedColorChannels;\n } else {\n [cs, x, y, z, alpha] = parseLch(value, opt) as ComputedColorChannels;\n }\n if (REG_SPEC.test(format)) {\n const res: SpecifiedColorChannels = [cs, x, y, z, alpha];\n setCache(cacheKey, res);\n return res;\n }\n [r, g, b] = transformXyzD50ToRgb([x, y, z]);\n // oklab(), oklch()\n } else if (/^okl(?:ab|ch)/.test(value)) {\n let x, y, z;\n if (value.startsWith('oklab')) {\n [cs, x, y, z, alpha] = parseOklab(value, opt) as ComputedColorChannels;\n } else {\n [cs, x, y, z, alpha] = parseOklch(value, opt) as ComputedColorChannels;\n }\n if (REG_SPEC.test(format)) {\n const res: SpecifiedColorChannels = [cs, x, y, z, alpha];\n setCache(cacheKey, res);\n return res;\n }\n [r, g, b] = transformXyzToRgb([x, y, z]);\n // rgb()\n } else {\n [, r, g, b, alpha] = parseRgb(value, opt) as ComputedColorChannels;\n }\n if (format === VAL_MIX && colorSpace === 'srgb') {\n const res: SpecifiedColorChannels = [\n 'srgb',\n r / MAX_RGB,\n g / MAX_RGB,\n b / MAX_RGB,\n alpha\n ];\n setCache(cacheKey, res);\n return res;\n }\n const res: SpecifiedColorChannels = [\n 'rgb',\n Math.round(r),\n Math.round(g),\n Math.round(b),\n alpha\n ];\n setCache(cacheKey, res);\n return res;\n};\n\n/**\n * resolve color()\n * @param value - color function value\n * @param [opt] - options\n * @returns resolved color - [cs, v1, v2, v3, alpha], '(empty)', NullObject\n */\nexport const resolveColorFunc = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.toLowerCase().trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { colorSpace = '', format = '', nullable = false } = opt;\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'resolveColorFunc',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return cachedResult as NullObject;\n }\n const cachedItem = cachedResult.item;\n if (isString(cachedItem)) {\n return cachedItem as string;\n }\n return cachedItem as SpecifiedColorChannels;\n }\n if (!REG_FN_COLOR.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n setCache(cacheKey, null);\n return res;\n }\n setCache(cacheKey, res);\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n const [cs, v1, v2, v3, v4] = parseColorFunc(\n value,\n opt\n ) as SpecifiedColorChannels;\n if (REG_SPEC.test(format) || (format === VAL_MIX && cs === colorSpace)) {\n const res: SpecifiedColorChannels = [cs, v1, v2, v3, v4];\n setCache(cacheKey, res);\n return res;\n }\n const x = parseFloat(`${v1}`);\n const y = parseFloat(`${v2}`);\n const z = parseFloat(`${v3}`);\n const alpha = parseAlpha(`${v4}`);\n const [r, g, b] = transformXyzToRgb([x, y, z], true);\n const res: SpecifiedColorChannels = ['rgb', r, g, b, alpha];\n setCache(cacheKey, res);\n return res;\n};\n\n/**\n * convert color value to linear rgb\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels | NullObject - [r, g, b, alpha] r|g|b|alpha: 0..1\n */\nexport const convertColorToLinearRgb = (\n value: string,\n opt: {\n colorSpace?: string;\n format?: string;\n } = {}\n): ColorChannels | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { colorSpace = '', format = '' } = opt;\n let cs = '';\n let r, g, b, alpha, x, y, z;\n if (format === VAL_MIX) {\n let xyz;\n if (value.startsWith(FN_COLOR)) {\n xyz = parseColorFunc(value, opt);\n } else {\n xyz = parseColorValue(value, opt);\n }\n if (xyz instanceof NullObject) {\n return xyz;\n }\n [cs, x, y, z, alpha] = xyz as ComputedColorChannels;\n if (cs === colorSpace) {\n return [x, y, z, alpha];\n }\n [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true);\n } else if (value.startsWith(FN_COLOR)) {\n const [, val] = value.match(REG_FN_COLOR) as MatchedRegExp;\n const [cs] = val\n .replace('/', ' ')\n .split(/\\s+/) as StringColorSpacedChannels;\n if (cs === 'srgb-linear') {\n [, r, g, b, alpha] = resolveColorFunc(value, {\n format: VAL_COMP\n }) as ComputedColorChannels;\n } else {\n [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;\n [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true);\n }\n } else {\n [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels;\n [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true);\n }\n return [\n Math.min(Math.max(r, 0), 1),\n Math.min(Math.max(g, 0), 1),\n Math.min(Math.max(b, 0), 1),\n alpha\n ];\n};\n\n/**\n * convert color value to rgb\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels | NullObject\n * - [r, g, b, alpha] r|g|b: 0..255 alpha: 0..1\n */\nexport const convertColorToRgb = (\n value: string,\n opt: Options = {}\n): ColorChannels | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '' } = opt;\n let r, g, b, alpha;\n if (format === VAL_MIX) {\n let rgb;\n if (value.startsWith(FN_COLOR)) {\n rgb = resolveColorFunc(value, opt);\n } else {\n rgb = resolveColorValue(value, opt);\n }\n if (rgb instanceof NullObject) {\n return rgb;\n }\n [, r, g, b, alpha] = rgb as ComputedColorChannels;\n } else if (value.startsWith(FN_COLOR)) {\n const [, val] = value.match(REG_FN_COLOR) as MatchedRegExp;\n const [cs] = val\n .replace('/', ' ')\n .split(/\\s+/) as StringColorSpacedChannels;\n if (cs === 'srgb') {\n [, r, g, b, alpha] = resolveColorFunc(value, {\n format: VAL_COMP\n }) as ComputedColorChannels;\n r *= MAX_RGB;\n g *= MAX_RGB;\n b *= MAX_RGB;\n } else {\n [, r, g, b, alpha] = resolveColorFunc(value) as ComputedColorChannels;\n }\n } else if (/^(?:ok)?l(?:ab|ch)/.test(value)) {\n [r, g, b, alpha] = convertColorToLinearRgb(value) as ColorChannels;\n [r, g, b] = transformLinearRgbToRgb([r, g, b]);\n } else {\n [, r, g, b, alpha] = resolveColorValue(value, {\n format: VAL_COMP\n }) as ComputedColorChannels;\n }\n return [r, g, b, alpha];\n};\n\n/**\n * convert color value to xyz\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels | NullObject - [x, y, z, alpha]\n */\nexport const convertColorToXyz = (\n value: string,\n opt: Options = {}\n): ColorChannels | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { d50 = false, format = '' } = opt;\n let x, y, z, alpha;\n if (format === VAL_MIX) {\n let xyz;\n if (value.startsWith(FN_COLOR)) {\n xyz = parseColorFunc(value, opt);\n } else {\n xyz = parseColorValue(value, opt);\n }\n if (xyz instanceof NullObject) {\n return xyz;\n }\n [, x, y, z, alpha] = xyz as ComputedColorChannels;\n } else if (value.startsWith(FN_COLOR)) {\n const [, val] = value.match(REG_FN_COLOR) as MatchedRegExp;\n const [cs] = val\n .replace('/', ' ')\n .split(/\\s+/) as StringColorSpacedChannels;\n if (d50) {\n if (cs === 'xyz-d50') {\n [, x, y, z, alpha] = resolveColorFunc(value, {\n format: VAL_COMP\n }) as ComputedColorChannels;\n } else {\n [, x, y, z, alpha] = parseColorFunc(\n value,\n opt\n ) as ComputedColorChannels;\n }\n } else if (/^xyz(?:-d65)?$/.test(cs)) {\n [, x, y, z, alpha] = resolveColorFunc(value, {\n format: VAL_COMP\n }) as ComputedColorChannels;\n } else {\n [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;\n }\n } else {\n [, x, y, z, alpha] = parseColorValue(value, opt) as ComputedColorChannels;\n }\n return [x, y, z, alpha];\n};\n\n/**\n * convert color value to hsl\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels | NullObject - [h, s, l, alpha], hue may be powerless\n */\nexport const convertColorToHsl = (\n value: string,\n opt: Options = {}\n): ColorChannels | [number | string, number, number, number] | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '' } = opt;\n let h, s, l, alpha;\n if (REG_HSL.test(value)) {\n [, h, s, l, alpha] = parseHsl(value, {\n format: 'hsl'\n }) as ComputedColorChannels;\n if (format === 'hsl') {\n return [Math.round(h), Math.round(s), Math.round(l), alpha];\n }\n return [h, s, l, alpha];\n }\n let x, y, z;\n if (format === VAL_MIX) {\n let xyz;\n if (value.startsWith(FN_COLOR)) {\n xyz = parseColorFunc(value, opt);\n } else {\n xyz = parseColorValue(value, opt);\n }\n if (xyz instanceof NullObject) {\n return xyz;\n }\n [, x, y, z, alpha] = xyz as ComputedColorChannels;\n } else if (value.startsWith(FN_COLOR)) {\n [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;\n } else {\n [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels;\n }\n [h, s, l] = transformXyzToHsl([x, y, z], true) as TriColorChannels;\n if (format === 'hsl') {\n return [Math.round(h), Math.round(s), Math.round(l), alpha];\n }\n return [format === VAL_MIX && s === 0 ? NONE : h, s, l, alpha];\n};\n\n/**\n * convert color value to hwb\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels | NullObject - [h, w, b, alpha], hue may be powerless\n */\nexport const convertColorToHwb = (\n value: string,\n opt: Options = {}\n): ColorChannels | [number | string, number, number, number] | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '' } = opt;\n let h, w, b, alpha;\n if (REG_HWB.test(value)) {\n [, h, w, b, alpha] = parseHwb(value, {\n format: 'hwb'\n }) as ComputedColorChannels;\n if (format === 'hwb') {\n return [Math.round(h), Math.round(w), Math.round(b), alpha];\n }\n return [h, w, b, alpha];\n }\n let x, y, z;\n if (format === VAL_MIX) {\n let xyz;\n if (value.startsWith(FN_COLOR)) {\n xyz = parseColorFunc(value, opt);\n } else {\n xyz = parseColorValue(value, opt);\n }\n if (xyz instanceof NullObject) {\n return xyz;\n }\n [, x, y, z, alpha] = xyz as ComputedColorChannels;\n } else if (value.startsWith(FN_COLOR)) {\n [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;\n } else {\n [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels;\n }\n [h, w, b] = transformXyzToHwb([x, y, z], true) as TriColorChannels;\n if (format === 'hwb') {\n return [Math.round(h), Math.round(w), Math.round(b), alpha];\n }\n return [format === VAL_MIX && w + b >= 100 ? NONE : h, w, b, alpha];\n};\n\n/**\n * convert color value to lab\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels | NullObject - [l, a, b, alpha]\n */\nexport const convertColorToLab = (\n value: string,\n opt: Options = {}\n): ColorChannels | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '' } = opt;\n let l, a, b, alpha;\n if (REG_LAB.test(value)) {\n [, l, a, b, alpha] = parseLab(value, {\n format: VAL_COMP\n }) as ComputedColorChannels;\n return [l, a, b, alpha];\n }\n let x, y, z;\n if (format === VAL_MIX) {\n let xyz;\n opt.d50 = true;\n if (value.startsWith(FN_COLOR)) {\n xyz = parseColorFunc(value, opt);\n } else {\n xyz = parseColorValue(value, opt);\n }\n if (xyz instanceof NullObject) {\n return xyz;\n }\n [, x, y, z, alpha] = xyz as ComputedColorChannels;\n } else if (value.startsWith(FN_COLOR)) {\n [, x, y, z, alpha] = parseColorFunc(value, {\n d50: true\n }) as ComputedColorChannels;\n } else {\n [, x, y, z, alpha] = parseColorValue(value, {\n d50: true\n }) as ComputedColorChannels;\n }\n [l, a, b] = transformXyzD50ToLab([x, y, z], true);\n return [l, a, b, alpha];\n};\n\n/**\n * convert color value to lch\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels | NullObject - [l, c, h, alpha], hue may be powerless\n */\nexport const convertColorToLch = (\n value: string,\n opt: Options = {}\n): ColorChannels | [number, number, number | string, number] | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '' } = opt;\n let l, c, h, alpha;\n if (REG_LCH.test(value)) {\n [, l, c, h, alpha] = parseLch(value, {\n format: VAL_COMP\n }) as ComputedColorChannels;\n return [l, c, h, alpha];\n }\n let x, y, z;\n if (format === VAL_MIX) {\n let xyz;\n opt.d50 = true;\n if (value.startsWith(FN_COLOR)) {\n xyz = parseColorFunc(value, opt);\n } else {\n xyz = parseColorValue(value, opt);\n }\n if (xyz instanceof NullObject) {\n return xyz;\n }\n [, x, y, z, alpha] = xyz as ComputedColorChannels;\n } else if (value.startsWith(FN_COLOR)) {\n [, x, y, z, alpha] = parseColorFunc(value, {\n d50: true\n }) as ComputedColorChannels;\n } else {\n [, x, y, z, alpha] = parseColorValue(value, {\n d50: true\n }) as ComputedColorChannels;\n }\n [l, c, h] = transformXyzD50ToLch([x, y, z], true);\n return [l, c, format === VAL_MIX && c === 0 ? NONE : h, alpha];\n};\n\n/**\n * convert color value to oklab\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels | NullObject - [l, a, b, alpha]\n */\nexport const convertColorToOklab = (\n value: string,\n opt: Options = {}\n): ColorChannels | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '' } = opt;\n let l, a, b, alpha;\n if (REG_OKLAB.test(value)) {\n [, l, a, b, alpha] = parseOklab(value, {\n format: VAL_COMP\n }) as ComputedColorChannels;\n return [l, a, b, alpha];\n }\n let x, y, z;\n if (format === VAL_MIX) {\n let xyz;\n if (value.startsWith(FN_COLOR)) {\n xyz = parseColorFunc(value, opt);\n } else {\n xyz = parseColorValue(value, opt);\n }\n if (xyz instanceof NullObject) {\n return xyz;\n }\n [, x, y, z, alpha] = xyz as ComputedColorChannels;\n } else if (value.startsWith(FN_COLOR)) {\n [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;\n } else {\n [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels;\n }\n [l, a, b] = transformXyzToOklab([x, y, z], true);\n return [l, a, b, alpha];\n};\n\n/**\n * convert color value to oklch\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels | NullObject - [l, c, h, alpha], hue may be powerless\n */\nexport const convertColorToOklch = (\n value: string,\n opt: Options = {}\n): ColorChannels | [number, number, number | string, number] | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '' } = opt;\n let l, c, h, alpha;\n if (REG_OKLCH.test(value)) {\n [, l, c, h, alpha] = parseOklch(value, {\n format: VAL_COMP\n }) as ComputedColorChannels;\n return [l, c, h, alpha];\n }\n let x, y, z;\n if (format === VAL_MIX) {\n let xyz;\n if (value.startsWith(FN_COLOR)) {\n xyz = parseColorFunc(value, opt);\n } else {\n xyz = parseColorValue(value, opt);\n }\n if (xyz instanceof NullObject) {\n return xyz;\n }\n [, x, y, z, alpha] = xyz as ComputedColorChannels;\n } else if (value.startsWith(FN_COLOR)) {\n [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;\n } else {\n [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels;\n }\n [l, c, h] = transformXyzToOklch([x, y, z], true) as TriColorChannels;\n return [l, c, format === VAL_MIX && c === 0 ? NONE : h, alpha];\n};\n\n/**\n * resolve color-mix()\n * @param value - color-mix color value\n * @param [opt] - options\n * @returns resolved color - [cs, v1, v2, v3, alpha], '(empty)'\n */\nexport const resolveColorMix = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.toLowerCase().trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '', nullable = false } = opt;\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'resolveColorMix',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return cachedResult as NullObject;\n }\n const cachedItem = cachedResult.item;\n if (isString(cachedItem)) {\n return cachedItem as string;\n }\n return cachedItem as SpecifiedColorChannels;\n }\n const nestedItems = [];\n let colorSpace = '';\n let hueArc = '';\n let colorA = '';\n let pctA = '';\n let colorB = '';\n let pctB = '';\n let parsed = false;\n if (!REG_MIX.test(value)) {\n // nested color-mix()\n if (value.startsWith(FN_MIX) && REG_MIX_NEST.test(value)) {\n const regColorSpace = new RegExp(`^(?:${CS_RGB}|${CS_XYZ})$`);\n const items = value.match(REG_MIX_NEST) as RegExpMatchArray;\n for (const item of items) {\n if (item) {\n let val = resolveColorMix(item, {\n format: format === VAL_SPEC ? format : VAL_COMP\n }) as ComputedColorChannels | string;\n // computed value\n if (Array.isArray(val)) {\n const [cs, v1, v2, v3, v4] = val as ComputedColorChannels;\n if (v1 === 0 && v2 === 0 && v3 === 0 && v4 === 0) {\n value = '';\n break;\n }\n if (regColorSpace.test(cs)) {\n if (v4 === 1) {\n val = `color(${cs} ${v1} ${v2} ${v3})`;\n } else {\n val = `color(${cs} ${v1} ${v2} ${v3} / ${v4})`;\n }\n } else if (v4 === 1) {\n val = `${cs}(${v1} ${v2} ${v3})`;\n } else {\n val = `${cs}(${v1} ${v2} ${v3} / ${v4})`;\n }\n } else if (!REG_MIX.test(val)) {\n value = '';\n break;\n }\n nestedItems.push(val);\n value = value.replace(item, val);\n }\n }\n if (!value) {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n // contains light-dark()\n } else if (\n value.startsWith(FN_MIX) &&\n value.endsWith(')') &&\n value.includes(FN_LIGHT_DARK)\n ) {\n const regColorSpace = new RegExp(`in\\\\s+(${CS_MIX})`);\n const colorParts = value.replace(FN_MIX, '').replace(/\\)$/, '');\n const [csPart = '', partA = '', partB = ''] = splitValue(colorParts, {\n delimiter: ','\n });\n const [colorPartA = '', pctPartA = ''] = splitValue(partA);\n const [colorPartB = '', pctPartB = ''] = splitValue(partB);\n const specifiedColorA = resolveColor(colorPartA, {\n format: VAL_SPEC\n }) as string;\n const specifiedColorB = resolveColor(colorPartB, {\n format: VAL_SPEC\n }) as string;\n if (regColorSpace.test(csPart) && specifiedColorA && specifiedColorB) {\n if (format === VAL_SPEC) {\n const [, cs] = csPart.match(regColorSpace) as MatchedRegExp;\n if (REG_CS_HUE.test(cs)) {\n [, colorSpace, hueArc] = cs.match(REG_CS_HUE) as MatchedRegExp;\n } else {\n colorSpace = cs;\n }\n colorA = specifiedColorA;\n if (pctPartA) {\n pctA = pctPartA;\n }\n colorB = specifiedColorB;\n if (pctPartB) {\n pctB = pctPartB;\n }\n value = value\n .replace(colorPartA, specifiedColorA)\n .replace(colorPartB, specifiedColorB);\n parsed = true;\n } else {\n const resolvedColorA = resolveColor(colorPartA, opt);\n const resolvedColorB = resolveColor(colorPartB, opt);\n if (isString(resolvedColorA) && isString(resolvedColorB)) {\n value = value\n .replace(colorPartA, resolvedColorA)\n .replace(colorPartB, resolvedColorB);\n }\n }\n } else {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n } else {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n }\n if (nestedItems.length && format === VAL_SPEC) {\n const regColorSpace = new RegExp(`^color-mix\\\\(\\\\s*in\\\\s+(${CS_MIX})\\\\s*,`);\n const [, cs] = value.match(regColorSpace) as MatchedRegExp;\n if (REG_CS_HUE.test(cs)) {\n [, colorSpace, hueArc] = cs.match(REG_CS_HUE) as MatchedRegExp;\n } else {\n colorSpace = cs;\n }\n if (nestedItems.length === 2) {\n let [itemA, itemB] = nestedItems as [string, string];\n itemA = itemA.replace(/(?=[()])/g, '\\\\');\n itemB = itemB.replace(/(?=[()])/g, '\\\\');\n const regA = new RegExp(`(${itemA})(?:\\\\s+(${PCT}))?`);\n const regB = new RegExp(`(${itemB})(?:\\\\s+(${PCT}))?`);\n [, colorA, pctA] = value.match(regA) as MatchedRegExp;\n [, colorB, pctB] = value.match(regB) as MatchedRegExp;\n } else {\n let [item] = nestedItems as [string];\n item = item.replace(/(?=[()])/g, '\\\\');\n const itemPart = `${item}(?:\\\\s+${PCT})?`;\n const itemPartCapt = `(${item})(?:\\\\s+(${PCT}))?`;\n const regItemPart = new RegExp(`^${itemPartCapt}$`);\n const regLastItem = new RegExp(`${itemPartCapt}\\\\s*\\\\)$`);\n const regColorPart = new RegExp(`^(${SYN_COLOR_TYPE})(?:\\\\s+(${PCT}))?$`);\n // item is at the end\n if (regLastItem.test(value)) {\n const reg = new RegExp(\n `(${SYN_MIX_PART})\\\\s*,\\\\s*(${itemPart})\\\\s*\\\\)$`\n );\n const [, colorPartA, colorPartB] = value.match(reg) as MatchedRegExp;\n [, colorA, pctA] = colorPartA.match(regColorPart) as MatchedRegExp;\n [, colorB, pctB] = colorPartB.match(regItemPart) as MatchedRegExp;\n } else {\n const reg = new RegExp(\n `(${itemPart})\\\\s*,\\\\s*(${SYN_MIX_PART})\\\\s*\\\\)$`\n );\n const [, colorPartA, colorPartB] = value.match(reg) as MatchedRegExp;\n [, colorA, pctA] = colorPartA.match(regItemPart) as MatchedRegExp;\n [, colorB, pctB] = colorPartB.match(regColorPart) as MatchedRegExp;\n }\n }\n } else if (!parsed) {\n const [, cs, colorPartA, colorPartB] = value.match(\n REG_MIX_CAPT\n ) as MatchedRegExp;\n const reg = new RegExp(`^(${SYN_COLOR_TYPE})(?:\\\\s+(${PCT}))?$`);\n [, colorA, pctA] = colorPartA.match(reg) as MatchedRegExp;\n [, colorB, pctB] = colorPartB.match(reg) as MatchedRegExp;\n if (REG_CS_HUE.test(cs)) {\n [, colorSpace, hueArc] = cs.match(REG_CS_HUE) as MatchedRegExp;\n } else {\n colorSpace = cs;\n }\n }\n // normalize percentages and set multipler\n let pA, pB, m;\n if (pctA && pctB) {\n const p1 = parseFloat(pctA) / MAX_PCT;\n const p2 = parseFloat(pctB) / MAX_PCT;\n if (p1 < 0 || p1 > 1 || p2 < 0 || p2 > 1 || (p1 === 0 && p2 === 0)) {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n const factor = p1 + p2;\n pA = p1 / factor;\n pB = p2 / factor;\n m = factor < 1 ? factor : 1;\n } else {\n if (pctA) {\n pA = parseFloat(pctA) / MAX_PCT;\n if (pA < 0 || pA > 1) {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n pB = 1 - pA;\n } else if (pctB) {\n pB = parseFloat(pctB) / MAX_PCT;\n if (pB < 0 || pB > 1) {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n pA = 1 - pB;\n } else {\n pA = HALF;\n pB = HALF;\n }\n m = 1;\n }\n if (colorSpace === 'xyz') {\n colorSpace = 'xyz-d65';\n }\n // specified value\n if (format === VAL_SPEC) {\n let valueA = '';\n let valueB = '';\n if (colorA.startsWith(FN_MIX) || colorA.startsWith(FN_LIGHT_DARK)) {\n valueA = colorA;\n } else if (colorA.startsWith(FN_COLOR)) {\n const [cs, v1, v2, v3, v4] = parseColorFunc(\n colorA,\n opt\n ) as SpecifiedColorChannels;\n if (v4 === 1) {\n valueA = `color(${cs} ${v1} ${v2} ${v3})`;\n } else {\n valueA = `color(${cs} ${v1} ${v2} ${v3} / ${v4})`;\n }\n } else {\n const val = parseColorValue(colorA, opt);\n if (Array.isArray(val)) {\n const [cs, v1, v2, v3, v4] = val;\n if (v4 === 1) {\n if (cs === 'rgb') {\n valueA = `${cs}(${v1}, ${v2}, ${v3})`;\n } else {\n valueA = `${cs}(${v1} ${v2} ${v3})`;\n }\n } else if (cs === 'rgb') {\n valueA = `${cs}a(${v1}, ${v2}, ${v3}, ${v4})`;\n } else {\n valueA = `${cs}(${v1} ${v2} ${v3} / ${v4})`;\n }\n } else {\n if (!isString(val) || !val) {\n setCache(cacheKey, '');\n return '';\n }\n valueA = val;\n }\n }\n if (colorB.startsWith(FN_MIX) || colorB.startsWith(FN_LIGHT_DARK)) {\n valueB = colorB;\n } else if (colorB.startsWith(FN_COLOR)) {\n const [cs, v1, v2, v3, v4] = parseColorFunc(\n colorB,\n opt\n ) as SpecifiedColorChannels;\n if (v4 === 1) {\n valueB = `color(${cs} ${v1} ${v2} ${v3})`;\n } else {\n valueB = `color(${cs} ${v1} ${v2} ${v3} / ${v4})`;\n }\n } else {\n const val = parseColorValue(colorB, opt);\n if (Array.isArray(val)) {\n const [cs, v1, v2, v3, v4] = val;\n if (v4 === 1) {\n if (cs === 'rgb') {\n valueB = `${cs}(${v1}, ${v2}, ${v3})`;\n } else {\n valueB = `${cs}(${v1} ${v2} ${v3})`;\n }\n } else if (cs === 'rgb') {\n valueB = `${cs}a(${v1}, ${v2}, ${v3}, ${v4})`;\n } else {\n valueB = `${cs}(${v1} ${v2} ${v3} / ${v4})`;\n }\n } else {\n if (!isString(val) || !val) {\n setCache(cacheKey, '');\n return '';\n }\n valueB = val;\n }\n }\n if (pctA && pctB) {\n valueA += ` ${parseFloat(pctA)}%`;\n valueB += ` ${parseFloat(pctB)}%`;\n } else if (pctA) {\n const pA = parseFloat(pctA);\n if (pA !== MAX_PCT * HALF) {\n valueA += ` ${pA}%`;\n }\n } else if (pctB) {\n const pA = MAX_PCT - parseFloat(pctB);\n if (pA !== MAX_PCT * HALF) {\n valueA += ` ${pA}%`;\n }\n }\n if (hueArc) {\n const res = `color-mix(in ${colorSpace} ${hueArc} hue, ${valueA}, ${valueB})`;\n setCache(cacheKey, res);\n return res;\n } else {\n const res = `color-mix(in ${colorSpace}, ${valueA}, ${valueB})`;\n setCache(cacheKey, res);\n return res;\n }\n }\n let r = 0;\n let g = 0;\n let b = 0;\n let alpha = 0;\n // in srgb, srgb-linear\n if (/^srgb(?:-linear)?$/.test(colorSpace)) {\n let rgbA, rgbB;\n if (colorSpace === 'srgb') {\n if (REG_CURRENT.test(colorA)) {\n rgbA = [NONE, NONE, NONE, NONE];\n } else {\n rgbA = convertColorToRgb(colorA, {\n colorSpace,\n format: VAL_MIX\n });\n }\n if (REG_CURRENT.test(colorB)) {\n rgbB = [NONE, NONE, NONE, NONE];\n } else {\n rgbB = convertColorToRgb(colorB, {\n colorSpace,\n format: VAL_MIX\n });\n }\n } else {\n if (REG_CURRENT.test(colorA)) {\n rgbA = [NONE, NONE, NONE, NONE];\n } else {\n rgbA = convertColorToLinearRgb(colorA, {\n colorSpace,\n format: VAL_MIX\n });\n }\n if (REG_CURRENT.test(colorB)) {\n rgbB = [NONE, NONE, NONE, NONE];\n } else {\n rgbB = convertColorToLinearRgb(colorB, {\n colorSpace,\n format: VAL_MIX\n });\n }\n }\n if (rgbA instanceof NullObject || rgbB instanceof NullObject) {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n const [rrA, ggA, bbA, aaA] = rgbA as NumStrColorChannels;\n const [rrB, ggB, bbB, aaB] = rgbB as NumStrColorChannels;\n const rNone = rrA === NONE && rrB === NONE;\n const gNone = ggA === NONE && ggB === NONE;\n const bNone = bbA === NONE && bbB === NONE;\n const alphaNone = aaA === NONE && aaB === NONE;\n const [[rA, gA, bA, alphaA], [rB, gB, bB, alphaB]] =\n normalizeColorComponents(\n [rrA, ggA, bbA, aaA],\n [rrB, ggB, bbB, aaB],\n true\n );\n const factorA = alphaA * pA;\n const factorB = alphaB * pB;\n alpha = factorA + factorB;\n if (alpha === 0) {\n r = rA * pA + rB * pB;\n g = gA * pA + gB * pB;\n b = bA * pA + bB * pB;\n } else {\n r = (rA * factorA + rB * factorB) / alpha;\n g = (gA * factorA + gB * factorB) / alpha;\n b = (bA * factorA + bB * factorB) / alpha;\n alpha = parseFloat(alpha.toFixed(3));\n }\n if (format === VAL_COMP) {\n const res: SpecifiedColorChannels = [\n colorSpace,\n rNone ? NONE : roundToPrecision(r, HEX),\n gNone ? NONE : roundToPrecision(g, HEX),\n bNone ? NONE : roundToPrecision(b, HEX),\n alphaNone ? NONE : alpha * m\n ];\n setCache(cacheKey, res);\n return res;\n }\n r *= MAX_RGB;\n g *= MAX_RGB;\n b *= MAX_RGB;\n // in xyz, xyz-d65, xyz-d50\n } else if (REG_CS_XYZ.test(colorSpace)) {\n let xyzA, xyzB;\n if (REG_CURRENT.test(colorA)) {\n xyzA = [NONE, NONE, NONE, NONE];\n } else {\n xyzA = convertColorToXyz(colorA, {\n colorSpace,\n d50: colorSpace === 'xyz-d50',\n format: VAL_MIX\n });\n }\n if (REG_CURRENT.test(colorB)) {\n xyzB = [NONE, NONE, NONE, NONE];\n } else {\n xyzB = convertColorToXyz(colorB, {\n colorSpace,\n d50: colorSpace === 'xyz-d50',\n format: VAL_MIX\n });\n }\n if (xyzA instanceof NullObject || xyzB instanceof NullObject) {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n const [xxA, yyA, zzA, aaA] = xyzA;\n const [xxB, yyB, zzB, aaB] = xyzB;\n const xNone = xxA === NONE && xxB === NONE;\n const yNone = yyA === NONE && yyB === NONE;\n const zNone = zzA === NONE && zzB === NONE;\n const alphaNone = aaA === NONE && aaB === NONE;\n const [[xA, yA, zA, alphaA], [xB, yB, zB, alphaB]] =\n normalizeColorComponents(\n [xxA, yyA, zzA, aaA],\n [xxB, yyB, zzB, aaB],\n true\n );\n const factorA = alphaA * pA;\n const factorB = alphaB * pB;\n alpha = factorA + factorB;\n let x, y, z;\n if (alpha === 0) {\n x = xA * pA + xB * pB;\n y = yA * pA + yB * pB;\n z = zA * pA + zB * pB;\n } else {\n x = (xA * factorA + xB * factorB) / alpha;\n y = (yA * factorA + yB * factorB) / alpha;\n z = (zA * factorA + zB * factorB) / alpha;\n alpha = parseFloat(alpha.toFixed(3));\n }\n if (format === VAL_COMP) {\n const res: SpecifiedColorChannels = [\n colorSpace,\n xNone ? NONE : roundToPrecision(x, HEX),\n yNone ? NONE : roundToPrecision(y, HEX),\n zNone ? NONE : roundToPrecision(z, HEX),\n alphaNone ? NONE : alpha * m\n ];\n setCache(cacheKey, res);\n return res;\n }\n if (colorSpace === 'xyz-d50') {\n [r, g, b] = transformXyzD50ToRgb([x, y, z], true);\n } else {\n [r, g, b] = transformXyzToRgb([x, y, z], true);\n }\n // in hsl, hwb\n } else if (/^h(?:sl|wb)$/.test(colorSpace)) {\n let hslA, hslB;\n if (colorSpace === 'hsl') {\n if (REG_CURRENT.test(colorA)) {\n hslA = [NONE, NONE, NONE, NONE];\n } else {\n hslA = convertColorToHsl(colorA, {\n colorSpace,\n format: VAL_MIX\n });\n }\n if (REG_CURRENT.test(colorB)) {\n hslB = [NONE, NONE, NONE, NONE];\n } else {\n hslB = convertColorToHsl(colorB, {\n colorSpace,\n format: VAL_MIX\n });\n }\n } else {\n if (REG_CURRENT.test(colorA)) {\n hslA = [NONE, NONE, NONE, NONE];\n } else {\n hslA = convertColorToHwb(colorA, {\n colorSpace,\n format: VAL_MIX\n });\n }\n if (REG_CURRENT.test(colorB)) {\n hslB = [NONE, NONE, NONE, NONE];\n } else {\n hslB = convertColorToHwb(colorB, {\n colorSpace,\n format: VAL_MIX\n });\n }\n }\n if (hslA instanceof NullObject || hslB instanceof NullObject) {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n const [hhA, ssA, llA, aaA] = hslA;\n const [hhB, ssB, llB, aaB] = hslB;\n const alphaNone = aaA === NONE && aaB === NONE;\n let [[hA, sA, lA, alphaA], [hB, sB, lB, alphaB]] = normalizeColorComponents(\n [hhA, ssA, llA, aaA],\n [hhB, ssB, llB, aaB],\n true\n );\n if (hueArc) {\n [hA, hB] = interpolateHue(hA, hB, hueArc);\n }\n const factorA = alphaA * pA;\n const factorB = alphaB * pB;\n alpha = factorA + factorB;\n const h = (hA * pA + hB * pB) % DEG;\n let s, l;\n if (alpha === 0) {\n s = sA * pA + sB * pB;\n l = lA * pA + lB * pB;\n } else {\n s = (sA * factorA + sB * factorB) / alpha;\n l = (lA * factorA + lB * factorB) / alpha;\n alpha = parseFloat(alpha.toFixed(3));\n }\n [r, g, b] = convertColorToRgb(\n `${colorSpace}(${h} ${s} ${l})`\n ) as ColorChannels;\n if (format === VAL_COMP) {\n const res: SpecifiedColorChannels = [\n 'srgb',\n roundToPrecision(r / MAX_RGB, HEX),\n roundToPrecision(g / MAX_RGB, HEX),\n roundToPrecision(b / MAX_RGB, HEX),\n alphaNone ? NONE : alpha * m\n ];\n setCache(cacheKey, res);\n return res;\n }\n // in lch, oklch\n } else if (/^(?:ok)?lch$/.test(colorSpace)) {\n let lchA, lchB;\n if (colorSpace === 'lch') {\n if (REG_CURRENT.test(colorA)) {\n lchA = [NONE, NONE, NONE, NONE];\n } else {\n lchA = convertColorToLch(colorA, {\n colorSpace,\n format: VAL_MIX\n });\n }\n if (REG_CURRENT.test(colorB)) {\n lchB = [NONE, NONE, NONE, NONE];\n } else {\n lchB = convertColorToLch(colorB, {\n colorSpace,\n format: VAL_MIX\n });\n }\n } else {\n if (REG_CURRENT.test(colorA)) {\n lchA = [NONE, NONE, NONE, NONE];\n } else {\n lchA = convertColorToOklch(colorA, {\n colorSpace,\n format: VAL_MIX\n });\n }\n if (REG_CURRENT.test(colorB)) {\n lchB = [NONE, NONE, NONE, NONE];\n } else {\n lchB = convertColorToOklch(colorB, {\n colorSpace,\n format: VAL_MIX\n });\n }\n }\n if (lchA instanceof NullObject || lchB instanceof NullObject) {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n const [llA, ccA, hhA, aaA] = lchA;\n const [llB, ccB, hhB, aaB] = lchB;\n const lNone = llA === NONE && llB === NONE;\n const cNone = ccA === NONE && ccB === NONE;\n const hNone = hhA === NONE && hhB === NONE;\n const alphaNone = aaA === NONE && aaB === NONE;\n let [[lA, cA, hA, alphaA], [lB, cB, hB, alphaB]] = normalizeColorComponents(\n [llA, ccA, hhA, aaA],\n [llB, ccB, hhB, aaB],\n true\n );\n if (hueArc) {\n [hA, hB] = interpolateHue(hA, hB, hueArc);\n }\n const factorA = alphaA * pA;\n const factorB = alphaB * pB;\n alpha = factorA + factorB;\n const h = (hA * pA + hB * pB) % DEG;\n let l, c;\n if (alpha === 0) {\n l = lA * pA + lB * pB;\n c = cA * pA + cB * pB;\n } else {\n l = (lA * factorA + lB * factorB) / alpha;\n c = (cA * factorA + cB * factorB) / alpha;\n alpha = parseFloat(alpha.toFixed(3));\n }\n if (format === VAL_COMP) {\n const res: SpecifiedColorChannels = [\n colorSpace,\n lNone ? NONE : roundToPrecision(l, HEX),\n cNone ? NONE : roundToPrecision(c, HEX),\n hNone ? NONE : roundToPrecision(h, HEX),\n alphaNone ? NONE : alpha * m\n ];\n setCache(cacheKey, res);\n return res;\n }\n [, r, g, b] = resolveColorValue(\n `${colorSpace}(${l} ${c} ${h})`\n ) as ComputedColorChannels;\n // in lab, oklab\n } else {\n let labA, labB;\n if (colorSpace === 'lab') {\n if (REG_CURRENT.test(colorA)) {\n labA = [NONE, NONE, NONE, NONE];\n } else {\n labA = convertColorToLab(colorA, {\n colorSpace,\n format: VAL_MIX\n });\n }\n if (REG_CURRENT.test(colorB)) {\n labB = [NONE, NONE, NONE, NONE];\n } else {\n labB = convertColorToLab(colorB, {\n colorSpace,\n format: VAL_MIX\n });\n }\n } else {\n if (REG_CURRENT.test(colorA)) {\n labA = [NONE, NONE, NONE, NONE];\n } else {\n labA = convertColorToOklab(colorA, {\n colorSpace,\n format: VAL_MIX\n });\n }\n if (REG_CURRENT.test(colorB)) {\n labB = [NONE, NONE, NONE, NONE];\n } else {\n labB = convertColorToOklab(colorB, {\n colorSpace,\n format: VAL_MIX\n });\n }\n }\n if (labA instanceof NullObject || labB instanceof NullObject) {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n const [llA, aaA, bbA, alA] = labA;\n const [llB, aaB, bbB, alB] = labB;\n const lNone = llA === NONE && llB === NONE;\n const aNone = aaA === NONE && aaB === NONE;\n const bNone = bbA === NONE && bbB === NONE;\n const alphaNone = alA === NONE && alB === NONE;\n const [[lA, aA, bA, alphaA], [lB, aB, bB, alphaB]] =\n normalizeColorComponents(\n [llA, aaA, bbA, alA],\n [llB, aaB, bbB, alB],\n true\n );\n const factorA = alphaA * pA;\n const factorB = alphaB * pB;\n alpha = factorA + factorB;\n let l, aO, bO;\n if (alpha === 0) {\n l = lA * pA + lB * pB;\n aO = aA * pA + aB * pB;\n bO = bA * pA + bB * pB;\n } else {\n l = (lA * factorA + lB * factorB) / alpha;\n aO = (aA * factorA + aB * factorB) / alpha;\n bO = (bA * factorA + bB * factorB) / alpha;\n alpha = parseFloat(alpha.toFixed(3));\n }\n if (format === VAL_COMP) {\n const res: SpecifiedColorChannels = [\n colorSpace,\n lNone ? NONE : roundToPrecision(l, HEX),\n aNone ? NONE : roundToPrecision(aO, HEX),\n bNone ? NONE : roundToPrecision(bO, HEX),\n alphaNone ? NONE : alpha * m\n ];\n setCache(cacheKey, res);\n return res;\n }\n [, r, g, b] = resolveColorValue(\n `${colorSpace}(${l} ${aO} ${bO})`\n ) as ComputedColorChannels;\n }\n const res: SpecifiedColorChannels = [\n 'rgb',\n Math.round(r),\n Math.round(g),\n Math.round(b),\n parseFloat((alpha * m).toFixed(3))\n ];\n setCache(cacheKey, res);\n return res;\n};\n","/**\n * css-var\n */\n\nimport { CSSToken, TokenType, tokenize } from '@csstools/css-tokenizer';\nimport {\n CacheItem,\n NullObject,\n createCacheKey,\n getCache,\n setCache\n} from './cache';\nimport { isString } from './common';\nimport { cssCalc } from './css-calc';\nimport { isColor } from './util';\nimport { Options } from './typedef';\n\n/* constants */\nimport { FN_VAR, SYN_FN_CALC, SYN_FN_VAR, VAL_SPEC } from './constant';\nconst {\n CloseParen: PAREN_CLOSE,\n Comment: COMMENT,\n EOF,\n Ident: IDENT,\n Whitespace: W_SPACE\n} = TokenType;\nconst NAMESPACE = 'css-var';\n\n/* regexp */\nconst REG_FN_CALC = new RegExp(SYN_FN_CALC);\nconst REG_FN_VAR = new RegExp(SYN_FN_VAR);\n\n/**\n * resolve custom property\n * @param tokens - CSS tokens\n * @param [opt] - options\n * @returns result - [tokens, resolvedValue]\n */\nexport function resolveCustomProperty(\n tokens: CSSToken[],\n opt: Options = {}\n): [CSSToken[], string] {\n if (!Array.isArray(tokens)) {\n throw new TypeError(`${tokens} is not an array.`);\n }\n const { customProperty = {} } = opt;\n const items: string[] = [];\n while (tokens.length) {\n const token = tokens.shift();\n if (!Array.isArray(token)) {\n throw new TypeError(`${token} is not an array.`);\n }\n const [type, value] = token as [TokenType, string];\n // end of var()\n if (type === PAREN_CLOSE) {\n break;\n }\n // nested var()\n if (value === FN_VAR) {\n const [restTokens, item] = resolveCustomProperty(tokens, opt);\n tokens = restTokens;\n if (item) {\n items.push(item);\n }\n } else if (type === IDENT) {\n if (value.startsWith('--')) {\n let item;\n if (Object.hasOwn(customProperty, value)) {\n item = customProperty[value] as string;\n } else if (typeof customProperty.callback === 'function') {\n item = customProperty.callback(value);\n }\n if (item) {\n items.push(item);\n }\n } else if (value) {\n items.push(value);\n }\n }\n }\n let resolveAsColor = false;\n if (items.length > 1) {\n const lastValue = items[items.length - 1];\n resolveAsColor = isColor(lastValue);\n }\n let resolvedValue = '';\n for (let item of items) {\n item = item.trim();\n if (REG_FN_VAR.test(item)) {\n // recurse resolveVar()\n const resolvedItem = resolveVar(item, opt);\n if (isString(resolvedItem)) {\n if (resolveAsColor) {\n if (isColor(resolvedItem)) {\n resolvedValue = resolvedItem;\n }\n } else {\n resolvedValue = resolvedItem;\n }\n }\n } else if (REG_FN_CALC.test(item)) {\n item = cssCalc(item, opt);\n if (resolveAsColor) {\n if (isColor(item)) {\n resolvedValue = item;\n }\n } else {\n resolvedValue = item;\n }\n } else if (\n item &&\n !/^(?:inherit|initial|revert(?:-layer)?|unset)$/.test(item)\n ) {\n if (resolveAsColor) {\n if (isColor(item)) {\n resolvedValue = item;\n }\n } else {\n resolvedValue = item;\n }\n }\n if (resolvedValue) {\n break;\n }\n }\n return [tokens, resolvedValue];\n}\n\n/**\n * parse tokens\n * @param tokens - CSS tokens\n * @param [opt] - options\n * @returns parsed tokens\n */\nexport function parseTokens(\n tokens: CSSToken[],\n opt: Options = {}\n): string[] | NullObject {\n const res: string[] = [];\n while (tokens.length) {\n const token = tokens.shift();\n const [type = '', value = ''] = token as [TokenType, string];\n if (value === FN_VAR) {\n const [restTokens, resolvedValue] = resolveCustomProperty(tokens, opt);\n if (!resolvedValue) {\n return new NullObject();\n }\n tokens = restTokens;\n res.push(resolvedValue);\n } else {\n switch (type) {\n case PAREN_CLOSE: {\n if (res.length) {\n const lastValue = res[res.length - 1];\n if (lastValue === ' ') {\n res.splice(-1, 1, value);\n } else {\n res.push(value);\n }\n } else {\n res.push(value);\n }\n break;\n }\n case W_SPACE: {\n if (res.length) {\n const lastValue = res[res.length - 1];\n if (\n isString(lastValue) &&\n !lastValue.endsWith('(') &&\n lastValue !== ' '\n ) {\n res.push(value);\n }\n }\n break;\n }\n default: {\n if (type !== COMMENT && type !== EOF) {\n res.push(value);\n }\n }\n }\n }\n }\n return res;\n}\n\n/**\n * resolve CSS var()\n * @param value - CSS value including var()\n * @param [opt] - options\n * @returns resolved value\n */\nexport function resolveVar(\n value: string,\n opt: Options = {}\n): string | NullObject {\n const { format = '' } = opt;\n if (isString(value)) {\n if (!REG_FN_VAR.test(value) || format === VAL_SPEC) {\n return value;\n }\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'resolveVar',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return cachedResult as NullObject;\n }\n return cachedResult.item as string;\n }\n const tokens = tokenize({ css: value });\n const values = parseTokens(tokens, opt);\n if (Array.isArray(values)) {\n let color = values.join('');\n if (REG_FN_CALC.test(color)) {\n color = cssCalc(color, opt);\n }\n setCache(cacheKey, color);\n return color;\n } else {\n setCache(cacheKey, null);\n return new NullObject();\n }\n}\n\n/**\n * CSS var()\n * @param value - CSS value including var()\n * @param [opt] - options\n * @returns resolved value\n */\nexport const cssVar = (value: string, opt: Options = {}): string => {\n const resolvedValue = resolveVar(value, opt);\n if (isString(resolvedValue)) {\n return resolvedValue;\n }\n return '';\n};\n","/**\n * relative-color\n */\n\nimport { SyntaxFlag, color as colorParser } from '@csstools/css-color-parser';\nimport {\n ComponentValue,\n parseComponentValue\n} from '@csstools/css-parser-algorithms';\nimport { CSSToken, TokenType, tokenize } from '@csstools/css-tokenizer';\nimport {\n CacheItem,\n NullObject,\n createCacheKey,\n getCache,\n setCache\n} from './cache';\nimport { NAMED_COLORS, convertColorToRgb } from './color';\nimport { isString, isStringOrNumber } from './common';\nimport { resolveDimension, serializeCalc } from './css-calc';\nimport { resolveColor } from './resolve';\nimport { roundToPrecision, splitValue } from './util';\nimport {\n ColorChannels,\n MatchedRegExp,\n Options,\n StringColorChannels\n} from './typedef';\n\n/* constants */\nimport {\n CS_LAB,\n CS_LCH,\n FN_LIGHT_DARK,\n FN_REL,\n FN_REL_CAPT,\n FN_VAR,\n NONE,\n SYN_COLOR_TYPE,\n SYN_FN_MATH_START,\n SYN_FN_VAR,\n SYN_MIX,\n VAL_SPEC\n} from './constant';\nconst {\n CloseParen: PAREN_CLOSE,\n Comment: COMMENT,\n Delim: DELIM,\n Dimension: DIM,\n EOF,\n Function: FUNC,\n Ident: IDENT,\n Number: NUM,\n OpenParen: PAREN_OPEN,\n Percentage: PCT,\n Whitespace: W_SPACE\n} = TokenType;\nconst { HasNoneKeywords: KEY_NONE } = SyntaxFlag;\nconst NAMESPACE = 'relative-color';\n\n/* numeric constants */\nconst OCT = 8;\nconst DEC = 10;\nconst HEX = 16;\nconst MAX_PCT = 100;\nconst MAX_RGB = 255;\n\n/* type definitions */\n/**\n * @type NumberOrStringColorChannels - color channel\n */\ntype NumberOrStringColorChannels = ColorChannels & StringColorChannels;\n\n/* regexp */\nconst REG_COLOR_CAPT = new RegExp(\n `^${FN_REL}(${SYN_COLOR_TYPE}|${SYN_MIX})\\\\s+`\n);\nconst REG_CS_HSL = /(?:hsla?|hwb)$/;\nconst REG_CS_CIE = new RegExp(`^(?:${CS_LAB}|${CS_LCH})$`);\nconst REG_FN_CALC_SUM = /^(?:abs|sig?n|cos|tan)\\(/;\nconst REG_FN_MATH_START = new RegExp(SYN_FN_MATH_START);\nconst REG_FN_REL = new RegExp(FN_REL);\nconst REG_FN_REL_CAPT = new RegExp(`^${FN_REL_CAPT}`);\nconst REG_FN_REL_START = new RegExp(`^${FN_REL}`);\nconst REG_FN_VAR = new RegExp(SYN_FN_VAR);\n\n/**\n * resolve relative color channels\n * @param tokens - CSS tokens\n * @param [opt] - options\n * @returns resolved color channels\n */\nexport function resolveColorChannels(\n tokens: CSSToken[],\n opt: Options = {}\n): NumberOrStringColorChannels | NullObject {\n if (!Array.isArray(tokens)) {\n throw new TypeError(`${tokens} is not an array.`);\n }\n const { colorSpace = '', format = '' } = opt;\n const colorChannels = new Map([\n ['color', ['r', 'g', 'b', 'alpha']],\n ['hsl', ['h', 's', 'l', 'alpha']],\n ['hsla', ['h', 's', 'l', 'alpha']],\n ['hwb', ['h', 'w', 'b', 'alpha']],\n ['lab', ['l', 'a', 'b', 'alpha']],\n ['lch', ['l', 'c', 'h', 'alpha']],\n ['oklab', ['l', 'a', 'b', 'alpha']],\n ['oklch', ['l', 'c', 'h', 'alpha']],\n ['rgb', ['r', 'g', 'b', 'alpha']],\n ['rgba', ['r', 'g', 'b', 'alpha']]\n ]);\n const colorChannel = colorChannels.get(colorSpace);\n // invalid color channel\n if (!colorChannel) {\n return new NullObject();\n }\n const mathFunc = new Set();\n const channels: [\n (number | string)[],\n (number | string)[],\n (number | string)[],\n (number | string)[]\n ] = [[], [], [], []];\n let i = 0;\n let nest = 0;\n let func = '';\n let precededPct = false;\n while (tokens.length) {\n const token = tokens.shift();\n if (!Array.isArray(token)) {\n throw new TypeError(`${token} is not an array.`);\n }\n const [type, value, , , detail] = token as [\n TokenType,\n string,\n number,\n number,\n { value: string | number } | undefined\n ];\n const channel = channels[i];\n if (Array.isArray(channel)) {\n switch (type) {\n case DELIM: {\n if (func) {\n if (\n (value === '+' || value === '-') &&\n precededPct &&\n !REG_FN_CALC_SUM.test(func)\n ) {\n return new NullObject();\n }\n precededPct = false;\n channel.push(value);\n }\n break;\n }\n case DIM: {\n if (!func || !REG_FN_CALC_SUM.test(func)) {\n return new NullObject();\n }\n const resolvedValue = resolveDimension(token, opt);\n if (isString(resolvedValue)) {\n channel.push(resolvedValue);\n } else {\n channel.push(value);\n }\n break;\n }\n case FUNC: {\n channel.push(value);\n func = value;\n nest++;\n if (REG_FN_MATH_START.test(value)) {\n mathFunc.add(nest);\n }\n break;\n }\n case IDENT: {\n // invalid channel key\n if (!colorChannel.includes(value)) {\n return new NullObject();\n }\n channel.push(value);\n if (!func) {\n i++;\n }\n break;\n }\n case NUM: {\n channel.push(Number(detail?.value));\n if (!func) {\n i++;\n }\n break;\n }\n case PAREN_OPEN: {\n channel.push(value);\n nest++;\n break;\n }\n case PAREN_CLOSE: {\n if (func) {\n const lastValue = channel[channel.length - 1];\n if (lastValue === ' ') {\n channel.splice(-1, 1, value);\n } else {\n channel.push(value);\n }\n if (mathFunc.has(nest)) {\n mathFunc.delete(nest);\n }\n nest--;\n if (nest === 0) {\n func = '';\n i++;\n }\n }\n break;\n }\n case PCT: {\n if (!func) {\n return new NullObject();\n } else if (!REG_FN_CALC_SUM.test(func)) {\n const lastValue = channel.toReversed().find(v => v !== ' ');\n if (lastValue === '+' || lastValue === '-') {\n return new NullObject();\n } else if (lastValue === '*' || lastValue === '/') {\n precededPct = false;\n } else {\n precededPct = true;\n }\n }\n channel.push(Number(detail?.value) / MAX_PCT);\n if (!func) {\n i++;\n }\n break;\n }\n case W_SPACE: {\n if (channel.length && func) {\n const lastValue = channel[channel.length - 1];\n if (typeof lastValue === 'number') {\n channel.push(value);\n } else if (\n isString(lastValue) &&\n !lastValue.endsWith('(') &&\n lastValue !== ' '\n ) {\n channel.push(value);\n }\n }\n break;\n }\n default: {\n if (type !== COMMENT && type !== EOF && func) {\n channel.push(value);\n }\n }\n }\n }\n }\n const channelValues = [];\n for (const channel of channels) {\n if (channel.length === 1) {\n const [resolvedValue] = channel;\n if (isStringOrNumber(resolvedValue)) {\n channelValues.push(resolvedValue);\n }\n } else if (channel.length) {\n const resolvedValue = serializeCalc(channel.join(''), {\n format\n });\n channelValues.push(resolvedValue);\n }\n }\n return channelValues as NumberOrStringColorChannels;\n}\n\n/**\n * extract origin color\n * @param value - CSS color value\n * @param [opt] - options\n * @returns origin color value\n */\nexport function extractOriginColor(\n value: string,\n opt: Options = {}\n): string | NullObject {\n const { colorScheme = 'normal', currentColor = '', format = '' } = opt;\n if (isString(value)) {\n value = value.toLowerCase().trim();\n if (!value) {\n return new NullObject();\n }\n if (!REG_FN_REL_START.test(value)) {\n return value;\n }\n } else {\n return new NullObject();\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'extractOriginColor',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return cachedResult as NullObject;\n }\n return cachedResult.item as string;\n }\n if (/currentcolor/.test(value)) {\n if (currentColor) {\n value = value.replace(/currentcolor/g, currentColor);\n } else {\n setCache(cacheKey, null);\n return new NullObject();\n }\n }\n let colorSpace = '';\n if (REG_FN_REL_CAPT.test(value)) {\n [, colorSpace] = value.match(REG_FN_REL_CAPT) as MatchedRegExp;\n }\n opt.colorSpace = colorSpace;\n if (value.includes(FN_LIGHT_DARK)) {\n const colorParts = value\n .replace(new RegExp(`^${colorSpace}\\\\(`), '')\n .replace(/\\)$/, '');\n const [, originColor = ''] = splitValue(colorParts);\n const specifiedOriginColor = resolveColor(originColor, {\n colorScheme,\n format: VAL_SPEC\n }) as string;\n if (specifiedOriginColor === '') {\n setCache(cacheKey, null);\n return new NullObject();\n }\n if (format === VAL_SPEC) {\n value = value.replace(originColor, specifiedOriginColor);\n } else {\n const resolvedOriginColor = resolveColor(specifiedOriginColor, opt);\n if (isString(resolvedOriginColor)) {\n value = value.replace(originColor, resolvedOriginColor);\n }\n }\n }\n if (REG_COLOR_CAPT.test(value)) {\n const [, originColor] = value.match(REG_COLOR_CAPT) as MatchedRegExp;\n const [, restValue] = value.split(originColor) as MatchedRegExp;\n if (/^[a-z]+$/.test(originColor)) {\n if (\n !/^transparent$/.test(originColor) &&\n !Object.hasOwn(NAMED_COLORS, originColor)\n ) {\n setCache(cacheKey, null);\n return new NullObject();\n }\n } else if (format === VAL_SPEC) {\n const resolvedOriginColor = resolveColor(originColor, opt);\n if (isString(resolvedOriginColor)) {\n value = value.replace(originColor, resolvedOriginColor);\n }\n }\n if (format === VAL_SPEC) {\n const tokens = tokenize({ css: restValue });\n const channelValues = resolveColorChannels(tokens, opt);\n if (channelValues instanceof NullObject) {\n setCache(cacheKey, null);\n return channelValues;\n }\n const [v1, v2, v3, v4] = channelValues;\n let channelValue = '';\n if (isStringOrNumber(v4)) {\n channelValue = ` ${v1} ${v2} ${v3} / ${v4})`;\n } else {\n channelValue = ` ${channelValues.join(' ')})`;\n }\n if (restValue !== channelValue) {\n value = value.replace(restValue, channelValue);\n }\n }\n // nested relative color\n } else {\n const [, restValue] = value.split(REG_FN_REL_START) as MatchedRegExp;\n const tokens = tokenize({ css: restValue });\n const originColor: string[] = [];\n let nest = 0;\n while (tokens.length) {\n const [type, tokenValue] = tokens.shift() as [TokenType, string];\n switch (type) {\n case FUNC:\n case PAREN_OPEN: {\n originColor.push(tokenValue);\n nest++;\n break;\n }\n case PAREN_CLOSE: {\n const lastValue = originColor[originColor.length - 1];\n if (lastValue === ' ') {\n originColor.splice(-1, 1, tokenValue);\n } else if (isString(lastValue)) {\n originColor.push(tokenValue);\n }\n nest--;\n break;\n }\n case W_SPACE: {\n const lastValue = originColor[originColor.length - 1];\n if (\n isString(lastValue) &&\n !lastValue.endsWith('(') &&\n lastValue !== ' '\n ) {\n originColor.push(tokenValue);\n }\n break;\n }\n default: {\n if (type !== COMMENT && type !== EOF) {\n originColor.push(tokenValue);\n }\n }\n }\n if (nest === 0) {\n break;\n }\n }\n const resolvedOriginColor = resolveRelativeColor(\n originColor.join('').trim(),\n opt\n );\n if (resolvedOriginColor instanceof NullObject) {\n setCache(cacheKey, null);\n return resolvedOriginColor;\n }\n const channelValues = resolveColorChannels(tokens, opt);\n if (channelValues instanceof NullObject) {\n setCache(cacheKey, null);\n return channelValues;\n }\n const [v1, v2, v3, v4] = channelValues;\n let channelValue = '';\n if (isStringOrNumber(v4)) {\n channelValue = ` ${v1} ${v2} ${v3} / ${v4})`;\n } else {\n channelValue = ` ${channelValues.join(' ')})`;\n }\n value = value.replace(restValue, `${resolvedOriginColor}${channelValue}`);\n }\n setCache(cacheKey, value);\n return value;\n}\n\n/**\n * resolve relative color\n * @param value - CSS relative color value\n * @param [opt] - options\n * @returns resolved value\n */\nexport function resolveRelativeColor(\n value: string,\n opt: Options = {}\n): string | NullObject {\n const { format = '' } = opt;\n if (isString(value)) {\n if (REG_FN_VAR.test(value)) {\n if (format === VAL_SPEC) {\n return value;\n // var() must be resolved before resolveRelativeColor()\n } else {\n throw new SyntaxError(`Unexpected token ${FN_VAR} found.`);\n }\n } else if (!REG_FN_REL.test(value)) {\n return value;\n }\n value = value.toLowerCase().trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'resolveRelativeColor',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return cachedResult as NullObject;\n }\n return cachedResult.item as string;\n }\n const originColor = extractOriginColor(value, opt);\n if (originColor instanceof NullObject) {\n setCache(cacheKey, null);\n return originColor;\n }\n value = originColor;\n if (format === VAL_SPEC) {\n if (value.startsWith('rgba(')) {\n value = value.replace(/^rgba\\(/, 'rgb(');\n } else if (value.startsWith('hsla(')) {\n value = value.replace(/^hsla\\(/, 'hsl(');\n }\n return value;\n }\n const tokens = tokenize({ css: value });\n const components = parseComponentValue(tokens) as ComponentValue;\n const parsedComponents = colorParser(components);\n if (!parsedComponents) {\n setCache(cacheKey, null);\n return new NullObject();\n }\n const {\n alpha: alphaComponent,\n channels: channelsComponent,\n colorNotation,\n syntaxFlags\n } = parsedComponents;\n let alpha: number | string;\n if (Number.isNaN(Number(alphaComponent))) {\n if (syntaxFlags instanceof Set && syntaxFlags.has(KEY_NONE)) {\n alpha = NONE;\n } else {\n alpha = 0;\n }\n } else {\n alpha = roundToPrecision(Number(alphaComponent), OCT);\n }\n let v1: number | string;\n let v2: number | string;\n let v3: number | string;\n [v1, v2, v3] = channelsComponent;\n let resolvedValue;\n if (REG_CS_CIE.test(colorNotation)) {\n const hasNone = syntaxFlags instanceof Set && syntaxFlags.has(KEY_NONE);\n if (Number.isNaN(v1)) {\n if (hasNone) {\n v1 = NONE;\n } else {\n v1 = 0;\n }\n } else {\n v1 = roundToPrecision(v1, HEX);\n }\n if (Number.isNaN(v2)) {\n if (hasNone) {\n v2 = NONE;\n } else {\n v2 = 0;\n }\n } else {\n v2 = roundToPrecision(v2, HEX);\n }\n if (Number.isNaN(v3)) {\n if (hasNone) {\n v3 = NONE;\n } else {\n v3 = 0;\n }\n } else {\n v3 = roundToPrecision(v3, HEX);\n }\n if (alpha === 1) {\n resolvedValue = `${colorNotation}(${v1} ${v2} ${v3})`;\n } else {\n resolvedValue = `${colorNotation}(${v1} ${v2} ${v3} / ${alpha})`;\n }\n } else if (REG_CS_HSL.test(colorNotation)) {\n if (Number.isNaN(v1)) {\n v1 = 0;\n }\n if (Number.isNaN(v2)) {\n v2 = 0;\n }\n if (Number.isNaN(v3)) {\n v3 = 0;\n }\n let [r, g, b] = convertColorToRgb(\n `${colorNotation}(${v1} ${v2} ${v3} / ${alpha})`\n ) as ColorChannels;\n r = roundToPrecision(r / MAX_RGB, DEC);\n g = roundToPrecision(g / MAX_RGB, DEC);\n b = roundToPrecision(b / MAX_RGB, DEC);\n if (alpha === 1) {\n resolvedValue = `color(srgb ${r} ${g} ${b})`;\n } else {\n resolvedValue = `color(srgb ${r} ${g} ${b} / ${alpha})`;\n }\n } else {\n const cs = colorNotation === 'rgb' ? 'srgb' : colorNotation;\n const hasNone = syntaxFlags instanceof Set && syntaxFlags.has(KEY_NONE);\n if (Number.isNaN(v1)) {\n if (hasNone) {\n v1 = NONE;\n } else {\n v1 = 0;\n }\n } else {\n v1 = roundToPrecision(v1, DEC);\n }\n if (Number.isNaN(v2)) {\n if (hasNone) {\n v2 = NONE;\n } else {\n v2 = 0;\n }\n } else {\n v2 = roundToPrecision(v2, DEC);\n }\n if (Number.isNaN(v3)) {\n if (hasNone) {\n v3 = NONE;\n } else {\n v3 = 0;\n }\n } else {\n v3 = roundToPrecision(v3, DEC);\n }\n if (alpha === 1) {\n resolvedValue = `color(${cs} ${v1} ${v2} ${v3})`;\n } else {\n resolvedValue = `color(${cs} ${v1} ${v2} ${v3} / ${alpha})`;\n }\n }\n setCache(cacheKey, resolvedValue);\n return resolvedValue;\n}\n","/**\n * resolve\n */\n\nimport {\n CacheItem,\n NullObject,\n createCacheKey,\n getCache,\n setCache\n} from './cache';\nimport {\n convertRgbToHex,\n resolveColorFunc,\n resolveColorMix,\n resolveColorValue\n} from './color';\nimport { isString } from './common';\nimport { cssCalc } from './css-calc';\nimport { resolveVar } from './css-var';\nimport { resolveRelativeColor } from './relative-color';\nimport { splitValue } from './util';\nimport {\n ComputedColorChannels,\n Options,\n SpecifiedColorChannels\n} from './typedef';\n\n/* constants */\nimport {\n FN_COLOR,\n FN_MIX,\n SYN_FN_CALC,\n SYN_FN_LIGHT_DARK,\n SYN_FN_REL,\n SYN_FN_VAR,\n VAL_COMP,\n VAL_SPEC\n} from './constant';\nconst NAMESPACE = 'resolve';\nconst RGB_TRANSPARENT = 'rgba(0, 0, 0, 0)';\n\n/* regexp */\nconst REG_FN_CALC = new RegExp(SYN_FN_CALC);\nconst REG_FN_LIGHT_DARK = new RegExp(SYN_FN_LIGHT_DARK);\nconst REG_FN_REL = new RegExp(SYN_FN_REL);\nconst REG_FN_VAR = new RegExp(SYN_FN_VAR);\n\n/**\n * resolve color\n * @param value - CSS color value\n * @param [opt] - options\n * @returns resolved color\n */\nexport const resolveColor = (\n value: string,\n opt: Options = {}\n): string | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const {\n colorScheme = 'normal',\n currentColor = '',\n format = VAL_COMP,\n nullable = false\n } = opt;\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'resolve',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return cachedResult as NullObject;\n }\n return cachedResult.item as string;\n }\n if (REG_FN_VAR.test(value)) {\n if (format === VAL_SPEC) {\n setCache(cacheKey, value);\n return value;\n }\n const resolvedValue = resolveVar(value, opt);\n if (resolvedValue instanceof NullObject) {\n switch (format) {\n case 'hex':\n case 'hexAlpha': {\n setCache(cacheKey, resolvedValue);\n return resolvedValue;\n }\n default: {\n if (nullable) {\n setCache(cacheKey, resolvedValue);\n return resolvedValue;\n }\n const res = RGB_TRANSPARENT;\n setCache(cacheKey, res);\n return res;\n }\n }\n } else {\n value = resolvedValue;\n }\n }\n if (opt.format !== format) {\n opt.format = format;\n }\n value = value.toLowerCase();\n if (REG_FN_LIGHT_DARK.test(value) && value.endsWith(')')) {\n const colorParts = value.replace(REG_FN_LIGHT_DARK, '').replace(/\\)$/, '');\n const [light = '', dark = ''] = splitValue(colorParts, {\n delimiter: ','\n });\n if (light && dark) {\n if (format === VAL_SPEC) {\n const lightColor = resolveColor(light, opt);\n const darkColor = resolveColor(dark, opt);\n let res;\n if (lightColor && darkColor) {\n res = `light-dark(${lightColor}, ${darkColor})`;\n } else {\n res = '';\n }\n setCache(cacheKey, res);\n return res;\n }\n let resolvedValue;\n if (colorScheme === 'dark') {\n resolvedValue = resolveColor(dark, opt);\n } else {\n resolvedValue = resolveColor(light, opt);\n }\n let res;\n if (resolvedValue instanceof NullObject) {\n if (nullable) {\n res = resolvedValue;\n } else {\n res = RGB_TRANSPARENT;\n }\n } else {\n res = resolvedValue;\n }\n setCache(cacheKey, res);\n return res;\n }\n // invalid value\n switch (format) {\n case VAL_SPEC: {\n setCache(cacheKey, '');\n return '';\n }\n case 'hex':\n case 'hexAlpha': {\n setCache(cacheKey, null);\n return new NullObject();\n }\n case VAL_COMP:\n default: {\n const res = RGB_TRANSPARENT;\n setCache(cacheKey, res);\n return res;\n }\n }\n }\n if (REG_FN_REL.test(value)) {\n const resolvedValue = resolveRelativeColor(value, opt);\n if (format === VAL_COMP) {\n let res;\n if (resolvedValue instanceof NullObject) {\n if (nullable) {\n res = resolvedValue;\n } else {\n res = RGB_TRANSPARENT;\n }\n } else {\n res = resolvedValue;\n }\n setCache(cacheKey, res);\n return res;\n }\n if (format === VAL_SPEC) {\n let res = '';\n if (resolvedValue instanceof NullObject) {\n res = '';\n } else {\n res = resolvedValue;\n }\n setCache(cacheKey, res);\n return res;\n }\n if (resolvedValue instanceof NullObject) {\n value = '';\n } else {\n value = resolvedValue;\n }\n }\n if (REG_FN_CALC.test(value)) {\n value = cssCalc(value, opt);\n }\n let cs = '';\n let r = NaN;\n let g = NaN;\n let b = NaN;\n let alpha = NaN;\n if (value === 'transparent') {\n switch (format) {\n case VAL_SPEC: {\n setCache(cacheKey, value);\n return value;\n }\n case 'hex': {\n setCache(cacheKey, null);\n return new NullObject();\n }\n case 'hexAlpha': {\n const res = '#00000000';\n setCache(cacheKey, res);\n return res;\n }\n case VAL_COMP:\n default: {\n const res = RGB_TRANSPARENT;\n setCache(cacheKey, res);\n return res;\n }\n }\n } else if (value === 'currentcolor') {\n if (format === VAL_SPEC) {\n setCache(cacheKey, value);\n return value;\n }\n if (currentColor) {\n let resolvedValue;\n if (currentColor.startsWith(FN_MIX)) {\n resolvedValue = resolveColorMix(currentColor, opt);\n } else if (currentColor.startsWith(FN_COLOR)) {\n resolvedValue = resolveColorFunc(currentColor, opt);\n } else {\n resolvedValue = resolveColorValue(currentColor, opt);\n }\n if (resolvedValue instanceof NullObject) {\n setCache(cacheKey, resolvedValue);\n return resolvedValue;\n }\n [cs, r, g, b, alpha] = resolvedValue as ComputedColorChannels;\n } else if (format === VAL_COMP) {\n const res = RGB_TRANSPARENT;\n setCache(cacheKey, res);\n return res;\n }\n } else if (format === VAL_SPEC) {\n if (value.startsWith(FN_MIX)) {\n const res = resolveColorMix(value, opt) as string;\n setCache(cacheKey, res);\n return res;\n } else if (value.startsWith(FN_COLOR)) {\n const [scs, rr, gg, bb, aa] = resolveColorFunc(\n value,\n opt\n ) as SpecifiedColorChannels;\n let res = '';\n if (aa === 1) {\n res = `color(${scs} ${rr} ${gg} ${bb})`;\n } else {\n res = `color(${scs} ${rr} ${gg} ${bb} / ${aa})`;\n }\n setCache(cacheKey, res);\n return res;\n } else {\n const rgb = resolveColorValue(value, opt);\n if (isString(rgb)) {\n setCache(cacheKey, rgb);\n return rgb;\n }\n const [scs, rr, gg, bb, aa] = rgb as SpecifiedColorChannels;\n let res = '';\n if (scs === 'rgb') {\n if (aa === 1) {\n res = `${scs}(${rr}, ${gg}, ${bb})`;\n } else {\n res = `${scs}a(${rr}, ${gg}, ${bb}, ${aa})`;\n }\n } else if (aa === 1) {\n res = `${scs}(${rr} ${gg} ${bb})`;\n } else {\n res = `${scs}(${rr} ${gg} ${bb} / ${aa})`;\n }\n setCache(cacheKey, res);\n return res;\n }\n } else if (value.startsWith(FN_MIX)) {\n if (/currentcolor/.test(value)) {\n if (currentColor) {\n value = value.replace(/currentcolor/g, currentColor);\n }\n }\n if (/transparent/.test(value)) {\n value = value.replace(/transparent/g, RGB_TRANSPARENT);\n }\n const resolvedValue = resolveColorMix(value, opt);\n if (resolvedValue instanceof NullObject) {\n setCache(cacheKey, resolvedValue);\n return resolvedValue;\n }\n [cs, r, g, b, alpha] = resolvedValue as ComputedColorChannels;\n } else if (value.startsWith(FN_COLOR)) {\n const resolvedValue = resolveColorFunc(value, opt);\n if (resolvedValue instanceof NullObject) {\n setCache(cacheKey, resolvedValue);\n return resolvedValue;\n }\n [cs, r, g, b, alpha] = resolvedValue as ComputedColorChannels;\n } else if (value) {\n const resolvedValue = resolveColorValue(value, opt);\n if (resolvedValue instanceof NullObject) {\n setCache(cacheKey, resolvedValue);\n return resolvedValue;\n }\n [cs, r, g, b, alpha] = resolvedValue as ComputedColorChannels;\n }\n let res = '';\n switch (format) {\n case 'hex': {\n if (\n Number.isNaN(r) ||\n Number.isNaN(g) ||\n Number.isNaN(b) ||\n Number.isNaN(alpha) ||\n alpha === 0\n ) {\n setCache(cacheKey, null);\n return new NullObject();\n }\n res = convertRgbToHex([r, g, b, 1]);\n break;\n }\n case 'hexAlpha': {\n if (\n Number.isNaN(r) ||\n Number.isNaN(g) ||\n Number.isNaN(b) ||\n Number.isNaN(alpha)\n ) {\n setCache(cacheKey, null);\n return new NullObject();\n }\n res = convertRgbToHex([r, g, b, alpha]);\n break;\n }\n case VAL_COMP:\n default: {\n switch (cs) {\n case 'rgb': {\n if (alpha === 1) {\n res = `${cs}(${r}, ${g}, ${b})`;\n } else {\n res = `${cs}a(${r}, ${g}, ${b}, ${alpha})`;\n }\n break;\n }\n case 'lab':\n case 'lch':\n case 'oklab':\n case 'oklch': {\n if (alpha === 1) {\n res = `${cs}(${r} ${g} ${b})`;\n } else {\n res = `${cs}(${r} ${g} ${b} / ${alpha})`;\n }\n break;\n }\n // color()\n default: {\n if (alpha === 1) {\n res = `color(${cs} ${r} ${g} ${b})`;\n } else {\n res = `color(${cs} ${r} ${g} ${b} / ${alpha})`;\n }\n }\n }\n }\n }\n setCache(cacheKey, res);\n return res;\n};\n\n/**\n * resolve CSS color\n * @param value\n * - CSS color value\n * - system colors are not supported\n * @param [opt] - options\n * @param [opt.currentColor]\n * - color to use for `currentcolor` keyword\n * - if omitted, it will be treated as a missing color\n * i.e. `rgb(none none none / none)`\n * @param [opt.customProperty]\n * - custom properties\n * - pair of `--` prefixed property name and value,\n * e.g. `customProperty: { '--some-color': '#0000ff' }`\n * - and/or `callback` function to get the value of the custom property,\n * e.g. `customProperty: { callback: someDeclaration.getPropertyValue }`\n * @param [opt.dimension]\n * - dimension, convert relative length to pixels\n * - pair of unit and it's value as a number in pixels,\n * e.g. `dimension: { em: 12, rem: 16, vw: 10.26 }`\n * - and/or `callback` function to get the value as a number in pixels,\n * e.g. `dimension: { callback: convertUnitToPixel }`\n * @param [opt.format]\n * - output format, one of below\n * - `computedValue` (default), [computed value][139] of the color\n * - `specifiedValue`, [specified value][140] of the color\n * - `hex`, hex color notation, i.e. `rrggbb`\n * - `hexAlpha`, hex color notation with alpha channel, i.e. `#rrggbbaa`\n * @returns\n * - one of rgba?(), #rrggbb(aa)?, color-name, '(empty-string)',\n * color(color-space r g b / alpha), color(color-space x y z / alpha),\n * lab(l a b / alpha), lch(l c h / alpha), oklab(l a b / alpha),\n * oklch(l c h / alpha), null\n * - in `computedValue`, values are numbers, however `rgb()` values are\n * integers\n * - in `specifiedValue`, returns `empty string` for unknown and/or invalid\n * color\n * - in `hex`, returns `null` for `transparent`, and also returns `null` if\n * any of `r`, `g`, `b`, `alpha` is not a number\n * - in `hexAlpha`, returns `#00000000` for `transparent`,\n * however returns `null` if any of `r`, `g`, `b`, `alpha` is not a number\n */\nexport const resolve = (value: string, opt: Options = {}): string | null => {\n opt.nullable = false;\n const resolvedValue = resolveColor(value, opt);\n if (resolvedValue instanceof NullObject) {\n return null;\n }\n return resolvedValue as string;\n};\n","/**\n * css-gradient\n */\n\nimport { CacheItem, createCacheKey, getCache, setCache } from './cache';\nimport { resolveColor } from './resolve';\nimport { isString } from './common';\nimport { MatchedRegExp, Options } from './typedef';\nimport { isColor, splitValue } from './util';\n\n/* constants */\nimport {\n ANGLE,\n CS_HUE,\n CS_RECT,\n LENGTH,\n NUM,\n NUM_POSITIVE,\n PCT,\n VAL_COMP,\n VAL_SPEC\n} from './constant';\nconst NAMESPACE = 'css-gradient';\nconst DIM_ANGLE = `${NUM}(?:${ANGLE})`;\nconst DIM_ANGLE_PCT = `${DIM_ANGLE}|${PCT}`;\nconst DIM_LEN = `${NUM}(?:${LENGTH})|0`;\nconst DIM_LEN_PCT = `${DIM_LEN}|${PCT}`;\nconst DIM_LEN_PCT_POSI = `${NUM_POSITIVE}(?:${LENGTH}|%)|0`;\nconst DIM_LEN_POSI = `${NUM_POSITIVE}(?:${LENGTH})|0`;\nconst CTR = 'center';\nconst L_R = 'left|right';\nconst T_B = 'top|bottom';\nconst S_E = 'start|end';\nconst AXIS_X = `${L_R}|x-(?:${S_E})`;\nconst AXIS_Y = `${T_B}|y-(?:${S_E})`;\nconst BLOCK = `block-(?:${S_E})`;\nconst INLINE = `inline-(?:${S_E})`;\nconst POS_1 = `${CTR}|${AXIS_X}|${AXIS_Y}|${BLOCK}|${INLINE}|${DIM_LEN_PCT}`;\nconst POS_2 = [\n `(?:${CTR}|${AXIS_X})\\\\s+(?:${CTR}|${AXIS_Y})`,\n `(?:${CTR}|${AXIS_Y})\\\\s+(?:${CTR}|${AXIS_X})`,\n `(?:${CTR}|${AXIS_X}|${DIM_LEN_PCT})\\\\s+(?:${CTR}|${AXIS_Y}|${DIM_LEN_PCT})`,\n `(?:${CTR}|${BLOCK})\\\\s+(?:${CTR}|${INLINE})`,\n `(?:${CTR}|${INLINE})\\\\s+(?:${CTR}|${BLOCK})`,\n `(?:${CTR}|${S_E})\\\\s+(?:${CTR}|${S_E})`\n].join('|');\nconst POS_4 = [\n `(?:${AXIS_X})\\\\s+(?:${DIM_LEN_PCT})\\\\s+(?:${AXIS_Y})\\\\s+(?:${DIM_LEN_PCT})`,\n `(?:${AXIS_Y})\\\\s+(?:${DIM_LEN_PCT})\\\\s+(?:${AXIS_X})\\\\s+(?:${DIM_LEN_PCT})`,\n `(?:${BLOCK})\\\\s+(?:${DIM_LEN_PCT})\\\\s+(?:${INLINE})\\\\s+(?:${DIM_LEN_PCT})`,\n `(?:${INLINE})\\\\s+(?:${DIM_LEN_PCT})\\\\s+(?:${BLOCK})\\\\s+(?:${DIM_LEN_PCT})`,\n `(?:${S_E})\\\\s+(?:${DIM_LEN_PCT})\\\\s+(?:${S_E})\\\\s+(?:${DIM_LEN_PCT})`\n].join('|');\nconst RAD_EXTENT = '(?:clos|farth)est-(?:corner|side)';\nconst RAD_SIZE = [\n `${RAD_EXTENT}(?:\\\\s+${RAD_EXTENT})?`,\n `${DIM_LEN_POSI}`,\n `(?:${DIM_LEN_PCT_POSI})\\\\s+(?:${DIM_LEN_PCT_POSI})`\n].join('|');\nconst RAD_SHAPE = 'circle|ellipse';\nconst FROM_ANGLE = `from\\\\s+${DIM_ANGLE}`;\nconst AT_POSITION = `at\\\\s+(?:${POS_1}|${POS_2}|${POS_4})`;\nconst TO_SIDE_CORNER = `to\\\\s+(?:(?:${L_R})(?:\\\\s(?:${T_B}))?|(?:${T_B})(?:\\\\s(?:${L_R}))?)`;\nconst IN_COLOR_SPACE = `in\\\\s+(?:${CS_RECT}|${CS_HUE})`;\n\n/* type definitions */\n/**\n * @type ColorStopList - list of color stops\n */\ntype ColorStopList = [string, string, ...string[]];\n\n/**\n * @typedef ValidateGradientLine - validate gradient line\n * @property line - gradient line\n * @property valid - result\n */\ninterface ValidateGradientLine {\n line: string;\n valid: boolean;\n}\n\n/**\n * @typedef ValidateColorStops - validate color stops\n * @property colorStops - list of color stops\n * @property valid - result\n */\ninterface ValidateColorStops {\n colorStops: string[];\n valid: boolean;\n}\n\n/**\n * @typedef Gradient - parsed CSS gradient\n * @property value - input value\n * @property type - gradient type\n * @property [gradientLine] - gradient line\n * @property colorStopList - list of color stops\n */\ninterface Gradient {\n value: string;\n type: string;\n gradientLine?: string;\n colorStopList: ColorStopList;\n}\n\n/* regexp */\nconst REG_GRAD = /^(?:repeating-)?(?:conic|linear|radial)-gradient\\(/;\nconst REG_GRAD_CAPT = /^((?:repeating-)?(?:conic|linear|radial)-gradient)\\(/;\n\n/**\n * get gradient type\n * @param value - gradient value\n * @returns gradient type\n */\nexport const getGradientType = (value: string): string => {\n if (isString(value)) {\n value = value.trim();\n if (REG_GRAD.test(value)) {\n const [, type] = value.match(REG_GRAD_CAPT) as MatchedRegExp;\n return type;\n }\n }\n return '';\n};\n\n/**\n * validate gradient line\n * @param value - gradient line value\n * @param type - gradient type\n * @returns result\n */\nexport const validateGradientLine = (\n value: string,\n type: string\n): ValidateGradientLine => {\n if (isString(value) && isString(type)) {\n value = value.trim();\n type = type.trim();\n let lineSyntax = '';\n const defaultValues = [];\n if (/^(?:repeating-)?linear-gradient$/.test(type)) {\n /*\n * <linear-gradient-line> = [\n * [ <angle> | to <side-or-corner> ] ||\n * <color-interpolation-method>\n * ]\n */\n lineSyntax = [\n `(?:${DIM_ANGLE}|${TO_SIDE_CORNER})(?:\\\\s+${IN_COLOR_SPACE})?`,\n `${IN_COLOR_SPACE}(?:\\\\s+(?:${DIM_ANGLE}|${TO_SIDE_CORNER}))?`\n ].join('|');\n defaultValues.push(/to\\s+bottom/);\n } else if (/^(?:repeating-)?radial-gradient$/.test(type)) {\n /*\n * <radial-gradient-line> = [\n * [ [ <radial-shape> || <radial-size> ]? [ at <position> ]? ] ||\n * <color-interpolation-method>]?\n */\n lineSyntax = [\n `(?:${RAD_SHAPE})(?:\\\\s+(?:${RAD_SIZE}))?(?:\\\\s+${AT_POSITION})?(?:\\\\s+${IN_COLOR_SPACE})?`,\n `(?:${RAD_SIZE})(?:\\\\s+(?:${RAD_SHAPE}))?(?:\\\\s+${AT_POSITION})?(?:\\\\s+${IN_COLOR_SPACE})?`,\n `${AT_POSITION}(?:\\\\s+${IN_COLOR_SPACE})?`,\n `${IN_COLOR_SPACE}(?:\\\\s+${RAD_SHAPE})(?:\\\\s+(?:${RAD_SIZE}))?(?:\\\\s+${AT_POSITION})?`,\n `${IN_COLOR_SPACE}(?:\\\\s+${RAD_SIZE})(?:\\\\s+(?:${RAD_SHAPE}))?(?:\\\\s+${AT_POSITION})?`,\n `${IN_COLOR_SPACE}(?:\\\\s+${AT_POSITION})?`\n ].join('|');\n defaultValues.push(/ellipse/, /farthest-corner/, /at\\s+center/);\n } else if (/^(?:repeating-)?conic-gradient$/.test(type)) {\n /*\n * <conic-gradient-line> = [\n * [ [ from <angle> ]? [ at <position> ]? ] ||\n * <color-interpolation-method>\n * ]\n */\n lineSyntax = [\n `${FROM_ANGLE}(?:\\\\s+${AT_POSITION})?(?:\\\\s+${IN_COLOR_SPACE})?`,\n `${AT_POSITION}(?:\\\\s+${IN_COLOR_SPACE})?`,\n `${IN_COLOR_SPACE}(?:\\\\s+${FROM_ANGLE})?(?:\\\\s+${AT_POSITION})?`\n ].join('|');\n defaultValues.push(/at\\s+center/);\n }\n if (lineSyntax) {\n const reg = new RegExp(`^(?:${lineSyntax})$`);\n const valid = reg.test(value);\n if (valid) {\n let line = value;\n for (const defaultValue of defaultValues) {\n line = line.replace(defaultValue, '');\n }\n line = line.replace(/\\s{2,}/g, ' ').trim();\n return {\n line,\n valid\n };\n }\n return {\n valid,\n line: value\n };\n }\n }\n return {\n line: value,\n valid: false\n };\n};\n\n/**\n * validate color stop list\n * @param list\n * @param type\n * @param [opt]\n * @returns result\n */\nexport const validateColorStopList = (\n list: string[],\n type: string,\n opt: Options = {}\n): ValidateColorStops => {\n if (Array.isArray(list) && list.length > 1) {\n const dimension = /^(?:repeating-)?conic-gradient$/.test(type)\n ? DIM_ANGLE_PCT\n : DIM_LEN_PCT;\n const regColorHint = new RegExp(`^(?:${dimension})$`);\n const regDimension = new RegExp(`(?:\\\\s+(?:${dimension})){1,2}$`);\n const valueTypes = [];\n const valueList = [];\n for (const item of list) {\n if (isString(item)) {\n if (regColorHint.test(item)) {\n valueTypes.push('hint');\n valueList.push(item);\n } else {\n const itemColor = item.replace(regDimension, '');\n if (isColor(itemColor, { format: VAL_SPEC })) {\n const resolvedColor = resolveColor(itemColor, opt) as string;\n valueTypes.push('color');\n valueList.push(item.replace(itemColor, resolvedColor));\n } else {\n return {\n colorStops: list,\n valid: false\n };\n }\n }\n }\n }\n const valid = /^color(?:,(?:hint,)?color)+$/.test(valueTypes.join(','));\n return {\n valid,\n colorStops: valueList\n };\n }\n return {\n colorStops: list,\n valid: false\n };\n};\n\n/**\n * parse CSS gradient\n * @param value - gradient value\n * @param [opt] - options\n * @returns parsed result\n */\nexport const parseGradient = (\n value: string,\n opt: Options = {}\n): Gradient | null => {\n if (isString(value)) {\n value = value.trim();\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'parseGradient',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return null;\n }\n return cachedResult.item as Gradient;\n }\n const type = getGradientType(value);\n const gradValue = value.replace(REG_GRAD, '').replace(/\\)$/, '');\n if (type && gradValue) {\n const [lineOrColorStop = '', ...itemList] = splitValue(gradValue, {\n delimiter: ','\n });\n const dimension = /^(?:repeating-)?conic-gradient$/.test(type)\n ? DIM_ANGLE_PCT\n : DIM_LEN_PCT;\n const regDimension = new RegExp(`(?:\\\\s+(?:${dimension})){1,2}$`);\n let colorStop = '';\n if (regDimension.test(lineOrColorStop)) {\n const itemColor = lineOrColorStop.replace(regDimension, '');\n if (isColor(itemColor, { format: VAL_SPEC })) {\n const resolvedColor = resolveColor(itemColor, opt) as string;\n colorStop = lineOrColorStop.replace(itemColor, resolvedColor);\n }\n } else if (isColor(lineOrColorStop, { format: VAL_SPEC })) {\n colorStop = resolveColor(lineOrColorStop, opt) as string;\n }\n if (colorStop) {\n itemList.unshift(colorStop);\n const { colorStops, valid } = validateColorStopList(\n itemList,\n type,\n opt\n );\n if (valid) {\n const res: Gradient = {\n value,\n type,\n colorStopList: colorStops as ColorStopList\n };\n setCache(cacheKey, res);\n return res;\n }\n } else if (itemList.length > 1) {\n const { line: gradientLine, valid: validLine } = validateGradientLine(\n lineOrColorStop,\n type\n );\n const { colorStops, valid: validColorStops } = validateColorStopList(\n itemList,\n type,\n opt\n );\n if (validLine && validColorStops) {\n const res: Gradient = {\n value,\n type,\n gradientLine,\n colorStopList: colorStops as ColorStopList\n };\n setCache(cacheKey, res);\n return res;\n }\n }\n }\n setCache(cacheKey, null);\n return null;\n }\n return null;\n};\n\n/**\n * resolve CSS gradient\n * @param value - CSS value\n * @param [opt] - options\n * @returns result\n */\nexport const resolveGradient = (value: string, opt: Options = {}): string => {\n const { format = VAL_COMP } = opt;\n const gradient = parseGradient(value, opt);\n if (gradient) {\n const { type = '', gradientLine = '', colorStopList = [] } = gradient;\n if (type && Array.isArray(colorStopList) && colorStopList.length > 1) {\n if (gradientLine) {\n return `${type}(${gradientLine}, ${colorStopList.join(', ')})`;\n }\n return `${type}(${colorStopList.join(', ')})`;\n }\n }\n if (format === VAL_SPEC) {\n return '';\n }\n return 'none';\n};\n\n/**\n * is CSS gradient\n * @param value - CSS value\n * @param [opt] - options\n * @returns result\n */\nexport const isGradient = (value: string, opt: Options = {}): boolean => {\n const gradient = parseGradient(value, opt);\n return gradient !== null;\n};\n","/**\n * convert\n */\n\nimport {\n CacheItem,\n NullObject,\n createCacheKey,\n getCache,\n setCache\n} from './cache';\nimport {\n convertColorToHsl,\n convertColorToHwb,\n convertColorToLab,\n convertColorToLch,\n convertColorToOklab,\n convertColorToOklch,\n convertColorToRgb,\n numberToHexString,\n parseColorFunc,\n parseColorValue\n} from './color';\nimport { isString } from './common';\nimport { cssCalc } from './css-calc';\nimport { resolveVar } from './css-var';\nimport { resolveRelativeColor } from './relative-color';\nimport { resolveColor } from './resolve';\nimport { ColorChannels, ComputedColorChannels, Options } from './typedef';\n\n/* constants */\nimport { SYN_FN_CALC, SYN_FN_REL, SYN_FN_VAR, VAL_COMP } from './constant';\nconst NAMESPACE = 'convert';\n\n/* regexp */\nconst REG_FN_CALC = new RegExp(SYN_FN_CALC);\nconst REG_FN_REL = new RegExp(SYN_FN_REL);\nconst REG_FN_VAR = new RegExp(SYN_FN_VAR);\n\n/**\n * pre process\n * @param value - CSS color value\n * @param [opt] - options\n * @returns value\n */\nexport const preProcess = (\n value: string,\n opt: Options = {}\n): string | NullObject => {\n if (isString(value)) {\n value = value.trim();\n if (!value) {\n return new NullObject();\n }\n } else {\n return new NullObject();\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'preProcess',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return cachedResult as NullObject;\n }\n return cachedResult.item as string;\n }\n if (REG_FN_VAR.test(value)) {\n const resolvedValue = resolveVar(value, opt);\n if (isString(resolvedValue)) {\n value = resolvedValue;\n } else {\n setCache(cacheKey, null);\n return new NullObject();\n }\n }\n if (REG_FN_REL.test(value)) {\n const resolvedValue = resolveRelativeColor(value, opt);\n if (isString(resolvedValue)) {\n value = resolvedValue;\n } else {\n setCache(cacheKey, null);\n return new NullObject();\n }\n } else if (REG_FN_CALC.test(value)) {\n value = cssCalc(value, opt);\n }\n if (value.startsWith('color-mix')) {\n const clonedOpt = structuredClone(opt);\n clonedOpt.format = VAL_COMP;\n clonedOpt.nullable = true;\n const resolvedValue = resolveColor(value, clonedOpt);\n setCache(cacheKey, resolvedValue);\n return resolvedValue;\n }\n setCache(cacheKey, value);\n return value;\n};\n\n/**\n * convert number to hex string\n * @param value - numeric value\n * @returns hex string: 00..ff\n */\nexport const numberToHex = (value: number): string => {\n const hex = numberToHexString(value);\n return hex;\n};\n\n/**\n * convert color to hex\n * @param value - CSS color value\n * @param [opt] - options\n * @param [opt.alpha] - enable alpha channel\n * @returns #rrggbb | #rrggbbaa | null\n */\nexport const colorToHex = (value: string, opt: Options = {}): string | null => {\n if (isString(value)) {\n const resolvedValue = preProcess(value, opt);\n if (resolvedValue instanceof NullObject) {\n return null;\n }\n value = resolvedValue.toLowerCase();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { alpha = false } = opt;\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'colorToHex',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return null;\n }\n return cachedResult.item as string;\n }\n let hex;\n opt.nullable = true;\n if (alpha) {\n opt.format = 'hexAlpha';\n hex = resolveColor(value, opt);\n } else {\n opt.format = 'hex';\n hex = resolveColor(value, opt);\n }\n if (isString(hex)) {\n setCache(cacheKey, hex);\n return hex;\n }\n setCache(cacheKey, null);\n return null;\n};\n\n/**\n * convert color to hsl\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels - [h, s, l, alpha]\n */\nexport const colorToHsl = (value: string, opt: Options = {}): ColorChannels => {\n if (isString(value)) {\n const resolvedValue = preProcess(value, opt);\n if (resolvedValue instanceof NullObject) {\n return [0, 0, 0, 0];\n }\n value = resolvedValue.toLowerCase();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'colorToHsl',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as ColorChannels;\n }\n opt.format = 'hsl';\n const hsl = convertColorToHsl(value, opt) as ColorChannels;\n setCache(cacheKey, hsl);\n return hsl;\n};\n\n/**\n * convert color to hwb\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels - [h, w, b, alpha]\n */\nexport const colorToHwb = (value: string, opt: Options = {}): ColorChannels => {\n if (isString(value)) {\n const resolvedValue = preProcess(value, opt);\n if (resolvedValue instanceof NullObject) {\n return [0, 0, 0, 0];\n }\n value = resolvedValue.toLowerCase();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'colorToHwb',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as ColorChannels;\n }\n opt.format = 'hwb';\n const hwb = convertColorToHwb(value, opt) as ColorChannels;\n setCache(cacheKey, hwb);\n return hwb;\n};\n\n/**\n * convert color to lab\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels - [l, a, b, alpha]\n */\nexport const colorToLab = (value: string, opt: Options = {}): ColorChannels => {\n if (isString(value)) {\n const resolvedValue = preProcess(value, opt);\n if (resolvedValue instanceof NullObject) {\n return [0, 0, 0, 0];\n }\n value = resolvedValue.toLowerCase();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'colorToLab',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as ColorChannels;\n }\n const lab = convertColorToLab(value, opt) as ColorChannels;\n setCache(cacheKey, lab);\n return lab;\n};\n\n/**\n * convert color to lch\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels - [l, c, h, alpha]\n */\nexport const colorToLch = (value: string, opt: Options = {}): ColorChannels => {\n if (isString(value)) {\n const resolvedValue = preProcess(value, opt);\n if (resolvedValue instanceof NullObject) {\n return [0, 0, 0, 0];\n }\n value = resolvedValue.toLowerCase();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'colorToLch',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as ColorChannels;\n }\n const lch = convertColorToLch(value, opt) as ColorChannels;\n setCache(cacheKey, lch);\n return lch;\n};\n\n/**\n * convert color to oklab\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels - [l, a, b, alpha]\n */\nexport const colorToOklab = (\n value: string,\n opt: Options = {}\n): ColorChannels => {\n if (isString(value)) {\n const resolvedValue = preProcess(value, opt);\n if (resolvedValue instanceof NullObject) {\n return [0, 0, 0, 0];\n }\n value = resolvedValue.toLowerCase();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'colorToOklab',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as ColorChannels;\n }\n const lab = convertColorToOklab(value, opt) as ColorChannels;\n setCache(cacheKey, lab);\n return lab;\n};\n\n/**\n * convert color to oklch\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels - [l, c, h, alpha]\n */\nexport const colorToOklch = (\n value: string,\n opt: Options = {}\n): ColorChannels => {\n if (isString(value)) {\n const resolvedValue = preProcess(value, opt);\n if (resolvedValue instanceof NullObject) {\n return [0, 0, 0, 0];\n }\n value = resolvedValue.toLowerCase();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'colorToOklch',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as ColorChannels;\n }\n const lch = convertColorToOklch(value, opt) as ColorChannels;\n setCache(cacheKey, lch);\n return lch;\n};\n\n/**\n * convert color to rgb\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels - [r, g, b, alpha]\n */\nexport const colorToRgb = (value: string, opt: Options = {}): ColorChannels => {\n if (isString(value)) {\n const resolvedValue = preProcess(value, opt);\n if (resolvedValue instanceof NullObject) {\n return [0, 0, 0, 0];\n }\n value = resolvedValue.toLowerCase();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'colorToRgb',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as ColorChannels;\n }\n const rgb = convertColorToRgb(value, opt) as ColorChannels;\n setCache(cacheKey, rgb);\n return rgb;\n};\n\n/**\n * convert color to xyz\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels - [x, y, z, alpha]\n */\nexport const colorToXyz = (value: string, opt: Options = {}): ColorChannels => {\n if (isString(value)) {\n const resolvedValue = preProcess(value, opt);\n if (resolvedValue instanceof NullObject) {\n return [0, 0, 0, 0];\n }\n value = resolvedValue.toLowerCase();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'colorToXyz',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as ColorChannels;\n }\n let xyz;\n if (value.startsWith('color(')) {\n [, ...xyz] = parseColorFunc(value, opt) as ComputedColorChannels;\n } else {\n [, ...xyz] = parseColorValue(value, opt) as ComputedColorChannels;\n }\n setCache(cacheKey, xyz);\n return xyz as ColorChannels;\n};\n\n/**\n * convert color to xyz-d50\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels - [x, y, z, alpha]\n */\nexport const colorToXyzD50 = (\n value: string,\n opt: Options = {}\n): ColorChannels => {\n opt.d50 = true;\n return colorToXyz(value, opt);\n};\n\n/* convert */\nexport const convert = {\n colorToHex,\n colorToHsl,\n colorToHwb,\n colorToLab,\n colorToLch,\n colorToOklab,\n colorToOklch,\n colorToRgb,\n colorToXyz,\n colorToXyzD50,\n numberToHex\n};\n"],"mappings":"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","names":["import_css_calc","import_css_tokenizer","import_css_tokenizer","res","val","res","cs","pA","NAMESPACE","import_css_tokenizer","PAREN_CLOSE","COMMENT","EOF","IDENT","NUM","PCT","W_SPACE","NAMESPACE","OCT","DEC","HEX","MAX_PCT","MAX_RGB","REG_FN_VAR","colorParser","NAMESPACE","REG_FN_CALC","REG_FN_REL","REG_FN_VAR","res","PAREN_CLOSE","COMMENT","DELIM","EOF","FUNC","IDENT","PAREN_OPEN","W_SPACE","NAMESPACE","DEC","HEX","DEG","DEG_HALF","REG_COLOR","REG_FN_COLOR","REG_MIX","value","PAREN_CLOSE","COMMENT","DIM","EOF","FUNC","PAREN_OPEN","W_SPACE","NAMESPACE","TRIA","HEX","MAX_PCT","REG_FN_CALC","REG_FN_MATH_START","REG_FN_VAR","l","value","parseTokens","resolvedValue","NAMESPACE","NAMESPACE","REG_FN_CALC","REG_FN_REL","REG_FN_VAR"]}
\ No newline at end of file diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/cjs/index.d.cts b/vanilla/node_modules/@asamuzakjp/css-color/dist/cjs/index.d.cts new file mode 100644 index 0000000..0b66e22 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/cjs/index.d.cts @@ -0,0 +1,110 @@ +/** + * typedef + */ +/** + * @typedef Options - options + * @property [alpha] - enable alpha + * @property [colorSpace] - color space + * @property [currentColor] - color for currentcolor + * @property [customProperty] - custom properties + * @property [d50] - white point in d50 + * @property [dimension] - dimension + * @property [format] - output format + * @property [key] - key + */ +interface Options { + alpha?: boolean; + colorScheme?: string; + colorSpace?: string; + currentColor?: string; + customProperty?: Record<string, string | ((K: string) => string)>; + d50?: boolean; + delimiter?: string | string[]; + dimension?: Record<string, number | ((K: string) => number)>; + format?: string; + nullable?: boolean; + preserveComment?: boolean; +} +/** + * @type ColorChannels - color channels + */ +type ColorChannels = [x: number, y: number, z: number, alpha: number]; + +/** + * convert + */ + +declare const convert: { + colorToHex: (value: string, opt?: Options) => string | null; + colorToHsl: (value: string, opt?: Options) => ColorChannels; + colorToHwb: (value: string, opt?: Options) => ColorChannels; + colorToLab: (value: string, opt?: Options) => ColorChannels; + colorToLch: (value: string, opt?: Options) => ColorChannels; + colorToOklab: (value: string, opt?: Options) => ColorChannels; + colorToOklch: (value: string, opt?: Options) => ColorChannels; + colorToRgb: (value: string, opt?: Options) => ColorChannels; + colorToXyz: (value: string, opt?: Options) => ColorChannels; + colorToXyzD50: (value: string, opt?: Options) => ColorChannels; + numberToHex: (value: number) => string; +}; + +/** + * resolve + */ + +/** + * resolve CSS color + * @param value + * - CSS color value + * - system colors are not supported + * @param [opt] - options + * @param [opt.currentColor] + * - color to use for `currentcolor` keyword + * - if omitted, it will be treated as a missing color + * i.e. `rgb(none none none / none)` + * @param [opt.customProperty] + * - custom properties + * - pair of `--` prefixed property name and value, + * e.g. `customProperty: { '--some-color': '#0000ff' }` + * - and/or `callback` function to get the value of the custom property, + * e.g. `customProperty: { callback: someDeclaration.getPropertyValue }` + * @param [opt.dimension] + * - dimension, convert relative length to pixels + * - pair of unit and it's value as a number in pixels, + * e.g. `dimension: { em: 12, rem: 16, vw: 10.26 }` + * - and/or `callback` function to get the value as a number in pixels, + * e.g. `dimension: { callback: convertUnitToPixel }` + * @param [opt.format] + * - output format, one of below + * - `computedValue` (default), [computed value][139] of the color + * - `specifiedValue`, [specified value][140] of the color + * - `hex`, hex color notation, i.e. `rrggbb` + * - `hexAlpha`, hex color notation with alpha channel, i.e. `#rrggbbaa` + * @returns + * - one of rgba?(), #rrggbb(aa)?, color-name, '(empty-string)', + * color(color-space r g b / alpha), color(color-space x y z / alpha), + * lab(l a b / alpha), lch(l c h / alpha), oklab(l a b / alpha), + * oklch(l c h / alpha), null + * - in `computedValue`, values are numbers, however `rgb()` values are + * integers + * - in `specifiedValue`, returns `empty string` for unknown and/or invalid + * color + * - in `hex`, returns `null` for `transparent`, and also returns `null` if + * any of `r`, `g`, `b`, `alpha` is not a number + * - in `hexAlpha`, returns `#00000000` for `transparent`, + * however returns `null` if any of `r`, `g`, `b`, `alpha` is not a number + */ +declare const resolve: (value: string, opt?: Options) => string | null; + +declare const utils: { + cssCalc: (value: string, opt?: Options) => string; + cssVar: (value: string, opt?: Options) => string; + extractDashedIdent: (value: string) => string[]; + isColor: (value: unknown, opt?: Options) => boolean; + isGradient: (value: string, opt?: Options) => boolean; + resolveGradient: (value: string, opt?: Options) => string; + resolveLengthInPixels: (value: number | string, unit: string | undefined, opt?: Options) => number; + splitValue: (value: string, opt?: Options) => string[]; +}; + +export { convert, resolve, utils }; diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/index.d.ts b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/index.d.ts new file mode 100644 index 0000000..6720cde --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/index.d.ts @@ -0,0 +1,18 @@ +/*! + * CSS color - Resolve, parse, convert CSS color. + * @license MIT + * @copyright asamuzaK (Kazz) + * @see {@link https://github.com/asamuzaK/cssColor/blob/main/LICENSE} + */ +export { convert } from './js/convert.js'; +export { resolve } from './js/resolve.js'; +export declare const utils: { + cssCalc: (value: string, opt?: import('./js/typedef.js').Options) => string; + cssVar: (value: string, opt?: import('./js/typedef.js').Options) => string; + extractDashedIdent: (value: string) => string[]; + isColor: (value: unknown, opt?: import('./js/typedef.js').Options) => boolean; + isGradient: (value: string, opt?: import('./js/typedef.js').Options) => boolean; + resolveGradient: (value: string, opt?: import('./js/typedef.js').Options) => string; + resolveLengthInPixels: (value: number | string, unit: string | undefined, opt?: import('./js/typedef.js').Options) => number; + splitValue: (value: string, opt?: import('./js/typedef.js').Options) => string[]; +}; diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/index.js b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/index.js new file mode 100644 index 0000000..8fc1988 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/index.js @@ -0,0 +1,22 @@ +import { cssCalc } from "./js/css-calc.js"; +import { resolveGradient, isGradient } from "./js/css-gradient.js"; +import { cssVar } from "./js/css-var.js"; +import { splitValue, resolveLengthInPixels, isColor, extractDashedIdent } from "./js/util.js"; +import { convert } from "./js/convert.js"; +import { resolve } from "./js/resolve.js"; +const utils = { + cssCalc, + cssVar, + extractDashedIdent, + isColor, + isGradient, + resolveGradient, + resolveLengthInPixels, + splitValue +}; +export { + convert, + resolve, + utils +}; +//# sourceMappingURL=index.js.map diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/index.js.map b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/index.js.map new file mode 100644 index 0000000..4b70d92 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["/*!\n * CSS color - Resolve, parse, convert CSS color.\n * @license MIT\n * @copyright asamuzaK (Kazz)\n * @see {@link https://github.com/asamuzaK/cssColor/blob/main/LICENSE}\n */\n\nimport { cssCalc } from './js/css-calc';\nimport { isGradient, resolveGradient } from './js/css-gradient';\nimport { cssVar } from './js/css-var';\nimport {\n extractDashedIdent,\n isColor,\n resolveLengthInPixels,\n splitValue\n} from './js/util';\n\nexport { convert } from './js/convert';\nexport { resolve } from './js/resolve';\n/* utils */\nexport const utils = {\n cssCalc,\n cssVar,\n extractDashedIdent,\n isColor,\n isGradient,\n resolveGradient,\n resolveLengthInPixels,\n splitValue\n};\n"],"names":[],"mappings":";;;;;;AAoBO,MAAM,QAAQ;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;"}
\ No newline at end of file diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/cache.d.ts b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/cache.d.ts new file mode 100644 index 0000000..74b26f6 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/cache.d.ts @@ -0,0 +1,44 @@ +import { LRUCache } from 'lru-cache'; +import { Options } from './typedef.js'; +/** + * CacheItem + */ +export declare class CacheItem { + #private; + /** + * constructor + */ + constructor(item: unknown, isNull?: boolean); + get item(): unknown; + get isNull(): boolean; +} +/** + * NullObject + */ +export declare class NullObject extends CacheItem { + /** + * constructor + */ + constructor(); +} +export declare const lruCache: LRUCache<{}, {}, unknown>; +/** + * set cache + * @param key - cache key + * @param value - value to cache + * @returns void + */ +export declare const setCache: (key: string, value: unknown) => void; +/** + * get cache + * @param key - cache key + * @returns cached item or false otherwise + */ +export declare const getCache: (key: string) => CacheItem | boolean; +/** + * create cache key + * @param keyData - key data + * @param [opt] - options + * @returns cache key + */ +export declare const createCacheKey: (keyData: Record<string, string>, opt?: Options) => string; diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/cache.js b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/cache.js new file mode 100644 index 0000000..2846ff2 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/cache.js @@ -0,0 +1,72 @@ +import { LRUCache } from "lru-cache"; +import { valueToJsonString } from "./util.js"; +const MAX_CACHE = 4096; +class CacheItem { + /* private */ + #isNull; + #item; + /** + * constructor + */ + constructor(item, isNull = false) { + this.#item = item; + this.#isNull = !!isNull; + } + get item() { + return this.#item; + } + get isNull() { + return this.#isNull; + } +} +class NullObject extends CacheItem { + /** + * constructor + */ + constructor() { + super(/* @__PURE__ */ Symbol("null"), true); + } +} +const lruCache = new LRUCache({ + max: MAX_CACHE +}); +const setCache = (key, value) => { + if (key) { + if (value === null) { + lruCache.set(key, new NullObject()); + } else if (value instanceof CacheItem) { + lruCache.set(key, value); + } else { + lruCache.set(key, new CacheItem(value)); + } + } +}; +const getCache = (key) => { + if (key && lruCache.has(key)) { + const item = lruCache.get(key); + if (item instanceof CacheItem) { + return item; + } + lruCache.delete(key); + return false; + } + return false; +}; +const createCacheKey = (keyData, opt = {}) => { + const { customProperty = {}, dimension = {} } = opt; + let cacheKey = ""; + if (keyData && Object.keys(keyData).length && typeof customProperty.callback !== "function" && typeof dimension.callback !== "function") { + keyData.opt = valueToJsonString(opt); + cacheKey = valueToJsonString(keyData); + } + return cacheKey; +}; +export { + CacheItem, + NullObject, + createCacheKey, + getCache, + lruCache, + setCache +}; +//# sourceMappingURL=cache.js.map diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/cache.js.map b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/cache.js.map new file mode 100644 index 0000000..5934f38 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/cache.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cache.js","sources":["../../../src/js/cache.ts"],"sourcesContent":["/**\n * cache\n */\n\nimport { LRUCache } from 'lru-cache';\nimport { Options } from './typedef';\nimport { valueToJsonString } from './util';\n\n/* numeric constants */\nconst MAX_CACHE = 4096;\n\n/**\n * CacheItem\n */\nexport class CacheItem {\n /* private */\n #isNull: boolean;\n #item: unknown;\n\n /**\n * constructor\n */\n constructor(item: unknown, isNull: boolean = false) {\n this.#item = item;\n this.#isNull = !!isNull;\n }\n\n get item() {\n return this.#item;\n }\n\n get isNull() {\n return this.#isNull;\n }\n}\n\n/**\n * NullObject\n */\nexport class NullObject extends CacheItem {\n /**\n * constructor\n */\n constructor() {\n super(Symbol('null'), true);\n }\n}\n\n/*\n * lru cache\n */\nexport const lruCache = new LRUCache({\n max: MAX_CACHE\n});\n\n/**\n * set cache\n * @param key - cache key\n * @param value - value to cache\n * @returns void\n */\nexport const setCache = (key: string, value: unknown): void => {\n if (key) {\n if (value === null) {\n lruCache.set(key, new NullObject());\n } else if (value instanceof CacheItem) {\n lruCache.set(key, value);\n } else {\n lruCache.set(key, new CacheItem(value));\n }\n }\n};\n\n/**\n * get cache\n * @param key - cache key\n * @returns cached item or false otherwise\n */\nexport const getCache = (key: string): CacheItem | boolean => {\n if (key && lruCache.has(key)) {\n const item = lruCache.get(key);\n if (item instanceof CacheItem) {\n return item;\n }\n // delete unexpected cached item\n lruCache.delete(key);\n return false;\n }\n return false;\n};\n\n/**\n * create cache key\n * @param keyData - key data\n * @param [opt] - options\n * @returns cache key\n */\nexport const createCacheKey = (\n keyData: Record<string, string>,\n opt: Options = {}\n): string => {\n const { customProperty = {}, dimension = {} } = opt;\n let cacheKey = '';\n if (\n keyData &&\n Object.keys(keyData).length &&\n typeof customProperty.callback !== 'function' &&\n typeof dimension.callback !== 'function'\n ) {\n keyData.opt = valueToJsonString(opt);\n cacheKey = valueToJsonString(keyData);\n }\n return cacheKey;\n};\n"],"names":[],"mappings":";;AASA,MAAM,YAAY;AAKX,MAAM,UAAU;AAAA;AAAA,EAErB;AAAA,EACA;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,MAAe,SAAkB,OAAO;AAClD,SAAK,QAAQ;AACb,SAAK,UAAU,CAAC,CAAC;AAAA,EACnB;AAAA,EAEA,IAAI,OAAO;AACT,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAS;AACX,WAAO,KAAK;AAAA,EACd;AACF;AAKO,MAAM,mBAAmB,UAAU;AAAA;AAAA;AAAA;AAAA,EAIxC,cAAc;AACZ,UAAM,uBAAO,MAAM,GAAG,IAAI;AAAA,EAC5B;AACF;AAKO,MAAM,WAAW,IAAI,SAAS;AAAA,EACnC,KAAK;AACP,CAAC;AAQM,MAAM,WAAW,CAAC,KAAa,UAAyB;AAC7D,MAAI,KAAK;AACP,QAAI,UAAU,MAAM;AAClB,eAAS,IAAI,KAAK,IAAI,WAAA,CAAY;AAAA,IACpC,WAAW,iBAAiB,WAAW;AACrC,eAAS,IAAI,KAAK,KAAK;AAAA,IACzB,OAAO;AACL,eAAS,IAAI,KAAK,IAAI,UAAU,KAAK,CAAC;AAAA,IACxC;AAAA,EACF;AACF;AAOO,MAAM,WAAW,CAAC,QAAqC;AAC5D,MAAI,OAAO,SAAS,IAAI,GAAG,GAAG;AAC5B,UAAM,OAAO,SAAS,IAAI,GAAG;AAC7B,QAAI,gBAAgB,WAAW;AAC7B,aAAO;AAAA,IACT;AAEA,aAAS,OAAO,GAAG;AACnB,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAQO,MAAM,iBAAiB,CAC5B,SACA,MAAe,OACJ;AACX,QAAM,EAAE,iBAAiB,CAAA,GAAI,YAAY,CAAA,MAAO;AAChD,MAAI,WAAW;AACf,MACE,WACA,OAAO,KAAK,OAAO,EAAE,UACrB,OAAO,eAAe,aAAa,cACnC,OAAO,UAAU,aAAa,YAC9B;AACA,YAAQ,MAAM,kBAAkB,GAAG;AACnC,eAAW,kBAAkB,OAAO;AAAA,EACtC;AACA,SAAO;AACT;"}
\ No newline at end of file diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/color.d.ts b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/color.d.ts new file mode 100644 index 0000000..9a1a0e2 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/color.d.ts @@ -0,0 +1,537 @@ +import { NullObject } from './cache.js'; +import { ColorChannels, Options, SpecifiedColorChannels } from './typedef.js'; +/** + * @type TriColorChannels - color channels without alpha + */ +type TriColorChannels = [x: number, y: number, z: number]; +/** + * @type ColorMatrix - color matrix + */ +type ColorMatrix = [ + r1: TriColorChannels, + r2: TriColorChannels, + r3: TriColorChannels +]; +/** + * named colors + */ +export declare const NAMED_COLORS: { + readonly aliceblue: [240, 248, 255]; + readonly antiquewhite: [250, 235, 215]; + readonly aqua: [0, 255, 255]; + readonly aquamarine: [127, 255, 212]; + readonly azure: [240, 255, 255]; + readonly beige: [245, 245, 220]; + readonly bisque: [255, 228, 196]; + readonly black: [0, 0, 0]; + readonly blanchedalmond: [255, 235, 205]; + readonly blue: [0, 0, 255]; + readonly blueviolet: [138, 43, 226]; + readonly brown: [165, 42, 42]; + readonly burlywood: [222, 184, 135]; + readonly cadetblue: [95, 158, 160]; + readonly chartreuse: [127, 255, 0]; + readonly chocolate: [210, 105, 30]; + readonly coral: [255, 127, 80]; + readonly cornflowerblue: [100, 149, 237]; + readonly cornsilk: [255, 248, 220]; + readonly crimson: [220, 20, 60]; + readonly cyan: [0, 255, 255]; + readonly darkblue: [0, 0, 139]; + readonly darkcyan: [0, 139, 139]; + readonly darkgoldenrod: [184, 134, 11]; + readonly darkgray: [169, 169, 169]; + readonly darkgreen: [0, 100, 0]; + readonly darkgrey: [169, 169, 169]; + readonly darkkhaki: [189, 183, 107]; + readonly darkmagenta: [139, 0, 139]; + readonly darkolivegreen: [85, 107, 47]; + readonly darkorange: [255, 140, 0]; + readonly darkorchid: [153, 50, 204]; + readonly darkred: [139, 0, 0]; + readonly darksalmon: [233, 150, 122]; + readonly darkseagreen: [143, 188, 143]; + readonly darkslateblue: [72, 61, 139]; + readonly darkslategray: [47, 79, 79]; + readonly darkslategrey: [47, 79, 79]; + readonly darkturquoise: [0, 206, 209]; + readonly darkviolet: [148, 0, 211]; + readonly deeppink: [255, 20, 147]; + readonly deepskyblue: [0, 191, 255]; + readonly dimgray: [105, 105, 105]; + readonly dimgrey: [105, 105, 105]; + readonly dodgerblue: [30, 144, 255]; + readonly firebrick: [178, 34, 34]; + readonly floralwhite: [255, 250, 240]; + readonly forestgreen: [34, 139, 34]; + readonly fuchsia: [255, 0, 255]; + readonly gainsboro: [220, 220, 220]; + readonly ghostwhite: [248, 248, 255]; + readonly gold: [255, 215, 0]; + readonly goldenrod: [218, 165, 32]; + readonly gray: [128, 128, 128]; + readonly green: [0, 128, 0]; + readonly greenyellow: [173, 255, 47]; + readonly grey: [128, 128, 128]; + readonly honeydew: [240, 255, 240]; + readonly hotpink: [255, 105, 180]; + readonly indianred: [205, 92, 92]; + readonly indigo: [75, 0, 130]; + readonly ivory: [255, 255, 240]; + readonly khaki: [240, 230, 140]; + readonly lavender: [230, 230, 250]; + readonly lavenderblush: [255, 240, 245]; + readonly lawngreen: [124, 252, 0]; + readonly lemonchiffon: [255, 250, 205]; + readonly lightblue: [173, 216, 230]; + readonly lightcoral: [240, 128, 128]; + readonly lightcyan: [224, 255, 255]; + readonly lightgoldenrodyellow: [250, 250, 210]; + readonly lightgray: [211, 211, 211]; + readonly lightgreen: [144, 238, 144]; + readonly lightgrey: [211, 211, 211]; + readonly lightpink: [255, 182, 193]; + readonly lightsalmon: [255, 160, 122]; + readonly lightseagreen: [32, 178, 170]; + readonly lightskyblue: [135, 206, 250]; + readonly lightslategray: [119, 136, 153]; + readonly lightslategrey: [119, 136, 153]; + readonly lightsteelblue: [176, 196, 222]; + readonly lightyellow: [255, 255, 224]; + readonly lime: [0, 255, 0]; + readonly limegreen: [50, 205, 50]; + readonly linen: [250, 240, 230]; + readonly magenta: [255, 0, 255]; + readonly maroon: [128, 0, 0]; + readonly mediumaquamarine: [102, 205, 170]; + readonly mediumblue: [0, 0, 205]; + readonly mediumorchid: [186, 85, 211]; + readonly mediumpurple: [147, 112, 219]; + readonly mediumseagreen: [60, 179, 113]; + readonly mediumslateblue: [123, 104, 238]; + readonly mediumspringgreen: [0, 250, 154]; + readonly mediumturquoise: [72, 209, 204]; + readonly mediumvioletred: [199, 21, 133]; + readonly midnightblue: [25, 25, 112]; + readonly mintcream: [245, 255, 250]; + readonly mistyrose: [255, 228, 225]; + readonly moccasin: [255, 228, 181]; + readonly navajowhite: [255, 222, 173]; + readonly navy: [0, 0, 128]; + readonly oldlace: [253, 245, 230]; + readonly olive: [128, 128, 0]; + readonly olivedrab: [107, 142, 35]; + readonly orange: [255, 165, 0]; + readonly orangered: [255, 69, 0]; + readonly orchid: [218, 112, 214]; + readonly palegoldenrod: [238, 232, 170]; + readonly palegreen: [152, 251, 152]; + readonly paleturquoise: [175, 238, 238]; + readonly palevioletred: [219, 112, 147]; + readonly papayawhip: [255, 239, 213]; + readonly peachpuff: [255, 218, 185]; + readonly peru: [205, 133, 63]; + readonly pink: [255, 192, 203]; + readonly plum: [221, 160, 221]; + readonly powderblue: [176, 224, 230]; + readonly purple: [128, 0, 128]; + readonly rebeccapurple: [102, 51, 153]; + readonly red: [255, 0, 0]; + readonly rosybrown: [188, 143, 143]; + readonly royalblue: [65, 105, 225]; + readonly saddlebrown: [139, 69, 19]; + readonly salmon: [250, 128, 114]; + readonly sandybrown: [244, 164, 96]; + readonly seagreen: [46, 139, 87]; + readonly seashell: [255, 245, 238]; + readonly sienna: [160, 82, 45]; + readonly silver: [192, 192, 192]; + readonly skyblue: [135, 206, 235]; + readonly slateblue: [106, 90, 205]; + readonly slategray: [112, 128, 144]; + readonly slategrey: [112, 128, 144]; + readonly snow: [255, 250, 250]; + readonly springgreen: [0, 255, 127]; + readonly steelblue: [70, 130, 180]; + readonly tan: [210, 180, 140]; + readonly teal: [0, 128, 128]; + readonly thistle: [216, 191, 216]; + readonly tomato: [255, 99, 71]; + readonly turquoise: [64, 224, 208]; + readonly violet: [238, 130, 238]; + readonly wheat: [245, 222, 179]; + readonly white: [255, 255, 255]; + readonly whitesmoke: [245, 245, 245]; + readonly yellow: [255, 255, 0]; + readonly yellowgreen: [154, 205, 50]; +}; +/** + * cache invalid color value + * @param key - cache key + * @param nullable - is nullable + * @returns cached value + */ +export declare const cacheInvalidColorValue: (cacheKey: string, format: string, nullable?: boolean) => SpecifiedColorChannels | string | NullObject; +/** + * resolve invalid color value + * @param format - output format + * @param nullable - is nullable + * @returns resolved value + */ +export declare const resolveInvalidColorValue: (format: string, nullable?: boolean) => SpecifiedColorChannels | string | NullObject; +/** + * validate color components + * @param arr - color components + * @param [opt] - options + * @param [opt.alpha] - alpha channel + * @param [opt.minLength] - min length + * @param [opt.maxLength] - max length + * @param [opt.minRange] - min range + * @param [opt.maxRange] - max range + * @param [opt.validateRange] - validate range + * @returns result - validated color components + */ +export declare const validateColorComponents: (arr: ColorChannels | TriColorChannels, opt?: { + alpha?: boolean; + minLength?: number; + maxLength?: number; + minRange?: number; + maxRange?: number; + validateRange?: boolean; +}) => ColorChannels | TriColorChannels; +/** + * transform matrix + * @param mtx - 3 * 3 matrix + * @param vct - vector + * @param [skip] - skip validate + * @returns TriColorChannels - [p1, p2, p3] + */ +export declare const transformMatrix: (mtx: ColorMatrix, vct: TriColorChannels, skip?: boolean) => TriColorChannels; +/** + * normalize color components + * @param colorA - color components [v1, v2, v3, v4] + * @param colorB - color components [v1, v2, v3, v4] + * @param [skip] - skip validate + * @returns result - [colorA, colorB] + */ +export declare const normalizeColorComponents: (colorA: [number | string, number | string, number | string, number | string], colorB: [number | string, number | string, number | string, number | string], skip?: boolean) => [ColorChannels, ColorChannels]; +/** + * number to hex string + * @param value - numeric value + * @returns hex string + */ +export declare const numberToHexString: (value: number) => string; +/** + * angle to deg + * @param angle + * @returns deg: 0..360 + */ +export declare const angleToDeg: (angle: string) => number; +/** + * parse alpha + * @param [alpha] - alpha value + * @returns alpha: 0..1 + */ +export declare const parseAlpha: (alpha?: string) => number; +/** + * parse hex alpha + * @param value - alpha value in hex string + * @returns alpha: 0..1 + */ +export declare const parseHexAlpha: (value: string) => number; +/** + * transform rgb to linear rgb + * @param rgb - [r, g, b] r|g|b: 0..255 + * @param [skip] - skip validate + * @returns TriColorChannels - [r, g, b] r|g|b: 0..1 + */ +export declare const transformRgbToLinearRgb: (rgb: TriColorChannels, skip?: boolean) => TriColorChannels; +/** + * transform rgb to xyz + * @param rgb - [r, g, b] r|g|b: 0..255 + * @param [skip] - skip validate + * @returns TriColorChannels - [x, y, z] + */ +export declare const transformRgbToXyz: (rgb: TriColorChannels, skip?: boolean) => TriColorChannels; +/** + * transform rgb to xyz-d50 + * @param rgb - [r, g, b] r|g|b: 0..255 alpha: 0..1 + * @returns TriColorChannels - [x, y, z] + */ +export declare const transformRgbToXyzD50: (rgb: TriColorChannels) => TriColorChannels; +/** + * transform linear rgb to rgb + * @param rgb - [r, g, b] r|g|b: 0..1 + * @param [round] - round result + * @returns TriColorChannels - [r, g, b] r|g|b: 0..255 + */ +export declare const transformLinearRgbToRgb: (rgb: TriColorChannels, round?: boolean) => TriColorChannels; +/** + * transform xyz to rgb + * @param xyz - [x, y, z] + * @param [skip] - skip validate + * @returns TriColorChannels - [r, g, b] r|g|b: 0..255 + */ +export declare const transformXyzToRgb: (xyz: TriColorChannels, skip?: boolean) => TriColorChannels; +/** + * transform xyz to xyz-d50 + * @param xyz - [x, y, z] + * @returns TriColorChannels - [x, y, z] + */ +export declare const transformXyzToXyzD50: (xyz: TriColorChannels) => TriColorChannels; +/** + * transform xyz to hsl + * @param xyz - [x, y, z] + * @param [skip] - skip validate + * @returns TriColorChannels - [h, s, l] + */ +export declare const transformXyzToHsl: (xyz: TriColorChannels, skip?: boolean) => TriColorChannels; +/** + * transform xyz to hwb + * @param xyz - [x, y, z] + * @param [skip] - skip validate + * @returns TriColorChannels - [h, w, b] + */ +export declare const transformXyzToHwb: (xyz: TriColorChannels, skip?: boolean) => TriColorChannels; +/** + * transform xyz to oklab + * @param xyz - [x, y, z] + * @param [skip] - skip validate + * @returns TriColorChannels - [l, a, b] + */ +export declare const transformXyzToOklab: (xyz: TriColorChannels, skip?: boolean) => TriColorChannels; +/** + * transform xyz to oklch + * @param xyz - [x, y, z] + * @param [skip] - skip validate + * @returns TriColorChannels - [l, c, h] + */ +export declare const transformXyzToOklch: (xyz: TriColorChannels, skip?: boolean) => TriColorChannels; +/** + * transform xyz D50 to rgb + * @param xyz - [x, y, z] + * @param [skip] - skip validate + * @returns TriColorChannels - [r, g, b] r|g|b: 0..255 + */ +export declare const transformXyzD50ToRgb: (xyz: TriColorChannels, skip?: boolean) => TriColorChannels; +/** + * transform xyz-d50 to lab + * @param xyz - [x, y, z] + * @param [skip] - skip validate + * @returns TriColorChannels - [l, a, b] + */ +export declare const transformXyzD50ToLab: (xyz: TriColorChannels, skip?: boolean) => TriColorChannels; +/** + * transform xyz-d50 to lch + * @param xyz - [x, y, z] + * @param [skip] - skip validate + * @returns TriColorChannels - [l, c, h] + */ +export declare const transformXyzD50ToLch: (xyz: TriColorChannels, skip?: boolean) => TriColorChannels; +/** + * convert rgb to hex color + * @param rgb - [r, g, b, alpha] r|g|b: 0..255 alpha: 0..1 + * @returns hex color + */ +export declare const convertRgbToHex: (rgb: ColorChannels) => string; +/** + * convert linear rgb to hex color + * @param rgb - [r, g, b, alpha] r|g|b|alpha: 0..1 + * @param [skip] - skip validate + * @returns hex color + */ +export declare const convertLinearRgbToHex: (rgb: ColorChannels, skip?: boolean) => string; +/** + * convert xyz to hex color + * @param xyz - [x, y, z, alpha] + * @returns hex color + */ +export declare const convertXyzToHex: (xyz: ColorChannels) => string; +/** + * convert xyz D50 to hex color + * @param xyz - [x, y, z, alpha] + * @returns hex color + */ +export declare const convertXyzD50ToHex: (xyz: ColorChannels) => string; +/** + * convert hex color to rgb + * @param value - hex color value + * @returns ColorChannels - [r, g, b, alpha] r|g|b: 0..255 alpha: 0..1 + */ +export declare const convertHexToRgb: (value: string) => ColorChannels; +/** + * convert hex color to linear rgb + * @param value - hex color value + * @returns ColorChannels - [r, g, b, alpha] r|g|b|alpha: 0..1 + */ +export declare const convertHexToLinearRgb: (value: string) => ColorChannels; +/** + * convert hex color to xyz + * @param value - hex color value + * @returns ColorChannels - [x, y, z, alpha] + */ +export declare const convertHexToXyz: (value: string) => ColorChannels; +/** + * parse rgb() + * @param value - rgb color value + * @param [opt] - options + * @returns parsed color - ['rgb', r, g, b, alpha], '(empty)', NullObject + */ +export declare const parseRgb: (value: string, opt?: Options) => SpecifiedColorChannels | string | NullObject; +/** + * parse hsl() + * @param value - hsl color value + * @param [opt] - options + * @returns parsed color - ['rgb', r, g, b, alpha], '(empty)', NullObject + */ +export declare const parseHsl: (value: string, opt?: Options) => SpecifiedColorChannels | string | NullObject; +/** + * parse hwb() + * @param value - hwb color value + * @param [opt] - options + * @returns parsed color - ['rgb', r, g, b, alpha], '(empty)', NullObject + */ +export declare const parseHwb: (value: string, opt?: Options) => SpecifiedColorChannels | string | NullObject; +/** + * parse lab() + * @param value - lab color value + * @param [opt] - options + * @returns parsed color + * - [xyz-d50, x, y, z, alpha], ['lab', l, a, b, alpha], '(empty)', NullObject + */ +export declare const parseLab: (value: string, opt?: Options) => SpecifiedColorChannels | string | NullObject; +/** + * parse lch() + * @param value - lch color value + * @param [opt] - options + * @returns parsed color + * - ['xyz-d50', x, y, z, alpha], ['lch', l, c, h, alpha] + * - '(empty)', NullObject + */ +export declare const parseLch: (value: string, opt?: Options) => SpecifiedColorChannels | string | NullObject; +/** + * parse oklab() + * @param value - oklab color value + * @param [opt] - options + * @returns parsed color + * - ['xyz-d65', x, y, z, alpha], ['oklab', l, a, b, alpha] + * - '(empty)', NullObject + */ +export declare const parseOklab: (value: string, opt?: Options) => SpecifiedColorChannels | string | NullObject; +/** + * parse oklch() + * @param value - oklch color value + * @param [opt] - options + * @returns parsed color + * - ['xyz-d65', x, y, z, alpha], ['oklch', l, c, h, alpha] + * - '(empty)', NullObject + */ +export declare const parseOklch: (value: string, opt?: Options) => SpecifiedColorChannels | string | NullObject; +/** + * parse color() + * @param value - color function value + * @param [opt] - options + * @returns parsed color + * - ['xyz-(d50|d65)', x, y, z, alpha], [cs, r, g, b, alpha] + * - '(empty)', NullObject + */ +export declare const parseColorFunc: (value: string, opt?: Options) => SpecifiedColorChannels | string | NullObject; +/** + * parse color value + * @param value - CSS color value + * @param [opt] - options + * @returns parsed color + * - ['xyz-(d50|d65)', x, y, z, alpha], ['rgb', r, g, b, alpha] + * - value, '(empty)', NullObject + */ +export declare const parseColorValue: (value: string, opt?: Options) => SpecifiedColorChannels | string | NullObject; +/** + * resolve color value + * @param value - CSS color value + * @param [opt] - options + * @returns resolved color + * - [cs, v1, v2, v3, alpha], value, '(empty)', NullObject + */ +export declare const resolveColorValue: (value: string, opt?: Options) => SpecifiedColorChannels | string | NullObject; +/** + * resolve color() + * @param value - color function value + * @param [opt] - options + * @returns resolved color - [cs, v1, v2, v3, alpha], '(empty)', NullObject + */ +export declare const resolveColorFunc: (value: string, opt?: Options) => SpecifiedColorChannels | string | NullObject; +/** + * convert color value to linear rgb + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels | NullObject - [r, g, b, alpha] r|g|b|alpha: 0..1 + */ +export declare const convertColorToLinearRgb: (value: string, opt?: { + colorSpace?: string; + format?: string; +}) => ColorChannels | NullObject; +/** + * convert color value to rgb + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels | NullObject + * - [r, g, b, alpha] r|g|b: 0..255 alpha: 0..1 + */ +export declare const convertColorToRgb: (value: string, opt?: Options) => ColorChannels | NullObject; +/** + * convert color value to xyz + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels | NullObject - [x, y, z, alpha] + */ +export declare const convertColorToXyz: (value: string, opt?: Options) => ColorChannels | NullObject; +/** + * convert color value to hsl + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels | NullObject - [h, s, l, alpha], hue may be powerless + */ +export declare const convertColorToHsl: (value: string, opt?: Options) => ColorChannels | [number | string, number, number, number] | NullObject; +/** + * convert color value to hwb + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels | NullObject - [h, w, b, alpha], hue may be powerless + */ +export declare const convertColorToHwb: (value: string, opt?: Options) => ColorChannels | [number | string, number, number, number] | NullObject; +/** + * convert color value to lab + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels | NullObject - [l, a, b, alpha] + */ +export declare const convertColorToLab: (value: string, opt?: Options) => ColorChannels | NullObject; +/** + * convert color value to lch + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels | NullObject - [l, c, h, alpha], hue may be powerless + */ +export declare const convertColorToLch: (value: string, opt?: Options) => ColorChannels | [number, number, number | string, number] | NullObject; +/** + * convert color value to oklab + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels | NullObject - [l, a, b, alpha] + */ +export declare const convertColorToOklab: (value: string, opt?: Options) => ColorChannels | NullObject; +/** + * convert color value to oklch + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels | NullObject - [l, c, h, alpha], hue may be powerless + */ +export declare const convertColorToOklch: (value: string, opt?: Options) => ColorChannels | [number, number, number | string, number] | NullObject; +/** + * resolve color-mix() + * @param value - color-mix color value + * @param [opt] - options + * @returns resolved color - [cs, v1, v2, v3, alpha], '(empty)' + */ +export declare const resolveColorMix: (value: string, opt?: Options) => SpecifiedColorChannels | string | NullObject; +export {}; diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/color.js b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/color.js new file mode 100644 index 0000000..f2672dc --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/color.js @@ -0,0 +1,2833 @@ +import { NullObject, createCacheKey, getCache, CacheItem, setCache } from "./cache.js"; +import { isString } from "./common.js"; +import { resolveColor } from "./resolve.js"; +import { roundToPrecision, splitValue, interpolateHue } from "./util.js"; +import { NONE, VAL_MIX, VAL_COMP, VAL_SPEC, FN_COLOR, SYN_FN_COLOR, SYN_COLOR_TYPE, SYN_LCH, SYN_MOD, SYN_HSL, SYN_HSL_LV3, FN_MIX, FN_LIGHT_DARK, SYN_RGB_LV3, SYN_MIX, CS_RGB, CS_XYZ, CS_MIX, CS_HUE_CAPT, PCT, SYN_MIX_PART, SYN_MIX_CAPT, NUM, ANGLE } from "./constant.js"; +const NAMESPACE = "color"; +const PPTH = 1e-3; +const HALF = 0.5; +const DUO = 2; +const TRIA = 3; +const QUAD = 4; +const OCT = 8; +const DEC = 10; +const DOZ = 12; +const HEX = 16; +const SEXA = 60; +const DEG_HALF = 180; +const DEG = 360; +const MAX_PCT = 100; +const MAX_RGB = 255; +const POW_SQR = 2; +const POW_CUBE = 3; +const POW_LINEAR = 2.4; +const LINEAR_COEF = 12.92; +const LINEAR_OFFSET = 0.055; +const LAB_L = 116; +const LAB_A = 500; +const LAB_B = 200; +const LAB_EPSILON = 216 / 24389; +const LAB_KAPPA = 24389 / 27; +const D50 = [ + 0.3457 / 0.3585, + 1, + (1 - 0.3457 - 0.3585) / 0.3585 +]; +const MATRIX_D50_TO_D65 = [ + [0.955473421488075, -0.02309845494876471, 0.06325924320057072], + [-0.0283697093338637, 1.0099953980813041, 0.021041441191917323], + [0.012314014864481998, -0.020507649298898964, 1.330365926242124] +]; +const MATRIX_D65_TO_D50 = [ + [1.0479297925449969, 0.022946870601609652, -0.05019226628920524], + [0.02962780877005599, 0.9904344267538799, -0.017073799063418826], + [-0.009243040646204504, 0.015055191490298152, 0.7518742814281371] +]; +const MATRIX_L_RGB_TO_XYZ = [ + [506752 / 1228815, 87881 / 245763, 12673 / 70218], + [87098 / 409605, 175762 / 245763, 12673 / 175545], + [7918 / 409605, 87881 / 737289, 1001167 / 1053270] +]; +const MATRIX_XYZ_TO_L_RGB = [ + [12831 / 3959, -329 / 214, -1974 / 3959], + [-851781 / 878810, 1648619 / 878810, 36519 / 878810], + [705 / 12673, -2585 / 12673, 705 / 667] +]; +const MATRIX_XYZ_TO_LMS = [ + [0.819022437996703, 0.3619062600528904, -0.1288737815209879], + [0.0329836539323885, 0.9292868615863434, 0.0361446663506424], + [0.0481771893596242, 0.2642395317527308, 0.6335478284694309] +]; +const MATRIX_LMS_TO_XYZ = [ + [1.2268798758459243, -0.5578149944602171, 0.2813910456659647], + [-0.0405757452148008, 1.112286803280317, -0.0717110580655164], + [-0.0763729366746601, -0.4214933324022432, 1.5869240198367816] +]; +const MATRIX_OKLAB_TO_LMS = [ + [1, 0.3963377773761749, 0.2158037573099136], + [1, -0.1055613458156586, -0.0638541728258133], + [1, -0.0894841775298119, -1.2914855480194092] +]; +const MATRIX_LMS_TO_OKLAB = [ + [0.210454268309314, 0.7936177747023054, -0.0040720430116193], + [1.9779985324311684, -2.42859224204858, 0.450593709617411], + [0.0259040424655478, 0.7827717124575296, -0.8086757549230774] +]; +const MATRIX_P3_TO_XYZ = [ + [608311 / 1250200, 189793 / 714400, 198249 / 1000160], + [35783 / 156275, 247089 / 357200, 198249 / 2500400], + [0 / 1, 32229 / 714400, 5220557 / 5000800] +]; +const MATRIX_REC2020_TO_XYZ = [ + [63426534 / 99577255, 20160776 / 139408157, 47086771 / 278816314], + [26158966 / 99577255, 472592308 / 697040785, 8267143 / 139408157], + [0 / 1, 19567812 / 697040785, 295819943 / 278816314] +]; +const MATRIX_A98_TO_XYZ = [ + [573536 / 994567, 263643 / 1420810, 187206 / 994567], + [591459 / 1989134, 6239551 / 9945670, 374412 / 4972835], + [53769 / 1989134, 351524 / 4972835, 4929758 / 4972835] +]; +const MATRIX_PROPHOTO_TO_XYZ_D50 = [ + [0.7977666449006423, 0.13518129740053308, 0.0313477341283922], + [0.2880748288194013, 0.711835234241873, 8993693872564e-17], + [0, 0, 0.8251046025104602] +]; +const REG_COLOR = new RegExp(`^(?:${SYN_COLOR_TYPE})$`); +const REG_CS_HUE = new RegExp(`^${CS_HUE_CAPT}$`); +const REG_CS_XYZ = /^xyz(?:-d(?:50|65))?$/; +const REG_CURRENT = /^currentColor$/i; +const REG_FN_COLOR = new RegExp(`^color\\(\\s*(${SYN_FN_COLOR})\\s*\\)$`); +const REG_HSL = new RegExp(`^hsla?\\(\\s*(${SYN_HSL}|${SYN_HSL_LV3})\\s*\\)$`); +const REG_HWB = new RegExp(`^hwb\\(\\s*(${SYN_HSL})\\s*\\)$`); +const REG_LAB = new RegExp(`^lab\\(\\s*(${SYN_MOD})\\s*\\)$`); +const REG_LCH = new RegExp(`^lch\\(\\s*(${SYN_LCH})\\s*\\)$`); +const REG_MIX = new RegExp(`^${SYN_MIX}$`); +const REG_MIX_CAPT = new RegExp(`^${SYN_MIX_CAPT}$`); +const REG_MIX_NEST = new RegExp(`${SYN_MIX}`, "g"); +const REG_OKLAB = new RegExp(`^oklab\\(\\s*(${SYN_MOD})\\s*\\)$`); +const REG_OKLCH = new RegExp(`^oklch\\(\\s*(${SYN_LCH})\\s*\\)$`); +const REG_SPEC = /^(?:specifi|comput)edValue$/; +const NAMED_COLORS = { + aliceblue: [240, 248, 255], + antiquewhite: [250, 235, 215], + aqua: [0, 255, 255], + aquamarine: [127, 255, 212], + azure: [240, 255, 255], + beige: [245, 245, 220], + bisque: [255, 228, 196], + black: [0, 0, 0], + blanchedalmond: [255, 235, 205], + blue: [0, 0, 255], + blueviolet: [138, 43, 226], + brown: [165, 42, 42], + burlywood: [222, 184, 135], + cadetblue: [95, 158, 160], + chartreuse: [127, 255, 0], + chocolate: [210, 105, 30], + coral: [255, 127, 80], + cornflowerblue: [100, 149, 237], + cornsilk: [255, 248, 220], + crimson: [220, 20, 60], + cyan: [0, 255, 255], + darkblue: [0, 0, 139], + darkcyan: [0, 139, 139], + darkgoldenrod: [184, 134, 11], + darkgray: [169, 169, 169], + darkgreen: [0, 100, 0], + darkgrey: [169, 169, 169], + darkkhaki: [189, 183, 107], + darkmagenta: [139, 0, 139], + darkolivegreen: [85, 107, 47], + darkorange: [255, 140, 0], + darkorchid: [153, 50, 204], + darkred: [139, 0, 0], + darksalmon: [233, 150, 122], + darkseagreen: [143, 188, 143], + darkslateblue: [72, 61, 139], + darkslategray: [47, 79, 79], + darkslategrey: [47, 79, 79], + darkturquoise: [0, 206, 209], + darkviolet: [148, 0, 211], + deeppink: [255, 20, 147], + deepskyblue: [0, 191, 255], + dimgray: [105, 105, 105], + dimgrey: [105, 105, 105], + dodgerblue: [30, 144, 255], + firebrick: [178, 34, 34], + floralwhite: [255, 250, 240], + forestgreen: [34, 139, 34], + fuchsia: [255, 0, 255], + gainsboro: [220, 220, 220], + ghostwhite: [248, 248, 255], + gold: [255, 215, 0], + goldenrod: [218, 165, 32], + gray: [128, 128, 128], + green: [0, 128, 0], + greenyellow: [173, 255, 47], + grey: [128, 128, 128], + honeydew: [240, 255, 240], + hotpink: [255, 105, 180], + indianred: [205, 92, 92], + indigo: [75, 0, 130], + ivory: [255, 255, 240], + khaki: [240, 230, 140], + lavender: [230, 230, 250], + lavenderblush: [255, 240, 245], + lawngreen: [124, 252, 0], + lemonchiffon: [255, 250, 205], + lightblue: [173, 216, 230], + lightcoral: [240, 128, 128], + lightcyan: [224, 255, 255], + lightgoldenrodyellow: [250, 250, 210], + lightgray: [211, 211, 211], + lightgreen: [144, 238, 144], + lightgrey: [211, 211, 211], + lightpink: [255, 182, 193], + lightsalmon: [255, 160, 122], + lightseagreen: [32, 178, 170], + lightskyblue: [135, 206, 250], + lightslategray: [119, 136, 153], + lightslategrey: [119, 136, 153], + lightsteelblue: [176, 196, 222], + lightyellow: [255, 255, 224], + lime: [0, 255, 0], + limegreen: [50, 205, 50], + linen: [250, 240, 230], + magenta: [255, 0, 255], + maroon: [128, 0, 0], + mediumaquamarine: [102, 205, 170], + mediumblue: [0, 0, 205], + mediumorchid: [186, 85, 211], + mediumpurple: [147, 112, 219], + mediumseagreen: [60, 179, 113], + mediumslateblue: [123, 104, 238], + mediumspringgreen: [0, 250, 154], + mediumturquoise: [72, 209, 204], + mediumvioletred: [199, 21, 133], + midnightblue: [25, 25, 112], + mintcream: [245, 255, 250], + mistyrose: [255, 228, 225], + moccasin: [255, 228, 181], + navajowhite: [255, 222, 173], + navy: [0, 0, 128], + oldlace: [253, 245, 230], + olive: [128, 128, 0], + olivedrab: [107, 142, 35], + orange: [255, 165, 0], + orangered: [255, 69, 0], + orchid: [218, 112, 214], + palegoldenrod: [238, 232, 170], + palegreen: [152, 251, 152], + paleturquoise: [175, 238, 238], + palevioletred: [219, 112, 147], + papayawhip: [255, 239, 213], + peachpuff: [255, 218, 185], + peru: [205, 133, 63], + pink: [255, 192, 203], + plum: [221, 160, 221], + powderblue: [176, 224, 230], + purple: [128, 0, 128], + rebeccapurple: [102, 51, 153], + red: [255, 0, 0], + rosybrown: [188, 143, 143], + royalblue: [65, 105, 225], + saddlebrown: [139, 69, 19], + salmon: [250, 128, 114], + sandybrown: [244, 164, 96], + seagreen: [46, 139, 87], + seashell: [255, 245, 238], + sienna: [160, 82, 45], + silver: [192, 192, 192], + skyblue: [135, 206, 235], + slateblue: [106, 90, 205], + slategray: [112, 128, 144], + slategrey: [112, 128, 144], + snow: [255, 250, 250], + springgreen: [0, 255, 127], + steelblue: [70, 130, 180], + tan: [210, 180, 140], + teal: [0, 128, 128], + thistle: [216, 191, 216], + tomato: [255, 99, 71], + turquoise: [64, 224, 208], + violet: [238, 130, 238], + wheat: [245, 222, 179], + white: [255, 255, 255], + whitesmoke: [245, 245, 245], + yellow: [255, 255, 0], + yellowgreen: [154, 205, 50] +}; +const cacheInvalidColorValue = (cacheKey, format, nullable = false) => { + if (format === VAL_SPEC) { + const res2 = ""; + setCache(cacheKey, res2); + return res2; + } + if (nullable) { + setCache(cacheKey, null); + return new NullObject(); + } + const res = ["rgb", 0, 0, 0, 0]; + setCache(cacheKey, res); + return res; +}; +const resolveInvalidColorValue = (format, nullable = false) => { + switch (format) { + case "hsl": + case "hwb": + case VAL_MIX: { + return new NullObject(); + } + case VAL_SPEC: { + return ""; + } + default: { + if (nullable) { + return new NullObject(); + } + return ["rgb", 0, 0, 0, 0]; + } + } +}; +const validateColorComponents = (arr, opt = {}) => { + if (!Array.isArray(arr)) { + throw new TypeError(`${arr} is not an array.`); + } + const { + alpha = false, + minLength = TRIA, + maxLength = QUAD, + minRange = 0, + maxRange = 1, + validateRange = true + } = opt; + if (!Number.isFinite(minLength)) { + throw new TypeError(`${minLength} is not a number.`); + } + if (!Number.isFinite(maxLength)) { + throw new TypeError(`${maxLength} is not a number.`); + } + if (!Number.isFinite(minRange)) { + throw new TypeError(`${minRange} is not a number.`); + } + if (!Number.isFinite(maxRange)) { + throw new TypeError(`${maxRange} is not a number.`); + } + const l = arr.length; + if (l < minLength || l > maxLength) { + throw new Error(`Unexpected array length ${l}.`); + } + let i = 0; + while (i < l) { + const v = arr[i]; + if (!Number.isFinite(v)) { + throw new TypeError(`${v} is not a number.`); + } else if (i < TRIA && validateRange && (v < minRange || v > maxRange)) { + throw new RangeError(`${v} is not between ${minRange} and ${maxRange}.`); + } else if (i === TRIA && (v < 0 || v > 1)) { + throw new RangeError(`${v} is not between 0 and 1.`); + } + i++; + } + if (alpha && l === TRIA) { + arr.push(1); + } + return arr; +}; +const transformMatrix = (mtx, vct, skip = false) => { + if (!Array.isArray(mtx)) { + throw new TypeError(`${mtx} is not an array.`); + } else if (mtx.length !== TRIA) { + throw new Error(`Unexpected array length ${mtx.length}.`); + } else if (!skip) { + for (let i of mtx) { + i = validateColorComponents(i, { + maxLength: TRIA, + validateRange: false + }); + } + } + const [[r1c1, r1c2, r1c3], [r2c1, r2c2, r2c3], [r3c1, r3c2, r3c3]] = mtx; + let v1, v2, v3; + if (skip) { + [v1, v2, v3] = vct; + } else { + [v1, v2, v3] = validateColorComponents(vct, { + maxLength: TRIA, + validateRange: false + }); + } + const p1 = r1c1 * v1 + r1c2 * v2 + r1c3 * v3; + const p2 = r2c1 * v1 + r2c2 * v2 + r2c3 * v3; + const p3 = r3c1 * v1 + r3c2 * v2 + r3c3 * v3; + return [p1, p2, p3]; +}; +const normalizeColorComponents = (colorA, colorB, skip = false) => { + if (!Array.isArray(colorA)) { + throw new TypeError(`${colorA} is not an array.`); + } else if (colorA.length !== QUAD) { + throw new Error(`Unexpected array length ${colorA.length}.`); + } + if (!Array.isArray(colorB)) { + throw new TypeError(`${colorB} is not an array.`); + } else if (colorB.length !== QUAD) { + throw new Error(`Unexpected array length ${colorB.length}.`); + } + let i = 0; + while (i < QUAD) { + if (colorA[i] === NONE && colorB[i] === NONE) { + colorA[i] = 0; + colorB[i] = 0; + } else if (colorA[i] === NONE) { + colorA[i] = colorB[i]; + } else if (colorB[i] === NONE) { + colorB[i] = colorA[i]; + } + i++; + } + if (skip) { + return [colorA, colorB]; + } + const validatedColorA = validateColorComponents(colorA, { + minLength: QUAD, + validateRange: false + }); + const validatedColorB = validateColorComponents(colorB, { + minLength: QUAD, + validateRange: false + }); + return [validatedColorA, validatedColorB]; +}; +const numberToHexString = (value) => { + if (!Number.isFinite(value)) { + throw new TypeError(`${value} is not a number.`); + } else { + value = Math.round(value); + if (value < 0 || value > MAX_RGB) { + throw new RangeError(`${value} is not between 0 and ${MAX_RGB}.`); + } + } + let hex = value.toString(HEX); + if (hex.length === 1) { + hex = `0${hex}`; + } + return hex; +}; +const angleToDeg = (angle) => { + if (isString(angle)) { + angle = angle.trim(); + } else { + throw new TypeError(`${angle} is not a string.`); + } + const GRAD = DEG / 400; + const RAD = DEG / (Math.PI * DUO); + const reg = new RegExp(`^(${NUM})(${ANGLE})?$`); + if (!reg.test(angle)) { + throw new SyntaxError(`Invalid property value: ${angle}`); + } + const [, value, unit] = angle.match(reg); + let deg; + switch (unit) { + case "grad": + deg = parseFloat(value) * GRAD; + break; + case "rad": + deg = parseFloat(value) * RAD; + break; + case "turn": + deg = parseFloat(value) * DEG; + break; + default: + deg = parseFloat(value); + } + deg %= DEG; + if (deg < 0) { + deg += DEG; + } else if (Object.is(deg, -0)) { + deg = 0; + } + return deg; +}; +const parseAlpha = (alpha = "") => { + if (isString(alpha)) { + alpha = alpha.trim(); + if (!alpha) { + alpha = "1"; + } else if (alpha === NONE) { + alpha = "0"; + } else { + let a; + if (alpha.endsWith("%")) { + a = parseFloat(alpha) / MAX_PCT; + } else { + a = parseFloat(alpha); + } + if (!Number.isFinite(a)) { + throw new TypeError(`${a} is not a finite number.`); + } + if (a < PPTH) { + alpha = "0"; + } else if (a > 1) { + alpha = "1"; + } else { + alpha = a.toFixed(TRIA); + } + } + } else { + alpha = "1"; + } + return parseFloat(alpha); +}; +const parseHexAlpha = (value) => { + if (isString(value)) { + if (value === "") { + throw new SyntaxError("Invalid property value: (empty string)"); + } + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + let alpha = parseInt(value, HEX); + if (alpha <= 0) { + return 0; + } + if (alpha >= MAX_RGB) { + return 1; + } + const alphaMap = /* @__PURE__ */ new Map(); + for (let i = 1; i < MAX_PCT; i++) { + alphaMap.set(Math.round(i * MAX_RGB / MAX_PCT), i); + } + if (alphaMap.has(alpha)) { + alpha = alphaMap.get(alpha) / MAX_PCT; + } else { + alpha = Math.round(alpha / MAX_RGB / PPTH) * PPTH; + } + return parseFloat(alpha.toFixed(TRIA)); +}; +const transformRgbToLinearRgb = (rgb, skip = false) => { + let rr, gg, bb; + if (skip) { + [rr, gg, bb] = rgb; + } else { + [rr, gg, bb] = validateColorComponents(rgb, { + maxLength: TRIA, + maxRange: MAX_RGB + }); + } + let r = rr / MAX_RGB; + let g = gg / MAX_RGB; + let b = bb / MAX_RGB; + const COND_POW = 0.04045; + if (r > COND_POW) { + r = Math.pow((r + LINEAR_OFFSET) / (1 + LINEAR_OFFSET), POW_LINEAR); + } else { + r /= LINEAR_COEF; + } + if (g > COND_POW) { + g = Math.pow((g + LINEAR_OFFSET) / (1 + LINEAR_OFFSET), POW_LINEAR); + } else { + g /= LINEAR_COEF; + } + if (b > COND_POW) { + b = Math.pow((b + LINEAR_OFFSET) / (1 + LINEAR_OFFSET), POW_LINEAR); + } else { + b /= LINEAR_COEF; + } + return [r, g, b]; +}; +const transformRgbToXyz = (rgb, skip = false) => { + if (!skip) { + rgb = validateColorComponents(rgb, { + maxLength: TRIA, + maxRange: MAX_RGB + }); + } + rgb = transformRgbToLinearRgb(rgb, true); + const xyz = transformMatrix(MATRIX_L_RGB_TO_XYZ, rgb, true); + return xyz; +}; +const transformLinearRgbToRgb = (rgb, round = false) => { + let [r, g, b] = validateColorComponents(rgb, { + maxLength: TRIA + }); + const COND_POW = 809 / 258400; + if (r > COND_POW) { + r = Math.pow(r, 1 / POW_LINEAR) * (1 + LINEAR_OFFSET) - LINEAR_OFFSET; + } else { + r *= LINEAR_COEF; + } + r *= MAX_RGB; + if (g > COND_POW) { + g = Math.pow(g, 1 / POW_LINEAR) * (1 + LINEAR_OFFSET) - LINEAR_OFFSET; + } else { + g *= LINEAR_COEF; + } + g *= MAX_RGB; + if (b > COND_POW) { + b = Math.pow(b, 1 / POW_LINEAR) * (1 + LINEAR_OFFSET) - LINEAR_OFFSET; + } else { + b *= LINEAR_COEF; + } + b *= MAX_RGB; + return [ + round ? Math.round(r) : r, + round ? Math.round(g) : g, + round ? Math.round(b) : b + ]; +}; +const transformXyzToRgb = (xyz, skip = false) => { + if (!skip) { + xyz = validateColorComponents(xyz, { + maxLength: TRIA, + validateRange: false + }); + } + let [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, xyz, true); + [r, g, b] = transformLinearRgbToRgb( + [ + Math.min(Math.max(r, 0), 1), + Math.min(Math.max(g, 0), 1), + Math.min(Math.max(b, 0), 1) + ], + true + ); + return [r, g, b]; +}; +const transformXyzToHsl = (xyz, skip = false) => { + const [rr, gg, bb] = transformXyzToRgb(xyz, skip); + const r = rr / MAX_RGB; + const g = gg / MAX_RGB; + const b = bb / MAX_RGB; + const max = Math.max(r, g, b); + const min = Math.min(r, g, b); + const d = max - min; + const l = (max + min) * HALF * MAX_PCT; + let h, s; + if (Math.round(l) === 0 || Math.round(l) === MAX_PCT) { + h = 0; + s = 0; + } else { + s = d / (1 - Math.abs(max + min - 1)) * MAX_PCT; + if (s === 0) { + h = 0; + } else { + switch (max) { + case r: + h = (g - b) / d; + break; + case g: + h = (b - r) / d + DUO; + break; + case b: + default: + h = (r - g) / d + QUAD; + break; + } + h = h * SEXA % DEG; + if (h < 0) { + h += DEG; + } + } + } + return [h, s, l]; +}; +const transformXyzToHwb = (xyz, skip = false) => { + const [r, g, b] = transformXyzToRgb(xyz, skip); + const wh = Math.min(r, g, b) / MAX_RGB; + const bk = 1 - Math.max(r, g, b) / MAX_RGB; + let h; + if (wh + bk === 1) { + h = 0; + } else { + [h] = transformXyzToHsl(xyz); + } + return [h, wh * MAX_PCT, bk * MAX_PCT]; +}; +const transformXyzToOklab = (xyz, skip = false) => { + if (!skip) { + xyz = validateColorComponents(xyz, { + maxLength: TRIA, + validateRange: false + }); + } + const lms = transformMatrix(MATRIX_XYZ_TO_LMS, xyz, true); + const xyzLms = lms.map((c) => Math.cbrt(c)); + let [l, a, b] = transformMatrix(MATRIX_LMS_TO_OKLAB, xyzLms, true); + l = Math.min(Math.max(l, 0), 1); + const lPct = Math.round(parseFloat(l.toFixed(QUAD)) * MAX_PCT); + if (lPct === 0 || lPct === MAX_PCT) { + a = 0; + b = 0; + } + return [l, a, b]; +}; +const transformXyzToOklch = (xyz, skip = false) => { + const [l, a, b] = transformXyzToOklab(xyz, skip); + let c, h; + const lPct = Math.round(parseFloat(l.toFixed(QUAD)) * MAX_PCT); + if (lPct === 0 || lPct === MAX_PCT) { + c = 0; + h = 0; + } else { + c = Math.max(Math.sqrt(Math.pow(a, POW_SQR) + Math.pow(b, POW_SQR)), 0); + if (parseFloat(c.toFixed(QUAD)) === 0) { + h = 0; + } else { + h = Math.atan2(b, a) * DEG_HALF / Math.PI; + if (h < 0) { + h += DEG; + } + } + } + return [l, c, h]; +}; +const transformXyzD50ToRgb = (xyz, skip = false) => { + if (!skip) { + xyz = validateColorComponents(xyz, { + maxLength: TRIA, + validateRange: false + }); + } + const xyzD65 = transformMatrix(MATRIX_D50_TO_D65, xyz, true); + const rgb = transformXyzToRgb(xyzD65, true); + return rgb; +}; +const transformXyzD50ToLab = (xyz, skip = false) => { + if (!skip) { + xyz = validateColorComponents(xyz, { + maxLength: TRIA, + validateRange: false + }); + } + const xyzD50 = xyz.map((val, i) => val / D50[i]); + const [f0, f1, f2] = xyzD50.map( + (val) => val > LAB_EPSILON ? Math.cbrt(val) : (val * LAB_KAPPA + HEX) / LAB_L + ); + const l = Math.min(Math.max(LAB_L * f1 - HEX, 0), MAX_PCT); + let a, b; + if (l === 0 || l === MAX_PCT) { + a = 0; + b = 0; + } else { + a = (f0 - f1) * LAB_A; + b = (f1 - f2) * LAB_B; + } + return [l, a, b]; +}; +const transformXyzD50ToLch = (xyz, skip = false) => { + const [l, a, b] = transformXyzD50ToLab(xyz, skip); + let c, h; + if (l === 0 || l === MAX_PCT) { + c = 0; + h = 0; + } else { + c = Math.max(Math.sqrt(Math.pow(a, POW_SQR) + Math.pow(b, POW_SQR)), 0); + h = Math.atan2(b, a) * DEG_HALF / Math.PI; + if (h < 0) { + h += DEG; + } + } + return [l, c, h]; +}; +const convertRgbToHex = (rgb) => { + const [r, g, b, alpha] = validateColorComponents(rgb, { + alpha: true, + maxRange: MAX_RGB + }); + const rr = numberToHexString(r); + const gg = numberToHexString(g); + const bb = numberToHexString(b); + const aa = numberToHexString(alpha * MAX_RGB); + let hex; + if (aa === "ff") { + hex = `#${rr}${gg}${bb}`; + } else { + hex = `#${rr}${gg}${bb}${aa}`; + } + return hex; +}; +const convertHexToRgb = (value) => { + if (isString(value)) { + value = value.toLowerCase().trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + if (!(/^#[\da-f]{6}$/.test(value) || /^#[\da-f]{3}$/.test(value) || /^#[\da-f]{8}$/.test(value) || /^#[\da-f]{4}$/.test(value))) { + throw new SyntaxError(`Invalid property value: ${value}`); + } + const arr = []; + if (/^#[\da-f]{3}$/.test(value)) { + const [, r, g, b] = value.match( + /^#([\da-f])([\da-f])([\da-f])$/ + ); + arr.push( + parseInt(`${r}${r}`, HEX), + parseInt(`${g}${g}`, HEX), + parseInt(`${b}${b}`, HEX), + 1 + ); + } else if (/^#[\da-f]{4}$/.test(value)) { + const [, r, g, b, alpha] = value.match( + /^#([\da-f])([\da-f])([\da-f])([\da-f])$/ + ); + arr.push( + parseInt(`${r}${r}`, HEX), + parseInt(`${g}${g}`, HEX), + parseInt(`${b}${b}`, HEX), + parseHexAlpha(`${alpha}${alpha}`) + ); + } else if (/^#[\da-f]{8}$/.test(value)) { + const [, r, g, b, alpha] = value.match( + /^#([\da-f]{2})([\da-f]{2})([\da-f]{2})([\da-f]{2})$/ + ); + arr.push( + parseInt(r, HEX), + parseInt(g, HEX), + parseInt(b, HEX), + parseHexAlpha(alpha) + ); + } else { + const [, r, g, b] = value.match( + /^#([\da-f]{2})([\da-f]{2})([\da-f]{2})$/ + ); + arr.push(parseInt(r, HEX), parseInt(g, HEX), parseInt(b, HEX), 1); + } + return arr; +}; +const convertHexToLinearRgb = (value) => { + const [rr, gg, bb, alpha] = convertHexToRgb(value); + const [r, g, b] = transformRgbToLinearRgb([rr, gg, bb], true); + return [r, g, b, alpha]; +}; +const convertHexToXyz = (value) => { + const [r, g, b, alpha] = convertHexToLinearRgb(value); + const [x, y, z] = transformMatrix(MATRIX_L_RGB_TO_XYZ, [r, g, b], true); + return [x, y, z, alpha]; +}; +const parseRgb = (value, opt = {}) => { + if (isString(value)) { + value = value.toLowerCase().trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "", nullable = false } = opt; + const reg = new RegExp(`^rgba?\\(\\s*(${SYN_MOD}|${SYN_RGB_LV3})\\s*\\)$`); + if (!reg.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + return res; + } + if (isString(res)) { + return res; + } + return res; + } + const [, val] = value.match(reg); + const [v1, v2, v3, v4 = ""] = val.replace(/[,/]/g, " ").split(/\s+/); + let r, g, b; + if (v1 === NONE) { + r = 0; + } else { + if (v1.endsWith("%")) { + r = parseFloat(v1) * MAX_RGB / MAX_PCT; + } else { + r = parseFloat(v1); + } + r = Math.min(Math.max(roundToPrecision(r, OCT), 0), MAX_RGB); + } + if (v2 === NONE) { + g = 0; + } else { + if (v2.endsWith("%")) { + g = parseFloat(v2) * MAX_RGB / MAX_PCT; + } else { + g = parseFloat(v2); + } + g = Math.min(Math.max(roundToPrecision(g, OCT), 0), MAX_RGB); + } + if (v3 === NONE) { + b = 0; + } else { + if (v3.endsWith("%")) { + b = parseFloat(v3) * MAX_RGB / MAX_PCT; + } else { + b = parseFloat(v3); + } + b = Math.min(Math.max(roundToPrecision(b, OCT), 0), MAX_RGB); + } + const alpha = parseAlpha(v4); + return ["rgb", r, g, b, format === VAL_MIX && v4 === NONE ? NONE : alpha]; +}; +const parseHsl = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "", nullable = false } = opt; + if (!REG_HSL.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + return res; + } + if (isString(res)) { + return res; + } + return res; + } + const [, val] = value.match(REG_HSL); + const [v1, v2, v3, v4 = ""] = val.replace(/[,/]/g, " ").split(/\s+/); + let h, s, l; + if (v1 === NONE) { + h = 0; + } else { + h = angleToDeg(v1); + } + if (v2 === NONE) { + s = 0; + } else { + s = Math.min(Math.max(parseFloat(v2), 0), MAX_PCT); + } + if (v3 === NONE) { + l = 0; + } else { + l = Math.min(Math.max(parseFloat(v3), 0), MAX_PCT); + } + const alpha = parseAlpha(v4); + if (format === "hsl") { + return [ + format, + v1 === NONE ? v1 : h, + v2 === NONE ? v2 : s, + v3 === NONE ? v3 : l, + v4 === NONE ? v4 : alpha + ]; + } + h = h / DEG * DOZ; + l /= MAX_PCT; + const sa = s / MAX_PCT * Math.min(l, 1 - l); + const rk = h % DOZ; + const gk = (8 + h) % DOZ; + const bk = (4 + h) % DOZ; + const r = l - sa * Math.max(-1, Math.min(rk - TRIA, TRIA ** POW_SQR - rk, 1)); + const g = l - sa * Math.max(-1, Math.min(gk - TRIA, TRIA ** POW_SQR - gk, 1)); + const b = l - sa * Math.max(-1, Math.min(bk - TRIA, TRIA ** POW_SQR - bk, 1)); + return [ + "rgb", + Math.min(Math.max(roundToPrecision(r * MAX_RGB, OCT), 0), MAX_RGB), + Math.min(Math.max(roundToPrecision(g * MAX_RGB, OCT), 0), MAX_RGB), + Math.min(Math.max(roundToPrecision(b * MAX_RGB, OCT), 0), MAX_RGB), + alpha + ]; +}; +const parseHwb = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "", nullable = false } = opt; + if (!REG_HWB.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + return res; + } + if (isString(res)) { + return res; + } + return res; + } + const [, val] = value.match(REG_HWB); + const [v1, v2, v3, v4 = ""] = val.replace("/", " ").split(/\s+/); + let h, wh, bk; + if (v1 === NONE) { + h = 0; + } else { + h = angleToDeg(v1); + } + if (v2 === NONE) { + wh = 0; + } else { + wh = Math.min(Math.max(parseFloat(v2), 0), MAX_PCT) / MAX_PCT; + } + if (v3 === NONE) { + bk = 0; + } else { + bk = Math.min(Math.max(parseFloat(v3), 0), MAX_PCT) / MAX_PCT; + } + const alpha = parseAlpha(v4); + if (format === "hwb") { + return [ + format, + v1 === NONE ? v1 : h, + v2 === NONE ? v2 : wh * MAX_PCT, + v3 === NONE ? v3 : bk * MAX_PCT, + v4 === NONE ? v4 : alpha + ]; + } + if (wh + bk >= 1) { + const v = roundToPrecision(wh / (wh + bk) * MAX_RGB, OCT); + return ["rgb", v, v, v, alpha]; + } + const factor = (1 - wh - bk) / MAX_RGB; + let [, r, g, b] = parseHsl(`hsl(${h} 100 50)`); + r = roundToPrecision((r * factor + wh) * MAX_RGB, OCT); + g = roundToPrecision((g * factor + wh) * MAX_RGB, OCT); + b = roundToPrecision((b * factor + wh) * MAX_RGB, OCT); + return [ + "rgb", + Math.min(Math.max(r, 0), MAX_RGB), + Math.min(Math.max(g, 0), MAX_RGB), + Math.min(Math.max(b, 0), MAX_RGB), + alpha + ]; +}; +const parseLab = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "", nullable = false } = opt; + if (!REG_LAB.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + return res; + } + if (isString(res)) { + return res; + } + return res; + } + const COEF_PCT = 1.25; + const COND_POW = 8; + const [, val] = value.match(REG_LAB); + const [v1, v2, v3, v4 = ""] = val.replace("/", " ").split(/\s+/); + let l, a, b; + if (v1 === NONE) { + l = 0; + } else { + if (v1.endsWith("%")) { + l = parseFloat(v1); + if (l > MAX_PCT) { + l = MAX_PCT; + } + } else { + l = parseFloat(v1); + } + if (l < 0) { + l = 0; + } + } + if (v2 === NONE) { + a = 0; + } else { + a = v2.endsWith("%") ? parseFloat(v2) * COEF_PCT : parseFloat(v2); + } + if (v3 === NONE) { + b = 0; + } else { + b = v3.endsWith("%") ? parseFloat(v3) * COEF_PCT : parseFloat(v3); + } + const alpha = parseAlpha(v4); + if (REG_SPEC.test(format)) { + return [ + "lab", + v1 === NONE ? v1 : roundToPrecision(l, HEX), + v2 === NONE ? v2 : roundToPrecision(a, HEX), + v3 === NONE ? v3 : roundToPrecision(b, HEX), + v4 === NONE ? v4 : alpha + ]; + } + const fl = (l + HEX) / LAB_L; + const fa = a / LAB_A + fl; + const fb = fl - b / LAB_B; + const powFl = Math.pow(fl, POW_CUBE); + const powFa = Math.pow(fa, POW_CUBE); + const powFb = Math.pow(fb, POW_CUBE); + const xyz = [ + powFa > LAB_EPSILON ? powFa : (fa * LAB_L - HEX) / LAB_KAPPA, + l > COND_POW ? powFl : l / LAB_KAPPA, + powFb > LAB_EPSILON ? powFb : (fb * LAB_L - HEX) / LAB_KAPPA + ]; + const [x, y, z] = xyz.map( + (val2, i) => val2 * D50[i] + ); + return [ + "xyz-d50", + roundToPrecision(x, HEX), + roundToPrecision(y, HEX), + roundToPrecision(z, HEX), + alpha + ]; +}; +const parseLch = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "", nullable = false } = opt; + if (!REG_LCH.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + return res; + } + if (isString(res)) { + return res; + } + return res; + } + const COEF_PCT = 1.5; + const [, val] = value.match(REG_LCH); + const [v1, v2, v3, v4 = ""] = val.replace("/", " ").split(/\s+/); + let l, c, h; + if (v1 === NONE) { + l = 0; + } else { + l = parseFloat(v1); + if (l < 0) { + l = 0; + } + } + if (v2 === NONE) { + c = 0; + } else { + c = v2.endsWith("%") ? parseFloat(v2) * COEF_PCT : parseFloat(v2); + } + if (v3 === NONE) { + h = 0; + } else { + h = angleToDeg(v3); + } + const alpha = parseAlpha(v4); + if (REG_SPEC.test(format)) { + return [ + "lch", + v1 === NONE ? v1 : roundToPrecision(l, HEX), + v2 === NONE ? v2 : roundToPrecision(c, HEX), + v3 === NONE ? v3 : roundToPrecision(h, HEX), + v4 === NONE ? v4 : alpha + ]; + } + const a = c * Math.cos(h * Math.PI / DEG_HALF); + const b = c * Math.sin(h * Math.PI / DEG_HALF); + const [, x, y, z] = parseLab(`lab(${l} ${a} ${b})`); + return [ + "xyz-d50", + roundToPrecision(x, HEX), + roundToPrecision(y, HEX), + roundToPrecision(z, HEX), + alpha + ]; +}; +const parseOklab = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "", nullable = false } = opt; + if (!REG_OKLAB.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + return res; + } + if (isString(res)) { + return res; + } + return res; + } + const COEF_PCT = 0.4; + const [, val] = value.match(REG_OKLAB); + const [v1, v2, v3, v4 = ""] = val.replace("/", " ").split(/\s+/); + let l, a, b; + if (v1 === NONE) { + l = 0; + } else { + l = v1.endsWith("%") ? parseFloat(v1) / MAX_PCT : parseFloat(v1); + if (l < 0) { + l = 0; + } + } + if (v2 === NONE) { + a = 0; + } else if (v2.endsWith("%")) { + a = parseFloat(v2) * COEF_PCT / MAX_PCT; + } else { + a = parseFloat(v2); + } + if (v3 === NONE) { + b = 0; + } else if (v3.endsWith("%")) { + b = parseFloat(v3) * COEF_PCT / MAX_PCT; + } else { + b = parseFloat(v3); + } + const alpha = parseAlpha(v4); + if (REG_SPEC.test(format)) { + return [ + "oklab", + v1 === NONE ? v1 : roundToPrecision(l, HEX), + v2 === NONE ? v2 : roundToPrecision(a, HEX), + v3 === NONE ? v3 : roundToPrecision(b, HEX), + v4 === NONE ? v4 : alpha + ]; + } + const lms = transformMatrix(MATRIX_OKLAB_TO_LMS, [l, a, b]); + const xyzLms = lms.map((c) => Math.pow(c, POW_CUBE)); + const [x, y, z] = transformMatrix(MATRIX_LMS_TO_XYZ, xyzLms, true); + return [ + "xyz-d65", + roundToPrecision(x, HEX), + roundToPrecision(y, HEX), + roundToPrecision(z, HEX), + alpha + ]; +}; +const parseOklch = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "", nullable = false } = opt; + if (!REG_OKLCH.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + return res; + } + if (isString(res)) { + return res; + } + return res; + } + const COEF_PCT = 0.4; + const [, val] = value.match(REG_OKLCH); + const [v1, v2, v3, v4 = ""] = val.replace("/", " ").split(/\s+/); + let l, c, h; + if (v1 === NONE) { + l = 0; + } else { + l = v1.endsWith("%") ? parseFloat(v1) / MAX_PCT : parseFloat(v1); + if (l < 0) { + l = 0; + } + } + if (v2 === NONE) { + c = 0; + } else { + if (v2.endsWith("%")) { + c = parseFloat(v2) * COEF_PCT / MAX_PCT; + } else { + c = parseFloat(v2); + } + if (c < 0) { + c = 0; + } + } + if (v3 === NONE) { + h = 0; + } else { + h = angleToDeg(v3); + } + const alpha = parseAlpha(v4); + if (REG_SPEC.test(format)) { + return [ + "oklch", + v1 === NONE ? v1 : roundToPrecision(l, HEX), + v2 === NONE ? v2 : roundToPrecision(c, HEX), + v3 === NONE ? v3 : roundToPrecision(h, HEX), + v4 === NONE ? v4 : alpha + ]; + } + const a = c * Math.cos(h * Math.PI / DEG_HALF); + const b = c * Math.sin(h * Math.PI / DEG_HALF); + const lms = transformMatrix(MATRIX_OKLAB_TO_LMS, [l, a, b]); + const xyzLms = lms.map((cc) => Math.pow(cc, POW_CUBE)); + const [x, y, z] = transformMatrix(MATRIX_LMS_TO_XYZ, xyzLms, true); + return [ + "xyz-d65", + roundToPrecision(x, HEX), + roundToPrecision(y, HEX), + roundToPrecision(z, HEX), + alpha + ]; +}; +const parseColorFunc = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { colorSpace = "", d50 = false, format = "", nullable = false } = opt; + if (!REG_FN_COLOR.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + return res; + } + if (isString(res)) { + return res; + } + return res; + } + const [, val] = value.match(REG_FN_COLOR); + let [cs, v1, v2, v3, v4 = ""] = val.replace("/", " ").split(/\s+/); + let r, g, b; + if (cs === "xyz") { + cs = "xyz-d65"; + } + if (v1 === NONE) { + r = 0; + } else { + r = v1.endsWith("%") ? parseFloat(v1) / MAX_PCT : parseFloat(v1); + } + if (v2 === NONE) { + g = 0; + } else { + g = v2.endsWith("%") ? parseFloat(v2) / MAX_PCT : parseFloat(v2); + } + if (v3 === NONE) { + b = 0; + } else { + b = v3.endsWith("%") ? parseFloat(v3) / MAX_PCT : parseFloat(v3); + } + const alpha = parseAlpha(v4); + if (REG_SPEC.test(format) || format === VAL_MIX && cs === colorSpace) { + return [ + cs, + v1 === NONE ? v1 : roundToPrecision(r, DEC), + v2 === NONE ? v2 : roundToPrecision(g, DEC), + v3 === NONE ? v3 : roundToPrecision(b, DEC), + v4 === NONE ? v4 : alpha + ]; + } + let x = 0; + let y = 0; + let z = 0; + if (cs === "srgb-linear") { + [x, y, z] = transformMatrix(MATRIX_L_RGB_TO_XYZ, [r, g, b]); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + } else if (cs === "display-p3") { + const linearRgb = transformRgbToLinearRgb([ + r * MAX_RGB, + g * MAX_RGB, + b * MAX_RGB + ]); + [x, y, z] = transformMatrix(MATRIX_P3_TO_XYZ, linearRgb); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + } else if (cs === "rec2020") { + const ALPHA = 1.09929682680944; + const BETA = 0.018053968510807; + const REC_COEF = 0.45; + const rgb = [r, g, b].map((c) => { + let cl; + if (c < BETA * REC_COEF * DEC) { + cl = c / (REC_COEF * DEC); + } else { + cl = Math.pow((c + ALPHA - 1) / ALPHA, 1 / REC_COEF); + } + return cl; + }); + [x, y, z] = transformMatrix(MATRIX_REC2020_TO_XYZ, rgb); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + } else if (cs === "a98-rgb") { + const POW_A98 = 563 / 256; + const rgb = [r, g, b].map((c) => { + const cl = Math.pow(c, POW_A98); + return cl; + }); + [x, y, z] = transformMatrix(MATRIX_A98_TO_XYZ, rgb); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + } else if (cs === "prophoto-rgb") { + const POW_PROPHOTO = 1.8; + const rgb = [r, g, b].map((c) => { + let cl; + if (c > 1 / (HEX * DUO)) { + cl = Math.pow(c, POW_PROPHOTO); + } else { + cl = c / HEX; + } + return cl; + }); + [x, y, z] = transformMatrix(MATRIX_PROPHOTO_TO_XYZ_D50, rgb); + if (!d50) { + [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true); + } + } else if (/^xyz(?:-d(?:50|65))?$/.test(cs)) { + [x, y, z] = [r, g, b]; + if (cs === "xyz-d50") { + if (!d50) { + [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z]); + } + } else if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + } else { + [x, y, z] = transformRgbToXyz([r * MAX_RGB, g * MAX_RGB, b * MAX_RGB]); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + } + return [ + d50 ? "xyz-d50" : "xyz-d65", + roundToPrecision(x, HEX), + roundToPrecision(y, HEX), + roundToPrecision(z, HEX), + format === VAL_MIX && v4 === NONE ? v4 : alpha + ]; +}; +const parseColorValue = (value, opt = {}) => { + if (isString(value)) { + value = value.toLowerCase().trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { d50 = false, format = "", nullable = false } = opt; + if (!REG_COLOR.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + return res; + } + if (isString(res)) { + return res; + } + return res; + } + let x = 0; + let y = 0; + let z = 0; + let alpha = 0; + if (REG_CURRENT.test(value)) { + if (format === VAL_COMP) { + return ["rgb", 0, 0, 0, 0]; + } + if (format === VAL_SPEC) { + return value; + } + } else if (/^[a-z]+$/.test(value)) { + if (Object.hasOwn(NAMED_COLORS, value)) { + if (format === VAL_SPEC) { + return value; + } + const [r, g, b] = NAMED_COLORS[value]; + alpha = 1; + if (format === VAL_COMP) { + return ["rgb", r, g, b, alpha]; + } + [x, y, z] = transformRgbToXyz([r, g, b], true); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + } else { + switch (format) { + case VAL_COMP: { + if (nullable && value !== "transparent") { + return new NullObject(); + } + return ["rgb", 0, 0, 0, 0]; + } + case VAL_SPEC: { + if (value === "transparent") { + return value; + } + return ""; + } + case VAL_MIX: { + if (value === "transparent") { + return ["rgb", 0, 0, 0, 0]; + } + return new NullObject(); + } + } + } + } else if (value[0] === "#") { + if (REG_SPEC.test(format)) { + const rgb = convertHexToRgb(value); + return ["rgb", ...rgb]; + } + [x, y, z, alpha] = convertHexToXyz(value); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + } else if (value.startsWith("lab")) { + if (REG_SPEC.test(format)) { + return parseLab(value, opt); + } + [, x, y, z, alpha] = parseLab(value); + if (!d50) { + [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true); + } + } else if (value.startsWith("lch")) { + if (REG_SPEC.test(format)) { + return parseLch(value, opt); + } + [, x, y, z, alpha] = parseLch(value); + if (!d50) { + [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true); + } + } else if (value.startsWith("oklab")) { + if (REG_SPEC.test(format)) { + return parseOklab(value, opt); + } + [, x, y, z, alpha] = parseOklab(value); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + } else if (value.startsWith("oklch")) { + if (REG_SPEC.test(format)) { + return parseOklch(value, opt); + } + [, x, y, z, alpha] = parseOklch(value); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + } else { + let r, g, b; + if (value.startsWith("hsl")) { + [, r, g, b, alpha] = parseHsl(value); + } else if (value.startsWith("hwb")) { + [, r, g, b, alpha] = parseHwb(value); + } else { + [, r, g, b, alpha] = parseRgb(value, opt); + } + if (REG_SPEC.test(format)) { + return ["rgb", Math.round(r), Math.round(g), Math.round(b), alpha]; + } + [x, y, z] = transformRgbToXyz([r, g, b]); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + } + return [ + d50 ? "xyz-d50" : "xyz-d65", + roundToPrecision(x, HEX), + roundToPrecision(y, HEX), + roundToPrecision(z, HEX), + alpha + ]; +}; +const resolveColorValue = (value, opt = {}) => { + if (isString(value)) { + value = value.toLowerCase().trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { colorSpace = "", format = "", nullable = false } = opt; + const cacheKey = createCacheKey( + { + namespace: NAMESPACE, + name: "resolveColorValue", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return cachedResult; + } + const cachedItem = cachedResult.item; + if (isString(cachedItem)) { + return cachedItem; + } + return cachedItem; + } + if (!REG_COLOR.test(value)) { + const res2 = resolveInvalidColorValue(format, nullable); + if (res2 instanceof NullObject) { + setCache(cacheKey, null); + return res2; + } + setCache(cacheKey, res2); + if (isString(res2)) { + return res2; + } + return res2; + } + let cs = ""; + let r = 0; + let g = 0; + let b = 0; + let alpha = 0; + if (REG_CURRENT.test(value)) { + if (format === VAL_SPEC) { + setCache(cacheKey, value); + return value; + } + } else if (/^[a-z]+$/.test(value)) { + if (Object.hasOwn(NAMED_COLORS, value)) { + if (format === VAL_SPEC) { + setCache(cacheKey, value); + return value; + } + [r, g, b] = NAMED_COLORS[value]; + alpha = 1; + } else { + switch (format) { + case VAL_SPEC: { + if (value === "transparent") { + setCache(cacheKey, value); + return value; + } + const res2 = ""; + setCache(cacheKey, res2); + return res2; + } + case VAL_MIX: { + if (value === "transparent") { + const res2 = ["rgb", 0, 0, 0, 0]; + setCache(cacheKey, res2); + return res2; + } + setCache(cacheKey, null); + return new NullObject(); + } + case VAL_COMP: + default: { + if (nullable && value !== "transparent") { + setCache(cacheKey, null); + return new NullObject(); + } + const res2 = ["rgb", 0, 0, 0, 0]; + setCache(cacheKey, res2); + return res2; + } + } + } + } else if (value[0] === "#") { + [r, g, b, alpha] = convertHexToRgb(value); + } else if (value.startsWith("hsl")) { + [, r, g, b, alpha] = parseHsl(value, opt); + } else if (value.startsWith("hwb")) { + [, r, g, b, alpha] = parseHwb(value, opt); + } else if (/^l(?:ab|ch)/.test(value)) { + let x, y, z; + if (value.startsWith("lab")) { + [cs, x, y, z, alpha] = parseLab(value, opt); + } else { + [cs, x, y, z, alpha] = parseLch(value, opt); + } + if (REG_SPEC.test(format)) { + const res2 = [cs, x, y, z, alpha]; + setCache(cacheKey, res2); + return res2; + } + [r, g, b] = transformXyzD50ToRgb([x, y, z]); + } else if (/^okl(?:ab|ch)/.test(value)) { + let x, y, z; + if (value.startsWith("oklab")) { + [cs, x, y, z, alpha] = parseOklab(value, opt); + } else { + [cs, x, y, z, alpha] = parseOklch(value, opt); + } + if (REG_SPEC.test(format)) { + const res2 = [cs, x, y, z, alpha]; + setCache(cacheKey, res2); + return res2; + } + [r, g, b] = transformXyzToRgb([x, y, z]); + } else { + [, r, g, b, alpha] = parseRgb(value, opt); + } + if (format === VAL_MIX && colorSpace === "srgb") { + const res2 = [ + "srgb", + r / MAX_RGB, + g / MAX_RGB, + b / MAX_RGB, + alpha + ]; + setCache(cacheKey, res2); + return res2; + } + const res = [ + "rgb", + Math.round(r), + Math.round(g), + Math.round(b), + alpha + ]; + setCache(cacheKey, res); + return res; +}; +const resolveColorFunc = (value, opt = {}) => { + if (isString(value)) { + value = value.toLowerCase().trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { colorSpace = "", format = "", nullable = false } = opt; + const cacheKey = createCacheKey( + { + namespace: NAMESPACE, + name: "resolveColorFunc", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return cachedResult; + } + const cachedItem = cachedResult.item; + if (isString(cachedItem)) { + return cachedItem; + } + return cachedItem; + } + if (!REG_FN_COLOR.test(value)) { + const res2 = resolveInvalidColorValue(format, nullable); + if (res2 instanceof NullObject) { + setCache(cacheKey, null); + return res2; + } + setCache(cacheKey, res2); + if (isString(res2)) { + return res2; + } + return res2; + } + const [cs, v1, v2, v3, v4] = parseColorFunc( + value, + opt + ); + if (REG_SPEC.test(format) || format === VAL_MIX && cs === colorSpace) { + const res2 = [cs, v1, v2, v3, v4]; + setCache(cacheKey, res2); + return res2; + } + const x = parseFloat(`${v1}`); + const y = parseFloat(`${v2}`); + const z = parseFloat(`${v3}`); + const alpha = parseAlpha(`${v4}`); + const [r, g, b] = transformXyzToRgb([x, y, z], true); + const res = ["rgb", r, g, b, alpha]; + setCache(cacheKey, res); + return res; +}; +const convertColorToLinearRgb = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { colorSpace = "", format = "" } = opt; + let cs = ""; + let r, g, b, alpha, x, y, z; + if (format === VAL_MIX) { + let xyz; + if (value.startsWith(FN_COLOR)) { + xyz = parseColorFunc(value, opt); + } else { + xyz = parseColorValue(value, opt); + } + if (xyz instanceof NullObject) { + return xyz; + } + [cs, x, y, z, alpha] = xyz; + if (cs === colorSpace) { + return [x, y, z, alpha]; + } + [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true); + } else if (value.startsWith(FN_COLOR)) { + const [, val] = value.match(REG_FN_COLOR); + const [cs2] = val.replace("/", " ").split(/\s+/); + if (cs2 === "srgb-linear") { + [, r, g, b, alpha] = resolveColorFunc(value, { + format: VAL_COMP + }); + } else { + [, x, y, z, alpha] = parseColorFunc(value); + [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true); + } + } else { + [, x, y, z, alpha] = parseColorValue(value); + [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true); + } + return [ + Math.min(Math.max(r, 0), 1), + Math.min(Math.max(g, 0), 1), + Math.min(Math.max(b, 0), 1), + alpha + ]; +}; +const convertColorToRgb = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "" } = opt; + let r, g, b, alpha; + if (format === VAL_MIX) { + let rgb; + if (value.startsWith(FN_COLOR)) { + rgb = resolveColorFunc(value, opt); + } else { + rgb = resolveColorValue(value, opt); + } + if (rgb instanceof NullObject) { + return rgb; + } + [, r, g, b, alpha] = rgb; + } else if (value.startsWith(FN_COLOR)) { + const [, val] = value.match(REG_FN_COLOR); + const [cs] = val.replace("/", " ").split(/\s+/); + if (cs === "srgb") { + [, r, g, b, alpha] = resolveColorFunc(value, { + format: VAL_COMP + }); + r *= MAX_RGB; + g *= MAX_RGB; + b *= MAX_RGB; + } else { + [, r, g, b, alpha] = resolveColorFunc(value); + } + } else if (/^(?:ok)?l(?:ab|ch)/.test(value)) { + [r, g, b, alpha] = convertColorToLinearRgb(value); + [r, g, b] = transformLinearRgbToRgb([r, g, b]); + } else { + [, r, g, b, alpha] = resolveColorValue(value, { + format: VAL_COMP + }); + } + return [r, g, b, alpha]; +}; +const convertColorToXyz = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { d50 = false, format = "" } = opt; + let x, y, z, alpha; + if (format === VAL_MIX) { + let xyz; + if (value.startsWith(FN_COLOR)) { + xyz = parseColorFunc(value, opt); + } else { + xyz = parseColorValue(value, opt); + } + if (xyz instanceof NullObject) { + return xyz; + } + [, x, y, z, alpha] = xyz; + } else if (value.startsWith(FN_COLOR)) { + const [, val] = value.match(REG_FN_COLOR); + const [cs] = val.replace("/", " ").split(/\s+/); + if (d50) { + if (cs === "xyz-d50") { + [, x, y, z, alpha] = resolveColorFunc(value, { + format: VAL_COMP + }); + } else { + [, x, y, z, alpha] = parseColorFunc( + value, + opt + ); + } + } else if (/^xyz(?:-d65)?$/.test(cs)) { + [, x, y, z, alpha] = resolveColorFunc(value, { + format: VAL_COMP + }); + } else { + [, x, y, z, alpha] = parseColorFunc(value); + } + } else { + [, x, y, z, alpha] = parseColorValue(value, opt); + } + return [x, y, z, alpha]; +}; +const convertColorToHsl = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "" } = opt; + let h, s, l, alpha; + if (REG_HSL.test(value)) { + [, h, s, l, alpha] = parseHsl(value, { + format: "hsl" + }); + if (format === "hsl") { + return [Math.round(h), Math.round(s), Math.round(l), alpha]; + } + return [h, s, l, alpha]; + } + let x, y, z; + if (format === VAL_MIX) { + let xyz; + if (value.startsWith(FN_COLOR)) { + xyz = parseColorFunc(value, opt); + } else { + xyz = parseColorValue(value, opt); + } + if (xyz instanceof NullObject) { + return xyz; + } + [, x, y, z, alpha] = xyz; + } else if (value.startsWith(FN_COLOR)) { + [, x, y, z, alpha] = parseColorFunc(value); + } else { + [, x, y, z, alpha] = parseColorValue(value); + } + [h, s, l] = transformXyzToHsl([x, y, z], true); + if (format === "hsl") { + return [Math.round(h), Math.round(s), Math.round(l), alpha]; + } + return [format === VAL_MIX && s === 0 ? NONE : h, s, l, alpha]; +}; +const convertColorToHwb = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "" } = opt; + let h, w, b, alpha; + if (REG_HWB.test(value)) { + [, h, w, b, alpha] = parseHwb(value, { + format: "hwb" + }); + if (format === "hwb") { + return [Math.round(h), Math.round(w), Math.round(b), alpha]; + } + return [h, w, b, alpha]; + } + let x, y, z; + if (format === VAL_MIX) { + let xyz; + if (value.startsWith(FN_COLOR)) { + xyz = parseColorFunc(value, opt); + } else { + xyz = parseColorValue(value, opt); + } + if (xyz instanceof NullObject) { + return xyz; + } + [, x, y, z, alpha] = xyz; + } else if (value.startsWith(FN_COLOR)) { + [, x, y, z, alpha] = parseColorFunc(value); + } else { + [, x, y, z, alpha] = parseColorValue(value); + } + [h, w, b] = transformXyzToHwb([x, y, z], true); + if (format === "hwb") { + return [Math.round(h), Math.round(w), Math.round(b), alpha]; + } + return [format === VAL_MIX && w + b >= 100 ? NONE : h, w, b, alpha]; +}; +const convertColorToLab = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "" } = opt; + let l, a, b, alpha; + if (REG_LAB.test(value)) { + [, l, a, b, alpha] = parseLab(value, { + format: VAL_COMP + }); + return [l, a, b, alpha]; + } + let x, y, z; + if (format === VAL_MIX) { + let xyz; + opt.d50 = true; + if (value.startsWith(FN_COLOR)) { + xyz = parseColorFunc(value, opt); + } else { + xyz = parseColorValue(value, opt); + } + if (xyz instanceof NullObject) { + return xyz; + } + [, x, y, z, alpha] = xyz; + } else if (value.startsWith(FN_COLOR)) { + [, x, y, z, alpha] = parseColorFunc(value, { + d50: true + }); + } else { + [, x, y, z, alpha] = parseColorValue(value, { + d50: true + }); + } + [l, a, b] = transformXyzD50ToLab([x, y, z], true); + return [l, a, b, alpha]; +}; +const convertColorToLch = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "" } = opt; + let l, c, h, alpha; + if (REG_LCH.test(value)) { + [, l, c, h, alpha] = parseLch(value, { + format: VAL_COMP + }); + return [l, c, h, alpha]; + } + let x, y, z; + if (format === VAL_MIX) { + let xyz; + opt.d50 = true; + if (value.startsWith(FN_COLOR)) { + xyz = parseColorFunc(value, opt); + } else { + xyz = parseColorValue(value, opt); + } + if (xyz instanceof NullObject) { + return xyz; + } + [, x, y, z, alpha] = xyz; + } else if (value.startsWith(FN_COLOR)) { + [, x, y, z, alpha] = parseColorFunc(value, { + d50: true + }); + } else { + [, x, y, z, alpha] = parseColorValue(value, { + d50: true + }); + } + [l, c, h] = transformXyzD50ToLch([x, y, z], true); + return [l, c, format === VAL_MIX && c === 0 ? NONE : h, alpha]; +}; +const convertColorToOklab = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "" } = opt; + let l, a, b, alpha; + if (REG_OKLAB.test(value)) { + [, l, a, b, alpha] = parseOklab(value, { + format: VAL_COMP + }); + return [l, a, b, alpha]; + } + let x, y, z; + if (format === VAL_MIX) { + let xyz; + if (value.startsWith(FN_COLOR)) { + xyz = parseColorFunc(value, opt); + } else { + xyz = parseColorValue(value, opt); + } + if (xyz instanceof NullObject) { + return xyz; + } + [, x, y, z, alpha] = xyz; + } else if (value.startsWith(FN_COLOR)) { + [, x, y, z, alpha] = parseColorFunc(value); + } else { + [, x, y, z, alpha] = parseColorValue(value); + } + [l, a, b] = transformXyzToOklab([x, y, z], true); + return [l, a, b, alpha]; +}; +const convertColorToOklch = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "" } = opt; + let l, c, h, alpha; + if (REG_OKLCH.test(value)) { + [, l, c, h, alpha] = parseOklch(value, { + format: VAL_COMP + }); + return [l, c, h, alpha]; + } + let x, y, z; + if (format === VAL_MIX) { + let xyz; + if (value.startsWith(FN_COLOR)) { + xyz = parseColorFunc(value, opt); + } else { + xyz = parseColorValue(value, opt); + } + if (xyz instanceof NullObject) { + return xyz; + } + [, x, y, z, alpha] = xyz; + } else if (value.startsWith(FN_COLOR)) { + [, x, y, z, alpha] = parseColorFunc(value); + } else { + [, x, y, z, alpha] = parseColorValue(value); + } + [l, c, h] = transformXyzToOklch([x, y, z], true); + return [l, c, format === VAL_MIX && c === 0 ? NONE : h, alpha]; +}; +const resolveColorMix = (value, opt = {}) => { + if (isString(value)) { + value = value.toLowerCase().trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = "", nullable = false } = opt; + const cacheKey = createCacheKey( + { + namespace: NAMESPACE, + name: "resolveColorMix", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return cachedResult; + } + const cachedItem = cachedResult.item; + if (isString(cachedItem)) { + return cachedItem; + } + return cachedItem; + } + const nestedItems = []; + let colorSpace = ""; + let hueArc = ""; + let colorA = ""; + let pctA = ""; + let colorB = ""; + let pctB = ""; + let parsed = false; + if (!REG_MIX.test(value)) { + if (value.startsWith(FN_MIX) && REG_MIX_NEST.test(value)) { + const regColorSpace = new RegExp(`^(?:${CS_RGB}|${CS_XYZ})$`); + const items = value.match(REG_MIX_NEST); + for (const item of items) { + if (item) { + let val = resolveColorMix(item, { + format: format === VAL_SPEC ? format : VAL_COMP + }); + if (Array.isArray(val)) { + const [cs, v1, v2, v3, v4] = val; + if (v1 === 0 && v2 === 0 && v3 === 0 && v4 === 0) { + value = ""; + break; + } + if (regColorSpace.test(cs)) { + if (v4 === 1) { + val = `color(${cs} ${v1} ${v2} ${v3})`; + } else { + val = `color(${cs} ${v1} ${v2} ${v3} / ${v4})`; + } + } else if (v4 === 1) { + val = `${cs}(${v1} ${v2} ${v3})`; + } else { + val = `${cs}(${v1} ${v2} ${v3} / ${v4})`; + } + } else if (!REG_MIX.test(val)) { + value = ""; + break; + } + nestedItems.push(val); + value = value.replace(item, val); + } + } + if (!value) { + const res2 = cacheInvalidColorValue(cacheKey, format, nullable); + return res2; + } + } else if (value.startsWith(FN_MIX) && value.endsWith(")") && value.includes(FN_LIGHT_DARK)) { + const regColorSpace = new RegExp(`in\\s+(${CS_MIX})`); + const colorParts = value.replace(FN_MIX, "").replace(/\)$/, ""); + const [csPart = "", partA = "", partB = ""] = splitValue(colorParts, { + delimiter: "," + }); + const [colorPartA = "", pctPartA = ""] = splitValue(partA); + const [colorPartB = "", pctPartB = ""] = splitValue(partB); + const specifiedColorA = resolveColor(colorPartA, { + format: VAL_SPEC + }); + const specifiedColorB = resolveColor(colorPartB, { + format: VAL_SPEC + }); + if (regColorSpace.test(csPart) && specifiedColorA && specifiedColorB) { + if (format === VAL_SPEC) { + const [, cs] = csPart.match(regColorSpace); + if (REG_CS_HUE.test(cs)) { + [, colorSpace, hueArc] = cs.match(REG_CS_HUE); + } else { + colorSpace = cs; + } + colorA = specifiedColorA; + if (pctPartA) { + pctA = pctPartA; + } + colorB = specifiedColorB; + if (pctPartB) { + pctB = pctPartB; + } + value = value.replace(colorPartA, specifiedColorA).replace(colorPartB, specifiedColorB); + parsed = true; + } else { + const resolvedColorA = resolveColor(colorPartA, opt); + const resolvedColorB = resolveColor(colorPartB, opt); + if (isString(resolvedColorA) && isString(resolvedColorB)) { + value = value.replace(colorPartA, resolvedColorA).replace(colorPartB, resolvedColorB); + } + } + } else { + const res2 = cacheInvalidColorValue(cacheKey, format, nullable); + return res2; + } + } else { + const res2 = cacheInvalidColorValue(cacheKey, format, nullable); + return res2; + } + } + if (nestedItems.length && format === VAL_SPEC) { + const regColorSpace = new RegExp(`^color-mix\\(\\s*in\\s+(${CS_MIX})\\s*,`); + const [, cs] = value.match(regColorSpace); + if (REG_CS_HUE.test(cs)) { + [, colorSpace, hueArc] = cs.match(REG_CS_HUE); + } else { + colorSpace = cs; + } + if (nestedItems.length === 2) { + let [itemA, itemB] = nestedItems; + itemA = itemA.replace(/(?=[()])/g, "\\"); + itemB = itemB.replace(/(?=[()])/g, "\\"); + const regA = new RegExp(`(${itemA})(?:\\s+(${PCT}))?`); + const regB = new RegExp(`(${itemB})(?:\\s+(${PCT}))?`); + [, colorA, pctA] = value.match(regA); + [, colorB, pctB] = value.match(regB); + } else { + let [item] = nestedItems; + item = item.replace(/(?=[()])/g, "\\"); + const itemPart = `${item}(?:\\s+${PCT})?`; + const itemPartCapt = `(${item})(?:\\s+(${PCT}))?`; + const regItemPart = new RegExp(`^${itemPartCapt}$`); + const regLastItem = new RegExp(`${itemPartCapt}\\s*\\)$`); + const regColorPart = new RegExp(`^(${SYN_COLOR_TYPE})(?:\\s+(${PCT}))?$`); + if (regLastItem.test(value)) { + const reg = new RegExp( + `(${SYN_MIX_PART})\\s*,\\s*(${itemPart})\\s*\\)$` + ); + const [, colorPartA, colorPartB] = value.match(reg); + [, colorA, pctA] = colorPartA.match(regColorPart); + [, colorB, pctB] = colorPartB.match(regItemPart); + } else { + const reg = new RegExp( + `(${itemPart})\\s*,\\s*(${SYN_MIX_PART})\\s*\\)$` + ); + const [, colorPartA, colorPartB] = value.match(reg); + [, colorA, pctA] = colorPartA.match(regItemPart); + [, colorB, pctB] = colorPartB.match(regColorPart); + } + } + } else if (!parsed) { + const [, cs, colorPartA, colorPartB] = value.match( + REG_MIX_CAPT + ); + const reg = new RegExp(`^(${SYN_COLOR_TYPE})(?:\\s+(${PCT}))?$`); + [, colorA, pctA] = colorPartA.match(reg); + [, colorB, pctB] = colorPartB.match(reg); + if (REG_CS_HUE.test(cs)) { + [, colorSpace, hueArc] = cs.match(REG_CS_HUE); + } else { + colorSpace = cs; + } + } + let pA, pB, m; + if (pctA && pctB) { + const p1 = parseFloat(pctA) / MAX_PCT; + const p2 = parseFloat(pctB) / MAX_PCT; + if (p1 < 0 || p1 > 1 || p2 < 0 || p2 > 1 || p1 === 0 && p2 === 0) { + const res2 = cacheInvalidColorValue(cacheKey, format, nullable); + return res2; + } + const factor = p1 + p2; + pA = p1 / factor; + pB = p2 / factor; + m = factor < 1 ? factor : 1; + } else { + if (pctA) { + pA = parseFloat(pctA) / MAX_PCT; + if (pA < 0 || pA > 1) { + const res2 = cacheInvalidColorValue(cacheKey, format, nullable); + return res2; + } + pB = 1 - pA; + } else if (pctB) { + pB = parseFloat(pctB) / MAX_PCT; + if (pB < 0 || pB > 1) { + const res2 = cacheInvalidColorValue(cacheKey, format, nullable); + return res2; + } + pA = 1 - pB; + } else { + pA = HALF; + pB = HALF; + } + m = 1; + } + if (colorSpace === "xyz") { + colorSpace = "xyz-d65"; + } + if (format === VAL_SPEC) { + let valueA = ""; + let valueB = ""; + if (colorA.startsWith(FN_MIX) || colorA.startsWith(FN_LIGHT_DARK)) { + valueA = colorA; + } else if (colorA.startsWith(FN_COLOR)) { + const [cs, v1, v2, v3, v4] = parseColorFunc( + colorA, + opt + ); + if (v4 === 1) { + valueA = `color(${cs} ${v1} ${v2} ${v3})`; + } else { + valueA = `color(${cs} ${v1} ${v2} ${v3} / ${v4})`; + } + } else { + const val = parseColorValue(colorA, opt); + if (Array.isArray(val)) { + const [cs, v1, v2, v3, v4] = val; + if (v4 === 1) { + if (cs === "rgb") { + valueA = `${cs}(${v1}, ${v2}, ${v3})`; + } else { + valueA = `${cs}(${v1} ${v2} ${v3})`; + } + } else if (cs === "rgb") { + valueA = `${cs}a(${v1}, ${v2}, ${v3}, ${v4})`; + } else { + valueA = `${cs}(${v1} ${v2} ${v3} / ${v4})`; + } + } else { + if (!isString(val) || !val) { + setCache(cacheKey, ""); + return ""; + } + valueA = val; + } + } + if (colorB.startsWith(FN_MIX) || colorB.startsWith(FN_LIGHT_DARK)) { + valueB = colorB; + } else if (colorB.startsWith(FN_COLOR)) { + const [cs, v1, v2, v3, v4] = parseColorFunc( + colorB, + opt + ); + if (v4 === 1) { + valueB = `color(${cs} ${v1} ${v2} ${v3})`; + } else { + valueB = `color(${cs} ${v1} ${v2} ${v3} / ${v4})`; + } + } else { + const val = parseColorValue(colorB, opt); + if (Array.isArray(val)) { + const [cs, v1, v2, v3, v4] = val; + if (v4 === 1) { + if (cs === "rgb") { + valueB = `${cs}(${v1}, ${v2}, ${v3})`; + } else { + valueB = `${cs}(${v1} ${v2} ${v3})`; + } + } else if (cs === "rgb") { + valueB = `${cs}a(${v1}, ${v2}, ${v3}, ${v4})`; + } else { + valueB = `${cs}(${v1} ${v2} ${v3} / ${v4})`; + } + } else { + if (!isString(val) || !val) { + setCache(cacheKey, ""); + return ""; + } + valueB = val; + } + } + if (pctA && pctB) { + valueA += ` ${parseFloat(pctA)}%`; + valueB += ` ${parseFloat(pctB)}%`; + } else if (pctA) { + const pA2 = parseFloat(pctA); + if (pA2 !== MAX_PCT * HALF) { + valueA += ` ${pA2}%`; + } + } else if (pctB) { + const pA2 = MAX_PCT - parseFloat(pctB); + if (pA2 !== MAX_PCT * HALF) { + valueA += ` ${pA2}%`; + } + } + if (hueArc) { + const res2 = `color-mix(in ${colorSpace} ${hueArc} hue, ${valueA}, ${valueB})`; + setCache(cacheKey, res2); + return res2; + } else { + const res2 = `color-mix(in ${colorSpace}, ${valueA}, ${valueB})`; + setCache(cacheKey, res2); + return res2; + } + } + let r = 0; + let g = 0; + let b = 0; + let alpha = 0; + if (/^srgb(?:-linear)?$/.test(colorSpace)) { + let rgbA, rgbB; + if (colorSpace === "srgb") { + if (REG_CURRENT.test(colorA)) { + rgbA = [NONE, NONE, NONE, NONE]; + } else { + rgbA = convertColorToRgb(colorA, { + colorSpace, + format: VAL_MIX + }); + } + if (REG_CURRENT.test(colorB)) { + rgbB = [NONE, NONE, NONE, NONE]; + } else { + rgbB = convertColorToRgb(colorB, { + colorSpace, + format: VAL_MIX + }); + } + } else { + if (REG_CURRENT.test(colorA)) { + rgbA = [NONE, NONE, NONE, NONE]; + } else { + rgbA = convertColorToLinearRgb(colorA, { + colorSpace, + format: VAL_MIX + }); + } + if (REG_CURRENT.test(colorB)) { + rgbB = [NONE, NONE, NONE, NONE]; + } else { + rgbB = convertColorToLinearRgb(colorB, { + colorSpace, + format: VAL_MIX + }); + } + } + if (rgbA instanceof NullObject || rgbB instanceof NullObject) { + const res2 = cacheInvalidColorValue(cacheKey, format, nullable); + return res2; + } + const [rrA, ggA, bbA, aaA] = rgbA; + const [rrB, ggB, bbB, aaB] = rgbB; + const rNone = rrA === NONE && rrB === NONE; + const gNone = ggA === NONE && ggB === NONE; + const bNone = bbA === NONE && bbB === NONE; + const alphaNone = aaA === NONE && aaB === NONE; + const [[rA, gA, bA, alphaA], [rB, gB, bB, alphaB]] = normalizeColorComponents( + [rrA, ggA, bbA, aaA], + [rrB, ggB, bbB, aaB], + true + ); + const factorA = alphaA * pA; + const factorB = alphaB * pB; + alpha = factorA + factorB; + if (alpha === 0) { + r = rA * pA + rB * pB; + g = gA * pA + gB * pB; + b = bA * pA + bB * pB; + } else { + r = (rA * factorA + rB * factorB) / alpha; + g = (gA * factorA + gB * factorB) / alpha; + b = (bA * factorA + bB * factorB) / alpha; + alpha = parseFloat(alpha.toFixed(3)); + } + if (format === VAL_COMP) { + const res2 = [ + colorSpace, + rNone ? NONE : roundToPrecision(r, HEX), + gNone ? NONE : roundToPrecision(g, HEX), + bNone ? NONE : roundToPrecision(b, HEX), + alphaNone ? NONE : alpha * m + ]; + setCache(cacheKey, res2); + return res2; + } + r *= MAX_RGB; + g *= MAX_RGB; + b *= MAX_RGB; + } else if (REG_CS_XYZ.test(colorSpace)) { + let xyzA, xyzB; + if (REG_CURRENT.test(colorA)) { + xyzA = [NONE, NONE, NONE, NONE]; + } else { + xyzA = convertColorToXyz(colorA, { + colorSpace, + d50: colorSpace === "xyz-d50", + format: VAL_MIX + }); + } + if (REG_CURRENT.test(colorB)) { + xyzB = [NONE, NONE, NONE, NONE]; + } else { + xyzB = convertColorToXyz(colorB, { + colorSpace, + d50: colorSpace === "xyz-d50", + format: VAL_MIX + }); + } + if (xyzA instanceof NullObject || xyzB instanceof NullObject) { + const res2 = cacheInvalidColorValue(cacheKey, format, nullable); + return res2; + } + const [xxA, yyA, zzA, aaA] = xyzA; + const [xxB, yyB, zzB, aaB] = xyzB; + const xNone = xxA === NONE && xxB === NONE; + const yNone = yyA === NONE && yyB === NONE; + const zNone = zzA === NONE && zzB === NONE; + const alphaNone = aaA === NONE && aaB === NONE; + const [[xA, yA, zA, alphaA], [xB, yB, zB, alphaB]] = normalizeColorComponents( + [xxA, yyA, zzA, aaA], + [xxB, yyB, zzB, aaB], + true + ); + const factorA = alphaA * pA; + const factorB = alphaB * pB; + alpha = factorA + factorB; + let x, y, z; + if (alpha === 0) { + x = xA * pA + xB * pB; + y = yA * pA + yB * pB; + z = zA * pA + zB * pB; + } else { + x = (xA * factorA + xB * factorB) / alpha; + y = (yA * factorA + yB * factorB) / alpha; + z = (zA * factorA + zB * factorB) / alpha; + alpha = parseFloat(alpha.toFixed(3)); + } + if (format === VAL_COMP) { + const res2 = [ + colorSpace, + xNone ? NONE : roundToPrecision(x, HEX), + yNone ? NONE : roundToPrecision(y, HEX), + zNone ? NONE : roundToPrecision(z, HEX), + alphaNone ? NONE : alpha * m + ]; + setCache(cacheKey, res2); + return res2; + } + if (colorSpace === "xyz-d50") { + [r, g, b] = transformXyzD50ToRgb([x, y, z], true); + } else { + [r, g, b] = transformXyzToRgb([x, y, z], true); + } + } else if (/^h(?:sl|wb)$/.test(colorSpace)) { + let hslA, hslB; + if (colorSpace === "hsl") { + if (REG_CURRENT.test(colorA)) { + hslA = [NONE, NONE, NONE, NONE]; + } else { + hslA = convertColorToHsl(colorA, { + colorSpace, + format: VAL_MIX + }); + } + if (REG_CURRENT.test(colorB)) { + hslB = [NONE, NONE, NONE, NONE]; + } else { + hslB = convertColorToHsl(colorB, { + colorSpace, + format: VAL_MIX + }); + } + } else { + if (REG_CURRENT.test(colorA)) { + hslA = [NONE, NONE, NONE, NONE]; + } else { + hslA = convertColorToHwb(colorA, { + colorSpace, + format: VAL_MIX + }); + } + if (REG_CURRENT.test(colorB)) { + hslB = [NONE, NONE, NONE, NONE]; + } else { + hslB = convertColorToHwb(colorB, { + colorSpace, + format: VAL_MIX + }); + } + } + if (hslA instanceof NullObject || hslB instanceof NullObject) { + const res2 = cacheInvalidColorValue(cacheKey, format, nullable); + return res2; + } + const [hhA, ssA, llA, aaA] = hslA; + const [hhB, ssB, llB, aaB] = hslB; + const alphaNone = aaA === NONE && aaB === NONE; + let [[hA, sA, lA, alphaA], [hB, sB, lB, alphaB]] = normalizeColorComponents( + [hhA, ssA, llA, aaA], + [hhB, ssB, llB, aaB], + true + ); + if (hueArc) { + [hA, hB] = interpolateHue(hA, hB, hueArc); + } + const factorA = alphaA * pA; + const factorB = alphaB * pB; + alpha = factorA + factorB; + const h = (hA * pA + hB * pB) % DEG; + let s, l; + if (alpha === 0) { + s = sA * pA + sB * pB; + l = lA * pA + lB * pB; + } else { + s = (sA * factorA + sB * factorB) / alpha; + l = (lA * factorA + lB * factorB) / alpha; + alpha = parseFloat(alpha.toFixed(3)); + } + [r, g, b] = convertColorToRgb( + `${colorSpace}(${h} ${s} ${l})` + ); + if (format === VAL_COMP) { + const res2 = [ + "srgb", + roundToPrecision(r / MAX_RGB, HEX), + roundToPrecision(g / MAX_RGB, HEX), + roundToPrecision(b / MAX_RGB, HEX), + alphaNone ? NONE : alpha * m + ]; + setCache(cacheKey, res2); + return res2; + } + } else if (/^(?:ok)?lch$/.test(colorSpace)) { + let lchA, lchB; + if (colorSpace === "lch") { + if (REG_CURRENT.test(colorA)) { + lchA = [NONE, NONE, NONE, NONE]; + } else { + lchA = convertColorToLch(colorA, { + colorSpace, + format: VAL_MIX + }); + } + if (REG_CURRENT.test(colorB)) { + lchB = [NONE, NONE, NONE, NONE]; + } else { + lchB = convertColorToLch(colorB, { + colorSpace, + format: VAL_MIX + }); + } + } else { + if (REG_CURRENT.test(colorA)) { + lchA = [NONE, NONE, NONE, NONE]; + } else { + lchA = convertColorToOklch(colorA, { + colorSpace, + format: VAL_MIX + }); + } + if (REG_CURRENT.test(colorB)) { + lchB = [NONE, NONE, NONE, NONE]; + } else { + lchB = convertColorToOklch(colorB, { + colorSpace, + format: VAL_MIX + }); + } + } + if (lchA instanceof NullObject || lchB instanceof NullObject) { + const res2 = cacheInvalidColorValue(cacheKey, format, nullable); + return res2; + } + const [llA, ccA, hhA, aaA] = lchA; + const [llB, ccB, hhB, aaB] = lchB; + const lNone = llA === NONE && llB === NONE; + const cNone = ccA === NONE && ccB === NONE; + const hNone = hhA === NONE && hhB === NONE; + const alphaNone = aaA === NONE && aaB === NONE; + let [[lA, cA, hA, alphaA], [lB, cB, hB, alphaB]] = normalizeColorComponents( + [llA, ccA, hhA, aaA], + [llB, ccB, hhB, aaB], + true + ); + if (hueArc) { + [hA, hB] = interpolateHue(hA, hB, hueArc); + } + const factorA = alphaA * pA; + const factorB = alphaB * pB; + alpha = factorA + factorB; + const h = (hA * pA + hB * pB) % DEG; + let l, c; + if (alpha === 0) { + l = lA * pA + lB * pB; + c = cA * pA + cB * pB; + } else { + l = (lA * factorA + lB * factorB) / alpha; + c = (cA * factorA + cB * factorB) / alpha; + alpha = parseFloat(alpha.toFixed(3)); + } + if (format === VAL_COMP) { + const res2 = [ + colorSpace, + lNone ? NONE : roundToPrecision(l, HEX), + cNone ? NONE : roundToPrecision(c, HEX), + hNone ? NONE : roundToPrecision(h, HEX), + alphaNone ? NONE : alpha * m + ]; + setCache(cacheKey, res2); + return res2; + } + [, r, g, b] = resolveColorValue( + `${colorSpace}(${l} ${c} ${h})` + ); + } else { + let labA, labB; + if (colorSpace === "lab") { + if (REG_CURRENT.test(colorA)) { + labA = [NONE, NONE, NONE, NONE]; + } else { + labA = convertColorToLab(colorA, { + colorSpace, + format: VAL_MIX + }); + } + if (REG_CURRENT.test(colorB)) { + labB = [NONE, NONE, NONE, NONE]; + } else { + labB = convertColorToLab(colorB, { + colorSpace, + format: VAL_MIX + }); + } + } else { + if (REG_CURRENT.test(colorA)) { + labA = [NONE, NONE, NONE, NONE]; + } else { + labA = convertColorToOklab(colorA, { + colorSpace, + format: VAL_MIX + }); + } + if (REG_CURRENT.test(colorB)) { + labB = [NONE, NONE, NONE, NONE]; + } else { + labB = convertColorToOklab(colorB, { + colorSpace, + format: VAL_MIX + }); + } + } + if (labA instanceof NullObject || labB instanceof NullObject) { + const res2 = cacheInvalidColorValue(cacheKey, format, nullable); + return res2; + } + const [llA, aaA, bbA, alA] = labA; + const [llB, aaB, bbB, alB] = labB; + const lNone = llA === NONE && llB === NONE; + const aNone = aaA === NONE && aaB === NONE; + const bNone = bbA === NONE && bbB === NONE; + const alphaNone = alA === NONE && alB === NONE; + const [[lA, aA, bA, alphaA], [lB, aB, bB, alphaB]] = normalizeColorComponents( + [llA, aaA, bbA, alA], + [llB, aaB, bbB, alB], + true + ); + const factorA = alphaA * pA; + const factorB = alphaB * pB; + alpha = factorA + factorB; + let l, aO, bO; + if (alpha === 0) { + l = lA * pA + lB * pB; + aO = aA * pA + aB * pB; + bO = bA * pA + bB * pB; + } else { + l = (lA * factorA + lB * factorB) / alpha; + aO = (aA * factorA + aB * factorB) / alpha; + bO = (bA * factorA + bB * factorB) / alpha; + alpha = parseFloat(alpha.toFixed(3)); + } + if (format === VAL_COMP) { + const res2 = [ + colorSpace, + lNone ? NONE : roundToPrecision(l, HEX), + aNone ? NONE : roundToPrecision(aO, HEX), + bNone ? NONE : roundToPrecision(bO, HEX), + alphaNone ? NONE : alpha * m + ]; + setCache(cacheKey, res2); + return res2; + } + [, r, g, b] = resolveColorValue( + `${colorSpace}(${l} ${aO} ${bO})` + ); + } + const res = [ + "rgb", + Math.round(r), + Math.round(g), + Math.round(b), + parseFloat((alpha * m).toFixed(3)) + ]; + setCache(cacheKey, res); + return res; +}; +export { + NAMED_COLORS, + angleToDeg, + cacheInvalidColorValue, + convertColorToHsl, + convertColorToHwb, + convertColorToLab, + convertColorToLch, + convertColorToLinearRgb, + convertColorToOklab, + convertColorToOklch, + convertColorToRgb, + convertColorToXyz, + convertHexToLinearRgb, + convertHexToRgb, + convertHexToXyz, + convertRgbToHex, + normalizeColorComponents, + numberToHexString, + parseAlpha, + parseColorFunc, + parseColorValue, + parseHexAlpha, + parseHsl, + parseHwb, + parseLab, + parseLch, + parseOklab, + parseOklch, + parseRgb, + resolveColorFunc, + resolveColorMix, + resolveColorValue, + resolveInvalidColorValue, + transformLinearRgbToRgb, + transformMatrix, + transformRgbToLinearRgb, + transformRgbToXyz, + transformXyzD50ToLab, + transformXyzD50ToLch, + transformXyzD50ToRgb, + transformXyzToHsl, + transformXyzToHwb, + transformXyzToOklab, + transformXyzToOklch, + transformXyzToRgb, + validateColorComponents +}; +//# sourceMappingURL=color.js.map diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/color.js.map b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/color.js.map new file mode 100644 index 0000000..947c072 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/color.js.map @@ -0,0 +1 @@ +{"version":3,"file":"color.js","sources":["../../../src/js/color.ts"],"sourcesContent":["/**\n * color\n *\n * Ref: CSS Color Module Level 4\n * Sample code for Color Conversions\n * https://w3c.github.io/csswg-drafts/css-color-4/#color-conversion-code\n */\n\nimport {\n CacheItem,\n NullObject,\n createCacheKey,\n getCache,\n setCache\n} from './cache';\nimport { isString } from './common';\nimport { resolveColor } from './resolve';\nimport { interpolateHue, roundToPrecision, splitValue } from './util';\nimport {\n ColorChannels,\n ComputedColorChannels,\n Options,\n MatchedRegExp,\n SpecifiedColorChannels,\n StringColorChannels,\n StringColorSpacedChannels\n} from './typedef';\n\n/* constants */\nimport {\n ANGLE,\n CS_HUE_CAPT,\n CS_MIX,\n CS_RGB,\n CS_XYZ,\n FN_COLOR,\n FN_LIGHT_DARK,\n FN_MIX,\n NONE,\n NUM,\n PCT,\n SYN_COLOR_TYPE,\n SYN_FN_COLOR,\n SYN_HSL,\n SYN_HSL_LV3,\n SYN_LCH,\n SYN_MIX,\n SYN_MIX_CAPT,\n SYN_MIX_PART,\n SYN_MOD,\n SYN_RGB_LV3,\n VAL_COMP,\n VAL_MIX,\n VAL_SPEC\n} from './constant';\nconst NAMESPACE = 'color';\n\n/* numeric constants */\nconst PPTH = 0.001;\nconst HALF = 0.5;\nconst DUO = 2;\nconst TRIA = 3;\nconst QUAD = 4;\nconst OCT = 8;\nconst DEC = 10;\nconst DOZ = 12;\nconst HEX = 16;\nconst SEXA = 60;\nconst DEG_HALF = 180;\nconst DEG = 360;\nconst MAX_PCT = 100;\nconst MAX_RGB = 255;\nconst POW_SQR = 2;\nconst POW_CUBE = 3;\nconst POW_LINEAR = 2.4;\nconst LINEAR_COEF = 12.92;\nconst LINEAR_OFFSET = 0.055;\nconst LAB_L = 116;\nconst LAB_A = 500;\nconst LAB_B = 200;\nconst LAB_EPSILON = 216 / 24389;\nconst LAB_KAPPA = 24389 / 27;\n\n/* type definitions */\n/**\n * @type NumStrColorChannels - string or numeric color channels\n */\ntype NumStrColorChannels = [\n x: number | string,\n y: number | string,\n z: number | string,\n alpha: number | string\n];\n\n/**\n * @type TriColorChannels - color channels without alpha\n */\ntype TriColorChannels = [x: number, y: number, z: number];\n\n/**\n * @type ColorMatrix - color matrix\n */\ntype ColorMatrix = [\n r1: TriColorChannels,\n r2: TriColorChannels,\n r3: TriColorChannels\n];\n\n/* white point */\nconst D50: TriColorChannels = [\n 0.3457 / 0.3585,\n 1.0,\n (1.0 - 0.3457 - 0.3585) / 0.3585\n];\nconst MATRIX_D50_TO_D65: ColorMatrix = [\n [0.955473421488075, -0.02309845494876471, 0.06325924320057072],\n [-0.0283697093338637, 1.0099953980813041, 0.021041441191917323],\n [0.012314014864481998, -0.020507649298898964, 1.330365926242124]\n];\nconst MATRIX_D65_TO_D50: ColorMatrix = [\n [1.0479297925449969, 0.022946870601609652, -0.05019226628920524],\n [0.02962780877005599, 0.9904344267538799, -0.017073799063418826],\n [-0.009243040646204504, 0.015055191490298152, 0.7518742814281371]\n];\n\n/* color space */\nconst MATRIX_L_RGB_TO_XYZ: ColorMatrix = [\n [506752 / 1228815, 87881 / 245763, 12673 / 70218],\n [87098 / 409605, 175762 / 245763, 12673 / 175545],\n [7918 / 409605, 87881 / 737289, 1001167 / 1053270]\n];\nconst MATRIX_XYZ_TO_L_RGB: ColorMatrix = [\n [12831 / 3959, -329 / 214, -1974 / 3959],\n [-851781 / 878810, 1648619 / 878810, 36519 / 878810],\n [705 / 12673, -2585 / 12673, 705 / 667]\n];\nconst MATRIX_XYZ_TO_LMS: ColorMatrix = [\n [0.819022437996703, 0.3619062600528904, -0.1288737815209879],\n [0.0329836539323885, 0.9292868615863434, 0.0361446663506424],\n [0.0481771893596242, 0.2642395317527308, 0.6335478284694309]\n];\nconst MATRIX_LMS_TO_XYZ: ColorMatrix = [\n [1.2268798758459243, -0.5578149944602171, 0.2813910456659647],\n [-0.0405757452148008, 1.112286803280317, -0.0717110580655164],\n [-0.0763729366746601, -0.4214933324022432, 1.5869240198367816]\n];\nconst MATRIX_OKLAB_TO_LMS: ColorMatrix = [\n [1.0, 0.3963377773761749, 0.2158037573099136],\n [1.0, -0.1055613458156586, -0.0638541728258133],\n [1.0, -0.0894841775298119, -1.2914855480194092]\n];\nconst MATRIX_LMS_TO_OKLAB: ColorMatrix = [\n [0.210454268309314, 0.7936177747023054, -0.0040720430116193],\n [1.9779985324311684, -2.4285922420485799, 0.450593709617411],\n [0.0259040424655478, 0.7827717124575296, -0.8086757549230774]\n];\nconst MATRIX_P3_TO_XYZ: ColorMatrix = [\n [608311 / 1250200, 189793 / 714400, 198249 / 1000160],\n [35783 / 156275, 247089 / 357200, 198249 / 2500400],\n [0 / 1, 32229 / 714400, 5220557 / 5000800]\n];\nconst MATRIX_REC2020_TO_XYZ: ColorMatrix = [\n [63426534 / 99577255, 20160776 / 139408157, 47086771 / 278816314],\n [26158966 / 99577255, 472592308 / 697040785, 8267143 / 139408157],\n [0 / 1, 19567812 / 697040785, 295819943 / 278816314]\n];\nconst MATRIX_A98_TO_XYZ: ColorMatrix = [\n [573536 / 994567, 263643 / 1420810, 187206 / 994567],\n [591459 / 1989134, 6239551 / 9945670, 374412 / 4972835],\n [53769 / 1989134, 351524 / 4972835, 4929758 / 4972835]\n];\nconst MATRIX_PROPHOTO_TO_XYZ_D50: ColorMatrix = [\n [0.7977666449006423, 0.13518129740053308, 0.0313477341283922],\n [0.2880748288194013, 0.711835234241873, 0.00008993693872564],\n [0.0, 0.0, 0.8251046025104602]\n];\n\n/* regexp */\nconst REG_COLOR = new RegExp(`^(?:${SYN_COLOR_TYPE})$`);\nconst REG_CS_HUE = new RegExp(`^${CS_HUE_CAPT}$`);\nconst REG_CS_XYZ = /^xyz(?:-d(?:50|65))?$/;\nconst REG_CURRENT = /^currentColor$/i;\nconst REG_FN_COLOR = new RegExp(`^color\\\\(\\\\s*(${SYN_FN_COLOR})\\\\s*\\\\)$`);\nconst REG_HSL = new RegExp(`^hsla?\\\\(\\\\s*(${SYN_HSL}|${SYN_HSL_LV3})\\\\s*\\\\)$`);\nconst REG_HWB = new RegExp(`^hwb\\\\(\\\\s*(${SYN_HSL})\\\\s*\\\\)$`);\nconst REG_LAB = new RegExp(`^lab\\\\(\\\\s*(${SYN_MOD})\\\\s*\\\\)$`);\nconst REG_LCH = new RegExp(`^lch\\\\(\\\\s*(${SYN_LCH})\\\\s*\\\\)$`);\nconst REG_MIX = new RegExp(`^${SYN_MIX}$`);\nconst REG_MIX_CAPT = new RegExp(`^${SYN_MIX_CAPT}$`);\nconst REG_MIX_NEST = new RegExp(`${SYN_MIX}`, 'g');\nconst REG_OKLAB = new RegExp(`^oklab\\\\(\\\\s*(${SYN_MOD})\\\\s*\\\\)$`);\nconst REG_OKLCH = new RegExp(`^oklch\\\\(\\\\s*(${SYN_LCH})\\\\s*\\\\)$`);\nconst REG_SPEC = /^(?:specifi|comput)edValue$/;\n\n/**\n * named colors\n */\nexport const NAMED_COLORS = {\n aliceblue: [0xf0, 0xf8, 0xff],\n antiquewhite: [0xfa, 0xeb, 0xd7],\n aqua: [0x00, 0xff, 0xff],\n aquamarine: [0x7f, 0xff, 0xd4],\n azure: [0xf0, 0xff, 0xff],\n beige: [0xf5, 0xf5, 0xdc],\n bisque: [0xff, 0xe4, 0xc4],\n black: [0x00, 0x00, 0x00],\n blanchedalmond: [0xff, 0xeb, 0xcd],\n blue: [0x00, 0x00, 0xff],\n blueviolet: [0x8a, 0x2b, 0xe2],\n brown: [0xa5, 0x2a, 0x2a],\n burlywood: [0xde, 0xb8, 0x87],\n cadetblue: [0x5f, 0x9e, 0xa0],\n chartreuse: [0x7f, 0xff, 0x00],\n chocolate: [0xd2, 0x69, 0x1e],\n coral: [0xff, 0x7f, 0x50],\n cornflowerblue: [0x64, 0x95, 0xed],\n cornsilk: [0xff, 0xf8, 0xdc],\n crimson: [0xdc, 0x14, 0x3c],\n cyan: [0x00, 0xff, 0xff],\n darkblue: [0x00, 0x00, 0x8b],\n darkcyan: [0x00, 0x8b, 0x8b],\n darkgoldenrod: [0xb8, 0x86, 0x0b],\n darkgray: [0xa9, 0xa9, 0xa9],\n darkgreen: [0x00, 0x64, 0x00],\n darkgrey: [0xa9, 0xa9, 0xa9],\n darkkhaki: [0xbd, 0xb7, 0x6b],\n darkmagenta: [0x8b, 0x00, 0x8b],\n darkolivegreen: [0x55, 0x6b, 0x2f],\n darkorange: [0xff, 0x8c, 0x00],\n darkorchid: [0x99, 0x32, 0xcc],\n darkred: [0x8b, 0x00, 0x00],\n darksalmon: [0xe9, 0x96, 0x7a],\n darkseagreen: [0x8f, 0xbc, 0x8f],\n darkslateblue: [0x48, 0x3d, 0x8b],\n darkslategray: [0x2f, 0x4f, 0x4f],\n darkslategrey: [0x2f, 0x4f, 0x4f],\n darkturquoise: [0x00, 0xce, 0xd1],\n darkviolet: [0x94, 0x00, 0xd3],\n deeppink: [0xff, 0x14, 0x93],\n deepskyblue: [0x00, 0xbf, 0xff],\n dimgray: [0x69, 0x69, 0x69],\n dimgrey: [0x69, 0x69, 0x69],\n dodgerblue: [0x1e, 0x90, 0xff],\n firebrick: [0xb2, 0x22, 0x22],\n floralwhite: [0xff, 0xfa, 0xf0],\n forestgreen: [0x22, 0x8b, 0x22],\n fuchsia: [0xff, 0x00, 0xff],\n gainsboro: [0xdc, 0xdc, 0xdc],\n ghostwhite: [0xf8, 0xf8, 0xff],\n gold: [0xff, 0xd7, 0x00],\n goldenrod: [0xda, 0xa5, 0x20],\n gray: [0x80, 0x80, 0x80],\n green: [0x00, 0x80, 0x00],\n greenyellow: [0xad, 0xff, 0x2f],\n grey: [0x80, 0x80, 0x80],\n honeydew: [0xf0, 0xff, 0xf0],\n hotpink: [0xff, 0x69, 0xb4],\n indianred: [0xcd, 0x5c, 0x5c],\n indigo: [0x4b, 0x00, 0x82],\n ivory: [0xff, 0xff, 0xf0],\n khaki: [0xf0, 0xe6, 0x8c],\n lavender: [0xe6, 0xe6, 0xfa],\n lavenderblush: [0xff, 0xf0, 0xf5],\n lawngreen: [0x7c, 0xfc, 0x00],\n lemonchiffon: [0xff, 0xfa, 0xcd],\n lightblue: [0xad, 0xd8, 0xe6],\n lightcoral: [0xf0, 0x80, 0x80],\n lightcyan: [0xe0, 0xff, 0xff],\n lightgoldenrodyellow: [0xfa, 0xfa, 0xd2],\n lightgray: [0xd3, 0xd3, 0xd3],\n lightgreen: [0x90, 0xee, 0x90],\n lightgrey: [0xd3, 0xd3, 0xd3],\n lightpink: [0xff, 0xb6, 0xc1],\n lightsalmon: [0xff, 0xa0, 0x7a],\n lightseagreen: [0x20, 0xb2, 0xaa],\n lightskyblue: [0x87, 0xce, 0xfa],\n lightslategray: [0x77, 0x88, 0x99],\n lightslategrey: [0x77, 0x88, 0x99],\n lightsteelblue: [0xb0, 0xc4, 0xde],\n lightyellow: [0xff, 0xff, 0xe0],\n lime: [0x00, 0xff, 0x00],\n limegreen: [0x32, 0xcd, 0x32],\n linen: [0xfa, 0xf0, 0xe6],\n magenta: [0xff, 0x00, 0xff],\n maroon: [0x80, 0x00, 0x00],\n mediumaquamarine: [0x66, 0xcd, 0xaa],\n mediumblue: [0x00, 0x00, 0xcd],\n mediumorchid: [0xba, 0x55, 0xd3],\n mediumpurple: [0x93, 0x70, 0xdb],\n mediumseagreen: [0x3c, 0xb3, 0x71],\n mediumslateblue: [0x7b, 0x68, 0xee],\n mediumspringgreen: [0x00, 0xfa, 0x9a],\n mediumturquoise: [0x48, 0xd1, 0xcc],\n mediumvioletred: [0xc7, 0x15, 0x85],\n midnightblue: [0x19, 0x19, 0x70],\n mintcream: [0xf5, 0xff, 0xfa],\n mistyrose: [0xff, 0xe4, 0xe1],\n moccasin: [0xff, 0xe4, 0xb5],\n navajowhite: [0xff, 0xde, 0xad],\n navy: [0x00, 0x00, 0x80],\n oldlace: [0xfd, 0xf5, 0xe6],\n olive: [0x80, 0x80, 0x00],\n olivedrab: [0x6b, 0x8e, 0x23],\n orange: [0xff, 0xa5, 0x00],\n orangered: [0xff, 0x45, 0x00],\n orchid: [0xda, 0x70, 0xd6],\n palegoldenrod: [0xee, 0xe8, 0xaa],\n palegreen: [0x98, 0xfb, 0x98],\n paleturquoise: [0xaf, 0xee, 0xee],\n palevioletred: [0xdb, 0x70, 0x93],\n papayawhip: [0xff, 0xef, 0xd5],\n peachpuff: [0xff, 0xda, 0xb9],\n peru: [0xcd, 0x85, 0x3f],\n pink: [0xff, 0xc0, 0xcb],\n plum: [0xdd, 0xa0, 0xdd],\n powderblue: [0xb0, 0xe0, 0xe6],\n purple: [0x80, 0x00, 0x80],\n rebeccapurple: [0x66, 0x33, 0x99],\n red: [0xff, 0x00, 0x00],\n rosybrown: [0xbc, 0x8f, 0x8f],\n royalblue: [0x41, 0x69, 0xe1],\n saddlebrown: [0x8b, 0x45, 0x13],\n salmon: [0xfa, 0x80, 0x72],\n sandybrown: [0xf4, 0xa4, 0x60],\n seagreen: [0x2e, 0x8b, 0x57],\n seashell: [0xff, 0xf5, 0xee],\n sienna: [0xa0, 0x52, 0x2d],\n silver: [0xc0, 0xc0, 0xc0],\n skyblue: [0x87, 0xce, 0xeb],\n slateblue: [0x6a, 0x5a, 0xcd],\n slategray: [0x70, 0x80, 0x90],\n slategrey: [0x70, 0x80, 0x90],\n snow: [0xff, 0xfa, 0xfa],\n springgreen: [0x00, 0xff, 0x7f],\n steelblue: [0x46, 0x82, 0xb4],\n tan: [0xd2, 0xb4, 0x8c],\n teal: [0x00, 0x80, 0x80],\n thistle: [0xd8, 0xbf, 0xd8],\n tomato: [0xff, 0x63, 0x47],\n turquoise: [0x40, 0xe0, 0xd0],\n violet: [0xee, 0x82, 0xee],\n wheat: [0xf5, 0xde, 0xb3],\n white: [0xff, 0xff, 0xff],\n whitesmoke: [0xf5, 0xf5, 0xf5],\n yellow: [0xff, 0xff, 0x00],\n yellowgreen: [0x9a, 0xcd, 0x32]\n} as const satisfies {\n [key: string]: TriColorChannels;\n};\n\n/**\n * cache invalid color value\n * @param key - cache key\n * @param nullable - is nullable\n * @returns cached value\n */\nexport const cacheInvalidColorValue = (\n cacheKey: string,\n format: string,\n nullable: boolean = false\n): SpecifiedColorChannels | string | NullObject => {\n if (format === VAL_SPEC) {\n const res = '';\n setCache(cacheKey, res);\n return res;\n }\n if (nullable) {\n setCache(cacheKey, null);\n return new NullObject();\n }\n const res: SpecifiedColorChannels = ['rgb', 0, 0, 0, 0];\n setCache(cacheKey, res);\n return res;\n};\n\n/**\n * resolve invalid color value\n * @param format - output format\n * @param nullable - is nullable\n * @returns resolved value\n */\nexport const resolveInvalidColorValue = (\n format: string,\n nullable: boolean = false\n): SpecifiedColorChannels | string | NullObject => {\n switch (format) {\n case 'hsl':\n case 'hwb':\n case VAL_MIX: {\n return new NullObject();\n }\n case VAL_SPEC: {\n return '';\n }\n default: {\n if (nullable) {\n return new NullObject();\n }\n return ['rgb', 0, 0, 0, 0] as SpecifiedColorChannels;\n }\n }\n};\n\n/**\n * validate color components\n * @param arr - color components\n * @param [opt] - options\n * @param [opt.alpha] - alpha channel\n * @param [opt.minLength] - min length\n * @param [opt.maxLength] - max length\n * @param [opt.minRange] - min range\n * @param [opt.maxRange] - max range\n * @param [opt.validateRange] - validate range\n * @returns result - validated color components\n */\nexport const validateColorComponents = (\n arr: ColorChannels | TriColorChannels,\n opt: {\n alpha?: boolean;\n minLength?: number;\n maxLength?: number;\n minRange?: number;\n maxRange?: number;\n validateRange?: boolean;\n } = {}\n): ColorChannels | TriColorChannels => {\n if (!Array.isArray(arr)) {\n throw new TypeError(`${arr} is not an array.`);\n }\n const {\n alpha = false,\n minLength = TRIA,\n maxLength = QUAD,\n minRange = 0,\n maxRange = 1,\n validateRange = true\n } = opt;\n if (!Number.isFinite(minLength)) {\n throw new TypeError(`${minLength} is not a number.`);\n }\n if (!Number.isFinite(maxLength)) {\n throw new TypeError(`${maxLength} is not a number.`);\n }\n if (!Number.isFinite(minRange)) {\n throw new TypeError(`${minRange} is not a number.`);\n }\n if (!Number.isFinite(maxRange)) {\n throw new TypeError(`${maxRange} is not a number.`);\n }\n const l = arr.length;\n if (l < minLength || l > maxLength) {\n throw new Error(`Unexpected array length ${l}.`);\n }\n let i = 0;\n while (i < l) {\n const v = arr[i] as number;\n if (!Number.isFinite(v)) {\n throw new TypeError(`${v} is not a number.`);\n } else if (i < TRIA && validateRange && (v < minRange || v > maxRange)) {\n throw new RangeError(`${v} is not between ${minRange} and ${maxRange}.`);\n } else if (i === TRIA && (v < 0 || v > 1)) {\n throw new RangeError(`${v} is not between 0 and 1.`);\n }\n i++;\n }\n if (alpha && l === TRIA) {\n arr.push(1);\n }\n return arr;\n};\n\n/**\n * transform matrix\n * @param mtx - 3 * 3 matrix\n * @param vct - vector\n * @param [skip] - skip validate\n * @returns TriColorChannels - [p1, p2, p3]\n */\nexport const transformMatrix = (\n mtx: ColorMatrix,\n vct: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n if (!Array.isArray(mtx)) {\n throw new TypeError(`${mtx} is not an array.`);\n } else if (mtx.length !== TRIA) {\n throw new Error(`Unexpected array length ${mtx.length}.`);\n } else if (!skip) {\n for (let i of mtx) {\n i = validateColorComponents(i as TriColorChannels, {\n maxLength: TRIA,\n validateRange: false\n }) as TriColorChannels;\n }\n }\n const [[r1c1, r1c2, r1c3], [r2c1, r2c2, r2c3], [r3c1, r3c2, r3c3]] = mtx;\n let v1, v2, v3;\n if (skip) {\n [v1, v2, v3] = vct;\n } else {\n [v1, v2, v3] = validateColorComponents(vct, {\n maxLength: TRIA,\n validateRange: false\n });\n }\n const p1 = r1c1 * v1 + r1c2 * v2 + r1c3 * v3;\n const p2 = r2c1 * v1 + r2c2 * v2 + r2c3 * v3;\n const p3 = r3c1 * v1 + r3c2 * v2 + r3c3 * v3;\n return [p1, p2, p3];\n};\n\n/**\n * normalize color components\n * @param colorA - color components [v1, v2, v3, v4]\n * @param colorB - color components [v1, v2, v3, v4]\n * @param [skip] - skip validate\n * @returns result - [colorA, colorB]\n */\nexport const normalizeColorComponents = (\n colorA: [number | string, number | string, number | string, number | string],\n colorB: [number | string, number | string, number | string, number | string],\n skip: boolean = false\n): [ColorChannels, ColorChannels] => {\n if (!Array.isArray(colorA)) {\n throw new TypeError(`${colorA} is not an array.`);\n } else if (colorA.length !== QUAD) {\n throw new Error(`Unexpected array length ${colorA.length}.`);\n }\n if (!Array.isArray(colorB)) {\n throw new TypeError(`${colorB} is not an array.`);\n } else if (colorB.length !== QUAD) {\n throw new Error(`Unexpected array length ${colorB.length}.`);\n }\n let i = 0;\n while (i < QUAD) {\n if (colorA[i] === NONE && colorB[i] === NONE) {\n colorA[i] = 0;\n colorB[i] = 0;\n } else if (colorA[i] === NONE) {\n colorA[i] = colorB[i] as number;\n } else if (colorB[i] === NONE) {\n colorB[i] = colorA[i] as number;\n }\n i++;\n }\n if (skip) {\n return [colorA as ColorChannels, colorB as ColorChannels];\n }\n const validatedColorA = validateColorComponents(colorA as ColorChannels, {\n minLength: QUAD,\n validateRange: false\n });\n const validatedColorB = validateColorComponents(colorB as ColorChannels, {\n minLength: QUAD,\n validateRange: false\n });\n return [validatedColorA as ColorChannels, validatedColorB as ColorChannels];\n};\n\n/**\n * number to hex string\n * @param value - numeric value\n * @returns hex string\n */\nexport const numberToHexString = (value: number): string => {\n if (!Number.isFinite(value)) {\n throw new TypeError(`${value} is not a number.`);\n } else {\n value = Math.round(value);\n if (value < 0 || value > MAX_RGB) {\n throw new RangeError(`${value} is not between 0 and ${MAX_RGB}.`);\n }\n }\n let hex = value.toString(HEX);\n if (hex.length === 1) {\n hex = `0${hex}`;\n }\n return hex;\n};\n\n/**\n * angle to deg\n * @param angle\n * @returns deg: 0..360\n */\nexport const angleToDeg = (angle: string): number => {\n if (isString(angle)) {\n angle = angle.trim();\n } else {\n throw new TypeError(`${angle} is not a string.`);\n }\n const GRAD = DEG / 400;\n const RAD = DEG / (Math.PI * DUO);\n const reg = new RegExp(`^(${NUM})(${ANGLE})?$`);\n if (!reg.test(angle)) {\n throw new SyntaxError(`Invalid property value: ${angle}`);\n }\n const [, value, unit] = angle.match(reg) as MatchedRegExp;\n let deg;\n switch (unit) {\n case 'grad':\n deg = parseFloat(value) * GRAD;\n break;\n case 'rad':\n deg = parseFloat(value) * RAD;\n break;\n case 'turn':\n deg = parseFloat(value) * DEG;\n break;\n default:\n deg = parseFloat(value);\n }\n deg %= DEG;\n if (deg < 0) {\n deg += DEG;\n } else if (Object.is(deg, -0)) {\n deg = 0;\n }\n return deg;\n};\n\n/**\n * parse alpha\n * @param [alpha] - alpha value\n * @returns alpha: 0..1\n */\nexport const parseAlpha = (alpha: string = ''): number => {\n if (isString(alpha)) {\n alpha = alpha.trim();\n if (!alpha) {\n alpha = '1';\n } else if (alpha === NONE) {\n alpha = '0';\n } else {\n let a;\n if (alpha.endsWith('%')) {\n a = parseFloat(alpha) / MAX_PCT;\n } else {\n a = parseFloat(alpha);\n }\n if (!Number.isFinite(a)) {\n throw new TypeError(`${a} is not a finite number.`);\n }\n if (a < PPTH) {\n alpha = '0';\n } else if (a > 1) {\n alpha = '1';\n } else {\n alpha = a.toFixed(TRIA);\n }\n }\n } else {\n alpha = '1';\n }\n return parseFloat(alpha);\n};\n\n/**\n * parse hex alpha\n * @param value - alpha value in hex string\n * @returns alpha: 0..1\n */\nexport const parseHexAlpha = (value: string): number => {\n if (isString(value)) {\n if (value === '') {\n throw new SyntaxError('Invalid property value: (empty string)');\n }\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n let alpha = parseInt(value, HEX);\n if (alpha <= 0) {\n return 0;\n }\n if (alpha >= MAX_RGB) {\n return 1;\n }\n const alphaMap = new Map();\n for (let i = 1; i < MAX_PCT; i++) {\n alphaMap.set(Math.round((i * MAX_RGB) / MAX_PCT), i);\n }\n if (alphaMap.has(alpha)) {\n alpha = alphaMap.get(alpha) / MAX_PCT;\n } else {\n alpha = Math.round(alpha / MAX_RGB / PPTH) * PPTH;\n }\n return parseFloat(alpha.toFixed(TRIA));\n};\n\n/**\n * transform rgb to linear rgb\n * @param rgb - [r, g, b] r|g|b: 0..255\n * @param [skip] - skip validate\n * @returns TriColorChannels - [r, g, b] r|g|b: 0..1\n */\nexport const transformRgbToLinearRgb = (\n rgb: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n let rr, gg, bb;\n if (skip) {\n [rr, gg, bb] = rgb;\n } else {\n [rr, gg, bb] = validateColorComponents(rgb, {\n maxLength: TRIA,\n maxRange: MAX_RGB\n });\n }\n let r = rr / MAX_RGB;\n let g = gg / MAX_RGB;\n let b = bb / MAX_RGB;\n const COND_POW = 0.04045;\n if (r > COND_POW) {\n r = Math.pow((r + LINEAR_OFFSET) / (1 + LINEAR_OFFSET), POW_LINEAR);\n } else {\n r /= LINEAR_COEF;\n }\n if (g > COND_POW) {\n g = Math.pow((g + LINEAR_OFFSET) / (1 + LINEAR_OFFSET), POW_LINEAR);\n } else {\n g /= LINEAR_COEF;\n }\n if (b > COND_POW) {\n b = Math.pow((b + LINEAR_OFFSET) / (1 + LINEAR_OFFSET), POW_LINEAR);\n } else {\n b /= LINEAR_COEF;\n }\n return [r, g, b];\n};\n\n/**\n * transform rgb to xyz\n * @param rgb - [r, g, b] r|g|b: 0..255\n * @param [skip] - skip validate\n * @returns TriColorChannels - [x, y, z]\n */\nexport const transformRgbToXyz = (\n rgb: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n if (!skip) {\n rgb = validateColorComponents(rgb, {\n maxLength: TRIA,\n maxRange: MAX_RGB\n }) as TriColorChannels;\n }\n rgb = transformRgbToLinearRgb(rgb, true);\n const xyz = transformMatrix(MATRIX_L_RGB_TO_XYZ, rgb, true);\n return xyz;\n};\n\n/**\n * transform rgb to xyz-d50\n * @param rgb - [r, g, b] r|g|b: 0..255 alpha: 0..1\n * @returns TriColorChannels - [x, y, z]\n */\nexport const transformRgbToXyzD50 = (\n rgb: TriColorChannels\n): TriColorChannels => {\n let xyz = transformRgbToXyz(rgb);\n xyz = transformMatrix(MATRIX_D65_TO_D50, xyz, true);\n return xyz;\n};\n\n/**\n * transform linear rgb to rgb\n * @param rgb - [r, g, b] r|g|b: 0..1\n * @param [round] - round result\n * @returns TriColorChannels - [r, g, b] r|g|b: 0..255\n */\nexport const transformLinearRgbToRgb = (\n rgb: TriColorChannels,\n round: boolean = false\n): TriColorChannels => {\n let [r, g, b] = validateColorComponents(rgb, {\n maxLength: TRIA\n });\n const COND_POW = 809 / 258400;\n if (r > COND_POW) {\n r = Math.pow(r, 1 / POW_LINEAR) * (1 + LINEAR_OFFSET) - LINEAR_OFFSET;\n } else {\n r *= LINEAR_COEF;\n }\n r *= MAX_RGB;\n if (g > COND_POW) {\n g = Math.pow(g, 1 / POW_LINEAR) * (1 + LINEAR_OFFSET) - LINEAR_OFFSET;\n } else {\n g *= LINEAR_COEF;\n }\n g *= MAX_RGB;\n if (b > COND_POW) {\n b = Math.pow(b, 1 / POW_LINEAR) * (1 + LINEAR_OFFSET) - LINEAR_OFFSET;\n } else {\n b *= LINEAR_COEF;\n }\n b *= MAX_RGB;\n return [\n round ? Math.round(r) : r,\n round ? Math.round(g) : g,\n round ? Math.round(b) : b\n ];\n};\n\n/**\n * transform xyz to rgb\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [r, g, b] r|g|b: 0..255\n */\nexport const transformXyzToRgb = (\n xyz: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n if (!skip) {\n xyz = validateColorComponents(xyz, {\n maxLength: TRIA,\n validateRange: false\n }) as TriColorChannels;\n }\n let [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, xyz, true);\n [r, g, b] = transformLinearRgbToRgb(\n [\n Math.min(Math.max(r, 0), 1),\n Math.min(Math.max(g, 0), 1),\n Math.min(Math.max(b, 0), 1)\n ],\n true\n );\n return [r, g, b];\n};\n\n/**\n * transform xyz to xyz-d50\n * @param xyz - [x, y, z]\n * @returns TriColorChannels - [x, y, z]\n */\nexport const transformXyzToXyzD50 = (\n xyz: TriColorChannels\n): TriColorChannels => {\n xyz = validateColorComponents(xyz, {\n maxLength: TRIA,\n validateRange: false\n }) as TriColorChannels;\n xyz = transformMatrix(MATRIX_D65_TO_D50, xyz, true);\n return xyz;\n};\n\n/**\n * transform xyz to hsl\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [h, s, l]\n */\nexport const transformXyzToHsl = (\n xyz: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n const [rr, gg, bb] = transformXyzToRgb(xyz, skip);\n const r = rr / MAX_RGB;\n const g = gg / MAX_RGB;\n const b = bb / MAX_RGB;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const d = max - min;\n const l = (max + min) * HALF * MAX_PCT;\n let h, s;\n if (Math.round(l) === 0 || Math.round(l) === MAX_PCT) {\n h = 0;\n s = 0;\n } else {\n s = (d / (1 - Math.abs(max + min - 1))) * MAX_PCT;\n if (s === 0) {\n h = 0;\n } else {\n switch (max) {\n case r:\n h = (g - b) / d;\n break;\n case g:\n h = (b - r) / d + DUO;\n break;\n case b:\n default:\n h = (r - g) / d + QUAD;\n break;\n }\n h = (h * SEXA) % DEG;\n if (h < 0) {\n h += DEG;\n }\n }\n }\n return [h, s, l];\n};\n\n/**\n * transform xyz to hwb\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [h, w, b]\n */\nexport const transformXyzToHwb = (\n xyz: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n const [r, g, b] = transformXyzToRgb(xyz, skip);\n const wh = Math.min(r, g, b) / MAX_RGB;\n const bk = 1 - Math.max(r, g, b) / MAX_RGB;\n let h;\n if (wh + bk === 1) {\n h = 0;\n } else {\n [h] = transformXyzToHsl(xyz);\n }\n return [h, wh * MAX_PCT, bk * MAX_PCT];\n};\n\n/**\n * transform xyz to oklab\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [l, a, b]\n */\nexport const transformXyzToOklab = (\n xyz: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n if (!skip) {\n xyz = validateColorComponents(xyz, {\n maxLength: TRIA,\n validateRange: false\n }) as TriColorChannels;\n }\n const lms = transformMatrix(MATRIX_XYZ_TO_LMS, xyz, true);\n const xyzLms = lms.map(c => Math.cbrt(c)) as TriColorChannels;\n let [l, a, b] = transformMatrix(MATRIX_LMS_TO_OKLAB, xyzLms, true);\n l = Math.min(Math.max(l, 0), 1);\n const lPct = Math.round(parseFloat(l.toFixed(QUAD)) * MAX_PCT);\n if (lPct === 0 || lPct === MAX_PCT) {\n a = 0;\n b = 0;\n }\n return [l, a, b];\n};\n\n/**\n * transform xyz to oklch\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [l, c, h]\n */\nexport const transformXyzToOklch = (\n xyz: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n const [l, a, b] = transformXyzToOklab(xyz, skip);\n let c, h;\n const lPct = Math.round(parseFloat(l.toFixed(QUAD)) * MAX_PCT);\n if (lPct === 0 || lPct === MAX_PCT) {\n c = 0;\n h = 0;\n } else {\n c = Math.max(Math.sqrt(Math.pow(a, POW_SQR) + Math.pow(b, POW_SQR)), 0);\n if (parseFloat(c.toFixed(QUAD)) === 0) {\n h = 0;\n } else {\n h = (Math.atan2(b, a) * DEG_HALF) / Math.PI;\n if (h < 0) {\n h += DEG;\n }\n }\n }\n return [l, c, h];\n};\n\n/**\n * transform xyz D50 to rgb\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [r, g, b] r|g|b: 0..255\n */\nexport const transformXyzD50ToRgb = (\n xyz: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n if (!skip) {\n xyz = validateColorComponents(xyz, {\n maxLength: TRIA,\n validateRange: false\n }) as TriColorChannels;\n }\n const xyzD65 = transformMatrix(MATRIX_D50_TO_D65, xyz, true);\n const rgb = transformXyzToRgb(xyzD65, true);\n return rgb;\n};\n\n/**\n * transform xyz-d50 to lab\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [l, a, b]\n */\nexport const transformXyzD50ToLab = (\n xyz: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n if (!skip) {\n xyz = validateColorComponents(xyz, {\n maxLength: TRIA,\n validateRange: false\n }) as TriColorChannels;\n }\n const xyzD50 = xyz.map((val, i) => val / (D50[i] as number));\n const [f0, f1, f2] = xyzD50.map(val =>\n val > LAB_EPSILON ? Math.cbrt(val) : (val * LAB_KAPPA + HEX) / LAB_L\n ) as TriColorChannels;\n const l = Math.min(Math.max(LAB_L * f1 - HEX, 0), MAX_PCT);\n let a, b;\n if (l === 0 || l === MAX_PCT) {\n a = 0;\n b = 0;\n } else {\n a = (f0 - f1) * LAB_A;\n b = (f1 - f2) * LAB_B;\n }\n return [l, a, b];\n};\n\n/**\n * transform xyz-d50 to lch\n * @param xyz - [x, y, z]\n * @param [skip] - skip validate\n * @returns TriColorChannels - [l, c, h]\n */\nexport const transformXyzD50ToLch = (\n xyz: TriColorChannels,\n skip: boolean = false\n): TriColorChannels => {\n const [l, a, b] = transformXyzD50ToLab(xyz, skip);\n let c, h;\n if (l === 0 || l === MAX_PCT) {\n c = 0;\n h = 0;\n } else {\n c = Math.max(Math.sqrt(Math.pow(a, POW_SQR) + Math.pow(b, POW_SQR)), 0);\n h = (Math.atan2(b, a) * DEG_HALF) / Math.PI;\n if (h < 0) {\n h += DEG;\n }\n }\n return [l, c, h];\n};\n\n/**\n * convert rgb to hex color\n * @param rgb - [r, g, b, alpha] r|g|b: 0..255 alpha: 0..1\n * @returns hex color\n */\nexport const convertRgbToHex = (rgb: ColorChannels): string => {\n const [r, g, b, alpha] = validateColorComponents(rgb, {\n alpha: true,\n maxRange: MAX_RGB\n }) as ColorChannels;\n const rr = numberToHexString(r);\n const gg = numberToHexString(g);\n const bb = numberToHexString(b);\n const aa = numberToHexString(alpha * MAX_RGB);\n let hex;\n if (aa === 'ff') {\n hex = `#${rr}${gg}${bb}`;\n } else {\n hex = `#${rr}${gg}${bb}${aa}`;\n }\n return hex;\n};\n\n/**\n * convert linear rgb to hex color\n * @param rgb - [r, g, b, alpha] r|g|b|alpha: 0..1\n * @param [skip] - skip validate\n * @returns hex color\n */\nexport const convertLinearRgbToHex = (\n rgb: ColorChannels,\n skip: boolean = false\n): string => {\n let r, g, b, alpha;\n if (skip) {\n [r, g, b, alpha] = rgb;\n } else {\n [r, g, b, alpha] = validateColorComponents(rgb, {\n minLength: QUAD\n }) as ColorChannels;\n }\n [r, g, b] = transformLinearRgbToRgb([r, g, b], true);\n const rr = numberToHexString(r);\n const gg = numberToHexString(g);\n const bb = numberToHexString(b);\n const aa = numberToHexString(alpha * MAX_RGB);\n let hex;\n if (aa === 'ff') {\n hex = `#${rr}${gg}${bb}`;\n } else {\n hex = `#${rr}${gg}${bb}${aa}`;\n }\n return hex;\n};\n\n/**\n * convert xyz to hex color\n * @param xyz - [x, y, z, alpha]\n * @returns hex color\n */\nexport const convertXyzToHex = (xyz: ColorChannels): string => {\n const [x, y, z, alpha] = validateColorComponents(xyz, {\n minLength: QUAD,\n validateRange: false\n }) as ColorChannels;\n const [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true);\n const hex = convertLinearRgbToHex(\n [\n Math.min(Math.max(r, 0), 1),\n Math.min(Math.max(g, 0), 1),\n Math.min(Math.max(b, 0), 1),\n alpha\n ],\n true\n );\n return hex;\n};\n\n/**\n * convert xyz D50 to hex color\n * @param xyz - [x, y, z, alpha]\n * @returns hex color\n */\nexport const convertXyzD50ToHex = (xyz: ColorChannels): string => {\n const [x, y, z, alpha] = validateColorComponents(xyz, {\n minLength: QUAD,\n validateRange: false\n }) as ColorChannels;\n const xyzD65 = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true);\n const [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, xyzD65, true);\n const hex = convertLinearRgbToHex([\n Math.min(Math.max(r, 0), 1),\n Math.min(Math.max(g, 0), 1),\n Math.min(Math.max(b, 0), 1),\n alpha\n ]);\n return hex;\n};\n\n/**\n * convert hex color to rgb\n * @param value - hex color value\n * @returns ColorChannels - [r, g, b, alpha] r|g|b: 0..255 alpha: 0..1\n */\nexport const convertHexToRgb = (value: string): ColorChannels => {\n if (isString(value)) {\n value = value.toLowerCase().trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n if (\n !(\n /^#[\\da-f]{6}$/.test(value) ||\n /^#[\\da-f]{3}$/.test(value) ||\n /^#[\\da-f]{8}$/.test(value) ||\n /^#[\\da-f]{4}$/.test(value)\n )\n ) {\n throw new SyntaxError(`Invalid property value: ${value}`);\n }\n const arr: number[] = [];\n if (/^#[\\da-f]{3}$/.test(value)) {\n const [, r, g, b] = value.match(\n /^#([\\da-f])([\\da-f])([\\da-f])$/\n ) as MatchedRegExp;\n arr.push(\n parseInt(`${r}${r}`, HEX),\n parseInt(`${g}${g}`, HEX),\n parseInt(`${b}${b}`, HEX),\n 1\n );\n } else if (/^#[\\da-f]{4}$/.test(value)) {\n const [, r, g, b, alpha] = value.match(\n /^#([\\da-f])([\\da-f])([\\da-f])([\\da-f])$/\n ) as MatchedRegExp;\n arr.push(\n parseInt(`${r}${r}`, HEX),\n parseInt(`${g}${g}`, HEX),\n parseInt(`${b}${b}`, HEX),\n parseHexAlpha(`${alpha}${alpha}`)\n );\n } else if (/^#[\\da-f]{8}$/.test(value)) {\n const [, r, g, b, alpha] = value.match(\n /^#([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})$/\n ) as MatchedRegExp;\n arr.push(\n parseInt(r, HEX),\n parseInt(g, HEX),\n parseInt(b, HEX),\n parseHexAlpha(alpha)\n );\n } else {\n const [, r, g, b] = value.match(\n /^#([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})$/\n ) as MatchedRegExp;\n arr.push(parseInt(r, HEX), parseInt(g, HEX), parseInt(b, HEX), 1);\n }\n return arr as ColorChannels;\n};\n\n/**\n * convert hex color to linear rgb\n * @param value - hex color value\n * @returns ColorChannels - [r, g, b, alpha] r|g|b|alpha: 0..1\n */\nexport const convertHexToLinearRgb = (value: string): ColorChannels => {\n const [rr, gg, bb, alpha] = convertHexToRgb(value);\n const [r, g, b] = transformRgbToLinearRgb([rr, gg, bb], true);\n return [r, g, b, alpha];\n};\n\n/**\n * convert hex color to xyz\n * @param value - hex color value\n * @returns ColorChannels - [x, y, z, alpha]\n */\nexport const convertHexToXyz = (value: string): ColorChannels => {\n const [r, g, b, alpha] = convertHexToLinearRgb(value);\n const [x, y, z] = transformMatrix(MATRIX_L_RGB_TO_XYZ, [r, g, b], true);\n return [x, y, z, alpha];\n};\n\n/**\n * parse rgb()\n * @param value - rgb color value\n * @param [opt] - options\n * @returns parsed color - ['rgb', r, g, b, alpha], '(empty)', NullObject\n */\nexport const parseRgb = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.toLowerCase().trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '', nullable = false } = opt;\n const reg = new RegExp(`^rgba?\\\\(\\\\s*(${SYN_MOD}|${SYN_RGB_LV3})\\\\s*\\\\)$`);\n if (!reg.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n return res;\n }\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n const [, val] = value.match(reg) as MatchedRegExp;\n const [v1, v2, v3, v4 = ''] = val\n .replace(/[,/]/g, ' ')\n .split(/\\s+/) as StringColorChannels;\n let r, g, b;\n if (v1 === NONE) {\n r = 0;\n } else {\n if (v1.endsWith('%')) {\n r = (parseFloat(v1) * MAX_RGB) / MAX_PCT;\n } else {\n r = parseFloat(v1);\n }\n r = Math.min(Math.max(roundToPrecision(r, OCT), 0), MAX_RGB);\n }\n if (v2 === NONE) {\n g = 0;\n } else {\n if (v2.endsWith('%')) {\n g = (parseFloat(v2) * MAX_RGB) / MAX_PCT;\n } else {\n g = parseFloat(v2);\n }\n g = Math.min(Math.max(roundToPrecision(g, OCT), 0), MAX_RGB);\n }\n if (v3 === NONE) {\n b = 0;\n } else {\n if (v3.endsWith('%')) {\n b = (parseFloat(v3) * MAX_RGB) / MAX_PCT;\n } else {\n b = parseFloat(v3);\n }\n b = Math.min(Math.max(roundToPrecision(b, OCT), 0), MAX_RGB);\n }\n const alpha = parseAlpha(v4);\n return ['rgb', r, g, b, format === VAL_MIX && v4 === NONE ? NONE : alpha];\n};\n\n/**\n * parse hsl()\n * @param value - hsl color value\n * @param [opt] - options\n * @returns parsed color - ['rgb', r, g, b, alpha], '(empty)', NullObject\n */\nexport const parseHsl = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '', nullable = false } = opt;\n if (!REG_HSL.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n return res;\n }\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n const [, val] = value.match(REG_HSL) as MatchedRegExp;\n const [v1, v2, v3, v4 = ''] = val\n .replace(/[,/]/g, ' ')\n .split(/\\s+/) as StringColorChannels;\n let h, s, l;\n if (v1 === NONE) {\n h = 0;\n } else {\n h = angleToDeg(v1);\n }\n if (v2 === NONE) {\n s = 0;\n } else {\n s = Math.min(Math.max(parseFloat(v2), 0), MAX_PCT);\n }\n if (v3 === NONE) {\n l = 0;\n } else {\n l = Math.min(Math.max(parseFloat(v3), 0), MAX_PCT);\n }\n const alpha = parseAlpha(v4);\n if (format === 'hsl') {\n return [\n format,\n v1 === NONE ? v1 : h,\n v2 === NONE ? v2 : s,\n v3 === NONE ? v3 : l,\n v4 === NONE ? v4 : alpha\n ];\n }\n h = (h / DEG) * DOZ;\n l /= MAX_PCT;\n const sa = (s / MAX_PCT) * Math.min(l, 1 - l);\n const rk = h % DOZ;\n const gk = (8 + h) % DOZ;\n const bk = (4 + h) % DOZ;\n const r = l - sa * Math.max(-1, Math.min(rk - TRIA, TRIA ** POW_SQR - rk, 1));\n const g = l - sa * Math.max(-1, Math.min(gk - TRIA, TRIA ** POW_SQR - gk, 1));\n const b = l - sa * Math.max(-1, Math.min(bk - TRIA, TRIA ** POW_SQR - bk, 1));\n return [\n 'rgb',\n Math.min(Math.max(roundToPrecision(r * MAX_RGB, OCT), 0), MAX_RGB),\n Math.min(Math.max(roundToPrecision(g * MAX_RGB, OCT), 0), MAX_RGB),\n Math.min(Math.max(roundToPrecision(b * MAX_RGB, OCT), 0), MAX_RGB),\n alpha\n ];\n};\n\n/**\n * parse hwb()\n * @param value - hwb color value\n * @param [opt] - options\n * @returns parsed color - ['rgb', r, g, b, alpha], '(empty)', NullObject\n */\nexport const parseHwb = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '', nullable = false } = opt;\n if (!REG_HWB.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n return res;\n }\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n const [, val] = value.match(REG_HWB) as MatchedRegExp;\n const [v1, v2, v3, v4 = ''] = val\n .replace('/', ' ')\n .split(/\\s+/) as StringColorChannels;\n let h, wh, bk;\n if (v1 === NONE) {\n h = 0;\n } else {\n h = angleToDeg(v1);\n }\n if (v2 === NONE) {\n wh = 0;\n } else {\n wh = Math.min(Math.max(parseFloat(v2), 0), MAX_PCT) / MAX_PCT;\n }\n if (v3 === NONE) {\n bk = 0;\n } else {\n bk = Math.min(Math.max(parseFloat(v3), 0), MAX_PCT) / MAX_PCT;\n }\n const alpha = parseAlpha(v4);\n if (format === 'hwb') {\n return [\n format,\n v1 === NONE ? v1 : h,\n v2 === NONE ? v2 : wh * MAX_PCT,\n v3 === NONE ? v3 : bk * MAX_PCT,\n v4 === NONE ? v4 : alpha\n ];\n }\n if (wh + bk >= 1) {\n const v = roundToPrecision((wh / (wh + bk)) * MAX_RGB, OCT);\n return ['rgb', v, v, v, alpha];\n }\n const factor = (1 - wh - bk) / MAX_RGB;\n let [, r, g, b] = parseHsl(`hsl(${h} 100 50)`) as ComputedColorChannels;\n r = roundToPrecision((r * factor + wh) * MAX_RGB, OCT);\n g = roundToPrecision((g * factor + wh) * MAX_RGB, OCT);\n b = roundToPrecision((b * factor + wh) * MAX_RGB, OCT);\n return [\n 'rgb',\n Math.min(Math.max(r, 0), MAX_RGB),\n Math.min(Math.max(g, 0), MAX_RGB),\n Math.min(Math.max(b, 0), MAX_RGB),\n alpha\n ];\n};\n\n/**\n * parse lab()\n * @param value - lab color value\n * @param [opt] - options\n * @returns parsed color\n * - [xyz-d50, x, y, z, alpha], ['lab', l, a, b, alpha], '(empty)', NullObject\n */\nexport const parseLab = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '', nullable = false } = opt;\n if (!REG_LAB.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n return res;\n }\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n const COEF_PCT = 1.25;\n const COND_POW = 8;\n const [, val] = value.match(REG_LAB) as MatchedRegExp;\n const [v1, v2, v3, v4 = ''] = val\n .replace('/', ' ')\n .split(/\\s+/) as StringColorChannels;\n let l, a, b;\n if (v1 === NONE) {\n l = 0;\n } else {\n if (v1.endsWith('%')) {\n l = parseFloat(v1);\n if (l > MAX_PCT) {\n l = MAX_PCT;\n }\n } else {\n l = parseFloat(v1);\n }\n if (l < 0) {\n l = 0;\n }\n }\n if (v2 === NONE) {\n a = 0;\n } else {\n a = v2.endsWith('%') ? parseFloat(v2) * COEF_PCT : parseFloat(v2);\n }\n if (v3 === NONE) {\n b = 0;\n } else {\n b = v3.endsWith('%') ? parseFloat(v3) * COEF_PCT : parseFloat(v3);\n }\n const alpha = parseAlpha(v4);\n if (REG_SPEC.test(format)) {\n return [\n 'lab',\n v1 === NONE ? v1 : roundToPrecision(l, HEX),\n v2 === NONE ? v2 : roundToPrecision(a, HEX),\n v3 === NONE ? v3 : roundToPrecision(b, HEX),\n v4 === NONE ? v4 : alpha\n ];\n }\n const fl = (l + HEX) / LAB_L;\n const fa = a / LAB_A + fl;\n const fb = fl - b / LAB_B;\n const powFl = Math.pow(fl, POW_CUBE);\n const powFa = Math.pow(fa, POW_CUBE);\n const powFb = Math.pow(fb, POW_CUBE);\n const xyz = [\n powFa > LAB_EPSILON ? powFa : (fa * LAB_L - HEX) / LAB_KAPPA,\n l > COND_POW ? powFl : l / LAB_KAPPA,\n powFb > LAB_EPSILON ? powFb : (fb * LAB_L - HEX) / LAB_KAPPA\n ];\n const [x, y, z] = xyz.map(\n (val, i) => val * (D50[i] as number)\n ) as TriColorChannels;\n return [\n 'xyz-d50',\n roundToPrecision(x, HEX),\n roundToPrecision(y, HEX),\n roundToPrecision(z, HEX),\n alpha\n ];\n};\n\n/**\n * parse lch()\n * @param value - lch color value\n * @param [opt] - options\n * @returns parsed color\n * - ['xyz-d50', x, y, z, alpha], ['lch', l, c, h, alpha]\n * - '(empty)', NullObject\n */\nexport const parseLch = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '', nullable = false } = opt;\n if (!REG_LCH.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n return res;\n }\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n const COEF_PCT = 1.5;\n const [, val] = value.match(REG_LCH) as MatchedRegExp;\n const [v1, v2, v3, v4 = ''] = val\n .replace('/', ' ')\n .split(/\\s+/) as StringColorChannels;\n let l, c, h;\n if (v1 === NONE) {\n l = 0;\n } else {\n l = parseFloat(v1);\n if (l < 0) {\n l = 0;\n }\n }\n if (v2 === NONE) {\n c = 0;\n } else {\n c = v2.endsWith('%') ? parseFloat(v2) * COEF_PCT : parseFloat(v2);\n }\n if (v3 === NONE) {\n h = 0;\n } else {\n h = angleToDeg(v3);\n }\n const alpha = parseAlpha(v4);\n if (REG_SPEC.test(format)) {\n return [\n 'lch',\n v1 === NONE ? v1 : roundToPrecision(l, HEX),\n v2 === NONE ? v2 : roundToPrecision(c, HEX),\n v3 === NONE ? v3 : roundToPrecision(h, HEX),\n v4 === NONE ? v4 : alpha\n ];\n }\n const a = c * Math.cos((h * Math.PI) / DEG_HALF);\n const b = c * Math.sin((h * Math.PI) / DEG_HALF);\n const [, x, y, z] = parseLab(`lab(${l} ${a} ${b})`) as ComputedColorChannels;\n return [\n 'xyz-d50',\n roundToPrecision(x, HEX),\n roundToPrecision(y, HEX),\n roundToPrecision(z, HEX),\n alpha as number\n ];\n};\n\n/**\n * parse oklab()\n * @param value - oklab color value\n * @param [opt] - options\n * @returns parsed color\n * - ['xyz-d65', x, y, z, alpha], ['oklab', l, a, b, alpha]\n * - '(empty)', NullObject\n */\nexport const parseOklab = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '', nullable = false } = opt;\n if (!REG_OKLAB.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n return res;\n }\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n const COEF_PCT = 0.4;\n const [, val] = value.match(REG_OKLAB) as MatchedRegExp;\n const [v1, v2, v3, v4 = ''] = val\n .replace('/', ' ')\n .split(/\\s+/) as StringColorChannels;\n let l, a, b;\n if (v1 === NONE) {\n l = 0;\n } else {\n l = v1.endsWith('%') ? parseFloat(v1) / MAX_PCT : parseFloat(v1);\n if (l < 0) {\n l = 0;\n }\n }\n if (v2 === NONE) {\n a = 0;\n } else if (v2.endsWith('%')) {\n a = (parseFloat(v2) * COEF_PCT) / MAX_PCT;\n } else {\n a = parseFloat(v2);\n }\n if (v3 === NONE) {\n b = 0;\n } else if (v3.endsWith('%')) {\n b = (parseFloat(v3) * COEF_PCT) / MAX_PCT;\n } else {\n b = parseFloat(v3);\n }\n const alpha = parseAlpha(v4);\n if (REG_SPEC.test(format)) {\n return [\n 'oklab',\n v1 === NONE ? v1 : roundToPrecision(l, HEX),\n v2 === NONE ? v2 : roundToPrecision(a, HEX),\n v3 === NONE ? v3 : roundToPrecision(b, HEX),\n v4 === NONE ? v4 : alpha\n ];\n }\n const lms = transformMatrix(MATRIX_OKLAB_TO_LMS, [l, a, b]);\n const xyzLms = lms.map(c => Math.pow(c, POW_CUBE)) as TriColorChannels;\n const [x, y, z] = transformMatrix(MATRIX_LMS_TO_XYZ, xyzLms, true);\n return [\n 'xyz-d65',\n roundToPrecision(x, HEX),\n roundToPrecision(y, HEX),\n roundToPrecision(z, HEX),\n alpha as number\n ];\n};\n\n/**\n * parse oklch()\n * @param value - oklch color value\n * @param [opt] - options\n * @returns parsed color\n * - ['xyz-d65', x, y, z, alpha], ['oklch', l, c, h, alpha]\n * - '(empty)', NullObject\n */\nexport const parseOklch = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '', nullable = false } = opt;\n if (!REG_OKLCH.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n return res;\n }\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n const COEF_PCT = 0.4;\n const [, val] = value.match(REG_OKLCH) as MatchedRegExp;\n const [v1, v2, v3, v4 = ''] = val\n .replace('/', ' ')\n .split(/\\s+/) as StringColorChannels;\n let l, c, h;\n if (v1 === NONE) {\n l = 0;\n } else {\n l = v1.endsWith('%') ? parseFloat(v1) / MAX_PCT : parseFloat(v1);\n if (l < 0) {\n l = 0;\n }\n }\n if (v2 === NONE) {\n c = 0;\n } else {\n if (v2.endsWith('%')) {\n c = (parseFloat(v2) * COEF_PCT) / MAX_PCT;\n } else {\n c = parseFloat(v2);\n }\n if (c < 0) {\n c = 0;\n }\n }\n if (v3 === NONE) {\n h = 0;\n } else {\n h = angleToDeg(v3);\n }\n const alpha = parseAlpha(v4);\n if (REG_SPEC.test(format)) {\n return [\n 'oklch',\n v1 === NONE ? v1 : roundToPrecision(l, HEX),\n v2 === NONE ? v2 : roundToPrecision(c, HEX),\n v3 === NONE ? v3 : roundToPrecision(h, HEX),\n v4 === NONE ? v4 : alpha\n ];\n }\n const a = c * Math.cos((h * Math.PI) / DEG_HALF);\n const b = c * Math.sin((h * Math.PI) / DEG_HALF);\n const lms = transformMatrix(MATRIX_OKLAB_TO_LMS, [l, a, b]);\n const xyzLms = lms.map(cc => Math.pow(cc, POW_CUBE)) as TriColorChannels;\n const [x, y, z] = transformMatrix(MATRIX_LMS_TO_XYZ, xyzLms, true);\n return [\n 'xyz-d65',\n roundToPrecision(x, HEX),\n roundToPrecision(y, HEX),\n roundToPrecision(z, HEX),\n alpha\n ];\n};\n\n/**\n * parse color()\n * @param value - color function value\n * @param [opt] - options\n * @returns parsed color\n * - ['xyz-(d50|d65)', x, y, z, alpha], [cs, r, g, b, alpha]\n * - '(empty)', NullObject\n */\nexport const parseColorFunc = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { colorSpace = '', d50 = false, format = '', nullable = false } = opt;\n if (!REG_FN_COLOR.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n return res;\n }\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n const [, val] = value.match(REG_FN_COLOR) as MatchedRegExp;\n let [cs, v1, v2, v3, v4 = ''] = val\n .replace('/', ' ')\n .split(/\\s+/) as StringColorSpacedChannels;\n let r, g, b;\n if (cs === 'xyz') {\n cs = 'xyz-d65';\n }\n if (v1 === NONE) {\n r = 0;\n } else {\n r = v1.endsWith('%') ? parseFloat(v1) / MAX_PCT : parseFloat(v1);\n }\n if (v2 === NONE) {\n g = 0;\n } else {\n g = v2.endsWith('%') ? parseFloat(v2) / MAX_PCT : parseFloat(v2);\n }\n if (v3 === NONE) {\n b = 0;\n } else {\n b = v3.endsWith('%') ? parseFloat(v3) / MAX_PCT : parseFloat(v3);\n }\n const alpha = parseAlpha(v4);\n if (REG_SPEC.test(format) || (format === VAL_MIX && cs === colorSpace)) {\n return [\n cs,\n v1 === NONE ? v1 : roundToPrecision(r, DEC),\n v2 === NONE ? v2 : roundToPrecision(g, DEC),\n v3 === NONE ? v3 : roundToPrecision(b, DEC),\n v4 === NONE ? v4 : alpha\n ];\n }\n let x = 0;\n let y = 0;\n let z = 0;\n // srgb-linear\n if (cs === 'srgb-linear') {\n [x, y, z] = transformMatrix(MATRIX_L_RGB_TO_XYZ, [r, g, b]);\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n // display-p3\n } else if (cs === 'display-p3') {\n const linearRgb = transformRgbToLinearRgb([\n r * MAX_RGB,\n g * MAX_RGB,\n b * MAX_RGB\n ]);\n [x, y, z] = transformMatrix(MATRIX_P3_TO_XYZ, linearRgb);\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n // rec2020\n } else if (cs === 'rec2020') {\n const ALPHA = 1.09929682680944;\n const BETA = 0.018053968510807;\n const REC_COEF = 0.45;\n const rgb = [r, g, b].map(c => {\n let cl;\n if (c < BETA * REC_COEF * DEC) {\n cl = c / (REC_COEF * DEC);\n } else {\n cl = Math.pow((c + ALPHA - 1) / ALPHA, 1 / REC_COEF);\n }\n return cl;\n }) as TriColorChannels;\n [x, y, z] = transformMatrix(MATRIX_REC2020_TO_XYZ, rgb);\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n // a98-rgb\n } else if (cs === 'a98-rgb') {\n const POW_A98 = 563 / 256;\n const rgb = [r, g, b].map(c => {\n const cl = Math.pow(c, POW_A98);\n return cl;\n }) as TriColorChannels;\n [x, y, z] = transformMatrix(MATRIX_A98_TO_XYZ, rgb);\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n // prophoto-rgb\n } else if (cs === 'prophoto-rgb') {\n const POW_PROPHOTO = 1.8;\n const rgb = [r, g, b].map(c => {\n let cl;\n if (c > 1 / (HEX * DUO)) {\n cl = Math.pow(c, POW_PROPHOTO);\n } else {\n cl = c / HEX;\n }\n return cl;\n }) as TriColorChannels;\n [x, y, z] = transformMatrix(MATRIX_PROPHOTO_TO_XYZ_D50, rgb);\n if (!d50) {\n [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true);\n }\n // xyz, xyz-d50, xyz-d65\n } else if (/^xyz(?:-d(?:50|65))?$/.test(cs)) {\n [x, y, z] = [r, g, b];\n if (cs === 'xyz-d50') {\n if (!d50) {\n [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z]);\n }\n } else if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n // srgb\n } else {\n [x, y, z] = transformRgbToXyz([r * MAX_RGB, g * MAX_RGB, b * MAX_RGB]);\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n }\n return [\n d50 ? 'xyz-d50' : 'xyz-d65',\n roundToPrecision(x, HEX),\n roundToPrecision(y, HEX),\n roundToPrecision(z, HEX),\n format === VAL_MIX && v4 === NONE ? v4 : alpha\n ];\n};\n\n/**\n * parse color value\n * @param value - CSS color value\n * @param [opt] - options\n * @returns parsed color\n * - ['xyz-(d50|d65)', x, y, z, alpha], ['rgb', r, g, b, alpha]\n * - value, '(empty)', NullObject\n */\nexport const parseColorValue = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.toLowerCase().trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { d50 = false, format = '', nullable = false } = opt;\n if (!REG_COLOR.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n return res;\n }\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n let x = 0;\n let y = 0;\n let z = 0;\n let alpha = 0;\n // complement currentcolor as a missing color\n if (REG_CURRENT.test(value)) {\n if (format === VAL_COMP) {\n return ['rgb', 0, 0, 0, 0];\n }\n if (format === VAL_SPEC) {\n return value;\n }\n // named-color\n } else if (/^[a-z]+$/.test(value)) {\n if (Object.hasOwn(NAMED_COLORS, value)) {\n if (format === VAL_SPEC) {\n return value;\n }\n const [r, g, b] = NAMED_COLORS[\n value as keyof typeof NAMED_COLORS\n ] as TriColorChannels;\n alpha = 1;\n if (format === VAL_COMP) {\n return ['rgb', r, g, b, alpha];\n }\n [x, y, z] = transformRgbToXyz([r, g, b], true);\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n } else {\n switch (format) {\n case VAL_COMP: {\n if (nullable && value !== 'transparent') {\n return new NullObject();\n }\n return ['rgb', 0, 0, 0, 0];\n }\n case VAL_SPEC: {\n if (value === 'transparent') {\n return value;\n }\n return '';\n }\n case VAL_MIX: {\n if (value === 'transparent') {\n return ['rgb', 0, 0, 0, 0];\n }\n return new NullObject();\n }\n default:\n }\n }\n // hex-color\n } else if (value[0] === '#') {\n if (REG_SPEC.test(format)) {\n const rgb = convertHexToRgb(value);\n return ['rgb', ...rgb];\n }\n [x, y, z, alpha] = convertHexToXyz(value);\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n // lab()\n } else if (value.startsWith('lab')) {\n if (REG_SPEC.test(format)) {\n return parseLab(value, opt);\n }\n [, x, y, z, alpha] = parseLab(value) as ComputedColorChannels;\n if (!d50) {\n [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true);\n }\n // lch()\n } else if (value.startsWith('lch')) {\n if (REG_SPEC.test(format)) {\n return parseLch(value, opt);\n }\n [, x, y, z, alpha] = parseLch(value) as ComputedColorChannels;\n if (!d50) {\n [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true);\n }\n // oklab()\n } else if (value.startsWith('oklab')) {\n if (REG_SPEC.test(format)) {\n return parseOklab(value, opt);\n }\n [, x, y, z, alpha] = parseOklab(value) as ComputedColorChannels;\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n // oklch()\n } else if (value.startsWith('oklch')) {\n if (REG_SPEC.test(format)) {\n return parseOklch(value, opt);\n }\n [, x, y, z, alpha] = parseOklch(value) as ComputedColorChannels;\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n } else {\n let r, g, b;\n // hsl()\n if (value.startsWith('hsl')) {\n [, r, g, b, alpha] = parseHsl(value) as ComputedColorChannels;\n // hwb()\n } else if (value.startsWith('hwb')) {\n [, r, g, b, alpha] = parseHwb(value) as ComputedColorChannels;\n // rgb()\n } else {\n [, r, g, b, alpha] = parseRgb(value, opt) as ComputedColorChannels;\n }\n if (REG_SPEC.test(format)) {\n return ['rgb', Math.round(r), Math.round(g), Math.round(b), alpha];\n }\n [x, y, z] = transformRgbToXyz([r, g, b]);\n if (d50) {\n [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true);\n }\n }\n return [\n d50 ? 'xyz-d50' : 'xyz-d65',\n roundToPrecision(x, HEX),\n roundToPrecision(y, HEX),\n roundToPrecision(z, HEX),\n alpha\n ];\n};\n\n/**\n * resolve color value\n * @param value - CSS color value\n * @param [opt] - options\n * @returns resolved color\n * - [cs, v1, v2, v3, alpha], value, '(empty)', NullObject\n */\nexport const resolveColorValue = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.toLowerCase().trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { colorSpace = '', format = '', nullable = false } = opt;\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'resolveColorValue',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return cachedResult as NullObject;\n }\n const cachedItem = cachedResult.item;\n if (isString(cachedItem)) {\n return cachedItem as string;\n }\n return cachedItem as SpecifiedColorChannels;\n }\n if (!REG_COLOR.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n setCache(cacheKey, null);\n return res;\n }\n setCache(cacheKey, res);\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n let cs = '';\n let r = 0;\n let g = 0;\n let b = 0;\n let alpha = 0;\n // complement currentcolor as a missing color\n if (REG_CURRENT.test(value)) {\n if (format === VAL_SPEC) {\n setCache(cacheKey, value);\n return value;\n }\n // named-color\n } else if (/^[a-z]+$/.test(value)) {\n if (Object.hasOwn(NAMED_COLORS, value)) {\n if (format === VAL_SPEC) {\n setCache(cacheKey, value);\n return value;\n }\n [r, g, b] = NAMED_COLORS[\n value as keyof typeof NAMED_COLORS\n ] as TriColorChannels;\n alpha = 1;\n } else {\n switch (format) {\n case VAL_SPEC: {\n if (value === 'transparent') {\n setCache(cacheKey, value);\n return value;\n }\n const res = '';\n setCache(cacheKey, res);\n return res;\n }\n case VAL_MIX: {\n if (value === 'transparent') {\n const res: SpecifiedColorChannels = ['rgb', 0, 0, 0, 0];\n setCache(cacheKey, res);\n return res;\n }\n setCache(cacheKey, null);\n return new NullObject();\n }\n case VAL_COMP:\n default: {\n if (nullable && value !== 'transparent') {\n setCache(cacheKey, null);\n return new NullObject();\n }\n const res: SpecifiedColorChannels = ['rgb', 0, 0, 0, 0];\n setCache(cacheKey, res);\n return res;\n }\n }\n }\n // hex-color\n } else if (value[0] === '#') {\n [r, g, b, alpha] = convertHexToRgb(value);\n // hsl()\n } else if (value.startsWith('hsl')) {\n [, r, g, b, alpha] = parseHsl(value, opt) as ComputedColorChannels;\n // hwb()\n } else if (value.startsWith('hwb')) {\n [, r, g, b, alpha] = parseHwb(value, opt) as ComputedColorChannels;\n // lab(), lch()\n } else if (/^l(?:ab|ch)/.test(value)) {\n let x, y, z;\n if (value.startsWith('lab')) {\n [cs, x, y, z, alpha] = parseLab(value, opt) as ComputedColorChannels;\n } else {\n [cs, x, y, z, alpha] = parseLch(value, opt) as ComputedColorChannels;\n }\n if (REG_SPEC.test(format)) {\n const res: SpecifiedColorChannels = [cs, x, y, z, alpha];\n setCache(cacheKey, res);\n return res;\n }\n [r, g, b] = transformXyzD50ToRgb([x, y, z]);\n // oklab(), oklch()\n } else if (/^okl(?:ab|ch)/.test(value)) {\n let x, y, z;\n if (value.startsWith('oklab')) {\n [cs, x, y, z, alpha] = parseOklab(value, opt) as ComputedColorChannels;\n } else {\n [cs, x, y, z, alpha] = parseOklch(value, opt) as ComputedColorChannels;\n }\n if (REG_SPEC.test(format)) {\n const res: SpecifiedColorChannels = [cs, x, y, z, alpha];\n setCache(cacheKey, res);\n return res;\n }\n [r, g, b] = transformXyzToRgb([x, y, z]);\n // rgb()\n } else {\n [, r, g, b, alpha] = parseRgb(value, opt) as ComputedColorChannels;\n }\n if (format === VAL_MIX && colorSpace === 'srgb') {\n const res: SpecifiedColorChannels = [\n 'srgb',\n r / MAX_RGB,\n g / MAX_RGB,\n b / MAX_RGB,\n alpha\n ];\n setCache(cacheKey, res);\n return res;\n }\n const res: SpecifiedColorChannels = [\n 'rgb',\n Math.round(r),\n Math.round(g),\n Math.round(b),\n alpha\n ];\n setCache(cacheKey, res);\n return res;\n};\n\n/**\n * resolve color()\n * @param value - color function value\n * @param [opt] - options\n * @returns resolved color - [cs, v1, v2, v3, alpha], '(empty)', NullObject\n */\nexport const resolveColorFunc = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.toLowerCase().trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { colorSpace = '', format = '', nullable = false } = opt;\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'resolveColorFunc',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return cachedResult as NullObject;\n }\n const cachedItem = cachedResult.item;\n if (isString(cachedItem)) {\n return cachedItem as string;\n }\n return cachedItem as SpecifiedColorChannels;\n }\n if (!REG_FN_COLOR.test(value)) {\n const res = resolveInvalidColorValue(format, nullable);\n if (res instanceof NullObject) {\n setCache(cacheKey, null);\n return res;\n }\n setCache(cacheKey, res);\n if (isString(res)) {\n return res as string;\n }\n return res as SpecifiedColorChannels;\n }\n const [cs, v1, v2, v3, v4] = parseColorFunc(\n value,\n opt\n ) as SpecifiedColorChannels;\n if (REG_SPEC.test(format) || (format === VAL_MIX && cs === colorSpace)) {\n const res: SpecifiedColorChannels = [cs, v1, v2, v3, v4];\n setCache(cacheKey, res);\n return res;\n }\n const x = parseFloat(`${v1}`);\n const y = parseFloat(`${v2}`);\n const z = parseFloat(`${v3}`);\n const alpha = parseAlpha(`${v4}`);\n const [r, g, b] = transformXyzToRgb([x, y, z], true);\n const res: SpecifiedColorChannels = ['rgb', r, g, b, alpha];\n setCache(cacheKey, res);\n return res;\n};\n\n/**\n * convert color value to linear rgb\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels | NullObject - [r, g, b, alpha] r|g|b|alpha: 0..1\n */\nexport const convertColorToLinearRgb = (\n value: string,\n opt: {\n colorSpace?: string;\n format?: string;\n } = {}\n): ColorChannels | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { colorSpace = '', format = '' } = opt;\n let cs = '';\n let r, g, b, alpha, x, y, z;\n if (format === VAL_MIX) {\n let xyz;\n if (value.startsWith(FN_COLOR)) {\n xyz = parseColorFunc(value, opt);\n } else {\n xyz = parseColorValue(value, opt);\n }\n if (xyz instanceof NullObject) {\n return xyz;\n }\n [cs, x, y, z, alpha] = xyz as ComputedColorChannels;\n if (cs === colorSpace) {\n return [x, y, z, alpha];\n }\n [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true);\n } else if (value.startsWith(FN_COLOR)) {\n const [, val] = value.match(REG_FN_COLOR) as MatchedRegExp;\n const [cs] = val\n .replace('/', ' ')\n .split(/\\s+/) as StringColorSpacedChannels;\n if (cs === 'srgb-linear') {\n [, r, g, b, alpha] = resolveColorFunc(value, {\n format: VAL_COMP\n }) as ComputedColorChannels;\n } else {\n [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;\n [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true);\n }\n } else {\n [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels;\n [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true);\n }\n return [\n Math.min(Math.max(r, 0), 1),\n Math.min(Math.max(g, 0), 1),\n Math.min(Math.max(b, 0), 1),\n alpha\n ];\n};\n\n/**\n * convert color value to rgb\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels | NullObject\n * - [r, g, b, alpha] r|g|b: 0..255 alpha: 0..1\n */\nexport const convertColorToRgb = (\n value: string,\n opt: Options = {}\n): ColorChannels | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '' } = opt;\n let r, g, b, alpha;\n if (format === VAL_MIX) {\n let rgb;\n if (value.startsWith(FN_COLOR)) {\n rgb = resolveColorFunc(value, opt);\n } else {\n rgb = resolveColorValue(value, opt);\n }\n if (rgb instanceof NullObject) {\n return rgb;\n }\n [, r, g, b, alpha] = rgb as ComputedColorChannels;\n } else if (value.startsWith(FN_COLOR)) {\n const [, val] = value.match(REG_FN_COLOR) as MatchedRegExp;\n const [cs] = val\n .replace('/', ' ')\n .split(/\\s+/) as StringColorSpacedChannels;\n if (cs === 'srgb') {\n [, r, g, b, alpha] = resolveColorFunc(value, {\n format: VAL_COMP\n }) as ComputedColorChannels;\n r *= MAX_RGB;\n g *= MAX_RGB;\n b *= MAX_RGB;\n } else {\n [, r, g, b, alpha] = resolveColorFunc(value) as ComputedColorChannels;\n }\n } else if (/^(?:ok)?l(?:ab|ch)/.test(value)) {\n [r, g, b, alpha] = convertColorToLinearRgb(value) as ColorChannels;\n [r, g, b] = transformLinearRgbToRgb([r, g, b]);\n } else {\n [, r, g, b, alpha] = resolveColorValue(value, {\n format: VAL_COMP\n }) as ComputedColorChannels;\n }\n return [r, g, b, alpha];\n};\n\n/**\n * convert color value to xyz\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels | NullObject - [x, y, z, alpha]\n */\nexport const convertColorToXyz = (\n value: string,\n opt: Options = {}\n): ColorChannels | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { d50 = false, format = '' } = opt;\n let x, y, z, alpha;\n if (format === VAL_MIX) {\n let xyz;\n if (value.startsWith(FN_COLOR)) {\n xyz = parseColorFunc(value, opt);\n } else {\n xyz = parseColorValue(value, opt);\n }\n if (xyz instanceof NullObject) {\n return xyz;\n }\n [, x, y, z, alpha] = xyz as ComputedColorChannels;\n } else if (value.startsWith(FN_COLOR)) {\n const [, val] = value.match(REG_FN_COLOR) as MatchedRegExp;\n const [cs] = val\n .replace('/', ' ')\n .split(/\\s+/) as StringColorSpacedChannels;\n if (d50) {\n if (cs === 'xyz-d50') {\n [, x, y, z, alpha] = resolveColorFunc(value, {\n format: VAL_COMP\n }) as ComputedColorChannels;\n } else {\n [, x, y, z, alpha] = parseColorFunc(\n value,\n opt\n ) as ComputedColorChannels;\n }\n } else if (/^xyz(?:-d65)?$/.test(cs)) {\n [, x, y, z, alpha] = resolveColorFunc(value, {\n format: VAL_COMP\n }) as ComputedColorChannels;\n } else {\n [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;\n }\n } else {\n [, x, y, z, alpha] = parseColorValue(value, opt) as ComputedColorChannels;\n }\n return [x, y, z, alpha];\n};\n\n/**\n * convert color value to hsl\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels | NullObject - [h, s, l, alpha], hue may be powerless\n */\nexport const convertColorToHsl = (\n value: string,\n opt: Options = {}\n): ColorChannels | [number | string, number, number, number] | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '' } = opt;\n let h, s, l, alpha;\n if (REG_HSL.test(value)) {\n [, h, s, l, alpha] = parseHsl(value, {\n format: 'hsl'\n }) as ComputedColorChannels;\n if (format === 'hsl') {\n return [Math.round(h), Math.round(s), Math.round(l), alpha];\n }\n return [h, s, l, alpha];\n }\n let x, y, z;\n if (format === VAL_MIX) {\n let xyz;\n if (value.startsWith(FN_COLOR)) {\n xyz = parseColorFunc(value, opt);\n } else {\n xyz = parseColorValue(value, opt);\n }\n if (xyz instanceof NullObject) {\n return xyz;\n }\n [, x, y, z, alpha] = xyz as ComputedColorChannels;\n } else if (value.startsWith(FN_COLOR)) {\n [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;\n } else {\n [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels;\n }\n [h, s, l] = transformXyzToHsl([x, y, z], true) as TriColorChannels;\n if (format === 'hsl') {\n return [Math.round(h), Math.round(s), Math.round(l), alpha];\n }\n return [format === VAL_MIX && s === 0 ? NONE : h, s, l, alpha];\n};\n\n/**\n * convert color value to hwb\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels | NullObject - [h, w, b, alpha], hue may be powerless\n */\nexport const convertColorToHwb = (\n value: string,\n opt: Options = {}\n): ColorChannels | [number | string, number, number, number] | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '' } = opt;\n let h, w, b, alpha;\n if (REG_HWB.test(value)) {\n [, h, w, b, alpha] = parseHwb(value, {\n format: 'hwb'\n }) as ComputedColorChannels;\n if (format === 'hwb') {\n return [Math.round(h), Math.round(w), Math.round(b), alpha];\n }\n return [h, w, b, alpha];\n }\n let x, y, z;\n if (format === VAL_MIX) {\n let xyz;\n if (value.startsWith(FN_COLOR)) {\n xyz = parseColorFunc(value, opt);\n } else {\n xyz = parseColorValue(value, opt);\n }\n if (xyz instanceof NullObject) {\n return xyz;\n }\n [, x, y, z, alpha] = xyz as ComputedColorChannels;\n } else if (value.startsWith(FN_COLOR)) {\n [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;\n } else {\n [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels;\n }\n [h, w, b] = transformXyzToHwb([x, y, z], true) as TriColorChannels;\n if (format === 'hwb') {\n return [Math.round(h), Math.round(w), Math.round(b), alpha];\n }\n return [format === VAL_MIX && w + b >= 100 ? NONE : h, w, b, alpha];\n};\n\n/**\n * convert color value to lab\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels | NullObject - [l, a, b, alpha]\n */\nexport const convertColorToLab = (\n value: string,\n opt: Options = {}\n): ColorChannels | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '' } = opt;\n let l, a, b, alpha;\n if (REG_LAB.test(value)) {\n [, l, a, b, alpha] = parseLab(value, {\n format: VAL_COMP\n }) as ComputedColorChannels;\n return [l, a, b, alpha];\n }\n let x, y, z;\n if (format === VAL_MIX) {\n let xyz;\n opt.d50 = true;\n if (value.startsWith(FN_COLOR)) {\n xyz = parseColorFunc(value, opt);\n } else {\n xyz = parseColorValue(value, opt);\n }\n if (xyz instanceof NullObject) {\n return xyz;\n }\n [, x, y, z, alpha] = xyz as ComputedColorChannels;\n } else if (value.startsWith(FN_COLOR)) {\n [, x, y, z, alpha] = parseColorFunc(value, {\n d50: true\n }) as ComputedColorChannels;\n } else {\n [, x, y, z, alpha] = parseColorValue(value, {\n d50: true\n }) as ComputedColorChannels;\n }\n [l, a, b] = transformXyzD50ToLab([x, y, z], true);\n return [l, a, b, alpha];\n};\n\n/**\n * convert color value to lch\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels | NullObject - [l, c, h, alpha], hue may be powerless\n */\nexport const convertColorToLch = (\n value: string,\n opt: Options = {}\n): ColorChannels | [number, number, number | string, number] | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '' } = opt;\n let l, c, h, alpha;\n if (REG_LCH.test(value)) {\n [, l, c, h, alpha] = parseLch(value, {\n format: VAL_COMP\n }) as ComputedColorChannels;\n return [l, c, h, alpha];\n }\n let x, y, z;\n if (format === VAL_MIX) {\n let xyz;\n opt.d50 = true;\n if (value.startsWith(FN_COLOR)) {\n xyz = parseColorFunc(value, opt);\n } else {\n xyz = parseColorValue(value, opt);\n }\n if (xyz instanceof NullObject) {\n return xyz;\n }\n [, x, y, z, alpha] = xyz as ComputedColorChannels;\n } else if (value.startsWith(FN_COLOR)) {\n [, x, y, z, alpha] = parseColorFunc(value, {\n d50: true\n }) as ComputedColorChannels;\n } else {\n [, x, y, z, alpha] = parseColorValue(value, {\n d50: true\n }) as ComputedColorChannels;\n }\n [l, c, h] = transformXyzD50ToLch([x, y, z], true);\n return [l, c, format === VAL_MIX && c === 0 ? NONE : h, alpha];\n};\n\n/**\n * convert color value to oklab\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels | NullObject - [l, a, b, alpha]\n */\nexport const convertColorToOklab = (\n value: string,\n opt: Options = {}\n): ColorChannels | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '' } = opt;\n let l, a, b, alpha;\n if (REG_OKLAB.test(value)) {\n [, l, a, b, alpha] = parseOklab(value, {\n format: VAL_COMP\n }) as ComputedColorChannels;\n return [l, a, b, alpha];\n }\n let x, y, z;\n if (format === VAL_MIX) {\n let xyz;\n if (value.startsWith(FN_COLOR)) {\n xyz = parseColorFunc(value, opt);\n } else {\n xyz = parseColorValue(value, opt);\n }\n if (xyz instanceof NullObject) {\n return xyz;\n }\n [, x, y, z, alpha] = xyz as ComputedColorChannels;\n } else if (value.startsWith(FN_COLOR)) {\n [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;\n } else {\n [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels;\n }\n [l, a, b] = transformXyzToOklab([x, y, z], true);\n return [l, a, b, alpha];\n};\n\n/**\n * convert color value to oklch\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels | NullObject - [l, c, h, alpha], hue may be powerless\n */\nexport const convertColorToOklch = (\n value: string,\n opt: Options = {}\n): ColorChannels | [number, number, number | string, number] | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '' } = opt;\n let l, c, h, alpha;\n if (REG_OKLCH.test(value)) {\n [, l, c, h, alpha] = parseOklch(value, {\n format: VAL_COMP\n }) as ComputedColorChannels;\n return [l, c, h, alpha];\n }\n let x, y, z;\n if (format === VAL_MIX) {\n let xyz;\n if (value.startsWith(FN_COLOR)) {\n xyz = parseColorFunc(value, opt);\n } else {\n xyz = parseColorValue(value, opt);\n }\n if (xyz instanceof NullObject) {\n return xyz;\n }\n [, x, y, z, alpha] = xyz as ComputedColorChannels;\n } else if (value.startsWith(FN_COLOR)) {\n [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels;\n } else {\n [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels;\n }\n [l, c, h] = transformXyzToOklch([x, y, z], true) as TriColorChannels;\n return [l, c, format === VAL_MIX && c === 0 ? NONE : h, alpha];\n};\n\n/**\n * resolve color-mix()\n * @param value - color-mix color value\n * @param [opt] - options\n * @returns resolved color - [cs, v1, v2, v3, alpha], '(empty)'\n */\nexport const resolveColorMix = (\n value: string,\n opt: Options = {}\n): SpecifiedColorChannels | string | NullObject => {\n if (isString(value)) {\n value = value.toLowerCase().trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { format = '', nullable = false } = opt;\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'resolveColorMix',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return cachedResult as NullObject;\n }\n const cachedItem = cachedResult.item;\n if (isString(cachedItem)) {\n return cachedItem as string;\n }\n return cachedItem as SpecifiedColorChannels;\n }\n const nestedItems = [];\n let colorSpace = '';\n let hueArc = '';\n let colorA = '';\n let pctA = '';\n let colorB = '';\n let pctB = '';\n let parsed = false;\n if (!REG_MIX.test(value)) {\n // nested color-mix()\n if (value.startsWith(FN_MIX) && REG_MIX_NEST.test(value)) {\n const regColorSpace = new RegExp(`^(?:${CS_RGB}|${CS_XYZ})$`);\n const items = value.match(REG_MIX_NEST) as RegExpMatchArray;\n for (const item of items) {\n if (item) {\n let val = resolveColorMix(item, {\n format: format === VAL_SPEC ? format : VAL_COMP\n }) as ComputedColorChannels | string;\n // computed value\n if (Array.isArray(val)) {\n const [cs, v1, v2, v3, v4] = val as ComputedColorChannels;\n if (v1 === 0 && v2 === 0 && v3 === 0 && v4 === 0) {\n value = '';\n break;\n }\n if (regColorSpace.test(cs)) {\n if (v4 === 1) {\n val = `color(${cs} ${v1} ${v2} ${v3})`;\n } else {\n val = `color(${cs} ${v1} ${v2} ${v3} / ${v4})`;\n }\n } else if (v4 === 1) {\n val = `${cs}(${v1} ${v2} ${v3})`;\n } else {\n val = `${cs}(${v1} ${v2} ${v3} / ${v4})`;\n }\n } else if (!REG_MIX.test(val)) {\n value = '';\n break;\n }\n nestedItems.push(val);\n value = value.replace(item, val);\n }\n }\n if (!value) {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n // contains light-dark()\n } else if (\n value.startsWith(FN_MIX) &&\n value.endsWith(')') &&\n value.includes(FN_LIGHT_DARK)\n ) {\n const regColorSpace = new RegExp(`in\\\\s+(${CS_MIX})`);\n const colorParts = value.replace(FN_MIX, '').replace(/\\)$/, '');\n const [csPart = '', partA = '', partB = ''] = splitValue(colorParts, {\n delimiter: ','\n });\n const [colorPartA = '', pctPartA = ''] = splitValue(partA);\n const [colorPartB = '', pctPartB = ''] = splitValue(partB);\n const specifiedColorA = resolveColor(colorPartA, {\n format: VAL_SPEC\n }) as string;\n const specifiedColorB = resolveColor(colorPartB, {\n format: VAL_SPEC\n }) as string;\n if (regColorSpace.test(csPart) && specifiedColorA && specifiedColorB) {\n if (format === VAL_SPEC) {\n const [, cs] = csPart.match(regColorSpace) as MatchedRegExp;\n if (REG_CS_HUE.test(cs)) {\n [, colorSpace, hueArc] = cs.match(REG_CS_HUE) as MatchedRegExp;\n } else {\n colorSpace = cs;\n }\n colorA = specifiedColorA;\n if (pctPartA) {\n pctA = pctPartA;\n }\n colorB = specifiedColorB;\n if (pctPartB) {\n pctB = pctPartB;\n }\n value = value\n .replace(colorPartA, specifiedColorA)\n .replace(colorPartB, specifiedColorB);\n parsed = true;\n } else {\n const resolvedColorA = resolveColor(colorPartA, opt);\n const resolvedColorB = resolveColor(colorPartB, opt);\n if (isString(resolvedColorA) && isString(resolvedColorB)) {\n value = value\n .replace(colorPartA, resolvedColorA)\n .replace(colorPartB, resolvedColorB);\n }\n }\n } else {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n } else {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n }\n if (nestedItems.length && format === VAL_SPEC) {\n const regColorSpace = new RegExp(`^color-mix\\\\(\\\\s*in\\\\s+(${CS_MIX})\\\\s*,`);\n const [, cs] = value.match(regColorSpace) as MatchedRegExp;\n if (REG_CS_HUE.test(cs)) {\n [, colorSpace, hueArc] = cs.match(REG_CS_HUE) as MatchedRegExp;\n } else {\n colorSpace = cs;\n }\n if (nestedItems.length === 2) {\n let [itemA, itemB] = nestedItems as [string, string];\n itemA = itemA.replace(/(?=[()])/g, '\\\\');\n itemB = itemB.replace(/(?=[()])/g, '\\\\');\n const regA = new RegExp(`(${itemA})(?:\\\\s+(${PCT}))?`);\n const regB = new RegExp(`(${itemB})(?:\\\\s+(${PCT}))?`);\n [, colorA, pctA] = value.match(regA) as MatchedRegExp;\n [, colorB, pctB] = value.match(regB) as MatchedRegExp;\n } else {\n let [item] = nestedItems as [string];\n item = item.replace(/(?=[()])/g, '\\\\');\n const itemPart = `${item}(?:\\\\s+${PCT})?`;\n const itemPartCapt = `(${item})(?:\\\\s+(${PCT}))?`;\n const regItemPart = new RegExp(`^${itemPartCapt}$`);\n const regLastItem = new RegExp(`${itemPartCapt}\\\\s*\\\\)$`);\n const regColorPart = new RegExp(`^(${SYN_COLOR_TYPE})(?:\\\\s+(${PCT}))?$`);\n // item is at the end\n if (regLastItem.test(value)) {\n const reg = new RegExp(\n `(${SYN_MIX_PART})\\\\s*,\\\\s*(${itemPart})\\\\s*\\\\)$`\n );\n const [, colorPartA, colorPartB] = value.match(reg) as MatchedRegExp;\n [, colorA, pctA] = colorPartA.match(regColorPart) as MatchedRegExp;\n [, colorB, pctB] = colorPartB.match(regItemPart) as MatchedRegExp;\n } else {\n const reg = new RegExp(\n `(${itemPart})\\\\s*,\\\\s*(${SYN_MIX_PART})\\\\s*\\\\)$`\n );\n const [, colorPartA, colorPartB] = value.match(reg) as MatchedRegExp;\n [, colorA, pctA] = colorPartA.match(regItemPart) as MatchedRegExp;\n [, colorB, pctB] = colorPartB.match(regColorPart) as MatchedRegExp;\n }\n }\n } else if (!parsed) {\n const [, cs, colorPartA, colorPartB] = value.match(\n REG_MIX_CAPT\n ) as MatchedRegExp;\n const reg = new RegExp(`^(${SYN_COLOR_TYPE})(?:\\\\s+(${PCT}))?$`);\n [, colorA, pctA] = colorPartA.match(reg) as MatchedRegExp;\n [, colorB, pctB] = colorPartB.match(reg) as MatchedRegExp;\n if (REG_CS_HUE.test(cs)) {\n [, colorSpace, hueArc] = cs.match(REG_CS_HUE) as MatchedRegExp;\n } else {\n colorSpace = cs;\n }\n }\n // normalize percentages and set multipler\n let pA, pB, m;\n if (pctA && pctB) {\n const p1 = parseFloat(pctA) / MAX_PCT;\n const p2 = parseFloat(pctB) / MAX_PCT;\n if (p1 < 0 || p1 > 1 || p2 < 0 || p2 > 1 || (p1 === 0 && p2 === 0)) {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n const factor = p1 + p2;\n pA = p1 / factor;\n pB = p2 / factor;\n m = factor < 1 ? factor : 1;\n } else {\n if (pctA) {\n pA = parseFloat(pctA) / MAX_PCT;\n if (pA < 0 || pA > 1) {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n pB = 1 - pA;\n } else if (pctB) {\n pB = parseFloat(pctB) / MAX_PCT;\n if (pB < 0 || pB > 1) {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n pA = 1 - pB;\n } else {\n pA = HALF;\n pB = HALF;\n }\n m = 1;\n }\n if (colorSpace === 'xyz') {\n colorSpace = 'xyz-d65';\n }\n // specified value\n if (format === VAL_SPEC) {\n let valueA = '';\n let valueB = '';\n if (colorA.startsWith(FN_MIX) || colorA.startsWith(FN_LIGHT_DARK)) {\n valueA = colorA;\n } else if (colorA.startsWith(FN_COLOR)) {\n const [cs, v1, v2, v3, v4] = parseColorFunc(\n colorA,\n opt\n ) as SpecifiedColorChannels;\n if (v4 === 1) {\n valueA = `color(${cs} ${v1} ${v2} ${v3})`;\n } else {\n valueA = `color(${cs} ${v1} ${v2} ${v3} / ${v4})`;\n }\n } else {\n const val = parseColorValue(colorA, opt);\n if (Array.isArray(val)) {\n const [cs, v1, v2, v3, v4] = val;\n if (v4 === 1) {\n if (cs === 'rgb') {\n valueA = `${cs}(${v1}, ${v2}, ${v3})`;\n } else {\n valueA = `${cs}(${v1} ${v2} ${v3})`;\n }\n } else if (cs === 'rgb') {\n valueA = `${cs}a(${v1}, ${v2}, ${v3}, ${v4})`;\n } else {\n valueA = `${cs}(${v1} ${v2} ${v3} / ${v4})`;\n }\n } else {\n if (!isString(val) || !val) {\n setCache(cacheKey, '');\n return '';\n }\n valueA = val;\n }\n }\n if (colorB.startsWith(FN_MIX) || colorB.startsWith(FN_LIGHT_DARK)) {\n valueB = colorB;\n } else if (colorB.startsWith(FN_COLOR)) {\n const [cs, v1, v2, v3, v4] = parseColorFunc(\n colorB,\n opt\n ) as SpecifiedColorChannels;\n if (v4 === 1) {\n valueB = `color(${cs} ${v1} ${v2} ${v3})`;\n } else {\n valueB = `color(${cs} ${v1} ${v2} ${v3} / ${v4})`;\n }\n } else {\n const val = parseColorValue(colorB, opt);\n if (Array.isArray(val)) {\n const [cs, v1, v2, v3, v4] = val;\n if (v4 === 1) {\n if (cs === 'rgb') {\n valueB = `${cs}(${v1}, ${v2}, ${v3})`;\n } else {\n valueB = `${cs}(${v1} ${v2} ${v3})`;\n }\n } else if (cs === 'rgb') {\n valueB = `${cs}a(${v1}, ${v2}, ${v3}, ${v4})`;\n } else {\n valueB = `${cs}(${v1} ${v2} ${v3} / ${v4})`;\n }\n } else {\n if (!isString(val) || !val) {\n setCache(cacheKey, '');\n return '';\n }\n valueB = val;\n }\n }\n if (pctA && pctB) {\n valueA += ` ${parseFloat(pctA)}%`;\n valueB += ` ${parseFloat(pctB)}%`;\n } else if (pctA) {\n const pA = parseFloat(pctA);\n if (pA !== MAX_PCT * HALF) {\n valueA += ` ${pA}%`;\n }\n } else if (pctB) {\n const pA = MAX_PCT - parseFloat(pctB);\n if (pA !== MAX_PCT * HALF) {\n valueA += ` ${pA}%`;\n }\n }\n if (hueArc) {\n const res = `color-mix(in ${colorSpace} ${hueArc} hue, ${valueA}, ${valueB})`;\n setCache(cacheKey, res);\n return res;\n } else {\n const res = `color-mix(in ${colorSpace}, ${valueA}, ${valueB})`;\n setCache(cacheKey, res);\n return res;\n }\n }\n let r = 0;\n let g = 0;\n let b = 0;\n let alpha = 0;\n // in srgb, srgb-linear\n if (/^srgb(?:-linear)?$/.test(colorSpace)) {\n let rgbA, rgbB;\n if (colorSpace === 'srgb') {\n if (REG_CURRENT.test(colorA)) {\n rgbA = [NONE, NONE, NONE, NONE];\n } else {\n rgbA = convertColorToRgb(colorA, {\n colorSpace,\n format: VAL_MIX\n });\n }\n if (REG_CURRENT.test(colorB)) {\n rgbB = [NONE, NONE, NONE, NONE];\n } else {\n rgbB = convertColorToRgb(colorB, {\n colorSpace,\n format: VAL_MIX\n });\n }\n } else {\n if (REG_CURRENT.test(colorA)) {\n rgbA = [NONE, NONE, NONE, NONE];\n } else {\n rgbA = convertColorToLinearRgb(colorA, {\n colorSpace,\n format: VAL_MIX\n });\n }\n if (REG_CURRENT.test(colorB)) {\n rgbB = [NONE, NONE, NONE, NONE];\n } else {\n rgbB = convertColorToLinearRgb(colorB, {\n colorSpace,\n format: VAL_MIX\n });\n }\n }\n if (rgbA instanceof NullObject || rgbB instanceof NullObject) {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n const [rrA, ggA, bbA, aaA] = rgbA as NumStrColorChannels;\n const [rrB, ggB, bbB, aaB] = rgbB as NumStrColorChannels;\n const rNone = rrA === NONE && rrB === NONE;\n const gNone = ggA === NONE && ggB === NONE;\n const bNone = bbA === NONE && bbB === NONE;\n const alphaNone = aaA === NONE && aaB === NONE;\n const [[rA, gA, bA, alphaA], [rB, gB, bB, alphaB]] =\n normalizeColorComponents(\n [rrA, ggA, bbA, aaA],\n [rrB, ggB, bbB, aaB],\n true\n );\n const factorA = alphaA * pA;\n const factorB = alphaB * pB;\n alpha = factorA + factorB;\n if (alpha === 0) {\n r = rA * pA + rB * pB;\n g = gA * pA + gB * pB;\n b = bA * pA + bB * pB;\n } else {\n r = (rA * factorA + rB * factorB) / alpha;\n g = (gA * factorA + gB * factorB) / alpha;\n b = (bA * factorA + bB * factorB) / alpha;\n alpha = parseFloat(alpha.toFixed(3));\n }\n if (format === VAL_COMP) {\n const res: SpecifiedColorChannels = [\n colorSpace,\n rNone ? NONE : roundToPrecision(r, HEX),\n gNone ? NONE : roundToPrecision(g, HEX),\n bNone ? NONE : roundToPrecision(b, HEX),\n alphaNone ? NONE : alpha * m\n ];\n setCache(cacheKey, res);\n return res;\n }\n r *= MAX_RGB;\n g *= MAX_RGB;\n b *= MAX_RGB;\n // in xyz, xyz-d65, xyz-d50\n } else if (REG_CS_XYZ.test(colorSpace)) {\n let xyzA, xyzB;\n if (REG_CURRENT.test(colorA)) {\n xyzA = [NONE, NONE, NONE, NONE];\n } else {\n xyzA = convertColorToXyz(colorA, {\n colorSpace,\n d50: colorSpace === 'xyz-d50',\n format: VAL_MIX\n });\n }\n if (REG_CURRENT.test(colorB)) {\n xyzB = [NONE, NONE, NONE, NONE];\n } else {\n xyzB = convertColorToXyz(colorB, {\n colorSpace,\n d50: colorSpace === 'xyz-d50',\n format: VAL_MIX\n });\n }\n if (xyzA instanceof NullObject || xyzB instanceof NullObject) {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n const [xxA, yyA, zzA, aaA] = xyzA;\n const [xxB, yyB, zzB, aaB] = xyzB;\n const xNone = xxA === NONE && xxB === NONE;\n const yNone = yyA === NONE && yyB === NONE;\n const zNone = zzA === NONE && zzB === NONE;\n const alphaNone = aaA === NONE && aaB === NONE;\n const [[xA, yA, zA, alphaA], [xB, yB, zB, alphaB]] =\n normalizeColorComponents(\n [xxA, yyA, zzA, aaA],\n [xxB, yyB, zzB, aaB],\n true\n );\n const factorA = alphaA * pA;\n const factorB = alphaB * pB;\n alpha = factorA + factorB;\n let x, y, z;\n if (alpha === 0) {\n x = xA * pA + xB * pB;\n y = yA * pA + yB * pB;\n z = zA * pA + zB * pB;\n } else {\n x = (xA * factorA + xB * factorB) / alpha;\n y = (yA * factorA + yB * factorB) / alpha;\n z = (zA * factorA + zB * factorB) / alpha;\n alpha = parseFloat(alpha.toFixed(3));\n }\n if (format === VAL_COMP) {\n const res: SpecifiedColorChannels = [\n colorSpace,\n xNone ? NONE : roundToPrecision(x, HEX),\n yNone ? NONE : roundToPrecision(y, HEX),\n zNone ? NONE : roundToPrecision(z, HEX),\n alphaNone ? NONE : alpha * m\n ];\n setCache(cacheKey, res);\n return res;\n }\n if (colorSpace === 'xyz-d50') {\n [r, g, b] = transformXyzD50ToRgb([x, y, z], true);\n } else {\n [r, g, b] = transformXyzToRgb([x, y, z], true);\n }\n // in hsl, hwb\n } else if (/^h(?:sl|wb)$/.test(colorSpace)) {\n let hslA, hslB;\n if (colorSpace === 'hsl') {\n if (REG_CURRENT.test(colorA)) {\n hslA = [NONE, NONE, NONE, NONE];\n } else {\n hslA = convertColorToHsl(colorA, {\n colorSpace,\n format: VAL_MIX\n });\n }\n if (REG_CURRENT.test(colorB)) {\n hslB = [NONE, NONE, NONE, NONE];\n } else {\n hslB = convertColorToHsl(colorB, {\n colorSpace,\n format: VAL_MIX\n });\n }\n } else {\n if (REG_CURRENT.test(colorA)) {\n hslA = [NONE, NONE, NONE, NONE];\n } else {\n hslA = convertColorToHwb(colorA, {\n colorSpace,\n format: VAL_MIX\n });\n }\n if (REG_CURRENT.test(colorB)) {\n hslB = [NONE, NONE, NONE, NONE];\n } else {\n hslB = convertColorToHwb(colorB, {\n colorSpace,\n format: VAL_MIX\n });\n }\n }\n if (hslA instanceof NullObject || hslB instanceof NullObject) {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n const [hhA, ssA, llA, aaA] = hslA;\n const [hhB, ssB, llB, aaB] = hslB;\n const alphaNone = aaA === NONE && aaB === NONE;\n let [[hA, sA, lA, alphaA], [hB, sB, lB, alphaB]] = normalizeColorComponents(\n [hhA, ssA, llA, aaA],\n [hhB, ssB, llB, aaB],\n true\n );\n if (hueArc) {\n [hA, hB] = interpolateHue(hA, hB, hueArc);\n }\n const factorA = alphaA * pA;\n const factorB = alphaB * pB;\n alpha = factorA + factorB;\n const h = (hA * pA + hB * pB) % DEG;\n let s, l;\n if (alpha === 0) {\n s = sA * pA + sB * pB;\n l = lA * pA + lB * pB;\n } else {\n s = (sA * factorA + sB * factorB) / alpha;\n l = (lA * factorA + lB * factorB) / alpha;\n alpha = parseFloat(alpha.toFixed(3));\n }\n [r, g, b] = convertColorToRgb(\n `${colorSpace}(${h} ${s} ${l})`\n ) as ColorChannels;\n if (format === VAL_COMP) {\n const res: SpecifiedColorChannels = [\n 'srgb',\n roundToPrecision(r / MAX_RGB, HEX),\n roundToPrecision(g / MAX_RGB, HEX),\n roundToPrecision(b / MAX_RGB, HEX),\n alphaNone ? NONE : alpha * m\n ];\n setCache(cacheKey, res);\n return res;\n }\n // in lch, oklch\n } else if (/^(?:ok)?lch$/.test(colorSpace)) {\n let lchA, lchB;\n if (colorSpace === 'lch') {\n if (REG_CURRENT.test(colorA)) {\n lchA = [NONE, NONE, NONE, NONE];\n } else {\n lchA = convertColorToLch(colorA, {\n colorSpace,\n format: VAL_MIX\n });\n }\n if (REG_CURRENT.test(colorB)) {\n lchB = [NONE, NONE, NONE, NONE];\n } else {\n lchB = convertColorToLch(colorB, {\n colorSpace,\n format: VAL_MIX\n });\n }\n } else {\n if (REG_CURRENT.test(colorA)) {\n lchA = [NONE, NONE, NONE, NONE];\n } else {\n lchA = convertColorToOklch(colorA, {\n colorSpace,\n format: VAL_MIX\n });\n }\n if (REG_CURRENT.test(colorB)) {\n lchB = [NONE, NONE, NONE, NONE];\n } else {\n lchB = convertColorToOklch(colorB, {\n colorSpace,\n format: VAL_MIX\n });\n }\n }\n if (lchA instanceof NullObject || lchB instanceof NullObject) {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n const [llA, ccA, hhA, aaA] = lchA;\n const [llB, ccB, hhB, aaB] = lchB;\n const lNone = llA === NONE && llB === NONE;\n const cNone = ccA === NONE && ccB === NONE;\n const hNone = hhA === NONE && hhB === NONE;\n const alphaNone = aaA === NONE && aaB === NONE;\n let [[lA, cA, hA, alphaA], [lB, cB, hB, alphaB]] = normalizeColorComponents(\n [llA, ccA, hhA, aaA],\n [llB, ccB, hhB, aaB],\n true\n );\n if (hueArc) {\n [hA, hB] = interpolateHue(hA, hB, hueArc);\n }\n const factorA = alphaA * pA;\n const factorB = alphaB * pB;\n alpha = factorA + factorB;\n const h = (hA * pA + hB * pB) % DEG;\n let l, c;\n if (alpha === 0) {\n l = lA * pA + lB * pB;\n c = cA * pA + cB * pB;\n } else {\n l = (lA * factorA + lB * factorB) / alpha;\n c = (cA * factorA + cB * factorB) / alpha;\n alpha = parseFloat(alpha.toFixed(3));\n }\n if (format === VAL_COMP) {\n const res: SpecifiedColorChannels = [\n colorSpace,\n lNone ? NONE : roundToPrecision(l, HEX),\n cNone ? NONE : roundToPrecision(c, HEX),\n hNone ? NONE : roundToPrecision(h, HEX),\n alphaNone ? NONE : alpha * m\n ];\n setCache(cacheKey, res);\n return res;\n }\n [, r, g, b] = resolveColorValue(\n `${colorSpace}(${l} ${c} ${h})`\n ) as ComputedColorChannels;\n // in lab, oklab\n } else {\n let labA, labB;\n if (colorSpace === 'lab') {\n if (REG_CURRENT.test(colorA)) {\n labA = [NONE, NONE, NONE, NONE];\n } else {\n labA = convertColorToLab(colorA, {\n colorSpace,\n format: VAL_MIX\n });\n }\n if (REG_CURRENT.test(colorB)) {\n labB = [NONE, NONE, NONE, NONE];\n } else {\n labB = convertColorToLab(colorB, {\n colorSpace,\n format: VAL_MIX\n });\n }\n } else {\n if (REG_CURRENT.test(colorA)) {\n labA = [NONE, NONE, NONE, NONE];\n } else {\n labA = convertColorToOklab(colorA, {\n colorSpace,\n format: VAL_MIX\n });\n }\n if (REG_CURRENT.test(colorB)) {\n labB = [NONE, NONE, NONE, NONE];\n } else {\n labB = convertColorToOklab(colorB, {\n colorSpace,\n format: VAL_MIX\n });\n }\n }\n if (labA instanceof NullObject || labB instanceof NullObject) {\n const res = cacheInvalidColorValue(cacheKey, format, nullable);\n return res;\n }\n const [llA, aaA, bbA, alA] = labA;\n const [llB, aaB, bbB, alB] = labB;\n const lNone = llA === NONE && llB === NONE;\n const aNone = aaA === NONE && aaB === NONE;\n const bNone = bbA === NONE && bbB === NONE;\n const alphaNone = alA === NONE && alB === NONE;\n const [[lA, aA, bA, alphaA], [lB, aB, bB, alphaB]] =\n normalizeColorComponents(\n [llA, aaA, bbA, alA],\n [llB, aaB, bbB, alB],\n true\n );\n const factorA = alphaA * pA;\n const factorB = alphaB * pB;\n alpha = factorA + factorB;\n let l, aO, bO;\n if (alpha === 0) {\n l = lA * pA + lB * pB;\n aO = aA * pA + aB * pB;\n bO = bA * pA + bB * pB;\n } else {\n l = (lA * factorA + lB * factorB) / alpha;\n aO = (aA * factorA + aB * factorB) / alpha;\n bO = (bA * factorA + bB * factorB) / alpha;\n alpha = parseFloat(alpha.toFixed(3));\n }\n if (format === VAL_COMP) {\n const res: SpecifiedColorChannels = [\n colorSpace,\n lNone ? NONE : roundToPrecision(l, HEX),\n aNone ? NONE : roundToPrecision(aO, HEX),\n bNone ? NONE : roundToPrecision(bO, HEX),\n alphaNone ? NONE : alpha * m\n ];\n setCache(cacheKey, res);\n return res;\n }\n [, r, g, b] = resolveColorValue(\n `${colorSpace}(${l} ${aO} ${bO})`\n ) as ComputedColorChannels;\n }\n const res: SpecifiedColorChannels = [\n 'rgb',\n Math.round(r),\n Math.round(g),\n Math.round(b),\n parseFloat((alpha * m).toFixed(3))\n ];\n setCache(cacheKey, res);\n return res;\n};\n"],"names":["res","val","cs","pA"],"mappings":"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"}
\ No newline at end of file diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/common.d.ts b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/common.d.ts new file mode 100644 index 0000000..6039ef3 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/common.d.ts @@ -0,0 +1,21 @@ +/** + * common + */ +/** + * get type + * @param o - object to check + * @returns type of object + */ +export declare const getType: (o: unknown) => string; +/** + * is string + * @param o - object to check + * @returns result + */ +export declare const isString: (o: unknown) => o is string; +/** + * is string or number + * @param o - object to check + * @returns result + */ +export declare const isStringOrNumber: (o: unknown) => boolean; diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/common.js b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/common.js new file mode 100644 index 0000000..8de24fa --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/common.js @@ -0,0 +1,7 @@ +const isString = (o) => typeof o === "string" || o instanceof String; +const isStringOrNumber = (o) => isString(o) || typeof o === "number"; +export { + isString, + isStringOrNumber +}; +//# sourceMappingURL=common.js.map diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/common.js.map b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/common.js.map new file mode 100644 index 0000000..5b2aea0 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/common.js.map @@ -0,0 +1 @@ +{"version":3,"file":"common.js","sources":["../../../src/js/common.ts"],"sourcesContent":["/**\n * common\n */\n\n/* numeric constants */\nconst TYPE_FROM = 8;\nconst TYPE_TO = -1;\n\n/**\n * get type\n * @param o - object to check\n * @returns type of object\n */\nexport const getType = (o: unknown): string =>\n Object.prototype.toString.call(o).slice(TYPE_FROM, TYPE_TO);\n\n/**\n * is string\n * @param o - object to check\n * @returns result\n */\nexport const isString = (o: unknown): o is string =>\n typeof o === 'string' || o instanceof String;\n\n/**\n * is string or number\n * @param o - object to check\n * @returns result\n */\nexport const isStringOrNumber = (o: unknown): boolean =>\n isString(o) || typeof o === 'number';\n"],"names":[],"mappings":"AAqBO,MAAM,WAAW,CAAC,MACvB,OAAO,MAAM,YAAY,aAAa;AAOjC,MAAM,mBAAmB,CAAC,MAC/B,SAAS,CAAC,KAAK,OAAO,MAAM;"}
\ No newline at end of file diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/constant.d.ts b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/constant.d.ts new file mode 100644 index 0000000..287e617 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/constant.d.ts @@ -0,0 +1,43 @@ +/** + * constant + */ +export declare const ANGLE = "deg|g?rad|turn"; +export declare const LENGTH = "[cm]m|[dls]?v(?:[bhiw]|max|min)|in|p[ctx]|q|r?(?:[cl]h|cap|e[mx]|ic)"; +export declare const NUM = "[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?"; +export declare const NUM_POSITIVE = "\\+?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?"; +export declare const NONE = "none"; +export declare const PCT = "[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%"; +export declare const SYN_FN_CALC = "^(?:calc|clamp|max|min|exp|hypot|log|pow|sqrt|abs|sign|mod|rem|round|a?(?:cos|sin|tan)|atan2)\\(|(?<=[*\\/\\s\\(])(?:calc|clamp|max|min|exp|hypot|log|pow|sqrt|abs|sign|mod|rem|round|a?(?:cos|sin|tan)|atan2)\\("; +export declare const SYN_FN_MATH_START = "^(?:clamp|max|min|exp|hypot|log|pow|sqrt|abs|sign|mod|rem|round|a?(?:cos|sin|tan)|atan2)\\($"; +export declare const SYN_FN_VAR = "^var\\(|(?<=[*\\/\\s\\(])var\\("; +export declare const SYN_FN_VAR_START = "^(?:var|calc|clamp|max|min|exp|hypot|log|pow|sqrt|abs|sign|mod|rem|round|a?(?:cos|sin|tan)|atan2)\\("; +export declare const CS_HUE = "(?:(?:ok)?lch|hsl|hwb)(?:\\s(?:(?:de|in)creasing|longer|shorter)\\shue)?"; +export declare const CS_HUE_CAPT = "((?:ok)?lch|hsl|hwb)(?:\\s((?:de|in)creasing|longer|shorter)\\shue)?"; +export declare const CS_LAB = "(?:ok)?lab"; +export declare const CS_LCH = "(?:ok)?lch"; +export declare const CS_SRGB = "srgb(?:-linear)?"; +export declare const CS_RGB = "(?:a98|prophoto)-rgb|display-p3|rec2020|srgb(?:-linear)?"; +export declare const CS_XYZ = "xyz(?:-d(?:50|65))?"; +export declare const CS_RECT = "(?:ok)?lab|(?:a98|prophoto)-rgb|display-p3|rec2020|srgb(?:-linear)?|xyz(?:-d(?:50|65))?"; +export declare const CS_MIX = "(?:(?:ok)?lch|hsl|hwb)(?:\\s(?:(?:de|in)creasing|longer|shorter)\\shue)?|(?:ok)?lab|(?:a98|prophoto)-rgb|display-p3|rec2020|srgb(?:-linear)?|xyz(?:-d(?:50|65))?"; +export declare const FN_COLOR = "color("; +export declare const FN_LIGHT_DARK = "light-dark("; +export declare const FN_MIX = "color-mix("; +export declare const FN_REL = "(?:(?:ok)?l(?:ab|ch)|color|hsla?|hwb|rgba?)\\(\\s*from\\s+"; +export declare const FN_REL_CAPT = "((?:ok)?l(?:ab|ch)|color|hsla?|hwb|rgba?)\\(\\s*from\\s+"; +export declare const FN_VAR = "var("; +export declare const SYN_FN_COLOR = "(?:(?:a98|prophoto)-rgb|display-p3|rec2020|srgb(?:-linear)?|xyz(?:-d(?:50|65))?)(?:\\s+(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)){3}(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?"; +export declare const SYN_FN_LIGHT_DARK = "^light-dark\\("; +export declare const SYN_FN_REL = "^(?:(?:ok)?l(?:ab|ch)|color|hsla?|hwb|rgba?)\\(\\s*from\\s+|(?<=[\\s])(?:(?:ok)?l(?:ab|ch)|color|hsla?|hwb|rgba?)\\(\\s*from\\s+"; +export declare const SYN_HSL = "(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:deg|g?rad|turn)?|none)(?:\\s+(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)){2}(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?"; +export declare const SYN_HSL_LV3 = "[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:deg|g?rad|turn)?(?:\\s*,\\s*[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%){2}(?:\\s*,\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%))?"; +export declare const SYN_LCH = "(?:(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)\\s+){2}(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:deg|g?rad|turn)?|none)(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?"; +export declare const SYN_MOD = "(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)(?:\\s+(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)){2}(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?"; +export declare const SYN_RGB_LV3 = "(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:\\s*,\\s*[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?){2}|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%(?:\\s*,\\s*[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%){2})(?:\\s*,\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%))?"; +export declare const SYN_COLOR_TYPE = "[a-z]+|#[\\da-f]{3}|#[\\da-f]{4}|#[\\da-f]{6}|#[\\da-f]{8}|hsla?\\(\\s*[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:deg|g?rad|turn)?(?:\\s*,\\s*[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%){2}(?:\\s*,\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%))?\\s*\\)|rgba?\\(\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:\\s*,\\s*[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?){2}|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%(?:\\s*,\\s*[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%){2})(?:\\s*,\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%))?\\s*\\)|(?:hsla?|hwb)\\(\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:deg|g?rad|turn)?|none)(?:\\s+(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)){2}(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?\\s*\\)|(?:(?:ok)?lab|rgba?)\\(\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)(?:\\s+(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)){2}(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?\\s*\\)|(?:ok)?lch\\(\\s*(?:(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)\\s+){2}(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:deg|g?rad|turn)?|none)(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?\\s*\\)|color\\(\\s*(?:(?:a98|prophoto)-rgb|display-p3|rec2020|srgb(?:-linear)?|xyz(?:-d(?:50|65))?)(?:\\s+(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)){3}(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?\\s*\\)"; +export declare const SYN_MIX_PART = "(?:[a-z]+|#[\\da-f]{3}|#[\\da-f]{4}|#[\\da-f]{6}|#[\\da-f]{8}|hsla?\\(\\s*[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:deg|g?rad|turn)?(?:\\s*,\\s*[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%){2}(?:\\s*,\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%))?\\s*\\)|rgba?\\(\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:\\s*,\\s*[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?){2}|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%(?:\\s*,\\s*[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%){2})(?:\\s*,\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%))?\\s*\\)|(?:hsla?|hwb)\\(\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:deg|g?rad|turn)?|none)(?:\\s+(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)){2}(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?\\s*\\)|(?:(?:ok)?lab|rgba?)\\(\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)(?:\\s+(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)){2}(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?\\s*\\)|(?:ok)?lch\\(\\s*(?:(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)\\s+){2}(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:deg|g?rad|turn)?|none)(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?\\s*\\)|color\\(\\s*(?:(?:a98|prophoto)-rgb|display-p3|rec2020|srgb(?:-linear)?|xyz(?:-d(?:50|65))?)(?:\\s+(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)){3}(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?\\s*\\))(?:\\s+[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%)?"; +export declare const SYN_MIX = "color-mix\\(\\s*in\\s+(?:(?:(?:ok)?lch|hsl|hwb)(?:\\s(?:(?:de|in)creasing|longer|shorter)\\shue)?|(?:ok)?lab|(?:a98|prophoto)-rgb|display-p3|rec2020|srgb(?:-linear)?|xyz(?:-d(?:50|65))?)\\s*,\\s*(?:[a-z]+|#[\\da-f]{3}|#[\\da-f]{4}|#[\\da-f]{6}|#[\\da-f]{8}|hsla?\\(\\s*[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:deg|g?rad|turn)?(?:\\s*,\\s*[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%){2}(?:\\s*,\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%))?\\s*\\)|rgba?\\(\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:\\s*,\\s*[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?){2}|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%(?:\\s*,\\s*[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%){2})(?:\\s*,\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%))?\\s*\\)|(?:hsla?|hwb)\\(\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:deg|g?rad|turn)?|none)(?:\\s+(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)){2}(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?\\s*\\)|(?:(?:ok)?lab|rgba?)\\(\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)(?:\\s+(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)){2}(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?\\s*\\)|(?:ok)?lch\\(\\s*(?:(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)\\s+){2}(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:deg|g?rad|turn)?|none)(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?\\s*\\)|color\\(\\s*(?:(?:a98|prophoto)-rgb|display-p3|rec2020|srgb(?:-linear)?|xyz(?:-d(?:50|65))?)(?:\\s+(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)){3}(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?\\s*\\))(?:\\s+[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%)?\\s*,\\s*(?:[a-z]+|#[\\da-f]{3}|#[\\da-f]{4}|#[\\da-f]{6}|#[\\da-f]{8}|hsla?\\(\\s*[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:deg|g?rad|turn)?(?:\\s*,\\s*[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%){2}(?:\\s*,\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%))?\\s*\\)|rgba?\\(\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:\\s*,\\s*[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?){2}|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%(?:\\s*,\\s*[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%){2})(?:\\s*,\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%))?\\s*\\)|(?:hsla?|hwb)\\(\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:deg|g?rad|turn)?|none)(?:\\s+(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)){2}(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?\\s*\\)|(?:(?:ok)?lab|rgba?)\\(\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)(?:\\s+(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)){2}(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?\\s*\\)|(?:ok)?lch\\(\\s*(?:(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)\\s+){2}(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:deg|g?rad|turn)?|none)(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?\\s*\\)|color\\(\\s*(?:(?:a98|prophoto)-rgb|display-p3|rec2020|srgb(?:-linear)?|xyz(?:-d(?:50|65))?)(?:\\s+(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)){3}(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?\\s*\\))(?:\\s+[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%)?\\s*\\)"; +export declare const SYN_MIX_CAPT = "color-mix\\(\\s*in\\s+((?:(?:ok)?lch|hsl|hwb)(?:\\s(?:(?:de|in)creasing|longer|shorter)\\shue)?|(?:ok)?lab|(?:a98|prophoto)-rgb|display-p3|rec2020|srgb(?:-linear)?|xyz(?:-d(?:50|65))?)\\s*,\\s*((?:[a-z]+|#[\\da-f]{3}|#[\\da-f]{4}|#[\\da-f]{6}|#[\\da-f]{8}|hsla?\\(\\s*[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:deg|g?rad|turn)?(?:\\s*,\\s*[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%){2}(?:\\s*,\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%))?\\s*\\)|rgba?\\(\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:\\s*,\\s*[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?){2}|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%(?:\\s*,\\s*[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%){2})(?:\\s*,\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%))?\\s*\\)|(?:hsla?|hwb)\\(\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:deg|g?rad|turn)?|none)(?:\\s+(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)){2}(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?\\s*\\)|(?:(?:ok)?lab|rgba?)\\(\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)(?:\\s+(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)){2}(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?\\s*\\)|(?:ok)?lch\\(\\s*(?:(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)\\s+){2}(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:deg|g?rad|turn)?|none)(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?\\s*\\)|color\\(\\s*(?:(?:a98|prophoto)-rgb|display-p3|rec2020|srgb(?:-linear)?|xyz(?:-d(?:50|65))?)(?:\\s+(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)){3}(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?\\s*\\))(?:\\s+[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%)?)\\s*,\\s*((?:[a-z]+|#[\\da-f]{3}|#[\\da-f]{4}|#[\\da-f]{6}|#[\\da-f]{8}|hsla?\\(\\s*[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:deg|g?rad|turn)?(?:\\s*,\\s*[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%){2}(?:\\s*,\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%))?\\s*\\)|rgba?\\(\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:\\s*,\\s*[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?){2}|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%(?:\\s*,\\s*[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%){2})(?:\\s*,\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%))?\\s*\\)|(?:hsla?|hwb)\\(\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:deg|g?rad|turn)?|none)(?:\\s+(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)){2}(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?\\s*\\)|(?:(?:ok)?lab|rgba?)\\(\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)(?:\\s+(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)){2}(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?\\s*\\)|(?:ok)?lch\\(\\s*(?:(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)\\s+){2}(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?(?:deg|g?rad|turn)?|none)(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?\\s*\\)|color\\(\\s*(?:(?:a98|prophoto)-rgb|display-p3|rec2020|srgb(?:-linear)?|xyz(?:-d(?:50|65))?)(?:\\s+(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none)){3}(?:\\s*\\/\\s*(?:[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?|[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%|none))?\\s*\\))(?:\\s+[+-]?(?:(?:0|[1-9]\\d*)(?:\\.\\d*)?|\\.\\d+)(?:e-?(?:0|[1-9]\\d*))?%)?)\\s*\\)"; +export declare const VAL_COMP = "computedValue"; +export declare const VAL_MIX = "mixValue"; +export declare const VAL_SPEC = "specifiedValue"; diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/constant.js b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/constant.js new file mode 100644 index 0000000..69bacbb --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/constant.js @@ -0,0 +1,101 @@ +const _DIGIT = "(?:0|[1-9]\\d*)"; +const _COMPARE = "clamp|max|min"; +const _EXPO = "exp|hypot|log|pow|sqrt"; +const _SIGN = "abs|sign"; +const _STEP = "mod|rem|round"; +const _TRIG = "a?(?:cos|sin|tan)|atan2"; +const _MATH = `${_COMPARE}|${_EXPO}|${_SIGN}|${_STEP}|${_TRIG}`; +const _CALC = `calc|${_MATH}`; +const _VAR = `var|${_CALC}`; +const ANGLE = "deg|g?rad|turn"; +const LENGTH = "[cm]m|[dls]?v(?:[bhiw]|max|min)|in|p[ctx]|q|r?(?:[cl]h|cap|e[mx]|ic)"; +const NUM = `[+-]?(?:${_DIGIT}(?:\\.\\d*)?|\\.\\d+)(?:e-?${_DIGIT})?`; +const NUM_POSITIVE = `\\+?(?:${_DIGIT}(?:\\.\\d*)?|\\.\\d+)(?:e-?${_DIGIT})?`; +const NONE = "none"; +const PCT = `${NUM}%`; +const SYN_FN_CALC = `^(?:${_CALC})\\(|(?<=[*\\/\\s\\(])(?:${_CALC})\\(`; +const SYN_FN_MATH_START = `^(?:${_MATH})\\($`; +const SYN_FN_VAR = "^var\\(|(?<=[*\\/\\s\\(])var\\("; +const SYN_FN_VAR_START = `^(?:${_VAR})\\(`; +const _ALPHA = `(?:\\s*\\/\\s*(?:${NUM}|${PCT}|${NONE}))?`; +const _ALPHA_LV3 = `(?:\\s*,\\s*(?:${NUM}|${PCT}))?`; +const _COLOR_FUNC = "(?:ok)?l(?:ab|ch)|color|hsla?|hwb|rgba?"; +const _COLOR_KEY = "[a-z]+|#[\\da-f]{3}|#[\\da-f]{4}|#[\\da-f]{6}|#[\\da-f]{8}"; +const _CS_HUE = "(?:ok)?lch|hsl|hwb"; +const _CS_HUE_ARC = "(?:de|in)creasing|longer|shorter"; +const _NUM_ANGLE = `${NUM}(?:${ANGLE})?`; +const _NUM_ANGLE_NONE = `(?:${NUM}(?:${ANGLE})?|${NONE})`; +const _NUM_PCT_NONE = `(?:${NUM}|${PCT}|${NONE})`; +const CS_HUE = `(?:${_CS_HUE})(?:\\s(?:${_CS_HUE_ARC})\\shue)?`; +const CS_HUE_CAPT = `(${_CS_HUE})(?:\\s(${_CS_HUE_ARC})\\shue)?`; +const CS_LAB = "(?:ok)?lab"; +const CS_LCH = "(?:ok)?lch"; +const CS_SRGB = "srgb(?:-linear)?"; +const CS_RGB = `(?:a98|prophoto)-rgb|display-p3|rec2020|${CS_SRGB}`; +const CS_XYZ = "xyz(?:-d(?:50|65))?"; +const CS_RECT = `${CS_LAB}|${CS_RGB}|${CS_XYZ}`; +const CS_MIX = `${CS_HUE}|${CS_RECT}`; +const FN_COLOR = "color("; +const FN_LIGHT_DARK = "light-dark("; +const FN_MIX = "color-mix("; +const FN_REL = `(?:${_COLOR_FUNC})\\(\\s*from\\s+`; +const FN_REL_CAPT = `(${_COLOR_FUNC})\\(\\s*from\\s+`; +const FN_VAR = "var("; +const SYN_FN_COLOR = `(?:${CS_RGB}|${CS_XYZ})(?:\\s+${_NUM_PCT_NONE}){3}${_ALPHA}`; +const SYN_FN_LIGHT_DARK = "^light-dark\\("; +const SYN_FN_REL = `^${FN_REL}|(?<=[\\s])${FN_REL}`; +const SYN_HSL = `${_NUM_ANGLE_NONE}(?:\\s+${_NUM_PCT_NONE}){2}${_ALPHA}`; +const SYN_HSL_LV3 = `${_NUM_ANGLE}(?:\\s*,\\s*${PCT}){2}${_ALPHA_LV3}`; +const SYN_LCH = `(?:${_NUM_PCT_NONE}\\s+){2}${_NUM_ANGLE_NONE}${_ALPHA}`; +const SYN_MOD = `${_NUM_PCT_NONE}(?:\\s+${_NUM_PCT_NONE}){2}${_ALPHA}`; +const SYN_RGB_LV3 = `(?:${NUM}(?:\\s*,\\s*${NUM}){2}|${PCT}(?:\\s*,\\s*${PCT}){2})${_ALPHA_LV3}`; +const SYN_COLOR_TYPE = `${_COLOR_KEY}|hsla?\\(\\s*${SYN_HSL_LV3}\\s*\\)|rgba?\\(\\s*${SYN_RGB_LV3}\\s*\\)|(?:hsla?|hwb)\\(\\s*${SYN_HSL}\\s*\\)|(?:(?:ok)?lab|rgba?)\\(\\s*${SYN_MOD}\\s*\\)|(?:ok)?lch\\(\\s*${SYN_LCH}\\s*\\)|color\\(\\s*${SYN_FN_COLOR}\\s*\\)`; +const SYN_MIX_PART = `(?:${SYN_COLOR_TYPE})(?:\\s+${PCT})?`; +const SYN_MIX = `color-mix\\(\\s*in\\s+(?:${CS_MIX})\\s*,\\s*${SYN_MIX_PART}\\s*,\\s*${SYN_MIX_PART}\\s*\\)`; +const SYN_MIX_CAPT = `color-mix\\(\\s*in\\s+(${CS_MIX})\\s*,\\s*(${SYN_MIX_PART})\\s*,\\s*(${SYN_MIX_PART})\\s*\\)`; +const VAL_COMP = "computedValue"; +const VAL_MIX = "mixValue"; +const VAL_SPEC = "specifiedValue"; +export { + ANGLE, + CS_HUE, + CS_HUE_CAPT, + CS_LAB, + CS_LCH, + CS_MIX, + CS_RECT, + CS_RGB, + CS_SRGB, + CS_XYZ, + FN_COLOR, + FN_LIGHT_DARK, + FN_MIX, + FN_REL, + FN_REL_CAPT, + FN_VAR, + LENGTH, + NONE, + NUM, + NUM_POSITIVE, + PCT, + SYN_COLOR_TYPE, + SYN_FN_CALC, + SYN_FN_COLOR, + SYN_FN_LIGHT_DARK, + SYN_FN_MATH_START, + SYN_FN_REL, + SYN_FN_VAR, + SYN_FN_VAR_START, + SYN_HSL, + SYN_HSL_LV3, + SYN_LCH, + SYN_MIX, + SYN_MIX_CAPT, + SYN_MIX_PART, + SYN_MOD, + SYN_RGB_LV3, + VAL_COMP, + VAL_MIX, + VAL_SPEC +}; +//# sourceMappingURL=constant.js.map diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/constant.js.map b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/constant.js.map new file mode 100644 index 0000000..d69d2fe --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/constant.js.map @@ -0,0 +1 @@ +{"version":3,"file":"constant.js","sources":["../../../src/js/constant.ts"],"sourcesContent":["/**\n * constant\n */\n\n/* values and units */\nconst _DIGIT = '(?:0|[1-9]\\\\d*)';\nconst _COMPARE = 'clamp|max|min';\nconst _EXPO = 'exp|hypot|log|pow|sqrt';\nconst _SIGN = 'abs|sign';\nconst _STEP = 'mod|rem|round';\nconst _TRIG = 'a?(?:cos|sin|tan)|atan2';\nconst _MATH = `${_COMPARE}|${_EXPO}|${_SIGN}|${_STEP}|${_TRIG}`;\nconst _CALC = `calc|${_MATH}`;\nconst _VAR = `var|${_CALC}`;\nexport const ANGLE = 'deg|g?rad|turn';\nexport const LENGTH =\n '[cm]m|[dls]?v(?:[bhiw]|max|min)|in|p[ctx]|q|r?(?:[cl]h|cap|e[mx]|ic)';\nexport const NUM = `[+-]?(?:${_DIGIT}(?:\\\\.\\\\d*)?|\\\\.\\\\d+)(?:e-?${_DIGIT})?`;\nexport const NUM_POSITIVE = `\\\\+?(?:${_DIGIT}(?:\\\\.\\\\d*)?|\\\\.\\\\d+)(?:e-?${_DIGIT})?`;\nexport const NONE = 'none';\nexport const PCT = `${NUM}%`;\nexport const SYN_FN_CALC = `^(?:${_CALC})\\\\(|(?<=[*\\\\/\\\\s\\\\(])(?:${_CALC})\\\\(`;\nexport const SYN_FN_MATH_START = `^(?:${_MATH})\\\\($`;\nexport const SYN_FN_VAR = '^var\\\\(|(?<=[*\\\\/\\\\s\\\\(])var\\\\(';\nexport const SYN_FN_VAR_START = `^(?:${_VAR})\\\\(`;\n\n/* colors */\nconst _ALPHA = `(?:\\\\s*\\\\/\\\\s*(?:${NUM}|${PCT}|${NONE}))?`;\nconst _ALPHA_LV3 = `(?:\\\\s*,\\\\s*(?:${NUM}|${PCT}))?`;\nconst _COLOR_FUNC = '(?:ok)?l(?:ab|ch)|color|hsla?|hwb|rgba?';\nconst _COLOR_KEY = '[a-z]+|#[\\\\da-f]{3}|#[\\\\da-f]{4}|#[\\\\da-f]{6}|#[\\\\da-f]{8}';\nconst _CS_HUE = '(?:ok)?lch|hsl|hwb';\nconst _CS_HUE_ARC = '(?:de|in)creasing|longer|shorter';\nconst _NUM_ANGLE = `${NUM}(?:${ANGLE})?`;\nconst _NUM_ANGLE_NONE = `(?:${NUM}(?:${ANGLE})?|${NONE})`;\nconst _NUM_PCT_NONE = `(?:${NUM}|${PCT}|${NONE})`;\nexport const CS_HUE = `(?:${_CS_HUE})(?:\\\\s(?:${_CS_HUE_ARC})\\\\shue)?`;\nexport const CS_HUE_CAPT = `(${_CS_HUE})(?:\\\\s(${_CS_HUE_ARC})\\\\shue)?`;\nexport const CS_LAB = '(?:ok)?lab';\nexport const CS_LCH = '(?:ok)?lch';\nexport const CS_SRGB = 'srgb(?:-linear)?';\nexport const CS_RGB = `(?:a98|prophoto)-rgb|display-p3|rec2020|${CS_SRGB}`;\nexport const CS_XYZ = 'xyz(?:-d(?:50|65))?';\nexport const CS_RECT = `${CS_LAB}|${CS_RGB}|${CS_XYZ}`;\nexport const CS_MIX = `${CS_HUE}|${CS_RECT}`;\nexport const FN_COLOR = 'color(';\nexport const FN_LIGHT_DARK = 'light-dark(';\nexport const FN_MIX = 'color-mix(';\nexport const FN_REL = `(?:${_COLOR_FUNC})\\\\(\\\\s*from\\\\s+`;\nexport const FN_REL_CAPT = `(${_COLOR_FUNC})\\\\(\\\\s*from\\\\s+`;\nexport const FN_VAR = 'var(';\nexport const SYN_FN_COLOR = `(?:${CS_RGB}|${CS_XYZ})(?:\\\\s+${_NUM_PCT_NONE}){3}${_ALPHA}`;\nexport const SYN_FN_LIGHT_DARK = '^light-dark\\\\(';\nexport const SYN_FN_REL = `^${FN_REL}|(?<=[\\\\s])${FN_REL}`;\nexport const SYN_HSL = `${_NUM_ANGLE_NONE}(?:\\\\s+${_NUM_PCT_NONE}){2}${_ALPHA}`;\nexport const SYN_HSL_LV3 = `${_NUM_ANGLE}(?:\\\\s*,\\\\s*${PCT}){2}${_ALPHA_LV3}`;\nexport const SYN_LCH = `(?:${_NUM_PCT_NONE}\\\\s+){2}${_NUM_ANGLE_NONE}${_ALPHA}`;\nexport const SYN_MOD = `${_NUM_PCT_NONE}(?:\\\\s+${_NUM_PCT_NONE}){2}${_ALPHA}`;\nexport const SYN_RGB_LV3 = `(?:${NUM}(?:\\\\s*,\\\\s*${NUM}){2}|${PCT}(?:\\\\s*,\\\\s*${PCT}){2})${_ALPHA_LV3}`;\nexport const SYN_COLOR_TYPE = `${_COLOR_KEY}|hsla?\\\\(\\\\s*${SYN_HSL_LV3}\\\\s*\\\\)|rgba?\\\\(\\\\s*${SYN_RGB_LV3}\\\\s*\\\\)|(?:hsla?|hwb)\\\\(\\\\s*${SYN_HSL}\\\\s*\\\\)|(?:(?:ok)?lab|rgba?)\\\\(\\\\s*${SYN_MOD}\\\\s*\\\\)|(?:ok)?lch\\\\(\\\\s*${SYN_LCH}\\\\s*\\\\)|color\\\\(\\\\s*${SYN_FN_COLOR}\\\\s*\\\\)`;\nexport const SYN_MIX_PART = `(?:${SYN_COLOR_TYPE})(?:\\\\s+${PCT})?`;\nexport const SYN_MIX = `color-mix\\\\(\\\\s*in\\\\s+(?:${CS_MIX})\\\\s*,\\\\s*${SYN_MIX_PART}\\\\s*,\\\\s*${SYN_MIX_PART}\\\\s*\\\\)`;\nexport const SYN_MIX_CAPT = `color-mix\\\\(\\\\s*in\\\\s+(${CS_MIX})\\\\s*,\\\\s*(${SYN_MIX_PART})\\\\s*,\\\\s*(${SYN_MIX_PART})\\\\s*\\\\)`;\n\n/* formats */\nexport const VAL_COMP = 'computedValue';\nexport const VAL_MIX = 'mixValue';\nexport const VAL_SPEC = 'specifiedValue';\n"],"names":[],"mappings":"AAKA,MAAM,SAAS;AACf,MAAM,WAAW;AACjB,MAAM,QAAQ;AACd,MAAM,QAAQ;AACd,MAAM,QAAQ;AACd,MAAM,QAAQ;AACd,MAAM,QAAQ,GAAG,QAAQ,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK;AAC7D,MAAM,QAAQ,QAAQ,KAAK;AAC3B,MAAM,OAAO,OAAO,KAAK;AAClB,MAAM,QAAQ;AACd,MAAM,SACX;AACK,MAAM,MAAM,WAAW,MAAM,8BAA8B,MAAM;AACjE,MAAM,eAAe,UAAU,MAAM,8BAA8B,MAAM;AACzE,MAAM,OAAO;AACb,MAAM,MAAM,GAAG,GAAG;AAClB,MAAM,cAAc,OAAO,KAAK,4BAA4B,KAAK;AACjE,MAAM,oBAAoB,OAAO,KAAK;AACtC,MAAM,aAAa;AACnB,MAAM,mBAAmB,OAAO,IAAI;AAG3C,MAAM,SAAS,oBAAoB,GAAG,IAAI,GAAG,IAAI,IAAI;AACrD,MAAM,aAAa,kBAAkB,GAAG,IAAI,GAAG;AAC/C,MAAM,cAAc;AACpB,MAAM,aAAa;AACnB,MAAM,UAAU;AAChB,MAAM,cAAc;AACpB,MAAM,aAAa,GAAG,GAAG,MAAM,KAAK;AACpC,MAAM,kBAAkB,MAAM,GAAG,MAAM,KAAK,MAAM,IAAI;AACtD,MAAM,gBAAgB,MAAM,GAAG,IAAI,GAAG,IAAI,IAAI;AACvC,MAAM,SAAS,MAAM,OAAO,aAAa,WAAW;AACpD,MAAM,cAAc,IAAI,OAAO,WAAW,WAAW;AACrD,MAAM,SAAS;AACf,MAAM,SAAS;AACf,MAAM,UAAU;AAChB,MAAM,SAAS,2CAA2C,OAAO;AACjE,MAAM,SAAS;AACf,MAAM,UAAU,GAAG,MAAM,IAAI,MAAM,IAAI,MAAM;AAC7C,MAAM,SAAS,GAAG,MAAM,IAAI,OAAO;AACnC,MAAM,WAAW;AACjB,MAAM,gBAAgB;AACtB,MAAM,SAAS;AACf,MAAM,SAAS,MAAM,WAAW;AAChC,MAAM,cAAc,IAAI,WAAW;AACnC,MAAM,SAAS;AACf,MAAM,eAAe,MAAM,MAAM,IAAI,MAAM,WAAW,aAAa,OAAO,MAAM;AAChF,MAAM,oBAAoB;AAC1B,MAAM,aAAa,IAAI,MAAM,cAAc,MAAM;AACjD,MAAM,UAAU,GAAG,eAAe,UAAU,aAAa,OAAO,MAAM;AACtE,MAAM,cAAc,GAAG,UAAU,eAAe,GAAG,OAAO,UAAU;AACpE,MAAM,UAAU,MAAM,aAAa,WAAW,eAAe,GAAG,MAAM;AACtE,MAAM,UAAU,GAAG,aAAa,UAAU,aAAa,OAAO,MAAM;AACpE,MAAM,cAAc,MAAM,GAAG,eAAe,GAAG,QAAQ,GAAG,eAAe,GAAG,QAAQ,UAAU;AAC9F,MAAM,iBAAiB,GAAG,UAAU,gBAAgB,WAAW,uBAAuB,WAAW,+BAA+B,OAAO,sCAAsC,OAAO,4BAA4B,OAAO,uBAAuB,YAAY;AAC1P,MAAM,eAAe,MAAM,cAAc,WAAW,GAAG;AACvD,MAAM,UAAU,4BAA4B,MAAM,aAAa,YAAY,YAAY,YAAY;AACnG,MAAM,eAAe,0BAA0B,MAAM,cAAc,YAAY,cAAc,YAAY;AAGzG,MAAM,WAAW;AACjB,MAAM,UAAU;AAChB,MAAM,WAAW;"}
\ No newline at end of file diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/convert.d.ts b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/convert.d.ts new file mode 100644 index 0000000..fe97f7f --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/convert.d.ts @@ -0,0 +1,99 @@ +import { NullObject } from './cache.js'; +import { ColorChannels, Options } from './typedef.js'; +/** + * pre process + * @param value - CSS color value + * @param [opt] - options + * @returns value + */ +export declare const preProcess: (value: string, opt?: Options) => string | NullObject; +/** + * convert number to hex string + * @param value - numeric value + * @returns hex string: 00..ff + */ +export declare const numberToHex: (value: number) => string; +/** + * convert color to hex + * @param value - CSS color value + * @param [opt] - options + * @param [opt.alpha] - enable alpha channel + * @returns #rrggbb | #rrggbbaa | null + */ +export declare const colorToHex: (value: string, opt?: Options) => string | null; +/** + * convert color to hsl + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels - [h, s, l, alpha] + */ +export declare const colorToHsl: (value: string, opt?: Options) => ColorChannels; +/** + * convert color to hwb + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels - [h, w, b, alpha] + */ +export declare const colorToHwb: (value: string, opt?: Options) => ColorChannels; +/** + * convert color to lab + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels - [l, a, b, alpha] + */ +export declare const colorToLab: (value: string, opt?: Options) => ColorChannels; +/** + * convert color to lch + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels - [l, c, h, alpha] + */ +export declare const colorToLch: (value: string, opt?: Options) => ColorChannels; +/** + * convert color to oklab + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels - [l, a, b, alpha] + */ +export declare const colorToOklab: (value: string, opt?: Options) => ColorChannels; +/** + * convert color to oklch + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels - [l, c, h, alpha] + */ +export declare const colorToOklch: (value: string, opt?: Options) => ColorChannels; +/** + * convert color to rgb + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels - [r, g, b, alpha] + */ +export declare const colorToRgb: (value: string, opt?: Options) => ColorChannels; +/** + * convert color to xyz + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels - [x, y, z, alpha] + */ +export declare const colorToXyz: (value: string, opt?: Options) => ColorChannels; +/** + * convert color to xyz-d50 + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels - [x, y, z, alpha] + */ +export declare const colorToXyzD50: (value: string, opt?: Options) => ColorChannels; +export declare const convert: { + colorToHex: (value: string, opt?: Options) => string | null; + colorToHsl: (value: string, opt?: Options) => ColorChannels; + colorToHwb: (value: string, opt?: Options) => ColorChannels; + colorToLab: (value: string, opt?: Options) => ColorChannels; + colorToLch: (value: string, opt?: Options) => ColorChannels; + colorToOklab: (value: string, opt?: Options) => ColorChannels; + colorToOklch: (value: string, opt?: Options) => ColorChannels; + colorToRgb: (value: string, opt?: Options) => ColorChannels; + colorToXyz: (value: string, opt?: Options) => ColorChannels; + colorToXyzD50: (value: string, opt?: Options) => ColorChannels; + numberToHex: (value: number) => string; +}; diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/convert.js b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/convert.js new file mode 100644 index 0000000..d66845f --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/convert.js @@ -0,0 +1,361 @@ +import { NullObject, createCacheKey, getCache, CacheItem, setCache } from "./cache.js"; +import { numberToHexString, parseColorFunc, parseColorValue, convertColorToRgb, convertColorToOklch, convertColorToOklab, convertColorToLch, convertColorToLab, convertColorToHwb, convertColorToHsl } from "./color.js"; +import { isString } from "./common.js"; +import { cssCalc } from "./css-calc.js"; +import { resolveVar } from "./css-var.js"; +import { resolveRelativeColor } from "./relative-color.js"; +import { resolveColor } from "./resolve.js"; +import { VAL_COMP, SYN_FN_VAR, SYN_FN_REL, SYN_FN_CALC } from "./constant.js"; +const NAMESPACE = "convert"; +const REG_FN_CALC = new RegExp(SYN_FN_CALC); +const REG_FN_REL = new RegExp(SYN_FN_REL); +const REG_FN_VAR = new RegExp(SYN_FN_VAR); +const preProcess = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + if (!value) { + return new NullObject(); + } + } else { + return new NullObject(); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE, + name: "preProcess", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return cachedResult; + } + return cachedResult.item; + } + if (REG_FN_VAR.test(value)) { + const resolvedValue = resolveVar(value, opt); + if (isString(resolvedValue)) { + value = resolvedValue; + } else { + setCache(cacheKey, null); + return new NullObject(); + } + } + if (REG_FN_REL.test(value)) { + const resolvedValue = resolveRelativeColor(value, opt); + if (isString(resolvedValue)) { + value = resolvedValue; + } else { + setCache(cacheKey, null); + return new NullObject(); + } + } else if (REG_FN_CALC.test(value)) { + value = cssCalc(value, opt); + } + if (value.startsWith("color-mix")) { + const clonedOpt = structuredClone(opt); + clonedOpt.format = VAL_COMP; + clonedOpt.nullable = true; + const resolvedValue = resolveColor(value, clonedOpt); + setCache(cacheKey, resolvedValue); + return resolvedValue; + } + setCache(cacheKey, value); + return value; +}; +const numberToHex = (value) => { + const hex = numberToHexString(value); + return hex; +}; +const colorToHex = (value, opt = {}) => { + if (isString(value)) { + const resolvedValue = preProcess(value, opt); + if (resolvedValue instanceof NullObject) { + return null; + } + value = resolvedValue.toLowerCase(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { alpha = false } = opt; + const cacheKey = createCacheKey( + { + namespace: NAMESPACE, + name: "colorToHex", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return null; + } + return cachedResult.item; + } + let hex; + opt.nullable = true; + if (alpha) { + opt.format = "hexAlpha"; + hex = resolveColor(value, opt); + } else { + opt.format = "hex"; + hex = resolveColor(value, opt); + } + if (isString(hex)) { + setCache(cacheKey, hex); + return hex; + } + setCache(cacheKey, null); + return null; +}; +const colorToHsl = (value, opt = {}) => { + if (isString(value)) { + const resolvedValue = preProcess(value, opt); + if (resolvedValue instanceof NullObject) { + return [0, 0, 0, 0]; + } + value = resolvedValue.toLowerCase(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE, + name: "colorToHsl", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item; + } + opt.format = "hsl"; + const hsl = convertColorToHsl(value, opt); + setCache(cacheKey, hsl); + return hsl; +}; +const colorToHwb = (value, opt = {}) => { + if (isString(value)) { + const resolvedValue = preProcess(value, opt); + if (resolvedValue instanceof NullObject) { + return [0, 0, 0, 0]; + } + value = resolvedValue.toLowerCase(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE, + name: "colorToHwb", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item; + } + opt.format = "hwb"; + const hwb = convertColorToHwb(value, opt); + setCache(cacheKey, hwb); + return hwb; +}; +const colorToLab = (value, opt = {}) => { + if (isString(value)) { + const resolvedValue = preProcess(value, opt); + if (resolvedValue instanceof NullObject) { + return [0, 0, 0, 0]; + } + value = resolvedValue.toLowerCase(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE, + name: "colorToLab", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item; + } + const lab = convertColorToLab(value, opt); + setCache(cacheKey, lab); + return lab; +}; +const colorToLch = (value, opt = {}) => { + if (isString(value)) { + const resolvedValue = preProcess(value, opt); + if (resolvedValue instanceof NullObject) { + return [0, 0, 0, 0]; + } + value = resolvedValue.toLowerCase(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE, + name: "colorToLch", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item; + } + const lch = convertColorToLch(value, opt); + setCache(cacheKey, lch); + return lch; +}; +const colorToOklab = (value, opt = {}) => { + if (isString(value)) { + const resolvedValue = preProcess(value, opt); + if (resolvedValue instanceof NullObject) { + return [0, 0, 0, 0]; + } + value = resolvedValue.toLowerCase(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE, + name: "colorToOklab", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item; + } + const lab = convertColorToOklab(value, opt); + setCache(cacheKey, lab); + return lab; +}; +const colorToOklch = (value, opt = {}) => { + if (isString(value)) { + const resolvedValue = preProcess(value, opt); + if (resolvedValue instanceof NullObject) { + return [0, 0, 0, 0]; + } + value = resolvedValue.toLowerCase(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE, + name: "colorToOklch", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item; + } + const lch = convertColorToOklch(value, opt); + setCache(cacheKey, lch); + return lch; +}; +const colorToRgb = (value, opt = {}) => { + if (isString(value)) { + const resolvedValue = preProcess(value, opt); + if (resolvedValue instanceof NullObject) { + return [0, 0, 0, 0]; + } + value = resolvedValue.toLowerCase(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE, + name: "colorToRgb", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item; + } + const rgb = convertColorToRgb(value, opt); + setCache(cacheKey, rgb); + return rgb; +}; +const colorToXyz = (value, opt = {}) => { + if (isString(value)) { + const resolvedValue = preProcess(value, opt); + if (resolvedValue instanceof NullObject) { + return [0, 0, 0, 0]; + } + value = resolvedValue.toLowerCase(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE, + name: "colorToXyz", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item; + } + let xyz; + if (value.startsWith("color(")) { + [, ...xyz] = parseColorFunc(value, opt); + } else { + [, ...xyz] = parseColorValue(value, opt); + } + setCache(cacheKey, xyz); + return xyz; +}; +const colorToXyzD50 = (value, opt = {}) => { + opt.d50 = true; + return colorToXyz(value, opt); +}; +const convert = { + colorToHex, + colorToHsl, + colorToHwb, + colorToLab, + colorToLch, + colorToOklab, + colorToOklch, + colorToRgb, + colorToXyz, + colorToXyzD50, + numberToHex +}; +export { + colorToHex, + colorToHsl, + colorToHwb, + colorToLab, + colorToLch, + colorToOklab, + colorToOklch, + colorToRgb, + colorToXyz, + colorToXyzD50, + convert, + numberToHex, + preProcess +}; +//# sourceMappingURL=convert.js.map diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/convert.js.map b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/convert.js.map new file mode 100644 index 0000000..039efb6 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/convert.js.map @@ -0,0 +1 @@ +{"version":3,"file":"convert.js","sources":["../../../src/js/convert.ts"],"sourcesContent":["/**\n * convert\n */\n\nimport {\n CacheItem,\n NullObject,\n createCacheKey,\n getCache,\n setCache\n} from './cache';\nimport {\n convertColorToHsl,\n convertColorToHwb,\n convertColorToLab,\n convertColorToLch,\n convertColorToOklab,\n convertColorToOklch,\n convertColorToRgb,\n numberToHexString,\n parseColorFunc,\n parseColorValue\n} from './color';\nimport { isString } from './common';\nimport { cssCalc } from './css-calc';\nimport { resolveVar } from './css-var';\nimport { resolveRelativeColor } from './relative-color';\nimport { resolveColor } from './resolve';\nimport { ColorChannels, ComputedColorChannels, Options } from './typedef';\n\n/* constants */\nimport { SYN_FN_CALC, SYN_FN_REL, SYN_FN_VAR, VAL_COMP } from './constant';\nconst NAMESPACE = 'convert';\n\n/* regexp */\nconst REG_FN_CALC = new RegExp(SYN_FN_CALC);\nconst REG_FN_REL = new RegExp(SYN_FN_REL);\nconst REG_FN_VAR = new RegExp(SYN_FN_VAR);\n\n/**\n * pre process\n * @param value - CSS color value\n * @param [opt] - options\n * @returns value\n */\nexport const preProcess = (\n value: string,\n opt: Options = {}\n): string | NullObject => {\n if (isString(value)) {\n value = value.trim();\n if (!value) {\n return new NullObject();\n }\n } else {\n return new NullObject();\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'preProcess',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return cachedResult as NullObject;\n }\n return cachedResult.item as string;\n }\n if (REG_FN_VAR.test(value)) {\n const resolvedValue = resolveVar(value, opt);\n if (isString(resolvedValue)) {\n value = resolvedValue;\n } else {\n setCache(cacheKey, null);\n return new NullObject();\n }\n }\n if (REG_FN_REL.test(value)) {\n const resolvedValue = resolveRelativeColor(value, opt);\n if (isString(resolvedValue)) {\n value = resolvedValue;\n } else {\n setCache(cacheKey, null);\n return new NullObject();\n }\n } else if (REG_FN_CALC.test(value)) {\n value = cssCalc(value, opt);\n }\n if (value.startsWith('color-mix')) {\n const clonedOpt = structuredClone(opt);\n clonedOpt.format = VAL_COMP;\n clonedOpt.nullable = true;\n const resolvedValue = resolveColor(value, clonedOpt);\n setCache(cacheKey, resolvedValue);\n return resolvedValue;\n }\n setCache(cacheKey, value);\n return value;\n};\n\n/**\n * convert number to hex string\n * @param value - numeric value\n * @returns hex string: 00..ff\n */\nexport const numberToHex = (value: number): string => {\n const hex = numberToHexString(value);\n return hex;\n};\n\n/**\n * convert color to hex\n * @param value - CSS color value\n * @param [opt] - options\n * @param [opt.alpha] - enable alpha channel\n * @returns #rrggbb | #rrggbbaa | null\n */\nexport const colorToHex = (value: string, opt: Options = {}): string | null => {\n if (isString(value)) {\n const resolvedValue = preProcess(value, opt);\n if (resolvedValue instanceof NullObject) {\n return null;\n }\n value = resolvedValue.toLowerCase();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { alpha = false } = opt;\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'colorToHex',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return null;\n }\n return cachedResult.item as string;\n }\n let hex;\n opt.nullable = true;\n if (alpha) {\n opt.format = 'hexAlpha';\n hex = resolveColor(value, opt);\n } else {\n opt.format = 'hex';\n hex = resolveColor(value, opt);\n }\n if (isString(hex)) {\n setCache(cacheKey, hex);\n return hex;\n }\n setCache(cacheKey, null);\n return null;\n};\n\n/**\n * convert color to hsl\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels - [h, s, l, alpha]\n */\nexport const colorToHsl = (value: string, opt: Options = {}): ColorChannels => {\n if (isString(value)) {\n const resolvedValue = preProcess(value, opt);\n if (resolvedValue instanceof NullObject) {\n return [0, 0, 0, 0];\n }\n value = resolvedValue.toLowerCase();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'colorToHsl',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as ColorChannels;\n }\n opt.format = 'hsl';\n const hsl = convertColorToHsl(value, opt) as ColorChannels;\n setCache(cacheKey, hsl);\n return hsl;\n};\n\n/**\n * convert color to hwb\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels - [h, w, b, alpha]\n */\nexport const colorToHwb = (value: string, opt: Options = {}): ColorChannels => {\n if (isString(value)) {\n const resolvedValue = preProcess(value, opt);\n if (resolvedValue instanceof NullObject) {\n return [0, 0, 0, 0];\n }\n value = resolvedValue.toLowerCase();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'colorToHwb',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as ColorChannels;\n }\n opt.format = 'hwb';\n const hwb = convertColorToHwb(value, opt) as ColorChannels;\n setCache(cacheKey, hwb);\n return hwb;\n};\n\n/**\n * convert color to lab\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels - [l, a, b, alpha]\n */\nexport const colorToLab = (value: string, opt: Options = {}): ColorChannels => {\n if (isString(value)) {\n const resolvedValue = preProcess(value, opt);\n if (resolvedValue instanceof NullObject) {\n return [0, 0, 0, 0];\n }\n value = resolvedValue.toLowerCase();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'colorToLab',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as ColorChannels;\n }\n const lab = convertColorToLab(value, opt) as ColorChannels;\n setCache(cacheKey, lab);\n return lab;\n};\n\n/**\n * convert color to lch\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels - [l, c, h, alpha]\n */\nexport const colorToLch = (value: string, opt: Options = {}): ColorChannels => {\n if (isString(value)) {\n const resolvedValue = preProcess(value, opt);\n if (resolvedValue instanceof NullObject) {\n return [0, 0, 0, 0];\n }\n value = resolvedValue.toLowerCase();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'colorToLch',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as ColorChannels;\n }\n const lch = convertColorToLch(value, opt) as ColorChannels;\n setCache(cacheKey, lch);\n return lch;\n};\n\n/**\n * convert color to oklab\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels - [l, a, b, alpha]\n */\nexport const colorToOklab = (\n value: string,\n opt: Options = {}\n): ColorChannels => {\n if (isString(value)) {\n const resolvedValue = preProcess(value, opt);\n if (resolvedValue instanceof NullObject) {\n return [0, 0, 0, 0];\n }\n value = resolvedValue.toLowerCase();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'colorToOklab',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as ColorChannels;\n }\n const lab = convertColorToOklab(value, opt) as ColorChannels;\n setCache(cacheKey, lab);\n return lab;\n};\n\n/**\n * convert color to oklch\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels - [l, c, h, alpha]\n */\nexport const colorToOklch = (\n value: string,\n opt: Options = {}\n): ColorChannels => {\n if (isString(value)) {\n const resolvedValue = preProcess(value, opt);\n if (resolvedValue instanceof NullObject) {\n return [0, 0, 0, 0];\n }\n value = resolvedValue.toLowerCase();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'colorToOklch',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as ColorChannels;\n }\n const lch = convertColorToOklch(value, opt) as ColorChannels;\n setCache(cacheKey, lch);\n return lch;\n};\n\n/**\n * convert color to rgb\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels - [r, g, b, alpha]\n */\nexport const colorToRgb = (value: string, opt: Options = {}): ColorChannels => {\n if (isString(value)) {\n const resolvedValue = preProcess(value, opt);\n if (resolvedValue instanceof NullObject) {\n return [0, 0, 0, 0];\n }\n value = resolvedValue.toLowerCase();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'colorToRgb',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as ColorChannels;\n }\n const rgb = convertColorToRgb(value, opt) as ColorChannels;\n setCache(cacheKey, rgb);\n return rgb;\n};\n\n/**\n * convert color to xyz\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels - [x, y, z, alpha]\n */\nexport const colorToXyz = (value: string, opt: Options = {}): ColorChannels => {\n if (isString(value)) {\n const resolvedValue = preProcess(value, opt);\n if (resolvedValue instanceof NullObject) {\n return [0, 0, 0, 0];\n }\n value = resolvedValue.toLowerCase();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'colorToXyz',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as ColorChannels;\n }\n let xyz;\n if (value.startsWith('color(')) {\n [, ...xyz] = parseColorFunc(value, opt) as ComputedColorChannels;\n } else {\n [, ...xyz] = parseColorValue(value, opt) as ComputedColorChannels;\n }\n setCache(cacheKey, xyz);\n return xyz as ColorChannels;\n};\n\n/**\n * convert color to xyz-d50\n * @param value - CSS color value\n * @param [opt] - options\n * @returns ColorChannels - [x, y, z, alpha]\n */\nexport const colorToXyzD50 = (\n value: string,\n opt: Options = {}\n): ColorChannels => {\n opt.d50 = true;\n return colorToXyz(value, opt);\n};\n\n/* convert */\nexport const convert = {\n colorToHex,\n colorToHsl,\n colorToHwb,\n colorToLab,\n colorToLch,\n colorToOklab,\n colorToOklch,\n colorToRgb,\n colorToXyz,\n colorToXyzD50,\n numberToHex\n};\n"],"names":[],"mappings":";;;;;;;;AAgCA,MAAM,YAAY;AAGlB,MAAM,cAAc,IAAI,OAAO,WAAW;AAC1C,MAAM,aAAa,IAAI,OAAO,UAAU;AACxC,MAAM,aAAa,IAAI,OAAO,UAAU;AAQjC,MAAM,aAAa,CACxB,OACA,MAAe,OACS;AACxB,MAAI,SAAS,KAAK,GAAG;AACnB,YAAQ,MAAM,KAAA;AACd,QAAI,CAAC,OAAO;AACV,aAAO,IAAI,WAAA;AAAA,IACb;AAAA,EACF,OAAO;AACL,WAAO,IAAI,WAAA;AAAA,EACb;AACA,QAAM,WAAmB;AAAA,IACvB;AAAA,MACE,WAAW;AAAA,MACX,MAAM;AAAA,MACN;AAAA,IAAA;AAAA,IAEF;AAAA,EAAA;AAEF,QAAM,eAAe,SAAS,QAAQ;AACtC,MAAI,wBAAwB,WAAW;AACrC,QAAI,aAAa,QAAQ;AACvB,aAAO;AAAA,IACT;AACA,WAAO,aAAa;AAAA,EACtB;AACA,MAAI,WAAW,KAAK,KAAK,GAAG;AAC1B,UAAM,gBAAgB,WAAW,OAAO,GAAG;AAC3C,QAAI,SAAS,aAAa,GAAG;AAC3B,cAAQ;AAAA,IACV,OAAO;AACL,eAAS,UAAU,IAAI;AACvB,aAAO,IAAI,WAAA;AAAA,IACb;AAAA,EACF;AACA,MAAI,WAAW,KAAK,KAAK,GAAG;AAC1B,UAAM,gBAAgB,qBAAqB,OAAO,GAAG;AACrD,QAAI,SAAS,aAAa,GAAG;AAC3B,cAAQ;AAAA,IACV,OAAO;AACL,eAAS,UAAU,IAAI;AACvB,aAAO,IAAI,WAAA;AAAA,IACb;AAAA,EACF,WAAW,YAAY,KAAK,KAAK,GAAG;AAClC,YAAQ,QAAQ,OAAO,GAAG;AAAA,EAC5B;AACA,MAAI,MAAM,WAAW,WAAW,GAAG;AACjC,UAAM,YAAY,gBAAgB,GAAG;AACrC,cAAU,SAAS;AACnB,cAAU,WAAW;AACrB,UAAM,gBAAgB,aAAa,OAAO,SAAS;AACnD,aAAS,UAAU,aAAa;AAChC,WAAO;AAAA,EACT;AACA,WAAS,UAAU,KAAK;AACxB,SAAO;AACT;AAOO,MAAM,cAAc,CAAC,UAA0B;AACpD,QAAM,MAAM,kBAAkB,KAAK;AACnC,SAAO;AACT;AASO,MAAM,aAAa,CAAC,OAAe,MAAe,OAAsB;AAC7E,MAAI,SAAS,KAAK,GAAG;AACnB,UAAM,gBAAgB,WAAW,OAAO,GAAG;AAC3C,QAAI,yBAAyB,YAAY;AACvC,aAAO;AAAA,IACT;AACA,YAAQ,cAAc,YAAA;AAAA,EACxB,OAAO;AACL,UAAM,IAAI,UAAU,GAAG,KAAK,mBAAmB;AAAA,EACjD;AACA,QAAM,EAAE,QAAQ,MAAA,IAAU;AAC1B,QAAM,WAAmB;AAAA,IACvB;AAAA,MACE,WAAW;AAAA,MACX,MAAM;AAAA,MACN;AAAA,IAAA;AAAA,IAEF;AAAA,EAAA;AAEF,QAAM,eAAe,SAAS,QAAQ;AACtC,MAAI,wBAAwB,WAAW;AACrC,QAAI,aAAa,QAAQ;AACvB,aAAO;AAAA,IACT;AACA,WAAO,aAAa;AAAA,EACtB;AACA,MAAI;AACJ,MAAI,WAAW;AACf,MAAI,OAAO;AACT,QAAI,SAAS;AACb,UAAM,aAAa,OAAO,GAAG;AAAA,EAC/B,OAAO;AACL,QAAI,SAAS;AACb,UAAM,aAAa,OAAO,GAAG;AAAA,EAC/B;AACA,MAAI,SAAS,GAAG,GAAG;AACjB,aAAS,UAAU,GAAG;AACtB,WAAO;AAAA,EACT;AACA,WAAS,UAAU,IAAI;AACvB,SAAO;AACT;AAQO,MAAM,aAAa,CAAC,OAAe,MAAe,OAAsB;AAC7E,MAAI,SAAS,KAAK,GAAG;AACnB,UAAM,gBAAgB,WAAW,OAAO,GAAG;AAC3C,QAAI,yBAAyB,YAAY;AACvC,aAAO,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,IACpB;AACA,YAAQ,cAAc,YAAA;AAAA,EACxB,OAAO;AACL,UAAM,IAAI,UAAU,GAAG,KAAK,mBAAmB;AAAA,EACjD;AACA,QAAM,WAAmB;AAAA,IACvB;AAAA,MACE,WAAW;AAAA,MACX,MAAM;AAAA,MACN;AAAA,IAAA;AAAA,IAEF;AAAA,EAAA;AAEF,QAAM,eAAe,SAAS,QAAQ;AACtC,MAAI,wBAAwB,WAAW;AACrC,WAAO,aAAa;AAAA,EACtB;AACA,MAAI,SAAS;AACb,QAAM,MAAM,kBAAkB,OAAO,GAAG;AACxC,WAAS,UAAU,GAAG;AACtB,SAAO;AACT;AAQO,MAAM,aAAa,CAAC,OAAe,MAAe,OAAsB;AAC7E,MAAI,SAAS,KAAK,GAAG;AACnB,UAAM,gBAAgB,WAAW,OAAO,GAAG;AAC3C,QAAI,yBAAyB,YAAY;AACvC,aAAO,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,IACpB;AACA,YAAQ,cAAc,YAAA;AAAA,EACxB,OAAO;AACL,UAAM,IAAI,UAAU,GAAG,KAAK,mBAAmB;AAAA,EACjD;AACA,QAAM,WAAmB;AAAA,IACvB;AAAA,MACE,WAAW;AAAA,MACX,MAAM;AAAA,MACN;AAAA,IAAA;AAAA,IAEF;AAAA,EAAA;AAEF,QAAM,eAAe,SAAS,QAAQ;AACtC,MAAI,wBAAwB,WAAW;AACrC,WAAO,aAAa;AAAA,EACtB;AACA,MAAI,SAAS;AACb,QAAM,MAAM,kBAAkB,OAAO,GAAG;AACxC,WAAS,UAAU,GAAG;AACtB,SAAO;AACT;AAQO,MAAM,aAAa,CAAC,OAAe,MAAe,OAAsB;AAC7E,MAAI,SAAS,KAAK,GAAG;AACnB,UAAM,gBAAgB,WAAW,OAAO,GAAG;AAC3C,QAAI,yBAAyB,YAAY;AACvC,aAAO,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,IACpB;AACA,YAAQ,cAAc,YAAA;AAAA,EACxB,OAAO;AACL,UAAM,IAAI,UAAU,GAAG,KAAK,mBAAmB;AAAA,EACjD;AACA,QAAM,WAAmB;AAAA,IACvB;AAAA,MACE,WAAW;AAAA,MACX,MAAM;AAAA,MACN;AAAA,IAAA;AAAA,IAEF;AAAA,EAAA;AAEF,QAAM,eAAe,SAAS,QAAQ;AACtC,MAAI,wBAAwB,WAAW;AACrC,WAAO,aAAa;AAAA,EACtB;AACA,QAAM,MAAM,kBAAkB,OAAO,GAAG;AACxC,WAAS,UAAU,GAAG;AACtB,SAAO;AACT;AAQO,MAAM,aAAa,CAAC,OAAe,MAAe,OAAsB;AAC7E,MAAI,SAAS,KAAK,GAAG;AACnB,UAAM,gBAAgB,WAAW,OAAO,GAAG;AAC3C,QAAI,yBAAyB,YAAY;AACvC,aAAO,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,IACpB;AACA,YAAQ,cAAc,YAAA;AAAA,EACxB,OAAO;AACL,UAAM,IAAI,UAAU,GAAG,KAAK,mBAAmB;AAAA,EACjD;AACA,QAAM,WAAmB;AAAA,IACvB;AAAA,MACE,WAAW;AAAA,MACX,MAAM;AAAA,MACN;AAAA,IAAA;AAAA,IAEF;AAAA,EAAA;AAEF,QAAM,eAAe,SAAS,QAAQ;AACtC,MAAI,wBAAwB,WAAW;AACrC,WAAO,aAAa;AAAA,EACtB;AACA,QAAM,MAAM,kBAAkB,OAAO,GAAG;AACxC,WAAS,UAAU,GAAG;AACtB,SAAO;AACT;AAQO,MAAM,eAAe,CAC1B,OACA,MAAe,OACG;AAClB,MAAI,SAAS,KAAK,GAAG;AACnB,UAAM,gBAAgB,WAAW,OAAO,GAAG;AAC3C,QAAI,yBAAyB,YAAY;AACvC,aAAO,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,IACpB;AACA,YAAQ,cAAc,YAAA;AAAA,EACxB,OAAO;AACL,UAAM,IAAI,UAAU,GAAG,KAAK,mBAAmB;AAAA,EACjD;AACA,QAAM,WAAmB;AAAA,IACvB;AAAA,MACE,WAAW;AAAA,MACX,MAAM;AAAA,MACN;AAAA,IAAA;AAAA,IAEF;AAAA,EAAA;AAEF,QAAM,eAAe,SAAS,QAAQ;AACtC,MAAI,wBAAwB,WAAW;AACrC,WAAO,aAAa;AAAA,EACtB;AACA,QAAM,MAAM,oBAAoB,OAAO,GAAG;AAC1C,WAAS,UAAU,GAAG;AACtB,SAAO;AACT;AAQO,MAAM,eAAe,CAC1B,OACA,MAAe,OACG;AAClB,MAAI,SAAS,KAAK,GAAG;AACnB,UAAM,gBAAgB,WAAW,OAAO,GAAG;AAC3C,QAAI,yBAAyB,YAAY;AACvC,aAAO,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,IACpB;AACA,YAAQ,cAAc,YAAA;AAAA,EACxB,OAAO;AACL,UAAM,IAAI,UAAU,GAAG,KAAK,mBAAmB;AAAA,EACjD;AACA,QAAM,WAAmB;AAAA,IACvB;AAAA,MACE,WAAW;AAAA,MACX,MAAM;AAAA,MACN;AAAA,IAAA;AAAA,IAEF;AAAA,EAAA;AAEF,QAAM,eAAe,SAAS,QAAQ;AACtC,MAAI,wBAAwB,WAAW;AACrC,WAAO,aAAa;AAAA,EACtB;AACA,QAAM,MAAM,oBAAoB,OAAO,GAAG;AAC1C,WAAS,UAAU,GAAG;AACtB,SAAO;AACT;AAQO,MAAM,aAAa,CAAC,OAAe,MAAe,OAAsB;AAC7E,MAAI,SAAS,KAAK,GAAG;AACnB,UAAM,gBAAgB,WAAW,OAAO,GAAG;AAC3C,QAAI,yBAAyB,YAAY;AACvC,aAAO,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,IACpB;AACA,YAAQ,cAAc,YAAA;AAAA,EACxB,OAAO;AACL,UAAM,IAAI,UAAU,GAAG,KAAK,mBAAmB;AAAA,EACjD;AACA,QAAM,WAAmB;AAAA,IACvB;AAAA,MACE,WAAW;AAAA,MACX,MAAM;AAAA,MACN;AAAA,IAAA;AAAA,IAEF;AAAA,EAAA;AAEF,QAAM,eAAe,SAAS,QAAQ;AACtC,MAAI,wBAAwB,WAAW;AACrC,WAAO,aAAa;AAAA,EACtB;AACA,QAAM,MAAM,kBAAkB,OAAO,GAAG;AACxC,WAAS,UAAU,GAAG;AACtB,SAAO;AACT;AAQO,MAAM,aAAa,CAAC,OAAe,MAAe,OAAsB;AAC7E,MAAI,SAAS,KAAK,GAAG;AACnB,UAAM,gBAAgB,WAAW,OAAO,GAAG;AAC3C,QAAI,yBAAyB,YAAY;AACvC,aAAO,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,IACpB;AACA,YAAQ,cAAc,YAAA;AAAA,EACxB,OAAO;AACL,UAAM,IAAI,UAAU,GAAG,KAAK,mBAAmB;AAAA,EACjD;AACA,QAAM,WAAmB;AAAA,IACvB;AAAA,MACE,WAAW;AAAA,MACX,MAAM;AAAA,MACN;AAAA,IAAA;AAAA,IAEF;AAAA,EAAA;AAEF,QAAM,eAAe,SAAS,QAAQ;AACtC,MAAI,wBAAwB,WAAW;AACrC,WAAO,aAAa;AAAA,EACtB;AACA,MAAI;AACJ,MAAI,MAAM,WAAW,QAAQ,GAAG;AAC9B,KAAA,EAAG,GAAG,GAAG,IAAI,eAAe,OAAO,GAAG;AAAA,EACxC,OAAO;AACL,KAAA,EAAG,GAAG,GAAG,IAAI,gBAAgB,OAAO,GAAG;AAAA,EACzC;AACA,WAAS,UAAU,GAAG;AACtB,SAAO;AACT;AAQO,MAAM,gBAAgB,CAC3B,OACA,MAAe,OACG;AAClB,MAAI,MAAM;AACV,SAAO,WAAW,OAAO,GAAG;AAC9B;AAGO,MAAM,UAAU;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;"}
\ No newline at end of file diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-calc.d.ts b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-calc.d.ts new file mode 100644 index 0000000..265e284 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-calc.d.ts @@ -0,0 +1,89 @@ +import { CSSToken } from '@csstools/css-tokenizer'; +import { NullObject } from './cache.js'; +import { Options } from './typedef.js'; +/** + * Calclator + */ +export declare class Calculator { + #private; + /** + * constructor + */ + constructor(); + get hasNum(): boolean; + set hasNum(value: boolean); + get numSum(): number[]; + get numMul(): number[]; + get hasPct(): boolean; + set hasPct(value: boolean); + get pctSum(): number[]; + get pctMul(): number[]; + get hasDim(): boolean; + set hasDim(value: boolean); + get dimSum(): string[]; + get dimSub(): string[]; + get dimMul(): string[]; + get dimDiv(): string[]; + get hasEtc(): boolean; + set hasEtc(value: boolean); + get etcSum(): string[]; + get etcSub(): string[]; + get etcMul(): string[]; + get etcDiv(): string[]; + /** + * clear values + * @returns void + */ + clear(): void; + /** + * sort values + * @param values - values + * @returns sorted values + */ + sort(values?: string[]): string[]; + /** + * multiply values + * @returns resolved value + */ + multiply(): string; + /** + * sum values + * @returns resolved value + */ + sum(): string; +} +/** + * sort calc values + * @param values - values to sort + * @param [finalize] - finalize values + * @returns sorted values + */ +export declare const sortCalcValues: (values?: (number | string)[], finalize?: boolean) => string; +/** + * serialize calc + * @param value - CSS value + * @param [opt] - options + * @returns serialized value + */ +export declare const serializeCalc: (value: string, opt?: Options) => string; +/** + * resolve dimension + * @param token - CSS token + * @param [opt] - options + * @returns resolved value + */ +export declare const resolveDimension: (token: CSSToken, opt?: Options) => string | NullObject; +/** + * parse tokens + * @param tokens - CSS tokens + * @param [opt] - options + * @returns parsed tokens + */ +export declare const parseTokens: (tokens: CSSToken[], opt?: Options) => string[]; +/** + * CSS calc() + * @param value - CSS value including calc() + * @param [opt] - options + * @returns resolved value + */ +export declare const cssCalc: (value: string, opt?: Options) => string; diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-calc.js b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-calc.js new file mode 100644 index 0000000..bb58a14 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-calc.js @@ -0,0 +1,826 @@ +import { calc } from "@csstools/css-calc"; +import { TokenType, tokenize } from "@csstools/css-tokenizer"; +import { createCacheKey, getCache, CacheItem, setCache, NullObject } from "./cache.js"; +import { isString, isStringOrNumber } from "./common.js"; +import { resolveVar } from "./css-var.js"; +import { roundToPrecision, resolveLengthInPixels } from "./util.js"; +import { VAL_SPEC, SYN_FN_VAR, SYN_FN_CALC, SYN_FN_VAR_START, NUM, ANGLE, LENGTH, SYN_FN_MATH_START } from "./constant.js"; +const { + CloseParen: PAREN_CLOSE, + Comment: COMMENT, + Dimension: DIM, + EOF, + Function: FUNC, + OpenParen: PAREN_OPEN, + Whitespace: W_SPACE +} = TokenType; +const NAMESPACE = "css-calc"; +const TRIA = 3; +const HEX = 16; +const MAX_PCT = 100; +const REG_FN_CALC = new RegExp(SYN_FN_CALC); +const REG_FN_CALC_NUM = new RegExp(`^calc\\((${NUM})\\)$`); +const REG_FN_MATH_START = new RegExp(SYN_FN_MATH_START); +const REG_FN_VAR = new RegExp(SYN_FN_VAR); +const REG_FN_VAR_START = new RegExp(SYN_FN_VAR_START); +const REG_OPERATOR = /\s[*+/-]\s/; +const REG_TYPE_DIM = new RegExp(`^(${NUM})(${ANGLE}|${LENGTH})$`); +const REG_TYPE_DIM_PCT = new RegExp(`^(${NUM})(${ANGLE}|${LENGTH}|%)$`); +const REG_TYPE_PCT = new RegExp(`^(${NUM})%$`); +class Calculator { + /* private */ + // number + #hasNum; + #numSum; + #numMul; + // percentage + #hasPct; + #pctSum; + #pctMul; + // dimension + #hasDim; + #dimSum; + #dimSub; + #dimMul; + #dimDiv; + // et cetra + #hasEtc; + #etcSum; + #etcSub; + #etcMul; + #etcDiv; + /** + * constructor + */ + constructor() { + this.#hasNum = false; + this.#numSum = []; + this.#numMul = []; + this.#hasPct = false; + this.#pctSum = []; + this.#pctMul = []; + this.#hasDim = false; + this.#dimSum = []; + this.#dimSub = []; + this.#dimMul = []; + this.#dimDiv = []; + this.#hasEtc = false; + this.#etcSum = []; + this.#etcSub = []; + this.#etcMul = []; + this.#etcDiv = []; + } + get hasNum() { + return this.#hasNum; + } + set hasNum(value) { + this.#hasNum = !!value; + } + get numSum() { + return this.#numSum; + } + get numMul() { + return this.#numMul; + } + get hasPct() { + return this.#hasPct; + } + set hasPct(value) { + this.#hasPct = !!value; + } + get pctSum() { + return this.#pctSum; + } + get pctMul() { + return this.#pctMul; + } + get hasDim() { + return this.#hasDim; + } + set hasDim(value) { + this.#hasDim = !!value; + } + get dimSum() { + return this.#dimSum; + } + get dimSub() { + return this.#dimSub; + } + get dimMul() { + return this.#dimMul; + } + get dimDiv() { + return this.#dimDiv; + } + get hasEtc() { + return this.#hasEtc; + } + set hasEtc(value) { + this.#hasEtc = !!value; + } + get etcSum() { + return this.#etcSum; + } + get etcSub() { + return this.#etcSub; + } + get etcMul() { + return this.#etcMul; + } + get etcDiv() { + return this.#etcDiv; + } + /** + * clear values + * @returns void + */ + clear() { + this.#hasNum = false; + this.#numSum = []; + this.#numMul = []; + this.#hasPct = false; + this.#pctSum = []; + this.#pctMul = []; + this.#hasDim = false; + this.#dimSum = []; + this.#dimSub = []; + this.#dimMul = []; + this.#dimDiv = []; + this.#hasEtc = false; + this.#etcSum = []; + this.#etcSub = []; + this.#etcMul = []; + this.#etcDiv = []; + } + /** + * sort values + * @param values - values + * @returns sorted values + */ + sort(values = []) { + const arr = [...values]; + if (arr.length > 1) { + arr.sort((a, b) => { + let res; + if (REG_TYPE_DIM_PCT.test(a) && REG_TYPE_DIM_PCT.test(b)) { + const [, valA, unitA] = a.match(REG_TYPE_DIM_PCT); + const [, valB, unitB] = b.match(REG_TYPE_DIM_PCT); + if (unitA === unitB) { + if (Number(valA) === Number(valB)) { + res = 0; + } else if (Number(valA) > Number(valB)) { + res = 1; + } else { + res = -1; + } + } else if (unitA > unitB) { + res = 1; + } else { + res = -1; + } + } else { + if (a === b) { + res = 0; + } else if (a > b) { + res = 1; + } else { + res = -1; + } + } + return res; + }); + } + return arr; + } + /** + * multiply values + * @returns resolved value + */ + multiply() { + const value = []; + let num; + if (this.#hasNum) { + num = 1; + for (const i of this.#numMul) { + num *= i; + if (num === 0 || !Number.isFinite(num) || Number.isNaN(num)) { + break; + } + } + if (!this.#hasPct && !this.#hasDim && !this.hasEtc) { + if (Number.isFinite(num)) { + num = roundToPrecision(num, HEX); + } + value.push(num); + } + } + if (this.#hasPct) { + if (typeof num !== "number") { + num = 1; + } + for (const i of this.#pctMul) { + num *= i; + if (num === 0 || !Number.isFinite(num) || Number.isNaN(num)) { + break; + } + } + if (Number.isFinite(num)) { + num = `${roundToPrecision(num, HEX)}%`; + } + if (!this.#hasDim && !this.hasEtc) { + value.push(num); + } + } + if (this.#hasDim) { + let dim = ""; + let mul = ""; + let div = ""; + if (this.#dimMul.length) { + if (this.#dimMul.length === 1) { + [mul] = this.#dimMul; + } else { + mul = `${this.sort(this.#dimMul).join(" * ")}`; + } + } + if (this.#dimDiv.length) { + if (this.#dimDiv.length === 1) { + [div] = this.#dimDiv; + } else { + div = `${this.sort(this.#dimDiv).join(" * ")}`; + } + } + if (Number.isFinite(num)) { + if (mul) { + if (div) { + if (div.includes("*")) { + dim = calc(`calc(${num} * ${mul} / (${div}))`, { + toCanonicalUnits: true + }); + } else { + dim = calc(`calc(${num} * ${mul} / ${div})`, { + toCanonicalUnits: true + }); + } + } else { + dim = calc(`calc(${num} * ${mul})`, { + toCanonicalUnits: true + }); + } + } else if (div.includes("*")) { + dim = calc(`calc(${num} / (${div}))`, { + toCanonicalUnits: true + }); + } else { + dim = calc(`calc(${num} / ${div})`, { + toCanonicalUnits: true + }); + } + value.push(dim.replace(/^calc/, "")); + } else { + if (!value.length && num !== void 0) { + value.push(num); + } + if (mul) { + if (div) { + if (div.includes("*")) { + dim = calc(`calc(${mul} / (${div}))`, { + toCanonicalUnits: true + }); + } else { + dim = calc(`calc(${mul} / ${div})`, { + toCanonicalUnits: true + }); + } + } else { + dim = calc(`calc(${mul})`, { + toCanonicalUnits: true + }); + } + if (value.length) { + value.push("*", dim.replace(/^calc/, "")); + } else { + value.push(dim.replace(/^calc/, "")); + } + } else { + dim = calc(`calc(${div})`, { + toCanonicalUnits: true + }); + if (value.length) { + value.push("/", dim.replace(/^calc/, "")); + } else { + value.push("1", "/", dim.replace(/^calc/, "")); + } + } + } + } + if (this.#hasEtc) { + if (this.#etcMul.length) { + if (!value.length && num !== void 0) { + value.push(num); + } + const mul = this.sort(this.#etcMul).join(" * "); + if (value.length) { + value.push(`* ${mul}`); + } else { + value.push(`${mul}`); + } + } + if (this.#etcDiv.length) { + const div = this.sort(this.#etcDiv).join(" * "); + if (div.includes("*")) { + if (value.length) { + value.push(`/ (${div})`); + } else { + value.push(`1 / (${div})`); + } + } else if (value.length) { + value.push(`/ ${div}`); + } else { + value.push(`1 / ${div}`); + } + } + } + if (value.length) { + return value.join(" "); + } + return ""; + } + /** + * sum values + * @returns resolved value + */ + sum() { + const value = []; + if (this.#hasNum) { + let num = 0; + for (const i of this.#numSum) { + num += i; + if (!Number.isFinite(num) || Number.isNaN(num)) { + break; + } + } + value.push(num); + } + if (this.#hasPct) { + let num = 0; + for (const i of this.#pctSum) { + num += i; + if (!Number.isFinite(num)) { + break; + } + } + if (Number.isFinite(num)) { + num = `${num}%`; + } + if (value.length) { + value.push(`+ ${num}`); + } else { + value.push(num); + } + } + if (this.#hasDim) { + let dim, sum, sub; + if (this.#dimSum.length) { + sum = this.sort(this.#dimSum).join(" + "); + } + if (this.#dimSub.length) { + sub = this.sort(this.#dimSub).join(" + "); + } + if (sum) { + if (sub) { + if (sub.includes("-")) { + dim = calc(`calc(${sum} - (${sub}))`, { + toCanonicalUnits: true + }); + } else { + dim = calc(`calc(${sum} - ${sub})`, { + toCanonicalUnits: true + }); + } + } else { + dim = calc(`calc(${sum})`, { + toCanonicalUnits: true + }); + } + } else { + dim = calc(`calc(-1 * (${sub}))`, { + toCanonicalUnits: true + }); + } + if (value.length) { + value.push("+", dim.replace(/^calc/, "")); + } else { + value.push(dim.replace(/^calc/, "")); + } + } + if (this.#hasEtc) { + if (this.#etcSum.length) { + const sum = this.sort(this.#etcSum).map((item) => { + let res; + if (REG_OPERATOR.test(item) && !item.startsWith("(") && !item.endsWith(")")) { + res = `(${item})`; + } else { + res = item; + } + return res; + }).join(" + "); + if (value.length) { + if (this.#etcSum.length > 1) { + value.push(`+ (${sum})`); + } else { + value.push(`+ ${sum}`); + } + } else { + value.push(`${sum}`); + } + } + if (this.#etcSub.length) { + const sub = this.sort(this.#etcSub).map((item) => { + let res; + if (REG_OPERATOR.test(item) && !item.startsWith("(") && !item.endsWith(")")) { + res = `(${item})`; + } else { + res = item; + } + return res; + }).join(" + "); + if (value.length) { + if (this.#etcSub.length > 1) { + value.push(`- (${sub})`); + } else { + value.push(`- ${sub}`); + } + } else if (this.#etcSub.length > 1) { + value.push(`-1 * (${sub})`); + } else { + value.push(`-1 * ${sub}`); + } + } + } + if (value.length) { + return value.join(" "); + } + return ""; + } +} +const sortCalcValues = (values = [], finalize = false) => { + if (values.length < TRIA) { + throw new Error(`Unexpected array length ${values.length}.`); + } + const start = values.shift(); + if (!isString(start) || !start.endsWith("(")) { + throw new Error(`Unexpected token ${start}.`); + } + const end = values.pop(); + if (end !== ")") { + throw new Error(`Unexpected token ${end}.`); + } + if (values.length === 1) { + const [value] = values; + if (!isStringOrNumber(value)) { + throw new Error(`Unexpected token ${value}.`); + } + return `${start}${value}${end}`; + } + const sortedValues = []; + const cal = new Calculator(); + let operator = ""; + const l = values.length; + for (let i = 0; i < l; i++) { + const value = values[i]; + if (!isStringOrNumber(value)) { + throw new Error(`Unexpected token ${value}.`); + } + if (value === "*" || value === "/") { + operator = value; + } else if (value === "+" || value === "-") { + const sortedValue = cal.multiply(); + if (sortedValue) { + sortedValues.push(sortedValue, value); + } + cal.clear(); + operator = ""; + } else { + const numValue = Number(value); + const strValue = `${value}`; + switch (operator) { + case "/": { + if (Number.isFinite(numValue)) { + cal.hasNum = true; + cal.numMul.push(1 / numValue); + } else if (REG_TYPE_PCT.test(strValue)) { + const [, val] = strValue.match(REG_TYPE_PCT); + cal.hasPct = true; + cal.pctMul.push(MAX_PCT * MAX_PCT / Number(val)); + } else if (REG_TYPE_DIM.test(strValue)) { + cal.hasDim = true; + cal.dimDiv.push(strValue); + } else { + cal.hasEtc = true; + cal.etcDiv.push(strValue); + } + break; + } + case "*": + default: { + if (Number.isFinite(numValue)) { + cal.hasNum = true; + cal.numMul.push(numValue); + } else if (REG_TYPE_PCT.test(strValue)) { + const [, val] = strValue.match(REG_TYPE_PCT); + cal.hasPct = true; + cal.pctMul.push(Number(val)); + } else if (REG_TYPE_DIM.test(strValue)) { + cal.hasDim = true; + cal.dimMul.push(strValue); + } else { + cal.hasEtc = true; + cal.etcMul.push(strValue); + } + } + } + } + if (i === l - 1) { + const sortedValue = cal.multiply(); + if (sortedValue) { + sortedValues.push(sortedValue); + } + cal.clear(); + operator = ""; + } + } + let resolvedValue = ""; + if (finalize && (sortedValues.includes("+") || sortedValues.includes("-"))) { + const finalizedValues = []; + cal.clear(); + operator = ""; + const l2 = sortedValues.length; + for (let i = 0; i < l2; i++) { + const value = sortedValues[i]; + if (isStringOrNumber(value)) { + if (value === "+" || value === "-") { + operator = value; + } else { + const numValue = Number(value); + const strValue = `${value}`; + switch (operator) { + case "-": { + if (Number.isFinite(numValue)) { + cal.hasNum = true; + cal.numSum.push(-1 * numValue); + } else if (REG_TYPE_PCT.test(strValue)) { + const [, val] = strValue.match(REG_TYPE_PCT); + cal.hasPct = true; + cal.pctSum.push(-1 * Number(val)); + } else if (REG_TYPE_DIM.test(strValue)) { + cal.hasDim = true; + cal.dimSub.push(strValue); + } else { + cal.hasEtc = true; + cal.etcSub.push(strValue); + } + break; + } + case "+": + default: { + if (Number.isFinite(numValue)) { + cal.hasNum = true; + cal.numSum.push(numValue); + } else if (REG_TYPE_PCT.test(strValue)) { + const [, val] = strValue.match(REG_TYPE_PCT); + cal.hasPct = true; + cal.pctSum.push(Number(val)); + } else if (REG_TYPE_DIM.test(strValue)) { + cal.hasDim = true; + cal.dimSum.push(strValue); + } else { + cal.hasEtc = true; + cal.etcSum.push(strValue); + } + } + } + } + } + if (i === l2 - 1) { + const sortedValue = cal.sum(); + if (sortedValue) { + finalizedValues.push(sortedValue); + } + cal.clear(); + operator = ""; + } + } + resolvedValue = finalizedValues.join(" ").replace(/\+\s-/g, "- "); + } else { + resolvedValue = sortedValues.join(" ").replace(/\+\s-/g, "- "); + } + if (resolvedValue.startsWith("(") && resolvedValue.endsWith(")") && resolvedValue.lastIndexOf("(") === 0 && resolvedValue.indexOf(")") === resolvedValue.length - 1) { + resolvedValue = resolvedValue.replace(/^\(/, "").replace(/\)$/, ""); + } + return `${start}${resolvedValue}${end}`; +}; +const serializeCalc = (value, opt = {}) => { + const { format = "" } = opt; + if (isString(value)) { + if (!REG_FN_VAR_START.test(value) || format !== VAL_SPEC) { + return value; + } + value = value.toLowerCase().trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE, + name: "serializeCalc", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item; + } + const items = tokenize({ css: value }).map((token) => { + const [type, value2] = token; + let res = ""; + if (type !== W_SPACE && type !== COMMENT) { + res = value2; + } + return res; + }).filter((v) => v); + let startIndex = items.findLastIndex((item) => /\($/.test(item)); + while (startIndex) { + const endIndex = items.findIndex((item, index) => { + return item === ")" && index > startIndex; + }); + const slicedValues = items.slice(startIndex, endIndex + 1); + let serializedValue = sortCalcValues(slicedValues); + if (REG_FN_VAR_START.test(serializedValue)) { + serializedValue = calc(serializedValue, { + toCanonicalUnits: true + }); + } + items.splice(startIndex, endIndex - startIndex + 1, serializedValue); + startIndex = items.findLastIndex((item) => /\($/.test(item)); + } + const serializedCalc = sortCalcValues(items, true); + setCache(cacheKey, serializedCalc); + return serializedCalc; +}; +const resolveDimension = (token, opt = {}) => { + if (!Array.isArray(token)) { + throw new TypeError(`${token} is not an array.`); + } + const [, , , , detail = {}] = token; + const { unit, value } = detail; + if (unit === "px") { + return `${value}${unit}`; + } + const pixelValue = resolveLengthInPixels(Number(value), unit, opt); + if (Number.isFinite(pixelValue)) { + return `${roundToPrecision(pixelValue, HEX)}px`; + } + return new NullObject(); +}; +const parseTokens = (tokens, opt = {}) => { + if (!Array.isArray(tokens)) { + throw new TypeError(`${tokens} is not an array.`); + } + const { format = "" } = opt; + const mathFunc = /* @__PURE__ */ new Set(); + let nest = 0; + const res = []; + while (tokens.length) { + const token = tokens.shift(); + if (!Array.isArray(token)) { + throw new TypeError(`${token} is not an array.`); + } + const [type = "", value = ""] = token; + switch (type) { + case DIM: { + if (format === VAL_SPEC && !mathFunc.has(nest)) { + res.push(value); + } else { + const resolvedValue = resolveDimension(token, opt); + if (isString(resolvedValue)) { + res.push(resolvedValue); + } else { + res.push(value); + } + } + break; + } + case FUNC: + case PAREN_OPEN: { + res.push(value); + nest++; + if (REG_FN_MATH_START.test(value)) { + mathFunc.add(nest); + } + break; + } + case PAREN_CLOSE: { + if (res.length) { + const lastValue = res[res.length - 1]; + if (lastValue === " ") { + res.splice(-1, 1, value); + } else { + res.push(value); + } + } else { + res.push(value); + } + if (mathFunc.has(nest)) { + mathFunc.delete(nest); + } + nest--; + break; + } + case W_SPACE: { + if (res.length) { + const lastValue = res[res.length - 1]; + if (isString(lastValue) && !lastValue.endsWith("(") && lastValue !== " ") { + res.push(value); + } + } + break; + } + default: { + if (type !== COMMENT && type !== EOF) { + res.push(value); + } + } + } + } + return res; +}; +const cssCalc = (value, opt = {}) => { + const { format = "" } = opt; + if (isString(value)) { + if (REG_FN_VAR.test(value)) { + if (format === VAL_SPEC) { + return value; + } else { + const resolvedValue2 = resolveVar(value, opt); + if (isString(resolvedValue2)) { + return resolvedValue2; + } else { + return ""; + } + } + } else if (!REG_FN_CALC.test(value)) { + return value; + } + value = value.toLowerCase().trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE, + name: "cssCalc", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item; + } + const tokens = tokenize({ css: value }); + const values = parseTokens(tokens, opt); + let resolvedValue = calc(values.join(""), { + toCanonicalUnits: true + }); + if (REG_FN_VAR_START.test(value)) { + if (REG_TYPE_DIM_PCT.test(resolvedValue)) { + const [, val, unit] = resolvedValue.match( + REG_TYPE_DIM_PCT + ); + resolvedValue = `${roundToPrecision(Number(val), HEX)}${unit}`; + } + if (resolvedValue && !REG_FN_VAR_START.test(resolvedValue) && format === VAL_SPEC) { + resolvedValue = `calc(${resolvedValue})`; + } + } + if (format === VAL_SPEC) { + if (/\s[-+*/]\s/.test(resolvedValue) && !resolvedValue.includes("NaN")) { + resolvedValue = serializeCalc(resolvedValue, opt); + } else if (REG_FN_CALC_NUM.test(resolvedValue)) { + const [, val] = resolvedValue.match(REG_FN_CALC_NUM); + resolvedValue = `calc(${roundToPrecision(Number(val), HEX)})`; + } + } + setCache(cacheKey, resolvedValue); + return resolvedValue; +}; +export { + Calculator, + cssCalc, + parseTokens, + resolveDimension, + serializeCalc, + sortCalcValues +}; +//# sourceMappingURL=css-calc.js.map diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-calc.js.map b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-calc.js.map new file mode 100644 index 0000000..3b8d6cb --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-calc.js.map @@ -0,0 +1 @@ +{"version":3,"file":"css-calc.js","sources":["../../../src/js/css-calc.ts"],"sourcesContent":["/**\n * css-calc\n */\n\nimport { calc } from '@csstools/css-calc';\nimport { CSSToken, TokenType, tokenize } from '@csstools/css-tokenizer';\nimport {\n CacheItem,\n NullObject,\n createCacheKey,\n getCache,\n setCache\n} from './cache';\nimport { isString, isStringOrNumber } from './common';\nimport { resolveVar } from './css-var';\nimport { resolveLengthInPixels, roundToPrecision } from './util';\nimport { MatchedRegExp, Options } from './typedef';\n\n/* constants */\nimport {\n ANGLE,\n LENGTH,\n NUM,\n SYN_FN_CALC,\n SYN_FN_MATH_START,\n SYN_FN_VAR,\n SYN_FN_VAR_START,\n VAL_SPEC\n} from './constant';\nconst {\n CloseParen: PAREN_CLOSE,\n Comment: COMMENT,\n Dimension: DIM,\n EOF,\n Function: FUNC,\n OpenParen: PAREN_OPEN,\n Whitespace: W_SPACE\n} = TokenType;\nconst NAMESPACE = 'css-calc';\n\n/* numeric constants */\nconst TRIA = 3;\nconst HEX = 16;\nconst MAX_PCT = 100;\n\n/* regexp */\nconst REG_FN_CALC = new RegExp(SYN_FN_CALC);\nconst REG_FN_CALC_NUM = new RegExp(`^calc\\\\((${NUM})\\\\)$`);\nconst REG_FN_MATH_START = new RegExp(SYN_FN_MATH_START);\nconst REG_FN_VAR = new RegExp(SYN_FN_VAR);\nconst REG_FN_VAR_START = new RegExp(SYN_FN_VAR_START);\nconst REG_OPERATOR = /\\s[*+/-]\\s/;\nconst REG_TYPE_DIM = new RegExp(`^(${NUM})(${ANGLE}|${LENGTH})$`);\nconst REG_TYPE_DIM_PCT = new RegExp(`^(${NUM})(${ANGLE}|${LENGTH}|%)$`);\nconst REG_TYPE_PCT = new RegExp(`^(${NUM})%$`);\n\n/**\n * Calclator\n */\nexport class Calculator {\n /* private */\n // number\n #hasNum: boolean;\n #numSum: number[];\n #numMul: number[];\n // percentage\n #hasPct: boolean;\n #pctSum: number[];\n #pctMul: number[];\n // dimension\n #hasDim: boolean;\n #dimSum: string[];\n #dimSub: string[];\n #dimMul: string[];\n #dimDiv: string[];\n // et cetra\n #hasEtc: boolean;\n #etcSum: string[];\n #etcSub: string[];\n #etcMul: string[];\n #etcDiv: string[];\n\n /**\n * constructor\n */\n constructor() {\n // number\n this.#hasNum = false;\n this.#numSum = [];\n this.#numMul = [];\n // percentage\n this.#hasPct = false;\n this.#pctSum = [];\n this.#pctMul = [];\n // dimension\n this.#hasDim = false;\n this.#dimSum = [];\n this.#dimSub = [];\n this.#dimMul = [];\n this.#dimDiv = [];\n // et cetra\n this.#hasEtc = false;\n this.#etcSum = [];\n this.#etcSub = [];\n this.#etcMul = [];\n this.#etcDiv = [];\n }\n\n get hasNum() {\n return this.#hasNum;\n }\n\n set hasNum(value: boolean) {\n this.#hasNum = !!value;\n }\n\n get numSum() {\n return this.#numSum;\n }\n\n get numMul() {\n return this.#numMul;\n }\n\n get hasPct() {\n return this.#hasPct;\n }\n\n set hasPct(value: boolean) {\n this.#hasPct = !!value;\n }\n\n get pctSum() {\n return this.#pctSum;\n }\n\n get pctMul() {\n return this.#pctMul;\n }\n\n get hasDim() {\n return this.#hasDim;\n }\n\n set hasDim(value: boolean) {\n this.#hasDim = !!value;\n }\n\n get dimSum() {\n return this.#dimSum;\n }\n\n get dimSub() {\n return this.#dimSub;\n }\n\n get dimMul() {\n return this.#dimMul;\n }\n\n get dimDiv() {\n return this.#dimDiv;\n }\n\n get hasEtc() {\n return this.#hasEtc;\n }\n\n set hasEtc(value: boolean) {\n this.#hasEtc = !!value;\n }\n\n get etcSum() {\n return this.#etcSum;\n }\n\n get etcSub() {\n return this.#etcSub;\n }\n\n get etcMul() {\n return this.#etcMul;\n }\n\n get etcDiv() {\n return this.#etcDiv;\n }\n\n /**\n * clear values\n * @returns void\n */\n clear() {\n // number\n this.#hasNum = false;\n this.#numSum = [];\n this.#numMul = [];\n // percentage\n this.#hasPct = false;\n this.#pctSum = [];\n this.#pctMul = [];\n // dimension\n this.#hasDim = false;\n this.#dimSum = [];\n this.#dimSub = [];\n this.#dimMul = [];\n this.#dimDiv = [];\n // et cetra\n this.#hasEtc = false;\n this.#etcSum = [];\n this.#etcSub = [];\n this.#etcMul = [];\n this.#etcDiv = [];\n }\n\n /**\n * sort values\n * @param values - values\n * @returns sorted values\n */\n sort(values: string[] = []): string[] {\n const arr = [...values];\n if (arr.length > 1) {\n arr.sort((a, b) => {\n let res;\n if (REG_TYPE_DIM_PCT.test(a) && REG_TYPE_DIM_PCT.test(b)) {\n const [, valA, unitA] = a.match(REG_TYPE_DIM_PCT) as MatchedRegExp;\n const [, valB, unitB] = b.match(REG_TYPE_DIM_PCT) as MatchedRegExp;\n if (unitA === unitB) {\n if (Number(valA) === Number(valB)) {\n res = 0;\n } else if (Number(valA) > Number(valB)) {\n res = 1;\n } else {\n res = -1;\n }\n } else if (unitA > unitB) {\n res = 1;\n } else {\n res = -1;\n }\n } else {\n if (a === b) {\n res = 0;\n } else if (a > b) {\n res = 1;\n } else {\n res = -1;\n }\n }\n return res;\n });\n }\n return arr;\n }\n\n /**\n * multiply values\n * @returns resolved value\n */\n multiply(): string {\n const value = [];\n let num;\n if (this.#hasNum) {\n num = 1;\n for (const i of this.#numMul) {\n num *= i;\n if (num === 0 || !Number.isFinite(num) || Number.isNaN(num)) {\n break;\n }\n }\n if (!this.#hasPct && !this.#hasDim && !this.hasEtc) {\n if (Number.isFinite(num)) {\n num = roundToPrecision(num, HEX);\n }\n value.push(num);\n }\n }\n if (this.#hasPct) {\n if (typeof num !== 'number') {\n num = 1;\n }\n for (const i of this.#pctMul) {\n num *= i;\n if (num === 0 || !Number.isFinite(num) || Number.isNaN(num)) {\n break;\n }\n }\n if (Number.isFinite(num)) {\n num = `${roundToPrecision(num, HEX)}%`;\n }\n if (!this.#hasDim && !this.hasEtc) {\n value.push(num);\n }\n }\n if (this.#hasDim) {\n let dim = '';\n let mul = '';\n let div = '';\n if (this.#dimMul.length) {\n if (this.#dimMul.length === 1) {\n [mul] = this.#dimMul as [string];\n } else {\n mul = `${this.sort(this.#dimMul).join(' * ')}`;\n }\n }\n if (this.#dimDiv.length) {\n if (this.#dimDiv.length === 1) {\n [div] = this.#dimDiv as [string];\n } else {\n div = `${this.sort(this.#dimDiv).join(' * ')}`;\n }\n }\n if (Number.isFinite(num)) {\n if (mul) {\n if (div) {\n if (div.includes('*')) {\n dim = calc(`calc(${num} * ${mul} / (${div}))`, {\n toCanonicalUnits: true\n });\n } else {\n dim = calc(`calc(${num} * ${mul} / ${div})`, {\n toCanonicalUnits: true\n });\n }\n } else {\n dim = calc(`calc(${num} * ${mul})`, {\n toCanonicalUnits: true\n });\n }\n } else if (div.includes('*')) {\n dim = calc(`calc(${num} / (${div}))`, {\n toCanonicalUnits: true\n });\n } else {\n dim = calc(`calc(${num} / ${div})`, {\n toCanonicalUnits: true\n });\n }\n value.push(dim.replace(/^calc/, ''));\n } else {\n if (!value.length && num !== undefined) {\n value.push(num);\n }\n if (mul) {\n if (div) {\n if (div.includes('*')) {\n dim = calc(`calc(${mul} / (${div}))`, {\n toCanonicalUnits: true\n });\n } else {\n dim = calc(`calc(${mul} / ${div})`, {\n toCanonicalUnits: true\n });\n }\n } else {\n dim = calc(`calc(${mul})`, {\n toCanonicalUnits: true\n });\n }\n if (value.length) {\n value.push('*', dim.replace(/^calc/, ''));\n } else {\n value.push(dim.replace(/^calc/, ''));\n }\n } else {\n dim = calc(`calc(${div})`, {\n toCanonicalUnits: true\n });\n if (value.length) {\n value.push('/', dim.replace(/^calc/, ''));\n } else {\n value.push('1', '/', dim.replace(/^calc/, ''));\n }\n }\n }\n }\n if (this.#hasEtc) {\n if (this.#etcMul.length) {\n if (!value.length && num !== undefined) {\n value.push(num);\n }\n const mul = this.sort(this.#etcMul).join(' * ');\n if (value.length) {\n value.push(`* ${mul}`);\n } else {\n value.push(`${mul}`);\n }\n }\n if (this.#etcDiv.length) {\n const div = this.sort(this.#etcDiv).join(' * ');\n if (div.includes('*')) {\n if (value.length) {\n value.push(`/ (${div})`);\n } else {\n value.push(`1 / (${div})`);\n }\n } else if (value.length) {\n value.push(`/ ${div}`);\n } else {\n value.push(`1 / ${div}`);\n }\n }\n }\n if (value.length) {\n return value.join(' ');\n }\n return '';\n }\n\n /**\n * sum values\n * @returns resolved value\n */\n sum(): string {\n const value = [];\n if (this.#hasNum) {\n let num = 0;\n for (const i of this.#numSum) {\n num += i;\n if (!Number.isFinite(num) || Number.isNaN(num)) {\n break;\n }\n }\n value.push(num);\n }\n if (this.#hasPct) {\n let num: number | string = 0;\n for (const i of this.#pctSum) {\n num += i;\n if (!Number.isFinite(num)) {\n break;\n }\n }\n if (Number.isFinite(num)) {\n num = `${num}%`;\n }\n if (value.length) {\n value.push(`+ ${num}`);\n } else {\n value.push(num);\n }\n }\n if (this.#hasDim) {\n let dim, sum, sub;\n if (this.#dimSum.length) {\n sum = this.sort(this.#dimSum).join(' + ');\n }\n if (this.#dimSub.length) {\n sub = this.sort(this.#dimSub).join(' + ');\n }\n if (sum) {\n if (sub) {\n if (sub.includes('-')) {\n dim = calc(`calc(${sum} - (${sub}))`, {\n toCanonicalUnits: true\n });\n } else {\n dim = calc(`calc(${sum} - ${sub})`, {\n toCanonicalUnits: true\n });\n }\n } else {\n dim = calc(`calc(${sum})`, {\n toCanonicalUnits: true\n });\n }\n } else {\n dim = calc(`calc(-1 * (${sub}))`, {\n toCanonicalUnits: true\n });\n }\n if (value.length) {\n value.push('+', dim.replace(/^calc/, ''));\n } else {\n value.push(dim.replace(/^calc/, ''));\n }\n }\n if (this.#hasEtc) {\n if (this.#etcSum.length) {\n const sum = this.sort(this.#etcSum)\n .map(item => {\n let res;\n if (\n REG_OPERATOR.test(item) &&\n !item.startsWith('(') &&\n !item.endsWith(')')\n ) {\n res = `(${item})`;\n } else {\n res = item;\n }\n return res;\n })\n .join(' + ');\n if (value.length) {\n if (this.#etcSum.length > 1) {\n value.push(`+ (${sum})`);\n } else {\n value.push(`+ ${sum}`);\n }\n } else {\n value.push(`${sum}`);\n }\n }\n if (this.#etcSub.length) {\n const sub = this.sort(this.#etcSub)\n .map(item => {\n let res;\n if (\n REG_OPERATOR.test(item) &&\n !item.startsWith('(') &&\n !item.endsWith(')')\n ) {\n res = `(${item})`;\n } else {\n res = item;\n }\n return res;\n })\n .join(' + ');\n if (value.length) {\n if (this.#etcSub.length > 1) {\n value.push(`- (${sub})`);\n } else {\n value.push(`- ${sub}`);\n }\n } else if (this.#etcSub.length > 1) {\n value.push(`-1 * (${sub})`);\n } else {\n value.push(`-1 * ${sub}`);\n }\n }\n }\n if (value.length) {\n return value.join(' ');\n }\n return '';\n }\n}\n\n/**\n * sort calc values\n * @param values - values to sort\n * @param [finalize] - finalize values\n * @returns sorted values\n */\nexport const sortCalcValues = (\n values: (number | string)[] = [],\n finalize: boolean = false\n): string => {\n if (values.length < TRIA) {\n throw new Error(`Unexpected array length ${values.length}.`);\n }\n const start = values.shift();\n if (!isString(start) || !start.endsWith('(')) {\n throw new Error(`Unexpected token ${start}.`);\n }\n const end = values.pop();\n if (end !== ')') {\n throw new Error(`Unexpected token ${end}.`);\n }\n if (values.length === 1) {\n const [value] = values;\n if (!isStringOrNumber(value)) {\n throw new Error(`Unexpected token ${value}.`);\n }\n return `${start}${value}${end}`;\n }\n const sortedValues = [];\n const cal = new Calculator();\n let operator: string = '';\n const l = values.length;\n for (let i = 0; i < l; i++) {\n const value = values[i];\n if (!isStringOrNumber(value)) {\n throw new Error(`Unexpected token ${value}.`);\n }\n if (value === '*' || value === '/') {\n operator = value;\n } else if (value === '+' || value === '-') {\n const sortedValue = cal.multiply();\n if (sortedValue) {\n sortedValues.push(sortedValue, value);\n }\n cal.clear();\n operator = '';\n } else {\n const numValue = Number(value);\n const strValue = `${value}`;\n switch (operator) {\n case '/': {\n if (Number.isFinite(numValue)) {\n cal.hasNum = true;\n cal.numMul.push(1 / numValue);\n } else if (REG_TYPE_PCT.test(strValue)) {\n const [, val] = strValue.match(REG_TYPE_PCT) as MatchedRegExp;\n cal.hasPct = true;\n cal.pctMul.push((MAX_PCT * MAX_PCT) / Number(val));\n } else if (REG_TYPE_DIM.test(strValue)) {\n cal.hasDim = true;\n cal.dimDiv.push(strValue);\n } else {\n cal.hasEtc = true;\n cal.etcDiv.push(strValue);\n }\n break;\n }\n case '*':\n default: {\n if (Number.isFinite(numValue)) {\n cal.hasNum = true;\n cal.numMul.push(numValue);\n } else if (REG_TYPE_PCT.test(strValue)) {\n const [, val] = strValue.match(REG_TYPE_PCT) as MatchedRegExp;\n cal.hasPct = true;\n cal.pctMul.push(Number(val));\n } else if (REG_TYPE_DIM.test(strValue)) {\n cal.hasDim = true;\n cal.dimMul.push(strValue);\n } else {\n cal.hasEtc = true;\n cal.etcMul.push(strValue);\n }\n }\n }\n }\n if (i === l - 1) {\n const sortedValue = cal.multiply();\n if (sortedValue) {\n sortedValues.push(sortedValue);\n }\n cal.clear();\n operator = '';\n }\n }\n let resolvedValue = '';\n if (finalize && (sortedValues.includes('+') || sortedValues.includes('-'))) {\n const finalizedValues = [];\n cal.clear();\n operator = '';\n const l = sortedValues.length;\n for (let i = 0; i < l; i++) {\n const value = sortedValues[i];\n if (isStringOrNumber(value)) {\n if (value === '+' || value === '-') {\n operator = value;\n } else {\n const numValue = Number(value);\n const strValue = `${value}`;\n switch (operator) {\n case '-': {\n if (Number.isFinite(numValue)) {\n cal.hasNum = true;\n cal.numSum.push(-1 * numValue);\n } else if (REG_TYPE_PCT.test(strValue)) {\n const [, val] = strValue.match(REG_TYPE_PCT) as MatchedRegExp;\n cal.hasPct = true;\n cal.pctSum.push(-1 * Number(val));\n } else if (REG_TYPE_DIM.test(strValue)) {\n cal.hasDim = true;\n cal.dimSub.push(strValue);\n } else {\n cal.hasEtc = true;\n cal.etcSub.push(strValue);\n }\n break;\n }\n case '+':\n default: {\n if (Number.isFinite(numValue)) {\n cal.hasNum = true;\n cal.numSum.push(numValue);\n } else if (REG_TYPE_PCT.test(strValue)) {\n const [, val] = strValue.match(REG_TYPE_PCT) as MatchedRegExp;\n cal.hasPct = true;\n cal.pctSum.push(Number(val));\n } else if (REG_TYPE_DIM.test(strValue)) {\n cal.hasDim = true;\n cal.dimSum.push(strValue);\n } else {\n cal.hasEtc = true;\n cal.etcSum.push(strValue);\n }\n }\n }\n }\n }\n if (i === l - 1) {\n const sortedValue = cal.sum();\n if (sortedValue) {\n finalizedValues.push(sortedValue);\n }\n cal.clear();\n operator = '';\n }\n }\n resolvedValue = finalizedValues.join(' ').replace(/\\+\\s-/g, '- ');\n } else {\n resolvedValue = sortedValues.join(' ').replace(/\\+\\s-/g, '- ');\n }\n if (\n resolvedValue.startsWith('(') &&\n resolvedValue.endsWith(')') &&\n resolvedValue.lastIndexOf('(') === 0 &&\n resolvedValue.indexOf(')') === resolvedValue.length - 1\n ) {\n resolvedValue = resolvedValue.replace(/^\\(/, '').replace(/\\)$/, '');\n }\n return `${start}${resolvedValue}${end}`;\n};\n\n/**\n * serialize calc\n * @param value - CSS value\n * @param [opt] - options\n * @returns serialized value\n */\nexport const serializeCalc = (value: string, opt: Options = {}): string => {\n const { format = '' } = opt;\n if (isString(value)) {\n if (!REG_FN_VAR_START.test(value) || format !== VAL_SPEC) {\n return value;\n }\n value = value.toLowerCase().trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'serializeCalc',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as string;\n }\n const items: string[] = tokenize({ css: value })\n .map((token: CSSToken): string => {\n const [type, value] = token as [TokenType, string];\n let res = '';\n if (type !== W_SPACE && type !== COMMENT) {\n res = value;\n }\n return res;\n })\n .filter(v => v);\n let startIndex = items.findLastIndex((item: string) => /\\($/.test(item));\n while (startIndex) {\n const endIndex = items.findIndex((item: unknown, index: number) => {\n return item === ')' && index > startIndex;\n });\n const slicedValues: string[] = items.slice(startIndex, endIndex + 1);\n let serializedValue: string = sortCalcValues(slicedValues);\n if (REG_FN_VAR_START.test(serializedValue)) {\n serializedValue = calc(serializedValue, {\n toCanonicalUnits: true\n });\n }\n items.splice(startIndex, endIndex - startIndex + 1, serializedValue);\n startIndex = items.findLastIndex((item: string) => /\\($/.test(item));\n }\n const serializedCalc = sortCalcValues(items, true);\n setCache(cacheKey, serializedCalc);\n return serializedCalc;\n};\n\n/**\n * resolve dimension\n * @param token - CSS token\n * @param [opt] - options\n * @returns resolved value\n */\nexport const resolveDimension = (\n token: CSSToken,\n opt: Options = {}\n): string | NullObject => {\n if (!Array.isArray(token)) {\n throw new TypeError(`${token} is not an array.`);\n }\n const [, , , , detail = {}] = token;\n const { unit, value } = detail as {\n unit: string;\n value: number;\n };\n if (unit === 'px') {\n return `${value}${unit}`;\n }\n const pixelValue = resolveLengthInPixels(Number(value), unit, opt);\n if (Number.isFinite(pixelValue)) {\n return `${roundToPrecision(pixelValue, HEX)}px`;\n }\n return new NullObject();\n};\n\n/**\n * parse tokens\n * @param tokens - CSS tokens\n * @param [opt] - options\n * @returns parsed tokens\n */\nexport const parseTokens = (\n tokens: CSSToken[],\n opt: Options = {}\n): string[] => {\n if (!Array.isArray(tokens)) {\n throw new TypeError(`${tokens} is not an array.`);\n }\n const { format = '' } = opt;\n const mathFunc = new Set();\n let nest = 0;\n const res: string[] = [];\n while (tokens.length) {\n const token = tokens.shift();\n if (!Array.isArray(token)) {\n throw new TypeError(`${token} is not an array.`);\n }\n const [type = '', value = ''] = token as [TokenType, string];\n switch (type) {\n case DIM: {\n if (format === VAL_SPEC && !mathFunc.has(nest)) {\n res.push(value);\n } else {\n const resolvedValue = resolveDimension(token, opt);\n if (isString(resolvedValue)) {\n res.push(resolvedValue);\n } else {\n res.push(value);\n }\n }\n break;\n }\n case FUNC:\n case PAREN_OPEN: {\n res.push(value);\n nest++;\n if (REG_FN_MATH_START.test(value)) {\n mathFunc.add(nest);\n }\n break;\n }\n case PAREN_CLOSE: {\n if (res.length) {\n const lastValue = res[res.length - 1];\n if (lastValue === ' ') {\n res.splice(-1, 1, value);\n } else {\n res.push(value);\n }\n } else {\n res.push(value);\n }\n if (mathFunc.has(nest)) {\n mathFunc.delete(nest);\n }\n nest--;\n break;\n }\n case W_SPACE: {\n if (res.length) {\n const lastValue = res[res.length - 1];\n if (\n isString(lastValue) &&\n !lastValue.endsWith('(') &&\n lastValue !== ' '\n ) {\n res.push(value);\n }\n }\n break;\n }\n default: {\n if (type !== COMMENT && type !== EOF) {\n res.push(value);\n }\n }\n }\n }\n return res;\n};\n\n/**\n * CSS calc()\n * @param value - CSS value including calc()\n * @param [opt] - options\n * @returns resolved value\n */\nexport const cssCalc = (value: string, opt: Options = {}): string => {\n const { format = '' } = opt;\n if (isString(value)) {\n if (REG_FN_VAR.test(value)) {\n if (format === VAL_SPEC) {\n return value;\n } else {\n const resolvedValue = resolveVar(value, opt);\n if (isString(resolvedValue)) {\n return resolvedValue;\n } else {\n return '';\n }\n }\n } else if (!REG_FN_CALC.test(value)) {\n return value;\n }\n value = value.toLowerCase().trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'cssCalc',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as string;\n }\n const tokens = tokenize({ css: value });\n const values = parseTokens(tokens, opt);\n let resolvedValue: string = calc(values.join(''), {\n toCanonicalUnits: true\n });\n if (REG_FN_VAR_START.test(value)) {\n if (REG_TYPE_DIM_PCT.test(resolvedValue)) {\n const [, val, unit] = resolvedValue.match(\n REG_TYPE_DIM_PCT\n ) as MatchedRegExp;\n resolvedValue = `${roundToPrecision(Number(val), HEX)}${unit}`;\n }\n // wrap with `calc()`\n if (\n resolvedValue &&\n !REG_FN_VAR_START.test(resolvedValue) &&\n format === VAL_SPEC\n ) {\n resolvedValue = `calc(${resolvedValue})`;\n }\n }\n if (format === VAL_SPEC) {\n if (/\\s[-+*/]\\s/.test(resolvedValue) && !resolvedValue.includes('NaN')) {\n resolvedValue = serializeCalc(resolvedValue, opt);\n } else if (REG_FN_CALC_NUM.test(resolvedValue)) {\n const [, val] = resolvedValue.match(REG_FN_CALC_NUM) as MatchedRegExp;\n resolvedValue = `calc(${roundToPrecision(Number(val), HEX)})`;\n }\n }\n setCache(cacheKey, resolvedValue);\n return resolvedValue;\n};\n"],"names":["l","value","resolvedValue"],"mappings":"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"}
\ No newline at end of file diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-gradient.d.ts b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-gradient.d.ts new file mode 100644 index 0000000..cf0b891 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-gradient.d.ts @@ -0,0 +1,79 @@ +import { Options } from './typedef.js'; +/** + * @type ColorStopList - list of color stops + */ +type ColorStopList = [string, string, ...string[]]; +/** + * @typedef ValidateGradientLine - validate gradient line + * @property line - gradient line + * @property valid - result + */ +interface ValidateGradientLine { + line: string; + valid: boolean; +} +/** + * @typedef ValidateColorStops - validate color stops + * @property colorStops - list of color stops + * @property valid - result + */ +interface ValidateColorStops { + colorStops: string[]; + valid: boolean; +} +/** + * @typedef Gradient - parsed CSS gradient + * @property value - input value + * @property type - gradient type + * @property [gradientLine] - gradient line + * @property colorStopList - list of color stops + */ +interface Gradient { + value: string; + type: string; + gradientLine?: string; + colorStopList: ColorStopList; +} +/** + * get gradient type + * @param value - gradient value + * @returns gradient type + */ +export declare const getGradientType: (value: string) => string; +/** + * validate gradient line + * @param value - gradient line value + * @param type - gradient type + * @returns result + */ +export declare const validateGradientLine: (value: string, type: string) => ValidateGradientLine; +/** + * validate color stop list + * @param list + * @param type + * @param [opt] + * @returns result + */ +export declare const validateColorStopList: (list: string[], type: string, opt?: Options) => ValidateColorStops; +/** + * parse CSS gradient + * @param value - gradient value + * @param [opt] - options + * @returns parsed result + */ +export declare const parseGradient: (value: string, opt?: Options) => Gradient | null; +/** + * resolve CSS gradient + * @param value - CSS value + * @param [opt] - options + * @returns result + */ +export declare const resolveGradient: (value: string, opt?: Options) => string; +/** + * is CSS gradient + * @param value - CSS value + * @param [opt] - options + * @returns result + */ +export declare const isGradient: (value: string, opt?: Options) => boolean; +export {}; diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-gradient.js b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-gradient.js new file mode 100644 index 0000000..fdfb888 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-gradient.js @@ -0,0 +1,261 @@ +import { createCacheKey, getCache, CacheItem, setCache } from "./cache.js"; +import { resolveColor } from "./resolve.js"; +import { isString } from "./common.js"; +import { splitValue, isColor } from "./util.js"; +import { VAL_COMP, VAL_SPEC, NUM, ANGLE, PCT, LENGTH, CS_RECT, CS_HUE, NUM_POSITIVE } from "./constant.js"; +const NAMESPACE = "css-gradient"; +const DIM_ANGLE = `${NUM}(?:${ANGLE})`; +const DIM_ANGLE_PCT = `${DIM_ANGLE}|${PCT}`; +const DIM_LEN = `${NUM}(?:${LENGTH})|0`; +const DIM_LEN_PCT = `${DIM_LEN}|${PCT}`; +const DIM_LEN_PCT_POSI = `${NUM_POSITIVE}(?:${LENGTH}|%)|0`; +const DIM_LEN_POSI = `${NUM_POSITIVE}(?:${LENGTH})|0`; +const CTR = "center"; +const L_R = "left|right"; +const T_B = "top|bottom"; +const S_E = "start|end"; +const AXIS_X = `${L_R}|x-(?:${S_E})`; +const AXIS_Y = `${T_B}|y-(?:${S_E})`; +const BLOCK = `block-(?:${S_E})`; +const INLINE = `inline-(?:${S_E})`; +const POS_1 = `${CTR}|${AXIS_X}|${AXIS_Y}|${BLOCK}|${INLINE}|${DIM_LEN_PCT}`; +const POS_2 = [ + `(?:${CTR}|${AXIS_X})\\s+(?:${CTR}|${AXIS_Y})`, + `(?:${CTR}|${AXIS_Y})\\s+(?:${CTR}|${AXIS_X})`, + `(?:${CTR}|${AXIS_X}|${DIM_LEN_PCT})\\s+(?:${CTR}|${AXIS_Y}|${DIM_LEN_PCT})`, + `(?:${CTR}|${BLOCK})\\s+(?:${CTR}|${INLINE})`, + `(?:${CTR}|${INLINE})\\s+(?:${CTR}|${BLOCK})`, + `(?:${CTR}|${S_E})\\s+(?:${CTR}|${S_E})` +].join("|"); +const POS_4 = [ + `(?:${AXIS_X})\\s+(?:${DIM_LEN_PCT})\\s+(?:${AXIS_Y})\\s+(?:${DIM_LEN_PCT})`, + `(?:${AXIS_Y})\\s+(?:${DIM_LEN_PCT})\\s+(?:${AXIS_X})\\s+(?:${DIM_LEN_PCT})`, + `(?:${BLOCK})\\s+(?:${DIM_LEN_PCT})\\s+(?:${INLINE})\\s+(?:${DIM_LEN_PCT})`, + `(?:${INLINE})\\s+(?:${DIM_LEN_PCT})\\s+(?:${BLOCK})\\s+(?:${DIM_LEN_PCT})`, + `(?:${S_E})\\s+(?:${DIM_LEN_PCT})\\s+(?:${S_E})\\s+(?:${DIM_LEN_PCT})` +].join("|"); +const RAD_EXTENT = "(?:clos|farth)est-(?:corner|side)"; +const RAD_SIZE = [ + `${RAD_EXTENT}(?:\\s+${RAD_EXTENT})?`, + `${DIM_LEN_POSI}`, + `(?:${DIM_LEN_PCT_POSI})\\s+(?:${DIM_LEN_PCT_POSI})` +].join("|"); +const RAD_SHAPE = "circle|ellipse"; +const FROM_ANGLE = `from\\s+${DIM_ANGLE}`; +const AT_POSITION = `at\\s+(?:${POS_1}|${POS_2}|${POS_4})`; +const TO_SIDE_CORNER = `to\\s+(?:(?:${L_R})(?:\\s(?:${T_B}))?|(?:${T_B})(?:\\s(?:${L_R}))?)`; +const IN_COLOR_SPACE = `in\\s+(?:${CS_RECT}|${CS_HUE})`; +const REG_GRAD = /^(?:repeating-)?(?:conic|linear|radial)-gradient\(/; +const REG_GRAD_CAPT = /^((?:repeating-)?(?:conic|linear|radial)-gradient)\(/; +const getGradientType = (value) => { + if (isString(value)) { + value = value.trim(); + if (REG_GRAD.test(value)) { + const [, type] = value.match(REG_GRAD_CAPT); + return type; + } + } + return ""; +}; +const validateGradientLine = (value, type) => { + if (isString(value) && isString(type)) { + value = value.trim(); + type = type.trim(); + let lineSyntax = ""; + const defaultValues = []; + if (/^(?:repeating-)?linear-gradient$/.test(type)) { + lineSyntax = [ + `(?:${DIM_ANGLE}|${TO_SIDE_CORNER})(?:\\s+${IN_COLOR_SPACE})?`, + `${IN_COLOR_SPACE}(?:\\s+(?:${DIM_ANGLE}|${TO_SIDE_CORNER}))?` + ].join("|"); + defaultValues.push(/to\s+bottom/); + } else if (/^(?:repeating-)?radial-gradient$/.test(type)) { + lineSyntax = [ + `(?:${RAD_SHAPE})(?:\\s+(?:${RAD_SIZE}))?(?:\\s+${AT_POSITION})?(?:\\s+${IN_COLOR_SPACE})?`, + `(?:${RAD_SIZE})(?:\\s+(?:${RAD_SHAPE}))?(?:\\s+${AT_POSITION})?(?:\\s+${IN_COLOR_SPACE})?`, + `${AT_POSITION}(?:\\s+${IN_COLOR_SPACE})?`, + `${IN_COLOR_SPACE}(?:\\s+${RAD_SHAPE})(?:\\s+(?:${RAD_SIZE}))?(?:\\s+${AT_POSITION})?`, + `${IN_COLOR_SPACE}(?:\\s+${RAD_SIZE})(?:\\s+(?:${RAD_SHAPE}))?(?:\\s+${AT_POSITION})?`, + `${IN_COLOR_SPACE}(?:\\s+${AT_POSITION})?` + ].join("|"); + defaultValues.push(/ellipse/, /farthest-corner/, /at\s+center/); + } else if (/^(?:repeating-)?conic-gradient$/.test(type)) { + lineSyntax = [ + `${FROM_ANGLE}(?:\\s+${AT_POSITION})?(?:\\s+${IN_COLOR_SPACE})?`, + `${AT_POSITION}(?:\\s+${IN_COLOR_SPACE})?`, + `${IN_COLOR_SPACE}(?:\\s+${FROM_ANGLE})?(?:\\s+${AT_POSITION})?` + ].join("|"); + defaultValues.push(/at\s+center/); + } + if (lineSyntax) { + const reg = new RegExp(`^(?:${lineSyntax})$`); + const valid = reg.test(value); + if (valid) { + let line = value; + for (const defaultValue of defaultValues) { + line = line.replace(defaultValue, ""); + } + line = line.replace(/\s{2,}/g, " ").trim(); + return { + line, + valid + }; + } + return { + valid, + line: value + }; + } + } + return { + line: value, + valid: false + }; +}; +const validateColorStopList = (list, type, opt = {}) => { + if (Array.isArray(list) && list.length > 1) { + const dimension = /^(?:repeating-)?conic-gradient$/.test(type) ? DIM_ANGLE_PCT : DIM_LEN_PCT; + const regColorHint = new RegExp(`^(?:${dimension})$`); + const regDimension = new RegExp(`(?:\\s+(?:${dimension})){1,2}$`); + const valueTypes = []; + const valueList = []; + for (const item of list) { + if (isString(item)) { + if (regColorHint.test(item)) { + valueTypes.push("hint"); + valueList.push(item); + } else { + const itemColor = item.replace(regDimension, ""); + if (isColor(itemColor, { format: VAL_SPEC })) { + const resolvedColor = resolveColor(itemColor, opt); + valueTypes.push("color"); + valueList.push(item.replace(itemColor, resolvedColor)); + } else { + return { + colorStops: list, + valid: false + }; + } + } + } + } + const valid = /^color(?:,(?:hint,)?color)+$/.test(valueTypes.join(",")); + return { + valid, + colorStops: valueList + }; + } + return { + colorStops: list, + valid: false + }; +}; +const parseGradient = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + const cacheKey = createCacheKey( + { + namespace: NAMESPACE, + name: "parseGradient", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return null; + } + return cachedResult.item; + } + const type = getGradientType(value); + const gradValue = value.replace(REG_GRAD, "").replace(/\)$/, ""); + if (type && gradValue) { + const [lineOrColorStop = "", ...itemList] = splitValue(gradValue, { + delimiter: "," + }); + const dimension = /^(?:repeating-)?conic-gradient$/.test(type) ? DIM_ANGLE_PCT : DIM_LEN_PCT; + const regDimension = new RegExp(`(?:\\s+(?:${dimension})){1,2}$`); + let colorStop = ""; + if (regDimension.test(lineOrColorStop)) { + const itemColor = lineOrColorStop.replace(regDimension, ""); + if (isColor(itemColor, { format: VAL_SPEC })) { + const resolvedColor = resolveColor(itemColor, opt); + colorStop = lineOrColorStop.replace(itemColor, resolvedColor); + } + } else if (isColor(lineOrColorStop, { format: VAL_SPEC })) { + colorStop = resolveColor(lineOrColorStop, opt); + } + if (colorStop) { + itemList.unshift(colorStop); + const { colorStops, valid } = validateColorStopList( + itemList, + type, + opt + ); + if (valid) { + const res = { + value, + type, + colorStopList: colorStops + }; + setCache(cacheKey, res); + return res; + } + } else if (itemList.length > 1) { + const { line: gradientLine, valid: validLine } = validateGradientLine( + lineOrColorStop, + type + ); + const { colorStops, valid: validColorStops } = validateColorStopList( + itemList, + type, + opt + ); + if (validLine && validColorStops) { + const res = { + value, + type, + gradientLine, + colorStopList: colorStops + }; + setCache(cacheKey, res); + return res; + } + } + } + setCache(cacheKey, null); + return null; + } + return null; +}; +const resolveGradient = (value, opt = {}) => { + const { format = VAL_COMP } = opt; + const gradient = parseGradient(value, opt); + if (gradient) { + const { type = "", gradientLine = "", colorStopList = [] } = gradient; + if (type && Array.isArray(colorStopList) && colorStopList.length > 1) { + if (gradientLine) { + return `${type}(${gradientLine}, ${colorStopList.join(", ")})`; + } + return `${type}(${colorStopList.join(", ")})`; + } + } + if (format === VAL_SPEC) { + return ""; + } + return "none"; +}; +const isGradient = (value, opt = {}) => { + const gradient = parseGradient(value, opt); + return gradient !== null; +}; +export { + getGradientType, + isGradient, + parseGradient, + resolveGradient, + validateColorStopList, + validateGradientLine +}; +//# sourceMappingURL=css-gradient.js.map diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-gradient.js.map b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-gradient.js.map new file mode 100644 index 0000000..323ebd9 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-gradient.js.map @@ -0,0 +1 @@ +{"version":3,"file":"css-gradient.js","sources":["../../../src/js/css-gradient.ts"],"sourcesContent":["/**\n * css-gradient\n */\n\nimport { CacheItem, createCacheKey, getCache, setCache } from './cache';\nimport { resolveColor } from './resolve';\nimport { isString } from './common';\nimport { MatchedRegExp, Options } from './typedef';\nimport { isColor, splitValue } from './util';\n\n/* constants */\nimport {\n ANGLE,\n CS_HUE,\n CS_RECT,\n LENGTH,\n NUM,\n NUM_POSITIVE,\n PCT,\n VAL_COMP,\n VAL_SPEC\n} from './constant';\nconst NAMESPACE = 'css-gradient';\nconst DIM_ANGLE = `${NUM}(?:${ANGLE})`;\nconst DIM_ANGLE_PCT = `${DIM_ANGLE}|${PCT}`;\nconst DIM_LEN = `${NUM}(?:${LENGTH})|0`;\nconst DIM_LEN_PCT = `${DIM_LEN}|${PCT}`;\nconst DIM_LEN_PCT_POSI = `${NUM_POSITIVE}(?:${LENGTH}|%)|0`;\nconst DIM_LEN_POSI = `${NUM_POSITIVE}(?:${LENGTH})|0`;\nconst CTR = 'center';\nconst L_R = 'left|right';\nconst T_B = 'top|bottom';\nconst S_E = 'start|end';\nconst AXIS_X = `${L_R}|x-(?:${S_E})`;\nconst AXIS_Y = `${T_B}|y-(?:${S_E})`;\nconst BLOCK = `block-(?:${S_E})`;\nconst INLINE = `inline-(?:${S_E})`;\nconst POS_1 = `${CTR}|${AXIS_X}|${AXIS_Y}|${BLOCK}|${INLINE}|${DIM_LEN_PCT}`;\nconst POS_2 = [\n `(?:${CTR}|${AXIS_X})\\\\s+(?:${CTR}|${AXIS_Y})`,\n `(?:${CTR}|${AXIS_Y})\\\\s+(?:${CTR}|${AXIS_X})`,\n `(?:${CTR}|${AXIS_X}|${DIM_LEN_PCT})\\\\s+(?:${CTR}|${AXIS_Y}|${DIM_LEN_PCT})`,\n `(?:${CTR}|${BLOCK})\\\\s+(?:${CTR}|${INLINE})`,\n `(?:${CTR}|${INLINE})\\\\s+(?:${CTR}|${BLOCK})`,\n `(?:${CTR}|${S_E})\\\\s+(?:${CTR}|${S_E})`\n].join('|');\nconst POS_4 = [\n `(?:${AXIS_X})\\\\s+(?:${DIM_LEN_PCT})\\\\s+(?:${AXIS_Y})\\\\s+(?:${DIM_LEN_PCT})`,\n `(?:${AXIS_Y})\\\\s+(?:${DIM_LEN_PCT})\\\\s+(?:${AXIS_X})\\\\s+(?:${DIM_LEN_PCT})`,\n `(?:${BLOCK})\\\\s+(?:${DIM_LEN_PCT})\\\\s+(?:${INLINE})\\\\s+(?:${DIM_LEN_PCT})`,\n `(?:${INLINE})\\\\s+(?:${DIM_LEN_PCT})\\\\s+(?:${BLOCK})\\\\s+(?:${DIM_LEN_PCT})`,\n `(?:${S_E})\\\\s+(?:${DIM_LEN_PCT})\\\\s+(?:${S_E})\\\\s+(?:${DIM_LEN_PCT})`\n].join('|');\nconst RAD_EXTENT = '(?:clos|farth)est-(?:corner|side)';\nconst RAD_SIZE = [\n `${RAD_EXTENT}(?:\\\\s+${RAD_EXTENT})?`,\n `${DIM_LEN_POSI}`,\n `(?:${DIM_LEN_PCT_POSI})\\\\s+(?:${DIM_LEN_PCT_POSI})`\n].join('|');\nconst RAD_SHAPE = 'circle|ellipse';\nconst FROM_ANGLE = `from\\\\s+${DIM_ANGLE}`;\nconst AT_POSITION = `at\\\\s+(?:${POS_1}|${POS_2}|${POS_4})`;\nconst TO_SIDE_CORNER = `to\\\\s+(?:(?:${L_R})(?:\\\\s(?:${T_B}))?|(?:${T_B})(?:\\\\s(?:${L_R}))?)`;\nconst IN_COLOR_SPACE = `in\\\\s+(?:${CS_RECT}|${CS_HUE})`;\n\n/* type definitions */\n/**\n * @type ColorStopList - list of color stops\n */\ntype ColorStopList = [string, string, ...string[]];\n\n/**\n * @typedef ValidateGradientLine - validate gradient line\n * @property line - gradient line\n * @property valid - result\n */\ninterface ValidateGradientLine {\n line: string;\n valid: boolean;\n}\n\n/**\n * @typedef ValidateColorStops - validate color stops\n * @property colorStops - list of color stops\n * @property valid - result\n */\ninterface ValidateColorStops {\n colorStops: string[];\n valid: boolean;\n}\n\n/**\n * @typedef Gradient - parsed CSS gradient\n * @property value - input value\n * @property type - gradient type\n * @property [gradientLine] - gradient line\n * @property colorStopList - list of color stops\n */\ninterface Gradient {\n value: string;\n type: string;\n gradientLine?: string;\n colorStopList: ColorStopList;\n}\n\n/* regexp */\nconst REG_GRAD = /^(?:repeating-)?(?:conic|linear|radial)-gradient\\(/;\nconst REG_GRAD_CAPT = /^((?:repeating-)?(?:conic|linear|radial)-gradient)\\(/;\n\n/**\n * get gradient type\n * @param value - gradient value\n * @returns gradient type\n */\nexport const getGradientType = (value: string): string => {\n if (isString(value)) {\n value = value.trim();\n if (REG_GRAD.test(value)) {\n const [, type] = value.match(REG_GRAD_CAPT) as MatchedRegExp;\n return type;\n }\n }\n return '';\n};\n\n/**\n * validate gradient line\n * @param value - gradient line value\n * @param type - gradient type\n * @returns result\n */\nexport const validateGradientLine = (\n value: string,\n type: string\n): ValidateGradientLine => {\n if (isString(value) && isString(type)) {\n value = value.trim();\n type = type.trim();\n let lineSyntax = '';\n const defaultValues = [];\n if (/^(?:repeating-)?linear-gradient$/.test(type)) {\n /*\n * <linear-gradient-line> = [\n * [ <angle> | to <side-or-corner> ] ||\n * <color-interpolation-method>\n * ]\n */\n lineSyntax = [\n `(?:${DIM_ANGLE}|${TO_SIDE_CORNER})(?:\\\\s+${IN_COLOR_SPACE})?`,\n `${IN_COLOR_SPACE}(?:\\\\s+(?:${DIM_ANGLE}|${TO_SIDE_CORNER}))?`\n ].join('|');\n defaultValues.push(/to\\s+bottom/);\n } else if (/^(?:repeating-)?radial-gradient$/.test(type)) {\n /*\n * <radial-gradient-line> = [\n * [ [ <radial-shape> || <radial-size> ]? [ at <position> ]? ] ||\n * <color-interpolation-method>]?\n */\n lineSyntax = [\n `(?:${RAD_SHAPE})(?:\\\\s+(?:${RAD_SIZE}))?(?:\\\\s+${AT_POSITION})?(?:\\\\s+${IN_COLOR_SPACE})?`,\n `(?:${RAD_SIZE})(?:\\\\s+(?:${RAD_SHAPE}))?(?:\\\\s+${AT_POSITION})?(?:\\\\s+${IN_COLOR_SPACE})?`,\n `${AT_POSITION}(?:\\\\s+${IN_COLOR_SPACE})?`,\n `${IN_COLOR_SPACE}(?:\\\\s+${RAD_SHAPE})(?:\\\\s+(?:${RAD_SIZE}))?(?:\\\\s+${AT_POSITION})?`,\n `${IN_COLOR_SPACE}(?:\\\\s+${RAD_SIZE})(?:\\\\s+(?:${RAD_SHAPE}))?(?:\\\\s+${AT_POSITION})?`,\n `${IN_COLOR_SPACE}(?:\\\\s+${AT_POSITION})?`\n ].join('|');\n defaultValues.push(/ellipse/, /farthest-corner/, /at\\s+center/);\n } else if (/^(?:repeating-)?conic-gradient$/.test(type)) {\n /*\n * <conic-gradient-line> = [\n * [ [ from <angle> ]? [ at <position> ]? ] ||\n * <color-interpolation-method>\n * ]\n */\n lineSyntax = [\n `${FROM_ANGLE}(?:\\\\s+${AT_POSITION})?(?:\\\\s+${IN_COLOR_SPACE})?`,\n `${AT_POSITION}(?:\\\\s+${IN_COLOR_SPACE})?`,\n `${IN_COLOR_SPACE}(?:\\\\s+${FROM_ANGLE})?(?:\\\\s+${AT_POSITION})?`\n ].join('|');\n defaultValues.push(/at\\s+center/);\n }\n if (lineSyntax) {\n const reg = new RegExp(`^(?:${lineSyntax})$`);\n const valid = reg.test(value);\n if (valid) {\n let line = value;\n for (const defaultValue of defaultValues) {\n line = line.replace(defaultValue, '');\n }\n line = line.replace(/\\s{2,}/g, ' ').trim();\n return {\n line,\n valid\n };\n }\n return {\n valid,\n line: value\n };\n }\n }\n return {\n line: value,\n valid: false\n };\n};\n\n/**\n * validate color stop list\n * @param list\n * @param type\n * @param [opt]\n * @returns result\n */\nexport const validateColorStopList = (\n list: string[],\n type: string,\n opt: Options = {}\n): ValidateColorStops => {\n if (Array.isArray(list) && list.length > 1) {\n const dimension = /^(?:repeating-)?conic-gradient$/.test(type)\n ? DIM_ANGLE_PCT\n : DIM_LEN_PCT;\n const regColorHint = new RegExp(`^(?:${dimension})$`);\n const regDimension = new RegExp(`(?:\\\\s+(?:${dimension})){1,2}$`);\n const valueTypes = [];\n const valueList = [];\n for (const item of list) {\n if (isString(item)) {\n if (regColorHint.test(item)) {\n valueTypes.push('hint');\n valueList.push(item);\n } else {\n const itemColor = item.replace(regDimension, '');\n if (isColor(itemColor, { format: VAL_SPEC })) {\n const resolvedColor = resolveColor(itemColor, opt) as string;\n valueTypes.push('color');\n valueList.push(item.replace(itemColor, resolvedColor));\n } else {\n return {\n colorStops: list,\n valid: false\n };\n }\n }\n }\n }\n const valid = /^color(?:,(?:hint,)?color)+$/.test(valueTypes.join(','));\n return {\n valid,\n colorStops: valueList\n };\n }\n return {\n colorStops: list,\n valid: false\n };\n};\n\n/**\n * parse CSS gradient\n * @param value - gradient value\n * @param [opt] - options\n * @returns parsed result\n */\nexport const parseGradient = (\n value: string,\n opt: Options = {}\n): Gradient | null => {\n if (isString(value)) {\n value = value.trim();\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'parseGradient',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return null;\n }\n return cachedResult.item as Gradient;\n }\n const type = getGradientType(value);\n const gradValue = value.replace(REG_GRAD, '').replace(/\\)$/, '');\n if (type && gradValue) {\n const [lineOrColorStop = '', ...itemList] = splitValue(gradValue, {\n delimiter: ','\n });\n const dimension = /^(?:repeating-)?conic-gradient$/.test(type)\n ? DIM_ANGLE_PCT\n : DIM_LEN_PCT;\n const regDimension = new RegExp(`(?:\\\\s+(?:${dimension})){1,2}$`);\n let colorStop = '';\n if (regDimension.test(lineOrColorStop)) {\n const itemColor = lineOrColorStop.replace(regDimension, '');\n if (isColor(itemColor, { format: VAL_SPEC })) {\n const resolvedColor = resolveColor(itemColor, opt) as string;\n colorStop = lineOrColorStop.replace(itemColor, resolvedColor);\n }\n } else if (isColor(lineOrColorStop, { format: VAL_SPEC })) {\n colorStop = resolveColor(lineOrColorStop, opt) as string;\n }\n if (colorStop) {\n itemList.unshift(colorStop);\n const { colorStops, valid } = validateColorStopList(\n itemList,\n type,\n opt\n );\n if (valid) {\n const res: Gradient = {\n value,\n type,\n colorStopList: colorStops as ColorStopList\n };\n setCache(cacheKey, res);\n return res;\n }\n } else if (itemList.length > 1) {\n const { line: gradientLine, valid: validLine } = validateGradientLine(\n lineOrColorStop,\n type\n );\n const { colorStops, valid: validColorStops } = validateColorStopList(\n itemList,\n type,\n opt\n );\n if (validLine && validColorStops) {\n const res: Gradient = {\n value,\n type,\n gradientLine,\n colorStopList: colorStops as ColorStopList\n };\n setCache(cacheKey, res);\n return res;\n }\n }\n }\n setCache(cacheKey, null);\n return null;\n }\n return null;\n};\n\n/**\n * resolve CSS gradient\n * @param value - CSS value\n * @param [opt] - options\n * @returns result\n */\nexport const resolveGradient = (value: string, opt: Options = {}): string => {\n const { format = VAL_COMP } = opt;\n const gradient = parseGradient(value, opt);\n if (gradient) {\n const { type = '', gradientLine = '', colorStopList = [] } = gradient;\n if (type && Array.isArray(colorStopList) && colorStopList.length > 1) {\n if (gradientLine) {\n return `${type}(${gradientLine}, ${colorStopList.join(', ')})`;\n }\n return `${type}(${colorStopList.join(', ')})`;\n }\n }\n if (format === VAL_SPEC) {\n return '';\n }\n return 'none';\n};\n\n/**\n * is CSS gradient\n * @param value - CSS value\n * @param [opt] - options\n * @returns result\n */\nexport const isGradient = (value: string, opt: Options = {}): boolean => {\n const gradient = parseGradient(value, opt);\n return gradient !== null;\n};\n"],"names":[],"mappings":"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"}
\ No newline at end of file diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-var.d.ts b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-var.d.ts new file mode 100644 index 0000000..9072353 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-var.d.ts @@ -0,0 +1,31 @@ +import { CSSToken } from '@csstools/css-tokenizer'; +import { NullObject } from './cache.js'; +import { Options } from './typedef.js'; +/** + * resolve custom property + * @param tokens - CSS tokens + * @param [opt] - options + * @returns result - [tokens, resolvedValue] + */ +export declare function resolveCustomProperty(tokens: CSSToken[], opt?: Options): [CSSToken[], string]; +/** + * parse tokens + * @param tokens - CSS tokens + * @param [opt] - options + * @returns parsed tokens + */ +export declare function parseTokens(tokens: CSSToken[], opt?: Options): string[] | NullObject; +/** + * resolve CSS var() + * @param value - CSS value including var() + * @param [opt] - options + * @returns resolved value + */ +export declare function resolveVar(value: string, opt?: Options): string | NullObject; +/** + * CSS var() + * @param value - CSS value including var() + * @param [opt] - options + * @returns resolved value + */ +export declare const cssVar: (value: string, opt?: Options) => string; diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-var.js b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-var.js new file mode 100644 index 0000000..4260f84 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-var.js @@ -0,0 +1,195 @@ +import { TokenType, tokenize } from "@csstools/css-tokenizer"; +import { createCacheKey, getCache, CacheItem, setCache, NullObject } from "./cache.js"; +import { isString } from "./common.js"; +import { cssCalc } from "./css-calc.js"; +import { isColor } from "./util.js"; +import { VAL_SPEC, SYN_FN_VAR, FN_VAR, SYN_FN_CALC } from "./constant.js"; +const { + CloseParen: PAREN_CLOSE, + Comment: COMMENT, + EOF, + Ident: IDENT, + Whitespace: W_SPACE +} = TokenType; +const NAMESPACE = "css-var"; +const REG_FN_CALC = new RegExp(SYN_FN_CALC); +const REG_FN_VAR = new RegExp(SYN_FN_VAR); +function resolveCustomProperty(tokens, opt = {}) { + if (!Array.isArray(tokens)) { + throw new TypeError(`${tokens} is not an array.`); + } + const { customProperty = {} } = opt; + const items = []; + while (tokens.length) { + const token = tokens.shift(); + if (!Array.isArray(token)) { + throw new TypeError(`${token} is not an array.`); + } + const [type, value] = token; + if (type === PAREN_CLOSE) { + break; + } + if (value === FN_VAR) { + const [restTokens, item] = resolveCustomProperty(tokens, opt); + tokens = restTokens; + if (item) { + items.push(item); + } + } else if (type === IDENT) { + if (value.startsWith("--")) { + let item; + if (Object.hasOwn(customProperty, value)) { + item = customProperty[value]; + } else if (typeof customProperty.callback === "function") { + item = customProperty.callback(value); + } + if (item) { + items.push(item); + } + } else if (value) { + items.push(value); + } + } + } + let resolveAsColor = false; + if (items.length > 1) { + const lastValue = items[items.length - 1]; + resolveAsColor = isColor(lastValue); + } + let resolvedValue = ""; + for (let item of items) { + item = item.trim(); + if (REG_FN_VAR.test(item)) { + const resolvedItem = resolveVar(item, opt); + if (isString(resolvedItem)) { + if (resolveAsColor) { + if (isColor(resolvedItem)) { + resolvedValue = resolvedItem; + } + } else { + resolvedValue = resolvedItem; + } + } + } else if (REG_FN_CALC.test(item)) { + item = cssCalc(item, opt); + if (resolveAsColor) { + if (isColor(item)) { + resolvedValue = item; + } + } else { + resolvedValue = item; + } + } else if (item && !/^(?:inherit|initial|revert(?:-layer)?|unset)$/.test(item)) { + if (resolveAsColor) { + if (isColor(item)) { + resolvedValue = item; + } + } else { + resolvedValue = item; + } + } + if (resolvedValue) { + break; + } + } + return [tokens, resolvedValue]; +} +function parseTokens(tokens, opt = {}) { + const res = []; + while (tokens.length) { + const token = tokens.shift(); + const [type = "", value = ""] = token; + if (value === FN_VAR) { + const [restTokens, resolvedValue] = resolveCustomProperty(tokens, opt); + if (!resolvedValue) { + return new NullObject(); + } + tokens = restTokens; + res.push(resolvedValue); + } else { + switch (type) { + case PAREN_CLOSE: { + if (res.length) { + const lastValue = res[res.length - 1]; + if (lastValue === " ") { + res.splice(-1, 1, value); + } else { + res.push(value); + } + } else { + res.push(value); + } + break; + } + case W_SPACE: { + if (res.length) { + const lastValue = res[res.length - 1]; + if (isString(lastValue) && !lastValue.endsWith("(") && lastValue !== " ") { + res.push(value); + } + } + break; + } + default: { + if (type !== COMMENT && type !== EOF) { + res.push(value); + } + } + } + } + } + return res; +} +function resolveVar(value, opt = {}) { + const { format = "" } = opt; + if (isString(value)) { + if (!REG_FN_VAR.test(value) || format === VAL_SPEC) { + return value; + } + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE, + name: "resolveVar", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return cachedResult; + } + return cachedResult.item; + } + const tokens = tokenize({ css: value }); + const values = parseTokens(tokens, opt); + if (Array.isArray(values)) { + let color = values.join(""); + if (REG_FN_CALC.test(color)) { + color = cssCalc(color, opt); + } + setCache(cacheKey, color); + return color; + } else { + setCache(cacheKey, null); + return new NullObject(); + } +} +const cssVar = (value, opt = {}) => { + const resolvedValue = resolveVar(value, opt); + if (isString(resolvedValue)) { + return resolvedValue; + } + return ""; +}; +export { + cssVar, + parseTokens, + resolveCustomProperty, + resolveVar +}; +//# sourceMappingURL=css-var.js.map diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-var.js.map b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-var.js.map new file mode 100644 index 0000000..f2759d7 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-var.js.map @@ -0,0 +1 @@ +{"version":3,"file":"css-var.js","sources":["../../../src/js/css-var.ts"],"sourcesContent":["/**\n * css-var\n */\n\nimport { CSSToken, TokenType, tokenize } from '@csstools/css-tokenizer';\nimport {\n CacheItem,\n NullObject,\n createCacheKey,\n getCache,\n setCache\n} from './cache';\nimport { isString } from './common';\nimport { cssCalc } from './css-calc';\nimport { isColor } from './util';\nimport { Options } from './typedef';\n\n/* constants */\nimport { FN_VAR, SYN_FN_CALC, SYN_FN_VAR, VAL_SPEC } from './constant';\nconst {\n CloseParen: PAREN_CLOSE,\n Comment: COMMENT,\n EOF,\n Ident: IDENT,\n Whitespace: W_SPACE\n} = TokenType;\nconst NAMESPACE = 'css-var';\n\n/* regexp */\nconst REG_FN_CALC = new RegExp(SYN_FN_CALC);\nconst REG_FN_VAR = new RegExp(SYN_FN_VAR);\n\n/**\n * resolve custom property\n * @param tokens - CSS tokens\n * @param [opt] - options\n * @returns result - [tokens, resolvedValue]\n */\nexport function resolveCustomProperty(\n tokens: CSSToken[],\n opt: Options = {}\n): [CSSToken[], string] {\n if (!Array.isArray(tokens)) {\n throw new TypeError(`${tokens} is not an array.`);\n }\n const { customProperty = {} } = opt;\n const items: string[] = [];\n while (tokens.length) {\n const token = tokens.shift();\n if (!Array.isArray(token)) {\n throw new TypeError(`${token} is not an array.`);\n }\n const [type, value] = token as [TokenType, string];\n // end of var()\n if (type === PAREN_CLOSE) {\n break;\n }\n // nested var()\n if (value === FN_VAR) {\n const [restTokens, item] = resolveCustomProperty(tokens, opt);\n tokens = restTokens;\n if (item) {\n items.push(item);\n }\n } else if (type === IDENT) {\n if (value.startsWith('--')) {\n let item;\n if (Object.hasOwn(customProperty, value)) {\n item = customProperty[value] as string;\n } else if (typeof customProperty.callback === 'function') {\n item = customProperty.callback(value);\n }\n if (item) {\n items.push(item);\n }\n } else if (value) {\n items.push(value);\n }\n }\n }\n let resolveAsColor = false;\n if (items.length > 1) {\n const lastValue = items[items.length - 1];\n resolveAsColor = isColor(lastValue);\n }\n let resolvedValue = '';\n for (let item of items) {\n item = item.trim();\n if (REG_FN_VAR.test(item)) {\n // recurse resolveVar()\n const resolvedItem = resolveVar(item, opt);\n if (isString(resolvedItem)) {\n if (resolveAsColor) {\n if (isColor(resolvedItem)) {\n resolvedValue = resolvedItem;\n }\n } else {\n resolvedValue = resolvedItem;\n }\n }\n } else if (REG_FN_CALC.test(item)) {\n item = cssCalc(item, opt);\n if (resolveAsColor) {\n if (isColor(item)) {\n resolvedValue = item;\n }\n } else {\n resolvedValue = item;\n }\n } else if (\n item &&\n !/^(?:inherit|initial|revert(?:-layer)?|unset)$/.test(item)\n ) {\n if (resolveAsColor) {\n if (isColor(item)) {\n resolvedValue = item;\n }\n } else {\n resolvedValue = item;\n }\n }\n if (resolvedValue) {\n break;\n }\n }\n return [tokens, resolvedValue];\n}\n\n/**\n * parse tokens\n * @param tokens - CSS tokens\n * @param [opt] - options\n * @returns parsed tokens\n */\nexport function parseTokens(\n tokens: CSSToken[],\n opt: Options = {}\n): string[] | NullObject {\n const res: string[] = [];\n while (tokens.length) {\n const token = tokens.shift();\n const [type = '', value = ''] = token as [TokenType, string];\n if (value === FN_VAR) {\n const [restTokens, resolvedValue] = resolveCustomProperty(tokens, opt);\n if (!resolvedValue) {\n return new NullObject();\n }\n tokens = restTokens;\n res.push(resolvedValue);\n } else {\n switch (type) {\n case PAREN_CLOSE: {\n if (res.length) {\n const lastValue = res[res.length - 1];\n if (lastValue === ' ') {\n res.splice(-1, 1, value);\n } else {\n res.push(value);\n }\n } else {\n res.push(value);\n }\n break;\n }\n case W_SPACE: {\n if (res.length) {\n const lastValue = res[res.length - 1];\n if (\n isString(lastValue) &&\n !lastValue.endsWith('(') &&\n lastValue !== ' '\n ) {\n res.push(value);\n }\n }\n break;\n }\n default: {\n if (type !== COMMENT && type !== EOF) {\n res.push(value);\n }\n }\n }\n }\n }\n return res;\n}\n\n/**\n * resolve CSS var()\n * @param value - CSS value including var()\n * @param [opt] - options\n * @returns resolved value\n */\nexport function resolveVar(\n value: string,\n opt: Options = {}\n): string | NullObject {\n const { format = '' } = opt;\n if (isString(value)) {\n if (!REG_FN_VAR.test(value) || format === VAL_SPEC) {\n return value;\n }\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'resolveVar',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return cachedResult as NullObject;\n }\n return cachedResult.item as string;\n }\n const tokens = tokenize({ css: value });\n const values = parseTokens(tokens, opt);\n if (Array.isArray(values)) {\n let color = values.join('');\n if (REG_FN_CALC.test(color)) {\n color = cssCalc(color, opt);\n }\n setCache(cacheKey, color);\n return color;\n } else {\n setCache(cacheKey, null);\n return new NullObject();\n }\n}\n\n/**\n * CSS var()\n * @param value - CSS value including var()\n * @param [opt] - options\n * @returns resolved value\n */\nexport const cssVar = (value: string, opt: Options = {}): string => {\n const resolvedValue = resolveVar(value, opt);\n if (isString(resolvedValue)) {\n return resolvedValue;\n }\n return '';\n};\n"],"names":[],"mappings":"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"}
\ No newline at end of file diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/relative-color.d.ts b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/relative-color.d.ts new file mode 100644 index 0000000..ed0abfc --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/relative-color.d.ts @@ -0,0 +1,29 @@ +import { CSSToken } from '@csstools/css-tokenizer'; +import { NullObject } from './cache.js'; +import { ColorChannels, Options, StringColorChannels } from './typedef.js'; +/** + * @type NumberOrStringColorChannels - color channel + */ +type NumberOrStringColorChannels = ColorChannels & StringColorChannels; +/** + * resolve relative color channels + * @param tokens - CSS tokens + * @param [opt] - options + * @returns resolved color channels + */ +export declare function resolveColorChannels(tokens: CSSToken[], opt?: Options): NumberOrStringColorChannels | NullObject; +/** + * extract origin color + * @param value - CSS color value + * @param [opt] - options + * @returns origin color value + */ +export declare function extractOriginColor(value: string, opt?: Options): string | NullObject; +/** + * resolve relative color + * @param value - CSS relative color value + * @param [opt] - options + * @returns resolved value + */ +export declare function resolveRelativeColor(value: string, opt?: Options): string | NullObject; +export {}; diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/relative-color.js b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/relative-color.js new file mode 100644 index 0000000..beef0ea --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/relative-color.js @@ -0,0 +1,535 @@ +import { SyntaxFlag, color } from "@csstools/css-color-parser"; +import { parseComponentValue } from "@csstools/css-parser-algorithms"; +import { TokenType, tokenize } from "@csstools/css-tokenizer"; +import { createCacheKey, getCache, CacheItem, NullObject, setCache } from "./cache.js"; +import { convertColorToRgb, NAMED_COLORS } from "./color.js"; +import { isString, isStringOrNumber } from "./common.js"; +import { resolveDimension, serializeCalc } from "./css-calc.js"; +import { resolveColor } from "./resolve.js"; +import { roundToPrecision, splitValue } from "./util.js"; +import { VAL_SPEC, FN_VAR, NONE, SYN_FN_VAR, FN_REL, FN_LIGHT_DARK, CS_LAB, CS_LCH, FN_REL_CAPT, SYN_COLOR_TYPE, SYN_MIX, SYN_FN_MATH_START } from "./constant.js"; +const { + CloseParen: PAREN_CLOSE, + Comment: COMMENT, + Delim: DELIM, + Dimension: DIM, + EOF, + Function: FUNC, + Ident: IDENT, + Number: NUM, + OpenParen: PAREN_OPEN, + Percentage: PCT, + Whitespace: W_SPACE +} = TokenType; +const { HasNoneKeywords: KEY_NONE } = SyntaxFlag; +const NAMESPACE = "relative-color"; +const OCT = 8; +const DEC = 10; +const HEX = 16; +const MAX_PCT = 100; +const MAX_RGB = 255; +const REG_COLOR_CAPT = new RegExp( + `^${FN_REL}(${SYN_COLOR_TYPE}|${SYN_MIX})\\s+` +); +const REG_CS_HSL = /(?:hsla?|hwb)$/; +const REG_CS_CIE = new RegExp(`^(?:${CS_LAB}|${CS_LCH})$`); +const REG_FN_CALC_SUM = /^(?:abs|sig?n|cos|tan)\(/; +const REG_FN_MATH_START = new RegExp(SYN_FN_MATH_START); +const REG_FN_REL = new RegExp(FN_REL); +const REG_FN_REL_CAPT = new RegExp(`^${FN_REL_CAPT}`); +const REG_FN_REL_START = new RegExp(`^${FN_REL}`); +const REG_FN_VAR = new RegExp(SYN_FN_VAR); +function resolveColorChannels(tokens, opt = {}) { + if (!Array.isArray(tokens)) { + throw new TypeError(`${tokens} is not an array.`); + } + const { colorSpace = "", format = "" } = opt; + const colorChannels = /* @__PURE__ */ new Map([ + ["color", ["r", "g", "b", "alpha"]], + ["hsl", ["h", "s", "l", "alpha"]], + ["hsla", ["h", "s", "l", "alpha"]], + ["hwb", ["h", "w", "b", "alpha"]], + ["lab", ["l", "a", "b", "alpha"]], + ["lch", ["l", "c", "h", "alpha"]], + ["oklab", ["l", "a", "b", "alpha"]], + ["oklch", ["l", "c", "h", "alpha"]], + ["rgb", ["r", "g", "b", "alpha"]], + ["rgba", ["r", "g", "b", "alpha"]] + ]); + const colorChannel = colorChannels.get(colorSpace); + if (!colorChannel) { + return new NullObject(); + } + const mathFunc = /* @__PURE__ */ new Set(); + const channels = [[], [], [], []]; + let i = 0; + let nest = 0; + let func = ""; + let precededPct = false; + while (tokens.length) { + const token = tokens.shift(); + if (!Array.isArray(token)) { + throw new TypeError(`${token} is not an array.`); + } + const [type, value, , , detail] = token; + const channel = channels[i]; + if (Array.isArray(channel)) { + switch (type) { + case DELIM: { + if (func) { + if ((value === "+" || value === "-") && precededPct && !REG_FN_CALC_SUM.test(func)) { + return new NullObject(); + } + precededPct = false; + channel.push(value); + } + break; + } + case DIM: { + if (!func || !REG_FN_CALC_SUM.test(func)) { + return new NullObject(); + } + const resolvedValue = resolveDimension(token, opt); + if (isString(resolvedValue)) { + channel.push(resolvedValue); + } else { + channel.push(value); + } + break; + } + case FUNC: { + channel.push(value); + func = value; + nest++; + if (REG_FN_MATH_START.test(value)) { + mathFunc.add(nest); + } + break; + } + case IDENT: { + if (!colorChannel.includes(value)) { + return new NullObject(); + } + channel.push(value); + if (!func) { + i++; + } + break; + } + case NUM: { + channel.push(Number(detail?.value)); + if (!func) { + i++; + } + break; + } + case PAREN_OPEN: { + channel.push(value); + nest++; + break; + } + case PAREN_CLOSE: { + if (func) { + const lastValue = channel[channel.length - 1]; + if (lastValue === " ") { + channel.splice(-1, 1, value); + } else { + channel.push(value); + } + if (mathFunc.has(nest)) { + mathFunc.delete(nest); + } + nest--; + if (nest === 0) { + func = ""; + i++; + } + } + break; + } + case PCT: { + if (!func) { + return new NullObject(); + } else if (!REG_FN_CALC_SUM.test(func)) { + const lastValue = channel.toReversed().find((v) => v !== " "); + if (lastValue === "+" || lastValue === "-") { + return new NullObject(); + } else if (lastValue === "*" || lastValue === "/") { + precededPct = false; + } else { + precededPct = true; + } + } + channel.push(Number(detail?.value) / MAX_PCT); + if (!func) { + i++; + } + break; + } + case W_SPACE: { + if (channel.length && func) { + const lastValue = channel[channel.length - 1]; + if (typeof lastValue === "number") { + channel.push(value); + } else if (isString(lastValue) && !lastValue.endsWith("(") && lastValue !== " ") { + channel.push(value); + } + } + break; + } + default: { + if (type !== COMMENT && type !== EOF && func) { + channel.push(value); + } + } + } + } + } + const channelValues = []; + for (const channel of channels) { + if (channel.length === 1) { + const [resolvedValue] = channel; + if (isStringOrNumber(resolvedValue)) { + channelValues.push(resolvedValue); + } + } else if (channel.length) { + const resolvedValue = serializeCalc(channel.join(""), { + format + }); + channelValues.push(resolvedValue); + } + } + return channelValues; +} +function extractOriginColor(value, opt = {}) { + const { colorScheme = "normal", currentColor = "", format = "" } = opt; + if (isString(value)) { + value = value.toLowerCase().trim(); + if (!value) { + return new NullObject(); + } + if (!REG_FN_REL_START.test(value)) { + return value; + } + } else { + return new NullObject(); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE, + name: "extractOriginColor", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return cachedResult; + } + return cachedResult.item; + } + if (/currentcolor/.test(value)) { + if (currentColor) { + value = value.replace(/currentcolor/g, currentColor); + } else { + setCache(cacheKey, null); + return new NullObject(); + } + } + let colorSpace = ""; + if (REG_FN_REL_CAPT.test(value)) { + [, colorSpace] = value.match(REG_FN_REL_CAPT); + } + opt.colorSpace = colorSpace; + if (value.includes(FN_LIGHT_DARK)) { + const colorParts = value.replace(new RegExp(`^${colorSpace}\\(`), "").replace(/\)$/, ""); + const [, originColor = ""] = splitValue(colorParts); + const specifiedOriginColor = resolveColor(originColor, { + colorScheme, + format: VAL_SPEC + }); + if (specifiedOriginColor === "") { + setCache(cacheKey, null); + return new NullObject(); + } + if (format === VAL_SPEC) { + value = value.replace(originColor, specifiedOriginColor); + } else { + const resolvedOriginColor = resolveColor(specifiedOriginColor, opt); + if (isString(resolvedOriginColor)) { + value = value.replace(originColor, resolvedOriginColor); + } + } + } + if (REG_COLOR_CAPT.test(value)) { + const [, originColor] = value.match(REG_COLOR_CAPT); + const [, restValue] = value.split(originColor); + if (/^[a-z]+$/.test(originColor)) { + if (!/^transparent$/.test(originColor) && !Object.hasOwn(NAMED_COLORS, originColor)) { + setCache(cacheKey, null); + return new NullObject(); + } + } else if (format === VAL_SPEC) { + const resolvedOriginColor = resolveColor(originColor, opt); + if (isString(resolvedOriginColor)) { + value = value.replace(originColor, resolvedOriginColor); + } + } + if (format === VAL_SPEC) { + const tokens = tokenize({ css: restValue }); + const channelValues = resolveColorChannels(tokens, opt); + if (channelValues instanceof NullObject) { + setCache(cacheKey, null); + return channelValues; + } + const [v1, v2, v3, v4] = channelValues; + let channelValue = ""; + if (isStringOrNumber(v4)) { + channelValue = ` ${v1} ${v2} ${v3} / ${v4})`; + } else { + channelValue = ` ${channelValues.join(" ")})`; + } + if (restValue !== channelValue) { + value = value.replace(restValue, channelValue); + } + } + } else { + const [, restValue] = value.split(REG_FN_REL_START); + const tokens = tokenize({ css: restValue }); + const originColor = []; + let nest = 0; + while (tokens.length) { + const [type, tokenValue] = tokens.shift(); + switch (type) { + case FUNC: + case PAREN_OPEN: { + originColor.push(tokenValue); + nest++; + break; + } + case PAREN_CLOSE: { + const lastValue = originColor[originColor.length - 1]; + if (lastValue === " ") { + originColor.splice(-1, 1, tokenValue); + } else if (isString(lastValue)) { + originColor.push(tokenValue); + } + nest--; + break; + } + case W_SPACE: { + const lastValue = originColor[originColor.length - 1]; + if (isString(lastValue) && !lastValue.endsWith("(") && lastValue !== " ") { + originColor.push(tokenValue); + } + break; + } + default: { + if (type !== COMMENT && type !== EOF) { + originColor.push(tokenValue); + } + } + } + if (nest === 0) { + break; + } + } + const resolvedOriginColor = resolveRelativeColor( + originColor.join("").trim(), + opt + ); + if (resolvedOriginColor instanceof NullObject) { + setCache(cacheKey, null); + return resolvedOriginColor; + } + const channelValues = resolveColorChannels(tokens, opt); + if (channelValues instanceof NullObject) { + setCache(cacheKey, null); + return channelValues; + } + const [v1, v2, v3, v4] = channelValues; + let channelValue = ""; + if (isStringOrNumber(v4)) { + channelValue = ` ${v1} ${v2} ${v3} / ${v4})`; + } else { + channelValue = ` ${channelValues.join(" ")})`; + } + value = value.replace(restValue, `${resolvedOriginColor}${channelValue}`); + } + setCache(cacheKey, value); + return value; +} +function resolveRelativeColor(value, opt = {}) { + const { format = "" } = opt; + if (isString(value)) { + if (REG_FN_VAR.test(value)) { + if (format === VAL_SPEC) { + return value; + } else { + throw new SyntaxError(`Unexpected token ${FN_VAR} found.`); + } + } else if (!REG_FN_REL.test(value)) { + return value; + } + value = value.toLowerCase().trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey = createCacheKey( + { + namespace: NAMESPACE, + name: "resolveRelativeColor", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return cachedResult; + } + return cachedResult.item; + } + const originColor = extractOriginColor(value, opt); + if (originColor instanceof NullObject) { + setCache(cacheKey, null); + return originColor; + } + value = originColor; + if (format === VAL_SPEC) { + if (value.startsWith("rgba(")) { + value = value.replace(/^rgba\(/, "rgb("); + } else if (value.startsWith("hsla(")) { + value = value.replace(/^hsla\(/, "hsl("); + } + return value; + } + const tokens = tokenize({ css: value }); + const components = parseComponentValue(tokens); + const parsedComponents = color(components); + if (!parsedComponents) { + setCache(cacheKey, null); + return new NullObject(); + } + const { + alpha: alphaComponent, + channels: channelsComponent, + colorNotation, + syntaxFlags + } = parsedComponents; + let alpha; + if (Number.isNaN(Number(alphaComponent))) { + if (syntaxFlags instanceof Set && syntaxFlags.has(KEY_NONE)) { + alpha = NONE; + } else { + alpha = 0; + } + } else { + alpha = roundToPrecision(Number(alphaComponent), OCT); + } + let v1; + let v2; + let v3; + [v1, v2, v3] = channelsComponent; + let resolvedValue; + if (REG_CS_CIE.test(colorNotation)) { + const hasNone = syntaxFlags instanceof Set && syntaxFlags.has(KEY_NONE); + if (Number.isNaN(v1)) { + if (hasNone) { + v1 = NONE; + } else { + v1 = 0; + } + } else { + v1 = roundToPrecision(v1, HEX); + } + if (Number.isNaN(v2)) { + if (hasNone) { + v2 = NONE; + } else { + v2 = 0; + } + } else { + v2 = roundToPrecision(v2, HEX); + } + if (Number.isNaN(v3)) { + if (hasNone) { + v3 = NONE; + } else { + v3 = 0; + } + } else { + v3 = roundToPrecision(v3, HEX); + } + if (alpha === 1) { + resolvedValue = `${colorNotation}(${v1} ${v2} ${v3})`; + } else { + resolvedValue = `${colorNotation}(${v1} ${v2} ${v3} / ${alpha})`; + } + } else if (REG_CS_HSL.test(colorNotation)) { + if (Number.isNaN(v1)) { + v1 = 0; + } + if (Number.isNaN(v2)) { + v2 = 0; + } + if (Number.isNaN(v3)) { + v3 = 0; + } + let [r, g, b] = convertColorToRgb( + `${colorNotation}(${v1} ${v2} ${v3} / ${alpha})` + ); + r = roundToPrecision(r / MAX_RGB, DEC); + g = roundToPrecision(g / MAX_RGB, DEC); + b = roundToPrecision(b / MAX_RGB, DEC); + if (alpha === 1) { + resolvedValue = `color(srgb ${r} ${g} ${b})`; + } else { + resolvedValue = `color(srgb ${r} ${g} ${b} / ${alpha})`; + } + } else { + const cs = colorNotation === "rgb" ? "srgb" : colorNotation; + const hasNone = syntaxFlags instanceof Set && syntaxFlags.has(KEY_NONE); + if (Number.isNaN(v1)) { + if (hasNone) { + v1 = NONE; + } else { + v1 = 0; + } + } else { + v1 = roundToPrecision(v1, DEC); + } + if (Number.isNaN(v2)) { + if (hasNone) { + v2 = NONE; + } else { + v2 = 0; + } + } else { + v2 = roundToPrecision(v2, DEC); + } + if (Number.isNaN(v3)) { + if (hasNone) { + v3 = NONE; + } else { + v3 = 0; + } + } else { + v3 = roundToPrecision(v3, DEC); + } + if (alpha === 1) { + resolvedValue = `color(${cs} ${v1} ${v2} ${v3})`; + } else { + resolvedValue = `color(${cs} ${v1} ${v2} ${v3} / ${alpha})`; + } + } + setCache(cacheKey, resolvedValue); + return resolvedValue; +} +export { + extractOriginColor, + resolveColorChannels, + resolveRelativeColor +}; +//# sourceMappingURL=relative-color.js.map diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/relative-color.js.map b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/relative-color.js.map new file mode 100644 index 0000000..e85e610 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/relative-color.js.map @@ -0,0 +1 @@ +{"version":3,"file":"relative-color.js","sources":["../../../src/js/relative-color.ts"],"sourcesContent":["/**\n * relative-color\n */\n\nimport { SyntaxFlag, color as colorParser } from '@csstools/css-color-parser';\nimport {\n ComponentValue,\n parseComponentValue\n} from '@csstools/css-parser-algorithms';\nimport { CSSToken, TokenType, tokenize } from '@csstools/css-tokenizer';\nimport {\n CacheItem,\n NullObject,\n createCacheKey,\n getCache,\n setCache\n} from './cache';\nimport { NAMED_COLORS, convertColorToRgb } from './color';\nimport { isString, isStringOrNumber } from './common';\nimport { resolveDimension, serializeCalc } from './css-calc';\nimport { resolveColor } from './resolve';\nimport { roundToPrecision, splitValue } from './util';\nimport {\n ColorChannels,\n MatchedRegExp,\n Options,\n StringColorChannels\n} from './typedef';\n\n/* constants */\nimport {\n CS_LAB,\n CS_LCH,\n FN_LIGHT_DARK,\n FN_REL,\n FN_REL_CAPT,\n FN_VAR,\n NONE,\n SYN_COLOR_TYPE,\n SYN_FN_MATH_START,\n SYN_FN_VAR,\n SYN_MIX,\n VAL_SPEC\n} from './constant';\nconst {\n CloseParen: PAREN_CLOSE,\n Comment: COMMENT,\n Delim: DELIM,\n Dimension: DIM,\n EOF,\n Function: FUNC,\n Ident: IDENT,\n Number: NUM,\n OpenParen: PAREN_OPEN,\n Percentage: PCT,\n Whitespace: W_SPACE\n} = TokenType;\nconst { HasNoneKeywords: KEY_NONE } = SyntaxFlag;\nconst NAMESPACE = 'relative-color';\n\n/* numeric constants */\nconst OCT = 8;\nconst DEC = 10;\nconst HEX = 16;\nconst MAX_PCT = 100;\nconst MAX_RGB = 255;\n\n/* type definitions */\n/**\n * @type NumberOrStringColorChannels - color channel\n */\ntype NumberOrStringColorChannels = ColorChannels & StringColorChannels;\n\n/* regexp */\nconst REG_COLOR_CAPT = new RegExp(\n `^${FN_REL}(${SYN_COLOR_TYPE}|${SYN_MIX})\\\\s+`\n);\nconst REG_CS_HSL = /(?:hsla?|hwb)$/;\nconst REG_CS_CIE = new RegExp(`^(?:${CS_LAB}|${CS_LCH})$`);\nconst REG_FN_CALC_SUM = /^(?:abs|sig?n|cos|tan)\\(/;\nconst REG_FN_MATH_START = new RegExp(SYN_FN_MATH_START);\nconst REG_FN_REL = new RegExp(FN_REL);\nconst REG_FN_REL_CAPT = new RegExp(`^${FN_REL_CAPT}`);\nconst REG_FN_REL_START = new RegExp(`^${FN_REL}`);\nconst REG_FN_VAR = new RegExp(SYN_FN_VAR);\n\n/**\n * resolve relative color channels\n * @param tokens - CSS tokens\n * @param [opt] - options\n * @returns resolved color channels\n */\nexport function resolveColorChannels(\n tokens: CSSToken[],\n opt: Options = {}\n): NumberOrStringColorChannels | NullObject {\n if (!Array.isArray(tokens)) {\n throw new TypeError(`${tokens} is not an array.`);\n }\n const { colorSpace = '', format = '' } = opt;\n const colorChannels = new Map([\n ['color', ['r', 'g', 'b', 'alpha']],\n ['hsl', ['h', 's', 'l', 'alpha']],\n ['hsla', ['h', 's', 'l', 'alpha']],\n ['hwb', ['h', 'w', 'b', 'alpha']],\n ['lab', ['l', 'a', 'b', 'alpha']],\n ['lch', ['l', 'c', 'h', 'alpha']],\n ['oklab', ['l', 'a', 'b', 'alpha']],\n ['oklch', ['l', 'c', 'h', 'alpha']],\n ['rgb', ['r', 'g', 'b', 'alpha']],\n ['rgba', ['r', 'g', 'b', 'alpha']]\n ]);\n const colorChannel = colorChannels.get(colorSpace);\n // invalid color channel\n if (!colorChannel) {\n return new NullObject();\n }\n const mathFunc = new Set();\n const channels: [\n (number | string)[],\n (number | string)[],\n (number | string)[],\n (number | string)[]\n ] = [[], [], [], []];\n let i = 0;\n let nest = 0;\n let func = '';\n let precededPct = false;\n while (tokens.length) {\n const token = tokens.shift();\n if (!Array.isArray(token)) {\n throw new TypeError(`${token} is not an array.`);\n }\n const [type, value, , , detail] = token as [\n TokenType,\n string,\n number,\n number,\n { value: string | number } | undefined\n ];\n const channel = channels[i];\n if (Array.isArray(channel)) {\n switch (type) {\n case DELIM: {\n if (func) {\n if (\n (value === '+' || value === '-') &&\n precededPct &&\n !REG_FN_CALC_SUM.test(func)\n ) {\n return new NullObject();\n }\n precededPct = false;\n channel.push(value);\n }\n break;\n }\n case DIM: {\n if (!func || !REG_FN_CALC_SUM.test(func)) {\n return new NullObject();\n }\n const resolvedValue = resolveDimension(token, opt);\n if (isString(resolvedValue)) {\n channel.push(resolvedValue);\n } else {\n channel.push(value);\n }\n break;\n }\n case FUNC: {\n channel.push(value);\n func = value;\n nest++;\n if (REG_FN_MATH_START.test(value)) {\n mathFunc.add(nest);\n }\n break;\n }\n case IDENT: {\n // invalid channel key\n if (!colorChannel.includes(value)) {\n return new NullObject();\n }\n channel.push(value);\n if (!func) {\n i++;\n }\n break;\n }\n case NUM: {\n channel.push(Number(detail?.value));\n if (!func) {\n i++;\n }\n break;\n }\n case PAREN_OPEN: {\n channel.push(value);\n nest++;\n break;\n }\n case PAREN_CLOSE: {\n if (func) {\n const lastValue = channel[channel.length - 1];\n if (lastValue === ' ') {\n channel.splice(-1, 1, value);\n } else {\n channel.push(value);\n }\n if (mathFunc.has(nest)) {\n mathFunc.delete(nest);\n }\n nest--;\n if (nest === 0) {\n func = '';\n i++;\n }\n }\n break;\n }\n case PCT: {\n if (!func) {\n return new NullObject();\n } else if (!REG_FN_CALC_SUM.test(func)) {\n const lastValue = channel.toReversed().find(v => v !== ' ');\n if (lastValue === '+' || lastValue === '-') {\n return new NullObject();\n } else if (lastValue === '*' || lastValue === '/') {\n precededPct = false;\n } else {\n precededPct = true;\n }\n }\n channel.push(Number(detail?.value) / MAX_PCT);\n if (!func) {\n i++;\n }\n break;\n }\n case W_SPACE: {\n if (channel.length && func) {\n const lastValue = channel[channel.length - 1];\n if (typeof lastValue === 'number') {\n channel.push(value);\n } else if (\n isString(lastValue) &&\n !lastValue.endsWith('(') &&\n lastValue !== ' '\n ) {\n channel.push(value);\n }\n }\n break;\n }\n default: {\n if (type !== COMMENT && type !== EOF && func) {\n channel.push(value);\n }\n }\n }\n }\n }\n const channelValues = [];\n for (const channel of channels) {\n if (channel.length === 1) {\n const [resolvedValue] = channel;\n if (isStringOrNumber(resolvedValue)) {\n channelValues.push(resolvedValue);\n }\n } else if (channel.length) {\n const resolvedValue = serializeCalc(channel.join(''), {\n format\n });\n channelValues.push(resolvedValue);\n }\n }\n return channelValues as NumberOrStringColorChannels;\n}\n\n/**\n * extract origin color\n * @param value - CSS color value\n * @param [opt] - options\n * @returns origin color value\n */\nexport function extractOriginColor(\n value: string,\n opt: Options = {}\n): string | NullObject {\n const { colorScheme = 'normal', currentColor = '', format = '' } = opt;\n if (isString(value)) {\n value = value.toLowerCase().trim();\n if (!value) {\n return new NullObject();\n }\n if (!REG_FN_REL_START.test(value)) {\n return value;\n }\n } else {\n return new NullObject();\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'extractOriginColor',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return cachedResult as NullObject;\n }\n return cachedResult.item as string;\n }\n if (/currentcolor/.test(value)) {\n if (currentColor) {\n value = value.replace(/currentcolor/g, currentColor);\n } else {\n setCache(cacheKey, null);\n return new NullObject();\n }\n }\n let colorSpace = '';\n if (REG_FN_REL_CAPT.test(value)) {\n [, colorSpace] = value.match(REG_FN_REL_CAPT) as MatchedRegExp;\n }\n opt.colorSpace = colorSpace;\n if (value.includes(FN_LIGHT_DARK)) {\n const colorParts = value\n .replace(new RegExp(`^${colorSpace}\\\\(`), '')\n .replace(/\\)$/, '');\n const [, originColor = ''] = splitValue(colorParts);\n const specifiedOriginColor = resolveColor(originColor, {\n colorScheme,\n format: VAL_SPEC\n }) as string;\n if (specifiedOriginColor === '') {\n setCache(cacheKey, null);\n return new NullObject();\n }\n if (format === VAL_SPEC) {\n value = value.replace(originColor, specifiedOriginColor);\n } else {\n const resolvedOriginColor = resolveColor(specifiedOriginColor, opt);\n if (isString(resolvedOriginColor)) {\n value = value.replace(originColor, resolvedOriginColor);\n }\n }\n }\n if (REG_COLOR_CAPT.test(value)) {\n const [, originColor] = value.match(REG_COLOR_CAPT) as MatchedRegExp;\n const [, restValue] = value.split(originColor) as MatchedRegExp;\n if (/^[a-z]+$/.test(originColor)) {\n if (\n !/^transparent$/.test(originColor) &&\n !Object.hasOwn(NAMED_COLORS, originColor)\n ) {\n setCache(cacheKey, null);\n return new NullObject();\n }\n } else if (format === VAL_SPEC) {\n const resolvedOriginColor = resolveColor(originColor, opt);\n if (isString(resolvedOriginColor)) {\n value = value.replace(originColor, resolvedOriginColor);\n }\n }\n if (format === VAL_SPEC) {\n const tokens = tokenize({ css: restValue });\n const channelValues = resolveColorChannels(tokens, opt);\n if (channelValues instanceof NullObject) {\n setCache(cacheKey, null);\n return channelValues;\n }\n const [v1, v2, v3, v4] = channelValues;\n let channelValue = '';\n if (isStringOrNumber(v4)) {\n channelValue = ` ${v1} ${v2} ${v3} / ${v4})`;\n } else {\n channelValue = ` ${channelValues.join(' ')})`;\n }\n if (restValue !== channelValue) {\n value = value.replace(restValue, channelValue);\n }\n }\n // nested relative color\n } else {\n const [, restValue] = value.split(REG_FN_REL_START) as MatchedRegExp;\n const tokens = tokenize({ css: restValue });\n const originColor: string[] = [];\n let nest = 0;\n while (tokens.length) {\n const [type, tokenValue] = tokens.shift() as [TokenType, string];\n switch (type) {\n case FUNC:\n case PAREN_OPEN: {\n originColor.push(tokenValue);\n nest++;\n break;\n }\n case PAREN_CLOSE: {\n const lastValue = originColor[originColor.length - 1];\n if (lastValue === ' ') {\n originColor.splice(-1, 1, tokenValue);\n } else if (isString(lastValue)) {\n originColor.push(tokenValue);\n }\n nest--;\n break;\n }\n case W_SPACE: {\n const lastValue = originColor[originColor.length - 1];\n if (\n isString(lastValue) &&\n !lastValue.endsWith('(') &&\n lastValue !== ' '\n ) {\n originColor.push(tokenValue);\n }\n break;\n }\n default: {\n if (type !== COMMENT && type !== EOF) {\n originColor.push(tokenValue);\n }\n }\n }\n if (nest === 0) {\n break;\n }\n }\n const resolvedOriginColor = resolveRelativeColor(\n originColor.join('').trim(),\n opt\n );\n if (resolvedOriginColor instanceof NullObject) {\n setCache(cacheKey, null);\n return resolvedOriginColor;\n }\n const channelValues = resolveColorChannels(tokens, opt);\n if (channelValues instanceof NullObject) {\n setCache(cacheKey, null);\n return channelValues;\n }\n const [v1, v2, v3, v4] = channelValues;\n let channelValue = '';\n if (isStringOrNumber(v4)) {\n channelValue = ` ${v1} ${v2} ${v3} / ${v4})`;\n } else {\n channelValue = ` ${channelValues.join(' ')})`;\n }\n value = value.replace(restValue, `${resolvedOriginColor}${channelValue}`);\n }\n setCache(cacheKey, value);\n return value;\n}\n\n/**\n * resolve relative color\n * @param value - CSS relative color value\n * @param [opt] - options\n * @returns resolved value\n */\nexport function resolveRelativeColor(\n value: string,\n opt: Options = {}\n): string | NullObject {\n const { format = '' } = opt;\n if (isString(value)) {\n if (REG_FN_VAR.test(value)) {\n if (format === VAL_SPEC) {\n return value;\n // var() must be resolved before resolveRelativeColor()\n } else {\n throw new SyntaxError(`Unexpected token ${FN_VAR} found.`);\n }\n } else if (!REG_FN_REL.test(value)) {\n return value;\n }\n value = value.toLowerCase().trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'resolveRelativeColor',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return cachedResult as NullObject;\n }\n return cachedResult.item as string;\n }\n const originColor = extractOriginColor(value, opt);\n if (originColor instanceof NullObject) {\n setCache(cacheKey, null);\n return originColor;\n }\n value = originColor;\n if (format === VAL_SPEC) {\n if (value.startsWith('rgba(')) {\n value = value.replace(/^rgba\\(/, 'rgb(');\n } else if (value.startsWith('hsla(')) {\n value = value.replace(/^hsla\\(/, 'hsl(');\n }\n return value;\n }\n const tokens = tokenize({ css: value });\n const components = parseComponentValue(tokens) as ComponentValue;\n const parsedComponents = colorParser(components);\n if (!parsedComponents) {\n setCache(cacheKey, null);\n return new NullObject();\n }\n const {\n alpha: alphaComponent,\n channels: channelsComponent,\n colorNotation,\n syntaxFlags\n } = parsedComponents;\n let alpha: number | string;\n if (Number.isNaN(Number(alphaComponent))) {\n if (syntaxFlags instanceof Set && syntaxFlags.has(KEY_NONE)) {\n alpha = NONE;\n } else {\n alpha = 0;\n }\n } else {\n alpha = roundToPrecision(Number(alphaComponent), OCT);\n }\n let v1: number | string;\n let v2: number | string;\n let v3: number | string;\n [v1, v2, v3] = channelsComponent;\n let resolvedValue;\n if (REG_CS_CIE.test(colorNotation)) {\n const hasNone = syntaxFlags instanceof Set && syntaxFlags.has(KEY_NONE);\n if (Number.isNaN(v1)) {\n if (hasNone) {\n v1 = NONE;\n } else {\n v1 = 0;\n }\n } else {\n v1 = roundToPrecision(v1, HEX);\n }\n if (Number.isNaN(v2)) {\n if (hasNone) {\n v2 = NONE;\n } else {\n v2 = 0;\n }\n } else {\n v2 = roundToPrecision(v2, HEX);\n }\n if (Number.isNaN(v3)) {\n if (hasNone) {\n v3 = NONE;\n } else {\n v3 = 0;\n }\n } else {\n v3 = roundToPrecision(v3, HEX);\n }\n if (alpha === 1) {\n resolvedValue = `${colorNotation}(${v1} ${v2} ${v3})`;\n } else {\n resolvedValue = `${colorNotation}(${v1} ${v2} ${v3} / ${alpha})`;\n }\n } else if (REG_CS_HSL.test(colorNotation)) {\n if (Number.isNaN(v1)) {\n v1 = 0;\n }\n if (Number.isNaN(v2)) {\n v2 = 0;\n }\n if (Number.isNaN(v3)) {\n v3 = 0;\n }\n let [r, g, b] = convertColorToRgb(\n `${colorNotation}(${v1} ${v2} ${v3} / ${alpha})`\n ) as ColorChannels;\n r = roundToPrecision(r / MAX_RGB, DEC);\n g = roundToPrecision(g / MAX_RGB, DEC);\n b = roundToPrecision(b / MAX_RGB, DEC);\n if (alpha === 1) {\n resolvedValue = `color(srgb ${r} ${g} ${b})`;\n } else {\n resolvedValue = `color(srgb ${r} ${g} ${b} / ${alpha})`;\n }\n } else {\n const cs = colorNotation === 'rgb' ? 'srgb' : colorNotation;\n const hasNone = syntaxFlags instanceof Set && syntaxFlags.has(KEY_NONE);\n if (Number.isNaN(v1)) {\n if (hasNone) {\n v1 = NONE;\n } else {\n v1 = 0;\n }\n } else {\n v1 = roundToPrecision(v1, DEC);\n }\n if (Number.isNaN(v2)) {\n if (hasNone) {\n v2 = NONE;\n } else {\n v2 = 0;\n }\n } else {\n v2 = roundToPrecision(v2, DEC);\n }\n if (Number.isNaN(v3)) {\n if (hasNone) {\n v3 = NONE;\n } else {\n v3 = 0;\n }\n } else {\n v3 = roundToPrecision(v3, DEC);\n }\n if (alpha === 1) {\n resolvedValue = `color(${cs} ${v1} ${v2} ${v3})`;\n } else {\n resolvedValue = `color(${cs} ${v1} ${v2} ${v3} / ${alpha})`;\n }\n }\n setCache(cacheKey, resolvedValue);\n return resolvedValue;\n}\n"],"names":["colorParser"],"mappings":"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"}
\ No newline at end of file diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/resolve.d.ts b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/resolve.d.ts new file mode 100644 index 0000000..a988078 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/resolve.d.ts @@ -0,0 +1,52 @@ +import { NullObject } from './cache.js'; +import { Options } from './typedef.js'; +/** + * resolve color + * @param value - CSS color value + * @param [opt] - options + * @returns resolved color + */ +export declare const resolveColor: (value: string, opt?: Options) => string | NullObject; +/** + * resolve CSS color + * @param value + * - CSS color value + * - system colors are not supported + * @param [opt] - options + * @param [opt.currentColor] + * - color to use for `currentcolor` keyword + * - if omitted, it will be treated as a missing color + * i.e. `rgb(none none none / none)` + * @param [opt.customProperty] + * - custom properties + * - pair of `--` prefixed property name and value, + * e.g. `customProperty: { '--some-color': '#0000ff' }` + * - and/or `callback` function to get the value of the custom property, + * e.g. `customProperty: { callback: someDeclaration.getPropertyValue }` + * @param [opt.dimension] + * - dimension, convert relative length to pixels + * - pair of unit and it's value as a number in pixels, + * e.g. `dimension: { em: 12, rem: 16, vw: 10.26 }` + * - and/or `callback` function to get the value as a number in pixels, + * e.g. `dimension: { callback: convertUnitToPixel }` + * @param [opt.format] + * - output format, one of below + * - `computedValue` (default), [computed value][139] of the color + * - `specifiedValue`, [specified value][140] of the color + * - `hex`, hex color notation, i.e. `rrggbb` + * - `hexAlpha`, hex color notation with alpha channel, i.e. `#rrggbbaa` + * @returns + * - one of rgba?(), #rrggbb(aa)?, color-name, '(empty-string)', + * color(color-space r g b / alpha), color(color-space x y z / alpha), + * lab(l a b / alpha), lch(l c h / alpha), oklab(l a b / alpha), + * oklch(l c h / alpha), null + * - in `computedValue`, values are numbers, however `rgb()` values are + * integers + * - in `specifiedValue`, returns `empty string` for unknown and/or invalid + * color + * - in `hex`, returns `null` for `transparent`, and also returns `null` if + * any of `r`, `g`, `b`, `alpha` is not a number + * - in `hexAlpha`, returns `#00000000` for `transparent`, + * however returns `null` if any of `r`, `g`, `b`, `alpha` is not a number + */ +export declare const resolve: (value: string, opt?: Options) => string | null; diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/resolve.js b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/resolve.js new file mode 100644 index 0000000..8ba49a4 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/resolve.js @@ -0,0 +1,350 @@ +import { NullObject, createCacheKey, getCache, CacheItem, setCache } from "./cache.js"; +import { resolveColorMix, resolveColorFunc, resolveColorValue, convertRgbToHex } from "./color.js"; +import { isString } from "./common.js"; +import { cssCalc } from "./css-calc.js"; +import { resolveVar } from "./css-var.js"; +import { resolveRelativeColor } from "./relative-color.js"; +import { splitValue } from "./util.js"; +import { VAL_COMP, VAL_SPEC, FN_MIX, FN_COLOR, SYN_FN_VAR, SYN_FN_LIGHT_DARK, SYN_FN_REL, SYN_FN_CALC } from "./constant.js"; +const NAMESPACE = "resolve"; +const RGB_TRANSPARENT = "rgba(0, 0, 0, 0)"; +const REG_FN_CALC = new RegExp(SYN_FN_CALC); +const REG_FN_LIGHT_DARK = new RegExp(SYN_FN_LIGHT_DARK); +const REG_FN_REL = new RegExp(SYN_FN_REL); +const REG_FN_VAR = new RegExp(SYN_FN_VAR); +const resolveColor = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { + colorScheme = "normal", + currentColor = "", + format = VAL_COMP, + nullable = false + } = opt; + const cacheKey = createCacheKey( + { + namespace: NAMESPACE, + name: "resolve", + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return cachedResult; + } + return cachedResult.item; + } + if (REG_FN_VAR.test(value)) { + if (format === VAL_SPEC) { + setCache(cacheKey, value); + return value; + } + const resolvedValue = resolveVar(value, opt); + if (resolvedValue instanceof NullObject) { + switch (format) { + case "hex": + case "hexAlpha": { + setCache(cacheKey, resolvedValue); + return resolvedValue; + } + default: { + if (nullable) { + setCache(cacheKey, resolvedValue); + return resolvedValue; + } + const res2 = RGB_TRANSPARENT; + setCache(cacheKey, res2); + return res2; + } + } + } else { + value = resolvedValue; + } + } + if (opt.format !== format) { + opt.format = format; + } + value = value.toLowerCase(); + if (REG_FN_LIGHT_DARK.test(value) && value.endsWith(")")) { + const colorParts = value.replace(REG_FN_LIGHT_DARK, "").replace(/\)$/, ""); + const [light = "", dark = ""] = splitValue(colorParts, { + delimiter: "," + }); + if (light && dark) { + if (format === VAL_SPEC) { + const lightColor = resolveColor(light, opt); + const darkColor = resolveColor(dark, opt); + let res3; + if (lightColor && darkColor) { + res3 = `light-dark(${lightColor}, ${darkColor})`; + } else { + res3 = ""; + } + setCache(cacheKey, res3); + return res3; + } + let resolvedValue; + if (colorScheme === "dark") { + resolvedValue = resolveColor(dark, opt); + } else { + resolvedValue = resolveColor(light, opt); + } + let res2; + if (resolvedValue instanceof NullObject) { + if (nullable) { + res2 = resolvedValue; + } else { + res2 = RGB_TRANSPARENT; + } + } else { + res2 = resolvedValue; + } + setCache(cacheKey, res2); + return res2; + } + switch (format) { + case VAL_SPEC: { + setCache(cacheKey, ""); + return ""; + } + case "hex": + case "hexAlpha": { + setCache(cacheKey, null); + return new NullObject(); + } + case VAL_COMP: + default: { + const res2 = RGB_TRANSPARENT; + setCache(cacheKey, res2); + return res2; + } + } + } + if (REG_FN_REL.test(value)) { + const resolvedValue = resolveRelativeColor(value, opt); + if (format === VAL_COMP) { + let res2; + if (resolvedValue instanceof NullObject) { + if (nullable) { + res2 = resolvedValue; + } else { + res2 = RGB_TRANSPARENT; + } + } else { + res2 = resolvedValue; + } + setCache(cacheKey, res2); + return res2; + } + if (format === VAL_SPEC) { + let res2 = ""; + if (resolvedValue instanceof NullObject) { + res2 = ""; + } else { + res2 = resolvedValue; + } + setCache(cacheKey, res2); + return res2; + } + if (resolvedValue instanceof NullObject) { + value = ""; + } else { + value = resolvedValue; + } + } + if (REG_FN_CALC.test(value)) { + value = cssCalc(value, opt); + } + let cs = ""; + let r = NaN; + let g = NaN; + let b = NaN; + let alpha = NaN; + if (value === "transparent") { + switch (format) { + case VAL_SPEC: { + setCache(cacheKey, value); + return value; + } + case "hex": { + setCache(cacheKey, null); + return new NullObject(); + } + case "hexAlpha": { + const res2 = "#00000000"; + setCache(cacheKey, res2); + return res2; + } + case VAL_COMP: + default: { + const res2 = RGB_TRANSPARENT; + setCache(cacheKey, res2); + return res2; + } + } + } else if (value === "currentcolor") { + if (format === VAL_SPEC) { + setCache(cacheKey, value); + return value; + } + if (currentColor) { + let resolvedValue; + if (currentColor.startsWith(FN_MIX)) { + resolvedValue = resolveColorMix(currentColor, opt); + } else if (currentColor.startsWith(FN_COLOR)) { + resolvedValue = resolveColorFunc(currentColor, opt); + } else { + resolvedValue = resolveColorValue(currentColor, opt); + } + if (resolvedValue instanceof NullObject) { + setCache(cacheKey, resolvedValue); + return resolvedValue; + } + [cs, r, g, b, alpha] = resolvedValue; + } else if (format === VAL_COMP) { + const res2 = RGB_TRANSPARENT; + setCache(cacheKey, res2); + return res2; + } + } else if (format === VAL_SPEC) { + if (value.startsWith(FN_MIX)) { + const res2 = resolveColorMix(value, opt); + setCache(cacheKey, res2); + return res2; + } else if (value.startsWith(FN_COLOR)) { + const [scs, rr, gg, bb, aa] = resolveColorFunc( + value, + opt + ); + let res2 = ""; + if (aa === 1) { + res2 = `color(${scs} ${rr} ${gg} ${bb})`; + } else { + res2 = `color(${scs} ${rr} ${gg} ${bb} / ${aa})`; + } + setCache(cacheKey, res2); + return res2; + } else { + const rgb = resolveColorValue(value, opt); + if (isString(rgb)) { + setCache(cacheKey, rgb); + return rgb; + } + const [scs, rr, gg, bb, aa] = rgb; + let res2 = ""; + if (scs === "rgb") { + if (aa === 1) { + res2 = `${scs}(${rr}, ${gg}, ${bb})`; + } else { + res2 = `${scs}a(${rr}, ${gg}, ${bb}, ${aa})`; + } + } else if (aa === 1) { + res2 = `${scs}(${rr} ${gg} ${bb})`; + } else { + res2 = `${scs}(${rr} ${gg} ${bb} / ${aa})`; + } + setCache(cacheKey, res2); + return res2; + } + } else if (value.startsWith(FN_MIX)) { + if (/currentcolor/.test(value)) { + if (currentColor) { + value = value.replace(/currentcolor/g, currentColor); + } + } + if (/transparent/.test(value)) { + value = value.replace(/transparent/g, RGB_TRANSPARENT); + } + const resolvedValue = resolveColorMix(value, opt); + if (resolvedValue instanceof NullObject) { + setCache(cacheKey, resolvedValue); + return resolvedValue; + } + [cs, r, g, b, alpha] = resolvedValue; + } else if (value.startsWith(FN_COLOR)) { + const resolvedValue = resolveColorFunc(value, opt); + if (resolvedValue instanceof NullObject) { + setCache(cacheKey, resolvedValue); + return resolvedValue; + } + [cs, r, g, b, alpha] = resolvedValue; + } else if (value) { + const resolvedValue = resolveColorValue(value, opt); + if (resolvedValue instanceof NullObject) { + setCache(cacheKey, resolvedValue); + return resolvedValue; + } + [cs, r, g, b, alpha] = resolvedValue; + } + let res = ""; + switch (format) { + case "hex": { + if (Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b) || Number.isNaN(alpha) || alpha === 0) { + setCache(cacheKey, null); + return new NullObject(); + } + res = convertRgbToHex([r, g, b, 1]); + break; + } + case "hexAlpha": { + if (Number.isNaN(r) || Number.isNaN(g) || Number.isNaN(b) || Number.isNaN(alpha)) { + setCache(cacheKey, null); + return new NullObject(); + } + res = convertRgbToHex([r, g, b, alpha]); + break; + } + case VAL_COMP: + default: { + switch (cs) { + case "rgb": { + if (alpha === 1) { + res = `${cs}(${r}, ${g}, ${b})`; + } else { + res = `${cs}a(${r}, ${g}, ${b}, ${alpha})`; + } + break; + } + case "lab": + case "lch": + case "oklab": + case "oklch": { + if (alpha === 1) { + res = `${cs}(${r} ${g} ${b})`; + } else { + res = `${cs}(${r} ${g} ${b} / ${alpha})`; + } + break; + } + // color() + default: { + if (alpha === 1) { + res = `color(${cs} ${r} ${g} ${b})`; + } else { + res = `color(${cs} ${r} ${g} ${b} / ${alpha})`; + } + } + } + } + } + setCache(cacheKey, res); + return res; +}; +const resolve = (value, opt = {}) => { + opt.nullable = false; + const resolvedValue = resolveColor(value, opt); + if (resolvedValue instanceof NullObject) { + return null; + } + return resolvedValue; +}; +export { + resolve, + resolveColor +}; +//# sourceMappingURL=resolve.js.map diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/resolve.js.map b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/resolve.js.map new file mode 100644 index 0000000..e4c31b5 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/resolve.js.map @@ -0,0 +1 @@ +{"version":3,"file":"resolve.js","sources":["../../../src/js/resolve.ts"],"sourcesContent":["/**\n * resolve\n */\n\nimport {\n CacheItem,\n NullObject,\n createCacheKey,\n getCache,\n setCache\n} from './cache';\nimport {\n convertRgbToHex,\n resolveColorFunc,\n resolveColorMix,\n resolveColorValue\n} from './color';\nimport { isString } from './common';\nimport { cssCalc } from './css-calc';\nimport { resolveVar } from './css-var';\nimport { resolveRelativeColor } from './relative-color';\nimport { splitValue } from './util';\nimport {\n ComputedColorChannels,\n Options,\n SpecifiedColorChannels\n} from './typedef';\n\n/* constants */\nimport {\n FN_COLOR,\n FN_MIX,\n SYN_FN_CALC,\n SYN_FN_LIGHT_DARK,\n SYN_FN_REL,\n SYN_FN_VAR,\n VAL_COMP,\n VAL_SPEC\n} from './constant';\nconst NAMESPACE = 'resolve';\nconst RGB_TRANSPARENT = 'rgba(0, 0, 0, 0)';\n\n/* regexp */\nconst REG_FN_CALC = new RegExp(SYN_FN_CALC);\nconst REG_FN_LIGHT_DARK = new RegExp(SYN_FN_LIGHT_DARK);\nconst REG_FN_REL = new RegExp(SYN_FN_REL);\nconst REG_FN_VAR = new RegExp(SYN_FN_VAR);\n\n/**\n * resolve color\n * @param value - CSS color value\n * @param [opt] - options\n * @returns resolved color\n */\nexport const resolveColor = (\n value: string,\n opt: Options = {}\n): string | NullObject => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const {\n colorScheme = 'normal',\n currentColor = '',\n format = VAL_COMP,\n nullable = false\n } = opt;\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'resolve',\n value\n },\n opt\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n if (cachedResult.isNull) {\n return cachedResult as NullObject;\n }\n return cachedResult.item as string;\n }\n if (REG_FN_VAR.test(value)) {\n if (format === VAL_SPEC) {\n setCache(cacheKey, value);\n return value;\n }\n const resolvedValue = resolveVar(value, opt);\n if (resolvedValue instanceof NullObject) {\n switch (format) {\n case 'hex':\n case 'hexAlpha': {\n setCache(cacheKey, resolvedValue);\n return resolvedValue;\n }\n default: {\n if (nullable) {\n setCache(cacheKey, resolvedValue);\n return resolvedValue;\n }\n const res = RGB_TRANSPARENT;\n setCache(cacheKey, res);\n return res;\n }\n }\n } else {\n value = resolvedValue;\n }\n }\n if (opt.format !== format) {\n opt.format = format;\n }\n value = value.toLowerCase();\n if (REG_FN_LIGHT_DARK.test(value) && value.endsWith(')')) {\n const colorParts = value.replace(REG_FN_LIGHT_DARK, '').replace(/\\)$/, '');\n const [light = '', dark = ''] = splitValue(colorParts, {\n delimiter: ','\n });\n if (light && dark) {\n if (format === VAL_SPEC) {\n const lightColor = resolveColor(light, opt);\n const darkColor = resolveColor(dark, opt);\n let res;\n if (lightColor && darkColor) {\n res = `light-dark(${lightColor}, ${darkColor})`;\n } else {\n res = '';\n }\n setCache(cacheKey, res);\n return res;\n }\n let resolvedValue;\n if (colorScheme === 'dark') {\n resolvedValue = resolveColor(dark, opt);\n } else {\n resolvedValue = resolveColor(light, opt);\n }\n let res;\n if (resolvedValue instanceof NullObject) {\n if (nullable) {\n res = resolvedValue;\n } else {\n res = RGB_TRANSPARENT;\n }\n } else {\n res = resolvedValue;\n }\n setCache(cacheKey, res);\n return res;\n }\n // invalid value\n switch (format) {\n case VAL_SPEC: {\n setCache(cacheKey, '');\n return '';\n }\n case 'hex':\n case 'hexAlpha': {\n setCache(cacheKey, null);\n return new NullObject();\n }\n case VAL_COMP:\n default: {\n const res = RGB_TRANSPARENT;\n setCache(cacheKey, res);\n return res;\n }\n }\n }\n if (REG_FN_REL.test(value)) {\n const resolvedValue = resolveRelativeColor(value, opt);\n if (format === VAL_COMP) {\n let res;\n if (resolvedValue instanceof NullObject) {\n if (nullable) {\n res = resolvedValue;\n } else {\n res = RGB_TRANSPARENT;\n }\n } else {\n res = resolvedValue;\n }\n setCache(cacheKey, res);\n return res;\n }\n if (format === VAL_SPEC) {\n let res = '';\n if (resolvedValue instanceof NullObject) {\n res = '';\n } else {\n res = resolvedValue;\n }\n setCache(cacheKey, res);\n return res;\n }\n if (resolvedValue instanceof NullObject) {\n value = '';\n } else {\n value = resolvedValue;\n }\n }\n if (REG_FN_CALC.test(value)) {\n value = cssCalc(value, opt);\n }\n let cs = '';\n let r = NaN;\n let g = NaN;\n let b = NaN;\n let alpha = NaN;\n if (value === 'transparent') {\n switch (format) {\n case VAL_SPEC: {\n setCache(cacheKey, value);\n return value;\n }\n case 'hex': {\n setCache(cacheKey, null);\n return new NullObject();\n }\n case 'hexAlpha': {\n const res = '#00000000';\n setCache(cacheKey, res);\n return res;\n }\n case VAL_COMP:\n default: {\n const res = RGB_TRANSPARENT;\n setCache(cacheKey, res);\n return res;\n }\n }\n } else if (value === 'currentcolor') {\n if (format === VAL_SPEC) {\n setCache(cacheKey, value);\n return value;\n }\n if (currentColor) {\n let resolvedValue;\n if (currentColor.startsWith(FN_MIX)) {\n resolvedValue = resolveColorMix(currentColor, opt);\n } else if (currentColor.startsWith(FN_COLOR)) {\n resolvedValue = resolveColorFunc(currentColor, opt);\n } else {\n resolvedValue = resolveColorValue(currentColor, opt);\n }\n if (resolvedValue instanceof NullObject) {\n setCache(cacheKey, resolvedValue);\n return resolvedValue;\n }\n [cs, r, g, b, alpha] = resolvedValue as ComputedColorChannels;\n } else if (format === VAL_COMP) {\n const res = RGB_TRANSPARENT;\n setCache(cacheKey, res);\n return res;\n }\n } else if (format === VAL_SPEC) {\n if (value.startsWith(FN_MIX)) {\n const res = resolveColorMix(value, opt) as string;\n setCache(cacheKey, res);\n return res;\n } else if (value.startsWith(FN_COLOR)) {\n const [scs, rr, gg, bb, aa] = resolveColorFunc(\n value,\n opt\n ) as SpecifiedColorChannels;\n let res = '';\n if (aa === 1) {\n res = `color(${scs} ${rr} ${gg} ${bb})`;\n } else {\n res = `color(${scs} ${rr} ${gg} ${bb} / ${aa})`;\n }\n setCache(cacheKey, res);\n return res;\n } else {\n const rgb = resolveColorValue(value, opt);\n if (isString(rgb)) {\n setCache(cacheKey, rgb);\n return rgb;\n }\n const [scs, rr, gg, bb, aa] = rgb as SpecifiedColorChannels;\n let res = '';\n if (scs === 'rgb') {\n if (aa === 1) {\n res = `${scs}(${rr}, ${gg}, ${bb})`;\n } else {\n res = `${scs}a(${rr}, ${gg}, ${bb}, ${aa})`;\n }\n } else if (aa === 1) {\n res = `${scs}(${rr} ${gg} ${bb})`;\n } else {\n res = `${scs}(${rr} ${gg} ${bb} / ${aa})`;\n }\n setCache(cacheKey, res);\n return res;\n }\n } else if (value.startsWith(FN_MIX)) {\n if (/currentcolor/.test(value)) {\n if (currentColor) {\n value = value.replace(/currentcolor/g, currentColor);\n }\n }\n if (/transparent/.test(value)) {\n value = value.replace(/transparent/g, RGB_TRANSPARENT);\n }\n const resolvedValue = resolveColorMix(value, opt);\n if (resolvedValue instanceof NullObject) {\n setCache(cacheKey, resolvedValue);\n return resolvedValue;\n }\n [cs, r, g, b, alpha] = resolvedValue as ComputedColorChannels;\n } else if (value.startsWith(FN_COLOR)) {\n const resolvedValue = resolveColorFunc(value, opt);\n if (resolvedValue instanceof NullObject) {\n setCache(cacheKey, resolvedValue);\n return resolvedValue;\n }\n [cs, r, g, b, alpha] = resolvedValue as ComputedColorChannels;\n } else if (value) {\n const resolvedValue = resolveColorValue(value, opt);\n if (resolvedValue instanceof NullObject) {\n setCache(cacheKey, resolvedValue);\n return resolvedValue;\n }\n [cs, r, g, b, alpha] = resolvedValue as ComputedColorChannels;\n }\n let res = '';\n switch (format) {\n case 'hex': {\n if (\n Number.isNaN(r) ||\n Number.isNaN(g) ||\n Number.isNaN(b) ||\n Number.isNaN(alpha) ||\n alpha === 0\n ) {\n setCache(cacheKey, null);\n return new NullObject();\n }\n res = convertRgbToHex([r, g, b, 1]);\n break;\n }\n case 'hexAlpha': {\n if (\n Number.isNaN(r) ||\n Number.isNaN(g) ||\n Number.isNaN(b) ||\n Number.isNaN(alpha)\n ) {\n setCache(cacheKey, null);\n return new NullObject();\n }\n res = convertRgbToHex([r, g, b, alpha]);\n break;\n }\n case VAL_COMP:\n default: {\n switch (cs) {\n case 'rgb': {\n if (alpha === 1) {\n res = `${cs}(${r}, ${g}, ${b})`;\n } else {\n res = `${cs}a(${r}, ${g}, ${b}, ${alpha})`;\n }\n break;\n }\n case 'lab':\n case 'lch':\n case 'oklab':\n case 'oklch': {\n if (alpha === 1) {\n res = `${cs}(${r} ${g} ${b})`;\n } else {\n res = `${cs}(${r} ${g} ${b} / ${alpha})`;\n }\n break;\n }\n // color()\n default: {\n if (alpha === 1) {\n res = `color(${cs} ${r} ${g} ${b})`;\n } else {\n res = `color(${cs} ${r} ${g} ${b} / ${alpha})`;\n }\n }\n }\n }\n }\n setCache(cacheKey, res);\n return res;\n};\n\n/**\n * resolve CSS color\n * @param value\n * - CSS color value\n * - system colors are not supported\n * @param [opt] - options\n * @param [opt.currentColor]\n * - color to use for `currentcolor` keyword\n * - if omitted, it will be treated as a missing color\n * i.e. `rgb(none none none / none)`\n * @param [opt.customProperty]\n * - custom properties\n * - pair of `--` prefixed property name and value,\n * e.g. `customProperty: { '--some-color': '#0000ff' }`\n * - and/or `callback` function to get the value of the custom property,\n * e.g. `customProperty: { callback: someDeclaration.getPropertyValue }`\n * @param [opt.dimension]\n * - dimension, convert relative length to pixels\n * - pair of unit and it's value as a number in pixels,\n * e.g. `dimension: { em: 12, rem: 16, vw: 10.26 }`\n * - and/or `callback` function to get the value as a number in pixels,\n * e.g. `dimension: { callback: convertUnitToPixel }`\n * @param [opt.format]\n * - output format, one of below\n * - `computedValue` (default), [computed value][139] of the color\n * - `specifiedValue`, [specified value][140] of the color\n * - `hex`, hex color notation, i.e. `rrggbb`\n * - `hexAlpha`, hex color notation with alpha channel, i.e. `#rrggbbaa`\n * @returns\n * - one of rgba?(), #rrggbb(aa)?, color-name, '(empty-string)',\n * color(color-space r g b / alpha), color(color-space x y z / alpha),\n * lab(l a b / alpha), lch(l c h / alpha), oklab(l a b / alpha),\n * oklch(l c h / alpha), null\n * - in `computedValue`, values are numbers, however `rgb()` values are\n * integers\n * - in `specifiedValue`, returns `empty string` for unknown and/or invalid\n * color\n * - in `hex`, returns `null` for `transparent`, and also returns `null` if\n * any of `r`, `g`, `b`, `alpha` is not a number\n * - in `hexAlpha`, returns `#00000000` for `transparent`,\n * however returns `null` if any of `r`, `g`, `b`, `alpha` is not a number\n */\nexport const resolve = (value: string, opt: Options = {}): string | null => {\n opt.nullable = false;\n const resolvedValue = resolveColor(value, opt);\n if (resolvedValue instanceof NullObject) {\n return null;\n }\n return resolvedValue as string;\n};\n"],"names":["res"],"mappings":"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"}
\ No newline at end of file diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/typedef.d.ts b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/typedef.d.ts new file mode 100644 index 0000000..5130377 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/typedef.d.ts @@ -0,0 +1,80 @@ +/** + * typedef + */ +/** + * @typedef Options - options + * @property [alpha] - enable alpha + * @property [colorSpace] - color space + * @property [currentColor] - color for currentcolor + * @property [customProperty] - custom properties + * @property [d50] - white point in d50 + * @property [dimension] - dimension + * @property [format] - output format + * @property [key] - key + */ +export interface Options { + alpha?: boolean; + colorScheme?: string; + colorSpace?: string; + currentColor?: string; + customProperty?: Record<string, string | ((K: string) => string)>; + d50?: boolean; + delimiter?: string | string[]; + dimension?: Record<string, number | ((K: string) => number)>; + format?: string; + nullable?: boolean; + preserveComment?: boolean; +} +/** + * @type ColorChannels - color channels + */ +export type ColorChannels = [x: number, y: number, z: number, alpha: number]; +/** + * @type StringColorChannels - color channels + */ +export type StringColorChannels = [ + x: string, + y: string, + z: string, + alpha: string | undefined +]; +/** + * @type StringColorSpacedChannels - specified value + */ +export type StringColorSpacedChannels = [ + cs: string, + x: string, + y: string, + z: string, + alpha: string | undefined +]; +/** + * @type ComputedColorChannels - computed value + */ +export type ComputedColorChannels = [ + cs: string, + x: number, + y: number, + z: number, + alpha: number +]; +/** + * @type SpecifiedColorChannels - specified value + */ +export type SpecifiedColorChannels = [ + cs: string, + x: number | string, + y: number | string, + z: number | string, + alpha: number | string +]; +/** + * @type MatchedRegExp - matched regexp array + */ +export type MatchedRegExp = [ + match: string, + gr1: string, + gr2: string, + gr3: string, + gr4: string +]; diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/util.d.ts b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/util.d.ts new file mode 100644 index 0000000..2996c8e --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/util.d.ts @@ -0,0 +1,53 @@ +import { Options } from './typedef.js'; +/** + * split value + * NOTE: comments are stripped, it can be preserved if, in the options param, + * `delimiter` is either ',' or '/' and with `preserveComment` set to `true` + * @param value - CSS value + * @param [opt] - options + * @returns array of values + */ +export declare const splitValue: (value: string, opt?: Options) => string[]; +/** + * extract dashed-ident tokens + * @param value - CSS value + * @returns array of dashed-ident tokens + */ +export declare const extractDashedIdent: (value: string) => string[]; +/** + * is color + * @param value - CSS value + * @param [opt] - options + * @returns result + */ +export declare const isColor: (value: unknown, opt?: Options) => boolean; +/** + * value to JSON string + * @param value - CSS value + * @param [func] - stringify function + * @returns stringified value in JSON notation + */ +export declare const valueToJsonString: (value: unknown, func?: boolean) => string; +/** + * round to specified precision + * @param value - numeric value + * @param bit - minimum bits + * @returns rounded value + */ +export declare const roundToPrecision: (value: number, bit?: number) => number; +/** + * interpolate hue + * @param hueA - hue value + * @param hueB - hue value + * @param arc - shorter | longer | increasing | decreasing + * @returns result - [hueA, hueB] + */ +export declare const interpolateHue: (hueA: number, hueB: number, arc?: string) => [number, number]; +/** + * resolve length in pixels + * @param value - value + * @param unit - unit + * @param [opt] - options + * @returns pixelated value + */ +export declare const resolveLengthInPixels: (value: number | string, unit: string | undefined, opt?: Options) => number; diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/util.js b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/util.js new file mode 100644 index 0000000..cf3f5c7 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/util.js @@ -0,0 +1,359 @@ +import { TokenType, tokenize } from "@csstools/css-tokenizer"; +import { createCacheKey, getCache, CacheItem, setCache } from "./cache.js"; +import { isString } from "./common.js"; +import { resolveColor } from "./resolve.js"; +import { NAMED_COLORS } from "./color.js"; +import { VAL_SPEC, SYN_COLOR_TYPE, SYN_MIX } from "./constant.js"; +const { + CloseParen: PAREN_CLOSE, + Comma: COMMA, + Comment: COMMENT, + Delim: DELIM, + EOF, + Function: FUNC, + Ident: IDENT, + OpenParen: PAREN_OPEN, + Whitespace: W_SPACE +} = TokenType; +const NAMESPACE = "util"; +const DEC = 10; +const HEX = 16; +const DEG = 360; +const DEG_HALF = 180; +const REG_COLOR = new RegExp(`^(?:${SYN_COLOR_TYPE})$`); +const REG_FN_COLOR = /^(?:(?:ok)?l(?:ab|ch)|color(?:-mix)?|hsla?|hwb|rgba?|var)\(/; +const REG_MIX = new RegExp(SYN_MIX); +const splitValue = (value, opt = {}) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { delimiter = " ", preserveComment = false } = opt; + const cacheKey = createCacheKey( + { + namespace: NAMESPACE, + name: "splitValue", + value + }, + { + delimiter, + preserveComment + } + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item; + } + let regDelimiter; + if (delimiter === ",") { + regDelimiter = /^,$/; + } else if (delimiter === "/") { + regDelimiter = /^\/$/; + } else { + regDelimiter = /^\s+$/; + } + const tokens = tokenize({ css: value }); + let nest = 0; + let str = ""; + const res = []; + while (tokens.length) { + const [type, value2] = tokens.shift(); + switch (type) { + case COMMA: { + if (regDelimiter.test(value2)) { + if (nest === 0) { + res.push(str.trim()); + str = ""; + } else { + str += value2; + } + } else { + str += value2; + } + break; + } + case DELIM: { + if (regDelimiter.test(value2)) { + if (nest === 0) { + res.push(str.trim()); + str = ""; + } else { + str += value2; + } + } else { + str += value2; + } + break; + } + case COMMENT: { + if (preserveComment && (delimiter === "," || delimiter === "/")) { + str += value2; + } + break; + } + case FUNC: + case PAREN_OPEN: { + str += value2; + nest++; + break; + } + case PAREN_CLOSE: { + str += value2; + nest--; + break; + } + case W_SPACE: { + if (regDelimiter.test(value2)) { + if (nest === 0) { + if (str) { + res.push(str.trim()); + str = ""; + } + } else { + str += " "; + } + } else if (!str.endsWith(" ")) { + str += " "; + } + break; + } + default: { + if (type === EOF) { + res.push(str.trim()); + str = ""; + } else { + str += value2; + } + } + } + } + setCache(cacheKey, res); + return res; +}; +const extractDashedIdent = (value) => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey = createCacheKey({ + namespace: NAMESPACE, + name: "extractDashedIdent", + value + }); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item; + } + const tokens = tokenize({ css: value }); + const items = /* @__PURE__ */ new Set(); + while (tokens.length) { + const [type, value2] = tokens.shift(); + if (type === IDENT && value2.startsWith("--")) { + items.add(value2); + } + } + const res = [...items]; + setCache(cacheKey, res); + return res; +}; +const isColor = (value, opt = {}) => { + if (isString(value)) { + value = value.toLowerCase().trim(); + if (value && isString(value)) { + if (/^[a-z]+$/.test(value)) { + if (/^(?:currentcolor|transparent)$/.test(value) || Object.hasOwn(NAMED_COLORS, value)) { + return true; + } + } else if (REG_COLOR.test(value) || REG_MIX.test(value)) { + return true; + } else if (REG_FN_COLOR.test(value)) { + opt.nullable = true; + if (!opt.format) { + opt.format = VAL_SPEC; + } + const resolvedValue = resolveColor(value, opt); + if (resolvedValue) { + return true; + } + } + } + } + return false; +}; +const valueToJsonString = (value, func = false) => { + if (typeof value === "undefined") { + return ""; + } + const res = JSON.stringify(value, (_key, val) => { + let replacedValue; + if (typeof val === "undefined") { + replacedValue = null; + } else if (typeof val === "function") { + if (func) { + replacedValue = val.toString().replace(/\s/g, "").substring(0, HEX); + } else { + replacedValue = val.name; + } + } else if (val instanceof Map || val instanceof Set) { + replacedValue = [...val]; + } else if (typeof val === "bigint") { + replacedValue = val.toString(); + } else { + replacedValue = val; + } + return replacedValue; + }); + return res; +}; +const roundToPrecision = (value, bit = 0) => { + if (!Number.isFinite(value)) { + throw new TypeError(`${value} is not a finite number.`); + } + if (!Number.isFinite(bit)) { + throw new TypeError(`${bit} is not a finite number.`); + } else if (bit < 0 || bit > HEX) { + throw new RangeError(`${bit} is not between 0 and ${HEX}.`); + } + if (bit === 0) { + return Math.round(value); + } + let val; + if (bit === HEX) { + val = value.toPrecision(6); + } else if (bit < DEC) { + val = value.toPrecision(4); + } else { + val = value.toPrecision(5); + } + return parseFloat(val); +}; +const interpolateHue = (hueA, hueB, arc = "shorter") => { + if (!Number.isFinite(hueA)) { + throw new TypeError(`${hueA} is not a finite number.`); + } + if (!Number.isFinite(hueB)) { + throw new TypeError(`${hueB} is not a finite number.`); + } + switch (arc) { + case "decreasing": { + if (hueB > hueA) { + hueA += DEG; + } + break; + } + case "increasing": { + if (hueB < hueA) { + hueB += DEG; + } + break; + } + case "longer": { + if (hueB > hueA && hueB < hueA + DEG_HALF) { + hueA += DEG; + } else if (hueB > hueA + DEG_HALF * -1 && hueB <= hueA) { + hueB += DEG; + } + break; + } + case "shorter": + default: { + if (hueB > hueA + DEG_HALF) { + hueA += DEG; + } else if (hueB < hueA + DEG_HALF * -1) { + hueB += DEG; + } + } + } + return [hueA, hueB]; +}; +const absoluteFontSize = /* @__PURE__ */ new Map([ + ["xx-small", 3 / 5], + ["x-small", 3 / 4], + ["small", 8 / 9], + ["medium", 1], + ["large", 6 / 5], + ["x-large", 3 / 2], + ["xx-large", 2], + ["xxx-large", 3] +]); +const relativeFontSize = /* @__PURE__ */ new Map([ + ["smaller", 1 / 1.2], + ["larger", 1.2] +]); +const absoluteLength = /* @__PURE__ */ new Map([ + ["cm", 96 / 2.54], + ["mm", 96 / 2.54 / 10], + ["q", 96 / 2.54 / 40], + ["in", 96], + ["pc", 96 / 6], + ["pt", 96 / 72], + ["px", 1] +]); +const relativeLength = /* @__PURE__ */ new Map([ + ["rcap", 1], + ["rch", 0.5], + ["rem", 1], + ["rex", 0.5], + ["ric", 1], + ["rlh", 1.2] +]); +const resolveLengthInPixels = (value, unit, opt = {}) => { + const { dimension = {} } = opt; + const { callback, em, rem, vh, vw } = dimension; + if (isString(value)) { + value = value.toLowerCase().trim(); + if (absoluteFontSize.has(value)) { + return Number(absoluteFontSize.get(value)) * rem; + } else if (relativeFontSize.has(value)) { + return Number(relativeFontSize.get(value)) * em; + } + return Number.NaN; + } else if (Number.isFinite(value) && unit) { + if (Object.hasOwn(dimension, unit)) { + return value * Number(dimension[unit]); + } else if (typeof callback === "function") { + return value * callback(unit); + } else if (absoluteLength.has(unit)) { + return value * Number(absoluteLength.get(unit)); + } else if (relativeLength.has(unit)) { + return value * Number(relativeLength.get(unit)) * rem; + } else if (relativeLength.has(`r${unit}`)) { + return value * Number(relativeLength.get(`r${unit}`)) * em; + } else { + switch (unit) { + case "vb": + case "vi": { + return value * vw; + } + case "vmax": { + if (vh > vw) { + return value * vh; + } + return value * vw; + } + case "vmin": { + if (vh < vw) { + return value * vh; + } + return value * vw; + } + default: { + return Number.NaN; + } + } + } + } + return Number.NaN; +}; +export { + extractDashedIdent, + interpolateHue, + isColor, + resolveLengthInPixels, + roundToPrecision, + splitValue, + valueToJsonString +}; +//# sourceMappingURL=util.js.map diff --git a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/util.js.map b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/util.js.map new file mode 100644 index 0000000..58fbe48 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/util.js.map @@ -0,0 +1 @@ +{"version":3,"file":"util.js","sources":["../../../src/js/util.ts"],"sourcesContent":["/**\n * util\n */\n\nimport { TokenType, tokenize } from '@csstools/css-tokenizer';\nimport { CacheItem, createCacheKey, getCache, setCache } from './cache';\nimport { isString } from './common';\nimport { resolveColor } from './resolve';\nimport { Options } from './typedef';\n\n/* constants */\nimport { NAMED_COLORS } from './color';\nimport { SYN_COLOR_TYPE, SYN_MIX, VAL_SPEC } from './constant';\nconst {\n CloseParen: PAREN_CLOSE,\n Comma: COMMA,\n Comment: COMMENT,\n Delim: DELIM,\n EOF,\n Function: FUNC,\n Ident: IDENT,\n OpenParen: PAREN_OPEN,\n Whitespace: W_SPACE\n} = TokenType;\nconst NAMESPACE = 'util';\n\n/* numeric constants */\nconst DEC = 10;\nconst HEX = 16;\nconst DEG = 360;\nconst DEG_HALF = 180;\n\n/* regexp */\nconst REG_COLOR = new RegExp(`^(?:${SYN_COLOR_TYPE})$`);\nconst REG_FN_COLOR =\n /^(?:(?:ok)?l(?:ab|ch)|color(?:-mix)?|hsla?|hwb|rgba?|var)\\(/;\nconst REG_MIX = new RegExp(SYN_MIX);\n\n/**\n * split value\n * NOTE: comments are stripped, it can be preserved if, in the options param,\n * `delimiter` is either ',' or '/' and with `preserveComment` set to `true`\n * @param value - CSS value\n * @param [opt] - options\n * @returns array of values\n */\nexport const splitValue = (value: string, opt: Options = {}): string[] => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const { delimiter = ' ', preserveComment = false } = opt;\n const cacheKey: string = createCacheKey(\n {\n namespace: NAMESPACE,\n name: 'splitValue',\n value\n },\n {\n delimiter,\n preserveComment\n }\n );\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as string[];\n }\n let regDelimiter;\n if (delimiter === ',') {\n regDelimiter = /^,$/;\n } else if (delimiter === '/') {\n regDelimiter = /^\\/$/;\n } else {\n regDelimiter = /^\\s+$/;\n }\n const tokens = tokenize({ css: value });\n let nest = 0;\n let str = '';\n const res: string[] = [];\n while (tokens.length) {\n const [type, value] = tokens.shift() as [TokenType, string];\n switch (type) {\n case COMMA: {\n if (regDelimiter.test(value)) {\n if (nest === 0) {\n res.push(str.trim());\n str = '';\n } else {\n str += value;\n }\n } else {\n str += value;\n }\n break;\n }\n case DELIM: {\n if (regDelimiter.test(value)) {\n if (nest === 0) {\n res.push(str.trim());\n str = '';\n } else {\n str += value;\n }\n } else {\n str += value;\n }\n break;\n }\n case COMMENT: {\n if (preserveComment && (delimiter === ',' || delimiter === '/')) {\n str += value;\n }\n break;\n }\n case FUNC:\n case PAREN_OPEN: {\n str += value;\n nest++;\n break;\n }\n case PAREN_CLOSE: {\n str += value;\n nest--;\n break;\n }\n case W_SPACE: {\n if (regDelimiter.test(value)) {\n if (nest === 0) {\n if (str) {\n res.push(str.trim());\n str = '';\n }\n } else {\n str += ' ';\n }\n } else if (!str.endsWith(' ')) {\n str += ' ';\n }\n break;\n }\n default: {\n if (type === EOF) {\n res.push(str.trim());\n str = '';\n } else {\n str += value;\n }\n }\n }\n }\n setCache(cacheKey, res);\n return res;\n};\n\n/**\n * extract dashed-ident tokens\n * @param value - CSS value\n * @returns array of dashed-ident tokens\n */\nexport const extractDashedIdent = (value: string): string[] => {\n if (isString(value)) {\n value = value.trim();\n } else {\n throw new TypeError(`${value} is not a string.`);\n }\n const cacheKey: string = createCacheKey({\n namespace: NAMESPACE,\n name: 'extractDashedIdent',\n value\n });\n const cachedResult = getCache(cacheKey);\n if (cachedResult instanceof CacheItem) {\n return cachedResult.item as string[];\n }\n const tokens = tokenize({ css: value });\n const items = new Set();\n while (tokens.length) {\n const [type, value] = tokens.shift() as [TokenType, string];\n if (type === IDENT && value.startsWith('--')) {\n items.add(value);\n }\n }\n const res = [...items] as string[];\n setCache(cacheKey, res);\n return res;\n};\n\n/**\n * is color\n * @param value - CSS value\n * @param [opt] - options\n * @returns result\n */\nexport const isColor = (value: unknown, opt: Options = {}): boolean => {\n if (isString(value)) {\n value = value.toLowerCase().trim();\n if (value && isString(value)) {\n if (/^[a-z]+$/.test(value)) {\n if (\n /^(?:currentcolor|transparent)$/.test(value) ||\n Object.hasOwn(NAMED_COLORS, value)\n ) {\n return true;\n }\n } else if (REG_COLOR.test(value) || REG_MIX.test(value)) {\n return true;\n } else if (REG_FN_COLOR.test(value)) {\n opt.nullable = true;\n if (!opt.format) {\n opt.format = VAL_SPEC;\n }\n const resolvedValue = resolveColor(value, opt);\n if (resolvedValue) {\n return true;\n }\n }\n }\n }\n return false;\n};\n\n/**\n * value to JSON string\n * @param value - CSS value\n * @param [func] - stringify function\n * @returns stringified value in JSON notation\n */\nexport const valueToJsonString = (\n value: unknown,\n func: boolean = false\n): string => {\n if (typeof value === 'undefined') {\n return '';\n }\n const res = JSON.stringify(value, (_key, val) => {\n let replacedValue;\n if (typeof val === 'undefined') {\n replacedValue = null;\n } else if (typeof val === 'function') {\n if (func) {\n replacedValue = val.toString().replace(/\\s/g, '').substring(0, HEX);\n } else {\n replacedValue = val.name;\n }\n } else if (val instanceof Map || val instanceof Set) {\n replacedValue = [...val];\n } else if (typeof val === 'bigint') {\n replacedValue = val.toString();\n } else {\n replacedValue = val;\n }\n return replacedValue;\n });\n return res;\n};\n\n/**\n * round to specified precision\n * @param value - numeric value\n * @param bit - minimum bits\n * @returns rounded value\n */\nexport const roundToPrecision = (value: number, bit: number = 0): number => {\n if (!Number.isFinite(value)) {\n throw new TypeError(`${value} is not a finite number.`);\n }\n if (!Number.isFinite(bit)) {\n throw new TypeError(`${bit} is not a finite number.`);\n } else if (bit < 0 || bit > HEX) {\n throw new RangeError(`${bit} is not between 0 and ${HEX}.`);\n }\n if (bit === 0) {\n return Math.round(value);\n }\n let val;\n if (bit === HEX) {\n val = value.toPrecision(6);\n } else if (bit < DEC) {\n val = value.toPrecision(4);\n } else {\n val = value.toPrecision(5);\n }\n return parseFloat(val);\n};\n\n/**\n * interpolate hue\n * @param hueA - hue value\n * @param hueB - hue value\n * @param arc - shorter | longer | increasing | decreasing\n * @returns result - [hueA, hueB]\n */\nexport const interpolateHue = (\n hueA: number,\n hueB: number,\n arc: string = 'shorter'\n): [number, number] => {\n if (!Number.isFinite(hueA)) {\n throw new TypeError(`${hueA} is not a finite number.`);\n }\n if (!Number.isFinite(hueB)) {\n throw new TypeError(`${hueB} is not a finite number.`);\n }\n switch (arc) {\n case 'decreasing': {\n if (hueB > hueA) {\n hueA += DEG;\n }\n break;\n }\n case 'increasing': {\n if (hueB < hueA) {\n hueB += DEG;\n }\n break;\n }\n case 'longer': {\n if (hueB > hueA && hueB < hueA + DEG_HALF) {\n hueA += DEG;\n } else if (hueB > hueA + DEG_HALF * -1 && hueB <= hueA) {\n hueB += DEG;\n }\n break;\n }\n case 'shorter':\n default: {\n if (hueB > hueA + DEG_HALF) {\n hueA += DEG;\n } else if (hueB < hueA + DEG_HALF * -1) {\n hueB += DEG;\n }\n }\n }\n return [hueA, hueB];\n};\n\n/* absolute font size to pixel ratio */\nconst absoluteFontSize = new Map([\n ['xx-small', 3 / 5],\n ['x-small', 3 / 4],\n ['small', 8 / 9],\n ['medium', 1],\n ['large', 6 / 5],\n ['x-large', 3 / 2],\n ['xx-large', 2],\n ['xxx-large', 3]\n]);\n\n/* relative font size to pixel ratio */\nconst relativeFontSize = new Map([\n ['smaller', 1 / 1.2],\n ['larger', 1.2]\n]);\n\n/* absolute length to pixel ratio */\nconst absoluteLength = new Map([\n ['cm', 96 / 2.54],\n ['mm', 96 / 2.54 / 10],\n ['q', 96 / 2.54 / 40],\n ['in', 96],\n ['pc', 96 / 6],\n ['pt', 96 / 72],\n ['px', 1]\n]);\n\n/* relative length to pixel ratio */\nconst relativeLength = new Map([\n ['rcap', 1],\n ['rch', 0.5],\n ['rem', 1],\n ['rex', 0.5],\n ['ric', 1],\n ['rlh', 1.2]\n]);\n\n/**\n * resolve length in pixels\n * @param value - value\n * @param unit - unit\n * @param [opt] - options\n * @returns pixelated value\n */\nexport const resolveLengthInPixels = (\n value: number | string,\n unit: string | undefined,\n opt: Options = {}\n): number => {\n const { dimension = {} } = opt;\n const { callback, em, rem, vh, vw } = dimension as {\n callback: (K: string) => number;\n em: number;\n rem: number;\n vh: number;\n vw: number;\n };\n if (isString(value)) {\n value = value.toLowerCase().trim();\n if (absoluteFontSize.has(value)) {\n return Number(absoluteFontSize.get(value)) * rem;\n } else if (relativeFontSize.has(value)) {\n return Number(relativeFontSize.get(value)) * em;\n }\n return Number.NaN;\n } else if (Number.isFinite(value) && unit) {\n if (Object.hasOwn(dimension, unit)) {\n return value * Number(dimension[unit]);\n } else if (typeof callback === 'function') {\n return value * callback(unit);\n } else if (absoluteLength.has(unit)) {\n return value * Number(absoluteLength.get(unit));\n } else if (relativeLength.has(unit)) {\n return value * Number(relativeLength.get(unit)) * rem;\n } else if (relativeLength.has(`r${unit}`)) {\n return value * Number(relativeLength.get(`r${unit}`)) * em;\n } else {\n switch (unit) {\n case 'vb':\n case 'vi': {\n return value * vw;\n }\n case 'vmax': {\n if (vh > vw) {\n return value * vh;\n }\n return value * vw;\n }\n case 'vmin': {\n if (vh < vw) {\n return value * vh;\n }\n return value * vw;\n }\n default: {\n // unsupported or invalid unit\n return Number.NaN;\n }\n }\n }\n }\n // unsupported or invalid value\n return Number.NaN;\n};\n"],"names":["value"],"mappings":"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"}
\ No newline at end of file diff --git a/vanilla/node_modules/@asamuzakjp/css-color/package.json b/vanilla/node_modules/@asamuzakjp/css-color/package.json new file mode 100644 index 0000000..fcb2f21 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/package.json @@ -0,0 +1,82 @@ +{ + "name": "@asamuzakjp/css-color", + "description": "CSS color - Resolve and convert CSS colors.", + "author": "asamuzaK", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/asamuzaK/cssColor.git" + }, + "homepage": "https://github.com/asamuzaK/cssColor#readme", + "bugs": { + "url": "https://github.com/asamuzaK/cssColor/issues" + }, + "files": [ + "dist", + "src" + ], + "type": "module", + "types": "dist/esm/index.d.ts", + "module": "dist/esm/index.js", + "main": "dist/cjs/index.cjs", + "exports": { + ".": { + "import": { + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + }, + "require": { + "types": "./dist/cjs/index.d.cts", + "default": "./dist/cjs/index.cjs" + } + }, + "./package.json": "./package.json" + }, + "dependencies": { + "@csstools/css-calc": "^3.0.0", + "@csstools/css-color-parser": "^4.0.1", + "@csstools/css-parser-algorithms": "^4.0.0", + "@csstools/css-tokenizer": "^4.0.0", + "lru-cache": "^11.2.5" + }, + "devDependencies": { + "@tanstack/vite-config": "^0.4.3", + "@vitest/coverage-istanbul": "^4.0.18", + "esbuild": "^0.27.2", + "eslint": "^9.39.2", + "eslint-plugin-regexp": "^3.0.0", + "globals": "^17.3.0", + "knip": "^5.83.0", + "neostandard": "^0.12.2", + "prettier": "^3.8.1", + "publint": "^0.3.17", + "rimraf": "^6.1.2", + "tsup": "^8.5.1", + "typescript": "^5.9.3", + "vite": "^7.3.1", + "vitest": "^4.0.18" + }, + "packageManager": "pnpm@10.28.2", + "pnpm": { + "onlyBuiltDependencies": [ + "esbuild", + "oxc-resolver", + "unrs-resolver" + ] + }, + "scripts": { + "build": "pnpm run clean && pnpm run test && pnpm run knip && pnpm run build:prod && pnpm run build:cjs && pnpm run build:browser && pnpm run publint", + "build:browser": "vite build -c ./vite.browser.config.ts", + "build:prod": "vite build", + "build:cjs": "tsup ./src/index.ts --format=cjs --platform=node --outDir=./dist/cjs/ --sourcemap --dts", + "clean": "rimraf ./coverage ./dist", + "knip": "knip", + "prettier": "prettier . --ignore-unknown --write", + "publint": "publint --strict", + "test": "pnpm run prettier && pnpm run --stream \"/^test:.*/\"", + "test:eslint": "eslint ./src ./test --fix", + "test:types": "tsc", + "test:unit": "vitest" + }, + "version": "4.1.2" +} diff --git a/vanilla/node_modules/@asamuzakjp/css-color/src/index.ts b/vanilla/node_modules/@asamuzakjp/css-color/src/index.ts new file mode 100644 index 0000000..9516d40 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/src/index.ts @@ -0,0 +1,30 @@ +/*! + * CSS color - Resolve, parse, convert CSS color. + * @license MIT + * @copyright asamuzaK (Kazz) + * @see {@link https://github.com/asamuzaK/cssColor/blob/main/LICENSE} + */ + +import { cssCalc } from './js/css-calc'; +import { isGradient, resolveGradient } from './js/css-gradient'; +import { cssVar } from './js/css-var'; +import { + extractDashedIdent, + isColor, + resolveLengthInPixels, + splitValue +} from './js/util'; + +export { convert } from './js/convert'; +export { resolve } from './js/resolve'; +/* utils */ +export const utils = { + cssCalc, + cssVar, + extractDashedIdent, + isColor, + isGradient, + resolveGradient, + resolveLengthInPixels, + splitValue +}; diff --git a/vanilla/node_modules/@asamuzakjp/css-color/src/js/cache.ts b/vanilla/node_modules/@asamuzakjp/css-color/src/js/cache.ts new file mode 100644 index 0000000..8642113 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/src/js/cache.ts @@ -0,0 +1,114 @@ +/** + * cache + */ + +import { LRUCache } from 'lru-cache'; +import { Options } from './typedef'; +import { valueToJsonString } from './util'; + +/* numeric constants */ +const MAX_CACHE = 4096; + +/** + * CacheItem + */ +export class CacheItem { + /* private */ + #isNull: boolean; + #item: unknown; + + /** + * constructor + */ + constructor(item: unknown, isNull: boolean = false) { + this.#item = item; + this.#isNull = !!isNull; + } + + get item() { + return this.#item; + } + + get isNull() { + return this.#isNull; + } +} + +/** + * NullObject + */ +export class NullObject extends CacheItem { + /** + * constructor + */ + constructor() { + super(Symbol('null'), true); + } +} + +/* + * lru cache + */ +export const lruCache = new LRUCache({ + max: MAX_CACHE +}); + +/** + * set cache + * @param key - cache key + * @param value - value to cache + * @returns void + */ +export const setCache = (key: string, value: unknown): void => { + if (key) { + if (value === null) { + lruCache.set(key, new NullObject()); + } else if (value instanceof CacheItem) { + lruCache.set(key, value); + } else { + lruCache.set(key, new CacheItem(value)); + } + } +}; + +/** + * get cache + * @param key - cache key + * @returns cached item or false otherwise + */ +export const getCache = (key: string): CacheItem | boolean => { + if (key && lruCache.has(key)) { + const item = lruCache.get(key); + if (item instanceof CacheItem) { + return item; + } + // delete unexpected cached item + lruCache.delete(key); + return false; + } + return false; +}; + +/** + * create cache key + * @param keyData - key data + * @param [opt] - options + * @returns cache key + */ +export const createCacheKey = ( + keyData: Record<string, string>, + opt: Options = {} +): string => { + const { customProperty = {}, dimension = {} } = opt; + let cacheKey = ''; + if ( + keyData && + Object.keys(keyData).length && + typeof customProperty.callback !== 'function' && + typeof dimension.callback !== 'function' + ) { + keyData.opt = valueToJsonString(opt); + cacheKey = valueToJsonString(keyData); + } + return cacheKey; +}; diff --git a/vanilla/node_modules/@asamuzakjp/css-color/src/js/color.ts b/vanilla/node_modules/@asamuzakjp/css-color/src/js/color.ts new file mode 100644 index 0000000..2fe737d --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/src/js/color.ts @@ -0,0 +1,3511 @@ +/** + * color + * + * Ref: CSS Color Module Level 4 + * Sample code for Color Conversions + * https://w3c.github.io/csswg-drafts/css-color-4/#color-conversion-code + */ + +import { + CacheItem, + NullObject, + createCacheKey, + getCache, + setCache +} from './cache'; +import { isString } from './common'; +import { resolveColor } from './resolve'; +import { interpolateHue, roundToPrecision, splitValue } from './util'; +import { + ColorChannels, + ComputedColorChannels, + Options, + MatchedRegExp, + SpecifiedColorChannels, + StringColorChannels, + StringColorSpacedChannels +} from './typedef'; + +/* constants */ +import { + ANGLE, + CS_HUE_CAPT, + CS_MIX, + CS_RGB, + CS_XYZ, + FN_COLOR, + FN_LIGHT_DARK, + FN_MIX, + NONE, + NUM, + PCT, + SYN_COLOR_TYPE, + SYN_FN_COLOR, + SYN_HSL, + SYN_HSL_LV3, + SYN_LCH, + SYN_MIX, + SYN_MIX_CAPT, + SYN_MIX_PART, + SYN_MOD, + SYN_RGB_LV3, + VAL_COMP, + VAL_MIX, + VAL_SPEC +} from './constant'; +const NAMESPACE = 'color'; + +/* numeric constants */ +const PPTH = 0.001; +const HALF = 0.5; +const DUO = 2; +const TRIA = 3; +const QUAD = 4; +const OCT = 8; +const DEC = 10; +const DOZ = 12; +const HEX = 16; +const SEXA = 60; +const DEG_HALF = 180; +const DEG = 360; +const MAX_PCT = 100; +const MAX_RGB = 255; +const POW_SQR = 2; +const POW_CUBE = 3; +const POW_LINEAR = 2.4; +const LINEAR_COEF = 12.92; +const LINEAR_OFFSET = 0.055; +const LAB_L = 116; +const LAB_A = 500; +const LAB_B = 200; +const LAB_EPSILON = 216 / 24389; +const LAB_KAPPA = 24389 / 27; + +/* type definitions */ +/** + * @type NumStrColorChannels - string or numeric color channels + */ +type NumStrColorChannels = [ + x: number | string, + y: number | string, + z: number | string, + alpha: number | string +]; + +/** + * @type TriColorChannels - color channels without alpha + */ +type TriColorChannels = [x: number, y: number, z: number]; + +/** + * @type ColorMatrix - color matrix + */ +type ColorMatrix = [ + r1: TriColorChannels, + r2: TriColorChannels, + r3: TriColorChannels +]; + +/* white point */ +const D50: TriColorChannels = [ + 0.3457 / 0.3585, + 1.0, + (1.0 - 0.3457 - 0.3585) / 0.3585 +]; +const MATRIX_D50_TO_D65: ColorMatrix = [ + [0.955473421488075, -0.02309845494876471, 0.06325924320057072], + [-0.0283697093338637, 1.0099953980813041, 0.021041441191917323], + [0.012314014864481998, -0.020507649298898964, 1.330365926242124] +]; +const MATRIX_D65_TO_D50: ColorMatrix = [ + [1.0479297925449969, 0.022946870601609652, -0.05019226628920524], + [0.02962780877005599, 0.9904344267538799, -0.017073799063418826], + [-0.009243040646204504, 0.015055191490298152, 0.7518742814281371] +]; + +/* color space */ +const MATRIX_L_RGB_TO_XYZ: ColorMatrix = [ + [506752 / 1228815, 87881 / 245763, 12673 / 70218], + [87098 / 409605, 175762 / 245763, 12673 / 175545], + [7918 / 409605, 87881 / 737289, 1001167 / 1053270] +]; +const MATRIX_XYZ_TO_L_RGB: ColorMatrix = [ + [12831 / 3959, -329 / 214, -1974 / 3959], + [-851781 / 878810, 1648619 / 878810, 36519 / 878810], + [705 / 12673, -2585 / 12673, 705 / 667] +]; +const MATRIX_XYZ_TO_LMS: ColorMatrix = [ + [0.819022437996703, 0.3619062600528904, -0.1288737815209879], + [0.0329836539323885, 0.9292868615863434, 0.0361446663506424], + [0.0481771893596242, 0.2642395317527308, 0.6335478284694309] +]; +const MATRIX_LMS_TO_XYZ: ColorMatrix = [ + [1.2268798758459243, -0.5578149944602171, 0.2813910456659647], + [-0.0405757452148008, 1.112286803280317, -0.0717110580655164], + [-0.0763729366746601, -0.4214933324022432, 1.5869240198367816] +]; +const MATRIX_OKLAB_TO_LMS: ColorMatrix = [ + [1.0, 0.3963377773761749, 0.2158037573099136], + [1.0, -0.1055613458156586, -0.0638541728258133], + [1.0, -0.0894841775298119, -1.2914855480194092] +]; +const MATRIX_LMS_TO_OKLAB: ColorMatrix = [ + [0.210454268309314, 0.7936177747023054, -0.0040720430116193], + [1.9779985324311684, -2.4285922420485799, 0.450593709617411], + [0.0259040424655478, 0.7827717124575296, -0.8086757549230774] +]; +const MATRIX_P3_TO_XYZ: ColorMatrix = [ + [608311 / 1250200, 189793 / 714400, 198249 / 1000160], + [35783 / 156275, 247089 / 357200, 198249 / 2500400], + [0 / 1, 32229 / 714400, 5220557 / 5000800] +]; +const MATRIX_REC2020_TO_XYZ: ColorMatrix = [ + [63426534 / 99577255, 20160776 / 139408157, 47086771 / 278816314], + [26158966 / 99577255, 472592308 / 697040785, 8267143 / 139408157], + [0 / 1, 19567812 / 697040785, 295819943 / 278816314] +]; +const MATRIX_A98_TO_XYZ: ColorMatrix = [ + [573536 / 994567, 263643 / 1420810, 187206 / 994567], + [591459 / 1989134, 6239551 / 9945670, 374412 / 4972835], + [53769 / 1989134, 351524 / 4972835, 4929758 / 4972835] +]; +const MATRIX_PROPHOTO_TO_XYZ_D50: ColorMatrix = [ + [0.7977666449006423, 0.13518129740053308, 0.0313477341283922], + [0.2880748288194013, 0.711835234241873, 0.00008993693872564], + [0.0, 0.0, 0.8251046025104602] +]; + +/* regexp */ +const REG_COLOR = new RegExp(`^(?:${SYN_COLOR_TYPE})$`); +const REG_CS_HUE = new RegExp(`^${CS_HUE_CAPT}$`); +const REG_CS_XYZ = /^xyz(?:-d(?:50|65))?$/; +const REG_CURRENT = /^currentColor$/i; +const REG_FN_COLOR = new RegExp(`^color\\(\\s*(${SYN_FN_COLOR})\\s*\\)$`); +const REG_HSL = new RegExp(`^hsla?\\(\\s*(${SYN_HSL}|${SYN_HSL_LV3})\\s*\\)$`); +const REG_HWB = new RegExp(`^hwb\\(\\s*(${SYN_HSL})\\s*\\)$`); +const REG_LAB = new RegExp(`^lab\\(\\s*(${SYN_MOD})\\s*\\)$`); +const REG_LCH = new RegExp(`^lch\\(\\s*(${SYN_LCH})\\s*\\)$`); +const REG_MIX = new RegExp(`^${SYN_MIX}$`); +const REG_MIX_CAPT = new RegExp(`^${SYN_MIX_CAPT}$`); +const REG_MIX_NEST = new RegExp(`${SYN_MIX}`, 'g'); +const REG_OKLAB = new RegExp(`^oklab\\(\\s*(${SYN_MOD})\\s*\\)$`); +const REG_OKLCH = new RegExp(`^oklch\\(\\s*(${SYN_LCH})\\s*\\)$`); +const REG_SPEC = /^(?:specifi|comput)edValue$/; + +/** + * named colors + */ +export const NAMED_COLORS = { + aliceblue: [0xf0, 0xf8, 0xff], + antiquewhite: [0xfa, 0xeb, 0xd7], + aqua: [0x00, 0xff, 0xff], + aquamarine: [0x7f, 0xff, 0xd4], + azure: [0xf0, 0xff, 0xff], + beige: [0xf5, 0xf5, 0xdc], + bisque: [0xff, 0xe4, 0xc4], + black: [0x00, 0x00, 0x00], + blanchedalmond: [0xff, 0xeb, 0xcd], + blue: [0x00, 0x00, 0xff], + blueviolet: [0x8a, 0x2b, 0xe2], + brown: [0xa5, 0x2a, 0x2a], + burlywood: [0xde, 0xb8, 0x87], + cadetblue: [0x5f, 0x9e, 0xa0], + chartreuse: [0x7f, 0xff, 0x00], + chocolate: [0xd2, 0x69, 0x1e], + coral: [0xff, 0x7f, 0x50], + cornflowerblue: [0x64, 0x95, 0xed], + cornsilk: [0xff, 0xf8, 0xdc], + crimson: [0xdc, 0x14, 0x3c], + cyan: [0x00, 0xff, 0xff], + darkblue: [0x00, 0x00, 0x8b], + darkcyan: [0x00, 0x8b, 0x8b], + darkgoldenrod: [0xb8, 0x86, 0x0b], + darkgray: [0xa9, 0xa9, 0xa9], + darkgreen: [0x00, 0x64, 0x00], + darkgrey: [0xa9, 0xa9, 0xa9], + darkkhaki: [0xbd, 0xb7, 0x6b], + darkmagenta: [0x8b, 0x00, 0x8b], + darkolivegreen: [0x55, 0x6b, 0x2f], + darkorange: [0xff, 0x8c, 0x00], + darkorchid: [0x99, 0x32, 0xcc], + darkred: [0x8b, 0x00, 0x00], + darksalmon: [0xe9, 0x96, 0x7a], + darkseagreen: [0x8f, 0xbc, 0x8f], + darkslateblue: [0x48, 0x3d, 0x8b], + darkslategray: [0x2f, 0x4f, 0x4f], + darkslategrey: [0x2f, 0x4f, 0x4f], + darkturquoise: [0x00, 0xce, 0xd1], + darkviolet: [0x94, 0x00, 0xd3], + deeppink: [0xff, 0x14, 0x93], + deepskyblue: [0x00, 0xbf, 0xff], + dimgray: [0x69, 0x69, 0x69], + dimgrey: [0x69, 0x69, 0x69], + dodgerblue: [0x1e, 0x90, 0xff], + firebrick: [0xb2, 0x22, 0x22], + floralwhite: [0xff, 0xfa, 0xf0], + forestgreen: [0x22, 0x8b, 0x22], + fuchsia: [0xff, 0x00, 0xff], + gainsboro: [0xdc, 0xdc, 0xdc], + ghostwhite: [0xf8, 0xf8, 0xff], + gold: [0xff, 0xd7, 0x00], + goldenrod: [0xda, 0xa5, 0x20], + gray: [0x80, 0x80, 0x80], + green: [0x00, 0x80, 0x00], + greenyellow: [0xad, 0xff, 0x2f], + grey: [0x80, 0x80, 0x80], + honeydew: [0xf0, 0xff, 0xf0], + hotpink: [0xff, 0x69, 0xb4], + indianred: [0xcd, 0x5c, 0x5c], + indigo: [0x4b, 0x00, 0x82], + ivory: [0xff, 0xff, 0xf0], + khaki: [0xf0, 0xe6, 0x8c], + lavender: [0xe6, 0xe6, 0xfa], + lavenderblush: [0xff, 0xf0, 0xf5], + lawngreen: [0x7c, 0xfc, 0x00], + lemonchiffon: [0xff, 0xfa, 0xcd], + lightblue: [0xad, 0xd8, 0xe6], + lightcoral: [0xf0, 0x80, 0x80], + lightcyan: [0xe0, 0xff, 0xff], + lightgoldenrodyellow: [0xfa, 0xfa, 0xd2], + lightgray: [0xd3, 0xd3, 0xd3], + lightgreen: [0x90, 0xee, 0x90], + lightgrey: [0xd3, 0xd3, 0xd3], + lightpink: [0xff, 0xb6, 0xc1], + lightsalmon: [0xff, 0xa0, 0x7a], + lightseagreen: [0x20, 0xb2, 0xaa], + lightskyblue: [0x87, 0xce, 0xfa], + lightslategray: [0x77, 0x88, 0x99], + lightslategrey: [0x77, 0x88, 0x99], + lightsteelblue: [0xb0, 0xc4, 0xde], + lightyellow: [0xff, 0xff, 0xe0], + lime: [0x00, 0xff, 0x00], + limegreen: [0x32, 0xcd, 0x32], + linen: [0xfa, 0xf0, 0xe6], + magenta: [0xff, 0x00, 0xff], + maroon: [0x80, 0x00, 0x00], + mediumaquamarine: [0x66, 0xcd, 0xaa], + mediumblue: [0x00, 0x00, 0xcd], + mediumorchid: [0xba, 0x55, 0xd3], + mediumpurple: [0x93, 0x70, 0xdb], + mediumseagreen: [0x3c, 0xb3, 0x71], + mediumslateblue: [0x7b, 0x68, 0xee], + mediumspringgreen: [0x00, 0xfa, 0x9a], + mediumturquoise: [0x48, 0xd1, 0xcc], + mediumvioletred: [0xc7, 0x15, 0x85], + midnightblue: [0x19, 0x19, 0x70], + mintcream: [0xf5, 0xff, 0xfa], + mistyrose: [0xff, 0xe4, 0xe1], + moccasin: [0xff, 0xe4, 0xb5], + navajowhite: [0xff, 0xde, 0xad], + navy: [0x00, 0x00, 0x80], + oldlace: [0xfd, 0xf5, 0xe6], + olive: [0x80, 0x80, 0x00], + olivedrab: [0x6b, 0x8e, 0x23], + orange: [0xff, 0xa5, 0x00], + orangered: [0xff, 0x45, 0x00], + orchid: [0xda, 0x70, 0xd6], + palegoldenrod: [0xee, 0xe8, 0xaa], + palegreen: [0x98, 0xfb, 0x98], + paleturquoise: [0xaf, 0xee, 0xee], + palevioletred: [0xdb, 0x70, 0x93], + papayawhip: [0xff, 0xef, 0xd5], + peachpuff: [0xff, 0xda, 0xb9], + peru: [0xcd, 0x85, 0x3f], + pink: [0xff, 0xc0, 0xcb], + plum: [0xdd, 0xa0, 0xdd], + powderblue: [0xb0, 0xe0, 0xe6], + purple: [0x80, 0x00, 0x80], + rebeccapurple: [0x66, 0x33, 0x99], + red: [0xff, 0x00, 0x00], + rosybrown: [0xbc, 0x8f, 0x8f], + royalblue: [0x41, 0x69, 0xe1], + saddlebrown: [0x8b, 0x45, 0x13], + salmon: [0xfa, 0x80, 0x72], + sandybrown: [0xf4, 0xa4, 0x60], + seagreen: [0x2e, 0x8b, 0x57], + seashell: [0xff, 0xf5, 0xee], + sienna: [0xa0, 0x52, 0x2d], + silver: [0xc0, 0xc0, 0xc0], + skyblue: [0x87, 0xce, 0xeb], + slateblue: [0x6a, 0x5a, 0xcd], + slategray: [0x70, 0x80, 0x90], + slategrey: [0x70, 0x80, 0x90], + snow: [0xff, 0xfa, 0xfa], + springgreen: [0x00, 0xff, 0x7f], + steelblue: [0x46, 0x82, 0xb4], + tan: [0xd2, 0xb4, 0x8c], + teal: [0x00, 0x80, 0x80], + thistle: [0xd8, 0xbf, 0xd8], + tomato: [0xff, 0x63, 0x47], + turquoise: [0x40, 0xe0, 0xd0], + violet: [0xee, 0x82, 0xee], + wheat: [0xf5, 0xde, 0xb3], + white: [0xff, 0xff, 0xff], + whitesmoke: [0xf5, 0xf5, 0xf5], + yellow: [0xff, 0xff, 0x00], + yellowgreen: [0x9a, 0xcd, 0x32] +} as const satisfies { + [key: string]: TriColorChannels; +}; + +/** + * cache invalid color value + * @param key - cache key + * @param nullable - is nullable + * @returns cached value + */ +export const cacheInvalidColorValue = ( + cacheKey: string, + format: string, + nullable: boolean = false +): SpecifiedColorChannels | string | NullObject => { + if (format === VAL_SPEC) { + const res = ''; + setCache(cacheKey, res); + return res; + } + if (nullable) { + setCache(cacheKey, null); + return new NullObject(); + } + const res: SpecifiedColorChannels = ['rgb', 0, 0, 0, 0]; + setCache(cacheKey, res); + return res; +}; + +/** + * resolve invalid color value + * @param format - output format + * @param nullable - is nullable + * @returns resolved value + */ +export const resolveInvalidColorValue = ( + format: string, + nullable: boolean = false +): SpecifiedColorChannels | string | NullObject => { + switch (format) { + case 'hsl': + case 'hwb': + case VAL_MIX: { + return new NullObject(); + } + case VAL_SPEC: { + return ''; + } + default: { + if (nullable) { + return new NullObject(); + } + return ['rgb', 0, 0, 0, 0] as SpecifiedColorChannels; + } + } +}; + +/** + * validate color components + * @param arr - color components + * @param [opt] - options + * @param [opt.alpha] - alpha channel + * @param [opt.minLength] - min length + * @param [opt.maxLength] - max length + * @param [opt.minRange] - min range + * @param [opt.maxRange] - max range + * @param [opt.validateRange] - validate range + * @returns result - validated color components + */ +export const validateColorComponents = ( + arr: ColorChannels | TriColorChannels, + opt: { + alpha?: boolean; + minLength?: number; + maxLength?: number; + minRange?: number; + maxRange?: number; + validateRange?: boolean; + } = {} +): ColorChannels | TriColorChannels => { + if (!Array.isArray(arr)) { + throw new TypeError(`${arr} is not an array.`); + } + const { + alpha = false, + minLength = TRIA, + maxLength = QUAD, + minRange = 0, + maxRange = 1, + validateRange = true + } = opt; + if (!Number.isFinite(minLength)) { + throw new TypeError(`${minLength} is not a number.`); + } + if (!Number.isFinite(maxLength)) { + throw new TypeError(`${maxLength} is not a number.`); + } + if (!Number.isFinite(minRange)) { + throw new TypeError(`${minRange} is not a number.`); + } + if (!Number.isFinite(maxRange)) { + throw new TypeError(`${maxRange} is not a number.`); + } + const l = arr.length; + if (l < minLength || l > maxLength) { + throw new Error(`Unexpected array length ${l}.`); + } + let i = 0; + while (i < l) { + const v = arr[i] as number; + if (!Number.isFinite(v)) { + throw new TypeError(`${v} is not a number.`); + } else if (i < TRIA && validateRange && (v < minRange || v > maxRange)) { + throw new RangeError(`${v} is not between ${minRange} and ${maxRange}.`); + } else if (i === TRIA && (v < 0 || v > 1)) { + throw new RangeError(`${v} is not between 0 and 1.`); + } + i++; + } + if (alpha && l === TRIA) { + arr.push(1); + } + return arr; +}; + +/** + * transform matrix + * @param mtx - 3 * 3 matrix + * @param vct - vector + * @param [skip] - skip validate + * @returns TriColorChannels - [p1, p2, p3] + */ +export const transformMatrix = ( + mtx: ColorMatrix, + vct: TriColorChannels, + skip: boolean = false +): TriColorChannels => { + if (!Array.isArray(mtx)) { + throw new TypeError(`${mtx} is not an array.`); + } else if (mtx.length !== TRIA) { + throw new Error(`Unexpected array length ${mtx.length}.`); + } else if (!skip) { + for (let i of mtx) { + i = validateColorComponents(i as TriColorChannels, { + maxLength: TRIA, + validateRange: false + }) as TriColorChannels; + } + } + const [[r1c1, r1c2, r1c3], [r2c1, r2c2, r2c3], [r3c1, r3c2, r3c3]] = mtx; + let v1, v2, v3; + if (skip) { + [v1, v2, v3] = vct; + } else { + [v1, v2, v3] = validateColorComponents(vct, { + maxLength: TRIA, + validateRange: false + }); + } + const p1 = r1c1 * v1 + r1c2 * v2 + r1c3 * v3; + const p2 = r2c1 * v1 + r2c2 * v2 + r2c3 * v3; + const p3 = r3c1 * v1 + r3c2 * v2 + r3c3 * v3; + return [p1, p2, p3]; +}; + +/** + * normalize color components + * @param colorA - color components [v1, v2, v3, v4] + * @param colorB - color components [v1, v2, v3, v4] + * @param [skip] - skip validate + * @returns result - [colorA, colorB] + */ +export const normalizeColorComponents = ( + colorA: [number | string, number | string, number | string, number | string], + colorB: [number | string, number | string, number | string, number | string], + skip: boolean = false +): [ColorChannels, ColorChannels] => { + if (!Array.isArray(colorA)) { + throw new TypeError(`${colorA} is not an array.`); + } else if (colorA.length !== QUAD) { + throw new Error(`Unexpected array length ${colorA.length}.`); + } + if (!Array.isArray(colorB)) { + throw new TypeError(`${colorB} is not an array.`); + } else if (colorB.length !== QUAD) { + throw new Error(`Unexpected array length ${colorB.length}.`); + } + let i = 0; + while (i < QUAD) { + if (colorA[i] === NONE && colorB[i] === NONE) { + colorA[i] = 0; + colorB[i] = 0; + } else if (colorA[i] === NONE) { + colorA[i] = colorB[i] as number; + } else if (colorB[i] === NONE) { + colorB[i] = colorA[i] as number; + } + i++; + } + if (skip) { + return [colorA as ColorChannels, colorB as ColorChannels]; + } + const validatedColorA = validateColorComponents(colorA as ColorChannels, { + minLength: QUAD, + validateRange: false + }); + const validatedColorB = validateColorComponents(colorB as ColorChannels, { + minLength: QUAD, + validateRange: false + }); + return [validatedColorA as ColorChannels, validatedColorB as ColorChannels]; +}; + +/** + * number to hex string + * @param value - numeric value + * @returns hex string + */ +export const numberToHexString = (value: number): string => { + if (!Number.isFinite(value)) { + throw new TypeError(`${value} is not a number.`); + } else { + value = Math.round(value); + if (value < 0 || value > MAX_RGB) { + throw new RangeError(`${value} is not between 0 and ${MAX_RGB}.`); + } + } + let hex = value.toString(HEX); + if (hex.length === 1) { + hex = `0${hex}`; + } + return hex; +}; + +/** + * angle to deg + * @param angle + * @returns deg: 0..360 + */ +export const angleToDeg = (angle: string): number => { + if (isString(angle)) { + angle = angle.trim(); + } else { + throw new TypeError(`${angle} is not a string.`); + } + const GRAD = DEG / 400; + const RAD = DEG / (Math.PI * DUO); + const reg = new RegExp(`^(${NUM})(${ANGLE})?$`); + if (!reg.test(angle)) { + throw new SyntaxError(`Invalid property value: ${angle}`); + } + const [, value, unit] = angle.match(reg) as MatchedRegExp; + let deg; + switch (unit) { + case 'grad': + deg = parseFloat(value) * GRAD; + break; + case 'rad': + deg = parseFloat(value) * RAD; + break; + case 'turn': + deg = parseFloat(value) * DEG; + break; + default: + deg = parseFloat(value); + } + deg %= DEG; + if (deg < 0) { + deg += DEG; + } else if (Object.is(deg, -0)) { + deg = 0; + } + return deg; +}; + +/** + * parse alpha + * @param [alpha] - alpha value + * @returns alpha: 0..1 + */ +export const parseAlpha = (alpha: string = ''): number => { + if (isString(alpha)) { + alpha = alpha.trim(); + if (!alpha) { + alpha = '1'; + } else if (alpha === NONE) { + alpha = '0'; + } else { + let a; + if (alpha.endsWith('%')) { + a = parseFloat(alpha) / MAX_PCT; + } else { + a = parseFloat(alpha); + } + if (!Number.isFinite(a)) { + throw new TypeError(`${a} is not a finite number.`); + } + if (a < PPTH) { + alpha = '0'; + } else if (a > 1) { + alpha = '1'; + } else { + alpha = a.toFixed(TRIA); + } + } + } else { + alpha = '1'; + } + return parseFloat(alpha); +}; + +/** + * parse hex alpha + * @param value - alpha value in hex string + * @returns alpha: 0..1 + */ +export const parseHexAlpha = (value: string): number => { + if (isString(value)) { + if (value === '') { + throw new SyntaxError('Invalid property value: (empty string)'); + } + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + let alpha = parseInt(value, HEX); + if (alpha <= 0) { + return 0; + } + if (alpha >= MAX_RGB) { + return 1; + } + const alphaMap = new Map(); + for (let i = 1; i < MAX_PCT; i++) { + alphaMap.set(Math.round((i * MAX_RGB) / MAX_PCT), i); + } + if (alphaMap.has(alpha)) { + alpha = alphaMap.get(alpha) / MAX_PCT; + } else { + alpha = Math.round(alpha / MAX_RGB / PPTH) * PPTH; + } + return parseFloat(alpha.toFixed(TRIA)); +}; + +/** + * transform rgb to linear rgb + * @param rgb - [r, g, b] r|g|b: 0..255 + * @param [skip] - skip validate + * @returns TriColorChannels - [r, g, b] r|g|b: 0..1 + */ +export const transformRgbToLinearRgb = ( + rgb: TriColorChannels, + skip: boolean = false +): TriColorChannels => { + let rr, gg, bb; + if (skip) { + [rr, gg, bb] = rgb; + } else { + [rr, gg, bb] = validateColorComponents(rgb, { + maxLength: TRIA, + maxRange: MAX_RGB + }); + } + let r = rr / MAX_RGB; + let g = gg / MAX_RGB; + let b = bb / MAX_RGB; + const COND_POW = 0.04045; + if (r > COND_POW) { + r = Math.pow((r + LINEAR_OFFSET) / (1 + LINEAR_OFFSET), POW_LINEAR); + } else { + r /= LINEAR_COEF; + } + if (g > COND_POW) { + g = Math.pow((g + LINEAR_OFFSET) / (1 + LINEAR_OFFSET), POW_LINEAR); + } else { + g /= LINEAR_COEF; + } + if (b > COND_POW) { + b = Math.pow((b + LINEAR_OFFSET) / (1 + LINEAR_OFFSET), POW_LINEAR); + } else { + b /= LINEAR_COEF; + } + return [r, g, b]; +}; + +/** + * transform rgb to xyz + * @param rgb - [r, g, b] r|g|b: 0..255 + * @param [skip] - skip validate + * @returns TriColorChannels - [x, y, z] + */ +export const transformRgbToXyz = ( + rgb: TriColorChannels, + skip: boolean = false +): TriColorChannels => { + if (!skip) { + rgb = validateColorComponents(rgb, { + maxLength: TRIA, + maxRange: MAX_RGB + }) as TriColorChannels; + } + rgb = transformRgbToLinearRgb(rgb, true); + const xyz = transformMatrix(MATRIX_L_RGB_TO_XYZ, rgb, true); + return xyz; +}; + +/** + * transform rgb to xyz-d50 + * @param rgb - [r, g, b] r|g|b: 0..255 alpha: 0..1 + * @returns TriColorChannels - [x, y, z] + */ +export const transformRgbToXyzD50 = ( + rgb: TriColorChannels +): TriColorChannels => { + let xyz = transformRgbToXyz(rgb); + xyz = transformMatrix(MATRIX_D65_TO_D50, xyz, true); + return xyz; +}; + +/** + * transform linear rgb to rgb + * @param rgb - [r, g, b] r|g|b: 0..1 + * @param [round] - round result + * @returns TriColorChannels - [r, g, b] r|g|b: 0..255 + */ +export const transformLinearRgbToRgb = ( + rgb: TriColorChannels, + round: boolean = false +): TriColorChannels => { + let [r, g, b] = validateColorComponents(rgb, { + maxLength: TRIA + }); + const COND_POW = 809 / 258400; + if (r > COND_POW) { + r = Math.pow(r, 1 / POW_LINEAR) * (1 + LINEAR_OFFSET) - LINEAR_OFFSET; + } else { + r *= LINEAR_COEF; + } + r *= MAX_RGB; + if (g > COND_POW) { + g = Math.pow(g, 1 / POW_LINEAR) * (1 + LINEAR_OFFSET) - LINEAR_OFFSET; + } else { + g *= LINEAR_COEF; + } + g *= MAX_RGB; + if (b > COND_POW) { + b = Math.pow(b, 1 / POW_LINEAR) * (1 + LINEAR_OFFSET) - LINEAR_OFFSET; + } else { + b *= LINEAR_COEF; + } + b *= MAX_RGB; + return [ + round ? Math.round(r) : r, + round ? Math.round(g) : g, + round ? Math.round(b) : b + ]; +}; + +/** + * transform xyz to rgb + * @param xyz - [x, y, z] + * @param [skip] - skip validate + * @returns TriColorChannels - [r, g, b] r|g|b: 0..255 + */ +export const transformXyzToRgb = ( + xyz: TriColorChannels, + skip: boolean = false +): TriColorChannels => { + if (!skip) { + xyz = validateColorComponents(xyz, { + maxLength: TRIA, + validateRange: false + }) as TriColorChannels; + } + let [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, xyz, true); + [r, g, b] = transformLinearRgbToRgb( + [ + Math.min(Math.max(r, 0), 1), + Math.min(Math.max(g, 0), 1), + Math.min(Math.max(b, 0), 1) + ], + true + ); + return [r, g, b]; +}; + +/** + * transform xyz to xyz-d50 + * @param xyz - [x, y, z] + * @returns TriColorChannels - [x, y, z] + */ +export const transformXyzToXyzD50 = ( + xyz: TriColorChannels +): TriColorChannels => { + xyz = validateColorComponents(xyz, { + maxLength: TRIA, + validateRange: false + }) as TriColorChannels; + xyz = transformMatrix(MATRIX_D65_TO_D50, xyz, true); + return xyz; +}; + +/** + * transform xyz to hsl + * @param xyz - [x, y, z] + * @param [skip] - skip validate + * @returns TriColorChannels - [h, s, l] + */ +export const transformXyzToHsl = ( + xyz: TriColorChannels, + skip: boolean = false +): TriColorChannels => { + const [rr, gg, bb] = transformXyzToRgb(xyz, skip); + const r = rr / MAX_RGB; + const g = gg / MAX_RGB; + const b = bb / MAX_RGB; + const max = Math.max(r, g, b); + const min = Math.min(r, g, b); + const d = max - min; + const l = (max + min) * HALF * MAX_PCT; + let h, s; + if (Math.round(l) === 0 || Math.round(l) === MAX_PCT) { + h = 0; + s = 0; + } else { + s = (d / (1 - Math.abs(max + min - 1))) * MAX_PCT; + if (s === 0) { + h = 0; + } else { + switch (max) { + case r: + h = (g - b) / d; + break; + case g: + h = (b - r) / d + DUO; + break; + case b: + default: + h = (r - g) / d + QUAD; + break; + } + h = (h * SEXA) % DEG; + if (h < 0) { + h += DEG; + } + } + } + return [h, s, l]; +}; + +/** + * transform xyz to hwb + * @param xyz - [x, y, z] + * @param [skip] - skip validate + * @returns TriColorChannels - [h, w, b] + */ +export const transformXyzToHwb = ( + xyz: TriColorChannels, + skip: boolean = false +): TriColorChannels => { + const [r, g, b] = transformXyzToRgb(xyz, skip); + const wh = Math.min(r, g, b) / MAX_RGB; + const bk = 1 - Math.max(r, g, b) / MAX_RGB; + let h; + if (wh + bk === 1) { + h = 0; + } else { + [h] = transformXyzToHsl(xyz); + } + return [h, wh * MAX_PCT, bk * MAX_PCT]; +}; + +/** + * transform xyz to oklab + * @param xyz - [x, y, z] + * @param [skip] - skip validate + * @returns TriColorChannels - [l, a, b] + */ +export const transformXyzToOklab = ( + xyz: TriColorChannels, + skip: boolean = false +): TriColorChannels => { + if (!skip) { + xyz = validateColorComponents(xyz, { + maxLength: TRIA, + validateRange: false + }) as TriColorChannels; + } + const lms = transformMatrix(MATRIX_XYZ_TO_LMS, xyz, true); + const xyzLms = lms.map(c => Math.cbrt(c)) as TriColorChannels; + let [l, a, b] = transformMatrix(MATRIX_LMS_TO_OKLAB, xyzLms, true); + l = Math.min(Math.max(l, 0), 1); + const lPct = Math.round(parseFloat(l.toFixed(QUAD)) * MAX_PCT); + if (lPct === 0 || lPct === MAX_PCT) { + a = 0; + b = 0; + } + return [l, a, b]; +}; + +/** + * transform xyz to oklch + * @param xyz - [x, y, z] + * @param [skip] - skip validate + * @returns TriColorChannels - [l, c, h] + */ +export const transformXyzToOklch = ( + xyz: TriColorChannels, + skip: boolean = false +): TriColorChannels => { + const [l, a, b] = transformXyzToOklab(xyz, skip); + let c, h; + const lPct = Math.round(parseFloat(l.toFixed(QUAD)) * MAX_PCT); + if (lPct === 0 || lPct === MAX_PCT) { + c = 0; + h = 0; + } else { + c = Math.max(Math.sqrt(Math.pow(a, POW_SQR) + Math.pow(b, POW_SQR)), 0); + if (parseFloat(c.toFixed(QUAD)) === 0) { + h = 0; + } else { + h = (Math.atan2(b, a) * DEG_HALF) / Math.PI; + if (h < 0) { + h += DEG; + } + } + } + return [l, c, h]; +}; + +/** + * transform xyz D50 to rgb + * @param xyz - [x, y, z] + * @param [skip] - skip validate + * @returns TriColorChannels - [r, g, b] r|g|b: 0..255 + */ +export const transformXyzD50ToRgb = ( + xyz: TriColorChannels, + skip: boolean = false +): TriColorChannels => { + if (!skip) { + xyz = validateColorComponents(xyz, { + maxLength: TRIA, + validateRange: false + }) as TriColorChannels; + } + const xyzD65 = transformMatrix(MATRIX_D50_TO_D65, xyz, true); + const rgb = transformXyzToRgb(xyzD65, true); + return rgb; +}; + +/** + * transform xyz-d50 to lab + * @param xyz - [x, y, z] + * @param [skip] - skip validate + * @returns TriColorChannels - [l, a, b] + */ +export const transformXyzD50ToLab = ( + xyz: TriColorChannels, + skip: boolean = false +): TriColorChannels => { + if (!skip) { + xyz = validateColorComponents(xyz, { + maxLength: TRIA, + validateRange: false + }) as TriColorChannels; + } + const xyzD50 = xyz.map((val, i) => val / (D50[i] as number)); + const [f0, f1, f2] = xyzD50.map(val => + val > LAB_EPSILON ? Math.cbrt(val) : (val * LAB_KAPPA + HEX) / LAB_L + ) as TriColorChannels; + const l = Math.min(Math.max(LAB_L * f1 - HEX, 0), MAX_PCT); + let a, b; + if (l === 0 || l === MAX_PCT) { + a = 0; + b = 0; + } else { + a = (f0 - f1) * LAB_A; + b = (f1 - f2) * LAB_B; + } + return [l, a, b]; +}; + +/** + * transform xyz-d50 to lch + * @param xyz - [x, y, z] + * @param [skip] - skip validate + * @returns TriColorChannels - [l, c, h] + */ +export const transformXyzD50ToLch = ( + xyz: TriColorChannels, + skip: boolean = false +): TriColorChannels => { + const [l, a, b] = transformXyzD50ToLab(xyz, skip); + let c, h; + if (l === 0 || l === MAX_PCT) { + c = 0; + h = 0; + } else { + c = Math.max(Math.sqrt(Math.pow(a, POW_SQR) + Math.pow(b, POW_SQR)), 0); + h = (Math.atan2(b, a) * DEG_HALF) / Math.PI; + if (h < 0) { + h += DEG; + } + } + return [l, c, h]; +}; + +/** + * convert rgb to hex color + * @param rgb - [r, g, b, alpha] r|g|b: 0..255 alpha: 0..1 + * @returns hex color + */ +export const convertRgbToHex = (rgb: ColorChannels): string => { + const [r, g, b, alpha] = validateColorComponents(rgb, { + alpha: true, + maxRange: MAX_RGB + }) as ColorChannels; + const rr = numberToHexString(r); + const gg = numberToHexString(g); + const bb = numberToHexString(b); + const aa = numberToHexString(alpha * MAX_RGB); + let hex; + if (aa === 'ff') { + hex = `#${rr}${gg}${bb}`; + } else { + hex = `#${rr}${gg}${bb}${aa}`; + } + return hex; +}; + +/** + * convert linear rgb to hex color + * @param rgb - [r, g, b, alpha] r|g|b|alpha: 0..1 + * @param [skip] - skip validate + * @returns hex color + */ +export const convertLinearRgbToHex = ( + rgb: ColorChannels, + skip: boolean = false +): string => { + let r, g, b, alpha; + if (skip) { + [r, g, b, alpha] = rgb; + } else { + [r, g, b, alpha] = validateColorComponents(rgb, { + minLength: QUAD + }) as ColorChannels; + } + [r, g, b] = transformLinearRgbToRgb([r, g, b], true); + const rr = numberToHexString(r); + const gg = numberToHexString(g); + const bb = numberToHexString(b); + const aa = numberToHexString(alpha * MAX_RGB); + let hex; + if (aa === 'ff') { + hex = `#${rr}${gg}${bb}`; + } else { + hex = `#${rr}${gg}${bb}${aa}`; + } + return hex; +}; + +/** + * convert xyz to hex color + * @param xyz - [x, y, z, alpha] + * @returns hex color + */ +export const convertXyzToHex = (xyz: ColorChannels): string => { + const [x, y, z, alpha] = validateColorComponents(xyz, { + minLength: QUAD, + validateRange: false + }) as ColorChannels; + const [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true); + const hex = convertLinearRgbToHex( + [ + Math.min(Math.max(r, 0), 1), + Math.min(Math.max(g, 0), 1), + Math.min(Math.max(b, 0), 1), + alpha + ], + true + ); + return hex; +}; + +/** + * convert xyz D50 to hex color + * @param xyz - [x, y, z, alpha] + * @returns hex color + */ +export const convertXyzD50ToHex = (xyz: ColorChannels): string => { + const [x, y, z, alpha] = validateColorComponents(xyz, { + minLength: QUAD, + validateRange: false + }) as ColorChannels; + const xyzD65 = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true); + const [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, xyzD65, true); + const hex = convertLinearRgbToHex([ + Math.min(Math.max(r, 0), 1), + Math.min(Math.max(g, 0), 1), + Math.min(Math.max(b, 0), 1), + alpha + ]); + return hex; +}; + +/** + * convert hex color to rgb + * @param value - hex color value + * @returns ColorChannels - [r, g, b, alpha] r|g|b: 0..255 alpha: 0..1 + */ +export const convertHexToRgb = (value: string): ColorChannels => { + if (isString(value)) { + value = value.toLowerCase().trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + if ( + !( + /^#[\da-f]{6}$/.test(value) || + /^#[\da-f]{3}$/.test(value) || + /^#[\da-f]{8}$/.test(value) || + /^#[\da-f]{4}$/.test(value) + ) + ) { + throw new SyntaxError(`Invalid property value: ${value}`); + } + const arr: number[] = []; + if (/^#[\da-f]{3}$/.test(value)) { + const [, r, g, b] = value.match( + /^#([\da-f])([\da-f])([\da-f])$/ + ) as MatchedRegExp; + arr.push( + parseInt(`${r}${r}`, HEX), + parseInt(`${g}${g}`, HEX), + parseInt(`${b}${b}`, HEX), + 1 + ); + } else if (/^#[\da-f]{4}$/.test(value)) { + const [, r, g, b, alpha] = value.match( + /^#([\da-f])([\da-f])([\da-f])([\da-f])$/ + ) as MatchedRegExp; + arr.push( + parseInt(`${r}${r}`, HEX), + parseInt(`${g}${g}`, HEX), + parseInt(`${b}${b}`, HEX), + parseHexAlpha(`${alpha}${alpha}`) + ); + } else if (/^#[\da-f]{8}$/.test(value)) { + const [, r, g, b, alpha] = value.match( + /^#([\da-f]{2})([\da-f]{2})([\da-f]{2})([\da-f]{2})$/ + ) as MatchedRegExp; + arr.push( + parseInt(r, HEX), + parseInt(g, HEX), + parseInt(b, HEX), + parseHexAlpha(alpha) + ); + } else { + const [, r, g, b] = value.match( + /^#([\da-f]{2})([\da-f]{2})([\da-f]{2})$/ + ) as MatchedRegExp; + arr.push(parseInt(r, HEX), parseInt(g, HEX), parseInt(b, HEX), 1); + } + return arr as ColorChannels; +}; + +/** + * convert hex color to linear rgb + * @param value - hex color value + * @returns ColorChannels - [r, g, b, alpha] r|g|b|alpha: 0..1 + */ +export const convertHexToLinearRgb = (value: string): ColorChannels => { + const [rr, gg, bb, alpha] = convertHexToRgb(value); + const [r, g, b] = transformRgbToLinearRgb([rr, gg, bb], true); + return [r, g, b, alpha]; +}; + +/** + * convert hex color to xyz + * @param value - hex color value + * @returns ColorChannels - [x, y, z, alpha] + */ +export const convertHexToXyz = (value: string): ColorChannels => { + const [r, g, b, alpha] = convertHexToLinearRgb(value); + const [x, y, z] = transformMatrix(MATRIX_L_RGB_TO_XYZ, [r, g, b], true); + return [x, y, z, alpha]; +}; + +/** + * parse rgb() + * @param value - rgb color value + * @param [opt] - options + * @returns parsed color - ['rgb', r, g, b, alpha], '(empty)', NullObject + */ +export const parseRgb = ( + value: string, + opt: Options = {} +): SpecifiedColorChannels | string | NullObject => { + if (isString(value)) { + value = value.toLowerCase().trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = '', nullable = false } = opt; + const reg = new RegExp(`^rgba?\\(\\s*(${SYN_MOD}|${SYN_RGB_LV3})\\s*\\)$`); + if (!reg.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + return res; + } + if (isString(res)) { + return res as string; + } + return res as SpecifiedColorChannels; + } + const [, val] = value.match(reg) as MatchedRegExp; + const [v1, v2, v3, v4 = ''] = val + .replace(/[,/]/g, ' ') + .split(/\s+/) as StringColorChannels; + let r, g, b; + if (v1 === NONE) { + r = 0; + } else { + if (v1.endsWith('%')) { + r = (parseFloat(v1) * MAX_RGB) / MAX_PCT; + } else { + r = parseFloat(v1); + } + r = Math.min(Math.max(roundToPrecision(r, OCT), 0), MAX_RGB); + } + if (v2 === NONE) { + g = 0; + } else { + if (v2.endsWith('%')) { + g = (parseFloat(v2) * MAX_RGB) / MAX_PCT; + } else { + g = parseFloat(v2); + } + g = Math.min(Math.max(roundToPrecision(g, OCT), 0), MAX_RGB); + } + if (v3 === NONE) { + b = 0; + } else { + if (v3.endsWith('%')) { + b = (parseFloat(v3) * MAX_RGB) / MAX_PCT; + } else { + b = parseFloat(v3); + } + b = Math.min(Math.max(roundToPrecision(b, OCT), 0), MAX_RGB); + } + const alpha = parseAlpha(v4); + return ['rgb', r, g, b, format === VAL_MIX && v4 === NONE ? NONE : alpha]; +}; + +/** + * parse hsl() + * @param value - hsl color value + * @param [opt] - options + * @returns parsed color - ['rgb', r, g, b, alpha], '(empty)', NullObject + */ +export const parseHsl = ( + value: string, + opt: Options = {} +): SpecifiedColorChannels | string | NullObject => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = '', nullable = false } = opt; + if (!REG_HSL.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + return res; + } + if (isString(res)) { + return res as string; + } + return res as SpecifiedColorChannels; + } + const [, val] = value.match(REG_HSL) as MatchedRegExp; + const [v1, v2, v3, v4 = ''] = val + .replace(/[,/]/g, ' ') + .split(/\s+/) as StringColorChannels; + let h, s, l; + if (v1 === NONE) { + h = 0; + } else { + h = angleToDeg(v1); + } + if (v2 === NONE) { + s = 0; + } else { + s = Math.min(Math.max(parseFloat(v2), 0), MAX_PCT); + } + if (v3 === NONE) { + l = 0; + } else { + l = Math.min(Math.max(parseFloat(v3), 0), MAX_PCT); + } + const alpha = parseAlpha(v4); + if (format === 'hsl') { + return [ + format, + v1 === NONE ? v1 : h, + v2 === NONE ? v2 : s, + v3 === NONE ? v3 : l, + v4 === NONE ? v4 : alpha + ]; + } + h = (h / DEG) * DOZ; + l /= MAX_PCT; + const sa = (s / MAX_PCT) * Math.min(l, 1 - l); + const rk = h % DOZ; + const gk = (8 + h) % DOZ; + const bk = (4 + h) % DOZ; + const r = l - sa * Math.max(-1, Math.min(rk - TRIA, TRIA ** POW_SQR - rk, 1)); + const g = l - sa * Math.max(-1, Math.min(gk - TRIA, TRIA ** POW_SQR - gk, 1)); + const b = l - sa * Math.max(-1, Math.min(bk - TRIA, TRIA ** POW_SQR - bk, 1)); + return [ + 'rgb', + Math.min(Math.max(roundToPrecision(r * MAX_RGB, OCT), 0), MAX_RGB), + Math.min(Math.max(roundToPrecision(g * MAX_RGB, OCT), 0), MAX_RGB), + Math.min(Math.max(roundToPrecision(b * MAX_RGB, OCT), 0), MAX_RGB), + alpha + ]; +}; + +/** + * parse hwb() + * @param value - hwb color value + * @param [opt] - options + * @returns parsed color - ['rgb', r, g, b, alpha], '(empty)', NullObject + */ +export const parseHwb = ( + value: string, + opt: Options = {} +): SpecifiedColorChannels | string | NullObject => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = '', nullable = false } = opt; + if (!REG_HWB.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + return res; + } + if (isString(res)) { + return res as string; + } + return res as SpecifiedColorChannels; + } + const [, val] = value.match(REG_HWB) as MatchedRegExp; + const [v1, v2, v3, v4 = ''] = val + .replace('/', ' ') + .split(/\s+/) as StringColorChannels; + let h, wh, bk; + if (v1 === NONE) { + h = 0; + } else { + h = angleToDeg(v1); + } + if (v2 === NONE) { + wh = 0; + } else { + wh = Math.min(Math.max(parseFloat(v2), 0), MAX_PCT) / MAX_PCT; + } + if (v3 === NONE) { + bk = 0; + } else { + bk = Math.min(Math.max(parseFloat(v3), 0), MAX_PCT) / MAX_PCT; + } + const alpha = parseAlpha(v4); + if (format === 'hwb') { + return [ + format, + v1 === NONE ? v1 : h, + v2 === NONE ? v2 : wh * MAX_PCT, + v3 === NONE ? v3 : bk * MAX_PCT, + v4 === NONE ? v4 : alpha + ]; + } + if (wh + bk >= 1) { + const v = roundToPrecision((wh / (wh + bk)) * MAX_RGB, OCT); + return ['rgb', v, v, v, alpha]; + } + const factor = (1 - wh - bk) / MAX_RGB; + let [, r, g, b] = parseHsl(`hsl(${h} 100 50)`) as ComputedColorChannels; + r = roundToPrecision((r * factor + wh) * MAX_RGB, OCT); + g = roundToPrecision((g * factor + wh) * MAX_RGB, OCT); + b = roundToPrecision((b * factor + wh) * MAX_RGB, OCT); + return [ + 'rgb', + Math.min(Math.max(r, 0), MAX_RGB), + Math.min(Math.max(g, 0), MAX_RGB), + Math.min(Math.max(b, 0), MAX_RGB), + alpha + ]; +}; + +/** + * parse lab() + * @param value - lab color value + * @param [opt] - options + * @returns parsed color + * - [xyz-d50, x, y, z, alpha], ['lab', l, a, b, alpha], '(empty)', NullObject + */ +export const parseLab = ( + value: string, + opt: Options = {} +): SpecifiedColorChannels | string | NullObject => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = '', nullable = false } = opt; + if (!REG_LAB.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + return res; + } + if (isString(res)) { + return res as string; + } + return res as SpecifiedColorChannels; + } + const COEF_PCT = 1.25; + const COND_POW = 8; + const [, val] = value.match(REG_LAB) as MatchedRegExp; + const [v1, v2, v3, v4 = ''] = val + .replace('/', ' ') + .split(/\s+/) as StringColorChannels; + let l, a, b; + if (v1 === NONE) { + l = 0; + } else { + if (v1.endsWith('%')) { + l = parseFloat(v1); + if (l > MAX_PCT) { + l = MAX_PCT; + } + } else { + l = parseFloat(v1); + } + if (l < 0) { + l = 0; + } + } + if (v2 === NONE) { + a = 0; + } else { + a = v2.endsWith('%') ? parseFloat(v2) * COEF_PCT : parseFloat(v2); + } + if (v3 === NONE) { + b = 0; + } else { + b = v3.endsWith('%') ? parseFloat(v3) * COEF_PCT : parseFloat(v3); + } + const alpha = parseAlpha(v4); + if (REG_SPEC.test(format)) { + return [ + 'lab', + v1 === NONE ? v1 : roundToPrecision(l, HEX), + v2 === NONE ? v2 : roundToPrecision(a, HEX), + v3 === NONE ? v3 : roundToPrecision(b, HEX), + v4 === NONE ? v4 : alpha + ]; + } + const fl = (l + HEX) / LAB_L; + const fa = a / LAB_A + fl; + const fb = fl - b / LAB_B; + const powFl = Math.pow(fl, POW_CUBE); + const powFa = Math.pow(fa, POW_CUBE); + const powFb = Math.pow(fb, POW_CUBE); + const xyz = [ + powFa > LAB_EPSILON ? powFa : (fa * LAB_L - HEX) / LAB_KAPPA, + l > COND_POW ? powFl : l / LAB_KAPPA, + powFb > LAB_EPSILON ? powFb : (fb * LAB_L - HEX) / LAB_KAPPA + ]; + const [x, y, z] = xyz.map( + (val, i) => val * (D50[i] as number) + ) as TriColorChannels; + return [ + 'xyz-d50', + roundToPrecision(x, HEX), + roundToPrecision(y, HEX), + roundToPrecision(z, HEX), + alpha + ]; +}; + +/** + * parse lch() + * @param value - lch color value + * @param [opt] - options + * @returns parsed color + * - ['xyz-d50', x, y, z, alpha], ['lch', l, c, h, alpha] + * - '(empty)', NullObject + */ +export const parseLch = ( + value: string, + opt: Options = {} +): SpecifiedColorChannels | string | NullObject => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = '', nullable = false } = opt; + if (!REG_LCH.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + return res; + } + if (isString(res)) { + return res as string; + } + return res as SpecifiedColorChannels; + } + const COEF_PCT = 1.5; + const [, val] = value.match(REG_LCH) as MatchedRegExp; + const [v1, v2, v3, v4 = ''] = val + .replace('/', ' ') + .split(/\s+/) as StringColorChannels; + let l, c, h; + if (v1 === NONE) { + l = 0; + } else { + l = parseFloat(v1); + if (l < 0) { + l = 0; + } + } + if (v2 === NONE) { + c = 0; + } else { + c = v2.endsWith('%') ? parseFloat(v2) * COEF_PCT : parseFloat(v2); + } + if (v3 === NONE) { + h = 0; + } else { + h = angleToDeg(v3); + } + const alpha = parseAlpha(v4); + if (REG_SPEC.test(format)) { + return [ + 'lch', + v1 === NONE ? v1 : roundToPrecision(l, HEX), + v2 === NONE ? v2 : roundToPrecision(c, HEX), + v3 === NONE ? v3 : roundToPrecision(h, HEX), + v4 === NONE ? v4 : alpha + ]; + } + const a = c * Math.cos((h * Math.PI) / DEG_HALF); + const b = c * Math.sin((h * Math.PI) / DEG_HALF); + const [, x, y, z] = parseLab(`lab(${l} ${a} ${b})`) as ComputedColorChannels; + return [ + 'xyz-d50', + roundToPrecision(x, HEX), + roundToPrecision(y, HEX), + roundToPrecision(z, HEX), + alpha as number + ]; +}; + +/** + * parse oklab() + * @param value - oklab color value + * @param [opt] - options + * @returns parsed color + * - ['xyz-d65', x, y, z, alpha], ['oklab', l, a, b, alpha] + * - '(empty)', NullObject + */ +export const parseOklab = ( + value: string, + opt: Options = {} +): SpecifiedColorChannels | string | NullObject => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = '', nullable = false } = opt; + if (!REG_OKLAB.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + return res; + } + if (isString(res)) { + return res as string; + } + return res as SpecifiedColorChannels; + } + const COEF_PCT = 0.4; + const [, val] = value.match(REG_OKLAB) as MatchedRegExp; + const [v1, v2, v3, v4 = ''] = val + .replace('/', ' ') + .split(/\s+/) as StringColorChannels; + let l, a, b; + if (v1 === NONE) { + l = 0; + } else { + l = v1.endsWith('%') ? parseFloat(v1) / MAX_PCT : parseFloat(v1); + if (l < 0) { + l = 0; + } + } + if (v2 === NONE) { + a = 0; + } else if (v2.endsWith('%')) { + a = (parseFloat(v2) * COEF_PCT) / MAX_PCT; + } else { + a = parseFloat(v2); + } + if (v3 === NONE) { + b = 0; + } else if (v3.endsWith('%')) { + b = (parseFloat(v3) * COEF_PCT) / MAX_PCT; + } else { + b = parseFloat(v3); + } + const alpha = parseAlpha(v4); + if (REG_SPEC.test(format)) { + return [ + 'oklab', + v1 === NONE ? v1 : roundToPrecision(l, HEX), + v2 === NONE ? v2 : roundToPrecision(a, HEX), + v3 === NONE ? v3 : roundToPrecision(b, HEX), + v4 === NONE ? v4 : alpha + ]; + } + const lms = transformMatrix(MATRIX_OKLAB_TO_LMS, [l, a, b]); + const xyzLms = lms.map(c => Math.pow(c, POW_CUBE)) as TriColorChannels; + const [x, y, z] = transformMatrix(MATRIX_LMS_TO_XYZ, xyzLms, true); + return [ + 'xyz-d65', + roundToPrecision(x, HEX), + roundToPrecision(y, HEX), + roundToPrecision(z, HEX), + alpha as number + ]; +}; + +/** + * parse oklch() + * @param value - oklch color value + * @param [opt] - options + * @returns parsed color + * - ['xyz-d65', x, y, z, alpha], ['oklch', l, c, h, alpha] + * - '(empty)', NullObject + */ +export const parseOklch = ( + value: string, + opt: Options = {} +): SpecifiedColorChannels | string | NullObject => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = '', nullable = false } = opt; + if (!REG_OKLCH.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + return res; + } + if (isString(res)) { + return res as string; + } + return res as SpecifiedColorChannels; + } + const COEF_PCT = 0.4; + const [, val] = value.match(REG_OKLCH) as MatchedRegExp; + const [v1, v2, v3, v4 = ''] = val + .replace('/', ' ') + .split(/\s+/) as StringColorChannels; + let l, c, h; + if (v1 === NONE) { + l = 0; + } else { + l = v1.endsWith('%') ? parseFloat(v1) / MAX_PCT : parseFloat(v1); + if (l < 0) { + l = 0; + } + } + if (v2 === NONE) { + c = 0; + } else { + if (v2.endsWith('%')) { + c = (parseFloat(v2) * COEF_PCT) / MAX_PCT; + } else { + c = parseFloat(v2); + } + if (c < 0) { + c = 0; + } + } + if (v3 === NONE) { + h = 0; + } else { + h = angleToDeg(v3); + } + const alpha = parseAlpha(v4); + if (REG_SPEC.test(format)) { + return [ + 'oklch', + v1 === NONE ? v1 : roundToPrecision(l, HEX), + v2 === NONE ? v2 : roundToPrecision(c, HEX), + v3 === NONE ? v3 : roundToPrecision(h, HEX), + v4 === NONE ? v4 : alpha + ]; + } + const a = c * Math.cos((h * Math.PI) / DEG_HALF); + const b = c * Math.sin((h * Math.PI) / DEG_HALF); + const lms = transformMatrix(MATRIX_OKLAB_TO_LMS, [l, a, b]); + const xyzLms = lms.map(cc => Math.pow(cc, POW_CUBE)) as TriColorChannels; + const [x, y, z] = transformMatrix(MATRIX_LMS_TO_XYZ, xyzLms, true); + return [ + 'xyz-d65', + roundToPrecision(x, HEX), + roundToPrecision(y, HEX), + roundToPrecision(z, HEX), + alpha + ]; +}; + +/** + * parse color() + * @param value - color function value + * @param [opt] - options + * @returns parsed color + * - ['xyz-(d50|d65)', x, y, z, alpha], [cs, r, g, b, alpha] + * - '(empty)', NullObject + */ +export const parseColorFunc = ( + value: string, + opt: Options = {} +): SpecifiedColorChannels | string | NullObject => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { colorSpace = '', d50 = false, format = '', nullable = false } = opt; + if (!REG_FN_COLOR.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + return res; + } + if (isString(res)) { + return res as string; + } + return res as SpecifiedColorChannels; + } + const [, val] = value.match(REG_FN_COLOR) as MatchedRegExp; + let [cs, v1, v2, v3, v4 = ''] = val + .replace('/', ' ') + .split(/\s+/) as StringColorSpacedChannels; + let r, g, b; + if (cs === 'xyz') { + cs = 'xyz-d65'; + } + if (v1 === NONE) { + r = 0; + } else { + r = v1.endsWith('%') ? parseFloat(v1) / MAX_PCT : parseFloat(v1); + } + if (v2 === NONE) { + g = 0; + } else { + g = v2.endsWith('%') ? parseFloat(v2) / MAX_PCT : parseFloat(v2); + } + if (v3 === NONE) { + b = 0; + } else { + b = v3.endsWith('%') ? parseFloat(v3) / MAX_PCT : parseFloat(v3); + } + const alpha = parseAlpha(v4); + if (REG_SPEC.test(format) || (format === VAL_MIX && cs === colorSpace)) { + return [ + cs, + v1 === NONE ? v1 : roundToPrecision(r, DEC), + v2 === NONE ? v2 : roundToPrecision(g, DEC), + v3 === NONE ? v3 : roundToPrecision(b, DEC), + v4 === NONE ? v4 : alpha + ]; + } + let x = 0; + let y = 0; + let z = 0; + // srgb-linear + if (cs === 'srgb-linear') { + [x, y, z] = transformMatrix(MATRIX_L_RGB_TO_XYZ, [r, g, b]); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + // display-p3 + } else if (cs === 'display-p3') { + const linearRgb = transformRgbToLinearRgb([ + r * MAX_RGB, + g * MAX_RGB, + b * MAX_RGB + ]); + [x, y, z] = transformMatrix(MATRIX_P3_TO_XYZ, linearRgb); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + // rec2020 + } else if (cs === 'rec2020') { + const ALPHA = 1.09929682680944; + const BETA = 0.018053968510807; + const REC_COEF = 0.45; + const rgb = [r, g, b].map(c => { + let cl; + if (c < BETA * REC_COEF * DEC) { + cl = c / (REC_COEF * DEC); + } else { + cl = Math.pow((c + ALPHA - 1) / ALPHA, 1 / REC_COEF); + } + return cl; + }) as TriColorChannels; + [x, y, z] = transformMatrix(MATRIX_REC2020_TO_XYZ, rgb); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + // a98-rgb + } else if (cs === 'a98-rgb') { + const POW_A98 = 563 / 256; + const rgb = [r, g, b].map(c => { + const cl = Math.pow(c, POW_A98); + return cl; + }) as TriColorChannels; + [x, y, z] = transformMatrix(MATRIX_A98_TO_XYZ, rgb); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + // prophoto-rgb + } else if (cs === 'prophoto-rgb') { + const POW_PROPHOTO = 1.8; + const rgb = [r, g, b].map(c => { + let cl; + if (c > 1 / (HEX * DUO)) { + cl = Math.pow(c, POW_PROPHOTO); + } else { + cl = c / HEX; + } + return cl; + }) as TriColorChannels; + [x, y, z] = transformMatrix(MATRIX_PROPHOTO_TO_XYZ_D50, rgb); + if (!d50) { + [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true); + } + // xyz, xyz-d50, xyz-d65 + } else if (/^xyz(?:-d(?:50|65))?$/.test(cs)) { + [x, y, z] = [r, g, b]; + if (cs === 'xyz-d50') { + if (!d50) { + [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z]); + } + } else if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + // srgb + } else { + [x, y, z] = transformRgbToXyz([r * MAX_RGB, g * MAX_RGB, b * MAX_RGB]); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + } + return [ + d50 ? 'xyz-d50' : 'xyz-d65', + roundToPrecision(x, HEX), + roundToPrecision(y, HEX), + roundToPrecision(z, HEX), + format === VAL_MIX && v4 === NONE ? v4 : alpha + ]; +}; + +/** + * parse color value + * @param value - CSS color value + * @param [opt] - options + * @returns parsed color + * - ['xyz-(d50|d65)', x, y, z, alpha], ['rgb', r, g, b, alpha] + * - value, '(empty)', NullObject + */ +export const parseColorValue = ( + value: string, + opt: Options = {} +): SpecifiedColorChannels | string | NullObject => { + if (isString(value)) { + value = value.toLowerCase().trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { d50 = false, format = '', nullable = false } = opt; + if (!REG_COLOR.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + return res; + } + if (isString(res)) { + return res as string; + } + return res as SpecifiedColorChannels; + } + let x = 0; + let y = 0; + let z = 0; + let alpha = 0; + // complement currentcolor as a missing color + if (REG_CURRENT.test(value)) { + if (format === VAL_COMP) { + return ['rgb', 0, 0, 0, 0]; + } + if (format === VAL_SPEC) { + return value; + } + // named-color + } else if (/^[a-z]+$/.test(value)) { + if (Object.hasOwn(NAMED_COLORS, value)) { + if (format === VAL_SPEC) { + return value; + } + const [r, g, b] = NAMED_COLORS[ + value as keyof typeof NAMED_COLORS + ] as TriColorChannels; + alpha = 1; + if (format === VAL_COMP) { + return ['rgb', r, g, b, alpha]; + } + [x, y, z] = transformRgbToXyz([r, g, b], true); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + } else { + switch (format) { + case VAL_COMP: { + if (nullable && value !== 'transparent') { + return new NullObject(); + } + return ['rgb', 0, 0, 0, 0]; + } + case VAL_SPEC: { + if (value === 'transparent') { + return value; + } + return ''; + } + case VAL_MIX: { + if (value === 'transparent') { + return ['rgb', 0, 0, 0, 0]; + } + return new NullObject(); + } + default: + } + } + // hex-color + } else if (value[0] === '#') { + if (REG_SPEC.test(format)) { + const rgb = convertHexToRgb(value); + return ['rgb', ...rgb]; + } + [x, y, z, alpha] = convertHexToXyz(value); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + // lab() + } else if (value.startsWith('lab')) { + if (REG_SPEC.test(format)) { + return parseLab(value, opt); + } + [, x, y, z, alpha] = parseLab(value) as ComputedColorChannels; + if (!d50) { + [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true); + } + // lch() + } else if (value.startsWith('lch')) { + if (REG_SPEC.test(format)) { + return parseLch(value, opt); + } + [, x, y, z, alpha] = parseLch(value) as ComputedColorChannels; + if (!d50) { + [x, y, z] = transformMatrix(MATRIX_D50_TO_D65, [x, y, z], true); + } + // oklab() + } else if (value.startsWith('oklab')) { + if (REG_SPEC.test(format)) { + return parseOklab(value, opt); + } + [, x, y, z, alpha] = parseOklab(value) as ComputedColorChannels; + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + // oklch() + } else if (value.startsWith('oklch')) { + if (REG_SPEC.test(format)) { + return parseOklch(value, opt); + } + [, x, y, z, alpha] = parseOklch(value) as ComputedColorChannels; + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + } else { + let r, g, b; + // hsl() + if (value.startsWith('hsl')) { + [, r, g, b, alpha] = parseHsl(value) as ComputedColorChannels; + // hwb() + } else if (value.startsWith('hwb')) { + [, r, g, b, alpha] = parseHwb(value) as ComputedColorChannels; + // rgb() + } else { + [, r, g, b, alpha] = parseRgb(value, opt) as ComputedColorChannels; + } + if (REG_SPEC.test(format)) { + return ['rgb', Math.round(r), Math.round(g), Math.round(b), alpha]; + } + [x, y, z] = transformRgbToXyz([r, g, b]); + if (d50) { + [x, y, z] = transformMatrix(MATRIX_D65_TO_D50, [x, y, z], true); + } + } + return [ + d50 ? 'xyz-d50' : 'xyz-d65', + roundToPrecision(x, HEX), + roundToPrecision(y, HEX), + roundToPrecision(z, HEX), + alpha + ]; +}; + +/** + * resolve color value + * @param value - CSS color value + * @param [opt] - options + * @returns resolved color + * - [cs, v1, v2, v3, alpha], value, '(empty)', NullObject + */ +export const resolveColorValue = ( + value: string, + opt: Options = {} +): SpecifiedColorChannels | string | NullObject => { + if (isString(value)) { + value = value.toLowerCase().trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { colorSpace = '', format = '', nullable = false } = opt; + const cacheKey: string = createCacheKey( + { + namespace: NAMESPACE, + name: 'resolveColorValue', + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return cachedResult as NullObject; + } + const cachedItem = cachedResult.item; + if (isString(cachedItem)) { + return cachedItem as string; + } + return cachedItem as SpecifiedColorChannels; + } + if (!REG_COLOR.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + setCache(cacheKey, null); + return res; + } + setCache(cacheKey, res); + if (isString(res)) { + return res as string; + } + return res as SpecifiedColorChannels; + } + let cs = ''; + let r = 0; + let g = 0; + let b = 0; + let alpha = 0; + // complement currentcolor as a missing color + if (REG_CURRENT.test(value)) { + if (format === VAL_SPEC) { + setCache(cacheKey, value); + return value; + } + // named-color + } else if (/^[a-z]+$/.test(value)) { + if (Object.hasOwn(NAMED_COLORS, value)) { + if (format === VAL_SPEC) { + setCache(cacheKey, value); + return value; + } + [r, g, b] = NAMED_COLORS[ + value as keyof typeof NAMED_COLORS + ] as TriColorChannels; + alpha = 1; + } else { + switch (format) { + case VAL_SPEC: { + if (value === 'transparent') { + setCache(cacheKey, value); + return value; + } + const res = ''; + setCache(cacheKey, res); + return res; + } + case VAL_MIX: { + if (value === 'transparent') { + const res: SpecifiedColorChannels = ['rgb', 0, 0, 0, 0]; + setCache(cacheKey, res); + return res; + } + setCache(cacheKey, null); + return new NullObject(); + } + case VAL_COMP: + default: { + if (nullable && value !== 'transparent') { + setCache(cacheKey, null); + return new NullObject(); + } + const res: SpecifiedColorChannels = ['rgb', 0, 0, 0, 0]; + setCache(cacheKey, res); + return res; + } + } + } + // hex-color + } else if (value[0] === '#') { + [r, g, b, alpha] = convertHexToRgb(value); + // hsl() + } else if (value.startsWith('hsl')) { + [, r, g, b, alpha] = parseHsl(value, opt) as ComputedColorChannels; + // hwb() + } else if (value.startsWith('hwb')) { + [, r, g, b, alpha] = parseHwb(value, opt) as ComputedColorChannels; + // lab(), lch() + } else if (/^l(?:ab|ch)/.test(value)) { + let x, y, z; + if (value.startsWith('lab')) { + [cs, x, y, z, alpha] = parseLab(value, opt) as ComputedColorChannels; + } else { + [cs, x, y, z, alpha] = parseLch(value, opt) as ComputedColorChannels; + } + if (REG_SPEC.test(format)) { + const res: SpecifiedColorChannels = [cs, x, y, z, alpha]; + setCache(cacheKey, res); + return res; + } + [r, g, b] = transformXyzD50ToRgb([x, y, z]); + // oklab(), oklch() + } else if (/^okl(?:ab|ch)/.test(value)) { + let x, y, z; + if (value.startsWith('oklab')) { + [cs, x, y, z, alpha] = parseOklab(value, opt) as ComputedColorChannels; + } else { + [cs, x, y, z, alpha] = parseOklch(value, opt) as ComputedColorChannels; + } + if (REG_SPEC.test(format)) { + const res: SpecifiedColorChannels = [cs, x, y, z, alpha]; + setCache(cacheKey, res); + return res; + } + [r, g, b] = transformXyzToRgb([x, y, z]); + // rgb() + } else { + [, r, g, b, alpha] = parseRgb(value, opt) as ComputedColorChannels; + } + if (format === VAL_MIX && colorSpace === 'srgb') { + const res: SpecifiedColorChannels = [ + 'srgb', + r / MAX_RGB, + g / MAX_RGB, + b / MAX_RGB, + alpha + ]; + setCache(cacheKey, res); + return res; + } + const res: SpecifiedColorChannels = [ + 'rgb', + Math.round(r), + Math.round(g), + Math.round(b), + alpha + ]; + setCache(cacheKey, res); + return res; +}; + +/** + * resolve color() + * @param value - color function value + * @param [opt] - options + * @returns resolved color - [cs, v1, v2, v3, alpha], '(empty)', NullObject + */ +export const resolveColorFunc = ( + value: string, + opt: Options = {} +): SpecifiedColorChannels | string | NullObject => { + if (isString(value)) { + value = value.toLowerCase().trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { colorSpace = '', format = '', nullable = false } = opt; + const cacheKey: string = createCacheKey( + { + namespace: NAMESPACE, + name: 'resolveColorFunc', + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return cachedResult as NullObject; + } + const cachedItem = cachedResult.item; + if (isString(cachedItem)) { + return cachedItem as string; + } + return cachedItem as SpecifiedColorChannels; + } + if (!REG_FN_COLOR.test(value)) { + const res = resolveInvalidColorValue(format, nullable); + if (res instanceof NullObject) { + setCache(cacheKey, null); + return res; + } + setCache(cacheKey, res); + if (isString(res)) { + return res as string; + } + return res as SpecifiedColorChannels; + } + const [cs, v1, v2, v3, v4] = parseColorFunc( + value, + opt + ) as SpecifiedColorChannels; + if (REG_SPEC.test(format) || (format === VAL_MIX && cs === colorSpace)) { + const res: SpecifiedColorChannels = [cs, v1, v2, v3, v4]; + setCache(cacheKey, res); + return res; + } + const x = parseFloat(`${v1}`); + const y = parseFloat(`${v2}`); + const z = parseFloat(`${v3}`); + const alpha = parseAlpha(`${v4}`); + const [r, g, b] = transformXyzToRgb([x, y, z], true); + const res: SpecifiedColorChannels = ['rgb', r, g, b, alpha]; + setCache(cacheKey, res); + return res; +}; + +/** + * convert color value to linear rgb + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels | NullObject - [r, g, b, alpha] r|g|b|alpha: 0..1 + */ +export const convertColorToLinearRgb = ( + value: string, + opt: { + colorSpace?: string; + format?: string; + } = {} +): ColorChannels | NullObject => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { colorSpace = '', format = '' } = opt; + let cs = ''; + let r, g, b, alpha, x, y, z; + if (format === VAL_MIX) { + let xyz; + if (value.startsWith(FN_COLOR)) { + xyz = parseColorFunc(value, opt); + } else { + xyz = parseColorValue(value, opt); + } + if (xyz instanceof NullObject) { + return xyz; + } + [cs, x, y, z, alpha] = xyz as ComputedColorChannels; + if (cs === colorSpace) { + return [x, y, z, alpha]; + } + [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true); + } else if (value.startsWith(FN_COLOR)) { + const [, val] = value.match(REG_FN_COLOR) as MatchedRegExp; + const [cs] = val + .replace('/', ' ') + .split(/\s+/) as StringColorSpacedChannels; + if (cs === 'srgb-linear') { + [, r, g, b, alpha] = resolveColorFunc(value, { + format: VAL_COMP + }) as ComputedColorChannels; + } else { + [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels; + [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true); + } + } else { + [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels; + [r, g, b] = transformMatrix(MATRIX_XYZ_TO_L_RGB, [x, y, z], true); + } + return [ + Math.min(Math.max(r, 0), 1), + Math.min(Math.max(g, 0), 1), + Math.min(Math.max(b, 0), 1), + alpha + ]; +}; + +/** + * convert color value to rgb + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels | NullObject + * - [r, g, b, alpha] r|g|b: 0..255 alpha: 0..1 + */ +export const convertColorToRgb = ( + value: string, + opt: Options = {} +): ColorChannels | NullObject => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = '' } = opt; + let r, g, b, alpha; + if (format === VAL_MIX) { + let rgb; + if (value.startsWith(FN_COLOR)) { + rgb = resolveColorFunc(value, opt); + } else { + rgb = resolveColorValue(value, opt); + } + if (rgb instanceof NullObject) { + return rgb; + } + [, r, g, b, alpha] = rgb as ComputedColorChannels; + } else if (value.startsWith(FN_COLOR)) { + const [, val] = value.match(REG_FN_COLOR) as MatchedRegExp; + const [cs] = val + .replace('/', ' ') + .split(/\s+/) as StringColorSpacedChannels; + if (cs === 'srgb') { + [, r, g, b, alpha] = resolveColorFunc(value, { + format: VAL_COMP + }) as ComputedColorChannels; + r *= MAX_RGB; + g *= MAX_RGB; + b *= MAX_RGB; + } else { + [, r, g, b, alpha] = resolveColorFunc(value) as ComputedColorChannels; + } + } else if (/^(?:ok)?l(?:ab|ch)/.test(value)) { + [r, g, b, alpha] = convertColorToLinearRgb(value) as ColorChannels; + [r, g, b] = transformLinearRgbToRgb([r, g, b]); + } else { + [, r, g, b, alpha] = resolveColorValue(value, { + format: VAL_COMP + }) as ComputedColorChannels; + } + return [r, g, b, alpha]; +}; + +/** + * convert color value to xyz + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels | NullObject - [x, y, z, alpha] + */ +export const convertColorToXyz = ( + value: string, + opt: Options = {} +): ColorChannels | NullObject => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { d50 = false, format = '' } = opt; + let x, y, z, alpha; + if (format === VAL_MIX) { + let xyz; + if (value.startsWith(FN_COLOR)) { + xyz = parseColorFunc(value, opt); + } else { + xyz = parseColorValue(value, opt); + } + if (xyz instanceof NullObject) { + return xyz; + } + [, x, y, z, alpha] = xyz as ComputedColorChannels; + } else if (value.startsWith(FN_COLOR)) { + const [, val] = value.match(REG_FN_COLOR) as MatchedRegExp; + const [cs] = val + .replace('/', ' ') + .split(/\s+/) as StringColorSpacedChannels; + if (d50) { + if (cs === 'xyz-d50') { + [, x, y, z, alpha] = resolveColorFunc(value, { + format: VAL_COMP + }) as ComputedColorChannels; + } else { + [, x, y, z, alpha] = parseColorFunc( + value, + opt + ) as ComputedColorChannels; + } + } else if (/^xyz(?:-d65)?$/.test(cs)) { + [, x, y, z, alpha] = resolveColorFunc(value, { + format: VAL_COMP + }) as ComputedColorChannels; + } else { + [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels; + } + } else { + [, x, y, z, alpha] = parseColorValue(value, opt) as ComputedColorChannels; + } + return [x, y, z, alpha]; +}; + +/** + * convert color value to hsl + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels | NullObject - [h, s, l, alpha], hue may be powerless + */ +export const convertColorToHsl = ( + value: string, + opt: Options = {} +): ColorChannels | [number | string, number, number, number] | NullObject => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = '' } = opt; + let h, s, l, alpha; + if (REG_HSL.test(value)) { + [, h, s, l, alpha] = parseHsl(value, { + format: 'hsl' + }) as ComputedColorChannels; + if (format === 'hsl') { + return [Math.round(h), Math.round(s), Math.round(l), alpha]; + } + return [h, s, l, alpha]; + } + let x, y, z; + if (format === VAL_MIX) { + let xyz; + if (value.startsWith(FN_COLOR)) { + xyz = parseColorFunc(value, opt); + } else { + xyz = parseColorValue(value, opt); + } + if (xyz instanceof NullObject) { + return xyz; + } + [, x, y, z, alpha] = xyz as ComputedColorChannels; + } else if (value.startsWith(FN_COLOR)) { + [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels; + } else { + [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels; + } + [h, s, l] = transformXyzToHsl([x, y, z], true) as TriColorChannels; + if (format === 'hsl') { + return [Math.round(h), Math.round(s), Math.round(l), alpha]; + } + return [format === VAL_MIX && s === 0 ? NONE : h, s, l, alpha]; +}; + +/** + * convert color value to hwb + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels | NullObject - [h, w, b, alpha], hue may be powerless + */ +export const convertColorToHwb = ( + value: string, + opt: Options = {} +): ColorChannels | [number | string, number, number, number] | NullObject => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = '' } = opt; + let h, w, b, alpha; + if (REG_HWB.test(value)) { + [, h, w, b, alpha] = parseHwb(value, { + format: 'hwb' + }) as ComputedColorChannels; + if (format === 'hwb') { + return [Math.round(h), Math.round(w), Math.round(b), alpha]; + } + return [h, w, b, alpha]; + } + let x, y, z; + if (format === VAL_MIX) { + let xyz; + if (value.startsWith(FN_COLOR)) { + xyz = parseColorFunc(value, opt); + } else { + xyz = parseColorValue(value, opt); + } + if (xyz instanceof NullObject) { + return xyz; + } + [, x, y, z, alpha] = xyz as ComputedColorChannels; + } else if (value.startsWith(FN_COLOR)) { + [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels; + } else { + [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels; + } + [h, w, b] = transformXyzToHwb([x, y, z], true) as TriColorChannels; + if (format === 'hwb') { + return [Math.round(h), Math.round(w), Math.round(b), alpha]; + } + return [format === VAL_MIX && w + b >= 100 ? NONE : h, w, b, alpha]; +}; + +/** + * convert color value to lab + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels | NullObject - [l, a, b, alpha] + */ +export const convertColorToLab = ( + value: string, + opt: Options = {} +): ColorChannels | NullObject => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = '' } = opt; + let l, a, b, alpha; + if (REG_LAB.test(value)) { + [, l, a, b, alpha] = parseLab(value, { + format: VAL_COMP + }) as ComputedColorChannels; + return [l, a, b, alpha]; + } + let x, y, z; + if (format === VAL_MIX) { + let xyz; + opt.d50 = true; + if (value.startsWith(FN_COLOR)) { + xyz = parseColorFunc(value, opt); + } else { + xyz = parseColorValue(value, opt); + } + if (xyz instanceof NullObject) { + return xyz; + } + [, x, y, z, alpha] = xyz as ComputedColorChannels; + } else if (value.startsWith(FN_COLOR)) { + [, x, y, z, alpha] = parseColorFunc(value, { + d50: true + }) as ComputedColorChannels; + } else { + [, x, y, z, alpha] = parseColorValue(value, { + d50: true + }) as ComputedColorChannels; + } + [l, a, b] = transformXyzD50ToLab([x, y, z], true); + return [l, a, b, alpha]; +}; + +/** + * convert color value to lch + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels | NullObject - [l, c, h, alpha], hue may be powerless + */ +export const convertColorToLch = ( + value: string, + opt: Options = {} +): ColorChannels | [number, number, number | string, number] | NullObject => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = '' } = opt; + let l, c, h, alpha; + if (REG_LCH.test(value)) { + [, l, c, h, alpha] = parseLch(value, { + format: VAL_COMP + }) as ComputedColorChannels; + return [l, c, h, alpha]; + } + let x, y, z; + if (format === VAL_MIX) { + let xyz; + opt.d50 = true; + if (value.startsWith(FN_COLOR)) { + xyz = parseColorFunc(value, opt); + } else { + xyz = parseColorValue(value, opt); + } + if (xyz instanceof NullObject) { + return xyz; + } + [, x, y, z, alpha] = xyz as ComputedColorChannels; + } else if (value.startsWith(FN_COLOR)) { + [, x, y, z, alpha] = parseColorFunc(value, { + d50: true + }) as ComputedColorChannels; + } else { + [, x, y, z, alpha] = parseColorValue(value, { + d50: true + }) as ComputedColorChannels; + } + [l, c, h] = transformXyzD50ToLch([x, y, z], true); + return [l, c, format === VAL_MIX && c === 0 ? NONE : h, alpha]; +}; + +/** + * convert color value to oklab + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels | NullObject - [l, a, b, alpha] + */ +export const convertColorToOklab = ( + value: string, + opt: Options = {} +): ColorChannels | NullObject => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = '' } = opt; + let l, a, b, alpha; + if (REG_OKLAB.test(value)) { + [, l, a, b, alpha] = parseOklab(value, { + format: VAL_COMP + }) as ComputedColorChannels; + return [l, a, b, alpha]; + } + let x, y, z; + if (format === VAL_MIX) { + let xyz; + if (value.startsWith(FN_COLOR)) { + xyz = parseColorFunc(value, opt); + } else { + xyz = parseColorValue(value, opt); + } + if (xyz instanceof NullObject) { + return xyz; + } + [, x, y, z, alpha] = xyz as ComputedColorChannels; + } else if (value.startsWith(FN_COLOR)) { + [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels; + } else { + [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels; + } + [l, a, b] = transformXyzToOklab([x, y, z], true); + return [l, a, b, alpha]; +}; + +/** + * convert color value to oklch + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels | NullObject - [l, c, h, alpha], hue may be powerless + */ +export const convertColorToOklch = ( + value: string, + opt: Options = {} +): ColorChannels | [number, number, number | string, number] | NullObject => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = '' } = opt; + let l, c, h, alpha; + if (REG_OKLCH.test(value)) { + [, l, c, h, alpha] = parseOklch(value, { + format: VAL_COMP + }) as ComputedColorChannels; + return [l, c, h, alpha]; + } + let x, y, z; + if (format === VAL_MIX) { + let xyz; + if (value.startsWith(FN_COLOR)) { + xyz = parseColorFunc(value, opt); + } else { + xyz = parseColorValue(value, opt); + } + if (xyz instanceof NullObject) { + return xyz; + } + [, x, y, z, alpha] = xyz as ComputedColorChannels; + } else if (value.startsWith(FN_COLOR)) { + [, x, y, z, alpha] = parseColorFunc(value) as ComputedColorChannels; + } else { + [, x, y, z, alpha] = parseColorValue(value) as ComputedColorChannels; + } + [l, c, h] = transformXyzToOklch([x, y, z], true) as TriColorChannels; + return [l, c, format === VAL_MIX && c === 0 ? NONE : h, alpha]; +}; + +/** + * resolve color-mix() + * @param value - color-mix color value + * @param [opt] - options + * @returns resolved color - [cs, v1, v2, v3, alpha], '(empty)' + */ +export const resolveColorMix = ( + value: string, + opt: Options = {} +): SpecifiedColorChannels | string | NullObject => { + if (isString(value)) { + value = value.toLowerCase().trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { format = '', nullable = false } = opt; + const cacheKey: string = createCacheKey( + { + namespace: NAMESPACE, + name: 'resolveColorMix', + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return cachedResult as NullObject; + } + const cachedItem = cachedResult.item; + if (isString(cachedItem)) { + return cachedItem as string; + } + return cachedItem as SpecifiedColorChannels; + } + const nestedItems = []; + let colorSpace = ''; + let hueArc = ''; + let colorA = ''; + let pctA = ''; + let colorB = ''; + let pctB = ''; + let parsed = false; + if (!REG_MIX.test(value)) { + // nested color-mix() + if (value.startsWith(FN_MIX) && REG_MIX_NEST.test(value)) { + const regColorSpace = new RegExp(`^(?:${CS_RGB}|${CS_XYZ})$`); + const items = value.match(REG_MIX_NEST) as RegExpMatchArray; + for (const item of items) { + if (item) { + let val = resolveColorMix(item, { + format: format === VAL_SPEC ? format : VAL_COMP + }) as ComputedColorChannels | string; + // computed value + if (Array.isArray(val)) { + const [cs, v1, v2, v3, v4] = val as ComputedColorChannels; + if (v1 === 0 && v2 === 0 && v3 === 0 && v4 === 0) { + value = ''; + break; + } + if (regColorSpace.test(cs)) { + if (v4 === 1) { + val = `color(${cs} ${v1} ${v2} ${v3})`; + } else { + val = `color(${cs} ${v1} ${v2} ${v3} / ${v4})`; + } + } else if (v4 === 1) { + val = `${cs}(${v1} ${v2} ${v3})`; + } else { + val = `${cs}(${v1} ${v2} ${v3} / ${v4})`; + } + } else if (!REG_MIX.test(val)) { + value = ''; + break; + } + nestedItems.push(val); + value = value.replace(item, val); + } + } + if (!value) { + const res = cacheInvalidColorValue(cacheKey, format, nullable); + return res; + } + // contains light-dark() + } else if ( + value.startsWith(FN_MIX) && + value.endsWith(')') && + value.includes(FN_LIGHT_DARK) + ) { + const regColorSpace = new RegExp(`in\\s+(${CS_MIX})`); + const colorParts = value.replace(FN_MIX, '').replace(/\)$/, ''); + const [csPart = '', partA = '', partB = ''] = splitValue(colorParts, { + delimiter: ',' + }); + const [colorPartA = '', pctPartA = ''] = splitValue(partA); + const [colorPartB = '', pctPartB = ''] = splitValue(partB); + const specifiedColorA = resolveColor(colorPartA, { + format: VAL_SPEC + }) as string; + const specifiedColorB = resolveColor(colorPartB, { + format: VAL_SPEC + }) as string; + if (regColorSpace.test(csPart) && specifiedColorA && specifiedColorB) { + if (format === VAL_SPEC) { + const [, cs] = csPart.match(regColorSpace) as MatchedRegExp; + if (REG_CS_HUE.test(cs)) { + [, colorSpace, hueArc] = cs.match(REG_CS_HUE) as MatchedRegExp; + } else { + colorSpace = cs; + } + colorA = specifiedColorA; + if (pctPartA) { + pctA = pctPartA; + } + colorB = specifiedColorB; + if (pctPartB) { + pctB = pctPartB; + } + value = value + .replace(colorPartA, specifiedColorA) + .replace(colorPartB, specifiedColorB); + parsed = true; + } else { + const resolvedColorA = resolveColor(colorPartA, opt); + const resolvedColorB = resolveColor(colorPartB, opt); + if (isString(resolvedColorA) && isString(resolvedColorB)) { + value = value + .replace(colorPartA, resolvedColorA) + .replace(colorPartB, resolvedColorB); + } + } + } else { + const res = cacheInvalidColorValue(cacheKey, format, nullable); + return res; + } + } else { + const res = cacheInvalidColorValue(cacheKey, format, nullable); + return res; + } + } + if (nestedItems.length && format === VAL_SPEC) { + const regColorSpace = new RegExp(`^color-mix\\(\\s*in\\s+(${CS_MIX})\\s*,`); + const [, cs] = value.match(regColorSpace) as MatchedRegExp; + if (REG_CS_HUE.test(cs)) { + [, colorSpace, hueArc] = cs.match(REG_CS_HUE) as MatchedRegExp; + } else { + colorSpace = cs; + } + if (nestedItems.length === 2) { + let [itemA, itemB] = nestedItems as [string, string]; + itemA = itemA.replace(/(?=[()])/g, '\\'); + itemB = itemB.replace(/(?=[()])/g, '\\'); + const regA = new RegExp(`(${itemA})(?:\\s+(${PCT}))?`); + const regB = new RegExp(`(${itemB})(?:\\s+(${PCT}))?`); + [, colorA, pctA] = value.match(regA) as MatchedRegExp; + [, colorB, pctB] = value.match(regB) as MatchedRegExp; + } else { + let [item] = nestedItems as [string]; + item = item.replace(/(?=[()])/g, '\\'); + const itemPart = `${item}(?:\\s+${PCT})?`; + const itemPartCapt = `(${item})(?:\\s+(${PCT}))?`; + const regItemPart = new RegExp(`^${itemPartCapt}$`); + const regLastItem = new RegExp(`${itemPartCapt}\\s*\\)$`); + const regColorPart = new RegExp(`^(${SYN_COLOR_TYPE})(?:\\s+(${PCT}))?$`); + // item is at the end + if (regLastItem.test(value)) { + const reg = new RegExp( + `(${SYN_MIX_PART})\\s*,\\s*(${itemPart})\\s*\\)$` + ); + const [, colorPartA, colorPartB] = value.match(reg) as MatchedRegExp; + [, colorA, pctA] = colorPartA.match(regColorPart) as MatchedRegExp; + [, colorB, pctB] = colorPartB.match(regItemPart) as MatchedRegExp; + } else { + const reg = new RegExp( + `(${itemPart})\\s*,\\s*(${SYN_MIX_PART})\\s*\\)$` + ); + const [, colorPartA, colorPartB] = value.match(reg) as MatchedRegExp; + [, colorA, pctA] = colorPartA.match(regItemPart) as MatchedRegExp; + [, colorB, pctB] = colorPartB.match(regColorPart) as MatchedRegExp; + } + } + } else if (!parsed) { + const [, cs, colorPartA, colorPartB] = value.match( + REG_MIX_CAPT + ) as MatchedRegExp; + const reg = new RegExp(`^(${SYN_COLOR_TYPE})(?:\\s+(${PCT}))?$`); + [, colorA, pctA] = colorPartA.match(reg) as MatchedRegExp; + [, colorB, pctB] = colorPartB.match(reg) as MatchedRegExp; + if (REG_CS_HUE.test(cs)) { + [, colorSpace, hueArc] = cs.match(REG_CS_HUE) as MatchedRegExp; + } else { + colorSpace = cs; + } + } + // normalize percentages and set multipler + let pA, pB, m; + if (pctA && pctB) { + const p1 = parseFloat(pctA) / MAX_PCT; + const p2 = parseFloat(pctB) / MAX_PCT; + if (p1 < 0 || p1 > 1 || p2 < 0 || p2 > 1 || (p1 === 0 && p2 === 0)) { + const res = cacheInvalidColorValue(cacheKey, format, nullable); + return res; + } + const factor = p1 + p2; + pA = p1 / factor; + pB = p2 / factor; + m = factor < 1 ? factor : 1; + } else { + if (pctA) { + pA = parseFloat(pctA) / MAX_PCT; + if (pA < 0 || pA > 1) { + const res = cacheInvalidColorValue(cacheKey, format, nullable); + return res; + } + pB = 1 - pA; + } else if (pctB) { + pB = parseFloat(pctB) / MAX_PCT; + if (pB < 0 || pB > 1) { + const res = cacheInvalidColorValue(cacheKey, format, nullable); + return res; + } + pA = 1 - pB; + } else { + pA = HALF; + pB = HALF; + } + m = 1; + } + if (colorSpace === 'xyz') { + colorSpace = 'xyz-d65'; + } + // specified value + if (format === VAL_SPEC) { + let valueA = ''; + let valueB = ''; + if (colorA.startsWith(FN_MIX) || colorA.startsWith(FN_LIGHT_DARK)) { + valueA = colorA; + } else if (colorA.startsWith(FN_COLOR)) { + const [cs, v1, v2, v3, v4] = parseColorFunc( + colorA, + opt + ) as SpecifiedColorChannels; + if (v4 === 1) { + valueA = `color(${cs} ${v1} ${v2} ${v3})`; + } else { + valueA = `color(${cs} ${v1} ${v2} ${v3} / ${v4})`; + } + } else { + const val = parseColorValue(colorA, opt); + if (Array.isArray(val)) { + const [cs, v1, v2, v3, v4] = val; + if (v4 === 1) { + if (cs === 'rgb') { + valueA = `${cs}(${v1}, ${v2}, ${v3})`; + } else { + valueA = `${cs}(${v1} ${v2} ${v3})`; + } + } else if (cs === 'rgb') { + valueA = `${cs}a(${v1}, ${v2}, ${v3}, ${v4})`; + } else { + valueA = `${cs}(${v1} ${v2} ${v3} / ${v4})`; + } + } else { + if (!isString(val) || !val) { + setCache(cacheKey, ''); + return ''; + } + valueA = val; + } + } + if (colorB.startsWith(FN_MIX) || colorB.startsWith(FN_LIGHT_DARK)) { + valueB = colorB; + } else if (colorB.startsWith(FN_COLOR)) { + const [cs, v1, v2, v3, v4] = parseColorFunc( + colorB, + opt + ) as SpecifiedColorChannels; + if (v4 === 1) { + valueB = `color(${cs} ${v1} ${v2} ${v3})`; + } else { + valueB = `color(${cs} ${v1} ${v2} ${v3} / ${v4})`; + } + } else { + const val = parseColorValue(colorB, opt); + if (Array.isArray(val)) { + const [cs, v1, v2, v3, v4] = val; + if (v4 === 1) { + if (cs === 'rgb') { + valueB = `${cs}(${v1}, ${v2}, ${v3})`; + } else { + valueB = `${cs}(${v1} ${v2} ${v3})`; + } + } else if (cs === 'rgb') { + valueB = `${cs}a(${v1}, ${v2}, ${v3}, ${v4})`; + } else { + valueB = `${cs}(${v1} ${v2} ${v3} / ${v4})`; + } + } else { + if (!isString(val) || !val) { + setCache(cacheKey, ''); + return ''; + } + valueB = val; + } + } + if (pctA && pctB) { + valueA += ` ${parseFloat(pctA)}%`; + valueB += ` ${parseFloat(pctB)}%`; + } else if (pctA) { + const pA = parseFloat(pctA); + if (pA !== MAX_PCT * HALF) { + valueA += ` ${pA}%`; + } + } else if (pctB) { + const pA = MAX_PCT - parseFloat(pctB); + if (pA !== MAX_PCT * HALF) { + valueA += ` ${pA}%`; + } + } + if (hueArc) { + const res = `color-mix(in ${colorSpace} ${hueArc} hue, ${valueA}, ${valueB})`; + setCache(cacheKey, res); + return res; + } else { + const res = `color-mix(in ${colorSpace}, ${valueA}, ${valueB})`; + setCache(cacheKey, res); + return res; + } + } + let r = 0; + let g = 0; + let b = 0; + let alpha = 0; + // in srgb, srgb-linear + if (/^srgb(?:-linear)?$/.test(colorSpace)) { + let rgbA, rgbB; + if (colorSpace === 'srgb') { + if (REG_CURRENT.test(colorA)) { + rgbA = [NONE, NONE, NONE, NONE]; + } else { + rgbA = convertColorToRgb(colorA, { + colorSpace, + format: VAL_MIX + }); + } + if (REG_CURRENT.test(colorB)) { + rgbB = [NONE, NONE, NONE, NONE]; + } else { + rgbB = convertColorToRgb(colorB, { + colorSpace, + format: VAL_MIX + }); + } + } else { + if (REG_CURRENT.test(colorA)) { + rgbA = [NONE, NONE, NONE, NONE]; + } else { + rgbA = convertColorToLinearRgb(colorA, { + colorSpace, + format: VAL_MIX + }); + } + if (REG_CURRENT.test(colorB)) { + rgbB = [NONE, NONE, NONE, NONE]; + } else { + rgbB = convertColorToLinearRgb(colorB, { + colorSpace, + format: VAL_MIX + }); + } + } + if (rgbA instanceof NullObject || rgbB instanceof NullObject) { + const res = cacheInvalidColorValue(cacheKey, format, nullable); + return res; + } + const [rrA, ggA, bbA, aaA] = rgbA as NumStrColorChannels; + const [rrB, ggB, bbB, aaB] = rgbB as NumStrColorChannels; + const rNone = rrA === NONE && rrB === NONE; + const gNone = ggA === NONE && ggB === NONE; + const bNone = bbA === NONE && bbB === NONE; + const alphaNone = aaA === NONE && aaB === NONE; + const [[rA, gA, bA, alphaA], [rB, gB, bB, alphaB]] = + normalizeColorComponents( + [rrA, ggA, bbA, aaA], + [rrB, ggB, bbB, aaB], + true + ); + const factorA = alphaA * pA; + const factorB = alphaB * pB; + alpha = factorA + factorB; + if (alpha === 0) { + r = rA * pA + rB * pB; + g = gA * pA + gB * pB; + b = bA * pA + bB * pB; + } else { + r = (rA * factorA + rB * factorB) / alpha; + g = (gA * factorA + gB * factorB) / alpha; + b = (bA * factorA + bB * factorB) / alpha; + alpha = parseFloat(alpha.toFixed(3)); + } + if (format === VAL_COMP) { + const res: SpecifiedColorChannels = [ + colorSpace, + rNone ? NONE : roundToPrecision(r, HEX), + gNone ? NONE : roundToPrecision(g, HEX), + bNone ? NONE : roundToPrecision(b, HEX), + alphaNone ? NONE : alpha * m + ]; + setCache(cacheKey, res); + return res; + } + r *= MAX_RGB; + g *= MAX_RGB; + b *= MAX_RGB; + // in xyz, xyz-d65, xyz-d50 + } else if (REG_CS_XYZ.test(colorSpace)) { + let xyzA, xyzB; + if (REG_CURRENT.test(colorA)) { + xyzA = [NONE, NONE, NONE, NONE]; + } else { + xyzA = convertColorToXyz(colorA, { + colorSpace, + d50: colorSpace === 'xyz-d50', + format: VAL_MIX + }); + } + if (REG_CURRENT.test(colorB)) { + xyzB = [NONE, NONE, NONE, NONE]; + } else { + xyzB = convertColorToXyz(colorB, { + colorSpace, + d50: colorSpace === 'xyz-d50', + format: VAL_MIX + }); + } + if (xyzA instanceof NullObject || xyzB instanceof NullObject) { + const res = cacheInvalidColorValue(cacheKey, format, nullable); + return res; + } + const [xxA, yyA, zzA, aaA] = xyzA; + const [xxB, yyB, zzB, aaB] = xyzB; + const xNone = xxA === NONE && xxB === NONE; + const yNone = yyA === NONE && yyB === NONE; + const zNone = zzA === NONE && zzB === NONE; + const alphaNone = aaA === NONE && aaB === NONE; + const [[xA, yA, zA, alphaA], [xB, yB, zB, alphaB]] = + normalizeColorComponents( + [xxA, yyA, zzA, aaA], + [xxB, yyB, zzB, aaB], + true + ); + const factorA = alphaA * pA; + const factorB = alphaB * pB; + alpha = factorA + factorB; + let x, y, z; + if (alpha === 0) { + x = xA * pA + xB * pB; + y = yA * pA + yB * pB; + z = zA * pA + zB * pB; + } else { + x = (xA * factorA + xB * factorB) / alpha; + y = (yA * factorA + yB * factorB) / alpha; + z = (zA * factorA + zB * factorB) / alpha; + alpha = parseFloat(alpha.toFixed(3)); + } + if (format === VAL_COMP) { + const res: SpecifiedColorChannels = [ + colorSpace, + xNone ? NONE : roundToPrecision(x, HEX), + yNone ? NONE : roundToPrecision(y, HEX), + zNone ? NONE : roundToPrecision(z, HEX), + alphaNone ? NONE : alpha * m + ]; + setCache(cacheKey, res); + return res; + } + if (colorSpace === 'xyz-d50') { + [r, g, b] = transformXyzD50ToRgb([x, y, z], true); + } else { + [r, g, b] = transformXyzToRgb([x, y, z], true); + } + // in hsl, hwb + } else if (/^h(?:sl|wb)$/.test(colorSpace)) { + let hslA, hslB; + if (colorSpace === 'hsl') { + if (REG_CURRENT.test(colorA)) { + hslA = [NONE, NONE, NONE, NONE]; + } else { + hslA = convertColorToHsl(colorA, { + colorSpace, + format: VAL_MIX + }); + } + if (REG_CURRENT.test(colorB)) { + hslB = [NONE, NONE, NONE, NONE]; + } else { + hslB = convertColorToHsl(colorB, { + colorSpace, + format: VAL_MIX + }); + } + } else { + if (REG_CURRENT.test(colorA)) { + hslA = [NONE, NONE, NONE, NONE]; + } else { + hslA = convertColorToHwb(colorA, { + colorSpace, + format: VAL_MIX + }); + } + if (REG_CURRENT.test(colorB)) { + hslB = [NONE, NONE, NONE, NONE]; + } else { + hslB = convertColorToHwb(colorB, { + colorSpace, + format: VAL_MIX + }); + } + } + if (hslA instanceof NullObject || hslB instanceof NullObject) { + const res = cacheInvalidColorValue(cacheKey, format, nullable); + return res; + } + const [hhA, ssA, llA, aaA] = hslA; + const [hhB, ssB, llB, aaB] = hslB; + const alphaNone = aaA === NONE && aaB === NONE; + let [[hA, sA, lA, alphaA], [hB, sB, lB, alphaB]] = normalizeColorComponents( + [hhA, ssA, llA, aaA], + [hhB, ssB, llB, aaB], + true + ); + if (hueArc) { + [hA, hB] = interpolateHue(hA, hB, hueArc); + } + const factorA = alphaA * pA; + const factorB = alphaB * pB; + alpha = factorA + factorB; + const h = (hA * pA + hB * pB) % DEG; + let s, l; + if (alpha === 0) { + s = sA * pA + sB * pB; + l = lA * pA + lB * pB; + } else { + s = (sA * factorA + sB * factorB) / alpha; + l = (lA * factorA + lB * factorB) / alpha; + alpha = parseFloat(alpha.toFixed(3)); + } + [r, g, b] = convertColorToRgb( + `${colorSpace}(${h} ${s} ${l})` + ) as ColorChannels; + if (format === VAL_COMP) { + const res: SpecifiedColorChannels = [ + 'srgb', + roundToPrecision(r / MAX_RGB, HEX), + roundToPrecision(g / MAX_RGB, HEX), + roundToPrecision(b / MAX_RGB, HEX), + alphaNone ? NONE : alpha * m + ]; + setCache(cacheKey, res); + return res; + } + // in lch, oklch + } else if (/^(?:ok)?lch$/.test(colorSpace)) { + let lchA, lchB; + if (colorSpace === 'lch') { + if (REG_CURRENT.test(colorA)) { + lchA = [NONE, NONE, NONE, NONE]; + } else { + lchA = convertColorToLch(colorA, { + colorSpace, + format: VAL_MIX + }); + } + if (REG_CURRENT.test(colorB)) { + lchB = [NONE, NONE, NONE, NONE]; + } else { + lchB = convertColorToLch(colorB, { + colorSpace, + format: VAL_MIX + }); + } + } else { + if (REG_CURRENT.test(colorA)) { + lchA = [NONE, NONE, NONE, NONE]; + } else { + lchA = convertColorToOklch(colorA, { + colorSpace, + format: VAL_MIX + }); + } + if (REG_CURRENT.test(colorB)) { + lchB = [NONE, NONE, NONE, NONE]; + } else { + lchB = convertColorToOklch(colorB, { + colorSpace, + format: VAL_MIX + }); + } + } + if (lchA instanceof NullObject || lchB instanceof NullObject) { + const res = cacheInvalidColorValue(cacheKey, format, nullable); + return res; + } + const [llA, ccA, hhA, aaA] = lchA; + const [llB, ccB, hhB, aaB] = lchB; + const lNone = llA === NONE && llB === NONE; + const cNone = ccA === NONE && ccB === NONE; + const hNone = hhA === NONE && hhB === NONE; + const alphaNone = aaA === NONE && aaB === NONE; + let [[lA, cA, hA, alphaA], [lB, cB, hB, alphaB]] = normalizeColorComponents( + [llA, ccA, hhA, aaA], + [llB, ccB, hhB, aaB], + true + ); + if (hueArc) { + [hA, hB] = interpolateHue(hA, hB, hueArc); + } + const factorA = alphaA * pA; + const factorB = alphaB * pB; + alpha = factorA + factorB; + const h = (hA * pA + hB * pB) % DEG; + let l, c; + if (alpha === 0) { + l = lA * pA + lB * pB; + c = cA * pA + cB * pB; + } else { + l = (lA * factorA + lB * factorB) / alpha; + c = (cA * factorA + cB * factorB) / alpha; + alpha = parseFloat(alpha.toFixed(3)); + } + if (format === VAL_COMP) { + const res: SpecifiedColorChannels = [ + colorSpace, + lNone ? NONE : roundToPrecision(l, HEX), + cNone ? NONE : roundToPrecision(c, HEX), + hNone ? NONE : roundToPrecision(h, HEX), + alphaNone ? NONE : alpha * m + ]; + setCache(cacheKey, res); + return res; + } + [, r, g, b] = resolveColorValue( + `${colorSpace}(${l} ${c} ${h})` + ) as ComputedColorChannels; + // in lab, oklab + } else { + let labA, labB; + if (colorSpace === 'lab') { + if (REG_CURRENT.test(colorA)) { + labA = [NONE, NONE, NONE, NONE]; + } else { + labA = convertColorToLab(colorA, { + colorSpace, + format: VAL_MIX + }); + } + if (REG_CURRENT.test(colorB)) { + labB = [NONE, NONE, NONE, NONE]; + } else { + labB = convertColorToLab(colorB, { + colorSpace, + format: VAL_MIX + }); + } + } else { + if (REG_CURRENT.test(colorA)) { + labA = [NONE, NONE, NONE, NONE]; + } else { + labA = convertColorToOklab(colorA, { + colorSpace, + format: VAL_MIX + }); + } + if (REG_CURRENT.test(colorB)) { + labB = [NONE, NONE, NONE, NONE]; + } else { + labB = convertColorToOklab(colorB, { + colorSpace, + format: VAL_MIX + }); + } + } + if (labA instanceof NullObject || labB instanceof NullObject) { + const res = cacheInvalidColorValue(cacheKey, format, nullable); + return res; + } + const [llA, aaA, bbA, alA] = labA; + const [llB, aaB, bbB, alB] = labB; + const lNone = llA === NONE && llB === NONE; + const aNone = aaA === NONE && aaB === NONE; + const bNone = bbA === NONE && bbB === NONE; + const alphaNone = alA === NONE && alB === NONE; + const [[lA, aA, bA, alphaA], [lB, aB, bB, alphaB]] = + normalizeColorComponents( + [llA, aaA, bbA, alA], + [llB, aaB, bbB, alB], + true + ); + const factorA = alphaA * pA; + const factorB = alphaB * pB; + alpha = factorA + factorB; + let l, aO, bO; + if (alpha === 0) { + l = lA * pA + lB * pB; + aO = aA * pA + aB * pB; + bO = bA * pA + bB * pB; + } else { + l = (lA * factorA + lB * factorB) / alpha; + aO = (aA * factorA + aB * factorB) / alpha; + bO = (bA * factorA + bB * factorB) / alpha; + alpha = parseFloat(alpha.toFixed(3)); + } + if (format === VAL_COMP) { + const res: SpecifiedColorChannels = [ + colorSpace, + lNone ? NONE : roundToPrecision(l, HEX), + aNone ? NONE : roundToPrecision(aO, HEX), + bNone ? NONE : roundToPrecision(bO, HEX), + alphaNone ? NONE : alpha * m + ]; + setCache(cacheKey, res); + return res; + } + [, r, g, b] = resolveColorValue( + `${colorSpace}(${l} ${aO} ${bO})` + ) as ComputedColorChannels; + } + const res: SpecifiedColorChannels = [ + 'rgb', + Math.round(r), + Math.round(g), + Math.round(b), + parseFloat((alpha * m).toFixed(3)) + ]; + setCache(cacheKey, res); + return res; +}; diff --git a/vanilla/node_modules/@asamuzakjp/css-color/src/js/common.ts b/vanilla/node_modules/@asamuzakjp/css-color/src/js/common.ts new file mode 100644 index 0000000..32bf8bd --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/src/js/common.ts @@ -0,0 +1,31 @@ +/** + * common + */ + +/* numeric constants */ +const TYPE_FROM = 8; +const TYPE_TO = -1; + +/** + * get type + * @param o - object to check + * @returns type of object + */ +export const getType = (o: unknown): string => + Object.prototype.toString.call(o).slice(TYPE_FROM, TYPE_TO); + +/** + * is string + * @param o - object to check + * @returns result + */ +export const isString = (o: unknown): o is string => + typeof o === 'string' || o instanceof String; + +/** + * is string or number + * @param o - object to check + * @returns result + */ +export const isStringOrNumber = (o: unknown): boolean => + isString(o) || typeof o === 'number'; diff --git a/vanilla/node_modules/@asamuzakjp/css-color/src/js/constant.ts b/vanilla/node_modules/@asamuzakjp/css-color/src/js/constant.ts new file mode 100644 index 0000000..b331181 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/src/js/constant.ts @@ -0,0 +1,68 @@ +/** + * constant + */ + +/* values and units */ +const _DIGIT = '(?:0|[1-9]\\d*)'; +const _COMPARE = 'clamp|max|min'; +const _EXPO = 'exp|hypot|log|pow|sqrt'; +const _SIGN = 'abs|sign'; +const _STEP = 'mod|rem|round'; +const _TRIG = 'a?(?:cos|sin|tan)|atan2'; +const _MATH = `${_COMPARE}|${_EXPO}|${_SIGN}|${_STEP}|${_TRIG}`; +const _CALC = `calc|${_MATH}`; +const _VAR = `var|${_CALC}`; +export const ANGLE = 'deg|g?rad|turn'; +export const LENGTH = + '[cm]m|[dls]?v(?:[bhiw]|max|min)|in|p[ctx]|q|r?(?:[cl]h|cap|e[mx]|ic)'; +export const NUM = `[+-]?(?:${_DIGIT}(?:\\.\\d*)?|\\.\\d+)(?:e-?${_DIGIT})?`; +export const NUM_POSITIVE = `\\+?(?:${_DIGIT}(?:\\.\\d*)?|\\.\\d+)(?:e-?${_DIGIT})?`; +export const NONE = 'none'; +export const PCT = `${NUM}%`; +export const SYN_FN_CALC = `^(?:${_CALC})\\(|(?<=[*\\/\\s\\(])(?:${_CALC})\\(`; +export const SYN_FN_MATH_START = `^(?:${_MATH})\\($`; +export const SYN_FN_VAR = '^var\\(|(?<=[*\\/\\s\\(])var\\('; +export const SYN_FN_VAR_START = `^(?:${_VAR})\\(`; + +/* colors */ +const _ALPHA = `(?:\\s*\\/\\s*(?:${NUM}|${PCT}|${NONE}))?`; +const _ALPHA_LV3 = `(?:\\s*,\\s*(?:${NUM}|${PCT}))?`; +const _COLOR_FUNC = '(?:ok)?l(?:ab|ch)|color|hsla?|hwb|rgba?'; +const _COLOR_KEY = '[a-z]+|#[\\da-f]{3}|#[\\da-f]{4}|#[\\da-f]{6}|#[\\da-f]{8}'; +const _CS_HUE = '(?:ok)?lch|hsl|hwb'; +const _CS_HUE_ARC = '(?:de|in)creasing|longer|shorter'; +const _NUM_ANGLE = `${NUM}(?:${ANGLE})?`; +const _NUM_ANGLE_NONE = `(?:${NUM}(?:${ANGLE})?|${NONE})`; +const _NUM_PCT_NONE = `(?:${NUM}|${PCT}|${NONE})`; +export const CS_HUE = `(?:${_CS_HUE})(?:\\s(?:${_CS_HUE_ARC})\\shue)?`; +export const CS_HUE_CAPT = `(${_CS_HUE})(?:\\s(${_CS_HUE_ARC})\\shue)?`; +export const CS_LAB = '(?:ok)?lab'; +export const CS_LCH = '(?:ok)?lch'; +export const CS_SRGB = 'srgb(?:-linear)?'; +export const CS_RGB = `(?:a98|prophoto)-rgb|display-p3|rec2020|${CS_SRGB}`; +export const CS_XYZ = 'xyz(?:-d(?:50|65))?'; +export const CS_RECT = `${CS_LAB}|${CS_RGB}|${CS_XYZ}`; +export const CS_MIX = `${CS_HUE}|${CS_RECT}`; +export const FN_COLOR = 'color('; +export const FN_LIGHT_DARK = 'light-dark('; +export const FN_MIX = 'color-mix('; +export const FN_REL = `(?:${_COLOR_FUNC})\\(\\s*from\\s+`; +export const FN_REL_CAPT = `(${_COLOR_FUNC})\\(\\s*from\\s+`; +export const FN_VAR = 'var('; +export const SYN_FN_COLOR = `(?:${CS_RGB}|${CS_XYZ})(?:\\s+${_NUM_PCT_NONE}){3}${_ALPHA}`; +export const SYN_FN_LIGHT_DARK = '^light-dark\\('; +export const SYN_FN_REL = `^${FN_REL}|(?<=[\\s])${FN_REL}`; +export const SYN_HSL = `${_NUM_ANGLE_NONE}(?:\\s+${_NUM_PCT_NONE}){2}${_ALPHA}`; +export const SYN_HSL_LV3 = `${_NUM_ANGLE}(?:\\s*,\\s*${PCT}){2}${_ALPHA_LV3}`; +export const SYN_LCH = `(?:${_NUM_PCT_NONE}\\s+){2}${_NUM_ANGLE_NONE}${_ALPHA}`; +export const SYN_MOD = `${_NUM_PCT_NONE}(?:\\s+${_NUM_PCT_NONE}){2}${_ALPHA}`; +export const SYN_RGB_LV3 = `(?:${NUM}(?:\\s*,\\s*${NUM}){2}|${PCT}(?:\\s*,\\s*${PCT}){2})${_ALPHA_LV3}`; +export const SYN_COLOR_TYPE = `${_COLOR_KEY}|hsla?\\(\\s*${SYN_HSL_LV3}\\s*\\)|rgba?\\(\\s*${SYN_RGB_LV3}\\s*\\)|(?:hsla?|hwb)\\(\\s*${SYN_HSL}\\s*\\)|(?:(?:ok)?lab|rgba?)\\(\\s*${SYN_MOD}\\s*\\)|(?:ok)?lch\\(\\s*${SYN_LCH}\\s*\\)|color\\(\\s*${SYN_FN_COLOR}\\s*\\)`; +export const SYN_MIX_PART = `(?:${SYN_COLOR_TYPE})(?:\\s+${PCT})?`; +export const SYN_MIX = `color-mix\\(\\s*in\\s+(?:${CS_MIX})\\s*,\\s*${SYN_MIX_PART}\\s*,\\s*${SYN_MIX_PART}\\s*\\)`; +export const SYN_MIX_CAPT = `color-mix\\(\\s*in\\s+(${CS_MIX})\\s*,\\s*(${SYN_MIX_PART})\\s*,\\s*(${SYN_MIX_PART})\\s*\\)`; + +/* formats */ +export const VAL_COMP = 'computedValue'; +export const VAL_MIX = 'mixValue'; +export const VAL_SPEC = 'specifiedValue'; diff --git a/vanilla/node_modules/@asamuzakjp/css-color/src/js/convert.ts b/vanilla/node_modules/@asamuzakjp/css-color/src/js/convert.ts new file mode 100644 index 0000000..bcde6db --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/src/js/convert.ts @@ -0,0 +1,469 @@ +/** + * convert + */ + +import { + CacheItem, + NullObject, + createCacheKey, + getCache, + setCache +} from './cache'; +import { + convertColorToHsl, + convertColorToHwb, + convertColorToLab, + convertColorToLch, + convertColorToOklab, + convertColorToOklch, + convertColorToRgb, + numberToHexString, + parseColorFunc, + parseColorValue +} from './color'; +import { isString } from './common'; +import { cssCalc } from './css-calc'; +import { resolveVar } from './css-var'; +import { resolveRelativeColor } from './relative-color'; +import { resolveColor } from './resolve'; +import { ColorChannels, ComputedColorChannels, Options } from './typedef'; + +/* constants */ +import { SYN_FN_CALC, SYN_FN_REL, SYN_FN_VAR, VAL_COMP } from './constant'; +const NAMESPACE = 'convert'; + +/* regexp */ +const REG_FN_CALC = new RegExp(SYN_FN_CALC); +const REG_FN_REL = new RegExp(SYN_FN_REL); +const REG_FN_VAR = new RegExp(SYN_FN_VAR); + +/** + * pre process + * @param value - CSS color value + * @param [opt] - options + * @returns value + */ +export const preProcess = ( + value: string, + opt: Options = {} +): string | NullObject => { + if (isString(value)) { + value = value.trim(); + if (!value) { + return new NullObject(); + } + } else { + return new NullObject(); + } + const cacheKey: string = createCacheKey( + { + namespace: NAMESPACE, + name: 'preProcess', + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return cachedResult as NullObject; + } + return cachedResult.item as string; + } + if (REG_FN_VAR.test(value)) { + const resolvedValue = resolveVar(value, opt); + if (isString(resolvedValue)) { + value = resolvedValue; + } else { + setCache(cacheKey, null); + return new NullObject(); + } + } + if (REG_FN_REL.test(value)) { + const resolvedValue = resolveRelativeColor(value, opt); + if (isString(resolvedValue)) { + value = resolvedValue; + } else { + setCache(cacheKey, null); + return new NullObject(); + } + } else if (REG_FN_CALC.test(value)) { + value = cssCalc(value, opt); + } + if (value.startsWith('color-mix')) { + const clonedOpt = structuredClone(opt); + clonedOpt.format = VAL_COMP; + clonedOpt.nullable = true; + const resolvedValue = resolveColor(value, clonedOpt); + setCache(cacheKey, resolvedValue); + return resolvedValue; + } + setCache(cacheKey, value); + return value; +}; + +/** + * convert number to hex string + * @param value - numeric value + * @returns hex string: 00..ff + */ +export const numberToHex = (value: number): string => { + const hex = numberToHexString(value); + return hex; +}; + +/** + * convert color to hex + * @param value - CSS color value + * @param [opt] - options + * @param [opt.alpha] - enable alpha channel + * @returns #rrggbb | #rrggbbaa | null + */ +export const colorToHex = (value: string, opt: Options = {}): string | null => { + if (isString(value)) { + const resolvedValue = preProcess(value, opt); + if (resolvedValue instanceof NullObject) { + return null; + } + value = resolvedValue.toLowerCase(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { alpha = false } = opt; + const cacheKey: string = createCacheKey( + { + namespace: NAMESPACE, + name: 'colorToHex', + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return null; + } + return cachedResult.item as string; + } + let hex; + opt.nullable = true; + if (alpha) { + opt.format = 'hexAlpha'; + hex = resolveColor(value, opt); + } else { + opt.format = 'hex'; + hex = resolveColor(value, opt); + } + if (isString(hex)) { + setCache(cacheKey, hex); + return hex; + } + setCache(cacheKey, null); + return null; +}; + +/** + * convert color to hsl + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels - [h, s, l, alpha] + */ +export const colorToHsl = (value: string, opt: Options = {}): ColorChannels => { + if (isString(value)) { + const resolvedValue = preProcess(value, opt); + if (resolvedValue instanceof NullObject) { + return [0, 0, 0, 0]; + } + value = resolvedValue.toLowerCase(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey: string = createCacheKey( + { + namespace: NAMESPACE, + name: 'colorToHsl', + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item as ColorChannels; + } + opt.format = 'hsl'; + const hsl = convertColorToHsl(value, opt) as ColorChannels; + setCache(cacheKey, hsl); + return hsl; +}; + +/** + * convert color to hwb + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels - [h, w, b, alpha] + */ +export const colorToHwb = (value: string, opt: Options = {}): ColorChannels => { + if (isString(value)) { + const resolvedValue = preProcess(value, opt); + if (resolvedValue instanceof NullObject) { + return [0, 0, 0, 0]; + } + value = resolvedValue.toLowerCase(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey: string = createCacheKey( + { + namespace: NAMESPACE, + name: 'colorToHwb', + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item as ColorChannels; + } + opt.format = 'hwb'; + const hwb = convertColorToHwb(value, opt) as ColorChannels; + setCache(cacheKey, hwb); + return hwb; +}; + +/** + * convert color to lab + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels - [l, a, b, alpha] + */ +export const colorToLab = (value: string, opt: Options = {}): ColorChannels => { + if (isString(value)) { + const resolvedValue = preProcess(value, opt); + if (resolvedValue instanceof NullObject) { + return [0, 0, 0, 0]; + } + value = resolvedValue.toLowerCase(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey: string = createCacheKey( + { + namespace: NAMESPACE, + name: 'colorToLab', + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item as ColorChannels; + } + const lab = convertColorToLab(value, opt) as ColorChannels; + setCache(cacheKey, lab); + return lab; +}; + +/** + * convert color to lch + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels - [l, c, h, alpha] + */ +export const colorToLch = (value: string, opt: Options = {}): ColorChannels => { + if (isString(value)) { + const resolvedValue = preProcess(value, opt); + if (resolvedValue instanceof NullObject) { + return [0, 0, 0, 0]; + } + value = resolvedValue.toLowerCase(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey: string = createCacheKey( + { + namespace: NAMESPACE, + name: 'colorToLch', + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item as ColorChannels; + } + const lch = convertColorToLch(value, opt) as ColorChannels; + setCache(cacheKey, lch); + return lch; +}; + +/** + * convert color to oklab + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels - [l, a, b, alpha] + */ +export const colorToOklab = ( + value: string, + opt: Options = {} +): ColorChannels => { + if (isString(value)) { + const resolvedValue = preProcess(value, opt); + if (resolvedValue instanceof NullObject) { + return [0, 0, 0, 0]; + } + value = resolvedValue.toLowerCase(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey: string = createCacheKey( + { + namespace: NAMESPACE, + name: 'colorToOklab', + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item as ColorChannels; + } + const lab = convertColorToOklab(value, opt) as ColorChannels; + setCache(cacheKey, lab); + return lab; +}; + +/** + * convert color to oklch + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels - [l, c, h, alpha] + */ +export const colorToOklch = ( + value: string, + opt: Options = {} +): ColorChannels => { + if (isString(value)) { + const resolvedValue = preProcess(value, opt); + if (resolvedValue instanceof NullObject) { + return [0, 0, 0, 0]; + } + value = resolvedValue.toLowerCase(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey: string = createCacheKey( + { + namespace: NAMESPACE, + name: 'colorToOklch', + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item as ColorChannels; + } + const lch = convertColorToOklch(value, opt) as ColorChannels; + setCache(cacheKey, lch); + return lch; +}; + +/** + * convert color to rgb + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels - [r, g, b, alpha] + */ +export const colorToRgb = (value: string, opt: Options = {}): ColorChannels => { + if (isString(value)) { + const resolvedValue = preProcess(value, opt); + if (resolvedValue instanceof NullObject) { + return [0, 0, 0, 0]; + } + value = resolvedValue.toLowerCase(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey: string = createCacheKey( + { + namespace: NAMESPACE, + name: 'colorToRgb', + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item as ColorChannels; + } + const rgb = convertColorToRgb(value, opt) as ColorChannels; + setCache(cacheKey, rgb); + return rgb; +}; + +/** + * convert color to xyz + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels - [x, y, z, alpha] + */ +export const colorToXyz = (value: string, opt: Options = {}): ColorChannels => { + if (isString(value)) { + const resolvedValue = preProcess(value, opt); + if (resolvedValue instanceof NullObject) { + return [0, 0, 0, 0]; + } + value = resolvedValue.toLowerCase(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey: string = createCacheKey( + { + namespace: NAMESPACE, + name: 'colorToXyz', + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item as ColorChannels; + } + let xyz; + if (value.startsWith('color(')) { + [, ...xyz] = parseColorFunc(value, opt) as ComputedColorChannels; + } else { + [, ...xyz] = parseColorValue(value, opt) as ComputedColorChannels; + } + setCache(cacheKey, xyz); + return xyz as ColorChannels; +}; + +/** + * convert color to xyz-d50 + * @param value - CSS color value + * @param [opt] - options + * @returns ColorChannels - [x, y, z, alpha] + */ +export const colorToXyzD50 = ( + value: string, + opt: Options = {} +): ColorChannels => { + opt.d50 = true; + return colorToXyz(value, opt); +}; + +/* convert */ +export const convert = { + colorToHex, + colorToHsl, + colorToHwb, + colorToLab, + colorToLch, + colorToOklab, + colorToOklch, + colorToRgb, + colorToXyz, + colorToXyzD50, + numberToHex +}; diff --git a/vanilla/node_modules/@asamuzakjp/css-color/src/js/css-calc.ts b/vanilla/node_modules/@asamuzakjp/css-color/src/js/css-calc.ts new file mode 100644 index 0000000..f765f61 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/src/js/css-calc.ts @@ -0,0 +1,955 @@ +/** + * css-calc + */ + +import { calc } from '@csstools/css-calc'; +import { CSSToken, TokenType, tokenize } from '@csstools/css-tokenizer'; +import { + CacheItem, + NullObject, + createCacheKey, + getCache, + setCache +} from './cache'; +import { isString, isStringOrNumber } from './common'; +import { resolveVar } from './css-var'; +import { resolveLengthInPixels, roundToPrecision } from './util'; +import { MatchedRegExp, Options } from './typedef'; + +/* constants */ +import { + ANGLE, + LENGTH, + NUM, + SYN_FN_CALC, + SYN_FN_MATH_START, + SYN_FN_VAR, + SYN_FN_VAR_START, + VAL_SPEC +} from './constant'; +const { + CloseParen: PAREN_CLOSE, + Comment: COMMENT, + Dimension: DIM, + EOF, + Function: FUNC, + OpenParen: PAREN_OPEN, + Whitespace: W_SPACE +} = TokenType; +const NAMESPACE = 'css-calc'; + +/* numeric constants */ +const TRIA = 3; +const HEX = 16; +const MAX_PCT = 100; + +/* regexp */ +const REG_FN_CALC = new RegExp(SYN_FN_CALC); +const REG_FN_CALC_NUM = new RegExp(`^calc\\((${NUM})\\)$`); +const REG_FN_MATH_START = new RegExp(SYN_FN_MATH_START); +const REG_FN_VAR = new RegExp(SYN_FN_VAR); +const REG_FN_VAR_START = new RegExp(SYN_FN_VAR_START); +const REG_OPERATOR = /\s[*+/-]\s/; +const REG_TYPE_DIM = new RegExp(`^(${NUM})(${ANGLE}|${LENGTH})$`); +const REG_TYPE_DIM_PCT = new RegExp(`^(${NUM})(${ANGLE}|${LENGTH}|%)$`); +const REG_TYPE_PCT = new RegExp(`^(${NUM})%$`); + +/** + * Calclator + */ +export class Calculator { + /* private */ + // number + #hasNum: boolean; + #numSum: number[]; + #numMul: number[]; + // percentage + #hasPct: boolean; + #pctSum: number[]; + #pctMul: number[]; + // dimension + #hasDim: boolean; + #dimSum: string[]; + #dimSub: string[]; + #dimMul: string[]; + #dimDiv: string[]; + // et cetra + #hasEtc: boolean; + #etcSum: string[]; + #etcSub: string[]; + #etcMul: string[]; + #etcDiv: string[]; + + /** + * constructor + */ + constructor() { + // number + this.#hasNum = false; + this.#numSum = []; + this.#numMul = []; + // percentage + this.#hasPct = false; + this.#pctSum = []; + this.#pctMul = []; + // dimension + this.#hasDim = false; + this.#dimSum = []; + this.#dimSub = []; + this.#dimMul = []; + this.#dimDiv = []; + // et cetra + this.#hasEtc = false; + this.#etcSum = []; + this.#etcSub = []; + this.#etcMul = []; + this.#etcDiv = []; + } + + get hasNum() { + return this.#hasNum; + } + + set hasNum(value: boolean) { + this.#hasNum = !!value; + } + + get numSum() { + return this.#numSum; + } + + get numMul() { + return this.#numMul; + } + + get hasPct() { + return this.#hasPct; + } + + set hasPct(value: boolean) { + this.#hasPct = !!value; + } + + get pctSum() { + return this.#pctSum; + } + + get pctMul() { + return this.#pctMul; + } + + get hasDim() { + return this.#hasDim; + } + + set hasDim(value: boolean) { + this.#hasDim = !!value; + } + + get dimSum() { + return this.#dimSum; + } + + get dimSub() { + return this.#dimSub; + } + + get dimMul() { + return this.#dimMul; + } + + get dimDiv() { + return this.#dimDiv; + } + + get hasEtc() { + return this.#hasEtc; + } + + set hasEtc(value: boolean) { + this.#hasEtc = !!value; + } + + get etcSum() { + return this.#etcSum; + } + + get etcSub() { + return this.#etcSub; + } + + get etcMul() { + return this.#etcMul; + } + + get etcDiv() { + return this.#etcDiv; + } + + /** + * clear values + * @returns void + */ + clear() { + // number + this.#hasNum = false; + this.#numSum = []; + this.#numMul = []; + // percentage + this.#hasPct = false; + this.#pctSum = []; + this.#pctMul = []; + // dimension + this.#hasDim = false; + this.#dimSum = []; + this.#dimSub = []; + this.#dimMul = []; + this.#dimDiv = []; + // et cetra + this.#hasEtc = false; + this.#etcSum = []; + this.#etcSub = []; + this.#etcMul = []; + this.#etcDiv = []; + } + + /** + * sort values + * @param values - values + * @returns sorted values + */ + sort(values: string[] = []): string[] { + const arr = [...values]; + if (arr.length > 1) { + arr.sort((a, b) => { + let res; + if (REG_TYPE_DIM_PCT.test(a) && REG_TYPE_DIM_PCT.test(b)) { + const [, valA, unitA] = a.match(REG_TYPE_DIM_PCT) as MatchedRegExp; + const [, valB, unitB] = b.match(REG_TYPE_DIM_PCT) as MatchedRegExp; + if (unitA === unitB) { + if (Number(valA) === Number(valB)) { + res = 0; + } else if (Number(valA) > Number(valB)) { + res = 1; + } else { + res = -1; + } + } else if (unitA > unitB) { + res = 1; + } else { + res = -1; + } + } else { + if (a === b) { + res = 0; + } else if (a > b) { + res = 1; + } else { + res = -1; + } + } + return res; + }); + } + return arr; + } + + /** + * multiply values + * @returns resolved value + */ + multiply(): string { + const value = []; + let num; + if (this.#hasNum) { + num = 1; + for (const i of this.#numMul) { + num *= i; + if (num === 0 || !Number.isFinite(num) || Number.isNaN(num)) { + break; + } + } + if (!this.#hasPct && !this.#hasDim && !this.hasEtc) { + if (Number.isFinite(num)) { + num = roundToPrecision(num, HEX); + } + value.push(num); + } + } + if (this.#hasPct) { + if (typeof num !== 'number') { + num = 1; + } + for (const i of this.#pctMul) { + num *= i; + if (num === 0 || !Number.isFinite(num) || Number.isNaN(num)) { + break; + } + } + if (Number.isFinite(num)) { + num = `${roundToPrecision(num, HEX)}%`; + } + if (!this.#hasDim && !this.hasEtc) { + value.push(num); + } + } + if (this.#hasDim) { + let dim = ''; + let mul = ''; + let div = ''; + if (this.#dimMul.length) { + if (this.#dimMul.length === 1) { + [mul] = this.#dimMul as [string]; + } else { + mul = `${this.sort(this.#dimMul).join(' * ')}`; + } + } + if (this.#dimDiv.length) { + if (this.#dimDiv.length === 1) { + [div] = this.#dimDiv as [string]; + } else { + div = `${this.sort(this.#dimDiv).join(' * ')}`; + } + } + if (Number.isFinite(num)) { + if (mul) { + if (div) { + if (div.includes('*')) { + dim = calc(`calc(${num} * ${mul} / (${div}))`, { + toCanonicalUnits: true + }); + } else { + dim = calc(`calc(${num} * ${mul} / ${div})`, { + toCanonicalUnits: true + }); + } + } else { + dim = calc(`calc(${num} * ${mul})`, { + toCanonicalUnits: true + }); + } + } else if (div.includes('*')) { + dim = calc(`calc(${num} / (${div}))`, { + toCanonicalUnits: true + }); + } else { + dim = calc(`calc(${num} / ${div})`, { + toCanonicalUnits: true + }); + } + value.push(dim.replace(/^calc/, '')); + } else { + if (!value.length && num !== undefined) { + value.push(num); + } + if (mul) { + if (div) { + if (div.includes('*')) { + dim = calc(`calc(${mul} / (${div}))`, { + toCanonicalUnits: true + }); + } else { + dim = calc(`calc(${mul} / ${div})`, { + toCanonicalUnits: true + }); + } + } else { + dim = calc(`calc(${mul})`, { + toCanonicalUnits: true + }); + } + if (value.length) { + value.push('*', dim.replace(/^calc/, '')); + } else { + value.push(dim.replace(/^calc/, '')); + } + } else { + dim = calc(`calc(${div})`, { + toCanonicalUnits: true + }); + if (value.length) { + value.push('/', dim.replace(/^calc/, '')); + } else { + value.push('1', '/', dim.replace(/^calc/, '')); + } + } + } + } + if (this.#hasEtc) { + if (this.#etcMul.length) { + if (!value.length && num !== undefined) { + value.push(num); + } + const mul = this.sort(this.#etcMul).join(' * '); + if (value.length) { + value.push(`* ${mul}`); + } else { + value.push(`${mul}`); + } + } + if (this.#etcDiv.length) { + const div = this.sort(this.#etcDiv).join(' * '); + if (div.includes('*')) { + if (value.length) { + value.push(`/ (${div})`); + } else { + value.push(`1 / (${div})`); + } + } else if (value.length) { + value.push(`/ ${div}`); + } else { + value.push(`1 / ${div}`); + } + } + } + if (value.length) { + return value.join(' '); + } + return ''; + } + + /** + * sum values + * @returns resolved value + */ + sum(): string { + const value = []; + if (this.#hasNum) { + let num = 0; + for (const i of this.#numSum) { + num += i; + if (!Number.isFinite(num) || Number.isNaN(num)) { + break; + } + } + value.push(num); + } + if (this.#hasPct) { + let num: number | string = 0; + for (const i of this.#pctSum) { + num += i; + if (!Number.isFinite(num)) { + break; + } + } + if (Number.isFinite(num)) { + num = `${num}%`; + } + if (value.length) { + value.push(`+ ${num}`); + } else { + value.push(num); + } + } + if (this.#hasDim) { + let dim, sum, sub; + if (this.#dimSum.length) { + sum = this.sort(this.#dimSum).join(' + '); + } + if (this.#dimSub.length) { + sub = this.sort(this.#dimSub).join(' + '); + } + if (sum) { + if (sub) { + if (sub.includes('-')) { + dim = calc(`calc(${sum} - (${sub}))`, { + toCanonicalUnits: true + }); + } else { + dim = calc(`calc(${sum} - ${sub})`, { + toCanonicalUnits: true + }); + } + } else { + dim = calc(`calc(${sum})`, { + toCanonicalUnits: true + }); + } + } else { + dim = calc(`calc(-1 * (${sub}))`, { + toCanonicalUnits: true + }); + } + if (value.length) { + value.push('+', dim.replace(/^calc/, '')); + } else { + value.push(dim.replace(/^calc/, '')); + } + } + if (this.#hasEtc) { + if (this.#etcSum.length) { + const sum = this.sort(this.#etcSum) + .map(item => { + let res; + if ( + REG_OPERATOR.test(item) && + !item.startsWith('(') && + !item.endsWith(')') + ) { + res = `(${item})`; + } else { + res = item; + } + return res; + }) + .join(' + '); + if (value.length) { + if (this.#etcSum.length > 1) { + value.push(`+ (${sum})`); + } else { + value.push(`+ ${sum}`); + } + } else { + value.push(`${sum}`); + } + } + if (this.#etcSub.length) { + const sub = this.sort(this.#etcSub) + .map(item => { + let res; + if ( + REG_OPERATOR.test(item) && + !item.startsWith('(') && + !item.endsWith(')') + ) { + res = `(${item})`; + } else { + res = item; + } + return res; + }) + .join(' + '); + if (value.length) { + if (this.#etcSub.length > 1) { + value.push(`- (${sub})`); + } else { + value.push(`- ${sub}`); + } + } else if (this.#etcSub.length > 1) { + value.push(`-1 * (${sub})`); + } else { + value.push(`-1 * ${sub}`); + } + } + } + if (value.length) { + return value.join(' '); + } + return ''; + } +} + +/** + * sort calc values + * @param values - values to sort + * @param [finalize] - finalize values + * @returns sorted values + */ +export const sortCalcValues = ( + values: (number | string)[] = [], + finalize: boolean = false +): string => { + if (values.length < TRIA) { + throw new Error(`Unexpected array length ${values.length}.`); + } + const start = values.shift(); + if (!isString(start) || !start.endsWith('(')) { + throw new Error(`Unexpected token ${start}.`); + } + const end = values.pop(); + if (end !== ')') { + throw new Error(`Unexpected token ${end}.`); + } + if (values.length === 1) { + const [value] = values; + if (!isStringOrNumber(value)) { + throw new Error(`Unexpected token ${value}.`); + } + return `${start}${value}${end}`; + } + const sortedValues = []; + const cal = new Calculator(); + let operator: string = ''; + const l = values.length; + for (let i = 0; i < l; i++) { + const value = values[i]; + if (!isStringOrNumber(value)) { + throw new Error(`Unexpected token ${value}.`); + } + if (value === '*' || value === '/') { + operator = value; + } else if (value === '+' || value === '-') { + const sortedValue = cal.multiply(); + if (sortedValue) { + sortedValues.push(sortedValue, value); + } + cal.clear(); + operator = ''; + } else { + const numValue = Number(value); + const strValue = `${value}`; + switch (operator) { + case '/': { + if (Number.isFinite(numValue)) { + cal.hasNum = true; + cal.numMul.push(1 / numValue); + } else if (REG_TYPE_PCT.test(strValue)) { + const [, val] = strValue.match(REG_TYPE_PCT) as MatchedRegExp; + cal.hasPct = true; + cal.pctMul.push((MAX_PCT * MAX_PCT) / Number(val)); + } else if (REG_TYPE_DIM.test(strValue)) { + cal.hasDim = true; + cal.dimDiv.push(strValue); + } else { + cal.hasEtc = true; + cal.etcDiv.push(strValue); + } + break; + } + case '*': + default: { + if (Number.isFinite(numValue)) { + cal.hasNum = true; + cal.numMul.push(numValue); + } else if (REG_TYPE_PCT.test(strValue)) { + const [, val] = strValue.match(REG_TYPE_PCT) as MatchedRegExp; + cal.hasPct = true; + cal.pctMul.push(Number(val)); + } else if (REG_TYPE_DIM.test(strValue)) { + cal.hasDim = true; + cal.dimMul.push(strValue); + } else { + cal.hasEtc = true; + cal.etcMul.push(strValue); + } + } + } + } + if (i === l - 1) { + const sortedValue = cal.multiply(); + if (sortedValue) { + sortedValues.push(sortedValue); + } + cal.clear(); + operator = ''; + } + } + let resolvedValue = ''; + if (finalize && (sortedValues.includes('+') || sortedValues.includes('-'))) { + const finalizedValues = []; + cal.clear(); + operator = ''; + const l = sortedValues.length; + for (let i = 0; i < l; i++) { + const value = sortedValues[i]; + if (isStringOrNumber(value)) { + if (value === '+' || value === '-') { + operator = value; + } else { + const numValue = Number(value); + const strValue = `${value}`; + switch (operator) { + case '-': { + if (Number.isFinite(numValue)) { + cal.hasNum = true; + cal.numSum.push(-1 * numValue); + } else if (REG_TYPE_PCT.test(strValue)) { + const [, val] = strValue.match(REG_TYPE_PCT) as MatchedRegExp; + cal.hasPct = true; + cal.pctSum.push(-1 * Number(val)); + } else if (REG_TYPE_DIM.test(strValue)) { + cal.hasDim = true; + cal.dimSub.push(strValue); + } else { + cal.hasEtc = true; + cal.etcSub.push(strValue); + } + break; + } + case '+': + default: { + if (Number.isFinite(numValue)) { + cal.hasNum = true; + cal.numSum.push(numValue); + } else if (REG_TYPE_PCT.test(strValue)) { + const [, val] = strValue.match(REG_TYPE_PCT) as MatchedRegExp; + cal.hasPct = true; + cal.pctSum.push(Number(val)); + } else if (REG_TYPE_DIM.test(strValue)) { + cal.hasDim = true; + cal.dimSum.push(strValue); + } else { + cal.hasEtc = true; + cal.etcSum.push(strValue); + } + } + } + } + } + if (i === l - 1) { + const sortedValue = cal.sum(); + if (sortedValue) { + finalizedValues.push(sortedValue); + } + cal.clear(); + operator = ''; + } + } + resolvedValue = finalizedValues.join(' ').replace(/\+\s-/g, '- '); + } else { + resolvedValue = sortedValues.join(' ').replace(/\+\s-/g, '- '); + } + if ( + resolvedValue.startsWith('(') && + resolvedValue.endsWith(')') && + resolvedValue.lastIndexOf('(') === 0 && + resolvedValue.indexOf(')') === resolvedValue.length - 1 + ) { + resolvedValue = resolvedValue.replace(/^\(/, '').replace(/\)$/, ''); + } + return `${start}${resolvedValue}${end}`; +}; + +/** + * serialize calc + * @param value - CSS value + * @param [opt] - options + * @returns serialized value + */ +export const serializeCalc = (value: string, opt: Options = {}): string => { + const { format = '' } = opt; + if (isString(value)) { + if (!REG_FN_VAR_START.test(value) || format !== VAL_SPEC) { + return value; + } + value = value.toLowerCase().trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey: string = createCacheKey( + { + namespace: NAMESPACE, + name: 'serializeCalc', + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item as string; + } + const items: string[] = tokenize({ css: value }) + .map((token: CSSToken): string => { + const [type, value] = token as [TokenType, string]; + let res = ''; + if (type !== W_SPACE && type !== COMMENT) { + res = value; + } + return res; + }) + .filter(v => v); + let startIndex = items.findLastIndex((item: string) => /\($/.test(item)); + while (startIndex) { + const endIndex = items.findIndex((item: unknown, index: number) => { + return item === ')' && index > startIndex; + }); + const slicedValues: string[] = items.slice(startIndex, endIndex + 1); + let serializedValue: string = sortCalcValues(slicedValues); + if (REG_FN_VAR_START.test(serializedValue)) { + serializedValue = calc(serializedValue, { + toCanonicalUnits: true + }); + } + items.splice(startIndex, endIndex - startIndex + 1, serializedValue); + startIndex = items.findLastIndex((item: string) => /\($/.test(item)); + } + const serializedCalc = sortCalcValues(items, true); + setCache(cacheKey, serializedCalc); + return serializedCalc; +}; + +/** + * resolve dimension + * @param token - CSS token + * @param [opt] - options + * @returns resolved value + */ +export const resolveDimension = ( + token: CSSToken, + opt: Options = {} +): string | NullObject => { + if (!Array.isArray(token)) { + throw new TypeError(`${token} is not an array.`); + } + const [, , , , detail = {}] = token; + const { unit, value } = detail as { + unit: string; + value: number; + }; + if (unit === 'px') { + return `${value}${unit}`; + } + const pixelValue = resolveLengthInPixels(Number(value), unit, opt); + if (Number.isFinite(pixelValue)) { + return `${roundToPrecision(pixelValue, HEX)}px`; + } + return new NullObject(); +}; + +/** + * parse tokens + * @param tokens - CSS tokens + * @param [opt] - options + * @returns parsed tokens + */ +export const parseTokens = ( + tokens: CSSToken[], + opt: Options = {} +): string[] => { + if (!Array.isArray(tokens)) { + throw new TypeError(`${tokens} is not an array.`); + } + const { format = '' } = opt; + const mathFunc = new Set(); + let nest = 0; + const res: string[] = []; + while (tokens.length) { + const token = tokens.shift(); + if (!Array.isArray(token)) { + throw new TypeError(`${token} is not an array.`); + } + const [type = '', value = ''] = token as [TokenType, string]; + switch (type) { + case DIM: { + if (format === VAL_SPEC && !mathFunc.has(nest)) { + res.push(value); + } else { + const resolvedValue = resolveDimension(token, opt); + if (isString(resolvedValue)) { + res.push(resolvedValue); + } else { + res.push(value); + } + } + break; + } + case FUNC: + case PAREN_OPEN: { + res.push(value); + nest++; + if (REG_FN_MATH_START.test(value)) { + mathFunc.add(nest); + } + break; + } + case PAREN_CLOSE: { + if (res.length) { + const lastValue = res[res.length - 1]; + if (lastValue === ' ') { + res.splice(-1, 1, value); + } else { + res.push(value); + } + } else { + res.push(value); + } + if (mathFunc.has(nest)) { + mathFunc.delete(nest); + } + nest--; + break; + } + case W_SPACE: { + if (res.length) { + const lastValue = res[res.length - 1]; + if ( + isString(lastValue) && + !lastValue.endsWith('(') && + lastValue !== ' ' + ) { + res.push(value); + } + } + break; + } + default: { + if (type !== COMMENT && type !== EOF) { + res.push(value); + } + } + } + } + return res; +}; + +/** + * CSS calc() + * @param value - CSS value including calc() + * @param [opt] - options + * @returns resolved value + */ +export const cssCalc = (value: string, opt: Options = {}): string => { + const { format = '' } = opt; + if (isString(value)) { + if (REG_FN_VAR.test(value)) { + if (format === VAL_SPEC) { + return value; + } else { + const resolvedValue = resolveVar(value, opt); + if (isString(resolvedValue)) { + return resolvedValue; + } else { + return ''; + } + } + } else if (!REG_FN_CALC.test(value)) { + return value; + } + value = value.toLowerCase().trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey: string = createCacheKey( + { + namespace: NAMESPACE, + name: 'cssCalc', + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item as string; + } + const tokens = tokenize({ css: value }); + const values = parseTokens(tokens, opt); + let resolvedValue: string = calc(values.join(''), { + toCanonicalUnits: true + }); + if (REG_FN_VAR_START.test(value)) { + if (REG_TYPE_DIM_PCT.test(resolvedValue)) { + const [, val, unit] = resolvedValue.match( + REG_TYPE_DIM_PCT + ) as MatchedRegExp; + resolvedValue = `${roundToPrecision(Number(val), HEX)}${unit}`; + } + // wrap with `calc()` + if ( + resolvedValue && + !REG_FN_VAR_START.test(resolvedValue) && + format === VAL_SPEC + ) { + resolvedValue = `calc(${resolvedValue})`; + } + } + if (format === VAL_SPEC) { + if (/\s[-+*/]\s/.test(resolvedValue) && !resolvedValue.includes('NaN')) { + resolvedValue = serializeCalc(resolvedValue, opt); + } else if (REG_FN_CALC_NUM.test(resolvedValue)) { + const [, val] = resolvedValue.match(REG_FN_CALC_NUM) as MatchedRegExp; + resolvedValue = `calc(${roundToPrecision(Number(val), HEX)})`; + } + } + setCache(cacheKey, resolvedValue); + return resolvedValue; +}; diff --git a/vanilla/node_modules/@asamuzakjp/css-color/src/js/css-gradient.ts b/vanilla/node_modules/@asamuzakjp/css-color/src/js/css-gradient.ts new file mode 100644 index 0000000..4f57567 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/src/js/css-gradient.ts @@ -0,0 +1,384 @@ +/** + * css-gradient + */ + +import { CacheItem, createCacheKey, getCache, setCache } from './cache'; +import { resolveColor } from './resolve'; +import { isString } from './common'; +import { MatchedRegExp, Options } from './typedef'; +import { isColor, splitValue } from './util'; + +/* constants */ +import { + ANGLE, + CS_HUE, + CS_RECT, + LENGTH, + NUM, + NUM_POSITIVE, + PCT, + VAL_COMP, + VAL_SPEC +} from './constant'; +const NAMESPACE = 'css-gradient'; +const DIM_ANGLE = `${NUM}(?:${ANGLE})`; +const DIM_ANGLE_PCT = `${DIM_ANGLE}|${PCT}`; +const DIM_LEN = `${NUM}(?:${LENGTH})|0`; +const DIM_LEN_PCT = `${DIM_LEN}|${PCT}`; +const DIM_LEN_PCT_POSI = `${NUM_POSITIVE}(?:${LENGTH}|%)|0`; +const DIM_LEN_POSI = `${NUM_POSITIVE}(?:${LENGTH})|0`; +const CTR = 'center'; +const L_R = 'left|right'; +const T_B = 'top|bottom'; +const S_E = 'start|end'; +const AXIS_X = `${L_R}|x-(?:${S_E})`; +const AXIS_Y = `${T_B}|y-(?:${S_E})`; +const BLOCK = `block-(?:${S_E})`; +const INLINE = `inline-(?:${S_E})`; +const POS_1 = `${CTR}|${AXIS_X}|${AXIS_Y}|${BLOCK}|${INLINE}|${DIM_LEN_PCT}`; +const POS_2 = [ + `(?:${CTR}|${AXIS_X})\\s+(?:${CTR}|${AXIS_Y})`, + `(?:${CTR}|${AXIS_Y})\\s+(?:${CTR}|${AXIS_X})`, + `(?:${CTR}|${AXIS_X}|${DIM_LEN_PCT})\\s+(?:${CTR}|${AXIS_Y}|${DIM_LEN_PCT})`, + `(?:${CTR}|${BLOCK})\\s+(?:${CTR}|${INLINE})`, + `(?:${CTR}|${INLINE})\\s+(?:${CTR}|${BLOCK})`, + `(?:${CTR}|${S_E})\\s+(?:${CTR}|${S_E})` +].join('|'); +const POS_4 = [ + `(?:${AXIS_X})\\s+(?:${DIM_LEN_PCT})\\s+(?:${AXIS_Y})\\s+(?:${DIM_LEN_PCT})`, + `(?:${AXIS_Y})\\s+(?:${DIM_LEN_PCT})\\s+(?:${AXIS_X})\\s+(?:${DIM_LEN_PCT})`, + `(?:${BLOCK})\\s+(?:${DIM_LEN_PCT})\\s+(?:${INLINE})\\s+(?:${DIM_LEN_PCT})`, + `(?:${INLINE})\\s+(?:${DIM_LEN_PCT})\\s+(?:${BLOCK})\\s+(?:${DIM_LEN_PCT})`, + `(?:${S_E})\\s+(?:${DIM_LEN_PCT})\\s+(?:${S_E})\\s+(?:${DIM_LEN_PCT})` +].join('|'); +const RAD_EXTENT = '(?:clos|farth)est-(?:corner|side)'; +const RAD_SIZE = [ + `${RAD_EXTENT}(?:\\s+${RAD_EXTENT})?`, + `${DIM_LEN_POSI}`, + `(?:${DIM_LEN_PCT_POSI})\\s+(?:${DIM_LEN_PCT_POSI})` +].join('|'); +const RAD_SHAPE = 'circle|ellipse'; +const FROM_ANGLE = `from\\s+${DIM_ANGLE}`; +const AT_POSITION = `at\\s+(?:${POS_1}|${POS_2}|${POS_4})`; +const TO_SIDE_CORNER = `to\\s+(?:(?:${L_R})(?:\\s(?:${T_B}))?|(?:${T_B})(?:\\s(?:${L_R}))?)`; +const IN_COLOR_SPACE = `in\\s+(?:${CS_RECT}|${CS_HUE})`; + +/* type definitions */ +/** + * @type ColorStopList - list of color stops + */ +type ColorStopList = [string, string, ...string[]]; + +/** + * @typedef ValidateGradientLine - validate gradient line + * @property line - gradient line + * @property valid - result + */ +interface ValidateGradientLine { + line: string; + valid: boolean; +} + +/** + * @typedef ValidateColorStops - validate color stops + * @property colorStops - list of color stops + * @property valid - result + */ +interface ValidateColorStops { + colorStops: string[]; + valid: boolean; +} + +/** + * @typedef Gradient - parsed CSS gradient + * @property value - input value + * @property type - gradient type + * @property [gradientLine] - gradient line + * @property colorStopList - list of color stops + */ +interface Gradient { + value: string; + type: string; + gradientLine?: string; + colorStopList: ColorStopList; +} + +/* regexp */ +const REG_GRAD = /^(?:repeating-)?(?:conic|linear|radial)-gradient\(/; +const REG_GRAD_CAPT = /^((?:repeating-)?(?:conic|linear|radial)-gradient)\(/; + +/** + * get gradient type + * @param value - gradient value + * @returns gradient type + */ +export const getGradientType = (value: string): string => { + if (isString(value)) { + value = value.trim(); + if (REG_GRAD.test(value)) { + const [, type] = value.match(REG_GRAD_CAPT) as MatchedRegExp; + return type; + } + } + return ''; +}; + +/** + * validate gradient line + * @param value - gradient line value + * @param type - gradient type + * @returns result + */ +export const validateGradientLine = ( + value: string, + type: string +): ValidateGradientLine => { + if (isString(value) && isString(type)) { + value = value.trim(); + type = type.trim(); + let lineSyntax = ''; + const defaultValues = []; + if (/^(?:repeating-)?linear-gradient$/.test(type)) { + /* + * <linear-gradient-line> = [ + * [ <angle> | to <side-or-corner> ] || + * <color-interpolation-method> + * ] + */ + lineSyntax = [ + `(?:${DIM_ANGLE}|${TO_SIDE_CORNER})(?:\\s+${IN_COLOR_SPACE})?`, + `${IN_COLOR_SPACE}(?:\\s+(?:${DIM_ANGLE}|${TO_SIDE_CORNER}))?` + ].join('|'); + defaultValues.push(/to\s+bottom/); + } else if (/^(?:repeating-)?radial-gradient$/.test(type)) { + /* + * <radial-gradient-line> = [ + * [ [ <radial-shape> || <radial-size> ]? [ at <position> ]? ] || + * <color-interpolation-method>]? + */ + lineSyntax = [ + `(?:${RAD_SHAPE})(?:\\s+(?:${RAD_SIZE}))?(?:\\s+${AT_POSITION})?(?:\\s+${IN_COLOR_SPACE})?`, + `(?:${RAD_SIZE})(?:\\s+(?:${RAD_SHAPE}))?(?:\\s+${AT_POSITION})?(?:\\s+${IN_COLOR_SPACE})?`, + `${AT_POSITION}(?:\\s+${IN_COLOR_SPACE})?`, + `${IN_COLOR_SPACE}(?:\\s+${RAD_SHAPE})(?:\\s+(?:${RAD_SIZE}))?(?:\\s+${AT_POSITION})?`, + `${IN_COLOR_SPACE}(?:\\s+${RAD_SIZE})(?:\\s+(?:${RAD_SHAPE}))?(?:\\s+${AT_POSITION})?`, + `${IN_COLOR_SPACE}(?:\\s+${AT_POSITION})?` + ].join('|'); + defaultValues.push(/ellipse/, /farthest-corner/, /at\s+center/); + } else if (/^(?:repeating-)?conic-gradient$/.test(type)) { + /* + * <conic-gradient-line> = [ + * [ [ from <angle> ]? [ at <position> ]? ] || + * <color-interpolation-method> + * ] + */ + lineSyntax = [ + `${FROM_ANGLE}(?:\\s+${AT_POSITION})?(?:\\s+${IN_COLOR_SPACE})?`, + `${AT_POSITION}(?:\\s+${IN_COLOR_SPACE})?`, + `${IN_COLOR_SPACE}(?:\\s+${FROM_ANGLE})?(?:\\s+${AT_POSITION})?` + ].join('|'); + defaultValues.push(/at\s+center/); + } + if (lineSyntax) { + const reg = new RegExp(`^(?:${lineSyntax})$`); + const valid = reg.test(value); + if (valid) { + let line = value; + for (const defaultValue of defaultValues) { + line = line.replace(defaultValue, ''); + } + line = line.replace(/\s{2,}/g, ' ').trim(); + return { + line, + valid + }; + } + return { + valid, + line: value + }; + } + } + return { + line: value, + valid: false + }; +}; + +/** + * validate color stop list + * @param list + * @param type + * @param [opt] + * @returns result + */ +export const validateColorStopList = ( + list: string[], + type: string, + opt: Options = {} +): ValidateColorStops => { + if (Array.isArray(list) && list.length > 1) { + const dimension = /^(?:repeating-)?conic-gradient$/.test(type) + ? DIM_ANGLE_PCT + : DIM_LEN_PCT; + const regColorHint = new RegExp(`^(?:${dimension})$`); + const regDimension = new RegExp(`(?:\\s+(?:${dimension})){1,2}$`); + const valueTypes = []; + const valueList = []; + for (const item of list) { + if (isString(item)) { + if (regColorHint.test(item)) { + valueTypes.push('hint'); + valueList.push(item); + } else { + const itemColor = item.replace(regDimension, ''); + if (isColor(itemColor, { format: VAL_SPEC })) { + const resolvedColor = resolveColor(itemColor, opt) as string; + valueTypes.push('color'); + valueList.push(item.replace(itemColor, resolvedColor)); + } else { + return { + colorStops: list, + valid: false + }; + } + } + } + } + const valid = /^color(?:,(?:hint,)?color)+$/.test(valueTypes.join(',')); + return { + valid, + colorStops: valueList + }; + } + return { + colorStops: list, + valid: false + }; +}; + +/** + * parse CSS gradient + * @param value - gradient value + * @param [opt] - options + * @returns parsed result + */ +export const parseGradient = ( + value: string, + opt: Options = {} +): Gradient | null => { + if (isString(value)) { + value = value.trim(); + const cacheKey: string = createCacheKey( + { + namespace: NAMESPACE, + name: 'parseGradient', + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return null; + } + return cachedResult.item as Gradient; + } + const type = getGradientType(value); + const gradValue = value.replace(REG_GRAD, '').replace(/\)$/, ''); + if (type && gradValue) { + const [lineOrColorStop = '', ...itemList] = splitValue(gradValue, { + delimiter: ',' + }); + const dimension = /^(?:repeating-)?conic-gradient$/.test(type) + ? DIM_ANGLE_PCT + : DIM_LEN_PCT; + const regDimension = new RegExp(`(?:\\s+(?:${dimension})){1,2}$`); + let colorStop = ''; + if (regDimension.test(lineOrColorStop)) { + const itemColor = lineOrColorStop.replace(regDimension, ''); + if (isColor(itemColor, { format: VAL_SPEC })) { + const resolvedColor = resolveColor(itemColor, opt) as string; + colorStop = lineOrColorStop.replace(itemColor, resolvedColor); + } + } else if (isColor(lineOrColorStop, { format: VAL_SPEC })) { + colorStop = resolveColor(lineOrColorStop, opt) as string; + } + if (colorStop) { + itemList.unshift(colorStop); + const { colorStops, valid } = validateColorStopList( + itemList, + type, + opt + ); + if (valid) { + const res: Gradient = { + value, + type, + colorStopList: colorStops as ColorStopList + }; + setCache(cacheKey, res); + return res; + } + } else if (itemList.length > 1) { + const { line: gradientLine, valid: validLine } = validateGradientLine( + lineOrColorStop, + type + ); + const { colorStops, valid: validColorStops } = validateColorStopList( + itemList, + type, + opt + ); + if (validLine && validColorStops) { + const res: Gradient = { + value, + type, + gradientLine, + colorStopList: colorStops as ColorStopList + }; + setCache(cacheKey, res); + return res; + } + } + } + setCache(cacheKey, null); + return null; + } + return null; +}; + +/** + * resolve CSS gradient + * @param value - CSS value + * @param [opt] - options + * @returns result + */ +export const resolveGradient = (value: string, opt: Options = {}): string => { + const { format = VAL_COMP } = opt; + const gradient = parseGradient(value, opt); + if (gradient) { + const { type = '', gradientLine = '', colorStopList = [] } = gradient; + if (type && Array.isArray(colorStopList) && colorStopList.length > 1) { + if (gradientLine) { + return `${type}(${gradientLine}, ${colorStopList.join(', ')})`; + } + return `${type}(${colorStopList.join(', ')})`; + } + } + if (format === VAL_SPEC) { + return ''; + } + return 'none'; +}; + +/** + * is CSS gradient + * @param value - CSS value + * @param [opt] - options + * @returns result + */ +export const isGradient = (value: string, opt: Options = {}): boolean => { + const gradient = parseGradient(value, opt); + return gradient !== null; +}; diff --git a/vanilla/node_modules/@asamuzakjp/css-color/src/js/css-var.ts b/vanilla/node_modules/@asamuzakjp/css-color/src/js/css-var.ts new file mode 100644 index 0000000..ef4a3f1 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/src/js/css-var.ts @@ -0,0 +1,250 @@ +/** + * css-var + */ + +import { CSSToken, TokenType, tokenize } from '@csstools/css-tokenizer'; +import { + CacheItem, + NullObject, + createCacheKey, + getCache, + setCache +} from './cache'; +import { isString } from './common'; +import { cssCalc } from './css-calc'; +import { isColor } from './util'; +import { Options } from './typedef'; + +/* constants */ +import { FN_VAR, SYN_FN_CALC, SYN_FN_VAR, VAL_SPEC } from './constant'; +const { + CloseParen: PAREN_CLOSE, + Comment: COMMENT, + EOF, + Ident: IDENT, + Whitespace: W_SPACE +} = TokenType; +const NAMESPACE = 'css-var'; + +/* regexp */ +const REG_FN_CALC = new RegExp(SYN_FN_CALC); +const REG_FN_VAR = new RegExp(SYN_FN_VAR); + +/** + * resolve custom property + * @param tokens - CSS tokens + * @param [opt] - options + * @returns result - [tokens, resolvedValue] + */ +export function resolveCustomProperty( + tokens: CSSToken[], + opt: Options = {} +): [CSSToken[], string] { + if (!Array.isArray(tokens)) { + throw new TypeError(`${tokens} is not an array.`); + } + const { customProperty = {} } = opt; + const items: string[] = []; + while (tokens.length) { + const token = tokens.shift(); + if (!Array.isArray(token)) { + throw new TypeError(`${token} is not an array.`); + } + const [type, value] = token as [TokenType, string]; + // end of var() + if (type === PAREN_CLOSE) { + break; + } + // nested var() + if (value === FN_VAR) { + const [restTokens, item] = resolveCustomProperty(tokens, opt); + tokens = restTokens; + if (item) { + items.push(item); + } + } else if (type === IDENT) { + if (value.startsWith('--')) { + let item; + if (Object.hasOwn(customProperty, value)) { + item = customProperty[value] as string; + } else if (typeof customProperty.callback === 'function') { + item = customProperty.callback(value); + } + if (item) { + items.push(item); + } + } else if (value) { + items.push(value); + } + } + } + let resolveAsColor = false; + if (items.length > 1) { + const lastValue = items[items.length - 1]; + resolveAsColor = isColor(lastValue); + } + let resolvedValue = ''; + for (let item of items) { + item = item.trim(); + if (REG_FN_VAR.test(item)) { + // recurse resolveVar() + const resolvedItem = resolveVar(item, opt); + if (isString(resolvedItem)) { + if (resolveAsColor) { + if (isColor(resolvedItem)) { + resolvedValue = resolvedItem; + } + } else { + resolvedValue = resolvedItem; + } + } + } else if (REG_FN_CALC.test(item)) { + item = cssCalc(item, opt); + if (resolveAsColor) { + if (isColor(item)) { + resolvedValue = item; + } + } else { + resolvedValue = item; + } + } else if ( + item && + !/^(?:inherit|initial|revert(?:-layer)?|unset)$/.test(item) + ) { + if (resolveAsColor) { + if (isColor(item)) { + resolvedValue = item; + } + } else { + resolvedValue = item; + } + } + if (resolvedValue) { + break; + } + } + return [tokens, resolvedValue]; +} + +/** + * parse tokens + * @param tokens - CSS tokens + * @param [opt] - options + * @returns parsed tokens + */ +export function parseTokens( + tokens: CSSToken[], + opt: Options = {} +): string[] | NullObject { + const res: string[] = []; + while (tokens.length) { + const token = tokens.shift(); + const [type = '', value = ''] = token as [TokenType, string]; + if (value === FN_VAR) { + const [restTokens, resolvedValue] = resolveCustomProperty(tokens, opt); + if (!resolvedValue) { + return new NullObject(); + } + tokens = restTokens; + res.push(resolvedValue); + } else { + switch (type) { + case PAREN_CLOSE: { + if (res.length) { + const lastValue = res[res.length - 1]; + if (lastValue === ' ') { + res.splice(-1, 1, value); + } else { + res.push(value); + } + } else { + res.push(value); + } + break; + } + case W_SPACE: { + if (res.length) { + const lastValue = res[res.length - 1]; + if ( + isString(lastValue) && + !lastValue.endsWith('(') && + lastValue !== ' ' + ) { + res.push(value); + } + } + break; + } + default: { + if (type !== COMMENT && type !== EOF) { + res.push(value); + } + } + } + } + } + return res; +} + +/** + * resolve CSS var() + * @param value - CSS value including var() + * @param [opt] - options + * @returns resolved value + */ +export function resolveVar( + value: string, + opt: Options = {} +): string | NullObject { + const { format = '' } = opt; + if (isString(value)) { + if (!REG_FN_VAR.test(value) || format === VAL_SPEC) { + return value; + } + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey: string = createCacheKey( + { + namespace: NAMESPACE, + name: 'resolveVar', + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return cachedResult as NullObject; + } + return cachedResult.item as string; + } + const tokens = tokenize({ css: value }); + const values = parseTokens(tokens, opt); + if (Array.isArray(values)) { + let color = values.join(''); + if (REG_FN_CALC.test(color)) { + color = cssCalc(color, opt); + } + setCache(cacheKey, color); + return color; + } else { + setCache(cacheKey, null); + return new NullObject(); + } +} + +/** + * CSS var() + * @param value - CSS value including var() + * @param [opt] - options + * @returns resolved value + */ +export const cssVar = (value: string, opt: Options = {}): string => { + const resolvedValue = resolveVar(value, opt); + if (isString(resolvedValue)) { + return resolvedValue; + } + return ''; +}; diff --git a/vanilla/node_modules/@asamuzakjp/css-color/src/js/relative-color.ts b/vanilla/node_modules/@asamuzakjp/css-color/src/js/relative-color.ts new file mode 100644 index 0000000..9a20728 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/src/js/relative-color.ts @@ -0,0 +1,635 @@ +/** + * relative-color + */ + +import { SyntaxFlag, color as colorParser } from '@csstools/css-color-parser'; +import { + ComponentValue, + parseComponentValue +} from '@csstools/css-parser-algorithms'; +import { CSSToken, TokenType, tokenize } from '@csstools/css-tokenizer'; +import { + CacheItem, + NullObject, + createCacheKey, + getCache, + setCache +} from './cache'; +import { NAMED_COLORS, convertColorToRgb } from './color'; +import { isString, isStringOrNumber } from './common'; +import { resolveDimension, serializeCalc } from './css-calc'; +import { resolveColor } from './resolve'; +import { roundToPrecision, splitValue } from './util'; +import { + ColorChannels, + MatchedRegExp, + Options, + StringColorChannels +} from './typedef'; + +/* constants */ +import { + CS_LAB, + CS_LCH, + FN_LIGHT_DARK, + FN_REL, + FN_REL_CAPT, + FN_VAR, + NONE, + SYN_COLOR_TYPE, + SYN_FN_MATH_START, + SYN_FN_VAR, + SYN_MIX, + VAL_SPEC +} from './constant'; +const { + CloseParen: PAREN_CLOSE, + Comment: COMMENT, + Delim: DELIM, + Dimension: DIM, + EOF, + Function: FUNC, + Ident: IDENT, + Number: NUM, + OpenParen: PAREN_OPEN, + Percentage: PCT, + Whitespace: W_SPACE +} = TokenType; +const { HasNoneKeywords: KEY_NONE } = SyntaxFlag; +const NAMESPACE = 'relative-color'; + +/* numeric constants */ +const OCT = 8; +const DEC = 10; +const HEX = 16; +const MAX_PCT = 100; +const MAX_RGB = 255; + +/* type definitions */ +/** + * @type NumberOrStringColorChannels - color channel + */ +type NumberOrStringColorChannels = ColorChannels & StringColorChannels; + +/* regexp */ +const REG_COLOR_CAPT = new RegExp( + `^${FN_REL}(${SYN_COLOR_TYPE}|${SYN_MIX})\\s+` +); +const REG_CS_HSL = /(?:hsla?|hwb)$/; +const REG_CS_CIE = new RegExp(`^(?:${CS_LAB}|${CS_LCH})$`); +const REG_FN_CALC_SUM = /^(?:abs|sig?n|cos|tan)\(/; +const REG_FN_MATH_START = new RegExp(SYN_FN_MATH_START); +const REG_FN_REL = new RegExp(FN_REL); +const REG_FN_REL_CAPT = new RegExp(`^${FN_REL_CAPT}`); +const REG_FN_REL_START = new RegExp(`^${FN_REL}`); +const REG_FN_VAR = new RegExp(SYN_FN_VAR); + +/** + * resolve relative color channels + * @param tokens - CSS tokens + * @param [opt] - options + * @returns resolved color channels + */ +export function resolveColorChannels( + tokens: CSSToken[], + opt: Options = {} +): NumberOrStringColorChannels | NullObject { + if (!Array.isArray(tokens)) { + throw new TypeError(`${tokens} is not an array.`); + } + const { colorSpace = '', format = '' } = opt; + const colorChannels = new Map([ + ['color', ['r', 'g', 'b', 'alpha']], + ['hsl', ['h', 's', 'l', 'alpha']], + ['hsla', ['h', 's', 'l', 'alpha']], + ['hwb', ['h', 'w', 'b', 'alpha']], + ['lab', ['l', 'a', 'b', 'alpha']], + ['lch', ['l', 'c', 'h', 'alpha']], + ['oklab', ['l', 'a', 'b', 'alpha']], + ['oklch', ['l', 'c', 'h', 'alpha']], + ['rgb', ['r', 'g', 'b', 'alpha']], + ['rgba', ['r', 'g', 'b', 'alpha']] + ]); + const colorChannel = colorChannels.get(colorSpace); + // invalid color channel + if (!colorChannel) { + return new NullObject(); + } + const mathFunc = new Set(); + const channels: [ + (number | string)[], + (number | string)[], + (number | string)[], + (number | string)[] + ] = [[], [], [], []]; + let i = 0; + let nest = 0; + let func = ''; + let precededPct = false; + while (tokens.length) { + const token = tokens.shift(); + if (!Array.isArray(token)) { + throw new TypeError(`${token} is not an array.`); + } + const [type, value, , , detail] = token as [ + TokenType, + string, + number, + number, + { value: string | number } | undefined + ]; + const channel = channels[i]; + if (Array.isArray(channel)) { + switch (type) { + case DELIM: { + if (func) { + if ( + (value === '+' || value === '-') && + precededPct && + !REG_FN_CALC_SUM.test(func) + ) { + return new NullObject(); + } + precededPct = false; + channel.push(value); + } + break; + } + case DIM: { + if (!func || !REG_FN_CALC_SUM.test(func)) { + return new NullObject(); + } + const resolvedValue = resolveDimension(token, opt); + if (isString(resolvedValue)) { + channel.push(resolvedValue); + } else { + channel.push(value); + } + break; + } + case FUNC: { + channel.push(value); + func = value; + nest++; + if (REG_FN_MATH_START.test(value)) { + mathFunc.add(nest); + } + break; + } + case IDENT: { + // invalid channel key + if (!colorChannel.includes(value)) { + return new NullObject(); + } + channel.push(value); + if (!func) { + i++; + } + break; + } + case NUM: { + channel.push(Number(detail?.value)); + if (!func) { + i++; + } + break; + } + case PAREN_OPEN: { + channel.push(value); + nest++; + break; + } + case PAREN_CLOSE: { + if (func) { + const lastValue = channel[channel.length - 1]; + if (lastValue === ' ') { + channel.splice(-1, 1, value); + } else { + channel.push(value); + } + if (mathFunc.has(nest)) { + mathFunc.delete(nest); + } + nest--; + if (nest === 0) { + func = ''; + i++; + } + } + break; + } + case PCT: { + if (!func) { + return new NullObject(); + } else if (!REG_FN_CALC_SUM.test(func)) { + const lastValue = channel.toReversed().find(v => v !== ' '); + if (lastValue === '+' || lastValue === '-') { + return new NullObject(); + } else if (lastValue === '*' || lastValue === '/') { + precededPct = false; + } else { + precededPct = true; + } + } + channel.push(Number(detail?.value) / MAX_PCT); + if (!func) { + i++; + } + break; + } + case W_SPACE: { + if (channel.length && func) { + const lastValue = channel[channel.length - 1]; + if (typeof lastValue === 'number') { + channel.push(value); + } else if ( + isString(lastValue) && + !lastValue.endsWith('(') && + lastValue !== ' ' + ) { + channel.push(value); + } + } + break; + } + default: { + if (type !== COMMENT && type !== EOF && func) { + channel.push(value); + } + } + } + } + } + const channelValues = []; + for (const channel of channels) { + if (channel.length === 1) { + const [resolvedValue] = channel; + if (isStringOrNumber(resolvedValue)) { + channelValues.push(resolvedValue); + } + } else if (channel.length) { + const resolvedValue = serializeCalc(channel.join(''), { + format + }); + channelValues.push(resolvedValue); + } + } + return channelValues as NumberOrStringColorChannels; +} + +/** + * extract origin color + * @param value - CSS color value + * @param [opt] - options + * @returns origin color value + */ +export function extractOriginColor( + value: string, + opt: Options = {} +): string | NullObject { + const { colorScheme = 'normal', currentColor = '', format = '' } = opt; + if (isString(value)) { + value = value.toLowerCase().trim(); + if (!value) { + return new NullObject(); + } + if (!REG_FN_REL_START.test(value)) { + return value; + } + } else { + return new NullObject(); + } + const cacheKey: string = createCacheKey( + { + namespace: NAMESPACE, + name: 'extractOriginColor', + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return cachedResult as NullObject; + } + return cachedResult.item as string; + } + if (/currentcolor/.test(value)) { + if (currentColor) { + value = value.replace(/currentcolor/g, currentColor); + } else { + setCache(cacheKey, null); + return new NullObject(); + } + } + let colorSpace = ''; + if (REG_FN_REL_CAPT.test(value)) { + [, colorSpace] = value.match(REG_FN_REL_CAPT) as MatchedRegExp; + } + opt.colorSpace = colorSpace; + if (value.includes(FN_LIGHT_DARK)) { + const colorParts = value + .replace(new RegExp(`^${colorSpace}\\(`), '') + .replace(/\)$/, ''); + const [, originColor = ''] = splitValue(colorParts); + const specifiedOriginColor = resolveColor(originColor, { + colorScheme, + format: VAL_SPEC + }) as string; + if (specifiedOriginColor === '') { + setCache(cacheKey, null); + return new NullObject(); + } + if (format === VAL_SPEC) { + value = value.replace(originColor, specifiedOriginColor); + } else { + const resolvedOriginColor = resolveColor(specifiedOriginColor, opt); + if (isString(resolvedOriginColor)) { + value = value.replace(originColor, resolvedOriginColor); + } + } + } + if (REG_COLOR_CAPT.test(value)) { + const [, originColor] = value.match(REG_COLOR_CAPT) as MatchedRegExp; + const [, restValue] = value.split(originColor) as MatchedRegExp; + if (/^[a-z]+$/.test(originColor)) { + if ( + !/^transparent$/.test(originColor) && + !Object.hasOwn(NAMED_COLORS, originColor) + ) { + setCache(cacheKey, null); + return new NullObject(); + } + } else if (format === VAL_SPEC) { + const resolvedOriginColor = resolveColor(originColor, opt); + if (isString(resolvedOriginColor)) { + value = value.replace(originColor, resolvedOriginColor); + } + } + if (format === VAL_SPEC) { + const tokens = tokenize({ css: restValue }); + const channelValues = resolveColorChannels(tokens, opt); + if (channelValues instanceof NullObject) { + setCache(cacheKey, null); + return channelValues; + } + const [v1, v2, v3, v4] = channelValues; + let channelValue = ''; + if (isStringOrNumber(v4)) { + channelValue = ` ${v1} ${v2} ${v3} / ${v4})`; + } else { + channelValue = ` ${channelValues.join(' ')})`; + } + if (restValue !== channelValue) { + value = value.replace(restValue, channelValue); + } + } + // nested relative color + } else { + const [, restValue] = value.split(REG_FN_REL_START) as MatchedRegExp; + const tokens = tokenize({ css: restValue }); + const originColor: string[] = []; + let nest = 0; + while (tokens.length) { + const [type, tokenValue] = tokens.shift() as [TokenType, string]; + switch (type) { + case FUNC: + case PAREN_OPEN: { + originColor.push(tokenValue); + nest++; + break; + } + case PAREN_CLOSE: { + const lastValue = originColor[originColor.length - 1]; + if (lastValue === ' ') { + originColor.splice(-1, 1, tokenValue); + } else if (isString(lastValue)) { + originColor.push(tokenValue); + } + nest--; + break; + } + case W_SPACE: { + const lastValue = originColor[originColor.length - 1]; + if ( + isString(lastValue) && + !lastValue.endsWith('(') && + lastValue !== ' ' + ) { + originColor.push(tokenValue); + } + break; + } + default: { + if (type !== COMMENT && type !== EOF) { + originColor.push(tokenValue); + } + } + } + if (nest === 0) { + break; + } + } + const resolvedOriginColor = resolveRelativeColor( + originColor.join('').trim(), + opt + ); + if (resolvedOriginColor instanceof NullObject) { + setCache(cacheKey, null); + return resolvedOriginColor; + } + const channelValues = resolveColorChannels(tokens, opt); + if (channelValues instanceof NullObject) { + setCache(cacheKey, null); + return channelValues; + } + const [v1, v2, v3, v4] = channelValues; + let channelValue = ''; + if (isStringOrNumber(v4)) { + channelValue = ` ${v1} ${v2} ${v3} / ${v4})`; + } else { + channelValue = ` ${channelValues.join(' ')})`; + } + value = value.replace(restValue, `${resolvedOriginColor}${channelValue}`); + } + setCache(cacheKey, value); + return value; +} + +/** + * resolve relative color + * @param value - CSS relative color value + * @param [opt] - options + * @returns resolved value + */ +export function resolveRelativeColor( + value: string, + opt: Options = {} +): string | NullObject { + const { format = '' } = opt; + if (isString(value)) { + if (REG_FN_VAR.test(value)) { + if (format === VAL_SPEC) { + return value; + // var() must be resolved before resolveRelativeColor() + } else { + throw new SyntaxError(`Unexpected token ${FN_VAR} found.`); + } + } else if (!REG_FN_REL.test(value)) { + return value; + } + value = value.toLowerCase().trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey: string = createCacheKey( + { + namespace: NAMESPACE, + name: 'resolveRelativeColor', + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return cachedResult as NullObject; + } + return cachedResult.item as string; + } + const originColor = extractOriginColor(value, opt); + if (originColor instanceof NullObject) { + setCache(cacheKey, null); + return originColor; + } + value = originColor; + if (format === VAL_SPEC) { + if (value.startsWith('rgba(')) { + value = value.replace(/^rgba\(/, 'rgb('); + } else if (value.startsWith('hsla(')) { + value = value.replace(/^hsla\(/, 'hsl('); + } + return value; + } + const tokens = tokenize({ css: value }); + const components = parseComponentValue(tokens) as ComponentValue; + const parsedComponents = colorParser(components); + if (!parsedComponents) { + setCache(cacheKey, null); + return new NullObject(); + } + const { + alpha: alphaComponent, + channels: channelsComponent, + colorNotation, + syntaxFlags + } = parsedComponents; + let alpha: number | string; + if (Number.isNaN(Number(alphaComponent))) { + if (syntaxFlags instanceof Set && syntaxFlags.has(KEY_NONE)) { + alpha = NONE; + } else { + alpha = 0; + } + } else { + alpha = roundToPrecision(Number(alphaComponent), OCT); + } + let v1: number | string; + let v2: number | string; + let v3: number | string; + [v1, v2, v3] = channelsComponent; + let resolvedValue; + if (REG_CS_CIE.test(colorNotation)) { + const hasNone = syntaxFlags instanceof Set && syntaxFlags.has(KEY_NONE); + if (Number.isNaN(v1)) { + if (hasNone) { + v1 = NONE; + } else { + v1 = 0; + } + } else { + v1 = roundToPrecision(v1, HEX); + } + if (Number.isNaN(v2)) { + if (hasNone) { + v2 = NONE; + } else { + v2 = 0; + } + } else { + v2 = roundToPrecision(v2, HEX); + } + if (Number.isNaN(v3)) { + if (hasNone) { + v3 = NONE; + } else { + v3 = 0; + } + } else { + v3 = roundToPrecision(v3, HEX); + } + if (alpha === 1) { + resolvedValue = `${colorNotation}(${v1} ${v2} ${v3})`; + } else { + resolvedValue = `${colorNotation}(${v1} ${v2} ${v3} / ${alpha})`; + } + } else if (REG_CS_HSL.test(colorNotation)) { + if (Number.isNaN(v1)) { + v1 = 0; + } + if (Number.isNaN(v2)) { + v2 = 0; + } + if (Number.isNaN(v3)) { + v3 = 0; + } + let [r, g, b] = convertColorToRgb( + `${colorNotation}(${v1} ${v2} ${v3} / ${alpha})` + ) as ColorChannels; + r = roundToPrecision(r / MAX_RGB, DEC); + g = roundToPrecision(g / MAX_RGB, DEC); + b = roundToPrecision(b / MAX_RGB, DEC); + if (alpha === 1) { + resolvedValue = `color(srgb ${r} ${g} ${b})`; + } else { + resolvedValue = `color(srgb ${r} ${g} ${b} / ${alpha})`; + } + } else { + const cs = colorNotation === 'rgb' ? 'srgb' : colorNotation; + const hasNone = syntaxFlags instanceof Set && syntaxFlags.has(KEY_NONE); + if (Number.isNaN(v1)) { + if (hasNone) { + v1 = NONE; + } else { + v1 = 0; + } + } else { + v1 = roundToPrecision(v1, DEC); + } + if (Number.isNaN(v2)) { + if (hasNone) { + v2 = NONE; + } else { + v2 = 0; + } + } else { + v2 = roundToPrecision(v2, DEC); + } + if (Number.isNaN(v3)) { + if (hasNone) { + v3 = NONE; + } else { + v3 = 0; + } + } else { + v3 = roundToPrecision(v3, DEC); + } + if (alpha === 1) { + resolvedValue = `color(${cs} ${v1} ${v2} ${v3})`; + } else { + resolvedValue = `color(${cs} ${v1} ${v2} ${v3} / ${alpha})`; + } + } + setCache(cacheKey, resolvedValue); + return resolvedValue; +} diff --git a/vanilla/node_modules/@asamuzakjp/css-color/src/js/resolve.ts b/vanilla/node_modules/@asamuzakjp/css-color/src/js/resolve.ts new file mode 100644 index 0000000..fea9de3 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/src/js/resolve.ts @@ -0,0 +1,443 @@ +/** + * resolve + */ + +import { + CacheItem, + NullObject, + createCacheKey, + getCache, + setCache +} from './cache'; +import { + convertRgbToHex, + resolveColorFunc, + resolveColorMix, + resolveColorValue +} from './color'; +import { isString } from './common'; +import { cssCalc } from './css-calc'; +import { resolveVar } from './css-var'; +import { resolveRelativeColor } from './relative-color'; +import { splitValue } from './util'; +import { + ComputedColorChannels, + Options, + SpecifiedColorChannels +} from './typedef'; + +/* constants */ +import { + FN_COLOR, + FN_MIX, + SYN_FN_CALC, + SYN_FN_LIGHT_DARK, + SYN_FN_REL, + SYN_FN_VAR, + VAL_COMP, + VAL_SPEC +} from './constant'; +const NAMESPACE = 'resolve'; +const RGB_TRANSPARENT = 'rgba(0, 0, 0, 0)'; + +/* regexp */ +const REG_FN_CALC = new RegExp(SYN_FN_CALC); +const REG_FN_LIGHT_DARK = new RegExp(SYN_FN_LIGHT_DARK); +const REG_FN_REL = new RegExp(SYN_FN_REL); +const REG_FN_VAR = new RegExp(SYN_FN_VAR); + +/** + * resolve color + * @param value - CSS color value + * @param [opt] - options + * @returns resolved color + */ +export const resolveColor = ( + value: string, + opt: Options = {} +): string | NullObject => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { + colorScheme = 'normal', + currentColor = '', + format = VAL_COMP, + nullable = false + } = opt; + const cacheKey: string = createCacheKey( + { + namespace: NAMESPACE, + name: 'resolve', + value + }, + opt + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + if (cachedResult.isNull) { + return cachedResult as NullObject; + } + return cachedResult.item as string; + } + if (REG_FN_VAR.test(value)) { + if (format === VAL_SPEC) { + setCache(cacheKey, value); + return value; + } + const resolvedValue = resolveVar(value, opt); + if (resolvedValue instanceof NullObject) { + switch (format) { + case 'hex': + case 'hexAlpha': { + setCache(cacheKey, resolvedValue); + return resolvedValue; + } + default: { + if (nullable) { + setCache(cacheKey, resolvedValue); + return resolvedValue; + } + const res = RGB_TRANSPARENT; + setCache(cacheKey, res); + return res; + } + } + } else { + value = resolvedValue; + } + } + if (opt.format !== format) { + opt.format = format; + } + value = value.toLowerCase(); + if (REG_FN_LIGHT_DARK.test(value) && value.endsWith(')')) { + const colorParts = value.replace(REG_FN_LIGHT_DARK, '').replace(/\)$/, ''); + const [light = '', dark = ''] = splitValue(colorParts, { + delimiter: ',' + }); + if (light && dark) { + if (format === VAL_SPEC) { + const lightColor = resolveColor(light, opt); + const darkColor = resolveColor(dark, opt); + let res; + if (lightColor && darkColor) { + res = `light-dark(${lightColor}, ${darkColor})`; + } else { + res = ''; + } + setCache(cacheKey, res); + return res; + } + let resolvedValue; + if (colorScheme === 'dark') { + resolvedValue = resolveColor(dark, opt); + } else { + resolvedValue = resolveColor(light, opt); + } + let res; + if (resolvedValue instanceof NullObject) { + if (nullable) { + res = resolvedValue; + } else { + res = RGB_TRANSPARENT; + } + } else { + res = resolvedValue; + } + setCache(cacheKey, res); + return res; + } + // invalid value + switch (format) { + case VAL_SPEC: { + setCache(cacheKey, ''); + return ''; + } + case 'hex': + case 'hexAlpha': { + setCache(cacheKey, null); + return new NullObject(); + } + case VAL_COMP: + default: { + const res = RGB_TRANSPARENT; + setCache(cacheKey, res); + return res; + } + } + } + if (REG_FN_REL.test(value)) { + const resolvedValue = resolveRelativeColor(value, opt); + if (format === VAL_COMP) { + let res; + if (resolvedValue instanceof NullObject) { + if (nullable) { + res = resolvedValue; + } else { + res = RGB_TRANSPARENT; + } + } else { + res = resolvedValue; + } + setCache(cacheKey, res); + return res; + } + if (format === VAL_SPEC) { + let res = ''; + if (resolvedValue instanceof NullObject) { + res = ''; + } else { + res = resolvedValue; + } + setCache(cacheKey, res); + return res; + } + if (resolvedValue instanceof NullObject) { + value = ''; + } else { + value = resolvedValue; + } + } + if (REG_FN_CALC.test(value)) { + value = cssCalc(value, opt); + } + let cs = ''; + let r = NaN; + let g = NaN; + let b = NaN; + let alpha = NaN; + if (value === 'transparent') { + switch (format) { + case VAL_SPEC: { + setCache(cacheKey, value); + return value; + } + case 'hex': { + setCache(cacheKey, null); + return new NullObject(); + } + case 'hexAlpha': { + const res = '#00000000'; + setCache(cacheKey, res); + return res; + } + case VAL_COMP: + default: { + const res = RGB_TRANSPARENT; + setCache(cacheKey, res); + return res; + } + } + } else if (value === 'currentcolor') { + if (format === VAL_SPEC) { + setCache(cacheKey, value); + return value; + } + if (currentColor) { + let resolvedValue; + if (currentColor.startsWith(FN_MIX)) { + resolvedValue = resolveColorMix(currentColor, opt); + } else if (currentColor.startsWith(FN_COLOR)) { + resolvedValue = resolveColorFunc(currentColor, opt); + } else { + resolvedValue = resolveColorValue(currentColor, opt); + } + if (resolvedValue instanceof NullObject) { + setCache(cacheKey, resolvedValue); + return resolvedValue; + } + [cs, r, g, b, alpha] = resolvedValue as ComputedColorChannels; + } else if (format === VAL_COMP) { + const res = RGB_TRANSPARENT; + setCache(cacheKey, res); + return res; + } + } else if (format === VAL_SPEC) { + if (value.startsWith(FN_MIX)) { + const res = resolveColorMix(value, opt) as string; + setCache(cacheKey, res); + return res; + } else if (value.startsWith(FN_COLOR)) { + const [scs, rr, gg, bb, aa] = resolveColorFunc( + value, + opt + ) as SpecifiedColorChannels; + let res = ''; + if (aa === 1) { + res = `color(${scs} ${rr} ${gg} ${bb})`; + } else { + res = `color(${scs} ${rr} ${gg} ${bb} / ${aa})`; + } + setCache(cacheKey, res); + return res; + } else { + const rgb = resolveColorValue(value, opt); + if (isString(rgb)) { + setCache(cacheKey, rgb); + return rgb; + } + const [scs, rr, gg, bb, aa] = rgb as SpecifiedColorChannels; + let res = ''; + if (scs === 'rgb') { + if (aa === 1) { + res = `${scs}(${rr}, ${gg}, ${bb})`; + } else { + res = `${scs}a(${rr}, ${gg}, ${bb}, ${aa})`; + } + } else if (aa === 1) { + res = `${scs}(${rr} ${gg} ${bb})`; + } else { + res = `${scs}(${rr} ${gg} ${bb} / ${aa})`; + } + setCache(cacheKey, res); + return res; + } + } else if (value.startsWith(FN_MIX)) { + if (/currentcolor/.test(value)) { + if (currentColor) { + value = value.replace(/currentcolor/g, currentColor); + } + } + if (/transparent/.test(value)) { + value = value.replace(/transparent/g, RGB_TRANSPARENT); + } + const resolvedValue = resolveColorMix(value, opt); + if (resolvedValue instanceof NullObject) { + setCache(cacheKey, resolvedValue); + return resolvedValue; + } + [cs, r, g, b, alpha] = resolvedValue as ComputedColorChannels; + } else if (value.startsWith(FN_COLOR)) { + const resolvedValue = resolveColorFunc(value, opt); + if (resolvedValue instanceof NullObject) { + setCache(cacheKey, resolvedValue); + return resolvedValue; + } + [cs, r, g, b, alpha] = resolvedValue as ComputedColorChannels; + } else if (value) { + const resolvedValue = resolveColorValue(value, opt); + if (resolvedValue instanceof NullObject) { + setCache(cacheKey, resolvedValue); + return resolvedValue; + } + [cs, r, g, b, alpha] = resolvedValue as ComputedColorChannels; + } + let res = ''; + switch (format) { + case 'hex': { + if ( + Number.isNaN(r) || + Number.isNaN(g) || + Number.isNaN(b) || + Number.isNaN(alpha) || + alpha === 0 + ) { + setCache(cacheKey, null); + return new NullObject(); + } + res = convertRgbToHex([r, g, b, 1]); + break; + } + case 'hexAlpha': { + if ( + Number.isNaN(r) || + Number.isNaN(g) || + Number.isNaN(b) || + Number.isNaN(alpha) + ) { + setCache(cacheKey, null); + return new NullObject(); + } + res = convertRgbToHex([r, g, b, alpha]); + break; + } + case VAL_COMP: + default: { + switch (cs) { + case 'rgb': { + if (alpha === 1) { + res = `${cs}(${r}, ${g}, ${b})`; + } else { + res = `${cs}a(${r}, ${g}, ${b}, ${alpha})`; + } + break; + } + case 'lab': + case 'lch': + case 'oklab': + case 'oklch': { + if (alpha === 1) { + res = `${cs}(${r} ${g} ${b})`; + } else { + res = `${cs}(${r} ${g} ${b} / ${alpha})`; + } + break; + } + // color() + default: { + if (alpha === 1) { + res = `color(${cs} ${r} ${g} ${b})`; + } else { + res = `color(${cs} ${r} ${g} ${b} / ${alpha})`; + } + } + } + } + } + setCache(cacheKey, res); + return res; +}; + +/** + * resolve CSS color + * @param value + * - CSS color value + * - system colors are not supported + * @param [opt] - options + * @param [opt.currentColor] + * - color to use for `currentcolor` keyword + * - if omitted, it will be treated as a missing color + * i.e. `rgb(none none none / none)` + * @param [opt.customProperty] + * - custom properties + * - pair of `--` prefixed property name and value, + * e.g. `customProperty: { '--some-color': '#0000ff' }` + * - and/or `callback` function to get the value of the custom property, + * e.g. `customProperty: { callback: someDeclaration.getPropertyValue }` + * @param [opt.dimension] + * - dimension, convert relative length to pixels + * - pair of unit and it's value as a number in pixels, + * e.g. `dimension: { em: 12, rem: 16, vw: 10.26 }` + * - and/or `callback` function to get the value as a number in pixels, + * e.g. `dimension: { callback: convertUnitToPixel }` + * @param [opt.format] + * - output format, one of below + * - `computedValue` (default), [computed value][139] of the color + * - `specifiedValue`, [specified value][140] of the color + * - `hex`, hex color notation, i.e. `rrggbb` + * - `hexAlpha`, hex color notation with alpha channel, i.e. `#rrggbbaa` + * @returns + * - one of rgba?(), #rrggbb(aa)?, color-name, '(empty-string)', + * color(color-space r g b / alpha), color(color-space x y z / alpha), + * lab(l a b / alpha), lch(l c h / alpha), oklab(l a b / alpha), + * oklch(l c h / alpha), null + * - in `computedValue`, values are numbers, however `rgb()` values are + * integers + * - in `specifiedValue`, returns `empty string` for unknown and/or invalid + * color + * - in `hex`, returns `null` for `transparent`, and also returns `null` if + * any of `r`, `g`, `b`, `alpha` is not a number + * - in `hexAlpha`, returns `#00000000` for `transparent`, + * however returns `null` if any of `r`, `g`, `b`, `alpha` is not a number + */ +export const resolve = (value: string, opt: Options = {}): string | null => { + opt.nullable = false; + const resolvedValue = resolveColor(value, opt); + if (resolvedValue instanceof NullObject) { + return null; + } + return resolvedValue as string; +}; diff --git a/vanilla/node_modules/@asamuzakjp/css-color/src/js/typedef.ts b/vanilla/node_modules/@asamuzakjp/css-color/src/js/typedef.ts new file mode 100644 index 0000000..007363e --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/src/js/typedef.ts @@ -0,0 +1,88 @@ +/** + * typedef + */ + +/* type definitions */ +/** + * @typedef Options - options + * @property [alpha] - enable alpha + * @property [colorSpace] - color space + * @property [currentColor] - color for currentcolor + * @property [customProperty] - custom properties + * @property [d50] - white point in d50 + * @property [dimension] - dimension + * @property [format] - output format + * @property [key] - key + */ +export interface Options { + alpha?: boolean; + colorScheme?: string; + colorSpace?: string; + currentColor?: string; + customProperty?: Record<string, string | ((K: string) => string)>; + d50?: boolean; + delimiter?: string | string[]; + dimension?: Record<string, number | ((K: string) => number)>; + format?: string; + nullable?: boolean; + preserveComment?: boolean; +} + +/** + * @type ColorChannels - color channels + */ +export type ColorChannels = [x: number, y: number, z: number, alpha: number]; + +/** + * @type StringColorChannels - color channels + */ +export type StringColorChannels = [ + x: string, + y: string, + z: string, + alpha: string | undefined +]; + +/** + * @type StringColorSpacedChannels - specified value + */ +export type StringColorSpacedChannels = [ + cs: string, + x: string, + y: string, + z: string, + alpha: string | undefined +]; + +/** + * @type ComputedColorChannels - computed value + */ +export type ComputedColorChannels = [ + cs: string, + x: number, + y: number, + z: number, + alpha: number +]; + +/** + * @type SpecifiedColorChannels - specified value + */ +export type SpecifiedColorChannels = [ + cs: string, + x: number | string, + y: number | string, + z: number | string, + alpha: number | string +]; + +/** + * @type MatchedRegExp - matched regexp array + */ +export type MatchedRegExp = [ + match: string, + gr1: string, + gr2: string, + gr3: string, + gr4: string +]; diff --git a/vanilla/node_modules/@asamuzakjp/css-color/src/js/util.ts b/vanilla/node_modules/@asamuzakjp/css-color/src/js/util.ts new file mode 100644 index 0000000..dff4fa3 --- /dev/null +++ b/vanilla/node_modules/@asamuzakjp/css-color/src/js/util.ts @@ -0,0 +1,443 @@ +/** + * util + */ + +import { TokenType, tokenize } from '@csstools/css-tokenizer'; +import { CacheItem, createCacheKey, getCache, setCache } from './cache'; +import { isString } from './common'; +import { resolveColor } from './resolve'; +import { Options } from './typedef'; + +/* constants */ +import { NAMED_COLORS } from './color'; +import { SYN_COLOR_TYPE, SYN_MIX, VAL_SPEC } from './constant'; +const { + CloseParen: PAREN_CLOSE, + Comma: COMMA, + Comment: COMMENT, + Delim: DELIM, + EOF, + Function: FUNC, + Ident: IDENT, + OpenParen: PAREN_OPEN, + Whitespace: W_SPACE +} = TokenType; +const NAMESPACE = 'util'; + +/* numeric constants */ +const DEC = 10; +const HEX = 16; +const DEG = 360; +const DEG_HALF = 180; + +/* regexp */ +const REG_COLOR = new RegExp(`^(?:${SYN_COLOR_TYPE})$`); +const REG_FN_COLOR = + /^(?:(?:ok)?l(?:ab|ch)|color(?:-mix)?|hsla?|hwb|rgba?|var)\(/; +const REG_MIX = new RegExp(SYN_MIX); + +/** + * split value + * NOTE: comments are stripped, it can be preserved if, in the options param, + * `delimiter` is either ',' or '/' and with `preserveComment` set to `true` + * @param value - CSS value + * @param [opt] - options + * @returns array of values + */ +export const splitValue = (value: string, opt: Options = {}): string[] => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const { delimiter = ' ', preserveComment = false } = opt; + const cacheKey: string = createCacheKey( + { + namespace: NAMESPACE, + name: 'splitValue', + value + }, + { + delimiter, + preserveComment + } + ); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item as string[]; + } + let regDelimiter; + if (delimiter === ',') { + regDelimiter = /^,$/; + } else if (delimiter === '/') { + regDelimiter = /^\/$/; + } else { + regDelimiter = /^\s+$/; + } + const tokens = tokenize({ css: value }); + let nest = 0; + let str = ''; + const res: string[] = []; + while (tokens.length) { + const [type, value] = tokens.shift() as [TokenType, string]; + switch (type) { + case COMMA: { + if (regDelimiter.test(value)) { + if (nest === 0) { + res.push(str.trim()); + str = ''; + } else { + str += value; + } + } else { + str += value; + } + break; + } + case DELIM: { + if (regDelimiter.test(value)) { + if (nest === 0) { + res.push(str.trim()); + str = ''; + } else { + str += value; + } + } else { + str += value; + } + break; + } + case COMMENT: { + if (preserveComment && (delimiter === ',' || delimiter === '/')) { + str += value; + } + break; + } + case FUNC: + case PAREN_OPEN: { + str += value; + nest++; + break; + } + case PAREN_CLOSE: { + str += value; + nest--; + break; + } + case W_SPACE: { + if (regDelimiter.test(value)) { + if (nest === 0) { + if (str) { + res.push(str.trim()); + str = ''; + } + } else { + str += ' '; + } + } else if (!str.endsWith(' ')) { + str += ' '; + } + break; + } + default: { + if (type === EOF) { + res.push(str.trim()); + str = ''; + } else { + str += value; + } + } + } + } + setCache(cacheKey, res); + return res; +}; + +/** + * extract dashed-ident tokens + * @param value - CSS value + * @returns array of dashed-ident tokens + */ +export const extractDashedIdent = (value: string): string[] => { + if (isString(value)) { + value = value.trim(); + } else { + throw new TypeError(`${value} is not a string.`); + } + const cacheKey: string = createCacheKey({ + namespace: NAMESPACE, + name: 'extractDashedIdent', + value + }); + const cachedResult = getCache(cacheKey); + if (cachedResult instanceof CacheItem) { + return cachedResult.item as string[]; + } + const tokens = tokenize({ css: value }); + const items = new Set(); + while (tokens.length) { + const [type, value] = tokens.shift() as [TokenType, string]; + if (type === IDENT && value.startsWith('--')) { + items.add(value); + } + } + const res = [...items] as string[]; + setCache(cacheKey, res); + return res; +}; + +/** + * is color + * @param value - CSS value + * @param [opt] - options + * @returns result + */ +export const isColor = (value: unknown, opt: Options = {}): boolean => { + if (isString(value)) { + value = value.toLowerCase().trim(); + if (value && isString(value)) { + if (/^[a-z]+$/.test(value)) { + if ( + /^(?:currentcolor|transparent)$/.test(value) || + Object.hasOwn(NAMED_COLORS, value) + ) { + return true; + } + } else if (REG_COLOR.test(value) || REG_MIX.test(value)) { + return true; + } else if (REG_FN_COLOR.test(value)) { + opt.nullable = true; + if (!opt.format) { + opt.format = VAL_SPEC; + } + const resolvedValue = resolveColor(value, opt); + if (resolvedValue) { + return true; + } + } + } + } + return false; +}; + +/** + * value to JSON string + * @param value - CSS value + * @param [func] - stringify function + * @returns stringified value in JSON notation + */ +export const valueToJsonString = ( + value: unknown, + func: boolean = false +): string => { + if (typeof value === 'undefined') { + return ''; + } + const res = JSON.stringify(value, (_key, val) => { + let replacedValue; + if (typeof val === 'undefined') { + replacedValue = null; + } else if (typeof val === 'function') { + if (func) { + replacedValue = val.toString().replace(/\s/g, '').substring(0, HEX); + } else { + replacedValue = val.name; + } + } else if (val instanceof Map || val instanceof Set) { + replacedValue = [...val]; + } else if (typeof val === 'bigint') { + replacedValue = val.toString(); + } else { + replacedValue = val; + } + return replacedValue; + }); + return res; +}; + +/** + * round to specified precision + * @param value - numeric value + * @param bit - minimum bits + * @returns rounded value + */ +export const roundToPrecision = (value: number, bit: number = 0): number => { + if (!Number.isFinite(value)) { + throw new TypeError(`${value} is not a finite number.`); + } + if (!Number.isFinite(bit)) { + throw new TypeError(`${bit} is not a finite number.`); + } else if (bit < 0 || bit > HEX) { + throw new RangeError(`${bit} is not between 0 and ${HEX}.`); + } + if (bit === 0) { + return Math.round(value); + } + let val; + if (bit === HEX) { + val = value.toPrecision(6); + } else if (bit < DEC) { + val = value.toPrecision(4); + } else { + val = value.toPrecision(5); + } + return parseFloat(val); +}; + +/** + * interpolate hue + * @param hueA - hue value + * @param hueB - hue value + * @param arc - shorter | longer | increasing | decreasing + * @returns result - [hueA, hueB] + */ +export const interpolateHue = ( + hueA: number, + hueB: number, + arc: string = 'shorter' +): [number, number] => { + if (!Number.isFinite(hueA)) { + throw new TypeError(`${hueA} is not a finite number.`); + } + if (!Number.isFinite(hueB)) { + throw new TypeError(`${hueB} is not a finite number.`); + } + switch (arc) { + case 'decreasing': { + if (hueB > hueA) { + hueA += DEG; + } + break; + } + case 'increasing': { + if (hueB < hueA) { + hueB += DEG; + } + break; + } + case 'longer': { + if (hueB > hueA && hueB < hueA + DEG_HALF) { + hueA += DEG; + } else if (hueB > hueA + DEG_HALF * -1 && hueB <= hueA) { + hueB += DEG; + } + break; + } + case 'shorter': + default: { + if (hueB > hueA + DEG_HALF) { + hueA += DEG; + } else if (hueB < hueA + DEG_HALF * -1) { + hueB += DEG; + } + } + } + return [hueA, hueB]; +}; + +/* absolute font size to pixel ratio */ +const absoluteFontSize = new Map([ + ['xx-small', 3 / 5], + ['x-small', 3 / 4], + ['small', 8 / 9], + ['medium', 1], + ['large', 6 / 5], + ['x-large', 3 / 2], + ['xx-large', 2], + ['xxx-large', 3] +]); + +/* relative font size to pixel ratio */ +const relativeFontSize = new Map([ + ['smaller', 1 / 1.2], + ['larger', 1.2] +]); + +/* absolute length to pixel ratio */ +const absoluteLength = new Map([ + ['cm', 96 / 2.54], + ['mm', 96 / 2.54 / 10], + ['q', 96 / 2.54 / 40], + ['in', 96], + ['pc', 96 / 6], + ['pt', 96 / 72], + ['px', 1] +]); + +/* relative length to pixel ratio */ +const relativeLength = new Map([ + ['rcap', 1], + ['rch', 0.5], + ['rem', 1], + ['rex', 0.5], + ['ric', 1], + ['rlh', 1.2] +]); + +/** + * resolve length in pixels + * @param value - value + * @param unit - unit + * @param [opt] - options + * @returns pixelated value + */ +export const resolveLengthInPixels = ( + value: number | string, + unit: string | undefined, + opt: Options = {} +): number => { + const { dimension = {} } = opt; + const { callback, em, rem, vh, vw } = dimension as { + callback: (K: string) => number; + em: number; + rem: number; + vh: number; + vw: number; + }; + if (isString(value)) { + value = value.toLowerCase().trim(); + if (absoluteFontSize.has(value)) { + return Number(absoluteFontSize.get(value)) * rem; + } else if (relativeFontSize.has(value)) { + return Number(relativeFontSize.get(value)) * em; + } + return Number.NaN; + } else if (Number.isFinite(value) && unit) { + if (Object.hasOwn(dimension, unit)) { + return value * Number(dimension[unit]); + } else if (typeof callback === 'function') { + return value * callback(unit); + } else if (absoluteLength.has(unit)) { + return value * Number(absoluteLength.get(unit)); + } else if (relativeLength.has(unit)) { + return value * Number(relativeLength.get(unit)) * rem; + } else if (relativeLength.has(`r${unit}`)) { + return value * Number(relativeLength.get(`r${unit}`)) * em; + } else { + switch (unit) { + case 'vb': + case 'vi': { + return value * vw; + } + case 'vmax': { + if (vh > vw) { + return value * vh; + } + return value * vw; + } + case 'vmin': { + if (vh < vw) { + return value * vh; + } + return value * vw; + } + default: { + // unsupported or invalid unit + return Number.NaN; + } + } + } + } + // unsupported or invalid value + return Number.NaN; +}; |
