diff options
Diffstat (limited to 'vanilla/node_modules/@asamuzakjp')
80 files changed, 0 insertions, 33886 deletions
diff --git a/vanilla/node_modules/@asamuzakjp/css-color/LICENSE b/vanilla/node_modules/@asamuzakjp/css-color/LICENSE deleted file mode 100644 index 0004c52..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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 deleted file mode 100644 index 715b6c3..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/README.md +++ /dev/null @@ -1,316 +0,0 @@ -# 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 deleted file mode 100644 index 3061ad6..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/browser/css-color.min.js +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index 5b4cc66..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/browser/css-color.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index 9a91f11..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/cjs/index.cjs +++ /dev/null @@ -1,5764 +0,0 @@ -"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 deleted file mode 100644 index 1b6043d..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/cjs/index.cjs.map +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index 0b66e22..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/cjs/index.d.cts +++ /dev/null @@ -1,110 +0,0 @@ -/** - * 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 deleted file mode 100644 index 6720cde..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/index.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -/*! - * 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 deleted file mode 100644 index 8fc1988..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/index.js +++ /dev/null @@ -1,22 +0,0 @@ -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 deleted file mode 100644 index 4b70d92..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index 74b26f6..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/cache.d.ts +++ /dev/null @@ -1,44 +0,0 @@ -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 deleted file mode 100644 index 2846ff2..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/cache.js +++ /dev/null @@ -1,72 +0,0 @@ -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 deleted file mode 100644 index 5934f38..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/cache.js.map +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index 9a1a0e2..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/color.d.ts +++ /dev/null @@ -1,537 +0,0 @@ -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 deleted file mode 100644 index f2672dc..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/color.js +++ /dev/null @@ -1,2833 +0,0 @@ -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 deleted file mode 100644 index 947c072..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/color.js.map +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index 6039ef3..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/common.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - * 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 deleted file mode 100644 index 8de24fa..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/common.js +++ /dev/null @@ -1,7 +0,0 @@ -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 deleted file mode 100644 index 5b2aea0..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/common.js.map +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index 287e617..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/constant.d.ts +++ /dev/null @@ -1,43 +0,0 @@ -/** - * 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 deleted file mode 100644 index 69bacbb..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/constant.js +++ /dev/null @@ -1,101 +0,0 @@ -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 deleted file mode 100644 index d69d2fe..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/constant.js.map +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index fe97f7f..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/convert.d.ts +++ /dev/null @@ -1,99 +0,0 @@ -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 deleted file mode 100644 index d66845f..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/convert.js +++ /dev/null @@ -1,361 +0,0 @@ -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 deleted file mode 100644 index 039efb6..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/convert.js.map +++ /dev/null @@ -1 +0,0 @@ -{"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":"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"}
\ 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 deleted file mode 100644 index 265e284..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-calc.d.ts +++ /dev/null @@ -1,89 +0,0 @@ -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 deleted file mode 100644 index bb58a14..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-calc.js +++ /dev/null @@ -1,826 +0,0 @@ -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 deleted file mode 100644 index 3b8d6cb..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-calc.js.map +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index cf0b891..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-gradient.d.ts +++ /dev/null @@ -1,79 +0,0 @@ -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 deleted file mode 100644 index fdfb888..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-gradient.js +++ /dev/null @@ -1,261 +0,0 @@ -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 deleted file mode 100644 index 323ebd9..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-gradient.js.map +++ /dev/null @@ -1 +0,0 @@ -{"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":";;;;;AAsBA,MAAM,YAAY;AAClB,MAAM,YAAY,GAAG,GAAG,MAAM,KAAK;AACnC,MAAM,gBAAgB,GAAG,SAAS,IAAI,GAAG;AACzC,MAAM,UAAU,GAAG,GAAG,MAAM,MAAM;AAClC,MAAM,cAAc,GAAG,OAAO,IAAI,GAAG;AACrC,MAAM,mBAAmB,GAAG,YAAY,MAAM,MAAM;AACpD,MAAM,eAAe,GAAG,YAAY,MAAM,MAAM;AAChD,MAAM,MAAM;AACZ,MAAM,MAAM;AACZ,MAAM,MAAM;AACZ,MAAM,MAAM;AACZ,MAAM,SAAS,GAAG,GAAG,SAAS,GAAG;AACjC,MAAM,SAAS,GAAG,GAAG,SAAS,GAAG;AACjC,MAAM,QAAQ,YAAY,GAAG;AAC7B,MAAM,SAAS,aAAa,GAAG;AAC/B,MAAM,QAAQ,GAAG,GAAG,IAAI,MAAM,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,WAAW;AAC1E,MAAM,QAAQ;AAAA,EACZ,MAAM,GAAG,IAAI,MAAM,WAAW,GAAG,IAAI,MAAM;AAAA,EAC3C,MAAM,GAAG,IAAI,MAAM,WAAW,GAAG,IAAI,MAAM;AAAA,EAC3C,MAAM,GAAG,IAAI,MAAM,IAAI,WAAW,WAAW,GAAG,IAAI,MAAM,IAAI,WAAW;AAAA,EACzE,MAAM,GAAG,IAAI,KAAK,WAAW,GAAG,IAAI,MAAM;AAAA,EAC1C,MAAM,GAAG,IAAI,MAAM,WAAW,GAAG,IAAI,KAAK;AAAA,EAC1C,MAAM,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI,GAAG;AACvC,EAAE,KAAK,GAAG;AACV,MAAM,QAAQ;AAAA,EACZ,MAAM,MAAM,WAAW,WAAW,WAAW,MAAM,WAAW,WAAW;AAAA,EACzE,MAAM,MAAM,WAAW,WAAW,WAAW,MAAM,WAAW,WAAW;AAAA,EACzE,MAAM,KAAK,WAAW,WAAW,WAAW,MAAM,WAAW,WAAW;AAAA,EACxE,MAAM,MAAM,WAAW,WAAW,WAAW,KAAK,WAAW,WAAW;AAAA,EACxE,MAAM,GAAG,WAAW,WAAW,WAAW,GAAG,WAAW,WAAW;AACrE,EAAE,KAAK,GAAG;AACV,MAAM,aAAa;AACnB,MAAM,WAAW;AAAA,EACf,GAAG,UAAU,UAAU,UAAU;AAAA,EACjC,GAAG,YAAY;AAAA,EACf,MAAM,gBAAgB,WAAW,gBAAgB;AACnD,EAAE,KAAK,GAAG;AACV,MAAM,YAAY;AAClB,MAAM,aAAa,WAAW,SAAS;AACvC,MAAM,cAAc,YAAY,KAAK,IAAI,KAAK,IAAI,KAAK;AACvD,MAAM,iBAAiB,eAAe,GAAG,aAAa,GAAG,UAAU,GAAG,aAAa,GAAG;AACtF,MAAM,iBAAiB,YAAY,OAAO,IAAI,MAAM;AA2CpD,MAAM,WAAW;AACjB,MAAM,gBAAgB;AAOf,MAAM,kBAAkB,CAAC,UAA0B;AACxD,MAAI,SAAS,KAAK,GAAG;AACnB,YAAQ,MAAM,KAAA;AACd,QAAI,SAAS,KAAK,KAAK,GAAG;AACxB,YAAM,CAAA,EAAG,IAAI,IAAI,MAAM,MAAM,aAAa;AAC1C,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAQO,MAAM,uBAAuB,CAClC,OACA,SACyB;AACzB,MAAI,SAAS,KAAK,KAAK,SAAS,IAAI,GAAG;AACrC,YAAQ,MAAM,KAAA;AACd,WAAO,KAAK,KAAA;AACZ,QAAI,aAAa;AACjB,UAAM,gBAAgB,CAAA;AACtB,QAAI,mCAAmC,KAAK,IAAI,GAAG;AAOjD,mBAAa;AAAA,QACX,MAAM,SAAS,IAAI,cAAc,WAAW,cAAc;AAAA,QAC1D,GAAG,cAAc,aAAa,SAAS,IAAI,cAAc;AAAA,MAAA,EACzD,KAAK,GAAG;AACV,oBAAc,KAAK,aAAa;AAAA,IAClC,WAAW,mCAAmC,KAAK,IAAI,GAAG;AAMxD,mBAAa;AAAA,QACX,MAAM,SAAS,cAAc,QAAQ,aAAa,WAAW,YAAY,cAAc;AAAA,QACvF,MAAM,QAAQ,cAAc,SAAS,aAAa,WAAW,YAAY,cAAc;AAAA,QACvF,GAAG,WAAW,UAAU,cAAc;AAAA,QACtC,GAAG,cAAc,UAAU,SAAS,cAAc,QAAQ,aAAa,WAAW;AAAA,QAClF,GAAG,cAAc,UAAU,QAAQ,cAAc,SAAS,aAAa,WAAW;AAAA,QAClF,GAAG,cAAc,UAAU,WAAW;AAAA,MAAA,EACtC,KAAK,GAAG;AACV,oBAAc,KAAK,WAAW,mBAAmB,aAAa;AAAA,IAChE,WAAW,kCAAkC,KAAK,IAAI,GAAG;AAOvD,mBAAa;AAAA,QACX,GAAG,UAAU,UAAU,WAAW,YAAY,cAAc;AAAA,QAC5D,GAAG,WAAW,UAAU,cAAc;AAAA,QACtC,GAAG,cAAc,UAAU,UAAU,YAAY,WAAW;AAAA,MAAA,EAC5D,KAAK,GAAG;AACV,oBAAc,KAAK,aAAa;AAAA,IAClC;AACA,QAAI,YAAY;AACd,YAAM,MAAM,IAAI,OAAO,OAAO,UAAU,IAAI;AAC5C,YAAM,QAAQ,IAAI,KAAK,KAAK;AAC5B,UAAI,OAAO;AACT,YAAI,OAAO;AACX,mBAAW,gBAAgB,eAAe;AACxC,iBAAO,KAAK,QAAQ,cAAc,EAAE;AAAA,QACtC;AACA,eAAO,KAAK,QAAQ,WAAW,GAAG,EAAE,KAAA;AACpC,eAAO;AAAA,UACL;AAAA,UACA;AAAA,QAAA;AAAA,MAEJ;AACA,aAAO;AAAA,QACL;AAAA,QACA,MAAM;AAAA,MAAA;AAAA,IAEV;AAAA,EACF;AACA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAEX;AASO,MAAM,wBAAwB,CACnC,MACA,MACA,MAAe,CAAA,MACQ;AACvB,MAAI,MAAM,QAAQ,IAAI,KAAK,KAAK,SAAS,GAAG;AAC1C,UAAM,YAAY,kCAAkC,KAAK,IAAI,IACzD,gBACA;AACJ,UAAM,eAAe,IAAI,OAAO,OAAO,SAAS,IAAI;AACpD,UAAM,eAAe,IAAI,OAAO,aAAa,SAAS,UAAU;AAChE,UAAM,aAAa,CAAA;AACnB,UAAM,YAAY,CAAA;AAClB,eAAW,QAAQ,MAAM;AACvB,UAAI,SAAS,IAAI,GAAG;AAClB,YAAI,aAAa,KAAK,IAAI,GAAG;AAC3B,qBAAW,KAAK,MAAM;AACtB,oBAAU,KAAK,IAAI;AAAA,QACrB,OAAO;AACL,gBAAM,YAAY,KAAK,QAAQ,cAAc,EAAE;AAC/C,cAAI,QAAQ,WAAW,EAAE,QAAQ,SAAA,CAAU,GAAG;AAC5C,kBAAM,gBAAgB,aAAa,WAAW,GAAG;AACjD,uBAAW,KAAK,OAAO;AACvB,sBAAU,KAAK,KAAK,QAAQ,WAAW,aAAa,CAAC;AAAA,UACvD,OAAO;AACL,mBAAO;AAAA,cACL,YAAY;AAAA,cACZ,OAAO;AAAA,YAAA;AAAA,UAEX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,UAAM,QAAQ,+BAA+B,KAAK,WAAW,KAAK,GAAG,CAAC;AACtE,WAAO;AAAA,MACL;AAAA,MACA,YAAY;AAAA,IAAA;AAAA,EAEhB;AACA,SAAO;AAAA,IACL,YAAY;AAAA,IACZ,OAAO;AAAA,EAAA;AAEX;AAQO,MAAM,gBAAgB,CAC3B,OACA,MAAe,OACK;AACpB,MAAI,SAAS,KAAK,GAAG;AACnB,YAAQ,MAAM,KAAA;AACd,UAAM,WAAmB;AAAA,MACvB;AAAA,QACE,WAAW;AAAA,QACX,MAAM;AAAA,QACN;AAAA,MAAA;AAAA,MAEF;AAAA,IAAA;AAEF,UAAM,eAAe,SAAS,QAAQ;AACtC,QAAI,wBAAwB,WAAW;AACrC,UAAI,aAAa,QAAQ;AACvB,eAAO;AAAA,MACT;AACA,aAAO,aAAa;AAAA,IACtB;AACA,UAAM,OAAO,gBAAgB,KAAK;AAClC,UAAM,YAAY,MAAM,QAAQ,UAAU,EAAE,EAAE,QAAQ,OAAO,EAAE;AAC/D,QAAI,QAAQ,WAAW;AACrB,YAAM,CAAC,kBAAkB,IAAI,GAAG,QAAQ,IAAI,WAAW,WAAW;AAAA,QAChE,WAAW;AAAA,MAAA,CACZ;AACD,YAAM,YAAY,kCAAkC,KAAK,IAAI,IACzD,gBACA;AACJ,YAAM,eAAe,IAAI,OAAO,aAAa,SAAS,UAAU;AAChE,UAAI,YAAY;AAChB,UAAI,aAAa,KAAK,eAAe,GAAG;AACtC,cAAM,YAAY,gBAAgB,QAAQ,cAAc,EAAE;AAC1D,YAAI,QAAQ,WAAW,EAAE,QAAQ,SAAA,CAAU,GAAG;AAC5C,gBAAM,gBAAgB,aAAa,WAAW,GAAG;AACjD,sBAAY,gBAAgB,QAAQ,WAAW,aAAa;AAAA,QAC9D;AAAA,MACF,WAAW,QAAQ,iBAAiB,EAAE,QAAQ,SAAA,CAAU,GAAG;AACzD,oBAAY,aAAa,iBAAiB,GAAG;AAAA,MAC/C;AACA,UAAI,WAAW;AACb,iBAAS,QAAQ,SAAS;AAC1B,cAAM,EAAE,YAAY,MAAA,IAAU;AAAA,UAC5B;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAEF,YAAI,OAAO;AACT,gBAAM,MAAgB;AAAA,YACpB;AAAA,YACA;AAAA,YACA,eAAe;AAAA,UAAA;AAEjB,mBAAS,UAAU,GAAG;AACtB,iBAAO;AAAA,QACT;AAAA,MACF,WAAW,SAAS,SAAS,GAAG;AAC9B,cAAM,EAAE,MAAM,cAAc,OAAO,cAAc;AAAA,UAC/C;AAAA,UACA;AAAA,QAAA;AAEF,cAAM,EAAE,YAAY,OAAO,gBAAA,IAAoB;AAAA,UAC7C;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAEF,YAAI,aAAa,iBAAiB;AAChC,gBAAM,MAAgB;AAAA,YACpB;AAAA,YACA;AAAA,YACA;AAAA,YACA,eAAe;AAAA,UAAA;AAEjB,mBAAS,UAAU,GAAG;AACtB,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AACA,aAAS,UAAU,IAAI;AACvB,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAQO,MAAM,kBAAkB,CAAC,OAAe,MAAe,OAAe;AAC3E,QAAM,EAAE,SAAS,SAAA,IAAa;AAC9B,QAAM,WAAW,cAAc,OAAO,GAAG;AACzC,MAAI,UAAU;AACZ,UAAM,EAAE,OAAO,IAAI,eAAe,IAAI,gBAAgB,CAAA,MAAO;AAC7D,QAAI,QAAQ,MAAM,QAAQ,aAAa,KAAK,cAAc,SAAS,GAAG;AACpE,UAAI,cAAc;AAChB,eAAO,GAAG,IAAI,IAAI,YAAY,KAAK,cAAc,KAAK,IAAI,CAAC;AAAA,MAC7D;AACA,aAAO,GAAG,IAAI,IAAI,cAAc,KAAK,IAAI,CAAC;AAAA,IAC5C;AAAA,EACF;AACA,MAAI,WAAW,UAAU;AACvB,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAQO,MAAM,aAAa,CAAC,OAAe,MAAe,OAAgB;AACvE,QAAM,WAAW,cAAc,OAAO,GAAG;AACzC,SAAO,aAAa;AACtB;"}
\ 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 deleted file mode 100644 index 9072353..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-var.d.ts +++ /dev/null @@ -1,31 +0,0 @@ -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 deleted file mode 100644 index 4260f84..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-var.js +++ /dev/null @@ -1,195 +0,0 @@ -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 deleted file mode 100644 index f2759d7..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/css-var.js.map +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index ed0abfc..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/relative-color.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -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 deleted file mode 100644 index beef0ea..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/relative-color.js +++ /dev/null @@ -1,535 +0,0 @@ -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 deleted file mode 100644 index e85e610..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/relative-color.js.map +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index a988078..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/resolve.d.ts +++ /dev/null @@ -1,52 +0,0 @@ -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 deleted file mode 100644 index 8ba49a4..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/resolve.js +++ /dev/null @@ -1,350 +0,0 @@ -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 deleted file mode 100644 index e4c31b5..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/resolve.js.map +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index 5130377..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/typedef.d.ts +++ /dev/null @@ -1,80 +0,0 @@ -/** - * 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 deleted file mode 100644 index 2996c8e..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/util.d.ts +++ /dev/null @@ -1,53 +0,0 @@ -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 deleted file mode 100644 index cf3f5c7..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/util.js +++ /dev/null @@ -1,359 +0,0 @@ -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 deleted file mode 100644 index 58fbe48..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/dist/esm/js/util.js.map +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index fcb2f21..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/package.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "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 deleted file mode 100644 index 9516d40..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/src/index.ts +++ /dev/null @@ -1,30 +0,0 @@ -/*! - * 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 deleted file mode 100644 index 8642113..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/src/js/cache.ts +++ /dev/null @@ -1,114 +0,0 @@ -/** - * 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 deleted file mode 100644 index 2fe737d..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/src/js/color.ts +++ /dev/null @@ -1,3511 +0,0 @@ -/** - * 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 deleted file mode 100644 index 32bf8bd..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/src/js/common.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * 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 deleted file mode 100644 index b331181..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/src/js/constant.ts +++ /dev/null @@ -1,68 +0,0 @@ -/** - * 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 deleted file mode 100644 index bcde6db..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/src/js/convert.ts +++ /dev/null @@ -1,469 +0,0 @@ -/** - * 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 deleted file mode 100644 index f765f61..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/src/js/css-calc.ts +++ /dev/null @@ -1,955 +0,0 @@ -/** - * 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 deleted file mode 100644 index 4f57567..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/src/js/css-gradient.ts +++ /dev/null @@ -1,384 +0,0 @@ -/** - * 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 deleted file mode 100644 index ef4a3f1..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/src/js/css-var.ts +++ /dev/null @@ -1,250 +0,0 @@ -/** - * 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 deleted file mode 100644 index 9a20728..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/src/js/relative-color.ts +++ /dev/null @@ -1,635 +0,0 @@ -/** - * 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 deleted file mode 100644 index fea9de3..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/src/js/resolve.ts +++ /dev/null @@ -1,443 +0,0 @@ -/** - * 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 deleted file mode 100644 index 007363e..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/src/js/typedef.ts +++ /dev/null @@ -1,88 +0,0 @@ -/** - * 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 deleted file mode 100644 index dff4fa3..0000000 --- a/vanilla/node_modules/@asamuzakjp/css-color/src/js/util.ts +++ /dev/null @@ -1,443 +0,0 @@ -/** - * 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; -}; diff --git a/vanilla/node_modules/@asamuzakjp/dom-selector/LICENSE b/vanilla/node_modules/@asamuzakjp/dom-selector/LICENSE deleted file mode 100644 index f3f97a3..0000000 --- a/vanilla/node_modules/@asamuzakjp/dom-selector/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License
-
-Copyright (c) 2023 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/dom-selector/README.md b/vanilla/node_modules/@asamuzakjp/dom-selector/README.md deleted file mode 100644 index f4f2296..0000000 --- a/vanilla/node_modules/@asamuzakjp/dom-selector/README.md +++ /dev/null @@ -1,324 +0,0 @@ -# DOM Selector
-
-[](https://github.com/asamuzaK/domSelector/actions/workflows/node.js.yml)
-[](https://github.com/asamuzaK/domSelector/actions/workflows/github-code-scanning/codeql)
-[](https://www.npmjs.com/package/@asamuzakjp/dom-selector)
-
-A CSS selector engine.
-
-## Install
-
-```console
-npm i @asamuzakjp/dom-selector
-```
-
-## Usage
-
-```javascript
-import { DOMSelector } from '@asamuzakjp/dom-selector';
-import { JSDOM } from 'jsdom';
-
-const { window } = new JSDOM();
-const {
- closest, matches, querySelector, querySelectorAll
-} = new DOMSelector(window);
-```
-
-<!-- Generated by documentation.js. Update this documentation by updating the source code. -->
-
-### matches(selector, node, opt)
-
-matches - equivalent to [Element.matches()][64]
-
-#### Parameters
-
-- `selector` **[string][59]** CSS selector
-- `node` **[object][60]** Element node
-- `opt` **[object][60]?** options
- - `opt.noexcept` **[boolean][61]?** no exception
- - `opt.warn` **[boolean][61]?** console warn e.g. unsupported pseudo-class
-
-Returns **[boolean][61]** `true` if matched, `false` otherwise
-
-
-### closest(selector, node, opt)
-
-closest - equivalent to [Element.closest()][65]
-
-#### Parameters
-
-- `selector` **[string][59]** CSS selector
-- `node` **[object][60]** Element node
-- `opt` **[object][60]?** options
- - `opt.noexcept` **[boolean][61]?** no exception
- - `opt.warn` **[boolean][61]?** console warn e.g. unsupported pseudo-class
-
-Returns **[object][60]?** matched node
-
-
-### querySelector(selector, node, opt)
-
-querySelector - equivalent to [Document.querySelector()][66], [DocumentFragment.querySelector()][67] and [Element.querySelector()][68]
-
-#### Parameters
-
-- `selector` **[string][59]** CSS selector
-- `node` **[object][60]** Document, DocumentFragment or Element node
-- `opt` **[object][60]?** options
- - `opt.noexcept` **[boolean][61]?** no exception
- - `opt.warn` **[boolean][61]?** console warn e.g. unsupported pseudo-class
-
-Returns **[object][60]?** matched node
-
-
-### querySelectorAll(selector, node, opt)
-
-querySelectorAll - equivalent to [Document.querySelectorAll()][69], [DocumentFragment.querySelectorAll()][70] and [Element.querySelectorAll()][71]
-**NOTE**: returns Array, not NodeList
-
-#### Parameters
-
-- `selector` **[string][59]** CSS selector
-- `node` **[object][60]** Document, DocumentFragment or Element node
-- `opt` **[object][60]?** options
- - `opt.noexcept` **[boolean][61]?** no exception
- - `opt.warn` **[boolean][61]?** console warn e.g. unsupported pseudo-class
-
-Returns **[Array][62]<([object][60] \| [undefined][63])>** array of matched nodes
-
-
-## Monkey patch jsdom
-
-``` javascript
-import { DOMSelector } from '@asamuzakjp/dom-selector';
-import { JSDOM } from 'jsdom';
-
-const dom = new JSDOM('', {
- runScripts: 'dangerously',
- url: 'http://localhost/',
- beforeParse: window => {
- const domSelector = new DOMSelector(window);
-
- const matches = domSelector.matches.bind(domSelector);
- window.Element.prototype.matches = function (...args) {
- if (!args.length) {
- throw new window.TypeError('1 argument required, but only 0 present.');
- }
- const [selector] = args;
- return matches(selector, this);
- };
-
- const closest = domSelector.closest.bind(domSelector);
- window.Element.prototype.closest = function (...args) {
- if (!args.length) {
- throw new window.TypeError('1 argument required, but only 0 present.');
- }
- const [selector] = args;
- return closest(selector, this);
- };
-
- const querySelector = domSelector.querySelector.bind(domSelector);
- window.Document.prototype.querySelector = function (...args) {
- if (!args.length) {
- throw new window.TypeError('1 argument required, but only 0 present.');
- }
- const [selector] = args;
- return querySelector(selector, this);
- };
- window.DocumentFragment.prototype.querySelector = function (...args) {
- if (!args.length) {
- throw new window.TypeError('1 argument required, but only 0 present.');
- }
- const [selector] = args;
- return querySelector(selector, this);
- };
- window.Element.prototype.querySelector = function (...args) {
- if (!args.length) {
- throw new window.TypeError('1 argument required, but only 0 present.');
- }
- const [selector] = args;
- return querySelector(selector, this);
- };
-
- const querySelectorAll = domSelector.querySelectorAll.bind(domSelector);
- window.Document.prototype.querySelectorAll = function (...args) {
- if (!args.length) {
- throw new window.TypeError('1 argument required, but only 0 present.');
- }
- const [selector] = args;
- return querySelectorAll(selector, this);
- };
- window.DocumentFragment.prototype.querySelectorAll = function (...args) {
- if (!args.length) {
- throw new window.TypeError('1 argument required, but only 0 present.');
- }
- const [selector] = args;
- return querySelectorAll(selector, this);
- };
- window.Element.prototype.querySelectorAll = function (...args) {
- if (!args.length) {
- throw new window.TypeError('1 argument required, but only 0 present.');
- }
- const [selector] = args;
- return querySelectorAll(selector, this);
- };
- }
-});
-```
-
-
-## Supported CSS selectors
-
-|Pattern|Supported|Note|
-|:--------|:-------:|:--------|
-|\*|✓| |
-|E|✓| |
-|ns\|E|✓| |
-|\*\|E|✓| |
-|\|E|✓| |
-|E F|✓| |
-|E > F|✓| |
-|E + F|✓| |
-|E ~ F|✓| |
-|F \|\| E|Unsupported| |
-|E.warning|✓| |
-|E#myid|✓| |
-|E\[foo\]|✓| |
-|E\[foo="bar"\]|✓| |
-|E\[foo="bar" i\]|✓| |
-|E\[foo="bar" s\]|✓| |
-|E\[foo~="bar"\]|✓| |
-|E\[foo^="bar"\]|✓| |
-|E\[foo$="bar"\]|✓| |
-|E\[foo*="bar"\]|✓| |
-|E\[foo\|="en"\]|✓| |
-|E:is(s1, s2, …)|✓| |
-|E:not(s1, s2, …)|✓| |
-|E:where(s1, s2, …)|✓| |
-|E:has(rs1, rs2, …)|✓| |
-|E:defined|Partially supported|Matching with MathML is not yet supported.|
-|E:dir(ltr)|✓| |
-|E:lang(en)|✓| |
-|E:any‑link|✓| |
-|E:link|✓| |
-|E:visited|✓|Returns `false` or `null` to prevent fingerprinting.|
-|E:local‑link|✓| |
-|E:target|✓| |
-|E:target‑within|✓| |
-|E:scope|✓| |
-|E:hover|✓| |
-|E:active|✓| |
-|E:focus|✓| |
-|E:focus‑visible|✓| |
-|E:focus‑within|✓| |
-|E:current|Unsupported| |
-|E:current(s)|Unsupported| |
-|E:past|Unsupported| |
-|E:future|Unsupported| |
-|E:open<br>E:closed|Partially supported|Matching with <select>, e.g. `select:open`, is not supported.|
-|E:popover-open|✓| |
-|E:enabled<br>E:disabled|✓| |
-|E:read‑write<br>E:read‑only|✓| |
-|E:placeholder‑shown|✓| |
-|E:default|✓| |
-|E:checked|✓| |
-|E:indeterminate|✓| |
-|E:blank|Unsupported| |
-|E:valid<br>E:invalid|✓| |
-|E:in-range<br>E:out-of-range|✓| |
-|E:required<br>E:optional|✓| |
-|E:user‑valid<br>E:user‑invalid|Unsupported| |
-|E:root|✓| |
-|E:empty|✓| |
-|E:nth‑child(n [of S]?)|✓| |
-|E:nth‑last‑child(n [of S]?)|✓| |
-|E:first‑child|✓| |
-|E:last‑child|✓| |
-|E:only‑child|✓| |
-|E:nth‑of‑type(n)|✓| |
-|E:nth‑last‑of‑type(n)|✓| |
-|E:first‑of‑type|✓| |
-|E:last‑of‑type|✓| |
-|E:only‑of‑type|✓| |
-|E:nth‑col(n)|Unsupported| |
-|E:nth‑last‑col(n)|Unsupported| |
-|CE:state(v)|✓|*1|
-|:host|✓| |
-|:host(s)|✓| |
-|:host(:state(v))|✓|*1|
-|:host:has(rs1, rs2, ...)|✓| |
-|:host(s):has(rs1, rs2, ...)|✓| |
-|:host‑context(s)|✓| |
-|:host‑context(s):has(rs1, rs2, ...)|✓| |
-|&|✓|Only supports outermost `&`, i.e. equivalent to `:scope`|
-
-*1: `ElementInternals.states`, i.e. `CustomStateSet`, is not implemented in jsdom, so you need to apply a patch in the custom element constructor.
-
-``` javascript
-class LabeledCheckbox extends window.HTMLElement {
- #internals;
- constructor() {
- super();
- this.#internals = this.attachInternals();
- // patch CustomStateSet
- if (!this.#internals.states) {
- this.#internals.states = new Set();
- }
- this.addEventListener('click', this._onClick.bind(this));
- }
- get checked() {
- return this.#internals.states.has('checked');
- }
- set checked(flag) {
- if (flag) {
- this.#internals.states.add('checked');
- } else {
- this.#internals.states.delete('checked');
- }
- }
- _onClick(event) {
- this.checked = !this.checked;
- }
-}
-```
-
-
-## Performance
-
-See [benchmark](https://github.com/asamuzaK/domSelector/actions/workflows/benchmark.yml) for the latest results.
-
-
-## Acknowledgments
-
-The following resources have been of great help in the development of the DOM Selector.
-
-- [CSSTree](https://github.com/csstree/csstree)
-- [selery](https://github.com/danburzo/selery)
-- [jsdom](https://github.com/jsdom/jsdom)
-- [nwsapi](https://github.com/dperini/nwsapi)
-
----
-Copyright (c) 2023 [asamuzaK (Kazz)](https://github.com/asamuzaK/)
-
-
-[1]: #matches
-[2]: #parameters
-[3]: #closest
-[4]: #parameters-1
-[5]: #queryselector
-[6]: #parameters-2
-[7]: #queryselectorall
-[8]: #parameters-3
-[59]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String
-[60]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object
-[61]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean
-[62]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array
-[63]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined
-[64]: https://developer.mozilla.org/docs/Web/API/Element/matches
-[65]: https://developer.mozilla.org/docs/Web/API/Element/closest
-[66]: https://developer.mozilla.org/docs/Web/API/Document/querySelector
-[67]: https://developer.mozilla.org/docs/Web/API/DocumentFragment/querySelector
-[68]: https://developer.mozilla.org/docs/Web/API/Element/querySelector
-[69]: https://developer.mozilla.org/docs/Web/API/Document/querySelectorAll
-[70]: https://developer.mozilla.org/docs/Web/API/DocumentFragment/querySelectorAll
-[71]: https://developer.mozilla.org/docs/Web/API/Element/querySelectorAll
diff --git a/vanilla/node_modules/@asamuzakjp/dom-selector/dist/cjs/index.cjs b/vanilla/node_modules/@asamuzakjp/dom-selector/dist/cjs/index.cjs deleted file mode 100644 index 9505dd3..0000000 --- a/vanilla/node_modules/@asamuzakjp/dom-selector/dist/cjs/index.cjs +++ /dev/null @@ -1,4622 +0,0 @@ -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -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 __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); -var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); - -// src/index.js -var index_exports = {}; -__export(index_exports, { - DOMSelector: () => DOMSelector -}); -module.exports = __toCommonJS(index_exports); -var import_lru_cache = require("lru-cache"); - -// src/js/parser.js -var cssTree2 = __toESM(require("css-tree"), 1); - -// src/js/utility.js -var import_nwsapi = __toESM(require("@asamuzakjp/nwsapi"), 1); -var import_bidi_js = __toESM(require("bidi-js"), 1); -var cssTree = __toESM(require("css-tree"), 1); -var import_is_potential_custom_element_name = __toESM(require("is-potential-custom-element-name"), 1); - -// src/js/constant.js -var ATTR_SELECTOR = "AttributeSelector"; -var CLASS_SELECTOR = "ClassSelector"; -var COMBINATOR = "Combinator"; -var IDENT = "Identifier"; -var ID_SELECTOR = "IdSelector"; -var NOT_SUPPORTED_ERR = "NotSupportedError"; -var NTH = "Nth"; -var PS_CLASS_SELECTOR = "PseudoClassSelector"; -var PS_ELEMENT_SELECTOR = "PseudoElementSelector"; -var SELECTOR = "Selector"; -var STRING = "String"; -var SYNTAX_ERR = "SyntaxError"; -var TARGET_ALL = "all"; -var TARGET_FIRST = "first"; -var TARGET_LINEAL = "lineal"; -var TARGET_SELF = "self"; -var TYPE_SELECTOR = "TypeSelector"; -var BIT_01 = 1; -var BIT_02 = 2; -var BIT_04 = 4; -var BIT_08 = 8; -var BIT_16 = 16; -var BIT_32 = 32; -var BIT_FFFF = 65535; -var DUO = 2; -var HEX = 16; -var TYPE_FROM = 8; -var TYPE_TO = -1; -var ELEMENT_NODE = 1; -var TEXT_NODE = 3; -var DOCUMENT_NODE = 9; -var DOCUMENT_FRAGMENT_NODE = 11; -var DOCUMENT_POSITION_PRECEDING = 2; -var DOCUMENT_POSITION_CONTAINS = 8; -var SHOW_ALL = 4294967295; -var SHOW_CONTAINER = 1281; -var ALPHA_NUM = "[A-Z\\d]+"; -var CHILD_IDX = "(?:first|last|only)-(?:child|of-type)"; -var DIGIT = "(?:0|[1-9]\\d*)"; -var LANG_PART = `(?:-${ALPHA_NUM})*`; -var PSEUDO_CLASS = `(?:any-)?link|${CHILD_IDX}|checked|empty|indeterminate|read-(?:only|write)|target`; -var ANB = `[+-]?(?:${DIGIT}n?|n)|(?:[+-]?${DIGIT})?n\\s*[+-]\\s*${DIGIT}`; -var COMBO = "\\s?[\\s>~+]\\s?"; -var DESCEND = "\\s?[\\s>]\\s?"; -var SIBLING = "\\s?[+~]\\s?"; -var LOGIC_IS = `:is\\(\\s*[^)]+\\s*\\)`; -var N_TH = `nth-(?:last-)?(?:child|of-type)\\(\\s*(?:even|odd|${ANB})\\s*\\)`; -var SUB_TYPE = "\\[[^|\\]]+\\]|[#.:][\\w-]+"; -var SUB_TYPE_WO_PSEUDO = "\\[[^|\\]]+\\]|[#.][\\w-]+"; -var TAG_TYPE = "\\*|[A-Za-z][\\w-]*"; -var TAG_TYPE_I = "\\*|[A-Z][\\w-]*"; -var COMPOUND = `(?:${TAG_TYPE}|(?:${TAG_TYPE})?(?:${SUB_TYPE})+)`; -var COMPOUND_L = `(?:${TAG_TYPE}|(?:${TAG_TYPE})?(?:${SUB_TYPE}|${LOGIC_IS})+)`; -var COMPOUND_I = `(?:${TAG_TYPE_I}|(?:${TAG_TYPE_I})?(?:${SUB_TYPE})+)`; -var COMPOUND_WO_PSEUDO = `(?:${TAG_TYPE}|(?:${TAG_TYPE})?(?:${SUB_TYPE_WO_PSEUDO})+)`; -var COMPLEX = `${COMPOUND}(?:${COMBO}${COMPOUND})*`; -var COMPLEX_L = `${COMPOUND_L}(?:${COMBO}${COMPOUND_L})*`; -var HAS_COMPOUND = `has\\([\\s>]?\\s*${COMPOUND_WO_PSEUDO}\\s*\\)`; -var LOGIC_COMPOUND = `(?:is|not)\\(\\s*${COMPOUND_L}(?:\\s*,\\s*${COMPOUND_L})*\\s*\\)`; -var LOGIC_COMPLEX = `(?:is|not)\\(\\s*${COMPLEX_L}(?:\\s*,\\s*${COMPLEX_L})*\\s*\\)`; -var FORM_PARTS = Object.freeze([ - "button", - "input", - "select", - "textarea" -]); -var INPUT_BUTTON = Object.freeze(["button", "reset", "submit"]); -var INPUT_CHECK = Object.freeze(["checkbox", "radio"]); -var INPUT_DATE = Object.freeze([ - "date", - "datetime-local", - "month", - "time", - "week" -]); -var INPUT_TEXT = Object.freeze([ - "email", - "password", - "search", - "tel", - "text", - "url" -]); -var INPUT_EDIT = Object.freeze([ - ...INPUT_DATE, - ...INPUT_TEXT, - "number" -]); -var INPUT_LTR = Object.freeze([ - ...INPUT_CHECK, - "color", - "date", - "image", - "number", - "range", - "time" -]); -var KEYS_LOGICAL = /* @__PURE__ */ new Set(["has", "is", "not", "where"]); - -// src/js/utility.js -var KEYS_DIR_AUTO = /* @__PURE__ */ new Set([...INPUT_BUTTON, ...INPUT_TEXT, "hidden"]); -var KEYS_DIR_LTR = new Set(INPUT_LTR); -var KEYS_INPUT_EDIT = new Set(INPUT_EDIT); -var KEYS_NODE_DIR_EXCLUDE = /* @__PURE__ */ new Set(["bdi", "script", "style", "textarea"]); -var KEYS_NODE_FOCUSABLE = /* @__PURE__ */ new Set(["button", "select", "textarea"]); -var KEYS_NODE_FOCUSABLE_SVG = /* @__PURE__ */ new Set([ - "clipPath", - "defs", - "desc", - "linearGradient", - "marker", - "mask", - "metadata", - "pattern", - "radialGradient", - "script", - "style", - "symbol", - "title" -]); -var REG_EXCLUDE_BASIC = /[|\\]|::|[^\u0021-\u007F\s]|\[\s*[\w$*=^|~-]+(?:(?:"[\w$*=^|~\s'-]+"|'[\w$*=^|~\s"-]+')?(?:\s+[\w$*=^|~-]+)+|"[^"\]]{1,255}|'[^'\]]{1,255})\s*\]|:(?:is|where)\(\s*\)/; -var REG_COMPLEX = new RegExp(`${COMPOUND_I}${COMBO}${COMPOUND_I}`, "i"); -var REG_DESCEND = new RegExp(`${COMPOUND_I}${DESCEND}${COMPOUND_I}`, "i"); -var REG_SIBLING = new RegExp(`${COMPOUND_I}${SIBLING}${COMPOUND_I}`, "i"); -var REG_LOGIC_COMPLEX = new RegExp( - `:(?!${PSEUDO_CLASS}|${N_TH}|${LOGIC_COMPLEX})` -); -var REG_LOGIC_COMPOUND = new RegExp( - `:(?!${PSEUDO_CLASS}|${N_TH}|${LOGIC_COMPOUND})` -); -var REG_LOGIC_HAS_COMPOUND = new RegExp( - `:(?!${PSEUDO_CLASS}|${N_TH}|${LOGIC_COMPOUND}|${HAS_COMPOUND})` -); -var REG_END_WITH_HAS = new RegExp(`:${HAS_COMPOUND}$`); -var REG_WO_LOGICAL = new RegExp(`:(?!${PSEUDO_CLASS}|${N_TH})`); -var REG_IS_HTML = /^(?:application\/xhtml\+x|text\/ht)ml$/; -var REG_IS_XML = /^(?:application\/(?:[\w\-.]+\+)?|image\/[\w\-.]+\+|text\/)xml$/; -var getType = (o) => Object.prototype.toString.call(o).slice(TYPE_FROM, TYPE_TO); -var generateException = (msg, name, globalObject = globalThis) => { - return new globalObject.DOMException(msg, name); -}; -var findNestedHas = (leaf) => { - return leaf.name === "has"; -}; -var findLogicalWithNestedHas = (leaf) => { - if (KEYS_LOGICAL.has(leaf.name) && cssTree.find(leaf, findNestedHas)) { - return leaf; - } - return null; -}; -var filterNodesByAnB = (nodes, anb) => { - const { a, b, reverse } = anb; - const processedNodes = reverse ? [...nodes].reverse() : nodes; - const l = nodes.length; - const matched = []; - if (a === 0) { - if (b > 0 && b <= l) { - matched.push(processedNodes[b - 1]); - } - return matched; - } - let startIndex = b - 1; - if (a > 0) { - while (startIndex < 0) { - startIndex += a; - } - for (let i = startIndex; i < l; i += a) { - matched.push(processedNodes[i]); - } - } else if (startIndex >= 0) { - for (let i = startIndex; i >= 0; i += a) { - matched.push(processedNodes[i]); - } - return matched.reverse(); - } - return matched; -}; -var resolveContent = (node) => { - if (!node?.nodeType) { - throw new TypeError(`Unexpected type ${getType(node)}`); - } - let document; - let root; - let shadow; - switch (node.nodeType) { - case DOCUMENT_NODE: { - document = node; - root = node; - break; - } - case DOCUMENT_FRAGMENT_NODE: { - const { host, mode, ownerDocument } = node; - document = ownerDocument; - root = node; - shadow = host && (mode === "close" || mode === "open"); - break; - } - case ELEMENT_NODE: { - document = node.ownerDocument; - let refNode = node; - while (refNode) { - const { host, mode, nodeType, parentNode } = refNode; - if (nodeType === DOCUMENT_FRAGMENT_NODE) { - shadow = host && (mode === "close" || mode === "open"); - break; - } else if (parentNode) { - refNode = parentNode; - } else { - break; - } - } - root = refNode; - break; - } - default: { - throw new TypeError(`Unexpected node ${node.nodeName}`); - } - } - return [document, root, !!shadow]; -}; -var traverseNode = (node, walker, force = false) => { - if (!node?.nodeType) { - throw new TypeError(`Unexpected type ${getType(node)}`); - } - if (!walker) { - return null; - } - let refNode = walker.currentNode; - if (refNode === node) { - return refNode; - } else if (force || refNode.contains(node)) { - refNode = walker.nextNode(); - while (refNode) { - if (refNode === node) { - break; - } - refNode = walker.nextNode(); - } - return refNode; - } else { - if (refNode !== walker.root) { - let bool; - while (refNode) { - if (refNode === node) { - bool = true; - break; - } else if (refNode === walker.root || refNode.contains(node)) { - break; - } - refNode = walker.parentNode(); - } - if (bool) { - return refNode; - } - } - if (node.nodeType === ELEMENT_NODE) { - let bool; - while (refNode) { - if (refNode === node) { - bool = true; - break; - } - refNode = walker.nextNode(); - } - if (bool) { - return refNode; - } - } - } - return null; -}; -var isCustomElement = (node, opt = {}) => { - if (!node?.nodeType) { - throw new TypeError(`Unexpected type ${getType(node)}`); - } - if (node.nodeType !== ELEMENT_NODE) { - return false; - } - const { localName, ownerDocument } = node; - const { formAssociated } = opt; - const window = ownerDocument.defaultView; - let elmConstructor; - const attr = node.getAttribute("is"); - if (attr) { - elmConstructor = (0, import_is_potential_custom_element_name.default)(attr) && window.customElements.get(attr); - } else { - elmConstructor = (0, import_is_potential_custom_element_name.default)(localName) && window.customElements.get(localName); - } - if (elmConstructor) { - if (formAssociated) { - return !!elmConstructor.formAssociated; - } - return true; - } - return false; -}; -var getSlottedTextContent = (node) => { - if (!node?.nodeType) { - throw new TypeError(`Unexpected type ${getType(node)}`); - } - if (typeof node.assignedNodes !== "function") { - return null; - } - const nodes = node.assignedNodes(); - if (nodes.length) { - let text = ""; - const l = nodes.length; - for (let i = 0; i < l; i++) { - const item = nodes[i]; - text = item.textContent.trim(); - if (text) { - break; - } - } - return text; - } - return node.textContent.trim(); -}; -var getDirectionality = (node) => { - if (!node?.nodeType) { - throw new TypeError(`Unexpected type ${getType(node)}`); - } - if (node.nodeType !== ELEMENT_NODE) { - return null; - } - const { dir: dirAttr, localName, parentNode } = node; - const { getEmbeddingLevels } = (0, import_bidi_js.default)(); - if (dirAttr === "ltr" || dirAttr === "rtl") { - return dirAttr; - } else if (dirAttr === "auto") { - let text = ""; - switch (localName) { - case "input": { - if (!node.type || KEYS_DIR_AUTO.has(node.type)) { - text = node.value; - } else if (KEYS_DIR_LTR.has(node.type)) { - return "ltr"; - } - break; - } - case "slot": { - text = getSlottedTextContent(node); - break; - } - case "textarea": { - text = node.value; - break; - } - default: { - const items = [].slice.call(node.childNodes); - for (const item of items) { - const { - dir: itemDir, - localName: itemLocalName, - nodeType: itemNodeType, - textContent: itemTextContent - } = item; - if (itemNodeType === TEXT_NODE) { - text = itemTextContent.trim(); - } else if (itemNodeType === ELEMENT_NODE && !KEYS_NODE_DIR_EXCLUDE.has(itemLocalName) && (!itemDir || itemDir !== "ltr" && itemDir !== "rtl")) { - if (itemLocalName === "slot") { - text = getSlottedTextContent(item); - } else { - text = itemTextContent.trim(); - } - } - if (text) { - break; - } - } - } - } - if (text) { - const { - paragraphs: [{ level }] - } = getEmbeddingLevels(text); - if (level % 2 === 1) { - return "rtl"; - } - } else if (parentNode) { - const { nodeType: parentNodeType } = parentNode; - if (parentNodeType === ELEMENT_NODE) { - return getDirectionality(parentNode); - } - } - } else if (localName === "input" && node.type === "tel") { - return "ltr"; - } else if (localName === "bdi") { - const text = node.textContent.trim(); - if (text) { - const { - paragraphs: [{ level }] - } = getEmbeddingLevels(text); - if (level % 2 === 1) { - return "rtl"; - } - } - } else if (parentNode) { - if (localName === "slot") { - const text = getSlottedTextContent(node); - if (text) { - const { - paragraphs: [{ level }] - } = getEmbeddingLevels(text); - if (level % 2 === 1) { - return "rtl"; - } - return "ltr"; - } - } - const { nodeType: parentNodeType } = parentNode; - if (parentNodeType === ELEMENT_NODE) { - return getDirectionality(parentNode); - } - } - return "ltr"; -}; -var getLanguageAttribute = (node) => { - if (!node?.nodeType) { - throw new TypeError(`Unexpected type ${getType(node)}`); - } - if (node.nodeType !== ELEMENT_NODE) { - return null; - } - const { contentType } = node.ownerDocument; - const isHtml = REG_IS_HTML.test(contentType); - const isXml = REG_IS_XML.test(contentType); - let isShadow = false; - let current = node; - while (current) { - switch (current.nodeType) { - case ELEMENT_NODE: { - if (isHtml && current.hasAttribute("lang")) { - return current.getAttribute("lang"); - } else if (isXml && current.hasAttribute("xml:lang")) { - return current.getAttribute("xml:lang"); - } - break; - } - case DOCUMENT_FRAGMENT_NODE: { - if (current.host) { - isShadow = true; - } - break; - } - case DOCUMENT_NODE: - default: { - return null; - } - } - if (isShadow) { - current = current.host; - isShadow = false; - } else if (current.parentNode) { - current = current.parentNode; - } else { - break; - } - } - return null; -}; -var isContentEditable = (node) => { - if (!node?.nodeType) { - throw new TypeError(`Unexpected type ${getType(node)}`); - } - if (node.nodeType !== ELEMENT_NODE) { - return false; - } - if (typeof node.isContentEditable === "boolean") { - return node.isContentEditable; - } else if (node.ownerDocument.designMode === "on") { - return true; - } else { - let attr; - if (node.hasAttribute("contenteditable")) { - attr = node.getAttribute("contenteditable"); - } else { - attr = "inherit"; - } - switch (attr) { - case "": - case "true": { - return true; - } - case "plaintext-only": { - return true; - } - case "false": { - return false; - } - default: { - if (node?.parentNode?.nodeType === ELEMENT_NODE) { - return isContentEditable(node.parentNode); - } - return false; - } - } - } -}; -var isVisible = (node) => { - if (node?.nodeType !== ELEMENT_NODE) { - return false; - } - const window = node.ownerDocument.defaultView; - const { display, visibility } = window.getComputedStyle(node); - if (display !== "none" && visibility === "visible") { - return true; - } - return false; -}; -var isFocusVisible = (node) => { - if (node?.nodeType !== ELEMENT_NODE) { - return false; - } - const { localName, type } = node; - switch (localName) { - case "input": { - if (!type || KEYS_INPUT_EDIT.has(type)) { - return true; - } - return false; - } - case "textarea": { - return true; - } - default: { - return isContentEditable(node); - } - } -}; -var isFocusableArea = (node) => { - if (node?.nodeType !== ELEMENT_NODE) { - return false; - } - if (!node.isConnected) { - return false; - } - const window = node.ownerDocument.defaultView; - if (node instanceof window.HTMLElement) { - if (Number.isInteger(parseInt(node.getAttribute("tabindex")))) { - return true; - } - if (isContentEditable(node)) { - return true; - } - const { localName, parentNode } = node; - switch (localName) { - case "a": { - if (node.href || node.hasAttribute("href")) { - return true; - } - return false; - } - case "iframe": { - return true; - } - case "input": { - if (node.disabled || node.hasAttribute("disabled") || node.hidden || node.hasAttribute("hidden")) { - return false; - } - return true; - } - case "summary": { - if (parentNode.localName === "details") { - let child = parentNode.firstElementChild; - let bool = false; - while (child) { - if (child.localName === "summary") { - bool = child === node; - break; - } - child = child.nextElementSibling; - } - return bool; - } - return false; - } - default: { - if (KEYS_NODE_FOCUSABLE.has(localName) && !(node.disabled || node.hasAttribute("disabled"))) { - return true; - } - } - } - } else if (node instanceof window.SVGElement) { - if (Number.isInteger(parseInt(node.getAttributeNS(null, "tabindex")))) { - const ns = "http://www.w3.org/2000/svg"; - let bool; - let refNode = node; - while (refNode.namespaceURI === ns) { - bool = KEYS_NODE_FOCUSABLE_SVG.has(refNode.localName); - if (bool) { - break; - } - if (refNode?.parentNode?.namespaceURI === ns) { - refNode = refNode.parentNode; - } else { - break; - } - } - if (bool) { - return false; - } - return true; - } - if (node.localName === "a" && (node.href || node.hasAttributeNS(null, "href"))) { - return true; - } - } - return false; -}; -var getNamespaceURI = (ns, node) => { - if (typeof ns !== "string") { - throw new TypeError(`Unexpected type ${getType(ns)}`); - } else if (!node?.nodeType) { - throw new TypeError(`Unexpected type ${getType(node)}`); - } - if (!ns || node.nodeType !== ELEMENT_NODE) { - return null; - } - const { attributes } = node; - let res; - for (const attr of attributes) { - const { name, namespaceURI, prefix, value } = attr; - if (name === `xmlns:${ns}`) { - res = value; - } else if (prefix === ns) { - res = namespaceURI; - } - if (res) { - break; - } - } - return res ?? null; -}; -var isNamespaceDeclared = (ns = "", node = {}) => { - if (!ns || typeof ns !== "string" || node?.nodeType !== ELEMENT_NODE) { - return false; - } - if (node.lookupNamespaceURI(ns)) { - return true; - } - const root = node.ownerDocument.documentElement; - let parent = node; - let res; - while (parent) { - res = getNamespaceURI(ns, parent); - if (res || parent === root) { - break; - } - parent = parent.parentNode; - } - return !!res; -}; -var isPreceding = (nodeA, nodeB) => { - if (!nodeA?.nodeType) { - throw new TypeError(`Unexpected type ${getType(nodeA)}`); - } else if (!nodeB?.nodeType) { - throw new TypeError(`Unexpected type ${getType(nodeB)}`); - } - if (nodeA.nodeType !== ELEMENT_NODE || nodeB.nodeType !== ELEMENT_NODE) { - return false; - } - const posBit = nodeB.compareDocumentPosition(nodeA); - const res = posBit & DOCUMENT_POSITION_PRECEDING || posBit & DOCUMENT_POSITION_CONTAINS; - return !!res; -}; -var compareNodes = (a, b) => { - if (isPreceding(b, a)) { - return 1; - } - return -1; -}; -var sortNodes = (nodes = []) => { - const arr = [...nodes]; - if (arr.length > 1) { - arr.sort(compareNodes); - } - return arr; -}; -var initNwsapi = (window, document) => { - if (!window?.DOMException) { - throw new TypeError(`Unexpected global object ${getType(window)}`); - } - if (document?.nodeType !== DOCUMENT_NODE) { - document = window.document; - } - const nw = (0, import_nwsapi.default)({ - document, - DOMException: window.DOMException - }); - nw.configure({ - LOGERRORS: false - }); - return nw; -}; -var filterSelector = (selector, target) => { - const isQuerySelectorType = target === TARGET_FIRST || target === TARGET_ALL; - if (!selector || typeof selector !== "string" || /null|undefined/.test(selector)) { - return false; - } - if (selector.includes("[")) { - const index = selector.lastIndexOf("["); - const sel = selector.substring(index); - if (sel.indexOf("]") < 0) { - return false; - } - } - if (selector.includes("/") || REG_EXCLUDE_BASIC.test(selector)) { - return false; - } - if (selector.includes(":")) { - let complex = false; - if (target !== isQuerySelectorType) { - complex = REG_COMPLEX.test(selector); - } - if (isQuerySelectorType && REG_DESCEND.test(selector) && !REG_SIBLING.test(selector)) { - return false; - } else if (!isQuerySelectorType && /:has\(/.test(selector)) { - if (!complex || REG_LOGIC_HAS_COMPOUND.test(selector)) { - return false; - } - return REG_END_WITH_HAS.test(selector); - } else if (/:(?:is|not)\(/.test(selector)) { - if (complex) { - return !REG_LOGIC_COMPLEX.test(selector); - } else { - return !REG_LOGIC_COMPOUND.test(selector); - } - } else { - return !REG_WO_LOGICAL.test(selector); - } - } - return true; -}; - -// src/js/parser.js -var import_css_tree = require("css-tree"); -var AST_SORT_ORDER = /* @__PURE__ */ new Map([ - [PS_ELEMENT_SELECTOR, BIT_01], - [ID_SELECTOR, BIT_02], - [CLASS_SELECTOR, BIT_04], - [TYPE_SELECTOR, BIT_08], - [ATTR_SELECTOR, BIT_16], - [PS_CLASS_SELECTOR, BIT_32] -]); -var KEYS_PS_CLASS_STATE = /* @__PURE__ */ new Set([ - "checked", - "closed", - "disabled", - "empty", - "enabled", - "in-range", - "indeterminate", - "invalid", - "open", - "out-of-range", - "placeholder-shown", - "read-only", - "read-write", - "valid" -]); -var KEYS_SHADOW_HOST = /* @__PURE__ */ new Set(["host", "host-context"]); -var REG_EMPTY_PS_FUNC = /(?<=:(?:dir|has|host(?:-context)?|is|lang|not|nth-(?:last-)?(?:child|of-type)|where))\(\s+\)/g; -var REG_SHADOW_PS_ELEMENT = /^part|slotted$/; -var U_FFFD = "\uFFFD"; -var unescapeSelector = (selector = "") => { - if (typeof selector === "string" && selector.indexOf("\\", 0) >= 0) { - const arr = selector.split("\\"); - const selectorItems = [arr[0]]; - const l = arr.length; - for (let i = 1; i < l; i++) { - const item = arr[i]; - if (item === "" && i === l - 1) { - selectorItems.push(U_FFFD); - } else { - const hexExists = /^([\da-f]{1,6}\s?)/i.exec(item); - if (hexExists) { - const [, hex] = hexExists; - let str; - try { - const low = parseInt("D800", HEX); - const high = parseInt("DFFF", HEX); - const deci = parseInt(hex, HEX); - if (deci === 0 || deci >= low && deci <= high) { - str = U_FFFD; - } else { - str = String.fromCodePoint(deci); - } - } catch (e) { - str = U_FFFD; - } - let postStr = ""; - if (item.length > hex.length) { - postStr = item.substring(hex.length); - } - selectorItems.push(`${str}${postStr}`); - } else if (/^[\n\r\f]/.test(item)) { - selectorItems.push(`\\${item}`); - } else { - selectorItems.push(item); - } - } - } - return selectorItems.join(""); - } - return selector; -}; -var preprocess = (value) => { - if (typeof value !== "string") { - if (value === void 0 || value === null) { - return getType(value).toLowerCase(); - } else if (Array.isArray(value)) { - return value.join(","); - } else if (Object.hasOwn(value, "toString")) { - return value.toString(); - } else { - throw new DOMException(`Invalid selector ${value}`, SYNTAX_ERR); - } - } - let selector = value; - let index = 0; - while (index >= 0) { - index = selector.indexOf("#", index); - if (index < 0) { - break; - } - const preHash = selector.substring(0, index + 1); - let postHash = selector.substring(index + 1); - const codePoint = postHash.codePointAt(0); - if (codePoint > BIT_FFFF) { - const str = `\\${codePoint.toString(HEX)} `; - if (postHash.length === DUO) { - postHash = str; - } else { - postHash = `${str}${postHash.substring(DUO)}`; - } - } - selector = `${preHash}${postHash}`; - index++; - } - return selector.replace(/\f|\r\n?/g, "\n").replace(/[\0\uD800-\uDFFF]|\\$/g, U_FFFD).replace(/\x26/g, ":scope"); -}; -var parseSelector = (sel) => { - const selector = preprocess(sel); - if (/^$|^\s*>|,\s*$/.test(selector)) { - throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR); - } - try { - const ast = cssTree2.parse(selector, { - context: "selectorList", - parseCustomProperty: true - }); - return cssTree2.toPlainObject(ast); - } catch (e) { - const { message } = e; - if (/^(?:"\]"|Attribute selector [()\s,=~^$*|]+) is expected$/.test( - message - ) && !selector.endsWith("]")) { - const index = selector.lastIndexOf("["); - const selPart = selector.substring(index); - if (selPart.includes('"')) { - const quotes = selPart.match(/"/g).length; - if (quotes % 2) { - return parseSelector(`${selector}"]`); - } - return parseSelector(`${selector}]`); - } - return parseSelector(`${selector}]`); - } else if (message === '")" is expected') { - if (REG_EMPTY_PS_FUNC.test(selector)) { - return parseSelector(`${selector.replaceAll(REG_EMPTY_PS_FUNC, "()")}`); - } else if (!selector.endsWith(")")) { - return parseSelector(`${selector})`); - } else { - throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR); - } - } else { - throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR); - } - } -}; -var walkAST = (ast = {}) => { - const branches = /* @__PURE__ */ new Set(); - const info = { - hasForgivenPseudoFunc: false, - hasHasPseudoFunc: false, - hasLogicalPseudoFunc: false, - hasNotPseudoFunc: false, - hasNthChildOfSelector: false, - hasNestedSelector: false, - hasStatePseudoClass: false - }; - const opt = { - enter(node) { - switch (node.type) { - case CLASS_SELECTOR: { - if (/^-?\d/.test(node.name)) { - throw new DOMException( - `Invalid selector .${node.name}`, - SYNTAX_ERR - ); - } - break; - } - case ID_SELECTOR: { - if (/^-?\d/.test(node.name)) { - throw new DOMException( - `Invalid selector #${node.name}`, - SYNTAX_ERR - ); - } - break; - } - case PS_CLASS_SELECTOR: { - if (KEYS_LOGICAL.has(node.name)) { - info.hasNestedSelector = true; - info.hasLogicalPseudoFunc = true; - if (node.name === "has") { - info.hasHasPseudoFunc = true; - } else if (node.name === "not") { - info.hasNotPseudoFunc = true; - } else { - info.hasForgivenPseudoFunc = true; - } - } else if (KEYS_PS_CLASS_STATE.has(node.name)) { - info.hasStatePseudoClass = true; - } else if (KEYS_SHADOW_HOST.has(node.name) && Array.isArray(node.children) && node.children.length) { - info.hasNestedSelector = true; - } - break; - } - case PS_ELEMENT_SELECTOR: { - if (REG_SHADOW_PS_ELEMENT.test(node.name)) { - info.hasNestedSelector = true; - } - break; - } - case NTH: { - if (node.selector) { - info.hasNestedSelector = true; - info.hasNthChildOfSelector = true; - } - break; - } - case SELECTOR: { - branches.add(node.children); - break; - } - default: - } - } - }; - cssTree2.walk(ast, opt); - if (info.hasNestedSelector === true) { - cssTree2.findAll(ast, (node, item, list) => { - if (list) { - if (node.type === PS_CLASS_SELECTOR && KEYS_LOGICAL.has(node.name)) { - const itemList = list.filter((i) => { - const { name, type } = i; - return type === PS_CLASS_SELECTOR && KEYS_LOGICAL.has(name); - }); - for (const { children } of itemList) { - for (const { children: grandChildren } of children) { - for (const { children: greatGrandChildren } of grandChildren) { - if (branches.has(greatGrandChildren)) { - branches.delete(greatGrandChildren); - } - } - } - } - } else if (node.type === PS_CLASS_SELECTOR && KEYS_SHADOW_HOST.has(node.name) && Array.isArray(node.children) && node.children.length) { - const itemList = list.filter((i) => { - const { children, name, type } = i; - const res = type === PS_CLASS_SELECTOR && KEYS_SHADOW_HOST.has(name) && Array.isArray(children) && children.length; - return res; - }); - for (const { children } of itemList) { - for (const { children: grandChildren } of children) { - if (branches.has(grandChildren)) { - branches.delete(grandChildren); - } - } - } - } else if (node.type === PS_ELEMENT_SELECTOR && REG_SHADOW_PS_ELEMENT.test(node.name)) { - const itemList = list.filter((i) => { - const { name, type } = i; - const res = type === PS_ELEMENT_SELECTOR && REG_SHADOW_PS_ELEMENT.test(name); - return res; - }); - for (const { children } of itemList) { - for (const { children: grandChildren } of children) { - if (branches.has(grandChildren)) { - branches.delete(grandChildren); - } - } - } - } else if (node.type === NTH && node.selector) { - const itemList = list.filter((i) => { - const { selector, type } = i; - const res = type === NTH && selector; - return res; - }); - for (const { selector } of itemList) { - const { children } = selector; - for (const { children: grandChildren } of children) { - if (branches.has(grandChildren)) { - branches.delete(grandChildren); - } - } - } - } - } - }); - } - return { - info, - branches: [...branches] - }; -}; -var compareASTNodes = (a, b) => { - const bitA = AST_SORT_ORDER.get(a.type); - const bitB = AST_SORT_ORDER.get(b.type); - if (bitA === bitB) { - return 0; - } else if (bitA > bitB) { - return 1; - } else { - return -1; - } -}; -var sortAST = (asts) => { - const arr = [...asts]; - if (arr.length > 1) { - arr.sort(compareASTNodes); - } - return arr; -}; -var parseAstName = (selector) => { - let prefix; - let localName; - if (selector && typeof selector === "string") { - if (selector.indexOf("|") > -1) { - [prefix, localName] = selector.split("|"); - } else { - prefix = "*"; - localName = selector; - } - } else { - throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR); - } - return { - prefix, - localName - }; -}; - -// src/js/matcher.js -var KEYS_FORM_PS_DISABLED = /* @__PURE__ */ new Set([ - ...FORM_PARTS, - "fieldset", - "optgroup", - "option" -]); -var KEYS_INPUT_EDIT2 = new Set(INPUT_EDIT); -var REG_LANG_VALID = new RegExp(`^(?:\\*-)?${ALPHA_NUM}${LANG_PART}$`, "i"); -var REG_TAG_NAME = /[A-Z][\\w-]*/i; -var matchPseudoElementSelector = (astName, astType, opt = {}) => { - const { forgive, globalObject, warn } = opt; - if (astType !== PS_ELEMENT_SELECTOR) { - throw new TypeError(`Unexpected ast type ${getType(astType)}`); - } - switch (astName) { - case "after": - case "backdrop": - case "before": - case "cue": - case "cue-region": - case "first-letter": - case "first-line": - case "file-selector-button": - case "marker": - case "placeholder": - case "selection": - case "target-text": { - if (warn) { - throw generateException( - `Unsupported pseudo-element ::${astName}`, - NOT_SUPPORTED_ERR, - globalObject - ); - } - break; - } - case "part": - case "slotted": { - if (warn) { - throw generateException( - `Unsupported pseudo-element ::${astName}()`, - NOT_SUPPORTED_ERR, - globalObject - ); - } - break; - } - default: { - if (astName.startsWith("-webkit-")) { - if (warn) { - throw generateException( - `Unsupported pseudo-element ::${astName}`, - NOT_SUPPORTED_ERR, - globalObject - ); - } - } else if (!forgive) { - throw generateException( - `Unknown pseudo-element ::${astName}`, - SYNTAX_ERR, - globalObject - ); - } - } - } -}; -var matchDirectionPseudoClass = (ast, node) => { - const { name } = ast; - if (!name) { - const type = name === "" ? "(empty String)" : getType(name); - throw new TypeError(`Unexpected ast type ${type}`); - } - const dir = getDirectionality(node); - return name === dir; -}; -var matchLanguagePseudoClass = (ast, node) => { - const { name, type, value } = ast; - let langPattern; - if (type === STRING && value) { - langPattern = value; - } else if (type === IDENT && name) { - langPattern = unescapeSelector(name); - } - if (typeof langPattern !== "string") { - return false; - } - const elementLang = getLanguageAttribute(node); - if (elementLang === null) { - return false; - } - if (langPattern === "*") { - return elementLang !== ""; - } - if (!REG_LANG_VALID.test(langPattern)) { - return false; - } - let matcherRegex; - if (langPattern.indexOf("-") > -1) { - const [langMain, langSub, ...langRest] = langPattern.split("-"); - const extendedMain = langMain === "*" ? `${ALPHA_NUM}${LANG_PART}` : `${langMain}${LANG_PART}`; - const extendedSub = `-${langSub}${LANG_PART}`; - let extendedRest = ""; - for (let i = 0; i < langRest.length; i++) { - extendedRest += `-${langRest[i]}${LANG_PART}`; - } - matcherRegex = new RegExp( - `^${extendedMain}${extendedSub}${extendedRest}$`, - "i" - ); - } else { - matcherRegex = new RegExp(`^${langPattern}${LANG_PART}$`, "i"); - } - return matcherRegex.test(elementLang); -}; -var matchDisabledPseudoClass = (astName, node) => { - const { localName, parentNode } = node; - if (!KEYS_FORM_PS_DISABLED.has(localName) && !isCustomElement(node, { formAssociated: true })) { - return false; - } - let isDisabled = false; - if (node.disabled || node.hasAttribute("disabled")) { - isDisabled = true; - } else if (localName === "option") { - if (parentNode && parentNode.localName === "optgroup" && (parentNode.disabled || parentNode.hasAttribute("disabled"))) { - isDisabled = true; - } - } else if (localName !== "optgroup") { - let current = parentNode; - while (current) { - if (current.localName === "fieldset" && (current.disabled || current.hasAttribute("disabled"))) { - let legend; - let element = current.firstElementChild; - while (element) { - if (element.localName === "legend") { - legend = element; - break; - } - element = element.nextElementSibling; - } - if (!legend || !legend.contains(node)) { - isDisabled = true; - } - break; - } - current = current.parentNode; - } - } - if (astName === "disabled") { - return isDisabled; - } - return !isDisabled; -}; -var matchReadOnlyPseudoClass = (astName, node) => { - const { localName } = node; - let isReadOnly = false; - switch (localName) { - case "textarea": - case "input": { - const isEditableInput = !node.type || KEYS_INPUT_EDIT2.has(node.type); - if (localName === "textarea" || isEditableInput) { - isReadOnly = node.readOnly || node.hasAttribute("readonly") || node.disabled || node.hasAttribute("disabled"); - } else { - isReadOnly = true; - } - break; - } - default: { - isReadOnly = !isContentEditable(node); - } - } - if (astName === "read-only") { - return isReadOnly; - } - return !isReadOnly; -}; -var matchAttributeSelector = (ast, node, opt = {}) => { - const { - flags: astFlags, - matcher: astMatcher, - name: astName, - value: astValue - } = ast; - const { check, forgive, globalObject } = opt; - if (typeof astFlags === "string" && !/^[is]$/i.test(astFlags) && !forgive) { - const css = (0, import_css_tree.generate)(ast); - throw generateException( - `Invalid selector ${css}`, - SYNTAX_ERR, - globalObject - ); - } - const { attributes } = node; - if (!attributes || !attributes.length) { - return false; - } - const contentType = node.ownerDocument.contentType; - let caseInsensitive; - if (contentType === "text/html") { - if (typeof astFlags === "string" && /^s$/i.test(astFlags)) { - caseInsensitive = false; - } else { - caseInsensitive = true; - } - } else if (typeof astFlags === "string" && /^i$/i.test(astFlags)) { - caseInsensitive = true; - } else { - caseInsensitive = false; - } - let astAttrName = unescapeSelector(astName.name); - if (caseInsensitive) { - astAttrName = astAttrName.toLowerCase(); - } - const attrValues = /* @__PURE__ */ new Set(); - if (astAttrName.indexOf("|") > -1) { - const { prefix: astPrefix, localName: astLocalName } = parseAstName(astAttrName); - for (const item of attributes) { - let { name: itemName, value: itemValue } = item; - if (caseInsensitive) { - itemName = itemName.toLowerCase(); - itemValue = itemValue.toLowerCase(); - } - switch (astPrefix) { - case "": { - if (astLocalName === itemName) { - attrValues.add(itemValue); - } - break; - } - case "*": { - if (itemName.indexOf(":") > -1) { - const [, ...restItemName] = itemName.split(":"); - const itemLocalName = restItemName.join(":").replace(/^:/, ""); - if (itemLocalName === astLocalName) { - attrValues.add(itemValue); - } - } else if (astLocalName === itemName) { - attrValues.add(itemValue); - } - break; - } - default: { - if (!check) { - if (forgive) { - return false; - } - const css = (0, import_css_tree.generate)(ast); - throw generateException( - `Invalid selector ${css}`, - SYNTAX_ERR, - globalObject - ); - } - if (itemName.indexOf(":") > -1) { - const [itemPrefix, ...restItemName] = itemName.split(":"); - const itemLocalName = restItemName.join(":").replace(/^:/, ""); - if (itemPrefix === "xml" && itemLocalName === "lang") { - continue; - } else if (astPrefix === itemPrefix && astLocalName === itemLocalName) { - const namespaceDeclared = isNamespaceDeclared(astPrefix, node); - if (namespaceDeclared) { - attrValues.add(itemValue); - } - } - } - } - } - } - } else { - for (let { name: itemName, value: itemValue } of attributes) { - if (caseInsensitive) { - itemName = itemName.toLowerCase(); - itemValue = itemValue.toLowerCase(); - } - if (itemName.indexOf(":") > -1) { - const [itemPrefix, ...restItemName] = itemName.split(":"); - const itemLocalName = restItemName.join(":").replace(/^:/, ""); - if (!itemPrefix && astAttrName === `:${itemLocalName}`) { - attrValues.add(itemValue); - } else if (itemPrefix === "xml" && itemLocalName === "lang") { - continue; - } else if (astAttrName === itemLocalName) { - attrValues.add(itemValue); - } - } else if (astAttrName === itemName) { - attrValues.add(itemValue); - } - } - } - if (!attrValues.size) { - return false; - } - const { name: astIdentValue, value: astStringValue } = astValue ?? {}; - let attrValue; - if (astIdentValue) { - if (caseInsensitive) { - attrValue = astIdentValue.toLowerCase(); - } else { - attrValue = astIdentValue; - } - } else if (astStringValue) { - if (caseInsensitive) { - attrValue = astStringValue.toLowerCase(); - } else { - attrValue = astStringValue; - } - } else if (astStringValue === "") { - attrValue = astStringValue; - } - switch (astMatcher) { - case "=": { - return typeof attrValue === "string" && attrValues.has(attrValue); - } - case "~=": { - if (attrValue && typeof attrValue === "string") { - for (const value of attrValues) { - const item = new Set(value.split(/\s+/)); - if (item.has(attrValue)) { - return true; - } - } - } - return false; - } - case "|=": { - if (attrValue && typeof attrValue === "string") { - for (const value of attrValues) { - if (value === attrValue || value.startsWith(`${attrValue}-`)) { - return true; - } - } - } - return false; - } - case "^=": { - if (attrValue && typeof attrValue === "string") { - for (const value of attrValues) { - if (value.startsWith(`${attrValue}`)) { - return true; - } - } - } - return false; - } - case "$=": { - if (attrValue && typeof attrValue === "string") { - for (const value of attrValues) { - if (value.endsWith(`${attrValue}`)) { - return true; - } - } - } - return false; - } - case "*=": { - if (attrValue && typeof attrValue === "string") { - for (const value of attrValues) { - if (value.includes(`${attrValue}`)) { - return true; - } - } - } - return false; - } - case null: - default: { - return true; - } - } -}; -var matchTypeSelector = (ast, node, opt = {}) => { - const astName = unescapeSelector(ast.name); - const { localName, namespaceURI, prefix } = node; - const { check, forgive, globalObject } = opt; - let { prefix: astPrefix, localName: astLocalName } = parseAstName( - astName, - node - ); - if (node.ownerDocument.contentType === "text/html" && (!namespaceURI || namespaceURI === "http://www.w3.org/1999/xhtml") && REG_TAG_NAME.test(localName)) { - astPrefix = astPrefix.toLowerCase(); - astLocalName = astLocalName.toLowerCase(); - } - let nodePrefix; - let nodeLocalName; - if (localName.indexOf(":") > -1) { - [nodePrefix, nodeLocalName] = localName.split(":"); - } else { - nodePrefix = prefix || ""; - nodeLocalName = localName; - } - switch (astPrefix) { - case "": { - if (!nodePrefix && !namespaceURI && (astLocalName === "*" || astLocalName === nodeLocalName)) { - return true; - } - return false; - } - case "*": { - if (astLocalName === "*" || astLocalName === nodeLocalName) { - return true; - } - return false; - } - default: { - if (!check) { - if (forgive) { - return false; - } - const css = (0, import_css_tree.generate)(ast); - throw generateException( - `Invalid selector ${css}`, - SYNTAX_ERR, - globalObject - ); - } - const astNS = node.lookupNamespaceURI(astPrefix); - const nodeNS = node.lookupNamespaceURI(nodePrefix); - if (astNS === nodeNS && astPrefix === nodePrefix) { - if (astLocalName === "*" || astLocalName === nodeLocalName) { - return true; - } - return false; - } else if (!forgive && !astNS) { - throw generateException( - `Undeclared namespace ${astPrefix}`, - SYNTAX_ERR, - globalObject - ); - } - return false; - } - } -}; - -// src/js/finder.js -var DIR_NEXT = "next"; -var DIR_PREV = "prev"; -var KEYS_FORM = /* @__PURE__ */ new Set([...FORM_PARTS, "fieldset", "form"]); -var KEYS_FORM_PS_VALID = /* @__PURE__ */ new Set([...FORM_PARTS, "form"]); -var KEYS_INPUT_CHECK = new Set(INPUT_CHECK); -var KEYS_INPUT_PLACEHOLDER = /* @__PURE__ */ new Set([...INPUT_TEXT, "number"]); -var KEYS_INPUT_RANGE = /* @__PURE__ */ new Set([...INPUT_DATE, "number", "range"]); -var KEYS_INPUT_REQUIRED = /* @__PURE__ */ new Set([...INPUT_CHECK, ...INPUT_EDIT, "file"]); -var KEYS_INPUT_RESET = /* @__PURE__ */ new Set(["button", "reset"]); -var KEYS_INPUT_SUBMIT = /* @__PURE__ */ new Set(["image", "submit"]); -var KEYS_MODIFIER = /* @__PURE__ */ new Set([ - "Alt", - "AltGraph", - "CapsLock", - "Control", - "Fn", - "FnLock", - "Hyper", - "Meta", - "NumLock", - "ScrollLock", - "Shift", - "Super", - "Symbol", - "SymbolLock" -]); -var KEYS_PS_UNCACHE = /* @__PURE__ */ new Set([ - "any-link", - "defined", - "dir", - "link", - "scope" -]); -var KEYS_PS_NTH_OF_TYPE = /* @__PURE__ */ new Set([ - "first-of-type", - "last-of-type", - "only-of-type" -]); -var Finder = class { - /* private fields */ - #ast; - #astCache; - #check; - #descendant; - #document; - #documentCache; - #documentURL; - #event; - #eventHandlers; - #focus; - #invalidate; - #invalidateResults; - #lastFocusVisible; - #node; - #nodeWalker; - #nodes; - #noexcept; - #pseudoElement; - #results; - #root; - #rootWalker; - #scoped; - #selector; - #shadow; - #verifyShadowHost; - #walkers; - #warn; - #window; - /** - * constructor - * @param {object} window - The window object. - */ - constructor(window) { - this.#window = window; - this.#astCache = /* @__PURE__ */ new WeakMap(); - this.#documentCache = /* @__PURE__ */ new WeakMap(); - this.#event = null; - this.#focus = null; - this.#lastFocusVisible = null; - this.#eventHandlers = /* @__PURE__ */ new Set([ - { - keys: ["focus", "focusin"], - handler: this._handleFocusEvent - }, - { - keys: ["keydown", "keyup"], - handler: this._handleKeyboardEvent - }, - { - keys: ["mouseover", "mousedown", "mouseup", "click", "mouseout"], - handler: this._handleMouseEvent - } - ]); - this._registerEventListeners(); - this.clearResults(true); - } - /** - * Handles errors. - * @param {Error} e - The error object. - * @param {object} [opt] - Options. - * @param {boolean} [opt.noexcept] - If true, exceptions are not thrown. - * @throws {Error} Throws an error. - * @returns {void} - */ - onError = (e, opt = {}) => { - const noexcept = opt.noexcept ?? this.#noexcept; - if (noexcept) { - return; - } - const isDOMException = e instanceof DOMException || e instanceof this.#window.DOMException; - if (isDOMException) { - if (e.name === NOT_SUPPORTED_ERR) { - if (this.#warn) { - console.warn(e.message); - } - return; - } - throw new this.#window.DOMException(e.message, e.name); - } - if (e.name in this.#window) { - throw new this.#window[e.name](e.message, { cause: e }); - } - throw e; - }; - /** - * Sets up the finder. - * @param {string} selector - The CSS selector. - * @param {object} node - Document, DocumentFragment, or Element. - * @param {object} [opt] - Options. - * @param {boolean} [opt.check] - Indicates if running in internal check(). - * @param {boolean} [opt.noexcept] - If true, exceptions are not thrown. - * @param {boolean} [opt.warn] - If true, console warnings are enabled. - * @returns {object} The finder instance. - */ - setup = (selector, node, opt = {}) => { - const { check, noexcept, warn } = opt; - this.#check = !!check; - this.#noexcept = !!noexcept; - this.#warn = !!warn; - [this.#document, this.#root, this.#shadow] = resolveContent(node); - this.#documentURL = null; - this.#node = node; - this.#scoped = this.#node !== this.#root && this.#node.nodeType === ELEMENT_NODE; - this.#selector = selector; - [this.#ast, this.#nodes] = this._correspond(selector); - this.#pseudoElement = []; - this.#walkers = /* @__PURE__ */ new WeakMap(); - this.#nodeWalker = null; - this.#rootWalker = null; - this.#verifyShadowHost = null; - this.clearResults(); - return this; - }; - /** - * Clear cached results. - * @param {boolean} all - clear all results - * @returns {void} - */ - clearResults = (all = false) => { - this.#invalidateResults = /* @__PURE__ */ new WeakMap(); - if (all) { - this.#results = /* @__PURE__ */ new WeakMap(); - } - }; - /** - * Handles focus events. - * @private - * @param {Event} evt - The event object. - * @returns {void} - */ - _handleFocusEvent = (evt) => { - this.#focus = evt; - }; - /** - * Handles keyboard events. - * @private - * @param {Event} evt - The event object. - * @returns {void} - */ - _handleKeyboardEvent = (evt) => { - const { key } = evt; - if (!KEYS_MODIFIER.has(key)) { - this.#event = evt; - } - }; - /** - * Handles mouse events. - * @private - * @param {Event} evt - The event object. - * @returns {void} - */ - _handleMouseEvent = (evt) => { - this.#event = evt; - }; - /** - * Registers event listeners. - * @private - * @returns {Array.<void>} An array of return values from addEventListener. - */ - _registerEventListeners = () => { - const opt = { - capture: true, - passive: true - }; - const func = []; - for (const eventHandler of this.#eventHandlers) { - const { keys, handler } = eventHandler; - const l = keys.length; - for (let i = 0; i < l; i++) { - const key = keys[i]; - func.push(this.#window.addEventListener(key, handler, opt)); - } - } - return func; - }; - /** - * Processes selector branches into the internal AST structure. - * @private - * @param {Array.<Array.<object>>} branches - The branches from walkAST. - * @param {string} selector - The original selector for error reporting. - * @returns {{ast: Array, descendant: boolean}} - * An object with the AST, descendant flag. - */ - _processSelectorBranches = (branches, selector) => { - let descendant = false; - const ast = []; - const l = branches.length; - for (let i = 0; i < l; i++) { - const items = [...branches[i]]; - const branch = []; - let item = items.shift(); - if (item && item.type !== COMBINATOR) { - const leaves = /* @__PURE__ */ new Set(); - while (item) { - if (item.type === COMBINATOR) { - const [nextItem] = items; - if (!nextItem || nextItem.type === COMBINATOR) { - const msg = `Invalid selector ${selector}`; - this.onError(generateException(msg, SYNTAX_ERR, this.#window)); - return { ast: [], descendant: false, invalidate: false }; - } - if (item.name === " " || item.name === ">") { - descendant = true; - } - branch.push({ combo: item, leaves: sortAST(leaves) }); - leaves.clear(); - } else { - if (item.name && typeof item.name === "string") { - const unescapedName = unescapeSelector(item.name); - if (unescapedName !== item.name) { - item.name = unescapedName; - } - if (/[|:]/.test(unescapedName)) { - item.namespace = true; - } - } - leaves.add(item); - } - if (items.length) { - item = items.shift(); - } else { - branch.push({ combo: null, leaves: sortAST(leaves) }); - leaves.clear(); - break; - } - } - } - ast.push({ branch, dir: null, filtered: false, find: false }); - } - return { ast, descendant }; - }; - /** - * Corresponds AST and nodes. - * @private - * @param {string} selector - The CSS selector. - * @returns {Array.<Array.<object>>} An array with the AST and nodes. - */ - _correspond = (selector) => { - const nodes = []; - this.#descendant = false; - this.#invalidate = false; - let ast; - if (this.#documentCache.has(this.#document)) { - const cachedItem = this.#documentCache.get(this.#document); - if (cachedItem && cachedItem.has(`${selector}`)) { - const item = cachedItem.get(`${selector}`); - ast = item.ast; - this.#descendant = item.descendant; - this.#invalidate = item.invalidate; - } - } - if (ast) { - const l = ast.length; - for (let i = 0; i < l; i++) { - ast[i].dir = null; - ast[i].filtered = false; - ast[i].find = false; - nodes[i] = []; - } - } else { - let cssAst; - try { - cssAst = parseSelector(selector); - } catch (e) { - return this.onError(e); - } - const { branches, info } = walkAST(cssAst); - const { - hasHasPseudoFunc, - hasLogicalPseudoFunc, - hasNthChildOfSelector, - hasStatePseudoClass - } = info; - this.#invalidate = hasHasPseudoFunc || hasStatePseudoClass || !!(hasLogicalPseudoFunc && hasNthChildOfSelector); - const processed = this._processSelectorBranches(branches, selector); - ast = processed.ast; - this.#descendant = processed.descendant; - let cachedItem; - if (this.#documentCache.has(this.#document)) { - cachedItem = this.#documentCache.get(this.#document); - } else { - cachedItem = /* @__PURE__ */ new Map(); - } - cachedItem.set(`${selector}`, { - ast, - descendant: this.#descendant, - invalidate: this.#invalidate - }); - this.#documentCache.set(this.#document, cachedItem); - for (let i = 0; i < ast.length; i++) { - nodes[i] = []; - } - } - return [ast, nodes]; - }; - /** - * Creates a TreeWalker. - * @private - * @param {object} node - The Document, DocumentFragment, or Element node. - * @param {object} [opt] - Options. - * @param {boolean} [opt.force] - Force creation of a new TreeWalker. - * @param {number} [opt.whatToShow] - The NodeFilter whatToShow value. - * @returns {object} The TreeWalker object. - */ - _createTreeWalker = (node, opt = {}) => { - const { force = false, whatToShow = SHOW_CONTAINER } = opt; - if (force) { - return this.#document.createTreeWalker(node, whatToShow); - } else if (this.#walkers.has(node)) { - return this.#walkers.get(node); - } - const walker = this.#document.createTreeWalker(node, whatToShow); - this.#walkers.set(node, walker); - return walker; - }; - /** - * Gets selector branches from cache or parses them. - * @private - * @param {object} selector - The AST. - * @returns {Array.<Array.<object>>} The selector branches. - */ - _getSelectorBranches = (selector) => { - if (this.#astCache.has(selector)) { - return this.#astCache.get(selector); - } - const { branches } = walkAST(selector); - this.#astCache.set(selector, branches); - return branches; - }; - /** - * Gets the children of a node, optionally filtered by a selector. - * @private - * @param {object} parentNode - The parent element. - * @param {Array.<Array.<object>>} selectorBranches - The selector branches. - * @param {object} [opt] - Options. - * @returns {Array.<object>} An array of child nodes. - */ - _getFilteredChildren = (parentNode, selectorBranches, opt = {}) => { - const children = []; - const walker = this._createTreeWalker(parentNode, { force: true }); - let childNode = walker.firstChild(); - while (childNode) { - if (selectorBranches) { - if (isVisible(childNode)) { - let isMatch = false; - const l = selectorBranches.length; - for (let i = 0; i < l; i++) { - const leaves = selectorBranches[i]; - if (this._matchLeaves(leaves, childNode, opt)) { - isMatch = true; - break; - } - } - if (isMatch) { - children.push(childNode); - } - } - } else { - children.push(childNode); - } - childNode = walker.nextSibling(); - } - return children; - }; - /** - * Collects nth-child nodes. - * @private - * @param {object} anb - An+B options. - * @param {number} anb.a - The 'a' value. - * @param {number} anb.b - The 'b' value. - * @param {boolean} [anb.reverse] - If true, reverses the order. - * @param {object} [anb.selector] - The AST. - * @param {object} node - The Element node. - * @param {object} [opt] - Options. - * @returns {Set.<object>} A collection of matched nodes. - */ - _collectNthChild = (anb, node, opt = {}) => { - const { a, b, selector } = anb; - const { parentNode } = node; - if (!parentNode) { - const matchedNode = /* @__PURE__ */ new Set(); - if (node === this.#root && a * 1 + b * 1 === 1) { - if (selector) { - const selectorBranches2 = this._getSelectorBranches(selector); - const l = selectorBranches2.length; - for (let i = 0; i < l; i++) { - const leaves = selectorBranches2[i]; - if (this._matchLeaves(leaves, node, opt)) { - matchedNode.add(node); - break; - } - } - } else { - matchedNode.add(node); - } - } - return matchedNode; - } - const selectorBranches = selector ? this._getSelectorBranches(selector) : null; - const children = this._getFilteredChildren( - parentNode, - selectorBranches, - opt - ); - const matchedNodes = filterNodesByAnB(children, anb); - return new Set(matchedNodes); - }; - /** - * Collects nth-of-type nodes. - * @private - * @param {object} anb - An+B options. - * @param {number} anb.a - The 'a' value. - * @param {number} anb.b - The 'b' value. - * @param {boolean} [anb.reverse] - If true, reverses the order. - * @param {object} node - The Element node. - * @returns {Set.<object>} A collection of matched nodes. - */ - _collectNthOfType = (anb, node) => { - const { parentNode } = node; - if (!parentNode) { - if (node === this.#root && anb.a * 1 + anb.b * 1 === 1) { - return /* @__PURE__ */ new Set([node]); - } - return /* @__PURE__ */ new Set(); - } - const typedSiblings = []; - const walker = this._createTreeWalker(parentNode, { force: true }); - let sibling = walker.firstChild(); - while (sibling) { - if (sibling.localName === node.localName && sibling.namespaceURI === node.namespaceURI && sibling.prefix === node.prefix) { - typedSiblings.push(sibling); - } - sibling = walker.nextSibling(); - } - const matchedNodes = filterNodesByAnB(typedSiblings, anb); - return new Set(matchedNodes); - }; - /** - * Matches An+B. - * @private - * @param {object} ast - The AST. - * @param {object} node - The Element node. - * @param {string} nthName - The name of the nth pseudo-class. - * @param {object} [opt] - Options. - * @returns {Set.<object>} A collection of matched nodes. - */ - _matchAnPlusB = (ast, node, nthName, opt = {}) => { - const { - nth: { a, b, name: nthIdentName }, - selector - } = ast; - const anbMap = /* @__PURE__ */ new Map(); - if (nthIdentName) { - if (nthIdentName === "even") { - anbMap.set("a", 2); - anbMap.set("b", 0); - } else if (nthIdentName === "odd") { - anbMap.set("a", 2); - anbMap.set("b", 1); - } - if (nthName.indexOf("last") > -1) { - anbMap.set("reverse", true); - } - } else { - if (typeof a === "string" && /-?\d+/.test(a)) { - anbMap.set("a", a * 1); - } else { - anbMap.set("a", 0); - } - if (typeof b === "string" && /-?\d+/.test(b)) { - anbMap.set("b", b * 1); - } else { - anbMap.set("b", 0); - } - if (nthName.indexOf("last") > -1) { - anbMap.set("reverse", true); - } - } - if (nthName === "nth-child" || nthName === "nth-last-child") { - if (selector) { - anbMap.set("selector", selector); - } - const anb = Object.fromEntries(anbMap); - const nodes = this._collectNthChild(anb, node, opt); - return nodes; - } else if (nthName === "nth-of-type" || nthName === "nth-last-of-type") { - const anb = Object.fromEntries(anbMap); - const nodes = this._collectNthOfType(anb, node); - return nodes; - } - return /* @__PURE__ */ new Set(); - }; - /** - * Matches the :has() pseudo-class function. - * @private - * @param {Array.<object>} astLeaves - The AST leaves. - * @param {object} node - The Element node. - * @param {object} [opt] - Options. - * @returns {boolean} The result. - */ - _matchHasPseudoFunc = (astLeaves, node, opt = {}) => { - if (Array.isArray(astLeaves) && astLeaves.length) { - const leaves = [...astLeaves]; - const [leaf] = leaves; - const { type: leafType } = leaf; - let combo; - if (leafType === COMBINATOR) { - combo = leaves.shift(); - } else { - combo = { - name: " ", - type: COMBINATOR - }; - } - const twigLeaves = []; - while (leaves.length) { - const [item] = leaves; - const { type: itemType } = item; - if (itemType === COMBINATOR) { - break; - } else { - twigLeaves.push(leaves.shift()); - } - } - const twig = { - combo, - leaves: twigLeaves - }; - opt.dir = DIR_NEXT; - const nodes = this._matchCombinator(twig, node, opt); - if (nodes.size) { - if (leaves.length) { - let bool = false; - for (const nextNode of nodes) { - bool = this._matchHasPseudoFunc(leaves, nextNode, opt); - if (bool) { - break; - } - } - return bool; - } - return true; - } - } - return false; - }; - /** - * Evaluates the :has() pseudo-class. - * @private - * @param {object} astData - The AST data. - * @param {object} node - The Element node. - * @param {object} [opt] - Options. - * @returns {?object} The matched node. - */ - _evaluateHasPseudo = (astData, node, opt) => { - const { branches } = astData; - let bool = false; - const l = branches.length; - for (let i = 0; i < l; i++) { - const leaves = branches[i]; - bool = this._matchHasPseudoFunc(leaves, node, opt); - if (bool) { - break; - } - } - if (!bool) { - return null; - } - if ((opt.isShadowRoot || this.#shadow) && node.nodeType === DOCUMENT_FRAGMENT_NODE) { - return this.#verifyShadowHost ? node : null; - } - return node; - }; - /** - * Matches logical pseudo-class functions. - * @private - * @param {object} astData - The AST data. - * @param {object} node - The Element node. - * @param {object} [opt] - Options. - * @returns {?object} The matched node. - */ - _matchLogicalPseudoFunc = (astData, node, opt = {}) => { - const { astName, branches, twigBranches } = astData; - if (astName === "has") { - return this._evaluateHasPseudo(astData, node, opt); - } - const isShadowRoot = (opt.isShadowRoot || this.#shadow) && node.nodeType === DOCUMENT_FRAGMENT_NODE; - if (isShadowRoot) { - let invalid = false; - for (const branch of branches) { - if (branch.length > 1) { - invalid = true; - break; - } else if (astName === "not") { - const [{ type: childAstType }] = branch; - if (childAstType !== PS_CLASS_SELECTOR) { - invalid = true; - break; - } - } - } - if (invalid) { - return null; - } - } - opt.forgive = astName === "is" || astName === "where"; - const l = twigBranches.length; - let bool; - for (let i = 0; i < l; i++) { - const branch = twigBranches[i]; - const lastIndex = branch.length - 1; - const { leaves } = branch[lastIndex]; - bool = this._matchLeaves(leaves, node, opt); - if (bool && lastIndex > 0) { - let nextNodes = /* @__PURE__ */ new Set([node]); - for (let j = lastIndex - 1; j >= 0; j--) { - const twig = branch[j]; - const arr = []; - opt.dir = DIR_PREV; - for (const nextNode of nextNodes) { - const m = this._matchCombinator(twig, nextNode, opt); - if (m.size) { - arr.push(...m); - } - } - if (arr.length) { - if (j === 0) { - bool = true; - } else { - nextNodes = new Set(arr); - } - } else { - bool = false; - break; - } - } - } - if (bool) { - break; - } - } - if (astName === "not") { - if (bool) { - return null; - } - return node; - } else if (bool) { - return node; - } - return null; - }; - /** - * match pseudo-class selector - * @private - * @see https://html.spec.whatwg.org/#pseudo-classes - * @param {object} ast - AST - * @param {object} node - Element node - * @param {object} [opt] - options - * @returns {Set.<object>} - collection of matched nodes - */ - _matchPseudoClassSelector(ast, node, opt = {}) { - const { children: astChildren, name: astName } = ast; - const { localName, parentNode } = node; - const { forgive, warn = this.#warn } = opt; - const matched = /* @__PURE__ */ new Set(); - if (Array.isArray(astChildren) && KEYS_LOGICAL.has(astName)) { - if (!astChildren.length && astName !== "is" && astName !== "where") { - const css = (0, import_css_tree.generate)(ast); - const msg = `Invalid selector ${css}`; - return this.onError(generateException(msg, SYNTAX_ERR, this.#window)); - } - let astData; - if (this.#astCache.has(ast)) { - astData = this.#astCache.get(ast); - } else { - const { branches } = walkAST(ast); - if (astName === "has") { - let forgiven = false; - const l = astChildren.length; - for (let i = 0; i < l; i++) { - const child = astChildren[i]; - const item = (0, import_css_tree.find)(child, findLogicalWithNestedHas); - if (item) { - const itemName = item.name; - if (itemName === "is" || itemName === "where") { - forgiven = true; - break; - } else { - const css = (0, import_css_tree.generate)(ast); - const msg = `Invalid selector ${css}`; - return this.onError( - generateException(msg, SYNTAX_ERR, this.#window) - ); - } - } - } - if (forgiven) { - return matched; - } - astData = { - astName, - branches - }; - } else { - const twigBranches = []; - const l = branches.length; - for (let i = 0; i < l; i++) { - const [...leaves] = branches[i]; - const branch = []; - const leavesSet = /* @__PURE__ */ new Set(); - let item = leaves.shift(); - while (item) { - if (item.type === COMBINATOR) { - branch.push({ - combo: item, - leaves: [...leavesSet] - }); - leavesSet.clear(); - } else if (item) { - leavesSet.add(item); - } - if (leaves.length) { - item = leaves.shift(); - } else { - branch.push({ - combo: null, - leaves: [...leavesSet] - }); - leavesSet.clear(); - break; - } - } - twigBranches.push(branch); - } - astData = { - astName, - branches, - twigBranches - }; - this.#astCache.set(ast, astData); - } - } - const res = this._matchLogicalPseudoFunc(astData, node, opt); - if (res) { - matched.add(res); - } - } else if (Array.isArray(astChildren)) { - if (/^nth-(?:last-)?(?:child|of-type)$/.test(astName)) { - if (astChildren.length !== 1) { - const css = (0, import_css_tree.generate)(ast); - return this.onError( - generateException( - `Invalid selector ${css}`, - SYNTAX_ERR, - this.#window - ) - ); - } - const [branch] = astChildren; - const nodes = this._matchAnPlusB(branch, node, astName, opt); - return nodes; - } else { - switch (astName) { - // :dir() - case "dir": { - if (astChildren.length !== 1) { - const css = (0, import_css_tree.generate)(ast); - return this.onError( - generateException( - `Invalid selector ${css}`, - SYNTAX_ERR, - this.#window - ) - ); - } - const [astChild] = astChildren; - const res = matchDirectionPseudoClass(astChild, node); - if (res) { - matched.add(node); - } - break; - } - // :lang() - case "lang": { - if (!astChildren.length) { - const css = (0, import_css_tree.generate)(ast); - return this.onError( - generateException( - `Invalid selector ${css}`, - SYNTAX_ERR, - this.#window - ) - ); - } - let bool; - for (const astChild of astChildren) { - bool = matchLanguagePseudoClass(astChild, node); - if (bool) { - break; - } - } - if (bool) { - matched.add(node); - } - break; - } - // :state() - case "state": { - if (isCustomElement(node)) { - const [{ value: stateValue }] = astChildren; - if (stateValue) { - if (node[stateValue]) { - matched.add(node); - } else { - for (const i in node) { - const prop = node[i]; - if (prop instanceof this.#window.ElementInternals) { - if (prop?.states?.has(stateValue)) { - matched.add(node); - } - break; - } - } - } - } - } - break; - } - case "current": - case "heading": - case "nth-col": - case "nth-last-col": { - if (warn) { - this.onError( - generateException( - `Unsupported pseudo-class :${astName}()`, - NOT_SUPPORTED_ERR, - this.#window - ) - ); - } - break; - } - // Ignore :host() and :host-context(). - case "host": - case "host-context": { - break; - } - // Deprecated in CSS Selectors 3. - case "contains": { - if (warn) { - this.onError( - generateException( - `Unknown pseudo-class :${astName}()`, - NOT_SUPPORTED_ERR, - this.#window - ) - ); - } - break; - } - default: { - if (!forgive) { - this.onError( - generateException( - `Unknown pseudo-class :${astName}()`, - SYNTAX_ERR, - this.#window - ) - ); - } - } - } - } - } else if (KEYS_PS_NTH_OF_TYPE.has(astName)) { - if (node === this.#root) { - matched.add(node); - } else if (parentNode) { - switch (astName) { - case "first-of-type": { - const [node1] = this._collectNthOfType( - { - a: 0, - b: 1 - }, - node - ); - if (node1) { - matched.add(node1); - } - break; - } - case "last-of-type": { - const [node1] = this._collectNthOfType( - { - a: 0, - b: 1, - reverse: true - }, - node - ); - if (node1) { - matched.add(node1); - } - break; - } - // 'only-of-type' is handled by default. - default: { - const [node1] = this._collectNthOfType( - { - a: 0, - b: 1 - }, - node - ); - if (node1 === node) { - const [node2] = this._collectNthOfType( - { - a: 0, - b: 1, - reverse: true - }, - node - ); - if (node2 === node) { - matched.add(node); - } - } - } - } - } - } else { - switch (astName) { - case "disabled": - case "enabled": { - const isMatch = matchDisabledPseudoClass(astName, node); - if (isMatch) { - matched.add(node); - } - break; - } - case "read-only": - case "read-write": { - const isMatch = matchReadOnlyPseudoClass(astName, node); - if (isMatch) { - matched.add(node); - } - break; - } - case "any-link": - case "link": { - if ((localName === "a" || localName === "area") && node.hasAttribute("href")) { - matched.add(node); - } - break; - } - case "local-link": { - if ((localName === "a" || localName === "area") && node.hasAttribute("href")) { - if (!this.#documentURL) { - this.#documentURL = new URL(this.#document.URL); - } - const { href, origin, pathname } = this.#documentURL; - const attrURL = new URL(node.getAttribute("href"), href); - if (attrURL.origin === origin && attrURL.pathname === pathname) { - matched.add(node); - } - } - break; - } - case "visited": { - break; - } - case "hover": { - const { target, type } = this.#event ?? {}; - if (/^(?:click|mouse(?:down|over|up))$/.test(type) && node.contains(target)) { - matched.add(node); - } - break; - } - case "active": { - const { buttons, target, type } = this.#event ?? {}; - if (type === "mousedown" && buttons & 1 && node.contains(target)) { - matched.add(node); - } - break; - } - case "target": { - if (!this.#documentURL) { - this.#documentURL = new URL(this.#document.URL); - } - const { hash } = this.#documentURL; - if (node.id && hash === `#${node.id}` && this.#document.contains(node)) { - matched.add(node); - } - break; - } - case "target-within": { - if (!this.#documentURL) { - this.#documentURL = new URL(this.#document.URL); - } - const { hash } = this.#documentURL; - if (hash) { - const id = hash.replace(/^#/, ""); - let current = this.#document.getElementById(id); - while (current) { - if (current === node) { - matched.add(node); - break; - } - current = current.parentNode; - } - } - break; - } - case "scope": { - if (this.#node.nodeType === ELEMENT_NODE) { - if (!this.#shadow && node === this.#node) { - matched.add(node); - } - } else if (node === this.#document.documentElement) { - matched.add(node); - } - break; - } - case "focus": { - const activeElement = this.#document.activeElement; - if (node === activeElement && isFocusableArea(node)) { - matched.add(node); - } else if (activeElement.shadowRoot) { - const activeShadowElement = activeElement.shadowRoot.activeElement; - let current = activeShadowElement; - while (current) { - if (current.nodeType === DOCUMENT_FRAGMENT_NODE) { - const { host } = current; - if (host === activeElement) { - if (isFocusableArea(node)) { - matched.add(node); - } else { - matched.add(host); - } - } - break; - } else { - current = current.parentNode; - } - } - } - break; - } - case "focus-visible": { - if (node === this.#document.activeElement && isFocusableArea(node)) { - let bool; - if (isFocusVisible(node)) { - bool = true; - } else if (this.#focus) { - const { relatedTarget, target: focusTarget } = this.#focus; - if (focusTarget === node) { - if (isFocusVisible(relatedTarget)) { - bool = true; - } else if (this.#event) { - const { - altKey: eventAltKey, - ctrlKey: eventCtrlKey, - key: eventKey, - metaKey: eventMetaKey, - target: eventTarget, - type: eventType - } = this.#event; - if (eventTarget === relatedTarget) { - if (this.#lastFocusVisible === null) { - bool = true; - } else if (focusTarget === this.#lastFocusVisible) { - bool = true; - } - } else if (eventKey === "Tab") { - if (eventType === "keydown" && eventTarget !== node || eventType === "keyup" && eventTarget === node) { - if (eventTarget === focusTarget) { - if (this.#lastFocusVisible === null) { - bool = true; - } else if (eventTarget === this.#lastFocusVisible && relatedTarget === null) { - bool = true; - } - } else { - bool = true; - } - } - } else if (eventKey) { - if ((eventType === "keydown" || eventType === "keyup") && !eventAltKey && !eventCtrlKey && !eventMetaKey && eventTarget === node) { - bool = true; - } - } - } else if (relatedTarget === null || relatedTarget === this.#lastFocusVisible) { - bool = true; - } - } - } - if (bool) { - this.#lastFocusVisible = node; - matched.add(node); - } else if (this.#lastFocusVisible === node) { - this.#lastFocusVisible = null; - } - } - break; - } - case "focus-within": { - const activeElement = this.#document.activeElement; - if (node.contains(activeElement) && isFocusableArea(activeElement)) { - matched.add(node); - } else if (activeElement.shadowRoot) { - const activeShadowElement = activeElement.shadowRoot.activeElement; - if (node.contains(activeShadowElement)) { - matched.add(node); - } else { - let current = activeShadowElement; - while (current) { - if (current.nodeType === DOCUMENT_FRAGMENT_NODE) { - const { host } = current; - if (host === activeElement && node.contains(host)) { - matched.add(node); - } - break; - } else { - current = current.parentNode; - } - } - } - } - break; - } - case "open": - case "closed": { - if (localName === "details" || localName === "dialog") { - if (node.hasAttribute("open")) { - if (astName === "open") { - matched.add(node); - } - } else if (astName === "closed") { - matched.add(node); - } - } - break; - } - case "placeholder-shown": { - let placeholder; - if (node.placeholder) { - placeholder = node.placeholder; - } else if (node.hasAttribute("placeholder")) { - placeholder = node.getAttribute("placeholder"); - } - if (typeof placeholder === "string" && !/[\r\n]/.test(placeholder)) { - let targetNode; - if (localName === "textarea") { - targetNode = node; - } else if (localName === "input") { - if (node.hasAttribute("type")) { - if (KEYS_INPUT_PLACEHOLDER.has(node.getAttribute("type"))) { - targetNode = node; - } - } else { - targetNode = node; - } - } - if (targetNode && node.value === "") { - matched.add(node); - } - } - break; - } - case "checked": { - const attrType = node.getAttribute("type"); - if (node.checked && localName === "input" && (attrType === "checkbox" || attrType === "radio") || node.selected && localName === "option") { - matched.add(node); - } - break; - } - case "indeterminate": { - if (node.indeterminate && localName === "input" && node.type === "checkbox" || localName === "progress" && !node.hasAttribute("value")) { - matched.add(node); - } else if (localName === "input" && node.type === "radio" && !node.hasAttribute("checked")) { - const nodeName = node.name; - let parent = node.parentNode; - while (parent) { - if (parent.localName === "form") { - break; - } - parent = parent.parentNode; - } - if (!parent) { - parent = this.#document.documentElement; - } - const walker = this._createTreeWalker(parent); - let refNode = traverseNode(parent, walker); - refNode = walker.firstChild(); - let checked; - while (refNode) { - if (refNode.localName === "input" && refNode.getAttribute("type") === "radio") { - if (refNode.hasAttribute("name")) { - if (refNode.getAttribute("name") === nodeName) { - checked = !!refNode.checked; - } - } else { - checked = !!refNode.checked; - } - if (checked) { - break; - } - } - refNode = walker.nextNode(); - } - if (!checked) { - matched.add(node); - } - } - break; - } - case "default": { - const attrType = node.getAttribute("type"); - if (localName === "button" && !(node.hasAttribute("type") && KEYS_INPUT_RESET.has(attrType)) || localName === "input" && node.hasAttribute("type") && KEYS_INPUT_SUBMIT.has(attrType)) { - let form = node.parentNode; - while (form) { - if (form.localName === "form") { - break; - } - form = form.parentNode; - } - if (form) { - const walker = this._createTreeWalker(form); - let refNode = traverseNode(form, walker); - refNode = walker.firstChild(); - while (refNode) { - const nodeName = refNode.localName; - const nodeAttrType = refNode.getAttribute("type"); - let m; - if (nodeName === "button") { - m = !(refNode.hasAttribute("type") && KEYS_INPUT_RESET.has(nodeAttrType)); - } else if (nodeName === "input") { - m = refNode.hasAttribute("type") && KEYS_INPUT_SUBMIT.has(nodeAttrType); - } - if (m) { - if (refNode === node) { - matched.add(node); - } - break; - } - refNode = walker.nextNode(); - } - } - } else if (localName === "input" && node.hasAttribute("type") && node.hasAttribute("checked") && KEYS_INPUT_CHECK.has(attrType)) { - matched.add(node); - } else if (localName === "option" && node.hasAttribute("selected")) { - matched.add(node); - } - break; - } - case "valid": - case "invalid": { - if (KEYS_FORM_PS_VALID.has(localName)) { - let valid; - if (node.checkValidity()) { - if (node.maxLength >= 0) { - if (node.maxLength >= node.value.length) { - valid = true; - } - } else { - valid = true; - } - } - if (valid) { - if (astName === "valid") { - matched.add(node); - } - } else if (astName === "invalid") { - matched.add(node); - } - } else if (localName === "fieldset") { - const walker = this._createTreeWalker(node); - let refNode = traverseNode(node, walker); - refNode = walker.firstChild(); - let valid; - if (!refNode) { - valid = true; - } else { - while (refNode) { - if (KEYS_FORM_PS_VALID.has(refNode.localName)) { - if (refNode.checkValidity()) { - if (refNode.maxLength >= 0) { - valid = refNode.maxLength >= refNode.value.length; - } else { - valid = true; - } - } else { - valid = false; - } - if (!valid) { - break; - } - } - refNode = walker.nextNode(); - } - } - if (valid) { - if (astName === "valid") { - matched.add(node); - } - } else if (astName === "invalid") { - matched.add(node); - } - } - break; - } - case "in-range": - case "out-of-range": { - const attrType = node.getAttribute("type"); - if (localName === "input" && !(node.readonly || node.hasAttribute("readonly")) && !(node.disabled || node.hasAttribute("disabled")) && KEYS_INPUT_RANGE.has(attrType)) { - const flowed = node.validity.rangeUnderflow || node.validity.rangeOverflow; - if (astName === "out-of-range" && flowed) { - matched.add(node); - } else if (astName === "in-range" && !flowed && (node.hasAttribute("min") || node.hasAttribute("max") || attrType === "range")) { - matched.add(node); - } - } - break; - } - case "required": - case "optional": { - let required; - let optional; - if (localName === "select" || localName === "textarea") { - if (node.required || node.hasAttribute("required")) { - required = true; - } else { - optional = true; - } - } else if (localName === "input") { - if (node.hasAttribute("type")) { - const attrType = node.getAttribute("type"); - if (KEYS_INPUT_REQUIRED.has(attrType)) { - if (node.required || node.hasAttribute("required")) { - required = true; - } else { - optional = true; - } - } else { - optional = true; - } - } else if (node.required || node.hasAttribute("required")) { - required = true; - } else { - optional = true; - } - } - if (astName === "required" && required) { - matched.add(node); - } else if (astName === "optional" && optional) { - matched.add(node); - } - break; - } - case "root": { - if (node === this.#document.documentElement) { - matched.add(node); - } - break; - } - case "empty": { - if (node.hasChildNodes()) { - const walker = this._createTreeWalker(node, { - force: true, - whatToShow: SHOW_ALL - }); - let refNode = walker.firstChild(); - let bool; - while (refNode) { - bool = refNode.nodeType !== ELEMENT_NODE && refNode.nodeType !== TEXT_NODE; - if (!bool) { - break; - } - refNode = walker.nextSibling(); - } - if (bool) { - matched.add(node); - } - } else { - matched.add(node); - } - break; - } - case "first-child": { - if (parentNode && node === parentNode.firstElementChild || node === this.#root) { - matched.add(node); - } - break; - } - case "last-child": { - if (parentNode && node === parentNode.lastElementChild || node === this.#root) { - matched.add(node); - } - break; - } - case "only-child": { - if (parentNode && node === parentNode.firstElementChild && node === parentNode.lastElementChild || node === this.#root) { - matched.add(node); - } - break; - } - case "defined": { - if (node.hasAttribute("is") || localName.includes("-")) { - if (isCustomElement(node)) { - matched.add(node); - } - } else if (node instanceof this.#window.HTMLElement || node instanceof this.#window.SVGElement) { - matched.add(node); - } - break; - } - case "popover-open": { - if (node.popover && isVisible(node)) { - matched.add(node); - } - break; - } - // Ignore :host. - case "host": { - break; - } - // Legacy pseudo-elements. - case "after": - case "before": - case "first-letter": - case "first-line": { - if (warn) { - this.onError( - generateException( - `Unsupported pseudo-element ::${astName}`, - NOT_SUPPORTED_ERR, - this.#window - ) - ); - } - break; - } - // Not supported. - case "autofill": - case "blank": - case "buffering": - case "current": - case "fullscreen": - case "future": - case "has-slotted": - case "heading": - case "modal": - case "muted": - case "past": - case "paused": - case "picture-in-picture": - case "playing": - case "seeking": - case "stalled": - case "user-invalid": - case "user-valid": - case "volume-locked": - case "-webkit-autofill": { - if (warn) { - this.onError( - generateException( - `Unsupported pseudo-class :${astName}`, - NOT_SUPPORTED_ERR, - this.#window - ) - ); - } - break; - } - default: { - if (astName.startsWith("-webkit-")) { - if (warn) { - this.onError( - generateException( - `Unsupported pseudo-class :${astName}`, - NOT_SUPPORTED_ERR, - this.#window - ) - ); - } - } else if (!forgive) { - this.onError( - generateException( - `Unknown pseudo-class :${astName}`, - SYNTAX_ERR, - this.#window - ) - ); - } - } - } - } - return matched; - } - /** - * Evaluates the :host() pseudo-class. - * @private - * @param {Array.<object>} leaves - The AST leaves. - * @param {object} host - The host element. - * @param {object} ast - The original AST for error reporting. - * @returns {boolean} True if matched. - */ - _evaluateHostPseudo = (leaves, host, ast) => { - const l = leaves.length; - for (let i = 0; i < l; i++) { - const leaf = leaves[i]; - if (leaf.type === COMBINATOR) { - const css = (0, import_css_tree.generate)(ast); - const msg = `Invalid selector ${css}`; - this.onError(generateException(msg, SYNTAX_ERR, this.#window)); - return false; - } - if (!this._matchSelector(leaf, host).has(host)) { - return false; - } - } - return true; - }; - /** - * Evaluates the :host-context() pseudo-class. - * @private - * @param {Array.<object>} leaves - The AST leaves. - * @param {object} host - The host element. - * @param {object} ast - The original AST for error reporting. - * @returns {boolean} True if matched. - */ - _evaluateHostContextPseudo = (leaves, host, ast) => { - let parent = host; - while (parent) { - let bool; - const l = leaves.length; - for (let i = 0; i < l; i++) { - const leaf = leaves[i]; - if (leaf.type === COMBINATOR) { - const css = (0, import_css_tree.generate)(ast); - const msg = `Invalid selector ${css}`; - this.onError(generateException(msg, SYNTAX_ERR, this.#window)); - return false; - } - bool = this._matchSelector(leaf, parent).has(parent); - if (!bool) { - break; - } - } - if (bool) { - return true; - } - parent = parent.parentNode; - } - return false; - }; - /** - * Matches shadow host pseudo-classes. - * @private - * @param {object} ast - The AST. - * @param {object} node - The DocumentFragment node. - * @returns {?object} The matched node. - */ - _matchShadowHostPseudoClass = (ast, node) => { - const { children: astChildren, name: astName } = ast; - if (!Array.isArray(astChildren)) { - if (astName === "host") { - return node; - } - const msg = `Invalid selector :${astName}`; - return this.onError(generateException(msg, SYNTAX_ERR, this.#window)); - } - if (astName !== "host" && astName !== "host-context") { - const msg = `Invalid selector :${astName}()`; - return this.onError(generateException(msg, SYNTAX_ERR, this.#window)); - } - if (astChildren.length !== 1) { - const css = (0, import_css_tree.generate)(ast); - const msg = `Invalid selector ${css}`; - return this.onError(generateException(msg, SYNTAX_ERR, this.#window)); - } - const { host } = node; - const { branches } = walkAST(astChildren[0]); - const [branch] = branches; - const [...leaves] = branch; - let isMatch = false; - if (astName === "host") { - isMatch = this._evaluateHostPseudo(leaves, host, ast); - } else { - isMatch = this._evaluateHostContextPseudo(leaves, host, ast); - } - return isMatch ? node : null; - }; - /** - * Matches a selector for element nodes. - * @private - * @param {object} ast - The AST. - * @param {object} node - The Element node. - * @param {object} [opt] - Options. - * @returns {Set.<object>} A collection of matched nodes. - */ - _matchSelectorForElement = (ast, node, opt = {}) => { - const { type: astType } = ast; - const astName = unescapeSelector(ast.name); - const matched = /* @__PURE__ */ new Set(); - switch (astType) { - case ATTR_SELECTOR: { - if (matchAttributeSelector(ast, node, opt)) { - matched.add(node); - } - break; - } - case ID_SELECTOR: { - if (node.id === astName) { - matched.add(node); - } - break; - } - case CLASS_SELECTOR: { - if (node.classList.contains(astName)) { - matched.add(node); - } - break; - } - case PS_CLASS_SELECTOR: { - return this._matchPseudoClassSelector(ast, node, opt); - } - case TYPE_SELECTOR: { - if (matchTypeSelector(ast, node, opt)) { - matched.add(node); - } - break; - } - // PS_ELEMENT_SELECTOR is handled by default. - default: { - try { - if (opt.check) { - const css = (0, import_css_tree.generate)(ast); - this.#pseudoElement.push(css); - matched.add(node); - } else { - matchPseudoElementSelector(astName, astType, opt); - } - } catch (e) { - this.onError(e); - } - } - } - return matched; - }; - /** - * Matches a selector for a shadow root. - * @private - * @param {object} ast - The AST. - * @param {object} node - The DocumentFragment node. - * @param {object} [opt] - Options. - * @returns {Set.<object>} A collection of matched nodes. - */ - _matchSelectorForShadowRoot = (ast, node, opt = {}) => { - const { name: astName } = ast; - if (KEYS_LOGICAL.has(astName)) { - opt.isShadowRoot = true; - return this._matchPseudoClassSelector(ast, node, opt); - } - const matched = /* @__PURE__ */ new Set(); - if (astName === "host" || astName === "host-context") { - const res = this._matchShadowHostPseudoClass(ast, node, opt); - if (res) { - this.#verifyShadowHost = true; - matched.add(res); - } - } - return matched; - }; - /** - * Matches a selector. - * @private - * @param {object} ast - The AST. - * @param {object} node - The Document, DocumentFragment, or Element node. - * @param {object} [opt] - Options. - * @returns {Set.<object>} A collection of matched nodes. - */ - _matchSelector = (ast, node, opt = {}) => { - if (node.nodeType === ELEMENT_NODE) { - return this._matchSelectorForElement(ast, node, opt); - } - if (this.#shadow && node.nodeType === DOCUMENT_FRAGMENT_NODE && ast.type === PS_CLASS_SELECTOR) { - return this._matchSelectorForShadowRoot(ast, node, opt); - } - return /* @__PURE__ */ new Set(); - }; - /** - * Matches leaves. - * @private - * @param {Array.<object>} leaves - The AST leaves. - * @param {object} node - The node. - * @param {object} [opt] - Options. - * @returns {boolean} The result. - */ - _matchLeaves = (leaves, node, opt = {}) => { - const results = this.#invalidate ? this.#invalidateResults : this.#results; - let result = results.get(leaves); - if (result && result.has(node)) { - const { matched } = result.get(node); - return matched; - } - let cacheable = true; - if (node.nodeType === ELEMENT_NODE && KEYS_FORM.has(node.localName)) { - cacheable = false; - } - let bool; - const l = leaves.length; - for (let i = 0; i < l; i++) { - const leaf = leaves[i]; - switch (leaf.type) { - case ATTR_SELECTOR: - case ID_SELECTOR: { - cacheable = false; - break; - } - case PS_CLASS_SELECTOR: { - if (KEYS_PS_UNCACHE.has(leaf.name)) { - cacheable = false; - } - break; - } - default: { - } - } - bool = this._matchSelector(leaf, node, opt).has(node); - if (!bool) { - break; - } - } - if (cacheable) { - if (!result) { - result = /* @__PURE__ */ new WeakMap(); - } - result.set(node, { - matched: bool - }); - results.set(leaves, result); - } - return bool; - }; - /** - * Traverses all descendant nodes and collects matches. - * @private - * @param {object} baseNode - The base Element node or Element.shadowRoot. - * @param {Array.<object>} leaves - The AST leaves. - * @param {object} [opt] - Options. - * @returns {Set.<object>} A collection of matched nodes. - */ - _traverseAllDescendants = (baseNode, leaves, opt = {}) => { - const walker = this._createTreeWalker(baseNode); - traverseNode(baseNode, walker); - let currentNode = walker.firstChild(); - const nodes = /* @__PURE__ */ new Set(); - while (currentNode) { - if (this._matchLeaves(leaves, currentNode, opt)) { - nodes.add(currentNode); - } - currentNode = walker.nextNode(); - } - return nodes; - }; - /** - * Finds descendant nodes. - * @private - * @param {Array.<object>} leaves - The AST leaves. - * @param {object} baseNode - The base Element node or Element.shadowRoot. - * @param {object} [opt] - Options. - * @returns {Set.<object>} A collection of matched nodes. - */ - _findDescendantNodes = (leaves, baseNode, opt = {}) => { - const [leaf, ...filterLeaves] = leaves; - const { type: leafType } = leaf; - switch (leafType) { - case ID_SELECTOR: { - const canUseGetElementById = !this.#shadow && baseNode.nodeType === ELEMENT_NODE && this.#root.nodeType !== ELEMENT_NODE; - if (canUseGetElementById) { - const leafName = unescapeSelector(leaf.name); - const nodes = /* @__PURE__ */ new Set(); - const foundNode = this.#root.getElementById(leafName); - if (foundNode && foundNode !== baseNode && baseNode.contains(foundNode)) { - const isCompoundSelector = filterLeaves.length > 0; - if (!isCompoundSelector || this._matchLeaves(filterLeaves, foundNode, opt)) { - nodes.add(foundNode); - } - } - return nodes; - } - return this._traverseAllDescendants(baseNode, leaves, opt); - } - case PS_ELEMENT_SELECTOR: { - const leafName = unescapeSelector(leaf.name); - matchPseudoElementSelector(leafName, leafType, opt); - return /* @__PURE__ */ new Set(); - } - default: { - return this._traverseAllDescendants(baseNode, leaves, opt); - } - } - }; - /** - * Matches the descendant combinator ' '. - * @private - * @param {object} twig - The twig object. - * @param {object} node - The Element node. - * @param {object} [opt] - Options. - * @returns {Set.<object>} A collection of matched nodes. - */ - _matchDescendantCombinator = (twig, node, opt = {}) => { - const { leaves } = twig; - const { parentNode } = node; - const { dir } = opt; - if (dir === DIR_NEXT) { - return this._findDescendantNodes(leaves, node, opt); - } - const ancestors = []; - let refNode = parentNode; - while (refNode) { - if (this._matchLeaves(leaves, refNode, opt)) { - ancestors.push(refNode); - } - refNode = refNode.parentNode; - } - if (ancestors.length) { - return new Set(ancestors.reverse()); - } - return /* @__PURE__ */ new Set(); - }; - /** - * Matches the child combinator '>'. - * @private - * @param {object} twig - The twig object. - * @param {object} node - The Element node. - * @param {object} [opt] - Options. - * @returns {Set.<object>} A collection of matched nodes. - */ - _matchChildCombinator = (twig, node, opt = {}) => { - const { leaves } = twig; - const { dir } = opt; - const { parentNode } = node; - const matched = /* @__PURE__ */ new Set(); - if (dir === DIR_NEXT) { - let refNode = node.firstElementChild; - while (refNode) { - if (this._matchLeaves(leaves, refNode, opt)) { - matched.add(refNode); - } - refNode = refNode.nextElementSibling; - } - } else { - if (parentNode && this._matchLeaves(leaves, parentNode, opt)) { - matched.add(parentNode); - } - } - return matched; - }; - /** - * Matches the adjacent sibling combinator '+'. - * @private - * @param {object} twig - The twig object. - * @param {object} node - The Element node. - * @param {object} [opt] - Options. - * @returns {Set.<object>} A collection of matched nodes. - */ - _matchAdjacentSiblingCombinator = (twig, node, opt = {}) => { - const { leaves } = twig; - const { dir } = opt; - const matched = /* @__PURE__ */ new Set(); - const refNode = dir === DIR_NEXT ? node.nextElementSibling : node.previousElementSibling; - if (refNode && this._matchLeaves(leaves, refNode, opt)) { - matched.add(refNode); - } - return matched; - }; - /** - * Matches the general sibling combinator '~'. - * @private - * @param {object} twig - The twig object. - * @param {object} node - The Element node. - * @param {object} [opt] - Options. - * @returns {Set.<object>} A collection of matched nodes. - */ - _matchGeneralSiblingCombinator = (twig, node, opt = {}) => { - const { leaves } = twig; - const { dir } = opt; - const matched = /* @__PURE__ */ new Set(); - let refNode = dir === DIR_NEXT ? node.nextElementSibling : node.previousElementSibling; - while (refNode) { - if (this._matchLeaves(leaves, refNode, opt)) { - matched.add(refNode); - } - refNode = dir === DIR_NEXT ? refNode.nextElementSibling : refNode.previousElementSibling; - } - return matched; - }; - /** - * Matches a combinator. - * @private - * @param {object} twig - The twig object. - * @param {object} node - The Element node. - * @param {object} [opt] - Options. - * @returns {Set.<object>} A collection of matched nodes. - */ - _matchCombinator = (twig, node, opt = {}) => { - const { - combo: { name: comboName } - } = twig; - switch (comboName) { - case "+": { - return this._matchAdjacentSiblingCombinator(twig, node, opt); - } - case "~": { - return this._matchGeneralSiblingCombinator(twig, node, opt); - } - case ">": { - return this._matchChildCombinator(twig, node, opt); - } - case " ": - default: { - return this._matchDescendantCombinator(twig, node, opt); - } - } - }; - /** - * Traverses with a TreeWalker and collects nodes matching the leaves. - * @private - * @param {TreeWalker} walker - The TreeWalker instance to use. - * @param {Array} leaves - The AST leaves to match against. - * @param {object} options - Traversal options. - * @param {Node} options.startNode - The node to start traversal from. - * @param {string} options.targetType - The type of target ('all' or 'first'). - * @param {Node} [options.boundaryNode] - The node to stop traversal at. - * @param {boolean} [options.force] - Force traversal to the next node. - * @returns {Array.<Node>} An array of matched nodes. - */ - _traverseAndCollectNodes = (walker, leaves, options) => { - const { boundaryNode, force, startNode, targetType } = options; - const collectedNodes = []; - let currentNode = traverseNode(startNode, walker, !!force); - if (!currentNode) { - return []; - } - if (currentNode.nodeType !== ELEMENT_NODE) { - currentNode = walker.nextNode(); - } else if (currentNode === startNode && currentNode !== this.#root) { - currentNode = walker.nextNode(); - } - const matchOpt = { - warn: this.#warn - }; - while (currentNode) { - if (boundaryNode) { - if (currentNode === boundaryNode) { - break; - } else if (targetType === TARGET_ALL && !boundaryNode.contains(currentNode)) { - break; - } - } - if (this._matchLeaves(leaves, currentNode, matchOpt) && currentNode !== this.#node) { - collectedNodes.push(currentNode); - if (targetType !== TARGET_ALL) { - break; - } - } - currentNode = walker.nextNode(); - } - return collectedNodes; - }; - /** - * Finds matched node(s) preceding this.#node. - * @private - * @param {Array.<object>} leaves - The AST leaves. - * @param {object} node - The node to start from. - * @param {object} opt - Options. - * @param {boolean} [opt.force] - If true, traverses only to the next node. - * @param {string} [opt.targetType] - The target type. - * @returns {Array.<object>} A collection of matched nodes. - */ - _findPrecede = (leaves, node, opt = {}) => { - const { force, targetType } = opt; - if (!this.#rootWalker) { - this.#rootWalker = this._createTreeWalker(this.#root); - } - return this._traverseAndCollectNodes(this.#rootWalker, leaves, { - force, - targetType, - boundaryNode: this.#node, - startNode: node - }); - }; - /** - * Finds matched node(s) in #nodeWalker. - * @private - * @param {Array.<object>} leaves - The AST leaves. - * @param {object} node - The node to start from. - * @param {object} opt - Options. - * @param {boolean} [opt.precede] - If true, finds preceding nodes. - * @returns {Array.<object>} A collection of matched nodes. - */ - _findNodeWalker = (leaves, node, opt = {}) => { - const { precede, ...traversalOpts } = opt; - if (precede) { - const precedeNodes = this._findPrecede(leaves, this.#root, opt); - if (precedeNodes.length) { - return precedeNodes; - } - } - if (!this.#nodeWalker) { - this.#nodeWalker = this._createTreeWalker(this.#node); - } - return this._traverseAndCollectNodes(this.#nodeWalker, leaves, { - startNode: node, - ...traversalOpts - }); - }; - /** - * Matches the node itself. - * @private - * @param {Array} leaves - The AST leaves. - * @param {boolean} check - Indicates if running in internal check(). - * @returns {Array} An array containing [nodes, filtered, pseudoElement]. - */ - _matchSelf = (leaves, check = false) => { - const options = { check, warn: this.#warn }; - const matched = this._matchLeaves(leaves, this.#node, options); - const nodes = matched ? [this.#node] : []; - return [nodes, matched, this.#pseudoElement]; - }; - /** - * Finds lineal nodes (self and ancestors). - * @private - * @param {Array} leaves - The AST leaves. - * @param {object} opt - Options. - * @returns {Array} An array containing [nodes, filtered]. - */ - _findLineal = (leaves, opt) => { - const { complex } = opt; - const nodes = []; - const options = { warn: this.#warn }; - const selfMatched = this._matchLeaves(leaves, this.#node, options); - if (selfMatched) { - nodes.push(this.#node); - } - if (!selfMatched || complex) { - let currentNode = this.#node.parentNode; - while (currentNode) { - if (this._matchLeaves(leaves, currentNode, options)) { - nodes.push(currentNode); - } - currentNode = currentNode.parentNode; - } - } - const filtered = nodes.length > 0; - return [nodes, filtered]; - }; - /** - * Finds entry nodes for pseudo-element selectors. - * @private - * @param {object} leaf - The pseudo-element leaf from the AST. - * @param {Array.<object>} filterLeaves - Leaves for compound selectors. - * @param {string} targetType - The type of target to find. - * @returns {object} The result { nodes, filtered, pending }. - */ - _findEntryNodesForPseudoElement = (leaf, filterLeaves, targetType) => { - let nodes = []; - let filtered = false; - if (targetType === TARGET_SELF && this.#check) { - const css = (0, import_css_tree.generate)(leaf); - this.#pseudoElement.push(css); - if (filterLeaves.length) { - [nodes, filtered] = this._matchSelf(filterLeaves, this.#check); - } else { - nodes.push(this.#node); - filtered = true; - } - } else { - matchPseudoElementSelector(leaf.name, leaf.type, { warn: this.#warn }); - } - return { nodes, filtered, pending: false }; - }; - /** - * Finds entry nodes for ID selectors. - * @private - * @param {object} twig - The current twig from the AST branch. - * @param {string} targetType - The type of target to find. - * @param {object} opt - Additional options for finding nodes. - * @returns {object} The result { nodes, filtered, pending }. - */ - _findEntryNodesForId = (twig, targetType, opt) => { - const { leaves } = twig; - const [leaf, ...filterLeaves] = leaves; - const { complex, precede } = opt; - let nodes = []; - let filtered = false; - if (targetType === TARGET_SELF) { - [nodes, filtered] = this._matchSelf(leaves); - } else if (targetType === TARGET_LINEAL) { - [nodes, filtered] = this._findLineal(leaves, { complex }); - } else if (targetType === TARGET_FIRST && this.#root.nodeType !== ELEMENT_NODE) { - const node = this.#root.getElementById(leaf.name); - if (node) { - if (filterLeaves.length) { - if (this._matchLeaves(filterLeaves, node, { warn: this.#warn })) { - nodes.push(node); - filtered = true; - } - } else { - nodes.push(node); - filtered = true; - } - } - } else { - nodes = this._findNodeWalker(leaves, this.#node, { precede, targetType }); - filtered = nodes.length > 0; - } - return { nodes, filtered, pending: false }; - }; - /** - * Finds entry nodes for class selectors. - * @private - * @param {Array.<object>} leaves - The AST leaves for the selector. - * @param {string} targetType - The type of target to find. - * @param {object} opt - Additional options for finding nodes. - * @returns {object} The result { nodes, filtered, pending }. - */ - _findEntryNodesForClass = (leaves, targetType, opt) => { - const { complex, precede } = opt; - let nodes = []; - let filtered = false; - if (targetType === TARGET_SELF) { - [nodes, filtered] = this._matchSelf(leaves); - } else if (targetType === TARGET_LINEAL) { - [nodes, filtered] = this._findLineal(leaves, { complex }); - } else { - nodes = this._findNodeWalker(leaves, this.#node, { precede, targetType }); - filtered = nodes.length > 0; - } - return { nodes, filtered, pending: false }; - }; - /** - * Finds entry nodes for type selectors. - * @private - * @param {Array.<object>} leaves - The AST leaves for the selector. - * @param {string} targetType - The type of target to find. - * @param {object} opt - Additional options for finding nodes. - * @returns {object} The result { nodes, filtered, pending }. - */ - _findEntryNodesForType = (leaves, targetType, opt) => { - const { complex, precede } = opt; - let nodes = []; - let filtered = false; - if (targetType === TARGET_SELF) { - [nodes, filtered] = this._matchSelf(leaves); - } else if (targetType === TARGET_LINEAL) { - [nodes, filtered] = this._findLineal(leaves, { complex }); - } else { - nodes = this._findNodeWalker(leaves, this.#node, { precede, targetType }); - filtered = nodes.length > 0; - } - return { nodes, filtered, pending: false }; - }; - /** - * Finds entry nodes for other selector types (default case). - * @private - * @param {object} twig - The current twig from the AST branch. - * @param {string} targetType - The type of target to find. - * @param {object} opt - Additional options for finding nodes. - * @returns {object} The result { nodes, filtered, pending }. - */ - _findEntryNodesForOther = (twig, targetType, opt) => { - const { leaves } = twig; - const [leaf, ...filterLeaves] = leaves; - const { complex, precede } = opt; - let nodes = []; - let filtered = false; - let pending = false; - if (targetType !== TARGET_LINEAL && /host(?:-context)?/.test(leaf.name)) { - let shadowRoot = null; - if (this.#shadow && this.#node.nodeType === DOCUMENT_FRAGMENT_NODE) { - shadowRoot = this._matchShadowHostPseudoClass(leaf, this.#node); - } else if (filterLeaves.length && this.#node.nodeType === ELEMENT_NODE) { - shadowRoot = this._matchShadowHostPseudoClass( - leaf, - this.#node.shadowRoot - ); - } - if (shadowRoot) { - let bool = true; - const l = filterLeaves.length; - for (let i = 0; i < l; i++) { - const filterLeaf = filterLeaves[i]; - switch (filterLeaf.name) { - case "host": - case "host-context": { - const matchedNode = this._matchShadowHostPseudoClass( - filterLeaf, - shadowRoot - ); - bool = matchedNode === shadowRoot; - break; - } - case "has": { - bool = this._matchPseudoClassSelector( - filterLeaf, - shadowRoot, - {} - ).has(shadowRoot); - break; - } - default: { - bool = false; - } - } - if (!bool) { - break; - } - } - if (bool) { - nodes.push(shadowRoot); - filtered = true; - } - } - } else if (targetType === TARGET_SELF) { - [nodes, filtered] = this._matchSelf(leaves); - } else if (targetType === TARGET_LINEAL) { - [nodes, filtered] = this._findLineal(leaves, { complex }); - } else if (targetType === TARGET_FIRST) { - nodes = this._findNodeWalker(leaves, this.#node, { precede, targetType }); - filtered = nodes.length > 0; - } else { - pending = true; - } - return { nodes, filtered, pending }; - }; - /** - * Finds entry nodes. - * @private - * @param {object} twig - The twig object. - * @param {string} targetType - The target type. - * @param {object} [opt] - Options. - * @param {boolean} [opt.complex] - If true, the selector is complex. - * @param {string} [opt.dir] - The find direction. - * @returns {object} An object with nodes and their state. - */ - _findEntryNodes = (twig, targetType, opt = {}) => { - const { leaves } = twig; - const [leaf, ...filterLeaves] = leaves; - const { complex = false, dir = DIR_PREV } = opt; - const precede = dir === DIR_NEXT && this.#node.nodeType === ELEMENT_NODE && this.#node !== this.#root; - let result; - switch (leaf.type) { - case PS_ELEMENT_SELECTOR: { - result = this._findEntryNodesForPseudoElement( - leaf, - filterLeaves, - targetType - ); - break; - } - case ID_SELECTOR: { - result = this._findEntryNodesForId(twig, targetType, { - complex, - precede - }); - break; - } - case CLASS_SELECTOR: { - result = this._findEntryNodesForClass(leaves, targetType, { - complex, - precede - }); - break; - } - case TYPE_SELECTOR: { - result = this._findEntryNodesForType(leaves, targetType, { - complex, - precede - }); - break; - } - default: { - result = this._findEntryNodesForOther(twig, targetType, { - complex, - precede - }); - } - } - return { - compound: filterLeaves.length > 0, - filtered: result.filtered, - nodes: result.nodes, - pending: result.pending - }; - }; - /** - * Determines the direction and starting twig for a selector branch. - * @private - * @param {Array.<object>} branch - The AST branch. - * @param {string} targetType - The type of target to find. - * @returns {object} An object with the direction and starting twig. - */ - _determineTraversalStrategy = (branch, targetType) => { - const branchLen = branch.length; - const firstTwig = branch[0]; - const lastTwig = branch[branchLen - 1]; - if (branchLen === 1) { - return { dir: DIR_PREV, twig: firstTwig }; - } - const { - leaves: [{ name: firstName, type: firstType }] - } = firstTwig; - const { - leaves: [{ name: lastName, type: lastType }] - } = lastTwig; - const { combo: firstCombo } = firstTwig; - if (this.#selector.includes(":scope") || lastType === PS_ELEMENT_SELECTOR || lastType === ID_SELECTOR) { - return { dir: DIR_PREV, twig: lastTwig }; - } - if (firstType === ID_SELECTOR) { - return { dir: DIR_NEXT, twig: firstTwig }; - } - if (firstName === "*" && firstType === TYPE_SELECTOR) { - return { dir: DIR_PREV, twig: lastTwig }; - } - if (lastName === "*" && lastType === TYPE_SELECTOR) { - return { dir: DIR_NEXT, twig: firstTwig }; - } - if (branchLen === 2) { - if (targetType === TARGET_FIRST) { - return { dir: DIR_PREV, twig: lastTwig }; - } - const { name: comboName } = firstCombo; - if (comboName === "+" || comboName === "~") { - return { dir: DIR_PREV, twig: lastTwig }; - } - } else if (branchLen > 2 && this.#scoped && targetType === TARGET_FIRST) { - if (lastType === TYPE_SELECTOR) { - return { dir: DIR_PREV, twig: lastTwig }; - } - let isChildOrDescendant = false; - for (const { combo } of branch) { - if (combo) { - const { name: comboName } = combo; - isChildOrDescendant = comboName === ">" || comboName === " "; - if (!isChildOrDescendant) { - break; - } - } - } - if (isChildOrDescendant) { - return { dir: DIR_PREV, twig: lastTwig }; - } - } - return { dir: DIR_NEXT, twig: firstTwig }; - }; - /** - * Processes pending items not resolved with a direct strategy. - * @private - * @param {Set.<Map>} pendingItems - The set of pending items. - */ - _processPendingItems = (pendingItems) => { - if (!pendingItems.size) { - return; - } - if (!this.#rootWalker) { - this.#rootWalker = this._createTreeWalker(this.#root); - } - const walker = this.#rootWalker; - let node = this.#root; - if (this.#scoped) { - node = this.#node; - } - let nextNode = traverseNode(node, walker); - while (nextNode) { - const isWithinScope = this.#node.nodeType !== ELEMENT_NODE || nextNode === this.#node || this.#node.contains(nextNode); - if (isWithinScope) { - for (const pendingItem of pendingItems) { - const { leaves } = pendingItem.get("twig"); - if (this._matchLeaves(leaves, nextNode, { warn: this.#warn })) { - const index = pendingItem.get("index"); - this.#ast[index].filtered = true; - this.#ast[index].find = true; - this.#nodes[index].push(nextNode); - } - } - } else if (this.#scoped) { - break; - } - nextNode = walker.nextNode(); - } - }; - /** - * Collects nodes. - * @private - * @param {string} targetType - The target type. - * @returns {Array.<Array.<object>>} An array containing the AST and nodes. - */ - _collectNodes = (targetType) => { - const ast = this.#ast.values(); - if (targetType === TARGET_ALL || targetType === TARGET_FIRST) { - const pendingItems = /* @__PURE__ */ new Set(); - let i = 0; - for (const { branch } of ast) { - const complex = branch.length > 1; - const { dir, twig } = this._determineTraversalStrategy( - branch, - targetType - ); - const { compound, filtered, nodes, pending } = this._findEntryNodes( - twig, - targetType, - { complex, dir } - ); - if (nodes.length) { - this.#ast[i].find = true; - this.#nodes[i] = nodes; - } else if (pending) { - pendingItems.add( - /* @__PURE__ */ new Map([ - ["index", i], - ["twig", twig] - ]) - ); - } - this.#ast[i].dir = dir; - this.#ast[i].filtered = filtered || !compound; - i++; - } - this._processPendingItems(pendingItems); - } else { - let i = 0; - for (const { branch } of ast) { - const twig = branch[branch.length - 1]; - const complex = branch.length > 1; - const dir = DIR_PREV; - const { compound, filtered, nodes } = this._findEntryNodes( - twig, - targetType, - { complex, dir } - ); - if (nodes.length) { - this.#ast[i].find = true; - this.#nodes[i] = nodes; - } - this.#ast[i].dir = dir; - this.#ast[i].filtered = filtered || !compound; - i++; - } - } - return [this.#ast, this.#nodes]; - }; - /** - * Gets combined nodes. - * @private - * @param {object} twig - The twig object. - * @param {object} nodes - A collection of nodes. - * @param {string} dir - The direction. - * @returns {Array.<object>} A collection of matched nodes. - */ - _getCombinedNodes = (twig, nodes, dir) => { - const arr = []; - const options = { - dir, - warn: this.#warn - }; - for (const node of nodes) { - const matched = this._matchCombinator(twig, node, options); - if (matched.size) { - arr.push(...matched); - } - } - return arr; - }; - /** - * Matches a node in the 'next' direction. - * @private - * @param {Array} branch - The branch. - * @param {Set.<object>} nodes - A collection of Element nodes. - * @param {object} opt - Options. - * @param {object} opt.combo - The combo object. - * @param {number} opt.index - The index. - * @returns {?object} The matched node. - */ - _matchNodeNext = (branch, nodes, opt) => { - const { combo, index } = opt; - const { combo: nextCombo, leaves } = branch[index]; - const twig = { - combo, - leaves - }; - const nextNodes = new Set(this._getCombinedNodes(twig, nodes, DIR_NEXT)); - if (nextNodes.size) { - if (index === branch.length - 1) { - const [nextNode] = sortNodes(nextNodes); - return nextNode; - } - return this._matchNodeNext(branch, nextNodes, { - combo: nextCombo, - index: index + 1 - }); - } - return null; - }; - /** - * Matches a node in the 'previous' direction. - * @private - * @param {Array} branch - The branch. - * @param {object} node - The Element node. - * @param {object} opt - Options. - * @param {number} opt.index - The index. - * @returns {?object} The node. - */ - _matchNodePrev = (branch, node, opt) => { - const { index } = opt; - const twig = branch[index]; - const nodes = /* @__PURE__ */ new Set([node]); - const nextNodes = new Set(this._getCombinedNodes(twig, nodes, DIR_PREV)); - if (nextNodes.size) { - if (index === 0) { - return node; - } - let matched; - for (const nextNode of nextNodes) { - matched = this._matchNodePrev(branch, nextNode, { - index: index - 1 - }); - if (matched) { - break; - } - } - if (matched) { - return node; - } - } - return null; - }; - /** - * Processes a complex selector branch to find all matching nodes. - * @private - * @param {Array} branch - The selector branch from the AST. - * @param {Array} entryNodes - The initial set of nodes to start from. - * @param {string} dir - The direction of traversal ('next' or 'prev'). - * @returns {Set.<object>} A set of all matched nodes. - */ - _processComplexBranchAll = (branch, entryNodes, dir) => { - const matchedNodes = /* @__PURE__ */ new Set(); - const branchLen = branch.length; - const lastIndex = branchLen - 1; - if (dir === DIR_NEXT) { - const { combo: firstCombo } = branch[0]; - for (const node of entryNodes) { - let combo = firstCombo; - let nextNodes = /* @__PURE__ */ new Set([node]); - for (let j = 1; j < branchLen; j++) { - const { combo: nextCombo, leaves } = branch[j]; - const twig = { combo, leaves }; - const nodesArr = this._getCombinedNodes(twig, nextNodes, dir); - if (nodesArr.length) { - if (j === lastIndex) { - for (const nextNode of nodesArr) { - matchedNodes.add(nextNode); - } - } - combo = nextCombo; - nextNodes = new Set(nodesArr); - } else { - nextNodes.clear(); - break; - } - } - } - } else { - for (const node of entryNodes) { - let nextNodes = /* @__PURE__ */ new Set([node]); - for (let j = lastIndex - 1; j >= 0; j--) { - const twig = branch[j]; - const nodesArr = this._getCombinedNodes(twig, nextNodes, dir); - if (nodesArr.length) { - if (j === 0) { - matchedNodes.add(node); - } - nextNodes = new Set(nodesArr); - } else { - nextNodes.clear(); - break; - } - } - } - } - return matchedNodes; - }; - /** - * Processes a complex selector branch to find the first matching node. - * @private - * @param {Array} branch - The selector branch from the AST. - * @param {Array} entryNodes - The initial set of nodes to start from. - * @param {string} dir - The direction of traversal ('next' or 'prev'). - * @param {string} targetType - The type of search (e.g., 'first'). - * @returns {?object} The first matched node, or null. - */ - _processComplexBranchFirst = (branch, entryNodes, dir, targetType) => { - const branchLen = branch.length; - const lastIndex = branchLen - 1; - if (dir === DIR_NEXT) { - const { combo: entryCombo } = branch[0]; - for (const node of entryNodes) { - const matchedNode = this._matchNodeNext(branch, /* @__PURE__ */ new Set([node]), { - combo: entryCombo, - index: 1 - }); - if (matchedNode) { - if (this.#node.nodeType === ELEMENT_NODE) { - if (matchedNode !== this.#node && this.#node.contains(matchedNode)) { - return matchedNode; - } - } else { - return matchedNode; - } - } - } - const { leaves: entryLeaves } = branch[0]; - const [entryNode] = entryNodes; - if (this.#node.contains(entryNode)) { - let [refNode] = this._findNodeWalker(entryLeaves, entryNode, { - targetType - }); - while (refNode) { - const matchedNode = this._matchNodeNext(branch, /* @__PURE__ */ new Set([refNode]), { - combo: entryCombo, - index: 1 - }); - if (matchedNode) { - if (this.#node.nodeType === ELEMENT_NODE) { - if (matchedNode !== this.#node && this.#node.contains(matchedNode)) { - return matchedNode; - } - } else { - return matchedNode; - } - } - [refNode] = this._findNodeWalker(entryLeaves, refNode, { - targetType, - force: true - }); - } - } - } else { - for (const node of entryNodes) { - const matchedNode = this._matchNodePrev(branch, node, { - index: lastIndex - 1 - }); - if (matchedNode) { - return matchedNode; - } - } - if (targetType === TARGET_FIRST) { - const { leaves: entryLeaves } = branch[lastIndex]; - const [entryNode] = entryNodes; - let [refNode] = this._findNodeWalker(entryLeaves, entryNode, { - targetType - }); - while (refNode) { - const matchedNode = this._matchNodePrev(branch, refNode, { - index: lastIndex - 1 - }); - if (matchedNode) { - return refNode; - } - [refNode] = this._findNodeWalker(entryLeaves, refNode, { - targetType, - force: true - }); - } - } - } - return null; - }; - /** - * Finds matched nodes. - * @param {string} targetType - The target type. - * @returns {Set.<object>} A collection of matched nodes. - */ - find = (targetType) => { - const [[...branches], collectedNodes] = this._collectNodes(targetType); - const l = branches.length; - let sort = l > 1 && targetType === TARGET_ALL && this.#selector.includes(":scope"); - let nodes = /* @__PURE__ */ new Set(); - for (let i = 0; i < l; i++) { - const { branch, dir, find: find3 } = branches[i]; - if (!branch.length || !find3) { - continue; - } - const entryNodes = collectedNodes[i]; - const lastIndex = branch.length - 1; - if (lastIndex === 0) { - if ((targetType === TARGET_ALL || targetType === TARGET_FIRST) && this.#node.nodeType === ELEMENT_NODE) { - for (const node of entryNodes) { - if (node !== this.#node && this.#node.contains(node)) { - nodes.add(node); - if (targetType === TARGET_FIRST) { - break; - } - } - } - } else if (targetType === TARGET_ALL) { - if (nodes.size) { - for (const node of entryNodes) { - nodes.add(node); - } - sort = true; - } else { - nodes = new Set(entryNodes); - } - } else { - if (entryNodes.length) { - nodes.add(entryNodes[0]); - } - } - } else { - if (targetType === TARGET_ALL) { - const newNodes = this._processComplexBranchAll( - branch, - entryNodes, - dir - ); - if (nodes.size) { - for (const newNode of newNodes) { - nodes.add(newNode); - } - sort = true; - } else { - nodes = newNodes; - } - } else { - const matchedNode = this._processComplexBranchFirst( - branch, - entryNodes, - dir, - targetType - ); - if (matchedNode) { - nodes.add(matchedNode); - } - } - } - } - if (this.#check) { - const match = !!nodes.size; - let pseudoElement; - if (this.#pseudoElement.length) { - pseudoElement = this.#pseudoElement.join(""); - } else { - pseudoElement = null; - } - return { match, pseudoElement }; - } - if (targetType === TARGET_FIRST || targetType === TARGET_ALL) { - nodes.delete(this.#node); - } - if ((sort || targetType === TARGET_FIRST) && nodes.size > 1) { - return new Set(sortNodes(nodes)); - } - return nodes; - }; -}; - -// src/index.js -var MAX_CACHE = 1024; -var DOMSelector = class { - /* private fields */ - #window; - #document; - #finder; - #idlUtils; - #nwsapi; - #cache; - /** - * Creates an instance of DOMSelector. - * @param {Window} window - The window object. - * @param {Document} document - The document object. - * @param {object} [opt] - Options. - */ - constructor(window, document, opt = {}) { - const { idlUtils } = opt; - this.#window = window; - this.#document = document ?? window.document; - this.#finder = new Finder(window); - this.#idlUtils = idlUtils; - this.#nwsapi = initNwsapi(window, document); - this.#cache = new import_lru_cache.LRUCache({ - max: MAX_CACHE - }); - } - /** - * Clears the internal cache of finder results. - * @returns {void} - */ - clear = () => { - this.#finder.clearResults(true); - }; - /** - * Checks if an element matches a CSS selector. - * @param {string} selector - The CSS selector to check against. - * @param {Element} node - The element node to check. - * @param {object} [opt] - Optional parameters. - * @returns {CheckResult} An object containing the check result. - */ - check = (selector, node, opt = {}) => { - if (!node?.nodeType) { - const e = new this.#window.TypeError(`Unexpected type ${getType(node)}`); - return this.#finder.onError(e, opt); - } else if (node.nodeType !== ELEMENT_NODE) { - const e = new this.#window.TypeError(`Unexpected node ${node.nodeName}`); - return this.#finder.onError(e, opt); - } - const document = node.ownerDocument; - if (document === this.#document && document.contentType === "text/html" && document.documentElement && node.parentNode) { - const cacheKey = `check_${selector}`; - let filterMatches = false; - if (this.#cache.has(cacheKey)) { - filterMatches = this.#cache.get(cacheKey); - } else { - filterMatches = filterSelector(selector, TARGET_SELF); - this.#cache.set(cacheKey, filterMatches); - } - if (filterMatches) { - try { - const n = this.#idlUtils ? this.#idlUtils.wrapperForImpl(node) : node; - const match = this.#nwsapi.match(selector, n); - return { - match, - pseudoElement: null - }; - } catch (e) { - } - } - } - let res; - try { - if (this.#idlUtils) { - node = this.#idlUtils.wrapperForImpl(node); - } - opt.check = true; - opt.noexept = true; - opt.warn = false; - this.#finder.setup(selector, node, opt); - res = this.#finder.find(TARGET_SELF); - } catch (e) { - this.#finder.onError(e, opt); - } - return res; - }; - /** - * Returns true if the element matches the selector. - * @param {string} selector - The CSS selector to match against. - * @param {Element} node - The element node to test. - * @param {object} [opt] - Optional parameters. - * @returns {boolean} `true` if the element matches, or `false` otherwise. - */ - matches = (selector, node, opt = {}) => { - if (!node?.nodeType) { - const e = new this.#window.TypeError(`Unexpected type ${getType(node)}`); - return this.#finder.onError(e, opt); - } else if (node.nodeType !== ELEMENT_NODE) { - const e = new this.#window.TypeError(`Unexpected node ${node.nodeName}`); - return this.#finder.onError(e, opt); - } - const document = node.ownerDocument; - if (document === this.#document && document.contentType === "text/html" && document.documentElement && node.parentNode) { - const cacheKey = `matches_${selector}`; - let filterMatches = false; - if (this.#cache.has(cacheKey)) { - filterMatches = this.#cache.get(cacheKey); - } else { - filterMatches = filterSelector(selector, TARGET_SELF); - this.#cache.set(cacheKey, filterMatches); - } - if (filterMatches) { - try { - const n = this.#idlUtils ? this.#idlUtils.wrapperForImpl(node) : node; - const res2 = this.#nwsapi.match(selector, n); - return res2; - } catch (e) { - } - } - } - let res; - try { - if (this.#idlUtils) { - node = this.#idlUtils.wrapperForImpl(node); - } - this.#finder.setup(selector, node, opt); - const nodes = this.#finder.find(TARGET_SELF); - res = nodes.size; - } catch (e) { - this.#finder.onError(e, opt); - } - return !!res; - }; - /** - * Traverses up the DOM tree to find the first node that matches the selector. - * @param {string} selector - The CSS selector to match against. - * @param {Element} node - The element from which to start traversing. - * @param {object} [opt] - Optional parameters. - * @returns {?Element} The first matching ancestor element, or `null`. - */ - closest = (selector, node, opt = {}) => { - if (!node?.nodeType) { - const e = new this.#window.TypeError(`Unexpected type ${getType(node)}`); - return this.#finder.onError(e, opt); - } else if (node.nodeType !== ELEMENT_NODE) { - const e = new this.#window.TypeError(`Unexpected node ${node.nodeName}`); - return this.#finder.onError(e, opt); - } - const document = node.ownerDocument; - if (document === this.#document && document.contentType === "text/html" && document.documentElement && node.parentNode) { - const cacheKey = `closest_${selector}`; - let filterMatches = false; - if (this.#cache.has(cacheKey)) { - filterMatches = this.#cache.get(cacheKey); - } else { - filterMatches = filterSelector(selector, TARGET_LINEAL); - this.#cache.set(cacheKey, filterMatches); - } - if (filterMatches) { - try { - const n = this.#idlUtils ? this.#idlUtils.wrapperForImpl(node) : node; - const res2 = this.#nwsapi.closest(selector, n); - return res2; - } catch (e) { - } - } - } - let res; - try { - if (this.#idlUtils) { - node = this.#idlUtils.wrapperForImpl(node); - } - this.#finder.setup(selector, node, opt); - const nodes = this.#finder.find(TARGET_LINEAL); - if (nodes.size) { - let refNode = node; - while (refNode) { - if (nodes.has(refNode)) { - res = refNode; - break; - } - refNode = refNode.parentNode; - } - } - } catch (e) { - this.#finder.onError(e, opt); - } - return res ?? null; - }; - /** - * Returns the first element within the subtree that matches the selector. - * @param {string} selector - The CSS selector to match. - * @param {Document|DocumentFragment|Element} node - The node to find within. - * @param {object} [opt] - Optional parameters. - * @returns {?Element} The first matching element, or `null`. - */ - querySelector = (selector, node, opt = {}) => { - if (!node?.nodeType) { - const e = new this.#window.TypeError(`Unexpected type ${getType(node)}`); - return this.#finder.onError(e, opt); - } - let res; - try { - if (this.#idlUtils) { - node = this.#idlUtils.wrapperForImpl(node); - } - this.#finder.setup(selector, node, opt); - const nodes = this.#finder.find(TARGET_FIRST); - if (nodes.size) { - [res] = [...nodes]; - } - } catch (e) { - this.#finder.onError(e, opt); - } - return res ?? null; - }; - /** - * Returns an array of elements within the subtree that match the selector. - * Note: This method returns an Array, not a NodeList. - * @param {string} selector - The CSS selector to match. - * @param {Document|DocumentFragment|Element} node - The node to find within. - * @param {object} [opt] - Optional parameters. - * @returns {Array<Element>} An array of elements, or an empty array. - */ - querySelectorAll = (selector, node, opt = {}) => { - if (!node?.nodeType) { - const e = new this.#window.TypeError(`Unexpected type ${getType(node)}`); - return this.#finder.onError(e, opt); - } - const document = node.nodeType === DOCUMENT_NODE ? node : node.ownerDocument; - if (document === this.#document && document.contentType === "text/html" && document.documentElement && (node.nodeType !== DOCUMENT_FRAGMENT_NODE || !node.host)) { - const cacheKey = `querySelectorAll_${selector}`; - let filterMatches = false; - if (this.#cache.has(cacheKey)) { - filterMatches = this.#cache.get(cacheKey); - } else { - filterMatches = filterSelector(selector, TARGET_ALL); - this.#cache.set(cacheKey, filterMatches); - } - if (filterMatches) { - try { - const n = this.#idlUtils ? this.#idlUtils.wrapperForImpl(node) : node; - const res2 = this.#nwsapi.select(selector, n); - return res2; - } catch (e) { - } - } - } - let res; - try { - if (this.#idlUtils) { - node = this.#idlUtils.wrapperForImpl(node); - } - this.#finder.setup(selector, node, opt); - const nodes = this.#finder.find(TARGET_ALL); - if (nodes.size) { - res = [...nodes]; - } - } catch (e) { - this.#finder.onError(e, opt); - } - return res ?? []; - }; -}; -// Annotate the CommonJS export names for ESM import in node: -0 && (module.exports = { - DOMSelector -}); -/*! - * DOM Selector - A CSS selector engine. - * @license MIT - * @copyright asamuzaK (Kazz) - * @see {@link https://github.com/asamuzaK/domSelector/blob/main/LICENSE} - */ -//# sourceMappingURL=index.cjs.map
\ No newline at end of file diff --git a/vanilla/node_modules/@asamuzakjp/dom-selector/dist/cjs/index.cjs.map b/vanilla/node_modules/@asamuzakjp/dom-selector/dist/cjs/index.cjs.map deleted file mode 100644 index e8327b1..0000000 --- a/vanilla/node_modules/@asamuzakjp/dom-selector/dist/cjs/index.cjs.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../src/index.js","../../src/js/parser.js","../../src/js/utility.js","../../src/js/constant.js","../../src/js/matcher.js","../../src/js/finder.js"],"sourcesContent":["/*!\n * DOM Selector - A CSS selector engine.\n * @license MIT\n * @copyright asamuzaK (Kazz)\n * @see {@link https://github.com/asamuzaK/domSelector/blob/main/LICENSE}\n */\n\n/* import */\nimport { LRUCache } from 'lru-cache';\nimport { Finder } from './js/finder.js';\nimport { filterSelector, getType, initNwsapi } from './js/utility.js';\n\n/* constants */\nimport {\n DOCUMENT_NODE,\n DOCUMENT_FRAGMENT_NODE,\n ELEMENT_NODE,\n TARGET_ALL,\n TARGET_FIRST,\n TARGET_LINEAL,\n TARGET_SELF\n} from './js/constant.js';\nconst MAX_CACHE = 1024;\n\n/**\n * @typedef {object} CheckResult\n * @property {boolean} match - The match result.\n * @property {string?} pseudoElement - The pseudo-element, if any.\n */\n\n/* DOMSelector */\nexport class DOMSelector {\n /* private fields */\n #window;\n #document;\n #finder;\n #idlUtils;\n #nwsapi;\n #cache;\n\n /**\n * Creates an instance of DOMSelector.\n * @param {Window} window - The window object.\n * @param {Document} document - The document object.\n * @param {object} [opt] - Options.\n */\n constructor(window, document, opt = {}) {\n const { idlUtils } = opt;\n this.#window = window;\n this.#document = document ?? window.document;\n this.#finder = new Finder(window);\n this.#idlUtils = idlUtils;\n this.#nwsapi = initNwsapi(window, document);\n this.#cache = new LRUCache({\n max: MAX_CACHE\n });\n }\n\n /**\n * Clears the internal cache of finder results.\n * @returns {void}\n */\n clear = () => {\n this.#finder.clearResults(true);\n };\n\n /**\n * Checks if an element matches a CSS selector.\n * @param {string} selector - The CSS selector to check against.\n * @param {Element} node - The element node to check.\n * @param {object} [opt] - Optional parameters.\n * @returns {CheckResult} An object containing the check result.\n */\n check = (selector, node, opt = {}) => {\n if (!node?.nodeType) {\n const e = new this.#window.TypeError(`Unexpected type ${getType(node)}`);\n return this.#finder.onError(e, opt);\n } else if (node.nodeType !== ELEMENT_NODE) {\n const e = new this.#window.TypeError(`Unexpected node ${node.nodeName}`);\n return this.#finder.onError(e, opt);\n }\n const document = node.ownerDocument;\n if (\n document === this.#document &&\n document.contentType === 'text/html' &&\n document.documentElement &&\n node.parentNode\n ) {\n const cacheKey = `check_${selector}`;\n let filterMatches = false;\n if (this.#cache.has(cacheKey)) {\n filterMatches = this.#cache.get(cacheKey);\n } else {\n filterMatches = filterSelector(selector, TARGET_SELF);\n this.#cache.set(cacheKey, filterMatches);\n }\n if (filterMatches) {\n try {\n const n = this.#idlUtils ? this.#idlUtils.wrapperForImpl(node) : node;\n const match = this.#nwsapi.match(selector, n);\n return {\n match,\n pseudoElement: null\n };\n } catch (e) {\n // fall through\n }\n }\n }\n let res;\n try {\n if (this.#idlUtils) {\n node = this.#idlUtils.wrapperForImpl(node);\n }\n opt.check = true;\n opt.noexept = true;\n opt.warn = false;\n this.#finder.setup(selector, node, opt);\n res = this.#finder.find(TARGET_SELF);\n } catch (e) {\n this.#finder.onError(e, opt);\n }\n return res;\n };\n\n /**\n * Returns true if the element matches the selector.\n * @param {string} selector - The CSS selector to match against.\n * @param {Element} node - The element node to test.\n * @param {object} [opt] - Optional parameters.\n * @returns {boolean} `true` if the element matches, or `false` otherwise.\n */\n matches = (selector, node, opt = {}) => {\n if (!node?.nodeType) {\n const e = new this.#window.TypeError(`Unexpected type ${getType(node)}`);\n return this.#finder.onError(e, opt);\n } else if (node.nodeType !== ELEMENT_NODE) {\n const e = new this.#window.TypeError(`Unexpected node ${node.nodeName}`);\n return this.#finder.onError(e, opt);\n }\n const document = node.ownerDocument;\n if (\n document === this.#document &&\n document.contentType === 'text/html' &&\n document.documentElement &&\n node.parentNode\n ) {\n const cacheKey = `matches_${selector}`;\n let filterMatches = false;\n if (this.#cache.has(cacheKey)) {\n filterMatches = this.#cache.get(cacheKey);\n } else {\n filterMatches = filterSelector(selector, TARGET_SELF);\n this.#cache.set(cacheKey, filterMatches);\n }\n if (filterMatches) {\n try {\n const n = this.#idlUtils ? this.#idlUtils.wrapperForImpl(node) : node;\n const res = this.#nwsapi.match(selector, n);\n return res;\n } catch (e) {\n // fall through\n }\n }\n }\n let res;\n try {\n if (this.#idlUtils) {\n node = this.#idlUtils.wrapperForImpl(node);\n }\n this.#finder.setup(selector, node, opt);\n const nodes = this.#finder.find(TARGET_SELF);\n res = nodes.size;\n } catch (e) {\n this.#finder.onError(e, opt);\n }\n return !!res;\n };\n\n /**\n * Traverses up the DOM tree to find the first node that matches the selector.\n * @param {string} selector - The CSS selector to match against.\n * @param {Element} node - The element from which to start traversing.\n * @param {object} [opt] - Optional parameters.\n * @returns {?Element} The first matching ancestor element, or `null`.\n */\n closest = (selector, node, opt = {}) => {\n if (!node?.nodeType) {\n const e = new this.#window.TypeError(`Unexpected type ${getType(node)}`);\n return this.#finder.onError(e, opt);\n } else if (node.nodeType !== ELEMENT_NODE) {\n const e = new this.#window.TypeError(`Unexpected node ${node.nodeName}`);\n return this.#finder.onError(e, opt);\n }\n const document = node.ownerDocument;\n if (\n document === this.#document &&\n document.contentType === 'text/html' &&\n document.documentElement &&\n node.parentNode\n ) {\n const cacheKey = `closest_${selector}`;\n let filterMatches = false;\n if (this.#cache.has(cacheKey)) {\n filterMatches = this.#cache.get(cacheKey);\n } else {\n filterMatches = filterSelector(selector, TARGET_LINEAL);\n this.#cache.set(cacheKey, filterMatches);\n }\n if (filterMatches) {\n try {\n const n = this.#idlUtils ? this.#idlUtils.wrapperForImpl(node) : node;\n const res = this.#nwsapi.closest(selector, n);\n return res;\n } catch (e) {\n // fall through\n }\n }\n }\n let res;\n try {\n if (this.#idlUtils) {\n node = this.#idlUtils.wrapperForImpl(node);\n }\n this.#finder.setup(selector, node, opt);\n const nodes = this.#finder.find(TARGET_LINEAL);\n if (nodes.size) {\n let refNode = node;\n while (refNode) {\n if (nodes.has(refNode)) {\n res = refNode;\n break;\n }\n refNode = refNode.parentNode;\n }\n }\n } catch (e) {\n this.#finder.onError(e, opt);\n }\n return res ?? null;\n };\n\n /**\n * Returns the first element within the subtree that matches the selector.\n * @param {string} selector - The CSS selector to match.\n * @param {Document|DocumentFragment|Element} node - The node to find within.\n * @param {object} [opt] - Optional parameters.\n * @returns {?Element} The first matching element, or `null`.\n */\n querySelector = (selector, node, opt = {}) => {\n if (!node?.nodeType) {\n const e = new this.#window.TypeError(`Unexpected type ${getType(node)}`);\n return this.#finder.onError(e, opt);\n }\n /*\n const document =\n node.nodeType === DOCUMENT_NODE ? node : node.ownerDocument;\n if (\n document === this.#document &&\n document.contentType === 'text/html' &&\n document.documentElement &&\n (node.nodeType !== DOCUMENT_FRAGMENT_NODE || !node.host)\n ) {\n const cacheKey = `querySelector_${selector}`;\n let filterMatches = false;\n if (this.#cache.has(cacheKey)) {\n filterMatches = this.#cache.get(cacheKey);\n } else {\n filterMatches = filterSelector(selector, TARGET_FIRST);\n this.#cache.set(cacheKey, filterMatches);\n }\n if (filterMatches) {\n try {\n const n = this.#idlUtils ? this.#idlUtils.wrapperForImpl(node) : node;\n const res = this.#nwsapi.first(selector, n);\n return res;\n } catch (e) {\n // fall through\n }\n }\n }\n */\n let res;\n try {\n if (this.#idlUtils) {\n node = this.#idlUtils.wrapperForImpl(node);\n }\n this.#finder.setup(selector, node, opt);\n const nodes = this.#finder.find(TARGET_FIRST);\n if (nodes.size) {\n [res] = [...nodes];\n }\n } catch (e) {\n this.#finder.onError(e, opt);\n }\n return res ?? null;\n };\n\n /**\n * Returns an array of elements within the subtree that match the selector.\n * Note: This method returns an Array, not a NodeList.\n * @param {string} selector - The CSS selector to match.\n * @param {Document|DocumentFragment|Element} node - The node to find within.\n * @param {object} [opt] - Optional parameters.\n * @returns {Array<Element>} An array of elements, or an empty array.\n */\n querySelectorAll = (selector, node, opt = {}) => {\n if (!node?.nodeType) {\n const e = new this.#window.TypeError(`Unexpected type ${getType(node)}`);\n return this.#finder.onError(e, opt);\n }\n const document =\n node.nodeType === DOCUMENT_NODE ? node : node.ownerDocument;\n if (\n document === this.#document &&\n document.contentType === 'text/html' &&\n document.documentElement &&\n (node.nodeType !== DOCUMENT_FRAGMENT_NODE || !node.host)\n ) {\n const cacheKey = `querySelectorAll_${selector}`;\n let filterMatches = false;\n if (this.#cache.has(cacheKey)) {\n filterMatches = this.#cache.get(cacheKey);\n } else {\n filterMatches = filterSelector(selector, TARGET_ALL);\n this.#cache.set(cacheKey, filterMatches);\n }\n if (filterMatches) {\n try {\n const n = this.#idlUtils ? this.#idlUtils.wrapperForImpl(node) : node;\n const res = this.#nwsapi.select(selector, n);\n return res;\n } catch (e) {\n // fall through\n }\n }\n }\n let res;\n try {\n if (this.#idlUtils) {\n node = this.#idlUtils.wrapperForImpl(node);\n }\n this.#finder.setup(selector, node, opt);\n const nodes = this.#finder.find(TARGET_ALL);\n if (nodes.size) {\n res = [...nodes];\n }\n } catch (e) {\n this.#finder.onError(e, opt);\n }\n return res ?? [];\n };\n}\n","/**\n * parser.js\n */\n\n/* import */\nimport * as cssTree from 'css-tree';\nimport { getType } from './utility.js';\n\n/* constants */\nimport {\n ATTR_SELECTOR,\n BIT_01,\n BIT_02,\n BIT_04,\n BIT_08,\n BIT_16,\n BIT_32,\n BIT_FFFF,\n CLASS_SELECTOR,\n DUO,\n HEX,\n ID_SELECTOR,\n KEYS_LOGICAL,\n NTH,\n PS_CLASS_SELECTOR,\n PS_ELEMENT_SELECTOR,\n SELECTOR,\n SYNTAX_ERR,\n TYPE_SELECTOR\n} from './constant.js';\nconst AST_SORT_ORDER = new Map([\n [PS_ELEMENT_SELECTOR, BIT_01],\n [ID_SELECTOR, BIT_02],\n [CLASS_SELECTOR, BIT_04],\n [TYPE_SELECTOR, BIT_08],\n [ATTR_SELECTOR, BIT_16],\n [PS_CLASS_SELECTOR, BIT_32]\n]);\nconst KEYS_PS_CLASS_STATE = new Set([\n 'checked',\n 'closed',\n 'disabled',\n 'empty',\n 'enabled',\n 'in-range',\n 'indeterminate',\n 'invalid',\n 'open',\n 'out-of-range',\n 'placeholder-shown',\n 'read-only',\n 'read-write',\n 'valid'\n]);\nconst KEYS_SHADOW_HOST = new Set(['host', 'host-context']);\nconst REG_EMPTY_PS_FUNC =\n /(?<=:(?:dir|has|host(?:-context)?|is|lang|not|nth-(?:last-)?(?:child|of-type)|where))\\(\\s+\\)/g;\nconst REG_SHADOW_PS_ELEMENT = /^part|slotted$/;\nconst U_FFFD = '\\uFFFD';\n\n/**\n * Unescapes a CSS selector string.\n * @param {string} selector - The CSS selector to unescape.\n * @returns {string} The unescaped selector string.\n */\nexport const unescapeSelector = (selector = '') => {\n if (typeof selector === 'string' && selector.indexOf('\\\\', 0) >= 0) {\n const arr = selector.split('\\\\');\n const selectorItems = [arr[0]];\n const l = arr.length;\n for (let i = 1; i < l; i++) {\n const item = arr[i];\n if (item === '' && i === l - 1) {\n selectorItems.push(U_FFFD);\n } else {\n const hexExists = /^([\\da-f]{1,6}\\s?)/i.exec(item);\n if (hexExists) {\n const [, hex] = hexExists;\n let str;\n try {\n const low = parseInt('D800', HEX);\n const high = parseInt('DFFF', HEX);\n const deci = parseInt(hex, HEX);\n if (deci === 0 || (deci >= low && deci <= high)) {\n str = U_FFFD;\n } else {\n str = String.fromCodePoint(deci);\n }\n } catch (e) {\n str = U_FFFD;\n }\n let postStr = '';\n if (item.length > hex.length) {\n postStr = item.substring(hex.length);\n }\n selectorItems.push(`${str}${postStr}`);\n // whitespace\n } else if (/^[\\n\\r\\f]/.test(item)) {\n selectorItems.push(`\\\\${item}`);\n } else {\n selectorItems.push(item);\n }\n }\n }\n return selectorItems.join('');\n }\n return selector;\n};\n\n/**\n * Preprocesses a selector string according to the specification.\n * @see https://drafts.csswg.org/css-syntax-3/#input-preprocessing\n * @param {string} value - The value to preprocess.\n * @returns {string} The preprocessed selector string.\n */\nexport const preprocess = value => {\n // Non-string values will be converted to string.\n if (typeof value !== 'string') {\n if (value === undefined || value === null) {\n return getType(value).toLowerCase();\n } else if (Array.isArray(value)) {\n return value.join(',');\n } else if (Object.hasOwn(value, 'toString')) {\n return value.toString();\n } else {\n throw new DOMException(`Invalid selector ${value}`, SYNTAX_ERR);\n }\n }\n let selector = value;\n let index = 0;\n while (index >= 0) {\n // @see https://drafts.csswg.org/selectors/#id-selectors\n index = selector.indexOf('#', index);\n if (index < 0) {\n break;\n }\n const preHash = selector.substring(0, index + 1);\n let postHash = selector.substring(index + 1);\n const codePoint = postHash.codePointAt(0);\n if (codePoint > BIT_FFFF) {\n const str = `\\\\${codePoint.toString(HEX)} `;\n if (postHash.length === DUO) {\n postHash = str;\n } else {\n postHash = `${str}${postHash.substring(DUO)}`;\n }\n }\n selector = `${preHash}${postHash}`;\n index++;\n }\n return selector\n .replace(/\\f|\\r\\n?/g, '\\n')\n .replace(/[\\0\\uD800-\\uDFFF]|\\\\$/g, U_FFFD)\n .replace(/\\x26/g, ':scope');\n};\n\n/**\n * Creates an Abstract Syntax Tree (AST) from a CSS selector string.\n * @param {string} sel - The CSS selector string.\n * @returns {object} The parsed AST object.\n */\nexport const parseSelector = sel => {\n const selector = preprocess(sel);\n // invalid selectors\n if (/^$|^\\s*>|,\\s*$/.test(selector)) {\n throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR);\n }\n try {\n const ast = cssTree.parse(selector, {\n context: 'selectorList',\n parseCustomProperty: true\n });\n return cssTree.toPlainObject(ast);\n } catch (e) {\n const { message } = e;\n if (\n /^(?:\"\\]\"|Attribute selector [()\\s,=~^$*|]+) is expected$/.test(\n message\n ) &&\n !selector.endsWith(']')\n ) {\n const index = selector.lastIndexOf('[');\n const selPart = selector.substring(index);\n if (selPart.includes('\"')) {\n const quotes = selPart.match(/\"/g).length;\n if (quotes % 2) {\n return parseSelector(`${selector}\"]`);\n }\n return parseSelector(`${selector}]`);\n }\n return parseSelector(`${selector}]`);\n } else if (message === '\")\" is expected') {\n // workaround for https://github.com/csstree/csstree/issues/283\n if (REG_EMPTY_PS_FUNC.test(selector)) {\n return parseSelector(`${selector.replaceAll(REG_EMPTY_PS_FUNC, '()')}`);\n } else if (!selector.endsWith(')')) {\n return parseSelector(`${selector})`);\n } else {\n throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR);\n }\n } else {\n throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR);\n }\n }\n};\n\n/**\n * Walks the provided AST to collect selector branches and gather information\n * about its contents.\n * @param {object} ast - The AST to traverse.\n * @returns {{branches: Array<object>, info: object}} An object containing the selector branches and info.\n */\nexport const walkAST = (ast = {}) => {\n const branches = new Set();\n const info = {\n hasForgivenPseudoFunc: false,\n hasHasPseudoFunc: false,\n hasLogicalPseudoFunc: false,\n hasNotPseudoFunc: false,\n hasNthChildOfSelector: false,\n hasNestedSelector: false,\n hasStatePseudoClass: false\n };\n const opt = {\n enter(node) {\n switch (node.type) {\n case CLASS_SELECTOR: {\n if (/^-?\\d/.test(node.name)) {\n throw new DOMException(\n `Invalid selector .${node.name}`,\n SYNTAX_ERR\n );\n }\n break;\n }\n case ID_SELECTOR: {\n if (/^-?\\d/.test(node.name)) {\n throw new DOMException(\n `Invalid selector #${node.name}`,\n SYNTAX_ERR\n );\n }\n break;\n }\n case PS_CLASS_SELECTOR: {\n if (KEYS_LOGICAL.has(node.name)) {\n info.hasNestedSelector = true;\n info.hasLogicalPseudoFunc = true;\n if (node.name === 'has') {\n info.hasHasPseudoFunc = true;\n } else if (node.name === 'not') {\n info.hasNotPseudoFunc = true;\n } else {\n info.hasForgivenPseudoFunc = true;\n }\n } else if (KEYS_PS_CLASS_STATE.has(node.name)) {\n info.hasStatePseudoClass = true;\n } else if (\n KEYS_SHADOW_HOST.has(node.name) &&\n Array.isArray(node.children) &&\n node.children.length\n ) {\n info.hasNestedSelector = true;\n }\n break;\n }\n case PS_ELEMENT_SELECTOR: {\n if (REG_SHADOW_PS_ELEMENT.test(node.name)) {\n info.hasNestedSelector = true;\n }\n break;\n }\n case NTH: {\n if (node.selector) {\n info.hasNestedSelector = true;\n info.hasNthChildOfSelector = true;\n }\n break;\n }\n case SELECTOR: {\n branches.add(node.children);\n break;\n }\n default:\n }\n }\n };\n cssTree.walk(ast, opt);\n if (info.hasNestedSelector === true) {\n cssTree.findAll(ast, (node, item, list) => {\n if (list) {\n if (node.type === PS_CLASS_SELECTOR && KEYS_LOGICAL.has(node.name)) {\n const itemList = list.filter(i => {\n const { name, type } = i;\n return type === PS_CLASS_SELECTOR && KEYS_LOGICAL.has(name);\n });\n for (const { children } of itemList) {\n // SelectorList\n for (const { children: grandChildren } of children) {\n // Selector\n for (const { children: greatGrandChildren } of grandChildren) {\n if (branches.has(greatGrandChildren)) {\n branches.delete(greatGrandChildren);\n }\n }\n }\n }\n } else if (\n node.type === PS_CLASS_SELECTOR &&\n KEYS_SHADOW_HOST.has(node.name) &&\n Array.isArray(node.children) &&\n node.children.length\n ) {\n const itemList = list.filter(i => {\n const { children, name, type } = i;\n const res =\n type === PS_CLASS_SELECTOR &&\n KEYS_SHADOW_HOST.has(name) &&\n Array.isArray(children) &&\n children.length;\n return res;\n });\n for (const { children } of itemList) {\n // Selector\n for (const { children: grandChildren } of children) {\n if (branches.has(grandChildren)) {\n branches.delete(grandChildren);\n }\n }\n }\n } else if (\n node.type === PS_ELEMENT_SELECTOR &&\n REG_SHADOW_PS_ELEMENT.test(node.name)\n ) {\n const itemList = list.filter(i => {\n const { name, type } = i;\n const res =\n type === PS_ELEMENT_SELECTOR && REG_SHADOW_PS_ELEMENT.test(name);\n return res;\n });\n for (const { children } of itemList) {\n // Selector\n for (const { children: grandChildren } of children) {\n if (branches.has(grandChildren)) {\n branches.delete(grandChildren);\n }\n }\n }\n } else if (node.type === NTH && node.selector) {\n const itemList = list.filter(i => {\n const { selector, type } = i;\n const res = type === NTH && selector;\n return res;\n });\n for (const { selector } of itemList) {\n const { children } = selector;\n // Selector\n for (const { children: grandChildren } of children) {\n if (branches.has(grandChildren)) {\n branches.delete(grandChildren);\n }\n }\n }\n }\n }\n });\n }\n return {\n info,\n branches: [...branches]\n };\n};\n\n/**\n * Comparison function for sorting AST nodes based on specificity.\n * @param {object} a - The first AST node.\n * @param {object} b - The second AST node.\n * @returns {number} -1, 0 or 1, depending on the sort order.\n */\nexport const compareASTNodes = (a, b) => {\n const bitA = AST_SORT_ORDER.get(a.type);\n const bitB = AST_SORT_ORDER.get(b.type);\n if (bitA === bitB) {\n return 0;\n } else if (bitA > bitB) {\n return 1;\n } else {\n return -1;\n }\n};\n\n/**\n * Sorts a collection of AST nodes based on CSS specificity rules.\n * @param {Array<object>} asts - A collection of AST nodes to sort.\n * @returns {Array<object>} A new array containing the sorted AST nodes.\n */\nexport const sortAST = asts => {\n const arr = [...asts];\n if (arr.length > 1) {\n arr.sort(compareASTNodes);\n }\n return arr;\n};\n\n/**\n * Parses a type selector's name, which may include a namespace prefix.\n * @param {string} selector - The type selector name (e.g., 'ns|E' or 'E').\n * @returns {{prefix: string, localName: string}} An object with `prefix` and\n * `localName` properties.\n */\nexport const parseAstName = selector => {\n let prefix;\n let localName;\n if (selector && typeof selector === 'string') {\n if (selector.indexOf('|') > -1) {\n [prefix, localName] = selector.split('|');\n } else {\n prefix = '*';\n localName = selector;\n }\n } else {\n throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR);\n }\n return {\n prefix,\n localName\n };\n};\n\n/* Re-exported from css-tree. */\nexport { find as findAST, generate as generateCSS } from 'css-tree';\n","/**\n * utility.js\n */\n\n/* import */\nimport nwsapi from '@asamuzakjp/nwsapi';\nimport bidiFactory from 'bidi-js';\nimport * as cssTree from 'css-tree';\nimport isCustomElementName from 'is-potential-custom-element-name';\n\n/* constants */\nimport {\n ATRULE,\n COMBO,\n COMPOUND_I,\n DESCEND,\n DOCUMENT_FRAGMENT_NODE,\n DOCUMENT_NODE,\n DOCUMENT_POSITION_CONTAINS,\n DOCUMENT_POSITION_PRECEDING,\n ELEMENT_NODE,\n HAS_COMPOUND,\n INPUT_BUTTON,\n INPUT_EDIT,\n INPUT_LTR,\n INPUT_TEXT,\n KEYS_LOGICAL,\n LOGIC_COMPLEX,\n LOGIC_COMPOUND,\n N_TH,\n PSEUDO_CLASS,\n RULE,\n SCOPE,\n SELECTOR_LIST,\n SIBLING,\n TARGET_ALL,\n TARGET_FIRST,\n TEXT_NODE,\n TYPE_FROM,\n TYPE_TO\n} from './constant.js';\nconst KEYS_DIR_AUTO = new Set([...INPUT_BUTTON, ...INPUT_TEXT, 'hidden']);\nconst KEYS_DIR_LTR = new Set(INPUT_LTR);\nconst KEYS_INPUT_EDIT = new Set(INPUT_EDIT);\nconst KEYS_NODE_DIR_EXCLUDE = new Set(['bdi', 'script', 'style', 'textarea']);\nconst KEYS_NODE_FOCUSABLE = new Set(['button', 'select', 'textarea']);\nconst KEYS_NODE_FOCUSABLE_SVG = new Set([\n 'clipPath',\n 'defs',\n 'desc',\n 'linearGradient',\n 'marker',\n 'mask',\n 'metadata',\n 'pattern',\n 'radialGradient',\n 'script',\n 'style',\n 'symbol',\n 'title'\n]);\nconst REG_EXCLUDE_BASIC =\n /[|\\\\]|::|[^\\u0021-\\u007F\\s]|\\[\\s*[\\w$*=^|~-]+(?:(?:\"[\\w$*=^|~\\s'-]+\"|'[\\w$*=^|~\\s\"-]+')?(?:\\s+[\\w$*=^|~-]+)+|\"[^\"\\]]{1,255}|'[^'\\]]{1,255})\\s*\\]|:(?:is|where)\\(\\s*\\)/;\nconst REG_COMPLEX = new RegExp(`${COMPOUND_I}${COMBO}${COMPOUND_I}`, 'i');\nconst REG_DESCEND = new RegExp(`${COMPOUND_I}${DESCEND}${COMPOUND_I}`, 'i');\nconst REG_SIBLING = new RegExp(`${COMPOUND_I}${SIBLING}${COMPOUND_I}`, 'i');\nconst REG_LOGIC_COMPLEX = new RegExp(\n `:(?!${PSEUDO_CLASS}|${N_TH}|${LOGIC_COMPLEX})`\n);\nconst REG_LOGIC_COMPOUND = new RegExp(\n `:(?!${PSEUDO_CLASS}|${N_TH}|${LOGIC_COMPOUND})`\n);\nconst REG_LOGIC_HAS_COMPOUND = new RegExp(\n `:(?!${PSEUDO_CLASS}|${N_TH}|${LOGIC_COMPOUND}|${HAS_COMPOUND})`\n);\nconst REG_END_WITH_HAS = new RegExp(`:${HAS_COMPOUND}$`);\nconst REG_WO_LOGICAL = new RegExp(`:(?!${PSEUDO_CLASS}|${N_TH})`);\nconst REG_IS_HTML = /^(?:application\\/xhtml\\+x|text\\/ht)ml$/;\nconst REG_IS_XML =\n /^(?:application\\/(?:[\\w\\-.]+\\+)?|image\\/[\\w\\-.]+\\+|text\\/)xml$/;\n\n/**\n * Manages state for extracting nested selectors from a CSS AST.\n */\nclass SelectorExtractor {\n constructor() {\n this.selectors = [];\n this.isScoped = false;\n }\n\n /**\n * Walker enter function.\n * @param {object} node - The AST node.\n */\n enter(node) {\n switch (node.type) {\n case ATRULE: {\n if (node.name === 'scope') {\n this.isScoped = true;\n }\n break;\n }\n case SCOPE: {\n const { children, type } = node.root;\n const arr = [];\n if (type === SELECTOR_LIST) {\n for (const child of children) {\n const selector = cssTree.generate(child);\n arr.push(selector);\n }\n this.selectors.push(arr);\n }\n break;\n }\n case RULE: {\n const { children, type } = node.prelude;\n const arr = [];\n if (type === SELECTOR_LIST) {\n let hasAmp = false;\n for (const child of children) {\n const selector = cssTree.generate(child);\n if (this.isScoped && !hasAmp) {\n hasAmp = /\\x26/.test(selector);\n }\n arr.push(selector);\n }\n if (this.isScoped) {\n if (hasAmp) {\n this.selectors.push(arr);\n /* FIXME:\n } else {\n this.selectors = arr;\n this.isScoped = false;\n */\n }\n } else {\n this.selectors.push(arr);\n }\n }\n }\n }\n }\n\n /**\n * Walker leave function.\n * @param {object} node - The AST node.\n */\n leave(node) {\n if (node.type === ATRULE) {\n if (node.name === 'scope') {\n this.isScoped = false;\n }\n }\n }\n}\n\n/**\n * Get type of an object.\n * @param {object} o - Object to check.\n * @returns {string} - Type of the object.\n */\nexport const getType = o =>\n Object.prototype.toString.call(o).slice(TYPE_FROM, TYPE_TO);\n\n/**\n * Verify array contents.\n * @param {Array} arr - The array.\n * @param {string} type - Expected type, e.g. 'String'.\n * @throws {TypeError} - Throws if array or its items are of unexpected type.\n * @returns {Array} - The verified array.\n */\nexport const verifyArray = (arr, type) => {\n if (!Array.isArray(arr)) {\n throw new TypeError(`Unexpected type ${getType(arr)}`);\n }\n if (typeof type !== 'string') {\n throw new TypeError(`Unexpected type ${getType(type)}`);\n }\n for (const item of arr) {\n if (getType(item) !== type) {\n throw new TypeError(`Unexpected type ${getType(item)}`);\n }\n }\n return arr;\n};\n\n/**\n * Generate a DOMException.\n * @param {string} msg - The error message.\n * @param {string} name - The error name.\n * @param {object} globalObject - The global object (e.g., window).\n * @returns {DOMException} The generated DOMException object.\n */\nexport const generateException = (msg, name, globalObject = globalThis) => {\n return new globalObject.DOMException(msg, name);\n};\n\n/**\n * Find a nested :has() pseudo-class.\n * @param {object} leaf - The AST leaf to check.\n * @returns {?object} The leaf if it's :has, otherwise null.\n */\nexport const findNestedHas = leaf => {\n return leaf.name === 'has';\n};\n\n/**\n * Find a logical pseudo-class that contains a nested :has().\n * @param {object} leaf - The AST leaf to check.\n * @returns {?object} The leaf if it matches, otherwise null.\n */\nexport const findLogicalWithNestedHas = leaf => {\n if (KEYS_LOGICAL.has(leaf.name) && cssTree.find(leaf, findNestedHas)) {\n return leaf;\n }\n return null;\n};\n\n/**\n * Filter a list of nodes based on An+B logic\n * @param {Array.<object>} nodes - array of nodes to filter\n * @param {object} anb - An+B options\n * @param {number} anb.a - a\n * @param {number} anb.b - b\n * @param {boolean} [anb.reverse] - reverse order\n * @returns {Array.<object>} - array of matched nodes\n */\nexport const filterNodesByAnB = (nodes, anb) => {\n const { a, b, reverse } = anb;\n const processedNodes = reverse ? [...nodes].reverse() : nodes;\n const l = nodes.length;\n const matched = [];\n if (a === 0) {\n if (b > 0 && b <= l) {\n matched.push(processedNodes[b - 1]);\n }\n return matched;\n }\n let startIndex = b - 1;\n if (a > 0) {\n while (startIndex < 0) {\n startIndex += a;\n }\n for (let i = startIndex; i < l; i += a) {\n matched.push(processedNodes[i]);\n }\n } else if (startIndex >= 0) {\n for (let i = startIndex; i >= 0; i += a) {\n matched.push(processedNodes[i]);\n }\n return matched.reverse();\n }\n return matched;\n};\n\n/**\n * Resolve content document, root node, and check if it's in a shadow DOM.\n * @param {object} node - Document, DocumentFragment, or Element node.\n * @returns {Array.<object|boolean>} - [document, root, isInShadow].\n */\nexport const resolveContent = node => {\n if (!node?.nodeType) {\n throw new TypeError(`Unexpected type ${getType(node)}`);\n }\n let document;\n let root;\n let shadow;\n switch (node.nodeType) {\n case DOCUMENT_NODE: {\n document = node;\n root = node;\n break;\n }\n case DOCUMENT_FRAGMENT_NODE: {\n const { host, mode, ownerDocument } = node;\n document = ownerDocument;\n root = node;\n shadow = host && (mode === 'close' || mode === 'open');\n break;\n }\n case ELEMENT_NODE: {\n document = node.ownerDocument;\n let refNode = node;\n while (refNode) {\n const { host, mode, nodeType, parentNode } = refNode;\n if (nodeType === DOCUMENT_FRAGMENT_NODE) {\n shadow = host && (mode === 'close' || mode === 'open');\n break;\n } else if (parentNode) {\n refNode = parentNode;\n } else {\n break;\n }\n }\n root = refNode;\n break;\n }\n default: {\n throw new TypeError(`Unexpected node ${node.nodeName}`);\n }\n }\n return [document, root, !!shadow];\n};\n\n/**\n * Traverse node tree with a TreeWalker.\n * @param {object} node - The target node.\n * @param {object} walker - The TreeWalker instance.\n * @param {boolean} [force] - Traverse only to the next node.\n * @returns {?object} - The current node if found, otherwise null.\n */\nexport const traverseNode = (node, walker, force = false) => {\n if (!node?.nodeType) {\n throw new TypeError(`Unexpected type ${getType(node)}`);\n }\n if (!walker) {\n return null;\n }\n let refNode = walker.currentNode;\n if (refNode === node) {\n return refNode;\n } else if (force || refNode.contains(node)) {\n refNode = walker.nextNode();\n while (refNode) {\n if (refNode === node) {\n break;\n }\n refNode = walker.nextNode();\n }\n return refNode;\n } else {\n if (refNode !== walker.root) {\n let bool;\n while (refNode) {\n if (refNode === node) {\n bool = true;\n break;\n } else if (refNode === walker.root || refNode.contains(node)) {\n break;\n }\n refNode = walker.parentNode();\n }\n if (bool) {\n return refNode;\n }\n }\n if (node.nodeType === ELEMENT_NODE) {\n let bool;\n while (refNode) {\n if (refNode === node) {\n bool = true;\n break;\n }\n refNode = walker.nextNode();\n }\n if (bool) {\n return refNode;\n }\n }\n }\n return null;\n};\n\n/**\n * Check if a node is a custom element.\n * @param {object} node - The Element node.\n * @param {object} [opt] - Options.\n * @returns {boolean} - True if it's a custom element.\n */\nexport const isCustomElement = (node, opt = {}) => {\n if (!node?.nodeType) {\n throw new TypeError(`Unexpected type ${getType(node)}`);\n }\n if (node.nodeType !== ELEMENT_NODE) {\n return false;\n }\n const { localName, ownerDocument } = node;\n const { formAssociated } = opt;\n const window = ownerDocument.defaultView;\n let elmConstructor;\n const attr = node.getAttribute('is');\n if (attr) {\n elmConstructor =\n isCustomElementName(attr) && window.customElements.get(attr);\n } else {\n elmConstructor =\n isCustomElementName(localName) && window.customElements.get(localName);\n }\n if (elmConstructor) {\n if (formAssociated) {\n return !!elmConstructor.formAssociated;\n }\n return true;\n }\n return false;\n};\n\n/**\n * Get slotted text content.\n * @param {object} node - The Element node (likely a <slot>).\n * @returns {?string} - The text content.\n */\nexport const getSlottedTextContent = node => {\n if (!node?.nodeType) {\n throw new TypeError(`Unexpected type ${getType(node)}`);\n }\n if (typeof node.assignedNodes !== 'function') {\n return null;\n }\n const nodes = node.assignedNodes();\n if (nodes.length) {\n let text = '';\n const l = nodes.length;\n for (let i = 0; i < l; i++) {\n const item = nodes[i];\n text = item.textContent.trim();\n if (text) {\n break;\n }\n }\n return text;\n }\n return node.textContent.trim();\n};\n\n/**\n * Get directionality of a node.\n * @see https://html.spec.whatwg.org/multipage/dom.html#the-dir-attribute\n * @param {object} node - The Element node.\n * @returns {?string} - 'ltr' or 'rtl'.\n */\nexport const getDirectionality = node => {\n if (!node?.nodeType) {\n throw new TypeError(`Unexpected type ${getType(node)}`);\n }\n if (node.nodeType !== ELEMENT_NODE) {\n return null;\n }\n const { dir: dirAttr, localName, parentNode } = node;\n const { getEmbeddingLevels } = bidiFactory();\n if (dirAttr === 'ltr' || dirAttr === 'rtl') {\n return dirAttr;\n } else if (dirAttr === 'auto') {\n let text = '';\n switch (localName) {\n case 'input': {\n if (!node.type || KEYS_DIR_AUTO.has(node.type)) {\n text = node.value;\n } else if (KEYS_DIR_LTR.has(node.type)) {\n return 'ltr';\n }\n break;\n }\n case 'slot': {\n text = getSlottedTextContent(node);\n break;\n }\n case 'textarea': {\n text = node.value;\n break;\n }\n default: {\n const items = [].slice.call(node.childNodes);\n for (const item of items) {\n const {\n dir: itemDir,\n localName: itemLocalName,\n nodeType: itemNodeType,\n textContent: itemTextContent\n } = item;\n if (itemNodeType === TEXT_NODE) {\n text = itemTextContent.trim();\n } else if (\n itemNodeType === ELEMENT_NODE &&\n !KEYS_NODE_DIR_EXCLUDE.has(itemLocalName) &&\n (!itemDir || (itemDir !== 'ltr' && itemDir !== 'rtl'))\n ) {\n if (itemLocalName === 'slot') {\n text = getSlottedTextContent(item);\n } else {\n text = itemTextContent.trim();\n }\n }\n if (text) {\n break;\n }\n }\n }\n }\n if (text) {\n const {\n paragraphs: [{ level }]\n } = getEmbeddingLevels(text);\n if (level % 2 === 1) {\n return 'rtl';\n }\n } else if (parentNode) {\n const { nodeType: parentNodeType } = parentNode;\n if (parentNodeType === ELEMENT_NODE) {\n return getDirectionality(parentNode);\n }\n }\n } else if (localName === 'input' && node.type === 'tel') {\n return 'ltr';\n } else if (localName === 'bdi') {\n const text = node.textContent.trim();\n if (text) {\n const {\n paragraphs: [{ level }]\n } = getEmbeddingLevels(text);\n if (level % 2 === 1) {\n return 'rtl';\n }\n }\n } else if (parentNode) {\n if (localName === 'slot') {\n const text = getSlottedTextContent(node);\n if (text) {\n const {\n paragraphs: [{ level }]\n } = getEmbeddingLevels(text);\n if (level % 2 === 1) {\n return 'rtl';\n }\n return 'ltr';\n }\n }\n const { nodeType: parentNodeType } = parentNode;\n if (parentNodeType === ELEMENT_NODE) {\n return getDirectionality(parentNode);\n }\n }\n return 'ltr';\n};\n\n/**\n * Traverses up the DOM tree to find the language attribute for a node.\n * It checks for 'lang' in HTML and 'xml:lang' in XML contexts.\n * @param {object} node - The starting element node.\n * @returns {string|null} The language attribute value, or null if not found.\n */\nexport const getLanguageAttribute = node => {\n if (!node?.nodeType) {\n throw new TypeError(`Unexpected type ${getType(node)}`);\n }\n if (node.nodeType !== ELEMENT_NODE) {\n return null;\n }\n const { contentType } = node.ownerDocument;\n const isHtml = REG_IS_HTML.test(contentType);\n const isXml = REG_IS_XML.test(contentType);\n let isShadow = false;\n // Traverse up from the current node to the root.\n let current = node;\n while (current) {\n // Check if the current node is an element.\n switch (current.nodeType) {\n case ELEMENT_NODE: {\n // Check for and return the language attribute if present.\n if (isHtml && current.hasAttribute('lang')) {\n return current.getAttribute('lang');\n } else if (isXml && current.hasAttribute('xml:lang')) {\n return current.getAttribute('xml:lang');\n }\n break;\n }\n case DOCUMENT_FRAGMENT_NODE: {\n // Continue traversal if the current node is a shadow root.\n if (current.host) {\n isShadow = true;\n }\n break;\n }\n case DOCUMENT_NODE:\n default: {\n // Stop if we reach the root document node.\n return null;\n }\n }\n if (isShadow) {\n current = current.host;\n isShadow = false;\n } else if (current.parentNode) {\n current = current.parentNode;\n } else {\n break;\n }\n }\n // No language attribute was found in the hierarchy.\n return null;\n};\n\n/**\n * Check if content is editable.\n * NOTE: Not implemented in jsdom https://github.com/jsdom/jsdom/issues/1670\n * @param {object} node - The Element node.\n * @returns {boolean} - True if content is editable.\n */\nexport const isContentEditable = node => {\n if (!node?.nodeType) {\n throw new TypeError(`Unexpected type ${getType(node)}`);\n }\n if (node.nodeType !== ELEMENT_NODE) {\n return false;\n }\n if (typeof node.isContentEditable === 'boolean') {\n return node.isContentEditable;\n } else if (node.ownerDocument.designMode === 'on') {\n return true;\n } else {\n let attr;\n if (node.hasAttribute('contenteditable')) {\n attr = node.getAttribute('contenteditable');\n } else {\n attr = 'inherit';\n }\n switch (attr) {\n case '':\n case 'true': {\n return true;\n }\n case 'plaintext-only': {\n // FIXME:\n // @see https://github.com/w3c/editing/issues/470\n // @see https://github.com/whatwg/html/issues/10651\n return true;\n }\n case 'false': {\n return false;\n }\n default: {\n if (node?.parentNode?.nodeType === ELEMENT_NODE) {\n return isContentEditable(node.parentNode);\n }\n return false;\n }\n }\n }\n};\n\n/**\n * Check if a node is visible.\n * @param {object} node - The Element node.\n * @returns {boolean} - True if the node is visible.\n */\nexport const isVisible = node => {\n if (node?.nodeType !== ELEMENT_NODE) {\n return false;\n }\n const window = node.ownerDocument.defaultView;\n const { display, visibility } = window.getComputedStyle(node);\n if (display !== 'none' && visibility === 'visible') {\n return true;\n }\n return false;\n};\n\n/**\n * Check if focus is visible on the node.\n * @param {object} node - The Element node.\n * @returns {boolean} - True if focus is visible.\n */\nexport const isFocusVisible = node => {\n if (node?.nodeType !== ELEMENT_NODE) {\n return false;\n }\n const { localName, type } = node;\n switch (localName) {\n case 'input': {\n if (!type || KEYS_INPUT_EDIT.has(type)) {\n return true;\n }\n return false;\n }\n case 'textarea': {\n return true;\n }\n default: {\n return isContentEditable(node);\n }\n }\n};\n\n/**\n * Check if an area is focusable.\n * @param {object} node - The Element node.\n * @returns {boolean} - True if the area is focusable.\n */\nexport const isFocusableArea = node => {\n if (node?.nodeType !== ELEMENT_NODE) {\n return false;\n }\n if (!node.isConnected) {\n return false;\n }\n const window = node.ownerDocument.defaultView;\n if (node instanceof window.HTMLElement) {\n if (Number.isInteger(parseInt(node.getAttribute('tabindex')))) {\n return true;\n }\n if (isContentEditable(node)) {\n return true;\n }\n const { localName, parentNode } = node;\n switch (localName) {\n case 'a': {\n if (node.href || node.hasAttribute('href')) {\n return true;\n }\n return false;\n }\n case 'iframe': {\n return true;\n }\n case 'input': {\n if (\n node.disabled ||\n node.hasAttribute('disabled') ||\n node.hidden ||\n node.hasAttribute('hidden')\n ) {\n return false;\n }\n return true;\n }\n case 'summary': {\n if (parentNode.localName === 'details') {\n let child = parentNode.firstElementChild;\n let bool = false;\n while (child) {\n if (child.localName === 'summary') {\n bool = child === node;\n break;\n }\n child = child.nextElementSibling;\n }\n return bool;\n }\n return false;\n }\n default: {\n if (\n KEYS_NODE_FOCUSABLE.has(localName) &&\n !(node.disabled || node.hasAttribute('disabled'))\n ) {\n return true;\n }\n }\n }\n } else if (node instanceof window.SVGElement) {\n if (Number.isInteger(parseInt(node.getAttributeNS(null, 'tabindex')))) {\n const ns = 'http://www.w3.org/2000/svg';\n let bool;\n let refNode = node;\n while (refNode.namespaceURI === ns) {\n bool = KEYS_NODE_FOCUSABLE_SVG.has(refNode.localName);\n if (bool) {\n break;\n }\n if (refNode?.parentNode?.namespaceURI === ns) {\n refNode = refNode.parentNode;\n } else {\n break;\n }\n }\n if (bool) {\n return false;\n }\n return true;\n }\n if (\n node.localName === 'a' &&\n (node.href || node.hasAttributeNS(null, 'href'))\n ) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * Check if a node is focusable.\n * NOTE: Not applied, needs fix in jsdom itself.\n * @see https://github.com/whatwg/html/pull/8392\n * @see https://phabricator.services.mozilla.com/D156219\n * @see https://github.com/jsdom/jsdom/issues/3029\n * @see https://github.com/jsdom/jsdom/issues/3464\n * @param {object} node - The Element node.\n * @returns {boolean} - True if the node is focusable.\n */\nexport const isFocusable = node => {\n if (node?.nodeType !== ELEMENT_NODE) {\n return false;\n }\n const window = node.ownerDocument.defaultView;\n let refNode = node;\n let res = true;\n while (refNode) {\n if (refNode.disabled || refNode.hasAttribute('disabled')) {\n res = false;\n break;\n }\n if (refNode.hidden || refNode.hasAttribute('hidden')) {\n res = false;\n }\n const { contentVisibility, display, visibility } =\n window.getComputedStyle(refNode);\n if (\n display === 'none' ||\n visibility !== 'visible' ||\n (contentVisibility === 'hidden' && refNode !== node)\n ) {\n res = false;\n } else {\n res = true;\n }\n if (res && refNode?.parentNode?.nodeType === ELEMENT_NODE) {\n refNode = refNode.parentNode;\n } else {\n break;\n }\n }\n return res;\n};\n\n/**\n * Get namespace URI.\n * @param {string} ns - The namespace prefix.\n * @param {object} node - The Element node.\n * @returns {?string} - The namespace URI.\n */\nexport const getNamespaceURI = (ns, node) => {\n if (typeof ns !== 'string') {\n throw new TypeError(`Unexpected type ${getType(ns)}`);\n } else if (!node?.nodeType) {\n throw new TypeError(`Unexpected type ${getType(node)}`);\n }\n if (!ns || node.nodeType !== ELEMENT_NODE) {\n return null;\n }\n const { attributes } = node;\n let res;\n for (const attr of attributes) {\n const { name, namespaceURI, prefix, value } = attr;\n if (name === `xmlns:${ns}`) {\n res = value;\n } else if (prefix === ns) {\n res = namespaceURI;\n }\n if (res) {\n break;\n }\n }\n return res ?? null;\n};\n\n/**\n * Check if a namespace is declared.\n * @param {string} ns - The namespace.\n * @param {object} node - The Element node.\n * @returns {boolean} - True if the namespace is declared.\n */\nexport const isNamespaceDeclared = (ns = '', node = {}) => {\n if (!ns || typeof ns !== 'string' || node?.nodeType !== ELEMENT_NODE) {\n return false;\n }\n if (node.lookupNamespaceURI(ns)) {\n return true;\n }\n const root = node.ownerDocument.documentElement;\n let parent = node;\n let res;\n while (parent) {\n res = getNamespaceURI(ns, parent);\n if (res || parent === root) {\n break;\n }\n parent = parent.parentNode;\n }\n return !!res;\n};\n\n/**\n * Check if nodeA precedes and/or contains nodeB.\n * @param {object} nodeA - The first Element node.\n * @param {object} nodeB - The second Element node.\n * @returns {boolean} - True if nodeA precedes nodeB.\n */\nexport const isPreceding = (nodeA, nodeB) => {\n if (!nodeA?.nodeType) {\n throw new TypeError(`Unexpected type ${getType(nodeA)}`);\n } else if (!nodeB?.nodeType) {\n throw new TypeError(`Unexpected type ${getType(nodeB)}`);\n }\n if (nodeA.nodeType !== ELEMENT_NODE || nodeB.nodeType !== ELEMENT_NODE) {\n return false;\n }\n const posBit = nodeB.compareDocumentPosition(nodeA);\n const res =\n posBit & DOCUMENT_POSITION_PRECEDING || posBit & DOCUMENT_POSITION_CONTAINS;\n return !!res;\n};\n\n/**\n * Comparison function for sorting nodes based on document position.\n * @param {object} a - The first node.\n * @param {object} b - The second node.\n * @returns {number} - Sort order.\n */\nexport const compareNodes = (a, b) => {\n if (isPreceding(b, a)) {\n return 1;\n }\n return -1;\n};\n\n/**\n * Sort a collection of nodes.\n * @param {Array.<object>|Set.<object>} nodes - Collection of nodes.\n * @returns {Array.<object>} - Collection of sorted nodes.\n */\nexport const sortNodes = (nodes = []) => {\n const arr = [...nodes];\n if (arr.length > 1) {\n arr.sort(compareNodes);\n }\n return arr;\n};\n\n/**\n * Concat an array of nested selectors into an equivalent single selector.\n * @param {Array.<Array.<string>>} selectors - [parents, children, ...].\n * @returns {string} - The concatenated selector.\n */\nexport const concatNestedSelectors = selectors => {\n if (!Array.isArray(selectors)) {\n throw new TypeError(`Unexpected type ${getType(selectors)}`);\n }\n let selector = '';\n if (selectors.length) {\n const revSelectors = selectors.toReversed();\n let child = verifyArray(revSelectors.shift(), 'String');\n if (child.length === 1) {\n [child] = child;\n }\n while (revSelectors.length) {\n const parentArr = verifyArray(revSelectors.shift(), 'String');\n if (!parentArr.length) {\n continue;\n }\n let parent;\n if (parentArr.length === 1) {\n [parent] = parentArr;\n if (!/^[>~+]/.test(parent) && /[\\s>~+]/.test(parent)) {\n parent = `:is(${parent})`;\n }\n } else {\n parent = `:is(${parentArr.join(', ')})`;\n }\n if (selector.includes('\\x26')) {\n selector = selector.replace(/\\x26/g, parent);\n }\n if (Array.isArray(child)) {\n const items = [];\n for (let item of child) {\n if (item.includes('\\x26')) {\n if (/^[>~+]/.test(item)) {\n item = `${parent} ${item.replace(/\\x26/g, parent)} ${selector}`;\n } else {\n item = `${item.replace(/\\x26/g, parent)} ${selector}`;\n }\n } else {\n item = `${parent} ${item} ${selector}`;\n }\n items.push(item.trim());\n }\n selector = items.join(', ');\n } else if (revSelectors.length) {\n selector = `${child} ${selector}`;\n } else {\n if (child.includes('\\x26')) {\n if (/^[>~+]/.test(child)) {\n selector = `${parent} ${child.replace(/\\x26/g, parent)} ${selector}`;\n } else {\n selector = `${child.replace(/\\x26/g, parent)} ${selector}`;\n }\n } else {\n selector = `${parent} ${child} ${selector}`;\n }\n }\n selector = selector.trim();\n if (revSelectors.length) {\n child = parentArr.length > 1 ? parentArr : parent;\n } else {\n break;\n }\n }\n selector = selector.replace(/\\x26/g, ':scope').trim();\n }\n return selector;\n};\n\n/**\n * Extract nested selectors from CSSRule.cssText.\n * @param {string} css - CSSRule.cssText.\n * @returns {Array.<Array.<string>>} - Array of nested selectors.\n */\nexport const extractNestedSelectors = css => {\n const ast = cssTree.parse(css, {\n context: 'rule'\n });\n const extractor = new SelectorExtractor();\n cssTree.walk(ast, {\n enter: extractor.enter.bind(extractor),\n leave: extractor.leave.bind(extractor)\n });\n return extractor.selectors;\n};\n\n/**\n * Initialize nwsapi.\n * @param {object} window - The Window object.\n * @param {object} document - The Document object.\n * @returns {object} - The nwsapi instance.\n */\nexport const initNwsapi = (window, document) => {\n if (!window?.DOMException) {\n throw new TypeError(`Unexpected global object ${getType(window)}`);\n }\n if (document?.nodeType !== DOCUMENT_NODE) {\n document = window.document;\n }\n const nw = nwsapi({\n document,\n DOMException: window.DOMException\n });\n nw.configure({\n LOGERRORS: false\n });\n return nw;\n};\n\n/**\n * Filter a selector for use with nwsapi.\n * @param {string} selector - The selector string.\n * @param {string} target - The target type.\n * @returns {boolean} - True if the selector is valid for nwsapi.\n */\nexport const filterSelector = (selector, target) => {\n const isQuerySelectorType = target === TARGET_FIRST || target === TARGET_ALL;\n if (\n !selector ||\n typeof selector !== 'string' ||\n /null|undefined/.test(selector)\n ) {\n return false;\n }\n // Exclude missing close square bracket.\n if (selector.includes('[')) {\n const index = selector.lastIndexOf('[');\n const sel = selector.substring(index);\n if (sel.indexOf(']') < 0) {\n return false;\n }\n }\n // Exclude various complex or unsupported selectors.\n // - selectors containing '/'\n // - namespaced selectors\n // - escaped selectors\n // - pseudo-element selectors\n // - selectors containing non-ASCII\n // - selectors containing control character other than whitespace\n // - attribute selectors with case flag, e.g. [attr i]\n // - attribute selectors with unclosed quotes\n // - empty :is() or :where()\n if (selector.includes('/') || REG_EXCLUDE_BASIC.test(selector)) {\n return false;\n }\n // Include pseudo-classes that are known to work correctly.\n if (selector.includes(':')) {\n let complex = false;\n if (target !== isQuerySelectorType) {\n complex = REG_COMPLEX.test(selector);\n }\n if (\n isQuerySelectorType &&\n REG_DESCEND.test(selector) &&\n !REG_SIBLING.test(selector)\n ) {\n return false;\n } else if (!isQuerySelectorType && /:has\\(/.test(selector)) {\n if (!complex || REG_LOGIC_HAS_COMPOUND.test(selector)) {\n return false;\n }\n return REG_END_WITH_HAS.test(selector);\n } else if (/:(?:is|not)\\(/.test(selector)) {\n if (complex) {\n return !REG_LOGIC_COMPLEX.test(selector);\n } else {\n return !REG_LOGIC_COMPOUND.test(selector);\n }\n } else {\n return !REG_WO_LOGICAL.test(selector);\n }\n }\n return true;\n};\n","/**\n * constant.js\n */\n\n/* string */\nexport const ATRULE = 'Atrule';\nexport const ATTR_SELECTOR = 'AttributeSelector';\nexport const CLASS_SELECTOR = 'ClassSelector';\nexport const COMBINATOR = 'Combinator';\nexport const IDENT = 'Identifier';\nexport const ID_SELECTOR = 'IdSelector';\nexport const NOT_SUPPORTED_ERR = 'NotSupportedError';\nexport const NTH = 'Nth';\nexport const OPERATOR = 'Operator';\nexport const PS_CLASS_SELECTOR = 'PseudoClassSelector';\nexport const PS_ELEMENT_SELECTOR = 'PseudoElementSelector';\nexport const RULE = 'Rule';\nexport const SCOPE = 'Scope';\nexport const SELECTOR = 'Selector';\nexport const SELECTOR_LIST = 'SelectorList';\nexport const STRING = 'String';\nexport const SYNTAX_ERR = 'SyntaxError';\nexport const TARGET_ALL = 'all';\nexport const TARGET_FIRST = 'first';\nexport const TARGET_LINEAL = 'lineal';\nexport const TARGET_SELF = 'self';\nexport const TYPE_SELECTOR = 'TypeSelector';\n\n/* numeric */\nexport const BIT_01 = 1;\nexport const BIT_02 = 2;\nexport const BIT_04 = 4;\nexport const BIT_08 = 8;\nexport const BIT_16 = 0x10;\nexport const BIT_32 = 0x20;\nexport const BIT_FFFF = 0xffff;\nexport const DUO = 2;\nexport const HEX = 16;\nexport const TYPE_FROM = 8;\nexport const TYPE_TO = -1;\n\n/* Node */\nexport const ELEMENT_NODE = 1;\nexport const TEXT_NODE = 3;\nexport const DOCUMENT_NODE = 9;\nexport const DOCUMENT_FRAGMENT_NODE = 11;\nexport const DOCUMENT_POSITION_PRECEDING = 2;\nexport const DOCUMENT_POSITION_CONTAINS = 8;\nexport const DOCUMENT_POSITION_CONTAINED_BY = 0x10;\n\n/* NodeFilter */\nexport const SHOW_ALL = 0xffffffff;\nexport const SHOW_CONTAINER = 0x501;\nexport const SHOW_DOCUMENT = 0x100;\nexport const SHOW_DOCUMENT_FRAGMENT = 0x400;\nexport const SHOW_ELEMENT = 1;\n\n/* selectors */\nexport const ALPHA_NUM = '[A-Z\\\\d]+';\nexport const CHILD_IDX = '(?:first|last|only)-(?:child|of-type)';\nexport const DIGIT = '(?:0|[1-9]\\\\d*)';\nexport const LANG_PART = `(?:-${ALPHA_NUM})*`;\nexport const PSEUDO_CLASS = `(?:any-)?link|${CHILD_IDX}|checked|empty|indeterminate|read-(?:only|write)|target`;\nexport const ANB = `[+-]?(?:${DIGIT}n?|n)|(?:[+-]?${DIGIT})?n\\\\s*[+-]\\\\s*${DIGIT}`;\n// combinators\nexport const COMBO = '\\\\s?[\\\\s>~+]\\\\s?';\nexport const DESCEND = '\\\\s?[\\\\s>]\\\\s?';\nexport const SIBLING = '\\\\s?[+~]\\\\s?';\n// LOGIC_IS: :is()\nexport const LOGIC_IS = `:is\\\\(\\\\s*[^)]+\\\\s*\\\\)`;\n// N_TH: excludes An+B with selector list, e.g. :nth-child(2n+1 of .foo)\nexport const N_TH = `nth-(?:last-)?(?:child|of-type)\\\\(\\\\s*(?:even|odd|${ANB})\\\\s*\\\\)`;\n// SUB_TYPE: attr, id, class, pseudo-class, note that [foo|=bar] is excluded\nexport const SUB_TYPE = '\\\\[[^|\\\\]]+\\\\]|[#.:][\\\\w-]+';\nexport const SUB_TYPE_WO_PSEUDO = '\\\\[[^|\\\\]]+\\\\]|[#.][\\\\w-]+';\n// TAG_TYPE: *, tag\nexport const TAG_TYPE = '\\\\*|[A-Za-z][\\\\w-]*';\nexport const TAG_TYPE_I = '\\\\*|[A-Z][\\\\w-]*';\nexport const COMPOUND = `(?:${TAG_TYPE}|(?:${TAG_TYPE})?(?:${SUB_TYPE})+)`;\nexport const COMPOUND_L = `(?:${TAG_TYPE}|(?:${TAG_TYPE})?(?:${SUB_TYPE}|${LOGIC_IS})+)`;\nexport const COMPOUND_I = `(?:${TAG_TYPE_I}|(?:${TAG_TYPE_I})?(?:${SUB_TYPE})+)`;\nexport const COMPOUND_WO_PSEUDO = `(?:${TAG_TYPE}|(?:${TAG_TYPE})?(?:${SUB_TYPE_WO_PSEUDO})+)`;\nexport const COMPLEX = `${COMPOUND}(?:${COMBO}${COMPOUND})*`;\nexport const COMPLEX_L = `${COMPOUND_L}(?:${COMBO}${COMPOUND_L})*`;\nexport const HAS_COMPOUND = `has\\\\([\\\\s>]?\\\\s*${COMPOUND_WO_PSEUDO}\\\\s*\\\\)`;\nexport const LOGIC_COMPOUND = `(?:is|not)\\\\(\\\\s*${COMPOUND_L}(?:\\\\s*,\\\\s*${COMPOUND_L})*\\\\s*\\\\)`;\nexport const LOGIC_COMPLEX = `(?:is|not)\\\\(\\\\s*${COMPLEX_L}(?:\\\\s*,\\\\s*${COMPLEX_L})*\\\\s*\\\\)`;\n\n/* forms and input types */\nexport const FORM_PARTS = Object.freeze([\n 'button',\n 'input',\n 'select',\n 'textarea'\n]);\nexport const INPUT_BUTTON = Object.freeze(['button', 'reset', 'submit']);\nexport const INPUT_CHECK = Object.freeze(['checkbox', 'radio']);\nexport const INPUT_DATE = Object.freeze([\n 'date',\n 'datetime-local',\n 'month',\n 'time',\n 'week'\n]);\nexport const INPUT_TEXT = Object.freeze([\n 'email',\n 'password',\n 'search',\n 'tel',\n 'text',\n 'url'\n]);\nexport const INPUT_EDIT = Object.freeze([\n ...INPUT_DATE,\n ...INPUT_TEXT,\n 'number'\n]);\nexport const INPUT_LTR = Object.freeze([\n ...INPUT_CHECK,\n 'color',\n 'date',\n 'image',\n 'number',\n 'range',\n 'time'\n]);\n\n/* logical combination pseudo-classes */\nexport const KEYS_LOGICAL = new Set(['has', 'is', 'not', 'where']);\n","/**\n * matcher.js\n */\n\n/* import */\nimport { generateCSS, parseAstName, unescapeSelector } from './parser.js';\nimport {\n generateException,\n getDirectionality,\n getLanguageAttribute,\n getType,\n isContentEditable,\n isCustomElement,\n isNamespaceDeclared\n} from './utility.js';\n\n/* constants */\nimport {\n ALPHA_NUM,\n FORM_PARTS,\n IDENT,\n INPUT_EDIT,\n LANG_PART,\n NOT_SUPPORTED_ERR,\n PS_ELEMENT_SELECTOR,\n STRING,\n SYNTAX_ERR\n} from './constant.js';\nconst KEYS_FORM_PS_DISABLED = new Set([\n ...FORM_PARTS,\n 'fieldset',\n 'optgroup',\n 'option'\n]);\nconst KEYS_INPUT_EDIT = new Set(INPUT_EDIT);\nconst REG_LANG_VALID = new RegExp(`^(?:\\\\*-)?${ALPHA_NUM}${LANG_PART}$`, 'i');\nconst REG_TAG_NAME = /[A-Z][\\\\w-]*/i;\n\n/**\n * Validates a pseudo-element selector.\n * @param {string} astName - The name of the pseudo-element from the AST.\n * @param {string} astType - The type of the selector from the AST.\n * @param {object} [opt] - Optional parameters.\n * @param {boolean} [opt.forgive] - If true, ignores unknown pseudo-elements.\n * @param {boolean} [opt.warn] - If true, throws an error for unsupported ones.\n * @throws {DOMException} If the selector is invalid or unsupported.\n * @returns {void}\n */\nexport const matchPseudoElementSelector = (astName, astType, opt = {}) => {\n const { forgive, globalObject, warn } = opt;\n if (astType !== PS_ELEMENT_SELECTOR) {\n // Ensure the AST node is a pseudo-element selector.\n throw new TypeError(`Unexpected ast type ${getType(astType)}`);\n }\n switch (astName) {\n case 'after':\n case 'backdrop':\n case 'before':\n case 'cue':\n case 'cue-region':\n case 'first-letter':\n case 'first-line':\n case 'file-selector-button':\n case 'marker':\n case 'placeholder':\n case 'selection':\n case 'target-text': {\n // Warn if the pseudo-element is known but unsupported.\n if (warn) {\n throw generateException(\n `Unsupported pseudo-element ::${astName}`,\n NOT_SUPPORTED_ERR,\n globalObject\n );\n }\n break;\n }\n case 'part':\n case 'slotted': {\n // Warn if the functional pseudo-element is known but unsupported.\n if (warn) {\n throw generateException(\n `Unsupported pseudo-element ::${astName}()`,\n NOT_SUPPORTED_ERR,\n globalObject\n );\n }\n break;\n }\n default: {\n // Handle vendor-prefixed or unknown pseudo-elements.\n if (astName.startsWith('-webkit-')) {\n if (warn) {\n throw generateException(\n `Unsupported pseudo-element ::${astName}`,\n NOT_SUPPORTED_ERR,\n globalObject\n );\n }\n // Throw an error for unknown pseudo-elements if not forgiven.\n } else if (!forgive) {\n throw generateException(\n `Unknown pseudo-element ::${astName}`,\n SYNTAX_ERR,\n globalObject\n );\n }\n }\n }\n};\n\n/**\n * Matches the :dir() pseudo-class against an element's directionality.\n * @param {object} ast - The AST object for the pseudo-class.\n * @param {object} node - The element node to match against.\n * @throws {TypeError} If the AST does not contain a valid direction value.\n * @returns {boolean} - True if the directionality matches, otherwise false.\n */\nexport const matchDirectionPseudoClass = (ast, node) => {\n const { name } = ast;\n // The :dir() pseudo-class requires a direction argument (e.g., \"ltr\").\n if (!name) {\n const type = name === '' ? '(empty String)' : getType(name);\n throw new TypeError(`Unexpected ast type ${type}`);\n }\n // Get the computed directionality of the element.\n const dir = getDirectionality(node);\n // Compare the expected direction with the element's actual direction.\n return name === dir;\n};\n\n/**\n * Matches the :lang() pseudo-class against an element's language.\n * @see https://datatracker.ietf.org/doc/html/rfc4647#section-3.3.1\n * @param {object} ast - The AST object for the pseudo-class.\n * @param {object} node - The element node to match against.\n * @returns {boolean} - True if the language matches, otherwise false.\n */\nexport const matchLanguagePseudoClass = (ast, node) => {\n const { name, type, value } = ast;\n let langPattern;\n // Determine the language pattern from the AST.\n if (type === STRING && value) {\n langPattern = value;\n } else if (type === IDENT && name) {\n langPattern = unescapeSelector(name);\n }\n // If no valid language pattern is provided, it cannot match.\n if (typeof langPattern !== 'string') {\n return false;\n }\n // Get the effective language attribute for the current node.\n const elementLang = getLanguageAttribute(node);\n // If the element has no language, it cannot match a specific pattern.\n if (elementLang === null) {\n return false;\n }\n // Handle the universal selector '*' for :lang.\n if (langPattern === '*') {\n // It matches any language unless attribute is not empty.\n return elementLang !== '';\n }\n // Validate the provided language pattern structure.\n if (!REG_LANG_VALID.test(langPattern)) {\n return false;\n }\n // Build a regex for extended language range matching.\n let matcherRegex;\n if (langPattern.indexOf('-') > -1) {\n // Handle complex patterns with wildcards and sub-tags (e.g., '*-US').\n const [langMain, langSub, ...langRest] = langPattern.split('-');\n const extendedMain =\n langMain === '*' ? `${ALPHA_NUM}${LANG_PART}` : `${langMain}${LANG_PART}`;\n const extendedSub = `-${langSub}${LANG_PART}`;\n let extendedRest = '';\n // Use a standard for loop for performance as per the rules.\n for (let i = 0; i < langRest.length; i++) {\n extendedRest += `-${langRest[i]}${LANG_PART}`;\n }\n matcherRegex = new RegExp(\n `^${extendedMain}${extendedSub}${extendedRest}$`,\n 'i'\n );\n } else {\n // Handle simple language patterns (e.g., 'en').\n matcherRegex = new RegExp(`^${langPattern}${LANG_PART}$`, 'i');\n }\n // Test the element's language against the constructed regex.\n return matcherRegex.test(elementLang);\n};\n\n/**\n * Matches the :disabled and :enabled pseudo-classes.\n * @param {string} astName - pseudo-class name\n * @param {object} node - Element node\n * @returns {boolean} - True if matched\n */\nexport const matchDisabledPseudoClass = (astName, node) => {\n const { localName, parentNode } = node;\n if (\n !KEYS_FORM_PS_DISABLED.has(localName) &&\n !isCustomElement(node, { formAssociated: true })\n ) {\n return false;\n }\n let isDisabled = false;\n if (node.disabled || node.hasAttribute('disabled')) {\n isDisabled = true;\n } else if (localName === 'option') {\n if (\n parentNode &&\n parentNode.localName === 'optgroup' &&\n (parentNode.disabled || parentNode.hasAttribute('disabled'))\n ) {\n isDisabled = true;\n }\n } else if (localName !== 'optgroup') {\n let current = parentNode;\n while (current) {\n if (\n current.localName === 'fieldset' &&\n (current.disabled || current.hasAttribute('disabled'))\n ) {\n // The first <legend> in a disabled <fieldset> is not disabled.\n let legend;\n let element = current.firstElementChild;\n while (element) {\n if (element.localName === 'legend') {\n legend = element;\n break;\n }\n element = element.nextElementSibling;\n }\n if (!legend || !legend.contains(node)) {\n isDisabled = true;\n }\n // Found the containing fieldset, stop searching up.\n break;\n }\n current = current.parentNode;\n }\n }\n if (astName === 'disabled') {\n return isDisabled;\n }\n return !isDisabled;\n};\n\n/**\n * Match the :read-only and :read-write pseudo-classes\n * @param {string} astName - pseudo-class name\n * @param {object} node - Element node\n * @returns {boolean} - True if matched\n */\nexport const matchReadOnlyPseudoClass = (astName, node) => {\n const { localName } = node;\n let isReadOnly = false;\n switch (localName) {\n case 'textarea':\n case 'input': {\n const isEditableInput = !node.type || KEYS_INPUT_EDIT.has(node.type);\n if (localName === 'textarea' || isEditableInput) {\n isReadOnly =\n node.readOnly ||\n node.hasAttribute('readonly') ||\n node.disabled ||\n node.hasAttribute('disabled');\n } else {\n // Non-editable input types are always read-only\n isReadOnly = true;\n }\n break;\n }\n default: {\n isReadOnly = !isContentEditable(node);\n }\n }\n if (astName === 'read-only') {\n return isReadOnly;\n }\n return !isReadOnly;\n};\n\n/**\n * Matches an attribute selector against an element.\n * This function handles various attribute matchers like '=', '~=', '^=', etc.,\n * and considers namespaces and case sensitivity based on document type.\n * @param {object} ast - The AST for the attribute selector.\n * @param {object} node - The element node to match against.\n * @param {object} [opt] - Optional parameters.\n * @param {boolean} [opt.check] - True if running in an internal check.\n * @param {boolean} [opt.forgive] - True to forgive certain syntax errors.\n * @returns {boolean} - True if the attribute selector matches, otherwise false.\n */\nexport const matchAttributeSelector = (ast, node, opt = {}) => {\n const {\n flags: astFlags,\n matcher: astMatcher,\n name: astName,\n value: astValue\n } = ast;\n const { check, forgive, globalObject } = opt;\n // Validate selector flags ('i' or 's').\n if (typeof astFlags === 'string' && !/^[is]$/i.test(astFlags) && !forgive) {\n const css = generateCSS(ast);\n throw generateException(\n `Invalid selector ${css}`,\n SYNTAX_ERR,\n globalObject\n );\n }\n const { attributes } = node;\n // An element with no attributes cannot match.\n if (!attributes || !attributes.length) {\n return false;\n }\n // Determine case sensitivity based on document type and flags.\n const contentType = node.ownerDocument.contentType;\n let caseInsensitive;\n if (contentType === 'text/html') {\n if (typeof astFlags === 'string' && /^s$/i.test(astFlags)) {\n caseInsensitive = false;\n } else {\n caseInsensitive = true;\n }\n } else if (typeof astFlags === 'string' && /^i$/i.test(astFlags)) {\n caseInsensitive = true;\n } else {\n caseInsensitive = false;\n }\n // Prepare the attribute name from the selector for matching.\n let astAttrName = unescapeSelector(astName.name);\n if (caseInsensitive) {\n astAttrName = astAttrName.toLowerCase();\n }\n // A set to store the values of attributes whose names match.\n const attrValues = new Set();\n // Handle namespaced attribute names (e.g., [*|attr], [ns|attr]).\n if (astAttrName.indexOf('|') > -1) {\n const { prefix: astPrefix, localName: astLocalName } =\n parseAstName(astAttrName);\n for (const item of attributes) {\n let { name: itemName, value: itemValue } = item;\n if (caseInsensitive) {\n itemName = itemName.toLowerCase();\n itemValue = itemValue.toLowerCase();\n }\n switch (astPrefix) {\n case '': {\n if (astLocalName === itemName) {\n attrValues.add(itemValue);\n }\n break;\n }\n case '*': {\n if (itemName.indexOf(':') > -1) {\n const [, ...restItemName] = itemName.split(':');\n const itemLocalName = restItemName.join(':').replace(/^:/, '');\n if (itemLocalName === astLocalName) {\n attrValues.add(itemValue);\n }\n } else if (astLocalName === itemName) {\n attrValues.add(itemValue);\n }\n break;\n }\n default: {\n if (!check) {\n if (forgive) {\n return false;\n }\n const css = generateCSS(ast);\n throw generateException(\n `Invalid selector ${css}`,\n SYNTAX_ERR,\n globalObject\n );\n }\n if (itemName.indexOf(':') > -1) {\n const [itemPrefix, ...restItemName] = itemName.split(':');\n const itemLocalName = restItemName.join(':').replace(/^:/, '');\n // Ignore the 'xml:lang' attribute.\n if (itemPrefix === 'xml' && itemLocalName === 'lang') {\n continue;\n } else if (\n astPrefix === itemPrefix &&\n astLocalName === itemLocalName\n ) {\n const namespaceDeclared = isNamespaceDeclared(astPrefix, node);\n if (namespaceDeclared) {\n attrValues.add(itemValue);\n }\n }\n }\n }\n }\n }\n // Handle non-namespaced attribute names.\n } else {\n for (let { name: itemName, value: itemValue } of attributes) {\n if (caseInsensitive) {\n itemName = itemName.toLowerCase();\n itemValue = itemValue.toLowerCase();\n }\n if (itemName.indexOf(':') > -1) {\n const [itemPrefix, ...restItemName] = itemName.split(':');\n const itemLocalName = restItemName.join(':').replace(/^:/, '');\n // The attribute is starting with ':'.\n if (!itemPrefix && astAttrName === `:${itemLocalName}`) {\n attrValues.add(itemValue);\n // Ignore the 'xml:lang' attribute.\n } else if (itemPrefix === 'xml' && itemLocalName === 'lang') {\n continue;\n } else if (astAttrName === itemLocalName) {\n attrValues.add(itemValue);\n }\n } else if (astAttrName === itemName) {\n attrValues.add(itemValue);\n }\n }\n }\n if (!attrValues.size) {\n return false;\n }\n // Prepare the value from the selector's RHS for comparison.\n const { name: astIdentValue, value: astStringValue } = astValue ?? {};\n let attrValue;\n if (astIdentValue) {\n if (caseInsensitive) {\n attrValue = astIdentValue.toLowerCase();\n } else {\n attrValue = astIdentValue;\n }\n } else if (astStringValue) {\n if (caseInsensitive) {\n attrValue = astStringValue.toLowerCase();\n } else {\n attrValue = astStringValue;\n }\n } else if (astStringValue === '') {\n attrValue = astStringValue;\n }\n // Perform the final match based on the specified matcher.\n switch (astMatcher) {\n case '=': {\n return typeof attrValue === 'string' && attrValues.has(attrValue);\n }\n case '~=': {\n if (attrValue && typeof attrValue === 'string') {\n for (const value of attrValues) {\n const item = new Set(value.split(/\\s+/));\n if (item.has(attrValue)) {\n return true;\n }\n }\n }\n return false;\n }\n case '|=': {\n if (attrValue && typeof attrValue === 'string') {\n for (const value of attrValues) {\n if (value === attrValue || value.startsWith(`${attrValue}-`)) {\n return true;\n }\n }\n }\n return false;\n }\n case '^=': {\n if (attrValue && typeof attrValue === 'string') {\n for (const value of attrValues) {\n if (value.startsWith(`${attrValue}`)) {\n return true;\n }\n }\n }\n return false;\n }\n case '$=': {\n if (attrValue && typeof attrValue === 'string') {\n for (const value of attrValues) {\n if (value.endsWith(`${attrValue}`)) {\n return true;\n }\n }\n }\n return false;\n }\n case '*=': {\n if (attrValue && typeof attrValue === 'string') {\n for (const value of attrValues) {\n if (value.includes(`${attrValue}`)) {\n return true;\n }\n }\n }\n return false;\n }\n case null:\n default: {\n // This case handles attribute existence checks (e.g., '[disabled]').\n return true;\n }\n }\n};\n\n/**\n * match type selector\n * @param {object} ast - AST\n * @param {object} node - Element node\n * @param {object} [opt] - options\n * @param {boolean} [opt.check] - running in internal check()\n * @param {boolean} [opt.forgive] - forgive undeclared namespace\n * @returns {boolean} - result\n */\nexport const matchTypeSelector = (ast, node, opt = {}) => {\n const astName = unescapeSelector(ast.name);\n const { localName, namespaceURI, prefix } = node;\n const { check, forgive, globalObject } = opt;\n let { prefix: astPrefix, localName: astLocalName } = parseAstName(\n astName,\n node\n );\n if (\n node.ownerDocument.contentType === 'text/html' &&\n (!namespaceURI || namespaceURI === 'http://www.w3.org/1999/xhtml') &&\n REG_TAG_NAME.test(localName)\n ) {\n astPrefix = astPrefix.toLowerCase();\n astLocalName = astLocalName.toLowerCase();\n }\n let nodePrefix;\n let nodeLocalName;\n // just in case that the namespaced content is parsed as text/html\n if (localName.indexOf(':') > -1) {\n [nodePrefix, nodeLocalName] = localName.split(':');\n } else {\n nodePrefix = prefix || '';\n nodeLocalName = localName;\n }\n switch (astPrefix) {\n case '': {\n if (\n !nodePrefix &&\n !namespaceURI &&\n (astLocalName === '*' || astLocalName === nodeLocalName)\n ) {\n return true;\n }\n return false;\n }\n case '*': {\n if (astLocalName === '*' || astLocalName === nodeLocalName) {\n return true;\n }\n return false;\n }\n default: {\n if (!check) {\n if (forgive) {\n return false;\n }\n const css = generateCSS(ast);\n throw generateException(\n `Invalid selector ${css}`,\n SYNTAX_ERR,\n globalObject\n );\n }\n const astNS = node.lookupNamespaceURI(astPrefix);\n const nodeNS = node.lookupNamespaceURI(nodePrefix);\n if (astNS === nodeNS && astPrefix === nodePrefix) {\n if (astLocalName === '*' || astLocalName === nodeLocalName) {\n return true;\n }\n return false;\n } else if (!forgive && !astNS) {\n throw generateException(\n `Undeclared namespace ${astPrefix}`,\n SYNTAX_ERR,\n globalObject\n );\n }\n return false;\n }\n }\n};\n","/**\n * finder.js\n */\n\n/* import */\nimport {\n matchAttributeSelector,\n matchDirectionPseudoClass,\n matchDisabledPseudoClass,\n matchLanguagePseudoClass,\n matchPseudoElementSelector,\n matchReadOnlyPseudoClass,\n matchTypeSelector\n} from './matcher.js';\nimport {\n findAST,\n generateCSS,\n parseSelector,\n sortAST,\n unescapeSelector,\n walkAST\n} from './parser.js';\nimport {\n filterNodesByAnB,\n findLogicalWithNestedHas,\n generateException,\n isCustomElement,\n isFocusVisible,\n isFocusableArea,\n isVisible,\n resolveContent,\n sortNodes,\n traverseNode\n} from './utility.js';\n\n/* constants */\nimport {\n ATTR_SELECTOR,\n CLASS_SELECTOR,\n COMBINATOR,\n DOCUMENT_FRAGMENT_NODE,\n ELEMENT_NODE,\n FORM_PARTS,\n ID_SELECTOR,\n INPUT_CHECK,\n INPUT_DATE,\n INPUT_EDIT,\n INPUT_TEXT,\n KEYS_LOGICAL,\n NOT_SUPPORTED_ERR,\n PS_CLASS_SELECTOR,\n PS_ELEMENT_SELECTOR,\n SHOW_ALL,\n SHOW_CONTAINER,\n SYNTAX_ERR,\n TARGET_ALL,\n TARGET_FIRST,\n TARGET_LINEAL,\n TARGET_SELF,\n TEXT_NODE,\n TYPE_SELECTOR\n} from './constant.js';\nconst DIR_NEXT = 'next';\nconst DIR_PREV = 'prev';\nconst KEYS_FORM = new Set([...FORM_PARTS, 'fieldset', 'form']);\nconst KEYS_FORM_PS_VALID = new Set([...FORM_PARTS, 'form']);\nconst KEYS_INPUT_CHECK = new Set(INPUT_CHECK);\nconst KEYS_INPUT_PLACEHOLDER = new Set([...INPUT_TEXT, 'number']);\nconst KEYS_INPUT_RANGE = new Set([...INPUT_DATE, 'number', 'range']);\nconst KEYS_INPUT_REQUIRED = new Set([...INPUT_CHECK, ...INPUT_EDIT, 'file']);\nconst KEYS_INPUT_RESET = new Set(['button', 'reset']);\nconst KEYS_INPUT_SUBMIT = new Set(['image', 'submit']);\nconst KEYS_MODIFIER = new Set([\n 'Alt',\n 'AltGraph',\n 'CapsLock',\n 'Control',\n 'Fn',\n 'FnLock',\n 'Hyper',\n 'Meta',\n 'NumLock',\n 'ScrollLock',\n 'Shift',\n 'Super',\n 'Symbol',\n 'SymbolLock'\n]);\nconst KEYS_PS_UNCACHE = new Set([\n 'any-link',\n 'defined',\n 'dir',\n 'link',\n 'scope'\n]);\nconst KEYS_PS_NTH_OF_TYPE = new Set([\n 'first-of-type',\n 'last-of-type',\n 'only-of-type'\n]);\n\n/**\n * Finder\n * NOTE: #ast[i] corresponds to #nodes[i]\n */\nexport class Finder {\n /* private fields */\n #ast;\n #astCache;\n #check;\n #descendant;\n #document;\n #documentCache;\n #documentURL;\n #event;\n #eventHandlers;\n #focus;\n #invalidate;\n #invalidateResults;\n #lastFocusVisible;\n #node;\n #nodeWalker;\n #nodes;\n #noexcept;\n #pseudoElement;\n #results;\n #root;\n #rootWalker;\n #scoped;\n #selector;\n #shadow;\n #verifyShadowHost;\n #walkers;\n #warn;\n #window;\n\n /**\n * constructor\n * @param {object} window - The window object.\n */\n constructor(window) {\n this.#window = window;\n this.#astCache = new WeakMap();\n this.#documentCache = new WeakMap();\n this.#event = null;\n this.#focus = null;\n this.#lastFocusVisible = null;\n this.#eventHandlers = new Set([\n {\n keys: ['focus', 'focusin'],\n handler: this._handleFocusEvent\n },\n {\n keys: ['keydown', 'keyup'],\n handler: this._handleKeyboardEvent\n },\n {\n keys: ['mouseover', 'mousedown', 'mouseup', 'click', 'mouseout'],\n handler: this._handleMouseEvent\n }\n ]);\n this._registerEventListeners();\n this.clearResults(true);\n }\n\n /**\n * Handles errors.\n * @param {Error} e - The error object.\n * @param {object} [opt] - Options.\n * @param {boolean} [opt.noexcept] - If true, exceptions are not thrown.\n * @throws {Error} Throws an error.\n * @returns {void}\n */\n onError = (e, opt = {}) => {\n const noexcept = opt.noexcept ?? this.#noexcept;\n if (noexcept) {\n return;\n }\n const isDOMException =\n e instanceof DOMException || e instanceof this.#window.DOMException;\n if (isDOMException) {\n if (e.name === NOT_SUPPORTED_ERR) {\n if (this.#warn) {\n console.warn(e.message);\n }\n return;\n }\n throw new this.#window.DOMException(e.message, e.name);\n }\n if (e.name in this.#window) {\n throw new this.#window[e.name](e.message, { cause: e });\n }\n throw e;\n };\n\n /**\n * Sets up the finder.\n * @param {string} selector - The CSS selector.\n * @param {object} node - Document, DocumentFragment, or Element.\n * @param {object} [opt] - Options.\n * @param {boolean} [opt.check] - Indicates if running in internal check().\n * @param {boolean} [opt.noexcept] - If true, exceptions are not thrown.\n * @param {boolean} [opt.warn] - If true, console warnings are enabled.\n * @returns {object} The finder instance.\n */\n setup = (selector, node, opt = {}) => {\n const { check, noexcept, warn } = opt;\n this.#check = !!check;\n this.#noexcept = !!noexcept;\n this.#warn = !!warn;\n [this.#document, this.#root, this.#shadow] = resolveContent(node);\n this.#documentURL = null;\n this.#node = node;\n this.#scoped =\n this.#node !== this.#root && this.#node.nodeType === ELEMENT_NODE;\n this.#selector = selector;\n [this.#ast, this.#nodes] = this._correspond(selector);\n this.#pseudoElement = [];\n this.#walkers = new WeakMap();\n this.#nodeWalker = null;\n this.#rootWalker = null;\n this.#verifyShadowHost = null;\n this.clearResults();\n return this;\n };\n\n /**\n * Clear cached results.\n * @param {boolean} all - clear all results\n * @returns {void}\n */\n clearResults = (all = false) => {\n this.#invalidateResults = new WeakMap();\n if (all) {\n this.#results = new WeakMap();\n }\n };\n\n /**\n * Handles focus events.\n * @private\n * @param {Event} evt - The event object.\n * @returns {void}\n */\n _handleFocusEvent = evt => {\n this.#focus = evt;\n };\n\n /**\n * Handles keyboard events.\n * @private\n * @param {Event} evt - The event object.\n * @returns {void}\n */\n _handleKeyboardEvent = evt => {\n const { key } = evt;\n if (!KEYS_MODIFIER.has(key)) {\n this.#event = evt;\n }\n };\n\n /**\n * Handles mouse events.\n * @private\n * @param {Event} evt - The event object.\n * @returns {void}\n */\n _handleMouseEvent = evt => {\n this.#event = evt;\n };\n\n /**\n * Registers event listeners.\n * @private\n * @returns {Array.<void>} An array of return values from addEventListener.\n */\n _registerEventListeners = () => {\n const opt = {\n capture: true,\n passive: true\n };\n const func = [];\n for (const eventHandler of this.#eventHandlers) {\n const { keys, handler } = eventHandler;\n const l = keys.length;\n for (let i = 0; i < l; i++) {\n const key = keys[i];\n func.push(this.#window.addEventListener(key, handler, opt));\n }\n }\n return func;\n };\n\n /**\n * Processes selector branches into the internal AST structure.\n * @private\n * @param {Array.<Array.<object>>} branches - The branches from walkAST.\n * @param {string} selector - The original selector for error reporting.\n * @returns {{ast: Array, descendant: boolean}}\n * An object with the AST, descendant flag.\n */\n _processSelectorBranches = (branches, selector) => {\n let descendant = false;\n const ast = [];\n const l = branches.length;\n for (let i = 0; i < l; i++) {\n const items = [...branches[i]];\n const branch = [];\n let item = items.shift();\n if (item && item.type !== COMBINATOR) {\n const leaves = new Set();\n while (item) {\n if (item.type === COMBINATOR) {\n const [nextItem] = items;\n if (!nextItem || nextItem.type === COMBINATOR) {\n const msg = `Invalid selector ${selector}`;\n this.onError(generateException(msg, SYNTAX_ERR, this.#window));\n // Stop processing on invalid selector.\n return { ast: [], descendant: false, invalidate: false };\n }\n if (item.name === ' ' || item.name === '>') {\n descendant = true;\n }\n branch.push({ combo: item, leaves: sortAST(leaves) });\n leaves.clear();\n } else {\n if (item.name && typeof item.name === 'string') {\n const unescapedName = unescapeSelector(item.name);\n if (unescapedName !== item.name) {\n item.name = unescapedName;\n }\n if (/[|:]/.test(unescapedName)) {\n item.namespace = true;\n }\n }\n leaves.add(item);\n }\n if (items.length) {\n item = items.shift();\n } else {\n branch.push({ combo: null, leaves: sortAST(leaves) });\n leaves.clear();\n break;\n }\n }\n }\n ast.push({ branch, dir: null, filtered: false, find: false });\n }\n return { ast, descendant };\n };\n\n /**\n * Corresponds AST and nodes.\n * @private\n * @param {string} selector - The CSS selector.\n * @returns {Array.<Array.<object>>} An array with the AST and nodes.\n */\n _correspond = selector => {\n const nodes = [];\n this.#descendant = false;\n this.#invalidate = false;\n let ast;\n if (this.#documentCache.has(this.#document)) {\n const cachedItem = this.#documentCache.get(this.#document);\n if (cachedItem && cachedItem.has(`${selector}`)) {\n const item = cachedItem.get(`${selector}`);\n ast = item.ast;\n this.#descendant = item.descendant;\n this.#invalidate = item.invalidate;\n }\n }\n if (ast) {\n const l = ast.length;\n for (let i = 0; i < l; i++) {\n ast[i].dir = null;\n ast[i].filtered = false;\n ast[i].find = false;\n nodes[i] = [];\n }\n } else {\n let cssAst;\n try {\n cssAst = parseSelector(selector);\n } catch (e) {\n return this.onError(e);\n }\n const { branches, info } = walkAST(cssAst);\n const {\n hasHasPseudoFunc,\n hasLogicalPseudoFunc,\n hasNthChildOfSelector,\n hasStatePseudoClass\n } = info;\n this.#invalidate =\n hasHasPseudoFunc ||\n hasStatePseudoClass ||\n !!(hasLogicalPseudoFunc && hasNthChildOfSelector);\n const processed = this._processSelectorBranches(branches, selector);\n ast = processed.ast;\n this.#descendant = processed.descendant;\n let cachedItem;\n if (this.#documentCache.has(this.#document)) {\n cachedItem = this.#documentCache.get(this.#document);\n } else {\n cachedItem = new Map();\n }\n cachedItem.set(`${selector}`, {\n ast,\n descendant: this.#descendant,\n invalidate: this.#invalidate\n });\n this.#documentCache.set(this.#document, cachedItem);\n // Initialize nodes array for each branch.\n for (let i = 0; i < ast.length; i++) {\n nodes[i] = [];\n }\n }\n return [ast, nodes];\n };\n\n /**\n * Creates a TreeWalker.\n * @private\n * @param {object} node - The Document, DocumentFragment, or Element node.\n * @param {object} [opt] - Options.\n * @param {boolean} [opt.force] - Force creation of a new TreeWalker.\n * @param {number} [opt.whatToShow] - The NodeFilter whatToShow value.\n * @returns {object} The TreeWalker object.\n */\n _createTreeWalker = (node, opt = {}) => {\n const { force = false, whatToShow = SHOW_CONTAINER } = opt;\n if (force) {\n return this.#document.createTreeWalker(node, whatToShow);\n } else if (this.#walkers.has(node)) {\n return this.#walkers.get(node);\n }\n const walker = this.#document.createTreeWalker(node, whatToShow);\n this.#walkers.set(node, walker);\n return walker;\n };\n\n /**\n * Gets selector branches from cache or parses them.\n * @private\n * @param {object} selector - The AST.\n * @returns {Array.<Array.<object>>} The selector branches.\n */\n _getSelectorBranches = selector => {\n if (this.#astCache.has(selector)) {\n return this.#astCache.get(selector);\n }\n const { branches } = walkAST(selector);\n this.#astCache.set(selector, branches);\n return branches;\n };\n\n /**\n * Gets the children of a node, optionally filtered by a selector.\n * @private\n * @param {object} parentNode - The parent element.\n * @param {Array.<Array.<object>>} selectorBranches - The selector branches.\n * @param {object} [opt] - Options.\n * @returns {Array.<object>} An array of child nodes.\n */\n _getFilteredChildren = (parentNode, selectorBranches, opt = {}) => {\n const children = [];\n const walker = this._createTreeWalker(parentNode, { force: true });\n let childNode = walker.firstChild();\n while (childNode) {\n if (selectorBranches) {\n if (isVisible(childNode)) {\n let isMatch = false;\n const l = selectorBranches.length;\n for (let i = 0; i < l; i++) {\n const leaves = selectorBranches[i];\n if (this._matchLeaves(leaves, childNode, opt)) {\n isMatch = true;\n break;\n }\n }\n if (isMatch) {\n children.push(childNode);\n }\n }\n } else {\n children.push(childNode);\n }\n childNode = walker.nextSibling();\n }\n return children;\n };\n\n /**\n * Collects nth-child nodes.\n * @private\n * @param {object} anb - An+B options.\n * @param {number} anb.a - The 'a' value.\n * @param {number} anb.b - The 'b' value.\n * @param {boolean} [anb.reverse] - If true, reverses the order.\n * @param {object} [anb.selector] - The AST.\n * @param {object} node - The Element node.\n * @param {object} [opt] - Options.\n * @returns {Set.<object>} A collection of matched nodes.\n */\n _collectNthChild = (anb, node, opt = {}) => {\n const { a, b, selector } = anb;\n const { parentNode } = node;\n if (!parentNode) {\n const matchedNode = new Set();\n if (node === this.#root && a * 1 + b * 1 === 1) {\n if (selector) {\n const selectorBranches = this._getSelectorBranches(selector);\n const l = selectorBranches.length;\n for (let i = 0; i < l; i++) {\n const leaves = selectorBranches[i];\n if (this._matchLeaves(leaves, node, opt)) {\n matchedNode.add(node);\n break;\n }\n }\n } else {\n matchedNode.add(node);\n }\n }\n return matchedNode;\n }\n const selectorBranches = selector\n ? this._getSelectorBranches(selector)\n : null;\n const children = this._getFilteredChildren(\n parentNode,\n selectorBranches,\n opt\n );\n const matchedNodes = filterNodesByAnB(children, anb);\n return new Set(matchedNodes);\n };\n\n /**\n * Collects nth-of-type nodes.\n * @private\n * @param {object} anb - An+B options.\n * @param {number} anb.a - The 'a' value.\n * @param {number} anb.b - The 'b' value.\n * @param {boolean} [anb.reverse] - If true, reverses the order.\n * @param {object} node - The Element node.\n * @returns {Set.<object>} A collection of matched nodes.\n */\n _collectNthOfType = (anb, node) => {\n const { parentNode } = node;\n if (!parentNode) {\n if (node === this.#root && anb.a * 1 + anb.b * 1 === 1) {\n return new Set([node]);\n }\n return new Set();\n }\n const typedSiblings = [];\n const walker = this._createTreeWalker(parentNode, { force: true });\n let sibling = walker.firstChild();\n while (sibling) {\n if (\n sibling.localName === node.localName &&\n sibling.namespaceURI === node.namespaceURI &&\n sibling.prefix === node.prefix\n ) {\n typedSiblings.push(sibling);\n }\n sibling = walker.nextSibling();\n }\n const matchedNodes = filterNodesByAnB(typedSiblings, anb);\n return new Set(matchedNodes);\n };\n\n /**\n * Matches An+B.\n * @private\n * @param {object} ast - The AST.\n * @param {object} node - The Element node.\n * @param {string} nthName - The name of the nth pseudo-class.\n * @param {object} [opt] - Options.\n * @returns {Set.<object>} A collection of matched nodes.\n */\n _matchAnPlusB = (ast, node, nthName, opt = {}) => {\n const {\n nth: { a, b, name: nthIdentName },\n selector\n } = ast;\n const anbMap = new Map();\n if (nthIdentName) {\n if (nthIdentName === 'even') {\n anbMap.set('a', 2);\n anbMap.set('b', 0);\n } else if (nthIdentName === 'odd') {\n anbMap.set('a', 2);\n anbMap.set('b', 1);\n }\n if (nthName.indexOf('last') > -1) {\n anbMap.set('reverse', true);\n }\n } else {\n if (typeof a === 'string' && /-?\\d+/.test(a)) {\n anbMap.set('a', a * 1);\n } else {\n anbMap.set('a', 0);\n }\n if (typeof b === 'string' && /-?\\d+/.test(b)) {\n anbMap.set('b', b * 1);\n } else {\n anbMap.set('b', 0);\n }\n if (nthName.indexOf('last') > -1) {\n anbMap.set('reverse', true);\n }\n }\n if (nthName === 'nth-child' || nthName === 'nth-last-child') {\n if (selector) {\n anbMap.set('selector', selector);\n }\n const anb = Object.fromEntries(anbMap);\n const nodes = this._collectNthChild(anb, node, opt);\n return nodes;\n } else if (nthName === 'nth-of-type' || nthName === 'nth-last-of-type') {\n const anb = Object.fromEntries(anbMap);\n const nodes = this._collectNthOfType(anb, node);\n return nodes;\n }\n return new Set();\n };\n\n /**\n * Matches the :has() pseudo-class function.\n * @private\n * @param {Array.<object>} astLeaves - The AST leaves.\n * @param {object} node - The Element node.\n * @param {object} [opt] - Options.\n * @returns {boolean} The result.\n */\n _matchHasPseudoFunc = (astLeaves, node, opt = {}) => {\n if (Array.isArray(astLeaves) && astLeaves.length) {\n // Prepare a copy to avoid astLeaves being consumed.\n const leaves = [...astLeaves];\n const [leaf] = leaves;\n const { type: leafType } = leaf;\n let combo;\n if (leafType === COMBINATOR) {\n combo = leaves.shift();\n } else {\n combo = {\n name: ' ',\n type: COMBINATOR\n };\n }\n const twigLeaves = [];\n while (leaves.length) {\n const [item] = leaves;\n const { type: itemType } = item;\n if (itemType === COMBINATOR) {\n break;\n } else {\n twigLeaves.push(leaves.shift());\n }\n }\n const twig = {\n combo,\n leaves: twigLeaves\n };\n opt.dir = DIR_NEXT;\n const nodes = this._matchCombinator(twig, node, opt);\n if (nodes.size) {\n if (leaves.length) {\n let bool = false;\n for (const nextNode of nodes) {\n bool = this._matchHasPseudoFunc(leaves, nextNode, opt);\n if (bool) {\n break;\n }\n }\n return bool;\n }\n return true;\n }\n }\n return false;\n };\n\n /**\n * Evaluates the :has() pseudo-class.\n * @private\n * @param {object} astData - The AST data.\n * @param {object} node - The Element node.\n * @param {object} [opt] - Options.\n * @returns {?object} The matched node.\n */\n _evaluateHasPseudo = (astData, node, opt) => {\n const { branches } = astData;\n let bool = false;\n const l = branches.length;\n for (let i = 0; i < l; i++) {\n const leaves = branches[i];\n bool = this._matchHasPseudoFunc(leaves, node, opt);\n if (bool) {\n break;\n }\n }\n if (!bool) {\n return null;\n }\n if (\n (opt.isShadowRoot || this.#shadow) &&\n node.nodeType === DOCUMENT_FRAGMENT_NODE\n ) {\n return this.#verifyShadowHost ? node : null;\n }\n return node;\n };\n\n /**\n * Matches logical pseudo-class functions.\n * @private\n * @param {object} astData - The AST data.\n * @param {object} node - The Element node.\n * @param {object} [opt] - Options.\n * @returns {?object} The matched node.\n */\n _matchLogicalPseudoFunc = (astData, node, opt = {}) => {\n const { astName, branches, twigBranches } = astData;\n // Handle :has().\n if (astName === 'has') {\n return this._evaluateHasPseudo(astData, node, opt);\n }\n // Handle :is(), :not(), :where().\n const isShadowRoot =\n (opt.isShadowRoot || this.#shadow) &&\n node.nodeType === DOCUMENT_FRAGMENT_NODE;\n // Check for invalid shadow root.\n if (isShadowRoot) {\n let invalid = false;\n for (const branch of branches) {\n if (branch.length > 1) {\n invalid = true;\n break;\n } else if (astName === 'not') {\n const [{ type: childAstType }] = branch;\n if (childAstType !== PS_CLASS_SELECTOR) {\n invalid = true;\n break;\n }\n }\n }\n if (invalid) {\n return null;\n }\n }\n opt.forgive = astName === 'is' || astName === 'where';\n const l = twigBranches.length;\n let bool;\n for (let i = 0; i < l; i++) {\n const branch = twigBranches[i];\n const lastIndex = branch.length - 1;\n const { leaves } = branch[lastIndex];\n bool = this._matchLeaves(leaves, node, opt);\n if (bool && lastIndex > 0) {\n let nextNodes = new Set([node]);\n for (let j = lastIndex - 1; j >= 0; j--) {\n const twig = branch[j];\n const arr = [];\n opt.dir = DIR_PREV;\n for (const nextNode of nextNodes) {\n const m = this._matchCombinator(twig, nextNode, opt);\n if (m.size) {\n arr.push(...m);\n }\n }\n if (arr.length) {\n if (j === 0) {\n bool = true;\n } else {\n nextNodes = new Set(arr);\n }\n } else {\n bool = false;\n break;\n }\n }\n }\n if (bool) {\n break;\n }\n }\n if (astName === 'not') {\n if (bool) {\n return null;\n }\n return node;\n } else if (bool) {\n return node;\n }\n return null;\n };\n\n /**\n * match pseudo-class selector\n * @private\n * @see https://html.spec.whatwg.org/#pseudo-classes\n * @param {object} ast - AST\n * @param {object} node - Element node\n * @param {object} [opt] - options\n * @returns {Set.<object>} - collection of matched nodes\n */\n _matchPseudoClassSelector(ast, node, opt = {}) {\n const { children: astChildren, name: astName } = ast;\n const { localName, parentNode } = node;\n const { forgive, warn = this.#warn } = opt;\n const matched = new Set();\n // :has(), :is(), :not(), :where()\n if (Array.isArray(astChildren) && KEYS_LOGICAL.has(astName)) {\n if (!astChildren.length && astName !== 'is' && astName !== 'where') {\n const css = generateCSS(ast);\n const msg = `Invalid selector ${css}`;\n return this.onError(generateException(msg, SYNTAX_ERR, this.#window));\n }\n let astData;\n if (this.#astCache.has(ast)) {\n astData = this.#astCache.get(ast);\n } else {\n const { branches } = walkAST(ast);\n if (astName === 'has') {\n // Check for nested :has().\n let forgiven = false;\n const l = astChildren.length;\n for (let i = 0; i < l; i++) {\n const child = astChildren[i];\n const item = findAST(child, findLogicalWithNestedHas);\n if (item) {\n const itemName = item.name;\n if (itemName === 'is' || itemName === 'where') {\n forgiven = true;\n break;\n } else {\n const css = generateCSS(ast);\n const msg = `Invalid selector ${css}`;\n return this.onError(\n generateException(msg, SYNTAX_ERR, this.#window)\n );\n }\n }\n }\n if (forgiven) {\n return matched;\n }\n astData = {\n astName,\n branches\n };\n } else {\n const twigBranches = [];\n const l = branches.length;\n for (let i = 0; i < l; i++) {\n const [...leaves] = branches[i];\n const branch = [];\n const leavesSet = new Set();\n let item = leaves.shift();\n while (item) {\n if (item.type === COMBINATOR) {\n branch.push({\n combo: item,\n leaves: [...leavesSet]\n });\n leavesSet.clear();\n } else if (item) {\n leavesSet.add(item);\n }\n if (leaves.length) {\n item = leaves.shift();\n } else {\n branch.push({\n combo: null,\n leaves: [...leavesSet]\n });\n leavesSet.clear();\n break;\n }\n }\n twigBranches.push(branch);\n }\n astData = {\n astName,\n branches,\n twigBranches\n };\n this.#astCache.set(ast, astData);\n }\n }\n const res = this._matchLogicalPseudoFunc(astData, node, opt);\n if (res) {\n matched.add(res);\n }\n } else if (Array.isArray(astChildren)) {\n // :nth-child(), :nth-last-child(), nth-of-type(), :nth-last-of-type()\n if (/^nth-(?:last-)?(?:child|of-type)$/.test(astName)) {\n if (astChildren.length !== 1) {\n const css = generateCSS(ast);\n return this.onError(\n generateException(\n `Invalid selector ${css}`,\n SYNTAX_ERR,\n this.#window\n )\n );\n }\n const [branch] = astChildren;\n const nodes = this._matchAnPlusB(branch, node, astName, opt);\n return nodes;\n } else {\n switch (astName) {\n // :dir()\n case 'dir': {\n if (astChildren.length !== 1) {\n const css = generateCSS(ast);\n return this.onError(\n generateException(\n `Invalid selector ${css}`,\n SYNTAX_ERR,\n this.#window\n )\n );\n }\n const [astChild] = astChildren;\n const res = matchDirectionPseudoClass(astChild, node);\n if (res) {\n matched.add(node);\n }\n break;\n }\n // :lang()\n case 'lang': {\n if (!astChildren.length) {\n const css = generateCSS(ast);\n return this.onError(\n generateException(\n `Invalid selector ${css}`,\n SYNTAX_ERR,\n this.#window\n )\n );\n }\n let bool;\n for (const astChild of astChildren) {\n bool = matchLanguagePseudoClass(astChild, node);\n if (bool) {\n break;\n }\n }\n if (bool) {\n matched.add(node);\n }\n break;\n }\n // :state()\n case 'state': {\n if (isCustomElement(node)) {\n const [{ value: stateValue }] = astChildren;\n if (stateValue) {\n if (node[stateValue]) {\n matched.add(node);\n } else {\n for (const i in node) {\n const prop = node[i];\n if (prop instanceof this.#window.ElementInternals) {\n if (prop?.states?.has(stateValue)) {\n matched.add(node);\n }\n break;\n }\n }\n }\n }\n }\n break;\n }\n case 'current':\n case 'heading':\n case 'nth-col':\n case 'nth-last-col': {\n if (warn) {\n this.onError(\n generateException(\n `Unsupported pseudo-class :${astName}()`,\n NOT_SUPPORTED_ERR,\n this.#window\n )\n );\n }\n break;\n }\n // Ignore :host() and :host-context().\n case 'host':\n case 'host-context': {\n break;\n }\n // Deprecated in CSS Selectors 3.\n case 'contains': {\n if (warn) {\n this.onError(\n generateException(\n `Unknown pseudo-class :${astName}()`,\n NOT_SUPPORTED_ERR,\n this.#window\n )\n );\n }\n break;\n }\n default: {\n if (!forgive) {\n this.onError(\n generateException(\n `Unknown pseudo-class :${astName}()`,\n SYNTAX_ERR,\n this.#window\n )\n );\n }\n }\n }\n }\n } else if (KEYS_PS_NTH_OF_TYPE.has(astName)) {\n if (node === this.#root) {\n matched.add(node);\n } else if (parentNode) {\n switch (astName) {\n case 'first-of-type': {\n const [node1] = this._collectNthOfType(\n {\n a: 0,\n b: 1\n },\n node\n );\n if (node1) {\n matched.add(node1);\n }\n break;\n }\n case 'last-of-type': {\n const [node1] = this._collectNthOfType(\n {\n a: 0,\n b: 1,\n reverse: true\n },\n node\n );\n if (node1) {\n matched.add(node1);\n }\n break;\n }\n // 'only-of-type' is handled by default.\n default: {\n const [node1] = this._collectNthOfType(\n {\n a: 0,\n b: 1\n },\n node\n );\n if (node1 === node) {\n const [node2] = this._collectNthOfType(\n {\n a: 0,\n b: 1,\n reverse: true\n },\n node\n );\n if (node2 === node) {\n matched.add(node);\n }\n }\n }\n }\n }\n } else {\n switch (astName) {\n case 'disabled':\n case 'enabled': {\n const isMatch = matchDisabledPseudoClass(astName, node);\n if (isMatch) {\n matched.add(node);\n }\n break;\n }\n case 'read-only':\n case 'read-write': {\n const isMatch = matchReadOnlyPseudoClass(astName, node);\n if (isMatch) {\n matched.add(node);\n }\n break;\n }\n case 'any-link':\n case 'link': {\n if (\n (localName === 'a' || localName === 'area') &&\n node.hasAttribute('href')\n ) {\n matched.add(node);\n }\n break;\n }\n case 'local-link': {\n if (\n (localName === 'a' || localName === 'area') &&\n node.hasAttribute('href')\n ) {\n if (!this.#documentURL) {\n this.#documentURL = new URL(this.#document.URL);\n }\n const { href, origin, pathname } = this.#documentURL;\n const attrURL = new URL(node.getAttribute('href'), href);\n if (attrURL.origin === origin && attrURL.pathname === pathname) {\n matched.add(node);\n }\n }\n break;\n }\n case 'visited': {\n // prevent fingerprinting\n break;\n }\n case 'hover': {\n const { target, type } = this.#event ?? {};\n if (\n /^(?:click|mouse(?:down|over|up))$/.test(type) &&\n node.contains(target)\n ) {\n matched.add(node);\n }\n break;\n }\n case 'active': {\n const { buttons, target, type } = this.#event ?? {};\n if (type === 'mousedown' && buttons & 1 && node.contains(target)) {\n matched.add(node);\n }\n break;\n }\n case 'target': {\n if (!this.#documentURL) {\n this.#documentURL = new URL(this.#document.URL);\n }\n const { hash } = this.#documentURL;\n if (\n node.id &&\n hash === `#${node.id}` &&\n this.#document.contains(node)\n ) {\n matched.add(node);\n }\n break;\n }\n case 'target-within': {\n if (!this.#documentURL) {\n this.#documentURL = new URL(this.#document.URL);\n }\n const { hash } = this.#documentURL;\n if (hash) {\n const id = hash.replace(/^#/, '');\n let current = this.#document.getElementById(id);\n while (current) {\n if (current === node) {\n matched.add(node);\n break;\n }\n current = current.parentNode;\n }\n }\n break;\n }\n case 'scope': {\n if (this.#node.nodeType === ELEMENT_NODE) {\n if (!this.#shadow && node === this.#node) {\n matched.add(node);\n }\n } else if (node === this.#document.documentElement) {\n matched.add(node);\n }\n break;\n }\n case 'focus': {\n const activeElement = this.#document.activeElement;\n if (node === activeElement && isFocusableArea(node)) {\n matched.add(node);\n } else if (activeElement.shadowRoot) {\n const activeShadowElement = activeElement.shadowRoot.activeElement;\n let current = activeShadowElement;\n while (current) {\n if (current.nodeType === DOCUMENT_FRAGMENT_NODE) {\n const { host } = current;\n if (host === activeElement) {\n if (isFocusableArea(node)) {\n matched.add(node);\n } else {\n matched.add(host);\n }\n }\n break;\n } else {\n current = current.parentNode;\n }\n }\n }\n break;\n }\n case 'focus-visible': {\n if (node === this.#document.activeElement && isFocusableArea(node)) {\n let bool;\n if (isFocusVisible(node)) {\n bool = true;\n } else if (this.#focus) {\n const { relatedTarget, target: focusTarget } = this.#focus;\n if (focusTarget === node) {\n if (isFocusVisible(relatedTarget)) {\n bool = true;\n } else if (this.#event) {\n const {\n altKey: eventAltKey,\n ctrlKey: eventCtrlKey,\n key: eventKey,\n metaKey: eventMetaKey,\n target: eventTarget,\n type: eventType\n } = this.#event;\n // this.#event is irrelevant if eventTarget === relatedTarget\n if (eventTarget === relatedTarget) {\n if (this.#lastFocusVisible === null) {\n bool = true;\n } else if (focusTarget === this.#lastFocusVisible) {\n bool = true;\n }\n } else if (eventKey === 'Tab') {\n if (\n (eventType === 'keydown' && eventTarget !== node) ||\n (eventType === 'keyup' && eventTarget === node)\n ) {\n if (eventTarget === focusTarget) {\n if (this.#lastFocusVisible === null) {\n bool = true;\n } else if (\n eventTarget === this.#lastFocusVisible &&\n relatedTarget === null\n ) {\n bool = true;\n }\n } else {\n bool = true;\n }\n }\n } else if (eventKey) {\n if (\n (eventType === 'keydown' || eventType === 'keyup') &&\n !eventAltKey &&\n !eventCtrlKey &&\n !eventMetaKey &&\n eventTarget === node\n ) {\n bool = true;\n }\n }\n } else if (\n relatedTarget === null ||\n relatedTarget === this.#lastFocusVisible\n ) {\n bool = true;\n }\n }\n }\n if (bool) {\n this.#lastFocusVisible = node;\n matched.add(node);\n } else if (this.#lastFocusVisible === node) {\n this.#lastFocusVisible = null;\n }\n }\n break;\n }\n case 'focus-within': {\n const activeElement = this.#document.activeElement;\n if (node.contains(activeElement) && isFocusableArea(activeElement)) {\n matched.add(node);\n } else if (activeElement.shadowRoot) {\n const activeShadowElement = activeElement.shadowRoot.activeElement;\n if (node.contains(activeShadowElement)) {\n matched.add(node);\n } else {\n let current = activeShadowElement;\n while (current) {\n if (current.nodeType === DOCUMENT_FRAGMENT_NODE) {\n const { host } = current;\n if (host === activeElement && node.contains(host)) {\n matched.add(node);\n }\n break;\n } else {\n current = current.parentNode;\n }\n }\n }\n }\n break;\n }\n case 'open':\n case 'closed': {\n if (localName === 'details' || localName === 'dialog') {\n if (node.hasAttribute('open')) {\n if (astName === 'open') {\n matched.add(node);\n }\n } else if (astName === 'closed') {\n matched.add(node);\n }\n }\n break;\n }\n case 'placeholder-shown': {\n let placeholder;\n if (node.placeholder) {\n placeholder = node.placeholder;\n } else if (node.hasAttribute('placeholder')) {\n placeholder = node.getAttribute('placeholder');\n }\n if (typeof placeholder === 'string' && !/[\\r\\n]/.test(placeholder)) {\n let targetNode;\n if (localName === 'textarea') {\n targetNode = node;\n } else if (localName === 'input') {\n if (node.hasAttribute('type')) {\n if (KEYS_INPUT_PLACEHOLDER.has(node.getAttribute('type'))) {\n targetNode = node;\n }\n } else {\n targetNode = node;\n }\n }\n if (targetNode && node.value === '') {\n matched.add(node);\n }\n }\n break;\n }\n case 'checked': {\n const attrType = node.getAttribute('type');\n if (\n (node.checked &&\n localName === 'input' &&\n (attrType === 'checkbox' || attrType === 'radio')) ||\n (node.selected && localName === 'option')\n ) {\n matched.add(node);\n }\n break;\n }\n case 'indeterminate': {\n if (\n (node.indeterminate &&\n localName === 'input' &&\n node.type === 'checkbox') ||\n (localName === 'progress' && !node.hasAttribute('value'))\n ) {\n matched.add(node);\n } else if (\n localName === 'input' &&\n node.type === 'radio' &&\n !node.hasAttribute('checked')\n ) {\n const nodeName = node.name;\n let parent = node.parentNode;\n while (parent) {\n if (parent.localName === 'form') {\n break;\n }\n parent = parent.parentNode;\n }\n if (!parent) {\n parent = this.#document.documentElement;\n }\n const walker = this._createTreeWalker(parent);\n let refNode = traverseNode(parent, walker);\n refNode = walker.firstChild();\n let checked;\n while (refNode) {\n if (\n refNode.localName === 'input' &&\n refNode.getAttribute('type') === 'radio'\n ) {\n if (refNode.hasAttribute('name')) {\n if (refNode.getAttribute('name') === nodeName) {\n checked = !!refNode.checked;\n }\n } else {\n checked = !!refNode.checked;\n }\n if (checked) {\n break;\n }\n }\n refNode = walker.nextNode();\n }\n if (!checked) {\n matched.add(node);\n }\n }\n break;\n }\n case 'default': {\n // button[type=\"submit\"], input[type=\"submit\"], input[type=\"image\"]\n const attrType = node.getAttribute('type');\n if (\n (localName === 'button' &&\n !(node.hasAttribute('type') && KEYS_INPUT_RESET.has(attrType))) ||\n (localName === 'input' &&\n node.hasAttribute('type') &&\n KEYS_INPUT_SUBMIT.has(attrType))\n ) {\n let form = node.parentNode;\n while (form) {\n if (form.localName === 'form') {\n break;\n }\n form = form.parentNode;\n }\n if (form) {\n const walker = this._createTreeWalker(form);\n let refNode = traverseNode(form, walker);\n refNode = walker.firstChild();\n while (refNode) {\n const nodeName = refNode.localName;\n const nodeAttrType = refNode.getAttribute('type');\n let m;\n if (nodeName === 'button') {\n m = !(\n refNode.hasAttribute('type') &&\n KEYS_INPUT_RESET.has(nodeAttrType)\n );\n } else if (nodeName === 'input') {\n m =\n refNode.hasAttribute('type') &&\n KEYS_INPUT_SUBMIT.has(nodeAttrType);\n }\n if (m) {\n if (refNode === node) {\n matched.add(node);\n }\n break;\n }\n refNode = walker.nextNode();\n }\n }\n // input[type=\"checkbox\"], input[type=\"radio\"]\n } else if (\n localName === 'input' &&\n node.hasAttribute('type') &&\n node.hasAttribute('checked') &&\n KEYS_INPUT_CHECK.has(attrType)\n ) {\n matched.add(node);\n // option\n } else if (localName === 'option' && node.hasAttribute('selected')) {\n matched.add(node);\n }\n break;\n }\n case 'valid':\n case 'invalid': {\n if (KEYS_FORM_PS_VALID.has(localName)) {\n let valid;\n if (node.checkValidity()) {\n if (node.maxLength >= 0) {\n if (node.maxLength >= node.value.length) {\n valid = true;\n }\n } else {\n valid = true;\n }\n }\n if (valid) {\n if (astName === 'valid') {\n matched.add(node);\n }\n } else if (astName === 'invalid') {\n matched.add(node);\n }\n } else if (localName === 'fieldset') {\n const walker = this._createTreeWalker(node);\n let refNode = traverseNode(node, walker);\n refNode = walker.firstChild();\n let valid;\n if (!refNode) {\n valid = true;\n } else {\n while (refNode) {\n if (KEYS_FORM_PS_VALID.has(refNode.localName)) {\n if (refNode.checkValidity()) {\n if (refNode.maxLength >= 0) {\n valid = refNode.maxLength >= refNode.value.length;\n } else {\n valid = true;\n }\n } else {\n valid = false;\n }\n if (!valid) {\n break;\n }\n }\n refNode = walker.nextNode();\n }\n }\n if (valid) {\n if (astName === 'valid') {\n matched.add(node);\n }\n } else if (astName === 'invalid') {\n matched.add(node);\n }\n }\n break;\n }\n case 'in-range':\n case 'out-of-range': {\n const attrType = node.getAttribute('type');\n if (\n localName === 'input' &&\n !(node.readonly || node.hasAttribute('readonly')) &&\n !(node.disabled || node.hasAttribute('disabled')) &&\n KEYS_INPUT_RANGE.has(attrType)\n ) {\n const flowed =\n node.validity.rangeUnderflow || node.validity.rangeOverflow;\n if (astName === 'out-of-range' && flowed) {\n matched.add(node);\n } else if (\n astName === 'in-range' &&\n !flowed &&\n (node.hasAttribute('min') ||\n node.hasAttribute('max') ||\n attrType === 'range')\n ) {\n matched.add(node);\n }\n }\n break;\n }\n case 'required':\n case 'optional': {\n let required;\n let optional;\n if (localName === 'select' || localName === 'textarea') {\n if (node.required || node.hasAttribute('required')) {\n required = true;\n } else {\n optional = true;\n }\n } else if (localName === 'input') {\n if (node.hasAttribute('type')) {\n const attrType = node.getAttribute('type');\n if (KEYS_INPUT_REQUIRED.has(attrType)) {\n if (node.required || node.hasAttribute('required')) {\n required = true;\n } else {\n optional = true;\n }\n } else {\n optional = true;\n }\n } else if (node.required || node.hasAttribute('required')) {\n required = true;\n } else {\n optional = true;\n }\n }\n if (astName === 'required' && required) {\n matched.add(node);\n } else if (astName === 'optional' && optional) {\n matched.add(node);\n }\n break;\n }\n case 'root': {\n if (node === this.#document.documentElement) {\n matched.add(node);\n }\n break;\n }\n case 'empty': {\n if (node.hasChildNodes()) {\n const walker = this._createTreeWalker(node, {\n force: true,\n whatToShow: SHOW_ALL\n });\n let refNode = walker.firstChild();\n let bool;\n while (refNode) {\n bool =\n refNode.nodeType !== ELEMENT_NODE &&\n refNode.nodeType !== TEXT_NODE;\n if (!bool) {\n break;\n }\n refNode = walker.nextSibling();\n }\n if (bool) {\n matched.add(node);\n }\n } else {\n matched.add(node);\n }\n break;\n }\n case 'first-child': {\n if (\n (parentNode && node === parentNode.firstElementChild) ||\n node === this.#root\n ) {\n matched.add(node);\n }\n break;\n }\n case 'last-child': {\n if (\n (parentNode && node === parentNode.lastElementChild) ||\n node === this.#root\n ) {\n matched.add(node);\n }\n break;\n }\n case 'only-child': {\n if (\n (parentNode &&\n node === parentNode.firstElementChild &&\n node === parentNode.lastElementChild) ||\n node === this.#root\n ) {\n matched.add(node);\n }\n break;\n }\n case 'defined': {\n if (node.hasAttribute('is') || localName.includes('-')) {\n if (isCustomElement(node)) {\n matched.add(node);\n }\n // NOTE: MathMLElement is not implemented in jsdom.\n } else if (\n node instanceof this.#window.HTMLElement ||\n node instanceof this.#window.SVGElement\n ) {\n matched.add(node);\n }\n break;\n }\n case 'popover-open': {\n if (node.popover && isVisible(node)) {\n matched.add(node);\n }\n break;\n }\n // Ignore :host.\n case 'host': {\n break;\n }\n // Legacy pseudo-elements.\n case 'after':\n case 'before':\n case 'first-letter':\n case 'first-line': {\n if (warn) {\n this.onError(\n generateException(\n `Unsupported pseudo-element ::${astName}`,\n NOT_SUPPORTED_ERR,\n this.#window\n )\n );\n }\n break;\n }\n // Not supported.\n case 'autofill':\n case 'blank':\n case 'buffering':\n case 'current':\n case 'fullscreen':\n case 'future':\n case 'has-slotted':\n case 'heading':\n case 'modal':\n case 'muted':\n case 'past':\n case 'paused':\n case 'picture-in-picture':\n case 'playing':\n case 'seeking':\n case 'stalled':\n case 'user-invalid':\n case 'user-valid':\n case 'volume-locked':\n case '-webkit-autofill': {\n if (warn) {\n this.onError(\n generateException(\n `Unsupported pseudo-class :${astName}`,\n NOT_SUPPORTED_ERR,\n this.#window\n )\n );\n }\n break;\n }\n default: {\n if (astName.startsWith('-webkit-')) {\n if (warn) {\n this.onError(\n generateException(\n `Unsupported pseudo-class :${astName}`,\n NOT_SUPPORTED_ERR,\n this.#window\n )\n );\n }\n } else if (!forgive) {\n this.onError(\n generateException(\n `Unknown pseudo-class :${astName}`,\n SYNTAX_ERR,\n this.#window\n )\n );\n }\n }\n }\n }\n return matched;\n }\n\n /**\n * Evaluates the :host() pseudo-class.\n * @private\n * @param {Array.<object>} leaves - The AST leaves.\n * @param {object} host - The host element.\n * @param {object} ast - The original AST for error reporting.\n * @returns {boolean} True if matched.\n */\n _evaluateHostPseudo = (leaves, host, ast) => {\n const l = leaves.length;\n for (let i = 0; i < l; i++) {\n const leaf = leaves[i];\n if (leaf.type === COMBINATOR) {\n const css = generateCSS(ast);\n const msg = `Invalid selector ${css}`;\n this.onError(generateException(msg, SYNTAX_ERR, this.#window));\n return false;\n }\n if (!this._matchSelector(leaf, host).has(host)) {\n return false;\n }\n }\n return true;\n };\n\n /**\n * Evaluates the :host-context() pseudo-class.\n * @private\n * @param {Array.<object>} leaves - The AST leaves.\n * @param {object} host - The host element.\n * @param {object} ast - The original AST for error reporting.\n * @returns {boolean} True if matched.\n */\n _evaluateHostContextPseudo = (leaves, host, ast) => {\n let parent = host;\n while (parent) {\n let bool;\n const l = leaves.length;\n for (let i = 0; i < l; i++) {\n const leaf = leaves[i];\n if (leaf.type === COMBINATOR) {\n const css = generateCSS(ast);\n const msg = `Invalid selector ${css}`;\n this.onError(generateException(msg, SYNTAX_ERR, this.#window));\n return false;\n }\n bool = this._matchSelector(leaf, parent).has(parent);\n if (!bool) {\n break;\n }\n }\n if (bool) {\n return true;\n }\n parent = parent.parentNode;\n }\n return false;\n };\n\n /**\n * Matches shadow host pseudo-classes.\n * @private\n * @param {object} ast - The AST.\n * @param {object} node - The DocumentFragment node.\n * @returns {?object} The matched node.\n */\n _matchShadowHostPseudoClass = (ast, node) => {\n const { children: astChildren, name: astName } = ast;\n // Handle simple pseudo-class (no arguments).\n if (!Array.isArray(astChildren)) {\n if (astName === 'host') {\n return node;\n }\n const msg = `Invalid selector :${astName}`;\n return this.onError(generateException(msg, SYNTAX_ERR, this.#window));\n }\n // Handle functional pseudo-class like :host(...).\n if (astName !== 'host' && astName !== 'host-context') {\n const msg = `Invalid selector :${astName}()`;\n return this.onError(generateException(msg, SYNTAX_ERR, this.#window));\n }\n if (astChildren.length !== 1) {\n const css = generateCSS(ast);\n const msg = `Invalid selector ${css}`;\n return this.onError(generateException(msg, SYNTAX_ERR, this.#window));\n }\n const { host } = node;\n const { branches } = walkAST(astChildren[0]);\n const [branch] = branches;\n const [...leaves] = branch;\n let isMatch = false;\n if (astName === 'host') {\n isMatch = this._evaluateHostPseudo(leaves, host, ast);\n // astName === 'host-context'.\n } else {\n isMatch = this._evaluateHostContextPseudo(leaves, host, ast);\n }\n return isMatch ? node : null;\n };\n\n /**\n * Matches a selector for element nodes.\n * @private\n * @param {object} ast - The AST.\n * @param {object} node - The Element node.\n * @param {object} [opt] - Options.\n * @returns {Set.<object>} A collection of matched nodes.\n */\n _matchSelectorForElement = (ast, node, opt = {}) => {\n const { type: astType } = ast;\n const astName = unescapeSelector(ast.name);\n const matched = new Set();\n switch (astType) {\n case ATTR_SELECTOR: {\n if (matchAttributeSelector(ast, node, opt)) {\n matched.add(node);\n }\n break;\n }\n case ID_SELECTOR: {\n if (node.id === astName) {\n matched.add(node);\n }\n break;\n }\n case CLASS_SELECTOR: {\n if (node.classList.contains(astName)) {\n matched.add(node);\n }\n break;\n }\n case PS_CLASS_SELECTOR: {\n return this._matchPseudoClassSelector(ast, node, opt);\n }\n case TYPE_SELECTOR: {\n if (matchTypeSelector(ast, node, opt)) {\n matched.add(node);\n }\n break;\n }\n // PS_ELEMENT_SELECTOR is handled by default.\n default: {\n try {\n if (opt.check) {\n const css = generateCSS(ast);\n this.#pseudoElement.push(css);\n matched.add(node);\n } else {\n matchPseudoElementSelector(astName, astType, opt);\n }\n } catch (e) {\n this.onError(e);\n }\n }\n }\n return matched;\n };\n\n /**\n * Matches a selector for a shadow root.\n * @private\n * @param {object} ast - The AST.\n * @param {object} node - The DocumentFragment node.\n * @param {object} [opt] - Options.\n * @returns {Set.<object>} A collection of matched nodes.\n */\n _matchSelectorForShadowRoot = (ast, node, opt = {}) => {\n const { name: astName } = ast;\n if (KEYS_LOGICAL.has(astName)) {\n opt.isShadowRoot = true;\n return this._matchPseudoClassSelector(ast, node, opt);\n }\n const matched = new Set();\n if (astName === 'host' || astName === 'host-context') {\n const res = this._matchShadowHostPseudoClass(ast, node, opt);\n if (res) {\n this.#verifyShadowHost = true;\n matched.add(res);\n }\n }\n return matched;\n };\n\n /**\n * Matches a selector.\n * @private\n * @param {object} ast - The AST.\n * @param {object} node - The Document, DocumentFragment, or Element node.\n * @param {object} [opt] - Options.\n * @returns {Set.<object>} A collection of matched nodes.\n */\n _matchSelector = (ast, node, opt = {}) => {\n if (node.nodeType === ELEMENT_NODE) {\n return this._matchSelectorForElement(ast, node, opt);\n }\n if (\n this.#shadow &&\n node.nodeType === DOCUMENT_FRAGMENT_NODE &&\n ast.type === PS_CLASS_SELECTOR\n ) {\n return this._matchSelectorForShadowRoot(ast, node, opt);\n }\n return new Set();\n };\n\n /**\n * Matches leaves.\n * @private\n * @param {Array.<object>} leaves - The AST leaves.\n * @param {object} node - The node.\n * @param {object} [opt] - Options.\n * @returns {boolean} The result.\n */\n _matchLeaves = (leaves, node, opt = {}) => {\n const results = this.#invalidate ? this.#invalidateResults : this.#results;\n let result = results.get(leaves);\n if (result && result.has(node)) {\n const { matched } = result.get(node);\n return matched;\n }\n let cacheable = true;\n if (node.nodeType === ELEMENT_NODE && KEYS_FORM.has(node.localName)) {\n cacheable = false;\n }\n let bool;\n const l = leaves.length;\n for (let i = 0; i < l; i++) {\n const leaf = leaves[i];\n switch (leaf.type) {\n case ATTR_SELECTOR:\n case ID_SELECTOR: {\n cacheable = false;\n break;\n }\n case PS_CLASS_SELECTOR: {\n if (KEYS_PS_UNCACHE.has(leaf.name)) {\n cacheable = false;\n }\n break;\n }\n default: {\n // No action needed for other types.\n }\n }\n bool = this._matchSelector(leaf, node, opt).has(node);\n if (!bool) {\n break;\n }\n }\n if (cacheable) {\n if (!result) {\n result = new WeakMap();\n }\n result.set(node, {\n matched: bool\n });\n results.set(leaves, result);\n }\n return bool;\n };\n\n /**\n * Traverses all descendant nodes and collects matches.\n * @private\n * @param {object} baseNode - The base Element node or Element.shadowRoot.\n * @param {Array.<object>} leaves - The AST leaves.\n * @param {object} [opt] - Options.\n * @returns {Set.<object>} A collection of matched nodes.\n */\n _traverseAllDescendants = (baseNode, leaves, opt = {}) => {\n const walker = this._createTreeWalker(baseNode);\n traverseNode(baseNode, walker);\n let currentNode = walker.firstChild();\n const nodes = new Set();\n while (currentNode) {\n if (this._matchLeaves(leaves, currentNode, opt)) {\n nodes.add(currentNode);\n }\n currentNode = walker.nextNode();\n }\n return nodes;\n };\n\n /**\n * Finds descendant nodes.\n * @private\n * @param {Array.<object>} leaves - The AST leaves.\n * @param {object} baseNode - The base Element node or Element.shadowRoot.\n * @param {object} [opt] - Options.\n * @returns {Set.<object>} A collection of matched nodes.\n */\n _findDescendantNodes = (leaves, baseNode, opt = {}) => {\n const [leaf, ...filterLeaves] = leaves;\n const { type: leafType } = leaf;\n switch (leafType) {\n case ID_SELECTOR: {\n const canUseGetElementById =\n !this.#shadow &&\n baseNode.nodeType === ELEMENT_NODE &&\n this.#root.nodeType !== ELEMENT_NODE;\n if (canUseGetElementById) {\n const leafName = unescapeSelector(leaf.name);\n const nodes = new Set();\n const foundNode = this.#root.getElementById(leafName);\n if (\n foundNode &&\n foundNode !== baseNode &&\n baseNode.contains(foundNode)\n ) {\n const isCompoundSelector = filterLeaves.length > 0;\n if (\n !isCompoundSelector ||\n this._matchLeaves(filterLeaves, foundNode, opt)\n ) {\n nodes.add(foundNode);\n }\n }\n return nodes;\n }\n // Fallback to default traversal if fast path is not applicable.\n return this._traverseAllDescendants(baseNode, leaves, opt);\n }\n case PS_ELEMENT_SELECTOR: {\n const leafName = unescapeSelector(leaf.name);\n matchPseudoElementSelector(leafName, leafType, opt);\n return new Set();\n }\n default: {\n return this._traverseAllDescendants(baseNode, leaves, opt);\n }\n }\n };\n\n /**\n * Matches the descendant combinator ' '.\n * @private\n * @param {object} twig - The twig object.\n * @param {object} node - The Element node.\n * @param {object} [opt] - Options.\n * @returns {Set.<object>} A collection of matched nodes.\n */\n _matchDescendantCombinator = (twig, node, opt = {}) => {\n const { leaves } = twig;\n const { parentNode } = node;\n const { dir } = opt;\n if (dir === DIR_NEXT) {\n return this._findDescendantNodes(leaves, node, opt);\n }\n // DIR_PREV\n const ancestors = [];\n let refNode = parentNode;\n while (refNode) {\n if (this._matchLeaves(leaves, refNode, opt)) {\n ancestors.push(refNode);\n }\n refNode = refNode.parentNode;\n }\n if (ancestors.length) {\n // Reverse to maintain document order.\n return new Set(ancestors.reverse());\n }\n return new Set();\n };\n\n /**\n * Matches the child combinator '>'.\n * @private\n * @param {object} twig - The twig object.\n * @param {object} node - The Element node.\n * @param {object} [opt] - Options.\n * @returns {Set.<object>} A collection of matched nodes.\n */\n _matchChildCombinator = (twig, node, opt = {}) => {\n const { leaves } = twig;\n const { dir } = opt;\n const { parentNode } = node;\n const matched = new Set();\n if (dir === DIR_NEXT) {\n let refNode = node.firstElementChild;\n while (refNode) {\n if (this._matchLeaves(leaves, refNode, opt)) {\n matched.add(refNode);\n }\n refNode = refNode.nextElementSibling;\n }\n } else {\n // DIR_PREV\n if (parentNode && this._matchLeaves(leaves, parentNode, opt)) {\n matched.add(parentNode);\n }\n }\n return matched;\n };\n\n /**\n * Matches the adjacent sibling combinator '+'.\n * @private\n * @param {object} twig - The twig object.\n * @param {object} node - The Element node.\n * @param {object} [opt] - Options.\n * @returns {Set.<object>} A collection of matched nodes.\n */\n _matchAdjacentSiblingCombinator = (twig, node, opt = {}) => {\n const { leaves } = twig;\n const { dir } = opt;\n const matched = new Set();\n const refNode =\n dir === DIR_NEXT ? node.nextElementSibling : node.previousElementSibling;\n if (refNode && this._matchLeaves(leaves, refNode, opt)) {\n matched.add(refNode);\n }\n return matched;\n };\n\n /**\n * Matches the general sibling combinator '~'.\n * @private\n * @param {object} twig - The twig object.\n * @param {object} node - The Element node.\n * @param {object} [opt] - Options.\n * @returns {Set.<object>} A collection of matched nodes.\n */\n _matchGeneralSiblingCombinator = (twig, node, opt = {}) => {\n const { leaves } = twig;\n const { dir } = opt;\n const matched = new Set();\n let refNode =\n dir === DIR_NEXT ? node.nextElementSibling : node.previousElementSibling;\n while (refNode) {\n if (this._matchLeaves(leaves, refNode, opt)) {\n matched.add(refNode);\n }\n refNode =\n dir === DIR_NEXT\n ? refNode.nextElementSibling\n : refNode.previousElementSibling;\n }\n return matched;\n };\n\n /**\n * Matches a combinator.\n * @private\n * @param {object} twig - The twig object.\n * @param {object} node - The Element node.\n * @param {object} [opt] - Options.\n * @returns {Set.<object>} A collection of matched nodes.\n */\n _matchCombinator = (twig, node, opt = {}) => {\n const {\n combo: { name: comboName }\n } = twig;\n switch (comboName) {\n case '+': {\n return this._matchAdjacentSiblingCombinator(twig, node, opt);\n }\n case '~': {\n return this._matchGeneralSiblingCombinator(twig, node, opt);\n }\n case '>': {\n return this._matchChildCombinator(twig, node, opt);\n }\n case ' ':\n default: {\n return this._matchDescendantCombinator(twig, node, opt);\n }\n }\n };\n\n /**\n * Traverses with a TreeWalker and collects nodes matching the leaves.\n * @private\n * @param {TreeWalker} walker - The TreeWalker instance to use.\n * @param {Array} leaves - The AST leaves to match against.\n * @param {object} options - Traversal options.\n * @param {Node} options.startNode - The node to start traversal from.\n * @param {string} options.targetType - The type of target ('all' or 'first').\n * @param {Node} [options.boundaryNode] - The node to stop traversal at.\n * @param {boolean} [options.force] - Force traversal to the next node.\n * @returns {Array.<Node>} An array of matched nodes.\n */\n _traverseAndCollectNodes = (walker, leaves, options) => {\n const { boundaryNode, force, startNode, targetType } = options;\n const collectedNodes = [];\n let currentNode = traverseNode(startNode, walker, !!force);\n if (!currentNode) {\n return [];\n }\n // Adjust starting node.\n if (currentNode.nodeType !== ELEMENT_NODE) {\n currentNode = walker.nextNode();\n } else if (currentNode === startNode && currentNode !== this.#root) {\n currentNode = walker.nextNode();\n }\n const matchOpt = {\n warn: this.#warn\n };\n while (currentNode) {\n // Stop when we reach the boundary.\n if (boundaryNode) {\n if (currentNode === boundaryNode) {\n break;\n } else if (\n targetType === TARGET_ALL &&\n !boundaryNode.contains(currentNode)\n ) {\n break;\n }\n }\n if (\n this._matchLeaves(leaves, currentNode, matchOpt) &&\n currentNode !== this.#node\n ) {\n collectedNodes.push(currentNode);\n // Stop after the first match if not collecting all.\n if (targetType !== TARGET_ALL) {\n break;\n }\n }\n currentNode = walker.nextNode();\n }\n return collectedNodes;\n };\n\n /**\n * Finds matched node(s) preceding this.#node.\n * @private\n * @param {Array.<object>} leaves - The AST leaves.\n * @param {object} node - The node to start from.\n * @param {object} opt - Options.\n * @param {boolean} [opt.force] - If true, traverses only to the next node.\n * @param {string} [opt.targetType] - The target type.\n * @returns {Array.<object>} A collection of matched nodes.\n */\n _findPrecede = (leaves, node, opt = {}) => {\n const { force, targetType } = opt;\n if (!this.#rootWalker) {\n this.#rootWalker = this._createTreeWalker(this.#root);\n }\n return this._traverseAndCollectNodes(this.#rootWalker, leaves, {\n force,\n targetType,\n boundaryNode: this.#node,\n startNode: node\n });\n };\n\n /**\n * Finds matched node(s) in #nodeWalker.\n * @private\n * @param {Array.<object>} leaves - The AST leaves.\n * @param {object} node - The node to start from.\n * @param {object} opt - Options.\n * @param {boolean} [opt.precede] - If true, finds preceding nodes.\n * @returns {Array.<object>} A collection of matched nodes.\n */\n _findNodeWalker = (leaves, node, opt = {}) => {\n const { precede, ...traversalOpts } = opt;\n if (precede) {\n const precedeNodes = this._findPrecede(leaves, this.#root, opt);\n if (precedeNodes.length) {\n return precedeNodes;\n }\n }\n if (!this.#nodeWalker) {\n this.#nodeWalker = this._createTreeWalker(this.#node);\n }\n return this._traverseAndCollectNodes(this.#nodeWalker, leaves, {\n startNode: node,\n ...traversalOpts\n });\n };\n\n /**\n * Matches the node itself.\n * @private\n * @param {Array} leaves - The AST leaves.\n * @param {boolean} check - Indicates if running in internal check().\n * @returns {Array} An array containing [nodes, filtered, pseudoElement].\n */\n _matchSelf = (leaves, check = false) => {\n const options = { check, warn: this.#warn };\n const matched = this._matchLeaves(leaves, this.#node, options);\n const nodes = matched ? [this.#node] : [];\n return [nodes, matched, this.#pseudoElement];\n };\n\n /**\n * Finds lineal nodes (self and ancestors).\n * @private\n * @param {Array} leaves - The AST leaves.\n * @param {object} opt - Options.\n * @returns {Array} An array containing [nodes, filtered].\n */\n _findLineal = (leaves, opt) => {\n const { complex } = opt;\n const nodes = [];\n const options = { warn: this.#warn };\n const selfMatched = this._matchLeaves(leaves, this.#node, options);\n if (selfMatched) {\n nodes.push(this.#node);\n }\n if (!selfMatched || complex) {\n let currentNode = this.#node.parentNode;\n while (currentNode) {\n if (this._matchLeaves(leaves, currentNode, options)) {\n nodes.push(currentNode);\n }\n currentNode = currentNode.parentNode;\n }\n }\n const filtered = nodes.length > 0;\n return [nodes, filtered];\n };\n\n /**\n * Finds entry nodes for pseudo-element selectors.\n * @private\n * @param {object} leaf - The pseudo-element leaf from the AST.\n * @param {Array.<object>} filterLeaves - Leaves for compound selectors.\n * @param {string} targetType - The type of target to find.\n * @returns {object} The result { nodes, filtered, pending }.\n */\n _findEntryNodesForPseudoElement = (leaf, filterLeaves, targetType) => {\n let nodes = [];\n let filtered = false;\n if (targetType === TARGET_SELF && this.#check) {\n const css = generateCSS(leaf);\n this.#pseudoElement.push(css);\n if (filterLeaves.length) {\n [nodes, filtered] = this._matchSelf(filterLeaves, this.#check);\n } else {\n nodes.push(this.#node);\n filtered = true;\n }\n } else {\n matchPseudoElementSelector(leaf.name, leaf.type, { warn: this.#warn });\n }\n return { nodes, filtered, pending: false };\n };\n\n /**\n * Finds entry nodes for ID selectors.\n * @private\n * @param {object} twig - The current twig from the AST branch.\n * @param {string} targetType - The type of target to find.\n * @param {object} opt - Additional options for finding nodes.\n * @returns {object} The result { nodes, filtered, pending }.\n */\n _findEntryNodesForId = (twig, targetType, opt) => {\n const { leaves } = twig;\n const [leaf, ...filterLeaves] = leaves;\n const { complex, precede } = opt;\n let nodes = [];\n let filtered = false;\n if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaves, { complex });\n } else if (\n targetType === TARGET_FIRST &&\n this.#root.nodeType !== ELEMENT_NODE\n ) {\n const node = this.#root.getElementById(leaf.name);\n if (node) {\n if (filterLeaves.length) {\n if (this._matchLeaves(filterLeaves, node, { warn: this.#warn })) {\n nodes.push(node);\n filtered = true;\n }\n } else {\n nodes.push(node);\n filtered = true;\n }\n }\n } else {\n nodes = this._findNodeWalker(leaves, this.#node, { precede, targetType });\n filtered = nodes.length > 0;\n }\n return { nodes, filtered, pending: false };\n };\n\n /**\n * Finds entry nodes for class selectors.\n * @private\n * @param {Array.<object>} leaves - The AST leaves for the selector.\n * @param {string} targetType - The type of target to find.\n * @param {object} opt - Additional options for finding nodes.\n * @returns {object} The result { nodes, filtered, pending }.\n */\n _findEntryNodesForClass = (leaves, targetType, opt) => {\n const { complex, precede } = opt;\n let nodes = [];\n let filtered = false;\n if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaves, { complex });\n } else {\n nodes = this._findNodeWalker(leaves, this.#node, { precede, targetType });\n filtered = nodes.length > 0;\n }\n return { nodes, filtered, pending: false };\n };\n\n /**\n * Finds entry nodes for type selectors.\n * @private\n * @param {Array.<object>} leaves - The AST leaves for the selector.\n * @param {string} targetType - The type of target to find.\n * @param {object} opt - Additional options for finding nodes.\n * @returns {object} The result { nodes, filtered, pending }.\n */\n _findEntryNodesForType = (leaves, targetType, opt) => {\n const { complex, precede } = opt;\n let nodes = [];\n let filtered = false;\n if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaves, { complex });\n } else {\n nodes = this._findNodeWalker(leaves, this.#node, { precede, targetType });\n filtered = nodes.length > 0;\n }\n return { nodes, filtered, pending: false };\n };\n\n /**\n * Finds entry nodes for other selector types (default case).\n * @private\n * @param {object} twig - The current twig from the AST branch.\n * @param {string} targetType - The type of target to find.\n * @param {object} opt - Additional options for finding nodes.\n * @returns {object} The result { nodes, filtered, pending }.\n */\n _findEntryNodesForOther = (twig, targetType, opt) => {\n const { leaves } = twig;\n const [leaf, ...filterLeaves] = leaves;\n const { complex, precede } = opt;\n let nodes = [];\n let filtered = false;\n let pending = false;\n if (targetType !== TARGET_LINEAL && /host(?:-context)?/.test(leaf.name)) {\n let shadowRoot = null;\n if (this.#shadow && this.#node.nodeType === DOCUMENT_FRAGMENT_NODE) {\n shadowRoot = this._matchShadowHostPseudoClass(leaf, this.#node);\n } else if (filterLeaves.length && this.#node.nodeType === ELEMENT_NODE) {\n shadowRoot = this._matchShadowHostPseudoClass(\n leaf,\n this.#node.shadowRoot\n );\n }\n if (shadowRoot) {\n let bool = true;\n const l = filterLeaves.length;\n for (let i = 0; i < l; i++) {\n const filterLeaf = filterLeaves[i];\n switch (filterLeaf.name) {\n case 'host':\n case 'host-context': {\n const matchedNode = this._matchShadowHostPseudoClass(\n filterLeaf,\n shadowRoot\n );\n bool = matchedNode === shadowRoot;\n break;\n }\n case 'has': {\n bool = this._matchPseudoClassSelector(\n filterLeaf,\n shadowRoot,\n {}\n ).has(shadowRoot);\n break;\n }\n default: {\n bool = false;\n }\n }\n if (!bool) {\n break;\n }\n }\n if (bool) {\n nodes.push(shadowRoot);\n filtered = true;\n }\n }\n } else if (targetType === TARGET_SELF) {\n [nodes, filtered] = this._matchSelf(leaves);\n } else if (targetType === TARGET_LINEAL) {\n [nodes, filtered] = this._findLineal(leaves, { complex });\n } else if (targetType === TARGET_FIRST) {\n nodes = this._findNodeWalker(leaves, this.#node, { precede, targetType });\n filtered = nodes.length > 0;\n } else {\n pending = true;\n }\n return { nodes, filtered, pending };\n };\n\n /**\n * Finds entry nodes.\n * @private\n * @param {object} twig - The twig object.\n * @param {string} targetType - The target type.\n * @param {object} [opt] - Options.\n * @param {boolean} [opt.complex] - If true, the selector is complex.\n * @param {string} [opt.dir] - The find direction.\n * @returns {object} An object with nodes and their state.\n */\n _findEntryNodes = (twig, targetType, opt = {}) => {\n const { leaves } = twig;\n const [leaf, ...filterLeaves] = leaves;\n const { complex = false, dir = DIR_PREV } = opt;\n const precede =\n dir === DIR_NEXT &&\n this.#node.nodeType === ELEMENT_NODE &&\n this.#node !== this.#root;\n let result;\n switch (leaf.type) {\n case PS_ELEMENT_SELECTOR: {\n result = this._findEntryNodesForPseudoElement(\n leaf,\n filterLeaves,\n targetType\n );\n break;\n }\n case ID_SELECTOR: {\n result = this._findEntryNodesForId(twig, targetType, {\n complex,\n precede\n });\n break;\n }\n case CLASS_SELECTOR: {\n result = this._findEntryNodesForClass(leaves, targetType, {\n complex,\n precede\n });\n break;\n }\n case TYPE_SELECTOR: {\n result = this._findEntryNodesForType(leaves, targetType, {\n complex,\n precede\n });\n break;\n }\n default: {\n result = this._findEntryNodesForOther(twig, targetType, {\n complex,\n precede\n });\n }\n }\n return {\n compound: filterLeaves.length > 0,\n filtered: result.filtered,\n nodes: result.nodes,\n pending: result.pending\n };\n };\n\n /**\n * Determines the direction and starting twig for a selector branch.\n * @private\n * @param {Array.<object>} branch - The AST branch.\n * @param {string} targetType - The type of target to find.\n * @returns {object} An object with the direction and starting twig.\n */\n _determineTraversalStrategy = (branch, targetType) => {\n const branchLen = branch.length;\n const firstTwig = branch[0];\n const lastTwig = branch[branchLen - 1];\n if (branchLen === 1) {\n return { dir: DIR_PREV, twig: firstTwig };\n }\n // Complex selector (branchLen > 1).\n const {\n leaves: [{ name: firstName, type: firstType }]\n } = firstTwig;\n const {\n leaves: [{ name: lastName, type: lastType }]\n } = lastTwig;\n const { combo: firstCombo } = firstTwig;\n if (\n this.#selector.includes(':scope') ||\n lastType === PS_ELEMENT_SELECTOR ||\n lastType === ID_SELECTOR\n ) {\n return { dir: DIR_PREV, twig: lastTwig };\n }\n if (firstType === ID_SELECTOR) {\n return { dir: DIR_NEXT, twig: firstTwig };\n }\n if (firstName === '*' && firstType === TYPE_SELECTOR) {\n return { dir: DIR_PREV, twig: lastTwig };\n }\n if (lastName === '*' && lastType === TYPE_SELECTOR) {\n return { dir: DIR_NEXT, twig: firstTwig };\n }\n if (branchLen === 2) {\n if (targetType === TARGET_FIRST) {\n return { dir: DIR_PREV, twig: lastTwig };\n }\n const { name: comboName } = firstCombo;\n if (comboName === '+' || comboName === '~') {\n return { dir: DIR_PREV, twig: lastTwig };\n }\n } else if (branchLen > 2 && this.#scoped && targetType === TARGET_FIRST) {\n if (lastType === TYPE_SELECTOR) {\n return { dir: DIR_PREV, twig: lastTwig };\n }\n let isChildOrDescendant = false;\n for (const { combo } of branch) {\n if (combo) {\n const { name: comboName } = combo;\n isChildOrDescendant = comboName === '>' || comboName === ' ';\n if (!isChildOrDescendant) {\n break;\n }\n }\n }\n if (isChildOrDescendant) {\n return { dir: DIR_PREV, twig: lastTwig };\n }\n }\n // Default strategy for complex selectors.\n return { dir: DIR_NEXT, twig: firstTwig };\n };\n\n /**\n * Processes pending items not resolved with a direct strategy.\n * @private\n * @param {Set.<Map>} pendingItems - The set of pending items.\n */\n _processPendingItems = pendingItems => {\n if (!pendingItems.size) {\n return;\n }\n if (!this.#rootWalker) {\n this.#rootWalker = this._createTreeWalker(this.#root);\n }\n const walker = this.#rootWalker;\n let node = this.#root;\n if (this.#scoped) {\n node = this.#node;\n }\n let nextNode = traverseNode(node, walker);\n while (nextNode) {\n const isWithinScope =\n this.#node.nodeType !== ELEMENT_NODE ||\n nextNode === this.#node ||\n this.#node.contains(nextNode);\n if (isWithinScope) {\n for (const pendingItem of pendingItems) {\n const { leaves } = pendingItem.get('twig');\n if (this._matchLeaves(leaves, nextNode, { warn: this.#warn })) {\n const index = pendingItem.get('index');\n this.#ast[index].filtered = true;\n this.#ast[index].find = true;\n this.#nodes[index].push(nextNode);\n }\n }\n } else if (this.#scoped) {\n break;\n }\n nextNode = walker.nextNode();\n }\n };\n\n /**\n * Collects nodes.\n * @private\n * @param {string} targetType - The target type.\n * @returns {Array.<Array.<object>>} An array containing the AST and nodes.\n */\n _collectNodes = targetType => {\n const ast = this.#ast.values();\n if (targetType === TARGET_ALL || targetType === TARGET_FIRST) {\n const pendingItems = new Set();\n let i = 0;\n for (const { branch } of ast) {\n const complex = branch.length > 1;\n const { dir, twig } = this._determineTraversalStrategy(\n branch,\n targetType\n );\n const { compound, filtered, nodes, pending } = this._findEntryNodes(\n twig,\n targetType,\n { complex, dir }\n );\n if (nodes.length) {\n this.#ast[i].find = true;\n this.#nodes[i] = nodes;\n } else if (pending) {\n pendingItems.add(\n new Map([\n ['index', i],\n ['twig', twig]\n ])\n );\n }\n this.#ast[i].dir = dir;\n this.#ast[i].filtered = filtered || !compound;\n i++;\n }\n this._processPendingItems(pendingItems);\n } else {\n let i = 0;\n for (const { branch } of ast) {\n const twig = branch[branch.length - 1];\n const complex = branch.length > 1;\n const dir = DIR_PREV;\n const { compound, filtered, nodes } = this._findEntryNodes(\n twig,\n targetType,\n { complex, dir }\n );\n if (nodes.length) {\n this.#ast[i].find = true;\n this.#nodes[i] = nodes;\n }\n this.#ast[i].dir = dir;\n this.#ast[i].filtered = filtered || !compound;\n i++;\n }\n }\n return [this.#ast, this.#nodes];\n };\n\n /**\n * Gets combined nodes.\n * @private\n * @param {object} twig - The twig object.\n * @param {object} nodes - A collection of nodes.\n * @param {string} dir - The direction.\n * @returns {Array.<object>} A collection of matched nodes.\n */\n _getCombinedNodes = (twig, nodes, dir) => {\n const arr = [];\n const options = {\n dir,\n warn: this.#warn\n };\n for (const node of nodes) {\n const matched = this._matchCombinator(twig, node, options);\n if (matched.size) {\n arr.push(...matched);\n }\n }\n return arr;\n };\n\n /**\n * Matches a node in the 'next' direction.\n * @private\n * @param {Array} branch - The branch.\n * @param {Set.<object>} nodes - A collection of Element nodes.\n * @param {object} opt - Options.\n * @param {object} opt.combo - The combo object.\n * @param {number} opt.index - The index.\n * @returns {?object} The matched node.\n */\n _matchNodeNext = (branch, nodes, opt) => {\n const { combo, index } = opt;\n const { combo: nextCombo, leaves } = branch[index];\n const twig = {\n combo,\n leaves\n };\n const nextNodes = new Set(this._getCombinedNodes(twig, nodes, DIR_NEXT));\n if (nextNodes.size) {\n if (index === branch.length - 1) {\n const [nextNode] = sortNodes(nextNodes);\n return nextNode;\n }\n return this._matchNodeNext(branch, nextNodes, {\n combo: nextCombo,\n index: index + 1\n });\n }\n return null;\n };\n\n /**\n * Matches a node in the 'previous' direction.\n * @private\n * @param {Array} branch - The branch.\n * @param {object} node - The Element node.\n * @param {object} opt - Options.\n * @param {number} opt.index - The index.\n * @returns {?object} The node.\n */\n _matchNodePrev = (branch, node, opt) => {\n const { index } = opt;\n const twig = branch[index];\n const nodes = new Set([node]);\n const nextNodes = new Set(this._getCombinedNodes(twig, nodes, DIR_PREV));\n if (nextNodes.size) {\n if (index === 0) {\n return node;\n }\n let matched;\n for (const nextNode of nextNodes) {\n matched = this._matchNodePrev(branch, nextNode, {\n index: index - 1\n });\n if (matched) {\n break;\n }\n }\n if (matched) {\n return node;\n }\n }\n return null;\n };\n\n /**\n * Processes a complex selector branch to find all matching nodes.\n * @private\n * @param {Array} branch - The selector branch from the AST.\n * @param {Array} entryNodes - The initial set of nodes to start from.\n * @param {string} dir - The direction of traversal ('next' or 'prev').\n * @returns {Set.<object>} A set of all matched nodes.\n */\n _processComplexBranchAll = (branch, entryNodes, dir) => {\n const matchedNodes = new Set();\n const branchLen = branch.length;\n const lastIndex = branchLen - 1;\n\n if (dir === DIR_NEXT) {\n const { combo: firstCombo } = branch[0];\n for (const node of entryNodes) {\n let combo = firstCombo;\n let nextNodes = new Set([node]);\n for (let j = 1; j < branchLen; j++) {\n const { combo: nextCombo, leaves } = branch[j];\n const twig = { combo, leaves };\n const nodesArr = this._getCombinedNodes(twig, nextNodes, dir);\n if (nodesArr.length) {\n if (j === lastIndex) {\n for (const nextNode of nodesArr) {\n matchedNodes.add(nextNode);\n }\n }\n combo = nextCombo;\n nextNodes = new Set(nodesArr);\n } else {\n // No further matches down this path.\n nextNodes.clear();\n break;\n }\n }\n }\n // DIR_PREV\n } else {\n for (const node of entryNodes) {\n let nextNodes = new Set([node]);\n for (let j = lastIndex - 1; j >= 0; j--) {\n const twig = branch[j];\n const nodesArr = this._getCombinedNodes(twig, nextNodes, dir);\n if (nodesArr.length) {\n // The entry node is the final match\n if (j === 0) {\n matchedNodes.add(node);\n }\n nextNodes = new Set(nodesArr);\n } else {\n // No further matches down this path.\n nextNodes.clear();\n break;\n }\n }\n }\n }\n return matchedNodes;\n };\n\n /**\n * Processes a complex selector branch to find the first matching node.\n * @private\n * @param {Array} branch - The selector branch from the AST.\n * @param {Array} entryNodes - The initial set of nodes to start from.\n * @param {string} dir - The direction of traversal ('next' or 'prev').\n * @param {string} targetType - The type of search (e.g., 'first').\n * @returns {?object} The first matched node, or null.\n */\n _processComplexBranchFirst = (branch, entryNodes, dir, targetType) => {\n const branchLen = branch.length;\n const lastIndex = branchLen - 1;\n // DIR_NEXT logic for finding the first match.\n if (dir === DIR_NEXT) {\n const { combo: entryCombo } = branch[0];\n for (const node of entryNodes) {\n const matchedNode = this._matchNodeNext(branch, new Set([node]), {\n combo: entryCombo,\n index: 1\n });\n if (matchedNode) {\n if (this.#node.nodeType === ELEMENT_NODE) {\n if (\n matchedNode !== this.#node &&\n this.#node.contains(matchedNode)\n ) {\n return matchedNode;\n }\n } else {\n return matchedNode;\n }\n }\n }\n // Fallback logic if no direct match found.\n const { leaves: entryLeaves } = branch[0];\n const [entryNode] = entryNodes;\n if (this.#node.contains(entryNode)) {\n let [refNode] = this._findNodeWalker(entryLeaves, entryNode, {\n targetType\n });\n while (refNode) {\n const matchedNode = this._matchNodeNext(branch, new Set([refNode]), {\n combo: entryCombo,\n index: 1\n });\n if (matchedNode) {\n if (this.#node.nodeType === ELEMENT_NODE) {\n if (\n matchedNode !== this.#node &&\n this.#node.contains(matchedNode)\n ) {\n return matchedNode;\n }\n } else {\n return matchedNode;\n }\n }\n [refNode] = this._findNodeWalker(entryLeaves, refNode, {\n targetType,\n force: true\n });\n }\n }\n // DIR_PREV logic for finding the first match.\n } else {\n for (const node of entryNodes) {\n const matchedNode = this._matchNodePrev(branch, node, {\n index: lastIndex - 1\n });\n if (matchedNode) {\n return matchedNode;\n }\n }\n // Fallback for TARGET_FIRST.\n if (targetType === TARGET_FIRST) {\n const { leaves: entryLeaves } = branch[lastIndex];\n const [entryNode] = entryNodes;\n let [refNode] = this._findNodeWalker(entryLeaves, entryNode, {\n targetType\n });\n while (refNode) {\n const matchedNode = this._matchNodePrev(branch, refNode, {\n index: lastIndex - 1\n });\n if (matchedNode) {\n return refNode;\n }\n [refNode] = this._findNodeWalker(entryLeaves, refNode, {\n targetType,\n force: true\n });\n }\n }\n }\n return null;\n };\n\n /**\n * Finds matched nodes.\n * @param {string} targetType - The target type.\n * @returns {Set.<object>} A collection of matched nodes.\n */\n find = targetType => {\n const [[...branches], collectedNodes] = this._collectNodes(targetType);\n const l = branches.length;\n let sort =\n l > 1 && targetType === TARGET_ALL && this.#selector.includes(':scope');\n let nodes = new Set();\n for (let i = 0; i < l; i++) {\n const { branch, dir, find } = branches[i];\n if (!branch.length || !find) {\n continue;\n }\n const entryNodes = collectedNodes[i];\n const lastIndex = branch.length - 1;\n // Handle simple selectors (no combinators).\n if (lastIndex === 0) {\n if (\n (targetType === TARGET_ALL || targetType === TARGET_FIRST) &&\n this.#node.nodeType === ELEMENT_NODE\n ) {\n for (const node of entryNodes) {\n if (node !== this.#node && this.#node.contains(node)) {\n nodes.add(node);\n if (targetType === TARGET_FIRST) {\n break;\n }\n }\n }\n } else if (targetType === TARGET_ALL) {\n if (nodes.size) {\n for (const node of entryNodes) {\n nodes.add(node);\n }\n sort = true;\n } else {\n nodes = new Set(entryNodes);\n }\n } else {\n if (entryNodes.length) {\n nodes.add(entryNodes[0]);\n }\n }\n // Handle complex selectors.\n } else {\n if (targetType === TARGET_ALL) {\n const newNodes = this._processComplexBranchAll(\n branch,\n entryNodes,\n dir\n );\n if (nodes.size) {\n for (const newNode of newNodes) {\n nodes.add(newNode);\n }\n sort = true;\n } else {\n nodes = newNodes;\n }\n } else {\n const matchedNode = this._processComplexBranchFirst(\n branch,\n entryNodes,\n dir,\n targetType\n );\n if (matchedNode) {\n nodes.add(matchedNode);\n }\n }\n }\n }\n if (this.#check) {\n const match = !!nodes.size;\n let pseudoElement;\n if (this.#pseudoElement.length) {\n pseudoElement = this.#pseudoElement.join('');\n } else {\n pseudoElement = null;\n }\n return { match, pseudoElement };\n }\n if (targetType === TARGET_FIRST || targetType === TARGET_ALL) {\n nodes.delete(this.#node);\n }\n if ((sort || targetType === TARGET_FIRST) && nodes.size > 1) {\n return new Set(sortNodes(nodes));\n }\n return nodes;\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,uBAAyB;;;ACHzB,IAAAA,WAAyB;;;ACAzB,oBAAmB;AACnB,qBAAwB;AACxB,cAAyB;AACzB,8CAAgC;;;ACFzB,IAAM,gBAAgB;AACtB,IAAM,iBAAiB;AACvB,IAAM,aAAa;AACnB,IAAM,QAAQ;AACd,IAAM,cAAc;AACpB,IAAM,oBAAoB;AAC1B,IAAM,MAAM;AAEZ,IAAM,oBAAoB;AAC1B,IAAM,sBAAsB;AAG5B,IAAM,WAAW;AAEjB,IAAM,SAAS;AACf,IAAM,aAAa;AACnB,IAAM,aAAa;AACnB,IAAM,eAAe;AACrB,IAAM,gBAAgB;AACtB,IAAM,cAAc;AACpB,IAAM,gBAAgB;AAGtB,IAAM,SAAS;AACf,IAAM,SAAS;AACf,IAAM,SAAS;AACf,IAAM,SAAS;AACf,IAAM,SAAS;AACf,IAAM,SAAS;AACf,IAAM,WAAW;AACjB,IAAM,MAAM;AACZ,IAAM,MAAM;AACZ,IAAM,YAAY;AAClB,IAAM,UAAU;AAGhB,IAAM,eAAe;AACrB,IAAM,YAAY;AAClB,IAAM,gBAAgB;AACtB,IAAM,yBAAyB;AAC/B,IAAM,8BAA8B;AACpC,IAAM,6BAA6B;AAInC,IAAM,WAAW;AACjB,IAAM,iBAAiB;AAMvB,IAAM,YAAY;AAClB,IAAM,YAAY;AAClB,IAAM,QAAQ;AACd,IAAM,YAAY,OAAO,SAAS;AAClC,IAAM,eAAe,iBAAiB,SAAS;AAC/C,IAAM,MAAM,WAAW,KAAK,iBAAiB,KAAK,kBAAkB,KAAK;AAEzE,IAAM,QAAQ;AACd,IAAM,UAAU;AAChB,IAAM,UAAU;AAEhB,IAAM,WAAW;AAEjB,IAAM,OAAO,qDAAqD,GAAG;AAErE,IAAM,WAAW;AACjB,IAAM,qBAAqB;AAE3B,IAAM,WAAW;AACjB,IAAM,aAAa;AACnB,IAAM,WAAW,MAAM,QAAQ,OAAO,QAAQ,QAAQ,QAAQ;AAC9D,IAAM,aAAa,MAAM,QAAQ,OAAO,QAAQ,QAAQ,QAAQ,IAAI,QAAQ;AAC5E,IAAM,aAAa,MAAM,UAAU,OAAO,UAAU,QAAQ,QAAQ;AACpE,IAAM,qBAAqB,MAAM,QAAQ,OAAO,QAAQ,QAAQ,kBAAkB;AAClF,IAAM,UAAU,GAAG,QAAQ,MAAM,KAAK,GAAG,QAAQ;AACjD,IAAM,YAAY,GAAG,UAAU,MAAM,KAAK,GAAG,UAAU;AACvD,IAAM,eAAe,oBAAoB,kBAAkB;AAC3D,IAAM,iBAAiB,oBAAoB,UAAU,eAAe,UAAU;AAC9E,IAAM,gBAAgB,oBAAoB,SAAS,eAAe,SAAS;AAG3E,IAAM,aAAa,OAAO,OAAO;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACM,IAAM,eAAe,OAAO,OAAO,CAAC,UAAU,SAAS,QAAQ,CAAC;AAChE,IAAM,cAAc,OAAO,OAAO,CAAC,YAAY,OAAO,CAAC;AACvD,IAAM,aAAa,OAAO,OAAO;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACM,IAAM,aAAa,OAAO,OAAO;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACM,IAAM,aAAa,OAAO,OAAO;AAAA,EACtC,GAAG;AAAA,EACH,GAAG;AAAA,EACH;AACF,CAAC;AACM,IAAM,YAAY,OAAO,OAAO;AAAA,EACrC,GAAG;AAAA,EACH;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGM,IAAM,eAAe,oBAAI,IAAI,CAAC,OAAO,MAAM,OAAO,OAAO,CAAC;;;ADvFjE,IAAM,gBAAgB,oBAAI,IAAI,CAAC,GAAG,cAAc,GAAG,YAAY,QAAQ,CAAC;AACxE,IAAM,eAAe,IAAI,IAAI,SAAS;AACtC,IAAM,kBAAkB,IAAI,IAAI,UAAU;AAC1C,IAAM,wBAAwB,oBAAI,IAAI,CAAC,OAAO,UAAU,SAAS,UAAU,CAAC;AAC5E,IAAM,sBAAsB,oBAAI,IAAI,CAAC,UAAU,UAAU,UAAU,CAAC;AACpE,IAAM,0BAA0B,oBAAI,IAAI;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAM,oBACJ;AACF,IAAM,cAAc,IAAI,OAAO,GAAG,UAAU,GAAG,KAAK,GAAG,UAAU,IAAI,GAAG;AACxE,IAAM,cAAc,IAAI,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,IAAI,GAAG;AAC1E,IAAM,cAAc,IAAI,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,IAAI,GAAG;AAC1E,IAAM,oBAAoB,IAAI;AAAA,EAC5B,OAAO,YAAY,IAAI,IAAI,IAAI,aAAa;AAC9C;AACA,IAAM,qBAAqB,IAAI;AAAA,EAC7B,OAAO,YAAY,IAAI,IAAI,IAAI,cAAc;AAC/C;AACA,IAAM,yBAAyB,IAAI;AAAA,EACjC,OAAO,YAAY,IAAI,IAAI,IAAI,cAAc,IAAI,YAAY;AAC/D;AACA,IAAM,mBAAmB,IAAI,OAAO,IAAI,YAAY,GAAG;AACvD,IAAM,iBAAiB,IAAI,OAAO,OAAO,YAAY,IAAI,IAAI,GAAG;AAChE,IAAM,cAAc;AACpB,IAAM,aACJ;AAkFK,IAAM,UAAU,OACrB,OAAO,UAAU,SAAS,KAAK,CAAC,EAAE,MAAM,WAAW,OAAO;AA+BrD,IAAM,oBAAoB,CAAC,KAAK,MAAM,eAAe,eAAe;AACzE,SAAO,IAAI,aAAa,aAAa,KAAK,IAAI;AAChD;AAOO,IAAM,gBAAgB,UAAQ;AACnC,SAAO,KAAK,SAAS;AACvB;AAOO,IAAM,2BAA2B,UAAQ;AAC9C,MAAI,aAAa,IAAI,KAAK,IAAI,KAAa,aAAK,MAAM,aAAa,GAAG;AACpE,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAWO,IAAM,mBAAmB,CAAC,OAAO,QAAQ;AAC9C,QAAM,EAAE,GAAG,GAAG,QAAQ,IAAI;AAC1B,QAAM,iBAAiB,UAAU,CAAC,GAAG,KAAK,EAAE,QAAQ,IAAI;AACxD,QAAM,IAAI,MAAM;AAChB,QAAM,UAAU,CAAC;AACjB,MAAI,MAAM,GAAG;AACX,QAAI,IAAI,KAAK,KAAK,GAAG;AACnB,cAAQ,KAAK,eAAe,IAAI,CAAC,CAAC;AAAA,IACpC;AACA,WAAO;AAAA,EACT;AACA,MAAI,aAAa,IAAI;AACrB,MAAI,IAAI,GAAG;AACT,WAAO,aAAa,GAAG;AACrB,oBAAc;AAAA,IAChB;AACA,aAAS,IAAI,YAAY,IAAI,GAAG,KAAK,GAAG;AACtC,cAAQ,KAAK,eAAe,CAAC,CAAC;AAAA,IAChC;AAAA,EACF,WAAW,cAAc,GAAG;AAC1B,aAAS,IAAI,YAAY,KAAK,GAAG,KAAK,GAAG;AACvC,cAAQ,KAAK,eAAe,CAAC,CAAC;AAAA,IAChC;AACA,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACA,SAAO;AACT;AAOO,IAAM,iBAAiB,UAAQ;AACpC,MAAI,CAAC,MAAM,UAAU;AACnB,UAAM,IAAI,UAAU,mBAAmB,QAAQ,IAAI,CAAC,EAAE;AAAA,EACxD;AACA,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,UAAQ,KAAK,UAAU;AAAA,IACrB,KAAK,eAAe;AAClB,iBAAW;AACX,aAAO;AACP;AAAA,IACF;AAAA,IACA,KAAK,wBAAwB;AAC3B,YAAM,EAAE,MAAM,MAAM,cAAc,IAAI;AACtC,iBAAW;AACX,aAAO;AACP,eAAS,SAAS,SAAS,WAAW,SAAS;AAC/C;AAAA,IACF;AAAA,IACA,KAAK,cAAc;AACjB,iBAAW,KAAK;AAChB,UAAI,UAAU;AACd,aAAO,SAAS;AACd,cAAM,EAAE,MAAM,MAAM,UAAU,WAAW,IAAI;AAC7C,YAAI,aAAa,wBAAwB;AACvC,mBAAS,SAAS,SAAS,WAAW,SAAS;AAC/C;AAAA,QACF,WAAW,YAAY;AACrB,oBAAU;AAAA,QACZ,OAAO;AACL;AAAA,QACF;AAAA,MACF;AACA,aAAO;AACP;AAAA,IACF;AAAA,IACA,SAAS;AACP,YAAM,IAAI,UAAU,mBAAmB,KAAK,QAAQ,EAAE;AAAA,IACxD;AAAA,EACF;AACA,SAAO,CAAC,UAAU,MAAM,CAAC,CAAC,MAAM;AAClC;AASO,IAAM,eAAe,CAAC,MAAM,QAAQ,QAAQ,UAAU;AAC3D,MAAI,CAAC,MAAM,UAAU;AACnB,UAAM,IAAI,UAAU,mBAAmB,QAAQ,IAAI,CAAC,EAAE;AAAA,EACxD;AACA,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AACA,MAAI,UAAU,OAAO;AACrB,MAAI,YAAY,MAAM;AACpB,WAAO;AAAA,EACT,WAAW,SAAS,QAAQ,SAAS,IAAI,GAAG;AAC1C,cAAU,OAAO,SAAS;AAC1B,WAAO,SAAS;AACd,UAAI,YAAY,MAAM;AACpB;AAAA,MACF;AACA,gBAAU,OAAO,SAAS;AAAA,IAC5B;AACA,WAAO;AAAA,EACT,OAAO;AACL,QAAI,YAAY,OAAO,MAAM;AAC3B,UAAI;AACJ,aAAO,SAAS;AACd,YAAI,YAAY,MAAM;AACpB,iBAAO;AACP;AAAA,QACF,WAAW,YAAY,OAAO,QAAQ,QAAQ,SAAS,IAAI,GAAG;AAC5D;AAAA,QACF;AACA,kBAAU,OAAO,WAAW;AAAA,MAC9B;AACA,UAAI,MAAM;AACR,eAAO;AAAA,MACT;AAAA,IACF;AACA,QAAI,KAAK,aAAa,cAAc;AAClC,UAAI;AACJ,aAAO,SAAS;AACd,YAAI,YAAY,MAAM;AACpB,iBAAO;AACP;AAAA,QACF;AACA,kBAAU,OAAO,SAAS;AAAA,MAC5B;AACA,UAAI,MAAM;AACR,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAQO,IAAM,kBAAkB,CAAC,MAAM,MAAM,CAAC,MAAM;AACjD,MAAI,CAAC,MAAM,UAAU;AACnB,UAAM,IAAI,UAAU,mBAAmB,QAAQ,IAAI,CAAC,EAAE;AAAA,EACxD;AACA,MAAI,KAAK,aAAa,cAAc;AAClC,WAAO;AAAA,EACT;AACA,QAAM,EAAE,WAAW,cAAc,IAAI;AACrC,QAAM,EAAE,eAAe,IAAI;AAC3B,QAAM,SAAS,cAAc;AAC7B,MAAI;AACJ,QAAM,OAAO,KAAK,aAAa,IAAI;AACnC,MAAI,MAAM;AACR,yBACE,wCAAAC,SAAoB,IAAI,KAAK,OAAO,eAAe,IAAI,IAAI;AAAA,EAC/D,OAAO;AACL,yBACE,wCAAAA,SAAoB,SAAS,KAAK,OAAO,eAAe,IAAI,SAAS;AAAA,EACzE;AACA,MAAI,gBAAgB;AAClB,QAAI,gBAAgB;AAClB,aAAO,CAAC,CAAC,eAAe;AAAA,IAC1B;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAOO,IAAM,wBAAwB,UAAQ;AAC3C,MAAI,CAAC,MAAM,UAAU;AACnB,UAAM,IAAI,UAAU,mBAAmB,QAAQ,IAAI,CAAC,EAAE;AAAA,EACxD;AACA,MAAI,OAAO,KAAK,kBAAkB,YAAY;AAC5C,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,KAAK,cAAc;AACjC,MAAI,MAAM,QAAQ;AAChB,QAAI,OAAO;AACX,UAAM,IAAI,MAAM;AAChB,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAM,OAAO,MAAM,CAAC;AACpB,aAAO,KAAK,YAAY,KAAK;AAC7B,UAAI,MAAM;AACR;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACA,SAAO,KAAK,YAAY,KAAK;AAC/B;AAQO,IAAM,oBAAoB,UAAQ;AACvC,MAAI,CAAC,MAAM,UAAU;AACnB,UAAM,IAAI,UAAU,mBAAmB,QAAQ,IAAI,CAAC,EAAE;AAAA,EACxD;AACA,MAAI,KAAK,aAAa,cAAc;AAClC,WAAO;AAAA,EACT;AACA,QAAM,EAAE,KAAK,SAAS,WAAW,WAAW,IAAI;AAChD,QAAM,EAAE,mBAAmB,QAAI,eAAAC,SAAY;AAC3C,MAAI,YAAY,SAAS,YAAY,OAAO;AAC1C,WAAO;AAAA,EACT,WAAW,YAAY,QAAQ;AAC7B,QAAI,OAAO;AACX,YAAQ,WAAW;AAAA,MACjB,KAAK,SAAS;AACZ,YAAI,CAAC,KAAK,QAAQ,cAAc,IAAI,KAAK,IAAI,GAAG;AAC9C,iBAAO,KAAK;AAAA,QACd,WAAW,aAAa,IAAI,KAAK,IAAI,GAAG;AACtC,iBAAO;AAAA,QACT;AACA;AAAA,MACF;AAAA,MACA,KAAK,QAAQ;AACX,eAAO,sBAAsB,IAAI;AACjC;AAAA,MACF;AAAA,MACA,KAAK,YAAY;AACf,eAAO,KAAK;AACZ;AAAA,MACF;AAAA,MACA,SAAS;AACP,cAAM,QAAQ,CAAC,EAAE,MAAM,KAAK,KAAK,UAAU;AAC3C,mBAAW,QAAQ,OAAO;AACxB,gBAAM;AAAA,YACJ,KAAK;AAAA,YACL,WAAW;AAAA,YACX,UAAU;AAAA,YACV,aAAa;AAAA,UACf,IAAI;AACJ,cAAI,iBAAiB,WAAW;AAC9B,mBAAO,gBAAgB,KAAK;AAAA,UAC9B,WACE,iBAAiB,gBACjB,CAAC,sBAAsB,IAAI,aAAa,MACvC,CAAC,WAAY,YAAY,SAAS,YAAY,QAC/C;AACA,gBAAI,kBAAkB,QAAQ;AAC5B,qBAAO,sBAAsB,IAAI;AAAA,YACnC,OAAO;AACL,qBAAO,gBAAgB,KAAK;AAAA,YAC9B;AAAA,UACF;AACA,cAAI,MAAM;AACR;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,QAAI,MAAM;AACR,YAAM;AAAA,QACJ,YAAY,CAAC,EAAE,MAAM,CAAC;AAAA,MACxB,IAAI,mBAAmB,IAAI;AAC3B,UAAI,QAAQ,MAAM,GAAG;AACnB,eAAO;AAAA,MACT;AAAA,IACF,WAAW,YAAY;AACrB,YAAM,EAAE,UAAU,eAAe,IAAI;AACrC,UAAI,mBAAmB,cAAc;AACnC,eAAO,kBAAkB,UAAU;AAAA,MACrC;AAAA,IACF;AAAA,EACF,WAAW,cAAc,WAAW,KAAK,SAAS,OAAO;AACvD,WAAO;AAAA,EACT,WAAW,cAAc,OAAO;AAC9B,UAAM,OAAO,KAAK,YAAY,KAAK;AACnC,QAAI,MAAM;AACR,YAAM;AAAA,QACJ,YAAY,CAAC,EAAE,MAAM,CAAC;AAAA,MACxB,IAAI,mBAAmB,IAAI;AAC3B,UAAI,QAAQ,MAAM,GAAG;AACnB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF,WAAW,YAAY;AACrB,QAAI,cAAc,QAAQ;AACxB,YAAM,OAAO,sBAAsB,IAAI;AACvC,UAAI,MAAM;AACR,cAAM;AAAA,UACJ,YAAY,CAAC,EAAE,MAAM,CAAC;AAAA,QACxB,IAAI,mBAAmB,IAAI;AAC3B,YAAI,QAAQ,MAAM,GAAG;AACnB,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,UAAM,EAAE,UAAU,eAAe,IAAI;AACrC,QAAI,mBAAmB,cAAc;AACnC,aAAO,kBAAkB,UAAU;AAAA,IACrC;AAAA,EACF;AACA,SAAO;AACT;AAQO,IAAM,uBAAuB,UAAQ;AAC1C,MAAI,CAAC,MAAM,UAAU;AACnB,UAAM,IAAI,UAAU,mBAAmB,QAAQ,IAAI,CAAC,EAAE;AAAA,EACxD;AACA,MAAI,KAAK,aAAa,cAAc;AAClC,WAAO;AAAA,EACT;AACA,QAAM,EAAE,YAAY,IAAI,KAAK;AAC7B,QAAM,SAAS,YAAY,KAAK,WAAW;AAC3C,QAAM,QAAQ,WAAW,KAAK,WAAW;AACzC,MAAI,WAAW;AAEf,MAAI,UAAU;AACd,SAAO,SAAS;AAEd,YAAQ,QAAQ,UAAU;AAAA,MACxB,KAAK,cAAc;AAEjB,YAAI,UAAU,QAAQ,aAAa,MAAM,GAAG;AAC1C,iBAAO,QAAQ,aAAa,MAAM;AAAA,QACpC,WAAW,SAAS,QAAQ,aAAa,UAAU,GAAG;AACpD,iBAAO,QAAQ,aAAa,UAAU;AAAA,QACxC;AACA;AAAA,MACF;AAAA,MACA,KAAK,wBAAwB;AAE3B,YAAI,QAAQ,MAAM;AAChB,qBAAW;AAAA,QACb;AACA;AAAA,MACF;AAAA,MACA,KAAK;AAAA,MACL,SAAS;AAEP,eAAO;AAAA,MACT;AAAA,IACF;AACA,QAAI,UAAU;AACZ,gBAAU,QAAQ;AAClB,iBAAW;AAAA,IACb,WAAW,QAAQ,YAAY;AAC7B,gBAAU,QAAQ;AAAA,IACpB,OAAO;AACL;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAQO,IAAM,oBAAoB,UAAQ;AACvC,MAAI,CAAC,MAAM,UAAU;AACnB,UAAM,IAAI,UAAU,mBAAmB,QAAQ,IAAI,CAAC,EAAE;AAAA,EACxD;AACA,MAAI,KAAK,aAAa,cAAc;AAClC,WAAO;AAAA,EACT;AACA,MAAI,OAAO,KAAK,sBAAsB,WAAW;AAC/C,WAAO,KAAK;AAAA,EACd,WAAW,KAAK,cAAc,eAAe,MAAM;AACjD,WAAO;AAAA,EACT,OAAO;AACL,QAAI;AACJ,QAAI,KAAK,aAAa,iBAAiB,GAAG;AACxC,aAAO,KAAK,aAAa,iBAAiB;AAAA,IAC5C,OAAO;AACL,aAAO;AAAA,IACT;AACA,YAAQ,MAAM;AAAA,MACZ,KAAK;AAAA,MACL,KAAK,QAAQ;AACX,eAAO;AAAA,MACT;AAAA,MACA,KAAK,kBAAkB;AAIrB,eAAO;AAAA,MACT;AAAA,MACA,KAAK,SAAS;AACZ,eAAO;AAAA,MACT;AAAA,MACA,SAAS;AACP,YAAI,MAAM,YAAY,aAAa,cAAc;AAC/C,iBAAO,kBAAkB,KAAK,UAAU;AAAA,QAC1C;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;AAOO,IAAM,YAAY,UAAQ;AAC/B,MAAI,MAAM,aAAa,cAAc;AACnC,WAAO;AAAA,EACT;AACA,QAAM,SAAS,KAAK,cAAc;AAClC,QAAM,EAAE,SAAS,WAAW,IAAI,OAAO,iBAAiB,IAAI;AAC5D,MAAI,YAAY,UAAU,eAAe,WAAW;AAClD,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAOO,IAAM,iBAAiB,UAAQ;AACpC,MAAI,MAAM,aAAa,cAAc;AACnC,WAAO;AAAA,EACT;AACA,QAAM,EAAE,WAAW,KAAK,IAAI;AAC5B,UAAQ,WAAW;AAAA,IACjB,KAAK,SAAS;AACZ,UAAI,CAAC,QAAQ,gBAAgB,IAAI,IAAI,GAAG;AACtC,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAAA,IACA,KAAK,YAAY;AACf,aAAO;AAAA,IACT;AAAA,IACA,SAAS;AACP,aAAO,kBAAkB,IAAI;AAAA,IAC/B;AAAA,EACF;AACF;AAOO,IAAM,kBAAkB,UAAQ;AACrC,MAAI,MAAM,aAAa,cAAc;AACnC,WAAO;AAAA,EACT;AACA,MAAI,CAAC,KAAK,aAAa;AACrB,WAAO;AAAA,EACT;AACA,QAAM,SAAS,KAAK,cAAc;AAClC,MAAI,gBAAgB,OAAO,aAAa;AACtC,QAAI,OAAO,UAAU,SAAS,KAAK,aAAa,UAAU,CAAC,CAAC,GAAG;AAC7D,aAAO;AAAA,IACT;AACA,QAAI,kBAAkB,IAAI,GAAG;AAC3B,aAAO;AAAA,IACT;AACA,UAAM,EAAE,WAAW,WAAW,IAAI;AAClC,YAAQ,WAAW;AAAA,MACjB,KAAK,KAAK;AACR,YAAI,KAAK,QAAQ,KAAK,aAAa,MAAM,GAAG;AAC1C,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT;AAAA,MACA,KAAK,UAAU;AACb,eAAO;AAAA,MACT;AAAA,MACA,KAAK,SAAS;AACZ,YACE,KAAK,YACL,KAAK,aAAa,UAAU,KAC5B,KAAK,UACL,KAAK,aAAa,QAAQ,GAC1B;AACA,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT;AAAA,MACA,KAAK,WAAW;AACd,YAAI,WAAW,cAAc,WAAW;AACtC,cAAI,QAAQ,WAAW;AACvB,cAAI,OAAO;AACX,iBAAO,OAAO;AACZ,gBAAI,MAAM,cAAc,WAAW;AACjC,qBAAO,UAAU;AACjB;AAAA,YACF;AACA,oBAAQ,MAAM;AAAA,UAChB;AACA,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT;AAAA,MACA,SAAS;AACP,YACE,oBAAoB,IAAI,SAAS,KACjC,EAAE,KAAK,YAAY,KAAK,aAAa,UAAU,IAC/C;AACA,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,EACF,WAAW,gBAAgB,OAAO,YAAY;AAC5C,QAAI,OAAO,UAAU,SAAS,KAAK,eAAe,MAAM,UAAU,CAAC,CAAC,GAAG;AACrE,YAAM,KAAK;AACX,UAAI;AACJ,UAAI,UAAU;AACd,aAAO,QAAQ,iBAAiB,IAAI;AAClC,eAAO,wBAAwB,IAAI,QAAQ,SAAS;AACpD,YAAI,MAAM;AACR;AAAA,QACF;AACA,YAAI,SAAS,YAAY,iBAAiB,IAAI;AAC5C,oBAAU,QAAQ;AAAA,QACpB,OAAO;AACL;AAAA,QACF;AAAA,MACF;AACA,UAAI,MAAM;AACR,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AACA,QACE,KAAK,cAAc,QAClB,KAAK,QAAQ,KAAK,eAAe,MAAM,MAAM,IAC9C;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAqDO,IAAM,kBAAkB,CAAC,IAAI,SAAS;AAC3C,MAAI,OAAO,OAAO,UAAU;AAC1B,UAAM,IAAI,UAAU,mBAAmB,QAAQ,EAAE,CAAC,EAAE;AAAA,EACtD,WAAW,CAAC,MAAM,UAAU;AAC1B,UAAM,IAAI,UAAU,mBAAmB,QAAQ,IAAI,CAAC,EAAE;AAAA,EACxD;AACA,MAAI,CAAC,MAAM,KAAK,aAAa,cAAc;AACzC,WAAO;AAAA,EACT;AACA,QAAM,EAAE,WAAW,IAAI;AACvB,MAAI;AACJ,aAAW,QAAQ,YAAY;AAC7B,UAAM,EAAE,MAAM,cAAc,QAAQ,MAAM,IAAI;AAC9C,QAAI,SAAS,SAAS,EAAE,IAAI;AAC1B,YAAM;AAAA,IACR,WAAW,WAAW,IAAI;AACxB,YAAM;AAAA,IACR;AACA,QAAI,KAAK;AACP;AAAA,IACF;AAAA,EACF;AACA,SAAO,OAAO;AAChB;AAQO,IAAM,sBAAsB,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM;AACzD,MAAI,CAAC,MAAM,OAAO,OAAO,YAAY,MAAM,aAAa,cAAc;AACpE,WAAO;AAAA,EACT;AACA,MAAI,KAAK,mBAAmB,EAAE,GAAG;AAC/B,WAAO;AAAA,EACT;AACA,QAAM,OAAO,KAAK,cAAc;AAChC,MAAI,SAAS;AACb,MAAI;AACJ,SAAO,QAAQ;AACb,UAAM,gBAAgB,IAAI,MAAM;AAChC,QAAI,OAAO,WAAW,MAAM;AAC1B;AAAA,IACF;AACA,aAAS,OAAO;AAAA,EAClB;AACA,SAAO,CAAC,CAAC;AACX;AAQO,IAAM,cAAc,CAAC,OAAO,UAAU;AAC3C,MAAI,CAAC,OAAO,UAAU;AACpB,UAAM,IAAI,UAAU,mBAAmB,QAAQ,KAAK,CAAC,EAAE;AAAA,EACzD,WAAW,CAAC,OAAO,UAAU;AAC3B,UAAM,IAAI,UAAU,mBAAmB,QAAQ,KAAK,CAAC,EAAE;AAAA,EACzD;AACA,MAAI,MAAM,aAAa,gBAAgB,MAAM,aAAa,cAAc;AACtE,WAAO;AAAA,EACT;AACA,QAAM,SAAS,MAAM,wBAAwB,KAAK;AAClD,QAAM,MACJ,SAAS,+BAA+B,SAAS;AACnD,SAAO,CAAC,CAAC;AACX;AAQO,IAAM,eAAe,CAAC,GAAG,MAAM;AACpC,MAAI,YAAY,GAAG,CAAC,GAAG;AACrB,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAOO,IAAM,YAAY,CAAC,QAAQ,CAAC,MAAM;AACvC,QAAM,MAAM,CAAC,GAAG,KAAK;AACrB,MAAI,IAAI,SAAS,GAAG;AAClB,QAAI,KAAK,YAAY;AAAA,EACvB;AACA,SAAO;AACT;AAkGO,IAAM,aAAa,CAAC,QAAQ,aAAa;AAC9C,MAAI,CAAC,QAAQ,cAAc;AACzB,UAAM,IAAI,UAAU,4BAA4B,QAAQ,MAAM,CAAC,EAAE;AAAA,EACnE;AACA,MAAI,UAAU,aAAa,eAAe;AACxC,eAAW,OAAO;AAAA,EACpB;AACA,QAAM,SAAK,cAAAC,SAAO;AAAA,IAChB;AAAA,IACA,cAAc,OAAO;AAAA,EACvB,CAAC;AACD,KAAG,UAAU;AAAA,IACX,WAAW;AAAA,EACb,CAAC;AACD,SAAO;AACT;AAQO,IAAM,iBAAiB,CAAC,UAAU,WAAW;AAClD,QAAM,sBAAsB,WAAW,gBAAgB,WAAW;AAClE,MACE,CAAC,YACD,OAAO,aAAa,YACpB,iBAAiB,KAAK,QAAQ,GAC9B;AACA,WAAO;AAAA,EACT;AAEA,MAAI,SAAS,SAAS,GAAG,GAAG;AAC1B,UAAM,QAAQ,SAAS,YAAY,GAAG;AACtC,UAAM,MAAM,SAAS,UAAU,KAAK;AACpC,QAAI,IAAI,QAAQ,GAAG,IAAI,GAAG;AACxB,aAAO;AAAA,IACT;AAAA,EACF;AAWA,MAAI,SAAS,SAAS,GAAG,KAAK,kBAAkB,KAAK,QAAQ,GAAG;AAC9D,WAAO;AAAA,EACT;AAEA,MAAI,SAAS,SAAS,GAAG,GAAG;AAC1B,QAAI,UAAU;AACd,QAAI,WAAW,qBAAqB;AAClC,gBAAU,YAAY,KAAK,QAAQ;AAAA,IACrC;AACA,QACE,uBACA,YAAY,KAAK,QAAQ,KACzB,CAAC,YAAY,KAAK,QAAQ,GAC1B;AACA,aAAO;AAAA,IACT,WAAW,CAAC,uBAAuB,SAAS,KAAK,QAAQ,GAAG;AAC1D,UAAI,CAAC,WAAW,uBAAuB,KAAK,QAAQ,GAAG;AACrD,eAAO;AAAA,MACT;AACA,aAAO,iBAAiB,KAAK,QAAQ;AAAA,IACvC,WAAW,gBAAgB,KAAK,QAAQ,GAAG;AACzC,UAAI,SAAS;AACX,eAAO,CAAC,kBAAkB,KAAK,QAAQ;AAAA,MACzC,OAAO;AACL,eAAO,CAAC,mBAAmB,KAAK,QAAQ;AAAA,MAC1C;AAAA,IACF,OAAO;AACL,aAAO,CAAC,eAAe,KAAK,QAAQ;AAAA,IACtC;AAAA,EACF;AACA,SAAO;AACT;;;ADpqBA,sBAAyD;AAhZzD,IAAM,iBAAiB,oBAAI,IAAI;AAAA,EAC7B,CAAC,qBAAqB,MAAM;AAAA,EAC5B,CAAC,aAAa,MAAM;AAAA,EACpB,CAAC,gBAAgB,MAAM;AAAA,EACvB,CAAC,eAAe,MAAM;AAAA,EACtB,CAAC,eAAe,MAAM;AAAA,EACtB,CAAC,mBAAmB,MAAM;AAC5B,CAAC;AACD,IAAM,sBAAsB,oBAAI,IAAI;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAM,mBAAmB,oBAAI,IAAI,CAAC,QAAQ,cAAc,CAAC;AACzD,IAAM,oBACJ;AACF,IAAM,wBAAwB;AAC9B,IAAM,SAAS;AAOR,IAAM,mBAAmB,CAAC,WAAW,OAAO;AACjD,MAAI,OAAO,aAAa,YAAY,SAAS,QAAQ,MAAM,CAAC,KAAK,GAAG;AAClE,UAAM,MAAM,SAAS,MAAM,IAAI;AAC/B,UAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAC7B,UAAM,IAAI,IAAI;AACd,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAM,OAAO,IAAI,CAAC;AAClB,UAAI,SAAS,MAAM,MAAM,IAAI,GAAG;AAC9B,sBAAc,KAAK,MAAM;AAAA,MAC3B,OAAO;AACL,cAAM,YAAY,sBAAsB,KAAK,IAAI;AACjD,YAAI,WAAW;AACb,gBAAM,CAAC,EAAE,GAAG,IAAI;AAChB,cAAI;AACJ,cAAI;AACF,kBAAM,MAAM,SAAS,QAAQ,GAAG;AAChC,kBAAM,OAAO,SAAS,QAAQ,GAAG;AACjC,kBAAM,OAAO,SAAS,KAAK,GAAG;AAC9B,gBAAI,SAAS,KAAM,QAAQ,OAAO,QAAQ,MAAO;AAC/C,oBAAM;AAAA,YACR,OAAO;AACL,oBAAM,OAAO,cAAc,IAAI;AAAA,YACjC;AAAA,UACF,SAAS,GAAG;AACV,kBAAM;AAAA,UACR;AACA,cAAI,UAAU;AACd,cAAI,KAAK,SAAS,IAAI,QAAQ;AAC5B,sBAAU,KAAK,UAAU,IAAI,MAAM;AAAA,UACrC;AACA,wBAAc,KAAK,GAAG,GAAG,GAAG,OAAO,EAAE;AAAA,QAEvC,WAAW,YAAY,KAAK,IAAI,GAAG;AACjC,wBAAc,KAAK,KAAK,IAAI,EAAE;AAAA,QAChC,OAAO;AACL,wBAAc,KAAK,IAAI;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AACA,WAAO,cAAc,KAAK,EAAE;AAAA,EAC9B;AACA,SAAO;AACT;AAQO,IAAM,aAAa,WAAS;AAEjC,MAAI,OAAO,UAAU,UAAU;AAC7B,QAAI,UAAU,UAAa,UAAU,MAAM;AACzC,aAAO,QAAQ,KAAK,EAAE,YAAY;AAAA,IACpC,WAAW,MAAM,QAAQ,KAAK,GAAG;AAC/B,aAAO,MAAM,KAAK,GAAG;AAAA,IACvB,WAAW,OAAO,OAAO,OAAO,UAAU,GAAG;AAC3C,aAAO,MAAM,SAAS;AAAA,IACxB,OAAO;AACL,YAAM,IAAI,aAAa,oBAAoB,KAAK,IAAI,UAAU;AAAA,IAChE;AAAA,EACF;AACA,MAAI,WAAW;AACf,MAAI,QAAQ;AACZ,SAAO,SAAS,GAAG;AAEjB,YAAQ,SAAS,QAAQ,KAAK,KAAK;AACnC,QAAI,QAAQ,GAAG;AACb;AAAA,IACF;AACA,UAAM,UAAU,SAAS,UAAU,GAAG,QAAQ,CAAC;AAC/C,QAAI,WAAW,SAAS,UAAU,QAAQ,CAAC;AAC3C,UAAM,YAAY,SAAS,YAAY,CAAC;AACxC,QAAI,YAAY,UAAU;AACxB,YAAM,MAAM,KAAK,UAAU,SAAS,GAAG,CAAC;AACxC,UAAI,SAAS,WAAW,KAAK;AAC3B,mBAAW;AAAA,MACb,OAAO;AACL,mBAAW,GAAG,GAAG,GAAG,SAAS,UAAU,GAAG,CAAC;AAAA,MAC7C;AAAA,IACF;AACA,eAAW,GAAG,OAAO,GAAG,QAAQ;AAChC;AAAA,EACF;AACA,SAAO,SACJ,QAAQ,aAAa,IAAI,EACzB,QAAQ,0BAA0B,MAAM,EACxC,QAAQ,SAAS,QAAQ;AAC9B;AAOO,IAAM,gBAAgB,SAAO;AAClC,QAAM,WAAW,WAAW,GAAG;AAE/B,MAAI,iBAAiB,KAAK,QAAQ,GAAG;AACnC,UAAM,IAAI,aAAa,oBAAoB,QAAQ,IAAI,UAAU;AAAA,EACnE;AACA,MAAI;AACF,UAAM,MAAc,eAAM,UAAU;AAAA,MAClC,SAAS;AAAA,MACT,qBAAqB;AAAA,IACvB,CAAC;AACD,WAAe,uBAAc,GAAG;AAAA,EAClC,SAAS,GAAG;AACV,UAAM,EAAE,QAAQ,IAAI;AACpB,QACE,2DAA2D;AAAA,MACzD;AAAA,IACF,KACA,CAAC,SAAS,SAAS,GAAG,GACtB;AACA,YAAM,QAAQ,SAAS,YAAY,GAAG;AACtC,YAAM,UAAU,SAAS,UAAU,KAAK;AACxC,UAAI,QAAQ,SAAS,GAAG,GAAG;AACzB,cAAM,SAAS,QAAQ,MAAM,IAAI,EAAE;AACnC,YAAI,SAAS,GAAG;AACd,iBAAO,cAAc,GAAG,QAAQ,IAAI;AAAA,QACtC;AACA,eAAO,cAAc,GAAG,QAAQ,GAAG;AAAA,MACrC;AACA,aAAO,cAAc,GAAG,QAAQ,GAAG;AAAA,IACrC,WAAW,YAAY,mBAAmB;AAExC,UAAI,kBAAkB,KAAK,QAAQ,GAAG;AACpC,eAAO,cAAc,GAAG,SAAS,WAAW,mBAAmB,IAAI,CAAC,EAAE;AAAA,MACxE,WAAW,CAAC,SAAS,SAAS,GAAG,GAAG;AAClC,eAAO,cAAc,GAAG,QAAQ,GAAG;AAAA,MACrC,OAAO;AACL,cAAM,IAAI,aAAa,oBAAoB,QAAQ,IAAI,UAAU;AAAA,MACnE;AAAA,IACF,OAAO;AACL,YAAM,IAAI,aAAa,oBAAoB,QAAQ,IAAI,UAAU;AAAA,IACnE;AAAA,EACF;AACF;AAQO,IAAM,UAAU,CAAC,MAAM,CAAC,MAAM;AACnC,QAAM,WAAW,oBAAI,IAAI;AACzB,QAAM,OAAO;AAAA,IACX,uBAAuB;AAAA,IACvB,kBAAkB;AAAA,IAClB,sBAAsB;AAAA,IACtB,kBAAkB;AAAA,IAClB,uBAAuB;AAAA,IACvB,mBAAmB;AAAA,IACnB,qBAAqB;AAAA,EACvB;AACA,QAAM,MAAM;AAAA,IACV,MAAM,MAAM;AACV,cAAQ,KAAK,MAAM;AAAA,QACjB,KAAK,gBAAgB;AACnB,cAAI,QAAQ,KAAK,KAAK,IAAI,GAAG;AAC3B,kBAAM,IAAI;AAAA,cACR,qBAAqB,KAAK,IAAI;AAAA,cAC9B;AAAA,YACF;AAAA,UACF;AACA;AAAA,QACF;AAAA,QACA,KAAK,aAAa;AAChB,cAAI,QAAQ,KAAK,KAAK,IAAI,GAAG;AAC3B,kBAAM,IAAI;AAAA,cACR,qBAAqB,KAAK,IAAI;AAAA,cAC9B;AAAA,YACF;AAAA,UACF;AACA;AAAA,QACF;AAAA,QACA,KAAK,mBAAmB;AACtB,cAAI,aAAa,IAAI,KAAK,IAAI,GAAG;AAC/B,iBAAK,oBAAoB;AACzB,iBAAK,uBAAuB;AAC5B,gBAAI,KAAK,SAAS,OAAO;AACvB,mBAAK,mBAAmB;AAAA,YAC1B,WAAW,KAAK,SAAS,OAAO;AAC9B,mBAAK,mBAAmB;AAAA,YAC1B,OAAO;AACL,mBAAK,wBAAwB;AAAA,YAC/B;AAAA,UACF,WAAW,oBAAoB,IAAI,KAAK,IAAI,GAAG;AAC7C,iBAAK,sBAAsB;AAAA,UAC7B,WACE,iBAAiB,IAAI,KAAK,IAAI,KAC9B,MAAM,QAAQ,KAAK,QAAQ,KAC3B,KAAK,SAAS,QACd;AACA,iBAAK,oBAAoB;AAAA,UAC3B;AACA;AAAA,QACF;AAAA,QACA,KAAK,qBAAqB;AACxB,cAAI,sBAAsB,KAAK,KAAK,IAAI,GAAG;AACzC,iBAAK,oBAAoB;AAAA,UAC3B;AACA;AAAA,QACF;AAAA,QACA,KAAK,KAAK;AACR,cAAI,KAAK,UAAU;AACjB,iBAAK,oBAAoB;AACzB,iBAAK,wBAAwB;AAAA,UAC/B;AACA;AAAA,QACF;AAAA,QACA,KAAK,UAAU;AACb,mBAAS,IAAI,KAAK,QAAQ;AAC1B;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,EAAQ,cAAK,KAAK,GAAG;AACrB,MAAI,KAAK,sBAAsB,MAAM;AACnC,IAAQ,iBAAQ,KAAK,CAAC,MAAM,MAAM,SAAS;AACzC,UAAI,MAAM;AACR,YAAI,KAAK,SAAS,qBAAqB,aAAa,IAAI,KAAK,IAAI,GAAG;AAClE,gBAAM,WAAW,KAAK,OAAO,OAAK;AAChC,kBAAM,EAAE,MAAM,KAAK,IAAI;AACvB,mBAAO,SAAS,qBAAqB,aAAa,IAAI,IAAI;AAAA,UAC5D,CAAC;AACD,qBAAW,EAAE,SAAS,KAAK,UAAU;AAEnC,uBAAW,EAAE,UAAU,cAAc,KAAK,UAAU;AAElD,yBAAW,EAAE,UAAU,mBAAmB,KAAK,eAAe;AAC5D,oBAAI,SAAS,IAAI,kBAAkB,GAAG;AACpC,2BAAS,OAAO,kBAAkB;AAAA,gBACpC;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,WACE,KAAK,SAAS,qBACd,iBAAiB,IAAI,KAAK,IAAI,KAC9B,MAAM,QAAQ,KAAK,QAAQ,KAC3B,KAAK,SAAS,QACd;AACA,gBAAM,WAAW,KAAK,OAAO,OAAK;AAChC,kBAAM,EAAE,UAAU,MAAM,KAAK,IAAI;AACjC,kBAAM,MACJ,SAAS,qBACT,iBAAiB,IAAI,IAAI,KACzB,MAAM,QAAQ,QAAQ,KACtB,SAAS;AACX,mBAAO;AAAA,UACT,CAAC;AACD,qBAAW,EAAE,SAAS,KAAK,UAAU;AAEnC,uBAAW,EAAE,UAAU,cAAc,KAAK,UAAU;AAClD,kBAAI,SAAS,IAAI,aAAa,GAAG;AAC/B,yBAAS,OAAO,aAAa;AAAA,cAC/B;AAAA,YACF;AAAA,UACF;AAAA,QACF,WACE,KAAK,SAAS,uBACd,sBAAsB,KAAK,KAAK,IAAI,GACpC;AACA,gBAAM,WAAW,KAAK,OAAO,OAAK;AAChC,kBAAM,EAAE,MAAM,KAAK,IAAI;AACvB,kBAAM,MACJ,SAAS,uBAAuB,sBAAsB,KAAK,IAAI;AACjE,mBAAO;AAAA,UACT,CAAC;AACD,qBAAW,EAAE,SAAS,KAAK,UAAU;AAEnC,uBAAW,EAAE,UAAU,cAAc,KAAK,UAAU;AAClD,kBAAI,SAAS,IAAI,aAAa,GAAG;AAC/B,yBAAS,OAAO,aAAa;AAAA,cAC/B;AAAA,YACF;AAAA,UACF;AAAA,QACF,WAAW,KAAK,SAAS,OAAO,KAAK,UAAU;AAC7C,gBAAM,WAAW,KAAK,OAAO,OAAK;AAChC,kBAAM,EAAE,UAAU,KAAK,IAAI;AAC3B,kBAAM,MAAM,SAAS,OAAO;AAC5B,mBAAO;AAAA,UACT,CAAC;AACD,qBAAW,EAAE,SAAS,KAAK,UAAU;AACnC,kBAAM,EAAE,SAAS,IAAI;AAErB,uBAAW,EAAE,UAAU,cAAc,KAAK,UAAU;AAClD,kBAAI,SAAS,IAAI,aAAa,GAAG;AAC/B,yBAAS,OAAO,aAAa;AAAA,cAC/B;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO;AAAA,IACL;AAAA,IACA,UAAU,CAAC,GAAG,QAAQ;AAAA,EACxB;AACF;AAQO,IAAM,kBAAkB,CAAC,GAAG,MAAM;AACvC,QAAM,OAAO,eAAe,IAAI,EAAE,IAAI;AACtC,QAAM,OAAO,eAAe,IAAI,EAAE,IAAI;AACtC,MAAI,SAAS,MAAM;AACjB,WAAO;AAAA,EACT,WAAW,OAAO,MAAM;AACtB,WAAO;AAAA,EACT,OAAO;AACL,WAAO;AAAA,EACT;AACF;AAOO,IAAM,UAAU,UAAQ;AAC7B,QAAM,MAAM,CAAC,GAAG,IAAI;AACpB,MAAI,IAAI,SAAS,GAAG;AAClB,QAAI,KAAK,eAAe;AAAA,EAC1B;AACA,SAAO;AACT;AAQO,IAAM,eAAe,cAAY;AACtC,MAAI;AACJ,MAAI;AACJ,MAAI,YAAY,OAAO,aAAa,UAAU;AAC5C,QAAI,SAAS,QAAQ,GAAG,IAAI,IAAI;AAC9B,OAAC,QAAQ,SAAS,IAAI,SAAS,MAAM,GAAG;AAAA,IAC1C,OAAO;AACL,eAAS;AACT,kBAAY;AAAA,IACd;AAAA,EACF,OAAO;AACL,UAAM,IAAI,aAAa,oBAAoB,QAAQ,IAAI,UAAU;AAAA,EACnE;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;;;AG/YA,IAAM,wBAAwB,oBAAI,IAAI;AAAA,EACpC,GAAG;AAAA,EACH;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAMC,mBAAkB,IAAI,IAAI,UAAU;AAC1C,IAAM,iBAAiB,IAAI,OAAO,aAAa,SAAS,GAAG,SAAS,KAAK,GAAG;AAC5E,IAAM,eAAe;AAYd,IAAM,6BAA6B,CAAC,SAAS,SAAS,MAAM,CAAC,MAAM;AACxE,QAAM,EAAE,SAAS,cAAc,KAAK,IAAI;AACxC,MAAI,YAAY,qBAAqB;AAEnC,UAAM,IAAI,UAAU,uBAAuB,QAAQ,OAAO,CAAC,EAAE;AAAA,EAC/D;AACA,UAAQ,SAAS;AAAA,IACf,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK,eAAe;AAElB,UAAI,MAAM;AACR,cAAM;AAAA,UACJ,gCAAgC,OAAO;AAAA,UACvC;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA;AAAA,IACF;AAAA,IACA,KAAK;AAAA,IACL,KAAK,WAAW;AAEd,UAAI,MAAM;AACR,cAAM;AAAA,UACJ,gCAAgC,OAAO;AAAA,UACvC;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA;AAAA,IACF;AAAA,IACA,SAAS;AAEP,UAAI,QAAQ,WAAW,UAAU,GAAG;AAClC,YAAI,MAAM;AACR,gBAAM;AAAA,YACJ,gCAAgC,OAAO;AAAA,YACvC;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MAEF,WAAW,CAAC,SAAS;AACnB,cAAM;AAAA,UACJ,4BAA4B,OAAO;AAAA,UACnC;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AASO,IAAM,4BAA4B,CAAC,KAAK,SAAS;AACtD,QAAM,EAAE,KAAK,IAAI;AAEjB,MAAI,CAAC,MAAM;AACT,UAAM,OAAO,SAAS,KAAK,mBAAmB,QAAQ,IAAI;AAC1D,UAAM,IAAI,UAAU,uBAAuB,IAAI,EAAE;AAAA,EACnD;AAEA,QAAM,MAAM,kBAAkB,IAAI;AAElC,SAAO,SAAS;AAClB;AASO,IAAM,2BAA2B,CAAC,KAAK,SAAS;AACrD,QAAM,EAAE,MAAM,MAAM,MAAM,IAAI;AAC9B,MAAI;AAEJ,MAAI,SAAS,UAAU,OAAO;AAC5B,kBAAc;AAAA,EAChB,WAAW,SAAS,SAAS,MAAM;AACjC,kBAAc,iBAAiB,IAAI;AAAA,EACrC;AAEA,MAAI,OAAO,gBAAgB,UAAU;AACnC,WAAO;AAAA,EACT;AAEA,QAAM,cAAc,qBAAqB,IAAI;AAE7C,MAAI,gBAAgB,MAAM;AACxB,WAAO;AAAA,EACT;AAEA,MAAI,gBAAgB,KAAK;AAEvB,WAAO,gBAAgB;AAAA,EACzB;AAEA,MAAI,CAAC,eAAe,KAAK,WAAW,GAAG;AACrC,WAAO;AAAA,EACT;AAEA,MAAI;AACJ,MAAI,YAAY,QAAQ,GAAG,IAAI,IAAI;AAEjC,UAAM,CAAC,UAAU,SAAS,GAAG,QAAQ,IAAI,YAAY,MAAM,GAAG;AAC9D,UAAM,eACJ,aAAa,MAAM,GAAG,SAAS,GAAG,SAAS,KAAK,GAAG,QAAQ,GAAG,SAAS;AACzE,UAAM,cAAc,IAAI,OAAO,GAAG,SAAS;AAC3C,QAAI,eAAe;AAEnB,aAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,sBAAgB,IAAI,SAAS,CAAC,CAAC,GAAG,SAAS;AAAA,IAC7C;AACA,mBAAe,IAAI;AAAA,MACjB,IAAI,YAAY,GAAG,WAAW,GAAG,YAAY;AAAA,MAC7C;AAAA,IACF;AAAA,EACF,OAAO;AAEL,mBAAe,IAAI,OAAO,IAAI,WAAW,GAAG,SAAS,KAAK,GAAG;AAAA,EAC/D;AAEA,SAAO,aAAa,KAAK,WAAW;AACtC;AAQO,IAAM,2BAA2B,CAAC,SAAS,SAAS;AACzD,QAAM,EAAE,WAAW,WAAW,IAAI;AAClC,MACE,CAAC,sBAAsB,IAAI,SAAS,KACpC,CAAC,gBAAgB,MAAM,EAAE,gBAAgB,KAAK,CAAC,GAC/C;AACA,WAAO;AAAA,EACT;AACA,MAAI,aAAa;AACjB,MAAI,KAAK,YAAY,KAAK,aAAa,UAAU,GAAG;AAClD,iBAAa;AAAA,EACf,WAAW,cAAc,UAAU;AACjC,QACE,cACA,WAAW,cAAc,eACxB,WAAW,YAAY,WAAW,aAAa,UAAU,IAC1D;AACA,mBAAa;AAAA,IACf;AAAA,EACF,WAAW,cAAc,YAAY;AACnC,QAAI,UAAU;AACd,WAAO,SAAS;AACd,UACE,QAAQ,cAAc,eACrB,QAAQ,YAAY,QAAQ,aAAa,UAAU,IACpD;AAEA,YAAI;AACJ,YAAI,UAAU,QAAQ;AACtB,eAAO,SAAS;AACd,cAAI,QAAQ,cAAc,UAAU;AAClC,qBAAS;AACT;AAAA,UACF;AACA,oBAAU,QAAQ;AAAA,QACpB;AACA,YAAI,CAAC,UAAU,CAAC,OAAO,SAAS,IAAI,GAAG;AACrC,uBAAa;AAAA,QACf;AAEA;AAAA,MACF;AACA,gBAAU,QAAQ;AAAA,IACpB;AAAA,EACF;AACA,MAAI,YAAY,YAAY;AAC1B,WAAO;AAAA,EACT;AACA,SAAO,CAAC;AACV;AAQO,IAAM,2BAA2B,CAAC,SAAS,SAAS;AACzD,QAAM,EAAE,UAAU,IAAI;AACtB,MAAI,aAAa;AACjB,UAAQ,WAAW;AAAA,IACjB,KAAK;AAAA,IACL,KAAK,SAAS;AACZ,YAAM,kBAAkB,CAAC,KAAK,QAAQA,iBAAgB,IAAI,KAAK,IAAI;AACnE,UAAI,cAAc,cAAc,iBAAiB;AAC/C,qBACE,KAAK,YACL,KAAK,aAAa,UAAU,KAC5B,KAAK,YACL,KAAK,aAAa,UAAU;AAAA,MAChC,OAAO;AAEL,qBAAa;AAAA,MACf;AACA;AAAA,IACF;AAAA,IACA,SAAS;AACP,mBAAa,CAAC,kBAAkB,IAAI;AAAA,IACtC;AAAA,EACF;AACA,MAAI,YAAY,aAAa;AAC3B,WAAO;AAAA,EACT;AACA,SAAO,CAAC;AACV;AAaO,IAAM,yBAAyB,CAAC,KAAK,MAAM,MAAM,CAAC,MAAM;AAC7D,QAAM;AAAA,IACJ,OAAO;AAAA,IACP,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,EACT,IAAI;AACJ,QAAM,EAAE,OAAO,SAAS,aAAa,IAAI;AAEzC,MAAI,OAAO,aAAa,YAAY,CAAC,UAAU,KAAK,QAAQ,KAAK,CAAC,SAAS;AACzE,UAAM,UAAM,0BAAY,GAAG;AAC3B,UAAM;AAAA,MACJ,oBAAoB,GAAG;AAAA,MACvB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,QAAM,EAAE,WAAW,IAAI;AAEvB,MAAI,CAAC,cAAc,CAAC,WAAW,QAAQ;AACrC,WAAO;AAAA,EACT;AAEA,QAAM,cAAc,KAAK,cAAc;AACvC,MAAI;AACJ,MAAI,gBAAgB,aAAa;AAC/B,QAAI,OAAO,aAAa,YAAY,OAAO,KAAK,QAAQ,GAAG;AACzD,wBAAkB;AAAA,IACpB,OAAO;AACL,wBAAkB;AAAA,IACpB;AAAA,EACF,WAAW,OAAO,aAAa,YAAY,OAAO,KAAK,QAAQ,GAAG;AAChE,sBAAkB;AAAA,EACpB,OAAO;AACL,sBAAkB;AAAA,EACpB;AAEA,MAAI,cAAc,iBAAiB,QAAQ,IAAI;AAC/C,MAAI,iBAAiB;AACnB,kBAAc,YAAY,YAAY;AAAA,EACxC;AAEA,QAAM,aAAa,oBAAI,IAAI;AAE3B,MAAI,YAAY,QAAQ,GAAG,IAAI,IAAI;AACjC,UAAM,EAAE,QAAQ,WAAW,WAAW,aAAa,IACjD,aAAa,WAAW;AAC1B,eAAW,QAAQ,YAAY;AAC7B,UAAI,EAAE,MAAM,UAAU,OAAO,UAAU,IAAI;AAC3C,UAAI,iBAAiB;AACnB,mBAAW,SAAS,YAAY;AAChC,oBAAY,UAAU,YAAY;AAAA,MACpC;AACA,cAAQ,WAAW;AAAA,QACjB,KAAK,IAAI;AACP,cAAI,iBAAiB,UAAU;AAC7B,uBAAW,IAAI,SAAS;AAAA,UAC1B;AACA;AAAA,QACF;AAAA,QACA,KAAK,KAAK;AACR,cAAI,SAAS,QAAQ,GAAG,IAAI,IAAI;AAC9B,kBAAM,CAAC,EAAE,GAAG,YAAY,IAAI,SAAS,MAAM,GAAG;AAC9C,kBAAM,gBAAgB,aAAa,KAAK,GAAG,EAAE,QAAQ,MAAM,EAAE;AAC7D,gBAAI,kBAAkB,cAAc;AAClC,yBAAW,IAAI,SAAS;AAAA,YAC1B;AAAA,UACF,WAAW,iBAAiB,UAAU;AACpC,uBAAW,IAAI,SAAS;AAAA,UAC1B;AACA;AAAA,QACF;AAAA,QACA,SAAS;AACP,cAAI,CAAC,OAAO;AACV,gBAAI,SAAS;AACX,qBAAO;AAAA,YACT;AACA,kBAAM,UAAM,0BAAY,GAAG;AAC3B,kBAAM;AAAA,cACJ,oBAAoB,GAAG;AAAA,cACvB;AAAA,cACA;AAAA,YACF;AAAA,UACF;AACA,cAAI,SAAS,QAAQ,GAAG,IAAI,IAAI;AAC9B,kBAAM,CAAC,YAAY,GAAG,YAAY,IAAI,SAAS,MAAM,GAAG;AACxD,kBAAM,gBAAgB,aAAa,KAAK,GAAG,EAAE,QAAQ,MAAM,EAAE;AAE7D,gBAAI,eAAe,SAAS,kBAAkB,QAAQ;AACpD;AAAA,YACF,WACE,cAAc,cACd,iBAAiB,eACjB;AACA,oBAAM,oBAAoB,oBAAoB,WAAW,IAAI;AAC7D,kBAAI,mBAAmB;AACrB,2BAAW,IAAI,SAAS;AAAA,cAC1B;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EAEF,OAAO;AACL,aAAS,EAAE,MAAM,UAAU,OAAO,UAAU,KAAK,YAAY;AAC3D,UAAI,iBAAiB;AACnB,mBAAW,SAAS,YAAY;AAChC,oBAAY,UAAU,YAAY;AAAA,MACpC;AACA,UAAI,SAAS,QAAQ,GAAG,IAAI,IAAI;AAC9B,cAAM,CAAC,YAAY,GAAG,YAAY,IAAI,SAAS,MAAM,GAAG;AACxD,cAAM,gBAAgB,aAAa,KAAK,GAAG,EAAE,QAAQ,MAAM,EAAE;AAE7D,YAAI,CAAC,cAAc,gBAAgB,IAAI,aAAa,IAAI;AACtD,qBAAW,IAAI,SAAS;AAAA,QAE1B,WAAW,eAAe,SAAS,kBAAkB,QAAQ;AAC3D;AAAA,QACF,WAAW,gBAAgB,eAAe;AACxC,qBAAW,IAAI,SAAS;AAAA,QAC1B;AAAA,MACF,WAAW,gBAAgB,UAAU;AACnC,mBAAW,IAAI,SAAS;AAAA,MAC1B;AAAA,IACF;AAAA,EACF;AACA,MAAI,CAAC,WAAW,MAAM;AACpB,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,MAAM,eAAe,OAAO,eAAe,IAAI,YAAY,CAAC;AACpE,MAAI;AACJ,MAAI,eAAe;AACjB,QAAI,iBAAiB;AACnB,kBAAY,cAAc,YAAY;AAAA,IACxC,OAAO;AACL,kBAAY;AAAA,IACd;AAAA,EACF,WAAW,gBAAgB;AACzB,QAAI,iBAAiB;AACnB,kBAAY,eAAe,YAAY;AAAA,IACzC,OAAO;AACL,kBAAY;AAAA,IACd;AAAA,EACF,WAAW,mBAAmB,IAAI;AAChC,gBAAY;AAAA,EACd;AAEA,UAAQ,YAAY;AAAA,IAClB,KAAK,KAAK;AACR,aAAO,OAAO,cAAc,YAAY,WAAW,IAAI,SAAS;AAAA,IAClE;AAAA,IACA,KAAK,MAAM;AACT,UAAI,aAAa,OAAO,cAAc,UAAU;AAC9C,mBAAW,SAAS,YAAY;AAC9B,gBAAM,OAAO,IAAI,IAAI,MAAM,MAAM,KAAK,CAAC;AACvC,cAAI,KAAK,IAAI,SAAS,GAAG;AACvB,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IACA,KAAK,MAAM;AACT,UAAI,aAAa,OAAO,cAAc,UAAU;AAC9C,mBAAW,SAAS,YAAY;AAC9B,cAAI,UAAU,aAAa,MAAM,WAAW,GAAG,SAAS,GAAG,GAAG;AAC5D,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IACA,KAAK,MAAM;AACT,UAAI,aAAa,OAAO,cAAc,UAAU;AAC9C,mBAAW,SAAS,YAAY;AAC9B,cAAI,MAAM,WAAW,GAAG,SAAS,EAAE,GAAG;AACpC,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IACA,KAAK,MAAM;AACT,UAAI,aAAa,OAAO,cAAc,UAAU;AAC9C,mBAAW,SAAS,YAAY;AAC9B,cAAI,MAAM,SAAS,GAAG,SAAS,EAAE,GAAG;AAClC,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IACA,KAAK,MAAM;AACT,UAAI,aAAa,OAAO,cAAc,UAAU;AAC9C,mBAAW,SAAS,YAAY;AAC9B,cAAI,MAAM,SAAS,GAAG,SAAS,EAAE,GAAG;AAClC,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IACA,KAAK;AAAA,IACL,SAAS;AAEP,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAWO,IAAM,oBAAoB,CAAC,KAAK,MAAM,MAAM,CAAC,MAAM;AACxD,QAAM,UAAU,iBAAiB,IAAI,IAAI;AACzC,QAAM,EAAE,WAAW,cAAc,OAAO,IAAI;AAC5C,QAAM,EAAE,OAAO,SAAS,aAAa,IAAI;AACzC,MAAI,EAAE,QAAQ,WAAW,WAAW,aAAa,IAAI;AAAA,IACnD;AAAA,IACA;AAAA,EACF;AACA,MACE,KAAK,cAAc,gBAAgB,gBAClC,CAAC,gBAAgB,iBAAiB,mCACnC,aAAa,KAAK,SAAS,GAC3B;AACA,gBAAY,UAAU,YAAY;AAClC,mBAAe,aAAa,YAAY;AAAA,EAC1C;AACA,MAAI;AACJ,MAAI;AAEJ,MAAI,UAAU,QAAQ,GAAG,IAAI,IAAI;AAC/B,KAAC,YAAY,aAAa,IAAI,UAAU,MAAM,GAAG;AAAA,EACnD,OAAO;AACL,iBAAa,UAAU;AACvB,oBAAgB;AAAA,EAClB;AACA,UAAQ,WAAW;AAAA,IACjB,KAAK,IAAI;AACP,UACE,CAAC,cACD,CAAC,iBACA,iBAAiB,OAAO,iBAAiB,gBAC1C;AACA,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAAA,IACA,KAAK,KAAK;AACR,UAAI,iBAAiB,OAAO,iBAAiB,eAAe;AAC1D,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAAA,IACA,SAAS;AACP,UAAI,CAAC,OAAO;AACV,YAAI,SAAS;AACX,iBAAO;AAAA,QACT;AACA,cAAM,UAAM,0BAAY,GAAG;AAC3B,cAAM;AAAA,UACJ,oBAAoB,GAAG;AAAA,UACvB;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,YAAM,QAAQ,KAAK,mBAAmB,SAAS;AAC/C,YAAM,SAAS,KAAK,mBAAmB,UAAU;AACjD,UAAI,UAAU,UAAU,cAAc,YAAY;AAChD,YAAI,iBAAiB,OAAO,iBAAiB,eAAe;AAC1D,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT,WAAW,CAAC,WAAW,CAAC,OAAO;AAC7B,cAAM;AAAA,UACJ,wBAAwB,SAAS;AAAA,UACjC;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;AC5gBA,IAAM,WAAW;AACjB,IAAM,WAAW;AACjB,IAAM,YAAY,oBAAI,IAAI,CAAC,GAAG,YAAY,YAAY,MAAM,CAAC;AAC7D,IAAM,qBAAqB,oBAAI,IAAI,CAAC,GAAG,YAAY,MAAM,CAAC;AAC1D,IAAM,mBAAmB,IAAI,IAAI,WAAW;AAC5C,IAAM,yBAAyB,oBAAI,IAAI,CAAC,GAAG,YAAY,QAAQ,CAAC;AAChE,IAAM,mBAAmB,oBAAI,IAAI,CAAC,GAAG,YAAY,UAAU,OAAO,CAAC;AACnE,IAAM,sBAAsB,oBAAI,IAAI,CAAC,GAAG,aAAa,GAAG,YAAY,MAAM,CAAC;AAC3E,IAAM,mBAAmB,oBAAI,IAAI,CAAC,UAAU,OAAO,CAAC;AACpD,IAAM,oBAAoB,oBAAI,IAAI,CAAC,SAAS,QAAQ,CAAC;AACrD,IAAM,gBAAgB,oBAAI,IAAI;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAM,kBAAkB,oBAAI,IAAI;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAM,sBAAsB,oBAAI,IAAI;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAMM,IAAM,SAAN,MAAa;AAAA;AAAA,EAElB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAY,QAAQ;AAClB,SAAK,UAAU;AACf,SAAK,YAAY,oBAAI,QAAQ;AAC7B,SAAK,iBAAiB,oBAAI,QAAQ;AAClC,SAAK,SAAS;AACd,SAAK,SAAS;AACd,SAAK,oBAAoB;AACzB,SAAK,iBAAiB,oBAAI,IAAI;AAAA,MAC5B;AAAA,QACE,MAAM,CAAC,SAAS,SAAS;AAAA,QACzB,SAAS,KAAK;AAAA,MAChB;AAAA,MACA;AAAA,QACE,MAAM,CAAC,WAAW,OAAO;AAAA,QACzB,SAAS,KAAK;AAAA,MAChB;AAAA,MACA;AAAA,QACE,MAAM,CAAC,aAAa,aAAa,WAAW,SAAS,UAAU;AAAA,QAC/D,SAAS,KAAK;AAAA,MAChB;AAAA,IACF,CAAC;AACD,SAAK,wBAAwB;AAC7B,SAAK,aAAa,IAAI;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,UAAU,CAAC,GAAG,MAAM,CAAC,MAAM;AACzB,UAAM,WAAW,IAAI,YAAY,KAAK;AACtC,QAAI,UAAU;AACZ;AAAA,IACF;AACA,UAAM,iBACJ,aAAa,gBAAgB,aAAa,KAAK,QAAQ;AACzD,QAAI,gBAAgB;AAClB,UAAI,EAAE,SAAS,mBAAmB;AAChC,YAAI,KAAK,OAAO;AACd,kBAAQ,KAAK,EAAE,OAAO;AAAA,QACxB;AACA;AAAA,MACF;AACA,YAAM,IAAI,KAAK,QAAQ,aAAa,EAAE,SAAS,EAAE,IAAI;AAAA,IACvD;AACA,QAAI,EAAE,QAAQ,KAAK,SAAS;AAC1B,YAAM,IAAI,KAAK,QAAQ,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AAAA,IACxD;AACA,UAAM;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,QAAQ,CAAC,UAAU,MAAM,MAAM,CAAC,MAAM;AACpC,UAAM,EAAE,OAAO,UAAU,KAAK,IAAI;AAClC,SAAK,SAAS,CAAC,CAAC;AAChB,SAAK,YAAY,CAAC,CAAC;AACnB,SAAK,QAAQ,CAAC,CAAC;AACf,KAAC,KAAK,WAAW,KAAK,OAAO,KAAK,OAAO,IAAI,eAAe,IAAI;AAChE,SAAK,eAAe;AACpB,SAAK,QAAQ;AACb,SAAK,UACH,KAAK,UAAU,KAAK,SAAS,KAAK,MAAM,aAAa;AACvD,SAAK,YAAY;AACjB,KAAC,KAAK,MAAM,KAAK,MAAM,IAAI,KAAK,YAAY,QAAQ;AACpD,SAAK,iBAAiB,CAAC;AACvB,SAAK,WAAW,oBAAI,QAAQ;AAC5B,SAAK,cAAc;AACnB,SAAK,cAAc;AACnB,SAAK,oBAAoB;AACzB,SAAK,aAAa;AAClB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAe,CAAC,MAAM,UAAU;AAC9B,SAAK,qBAAqB,oBAAI,QAAQ;AACtC,QAAI,KAAK;AACP,WAAK,WAAW,oBAAI,QAAQ;AAAA,IAC9B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,oBAAoB,SAAO;AACzB,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,uBAAuB,SAAO;AAC5B,UAAM,EAAE,IAAI,IAAI;AAChB,QAAI,CAAC,cAAc,IAAI,GAAG,GAAG;AAC3B,WAAK,SAAS;AAAA,IAChB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,oBAAoB,SAAO;AACzB,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,0BAA0B,MAAM;AAC9B,UAAM,MAAM;AAAA,MACV,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AACA,UAAM,OAAO,CAAC;AACd,eAAW,gBAAgB,KAAK,gBAAgB;AAC9C,YAAM,EAAE,MAAM,QAAQ,IAAI;AAC1B,YAAM,IAAI,KAAK;AACf,eAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,cAAM,MAAM,KAAK,CAAC;AAClB,aAAK,KAAK,KAAK,QAAQ,iBAAiB,KAAK,SAAS,GAAG,CAAC;AAAA,MAC5D;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,2BAA2B,CAAC,UAAU,aAAa;AACjD,QAAI,aAAa;AACjB,UAAM,MAAM,CAAC;AACb,UAAM,IAAI,SAAS;AACnB,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAM,QAAQ,CAAC,GAAG,SAAS,CAAC,CAAC;AAC7B,YAAM,SAAS,CAAC;AAChB,UAAI,OAAO,MAAM,MAAM;AACvB,UAAI,QAAQ,KAAK,SAAS,YAAY;AACpC,cAAM,SAAS,oBAAI,IAAI;AACvB,eAAO,MAAM;AACX,cAAI,KAAK,SAAS,YAAY;AAC5B,kBAAM,CAAC,QAAQ,IAAI;AACnB,gBAAI,CAAC,YAAY,SAAS,SAAS,YAAY;AAC7C,oBAAM,MAAM,oBAAoB,QAAQ;AACxC,mBAAK,QAAQ,kBAAkB,KAAK,YAAY,KAAK,OAAO,CAAC;AAE7D,qBAAO,EAAE,KAAK,CAAC,GAAG,YAAY,OAAO,YAAY,MAAM;AAAA,YACzD;AACA,gBAAI,KAAK,SAAS,OAAO,KAAK,SAAS,KAAK;AAC1C,2BAAa;AAAA,YACf;AACA,mBAAO,KAAK,EAAE,OAAO,MAAM,QAAQ,QAAQ,MAAM,EAAE,CAAC;AACpD,mBAAO,MAAM;AAAA,UACf,OAAO;AACL,gBAAI,KAAK,QAAQ,OAAO,KAAK,SAAS,UAAU;AAC9C,oBAAM,gBAAgB,iBAAiB,KAAK,IAAI;AAChD,kBAAI,kBAAkB,KAAK,MAAM;AAC/B,qBAAK,OAAO;AAAA,cACd;AACA,kBAAI,OAAO,KAAK,aAAa,GAAG;AAC9B,qBAAK,YAAY;AAAA,cACnB;AAAA,YACF;AACA,mBAAO,IAAI,IAAI;AAAA,UACjB;AACA,cAAI,MAAM,QAAQ;AAChB,mBAAO,MAAM,MAAM;AAAA,UACrB,OAAO;AACL,mBAAO,KAAK,EAAE,OAAO,MAAM,QAAQ,QAAQ,MAAM,EAAE,CAAC;AACpD,mBAAO,MAAM;AACb;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,UAAI,KAAK,EAAE,QAAQ,KAAK,MAAM,UAAU,OAAO,MAAM,MAAM,CAAC;AAAA,IAC9D;AACA,WAAO,EAAE,KAAK,WAAW;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAAc,cAAY;AACxB,UAAM,QAAQ,CAAC;AACf,SAAK,cAAc;AACnB,SAAK,cAAc;AACnB,QAAI;AACJ,QAAI,KAAK,eAAe,IAAI,KAAK,SAAS,GAAG;AAC3C,YAAM,aAAa,KAAK,eAAe,IAAI,KAAK,SAAS;AACzD,UAAI,cAAc,WAAW,IAAI,GAAG,QAAQ,EAAE,GAAG;AAC/C,cAAM,OAAO,WAAW,IAAI,GAAG,QAAQ,EAAE;AACzC,cAAM,KAAK;AACX,aAAK,cAAc,KAAK;AACxB,aAAK,cAAc,KAAK;AAAA,MAC1B;AAAA,IACF;AACA,QAAI,KAAK;AACP,YAAM,IAAI,IAAI;AACd,eAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAI,CAAC,EAAE,MAAM;AACb,YAAI,CAAC,EAAE,WAAW;AAClB,YAAI,CAAC,EAAE,OAAO;AACd,cAAM,CAAC,IAAI,CAAC;AAAA,MACd;AAAA,IACF,OAAO;AACL,UAAI;AACJ,UAAI;AACF,iBAAS,cAAc,QAAQ;AAAA,MACjC,SAAS,GAAG;AACV,eAAO,KAAK,QAAQ,CAAC;AAAA,MACvB;AACA,YAAM,EAAE,UAAU,KAAK,IAAI,QAAQ,MAAM;AACzC,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,IAAI;AACJ,WAAK,cACH,oBACA,uBACA,CAAC,EAAE,wBAAwB;AAC7B,YAAM,YAAY,KAAK,yBAAyB,UAAU,QAAQ;AAClE,YAAM,UAAU;AAChB,WAAK,cAAc,UAAU;AAC7B,UAAI;AACJ,UAAI,KAAK,eAAe,IAAI,KAAK,SAAS,GAAG;AAC3C,qBAAa,KAAK,eAAe,IAAI,KAAK,SAAS;AAAA,MACrD,OAAO;AACL,qBAAa,oBAAI,IAAI;AAAA,MACvB;AACA,iBAAW,IAAI,GAAG,QAAQ,IAAI;AAAA,QAC5B;AAAA,QACA,YAAY,KAAK;AAAA,QACjB,YAAY,KAAK;AAAA,MACnB,CAAC;AACD,WAAK,eAAe,IAAI,KAAK,WAAW,UAAU;AAElD,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,cAAM,CAAC,IAAI,CAAC;AAAA,MACd;AAAA,IACF;AACA,WAAO,CAAC,KAAK,KAAK;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,oBAAoB,CAAC,MAAM,MAAM,CAAC,MAAM;AACtC,UAAM,EAAE,QAAQ,OAAO,aAAa,eAAe,IAAI;AACvD,QAAI,OAAO;AACT,aAAO,KAAK,UAAU,iBAAiB,MAAM,UAAU;AAAA,IACzD,WAAW,KAAK,SAAS,IAAI,IAAI,GAAG;AAClC,aAAO,KAAK,SAAS,IAAI,IAAI;AAAA,IAC/B;AACA,UAAM,SAAS,KAAK,UAAU,iBAAiB,MAAM,UAAU;AAC/D,SAAK,SAAS,IAAI,MAAM,MAAM;AAC9B,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,uBAAuB,cAAY;AACjC,QAAI,KAAK,UAAU,IAAI,QAAQ,GAAG;AAChC,aAAO,KAAK,UAAU,IAAI,QAAQ;AAAA,IACpC;AACA,UAAM,EAAE,SAAS,IAAI,QAAQ,QAAQ;AACrC,SAAK,UAAU,IAAI,UAAU,QAAQ;AACrC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,uBAAuB,CAAC,YAAY,kBAAkB,MAAM,CAAC,MAAM;AACjE,UAAM,WAAW,CAAC;AAClB,UAAM,SAAS,KAAK,kBAAkB,YAAY,EAAE,OAAO,KAAK,CAAC;AACjE,QAAI,YAAY,OAAO,WAAW;AAClC,WAAO,WAAW;AAChB,UAAI,kBAAkB;AACpB,YAAI,UAAU,SAAS,GAAG;AACxB,cAAI,UAAU;AACd,gBAAM,IAAI,iBAAiB;AAC3B,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,kBAAM,SAAS,iBAAiB,CAAC;AACjC,gBAAI,KAAK,aAAa,QAAQ,WAAW,GAAG,GAAG;AAC7C,wBAAU;AACV;AAAA,YACF;AAAA,UACF;AACA,cAAI,SAAS;AACX,qBAAS,KAAK,SAAS;AAAA,UACzB;AAAA,QACF;AAAA,MACF,OAAO;AACL,iBAAS,KAAK,SAAS;AAAA,MACzB;AACA,kBAAY,OAAO,YAAY;AAAA,IACjC;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,mBAAmB,CAAC,KAAK,MAAM,MAAM,CAAC,MAAM;AAC1C,UAAM,EAAE,GAAG,GAAG,SAAS,IAAI;AAC3B,UAAM,EAAE,WAAW,IAAI;AACvB,QAAI,CAAC,YAAY;AACf,YAAM,cAAc,oBAAI,IAAI;AAC5B,UAAI,SAAS,KAAK,SAAS,IAAI,IAAI,IAAI,MAAM,GAAG;AAC9C,YAAI,UAAU;AACZ,gBAAMC,oBAAmB,KAAK,qBAAqB,QAAQ;AAC3D,gBAAM,IAAIA,kBAAiB;AAC3B,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,kBAAM,SAASA,kBAAiB,CAAC;AACjC,gBAAI,KAAK,aAAa,QAAQ,MAAM,GAAG,GAAG;AACxC,0BAAY,IAAI,IAAI;AACpB;AAAA,YACF;AAAA,UACF;AAAA,QACF,OAAO;AACL,sBAAY,IAAI,IAAI;AAAA,QACtB;AAAA,MACF;AACA,aAAO;AAAA,IACT;AACA,UAAM,mBAAmB,WACrB,KAAK,qBAAqB,QAAQ,IAClC;AACJ,UAAM,WAAW,KAAK;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,UAAM,eAAe,iBAAiB,UAAU,GAAG;AACnD,WAAO,IAAI,IAAI,YAAY;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,oBAAoB,CAAC,KAAK,SAAS;AACjC,UAAM,EAAE,WAAW,IAAI;AACvB,QAAI,CAAC,YAAY;AACf,UAAI,SAAS,KAAK,SAAS,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,GAAG;AACtD,eAAO,oBAAI,IAAI,CAAC,IAAI,CAAC;AAAA,MACvB;AACA,aAAO,oBAAI,IAAI;AAAA,IACjB;AACA,UAAM,gBAAgB,CAAC;AACvB,UAAM,SAAS,KAAK,kBAAkB,YAAY,EAAE,OAAO,KAAK,CAAC;AACjE,QAAI,UAAU,OAAO,WAAW;AAChC,WAAO,SAAS;AACd,UACE,QAAQ,cAAc,KAAK,aAC3B,QAAQ,iBAAiB,KAAK,gBAC9B,QAAQ,WAAW,KAAK,QACxB;AACA,sBAAc,KAAK,OAAO;AAAA,MAC5B;AACA,gBAAU,OAAO,YAAY;AAAA,IAC/B;AACA,UAAM,eAAe,iBAAiB,eAAe,GAAG;AACxD,WAAO,IAAI,IAAI,YAAY;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,gBAAgB,CAAC,KAAK,MAAM,SAAS,MAAM,CAAC,MAAM;AAChD,UAAM;AAAA,MACJ,KAAK,EAAE,GAAG,GAAG,MAAM,aAAa;AAAA,MAChC;AAAA,IACF,IAAI;AACJ,UAAM,SAAS,oBAAI,IAAI;AACvB,QAAI,cAAc;AAChB,UAAI,iBAAiB,QAAQ;AAC3B,eAAO,IAAI,KAAK,CAAC;AACjB,eAAO,IAAI,KAAK,CAAC;AAAA,MACnB,WAAW,iBAAiB,OAAO;AACjC,eAAO,IAAI,KAAK,CAAC;AACjB,eAAO,IAAI,KAAK,CAAC;AAAA,MACnB;AACA,UAAI,QAAQ,QAAQ,MAAM,IAAI,IAAI;AAChC,eAAO,IAAI,WAAW,IAAI;AAAA,MAC5B;AAAA,IACF,OAAO;AACL,UAAI,OAAO,MAAM,YAAY,QAAQ,KAAK,CAAC,GAAG;AAC5C,eAAO,IAAI,KAAK,IAAI,CAAC;AAAA,MACvB,OAAO;AACL,eAAO,IAAI,KAAK,CAAC;AAAA,MACnB;AACA,UAAI,OAAO,MAAM,YAAY,QAAQ,KAAK,CAAC,GAAG;AAC5C,eAAO,IAAI,KAAK,IAAI,CAAC;AAAA,MACvB,OAAO;AACL,eAAO,IAAI,KAAK,CAAC;AAAA,MACnB;AACA,UAAI,QAAQ,QAAQ,MAAM,IAAI,IAAI;AAChC,eAAO,IAAI,WAAW,IAAI;AAAA,MAC5B;AAAA,IACF;AACA,QAAI,YAAY,eAAe,YAAY,kBAAkB;AAC3D,UAAI,UAAU;AACZ,eAAO,IAAI,YAAY,QAAQ;AAAA,MACjC;AACA,YAAM,MAAM,OAAO,YAAY,MAAM;AACrC,YAAM,QAAQ,KAAK,iBAAiB,KAAK,MAAM,GAAG;AAClD,aAAO;AAAA,IACT,WAAW,YAAY,iBAAiB,YAAY,oBAAoB;AACtE,YAAM,MAAM,OAAO,YAAY,MAAM;AACrC,YAAM,QAAQ,KAAK,kBAAkB,KAAK,IAAI;AAC9C,aAAO;AAAA,IACT;AACA,WAAO,oBAAI,IAAI;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,sBAAsB,CAAC,WAAW,MAAM,MAAM,CAAC,MAAM;AACnD,QAAI,MAAM,QAAQ,SAAS,KAAK,UAAU,QAAQ;AAEhD,YAAM,SAAS,CAAC,GAAG,SAAS;AAC5B,YAAM,CAAC,IAAI,IAAI;AACf,YAAM,EAAE,MAAM,SAAS,IAAI;AAC3B,UAAI;AACJ,UAAI,aAAa,YAAY;AAC3B,gBAAQ,OAAO,MAAM;AAAA,MACvB,OAAO;AACL,gBAAQ;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,MACF;AACA,YAAM,aAAa,CAAC;AACpB,aAAO,OAAO,QAAQ;AACpB,cAAM,CAAC,IAAI,IAAI;AACf,cAAM,EAAE,MAAM,SAAS,IAAI;AAC3B,YAAI,aAAa,YAAY;AAC3B;AAAA,QACF,OAAO;AACL,qBAAW,KAAK,OAAO,MAAM,CAAC;AAAA,QAChC;AAAA,MACF;AACA,YAAM,OAAO;AAAA,QACX;AAAA,QACA,QAAQ;AAAA,MACV;AACA,UAAI,MAAM;AACV,YAAM,QAAQ,KAAK,iBAAiB,MAAM,MAAM,GAAG;AACnD,UAAI,MAAM,MAAM;AACd,YAAI,OAAO,QAAQ;AACjB,cAAI,OAAO;AACX,qBAAW,YAAY,OAAO;AAC5B,mBAAO,KAAK,oBAAoB,QAAQ,UAAU,GAAG;AACrD,gBAAI,MAAM;AACR;AAAA,YACF;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,qBAAqB,CAAC,SAAS,MAAM,QAAQ;AAC3C,UAAM,EAAE,SAAS,IAAI;AACrB,QAAI,OAAO;AACX,UAAM,IAAI,SAAS;AACnB,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAM,SAAS,SAAS,CAAC;AACzB,aAAO,KAAK,oBAAoB,QAAQ,MAAM,GAAG;AACjD,UAAI,MAAM;AACR;AAAA,MACF;AAAA,IACF;AACA,QAAI,CAAC,MAAM;AACT,aAAO;AAAA,IACT;AACA,SACG,IAAI,gBAAgB,KAAK,YAC1B,KAAK,aAAa,wBAClB;AACA,aAAO,KAAK,oBAAoB,OAAO;AAAA,IACzC;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,0BAA0B,CAAC,SAAS,MAAM,MAAM,CAAC,MAAM;AACrD,UAAM,EAAE,SAAS,UAAU,aAAa,IAAI;AAE5C,QAAI,YAAY,OAAO;AACrB,aAAO,KAAK,mBAAmB,SAAS,MAAM,GAAG;AAAA,IACnD;AAEA,UAAM,gBACH,IAAI,gBAAgB,KAAK,YAC1B,KAAK,aAAa;AAEpB,QAAI,cAAc;AAChB,UAAI,UAAU;AACd,iBAAW,UAAU,UAAU;AAC7B,YAAI,OAAO,SAAS,GAAG;AACrB,oBAAU;AACV;AAAA,QACF,WAAW,YAAY,OAAO;AAC5B,gBAAM,CAAC,EAAE,MAAM,aAAa,CAAC,IAAI;AACjC,cAAI,iBAAiB,mBAAmB;AACtC,sBAAU;AACV;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,UAAI,SAAS;AACX,eAAO;AAAA,MACT;AAAA,IACF;AACA,QAAI,UAAU,YAAY,QAAQ,YAAY;AAC9C,UAAM,IAAI,aAAa;AACvB,QAAI;AACJ,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAM,SAAS,aAAa,CAAC;AAC7B,YAAM,YAAY,OAAO,SAAS;AAClC,YAAM,EAAE,OAAO,IAAI,OAAO,SAAS;AACnC,aAAO,KAAK,aAAa,QAAQ,MAAM,GAAG;AAC1C,UAAI,QAAQ,YAAY,GAAG;AACzB,YAAI,YAAY,oBAAI,IAAI,CAAC,IAAI,CAAC;AAC9B,iBAAS,IAAI,YAAY,GAAG,KAAK,GAAG,KAAK;AACvC,gBAAM,OAAO,OAAO,CAAC;AACrB,gBAAM,MAAM,CAAC;AACb,cAAI,MAAM;AACV,qBAAW,YAAY,WAAW;AAChC,kBAAM,IAAI,KAAK,iBAAiB,MAAM,UAAU,GAAG;AACnD,gBAAI,EAAE,MAAM;AACV,kBAAI,KAAK,GAAG,CAAC;AAAA,YACf;AAAA,UACF;AACA,cAAI,IAAI,QAAQ;AACd,gBAAI,MAAM,GAAG;AACX,qBAAO;AAAA,YACT,OAAO;AACL,0BAAY,IAAI,IAAI,GAAG;AAAA,YACzB;AAAA,UACF,OAAO;AACL,mBAAO;AACP;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,UAAI,MAAM;AACR;AAAA,MACF;AAAA,IACF;AACA,QAAI,YAAY,OAAO;AACrB,UAAI,MAAM;AACR,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT,WAAW,MAAM;AACf,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,0BAA0B,KAAK,MAAM,MAAM,CAAC,GAAG;AAC7C,UAAM,EAAE,UAAU,aAAa,MAAM,QAAQ,IAAI;AACjD,UAAM,EAAE,WAAW,WAAW,IAAI;AAClC,UAAM,EAAE,SAAS,OAAO,KAAK,MAAM,IAAI;AACvC,UAAM,UAAU,oBAAI,IAAI;AAExB,QAAI,MAAM,QAAQ,WAAW,KAAK,aAAa,IAAI,OAAO,GAAG;AAC3D,UAAI,CAAC,YAAY,UAAU,YAAY,QAAQ,YAAY,SAAS;AAClE,cAAM,UAAM,0BAAY,GAAG;AAC3B,cAAM,MAAM,oBAAoB,GAAG;AACnC,eAAO,KAAK,QAAQ,kBAAkB,KAAK,YAAY,KAAK,OAAO,CAAC;AAAA,MACtE;AACA,UAAI;AACJ,UAAI,KAAK,UAAU,IAAI,GAAG,GAAG;AAC3B,kBAAU,KAAK,UAAU,IAAI,GAAG;AAAA,MAClC,OAAO;AACL,cAAM,EAAE,SAAS,IAAI,QAAQ,GAAG;AAChC,YAAI,YAAY,OAAO;AAErB,cAAI,WAAW;AACf,gBAAM,IAAI,YAAY;AACtB,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,kBAAM,QAAQ,YAAY,CAAC;AAC3B,kBAAM,WAAO,sBAAQ,OAAO,wBAAwB;AACpD,gBAAI,MAAM;AACR,oBAAM,WAAW,KAAK;AACtB,kBAAI,aAAa,QAAQ,aAAa,SAAS;AAC7C,2BAAW;AACX;AAAA,cACF,OAAO;AACL,sBAAM,UAAM,0BAAY,GAAG;AAC3B,sBAAM,MAAM,oBAAoB,GAAG;AACnC,uBAAO,KAAK;AAAA,kBACV,kBAAkB,KAAK,YAAY,KAAK,OAAO;AAAA,gBACjD;AAAA,cACF;AAAA,YACF;AAAA,UACF;AACA,cAAI,UAAU;AACZ,mBAAO;AAAA,UACT;AACA,oBAAU;AAAA,YACR;AAAA,YACA;AAAA,UACF;AAAA,QACF,OAAO;AACL,gBAAM,eAAe,CAAC;AACtB,gBAAM,IAAI,SAAS;AACnB,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,kBAAM,CAAC,GAAG,MAAM,IAAI,SAAS,CAAC;AAC9B,kBAAM,SAAS,CAAC;AAChB,kBAAM,YAAY,oBAAI,IAAI;AAC1B,gBAAI,OAAO,OAAO,MAAM;AACxB,mBAAO,MAAM;AACX,kBAAI,KAAK,SAAS,YAAY;AAC5B,uBAAO,KAAK;AAAA,kBACV,OAAO;AAAA,kBACP,QAAQ,CAAC,GAAG,SAAS;AAAA,gBACvB,CAAC;AACD,0BAAU,MAAM;AAAA,cAClB,WAAW,MAAM;AACf,0BAAU,IAAI,IAAI;AAAA,cACpB;AACA,kBAAI,OAAO,QAAQ;AACjB,uBAAO,OAAO,MAAM;AAAA,cACtB,OAAO;AACL,uBAAO,KAAK;AAAA,kBACV,OAAO;AAAA,kBACP,QAAQ,CAAC,GAAG,SAAS;AAAA,gBACvB,CAAC;AACD,0BAAU,MAAM;AAChB;AAAA,cACF;AAAA,YACF;AACA,yBAAa,KAAK,MAAM;AAAA,UAC1B;AACA,oBAAU;AAAA,YACR;AAAA,YACA;AAAA,YACA;AAAA,UACF;AACA,eAAK,UAAU,IAAI,KAAK,OAAO;AAAA,QACjC;AAAA,MACF;AACA,YAAM,MAAM,KAAK,wBAAwB,SAAS,MAAM,GAAG;AAC3D,UAAI,KAAK;AACP,gBAAQ,IAAI,GAAG;AAAA,MACjB;AAAA,IACF,WAAW,MAAM,QAAQ,WAAW,GAAG;AAErC,UAAI,oCAAoC,KAAK,OAAO,GAAG;AACrD,YAAI,YAAY,WAAW,GAAG;AAC5B,gBAAM,UAAM,0BAAY,GAAG;AAC3B,iBAAO,KAAK;AAAA,YACV;AAAA,cACE,oBAAoB,GAAG;AAAA,cACvB;AAAA,cACA,KAAK;AAAA,YACP;AAAA,UACF;AAAA,QACF;AACA,cAAM,CAAC,MAAM,IAAI;AACjB,cAAM,QAAQ,KAAK,cAAc,QAAQ,MAAM,SAAS,GAAG;AAC3D,eAAO;AAAA,MACT,OAAO;AACL,gBAAQ,SAAS;AAAA;AAAA,UAEf,KAAK,OAAO;AACV,gBAAI,YAAY,WAAW,GAAG;AAC5B,oBAAM,UAAM,0BAAY,GAAG;AAC3B,qBAAO,KAAK;AAAA,gBACV;AAAA,kBACE,oBAAoB,GAAG;AAAA,kBACvB;AAAA,kBACA,KAAK;AAAA,gBACP;AAAA,cACF;AAAA,YACF;AACA,kBAAM,CAAC,QAAQ,IAAI;AACnB,kBAAM,MAAM,0BAA0B,UAAU,IAAI;AACpD,gBAAI,KAAK;AACP,sBAAQ,IAAI,IAAI;AAAA,YAClB;AACA;AAAA,UACF;AAAA;AAAA,UAEA,KAAK,QAAQ;AACX,gBAAI,CAAC,YAAY,QAAQ;AACvB,oBAAM,UAAM,0BAAY,GAAG;AAC3B,qBAAO,KAAK;AAAA,gBACV;AAAA,kBACE,oBAAoB,GAAG;AAAA,kBACvB;AAAA,kBACA,KAAK;AAAA,gBACP;AAAA,cACF;AAAA,YACF;AACA,gBAAI;AACJ,uBAAW,YAAY,aAAa;AAClC,qBAAO,yBAAyB,UAAU,IAAI;AAC9C,kBAAI,MAAM;AACR;AAAA,cACF;AAAA,YACF;AACA,gBAAI,MAAM;AACR,sBAAQ,IAAI,IAAI;AAAA,YAClB;AACA;AAAA,UACF;AAAA;AAAA,UAEA,KAAK,SAAS;AACZ,gBAAI,gBAAgB,IAAI,GAAG;AACzB,oBAAM,CAAC,EAAE,OAAO,WAAW,CAAC,IAAI;AAChC,kBAAI,YAAY;AACd,oBAAI,KAAK,UAAU,GAAG;AACpB,0BAAQ,IAAI,IAAI;AAAA,gBAClB,OAAO;AACL,6BAAW,KAAK,MAAM;AACpB,0BAAM,OAAO,KAAK,CAAC;AACnB,wBAAI,gBAAgB,KAAK,QAAQ,kBAAkB;AACjD,0BAAI,MAAM,QAAQ,IAAI,UAAU,GAAG;AACjC,gCAAQ,IAAI,IAAI;AAAA,sBAClB;AACA;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AACA;AAAA,UACF;AAAA,UACA,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK,gBAAgB;AACnB,gBAAI,MAAM;AACR,mBAAK;AAAA,gBACH;AAAA,kBACE,6BAA6B,OAAO;AAAA,kBACpC;AAAA,kBACA,KAAK;AAAA,gBACP;AAAA,cACF;AAAA,YACF;AACA;AAAA,UACF;AAAA;AAAA,UAEA,KAAK;AAAA,UACL,KAAK,gBAAgB;AACnB;AAAA,UACF;AAAA;AAAA,UAEA,KAAK,YAAY;AACf,gBAAI,MAAM;AACR,mBAAK;AAAA,gBACH;AAAA,kBACE,yBAAyB,OAAO;AAAA,kBAChC;AAAA,kBACA,KAAK;AAAA,gBACP;AAAA,cACF;AAAA,YACF;AACA;AAAA,UACF;AAAA,UACA,SAAS;AACP,gBAAI,CAAC,SAAS;AACZ,mBAAK;AAAA,gBACH;AAAA,kBACE,yBAAyB,OAAO;AAAA,kBAChC;AAAA,kBACA,KAAK;AAAA,gBACP;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,WAAW,oBAAoB,IAAI,OAAO,GAAG;AAC3C,UAAI,SAAS,KAAK,OAAO;AACvB,gBAAQ,IAAI,IAAI;AAAA,MAClB,WAAW,YAAY;AACrB,gBAAQ,SAAS;AAAA,UACf,KAAK,iBAAiB;AACpB,kBAAM,CAAC,KAAK,IAAI,KAAK;AAAA,cACnB;AAAA,gBACE,GAAG;AAAA,gBACH,GAAG;AAAA,cACL;AAAA,cACA;AAAA,YACF;AACA,gBAAI,OAAO;AACT,sBAAQ,IAAI,KAAK;AAAA,YACnB;AACA;AAAA,UACF;AAAA,UACA,KAAK,gBAAgB;AACnB,kBAAM,CAAC,KAAK,IAAI,KAAK;AAAA,cACnB;AAAA,gBACE,GAAG;AAAA,gBACH,GAAG;AAAA,gBACH,SAAS;AAAA,cACX;AAAA,cACA;AAAA,YACF;AACA,gBAAI,OAAO;AACT,sBAAQ,IAAI,KAAK;AAAA,YACnB;AACA;AAAA,UACF;AAAA;AAAA,UAEA,SAAS;AACP,kBAAM,CAAC,KAAK,IAAI,KAAK;AAAA,cACnB;AAAA,gBACE,GAAG;AAAA,gBACH,GAAG;AAAA,cACL;AAAA,cACA;AAAA,YACF;AACA,gBAAI,UAAU,MAAM;AAClB,oBAAM,CAAC,KAAK,IAAI,KAAK;AAAA,gBACnB;AAAA,kBACE,GAAG;AAAA,kBACH,GAAG;AAAA,kBACH,SAAS;AAAA,gBACX;AAAA,gBACA;AAAA,cACF;AACA,kBAAI,UAAU,MAAM;AAClB,wBAAQ,IAAI,IAAI;AAAA,cAClB;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,OAAO;AACL,cAAQ,SAAS;AAAA,QACf,KAAK;AAAA,QACL,KAAK,WAAW;AACd,gBAAM,UAAU,yBAAyB,SAAS,IAAI;AACtD,cAAI,SAAS;AACX,oBAAQ,IAAI,IAAI;AAAA,UAClB;AACA;AAAA,QACF;AAAA,QACA,KAAK;AAAA,QACL,KAAK,cAAc;AACjB,gBAAM,UAAU,yBAAyB,SAAS,IAAI;AACtD,cAAI,SAAS;AACX,oBAAQ,IAAI,IAAI;AAAA,UAClB;AACA;AAAA,QACF;AAAA,QACA,KAAK;AAAA,QACL,KAAK,QAAQ;AACX,eACG,cAAc,OAAO,cAAc,WACpC,KAAK,aAAa,MAAM,GACxB;AACA,oBAAQ,IAAI,IAAI;AAAA,UAClB;AACA;AAAA,QACF;AAAA,QACA,KAAK,cAAc;AACjB,eACG,cAAc,OAAO,cAAc,WACpC,KAAK,aAAa,MAAM,GACxB;AACA,gBAAI,CAAC,KAAK,cAAc;AACtB,mBAAK,eAAe,IAAI,IAAI,KAAK,UAAU,GAAG;AAAA,YAChD;AACA,kBAAM,EAAE,MAAM,QAAQ,SAAS,IAAI,KAAK;AACxC,kBAAM,UAAU,IAAI,IAAI,KAAK,aAAa,MAAM,GAAG,IAAI;AACvD,gBAAI,QAAQ,WAAW,UAAU,QAAQ,aAAa,UAAU;AAC9D,sBAAQ,IAAI,IAAI;AAAA,YAClB;AAAA,UACF;AACA;AAAA,QACF;AAAA,QACA,KAAK,WAAW;AAEd;AAAA,QACF;AAAA,QACA,KAAK,SAAS;AACZ,gBAAM,EAAE,QAAQ,KAAK,IAAI,KAAK,UAAU,CAAC;AACzC,cACE,oCAAoC,KAAK,IAAI,KAC7C,KAAK,SAAS,MAAM,GACpB;AACA,oBAAQ,IAAI,IAAI;AAAA,UAClB;AACA;AAAA,QACF;AAAA,QACA,KAAK,UAAU;AACb,gBAAM,EAAE,SAAS,QAAQ,KAAK,IAAI,KAAK,UAAU,CAAC;AAClD,cAAI,SAAS,eAAe,UAAU,KAAK,KAAK,SAAS,MAAM,GAAG;AAChE,oBAAQ,IAAI,IAAI;AAAA,UAClB;AACA;AAAA,QACF;AAAA,QACA,KAAK,UAAU;AACb,cAAI,CAAC,KAAK,cAAc;AACtB,iBAAK,eAAe,IAAI,IAAI,KAAK,UAAU,GAAG;AAAA,UAChD;AACA,gBAAM,EAAE,KAAK,IAAI,KAAK;AACtB,cACE,KAAK,MACL,SAAS,IAAI,KAAK,EAAE,MACpB,KAAK,UAAU,SAAS,IAAI,GAC5B;AACA,oBAAQ,IAAI,IAAI;AAAA,UAClB;AACA;AAAA,QACF;AAAA,QACA,KAAK,iBAAiB;AACpB,cAAI,CAAC,KAAK,cAAc;AACtB,iBAAK,eAAe,IAAI,IAAI,KAAK,UAAU,GAAG;AAAA,UAChD;AACA,gBAAM,EAAE,KAAK,IAAI,KAAK;AACtB,cAAI,MAAM;AACR,kBAAM,KAAK,KAAK,QAAQ,MAAM,EAAE;AAChC,gBAAI,UAAU,KAAK,UAAU,eAAe,EAAE;AAC9C,mBAAO,SAAS;AACd,kBAAI,YAAY,MAAM;AACpB,wBAAQ,IAAI,IAAI;AAChB;AAAA,cACF;AACA,wBAAU,QAAQ;AAAA,YACpB;AAAA,UACF;AACA;AAAA,QACF;AAAA,QACA,KAAK,SAAS;AACZ,cAAI,KAAK,MAAM,aAAa,cAAc;AACxC,gBAAI,CAAC,KAAK,WAAW,SAAS,KAAK,OAAO;AACxC,sBAAQ,IAAI,IAAI;AAAA,YAClB;AAAA,UACF,WAAW,SAAS,KAAK,UAAU,iBAAiB;AAClD,oBAAQ,IAAI,IAAI;AAAA,UAClB;AACA;AAAA,QACF;AAAA,QACA,KAAK,SAAS;AACZ,gBAAM,gBAAgB,KAAK,UAAU;AACrC,cAAI,SAAS,iBAAiB,gBAAgB,IAAI,GAAG;AACnD,oBAAQ,IAAI,IAAI;AAAA,UAClB,WAAW,cAAc,YAAY;AACnC,kBAAM,sBAAsB,cAAc,WAAW;AACrD,gBAAI,UAAU;AACd,mBAAO,SAAS;AACd,kBAAI,QAAQ,aAAa,wBAAwB;AAC/C,sBAAM,EAAE,KAAK,IAAI;AACjB,oBAAI,SAAS,eAAe;AAC1B,sBAAI,gBAAgB,IAAI,GAAG;AACzB,4BAAQ,IAAI,IAAI;AAAA,kBAClB,OAAO;AACL,4BAAQ,IAAI,IAAI;AAAA,kBAClB;AAAA,gBACF;AACA;AAAA,cACF,OAAO;AACL,0BAAU,QAAQ;AAAA,cACpB;AAAA,YACF;AAAA,UACF;AACA;AAAA,QACF;AAAA,QACA,KAAK,iBAAiB;AACpB,cAAI,SAAS,KAAK,UAAU,iBAAiB,gBAAgB,IAAI,GAAG;AAClE,gBAAI;AACJ,gBAAI,eAAe,IAAI,GAAG;AACxB,qBAAO;AAAA,YACT,WAAW,KAAK,QAAQ;AACtB,oBAAM,EAAE,eAAe,QAAQ,YAAY,IAAI,KAAK;AACpD,kBAAI,gBAAgB,MAAM;AACxB,oBAAI,eAAe,aAAa,GAAG;AACjC,yBAAO;AAAA,gBACT,WAAW,KAAK,QAAQ;AACtB,wBAAM;AAAA,oBACJ,QAAQ;AAAA,oBACR,SAAS;AAAA,oBACT,KAAK;AAAA,oBACL,SAAS;AAAA,oBACT,QAAQ;AAAA,oBACR,MAAM;AAAA,kBACR,IAAI,KAAK;AAET,sBAAI,gBAAgB,eAAe;AACjC,wBAAI,KAAK,sBAAsB,MAAM;AACnC,6BAAO;AAAA,oBACT,WAAW,gBAAgB,KAAK,mBAAmB;AACjD,6BAAO;AAAA,oBACT;AAAA,kBACF,WAAW,aAAa,OAAO;AAC7B,wBACG,cAAc,aAAa,gBAAgB,QAC3C,cAAc,WAAW,gBAAgB,MAC1C;AACA,0BAAI,gBAAgB,aAAa;AAC/B,4BAAI,KAAK,sBAAsB,MAAM;AACnC,iCAAO;AAAA,wBACT,WACE,gBAAgB,KAAK,qBACrB,kBAAkB,MAClB;AACA,iCAAO;AAAA,wBACT;AAAA,sBACF,OAAO;AACL,+BAAO;AAAA,sBACT;AAAA,oBACF;AAAA,kBACF,WAAW,UAAU;AACnB,yBACG,cAAc,aAAa,cAAc,YAC1C,CAAC,eACD,CAAC,gBACD,CAAC,gBACD,gBAAgB,MAChB;AACA,6BAAO;AAAA,oBACT;AAAA,kBACF;AAAA,gBACF,WACE,kBAAkB,QAClB,kBAAkB,KAAK,mBACvB;AACA,yBAAO;AAAA,gBACT;AAAA,cACF;AAAA,YACF;AACA,gBAAI,MAAM;AACR,mBAAK,oBAAoB;AACzB,sBAAQ,IAAI,IAAI;AAAA,YAClB,WAAW,KAAK,sBAAsB,MAAM;AAC1C,mBAAK,oBAAoB;AAAA,YAC3B;AAAA,UACF;AACA;AAAA,QACF;AAAA,QACA,KAAK,gBAAgB;AACnB,gBAAM,gBAAgB,KAAK,UAAU;AACrC,cAAI,KAAK,SAAS,aAAa,KAAK,gBAAgB,aAAa,GAAG;AAClE,oBAAQ,IAAI,IAAI;AAAA,UAClB,WAAW,cAAc,YAAY;AACnC,kBAAM,sBAAsB,cAAc,WAAW;AACrD,gBAAI,KAAK,SAAS,mBAAmB,GAAG;AACtC,sBAAQ,IAAI,IAAI;AAAA,YAClB,OAAO;AACL,kBAAI,UAAU;AACd,qBAAO,SAAS;AACd,oBAAI,QAAQ,aAAa,wBAAwB;AAC/C,wBAAM,EAAE,KAAK,IAAI;AACjB,sBAAI,SAAS,iBAAiB,KAAK,SAAS,IAAI,GAAG;AACjD,4BAAQ,IAAI,IAAI;AAAA,kBAClB;AACA;AAAA,gBACF,OAAO;AACL,4BAAU,QAAQ;AAAA,gBACpB;AAAA,cACF;AAAA,YACF;AAAA,UACF;AACA;AAAA,QACF;AAAA,QACA,KAAK;AAAA,QACL,KAAK,UAAU;AACb,cAAI,cAAc,aAAa,cAAc,UAAU;AACrD,gBAAI,KAAK,aAAa,MAAM,GAAG;AAC7B,kBAAI,YAAY,QAAQ;AACtB,wBAAQ,IAAI,IAAI;AAAA,cAClB;AAAA,YACF,WAAW,YAAY,UAAU;AAC/B,sBAAQ,IAAI,IAAI;AAAA,YAClB;AAAA,UACF;AACA;AAAA,QACF;AAAA,QACA,KAAK,qBAAqB;AACxB,cAAI;AACJ,cAAI,KAAK,aAAa;AACpB,0BAAc,KAAK;AAAA,UACrB,WAAW,KAAK,aAAa,aAAa,GAAG;AAC3C,0BAAc,KAAK,aAAa,aAAa;AAAA,UAC/C;AACA,cAAI,OAAO,gBAAgB,YAAY,CAAC,SAAS,KAAK,WAAW,GAAG;AAClE,gBAAI;AACJ,gBAAI,cAAc,YAAY;AAC5B,2BAAa;AAAA,YACf,WAAW,cAAc,SAAS;AAChC,kBAAI,KAAK,aAAa,MAAM,GAAG;AAC7B,oBAAI,uBAAuB,IAAI,KAAK,aAAa,MAAM,CAAC,GAAG;AACzD,+BAAa;AAAA,gBACf;AAAA,cACF,OAAO;AACL,6BAAa;AAAA,cACf;AAAA,YACF;AACA,gBAAI,cAAc,KAAK,UAAU,IAAI;AACnC,sBAAQ,IAAI,IAAI;AAAA,YAClB;AAAA,UACF;AACA;AAAA,QACF;AAAA,QACA,KAAK,WAAW;AACd,gBAAM,WAAW,KAAK,aAAa,MAAM;AACzC,cACG,KAAK,WACJ,cAAc,YACb,aAAa,cAAc,aAAa,YAC1C,KAAK,YAAY,cAAc,UAChC;AACA,oBAAQ,IAAI,IAAI;AAAA,UAClB;AACA;AAAA,QACF;AAAA,QACA,KAAK,iBAAiB;AACpB,cACG,KAAK,iBACJ,cAAc,WACd,KAAK,SAAS,cACf,cAAc,cAAc,CAAC,KAAK,aAAa,OAAO,GACvD;AACA,oBAAQ,IAAI,IAAI;AAAA,UAClB,WACE,cAAc,WACd,KAAK,SAAS,WACd,CAAC,KAAK,aAAa,SAAS,GAC5B;AACA,kBAAM,WAAW,KAAK;AACtB,gBAAI,SAAS,KAAK;AAClB,mBAAO,QAAQ;AACb,kBAAI,OAAO,cAAc,QAAQ;AAC/B;AAAA,cACF;AACA,uBAAS,OAAO;AAAA,YAClB;AACA,gBAAI,CAAC,QAAQ;AACX,uBAAS,KAAK,UAAU;AAAA,YAC1B;AACA,kBAAM,SAAS,KAAK,kBAAkB,MAAM;AAC5C,gBAAI,UAAU,aAAa,QAAQ,MAAM;AACzC,sBAAU,OAAO,WAAW;AAC5B,gBAAI;AACJ,mBAAO,SAAS;AACd,kBACE,QAAQ,cAAc,WACtB,QAAQ,aAAa,MAAM,MAAM,SACjC;AACA,oBAAI,QAAQ,aAAa,MAAM,GAAG;AAChC,sBAAI,QAAQ,aAAa,MAAM,MAAM,UAAU;AAC7C,8BAAU,CAAC,CAAC,QAAQ;AAAA,kBACtB;AAAA,gBACF,OAAO;AACL,4BAAU,CAAC,CAAC,QAAQ;AAAA,gBACtB;AACA,oBAAI,SAAS;AACX;AAAA,gBACF;AAAA,cACF;AACA,wBAAU,OAAO,SAAS;AAAA,YAC5B;AACA,gBAAI,CAAC,SAAS;AACZ,sBAAQ,IAAI,IAAI;AAAA,YAClB;AAAA,UACF;AACA;AAAA,QACF;AAAA,QACA,KAAK,WAAW;AAEd,gBAAM,WAAW,KAAK,aAAa,MAAM;AACzC,cACG,cAAc,YACb,EAAE,KAAK,aAAa,MAAM,KAAK,iBAAiB,IAAI,QAAQ,MAC7D,cAAc,WACb,KAAK,aAAa,MAAM,KACxB,kBAAkB,IAAI,QAAQ,GAChC;AACA,gBAAI,OAAO,KAAK;AAChB,mBAAO,MAAM;AACX,kBAAI,KAAK,cAAc,QAAQ;AAC7B;AAAA,cACF;AACA,qBAAO,KAAK;AAAA,YACd;AACA,gBAAI,MAAM;AACR,oBAAM,SAAS,KAAK,kBAAkB,IAAI;AAC1C,kBAAI,UAAU,aAAa,MAAM,MAAM;AACvC,wBAAU,OAAO,WAAW;AAC5B,qBAAO,SAAS;AACd,sBAAM,WAAW,QAAQ;AACzB,sBAAM,eAAe,QAAQ,aAAa,MAAM;AAChD,oBAAI;AACJ,oBAAI,aAAa,UAAU;AACzB,sBAAI,EACF,QAAQ,aAAa,MAAM,KAC3B,iBAAiB,IAAI,YAAY;AAAA,gBAErC,WAAW,aAAa,SAAS;AAC/B,sBACE,QAAQ,aAAa,MAAM,KAC3B,kBAAkB,IAAI,YAAY;AAAA,gBACtC;AACA,oBAAI,GAAG;AACL,sBAAI,YAAY,MAAM;AACpB,4BAAQ,IAAI,IAAI;AAAA,kBAClB;AACA;AAAA,gBACF;AACA,0BAAU,OAAO,SAAS;AAAA,cAC5B;AAAA,YACF;AAAA,UAEF,WACE,cAAc,WACd,KAAK,aAAa,MAAM,KACxB,KAAK,aAAa,SAAS,KAC3B,iBAAiB,IAAI,QAAQ,GAC7B;AACA,oBAAQ,IAAI,IAAI;AAAA,UAElB,WAAW,cAAc,YAAY,KAAK,aAAa,UAAU,GAAG;AAClE,oBAAQ,IAAI,IAAI;AAAA,UAClB;AACA;AAAA,QACF;AAAA,QACA,KAAK;AAAA,QACL,KAAK,WAAW;AACd,cAAI,mBAAmB,IAAI,SAAS,GAAG;AACrC,gBAAI;AACJ,gBAAI,KAAK,cAAc,GAAG;AACxB,kBAAI,KAAK,aAAa,GAAG;AACvB,oBAAI,KAAK,aAAa,KAAK,MAAM,QAAQ;AACvC,0BAAQ;AAAA,gBACV;AAAA,cACF,OAAO;AACL,wBAAQ;AAAA,cACV;AAAA,YACF;AACA,gBAAI,OAAO;AACT,kBAAI,YAAY,SAAS;AACvB,wBAAQ,IAAI,IAAI;AAAA,cAClB;AAAA,YACF,WAAW,YAAY,WAAW;AAChC,sBAAQ,IAAI,IAAI;AAAA,YAClB;AAAA,UACF,WAAW,cAAc,YAAY;AACnC,kBAAM,SAAS,KAAK,kBAAkB,IAAI;AAC1C,gBAAI,UAAU,aAAa,MAAM,MAAM;AACvC,sBAAU,OAAO,WAAW;AAC5B,gBAAI;AACJ,gBAAI,CAAC,SAAS;AACZ,sBAAQ;AAAA,YACV,OAAO;AACL,qBAAO,SAAS;AACd,oBAAI,mBAAmB,IAAI,QAAQ,SAAS,GAAG;AAC7C,sBAAI,QAAQ,cAAc,GAAG;AAC3B,wBAAI,QAAQ,aAAa,GAAG;AAC1B,8BAAQ,QAAQ,aAAa,QAAQ,MAAM;AAAA,oBAC7C,OAAO;AACL,8BAAQ;AAAA,oBACV;AAAA,kBACF,OAAO;AACL,4BAAQ;AAAA,kBACV;AACA,sBAAI,CAAC,OAAO;AACV;AAAA,kBACF;AAAA,gBACF;AACA,0BAAU,OAAO,SAAS;AAAA,cAC5B;AAAA,YACF;AACA,gBAAI,OAAO;AACT,kBAAI,YAAY,SAAS;AACvB,wBAAQ,IAAI,IAAI;AAAA,cAClB;AAAA,YACF,WAAW,YAAY,WAAW;AAChC,sBAAQ,IAAI,IAAI;AAAA,YAClB;AAAA,UACF;AACA;AAAA,QACF;AAAA,QACA,KAAK;AAAA,QACL,KAAK,gBAAgB;AACnB,gBAAM,WAAW,KAAK,aAAa,MAAM;AACzC,cACE,cAAc,WACd,EAAE,KAAK,YAAY,KAAK,aAAa,UAAU,MAC/C,EAAE,KAAK,YAAY,KAAK,aAAa,UAAU,MAC/C,iBAAiB,IAAI,QAAQ,GAC7B;AACA,kBAAM,SACJ,KAAK,SAAS,kBAAkB,KAAK,SAAS;AAChD,gBAAI,YAAY,kBAAkB,QAAQ;AACxC,sBAAQ,IAAI,IAAI;AAAA,YAClB,WACE,YAAY,cACZ,CAAC,WACA,KAAK,aAAa,KAAK,KACtB,KAAK,aAAa,KAAK,KACvB,aAAa,UACf;AACA,sBAAQ,IAAI,IAAI;AAAA,YAClB;AAAA,UACF;AACA;AAAA,QACF;AAAA,QACA,KAAK;AAAA,QACL,KAAK,YAAY;AACf,cAAI;AACJ,cAAI;AACJ,cAAI,cAAc,YAAY,cAAc,YAAY;AACtD,gBAAI,KAAK,YAAY,KAAK,aAAa,UAAU,GAAG;AAClD,yBAAW;AAAA,YACb,OAAO;AACL,yBAAW;AAAA,YACb;AAAA,UACF,WAAW,cAAc,SAAS;AAChC,gBAAI,KAAK,aAAa,MAAM,GAAG;AAC7B,oBAAM,WAAW,KAAK,aAAa,MAAM;AACzC,kBAAI,oBAAoB,IAAI,QAAQ,GAAG;AACrC,oBAAI,KAAK,YAAY,KAAK,aAAa,UAAU,GAAG;AAClD,6BAAW;AAAA,gBACb,OAAO;AACL,6BAAW;AAAA,gBACb;AAAA,cACF,OAAO;AACL,2BAAW;AAAA,cACb;AAAA,YACF,WAAW,KAAK,YAAY,KAAK,aAAa,UAAU,GAAG;AACzD,yBAAW;AAAA,YACb,OAAO;AACL,yBAAW;AAAA,YACb;AAAA,UACF;AACA,cAAI,YAAY,cAAc,UAAU;AACtC,oBAAQ,IAAI,IAAI;AAAA,UAClB,WAAW,YAAY,cAAc,UAAU;AAC7C,oBAAQ,IAAI,IAAI;AAAA,UAClB;AACA;AAAA,QACF;AAAA,QACA,KAAK,QAAQ;AACX,cAAI,SAAS,KAAK,UAAU,iBAAiB;AAC3C,oBAAQ,IAAI,IAAI;AAAA,UAClB;AACA;AAAA,QACF;AAAA,QACA,KAAK,SAAS;AACZ,cAAI,KAAK,cAAc,GAAG;AACxB,kBAAM,SAAS,KAAK,kBAAkB,MAAM;AAAA,cAC1C,OAAO;AAAA,cACP,YAAY;AAAA,YACd,CAAC;AACD,gBAAI,UAAU,OAAO,WAAW;AAChC,gBAAI;AACJ,mBAAO,SAAS;AACd,qBACE,QAAQ,aAAa,gBACrB,QAAQ,aAAa;AACvB,kBAAI,CAAC,MAAM;AACT;AAAA,cACF;AACA,wBAAU,OAAO,YAAY;AAAA,YAC/B;AACA,gBAAI,MAAM;AACR,sBAAQ,IAAI,IAAI;AAAA,YAClB;AAAA,UACF,OAAO;AACL,oBAAQ,IAAI,IAAI;AAAA,UAClB;AACA;AAAA,QACF;AAAA,QACA,KAAK,eAAe;AAClB,cACG,cAAc,SAAS,WAAW,qBACnC,SAAS,KAAK,OACd;AACA,oBAAQ,IAAI,IAAI;AAAA,UAClB;AACA;AAAA,QACF;AAAA,QACA,KAAK,cAAc;AACjB,cACG,cAAc,SAAS,WAAW,oBACnC,SAAS,KAAK,OACd;AACA,oBAAQ,IAAI,IAAI;AAAA,UAClB;AACA;AAAA,QACF;AAAA,QACA,KAAK,cAAc;AACjB,cACG,cACC,SAAS,WAAW,qBACpB,SAAS,WAAW,oBACtB,SAAS,KAAK,OACd;AACA,oBAAQ,IAAI,IAAI;AAAA,UAClB;AACA;AAAA,QACF;AAAA,QACA,KAAK,WAAW;AACd,cAAI,KAAK,aAAa,IAAI,KAAK,UAAU,SAAS,GAAG,GAAG;AACtD,gBAAI,gBAAgB,IAAI,GAAG;AACzB,sBAAQ,IAAI,IAAI;AAAA,YAClB;AAAA,UAEF,WACE,gBAAgB,KAAK,QAAQ,eAC7B,gBAAgB,KAAK,QAAQ,YAC7B;AACA,oBAAQ,IAAI,IAAI;AAAA,UAClB;AACA;AAAA,QACF;AAAA,QACA,KAAK,gBAAgB;AACnB,cAAI,KAAK,WAAW,UAAU,IAAI,GAAG;AACnC,oBAAQ,IAAI,IAAI;AAAA,UAClB;AACA;AAAA,QACF;AAAA;AAAA,QAEA,KAAK,QAAQ;AACX;AAAA,QACF;AAAA;AAAA,QAEA,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK,cAAc;AACjB,cAAI,MAAM;AACR,iBAAK;AAAA,cACH;AAAA,gBACE,gCAAgC,OAAO;AAAA,gBACvC;AAAA,gBACA,KAAK;AAAA,cACP;AAAA,YACF;AAAA,UACF;AACA;AAAA,QACF;AAAA;AAAA,QAEA,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK,oBAAoB;AACvB,cAAI,MAAM;AACR,iBAAK;AAAA,cACH;AAAA,gBACE,6BAA6B,OAAO;AAAA,gBACpC;AAAA,gBACA,KAAK;AAAA,cACP;AAAA,YACF;AAAA,UACF;AACA;AAAA,QACF;AAAA,QACA,SAAS;AACP,cAAI,QAAQ,WAAW,UAAU,GAAG;AAClC,gBAAI,MAAM;AACR,mBAAK;AAAA,gBACH;AAAA,kBACE,6BAA6B,OAAO;AAAA,kBACpC;AAAA,kBACA,KAAK;AAAA,gBACP;AAAA,cACF;AAAA,YACF;AAAA,UACF,WAAW,CAAC,SAAS;AACnB,iBAAK;AAAA,cACH;AAAA,gBACE,yBAAyB,OAAO;AAAA,gBAChC;AAAA,gBACA,KAAK;AAAA,cACP;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,sBAAsB,CAAC,QAAQ,MAAM,QAAQ;AAC3C,UAAM,IAAI,OAAO;AACjB,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAM,OAAO,OAAO,CAAC;AACrB,UAAI,KAAK,SAAS,YAAY;AAC5B,cAAM,UAAM,0BAAY,GAAG;AAC3B,cAAM,MAAM,oBAAoB,GAAG;AACnC,aAAK,QAAQ,kBAAkB,KAAK,YAAY,KAAK,OAAO,CAAC;AAC7D,eAAO;AAAA,MACT;AACA,UAAI,CAAC,KAAK,eAAe,MAAM,IAAI,EAAE,IAAI,IAAI,GAAG;AAC9C,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,6BAA6B,CAAC,QAAQ,MAAM,QAAQ;AAClD,QAAI,SAAS;AACb,WAAO,QAAQ;AACb,UAAI;AACJ,YAAM,IAAI,OAAO;AACjB,eAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,cAAM,OAAO,OAAO,CAAC;AACrB,YAAI,KAAK,SAAS,YAAY;AAC5B,gBAAM,UAAM,0BAAY,GAAG;AAC3B,gBAAM,MAAM,oBAAoB,GAAG;AACnC,eAAK,QAAQ,kBAAkB,KAAK,YAAY,KAAK,OAAO,CAAC;AAC7D,iBAAO;AAAA,QACT;AACA,eAAO,KAAK,eAAe,MAAM,MAAM,EAAE,IAAI,MAAM;AACnD,YAAI,CAAC,MAAM;AACT;AAAA,QACF;AAAA,MACF;AACA,UAAI,MAAM;AACR,eAAO;AAAA,MACT;AACA,eAAS,OAAO;AAAA,IAClB;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,8BAA8B,CAAC,KAAK,SAAS;AAC3C,UAAM,EAAE,UAAU,aAAa,MAAM,QAAQ,IAAI;AAEjD,QAAI,CAAC,MAAM,QAAQ,WAAW,GAAG;AAC/B,UAAI,YAAY,QAAQ;AACtB,eAAO;AAAA,MACT;AACA,YAAM,MAAM,qBAAqB,OAAO;AACxC,aAAO,KAAK,QAAQ,kBAAkB,KAAK,YAAY,KAAK,OAAO,CAAC;AAAA,IACtE;AAEA,QAAI,YAAY,UAAU,YAAY,gBAAgB;AACpD,YAAM,MAAM,qBAAqB,OAAO;AACxC,aAAO,KAAK,QAAQ,kBAAkB,KAAK,YAAY,KAAK,OAAO,CAAC;AAAA,IACtE;AACA,QAAI,YAAY,WAAW,GAAG;AAC5B,YAAM,UAAM,0BAAY,GAAG;AAC3B,YAAM,MAAM,oBAAoB,GAAG;AACnC,aAAO,KAAK,QAAQ,kBAAkB,KAAK,YAAY,KAAK,OAAO,CAAC;AAAA,IACtE;AACA,UAAM,EAAE,KAAK,IAAI;AACjB,UAAM,EAAE,SAAS,IAAI,QAAQ,YAAY,CAAC,CAAC;AAC3C,UAAM,CAAC,MAAM,IAAI;AACjB,UAAM,CAAC,GAAG,MAAM,IAAI;AACpB,QAAI,UAAU;AACd,QAAI,YAAY,QAAQ;AACtB,gBAAU,KAAK,oBAAoB,QAAQ,MAAM,GAAG;AAAA,IAEtD,OAAO;AACL,gBAAU,KAAK,2BAA2B,QAAQ,MAAM,GAAG;AAAA,IAC7D;AACA,WAAO,UAAU,OAAO;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,2BAA2B,CAAC,KAAK,MAAM,MAAM,CAAC,MAAM;AAClD,UAAM,EAAE,MAAM,QAAQ,IAAI;AAC1B,UAAM,UAAU,iBAAiB,IAAI,IAAI;AACzC,UAAM,UAAU,oBAAI,IAAI;AACxB,YAAQ,SAAS;AAAA,MACf,KAAK,eAAe;AAClB,YAAI,uBAAuB,KAAK,MAAM,GAAG,GAAG;AAC1C,kBAAQ,IAAI,IAAI;AAAA,QAClB;AACA;AAAA,MACF;AAAA,MACA,KAAK,aAAa;AAChB,YAAI,KAAK,OAAO,SAAS;AACvB,kBAAQ,IAAI,IAAI;AAAA,QAClB;AACA;AAAA,MACF;AAAA,MACA,KAAK,gBAAgB;AACnB,YAAI,KAAK,UAAU,SAAS,OAAO,GAAG;AACpC,kBAAQ,IAAI,IAAI;AAAA,QAClB;AACA;AAAA,MACF;AAAA,MACA,KAAK,mBAAmB;AACtB,eAAO,KAAK,0BAA0B,KAAK,MAAM,GAAG;AAAA,MACtD;AAAA,MACA,KAAK,eAAe;AAClB,YAAI,kBAAkB,KAAK,MAAM,GAAG,GAAG;AACrC,kBAAQ,IAAI,IAAI;AAAA,QAClB;AACA;AAAA,MACF;AAAA;AAAA,MAEA,SAAS;AACP,YAAI;AACF,cAAI,IAAI,OAAO;AACb,kBAAM,UAAM,0BAAY,GAAG;AAC3B,iBAAK,eAAe,KAAK,GAAG;AAC5B,oBAAQ,IAAI,IAAI;AAAA,UAClB,OAAO;AACL,uCAA2B,SAAS,SAAS,GAAG;AAAA,UAClD;AAAA,QACF,SAAS,GAAG;AACV,eAAK,QAAQ,CAAC;AAAA,QAChB;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,8BAA8B,CAAC,KAAK,MAAM,MAAM,CAAC,MAAM;AACrD,UAAM,EAAE,MAAM,QAAQ,IAAI;AAC1B,QAAI,aAAa,IAAI,OAAO,GAAG;AAC7B,UAAI,eAAe;AACnB,aAAO,KAAK,0BAA0B,KAAK,MAAM,GAAG;AAAA,IACtD;AACA,UAAM,UAAU,oBAAI,IAAI;AACxB,QAAI,YAAY,UAAU,YAAY,gBAAgB;AACpD,YAAM,MAAM,KAAK,4BAA4B,KAAK,MAAM,GAAG;AAC3D,UAAI,KAAK;AACP,aAAK,oBAAoB;AACzB,gBAAQ,IAAI,GAAG;AAAA,MACjB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,iBAAiB,CAAC,KAAK,MAAM,MAAM,CAAC,MAAM;AACxC,QAAI,KAAK,aAAa,cAAc;AAClC,aAAO,KAAK,yBAAyB,KAAK,MAAM,GAAG;AAAA,IACrD;AACA,QACE,KAAK,WACL,KAAK,aAAa,0BAClB,IAAI,SAAS,mBACb;AACA,aAAO,KAAK,4BAA4B,KAAK,MAAM,GAAG;AAAA,IACxD;AACA,WAAO,oBAAI,IAAI;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,eAAe,CAAC,QAAQ,MAAM,MAAM,CAAC,MAAM;AACzC,UAAM,UAAU,KAAK,cAAc,KAAK,qBAAqB,KAAK;AAClE,QAAI,SAAS,QAAQ,IAAI,MAAM;AAC/B,QAAI,UAAU,OAAO,IAAI,IAAI,GAAG;AAC9B,YAAM,EAAE,QAAQ,IAAI,OAAO,IAAI,IAAI;AACnC,aAAO;AAAA,IACT;AACA,QAAI,YAAY;AAChB,QAAI,KAAK,aAAa,gBAAgB,UAAU,IAAI,KAAK,SAAS,GAAG;AACnE,kBAAY;AAAA,IACd;AACA,QAAI;AACJ,UAAM,IAAI,OAAO;AACjB,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAM,OAAO,OAAO,CAAC;AACrB,cAAQ,KAAK,MAAM;AAAA,QACjB,KAAK;AAAA,QACL,KAAK,aAAa;AAChB,sBAAY;AACZ;AAAA,QACF;AAAA,QACA,KAAK,mBAAmB;AACtB,cAAI,gBAAgB,IAAI,KAAK,IAAI,GAAG;AAClC,wBAAY;AAAA,UACd;AACA;AAAA,QACF;AAAA,QACA,SAAS;AAAA,QAET;AAAA,MACF;AACA,aAAO,KAAK,eAAe,MAAM,MAAM,GAAG,EAAE,IAAI,IAAI;AACpD,UAAI,CAAC,MAAM;AACT;AAAA,MACF;AAAA,IACF;AACA,QAAI,WAAW;AACb,UAAI,CAAC,QAAQ;AACX,iBAAS,oBAAI,QAAQ;AAAA,MACvB;AACA,aAAO,IAAI,MAAM;AAAA,QACf,SAAS;AAAA,MACX,CAAC;AACD,cAAQ,IAAI,QAAQ,MAAM;AAAA,IAC5B;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,0BAA0B,CAAC,UAAU,QAAQ,MAAM,CAAC,MAAM;AACxD,UAAM,SAAS,KAAK,kBAAkB,QAAQ;AAC9C,iBAAa,UAAU,MAAM;AAC7B,QAAI,cAAc,OAAO,WAAW;AACpC,UAAM,QAAQ,oBAAI,IAAI;AACtB,WAAO,aAAa;AAClB,UAAI,KAAK,aAAa,QAAQ,aAAa,GAAG,GAAG;AAC/C,cAAM,IAAI,WAAW;AAAA,MACvB;AACA,oBAAc,OAAO,SAAS;AAAA,IAChC;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,uBAAuB,CAAC,QAAQ,UAAU,MAAM,CAAC,MAAM;AACrD,UAAM,CAAC,MAAM,GAAG,YAAY,IAAI;AAChC,UAAM,EAAE,MAAM,SAAS,IAAI;AAC3B,YAAQ,UAAU;AAAA,MAChB,KAAK,aAAa;AAChB,cAAM,uBACJ,CAAC,KAAK,WACN,SAAS,aAAa,gBACtB,KAAK,MAAM,aAAa;AAC1B,YAAI,sBAAsB;AACxB,gBAAM,WAAW,iBAAiB,KAAK,IAAI;AAC3C,gBAAM,QAAQ,oBAAI,IAAI;AACtB,gBAAM,YAAY,KAAK,MAAM,eAAe,QAAQ;AACpD,cACE,aACA,cAAc,YACd,SAAS,SAAS,SAAS,GAC3B;AACA,kBAAM,qBAAqB,aAAa,SAAS;AACjD,gBACE,CAAC,sBACD,KAAK,aAAa,cAAc,WAAW,GAAG,GAC9C;AACA,oBAAM,IAAI,SAAS;AAAA,YACrB;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,wBAAwB,UAAU,QAAQ,GAAG;AAAA,MAC3D;AAAA,MACA,KAAK,qBAAqB;AACxB,cAAM,WAAW,iBAAiB,KAAK,IAAI;AAC3C,mCAA2B,UAAU,UAAU,GAAG;AAClD,eAAO,oBAAI,IAAI;AAAA,MACjB;AAAA,MACA,SAAS;AACP,eAAO,KAAK,wBAAwB,UAAU,QAAQ,GAAG;AAAA,MAC3D;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,6BAA6B,CAAC,MAAM,MAAM,MAAM,CAAC,MAAM;AACrD,UAAM,EAAE,OAAO,IAAI;AACnB,UAAM,EAAE,WAAW,IAAI;AACvB,UAAM,EAAE,IAAI,IAAI;AAChB,QAAI,QAAQ,UAAU;AACpB,aAAO,KAAK,qBAAqB,QAAQ,MAAM,GAAG;AAAA,IACpD;AAEA,UAAM,YAAY,CAAC;AACnB,QAAI,UAAU;AACd,WAAO,SAAS;AACd,UAAI,KAAK,aAAa,QAAQ,SAAS,GAAG,GAAG;AAC3C,kBAAU,KAAK,OAAO;AAAA,MACxB;AACA,gBAAU,QAAQ;AAAA,IACpB;AACA,QAAI,UAAU,QAAQ;AAEpB,aAAO,IAAI,IAAI,UAAU,QAAQ,CAAC;AAAA,IACpC;AACA,WAAO,oBAAI,IAAI;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,wBAAwB,CAAC,MAAM,MAAM,MAAM,CAAC,MAAM;AAChD,UAAM,EAAE,OAAO,IAAI;AACnB,UAAM,EAAE,IAAI,IAAI;AAChB,UAAM,EAAE,WAAW,IAAI;AACvB,UAAM,UAAU,oBAAI,IAAI;AACxB,QAAI,QAAQ,UAAU;AACpB,UAAI,UAAU,KAAK;AACnB,aAAO,SAAS;AACd,YAAI,KAAK,aAAa,QAAQ,SAAS,GAAG,GAAG;AAC3C,kBAAQ,IAAI,OAAO;AAAA,QACrB;AACA,kBAAU,QAAQ;AAAA,MACpB;AAAA,IACF,OAAO;AAEL,UAAI,cAAc,KAAK,aAAa,QAAQ,YAAY,GAAG,GAAG;AAC5D,gBAAQ,IAAI,UAAU;AAAA,MACxB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,kCAAkC,CAAC,MAAM,MAAM,MAAM,CAAC,MAAM;AAC1D,UAAM,EAAE,OAAO,IAAI;AACnB,UAAM,EAAE,IAAI,IAAI;AAChB,UAAM,UAAU,oBAAI,IAAI;AACxB,UAAM,UACJ,QAAQ,WAAW,KAAK,qBAAqB,KAAK;AACpD,QAAI,WAAW,KAAK,aAAa,QAAQ,SAAS,GAAG,GAAG;AACtD,cAAQ,IAAI,OAAO;AAAA,IACrB;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,iCAAiC,CAAC,MAAM,MAAM,MAAM,CAAC,MAAM;AACzD,UAAM,EAAE,OAAO,IAAI;AACnB,UAAM,EAAE,IAAI,IAAI;AAChB,UAAM,UAAU,oBAAI,IAAI;AACxB,QAAI,UACF,QAAQ,WAAW,KAAK,qBAAqB,KAAK;AACpD,WAAO,SAAS;AACd,UAAI,KAAK,aAAa,QAAQ,SAAS,GAAG,GAAG;AAC3C,gBAAQ,IAAI,OAAO;AAAA,MACrB;AACA,gBACE,QAAQ,WACJ,QAAQ,qBACR,QAAQ;AAAA,IAChB;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,mBAAmB,CAAC,MAAM,MAAM,MAAM,CAAC,MAAM;AAC3C,UAAM;AAAA,MACJ,OAAO,EAAE,MAAM,UAAU;AAAA,IAC3B,IAAI;AACJ,YAAQ,WAAW;AAAA,MACjB,KAAK,KAAK;AACR,eAAO,KAAK,gCAAgC,MAAM,MAAM,GAAG;AAAA,MAC7D;AAAA,MACA,KAAK,KAAK;AACR,eAAO,KAAK,+BAA+B,MAAM,MAAM,GAAG;AAAA,MAC5D;AAAA,MACA,KAAK,KAAK;AACR,eAAO,KAAK,sBAAsB,MAAM,MAAM,GAAG;AAAA,MACnD;AAAA,MACA,KAAK;AAAA,MACL,SAAS;AACP,eAAO,KAAK,2BAA2B,MAAM,MAAM,GAAG;AAAA,MACxD;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,2BAA2B,CAAC,QAAQ,QAAQ,YAAY;AACtD,UAAM,EAAE,cAAc,OAAO,WAAW,WAAW,IAAI;AACvD,UAAM,iBAAiB,CAAC;AACxB,QAAI,cAAc,aAAa,WAAW,QAAQ,CAAC,CAAC,KAAK;AACzD,QAAI,CAAC,aAAa;AAChB,aAAO,CAAC;AAAA,IACV;AAEA,QAAI,YAAY,aAAa,cAAc;AACzC,oBAAc,OAAO,SAAS;AAAA,IAChC,WAAW,gBAAgB,aAAa,gBAAgB,KAAK,OAAO;AAClE,oBAAc,OAAO,SAAS;AAAA,IAChC;AACA,UAAM,WAAW;AAAA,MACf,MAAM,KAAK;AAAA,IACb;AACA,WAAO,aAAa;AAElB,UAAI,cAAc;AAChB,YAAI,gBAAgB,cAAc;AAChC;AAAA,QACF,WACE,eAAe,cACf,CAAC,aAAa,SAAS,WAAW,GAClC;AACA;AAAA,QACF;AAAA,MACF;AACA,UACE,KAAK,aAAa,QAAQ,aAAa,QAAQ,KAC/C,gBAAgB,KAAK,OACrB;AACA,uBAAe,KAAK,WAAW;AAE/B,YAAI,eAAe,YAAY;AAC7B;AAAA,QACF;AAAA,MACF;AACA,oBAAc,OAAO,SAAS;AAAA,IAChC;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,eAAe,CAAC,QAAQ,MAAM,MAAM,CAAC,MAAM;AACzC,UAAM,EAAE,OAAO,WAAW,IAAI;AAC9B,QAAI,CAAC,KAAK,aAAa;AACrB,WAAK,cAAc,KAAK,kBAAkB,KAAK,KAAK;AAAA,IACtD;AACA,WAAO,KAAK,yBAAyB,KAAK,aAAa,QAAQ;AAAA,MAC7D;AAAA,MACA;AAAA,MACA,cAAc,KAAK;AAAA,MACnB,WAAW;AAAA,IACb,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,kBAAkB,CAAC,QAAQ,MAAM,MAAM,CAAC,MAAM;AAC5C,UAAM,EAAE,SAAS,GAAG,cAAc,IAAI;AACtC,QAAI,SAAS;AACX,YAAM,eAAe,KAAK,aAAa,QAAQ,KAAK,OAAO,GAAG;AAC9D,UAAI,aAAa,QAAQ;AACvB,eAAO;AAAA,MACT;AAAA,IACF;AACA,QAAI,CAAC,KAAK,aAAa;AACrB,WAAK,cAAc,KAAK,kBAAkB,KAAK,KAAK;AAAA,IACtD;AACA,WAAO,KAAK,yBAAyB,KAAK,aAAa,QAAQ;AAAA,MAC7D,WAAW;AAAA,MACX,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,aAAa,CAAC,QAAQ,QAAQ,UAAU;AACtC,UAAM,UAAU,EAAE,OAAO,MAAM,KAAK,MAAM;AAC1C,UAAM,UAAU,KAAK,aAAa,QAAQ,KAAK,OAAO,OAAO;AAC7D,UAAM,QAAQ,UAAU,CAAC,KAAK,KAAK,IAAI,CAAC;AACxC,WAAO,CAAC,OAAO,SAAS,KAAK,cAAc;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,cAAc,CAAC,QAAQ,QAAQ;AAC7B,UAAM,EAAE,QAAQ,IAAI;AACpB,UAAM,QAAQ,CAAC;AACf,UAAM,UAAU,EAAE,MAAM,KAAK,MAAM;AACnC,UAAM,cAAc,KAAK,aAAa,QAAQ,KAAK,OAAO,OAAO;AACjE,QAAI,aAAa;AACf,YAAM,KAAK,KAAK,KAAK;AAAA,IACvB;AACA,QAAI,CAAC,eAAe,SAAS;AAC3B,UAAI,cAAc,KAAK,MAAM;AAC7B,aAAO,aAAa;AAClB,YAAI,KAAK,aAAa,QAAQ,aAAa,OAAO,GAAG;AACnD,gBAAM,KAAK,WAAW;AAAA,QACxB;AACA,sBAAc,YAAY;AAAA,MAC5B;AAAA,IACF;AACA,UAAM,WAAW,MAAM,SAAS;AAChC,WAAO,CAAC,OAAO,QAAQ;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,kCAAkC,CAAC,MAAM,cAAc,eAAe;AACpE,QAAI,QAAQ,CAAC;AACb,QAAI,WAAW;AACf,QAAI,eAAe,eAAe,KAAK,QAAQ;AAC7C,YAAM,UAAM,0BAAY,IAAI;AAC5B,WAAK,eAAe,KAAK,GAAG;AAC5B,UAAI,aAAa,QAAQ;AACvB,SAAC,OAAO,QAAQ,IAAI,KAAK,WAAW,cAAc,KAAK,MAAM;AAAA,MAC/D,OAAO;AACL,cAAM,KAAK,KAAK,KAAK;AACrB,mBAAW;AAAA,MACb;AAAA,IACF,OAAO;AACL,iCAA2B,KAAK,MAAM,KAAK,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;AAAA,IACvE;AACA,WAAO,EAAE,OAAO,UAAU,SAAS,MAAM;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,uBAAuB,CAAC,MAAM,YAAY,QAAQ;AAChD,UAAM,EAAE,OAAO,IAAI;AACnB,UAAM,CAAC,MAAM,GAAG,YAAY,IAAI;AAChC,UAAM,EAAE,SAAS,QAAQ,IAAI;AAC7B,QAAI,QAAQ,CAAC;AACb,QAAI,WAAW;AACf,QAAI,eAAe,aAAa;AAC9B,OAAC,OAAO,QAAQ,IAAI,KAAK,WAAW,MAAM;AAAA,IAC5C,WAAW,eAAe,eAAe;AACvC,OAAC,OAAO,QAAQ,IAAI,KAAK,YAAY,QAAQ,EAAE,QAAQ,CAAC;AAAA,IAC1D,WACE,eAAe,gBACf,KAAK,MAAM,aAAa,cACxB;AACA,YAAM,OAAO,KAAK,MAAM,eAAe,KAAK,IAAI;AAChD,UAAI,MAAM;AACR,YAAI,aAAa,QAAQ;AACvB,cAAI,KAAK,aAAa,cAAc,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG;AAC/D,kBAAM,KAAK,IAAI;AACf,uBAAW;AAAA,UACb;AAAA,QACF,OAAO;AACL,gBAAM,KAAK,IAAI;AACf,qBAAW;AAAA,QACb;AAAA,MACF;AAAA,IACF,OAAO;AACL,cAAQ,KAAK,gBAAgB,QAAQ,KAAK,OAAO,EAAE,SAAS,WAAW,CAAC;AACxE,iBAAW,MAAM,SAAS;AAAA,IAC5B;AACA,WAAO,EAAE,OAAO,UAAU,SAAS,MAAM;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,0BAA0B,CAAC,QAAQ,YAAY,QAAQ;AACrD,UAAM,EAAE,SAAS,QAAQ,IAAI;AAC7B,QAAI,QAAQ,CAAC;AACb,QAAI,WAAW;AACf,QAAI,eAAe,aAAa;AAC9B,OAAC,OAAO,QAAQ,IAAI,KAAK,WAAW,MAAM;AAAA,IAC5C,WAAW,eAAe,eAAe;AACvC,OAAC,OAAO,QAAQ,IAAI,KAAK,YAAY,QAAQ,EAAE,QAAQ,CAAC;AAAA,IAC1D,OAAO;AACL,cAAQ,KAAK,gBAAgB,QAAQ,KAAK,OAAO,EAAE,SAAS,WAAW,CAAC;AACxE,iBAAW,MAAM,SAAS;AAAA,IAC5B;AACA,WAAO,EAAE,OAAO,UAAU,SAAS,MAAM;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,yBAAyB,CAAC,QAAQ,YAAY,QAAQ;AACpD,UAAM,EAAE,SAAS,QAAQ,IAAI;AAC7B,QAAI,QAAQ,CAAC;AACb,QAAI,WAAW;AACf,QAAI,eAAe,aAAa;AAC9B,OAAC,OAAO,QAAQ,IAAI,KAAK,WAAW,MAAM;AAAA,IAC5C,WAAW,eAAe,eAAe;AACvC,OAAC,OAAO,QAAQ,IAAI,KAAK,YAAY,QAAQ,EAAE,QAAQ,CAAC;AAAA,IAC1D,OAAO;AACL,cAAQ,KAAK,gBAAgB,QAAQ,KAAK,OAAO,EAAE,SAAS,WAAW,CAAC;AACxE,iBAAW,MAAM,SAAS;AAAA,IAC5B;AACA,WAAO,EAAE,OAAO,UAAU,SAAS,MAAM;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,0BAA0B,CAAC,MAAM,YAAY,QAAQ;AACnD,UAAM,EAAE,OAAO,IAAI;AACnB,UAAM,CAAC,MAAM,GAAG,YAAY,IAAI;AAChC,UAAM,EAAE,SAAS,QAAQ,IAAI;AAC7B,QAAI,QAAQ,CAAC;AACb,QAAI,WAAW;AACf,QAAI,UAAU;AACd,QAAI,eAAe,iBAAiB,oBAAoB,KAAK,KAAK,IAAI,GAAG;AACvE,UAAI,aAAa;AACjB,UAAI,KAAK,WAAW,KAAK,MAAM,aAAa,wBAAwB;AAClE,qBAAa,KAAK,4BAA4B,MAAM,KAAK,KAAK;AAAA,MAChE,WAAW,aAAa,UAAU,KAAK,MAAM,aAAa,cAAc;AACtE,qBAAa,KAAK;AAAA,UAChB;AAAA,UACA,KAAK,MAAM;AAAA,QACb;AAAA,MACF;AACA,UAAI,YAAY;AACd,YAAI,OAAO;AACX,cAAM,IAAI,aAAa;AACvB,iBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,gBAAM,aAAa,aAAa,CAAC;AACjC,kBAAQ,WAAW,MAAM;AAAA,YACvB,KAAK;AAAA,YACL,KAAK,gBAAgB;AACnB,oBAAM,cAAc,KAAK;AAAA,gBACvB;AAAA,gBACA;AAAA,cACF;AACA,qBAAO,gBAAgB;AACvB;AAAA,YACF;AAAA,YACA,KAAK,OAAO;AACV,qBAAO,KAAK;AAAA,gBACV;AAAA,gBACA;AAAA,gBACA,CAAC;AAAA,cACH,EAAE,IAAI,UAAU;AAChB;AAAA,YACF;AAAA,YACA,SAAS;AACP,qBAAO;AAAA,YACT;AAAA,UACF;AACA,cAAI,CAAC,MAAM;AACT;AAAA,UACF;AAAA,QACF;AACA,YAAI,MAAM;AACR,gBAAM,KAAK,UAAU;AACrB,qBAAW;AAAA,QACb;AAAA,MACF;AAAA,IACF,WAAW,eAAe,aAAa;AACrC,OAAC,OAAO,QAAQ,IAAI,KAAK,WAAW,MAAM;AAAA,IAC5C,WAAW,eAAe,eAAe;AACvC,OAAC,OAAO,QAAQ,IAAI,KAAK,YAAY,QAAQ,EAAE,QAAQ,CAAC;AAAA,IAC1D,WAAW,eAAe,cAAc;AACtC,cAAQ,KAAK,gBAAgB,QAAQ,KAAK,OAAO,EAAE,SAAS,WAAW,CAAC;AACxE,iBAAW,MAAM,SAAS;AAAA,IAC5B,OAAO;AACL,gBAAU;AAAA,IACZ;AACA,WAAO,EAAE,OAAO,UAAU,QAAQ;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,kBAAkB,CAAC,MAAM,YAAY,MAAM,CAAC,MAAM;AAChD,UAAM,EAAE,OAAO,IAAI;AACnB,UAAM,CAAC,MAAM,GAAG,YAAY,IAAI;AAChC,UAAM,EAAE,UAAU,OAAO,MAAM,SAAS,IAAI;AAC5C,UAAM,UACJ,QAAQ,YACR,KAAK,MAAM,aAAa,gBACxB,KAAK,UAAU,KAAK;AACtB,QAAI;AACJ,YAAQ,KAAK,MAAM;AAAA,MACjB,KAAK,qBAAqB;AACxB,iBAAS,KAAK;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,QACF;AACA;AAAA,MACF;AAAA,MACA,KAAK,aAAa;AAChB,iBAAS,KAAK,qBAAqB,MAAM,YAAY;AAAA,UACnD;AAAA,UACA;AAAA,QACF,CAAC;AACD;AAAA,MACF;AAAA,MACA,KAAK,gBAAgB;AACnB,iBAAS,KAAK,wBAAwB,QAAQ,YAAY;AAAA,UACxD;AAAA,UACA;AAAA,QACF,CAAC;AACD;AAAA,MACF;AAAA,MACA,KAAK,eAAe;AAClB,iBAAS,KAAK,uBAAuB,QAAQ,YAAY;AAAA,UACvD;AAAA,UACA;AAAA,QACF,CAAC;AACD;AAAA,MACF;AAAA,MACA,SAAS;AACP,iBAAS,KAAK,wBAAwB,MAAM,YAAY;AAAA,UACtD;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AACA,WAAO;AAAA,MACL,UAAU,aAAa,SAAS;AAAA,MAChC,UAAU,OAAO;AAAA,MACjB,OAAO,OAAO;AAAA,MACd,SAAS,OAAO;AAAA,IAClB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,8BAA8B,CAAC,QAAQ,eAAe;AACpD,UAAM,YAAY,OAAO;AACzB,UAAM,YAAY,OAAO,CAAC;AAC1B,UAAM,WAAW,OAAO,YAAY,CAAC;AACrC,QAAI,cAAc,GAAG;AACnB,aAAO,EAAE,KAAK,UAAU,MAAM,UAAU;AAAA,IAC1C;AAEA,UAAM;AAAA,MACJ,QAAQ,CAAC,EAAE,MAAM,WAAW,MAAM,UAAU,CAAC;AAAA,IAC/C,IAAI;AACJ,UAAM;AAAA,MACJ,QAAQ,CAAC,EAAE,MAAM,UAAU,MAAM,SAAS,CAAC;AAAA,IAC7C,IAAI;AACJ,UAAM,EAAE,OAAO,WAAW,IAAI;AAC9B,QACE,KAAK,UAAU,SAAS,QAAQ,KAChC,aAAa,uBACb,aAAa,aACb;AACA,aAAO,EAAE,KAAK,UAAU,MAAM,SAAS;AAAA,IACzC;AACA,QAAI,cAAc,aAAa;AAC7B,aAAO,EAAE,KAAK,UAAU,MAAM,UAAU;AAAA,IAC1C;AACA,QAAI,cAAc,OAAO,cAAc,eAAe;AACpD,aAAO,EAAE,KAAK,UAAU,MAAM,SAAS;AAAA,IACzC;AACA,QAAI,aAAa,OAAO,aAAa,eAAe;AAClD,aAAO,EAAE,KAAK,UAAU,MAAM,UAAU;AAAA,IAC1C;AACA,QAAI,cAAc,GAAG;AACnB,UAAI,eAAe,cAAc;AAC/B,eAAO,EAAE,KAAK,UAAU,MAAM,SAAS;AAAA,MACzC;AACA,YAAM,EAAE,MAAM,UAAU,IAAI;AAC5B,UAAI,cAAc,OAAO,cAAc,KAAK;AAC1C,eAAO,EAAE,KAAK,UAAU,MAAM,SAAS;AAAA,MACzC;AAAA,IACF,WAAW,YAAY,KAAK,KAAK,WAAW,eAAe,cAAc;AACvE,UAAI,aAAa,eAAe;AAC9B,eAAO,EAAE,KAAK,UAAU,MAAM,SAAS;AAAA,MACzC;AACA,UAAI,sBAAsB;AAC1B,iBAAW,EAAE,MAAM,KAAK,QAAQ;AAC9B,YAAI,OAAO;AACT,gBAAM,EAAE,MAAM,UAAU,IAAI;AAC5B,gCAAsB,cAAc,OAAO,cAAc;AACzD,cAAI,CAAC,qBAAqB;AACxB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,UAAI,qBAAqB;AACvB,eAAO,EAAE,KAAK,UAAU,MAAM,SAAS;AAAA,MACzC;AAAA,IACF;AAEA,WAAO,EAAE,KAAK,UAAU,MAAM,UAAU;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,uBAAuB,kBAAgB;AACrC,QAAI,CAAC,aAAa,MAAM;AACtB;AAAA,IACF;AACA,QAAI,CAAC,KAAK,aAAa;AACrB,WAAK,cAAc,KAAK,kBAAkB,KAAK,KAAK;AAAA,IACtD;AACA,UAAM,SAAS,KAAK;AACpB,QAAI,OAAO,KAAK;AAChB,QAAI,KAAK,SAAS;AAChB,aAAO,KAAK;AAAA,IACd;AACA,QAAI,WAAW,aAAa,MAAM,MAAM;AACxC,WAAO,UAAU;AACf,YAAM,gBACJ,KAAK,MAAM,aAAa,gBACxB,aAAa,KAAK,SAClB,KAAK,MAAM,SAAS,QAAQ;AAC9B,UAAI,eAAe;AACjB,mBAAW,eAAe,cAAc;AACtC,gBAAM,EAAE,OAAO,IAAI,YAAY,IAAI,MAAM;AACzC,cAAI,KAAK,aAAa,QAAQ,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG;AAC7D,kBAAM,QAAQ,YAAY,IAAI,OAAO;AACrC,iBAAK,KAAK,KAAK,EAAE,WAAW;AAC5B,iBAAK,KAAK,KAAK,EAAE,OAAO;AACxB,iBAAK,OAAO,KAAK,EAAE,KAAK,QAAQ;AAAA,UAClC;AAAA,QACF;AAAA,MACF,WAAW,KAAK,SAAS;AACvB;AAAA,MACF;AACA,iBAAW,OAAO,SAAS;AAAA,IAC7B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,gBAAgB,gBAAc;AAC5B,UAAM,MAAM,KAAK,KAAK,OAAO;AAC7B,QAAI,eAAe,cAAc,eAAe,cAAc;AAC5D,YAAM,eAAe,oBAAI,IAAI;AAC7B,UAAI,IAAI;AACR,iBAAW,EAAE,OAAO,KAAK,KAAK;AAC5B,cAAM,UAAU,OAAO,SAAS;AAChC,cAAM,EAAE,KAAK,KAAK,IAAI,KAAK;AAAA,UACzB;AAAA,UACA;AAAA,QACF;AACA,cAAM,EAAE,UAAU,UAAU,OAAO,QAAQ,IAAI,KAAK;AAAA,UAClD;AAAA,UACA;AAAA,UACA,EAAE,SAAS,IAAI;AAAA,QACjB;AACA,YAAI,MAAM,QAAQ;AAChB,eAAK,KAAK,CAAC,EAAE,OAAO;AACpB,eAAK,OAAO,CAAC,IAAI;AAAA,QACnB,WAAW,SAAS;AAClB,uBAAa;AAAA,YACX,oBAAI,IAAI;AAAA,cACN,CAAC,SAAS,CAAC;AAAA,cACX,CAAC,QAAQ,IAAI;AAAA,YACf,CAAC;AAAA,UACH;AAAA,QACF;AACA,aAAK,KAAK,CAAC,EAAE,MAAM;AACnB,aAAK,KAAK,CAAC,EAAE,WAAW,YAAY,CAAC;AACrC;AAAA,MACF;AACA,WAAK,qBAAqB,YAAY;AAAA,IACxC,OAAO;AACL,UAAI,IAAI;AACR,iBAAW,EAAE,OAAO,KAAK,KAAK;AAC5B,cAAM,OAAO,OAAO,OAAO,SAAS,CAAC;AACrC,cAAM,UAAU,OAAO,SAAS;AAChC,cAAM,MAAM;AACZ,cAAM,EAAE,UAAU,UAAU,MAAM,IAAI,KAAK;AAAA,UACzC;AAAA,UACA;AAAA,UACA,EAAE,SAAS,IAAI;AAAA,QACjB;AACA,YAAI,MAAM,QAAQ;AAChB,eAAK,KAAK,CAAC,EAAE,OAAO;AACpB,eAAK,OAAO,CAAC,IAAI;AAAA,QACnB;AACA,aAAK,KAAK,CAAC,EAAE,MAAM;AACnB,aAAK,KAAK,CAAC,EAAE,WAAW,YAAY,CAAC;AACrC;AAAA,MACF;AAAA,IACF;AACA,WAAO,CAAC,KAAK,MAAM,KAAK,MAAM;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,oBAAoB,CAAC,MAAM,OAAO,QAAQ;AACxC,UAAM,MAAM,CAAC;AACb,UAAM,UAAU;AAAA,MACd;AAAA,MACA,MAAM,KAAK;AAAA,IACb;AACA,eAAW,QAAQ,OAAO;AACxB,YAAM,UAAU,KAAK,iBAAiB,MAAM,MAAM,OAAO;AACzD,UAAI,QAAQ,MAAM;AAChB,YAAI,KAAK,GAAG,OAAO;AAAA,MACrB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,iBAAiB,CAAC,QAAQ,OAAO,QAAQ;AACvC,UAAM,EAAE,OAAO,MAAM,IAAI;AACzB,UAAM,EAAE,OAAO,WAAW,OAAO,IAAI,OAAO,KAAK;AACjD,UAAM,OAAO;AAAA,MACX;AAAA,MACA;AAAA,IACF;AACA,UAAM,YAAY,IAAI,IAAI,KAAK,kBAAkB,MAAM,OAAO,QAAQ,CAAC;AACvE,QAAI,UAAU,MAAM;AAClB,UAAI,UAAU,OAAO,SAAS,GAAG;AAC/B,cAAM,CAAC,QAAQ,IAAI,UAAU,SAAS;AACtC,eAAO;AAAA,MACT;AACA,aAAO,KAAK,eAAe,QAAQ,WAAW;AAAA,QAC5C,OAAO;AAAA,QACP,OAAO,QAAQ;AAAA,MACjB,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,iBAAiB,CAAC,QAAQ,MAAM,QAAQ;AACtC,UAAM,EAAE,MAAM,IAAI;AAClB,UAAM,OAAO,OAAO,KAAK;AACzB,UAAM,QAAQ,oBAAI,IAAI,CAAC,IAAI,CAAC;AAC5B,UAAM,YAAY,IAAI,IAAI,KAAK,kBAAkB,MAAM,OAAO,QAAQ,CAAC;AACvE,QAAI,UAAU,MAAM;AAClB,UAAI,UAAU,GAAG;AACf,eAAO;AAAA,MACT;AACA,UAAI;AACJ,iBAAW,YAAY,WAAW;AAChC,kBAAU,KAAK,eAAe,QAAQ,UAAU;AAAA,UAC9C,OAAO,QAAQ;AAAA,QACjB,CAAC;AACD,YAAI,SAAS;AACX;AAAA,QACF;AAAA,MACF;AACA,UAAI,SAAS;AACX,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,2BAA2B,CAAC,QAAQ,YAAY,QAAQ;AACtD,UAAM,eAAe,oBAAI,IAAI;AAC7B,UAAM,YAAY,OAAO;AACzB,UAAM,YAAY,YAAY;AAE9B,QAAI,QAAQ,UAAU;AACpB,YAAM,EAAE,OAAO,WAAW,IAAI,OAAO,CAAC;AACtC,iBAAW,QAAQ,YAAY;AAC7B,YAAI,QAAQ;AACZ,YAAI,YAAY,oBAAI,IAAI,CAAC,IAAI,CAAC;AAC9B,iBAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,gBAAM,EAAE,OAAO,WAAW,OAAO,IAAI,OAAO,CAAC;AAC7C,gBAAM,OAAO,EAAE,OAAO,OAAO;AAC7B,gBAAM,WAAW,KAAK,kBAAkB,MAAM,WAAW,GAAG;AAC5D,cAAI,SAAS,QAAQ;AACnB,gBAAI,MAAM,WAAW;AACnB,yBAAW,YAAY,UAAU;AAC/B,6BAAa,IAAI,QAAQ;AAAA,cAC3B;AAAA,YACF;AACA,oBAAQ;AACR,wBAAY,IAAI,IAAI,QAAQ;AAAA,UAC9B,OAAO;AAEL,sBAAU,MAAM;AAChB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IAEF,OAAO;AACL,iBAAW,QAAQ,YAAY;AAC7B,YAAI,YAAY,oBAAI,IAAI,CAAC,IAAI,CAAC;AAC9B,iBAAS,IAAI,YAAY,GAAG,KAAK,GAAG,KAAK;AACvC,gBAAM,OAAO,OAAO,CAAC;AACrB,gBAAM,WAAW,KAAK,kBAAkB,MAAM,WAAW,GAAG;AAC5D,cAAI,SAAS,QAAQ;AAEnB,gBAAI,MAAM,GAAG;AACX,2BAAa,IAAI,IAAI;AAAA,YACvB;AACA,wBAAY,IAAI,IAAI,QAAQ;AAAA,UAC9B,OAAO;AAEL,sBAAU,MAAM;AAChB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,6BAA6B,CAAC,QAAQ,YAAY,KAAK,eAAe;AACpE,UAAM,YAAY,OAAO;AACzB,UAAM,YAAY,YAAY;AAE9B,QAAI,QAAQ,UAAU;AACpB,YAAM,EAAE,OAAO,WAAW,IAAI,OAAO,CAAC;AACtC,iBAAW,QAAQ,YAAY;AAC7B,cAAM,cAAc,KAAK,eAAe,QAAQ,oBAAI,IAAI,CAAC,IAAI,CAAC,GAAG;AAAA,UAC/D,OAAO;AAAA,UACP,OAAO;AAAA,QACT,CAAC;AACD,YAAI,aAAa;AACf,cAAI,KAAK,MAAM,aAAa,cAAc;AACxC,gBACE,gBAAgB,KAAK,SACrB,KAAK,MAAM,SAAS,WAAW,GAC/B;AACA,qBAAO;AAAA,YACT;AAAA,UACF,OAAO;AACL,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAEA,YAAM,EAAE,QAAQ,YAAY,IAAI,OAAO,CAAC;AACxC,YAAM,CAAC,SAAS,IAAI;AACpB,UAAI,KAAK,MAAM,SAAS,SAAS,GAAG;AAClC,YAAI,CAAC,OAAO,IAAI,KAAK,gBAAgB,aAAa,WAAW;AAAA,UAC3D;AAAA,QACF,CAAC;AACD,eAAO,SAAS;AACd,gBAAM,cAAc,KAAK,eAAe,QAAQ,oBAAI,IAAI,CAAC,OAAO,CAAC,GAAG;AAAA,YAClE,OAAO;AAAA,YACP,OAAO;AAAA,UACT,CAAC;AACD,cAAI,aAAa;AACf,gBAAI,KAAK,MAAM,aAAa,cAAc;AACxC,kBACE,gBAAgB,KAAK,SACrB,KAAK,MAAM,SAAS,WAAW,GAC/B;AACA,uBAAO;AAAA,cACT;AAAA,YACF,OAAO;AACL,qBAAO;AAAA,YACT;AAAA,UACF;AACA,WAAC,OAAO,IAAI,KAAK,gBAAgB,aAAa,SAAS;AAAA,YACrD;AAAA,YACA,OAAO;AAAA,UACT,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IAEF,OAAO;AACL,iBAAW,QAAQ,YAAY;AAC7B,cAAM,cAAc,KAAK,eAAe,QAAQ,MAAM;AAAA,UACpD,OAAO,YAAY;AAAA,QACrB,CAAC;AACD,YAAI,aAAa;AACf,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,UAAI,eAAe,cAAc;AAC/B,cAAM,EAAE,QAAQ,YAAY,IAAI,OAAO,SAAS;AAChD,cAAM,CAAC,SAAS,IAAI;AACpB,YAAI,CAAC,OAAO,IAAI,KAAK,gBAAgB,aAAa,WAAW;AAAA,UAC3D;AAAA,QACF,CAAC;AACD,eAAO,SAAS;AACd,gBAAM,cAAc,KAAK,eAAe,QAAQ,SAAS;AAAA,YACvD,OAAO,YAAY;AAAA,UACrB,CAAC;AACD,cAAI,aAAa;AACf,mBAAO;AAAA,UACT;AACA,WAAC,OAAO,IAAI,KAAK,gBAAgB,aAAa,SAAS;AAAA,YACrD;AAAA,YACA,OAAO;AAAA,UACT,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,gBAAc;AACnB,UAAM,CAAC,CAAC,GAAG,QAAQ,GAAG,cAAc,IAAI,KAAK,cAAc,UAAU;AACrE,UAAM,IAAI,SAAS;AACnB,QAAI,OACF,IAAI,KAAK,eAAe,cAAc,KAAK,UAAU,SAAS,QAAQ;AACxE,QAAI,QAAQ,oBAAI,IAAI;AACpB,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAM,EAAE,QAAQ,KAAK,MAAAC,MAAK,IAAI,SAAS,CAAC;AACxC,UAAI,CAAC,OAAO,UAAU,CAACA,OAAM;AAC3B;AAAA,MACF;AACA,YAAM,aAAa,eAAe,CAAC;AACnC,YAAM,YAAY,OAAO,SAAS;AAElC,UAAI,cAAc,GAAG;AACnB,aACG,eAAe,cAAc,eAAe,iBAC7C,KAAK,MAAM,aAAa,cACxB;AACA,qBAAW,QAAQ,YAAY;AAC7B,gBAAI,SAAS,KAAK,SAAS,KAAK,MAAM,SAAS,IAAI,GAAG;AACpD,oBAAM,IAAI,IAAI;AACd,kBAAI,eAAe,cAAc;AAC/B;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,WAAW,eAAe,YAAY;AACpC,cAAI,MAAM,MAAM;AACd,uBAAW,QAAQ,YAAY;AAC7B,oBAAM,IAAI,IAAI;AAAA,YAChB;AACA,mBAAO;AAAA,UACT,OAAO;AACL,oBAAQ,IAAI,IAAI,UAAU;AAAA,UAC5B;AAAA,QACF,OAAO;AACL,cAAI,WAAW,QAAQ;AACrB,kBAAM,IAAI,WAAW,CAAC,CAAC;AAAA,UACzB;AAAA,QACF;AAAA,MAEF,OAAO;AACL,YAAI,eAAe,YAAY;AAC7B,gBAAM,WAAW,KAAK;AAAA,YACpB;AAAA,YACA;AAAA,YACA;AAAA,UACF;AACA,cAAI,MAAM,MAAM;AACd,uBAAW,WAAW,UAAU;AAC9B,oBAAM,IAAI,OAAO;AAAA,YACnB;AACA,mBAAO;AAAA,UACT,OAAO;AACL,oBAAQ;AAAA,UACV;AAAA,QACF,OAAO;AACL,gBAAM,cAAc,KAAK;AAAA,YACvB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AACA,cAAI,aAAa;AACf,kBAAM,IAAI,WAAW;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,QAAI,KAAK,QAAQ;AACf,YAAM,QAAQ,CAAC,CAAC,MAAM;AACtB,UAAI;AACJ,UAAI,KAAK,eAAe,QAAQ;AAC9B,wBAAgB,KAAK,eAAe,KAAK,EAAE;AAAA,MAC7C,OAAO;AACL,wBAAgB;AAAA,MAClB;AACA,aAAO,EAAE,OAAO,cAAc;AAAA,IAChC;AACA,QAAI,eAAe,gBAAgB,eAAe,YAAY;AAC5D,YAAM,OAAO,KAAK,KAAK;AAAA,IACzB;AACA,SAAK,QAAQ,eAAe,iBAAiB,MAAM,OAAO,GAAG;AAC3D,aAAO,IAAI,IAAI,UAAU,KAAK,CAAC;AAAA,IACjC;AACA,WAAO;AAAA,EACT;AACF;;;AL3hGA,IAAM,YAAY;AASX,IAAM,cAAN,MAAkB;AAAA;AAAA,EAEvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,QAAQ,UAAU,MAAM,CAAC,GAAG;AACtC,UAAM,EAAE,SAAS,IAAI;AACrB,SAAK,UAAU;AACf,SAAK,YAAY,YAAY,OAAO;AACpC,SAAK,UAAU,IAAI,OAAO,MAAM;AAChC,SAAK,YAAY;AACjB,SAAK,UAAU,WAAW,QAAQ,QAAQ;AAC1C,SAAK,SAAS,IAAI,0BAAS;AAAA,MACzB,KAAK;AAAA,IACP,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQ,MAAM;AACZ,SAAK,QAAQ,aAAa,IAAI;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,QAAQ,CAAC,UAAU,MAAM,MAAM,CAAC,MAAM;AACpC,QAAI,CAAC,MAAM,UAAU;AACnB,YAAM,IAAI,IAAI,KAAK,QAAQ,UAAU,mBAAmB,QAAQ,IAAI,CAAC,EAAE;AACvE,aAAO,KAAK,QAAQ,QAAQ,GAAG,GAAG;AAAA,IACpC,WAAW,KAAK,aAAa,cAAc;AACzC,YAAM,IAAI,IAAI,KAAK,QAAQ,UAAU,mBAAmB,KAAK,QAAQ,EAAE;AACvE,aAAO,KAAK,QAAQ,QAAQ,GAAG,GAAG;AAAA,IACpC;AACA,UAAM,WAAW,KAAK;AACtB,QACE,aAAa,KAAK,aAClB,SAAS,gBAAgB,eACzB,SAAS,mBACT,KAAK,YACL;AACA,YAAM,WAAW,SAAS,QAAQ;AAClC,UAAI,gBAAgB;AACpB,UAAI,KAAK,OAAO,IAAI,QAAQ,GAAG;AAC7B,wBAAgB,KAAK,OAAO,IAAI,QAAQ;AAAA,MAC1C,OAAO;AACL,wBAAgB,eAAe,UAAU,WAAW;AACpD,aAAK,OAAO,IAAI,UAAU,aAAa;AAAA,MACzC;AACA,UAAI,eAAe;AACjB,YAAI;AACF,gBAAM,IAAI,KAAK,YAAY,KAAK,UAAU,eAAe,IAAI,IAAI;AACjE,gBAAM,QAAQ,KAAK,QAAQ,MAAM,UAAU,CAAC;AAC5C,iBAAO;AAAA,YACL;AAAA,YACA,eAAe;AAAA,UACjB;AAAA,QACF,SAAS,GAAG;AAAA,QAEZ;AAAA,MACF;AAAA,IACF;AACA,QAAI;AACJ,QAAI;AACF,UAAI,KAAK,WAAW;AAClB,eAAO,KAAK,UAAU,eAAe,IAAI;AAAA,MAC3C;AACA,UAAI,QAAQ;AACZ,UAAI,UAAU;AACd,UAAI,OAAO;AACX,WAAK,QAAQ,MAAM,UAAU,MAAM,GAAG;AACtC,YAAM,KAAK,QAAQ,KAAK,WAAW;AAAA,IACrC,SAAS,GAAG;AACV,WAAK,QAAQ,QAAQ,GAAG,GAAG;AAAA,IAC7B;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,UAAU,CAAC,UAAU,MAAM,MAAM,CAAC,MAAM;AACtC,QAAI,CAAC,MAAM,UAAU;AACnB,YAAM,IAAI,IAAI,KAAK,QAAQ,UAAU,mBAAmB,QAAQ,IAAI,CAAC,EAAE;AACvE,aAAO,KAAK,QAAQ,QAAQ,GAAG,GAAG;AAAA,IACpC,WAAW,KAAK,aAAa,cAAc;AACzC,YAAM,IAAI,IAAI,KAAK,QAAQ,UAAU,mBAAmB,KAAK,QAAQ,EAAE;AACvE,aAAO,KAAK,QAAQ,QAAQ,GAAG,GAAG;AAAA,IACpC;AACA,UAAM,WAAW,KAAK;AACtB,QACE,aAAa,KAAK,aAClB,SAAS,gBAAgB,eACzB,SAAS,mBACT,KAAK,YACL;AACA,YAAM,WAAW,WAAW,QAAQ;AACpC,UAAI,gBAAgB;AACpB,UAAI,KAAK,OAAO,IAAI,QAAQ,GAAG;AAC7B,wBAAgB,KAAK,OAAO,IAAI,QAAQ;AAAA,MAC1C,OAAO;AACL,wBAAgB,eAAe,UAAU,WAAW;AACpD,aAAK,OAAO,IAAI,UAAU,aAAa;AAAA,MACzC;AACA,UAAI,eAAe;AACjB,YAAI;AACF,gBAAM,IAAI,KAAK,YAAY,KAAK,UAAU,eAAe,IAAI,IAAI;AACjE,gBAAMC,OAAM,KAAK,QAAQ,MAAM,UAAU,CAAC;AAC1C,iBAAOA;AAAA,QACT,SAAS,GAAG;AAAA,QAEZ;AAAA,MACF;AAAA,IACF;AACA,QAAI;AACJ,QAAI;AACF,UAAI,KAAK,WAAW;AAClB,eAAO,KAAK,UAAU,eAAe,IAAI;AAAA,MAC3C;AACA,WAAK,QAAQ,MAAM,UAAU,MAAM,GAAG;AACtC,YAAM,QAAQ,KAAK,QAAQ,KAAK,WAAW;AAC3C,YAAM,MAAM;AAAA,IACd,SAAS,GAAG;AACV,WAAK,QAAQ,QAAQ,GAAG,GAAG;AAAA,IAC7B;AACA,WAAO,CAAC,CAAC;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,UAAU,CAAC,UAAU,MAAM,MAAM,CAAC,MAAM;AACtC,QAAI,CAAC,MAAM,UAAU;AACnB,YAAM,IAAI,IAAI,KAAK,QAAQ,UAAU,mBAAmB,QAAQ,IAAI,CAAC,EAAE;AACvE,aAAO,KAAK,QAAQ,QAAQ,GAAG,GAAG;AAAA,IACpC,WAAW,KAAK,aAAa,cAAc;AACzC,YAAM,IAAI,IAAI,KAAK,QAAQ,UAAU,mBAAmB,KAAK,QAAQ,EAAE;AACvE,aAAO,KAAK,QAAQ,QAAQ,GAAG,GAAG;AAAA,IACpC;AACA,UAAM,WAAW,KAAK;AACtB,QACE,aAAa,KAAK,aAClB,SAAS,gBAAgB,eACzB,SAAS,mBACT,KAAK,YACL;AACA,YAAM,WAAW,WAAW,QAAQ;AACpC,UAAI,gBAAgB;AACpB,UAAI,KAAK,OAAO,IAAI,QAAQ,GAAG;AAC7B,wBAAgB,KAAK,OAAO,IAAI,QAAQ;AAAA,MAC1C,OAAO;AACL,wBAAgB,eAAe,UAAU,aAAa;AACtD,aAAK,OAAO,IAAI,UAAU,aAAa;AAAA,MACzC;AACA,UAAI,eAAe;AACjB,YAAI;AACF,gBAAM,IAAI,KAAK,YAAY,KAAK,UAAU,eAAe,IAAI,IAAI;AACjE,gBAAMA,OAAM,KAAK,QAAQ,QAAQ,UAAU,CAAC;AAC5C,iBAAOA;AAAA,QACT,SAAS,GAAG;AAAA,QAEZ;AAAA,MACF;AAAA,IACF;AACA,QAAI;AACJ,QAAI;AACF,UAAI,KAAK,WAAW;AAClB,eAAO,KAAK,UAAU,eAAe,IAAI;AAAA,MAC3C;AACA,WAAK,QAAQ,MAAM,UAAU,MAAM,GAAG;AACtC,YAAM,QAAQ,KAAK,QAAQ,KAAK,aAAa;AAC7C,UAAI,MAAM,MAAM;AACd,YAAI,UAAU;AACd,eAAO,SAAS;AACd,cAAI,MAAM,IAAI,OAAO,GAAG;AACtB,kBAAM;AACN;AAAA,UACF;AACA,oBAAU,QAAQ;AAAA,QACpB;AAAA,MACF;AAAA,IACF,SAAS,GAAG;AACV,WAAK,QAAQ,QAAQ,GAAG,GAAG;AAAA,IAC7B;AACA,WAAO,OAAO;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,gBAAgB,CAAC,UAAU,MAAM,MAAM,CAAC,MAAM;AAC5C,QAAI,CAAC,MAAM,UAAU;AACnB,YAAM,IAAI,IAAI,KAAK,QAAQ,UAAU,mBAAmB,QAAQ,IAAI,CAAC,EAAE;AACvE,aAAO,KAAK,QAAQ,QAAQ,GAAG,GAAG;AAAA,IACpC;AA6BA,QAAI;AACJ,QAAI;AACF,UAAI,KAAK,WAAW;AAClB,eAAO,KAAK,UAAU,eAAe,IAAI;AAAA,MAC3C;AACA,WAAK,QAAQ,MAAM,UAAU,MAAM,GAAG;AACtC,YAAM,QAAQ,KAAK,QAAQ,KAAK,YAAY;AAC5C,UAAI,MAAM,MAAM;AACd,SAAC,GAAG,IAAI,CAAC,GAAG,KAAK;AAAA,MACnB;AAAA,IACF,SAAS,GAAG;AACV,WAAK,QAAQ,QAAQ,GAAG,GAAG;AAAA,IAC7B;AACA,WAAO,OAAO;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,mBAAmB,CAAC,UAAU,MAAM,MAAM,CAAC,MAAM;AAC/C,QAAI,CAAC,MAAM,UAAU;AACnB,YAAM,IAAI,IAAI,KAAK,QAAQ,UAAU,mBAAmB,QAAQ,IAAI,CAAC,EAAE;AACvE,aAAO,KAAK,QAAQ,QAAQ,GAAG,GAAG;AAAA,IACpC;AACA,UAAM,WACJ,KAAK,aAAa,gBAAgB,OAAO,KAAK;AAChD,QACE,aAAa,KAAK,aAClB,SAAS,gBAAgB,eACzB,SAAS,oBACR,KAAK,aAAa,0BAA0B,CAAC,KAAK,OACnD;AACA,YAAM,WAAW,oBAAoB,QAAQ;AAC7C,UAAI,gBAAgB;AACpB,UAAI,KAAK,OAAO,IAAI,QAAQ,GAAG;AAC7B,wBAAgB,KAAK,OAAO,IAAI,QAAQ;AAAA,MAC1C,OAAO;AACL,wBAAgB,eAAe,UAAU,UAAU;AACnD,aAAK,OAAO,IAAI,UAAU,aAAa;AAAA,MACzC;AACA,UAAI,eAAe;AACjB,YAAI;AACF,gBAAM,IAAI,KAAK,YAAY,KAAK,UAAU,eAAe,IAAI,IAAI;AACjE,gBAAMA,OAAM,KAAK,QAAQ,OAAO,UAAU,CAAC;AAC3C,iBAAOA;AAAA,QACT,SAAS,GAAG;AAAA,QAEZ;AAAA,MACF;AAAA,IACF;AACA,QAAI;AACJ,QAAI;AACF,UAAI,KAAK,WAAW;AAClB,eAAO,KAAK,UAAU,eAAe,IAAI;AAAA,MAC3C;AACA,WAAK,QAAQ,MAAM,UAAU,MAAM,GAAG;AACtC,YAAM,QAAQ,KAAK,QAAQ,KAAK,UAAU;AAC1C,UAAI,MAAM,MAAM;AACd,cAAM,CAAC,GAAG,KAAK;AAAA,MACjB;AAAA,IACF,SAAS,GAAG;AACV,WAAK,QAAQ,QAAQ,GAAG,GAAG;AAAA,IAC7B;AACA,WAAO,OAAO,CAAC;AAAA,EACjB;AACF;","names":["cssTree","isCustomElementName","bidiFactory","nwsapi","KEYS_INPUT_EDIT","selectorBranches","find","res"]}
\ No newline at end of file diff --git a/vanilla/node_modules/@asamuzakjp/dom-selector/dist/cjs/index.d.cts b/vanilla/node_modules/@asamuzakjp/dom-selector/dist/cjs/index.d.cts deleted file mode 100644 index a5a8b10..0000000 --- a/vanilla/node_modules/@asamuzakjp/dom-selector/dist/cjs/index.d.cts +++ /dev/null @@ -1,16 +0,0 @@ -declare class DOMSelector { - constructor(window: Window, document: Document, opt?: object); - clear: () => void; - check: (selector: string, node: Element, opt?: object) => CheckResult; - matches: (selector: string, node: Element, opt?: object) => boolean; - closest: (selector: string, node: Element, opt?: object) => Element | null; - querySelector: (selector: string, node: Document | DocumentFragment | Element, opt?: object) => Element | null; - querySelectorAll: (selector: string, node: Document | DocumentFragment | Element, opt?: object) => Array<Element>; - #private; -} -type CheckResult = { - match: boolean; - pseudoElement: string | null; -}; - -export { type CheckResult, DOMSelector }; diff --git a/vanilla/node_modules/@asamuzakjp/dom-selector/package.json b/vanilla/node_modules/@asamuzakjp/dom-selector/package.json deleted file mode 100644 index 4e8736f..0000000 --- a/vanilla/node_modules/@asamuzakjp/dom-selector/package.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "name": "@asamuzakjp/dom-selector", - "description": "A CSS selector engine.", - "author": "asamuzaK", - "license": "MIT", - "homepage": "https://github.com/asamuzaK/domSelector#readme", - "bugs": { - "url": "https://github.com/asamuzaK/domSelector/issues" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/asamuzaK/domSelector.git" - }, - "files": [ - "dist", - "src", - "types" - ], - "type": "module", - "exports": { - "import": { - "types": "./types/index.d.ts", - "default": "./src/index.js" - }, - "require": { - "types": "./dist/cjs/index.d.cts", - "default": "./dist/cjs/index.cjs" - }, - "default": { - "types": "./dist/cjs/types/index.d.cts", - "default": "./dist/cjs/index.cjs" - } - }, - "types": "types/index.d.ts", - "dependencies": { - "@asamuzakjp/nwsapi": "^2.3.9", - "bidi-js": "^1.0.3", - "css-tree": "^3.1.0", - "is-potential-custom-element-name": "^1.0.1", - "lru-cache": "^11.2.5" - }, - "devDependencies": { - "@types/css-tree": "^2.3.11", - "benchmark": "^2.1.4", - "c8": "^10.1.3", - "chai": "^6.2.2", - "commander": "^14.0.3", - "esbuild": "^0.27.2", - "eslint": "^9.39.2", - "eslint-config-prettier": "^10.1.8", - "eslint-plugin-jsdoc": "^62.5.0", - "eslint-plugin-prettier": "^5.5.5", - "eslint-plugin-regexp": "^3.0.0", - "eslint-plugin-unicorn": "^62.0.0", - "globals": "^17.2.0", - "jsdom": "^27.4.0", - "mocha": "^11.7.5", - "neostandard": "^0.12.2", - "prettier": "^3.8.1", - "sinon": "^21.0.1", - "tsup": "^8.5.1", - "typescript": "^5.9.3", - "wpt-runner": "^6.1.0" - }, - "overrides": { - "jsdom": "$jsdom" - }, - "scripts": { - "bench": "node benchmark/bench.js", - "bench:sizzle": "node benchmark/bench-sizzle.js", - "build": "npm run tsc && npm run lint && npm test && npm run bundle && npm run test:cjs", - "bundle": "tsup src/index.js --format=cjs --platform=node --outDir=dist/cjs/ --sourcemap --dts", - "lint": "eslint --fix .", - "test": "c8 --reporter=text mocha --parallel --exit test/**/*.test.js", - "test:cjs": "mocha --exit test/index.test.cjs", - "test:wpt": "node test/wpt/wpt-runner.js", - "tsc": "node scripts/index clean --dir=types -i && npx tsc", - "update:wpt": "git submodule update --init --recursive --remote" - }, - "version": "6.7.8" -} diff --git a/vanilla/node_modules/@asamuzakjp/dom-selector/src/index.js b/vanilla/node_modules/@asamuzakjp/dom-selector/src/index.js deleted file mode 100644 index 8ec7b67..0000000 --- a/vanilla/node_modules/@asamuzakjp/dom-selector/src/index.js +++ /dev/null @@ -1,353 +0,0 @@ -/*! - * DOM Selector - A CSS selector engine. - * @license MIT - * @copyright asamuzaK (Kazz) - * @see {@link https://github.com/asamuzaK/domSelector/blob/main/LICENSE} - */ - -/* import */ -import { LRUCache } from 'lru-cache'; -import { Finder } from './js/finder.js'; -import { filterSelector, getType, initNwsapi } from './js/utility.js'; - -/* constants */ -import { - DOCUMENT_NODE, - DOCUMENT_FRAGMENT_NODE, - ELEMENT_NODE, - TARGET_ALL, - TARGET_FIRST, - TARGET_LINEAL, - TARGET_SELF -} from './js/constant.js'; -const MAX_CACHE = 1024; - -/** - * @typedef {object} CheckResult - * @property {boolean} match - The match result. - * @property {string?} pseudoElement - The pseudo-element, if any. - */ - -/* DOMSelector */ -export class DOMSelector { - /* private fields */ - #window; - #document; - #finder; - #idlUtils; - #nwsapi; - #cache; - - /** - * Creates an instance of DOMSelector. - * @param {Window} window - The window object. - * @param {Document} document - The document object. - * @param {object} [opt] - Options. - */ - constructor(window, document, opt = {}) { - const { idlUtils } = opt; - this.#window = window; - this.#document = document ?? window.document; - this.#finder = new Finder(window); - this.#idlUtils = idlUtils; - this.#nwsapi = initNwsapi(window, document); - this.#cache = new LRUCache({ - max: MAX_CACHE - }); - } - - /** - * Clears the internal cache of finder results. - * @returns {void} - */ - clear = () => { - this.#finder.clearResults(true); - }; - - /** - * Checks if an element matches a CSS selector. - * @param {string} selector - The CSS selector to check against. - * @param {Element} node - The element node to check. - * @param {object} [opt] - Optional parameters. - * @returns {CheckResult} An object containing the check result. - */ - check = (selector, node, opt = {}) => { - if (!node?.nodeType) { - const e = new this.#window.TypeError(`Unexpected type ${getType(node)}`); - return this.#finder.onError(e, opt); - } else if (node.nodeType !== ELEMENT_NODE) { - const e = new this.#window.TypeError(`Unexpected node ${node.nodeName}`); - return this.#finder.onError(e, opt); - } - const document = node.ownerDocument; - if ( - document === this.#document && - document.contentType === 'text/html' && - document.documentElement && - node.parentNode - ) { - const cacheKey = `check_${selector}`; - let filterMatches = false; - if (this.#cache.has(cacheKey)) { - filterMatches = this.#cache.get(cacheKey); - } else { - filterMatches = filterSelector(selector, TARGET_SELF); - this.#cache.set(cacheKey, filterMatches); - } - if (filterMatches) { - try { - const n = this.#idlUtils ? this.#idlUtils.wrapperForImpl(node) : node; - const match = this.#nwsapi.match(selector, n); - return { - match, - pseudoElement: null - }; - } catch (e) { - // fall through - } - } - } - let res; - try { - if (this.#idlUtils) { - node = this.#idlUtils.wrapperForImpl(node); - } - opt.check = true; - opt.noexept = true; - opt.warn = false; - this.#finder.setup(selector, node, opt); - res = this.#finder.find(TARGET_SELF); - } catch (e) { - this.#finder.onError(e, opt); - } - return res; - }; - - /** - * Returns true if the element matches the selector. - * @param {string} selector - The CSS selector to match against. - * @param {Element} node - The element node to test. - * @param {object} [opt] - Optional parameters. - * @returns {boolean} `true` if the element matches, or `false` otherwise. - */ - matches = (selector, node, opt = {}) => { - if (!node?.nodeType) { - const e = new this.#window.TypeError(`Unexpected type ${getType(node)}`); - return this.#finder.onError(e, opt); - } else if (node.nodeType !== ELEMENT_NODE) { - const e = new this.#window.TypeError(`Unexpected node ${node.nodeName}`); - return this.#finder.onError(e, opt); - } - const document = node.ownerDocument; - if ( - document === this.#document && - document.contentType === 'text/html' && - document.documentElement && - node.parentNode - ) { - const cacheKey = `matches_${selector}`; - let filterMatches = false; - if (this.#cache.has(cacheKey)) { - filterMatches = this.#cache.get(cacheKey); - } else { - filterMatches = filterSelector(selector, TARGET_SELF); - this.#cache.set(cacheKey, filterMatches); - } - if (filterMatches) { - try { - const n = this.#idlUtils ? this.#idlUtils.wrapperForImpl(node) : node; - const res = this.#nwsapi.match(selector, n); - return res; - } catch (e) { - // fall through - } - } - } - let res; - try { - if (this.#idlUtils) { - node = this.#idlUtils.wrapperForImpl(node); - } - this.#finder.setup(selector, node, opt); - const nodes = this.#finder.find(TARGET_SELF); - res = nodes.size; - } catch (e) { - this.#finder.onError(e, opt); - } - return !!res; - }; - - /** - * Traverses up the DOM tree to find the first node that matches the selector. - * @param {string} selector - The CSS selector to match against. - * @param {Element} node - The element from which to start traversing. - * @param {object} [opt] - Optional parameters. - * @returns {?Element} The first matching ancestor element, or `null`. - */ - closest = (selector, node, opt = {}) => { - if (!node?.nodeType) { - const e = new this.#window.TypeError(`Unexpected type ${getType(node)}`); - return this.#finder.onError(e, opt); - } else if (node.nodeType !== ELEMENT_NODE) { - const e = new this.#window.TypeError(`Unexpected node ${node.nodeName}`); - return this.#finder.onError(e, opt); - } - const document = node.ownerDocument; - if ( - document === this.#document && - document.contentType === 'text/html' && - document.documentElement && - node.parentNode - ) { - const cacheKey = `closest_${selector}`; - let filterMatches = false; - if (this.#cache.has(cacheKey)) { - filterMatches = this.#cache.get(cacheKey); - } else { - filterMatches = filterSelector(selector, TARGET_LINEAL); - this.#cache.set(cacheKey, filterMatches); - } - if (filterMatches) { - try { - const n = this.#idlUtils ? this.#idlUtils.wrapperForImpl(node) : node; - const res = this.#nwsapi.closest(selector, n); - return res; - } catch (e) { - // fall through - } - } - } - let res; - try { - if (this.#idlUtils) { - node = this.#idlUtils.wrapperForImpl(node); - } - this.#finder.setup(selector, node, opt); - const nodes = this.#finder.find(TARGET_LINEAL); - if (nodes.size) { - let refNode = node; - while (refNode) { - if (nodes.has(refNode)) { - res = refNode; - break; - } - refNode = refNode.parentNode; - } - } - } catch (e) { - this.#finder.onError(e, opt); - } - return res ?? null; - }; - - /** - * Returns the first element within the subtree that matches the selector. - * @param {string} selector - The CSS selector to match. - * @param {Document|DocumentFragment|Element} node - The node to find within. - * @param {object} [opt] - Optional parameters. - * @returns {?Element} The first matching element, or `null`. - */ - querySelector = (selector, node, opt = {}) => { - if (!node?.nodeType) { - const e = new this.#window.TypeError(`Unexpected type ${getType(node)}`); - return this.#finder.onError(e, opt); - } - /* - const document = - node.nodeType === DOCUMENT_NODE ? node : node.ownerDocument; - if ( - document === this.#document && - document.contentType === 'text/html' && - document.documentElement && - (node.nodeType !== DOCUMENT_FRAGMENT_NODE || !node.host) - ) { - const cacheKey = `querySelector_${selector}`; - let filterMatches = false; - if (this.#cache.has(cacheKey)) { - filterMatches = this.#cache.get(cacheKey); - } else { - filterMatches = filterSelector(selector, TARGET_FIRST); - this.#cache.set(cacheKey, filterMatches); - } - if (filterMatches) { - try { - const n = this.#idlUtils ? this.#idlUtils.wrapperForImpl(node) : node; - const res = this.#nwsapi.first(selector, n); - return res; - } catch (e) { - // fall through - } - } - } - */ - let res; - try { - if (this.#idlUtils) { - node = this.#idlUtils.wrapperForImpl(node); - } - this.#finder.setup(selector, node, opt); - const nodes = this.#finder.find(TARGET_FIRST); - if (nodes.size) { - [res] = [...nodes]; - } - } catch (e) { - this.#finder.onError(e, opt); - } - return res ?? null; - }; - - /** - * Returns an array of elements within the subtree that match the selector. - * Note: This method returns an Array, not a NodeList. - * @param {string} selector - The CSS selector to match. - * @param {Document|DocumentFragment|Element} node - The node to find within. - * @param {object} [opt] - Optional parameters. - * @returns {Array<Element>} An array of elements, or an empty array. - */ - querySelectorAll = (selector, node, opt = {}) => { - if (!node?.nodeType) { - const e = new this.#window.TypeError(`Unexpected type ${getType(node)}`); - return this.#finder.onError(e, opt); - } - const document = - node.nodeType === DOCUMENT_NODE ? node : node.ownerDocument; - if ( - document === this.#document && - document.contentType === 'text/html' && - document.documentElement && - (node.nodeType !== DOCUMENT_FRAGMENT_NODE || !node.host) - ) { - const cacheKey = `querySelectorAll_${selector}`; - let filterMatches = false; - if (this.#cache.has(cacheKey)) { - filterMatches = this.#cache.get(cacheKey); - } else { - filterMatches = filterSelector(selector, TARGET_ALL); - this.#cache.set(cacheKey, filterMatches); - } - if (filterMatches) { - try { - const n = this.#idlUtils ? this.#idlUtils.wrapperForImpl(node) : node; - const res = this.#nwsapi.select(selector, n); - return res; - } catch (e) { - // fall through - } - } - } - let res; - try { - if (this.#idlUtils) { - node = this.#idlUtils.wrapperForImpl(node); - } - this.#finder.setup(selector, node, opt); - const nodes = this.#finder.find(TARGET_ALL); - if (nodes.size) { - res = [...nodes]; - } - } catch (e) { - this.#finder.onError(e, opt); - } - return res ?? []; - }; -} diff --git a/vanilla/node_modules/@asamuzakjp/dom-selector/src/js/constant.js b/vanilla/node_modules/@asamuzakjp/dom-selector/src/js/constant.js deleted file mode 100644 index 02986ec..0000000 --- a/vanilla/node_modules/@asamuzakjp/dom-selector/src/js/constant.js +++ /dev/null @@ -1,129 +0,0 @@ -/** - * constant.js - */ - -/* string */ -export const ATRULE = 'Atrule'; -export const ATTR_SELECTOR = 'AttributeSelector'; -export const CLASS_SELECTOR = 'ClassSelector'; -export const COMBINATOR = 'Combinator'; -export const IDENT = 'Identifier'; -export const ID_SELECTOR = 'IdSelector'; -export const NOT_SUPPORTED_ERR = 'NotSupportedError'; -export const NTH = 'Nth'; -export const OPERATOR = 'Operator'; -export const PS_CLASS_SELECTOR = 'PseudoClassSelector'; -export const PS_ELEMENT_SELECTOR = 'PseudoElementSelector'; -export const RULE = 'Rule'; -export const SCOPE = 'Scope'; -export const SELECTOR = 'Selector'; -export const SELECTOR_LIST = 'SelectorList'; -export const STRING = 'String'; -export const SYNTAX_ERR = 'SyntaxError'; -export const TARGET_ALL = 'all'; -export const TARGET_FIRST = 'first'; -export const TARGET_LINEAL = 'lineal'; -export const TARGET_SELF = 'self'; -export const TYPE_SELECTOR = 'TypeSelector'; - -/* numeric */ -export const BIT_01 = 1; -export const BIT_02 = 2; -export const BIT_04 = 4; -export const BIT_08 = 8; -export const BIT_16 = 0x10; -export const BIT_32 = 0x20; -export const BIT_FFFF = 0xffff; -export const DUO = 2; -export const HEX = 16; -export const TYPE_FROM = 8; -export const TYPE_TO = -1; - -/* Node */ -export const ELEMENT_NODE = 1; -export const TEXT_NODE = 3; -export const DOCUMENT_NODE = 9; -export const DOCUMENT_FRAGMENT_NODE = 11; -export const DOCUMENT_POSITION_PRECEDING = 2; -export const DOCUMENT_POSITION_CONTAINS = 8; -export const DOCUMENT_POSITION_CONTAINED_BY = 0x10; - -/* NodeFilter */ -export const SHOW_ALL = 0xffffffff; -export const SHOW_CONTAINER = 0x501; -export const SHOW_DOCUMENT = 0x100; -export const SHOW_DOCUMENT_FRAGMENT = 0x400; -export const SHOW_ELEMENT = 1; - -/* selectors */ -export const ALPHA_NUM = '[A-Z\\d]+'; -export const CHILD_IDX = '(?:first|last|only)-(?:child|of-type)'; -export const DIGIT = '(?:0|[1-9]\\d*)'; -export const LANG_PART = `(?:-${ALPHA_NUM})*`; -export const PSEUDO_CLASS = `(?:any-)?link|${CHILD_IDX}|checked|empty|indeterminate|read-(?:only|write)|target`; -export const ANB = `[+-]?(?:${DIGIT}n?|n)|(?:[+-]?${DIGIT})?n\\s*[+-]\\s*${DIGIT}`; -// combinators -export const COMBO = '\\s?[\\s>~+]\\s?'; -export const DESCEND = '\\s?[\\s>]\\s?'; -export const SIBLING = '\\s?[+~]\\s?'; -// LOGIC_IS: :is() -export const LOGIC_IS = `:is\\(\\s*[^)]+\\s*\\)`; -// N_TH: excludes An+B with selector list, e.g. :nth-child(2n+1 of .foo) -export const N_TH = `nth-(?:last-)?(?:child|of-type)\\(\\s*(?:even|odd|${ANB})\\s*\\)`; -// SUB_TYPE: attr, id, class, pseudo-class, note that [foo|=bar] is excluded -export const SUB_TYPE = '\\[[^|\\]]+\\]|[#.:][\\w-]+'; -export const SUB_TYPE_WO_PSEUDO = '\\[[^|\\]]+\\]|[#.][\\w-]+'; -// TAG_TYPE: *, tag -export const TAG_TYPE = '\\*|[A-Za-z][\\w-]*'; -export const TAG_TYPE_I = '\\*|[A-Z][\\w-]*'; -export const COMPOUND = `(?:${TAG_TYPE}|(?:${TAG_TYPE})?(?:${SUB_TYPE})+)`; -export const COMPOUND_L = `(?:${TAG_TYPE}|(?:${TAG_TYPE})?(?:${SUB_TYPE}|${LOGIC_IS})+)`; -export const COMPOUND_I = `(?:${TAG_TYPE_I}|(?:${TAG_TYPE_I})?(?:${SUB_TYPE})+)`; -export const COMPOUND_WO_PSEUDO = `(?:${TAG_TYPE}|(?:${TAG_TYPE})?(?:${SUB_TYPE_WO_PSEUDO})+)`; -export const COMPLEX = `${COMPOUND}(?:${COMBO}${COMPOUND})*`; -export const COMPLEX_L = `${COMPOUND_L}(?:${COMBO}${COMPOUND_L})*`; -export const HAS_COMPOUND = `has\\([\\s>]?\\s*${COMPOUND_WO_PSEUDO}\\s*\\)`; -export const LOGIC_COMPOUND = `(?:is|not)\\(\\s*${COMPOUND_L}(?:\\s*,\\s*${COMPOUND_L})*\\s*\\)`; -export const LOGIC_COMPLEX = `(?:is|not)\\(\\s*${COMPLEX_L}(?:\\s*,\\s*${COMPLEX_L})*\\s*\\)`; - -/* forms and input types */ -export const FORM_PARTS = Object.freeze([ - 'button', - 'input', - 'select', - 'textarea' -]); -export const INPUT_BUTTON = Object.freeze(['button', 'reset', 'submit']); -export const INPUT_CHECK = Object.freeze(['checkbox', 'radio']); -export const INPUT_DATE = Object.freeze([ - 'date', - 'datetime-local', - 'month', - 'time', - 'week' -]); -export const INPUT_TEXT = Object.freeze([ - 'email', - 'password', - 'search', - 'tel', - 'text', - 'url' -]); -export const INPUT_EDIT = Object.freeze([ - ...INPUT_DATE, - ...INPUT_TEXT, - 'number' -]); -export const INPUT_LTR = Object.freeze([ - ...INPUT_CHECK, - 'color', - 'date', - 'image', - 'number', - 'range', - 'time' -]); - -/* logical combination pseudo-classes */ -export const KEYS_LOGICAL = new Set(['has', 'is', 'not', 'where']); diff --git a/vanilla/node_modules/@asamuzakjp/dom-selector/src/js/finder.js b/vanilla/node_modules/@asamuzakjp/dom-selector/src/js/finder.js deleted file mode 100644 index 05538d7..0000000 --- a/vanilla/node_modules/@asamuzakjp/dom-selector/src/js/finder.js +++ /dev/null @@ -1,3122 +0,0 @@ -/** - * finder.js - */ - -/* import */ -import { - matchAttributeSelector, - matchDirectionPseudoClass, - matchDisabledPseudoClass, - matchLanguagePseudoClass, - matchPseudoElementSelector, - matchReadOnlyPseudoClass, - matchTypeSelector -} from './matcher.js'; -import { - findAST, - generateCSS, - parseSelector, - sortAST, - unescapeSelector, - walkAST -} from './parser.js'; -import { - filterNodesByAnB, - findLogicalWithNestedHas, - generateException, - isCustomElement, - isFocusVisible, - isFocusableArea, - isVisible, - resolveContent, - sortNodes, - traverseNode -} from './utility.js'; - -/* constants */ -import { - ATTR_SELECTOR, - CLASS_SELECTOR, - COMBINATOR, - DOCUMENT_FRAGMENT_NODE, - ELEMENT_NODE, - FORM_PARTS, - ID_SELECTOR, - INPUT_CHECK, - INPUT_DATE, - INPUT_EDIT, - INPUT_TEXT, - KEYS_LOGICAL, - NOT_SUPPORTED_ERR, - PS_CLASS_SELECTOR, - PS_ELEMENT_SELECTOR, - SHOW_ALL, - SHOW_CONTAINER, - SYNTAX_ERR, - TARGET_ALL, - TARGET_FIRST, - TARGET_LINEAL, - TARGET_SELF, - TEXT_NODE, - TYPE_SELECTOR -} from './constant.js'; -const DIR_NEXT = 'next'; -const DIR_PREV = 'prev'; -const KEYS_FORM = new Set([...FORM_PARTS, 'fieldset', 'form']); -const KEYS_FORM_PS_VALID = new Set([...FORM_PARTS, 'form']); -const KEYS_INPUT_CHECK = new Set(INPUT_CHECK); -const KEYS_INPUT_PLACEHOLDER = new Set([...INPUT_TEXT, 'number']); -const KEYS_INPUT_RANGE = new Set([...INPUT_DATE, 'number', 'range']); -const KEYS_INPUT_REQUIRED = new Set([...INPUT_CHECK, ...INPUT_EDIT, 'file']); -const KEYS_INPUT_RESET = new Set(['button', 'reset']); -const KEYS_INPUT_SUBMIT = new Set(['image', 'submit']); -const KEYS_MODIFIER = new Set([ - 'Alt', - 'AltGraph', - 'CapsLock', - 'Control', - 'Fn', - 'FnLock', - 'Hyper', - 'Meta', - 'NumLock', - 'ScrollLock', - 'Shift', - 'Super', - 'Symbol', - 'SymbolLock' -]); -const KEYS_PS_UNCACHE = new Set([ - 'any-link', - 'defined', - 'dir', - 'link', - 'scope' -]); -const KEYS_PS_NTH_OF_TYPE = new Set([ - 'first-of-type', - 'last-of-type', - 'only-of-type' -]); - -/** - * Finder - * NOTE: #ast[i] corresponds to #nodes[i] - */ -export class Finder { - /* private fields */ - #ast; - #astCache; - #check; - #descendant; - #document; - #documentCache; - #documentURL; - #event; - #eventHandlers; - #focus; - #invalidate; - #invalidateResults; - #lastFocusVisible; - #node; - #nodeWalker; - #nodes; - #noexcept; - #pseudoElement; - #results; - #root; - #rootWalker; - #scoped; - #selector; - #shadow; - #verifyShadowHost; - #walkers; - #warn; - #window; - - /** - * constructor - * @param {object} window - The window object. - */ - constructor(window) { - this.#window = window; - this.#astCache = new WeakMap(); - this.#documentCache = new WeakMap(); - this.#event = null; - this.#focus = null; - this.#lastFocusVisible = null; - this.#eventHandlers = new Set([ - { - keys: ['focus', 'focusin'], - handler: this._handleFocusEvent - }, - { - keys: ['keydown', 'keyup'], - handler: this._handleKeyboardEvent - }, - { - keys: ['mouseover', 'mousedown', 'mouseup', 'click', 'mouseout'], - handler: this._handleMouseEvent - } - ]); - this._registerEventListeners(); - this.clearResults(true); - } - - /** - * Handles errors. - * @param {Error} e - The error object. - * @param {object} [opt] - Options. - * @param {boolean} [opt.noexcept] - If true, exceptions are not thrown. - * @throws {Error} Throws an error. - * @returns {void} - */ - onError = (e, opt = {}) => { - const noexcept = opt.noexcept ?? this.#noexcept; - if (noexcept) { - return; - } - const isDOMException = - e instanceof DOMException || e instanceof this.#window.DOMException; - if (isDOMException) { - if (e.name === NOT_SUPPORTED_ERR) { - if (this.#warn) { - console.warn(e.message); - } - return; - } - throw new this.#window.DOMException(e.message, e.name); - } - if (e.name in this.#window) { - throw new this.#window[e.name](e.message, { cause: e }); - } - throw e; - }; - - /** - * Sets up the finder. - * @param {string} selector - The CSS selector. - * @param {object} node - Document, DocumentFragment, or Element. - * @param {object} [opt] - Options. - * @param {boolean} [opt.check] - Indicates if running in internal check(). - * @param {boolean} [opt.noexcept] - If true, exceptions are not thrown. - * @param {boolean} [opt.warn] - If true, console warnings are enabled. - * @returns {object} The finder instance. - */ - setup = (selector, node, opt = {}) => { - const { check, noexcept, warn } = opt; - this.#check = !!check; - this.#noexcept = !!noexcept; - this.#warn = !!warn; - [this.#document, this.#root, this.#shadow] = resolveContent(node); - this.#documentURL = null; - this.#node = node; - this.#scoped = - this.#node !== this.#root && this.#node.nodeType === ELEMENT_NODE; - this.#selector = selector; - [this.#ast, this.#nodes] = this._correspond(selector); - this.#pseudoElement = []; - this.#walkers = new WeakMap(); - this.#nodeWalker = null; - this.#rootWalker = null; - this.#verifyShadowHost = null; - this.clearResults(); - return this; - }; - - /** - * Clear cached results. - * @param {boolean} all - clear all results - * @returns {void} - */ - clearResults = (all = false) => { - this.#invalidateResults = new WeakMap(); - if (all) { - this.#results = new WeakMap(); - } - }; - - /** - * Handles focus events. - * @private - * @param {Event} evt - The event object. - * @returns {void} - */ - _handleFocusEvent = evt => { - this.#focus = evt; - }; - - /** - * Handles keyboard events. - * @private - * @param {Event} evt - The event object. - * @returns {void} - */ - _handleKeyboardEvent = evt => { - const { key } = evt; - if (!KEYS_MODIFIER.has(key)) { - this.#event = evt; - } - }; - - /** - * Handles mouse events. - * @private - * @param {Event} evt - The event object. - * @returns {void} - */ - _handleMouseEvent = evt => { - this.#event = evt; - }; - - /** - * Registers event listeners. - * @private - * @returns {Array.<void>} An array of return values from addEventListener. - */ - _registerEventListeners = () => { - const opt = { - capture: true, - passive: true - }; - const func = []; - for (const eventHandler of this.#eventHandlers) { - const { keys, handler } = eventHandler; - const l = keys.length; - for (let i = 0; i < l; i++) { - const key = keys[i]; - func.push(this.#window.addEventListener(key, handler, opt)); - } - } - return func; - }; - - /** - * Processes selector branches into the internal AST structure. - * @private - * @param {Array.<Array.<object>>} branches - The branches from walkAST. - * @param {string} selector - The original selector for error reporting. - * @returns {{ast: Array, descendant: boolean}} - * An object with the AST, descendant flag. - */ - _processSelectorBranches = (branches, selector) => { - let descendant = false; - const ast = []; - const l = branches.length; - for (let i = 0; i < l; i++) { - const items = [...branches[i]]; - const branch = []; - let item = items.shift(); - if (item && item.type !== COMBINATOR) { - const leaves = new Set(); - while (item) { - if (item.type === COMBINATOR) { - const [nextItem] = items; - if (!nextItem || nextItem.type === COMBINATOR) { - const msg = `Invalid selector ${selector}`; - this.onError(generateException(msg, SYNTAX_ERR, this.#window)); - // Stop processing on invalid selector. - return { ast: [], descendant: false, invalidate: false }; - } - if (item.name === ' ' || item.name === '>') { - descendant = true; - } - branch.push({ combo: item, leaves: sortAST(leaves) }); - leaves.clear(); - } else { - if (item.name && typeof item.name === 'string') { - const unescapedName = unescapeSelector(item.name); - if (unescapedName !== item.name) { - item.name = unescapedName; - } - if (/[|:]/.test(unescapedName)) { - item.namespace = true; - } - } - leaves.add(item); - } - if (items.length) { - item = items.shift(); - } else { - branch.push({ combo: null, leaves: sortAST(leaves) }); - leaves.clear(); - break; - } - } - } - ast.push({ branch, dir: null, filtered: false, find: false }); - } - return { ast, descendant }; - }; - - /** - * Corresponds AST and nodes. - * @private - * @param {string} selector - The CSS selector. - * @returns {Array.<Array.<object>>} An array with the AST and nodes. - */ - _correspond = selector => { - const nodes = []; - this.#descendant = false; - this.#invalidate = false; - let ast; - if (this.#documentCache.has(this.#document)) { - const cachedItem = this.#documentCache.get(this.#document); - if (cachedItem && cachedItem.has(`${selector}`)) { - const item = cachedItem.get(`${selector}`); - ast = item.ast; - this.#descendant = item.descendant; - this.#invalidate = item.invalidate; - } - } - if (ast) { - const l = ast.length; - for (let i = 0; i < l; i++) { - ast[i].dir = null; - ast[i].filtered = false; - ast[i].find = false; - nodes[i] = []; - } - } else { - let cssAst; - try { - cssAst = parseSelector(selector); - } catch (e) { - return this.onError(e); - } - const { branches, info } = walkAST(cssAst); - const { - hasHasPseudoFunc, - hasLogicalPseudoFunc, - hasNthChildOfSelector, - hasStatePseudoClass - } = info; - this.#invalidate = - hasHasPseudoFunc || - hasStatePseudoClass || - !!(hasLogicalPseudoFunc && hasNthChildOfSelector); - const processed = this._processSelectorBranches(branches, selector); - ast = processed.ast; - this.#descendant = processed.descendant; - let cachedItem; - if (this.#documentCache.has(this.#document)) { - cachedItem = this.#documentCache.get(this.#document); - } else { - cachedItem = new Map(); - } - cachedItem.set(`${selector}`, { - ast, - descendant: this.#descendant, - invalidate: this.#invalidate - }); - this.#documentCache.set(this.#document, cachedItem); - // Initialize nodes array for each branch. - for (let i = 0; i < ast.length; i++) { - nodes[i] = []; - } - } - return [ast, nodes]; - }; - - /** - * Creates a TreeWalker. - * @private - * @param {object} node - The Document, DocumentFragment, or Element node. - * @param {object} [opt] - Options. - * @param {boolean} [opt.force] - Force creation of a new TreeWalker. - * @param {number} [opt.whatToShow] - The NodeFilter whatToShow value. - * @returns {object} The TreeWalker object. - */ - _createTreeWalker = (node, opt = {}) => { - const { force = false, whatToShow = SHOW_CONTAINER } = opt; - if (force) { - return this.#document.createTreeWalker(node, whatToShow); - } else if (this.#walkers.has(node)) { - return this.#walkers.get(node); - } - const walker = this.#document.createTreeWalker(node, whatToShow); - this.#walkers.set(node, walker); - return walker; - }; - - /** - * Gets selector branches from cache or parses them. - * @private - * @param {object} selector - The AST. - * @returns {Array.<Array.<object>>} The selector branches. - */ - _getSelectorBranches = selector => { - if (this.#astCache.has(selector)) { - return this.#astCache.get(selector); - } - const { branches } = walkAST(selector); - this.#astCache.set(selector, branches); - return branches; - }; - - /** - * Gets the children of a node, optionally filtered by a selector. - * @private - * @param {object} parentNode - The parent element. - * @param {Array.<Array.<object>>} selectorBranches - The selector branches. - * @param {object} [opt] - Options. - * @returns {Array.<object>} An array of child nodes. - */ - _getFilteredChildren = (parentNode, selectorBranches, opt = {}) => { - const children = []; - const walker = this._createTreeWalker(parentNode, { force: true }); - let childNode = walker.firstChild(); - while (childNode) { - if (selectorBranches) { - if (isVisible(childNode)) { - let isMatch = false; - const l = selectorBranches.length; - for (let i = 0; i < l; i++) { - const leaves = selectorBranches[i]; - if (this._matchLeaves(leaves, childNode, opt)) { - isMatch = true; - break; - } - } - if (isMatch) { - children.push(childNode); - } - } - } else { - children.push(childNode); - } - childNode = walker.nextSibling(); - } - return children; - }; - - /** - * Collects nth-child nodes. - * @private - * @param {object} anb - An+B options. - * @param {number} anb.a - The 'a' value. - * @param {number} anb.b - The 'b' value. - * @param {boolean} [anb.reverse] - If true, reverses the order. - * @param {object} [anb.selector] - The AST. - * @param {object} node - The Element node. - * @param {object} [opt] - Options. - * @returns {Set.<object>} A collection of matched nodes. - */ - _collectNthChild = (anb, node, opt = {}) => { - const { a, b, selector } = anb; - const { parentNode } = node; - if (!parentNode) { - const matchedNode = new Set(); - if (node === this.#root && a * 1 + b * 1 === 1) { - if (selector) { - const selectorBranches = this._getSelectorBranches(selector); - const l = selectorBranches.length; - for (let i = 0; i < l; i++) { - const leaves = selectorBranches[i]; - if (this._matchLeaves(leaves, node, opt)) { - matchedNode.add(node); - break; - } - } - } else { - matchedNode.add(node); - } - } - return matchedNode; - } - const selectorBranches = selector - ? this._getSelectorBranches(selector) - : null; - const children = this._getFilteredChildren( - parentNode, - selectorBranches, - opt - ); - const matchedNodes = filterNodesByAnB(children, anb); - return new Set(matchedNodes); - }; - - /** - * Collects nth-of-type nodes. - * @private - * @param {object} anb - An+B options. - * @param {number} anb.a - The 'a' value. - * @param {number} anb.b - The 'b' value. - * @param {boolean} [anb.reverse] - If true, reverses the order. - * @param {object} node - The Element node. - * @returns {Set.<object>} A collection of matched nodes. - */ - _collectNthOfType = (anb, node) => { - const { parentNode } = node; - if (!parentNode) { - if (node === this.#root && anb.a * 1 + anb.b * 1 === 1) { - return new Set([node]); - } - return new Set(); - } - const typedSiblings = []; - const walker = this._createTreeWalker(parentNode, { force: true }); - let sibling = walker.firstChild(); - while (sibling) { - if ( - sibling.localName === node.localName && - sibling.namespaceURI === node.namespaceURI && - sibling.prefix === node.prefix - ) { - typedSiblings.push(sibling); - } - sibling = walker.nextSibling(); - } - const matchedNodes = filterNodesByAnB(typedSiblings, anb); - return new Set(matchedNodes); - }; - - /** - * Matches An+B. - * @private - * @param {object} ast - The AST. - * @param {object} node - The Element node. - * @param {string} nthName - The name of the nth pseudo-class. - * @param {object} [opt] - Options. - * @returns {Set.<object>} A collection of matched nodes. - */ - _matchAnPlusB = (ast, node, nthName, opt = {}) => { - const { - nth: { a, b, name: nthIdentName }, - selector - } = ast; - const anbMap = new Map(); - if (nthIdentName) { - if (nthIdentName === 'even') { - anbMap.set('a', 2); - anbMap.set('b', 0); - } else if (nthIdentName === 'odd') { - anbMap.set('a', 2); - anbMap.set('b', 1); - } - if (nthName.indexOf('last') > -1) { - anbMap.set('reverse', true); - } - } else { - if (typeof a === 'string' && /-?\d+/.test(a)) { - anbMap.set('a', a * 1); - } else { - anbMap.set('a', 0); - } - if (typeof b === 'string' && /-?\d+/.test(b)) { - anbMap.set('b', b * 1); - } else { - anbMap.set('b', 0); - } - if (nthName.indexOf('last') > -1) { - anbMap.set('reverse', true); - } - } - if (nthName === 'nth-child' || nthName === 'nth-last-child') { - if (selector) { - anbMap.set('selector', selector); - } - const anb = Object.fromEntries(anbMap); - const nodes = this._collectNthChild(anb, node, opt); - return nodes; - } else if (nthName === 'nth-of-type' || nthName === 'nth-last-of-type') { - const anb = Object.fromEntries(anbMap); - const nodes = this._collectNthOfType(anb, node); - return nodes; - } - return new Set(); - }; - - /** - * Matches the :has() pseudo-class function. - * @private - * @param {Array.<object>} astLeaves - The AST leaves. - * @param {object} node - The Element node. - * @param {object} [opt] - Options. - * @returns {boolean} The result. - */ - _matchHasPseudoFunc = (astLeaves, node, opt = {}) => { - if (Array.isArray(astLeaves) && astLeaves.length) { - // Prepare a copy to avoid astLeaves being consumed. - const leaves = [...astLeaves]; - const [leaf] = leaves; - const { type: leafType } = leaf; - let combo; - if (leafType === COMBINATOR) { - combo = leaves.shift(); - } else { - combo = { - name: ' ', - type: COMBINATOR - }; - } - const twigLeaves = []; - while (leaves.length) { - const [item] = leaves; - const { type: itemType } = item; - if (itemType === COMBINATOR) { - break; - } else { - twigLeaves.push(leaves.shift()); - } - } - const twig = { - combo, - leaves: twigLeaves - }; - opt.dir = DIR_NEXT; - const nodes = this._matchCombinator(twig, node, opt); - if (nodes.size) { - if (leaves.length) { - let bool = false; - for (const nextNode of nodes) { - bool = this._matchHasPseudoFunc(leaves, nextNode, opt); - if (bool) { - break; - } - } - return bool; - } - return true; - } - } - return false; - }; - - /** - * Evaluates the :has() pseudo-class. - * @private - * @param {object} astData - The AST data. - * @param {object} node - The Element node. - * @param {object} [opt] - Options. - * @returns {?object} The matched node. - */ - _evaluateHasPseudo = (astData, node, opt) => { - const { branches } = astData; - let bool = false; - const l = branches.length; - for (let i = 0; i < l; i++) { - const leaves = branches[i]; - bool = this._matchHasPseudoFunc(leaves, node, opt); - if (bool) { - break; - } - } - if (!bool) { - return null; - } - if ( - (opt.isShadowRoot || this.#shadow) && - node.nodeType === DOCUMENT_FRAGMENT_NODE - ) { - return this.#verifyShadowHost ? node : null; - } - return node; - }; - - /** - * Matches logical pseudo-class functions. - * @private - * @param {object} astData - The AST data. - * @param {object} node - The Element node. - * @param {object} [opt] - Options. - * @returns {?object} The matched node. - */ - _matchLogicalPseudoFunc = (astData, node, opt = {}) => { - const { astName, branches, twigBranches } = astData; - // Handle :has(). - if (astName === 'has') { - return this._evaluateHasPseudo(astData, node, opt); - } - // Handle :is(), :not(), :where(). - const isShadowRoot = - (opt.isShadowRoot || this.#shadow) && - node.nodeType === DOCUMENT_FRAGMENT_NODE; - // Check for invalid shadow root. - if (isShadowRoot) { - let invalid = false; - for (const branch of branches) { - if (branch.length > 1) { - invalid = true; - break; - } else if (astName === 'not') { - const [{ type: childAstType }] = branch; - if (childAstType !== PS_CLASS_SELECTOR) { - invalid = true; - break; - } - } - } - if (invalid) { - return null; - } - } - opt.forgive = astName === 'is' || astName === 'where'; - const l = twigBranches.length; - let bool; - for (let i = 0; i < l; i++) { - const branch = twigBranches[i]; - const lastIndex = branch.length - 1; - const { leaves } = branch[lastIndex]; - bool = this._matchLeaves(leaves, node, opt); - if (bool && lastIndex > 0) { - let nextNodes = new Set([node]); - for (let j = lastIndex - 1; j >= 0; j--) { - const twig = branch[j]; - const arr = []; - opt.dir = DIR_PREV; - for (const nextNode of nextNodes) { - const m = this._matchCombinator(twig, nextNode, opt); - if (m.size) { - arr.push(...m); - } - } - if (arr.length) { - if (j === 0) { - bool = true; - } else { - nextNodes = new Set(arr); - } - } else { - bool = false; - break; - } - } - } - if (bool) { - break; - } - } - if (astName === 'not') { - if (bool) { - return null; - } - return node; - } else if (bool) { - return node; - } - return null; - }; - - /** - * match pseudo-class selector - * @private - * @see https://html.spec.whatwg.org/#pseudo-classes - * @param {object} ast - AST - * @param {object} node - Element node - * @param {object} [opt] - options - * @returns {Set.<object>} - collection of matched nodes - */ - _matchPseudoClassSelector(ast, node, opt = {}) { - const { children: astChildren, name: astName } = ast; - const { localName, parentNode } = node; - const { forgive, warn = this.#warn } = opt; - const matched = new Set(); - // :has(), :is(), :not(), :where() - if (Array.isArray(astChildren) && KEYS_LOGICAL.has(astName)) { - if (!astChildren.length && astName !== 'is' && astName !== 'where') { - const css = generateCSS(ast); - const msg = `Invalid selector ${css}`; - return this.onError(generateException(msg, SYNTAX_ERR, this.#window)); - } - let astData; - if (this.#astCache.has(ast)) { - astData = this.#astCache.get(ast); - } else { - const { branches } = walkAST(ast); - if (astName === 'has') { - // Check for nested :has(). - let forgiven = false; - const l = astChildren.length; - for (let i = 0; i < l; i++) { - const child = astChildren[i]; - const item = findAST(child, findLogicalWithNestedHas); - if (item) { - const itemName = item.name; - if (itemName === 'is' || itemName === 'where') { - forgiven = true; - break; - } else { - const css = generateCSS(ast); - const msg = `Invalid selector ${css}`; - return this.onError( - generateException(msg, SYNTAX_ERR, this.#window) - ); - } - } - } - if (forgiven) { - return matched; - } - astData = { - astName, - branches - }; - } else { - const twigBranches = []; - const l = branches.length; - for (let i = 0; i < l; i++) { - const [...leaves] = branches[i]; - const branch = []; - const leavesSet = new Set(); - let item = leaves.shift(); - while (item) { - if (item.type === COMBINATOR) { - branch.push({ - combo: item, - leaves: [...leavesSet] - }); - leavesSet.clear(); - } else if (item) { - leavesSet.add(item); - } - if (leaves.length) { - item = leaves.shift(); - } else { - branch.push({ - combo: null, - leaves: [...leavesSet] - }); - leavesSet.clear(); - break; - } - } - twigBranches.push(branch); - } - astData = { - astName, - branches, - twigBranches - }; - this.#astCache.set(ast, astData); - } - } - const res = this._matchLogicalPseudoFunc(astData, node, opt); - if (res) { - matched.add(res); - } - } else if (Array.isArray(astChildren)) { - // :nth-child(), :nth-last-child(), nth-of-type(), :nth-last-of-type() - if (/^nth-(?:last-)?(?:child|of-type)$/.test(astName)) { - if (astChildren.length !== 1) { - const css = generateCSS(ast); - return this.onError( - generateException( - `Invalid selector ${css}`, - SYNTAX_ERR, - this.#window - ) - ); - } - const [branch] = astChildren; - const nodes = this._matchAnPlusB(branch, node, astName, opt); - return nodes; - } else { - switch (astName) { - // :dir() - case 'dir': { - if (astChildren.length !== 1) { - const css = generateCSS(ast); - return this.onError( - generateException( - `Invalid selector ${css}`, - SYNTAX_ERR, - this.#window - ) - ); - } - const [astChild] = astChildren; - const res = matchDirectionPseudoClass(astChild, node); - if (res) { - matched.add(node); - } - break; - } - // :lang() - case 'lang': { - if (!astChildren.length) { - const css = generateCSS(ast); - return this.onError( - generateException( - `Invalid selector ${css}`, - SYNTAX_ERR, - this.#window - ) - ); - } - let bool; - for (const astChild of astChildren) { - bool = matchLanguagePseudoClass(astChild, node); - if (bool) { - break; - } - } - if (bool) { - matched.add(node); - } - break; - } - // :state() - case 'state': { - if (isCustomElement(node)) { - const [{ value: stateValue }] = astChildren; - if (stateValue) { - if (node[stateValue]) { - matched.add(node); - } else { - for (const i in node) { - const prop = node[i]; - if (prop instanceof this.#window.ElementInternals) { - if (prop?.states?.has(stateValue)) { - matched.add(node); - } - break; - } - } - } - } - } - break; - } - case 'current': - case 'heading': - case 'nth-col': - case 'nth-last-col': { - if (warn) { - this.onError( - generateException( - `Unsupported pseudo-class :${astName}()`, - NOT_SUPPORTED_ERR, - this.#window - ) - ); - } - break; - } - // Ignore :host() and :host-context(). - case 'host': - case 'host-context': { - break; - } - // Deprecated in CSS Selectors 3. - case 'contains': { - if (warn) { - this.onError( - generateException( - `Unknown pseudo-class :${astName}()`, - NOT_SUPPORTED_ERR, - this.#window - ) - ); - } - break; - } - default: { - if (!forgive) { - this.onError( - generateException( - `Unknown pseudo-class :${astName}()`, - SYNTAX_ERR, - this.#window - ) - ); - } - } - } - } - } else if (KEYS_PS_NTH_OF_TYPE.has(astName)) { - if (node === this.#root) { - matched.add(node); - } else if (parentNode) { - switch (astName) { - case 'first-of-type': { - const [node1] = this._collectNthOfType( - { - a: 0, - b: 1 - }, - node - ); - if (node1) { - matched.add(node1); - } - break; - } - case 'last-of-type': { - const [node1] = this._collectNthOfType( - { - a: 0, - b: 1, - reverse: true - }, - node - ); - if (node1) { - matched.add(node1); - } - break; - } - // 'only-of-type' is handled by default. - default: { - const [node1] = this._collectNthOfType( - { - a: 0, - b: 1 - }, - node - ); - if (node1 === node) { - const [node2] = this._collectNthOfType( - { - a: 0, - b: 1, - reverse: true - }, - node - ); - if (node2 === node) { - matched.add(node); - } - } - } - } - } - } else { - switch (astName) { - case 'disabled': - case 'enabled': { - const isMatch = matchDisabledPseudoClass(astName, node); - if (isMatch) { - matched.add(node); - } - break; - } - case 'read-only': - case 'read-write': { - const isMatch = matchReadOnlyPseudoClass(astName, node); - if (isMatch) { - matched.add(node); - } - break; - } - case 'any-link': - case 'link': { - if ( - (localName === 'a' || localName === 'area') && - node.hasAttribute('href') - ) { - matched.add(node); - } - break; - } - case 'local-link': { - if ( - (localName === 'a' || localName === 'area') && - node.hasAttribute('href') - ) { - if (!this.#documentURL) { - this.#documentURL = new URL(this.#document.URL); - } - const { href, origin, pathname } = this.#documentURL; - const attrURL = new URL(node.getAttribute('href'), href); - if (attrURL.origin === origin && attrURL.pathname === pathname) { - matched.add(node); - } - } - break; - } - case 'visited': { - // prevent fingerprinting - break; - } - case 'hover': { - const { target, type } = this.#event ?? {}; - if ( - /^(?:click|mouse(?:down|over|up))$/.test(type) && - node.contains(target) - ) { - matched.add(node); - } - break; - } - case 'active': { - const { buttons, target, type } = this.#event ?? {}; - if (type === 'mousedown' && buttons & 1 && node.contains(target)) { - matched.add(node); - } - break; - } - case 'target': { - if (!this.#documentURL) { - this.#documentURL = new URL(this.#document.URL); - } - const { hash } = this.#documentURL; - if ( - node.id && - hash === `#${node.id}` && - this.#document.contains(node) - ) { - matched.add(node); - } - break; - } - case 'target-within': { - if (!this.#documentURL) { - this.#documentURL = new URL(this.#document.URL); - } - const { hash } = this.#documentURL; - if (hash) { - const id = hash.replace(/^#/, ''); - let current = this.#document.getElementById(id); - while (current) { - if (current === node) { - matched.add(node); - break; - } - current = current.parentNode; - } - } - break; - } - case 'scope': { - if (this.#node.nodeType === ELEMENT_NODE) { - if (!this.#shadow && node === this.#node) { - matched.add(node); - } - } else if (node === this.#document.documentElement) { - matched.add(node); - } - break; - } - case 'focus': { - const activeElement = this.#document.activeElement; - if (node === activeElement && isFocusableArea(node)) { - matched.add(node); - } else if (activeElement.shadowRoot) { - const activeShadowElement = activeElement.shadowRoot.activeElement; - let current = activeShadowElement; - while (current) { - if (current.nodeType === DOCUMENT_FRAGMENT_NODE) { - const { host } = current; - if (host === activeElement) { - if (isFocusableArea(node)) { - matched.add(node); - } else { - matched.add(host); - } - } - break; - } else { - current = current.parentNode; - } - } - } - break; - } - case 'focus-visible': { - if (node === this.#document.activeElement && isFocusableArea(node)) { - let bool; - if (isFocusVisible(node)) { - bool = true; - } else if (this.#focus) { - const { relatedTarget, target: focusTarget } = this.#focus; - if (focusTarget === node) { - if (isFocusVisible(relatedTarget)) { - bool = true; - } else if (this.#event) { - const { - altKey: eventAltKey, - ctrlKey: eventCtrlKey, - key: eventKey, - metaKey: eventMetaKey, - target: eventTarget, - type: eventType - } = this.#event; - // this.#event is irrelevant if eventTarget === relatedTarget - if (eventTarget === relatedTarget) { - if (this.#lastFocusVisible === null) { - bool = true; - } else if (focusTarget === this.#lastFocusVisible) { - bool = true; - } - } else if (eventKey === 'Tab') { - if ( - (eventType === 'keydown' && eventTarget !== node) || - (eventType === 'keyup' && eventTarget === node) - ) { - if (eventTarget === focusTarget) { - if (this.#lastFocusVisible === null) { - bool = true; - } else if ( - eventTarget === this.#lastFocusVisible && - relatedTarget === null - ) { - bool = true; - } - } else { - bool = true; - } - } - } else if (eventKey) { - if ( - (eventType === 'keydown' || eventType === 'keyup') && - !eventAltKey && - !eventCtrlKey && - !eventMetaKey && - eventTarget === node - ) { - bool = true; - } - } - } else if ( - relatedTarget === null || - relatedTarget === this.#lastFocusVisible - ) { - bool = true; - } - } - } - if (bool) { - this.#lastFocusVisible = node; - matched.add(node); - } else if (this.#lastFocusVisible === node) { - this.#lastFocusVisible = null; - } - } - break; - } - case 'focus-within': { - const activeElement = this.#document.activeElement; - if (node.contains(activeElement) && isFocusableArea(activeElement)) { - matched.add(node); - } else if (activeElement.shadowRoot) { - const activeShadowElement = activeElement.shadowRoot.activeElement; - if (node.contains(activeShadowElement)) { - matched.add(node); - } else { - let current = activeShadowElement; - while (current) { - if (current.nodeType === DOCUMENT_FRAGMENT_NODE) { - const { host } = current; - if (host === activeElement && node.contains(host)) { - matched.add(node); - } - break; - } else { - current = current.parentNode; - } - } - } - } - break; - } - case 'open': - case 'closed': { - if (localName === 'details' || localName === 'dialog') { - if (node.hasAttribute('open')) { - if (astName === 'open') { - matched.add(node); - } - } else if (astName === 'closed') { - matched.add(node); - } - } - break; - } - case 'placeholder-shown': { - let placeholder; - if (node.placeholder) { - placeholder = node.placeholder; - } else if (node.hasAttribute('placeholder')) { - placeholder = node.getAttribute('placeholder'); - } - if (typeof placeholder === 'string' && !/[\r\n]/.test(placeholder)) { - let targetNode; - if (localName === 'textarea') { - targetNode = node; - } else if (localName === 'input') { - if (node.hasAttribute('type')) { - if (KEYS_INPUT_PLACEHOLDER.has(node.getAttribute('type'))) { - targetNode = node; - } - } else { - targetNode = node; - } - } - if (targetNode && node.value === '') { - matched.add(node); - } - } - break; - } - case 'checked': { - const attrType = node.getAttribute('type'); - if ( - (node.checked && - localName === 'input' && - (attrType === 'checkbox' || attrType === 'radio')) || - (node.selected && localName === 'option') - ) { - matched.add(node); - } - break; - } - case 'indeterminate': { - if ( - (node.indeterminate && - localName === 'input' && - node.type === 'checkbox') || - (localName === 'progress' && !node.hasAttribute('value')) - ) { - matched.add(node); - } else if ( - localName === 'input' && - node.type === 'radio' && - !node.hasAttribute('checked') - ) { - const nodeName = node.name; - let parent = node.parentNode; - while (parent) { - if (parent.localName === 'form') { - break; - } - parent = parent.parentNode; - } - if (!parent) { - parent = this.#document.documentElement; - } - const walker = this._createTreeWalker(parent); - let refNode = traverseNode(parent, walker); - refNode = walker.firstChild(); - let checked; - while (refNode) { - if ( - refNode.localName === 'input' && - refNode.getAttribute('type') === 'radio' - ) { - if (refNode.hasAttribute('name')) { - if (refNode.getAttribute('name') === nodeName) { - checked = !!refNode.checked; - } - } else { - checked = !!refNode.checked; - } - if (checked) { - break; - } - } - refNode = walker.nextNode(); - } - if (!checked) { - matched.add(node); - } - } - break; - } - case 'default': { - // button[type="submit"], input[type="submit"], input[type="image"] - const attrType = node.getAttribute('type'); - if ( - (localName === 'button' && - !(node.hasAttribute('type') && KEYS_INPUT_RESET.has(attrType))) || - (localName === 'input' && - node.hasAttribute('type') && - KEYS_INPUT_SUBMIT.has(attrType)) - ) { - let form = node.parentNode; - while (form) { - if (form.localName === 'form') { - break; - } - form = form.parentNode; - } - if (form) { - const walker = this._createTreeWalker(form); - let refNode = traverseNode(form, walker); - refNode = walker.firstChild(); - while (refNode) { - const nodeName = refNode.localName; - const nodeAttrType = refNode.getAttribute('type'); - let m; - if (nodeName === 'button') { - m = !( - refNode.hasAttribute('type') && - KEYS_INPUT_RESET.has(nodeAttrType) - ); - } else if (nodeName === 'input') { - m = - refNode.hasAttribute('type') && - KEYS_INPUT_SUBMIT.has(nodeAttrType); - } - if (m) { - if (refNode === node) { - matched.add(node); - } - break; - } - refNode = walker.nextNode(); - } - } - // input[type="checkbox"], input[type="radio"] - } else if ( - localName === 'input' && - node.hasAttribute('type') && - node.hasAttribute('checked') && - KEYS_INPUT_CHECK.has(attrType) - ) { - matched.add(node); - // option - } else if (localName === 'option' && node.hasAttribute('selected')) { - matched.add(node); - } - break; - } - case 'valid': - case 'invalid': { - if (KEYS_FORM_PS_VALID.has(localName)) { - let valid; - if (node.checkValidity()) { - if (node.maxLength >= 0) { - if (node.maxLength >= node.value.length) { - valid = true; - } - } else { - valid = true; - } - } - if (valid) { - if (astName === 'valid') { - matched.add(node); - } - } else if (astName === 'invalid') { - matched.add(node); - } - } else if (localName === 'fieldset') { - const walker = this._createTreeWalker(node); - let refNode = traverseNode(node, walker); - refNode = walker.firstChild(); - let valid; - if (!refNode) { - valid = true; - } else { - while (refNode) { - if (KEYS_FORM_PS_VALID.has(refNode.localName)) { - if (refNode.checkValidity()) { - if (refNode.maxLength >= 0) { - valid = refNode.maxLength >= refNode.value.length; - } else { - valid = true; - } - } else { - valid = false; - } - if (!valid) { - break; - } - } - refNode = walker.nextNode(); - } - } - if (valid) { - if (astName === 'valid') { - matched.add(node); - } - } else if (astName === 'invalid') { - matched.add(node); - } - } - break; - } - case 'in-range': - case 'out-of-range': { - const attrType = node.getAttribute('type'); - if ( - localName === 'input' && - !(node.readonly || node.hasAttribute('readonly')) && - !(node.disabled || node.hasAttribute('disabled')) && - KEYS_INPUT_RANGE.has(attrType) - ) { - const flowed = - node.validity.rangeUnderflow || node.validity.rangeOverflow; - if (astName === 'out-of-range' && flowed) { - matched.add(node); - } else if ( - astName === 'in-range' && - !flowed && - (node.hasAttribute('min') || - node.hasAttribute('max') || - attrType === 'range') - ) { - matched.add(node); - } - } - break; - } - case 'required': - case 'optional': { - let required; - let optional; - if (localName === 'select' || localName === 'textarea') { - if (node.required || node.hasAttribute('required')) { - required = true; - } else { - optional = true; - } - } else if (localName === 'input') { - if (node.hasAttribute('type')) { - const attrType = node.getAttribute('type'); - if (KEYS_INPUT_REQUIRED.has(attrType)) { - if (node.required || node.hasAttribute('required')) { - required = true; - } else { - optional = true; - } - } else { - optional = true; - } - } else if (node.required || node.hasAttribute('required')) { - required = true; - } else { - optional = true; - } - } - if (astName === 'required' && required) { - matched.add(node); - } else if (astName === 'optional' && optional) { - matched.add(node); - } - break; - } - case 'root': { - if (node === this.#document.documentElement) { - matched.add(node); - } - break; - } - case 'empty': { - if (node.hasChildNodes()) { - const walker = this._createTreeWalker(node, { - force: true, - whatToShow: SHOW_ALL - }); - let refNode = walker.firstChild(); - let bool; - while (refNode) { - bool = - refNode.nodeType !== ELEMENT_NODE && - refNode.nodeType !== TEXT_NODE; - if (!bool) { - break; - } - refNode = walker.nextSibling(); - } - if (bool) { - matched.add(node); - } - } else { - matched.add(node); - } - break; - } - case 'first-child': { - if ( - (parentNode && node === parentNode.firstElementChild) || - node === this.#root - ) { - matched.add(node); - } - break; - } - case 'last-child': { - if ( - (parentNode && node === parentNode.lastElementChild) || - node === this.#root - ) { - matched.add(node); - } - break; - } - case 'only-child': { - if ( - (parentNode && - node === parentNode.firstElementChild && - node === parentNode.lastElementChild) || - node === this.#root - ) { - matched.add(node); - } - break; - } - case 'defined': { - if (node.hasAttribute('is') || localName.includes('-')) { - if (isCustomElement(node)) { - matched.add(node); - } - // NOTE: MathMLElement is not implemented in jsdom. - } else if ( - node instanceof this.#window.HTMLElement || - node instanceof this.#window.SVGElement - ) { - matched.add(node); - } - break; - } - case 'popover-open': { - if (node.popover && isVisible(node)) { - matched.add(node); - } - break; - } - // Ignore :host. - case 'host': { - break; - } - // Legacy pseudo-elements. - case 'after': - case 'before': - case 'first-letter': - case 'first-line': { - if (warn) { - this.onError( - generateException( - `Unsupported pseudo-element ::${astName}`, - NOT_SUPPORTED_ERR, - this.#window - ) - ); - } - break; - } - // Not supported. - case 'autofill': - case 'blank': - case 'buffering': - case 'current': - case 'fullscreen': - case 'future': - case 'has-slotted': - case 'heading': - case 'modal': - case 'muted': - case 'past': - case 'paused': - case 'picture-in-picture': - case 'playing': - case 'seeking': - case 'stalled': - case 'user-invalid': - case 'user-valid': - case 'volume-locked': - case '-webkit-autofill': { - if (warn) { - this.onError( - generateException( - `Unsupported pseudo-class :${astName}`, - NOT_SUPPORTED_ERR, - this.#window - ) - ); - } - break; - } - default: { - if (astName.startsWith('-webkit-')) { - if (warn) { - this.onError( - generateException( - `Unsupported pseudo-class :${astName}`, - NOT_SUPPORTED_ERR, - this.#window - ) - ); - } - } else if (!forgive) { - this.onError( - generateException( - `Unknown pseudo-class :${astName}`, - SYNTAX_ERR, - this.#window - ) - ); - } - } - } - } - return matched; - } - - /** - * Evaluates the :host() pseudo-class. - * @private - * @param {Array.<object>} leaves - The AST leaves. - * @param {object} host - The host element. - * @param {object} ast - The original AST for error reporting. - * @returns {boolean} True if matched. - */ - _evaluateHostPseudo = (leaves, host, ast) => { - const l = leaves.length; - for (let i = 0; i < l; i++) { - const leaf = leaves[i]; - if (leaf.type === COMBINATOR) { - const css = generateCSS(ast); - const msg = `Invalid selector ${css}`; - this.onError(generateException(msg, SYNTAX_ERR, this.#window)); - return false; - } - if (!this._matchSelector(leaf, host).has(host)) { - return false; - } - } - return true; - }; - - /** - * Evaluates the :host-context() pseudo-class. - * @private - * @param {Array.<object>} leaves - The AST leaves. - * @param {object} host - The host element. - * @param {object} ast - The original AST for error reporting. - * @returns {boolean} True if matched. - */ - _evaluateHostContextPseudo = (leaves, host, ast) => { - let parent = host; - while (parent) { - let bool; - const l = leaves.length; - for (let i = 0; i < l; i++) { - const leaf = leaves[i]; - if (leaf.type === COMBINATOR) { - const css = generateCSS(ast); - const msg = `Invalid selector ${css}`; - this.onError(generateException(msg, SYNTAX_ERR, this.#window)); - return false; - } - bool = this._matchSelector(leaf, parent).has(parent); - if (!bool) { - break; - } - } - if (bool) { - return true; - } - parent = parent.parentNode; - } - return false; - }; - - /** - * Matches shadow host pseudo-classes. - * @private - * @param {object} ast - The AST. - * @param {object} node - The DocumentFragment node. - * @returns {?object} The matched node. - */ - _matchShadowHostPseudoClass = (ast, node) => { - const { children: astChildren, name: astName } = ast; - // Handle simple pseudo-class (no arguments). - if (!Array.isArray(astChildren)) { - if (astName === 'host') { - return node; - } - const msg = `Invalid selector :${astName}`; - return this.onError(generateException(msg, SYNTAX_ERR, this.#window)); - } - // Handle functional pseudo-class like :host(...). - if (astName !== 'host' && astName !== 'host-context') { - const msg = `Invalid selector :${astName}()`; - return this.onError(generateException(msg, SYNTAX_ERR, this.#window)); - } - if (astChildren.length !== 1) { - const css = generateCSS(ast); - const msg = `Invalid selector ${css}`; - return this.onError(generateException(msg, SYNTAX_ERR, this.#window)); - } - const { host } = node; - const { branches } = walkAST(astChildren[0]); - const [branch] = branches; - const [...leaves] = branch; - let isMatch = false; - if (astName === 'host') { - isMatch = this._evaluateHostPseudo(leaves, host, ast); - // astName === 'host-context'. - } else { - isMatch = this._evaluateHostContextPseudo(leaves, host, ast); - } - return isMatch ? node : null; - }; - - /** - * Matches a selector for element nodes. - * @private - * @param {object} ast - The AST. - * @param {object} node - The Element node. - * @param {object} [opt] - Options. - * @returns {Set.<object>} A collection of matched nodes. - */ - _matchSelectorForElement = (ast, node, opt = {}) => { - const { type: astType } = ast; - const astName = unescapeSelector(ast.name); - const matched = new Set(); - switch (astType) { - case ATTR_SELECTOR: { - if (matchAttributeSelector(ast, node, opt)) { - matched.add(node); - } - break; - } - case ID_SELECTOR: { - if (node.id === astName) { - matched.add(node); - } - break; - } - case CLASS_SELECTOR: { - if (node.classList.contains(astName)) { - matched.add(node); - } - break; - } - case PS_CLASS_SELECTOR: { - return this._matchPseudoClassSelector(ast, node, opt); - } - case TYPE_SELECTOR: { - if (matchTypeSelector(ast, node, opt)) { - matched.add(node); - } - break; - } - // PS_ELEMENT_SELECTOR is handled by default. - default: { - try { - if (opt.check) { - const css = generateCSS(ast); - this.#pseudoElement.push(css); - matched.add(node); - } else { - matchPseudoElementSelector(astName, astType, opt); - } - } catch (e) { - this.onError(e); - } - } - } - return matched; - }; - - /** - * Matches a selector for a shadow root. - * @private - * @param {object} ast - The AST. - * @param {object} node - The DocumentFragment node. - * @param {object} [opt] - Options. - * @returns {Set.<object>} A collection of matched nodes. - */ - _matchSelectorForShadowRoot = (ast, node, opt = {}) => { - const { name: astName } = ast; - if (KEYS_LOGICAL.has(astName)) { - opt.isShadowRoot = true; - return this._matchPseudoClassSelector(ast, node, opt); - } - const matched = new Set(); - if (astName === 'host' || astName === 'host-context') { - const res = this._matchShadowHostPseudoClass(ast, node, opt); - if (res) { - this.#verifyShadowHost = true; - matched.add(res); - } - } - return matched; - }; - - /** - * Matches a selector. - * @private - * @param {object} ast - The AST. - * @param {object} node - The Document, DocumentFragment, or Element node. - * @param {object} [opt] - Options. - * @returns {Set.<object>} A collection of matched nodes. - */ - _matchSelector = (ast, node, opt = {}) => { - if (node.nodeType === ELEMENT_NODE) { - return this._matchSelectorForElement(ast, node, opt); - } - if ( - this.#shadow && - node.nodeType === DOCUMENT_FRAGMENT_NODE && - ast.type === PS_CLASS_SELECTOR - ) { - return this._matchSelectorForShadowRoot(ast, node, opt); - } - return new Set(); - }; - - /** - * Matches leaves. - * @private - * @param {Array.<object>} leaves - The AST leaves. - * @param {object} node - The node. - * @param {object} [opt] - Options. - * @returns {boolean} The result. - */ - _matchLeaves = (leaves, node, opt = {}) => { - const results = this.#invalidate ? this.#invalidateResults : this.#results; - let result = results.get(leaves); - if (result && result.has(node)) { - const { matched } = result.get(node); - return matched; - } - let cacheable = true; - if (node.nodeType === ELEMENT_NODE && KEYS_FORM.has(node.localName)) { - cacheable = false; - } - let bool; - const l = leaves.length; - for (let i = 0; i < l; i++) { - const leaf = leaves[i]; - switch (leaf.type) { - case ATTR_SELECTOR: - case ID_SELECTOR: { - cacheable = false; - break; - } - case PS_CLASS_SELECTOR: { - if (KEYS_PS_UNCACHE.has(leaf.name)) { - cacheable = false; - } - break; - } - default: { - // No action needed for other types. - } - } - bool = this._matchSelector(leaf, node, opt).has(node); - if (!bool) { - break; - } - } - if (cacheable) { - if (!result) { - result = new WeakMap(); - } - result.set(node, { - matched: bool - }); - results.set(leaves, result); - } - return bool; - }; - - /** - * Traverses all descendant nodes and collects matches. - * @private - * @param {object} baseNode - The base Element node or Element.shadowRoot. - * @param {Array.<object>} leaves - The AST leaves. - * @param {object} [opt] - Options. - * @returns {Set.<object>} A collection of matched nodes. - */ - _traverseAllDescendants = (baseNode, leaves, opt = {}) => { - const walker = this._createTreeWalker(baseNode); - traverseNode(baseNode, walker); - let currentNode = walker.firstChild(); - const nodes = new Set(); - while (currentNode) { - if (this._matchLeaves(leaves, currentNode, opt)) { - nodes.add(currentNode); - } - currentNode = walker.nextNode(); - } - return nodes; - }; - - /** - * Finds descendant nodes. - * @private - * @param {Array.<object>} leaves - The AST leaves. - * @param {object} baseNode - The base Element node or Element.shadowRoot. - * @param {object} [opt] - Options. - * @returns {Set.<object>} A collection of matched nodes. - */ - _findDescendantNodes = (leaves, baseNode, opt = {}) => { - const [leaf, ...filterLeaves] = leaves; - const { type: leafType } = leaf; - switch (leafType) { - case ID_SELECTOR: { - const canUseGetElementById = - !this.#shadow && - baseNode.nodeType === ELEMENT_NODE && - this.#root.nodeType !== ELEMENT_NODE; - if (canUseGetElementById) { - const leafName = unescapeSelector(leaf.name); - const nodes = new Set(); - const foundNode = this.#root.getElementById(leafName); - if ( - foundNode && - foundNode !== baseNode && - baseNode.contains(foundNode) - ) { - const isCompoundSelector = filterLeaves.length > 0; - if ( - !isCompoundSelector || - this._matchLeaves(filterLeaves, foundNode, opt) - ) { - nodes.add(foundNode); - } - } - return nodes; - } - // Fallback to default traversal if fast path is not applicable. - return this._traverseAllDescendants(baseNode, leaves, opt); - } - case PS_ELEMENT_SELECTOR: { - const leafName = unescapeSelector(leaf.name); - matchPseudoElementSelector(leafName, leafType, opt); - return new Set(); - } - default: { - return this._traverseAllDescendants(baseNode, leaves, opt); - } - } - }; - - /** - * Matches the descendant combinator ' '. - * @private - * @param {object} twig - The twig object. - * @param {object} node - The Element node. - * @param {object} [opt] - Options. - * @returns {Set.<object>} A collection of matched nodes. - */ - _matchDescendantCombinator = (twig, node, opt = {}) => { - const { leaves } = twig; - const { parentNode } = node; - const { dir } = opt; - if (dir === DIR_NEXT) { - return this._findDescendantNodes(leaves, node, opt); - } - // DIR_PREV - const ancestors = []; - let refNode = parentNode; - while (refNode) { - if (this._matchLeaves(leaves, refNode, opt)) { - ancestors.push(refNode); - } - refNode = refNode.parentNode; - } - if (ancestors.length) { - // Reverse to maintain document order. - return new Set(ancestors.reverse()); - } - return new Set(); - }; - - /** - * Matches the child combinator '>'. - * @private - * @param {object} twig - The twig object. - * @param {object} node - The Element node. - * @param {object} [opt] - Options. - * @returns {Set.<object>} A collection of matched nodes. - */ - _matchChildCombinator = (twig, node, opt = {}) => { - const { leaves } = twig; - const { dir } = opt; - const { parentNode } = node; - const matched = new Set(); - if (dir === DIR_NEXT) { - let refNode = node.firstElementChild; - while (refNode) { - if (this._matchLeaves(leaves, refNode, opt)) { - matched.add(refNode); - } - refNode = refNode.nextElementSibling; - } - } else { - // DIR_PREV - if (parentNode && this._matchLeaves(leaves, parentNode, opt)) { - matched.add(parentNode); - } - } - return matched; - }; - - /** - * Matches the adjacent sibling combinator '+'. - * @private - * @param {object} twig - The twig object. - * @param {object} node - The Element node. - * @param {object} [opt] - Options. - * @returns {Set.<object>} A collection of matched nodes. - */ - _matchAdjacentSiblingCombinator = (twig, node, opt = {}) => { - const { leaves } = twig; - const { dir } = opt; - const matched = new Set(); - const refNode = - dir === DIR_NEXT ? node.nextElementSibling : node.previousElementSibling; - if (refNode && this._matchLeaves(leaves, refNode, opt)) { - matched.add(refNode); - } - return matched; - }; - - /** - * Matches the general sibling combinator '~'. - * @private - * @param {object} twig - The twig object. - * @param {object} node - The Element node. - * @param {object} [opt] - Options. - * @returns {Set.<object>} A collection of matched nodes. - */ - _matchGeneralSiblingCombinator = (twig, node, opt = {}) => { - const { leaves } = twig; - const { dir } = opt; - const matched = new Set(); - let refNode = - dir === DIR_NEXT ? node.nextElementSibling : node.previousElementSibling; - while (refNode) { - if (this._matchLeaves(leaves, refNode, opt)) { - matched.add(refNode); - } - refNode = - dir === DIR_NEXT - ? refNode.nextElementSibling - : refNode.previousElementSibling; - } - return matched; - }; - - /** - * Matches a combinator. - * @private - * @param {object} twig - The twig object. - * @param {object} node - The Element node. - * @param {object} [opt] - Options. - * @returns {Set.<object>} A collection of matched nodes. - */ - _matchCombinator = (twig, node, opt = {}) => { - const { - combo: { name: comboName } - } = twig; - switch (comboName) { - case '+': { - return this._matchAdjacentSiblingCombinator(twig, node, opt); - } - case '~': { - return this._matchGeneralSiblingCombinator(twig, node, opt); - } - case '>': { - return this._matchChildCombinator(twig, node, opt); - } - case ' ': - default: { - return this._matchDescendantCombinator(twig, node, opt); - } - } - }; - - /** - * Traverses with a TreeWalker and collects nodes matching the leaves. - * @private - * @param {TreeWalker} walker - The TreeWalker instance to use. - * @param {Array} leaves - The AST leaves to match against. - * @param {object} options - Traversal options. - * @param {Node} options.startNode - The node to start traversal from. - * @param {string} options.targetType - The type of target ('all' or 'first'). - * @param {Node} [options.boundaryNode] - The node to stop traversal at. - * @param {boolean} [options.force] - Force traversal to the next node. - * @returns {Array.<Node>} An array of matched nodes. - */ - _traverseAndCollectNodes = (walker, leaves, options) => { - const { boundaryNode, force, startNode, targetType } = options; - const collectedNodes = []; - let currentNode = traverseNode(startNode, walker, !!force); - if (!currentNode) { - return []; - } - // Adjust starting node. - if (currentNode.nodeType !== ELEMENT_NODE) { - currentNode = walker.nextNode(); - } else if (currentNode === startNode && currentNode !== this.#root) { - currentNode = walker.nextNode(); - } - const matchOpt = { - warn: this.#warn - }; - while (currentNode) { - // Stop when we reach the boundary. - if (boundaryNode) { - if (currentNode === boundaryNode) { - break; - } else if ( - targetType === TARGET_ALL && - !boundaryNode.contains(currentNode) - ) { - break; - } - } - if ( - this._matchLeaves(leaves, currentNode, matchOpt) && - currentNode !== this.#node - ) { - collectedNodes.push(currentNode); - // Stop after the first match if not collecting all. - if (targetType !== TARGET_ALL) { - break; - } - } - currentNode = walker.nextNode(); - } - return collectedNodes; - }; - - /** - * Finds matched node(s) preceding this.#node. - * @private - * @param {Array.<object>} leaves - The AST leaves. - * @param {object} node - The node to start from. - * @param {object} opt - Options. - * @param {boolean} [opt.force] - If true, traverses only to the next node. - * @param {string} [opt.targetType] - The target type. - * @returns {Array.<object>} A collection of matched nodes. - */ - _findPrecede = (leaves, node, opt = {}) => { - const { force, targetType } = opt; - if (!this.#rootWalker) { - this.#rootWalker = this._createTreeWalker(this.#root); - } - return this._traverseAndCollectNodes(this.#rootWalker, leaves, { - force, - targetType, - boundaryNode: this.#node, - startNode: node - }); - }; - - /** - * Finds matched node(s) in #nodeWalker. - * @private - * @param {Array.<object>} leaves - The AST leaves. - * @param {object} node - The node to start from. - * @param {object} opt - Options. - * @param {boolean} [opt.precede] - If true, finds preceding nodes. - * @returns {Array.<object>} A collection of matched nodes. - */ - _findNodeWalker = (leaves, node, opt = {}) => { - const { precede, ...traversalOpts } = opt; - if (precede) { - const precedeNodes = this._findPrecede(leaves, this.#root, opt); - if (precedeNodes.length) { - return precedeNodes; - } - } - if (!this.#nodeWalker) { - this.#nodeWalker = this._createTreeWalker(this.#node); - } - return this._traverseAndCollectNodes(this.#nodeWalker, leaves, { - startNode: node, - ...traversalOpts - }); - }; - - /** - * Matches the node itself. - * @private - * @param {Array} leaves - The AST leaves. - * @param {boolean} check - Indicates if running in internal check(). - * @returns {Array} An array containing [nodes, filtered, pseudoElement]. - */ - _matchSelf = (leaves, check = false) => { - const options = { check, warn: this.#warn }; - const matched = this._matchLeaves(leaves, this.#node, options); - const nodes = matched ? [this.#node] : []; - return [nodes, matched, this.#pseudoElement]; - }; - - /** - * Finds lineal nodes (self and ancestors). - * @private - * @param {Array} leaves - The AST leaves. - * @param {object} opt - Options. - * @returns {Array} An array containing [nodes, filtered]. - */ - _findLineal = (leaves, opt) => { - const { complex } = opt; - const nodes = []; - const options = { warn: this.#warn }; - const selfMatched = this._matchLeaves(leaves, this.#node, options); - if (selfMatched) { - nodes.push(this.#node); - } - if (!selfMatched || complex) { - let currentNode = this.#node.parentNode; - while (currentNode) { - if (this._matchLeaves(leaves, currentNode, options)) { - nodes.push(currentNode); - } - currentNode = currentNode.parentNode; - } - } - const filtered = nodes.length > 0; - return [nodes, filtered]; - }; - - /** - * Finds entry nodes for pseudo-element selectors. - * @private - * @param {object} leaf - The pseudo-element leaf from the AST. - * @param {Array.<object>} filterLeaves - Leaves for compound selectors. - * @param {string} targetType - The type of target to find. - * @returns {object} The result { nodes, filtered, pending }. - */ - _findEntryNodesForPseudoElement = (leaf, filterLeaves, targetType) => { - let nodes = []; - let filtered = false; - if (targetType === TARGET_SELF && this.#check) { - const css = generateCSS(leaf); - this.#pseudoElement.push(css); - if (filterLeaves.length) { - [nodes, filtered] = this._matchSelf(filterLeaves, this.#check); - } else { - nodes.push(this.#node); - filtered = true; - } - } else { - matchPseudoElementSelector(leaf.name, leaf.type, { warn: this.#warn }); - } - return { nodes, filtered, pending: false }; - }; - - /** - * Finds entry nodes for ID selectors. - * @private - * @param {object} twig - The current twig from the AST branch. - * @param {string} targetType - The type of target to find. - * @param {object} opt - Additional options for finding nodes. - * @returns {object} The result { nodes, filtered, pending }. - */ - _findEntryNodesForId = (twig, targetType, opt) => { - const { leaves } = twig; - const [leaf, ...filterLeaves] = leaves; - const { complex, precede } = opt; - let nodes = []; - let filtered = false; - if (targetType === TARGET_SELF) { - [nodes, filtered] = this._matchSelf(leaves); - } else if (targetType === TARGET_LINEAL) { - [nodes, filtered] = this._findLineal(leaves, { complex }); - } else if ( - targetType === TARGET_FIRST && - this.#root.nodeType !== ELEMENT_NODE - ) { - const node = this.#root.getElementById(leaf.name); - if (node) { - if (filterLeaves.length) { - if (this._matchLeaves(filterLeaves, node, { warn: this.#warn })) { - nodes.push(node); - filtered = true; - } - } else { - nodes.push(node); - filtered = true; - } - } - } else { - nodes = this._findNodeWalker(leaves, this.#node, { precede, targetType }); - filtered = nodes.length > 0; - } - return { nodes, filtered, pending: false }; - }; - - /** - * Finds entry nodes for class selectors. - * @private - * @param {Array.<object>} leaves - The AST leaves for the selector. - * @param {string} targetType - The type of target to find. - * @param {object} opt - Additional options for finding nodes. - * @returns {object} The result { nodes, filtered, pending }. - */ - _findEntryNodesForClass = (leaves, targetType, opt) => { - const { complex, precede } = opt; - let nodes = []; - let filtered = false; - if (targetType === TARGET_SELF) { - [nodes, filtered] = this._matchSelf(leaves); - } else if (targetType === TARGET_LINEAL) { - [nodes, filtered] = this._findLineal(leaves, { complex }); - } else { - nodes = this._findNodeWalker(leaves, this.#node, { precede, targetType }); - filtered = nodes.length > 0; - } - return { nodes, filtered, pending: false }; - }; - - /** - * Finds entry nodes for type selectors. - * @private - * @param {Array.<object>} leaves - The AST leaves for the selector. - * @param {string} targetType - The type of target to find. - * @param {object} opt - Additional options for finding nodes. - * @returns {object} The result { nodes, filtered, pending }. - */ - _findEntryNodesForType = (leaves, targetType, opt) => { - const { complex, precede } = opt; - let nodes = []; - let filtered = false; - if (targetType === TARGET_SELF) { - [nodes, filtered] = this._matchSelf(leaves); - } else if (targetType === TARGET_LINEAL) { - [nodes, filtered] = this._findLineal(leaves, { complex }); - } else { - nodes = this._findNodeWalker(leaves, this.#node, { precede, targetType }); - filtered = nodes.length > 0; - } - return { nodes, filtered, pending: false }; - }; - - /** - * Finds entry nodes for other selector types (default case). - * @private - * @param {object} twig - The current twig from the AST branch. - * @param {string} targetType - The type of target to find. - * @param {object} opt - Additional options for finding nodes. - * @returns {object} The result { nodes, filtered, pending }. - */ - _findEntryNodesForOther = (twig, targetType, opt) => { - const { leaves } = twig; - const [leaf, ...filterLeaves] = leaves; - const { complex, precede } = opt; - let nodes = []; - let filtered = false; - let pending = false; - if (targetType !== TARGET_LINEAL && /host(?:-context)?/.test(leaf.name)) { - let shadowRoot = null; - if (this.#shadow && this.#node.nodeType === DOCUMENT_FRAGMENT_NODE) { - shadowRoot = this._matchShadowHostPseudoClass(leaf, this.#node); - } else if (filterLeaves.length && this.#node.nodeType === ELEMENT_NODE) { - shadowRoot = this._matchShadowHostPseudoClass( - leaf, - this.#node.shadowRoot - ); - } - if (shadowRoot) { - let bool = true; - const l = filterLeaves.length; - for (let i = 0; i < l; i++) { - const filterLeaf = filterLeaves[i]; - switch (filterLeaf.name) { - case 'host': - case 'host-context': { - const matchedNode = this._matchShadowHostPseudoClass( - filterLeaf, - shadowRoot - ); - bool = matchedNode === shadowRoot; - break; - } - case 'has': { - bool = this._matchPseudoClassSelector( - filterLeaf, - shadowRoot, - {} - ).has(shadowRoot); - break; - } - default: { - bool = false; - } - } - if (!bool) { - break; - } - } - if (bool) { - nodes.push(shadowRoot); - filtered = true; - } - } - } else if (targetType === TARGET_SELF) { - [nodes, filtered] = this._matchSelf(leaves); - } else if (targetType === TARGET_LINEAL) { - [nodes, filtered] = this._findLineal(leaves, { complex }); - } else if (targetType === TARGET_FIRST) { - nodes = this._findNodeWalker(leaves, this.#node, { precede, targetType }); - filtered = nodes.length > 0; - } else { - pending = true; - } - return { nodes, filtered, pending }; - }; - - /** - * Finds entry nodes. - * @private - * @param {object} twig - The twig object. - * @param {string} targetType - The target type. - * @param {object} [opt] - Options. - * @param {boolean} [opt.complex] - If true, the selector is complex. - * @param {string} [opt.dir] - The find direction. - * @returns {object} An object with nodes and their state. - */ - _findEntryNodes = (twig, targetType, opt = {}) => { - const { leaves } = twig; - const [leaf, ...filterLeaves] = leaves; - const { complex = false, dir = DIR_PREV } = opt; - const precede = - dir === DIR_NEXT && - this.#node.nodeType === ELEMENT_NODE && - this.#node !== this.#root; - let result; - switch (leaf.type) { - case PS_ELEMENT_SELECTOR: { - result = this._findEntryNodesForPseudoElement( - leaf, - filterLeaves, - targetType - ); - break; - } - case ID_SELECTOR: { - result = this._findEntryNodesForId(twig, targetType, { - complex, - precede - }); - break; - } - case CLASS_SELECTOR: { - result = this._findEntryNodesForClass(leaves, targetType, { - complex, - precede - }); - break; - } - case TYPE_SELECTOR: { - result = this._findEntryNodesForType(leaves, targetType, { - complex, - precede - }); - break; - } - default: { - result = this._findEntryNodesForOther(twig, targetType, { - complex, - precede - }); - } - } - return { - compound: filterLeaves.length > 0, - filtered: result.filtered, - nodes: result.nodes, - pending: result.pending - }; - }; - - /** - * Determines the direction and starting twig for a selector branch. - * @private - * @param {Array.<object>} branch - The AST branch. - * @param {string} targetType - The type of target to find. - * @returns {object} An object with the direction and starting twig. - */ - _determineTraversalStrategy = (branch, targetType) => { - const branchLen = branch.length; - const firstTwig = branch[0]; - const lastTwig = branch[branchLen - 1]; - if (branchLen === 1) { - return { dir: DIR_PREV, twig: firstTwig }; - } - // Complex selector (branchLen > 1). - const { - leaves: [{ name: firstName, type: firstType }] - } = firstTwig; - const { - leaves: [{ name: lastName, type: lastType }] - } = lastTwig; - const { combo: firstCombo } = firstTwig; - if ( - this.#selector.includes(':scope') || - lastType === PS_ELEMENT_SELECTOR || - lastType === ID_SELECTOR - ) { - return { dir: DIR_PREV, twig: lastTwig }; - } - if (firstType === ID_SELECTOR) { - return { dir: DIR_NEXT, twig: firstTwig }; - } - if (firstName === '*' && firstType === TYPE_SELECTOR) { - return { dir: DIR_PREV, twig: lastTwig }; - } - if (lastName === '*' && lastType === TYPE_SELECTOR) { - return { dir: DIR_NEXT, twig: firstTwig }; - } - if (branchLen === 2) { - if (targetType === TARGET_FIRST) { - return { dir: DIR_PREV, twig: lastTwig }; - } - const { name: comboName } = firstCombo; - if (comboName === '+' || comboName === '~') { - return { dir: DIR_PREV, twig: lastTwig }; - } - } else if (branchLen > 2 && this.#scoped && targetType === TARGET_FIRST) { - if (lastType === TYPE_SELECTOR) { - return { dir: DIR_PREV, twig: lastTwig }; - } - let isChildOrDescendant = false; - for (const { combo } of branch) { - if (combo) { - const { name: comboName } = combo; - isChildOrDescendant = comboName === '>' || comboName === ' '; - if (!isChildOrDescendant) { - break; - } - } - } - if (isChildOrDescendant) { - return { dir: DIR_PREV, twig: lastTwig }; - } - } - // Default strategy for complex selectors. - return { dir: DIR_NEXT, twig: firstTwig }; - }; - - /** - * Processes pending items not resolved with a direct strategy. - * @private - * @param {Set.<Map>} pendingItems - The set of pending items. - */ - _processPendingItems = pendingItems => { - if (!pendingItems.size) { - return; - } - if (!this.#rootWalker) { - this.#rootWalker = this._createTreeWalker(this.#root); - } - const walker = this.#rootWalker; - let node = this.#root; - if (this.#scoped) { - node = this.#node; - } - let nextNode = traverseNode(node, walker); - while (nextNode) { - const isWithinScope = - this.#node.nodeType !== ELEMENT_NODE || - nextNode === this.#node || - this.#node.contains(nextNode); - if (isWithinScope) { - for (const pendingItem of pendingItems) { - const { leaves } = pendingItem.get('twig'); - if (this._matchLeaves(leaves, nextNode, { warn: this.#warn })) { - const index = pendingItem.get('index'); - this.#ast[index].filtered = true; - this.#ast[index].find = true; - this.#nodes[index].push(nextNode); - } - } - } else if (this.#scoped) { - break; - } - nextNode = walker.nextNode(); - } - }; - - /** - * Collects nodes. - * @private - * @param {string} targetType - The target type. - * @returns {Array.<Array.<object>>} An array containing the AST and nodes. - */ - _collectNodes = targetType => { - const ast = this.#ast.values(); - if (targetType === TARGET_ALL || targetType === TARGET_FIRST) { - const pendingItems = new Set(); - let i = 0; - for (const { branch } of ast) { - const complex = branch.length > 1; - const { dir, twig } = this._determineTraversalStrategy( - branch, - targetType - ); - const { compound, filtered, nodes, pending } = this._findEntryNodes( - twig, - targetType, - { complex, dir } - ); - if (nodes.length) { - this.#ast[i].find = true; - this.#nodes[i] = nodes; - } else if (pending) { - pendingItems.add( - new Map([ - ['index', i], - ['twig', twig] - ]) - ); - } - this.#ast[i].dir = dir; - this.#ast[i].filtered = filtered || !compound; - i++; - } - this._processPendingItems(pendingItems); - } else { - let i = 0; - for (const { branch } of ast) { - const twig = branch[branch.length - 1]; - const complex = branch.length > 1; - const dir = DIR_PREV; - const { compound, filtered, nodes } = this._findEntryNodes( - twig, - targetType, - { complex, dir } - ); - if (nodes.length) { - this.#ast[i].find = true; - this.#nodes[i] = nodes; - } - this.#ast[i].dir = dir; - this.#ast[i].filtered = filtered || !compound; - i++; - } - } - return [this.#ast, this.#nodes]; - }; - - /** - * Gets combined nodes. - * @private - * @param {object} twig - The twig object. - * @param {object} nodes - A collection of nodes. - * @param {string} dir - The direction. - * @returns {Array.<object>} A collection of matched nodes. - */ - _getCombinedNodes = (twig, nodes, dir) => { - const arr = []; - const options = { - dir, - warn: this.#warn - }; - for (const node of nodes) { - const matched = this._matchCombinator(twig, node, options); - if (matched.size) { - arr.push(...matched); - } - } - return arr; - }; - - /** - * Matches a node in the 'next' direction. - * @private - * @param {Array} branch - The branch. - * @param {Set.<object>} nodes - A collection of Element nodes. - * @param {object} opt - Options. - * @param {object} opt.combo - The combo object. - * @param {number} opt.index - The index. - * @returns {?object} The matched node. - */ - _matchNodeNext = (branch, nodes, opt) => { - const { combo, index } = opt; - const { combo: nextCombo, leaves } = branch[index]; - const twig = { - combo, - leaves - }; - const nextNodes = new Set(this._getCombinedNodes(twig, nodes, DIR_NEXT)); - if (nextNodes.size) { - if (index === branch.length - 1) { - const [nextNode] = sortNodes(nextNodes); - return nextNode; - } - return this._matchNodeNext(branch, nextNodes, { - combo: nextCombo, - index: index + 1 - }); - } - return null; - }; - - /** - * Matches a node in the 'previous' direction. - * @private - * @param {Array} branch - The branch. - * @param {object} node - The Element node. - * @param {object} opt - Options. - * @param {number} opt.index - The index. - * @returns {?object} The node. - */ - _matchNodePrev = (branch, node, opt) => { - const { index } = opt; - const twig = branch[index]; - const nodes = new Set([node]); - const nextNodes = new Set(this._getCombinedNodes(twig, nodes, DIR_PREV)); - if (nextNodes.size) { - if (index === 0) { - return node; - } - let matched; - for (const nextNode of nextNodes) { - matched = this._matchNodePrev(branch, nextNode, { - index: index - 1 - }); - if (matched) { - break; - } - } - if (matched) { - return node; - } - } - return null; - }; - - /** - * Processes a complex selector branch to find all matching nodes. - * @private - * @param {Array} branch - The selector branch from the AST. - * @param {Array} entryNodes - The initial set of nodes to start from. - * @param {string} dir - The direction of traversal ('next' or 'prev'). - * @returns {Set.<object>} A set of all matched nodes. - */ - _processComplexBranchAll = (branch, entryNodes, dir) => { - const matchedNodes = new Set(); - const branchLen = branch.length; - const lastIndex = branchLen - 1; - - if (dir === DIR_NEXT) { - const { combo: firstCombo } = branch[0]; - for (const node of entryNodes) { - let combo = firstCombo; - let nextNodes = new Set([node]); - for (let j = 1; j < branchLen; j++) { - const { combo: nextCombo, leaves } = branch[j]; - const twig = { combo, leaves }; - const nodesArr = this._getCombinedNodes(twig, nextNodes, dir); - if (nodesArr.length) { - if (j === lastIndex) { - for (const nextNode of nodesArr) { - matchedNodes.add(nextNode); - } - } - combo = nextCombo; - nextNodes = new Set(nodesArr); - } else { - // No further matches down this path. - nextNodes.clear(); - break; - } - } - } - // DIR_PREV - } else { - for (const node of entryNodes) { - let nextNodes = new Set([node]); - for (let j = lastIndex - 1; j >= 0; j--) { - const twig = branch[j]; - const nodesArr = this._getCombinedNodes(twig, nextNodes, dir); - if (nodesArr.length) { - // The entry node is the final match - if (j === 0) { - matchedNodes.add(node); - } - nextNodes = new Set(nodesArr); - } else { - // No further matches down this path. - nextNodes.clear(); - break; - } - } - } - } - return matchedNodes; - }; - - /** - * Processes a complex selector branch to find the first matching node. - * @private - * @param {Array} branch - The selector branch from the AST. - * @param {Array} entryNodes - The initial set of nodes to start from. - * @param {string} dir - The direction of traversal ('next' or 'prev'). - * @param {string} targetType - The type of search (e.g., 'first'). - * @returns {?object} The first matched node, or null. - */ - _processComplexBranchFirst = (branch, entryNodes, dir, targetType) => { - const branchLen = branch.length; - const lastIndex = branchLen - 1; - // DIR_NEXT logic for finding the first match. - if (dir === DIR_NEXT) { - const { combo: entryCombo } = branch[0]; - for (const node of entryNodes) { - const matchedNode = this._matchNodeNext(branch, new Set([node]), { - combo: entryCombo, - index: 1 - }); - if (matchedNode) { - if (this.#node.nodeType === ELEMENT_NODE) { - if ( - matchedNode !== this.#node && - this.#node.contains(matchedNode) - ) { - return matchedNode; - } - } else { - return matchedNode; - } - } - } - // Fallback logic if no direct match found. - const { leaves: entryLeaves } = branch[0]; - const [entryNode] = entryNodes; - if (this.#node.contains(entryNode)) { - let [refNode] = this._findNodeWalker(entryLeaves, entryNode, { - targetType - }); - while (refNode) { - const matchedNode = this._matchNodeNext(branch, new Set([refNode]), { - combo: entryCombo, - index: 1 - }); - if (matchedNode) { - if (this.#node.nodeType === ELEMENT_NODE) { - if ( - matchedNode !== this.#node && - this.#node.contains(matchedNode) - ) { - return matchedNode; - } - } else { - return matchedNode; - } - } - [refNode] = this._findNodeWalker(entryLeaves, refNode, { - targetType, - force: true - }); - } - } - // DIR_PREV logic for finding the first match. - } else { - for (const node of entryNodes) { - const matchedNode = this._matchNodePrev(branch, node, { - index: lastIndex - 1 - }); - if (matchedNode) { - return matchedNode; - } - } - // Fallback for TARGET_FIRST. - if (targetType === TARGET_FIRST) { - const { leaves: entryLeaves } = branch[lastIndex]; - const [entryNode] = entryNodes; - let [refNode] = this._findNodeWalker(entryLeaves, entryNode, { - targetType - }); - while (refNode) { - const matchedNode = this._matchNodePrev(branch, refNode, { - index: lastIndex - 1 - }); - if (matchedNode) { - return refNode; - } - [refNode] = this._findNodeWalker(entryLeaves, refNode, { - targetType, - force: true - }); - } - } - } - return null; - }; - - /** - * Finds matched nodes. - * @param {string} targetType - The target type. - * @returns {Set.<object>} A collection of matched nodes. - */ - find = targetType => { - const [[...branches], collectedNodes] = this._collectNodes(targetType); - const l = branches.length; - let sort = - l > 1 && targetType === TARGET_ALL && this.#selector.includes(':scope'); - let nodes = new Set(); - for (let i = 0; i < l; i++) { - const { branch, dir, find } = branches[i]; - if (!branch.length || !find) { - continue; - } - const entryNodes = collectedNodes[i]; - const lastIndex = branch.length - 1; - // Handle simple selectors (no combinators). - if (lastIndex === 0) { - if ( - (targetType === TARGET_ALL || targetType === TARGET_FIRST) && - this.#node.nodeType === ELEMENT_NODE - ) { - for (const node of entryNodes) { - if (node !== this.#node && this.#node.contains(node)) { - nodes.add(node); - if (targetType === TARGET_FIRST) { - break; - } - } - } - } else if (targetType === TARGET_ALL) { - if (nodes.size) { - for (const node of entryNodes) { - nodes.add(node); - } - sort = true; - } else { - nodes = new Set(entryNodes); - } - } else { - if (entryNodes.length) { - nodes.add(entryNodes[0]); - } - } - // Handle complex selectors. - } else { - if (targetType === TARGET_ALL) { - const newNodes = this._processComplexBranchAll( - branch, - entryNodes, - dir - ); - if (nodes.size) { - for (const newNode of newNodes) { - nodes.add(newNode); - } - sort = true; - } else { - nodes = newNodes; - } - } else { - const matchedNode = this._processComplexBranchFirst( - branch, - entryNodes, - dir, - targetType - ); - if (matchedNode) { - nodes.add(matchedNode); - } - } - } - } - if (this.#check) { - const match = !!nodes.size; - let pseudoElement; - if (this.#pseudoElement.length) { - pseudoElement = this.#pseudoElement.join(''); - } else { - pseudoElement = null; - } - return { match, pseudoElement }; - } - if (targetType === TARGET_FIRST || targetType === TARGET_ALL) { - nodes.delete(this.#node); - } - if ((sort || targetType === TARGET_FIRST) && nodes.size > 1) { - return new Set(sortNodes(nodes)); - } - return nodes; - }; -} diff --git a/vanilla/node_modules/@asamuzakjp/dom-selector/src/js/matcher.js b/vanilla/node_modules/@asamuzakjp/dom-selector/src/js/matcher.js deleted file mode 100644 index 6395560..0000000 --- a/vanilla/node_modules/@asamuzakjp/dom-selector/src/js/matcher.js +++ /dev/null @@ -1,587 +0,0 @@ -/** - * matcher.js - */ - -/* import */ -import { generateCSS, parseAstName, unescapeSelector } from './parser.js'; -import { - generateException, - getDirectionality, - getLanguageAttribute, - getType, - isContentEditable, - isCustomElement, - isNamespaceDeclared -} from './utility.js'; - -/* constants */ -import { - ALPHA_NUM, - FORM_PARTS, - IDENT, - INPUT_EDIT, - LANG_PART, - NOT_SUPPORTED_ERR, - PS_ELEMENT_SELECTOR, - STRING, - SYNTAX_ERR -} from './constant.js'; -const KEYS_FORM_PS_DISABLED = new Set([ - ...FORM_PARTS, - 'fieldset', - 'optgroup', - 'option' -]); -const KEYS_INPUT_EDIT = new Set(INPUT_EDIT); -const REG_LANG_VALID = new RegExp(`^(?:\\*-)?${ALPHA_NUM}${LANG_PART}$`, 'i'); -const REG_TAG_NAME = /[A-Z][\\w-]*/i; - -/** - * Validates a pseudo-element selector. - * @param {string} astName - The name of the pseudo-element from the AST. - * @param {string} astType - The type of the selector from the AST. - * @param {object} [opt] - Optional parameters. - * @param {boolean} [opt.forgive] - If true, ignores unknown pseudo-elements. - * @param {boolean} [opt.warn] - If true, throws an error for unsupported ones. - * @throws {DOMException} If the selector is invalid or unsupported. - * @returns {void} - */ -export const matchPseudoElementSelector = (astName, astType, opt = {}) => { - const { forgive, globalObject, warn } = opt; - if (astType !== PS_ELEMENT_SELECTOR) { - // Ensure the AST node is a pseudo-element selector. - throw new TypeError(`Unexpected ast type ${getType(astType)}`); - } - switch (astName) { - case 'after': - case 'backdrop': - case 'before': - case 'cue': - case 'cue-region': - case 'first-letter': - case 'first-line': - case 'file-selector-button': - case 'marker': - case 'placeholder': - case 'selection': - case 'target-text': { - // Warn if the pseudo-element is known but unsupported. - if (warn) { - throw generateException( - `Unsupported pseudo-element ::${astName}`, - NOT_SUPPORTED_ERR, - globalObject - ); - } - break; - } - case 'part': - case 'slotted': { - // Warn if the functional pseudo-element is known but unsupported. - if (warn) { - throw generateException( - `Unsupported pseudo-element ::${astName}()`, - NOT_SUPPORTED_ERR, - globalObject - ); - } - break; - } - default: { - // Handle vendor-prefixed or unknown pseudo-elements. - if (astName.startsWith('-webkit-')) { - if (warn) { - throw generateException( - `Unsupported pseudo-element ::${astName}`, - NOT_SUPPORTED_ERR, - globalObject - ); - } - // Throw an error for unknown pseudo-elements if not forgiven. - } else if (!forgive) { - throw generateException( - `Unknown pseudo-element ::${astName}`, - SYNTAX_ERR, - globalObject - ); - } - } - } -}; - -/** - * Matches the :dir() pseudo-class against an element's directionality. - * @param {object} ast - The AST object for the pseudo-class. - * @param {object} node - The element node to match against. - * @throws {TypeError} If the AST does not contain a valid direction value. - * @returns {boolean} - True if the directionality matches, otherwise false. - */ -export const matchDirectionPseudoClass = (ast, node) => { - const { name } = ast; - // The :dir() pseudo-class requires a direction argument (e.g., "ltr"). - if (!name) { - const type = name === '' ? '(empty String)' : getType(name); - throw new TypeError(`Unexpected ast type ${type}`); - } - // Get the computed directionality of the element. - const dir = getDirectionality(node); - // Compare the expected direction with the element's actual direction. - return name === dir; -}; - -/** - * Matches the :lang() pseudo-class against an element's language. - * @see https://datatracker.ietf.org/doc/html/rfc4647#section-3.3.1 - * @param {object} ast - The AST object for the pseudo-class. - * @param {object} node - The element node to match against. - * @returns {boolean} - True if the language matches, otherwise false. - */ -export const matchLanguagePseudoClass = (ast, node) => { - const { name, type, value } = ast; - let langPattern; - // Determine the language pattern from the AST. - if (type === STRING && value) { - langPattern = value; - } else if (type === IDENT && name) { - langPattern = unescapeSelector(name); - } - // If no valid language pattern is provided, it cannot match. - if (typeof langPattern !== 'string') { - return false; - } - // Get the effective language attribute for the current node. - const elementLang = getLanguageAttribute(node); - // If the element has no language, it cannot match a specific pattern. - if (elementLang === null) { - return false; - } - // Handle the universal selector '*' for :lang. - if (langPattern === '*') { - // It matches any language unless attribute is not empty. - return elementLang !== ''; - } - // Validate the provided language pattern structure. - if (!REG_LANG_VALID.test(langPattern)) { - return false; - } - // Build a regex for extended language range matching. - let matcherRegex; - if (langPattern.indexOf('-') > -1) { - // Handle complex patterns with wildcards and sub-tags (e.g., '*-US'). - const [langMain, langSub, ...langRest] = langPattern.split('-'); - const extendedMain = - langMain === '*' ? `${ALPHA_NUM}${LANG_PART}` : `${langMain}${LANG_PART}`; - const extendedSub = `-${langSub}${LANG_PART}`; - let extendedRest = ''; - // Use a standard for loop for performance as per the rules. - for (let i = 0; i < langRest.length; i++) { - extendedRest += `-${langRest[i]}${LANG_PART}`; - } - matcherRegex = new RegExp( - `^${extendedMain}${extendedSub}${extendedRest}$`, - 'i' - ); - } else { - // Handle simple language patterns (e.g., 'en'). - matcherRegex = new RegExp(`^${langPattern}${LANG_PART}$`, 'i'); - } - // Test the element's language against the constructed regex. - return matcherRegex.test(elementLang); -}; - -/** - * Matches the :disabled and :enabled pseudo-classes. - * @param {string} astName - pseudo-class name - * @param {object} node - Element node - * @returns {boolean} - True if matched - */ -export const matchDisabledPseudoClass = (astName, node) => { - const { localName, parentNode } = node; - if ( - !KEYS_FORM_PS_DISABLED.has(localName) && - !isCustomElement(node, { formAssociated: true }) - ) { - return false; - } - let isDisabled = false; - if (node.disabled || node.hasAttribute('disabled')) { - isDisabled = true; - } else if (localName === 'option') { - if ( - parentNode && - parentNode.localName === 'optgroup' && - (parentNode.disabled || parentNode.hasAttribute('disabled')) - ) { - isDisabled = true; - } - } else if (localName !== 'optgroup') { - let current = parentNode; - while (current) { - if ( - current.localName === 'fieldset' && - (current.disabled || current.hasAttribute('disabled')) - ) { - // The first <legend> in a disabled <fieldset> is not disabled. - let legend; - let element = current.firstElementChild; - while (element) { - if (element.localName === 'legend') { - legend = element; - break; - } - element = element.nextElementSibling; - } - if (!legend || !legend.contains(node)) { - isDisabled = true; - } - // Found the containing fieldset, stop searching up. - break; - } - current = current.parentNode; - } - } - if (astName === 'disabled') { - return isDisabled; - } - return !isDisabled; -}; - -/** - * Match the :read-only and :read-write pseudo-classes - * @param {string} astName - pseudo-class name - * @param {object} node - Element node - * @returns {boolean} - True if matched - */ -export const matchReadOnlyPseudoClass = (astName, node) => { - const { localName } = node; - let isReadOnly = false; - switch (localName) { - case 'textarea': - case 'input': { - const isEditableInput = !node.type || KEYS_INPUT_EDIT.has(node.type); - if (localName === 'textarea' || isEditableInput) { - isReadOnly = - node.readOnly || - node.hasAttribute('readonly') || - node.disabled || - node.hasAttribute('disabled'); - } else { - // Non-editable input types are always read-only - isReadOnly = true; - } - break; - } - default: { - isReadOnly = !isContentEditable(node); - } - } - if (astName === 'read-only') { - return isReadOnly; - } - return !isReadOnly; -}; - -/** - * Matches an attribute selector against an element. - * This function handles various attribute matchers like '=', '~=', '^=', etc., - * and considers namespaces and case sensitivity based on document type. - * @param {object} ast - The AST for the attribute selector. - * @param {object} node - The element node to match against. - * @param {object} [opt] - Optional parameters. - * @param {boolean} [opt.check] - True if running in an internal check. - * @param {boolean} [opt.forgive] - True to forgive certain syntax errors. - * @returns {boolean} - True if the attribute selector matches, otherwise false. - */ -export const matchAttributeSelector = (ast, node, opt = {}) => { - const { - flags: astFlags, - matcher: astMatcher, - name: astName, - value: astValue - } = ast; - const { check, forgive, globalObject } = opt; - // Validate selector flags ('i' or 's'). - if (typeof astFlags === 'string' && !/^[is]$/i.test(astFlags) && !forgive) { - const css = generateCSS(ast); - throw generateException( - `Invalid selector ${css}`, - SYNTAX_ERR, - globalObject - ); - } - const { attributes } = node; - // An element with no attributes cannot match. - if (!attributes || !attributes.length) { - return false; - } - // Determine case sensitivity based on document type and flags. - const contentType = node.ownerDocument.contentType; - let caseInsensitive; - if (contentType === 'text/html') { - if (typeof astFlags === 'string' && /^s$/i.test(astFlags)) { - caseInsensitive = false; - } else { - caseInsensitive = true; - } - } else if (typeof astFlags === 'string' && /^i$/i.test(astFlags)) { - caseInsensitive = true; - } else { - caseInsensitive = false; - } - // Prepare the attribute name from the selector for matching. - let astAttrName = unescapeSelector(astName.name); - if (caseInsensitive) { - astAttrName = astAttrName.toLowerCase(); - } - // A set to store the values of attributes whose names match. - const attrValues = new Set(); - // Handle namespaced attribute names (e.g., [*|attr], [ns|attr]). - if (astAttrName.indexOf('|') > -1) { - const { prefix: astPrefix, localName: astLocalName } = - parseAstName(astAttrName); - for (const item of attributes) { - let { name: itemName, value: itemValue } = item; - if (caseInsensitive) { - itemName = itemName.toLowerCase(); - itemValue = itemValue.toLowerCase(); - } - switch (astPrefix) { - case '': { - if (astLocalName === itemName) { - attrValues.add(itemValue); - } - break; - } - case '*': { - if (itemName.indexOf(':') > -1) { - const [, ...restItemName] = itemName.split(':'); - const itemLocalName = restItemName.join(':').replace(/^:/, ''); - if (itemLocalName === astLocalName) { - attrValues.add(itemValue); - } - } else if (astLocalName === itemName) { - attrValues.add(itemValue); - } - break; - } - default: { - if (!check) { - if (forgive) { - return false; - } - const css = generateCSS(ast); - throw generateException( - `Invalid selector ${css}`, - SYNTAX_ERR, - globalObject - ); - } - if (itemName.indexOf(':') > -1) { - const [itemPrefix, ...restItemName] = itemName.split(':'); - const itemLocalName = restItemName.join(':').replace(/^:/, ''); - // Ignore the 'xml:lang' attribute. - if (itemPrefix === 'xml' && itemLocalName === 'lang') { - continue; - } else if ( - astPrefix === itemPrefix && - astLocalName === itemLocalName - ) { - const namespaceDeclared = isNamespaceDeclared(astPrefix, node); - if (namespaceDeclared) { - attrValues.add(itemValue); - } - } - } - } - } - } - // Handle non-namespaced attribute names. - } else { - for (let { name: itemName, value: itemValue } of attributes) { - if (caseInsensitive) { - itemName = itemName.toLowerCase(); - itemValue = itemValue.toLowerCase(); - } - if (itemName.indexOf(':') > -1) { - const [itemPrefix, ...restItemName] = itemName.split(':'); - const itemLocalName = restItemName.join(':').replace(/^:/, ''); - // The attribute is starting with ':'. - if (!itemPrefix && astAttrName === `:${itemLocalName}`) { - attrValues.add(itemValue); - // Ignore the 'xml:lang' attribute. - } else if (itemPrefix === 'xml' && itemLocalName === 'lang') { - continue; - } else if (astAttrName === itemLocalName) { - attrValues.add(itemValue); - } - } else if (astAttrName === itemName) { - attrValues.add(itemValue); - } - } - } - if (!attrValues.size) { - return false; - } - // Prepare the value from the selector's RHS for comparison. - const { name: astIdentValue, value: astStringValue } = astValue ?? {}; - let attrValue; - if (astIdentValue) { - if (caseInsensitive) { - attrValue = astIdentValue.toLowerCase(); - } else { - attrValue = astIdentValue; - } - } else if (astStringValue) { - if (caseInsensitive) { - attrValue = astStringValue.toLowerCase(); - } else { - attrValue = astStringValue; - } - } else if (astStringValue === '') { - attrValue = astStringValue; - } - // Perform the final match based on the specified matcher. - switch (astMatcher) { - case '=': { - return typeof attrValue === 'string' && attrValues.has(attrValue); - } - case '~=': { - if (attrValue && typeof attrValue === 'string') { - for (const value of attrValues) { - const item = new Set(value.split(/\s+/)); - if (item.has(attrValue)) { - return true; - } - } - } - return false; - } - case '|=': { - if (attrValue && typeof attrValue === 'string') { - for (const value of attrValues) { - if (value === attrValue || value.startsWith(`${attrValue}-`)) { - return true; - } - } - } - return false; - } - case '^=': { - if (attrValue && typeof attrValue === 'string') { - for (const value of attrValues) { - if (value.startsWith(`${attrValue}`)) { - return true; - } - } - } - return false; - } - case '$=': { - if (attrValue && typeof attrValue === 'string') { - for (const value of attrValues) { - if (value.endsWith(`${attrValue}`)) { - return true; - } - } - } - return false; - } - case '*=': { - if (attrValue && typeof attrValue === 'string') { - for (const value of attrValues) { - if (value.includes(`${attrValue}`)) { - return true; - } - } - } - return false; - } - case null: - default: { - // This case handles attribute existence checks (e.g., '[disabled]'). - return true; - } - } -}; - -/** - * match type selector - * @param {object} ast - AST - * @param {object} node - Element node - * @param {object} [opt] - options - * @param {boolean} [opt.check] - running in internal check() - * @param {boolean} [opt.forgive] - forgive undeclared namespace - * @returns {boolean} - result - */ -export const matchTypeSelector = (ast, node, opt = {}) => { - const astName = unescapeSelector(ast.name); - const { localName, namespaceURI, prefix } = node; - const { check, forgive, globalObject } = opt; - let { prefix: astPrefix, localName: astLocalName } = parseAstName( - astName, - node - ); - if ( - node.ownerDocument.contentType === 'text/html' && - (!namespaceURI || namespaceURI === 'http://www.w3.org/1999/xhtml') && - REG_TAG_NAME.test(localName) - ) { - astPrefix = astPrefix.toLowerCase(); - astLocalName = astLocalName.toLowerCase(); - } - let nodePrefix; - let nodeLocalName; - // just in case that the namespaced content is parsed as text/html - if (localName.indexOf(':') > -1) { - [nodePrefix, nodeLocalName] = localName.split(':'); - } else { - nodePrefix = prefix || ''; - nodeLocalName = localName; - } - switch (astPrefix) { - case '': { - if ( - !nodePrefix && - !namespaceURI && - (astLocalName === '*' || astLocalName === nodeLocalName) - ) { - return true; - } - return false; - } - case '*': { - if (astLocalName === '*' || astLocalName === nodeLocalName) { - return true; - } - return false; - } - default: { - if (!check) { - if (forgive) { - return false; - } - const css = generateCSS(ast); - throw generateException( - `Invalid selector ${css}`, - SYNTAX_ERR, - globalObject - ); - } - const astNS = node.lookupNamespaceURI(astPrefix); - const nodeNS = node.lookupNamespaceURI(nodePrefix); - if (astNS === nodeNS && astPrefix === nodePrefix) { - if (astLocalName === '*' || astLocalName === nodeLocalName) { - return true; - } - return false; - } else if (!forgive && !astNS) { - throw generateException( - `Undeclared namespace ${astPrefix}`, - SYNTAX_ERR, - globalObject - ); - } - return false; - } - } -}; diff --git a/vanilla/node_modules/@asamuzakjp/dom-selector/src/js/parser.js b/vanilla/node_modules/@asamuzakjp/dom-selector/src/js/parser.js deleted file mode 100644 index bf06d9f..0000000 --- a/vanilla/node_modules/@asamuzakjp/dom-selector/src/js/parser.js +++ /dev/null @@ -1,431 +0,0 @@ -/** - * parser.js - */ - -/* import */ -import * as cssTree from 'css-tree'; -import { getType } from './utility.js'; - -/* constants */ -import { - ATTR_SELECTOR, - BIT_01, - BIT_02, - BIT_04, - BIT_08, - BIT_16, - BIT_32, - BIT_FFFF, - CLASS_SELECTOR, - DUO, - HEX, - ID_SELECTOR, - KEYS_LOGICAL, - NTH, - PS_CLASS_SELECTOR, - PS_ELEMENT_SELECTOR, - SELECTOR, - SYNTAX_ERR, - TYPE_SELECTOR -} from './constant.js'; -const AST_SORT_ORDER = new Map([ - [PS_ELEMENT_SELECTOR, BIT_01], - [ID_SELECTOR, BIT_02], - [CLASS_SELECTOR, BIT_04], - [TYPE_SELECTOR, BIT_08], - [ATTR_SELECTOR, BIT_16], - [PS_CLASS_SELECTOR, BIT_32] -]); -const KEYS_PS_CLASS_STATE = new Set([ - 'checked', - 'closed', - 'disabled', - 'empty', - 'enabled', - 'in-range', - 'indeterminate', - 'invalid', - 'open', - 'out-of-range', - 'placeholder-shown', - 'read-only', - 'read-write', - 'valid' -]); -const KEYS_SHADOW_HOST = new Set(['host', 'host-context']); -const REG_EMPTY_PS_FUNC = - /(?<=:(?:dir|has|host(?:-context)?|is|lang|not|nth-(?:last-)?(?:child|of-type)|where))\(\s+\)/g; -const REG_SHADOW_PS_ELEMENT = /^part|slotted$/; -const U_FFFD = '\uFFFD'; - -/** - * Unescapes a CSS selector string. - * @param {string} selector - The CSS selector to unescape. - * @returns {string} The unescaped selector string. - */ -export const unescapeSelector = (selector = '') => { - if (typeof selector === 'string' && selector.indexOf('\\', 0) >= 0) { - const arr = selector.split('\\'); - const selectorItems = [arr[0]]; - const l = arr.length; - for (let i = 1; i < l; i++) { - const item = arr[i]; - if (item === '' && i === l - 1) { - selectorItems.push(U_FFFD); - } else { - const hexExists = /^([\da-f]{1,6}\s?)/i.exec(item); - if (hexExists) { - const [, hex] = hexExists; - let str; - try { - const low = parseInt('D800', HEX); - const high = parseInt('DFFF', HEX); - const deci = parseInt(hex, HEX); - if (deci === 0 || (deci >= low && deci <= high)) { - str = U_FFFD; - } else { - str = String.fromCodePoint(deci); - } - } catch (e) { - str = U_FFFD; - } - let postStr = ''; - if (item.length > hex.length) { - postStr = item.substring(hex.length); - } - selectorItems.push(`${str}${postStr}`); - // whitespace - } else if (/^[\n\r\f]/.test(item)) { - selectorItems.push(`\\${item}`); - } else { - selectorItems.push(item); - } - } - } - return selectorItems.join(''); - } - return selector; -}; - -/** - * Preprocesses a selector string according to the specification. - * @see https://drafts.csswg.org/css-syntax-3/#input-preprocessing - * @param {string} value - The value to preprocess. - * @returns {string} The preprocessed selector string. - */ -export const preprocess = value => { - // Non-string values will be converted to string. - if (typeof value !== 'string') { - if (value === undefined || value === null) { - return getType(value).toLowerCase(); - } else if (Array.isArray(value)) { - return value.join(','); - } else if (Object.hasOwn(value, 'toString')) { - return value.toString(); - } else { - throw new DOMException(`Invalid selector ${value}`, SYNTAX_ERR); - } - } - let selector = value; - let index = 0; - while (index >= 0) { - // @see https://drafts.csswg.org/selectors/#id-selectors - index = selector.indexOf('#', index); - if (index < 0) { - break; - } - const preHash = selector.substring(0, index + 1); - let postHash = selector.substring(index + 1); - const codePoint = postHash.codePointAt(0); - if (codePoint > BIT_FFFF) { - const str = `\\${codePoint.toString(HEX)} `; - if (postHash.length === DUO) { - postHash = str; - } else { - postHash = `${str}${postHash.substring(DUO)}`; - } - } - selector = `${preHash}${postHash}`; - index++; - } - return selector - .replace(/\f|\r\n?/g, '\n') - .replace(/[\0\uD800-\uDFFF]|\\$/g, U_FFFD) - .replace(/\x26/g, ':scope'); -}; - -/** - * Creates an Abstract Syntax Tree (AST) from a CSS selector string. - * @param {string} sel - The CSS selector string. - * @returns {object} The parsed AST object. - */ -export const parseSelector = sel => { - const selector = preprocess(sel); - // invalid selectors - if (/^$|^\s*>|,\s*$/.test(selector)) { - throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR); - } - try { - const ast = cssTree.parse(selector, { - context: 'selectorList', - parseCustomProperty: true - }); - return cssTree.toPlainObject(ast); - } catch (e) { - const { message } = e; - if ( - /^(?:"\]"|Attribute selector [()\s,=~^$*|]+) is expected$/.test( - message - ) && - !selector.endsWith(']') - ) { - const index = selector.lastIndexOf('['); - const selPart = selector.substring(index); - if (selPart.includes('"')) { - const quotes = selPart.match(/"/g).length; - if (quotes % 2) { - return parseSelector(`${selector}"]`); - } - return parseSelector(`${selector}]`); - } - return parseSelector(`${selector}]`); - } else if (message === '")" is expected') { - // workaround for https://github.com/csstree/csstree/issues/283 - if (REG_EMPTY_PS_FUNC.test(selector)) { - return parseSelector(`${selector.replaceAll(REG_EMPTY_PS_FUNC, '()')}`); - } else if (!selector.endsWith(')')) { - return parseSelector(`${selector})`); - } else { - throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR); - } - } else { - throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR); - } - } -}; - -/** - * Walks the provided AST to collect selector branches and gather information - * about its contents. - * @param {object} ast - The AST to traverse. - * @returns {{branches: Array<object>, info: object}} An object containing the selector branches and info. - */ -export const walkAST = (ast = {}) => { - const branches = new Set(); - const info = { - hasForgivenPseudoFunc: false, - hasHasPseudoFunc: false, - hasLogicalPseudoFunc: false, - hasNotPseudoFunc: false, - hasNthChildOfSelector: false, - hasNestedSelector: false, - hasStatePseudoClass: false - }; - const opt = { - enter(node) { - switch (node.type) { - case CLASS_SELECTOR: { - if (/^-?\d/.test(node.name)) { - throw new DOMException( - `Invalid selector .${node.name}`, - SYNTAX_ERR - ); - } - break; - } - case ID_SELECTOR: { - if (/^-?\d/.test(node.name)) { - throw new DOMException( - `Invalid selector #${node.name}`, - SYNTAX_ERR - ); - } - break; - } - case PS_CLASS_SELECTOR: { - if (KEYS_LOGICAL.has(node.name)) { - info.hasNestedSelector = true; - info.hasLogicalPseudoFunc = true; - if (node.name === 'has') { - info.hasHasPseudoFunc = true; - } else if (node.name === 'not') { - info.hasNotPseudoFunc = true; - } else { - info.hasForgivenPseudoFunc = true; - } - } else if (KEYS_PS_CLASS_STATE.has(node.name)) { - info.hasStatePseudoClass = true; - } else if ( - KEYS_SHADOW_HOST.has(node.name) && - Array.isArray(node.children) && - node.children.length - ) { - info.hasNestedSelector = true; - } - break; - } - case PS_ELEMENT_SELECTOR: { - if (REG_SHADOW_PS_ELEMENT.test(node.name)) { - info.hasNestedSelector = true; - } - break; - } - case NTH: { - if (node.selector) { - info.hasNestedSelector = true; - info.hasNthChildOfSelector = true; - } - break; - } - case SELECTOR: { - branches.add(node.children); - break; - } - default: - } - } - }; - cssTree.walk(ast, opt); - if (info.hasNestedSelector === true) { - cssTree.findAll(ast, (node, item, list) => { - if (list) { - if (node.type === PS_CLASS_SELECTOR && KEYS_LOGICAL.has(node.name)) { - const itemList = list.filter(i => { - const { name, type } = i; - return type === PS_CLASS_SELECTOR && KEYS_LOGICAL.has(name); - }); - for (const { children } of itemList) { - // SelectorList - for (const { children: grandChildren } of children) { - // Selector - for (const { children: greatGrandChildren } of grandChildren) { - if (branches.has(greatGrandChildren)) { - branches.delete(greatGrandChildren); - } - } - } - } - } else if ( - node.type === PS_CLASS_SELECTOR && - KEYS_SHADOW_HOST.has(node.name) && - Array.isArray(node.children) && - node.children.length - ) { - const itemList = list.filter(i => { - const { children, name, type } = i; - const res = - type === PS_CLASS_SELECTOR && - KEYS_SHADOW_HOST.has(name) && - Array.isArray(children) && - children.length; - return res; - }); - for (const { children } of itemList) { - // Selector - for (const { children: grandChildren } of children) { - if (branches.has(grandChildren)) { - branches.delete(grandChildren); - } - } - } - } else if ( - node.type === PS_ELEMENT_SELECTOR && - REG_SHADOW_PS_ELEMENT.test(node.name) - ) { - const itemList = list.filter(i => { - const { name, type } = i; - const res = - type === PS_ELEMENT_SELECTOR && REG_SHADOW_PS_ELEMENT.test(name); - return res; - }); - for (const { children } of itemList) { - // Selector - for (const { children: grandChildren } of children) { - if (branches.has(grandChildren)) { - branches.delete(grandChildren); - } - } - } - } else if (node.type === NTH && node.selector) { - const itemList = list.filter(i => { - const { selector, type } = i; - const res = type === NTH && selector; - return res; - }); - for (const { selector } of itemList) { - const { children } = selector; - // Selector - for (const { children: grandChildren } of children) { - if (branches.has(grandChildren)) { - branches.delete(grandChildren); - } - } - } - } - } - }); - } - return { - info, - branches: [...branches] - }; -}; - -/** - * Comparison function for sorting AST nodes based on specificity. - * @param {object} a - The first AST node. - * @param {object} b - The second AST node. - * @returns {number} -1, 0 or 1, depending on the sort order. - */ -export const compareASTNodes = (a, b) => { - const bitA = AST_SORT_ORDER.get(a.type); - const bitB = AST_SORT_ORDER.get(b.type); - if (bitA === bitB) { - return 0; - } else if (bitA > bitB) { - return 1; - } else { - return -1; - } -}; - -/** - * Sorts a collection of AST nodes based on CSS specificity rules. - * @param {Array<object>} asts - A collection of AST nodes to sort. - * @returns {Array<object>} A new array containing the sorted AST nodes. - */ -export const sortAST = asts => { - const arr = [...asts]; - if (arr.length > 1) { - arr.sort(compareASTNodes); - } - return arr; -}; - -/** - * Parses a type selector's name, which may include a namespace prefix. - * @param {string} selector - The type selector name (e.g., 'ns|E' or 'E'). - * @returns {{prefix: string, localName: string}} An object with `prefix` and - * `localName` properties. - */ -export const parseAstName = selector => { - let prefix; - let localName; - if (selector && typeof selector === 'string') { - if (selector.indexOf('|') > -1) { - [prefix, localName] = selector.split('|'); - } else { - prefix = '*'; - localName = selector; - } - } else { - throw new DOMException(`Invalid selector ${selector}`, SYNTAX_ERR); - } - return { - prefix, - localName - }; -}; - -/* Re-exported from css-tree. */ -export { find as findAST, generate as generateCSS } from 'css-tree'; diff --git a/vanilla/node_modules/@asamuzakjp/dom-selector/src/js/utility.js b/vanilla/node_modules/@asamuzakjp/dom-selector/src/js/utility.js deleted file mode 100644 index ce141a4..0000000 --- a/vanilla/node_modules/@asamuzakjp/dom-selector/src/js/utility.js +++ /dev/null @@ -1,1107 +0,0 @@ -/** - * utility.js - */ - -/* import */ -import nwsapi from '@asamuzakjp/nwsapi'; -import bidiFactory from 'bidi-js'; -import * as cssTree from 'css-tree'; -import isCustomElementName from 'is-potential-custom-element-name'; - -/* constants */ -import { - ATRULE, - COMBO, - COMPOUND_I, - DESCEND, - DOCUMENT_FRAGMENT_NODE, - DOCUMENT_NODE, - DOCUMENT_POSITION_CONTAINS, - DOCUMENT_POSITION_PRECEDING, - ELEMENT_NODE, - HAS_COMPOUND, - INPUT_BUTTON, - INPUT_EDIT, - INPUT_LTR, - INPUT_TEXT, - KEYS_LOGICAL, - LOGIC_COMPLEX, - LOGIC_COMPOUND, - N_TH, - PSEUDO_CLASS, - RULE, - SCOPE, - SELECTOR_LIST, - SIBLING, - TARGET_ALL, - TARGET_FIRST, - TEXT_NODE, - TYPE_FROM, - TYPE_TO -} from './constant.js'; -const KEYS_DIR_AUTO = new Set([...INPUT_BUTTON, ...INPUT_TEXT, 'hidden']); -const KEYS_DIR_LTR = new Set(INPUT_LTR); -const KEYS_INPUT_EDIT = new Set(INPUT_EDIT); -const KEYS_NODE_DIR_EXCLUDE = new Set(['bdi', 'script', 'style', 'textarea']); -const KEYS_NODE_FOCUSABLE = new Set(['button', 'select', 'textarea']); -const KEYS_NODE_FOCUSABLE_SVG = new Set([ - 'clipPath', - 'defs', - 'desc', - 'linearGradient', - 'marker', - 'mask', - 'metadata', - 'pattern', - 'radialGradient', - 'script', - 'style', - 'symbol', - 'title' -]); -const REG_EXCLUDE_BASIC = - /[|\\]|::|[^\u0021-\u007F\s]|\[\s*[\w$*=^|~-]+(?:(?:"[\w$*=^|~\s'-]+"|'[\w$*=^|~\s"-]+')?(?:\s+[\w$*=^|~-]+)+|"[^"\]]{1,255}|'[^'\]]{1,255})\s*\]|:(?:is|where)\(\s*\)/; -const REG_COMPLEX = new RegExp(`${COMPOUND_I}${COMBO}${COMPOUND_I}`, 'i'); -const REG_DESCEND = new RegExp(`${COMPOUND_I}${DESCEND}${COMPOUND_I}`, 'i'); -const REG_SIBLING = new RegExp(`${COMPOUND_I}${SIBLING}${COMPOUND_I}`, 'i'); -const REG_LOGIC_COMPLEX = new RegExp( - `:(?!${PSEUDO_CLASS}|${N_TH}|${LOGIC_COMPLEX})` -); -const REG_LOGIC_COMPOUND = new RegExp( - `:(?!${PSEUDO_CLASS}|${N_TH}|${LOGIC_COMPOUND})` -); -const REG_LOGIC_HAS_COMPOUND = new RegExp( - `:(?!${PSEUDO_CLASS}|${N_TH}|${LOGIC_COMPOUND}|${HAS_COMPOUND})` -); -const REG_END_WITH_HAS = new RegExp(`:${HAS_COMPOUND}$`); -const REG_WO_LOGICAL = new RegExp(`:(?!${PSEUDO_CLASS}|${N_TH})`); -const REG_IS_HTML = /^(?:application\/xhtml\+x|text\/ht)ml$/; -const REG_IS_XML = - /^(?:application\/(?:[\w\-.]+\+)?|image\/[\w\-.]+\+|text\/)xml$/; - -/** - * Manages state for extracting nested selectors from a CSS AST. - */ -class SelectorExtractor { - constructor() { - this.selectors = []; - this.isScoped = false; - } - - /** - * Walker enter function. - * @param {object} node - The AST node. - */ - enter(node) { - switch (node.type) { - case ATRULE: { - if (node.name === 'scope') { - this.isScoped = true; - } - break; - } - case SCOPE: { - const { children, type } = node.root; - const arr = []; - if (type === SELECTOR_LIST) { - for (const child of children) { - const selector = cssTree.generate(child); - arr.push(selector); - } - this.selectors.push(arr); - } - break; - } - case RULE: { - const { children, type } = node.prelude; - const arr = []; - if (type === SELECTOR_LIST) { - let hasAmp = false; - for (const child of children) { - const selector = cssTree.generate(child); - if (this.isScoped && !hasAmp) { - hasAmp = /\x26/.test(selector); - } - arr.push(selector); - } - if (this.isScoped) { - if (hasAmp) { - this.selectors.push(arr); - /* FIXME: - } else { - this.selectors = arr; - this.isScoped = false; - */ - } - } else { - this.selectors.push(arr); - } - } - } - } - } - - /** - * Walker leave function. - * @param {object} node - The AST node. - */ - leave(node) { - if (node.type === ATRULE) { - if (node.name === 'scope') { - this.isScoped = false; - } - } - } -} - -/** - * Get type of an object. - * @param {object} o - Object to check. - * @returns {string} - Type of the object. - */ -export const getType = o => - Object.prototype.toString.call(o).slice(TYPE_FROM, TYPE_TO); - -/** - * Verify array contents. - * @param {Array} arr - The array. - * @param {string} type - Expected type, e.g. 'String'. - * @throws {TypeError} - Throws if array or its items are of unexpected type. - * @returns {Array} - The verified array. - */ -export const verifyArray = (arr, type) => { - if (!Array.isArray(arr)) { - throw new TypeError(`Unexpected type ${getType(arr)}`); - } - if (typeof type !== 'string') { - throw new TypeError(`Unexpected type ${getType(type)}`); - } - for (const item of arr) { - if (getType(item) !== type) { - throw new TypeError(`Unexpected type ${getType(item)}`); - } - } - return arr; -}; - -/** - * Generate a DOMException. - * @param {string} msg - The error message. - * @param {string} name - The error name. - * @param {object} globalObject - The global object (e.g., window). - * @returns {DOMException} The generated DOMException object. - */ -export const generateException = (msg, name, globalObject = globalThis) => { - return new globalObject.DOMException(msg, name); -}; - -/** - * Find a nested :has() pseudo-class. - * @param {object} leaf - The AST leaf to check. - * @returns {?object} The leaf if it's :has, otherwise null. - */ -export const findNestedHas = leaf => { - return leaf.name === 'has'; -}; - -/** - * Find a logical pseudo-class that contains a nested :has(). - * @param {object} leaf - The AST leaf to check. - * @returns {?object} The leaf if it matches, otherwise null. - */ -export const findLogicalWithNestedHas = leaf => { - if (KEYS_LOGICAL.has(leaf.name) && cssTree.find(leaf, findNestedHas)) { - return leaf; - } - return null; -}; - -/** - * Filter a list of nodes based on An+B logic - * @param {Array.<object>} nodes - array of nodes to filter - * @param {object} anb - An+B options - * @param {number} anb.a - a - * @param {number} anb.b - b - * @param {boolean} [anb.reverse] - reverse order - * @returns {Array.<object>} - array of matched nodes - */ -export const filterNodesByAnB = (nodes, anb) => { - const { a, b, reverse } = anb; - const processedNodes = reverse ? [...nodes].reverse() : nodes; - const l = nodes.length; - const matched = []; - if (a === 0) { - if (b > 0 && b <= l) { - matched.push(processedNodes[b - 1]); - } - return matched; - } - let startIndex = b - 1; - if (a > 0) { - while (startIndex < 0) { - startIndex += a; - } - for (let i = startIndex; i < l; i += a) { - matched.push(processedNodes[i]); - } - } else if (startIndex >= 0) { - for (let i = startIndex; i >= 0; i += a) { - matched.push(processedNodes[i]); - } - return matched.reverse(); - } - return matched; -}; - -/** - * Resolve content document, root node, and check if it's in a shadow DOM. - * @param {object} node - Document, DocumentFragment, or Element node. - * @returns {Array.<object|boolean>} - [document, root, isInShadow]. - */ -export const resolveContent = node => { - if (!node?.nodeType) { - throw new TypeError(`Unexpected type ${getType(node)}`); - } - let document; - let root; - let shadow; - switch (node.nodeType) { - case DOCUMENT_NODE: { - document = node; - root = node; - break; - } - case DOCUMENT_FRAGMENT_NODE: { - const { host, mode, ownerDocument } = node; - document = ownerDocument; - root = node; - shadow = host && (mode === 'close' || mode === 'open'); - break; - } - case ELEMENT_NODE: { - document = node.ownerDocument; - let refNode = node; - while (refNode) { - const { host, mode, nodeType, parentNode } = refNode; - if (nodeType === DOCUMENT_FRAGMENT_NODE) { - shadow = host && (mode === 'close' || mode === 'open'); - break; - } else if (parentNode) { - refNode = parentNode; - } else { - break; - } - } - root = refNode; - break; - } - default: { - throw new TypeError(`Unexpected node ${node.nodeName}`); - } - } - return [document, root, !!shadow]; -}; - -/** - * Traverse node tree with a TreeWalker. - * @param {object} node - The target node. - * @param {object} walker - The TreeWalker instance. - * @param {boolean} [force] - Traverse only to the next node. - * @returns {?object} - The current node if found, otherwise null. - */ -export const traverseNode = (node, walker, force = false) => { - if (!node?.nodeType) { - throw new TypeError(`Unexpected type ${getType(node)}`); - } - if (!walker) { - return null; - } - let refNode = walker.currentNode; - if (refNode === node) { - return refNode; - } else if (force || refNode.contains(node)) { - refNode = walker.nextNode(); - while (refNode) { - if (refNode === node) { - break; - } - refNode = walker.nextNode(); - } - return refNode; - } else { - if (refNode !== walker.root) { - let bool; - while (refNode) { - if (refNode === node) { - bool = true; - break; - } else if (refNode === walker.root || refNode.contains(node)) { - break; - } - refNode = walker.parentNode(); - } - if (bool) { - return refNode; - } - } - if (node.nodeType === ELEMENT_NODE) { - let bool; - while (refNode) { - if (refNode === node) { - bool = true; - break; - } - refNode = walker.nextNode(); - } - if (bool) { - return refNode; - } - } - } - return null; -}; - -/** - * Check if a node is a custom element. - * @param {object} node - The Element node. - * @param {object} [opt] - Options. - * @returns {boolean} - True if it's a custom element. - */ -export const isCustomElement = (node, opt = {}) => { - if (!node?.nodeType) { - throw new TypeError(`Unexpected type ${getType(node)}`); - } - if (node.nodeType !== ELEMENT_NODE) { - return false; - } - const { localName, ownerDocument } = node; - const { formAssociated } = opt; - const window = ownerDocument.defaultView; - let elmConstructor; - const attr = node.getAttribute('is'); - if (attr) { - elmConstructor = - isCustomElementName(attr) && window.customElements.get(attr); - } else { - elmConstructor = - isCustomElementName(localName) && window.customElements.get(localName); - } - if (elmConstructor) { - if (formAssociated) { - return !!elmConstructor.formAssociated; - } - return true; - } - return false; -}; - -/** - * Get slotted text content. - * @param {object} node - The Element node (likely a <slot>). - * @returns {?string} - The text content. - */ -export const getSlottedTextContent = node => { - if (!node?.nodeType) { - throw new TypeError(`Unexpected type ${getType(node)}`); - } - if (typeof node.assignedNodes !== 'function') { - return null; - } - const nodes = node.assignedNodes(); - if (nodes.length) { - let text = ''; - const l = nodes.length; - for (let i = 0; i < l; i++) { - const item = nodes[i]; - text = item.textContent.trim(); - if (text) { - break; - } - } - return text; - } - return node.textContent.trim(); -}; - -/** - * Get directionality of a node. - * @see https://html.spec.whatwg.org/multipage/dom.html#the-dir-attribute - * @param {object} node - The Element node. - * @returns {?string} - 'ltr' or 'rtl'. - */ -export const getDirectionality = node => { - if (!node?.nodeType) { - throw new TypeError(`Unexpected type ${getType(node)}`); - } - if (node.nodeType !== ELEMENT_NODE) { - return null; - } - const { dir: dirAttr, localName, parentNode } = node; - const { getEmbeddingLevels } = bidiFactory(); - if (dirAttr === 'ltr' || dirAttr === 'rtl') { - return dirAttr; - } else if (dirAttr === 'auto') { - let text = ''; - switch (localName) { - case 'input': { - if (!node.type || KEYS_DIR_AUTO.has(node.type)) { - text = node.value; - } else if (KEYS_DIR_LTR.has(node.type)) { - return 'ltr'; - } - break; - } - case 'slot': { - text = getSlottedTextContent(node); - break; - } - case 'textarea': { - text = node.value; - break; - } - default: { - const items = [].slice.call(node.childNodes); - for (const item of items) { - const { - dir: itemDir, - localName: itemLocalName, - nodeType: itemNodeType, - textContent: itemTextContent - } = item; - if (itemNodeType === TEXT_NODE) { - text = itemTextContent.trim(); - } else if ( - itemNodeType === ELEMENT_NODE && - !KEYS_NODE_DIR_EXCLUDE.has(itemLocalName) && - (!itemDir || (itemDir !== 'ltr' && itemDir !== 'rtl')) - ) { - if (itemLocalName === 'slot') { - text = getSlottedTextContent(item); - } else { - text = itemTextContent.trim(); - } - } - if (text) { - break; - } - } - } - } - if (text) { - const { - paragraphs: [{ level }] - } = getEmbeddingLevels(text); - if (level % 2 === 1) { - return 'rtl'; - } - } else if (parentNode) { - const { nodeType: parentNodeType } = parentNode; - if (parentNodeType === ELEMENT_NODE) { - return getDirectionality(parentNode); - } - } - } else if (localName === 'input' && node.type === 'tel') { - return 'ltr'; - } else if (localName === 'bdi') { - const text = node.textContent.trim(); - if (text) { - const { - paragraphs: [{ level }] - } = getEmbeddingLevels(text); - if (level % 2 === 1) { - return 'rtl'; - } - } - } else if (parentNode) { - if (localName === 'slot') { - const text = getSlottedTextContent(node); - if (text) { - const { - paragraphs: [{ level }] - } = getEmbeddingLevels(text); - if (level % 2 === 1) { - return 'rtl'; - } - return 'ltr'; - } - } - const { nodeType: parentNodeType } = parentNode; - if (parentNodeType === ELEMENT_NODE) { - return getDirectionality(parentNode); - } - } - return 'ltr'; -}; - -/** - * Traverses up the DOM tree to find the language attribute for a node. - * It checks for 'lang' in HTML and 'xml:lang' in XML contexts. - * @param {object} node - The starting element node. - * @returns {string|null} The language attribute value, or null if not found. - */ -export const getLanguageAttribute = node => { - if (!node?.nodeType) { - throw new TypeError(`Unexpected type ${getType(node)}`); - } - if (node.nodeType !== ELEMENT_NODE) { - return null; - } - const { contentType } = node.ownerDocument; - const isHtml = REG_IS_HTML.test(contentType); - const isXml = REG_IS_XML.test(contentType); - let isShadow = false; - // Traverse up from the current node to the root. - let current = node; - while (current) { - // Check if the current node is an element. - switch (current.nodeType) { - case ELEMENT_NODE: { - // Check for and return the language attribute if present. - if (isHtml && current.hasAttribute('lang')) { - return current.getAttribute('lang'); - } else if (isXml && current.hasAttribute('xml:lang')) { - return current.getAttribute('xml:lang'); - } - break; - } - case DOCUMENT_FRAGMENT_NODE: { - // Continue traversal if the current node is a shadow root. - if (current.host) { - isShadow = true; - } - break; - } - case DOCUMENT_NODE: - default: { - // Stop if we reach the root document node. - return null; - } - } - if (isShadow) { - current = current.host; - isShadow = false; - } else if (current.parentNode) { - current = current.parentNode; - } else { - break; - } - } - // No language attribute was found in the hierarchy. - return null; -}; - -/** - * Check if content is editable. - * NOTE: Not implemented in jsdom https://github.com/jsdom/jsdom/issues/1670 - * @param {object} node - The Element node. - * @returns {boolean} - True if content is editable. - */ -export const isContentEditable = node => { - if (!node?.nodeType) { - throw new TypeError(`Unexpected type ${getType(node)}`); - } - if (node.nodeType !== ELEMENT_NODE) { - return false; - } - if (typeof node.isContentEditable === 'boolean') { - return node.isContentEditable; - } else if (node.ownerDocument.designMode === 'on') { - return true; - } else { - let attr; - if (node.hasAttribute('contenteditable')) { - attr = node.getAttribute('contenteditable'); - } else { - attr = 'inherit'; - } - switch (attr) { - case '': - case 'true': { - return true; - } - case 'plaintext-only': { - // FIXME: - // @see https://github.com/w3c/editing/issues/470 - // @see https://github.com/whatwg/html/issues/10651 - return true; - } - case 'false': { - return false; - } - default: { - if (node?.parentNode?.nodeType === ELEMENT_NODE) { - return isContentEditable(node.parentNode); - } - return false; - } - } - } -}; - -/** - * Check if a node is visible. - * @param {object} node - The Element node. - * @returns {boolean} - True if the node is visible. - */ -export const isVisible = node => { - if (node?.nodeType !== ELEMENT_NODE) { - return false; - } - const window = node.ownerDocument.defaultView; - const { display, visibility } = window.getComputedStyle(node); - if (display !== 'none' && visibility === 'visible') { - return true; - } - return false; -}; - -/** - * Check if focus is visible on the node. - * @param {object} node - The Element node. - * @returns {boolean} - True if focus is visible. - */ -export const isFocusVisible = node => { - if (node?.nodeType !== ELEMENT_NODE) { - return false; - } - const { localName, type } = node; - switch (localName) { - case 'input': { - if (!type || KEYS_INPUT_EDIT.has(type)) { - return true; - } - return false; - } - case 'textarea': { - return true; - } - default: { - return isContentEditable(node); - } - } -}; - -/** - * Check if an area is focusable. - * @param {object} node - The Element node. - * @returns {boolean} - True if the area is focusable. - */ -export const isFocusableArea = node => { - if (node?.nodeType !== ELEMENT_NODE) { - return false; - } - if (!node.isConnected) { - return false; - } - const window = node.ownerDocument.defaultView; - if (node instanceof window.HTMLElement) { - if (Number.isInteger(parseInt(node.getAttribute('tabindex')))) { - return true; - } - if (isContentEditable(node)) { - return true; - } - const { localName, parentNode } = node; - switch (localName) { - case 'a': { - if (node.href || node.hasAttribute('href')) { - return true; - } - return false; - } - case 'iframe': { - return true; - } - case 'input': { - if ( - node.disabled || - node.hasAttribute('disabled') || - node.hidden || - node.hasAttribute('hidden') - ) { - return false; - } - return true; - } - case 'summary': { - if (parentNode.localName === 'details') { - let child = parentNode.firstElementChild; - let bool = false; - while (child) { - if (child.localName === 'summary') { - bool = child === node; - break; - } - child = child.nextElementSibling; - } - return bool; - } - return false; - } - default: { - if ( - KEYS_NODE_FOCUSABLE.has(localName) && - !(node.disabled || node.hasAttribute('disabled')) - ) { - return true; - } - } - } - } else if (node instanceof window.SVGElement) { - if (Number.isInteger(parseInt(node.getAttributeNS(null, 'tabindex')))) { - const ns = 'http://www.w3.org/2000/svg'; - let bool; - let refNode = node; - while (refNode.namespaceURI === ns) { - bool = KEYS_NODE_FOCUSABLE_SVG.has(refNode.localName); - if (bool) { - break; - } - if (refNode?.parentNode?.namespaceURI === ns) { - refNode = refNode.parentNode; - } else { - break; - } - } - if (bool) { - return false; - } - return true; - } - if ( - node.localName === 'a' && - (node.href || node.hasAttributeNS(null, 'href')) - ) { - return true; - } - } - return false; -}; - -/** - * Check if a node is focusable. - * NOTE: Not applied, needs fix in jsdom itself. - * @see https://github.com/whatwg/html/pull/8392 - * @see https://phabricator.services.mozilla.com/D156219 - * @see https://github.com/jsdom/jsdom/issues/3029 - * @see https://github.com/jsdom/jsdom/issues/3464 - * @param {object} node - The Element node. - * @returns {boolean} - True if the node is focusable. - */ -export const isFocusable = node => { - if (node?.nodeType !== ELEMENT_NODE) { - return false; - } - const window = node.ownerDocument.defaultView; - let refNode = node; - let res = true; - while (refNode) { - if (refNode.disabled || refNode.hasAttribute('disabled')) { - res = false; - break; - } - if (refNode.hidden || refNode.hasAttribute('hidden')) { - res = false; - } - const { contentVisibility, display, visibility } = - window.getComputedStyle(refNode); - if ( - display === 'none' || - visibility !== 'visible' || - (contentVisibility === 'hidden' && refNode !== node) - ) { - res = false; - } else { - res = true; - } - if (res && refNode?.parentNode?.nodeType === ELEMENT_NODE) { - refNode = refNode.parentNode; - } else { - break; - } - } - return res; -}; - -/** - * Get namespace URI. - * @param {string} ns - The namespace prefix. - * @param {object} node - The Element node. - * @returns {?string} - The namespace URI. - */ -export const getNamespaceURI = (ns, node) => { - if (typeof ns !== 'string') { - throw new TypeError(`Unexpected type ${getType(ns)}`); - } else if (!node?.nodeType) { - throw new TypeError(`Unexpected type ${getType(node)}`); - } - if (!ns || node.nodeType !== ELEMENT_NODE) { - return null; - } - const { attributes } = node; - let res; - for (const attr of attributes) { - const { name, namespaceURI, prefix, value } = attr; - if (name === `xmlns:${ns}`) { - res = value; - } else if (prefix === ns) { - res = namespaceURI; - } - if (res) { - break; - } - } - return res ?? null; -}; - -/** - * Check if a namespace is declared. - * @param {string} ns - The namespace. - * @param {object} node - The Element node. - * @returns {boolean} - True if the namespace is declared. - */ -export const isNamespaceDeclared = (ns = '', node = {}) => { - if (!ns || typeof ns !== 'string' || node?.nodeType !== ELEMENT_NODE) { - return false; - } - if (node.lookupNamespaceURI(ns)) { - return true; - } - const root = node.ownerDocument.documentElement; - let parent = node; - let res; - while (parent) { - res = getNamespaceURI(ns, parent); - if (res || parent === root) { - break; - } - parent = parent.parentNode; - } - return !!res; -}; - -/** - * Check if nodeA precedes and/or contains nodeB. - * @param {object} nodeA - The first Element node. - * @param {object} nodeB - The second Element node. - * @returns {boolean} - True if nodeA precedes nodeB. - */ -export const isPreceding = (nodeA, nodeB) => { - if (!nodeA?.nodeType) { - throw new TypeError(`Unexpected type ${getType(nodeA)}`); - } else if (!nodeB?.nodeType) { - throw new TypeError(`Unexpected type ${getType(nodeB)}`); - } - if (nodeA.nodeType !== ELEMENT_NODE || nodeB.nodeType !== ELEMENT_NODE) { - return false; - } - const posBit = nodeB.compareDocumentPosition(nodeA); - const res = - posBit & DOCUMENT_POSITION_PRECEDING || posBit & DOCUMENT_POSITION_CONTAINS; - return !!res; -}; - -/** - * Comparison function for sorting nodes based on document position. - * @param {object} a - The first node. - * @param {object} b - The second node. - * @returns {number} - Sort order. - */ -export const compareNodes = (a, b) => { - if (isPreceding(b, a)) { - return 1; - } - return -1; -}; - -/** - * Sort a collection of nodes. - * @param {Array.<object>|Set.<object>} nodes - Collection of nodes. - * @returns {Array.<object>} - Collection of sorted nodes. - */ -export const sortNodes = (nodes = []) => { - const arr = [...nodes]; - if (arr.length > 1) { - arr.sort(compareNodes); - } - return arr; -}; - -/** - * Concat an array of nested selectors into an equivalent single selector. - * @param {Array.<Array.<string>>} selectors - [parents, children, ...]. - * @returns {string} - The concatenated selector. - */ -export const concatNestedSelectors = selectors => { - if (!Array.isArray(selectors)) { - throw new TypeError(`Unexpected type ${getType(selectors)}`); - } - let selector = ''; - if (selectors.length) { - const revSelectors = selectors.toReversed(); - let child = verifyArray(revSelectors.shift(), 'String'); - if (child.length === 1) { - [child] = child; - } - while (revSelectors.length) { - const parentArr = verifyArray(revSelectors.shift(), 'String'); - if (!parentArr.length) { - continue; - } - let parent; - if (parentArr.length === 1) { - [parent] = parentArr; - if (!/^[>~+]/.test(parent) && /[\s>~+]/.test(parent)) { - parent = `:is(${parent})`; - } - } else { - parent = `:is(${parentArr.join(', ')})`; - } - if (selector.includes('\x26')) { - selector = selector.replace(/\x26/g, parent); - } - if (Array.isArray(child)) { - const items = []; - for (let item of child) { - if (item.includes('\x26')) { - if (/^[>~+]/.test(item)) { - item = `${parent} ${item.replace(/\x26/g, parent)} ${selector}`; - } else { - item = `${item.replace(/\x26/g, parent)} ${selector}`; - } - } else { - item = `${parent} ${item} ${selector}`; - } - items.push(item.trim()); - } - selector = items.join(', '); - } else if (revSelectors.length) { - selector = `${child} ${selector}`; - } else { - if (child.includes('\x26')) { - if (/^[>~+]/.test(child)) { - selector = `${parent} ${child.replace(/\x26/g, parent)} ${selector}`; - } else { - selector = `${child.replace(/\x26/g, parent)} ${selector}`; - } - } else { - selector = `${parent} ${child} ${selector}`; - } - } - selector = selector.trim(); - if (revSelectors.length) { - child = parentArr.length > 1 ? parentArr : parent; - } else { - break; - } - } - selector = selector.replace(/\x26/g, ':scope').trim(); - } - return selector; -}; - -/** - * Extract nested selectors from CSSRule.cssText. - * @param {string} css - CSSRule.cssText. - * @returns {Array.<Array.<string>>} - Array of nested selectors. - */ -export const extractNestedSelectors = css => { - const ast = cssTree.parse(css, { - context: 'rule' - }); - const extractor = new SelectorExtractor(); - cssTree.walk(ast, { - enter: extractor.enter.bind(extractor), - leave: extractor.leave.bind(extractor) - }); - return extractor.selectors; -}; - -/** - * Initialize nwsapi. - * @param {object} window - The Window object. - * @param {object} document - The Document object. - * @returns {object} - The nwsapi instance. - */ -export const initNwsapi = (window, document) => { - if (!window?.DOMException) { - throw new TypeError(`Unexpected global object ${getType(window)}`); - } - if (document?.nodeType !== DOCUMENT_NODE) { - document = window.document; - } - const nw = nwsapi({ - document, - DOMException: window.DOMException - }); - nw.configure({ - LOGERRORS: false - }); - return nw; -}; - -/** - * Filter a selector for use with nwsapi. - * @param {string} selector - The selector string. - * @param {string} target - The target type. - * @returns {boolean} - True if the selector is valid for nwsapi. - */ -export const filterSelector = (selector, target) => { - const isQuerySelectorType = target === TARGET_FIRST || target === TARGET_ALL; - if ( - !selector || - typeof selector !== 'string' || - /null|undefined/.test(selector) - ) { - return false; - } - // Exclude missing close square bracket. - if (selector.includes('[')) { - const index = selector.lastIndexOf('['); - const sel = selector.substring(index); - if (sel.indexOf(']') < 0) { - return false; - } - } - // Exclude various complex or unsupported selectors. - // - selectors containing '/' - // - namespaced selectors - // - escaped selectors - // - pseudo-element selectors - // - selectors containing non-ASCII - // - selectors containing control character other than whitespace - // - attribute selectors with case flag, e.g. [attr i] - // - attribute selectors with unclosed quotes - // - empty :is() or :where() - if (selector.includes('/') || REG_EXCLUDE_BASIC.test(selector)) { - return false; - } - // Include pseudo-classes that are known to work correctly. - if (selector.includes(':')) { - let complex = false; - if (target !== isQuerySelectorType) { - complex = REG_COMPLEX.test(selector); - } - if ( - isQuerySelectorType && - REG_DESCEND.test(selector) && - !REG_SIBLING.test(selector) - ) { - return false; - } else if (!isQuerySelectorType && /:has\(/.test(selector)) { - if (!complex || REG_LOGIC_HAS_COMPOUND.test(selector)) { - return false; - } - return REG_END_WITH_HAS.test(selector); - } else if (/:(?:is|not)\(/.test(selector)) { - if (complex) { - return !REG_LOGIC_COMPLEX.test(selector); - } else { - return !REG_LOGIC_COMPOUND.test(selector); - } - } else { - return !REG_WO_LOGICAL.test(selector); - } - } - return true; -}; diff --git a/vanilla/node_modules/@asamuzakjp/dom-selector/types/index.d.ts b/vanilla/node_modules/@asamuzakjp/dom-selector/types/index.d.ts deleted file mode 100644 index d6ebaa4..0000000 --- a/vanilla/node_modules/@asamuzakjp/dom-selector/types/index.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -export class DOMSelector { - constructor(window: Window, document: Document, opt?: object); - clear: () => void; - check: (selector: string, node: Element, opt?: object) => CheckResult; - matches: (selector: string, node: Element, opt?: object) => boolean; - closest: (selector: string, node: Element, opt?: object) => Element | null; - querySelector: (selector: string, node: Document | DocumentFragment | Element, opt?: object) => Element | null; - querySelectorAll: (selector: string, node: Document | DocumentFragment | Element, opt?: object) => Array<Element>; - #private; -} -export type CheckResult = { - match: boolean; - pseudoElement: string | null; -}; diff --git a/vanilla/node_modules/@asamuzakjp/dom-selector/types/js/constant.d.ts b/vanilla/node_modules/@asamuzakjp/dom-selector/types/js/constant.d.ts deleted file mode 100644 index f999a78..0000000 --- a/vanilla/node_modules/@asamuzakjp/dom-selector/types/js/constant.d.ts +++ /dev/null @@ -1,77 +0,0 @@ -export const ATRULE: "Atrule"; -export const ATTR_SELECTOR: "AttributeSelector"; -export const CLASS_SELECTOR: "ClassSelector"; -export const COMBINATOR: "Combinator"; -export const IDENT: "Identifier"; -export const ID_SELECTOR: "IdSelector"; -export const NOT_SUPPORTED_ERR: "NotSupportedError"; -export const NTH: "Nth"; -export const OPERATOR: "Operator"; -export const PS_CLASS_SELECTOR: "PseudoClassSelector"; -export const PS_ELEMENT_SELECTOR: "PseudoElementSelector"; -export const RULE: "Rule"; -export const SCOPE: "Scope"; -export const SELECTOR: "Selector"; -export const SELECTOR_LIST: "SelectorList"; -export const STRING: "String"; -export const SYNTAX_ERR: "SyntaxError"; -export const TARGET_ALL: "all"; -export const TARGET_FIRST: "first"; -export const TARGET_LINEAL: "lineal"; -export const TARGET_SELF: "self"; -export const TYPE_SELECTOR: "TypeSelector"; -export const BIT_01: 1; -export const BIT_02: 2; -export const BIT_04: 4; -export const BIT_08: 8; -export const BIT_16: 16; -export const BIT_32: 32; -export const BIT_FFFF: 65535; -export const DUO: 2; -export const HEX: 16; -export const TYPE_FROM: 8; -export const TYPE_TO: -1; -export const ELEMENT_NODE: 1; -export const TEXT_NODE: 3; -export const DOCUMENT_NODE: 9; -export const DOCUMENT_FRAGMENT_NODE: 11; -export const DOCUMENT_POSITION_PRECEDING: 2; -export const DOCUMENT_POSITION_CONTAINS: 8; -export const DOCUMENT_POSITION_CONTAINED_BY: 16; -export const SHOW_ALL: 4294967295; -export const SHOW_CONTAINER: 1281; -export const SHOW_DOCUMENT: 256; -export const SHOW_DOCUMENT_FRAGMENT: 1024; -export const SHOW_ELEMENT: 1; -export const ALPHA_NUM: "[A-Z\\d]+"; -export const CHILD_IDX: "(?:first|last|only)-(?:child|of-type)"; -export const DIGIT: "(?:0|[1-9]\\d*)"; -export const LANG_PART: "(?:-[A-Z\\d]+)*"; -export const PSEUDO_CLASS: "(?:any-)?link|(?:first|last|only)-(?:child|of-type)|checked|empty|indeterminate|read-(?:only|write)|target"; -export const ANB: "[+-]?(?:(?:0|[1-9]\\d*)n?|n)|(?:[+-]?(?:0|[1-9]\\d*))?n\\s*[+-]\\s*(?:0|[1-9]\\d*)"; -export const COMBO: "\\s?[\\s>~+]\\s?"; -export const DESCEND: "\\s?[\\s>]\\s?"; -export const SIBLING: "\\s?[+~]\\s?"; -export const LOGIC_IS: ":is\\(\\s*[^)]+\\s*\\)"; -export const N_TH: "nth-(?:last-)?(?:child|of-type)\\(\\s*(?:even|odd|[+-]?(?:(?:0|[1-9]\\d*)n?|n)|(?:[+-]?(?:0|[1-9]\\d*))?n\\s*[+-]\\s*(?:0|[1-9]\\d*))\\s*\\)"; -export const SUB_TYPE: "\\[[^|\\]]+\\]|[#.:][\\w-]+"; -export const SUB_TYPE_WO_PSEUDO: "\\[[^|\\]]+\\]|[#.][\\w-]+"; -export const TAG_TYPE: "\\*|[A-Za-z][\\w-]*"; -export const TAG_TYPE_I: "\\*|[A-Z][\\w-]*"; -export const COMPOUND: "(?:\\*|[A-Za-z][\\w-]*|(?:\\*|[A-Za-z][\\w-]*)?(?:\\[[^|\\]]+\\]|[#.:][\\w-]+)+)"; -export const COMPOUND_L: "(?:\\*|[A-Za-z][\\w-]*|(?:\\*|[A-Za-z][\\w-]*)?(?:\\[[^|\\]]+\\]|[#.:][\\w-]+|:is\\(\\s*[^)]+\\s*\\))+)"; -export const COMPOUND_I: "(?:\\*|[A-Z][\\w-]*|(?:\\*|[A-Z][\\w-]*)?(?:\\[[^|\\]]+\\]|[#.:][\\w-]+)+)"; -export const COMPOUND_WO_PSEUDO: "(?:\\*|[A-Za-z][\\w-]*|(?:\\*|[A-Za-z][\\w-]*)?(?:\\[[^|\\]]+\\]|[#.][\\w-]+)+)"; -export const COMPLEX: "(?:\\*|[A-Za-z][\\w-]*|(?:\\*|[A-Za-z][\\w-]*)?(?:\\[[^|\\]]+\\]|[#.:][\\w-]+)+)(?:\\s?[\\s>~+]\\s?(?:\\*|[A-Za-z][\\w-]*|(?:\\*|[A-Za-z][\\w-]*)?(?:\\[[^|\\]]+\\]|[#.:][\\w-]+)+))*"; -export const COMPLEX_L: "(?:\\*|[A-Za-z][\\w-]*|(?:\\*|[A-Za-z][\\w-]*)?(?:\\[[^|\\]]+\\]|[#.:][\\w-]+|:is\\(\\s*[^)]+\\s*\\))+)(?:\\s?[\\s>~+]\\s?(?:\\*|[A-Za-z][\\w-]*|(?:\\*|[A-Za-z][\\w-]*)?(?:\\[[^|\\]]+\\]|[#.:][\\w-]+|:is\\(\\s*[^)]+\\s*\\))+))*"; -export const HAS_COMPOUND: "has\\([\\s>]?\\s*(?:\\*|[A-Za-z][\\w-]*|(?:\\*|[A-Za-z][\\w-]*)?(?:\\[[^|\\]]+\\]|[#.][\\w-]+)+)\\s*\\)"; -export const LOGIC_COMPOUND: "(?:is|not)\\(\\s*(?:\\*|[A-Za-z][\\w-]*|(?:\\*|[A-Za-z][\\w-]*)?(?:\\[[^|\\]]+\\]|[#.:][\\w-]+|:is\\(\\s*[^)]+\\s*\\))+)(?:\\s*,\\s*(?:\\*|[A-Za-z][\\w-]*|(?:\\*|[A-Za-z][\\w-]*)?(?:\\[[^|\\]]+\\]|[#.:][\\w-]+|:is\\(\\s*[^)]+\\s*\\))+))*\\s*\\)"; -export const LOGIC_COMPLEX: "(?:is|not)\\(\\s*(?:\\*|[A-Za-z][\\w-]*|(?:\\*|[A-Za-z][\\w-]*)?(?:\\[[^|\\]]+\\]|[#.:][\\w-]+|:is\\(\\s*[^)]+\\s*\\))+)(?:\\s?[\\s>~+]\\s?(?:\\*|[A-Za-z][\\w-]*|(?:\\*|[A-Za-z][\\w-]*)?(?:\\[[^|\\]]+\\]|[#.:][\\w-]+|:is\\(\\s*[^)]+\\s*\\))+))*(?:\\s*,\\s*(?:\\*|[A-Za-z][\\w-]*|(?:\\*|[A-Za-z][\\w-]*)?(?:\\[[^|\\]]+\\]|[#.:][\\w-]+|:is\\(\\s*[^)]+\\s*\\))+)(?:\\s?[\\s>~+]\\s?(?:\\*|[A-Za-z][\\w-]*|(?:\\*|[A-Za-z][\\w-]*)?(?:\\[[^|\\]]+\\]|[#.:][\\w-]+|:is\\(\\s*[^)]+\\s*\\))+))*)*\\s*\\)"; -export const FORM_PARTS: readonly string[]; -export const INPUT_BUTTON: readonly string[]; -export const INPUT_CHECK: readonly string[]; -export const INPUT_DATE: readonly string[]; -export const INPUT_TEXT: readonly string[]; -export const INPUT_EDIT: readonly string[]; -export const INPUT_LTR: readonly string[]; -export const KEYS_LOGICAL: Set<string>; diff --git a/vanilla/node_modules/@asamuzakjp/dom-selector/types/js/finder.d.ts b/vanilla/node_modules/@asamuzakjp/dom-selector/types/js/finder.d.ts deleted file mode 100644 index d88572f..0000000 --- a/vanilla/node_modules/@asamuzakjp/dom-selector/types/js/finder.d.ts +++ /dev/null @@ -1,63 +0,0 @@ -export class Finder { - constructor(window: object); - onError: (e: Error, opt?: { - noexcept?: boolean; - }) => void; - setup: (selector: string, node: object, opt?: { - check?: boolean; - noexcept?: boolean; - warn?: boolean; - }) => object; - clearResults: (all?: boolean) => void; - private _handleFocusEvent; - private _handleKeyboardEvent; - private _handleMouseEvent; - private _registerEventListeners; - private _processSelectorBranches; - private _correspond; - private _createTreeWalker; - private _getSelectorBranches; - private _getFilteredChildren; - private _collectNthChild; - private _collectNthOfType; - private _matchAnPlusB; - private _matchHasPseudoFunc; - private _evaluateHasPseudo; - private _matchLogicalPseudoFunc; - private _matchPseudoClassSelector; - private _evaluateHostPseudo; - private _evaluateHostContextPseudo; - private _matchShadowHostPseudoClass; - private _matchSelectorForElement; - private _matchSelectorForShadowRoot; - private _matchSelector; - private _matchLeaves; - private _traverseAllDescendants; - private _findDescendantNodes; - private _matchDescendantCombinator; - private _matchChildCombinator; - private _matchAdjacentSiblingCombinator; - private _matchGeneralSiblingCombinator; - private _matchCombinator; - private _traverseAndCollectNodes; - private _findPrecede; - private _findNodeWalker; - private _matchSelf; - private _findLineal; - private _findEntryNodesForPseudoElement; - private _findEntryNodesForId; - private _findEntryNodesForClass; - private _findEntryNodesForType; - private _findEntryNodesForOther; - private _findEntryNodes; - private _determineTraversalStrategy; - private _processPendingItems; - private _collectNodes; - private _getCombinedNodes; - private _matchNodeNext; - private _matchNodePrev; - private _processComplexBranchAll; - private _processComplexBranchFirst; - find: (targetType: string) => Set<object>; - #private; -} diff --git a/vanilla/node_modules/@asamuzakjp/dom-selector/types/js/matcher.d.ts b/vanilla/node_modules/@asamuzakjp/dom-selector/types/js/matcher.d.ts deleted file mode 100644 index e1966b0..0000000 --- a/vanilla/node_modules/@asamuzakjp/dom-selector/types/js/matcher.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -export function matchPseudoElementSelector(astName: string, astType: string, opt?: { - forgive?: boolean; - warn?: boolean; -}): void; -export function matchDirectionPseudoClass(ast: object, node: object): boolean; -export function matchLanguagePseudoClass(ast: object, node: object): boolean; -export function matchDisabledPseudoClass(astName: string, node: object): boolean; -export function matchReadOnlyPseudoClass(astName: string, node: object): boolean; -export function matchAttributeSelector(ast: object, node: object, opt?: { - check?: boolean; - forgive?: boolean; -}): boolean; -export function matchTypeSelector(ast: object, node: object, opt?: { - check?: boolean; - forgive?: boolean; -}): boolean; diff --git a/vanilla/node_modules/@asamuzakjp/dom-selector/types/js/parser.d.ts b/vanilla/node_modules/@asamuzakjp/dom-selector/types/js/parser.d.ts deleted file mode 100644 index f0b6da4..0000000 --- a/vanilla/node_modules/@asamuzakjp/dom-selector/types/js/parser.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -export function unescapeSelector(selector?: string): string; -export function preprocess(value: string): string; -export function parseSelector(sel: string): object; -export function walkAST(ast?: object): { - branches: Array<object>; - info: object; -}; -export function compareASTNodes(a: object, b: object): number; -export function sortAST(asts: Array<object>): Array<object>; -export function parseAstName(selector: string): { - prefix: string; - localName: string; -}; -export { find as findAST, generate as generateCSS } from "css-tree"; diff --git a/vanilla/node_modules/@asamuzakjp/dom-selector/types/js/utility.d.ts b/vanilla/node_modules/@asamuzakjp/dom-selector/types/js/utility.d.ts deleted file mode 100644 index fe62759..0000000 --- a/vanilla/node_modules/@asamuzakjp/dom-selector/types/js/utility.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -export function getType(o: object): string; -export function verifyArray(arr: any[], type: string): any[]; -export function generateException(msg: string, name: string, globalObject?: object): DOMException; -export function findNestedHas(leaf: object): object | null; -export function findLogicalWithNestedHas(leaf: object): object | null; -export function filterNodesByAnB(nodes: Array<object>, anb: { - a: number; - b: number; - reverse?: boolean; -}): Array<object>; -export function resolveContent(node: object): Array<object | boolean>; -export function traverseNode(node: object, walker: object, force?: boolean): object | null; -export function isCustomElement(node: object, opt?: object): boolean; -export function getSlottedTextContent(node: object): string | null; -export function getDirectionality(node: object): string | null; -export function getLanguageAttribute(node: object): string | null; -export function isContentEditable(node: object): boolean; -export function isVisible(node: object): boolean; -export function isFocusVisible(node: object): boolean; -export function isFocusableArea(node: object): boolean; -export function isFocusable(node: object): boolean; -export function getNamespaceURI(ns: string, node: object): string | null; -export function isNamespaceDeclared(ns?: string, node?: object): boolean; -export function isPreceding(nodeA: object, nodeB: object): boolean; -export function compareNodes(a: object, b: object): number; -export function sortNodes(nodes?: Array<object> | Set<object>): Array<object>; -export function concatNestedSelectors(selectors: Array<Array<string>>): string; -export function extractNestedSelectors(css: string): Array<Array<string>>; -export function initNwsapi(window: object, document: object): object; -export function filterSelector(selector: string, target: string): boolean; diff --git a/vanilla/node_modules/@asamuzakjp/nwsapi/LICENSE b/vanilla/node_modules/@asamuzakjp/nwsapi/LICENSE deleted file mode 100644 index cc3621a..0000000 --- a/vanilla/node_modules/@asamuzakjp/nwsapi/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2007-2019 Diego Perini (http://www.iport.it/) - -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/nwsapi/README.md b/vanilla/node_modules/@asamuzakjp/nwsapi/README.md deleted file mode 100644 index f74b87d..0000000 --- a/vanilla/node_modules/@asamuzakjp/nwsapi/README.md +++ /dev/null @@ -1,132 +0,0 @@ -# [NWSAPI](http://dperini.github.io/nwsapi/) - -Fast CSS Selectors API Engine - -    - -NWSAPI is the development progress of [NWMATCHER](https://github.com/dperini/nwmatcher) aiming at [Selectors Level 4](https://www.w3.org/TR/selectors-4/) conformance. It has been completely reworked to be easily extended and maintained. It is a right-to-left selector parser and compiler written in pure Javascript with no external dependencies. It was initially thought as a cross browser library to improve event delegation and web page scraping in various frameworks but it has become a popular replacement of the native CSS selection and matching functionality in newer browsers and headless environments. - -It uses [regular expressions](https://en.wikipedia.org/wiki/Regular_expression) to parse CSS selector strings and [metaprogramming](https://en.wikipedia.org/wiki/Metaprogramming) to transforms these selector strings into Javascript function resolvers. This process is executed only once for each selector string allowing memoization of the function resolvers and achieving unmatched performances. - -## Installation - -To include NWSAPI in a standard web page: - -```html -<script type="text/javascript" src="nwsapi.js"></script> -``` - -To include NWSAPI in a standard web page and automatically replace the native QSA: - -```html -<script type="text/javascript" src="nwsapi.js" onload="NW.Dom.install()"></script> -``` - -To use NWSAPI with Node.js: - -``` -$ npm install nwsapi -``` - -NWSAPI currently supports browsers (as a global, `NW.Dom`) and headless environments (as a CommonJS module). - - -## Supported Selectors - -Here is a list of all the CSS2/CSS3/CSS4 [Supported selectors](https://github.com/dperini/nwsapi/wiki/CSS-supported-selectors). - - -## Features and Compliance - -You can read more about NWSAPI [features and compliance](https://github.com/dperini/nwsapi/wiki/Features-and-compliance) on the wiki. - - -## API - -### DOM Selection - -#### `ancestor( selector, context, callback )` - -Returns a reference to the nearest ancestor element matching `selector`, starting at `context`. Returns `null` if no element is found. If `callback` is provided, it is invoked for the matched element. - -#### `first( selector, context, callback )` - -Returns a reference to the first element matching `selector`, starting at `context`. Returns `null` if no element matches. If `callback` is provided, it is invoked for the matched element. - -#### `match( selector, element, callback )` - -Returns `true` if `element` matches `selector`, starting at `context`; returns `false` otherwise. If `callback` is provided, it is invoked for the matched element. - -#### `select( selector, context, callback )` - -Returns an array of all the elements matching `selector`, starting at `context`; returns empty `Array` otherwise. If `callback` is provided, it is invoked for each matching element. - - -### DOM Helpers - -#### `byId( id, from )` - -Returns a reference to the first element with ID `id`, optionally filtered to descendants of the element `from`. - -#### `byTag( tag, from )` - -Returns an array of elements having the specified tag name `tag`, optionally filtered to descendants of the element `from`. - -#### `byClass( class, from )` - -Returns an array of elements having the specified class name `class`, optionally filtered to descendants of the element `from`. - - -### Engine Configuration - -#### `configure( options )` - -The following is the list of currently available configuration options, their default values and descriptions, they are boolean flags that can be set to `true` or `false`: - -* `IDS_DUPES`: true - true to allow using multiple elements having the same id, false to disallow -* `LIVECACHE`: true - true for caching both results and resolvers, false for caching only resolvers -* `MIXEDCASE`: true - true to match tag names case insensitive, false to match using case sensitive -* `LOGERRORS`: true - true to print errors and warnings to the console, false to mute both of them - - -### Examples on extending the basic functionalities - -#### `configure( { <configuration-flag>: [ true | false ] } )` - -Disable logging errors/warnings to console, disallow duplicate ids. Example: - -```js -NW.Dom.configure( { LOGERRORS: false, IDS_DUPES: false } ); -``` -NOTE: NW.Dom.configure() without parameters return the current configuration. - -#### `registerCombinator( symbol, resolver )` - -Registers a new symbol and its matching resolver in the combinators table. Example: - -```js -NW.Dom.registerCombinator( '^', 'e.parentElement' ); -``` - -#### `registerOperator( symbol, resolver )` - -Registers a new symbol and its matching resolver in the attribute operators table. Example: - -```js -NW.Dom.registerOperator( '!=', { p1: '^', p2: '$', p3: 'false' } ); -``` - -#### `registerSelector( name, rexp, func )` - -Registers a new selector, the matching RE and the resolver function, in the selectors table. Example: - -```js -NW.Dom.registerSelector('Controls', /^\:(control)(.*)/i, - (function(global) { - return function(match, source, mode, callback) { - var status = true; - source = 'if(/^(button|input|select|textarea)/i.test(e.nodeName)){' + source + '}'; - return { 'source': source, 'status': status }; - }; - })(this)); -``` diff --git a/vanilla/node_modules/@asamuzakjp/nwsapi/package.json b/vanilla/node_modules/@asamuzakjp/nwsapi/package.json deleted file mode 100644 index 6a44b9c..0000000 --- a/vanilla/node_modules/@asamuzakjp/nwsapi/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "@asamuzakjp/nwsapi", - "version": "2.3.9", - "description": "Fast CSS Selectors API Engine", - "homepage": "http://javascript.nwbox.com/nwsapi/", - "main": "./src/nwsapi", - "keywords": [ - "css", - "css3", - "css4", - "matcher", - "selector" - ], - "licenses": [ - { - "type": "MIT", - "url": "http://javascript.nwbox.com/nwsapi/MIT-LICENSE" - } - ], - "license": "MIT", - "author": { - "name": "Diego Perini", - "email": "diego.perini@gmail.com", - "web": "http://www.iport.it/" - }, - "maintainers": [ - { - "name": "Diego Perini", - "email": "diego.perini@gmail.com", - "web": "http://www.iport.it/" - } - ], - "bugs": { - "url": "http://github.com/dperini/nwsapi/issues" - }, - "repository": { - "type": "git", - "url": "git://github.com/dperini/nwsapi.git" - }, - "scripts": { - "lint": "eslint ./src/nwsapi.js" - } -} diff --git a/vanilla/node_modules/@asamuzakjp/nwsapi/src/nwsapi.js b/vanilla/node_modules/@asamuzakjp/nwsapi/src/nwsapi.js deleted file mode 100644 index e118fd5..0000000 --- a/vanilla/node_modules/@asamuzakjp/nwsapi/src/nwsapi.js +++ /dev/null @@ -1,1855 +0,0 @@ -/** - * Forked and modified from nwsapi@2.2.2 - * - Export to cjs only - * - Remove ./modules directory - * - Remove unused exported properties - * - Remove unused pseudo-classes - * - Remove Snapshot.root and resolve document.documentElement on runtime - * - Use `let` and `const` as much as possible - * - Use `===` and `!==` - * - Fix `:nth-of-type()` - * - Fix function source for :root, :target and :indeterminate pseudo-classes - * - Fix <ident-token> - * - Support complex selectors within `:is()` and `:not()` - * - Add ::slotted() and ::part() to pseudo-elements list - * - Add isContentEditable() function - * - Add createMatchingParensRegex() function from upstream - * - Invalidate cache for :has() pseudo class - * - Optimize some regular expressions - */ -/* - * Copyright (C) 2007-2019 Diego Perini - * All rights reserved. - * - * nwsapi.js - Fast CSS Selectors API Engine - * - * Author: Diego Perini <diego.perini at gmail com> - * Version: 2.2.0 - * Created: 20070722 - * Release: 20220901 - * - * License: - * http://javascript.nwbox.com/nwsapi/MIT-LICENSE - * Download: - * http://javascript.nwbox.com/nwsapi/nwsapi.js - */ - -(function Export(global, factory) { - 'use strict'; - module.exports = factory; -})(this, function Factory(global, Export) { - const version = 'nwsapi-2.2.2'; - - let doc = global.document; - - /** - * Generate a regex that matches a balanced set of parentheses. - * Outermost parentheses are excluded so any amount of children can be handled. - * See https://stackoverflow.com/a/35271017 for reference - * - * @param {number} depth - * @return {string} - */ - function createMatchingParensRegex(depth = 1) { - const out = '\\([^)(]*?(?:'.repeat(depth) + '\\([^)(]*?\\)' + '[^)(]*?)*?\\)'.repeat(depth); - // remove outermost escaped parens - return out.slice(2, out.length - 2); - } - - const CFG = { - // extensions - operators: '[~*^$|]=|=', - combinators: '[\\s>+~](?=[^>+~])' - }; - - const NOT = { - // not enclosed in double/single/parens/square - doubleEnc: '(?=(?:[^"]*"[^"]*")*[^"]*$)', - singleEnc: "(?=(?:[^']*'[^']*')*[^']*$)", - parensEnc: '(?![^\\x28]*\\x29)', - squareEnc: '(?![^\\x5b]*\\x5d)' - }; - - const REX = { - // regular expressions - hasEscapes: /\\/, - hexNumbers: /^[0-9a-f]/i, - escOrQuote: /^\\|[\x22\x27]/, - regExpChar: /(?:(?!\\)[\\^$.*+?()[\]{}|/])/g, - trimSpaces: /[\r\n\f]|^\s+|\s+$/g, - commaGroup: RegExp('(\\s{0,255},\\s{0,255})' + NOT.squareEnc + NOT.parensEnc, 'g'), - splitGroup: /((?:\x28[^\x29]{0,255}\x29|\[[^\]]{0,255}\]|\\.|[^,])+)/g, - fixEscapes: /\\([0-9a-f]{1,6}\s?|.)|([\x22\x27])/gi, - combineWSP: RegExp('\\s{1,255}' + NOT.singleEnc + NOT.doubleEnc, 'g'), - tabCharWSP: RegExp('(\\s?\\t{1,255}\\s?)' + NOT.singleEnc + NOT.doubleEnc, 'g'), - pseudosWSP: RegExp('\\s{1,255}([-+])\\s{1,255}' + NOT.squareEnc, 'g') - }; - - const STD = { - combinator: /\s?([>+~])\s?/g, - apimethods: /^(?:[a-z]+|\*)\|/i, - namespaces: /(\*|[a-z]+)\|[-a-z]+/i - }; - - const GROUPS = { - // pseudo-classes requiring parameters - logicalsel: '(is|where|matches|not|has)(?:\\x28\\s?(' + createMatchingParensRegex(3) + ')\\s?\\x29)', - treestruct: '(nth(?:-last)?(?:-child|-of-type))(?:\\x28\\s?(even|odd|(?:[-+]?\\d*)(?:n\\s?[-+]?\\s?\\d*)?)\\s?(?:\\x29|$))', - // pseudo-classes not requiring parameters - locationpc: '(any-link|link|visited|target)\\b', - structural: '(root|empty|(?:(?:first|last|only)(?:-child|-of-type)))\\b', - inputstate: '(enabled|disabled|read-(?:only|write)|placeholder-shown|default)\\b', - inputvalue: '(checked|indeterminate)\\b', - // pseudo-classes for parsing only selectors - pseudoNop: '(autofill|-webkit-autofill)\\b', - // pseudo-elements starting with single colon (:) - pseudoSng: '(after|before|first-letter|first-line)\\b', - // pseudo-elements starting with double colon (::) - pseudoDbl: ':(after|before|first-letter|first-line|selection|part|placeholder|slotted|-webkit-[-a-z0-9]{2,})\\b' - }; - - const Patterns = { - // pseudo-classes - treestruct: RegExp('^:(?:' + GROUPS.treestruct + ')(.*)', 'i'), - structural: RegExp('^:(?:' + GROUPS.structural + ')(.*)', 'i'), - inputstate: RegExp('^:(?:' + GROUPS.inputstate + ')(.*)', 'i'), - inputvalue: RegExp('^:(?:' + GROUPS.inputvalue + ')(.*)', 'i'), - locationpc: RegExp('^:(?:' + GROUPS.locationpc + ')(.*)', 'i'), - logicalsel: RegExp('^:(?:' + GROUPS.logicalsel + ')(.*)', 'i'), - pseudoNop: RegExp('^:(?:' + GROUPS.pseudoNop + ')(.*)', 'i'), - pseudoSng: RegExp('^:(?:' + GROUPS.pseudoSng + ')(.*)', 'i'), - pseudoDbl: RegExp('^:(?:' + GROUPS.pseudoDbl + ')(.*)', 'i'), - // combinator symbols - children: /^\s?>\s?(.*)/, - adjacent: /^\s?\+\s?(.*)/, - relative: /^\s?~\s?(.*)/, - ancestor: /^\s+(.*)/, - // universal & namespace - universal: /^\*(.*)/, - namespace: /^(\w+|\*)?\|(.*)/ - }; - - // emulate firefox error strings - const qsNotArgs = 'Not enough arguments'; - const qsInvalid = ' is not a valid selector'; - - // detect structural pseudo-classes in selectors - const reNthElem = /(:nth(?:-last)?-child)/i; - const reNthType = /(:nth(?:-last)?-of-type)/i; - - // placeholder for global regexp - let reOptimizer; - let reValidator; - - // special handling configuration flags - const Config = { - IDS_DUPES: true, - MIXEDCASE: true, - LOGERRORS: true, - VERBOSITY: true - }; - - let NAMESPACE; - let QUIRKS_MODE; - let HTML_DOCUMENT; - - const ATTR_STD_OPS = { - '=': 1, - '^=': 1, - '$=': 1, - '|=': 1, - '*=': 1, - '~=': 1 - }; - - const HTML_TABLE = { - accept: 1, - 'accept-charset': 1, - align: 1, - alink: 1, - axis: 1, - bgcolor: 1, - charset: 1, - checked: 1, - clear: 1, - codetype: 1, - color: 1, - compact: 1, - declare: 1, - defer: 1, - dir: 1, - direction: 1, - disabled: 1, - enctype: 1, - face: 1, - frame: 1, - hreflang: 1, - 'http-equiv': 1, - lang: 1, - language: 1, - link: 1, - media: 1, - method: 1, - multiple: 1, - nohref: 1, - noresize: 1, - noshade: 1, - nowrap: 1, - readonly: 1, - rel: 1, - rev: 1, - rules: 1, - scope: 1, - scrolling: 1, - selected: 1, - shape: 1, - target: 1, - text: 1, - type: 1, - valign: 1, - valuetype: 1, - vlink: 1 - }; - - const Combinators = {}; - - const Selectors = {}; - - const Operators = { - '=': { - p1: '^', - p2: '$', - p3: 'true' - }, - '^=': { - p1: '^', - p2: '', - p3: 'true' - }, - '$=': { - p1: '', - p2: '$', - p3: 'true' - }, - '*=': { - p1: '', - p2: '', - p3: 'true' - }, - '|=': { - p1: '^', - p2: '(-|$)', - p3: 'true' - }, - '~=': { - p1: '(^|\\s)', - p2: '(\\s|$)', - p3: 'true' - } - }; - - const concatCall = function (nodes, callback) { - let i = 0; - const l = nodes.length; - const list = Array(l); - while (l > i) { - if (callback(list[i] = nodes[i]) === false) { - break; - } - ++i; - } - return list; - }; - - const concatList = function (list, nodes) { - let i = -1; - let l = nodes.length; - while (l--) { - list[list.length] = nodes[++i]; - } - return list; - }; - - let hasDupes = false; - - const documentOrder = function (a, b) { - if (!hasDupes && a === b) { - hasDupes = true; - return 0; - } - return a.compareDocumentPosition(b) & 4 ? -1 : 1; - }; - - const unique = function (nodes) { - let i = 0; - let j = -1; - let l = nodes.length + 1; - const list = []; - while (--l) { - if (nodes[i++] === nodes[i]) { - continue; - } - list[++j] = nodes[i - 1]; - } - hasDupes = false; - return list; - }; - - // check context for mixed content - const hasMixedCaseTagNames = function (context) { - const api = 'getElementsByTagNameNS'; - - // current host context (ownerDocument) - context = context.ownerDocument || context; - - // documentElement (root) element namespace or default html/xhtml namespace - const ns = context.documentElement && context.documentElement.namespaceURI - ? context.documentElement.namespaceURI - : 'http://www.w3.org/1999/xhtml'; - - // checking the number of non HTML nodes in the document - return (context[api]('*', '*').length - context[api](ns, '*').length) > 0; - }; - - // check if the document type is HTML - const isHTML = function (node) { - const doc = node.ownerDocument || node; - return doc.nodeType === 9 && doc.contentType === 'text/html'; - }; - - // convert single codepoint to UTF-16 encoding - const codePointToUTF16 = function (codePoint) { - // out of range, use replacement character - if (codePoint < 1 || codePoint > 0x10ffff || - (codePoint > 0xd7ff && codePoint < 0xe000)) { - return '\\ufffd'; - } - // javascript strings are UTF-16 encoded - if (codePoint < 0x10000) { - const lowHex = '000' + codePoint.toString(16); - return '\\u' + lowHex.substr(lowHex.length - 4); - } - // supplementary high + low surrogates - return '\\u' + (((codePoint - 0x10000) >> 0x0a) + 0xd800).toString(16) + - '\\u' + (((codePoint - 0x10000) % 0x400) + 0xdc00).toString(16); - }; - - // convert single codepoint to string - const stringFromCodePoint = function (codePoint) { - // out of range, use replacement character - if (codePoint < 1 || codePoint > 0x10ffff || - (codePoint > 0xd7ff && codePoint < 0xe000)) { - return '\ufffd'; - } - if (codePoint < 0x10000) { - return String.fromCharCode(codePoint); - } - return String.fromCodePoint(codePoint); - }; - - // convert escape sequence in a CSS string or identifier - // to javascript string with javascript escape sequences - const convertEscapes = function (str) { - return REX.hasEscapes.test(str) - ? str.replace(REX.fixEscapes, function (substring, p1, p2) { - // unescaped " or ' - return p2 - ? '\\' + p2 - // javascript strings are UTF-16 encoded - : REX.hexNumbers.test(p1) - ? codePointToUTF16(parseInt(p1, 16)) - // \' \" - : REX.escOrQuote.test(p1) - ? substring - // \g \h \. \# etc - : p1; - }) - : str; - }; - - // convert escape sequence in a CSS string or identifier - // to javascript string with characters representations - const unescapeIdentifier = function (str) { - return REX.hasEscapes.test(str) - ? str.replace(REX.fixEscapes, function (substring, p1, p2) { - // unescaped " or ' - return p2 || (REX.hexNumbers.test(p1) - ? stringFromCodePoint(parseInt(p1, 16)) - // \' \" - : REX.escOrQuote.test(p1) - ? substring - // \g \h \. \# etc - : p1); - }) - : str; - }; - - // empty set - const none = []; - - // cached lambdas - const matchLambdas = {}; - const selectLambdas = {}; - - // cached resolvers - let matchResolvers = {}; - let selectResolvers = {}; - - const method = { - '#': 'getElementById', - '*': 'getElementsByTagName', - '|': 'getElementsByTagNameNS', - '.': 'getElementsByClassName' - }; - - // find duplicate ids using iterative walk - const byIdRaw = function (id, context) { - let node = context; - const nodes = []; - let next = node.firstElementChild; - while ((node = next)) { - node.id === id && nodes.push(node); - if ((next = node.firstElementChild || node.nextElementSibling)) { - continue; - } - while (!next && (node = node.parentElement) && node !== context) { - next = node.nextElementSibling; - } - } - return nodes; - }; - - // context agnostic getElementById - const byId = function (id, context) { - let e; - const api = method['#']; - - // duplicates id allowed - if (Config.IDS_DUPES === false) { - if (api in context) { - e = context[api](id); - return e ? [e] : none; - } - } else if ('all' in context) { - if ((e = context.all[id])) { - if (e.nodeType === 1) { - return e.getAttribute('id') !== id ? [] : [e]; - } else if (id === 'length') { - e = context[api](id); - return e ? [e] : none; - } - const nodes = []; - for (let i = 0, l = e.length; l > i; ++i) { - if (e[i].id === id) { - nodes.push(e[i]); - } - } - return nodes.length ? nodes : none; - } else { - return none; - } - } - - return byIdRaw(id, context); - }; - - // context agnostic getElementsByTagName - const byTag = function (tag, context) { - let e; - let nodes; - const api = method['*']; - - // DOCUMENT_NODE (9) & ELEMENT_NODE (1) - if (api in context) { - return Array.prototype.slice.call(context[api](tag)); - } else { - tag = tag.toLowerCase(); - // DOCUMENT_FRAGMENT_NODE (11) - if ((e = context.firstElementChild)) { - if (!(e.nextElementSibling || tag === '*' || e.localName === tag)) { - return Array.prototype.slice.call(e[api](tag)); - } else { - nodes = []; - do { - if (tag === '*' || e.localName === tag) { - nodes.push(e); - } - concatList(nodes, e[api](tag)); - } while ((e = e.nextElementSibling)); - } - } else { - nodes = none; - } - } - return nodes; - }; - - // context agnostic getElementsByClassName - const byClass = function (cls, context) { - let e; - let nodes; - const api = method['.']; - let reCls; - // DOCUMENT_NODE (9) & ELEMENT_NODE (1) - if (api in context) { - return Array.prototype.slice.call(context[api](cls)); - } else { - // DOCUMENT_FRAGMENT_NODE (11) - if ((e = context.firstElementChild)) { - reCls = RegExp('(^|\\s)' + cls + '(\\s|$)', QUIRKS_MODE ? 'i' : ''); - if (!(e.nextElementSibling || reCls.test(e.className))) { - return Array.prototype.slice.call(e[api](cls)); - } else { - nodes = []; - do { - if (reCls.test(e.className)) { - nodes.push(e); - } - concatList(nodes, e[api](cls)); - } while ((e = e.nextElementSibling)); - } - } else nodes = none; - } - return nodes; - }; - - const compat = { - '#': function (c, n) { - REX.hasEscapes.test(n) && (n = unescapeIdentifier(n)); - return function (e, f) { - return byId(n, c); - }; - }, - '*': function (c, n) { - REX.hasEscapes.test(n) && (n = unescapeIdentifier(n)); - return function (e, f) { - return byTag(n, c); - }; - }, - '|': function (c, n) { - REX.hasEscapes.test(n) && (n = unescapeIdentifier(n)); - return function (e, f) { - return byTag(n, c); - }; - }, - '.': function (c, n) { - REX.hasEscapes.test(n) && (n = unescapeIdentifier(n)); - return function (e, f) { - return byClass(n, c); - }; - } - }; - - // namespace aware hasAttribute - // helper for XML/XHTML documents - const hasAttributeNS = function (e, name) { - let i; - let l; - const attr = e.getAttributeNames(); - name = RegExp(':?' + name + '$', HTML_DOCUMENT ? 'i' : ''); - for (i = 0, l = attr.length; l > i; ++i) { - if (name.test(attr[i])) { - return true; - } - } - return false; - }; - - // fast resolver for the :nth-child() and :nth-last-child() pseudo-classes - const nthElement = (function () { - let idx = 0; - let len = 0; - let set = 0; - let parent; - let parents = []; - let nodes = []; - return function (element, dir) { - // ensure caches are emptied after each run, invoking with dir = 2 - if (dir === 2) { - idx = 0; len = 0; set = 0; nodes = []; parents = []; parent = undefined; - return -1; - } - let e, i, j, k, l; - if (parent === element.parentElement) { - i = set; j = idx; l = len; - } else { - l = parents.length; - parent = element.parentElement; - for (i = -1, j = 0, k = l - 1; l > j; ++j, --k) { - if (parents[j] === parent) { - i = j; - break; - } - if (parents[k] === parent) { - i = k; - break; - } - } - if (i < 0) { - parents[i = l] = parent; - l = 0; nodes[i] = []; - e = (parent && parent.firstElementChild) || element; - while (e) { - nodes[i][l] = e; - if (e === element) { - j = l; - } - e = e.nextElementSibling; - ++l; - } - set = i; idx = 0; len = l; - if (l < 2) { - return l; - } - } else { - l = nodes[i].length; - set = i; - } - } - if (element !== nodes[i][j] && element !== nodes[i][j = 0]) { - for (j = 0, e = nodes[i], k = l - 1; l > j; ++j, --k) { - if (e[j] === element) { - break; - } - if (e[k] === element) { - j = k; - break; - } - } - } - idx = j + 1; len = l; - return dir ? l - j : idx; - }; - })(); - - // fast resolver for the :nth-of-type() and :nth-last-of-type() pseudo-classes - const nthOfType = (function () { - let idx = 0; - let len = 0; - let set = 0; - let parent; - let parents = []; - let nodes = []; - return function (element, dir) { - // ensure caches are emptied after each run, invoking with dir = 2 - if (dir === 2) { - idx = 0; len = 0; set = 0; nodes = []; parents = []; parent = undefined; - return -1; - } - const name = element.localName; - const nsURI = element.namespaceURI; - if (nsURI !== 'http://www.w3.org/1999/xhtml') { - idx = 0; len = 0; set = 0; nodes = []; parents = []; parent = undefined; - } - let e; - let i; - let j; - let k; - let l; - if (nodes[set] && nodes[set][name] && parent === element.parentElement) { - i = set; - j = idx; - l = len; - } else { - l = parents.length; - parent = element.parentElement; - for (i = -1, j = 0, k = l - 1; l > j; ++j, --k) { - if (parents[j] === parent) { - i = j; - break; - } - if (parents[k] === parent) { - i = k; - break; - } - } - if (i < 0 || !nodes[i][name]) { - parents[i = l] = parent; - nodes[i] || (nodes[i] = Object()); - l = 0; nodes[i][name] = []; - e = (parent && parent.firstElementChild) || element; - while (e) { - if (e === element) { - j = l; - } - if (e.localName === name && e.namespaceURI === nsURI) { - nodes[i][name][l] = e; - ++l; - } - e = e.nextElementSibling; - } - set = i; idx = j; len = l; - if (l < 2) { - return l; - } - } else { - l = nodes[i][name].length; - set = i; - } - } - if (element !== nodes[i][name][j] && element !== nodes[i][name][j = 0]) { - for (j = 0, e = nodes[i][name], k = l - 1; l > j; ++j, --k) { - if (e[j] === element) { - break; - } - if (e[k] === element) { - j = k; - break; - } - } - } - idx = j + 1; len = l; - return dir ? l - j : idx; - }; - })(); - - // check if the node is the target - const isTarget = function (node) { - const doc = node.ownerDocument || node; - const { hash } = new URL(doc.URL); - if (node.id && hash === `#${node.id}` && doc.contains(node)) { - return true; - } - return false; - }; - - // check if node is indeterminate - const isIndeterminate = function (node) { - if ((node.indeterminate && node.localName === 'input' && - node.type === 'checkbox') || - (node.localName === 'progress' && !node.hasAttribute('value'))) { - return true; - } - if (node.localName === 'input' && node.type === 'radio' && - !node.hasAttribute('checked')) { - const nodeName = node.name; - let parent = node.parentNode; - while (parent) { - if (parent.localName === 'form') { - break; - } - parent = parent.parentNode; - } - if (!parent) { - const doc = node.ownerDocument; - parent = doc.documentElement; - } - const items = parent.getElementsByTagName('input'); - const l = items.length; - let checked; - for (let i = 0; i < l; i++) { - const item = items[i]; - if (item.getAttribute('type') === 'radio') { - if (nodeName) { - if (item.getAttribute('name') === nodeName) { - checked = !!item.checked; - } - } else if (!item.hasAttribute('name')) { - checked = !!item.checked; - } - if (checked) { - break; - } - } - } - if (!checked) { - return true; - } - } - return false; - }; - - // check if node content is editable - const isContentEditable = function (node) { - let attrValue = 'inherit'; - if (node.hasAttribute('contenteditable')) { - attrValue = node.getAttribute('contenteditable'); - } - switch (attrValue) { - case '': - case 'plaintext-only': - case 'true': - return true; - case 'false': - return false; - default: - if (node.parentNode && node.parentNode.nodeType === 1) { - return isContentEditable(node.parentNode); - } - return false; - } - }; - - // build validation regexps used by the engine - const setIdentifierSyntax = function () { - // - // NOTE: SPECIAL CASES IN CSS SYNTAX PARSING RULES - // - // The <EOF-token> https://drafts.csswg.org/css-syntax/#typedef-eof-token - // allow mangled|unclosed selector syntax at the end of selectors strings - // - // Literal equivalent hex representations of the characters: " ' ` ] ) - // - // \\x22 = " - double quotes \\x5b = [ - open square bracket - // \\x27 = ' - single quote \\x5d = ] - closed square bracket - // \\x60 = ` - back tick \\x28 = ( - open round parens - // \\x5c = \ - back slash \\x29 = ) - closed round parens - // - // using hex format prevents false matches of opened/closed instances - // pairs, coloring breakage and other editors highlightning problems. - // - - // @see https://drafts.csswg.org/css-syntax-3/#ident-token-diagram - const nonascii = '[^\\x00-\\x9f]'; - const esctoken = '\\\\(?:[^\\r\\n\\f\\da-f]|[\\da-f]{1,6}\\s{0,255})'; - const identifier = - '(?:--|-?(?:[a-z_]|' + nonascii + '|' + esctoken + '))' + - '(?:[\\w-]|' + nonascii + '|' + esctoken + ')*'; - - const pseudonames = '[-\\w]+'; - const pseudoparms = '(?:[-+]?\\d*)(?:n\\s?[-+]?\\s?\\d*)'; - const doublequote = '"[^"\\\\]*(?:\\\\.[^"\\\\]*)*(?:"|$)'; - const singlequote = "'[^'\\\\]*(?:\\\\.[^'\\\\]*)*(?:'|$)"; - - const attrparser = identifier + '|' + doublequote + '|' + singlequote; - - const attrvalues = '([\\x22\\x27]?)((?!\\3)*|(?:\\\\?.)*?)(?:\\3|$)'; - - const attributes = - '\\[' + - // attribute presence - '(?:\\*\\|)?\\s?(' + identifier + '(?::' + identifier + ')?)\\s?' + - '(?:(' + CFG.operators + ')\\s?(?:' + attrparser + '))?' + - // attribute case sensitivity - '(?:\\s?\\b(i))?\\s?' + - '(?:\\]|$)'; - - const attrmatcher = attributes.replace(attrparser, attrvalues); - - const pseudoclass = - '(?:\\x28\\s*' + - '(?:' + pseudoparms + '?)?|' + - // universal * & - // namespace *|* - '[*|]|' + - '(?:' + - '(?::' + pseudonames + '(?:\\x28' + pseudoparms + '?(?:\\x29|$))?)|' + - '(?:[.#]?' + identifier + ')|' + - '(?:' + attributes + ')' + - ')+|' + - '\\s?[>+~]\\s?|' + - '\\s?,\\s?|' + - '\\s|' + - '\\x29|$' + - ')*'; - - const standardValidator = - '(?=\\s?[^>+~(){}<])' + - '(?:' + - // universal * & - // namespace *|* - '\\*|\\||' + - '(?:[.#]?' + identifier + ')+|' + - '(?:' + attributes + ')+|' + - '(?:::?' + pseudonames + pseudoclass + ')|' + - '(?:\\s?' + CFG.combinators + '\\s?)|' + - '\\s?,\\s?|' + - '\\s?' + - ')+'; - - // the following global RE is used to return the - // deepest localName in selector strings and then - // use it to retrieve all possible matching nodes - // that will be filtered by compiled resolvers - reOptimizer = RegExp( - '(?:([.:#*]?)(' + identifier + ')' + - '(?::[-\\w]+|\\[[^\\]]+(?:\\]|$)|\\x28[^\\x29]+(?:\\x29|$))*' + - ')$', 'i'); - - // global - reValidator = RegExp(standardValidator, 'gi'); - - Patterns.id = RegExp('^#(' + identifier + ')(.*)', 'i'); - Patterns.tagName = RegExp('^(' + identifier + ')(.*)', 'i'); - Patterns.className = RegExp('^\\.(' + identifier + ')(.*)', 'i'); - Patterns.attribute = RegExp('^(?:' + attrmatcher + ')(.*)'); - }; - - // configure the engine to use special handling - const configure = function (option, clear) { - if (typeof option === 'string') { - return !!Config[option]; - } - if (typeof option !== 'object') { - return Config; - } - for (const i in option) { - Config[i] = !!option[i]; - } - // clear lambda cache - if (clear) { - matchResolvers = {}; - selectResolvers = {}; - } - setIdentifierSyntax(); - return true; - }; - - // centralized error and exceptions handling - const emit = function (message, proto) { - let err; - if (Config.VERBOSITY) { - if (global[proto]) { - err = new global[proto](message); - } else { - err = new global.DOMException(message, 'SyntaxError'); - } - throw err; - } - if (Config.LOGERRORS && console && console.log) { - console.log(message); - } - }; - - // passed to resolvers - const Snapshot = { - doc: null, - from: null, - byTag: null, - first: null, - match: null, - ancestor: null, - nthOfType: null, - nthElement: null, - hasAttributeNS: null, - isTarget: null, - isIndeterminate: null, - isContentEditable: null - }; - - // context - let lastContext; - - const switchContext = function (context, force) { - const oldDoc = doc; - doc = context.ownerDocument || context; - if (force || oldDoc !== doc) { - // force a new check for each document change - // performed before the next select operation - HTML_DOCUMENT = isHTML(doc); - QUIRKS_MODE = HTML_DOCUMENT && doc.compatMode.indexOf('CSS') < 0; - NAMESPACE = doc.documentElement && doc.documentElement.namespaceURI; - Snapshot.doc = doc; - } - Snapshot.from = context; - return context; - }; - - // selector - let lastMatched; - let lastSelected; - - const F_INIT = '"use strict";return function Resolver(c,f,x,r)'; - - const S_HEAD = 'var e,n,o,j=r.length-1,k=-1'; - const M_HEAD = 'var e,n,o'; - - const S_LOOP = 'main:while((e=c[++k]))'; - const N_LOOP = 'main:while((e=c.item(++k)))'; - const M_LOOP = 'e=c;'; - - const S_BODY = 'r[++j]=c[k];'; - const N_BODY = 'r[++j]=c.item(k);'; - const M_BODY = ''; - - const S_TAIL = 'continue main;'; - const M_TAIL = 'r=true;'; - - const S_TEST = 'if(f(c[k])){break main;}'; - const N_TEST = 'if(f(c.item(k))){break main;}'; - const M_TEST = 'f(c);'; - - let S_VARS = []; - let M_VARS = []; - - // build conditional code to check components of selector strings - const compileSelector = function (expression, source, mode, callback) { - // N is the negation pseudo-class flag - // D is the default inverted negation flag - let a; - let b; - let n; - let f; - let name; - let NS; - const N = ''; - const D = '!'; - let compat; - let expr; - let match; - let result; - let status; - let symbol; - let test; - let type; - let selector = expression; - let vars; - - // original 'select' or 'match' selector string before normalization - const selectorString = mode ? lastSelected : lastMatched; - - // isolate selector combinators/components and normalize whitespace - selector = selector.replace(STD.combinator, '$1'); // .replace(STD.whitespace, ' '); - - let selectorRecursion = true; - while (selector) { - // get namespace prefix if present or get first char of selector - symbol = STD.apimethods.test(selector) ? '|' : selector[0]; - - switch (symbol) { - // universal resolver - case '*': - match = selector.match(Patterns.universal); - if (N === '!') { - source = 'if(' + N + 'true' + '){' + source + '}'; - } - break; - // id resolver - case '#': - match = selector.match(Patterns.id); - source = 'if(' + N + '(/^' + match[1] + '$/.test(e.getAttribute("id"))' + - ')){' + source + '}'; - break; - // class name resolver - case '.': - match = selector.match(Patterns.className); - compat = (QUIRKS_MODE ? 'i' : '') + '.test(e.getAttribute("class"))'; - source = 'if(' + N + '(/(^|\\s)' + match[1] + '(\\s|$)/' + compat + - ')){' + source + '}'; - break; - // tag name resolver - case (/[_a-z]/i.test(symbol) ? symbol : undefined): - match = selector.match(Patterns.tagName); - source = 'if(' + N + '(e.localName' + - (Config.MIXEDCASE || hasMixedCaseTagNames(doc) - ? '=="' + match[1].toLowerCase() + '"' - : '=="' + match[1].toUpperCase() + '"') + - ')){' + source + '}'; - break; - // namespace resolver - case '|': - match = selector.match(Patterns.namespace); - if (match[1] === '*') { - source = 'if(' + N + 'true){' + source + '}'; - } else if (!match[1]) { - source = 'if(' + N + '(!e.namespaceURI)){' + source + '}'; - } else if (typeof match[1] === 'string' && doc.documentElement && - doc.documentElement.prefix === match[1]) { - source = 'if(' + N + '(e.namespaceURI=="' + NAMESPACE + '")){' + source + '}'; - } else { - emit('\'' + selectorString + '\'' + qsInvalid); - } - break; - // attributes resolver - case '[': - match = selector.match(Patterns.attribute); - NS = match[0].match(STD.namespaces); - name = match[1]; - expr = name.split(':'); - expr = expr.length === 2 ? expr[1] : expr[0]; - if (match[2] && !(test = Operators[match[2]])) { - emit('\'' + selectorString + '\'' + qsInvalid); - return ''; - } - if (match[4] === '') { - test = match[2] === '~=' - ? { p1: '^\\s', p2: '+$', p3: 'true' } - : match[2] in ATTR_STD_OPS && match[2] !== '~=' - ? { p1: '^', p2: '$', p3: 'true' } - : test; - } else if (match[2] === '~=' && match[4].includes(' ')) { - // whitespace separated list but value contains space - source = 'if(' + N + 'false){' + source + '}'; - break; - } else if (match[4]) { - match[4] = convertEscapes(match[4]).replace(REX.regExpChar, '\\$&'); - } - type = match[5] === 'i' || (HTML_DOCUMENT && HTML_TABLE[expr.toLowerCase()]) - ? 'i' - : ''; - source = - 'if(' + N + '(' + - (!match[2] - ? (NS ? 's.hasAttributeNS(e,"' + name + '")' : 'e.hasAttribute&&e.hasAttribute("' + name + '")') - : !match[4] && ATTR_STD_OPS[match[2]] && match[2] !== '~=' - ? 'e.getAttribute&&e.getAttribute("' + name + '")==""' - : '(/' + test.p1 + match[4] + test.p2 + '/' + type + ').test(e.getAttribute&&e.getAttribute("' + name + '"))==' + test.p3) + - ')){' + source + '}'; - break; - // *** General sibling combinator - // E ~ F (F relative sibling of E) - case '~': - match = selector.match(Patterns.relative); - source = 'n=e;while((e=e.previousElementSibling)){' + source + '}e=n;'; - break; - // *** Adjacent sibling combinator - // E + F (F adiacent sibling of E) - case '+': - match = selector.match(Patterns.adjacent); - source = 'n=e;if((e=e.previousElementSibling)){' + source + '}e=n;'; - break; - // *** Descendant combinator - // E F (E ancestor of F) - case '\x09': - case '\x20': - match = selector.match(Patterns.ancestor); - source = 'n=e;while((e=e.parentElement)){' + source + '}e=n;'; - break; - // *** Child combinator - // E > F (F children of E) - case '>': - match = selector.match(Patterns.children); - source = 'n=e;if((e=e.parentElement)){' + source + '}e=n;'; - break; - // *** user supplied combinators extensions - case (symbol in Combinators ? symbol : undefined): - // for other registered combinators extensions - match[match.length - 1] = '*'; - source = Combinators[symbol](match) + source; - break; - // *** tree-structural pseudo-classes - // :root, :empty, :first-child, :last-child, :only-child, :first-of-type, :last-of-type, :only-of-type - case ':': - if ((match = selector.match(Patterns.structural))) { - match[1] = match[1].toLowerCase(); - switch (match[1]) { - case 'root': - // there can only be one :root element, so exit the loop once found - source = 'if(' + N + '(e===s.doc.documentElement)){' + source + (mode ? 'break main;' : '') + '}'; - break; - case 'empty': - // matches elements that don't contain elements or text nodes - source = 'n=e.firstChild;while(n&&!(/1|3/).test(n.nodeType)){n=n.nextSibling}if(' + D + 'n){' + source + '}'; - break; - // *** child-indexed pseudo-classes - // :first-child, :last-child, :only-child - case 'only-child': - source = 'if(' + N + '(!e.nextElementSibling&&!e.previousElementSibling)){' + source + '}'; - break; - case 'last-child': - source = 'if(' + N + '(!e.nextElementSibling)){' + source + '}'; - break; - case 'first-child': - source = 'if(' + N + '(!e.previousElementSibling)){' + source + '}'; - break; - // *** typed child-indexed pseudo-classes - // :only-of-type, :last-of-type, :first-of-type - case 'only-of-type': - source = 'o=e.localName;' + - 'n=e;while((n=n.nextElementSibling)&&n.localName!=o);if(!n){' + - 'n=e;while((n=n.previousElementSibling)&&n.localName!=o);}if(' + D + 'n){' + source + '}'; - break; - case 'last-of-type': - source = 'n=e;o=e.localName;while((n=n.nextElementSibling)&&n.localName!=o);if(' + D + 'n){' + source + '}'; - break; - case 'first-of-type': - source = 'n=e;o=e.localName;while((n=n.previousElementSibling)&&n.localName!=o);if(' + D + 'n){' + source + '}'; - break; - default: - emit('\'' + selectorString + '\'' + qsInvalid); - } - // *** child-indexed & typed child-indexed pseudo-classes - // :nth-child, :nth-of-type, :nth-last-child, :nth-last-of-type - } else if ((match = selector.match(Patterns.treestruct))) { - match[1] = match[1].toLowerCase(); - switch (match[1]) { - case 'nth-child': - case 'nth-of-type': - case 'nth-last-child': - case 'nth-last-of-type': - expr = /-of-type/i.test(match[1]); - if (match[1] && match[2]) { - type = /last/i.test(match[1]); - if (match[2] === 'n') { - source = 'if(' + N + 'true){' + source + '}'; - break; - } else if (match[2] === '1') { - test = type ? 'next' : 'previous'; - source = expr - ? 'n=e;o=e.localName;' + - 'while((n=n.' + test + 'ElementSibling)&&n.localName!=o);if(' + D + 'n){' + source + '}' - : 'if(' + N + '!e.' + test + 'ElementSibling){' + source + '}'; - break; - } else if (match[2] === 'even' || match[2] === '2n0' || match[2] === '2n+0' || match[2] === '2n') { - test = 'n%2==0'; - } else if (match[2] === 'odd' || match[2] === '2n1' || match[2] === '2n+1') { - test = 'n%2==1'; - } else { - f = /n/i.test(match[2]); - n = match[2].split('n'); - a = parseInt(n[0], 10) || 0; - b = parseInt(n[1], 10) || 0; - if (n[0] === '-') { - a = -1; - } - if (n[0] === '+') { - a = +1; - } - test = (b ? '(n' + (b > 0 ? '-' : '+') + Math.abs(b) + ')' : 'n') + '%' + a + '==0'; - test = a >= +1 - ? (f - ? 'n>' + (b - 1) + (Math.abs(a) !== 1 - ? '&&' + test - : '') - : 'n==' + a) - : a <= -1 - ? (f - ? 'n<' + (b + 1) + (Math.abs(a) !== 1 - ? '&&' + test - : '') - : 'n==' + a) - : a === 0 - ? (n[0] - ? 'n==' + b - : 'n>' + (b - 1)) - : 'false'; - } - expr = expr ? 'OfType' : 'Element'; - type = type ? 'true' : 'false'; - source = 'n=s.nth' + expr + '(e,' + type + ');if(' + N + '(' + test + ')){' + source + '}'; - } else { - emit('\'' + selectorString + '\'' + qsInvalid); - } - break; - default: - emit('\'' + selectorString + '\'' + qsInvalid); - } - // *** logical combination pseudo-classes - // :is( s1, [ s2, ... ]), :not( s1, [ s2, ... ]) - } else if ((match = selector.match(Patterns.logicalsel))) { - match[1] = match[1].toLowerCase(); - expr = match[2].replace(REX.CommaGroup, ',').replace(REX.TrimSpaces, ''); - switch (match[1]) { - // FIXME: - case 'is': - case 'where': - case 'matches': - source = 'if(s.match("' + expr.replace(/\x22/g, '\\"') + '",e)){' + source + '}'; - break; - // FIXME: - case 'not': - source = 'if(!s.match("' + expr.replace(/\x22/g, '\\"') + '",e)){' + source + '}'; - break; - // FIXME: - case 'has': - // clear cache - matchResolvers = {}; - source = 'if(e.querySelector(":scope ' + expr.replace(/\x22/g, '\\"') + '")){' + source + '}'; - break; - default: - emit('\'' + selectorString + '\'' + qsInvalid); - } - // *** location pseudo-classes - // :any-link, :link, :visited, :target - } else if ((match = selector.match(Patterns.locationpc))) { - match[1] = match[1].toLowerCase(); - switch (match[1]) { - case 'any-link': - source = 'if(' + N + '(/^a|area$/i.test(e.localName)&&e.hasAttribute("href")||e.visited)){' + source + '}'; - break; - case 'link': - source = 'if(' + N + '(/^a|area$/i.test(e.localName)&&e.hasAttribute("href"))){' + source + '}'; - break; - // FIXME: - case 'visited': - source = 'if(' + N + '(/^a|area$/i.test(e.localName)&&e.hasAttribute("href")&&e.visited)){' + source + '}'; - break; - case 'target': - source = 'if(s.isTarget(e)){' + source + '}'; - break; - default: - emit('\'' + selectorString + '\'' + qsInvalid); - } - // *** user interface and form pseudo-classes - // :enabled, :disabled, :read-only, :read-write, :placeholder-shown, :default - } else if ((match = selector.match(Patterns.inputstate))) { - match[1] = match[1].toLowerCase(); - switch (match[1]) { - // FIXME: lacks custom element support - case 'enabled': - source = 'if((("form" in e||/^optgroup$/i.test(e.localName))&&"disabled" in e &&e.disabled===false' + - ')){' + source + '}'; - break; - // FIXME: lacks custom element support - case 'disabled': - // https://html.spec.whatwg.org/#enabling-and-disabling-form-controls:-the-disabled-attribute - source = 'if((("form" in e||/^optgroup$/i.test(e.localName))&&"disabled" in e)){' + - // F is true if any of the fieldset elements in the ancestry chain has the disabled attribute specified - // L is true if the first legend element of the fieldset contains the element - 'var x=0,N=[],F=false,L=false;' + - 'if(!(/^(optgroup|option)$/i.test(e.localName))){' + - 'n=e.parentElement;' + - 'while(n){' + - 'if(n.localName==="fieldset"){' + - 'N[x++]=n;' + - 'if(n.disabled===true){' + - 'F=true;' + - 'break;' + - '}' + - '}' + - 'n=n.parentElement;' + - '}' + - 'for(var x=0;x<N.length;x++){' + - 'if((n=s.first("legend",N[x]))&&n.contains(e)){' + - 'L=true;' + - 'break;' + - '}' + - '}' + - '}' + - 'if(e.disabled===true||(F&&!L)){' + source + '}}'; - break; - case 'read-only': - source = - 'if(' + - '(/^textarea$/i.test(e.localName)&&(e.readOnly||e.disabled))||' + - '(/^input$/i.test(e.localName)&&("|date|datetime-local|email|month|number|password|search|tel|text|time|url|week|".includes("|"+e.type+"|")?(e.readOnly||e.disabled):true))||' + - '(!/^(?:input|textarea)$/i.test(e.localName) && !s.isContentEditable(e))' + - '){' + source + '}'; - break; - case 'read-write': - source = - 'if(' + - '(/^textarea$/i.test(e.localName)&&!e.readOnly&&!e.disabled)||' + - '(/^input$/i.test(e.localName)&&"|date|datetime-local|email|month|number|password|search|tel|text|time|url|week|".includes("|"+e.type+"|")&&!e.readOnly&&!e.disabled)||' + - '(!/^(?:input|textarea)$/i.test(e.localName) && s.isContentEditable(e))' + - '){' + source + '}'; - break; - // FIXME: - case 'placeholder-shown': - source = - 'if((' + - '(/^input|textarea$/i.test(e.localName))&&e.hasAttribute("placeholder")&&' + - '("|textarea|password|number|search|email|text|tel|url|".includes("|"+e.type+"|"))&&' + - '(!s.match(":focus",e))' + - ')){' + source + '}'; - break; - // FIXME: - case 'default': - source = - 'if(("form" in e && e.form)){' + - 'var x=0;n=[];' + - 'if(e.type=="image")n=e.form.getElementsByTagName("input");' + - 'if(e.type=="submit")n=e.form.elements;' + - 'while(n[x]&&e!==n[x]){' + - 'if(n[x].type=="image")break;' + - 'if(n[x].type=="submit")break;' + - 'x++;' + - '}' + - '}' + - 'if((e.form&&(e===n[x]&&"|image|submit|".includes("|"+e.type+"|"))||' + - '((/^option$/i.test(e.localName))&&e.defaultSelected)||' + - '(("|radio|checkbox|".includes("|"+e.type+"|"))&&e.defaultChecked)' + - ')){' + source + '}'; - break; - default: - emit('\'' + selector_string + '\'' + qsInvalid); - break; - } - // *** input pseudo-classes (for form validation) - // :checked, :indeterminate, :valid, :invalid, :in-range, :out-of-range, :required, :optional - } else if ((match = selector.match(Patterns.inputvalue))) { - match[1] = match[1].toLowerCase(); - switch (match[1]) { - case 'checked': - source = 'if(' + N + '(/^input$/i.test(e.localName)&&' + - '("|radio|checkbox|".includes("|"+e.type+"|")&&e.checked)||' + - '(/^option$/i.test(e.localName)&&(e.selected||e.checked))' + - ')){' + source + '}'; - break; - case 'indeterminate': - source = 'if(s.isIndeterminate(e)){' + source + '}'; - break; - // FIXME: - case 'required': - source = - 'if(' + N + - '(/^input|select|textarea$/i.test(e.localName)&&e.required)' + - '){' + source + '}'; - break; - // FIXME: - case 'optional': - source = - 'if(' + N + - '(/^input|select|textarea$/i.test(e.localName)&&!e.required)' + - '){' + source + '}'; - break; - // FIXME: - case 'invalid': - source = - 'if(' + N + '((' + - '(/^form$/i.test(e.localName)&&!e.noValidate)||' + - '(e.willValidate&&!e.formNoValidate))&&!e.checkValidity())||' + - '(/^fieldset$/i.test(e.localName)&&s.first(":invalid",e))' + - '){' + source + '}'; - break; - // FIXME: - case 'valid': - source = - 'if(' + N + '((' + - '(/^form$/i.test(e.localName)&&!e.noValidate)||' + - '(e.willValidate&&!e.formNoValidate))&&e.checkValidity())||' + - '(/^fieldset$/i.test(e.localName)&&s.first(":valid",e))' + - '){' + source + '}'; - break; - // FIXME: - case 'in-range': - source = - 'if(' + N + - '(/^input$/i.test(e.localName))&&' + - '(e.willValidate&&!e.formNoValidate)&&' + - '(!e.validity.rangeUnderflow&&!e.validity.rangeOverflow)&&' + - '("|date|datetime-local|month|number|range|time|week|".includes("|"+e.type+"|"))&&' + - '("range"==e.type||e.getAttribute("min")||e.getAttribute("max"))' + - '){' + source + '}'; - break; - // FIXME: - case 'out-of-range': - source = - 'if(' + N + - '(/^input$/i.test(e.localName))&&' + - '(e.willValidate&&!e.formNoValidate)&&' + - '(e.validity.rangeUnderflow||e.validity.rangeOverflow)&&' + - '("|date|datetime-local|month|number|range|time|week|".includes("|"+e.type+"|"))&&' + - '("range"==e.type||e.getAttribute("min")||e.getAttribute("max"))' + - '){' + source + '}'; - break; - default: - emit('\'' + selectorString + '\'' + qsInvalid); - } - // allow pseudo-elements starting with single colon (:) - // :after, :before, :first-letter, :first-line - // assert: e.type is in double-colon format, like ::after - } else if ((match = selector.match(Patterns.pseudoSng))) { - source = 'if(e.element&&e.type.toLowerCase()=="' + - ':' + match[0].toLowerCase() + '"){e=e.element;' + source + '}'; - // allow pseudo-elements starting with double colon (::) - // ::after, ::before, ::marker, ::placeholder, ::inactive-selection, ::selection, ::-webkit-<foo-bar> - // assert: e.type is in double-colon format, like ::after - } else if ((match = selector.match(Patterns.pseudoDbl))) { - source = 'if(e.element&&e.type.toLowerCase()=="' + - match[0].toLowerCase() + '"){e=e.element;' + source + '}'; - // placeholder for parsed only no-op selectors - } else if ((match = selector.match(Patterns.pseudoNop))) { - source = 'if(' + N + 'false' + '){' + source + '}'; - } else { - // reset - expr = false; - status = false; - // process registered selector extensions - for (expr in Selectors) { - if ((match = selector.match(Selectors[expr].Expression))) { - result = Selectors[expr].Callback(match, source, mode, callback); - if ('match' in result) { - match = result.match; - } - vars = result.modvar; - if (mode) { - // add extra select() vars - vars && !S_VARS.includes(vars) && S_VARS.push(vars); - } else { - // add extra match() vars - vars && M_VARS.includes(vars) && M_VARS.push(vars); - } - // extension source code - source = result.source; - // extension status code - status = result.status; - // break on status error - if (status) { break; } - } - } - if (!status) { - emit('unknown pseudo-class selector \'' + selector + '\''); - return ''; - } - if (!expr) { - emit('unknown token in selector \'' + selector + '\''); - return ''; - } - } - break; - default: - selectorRecursion = false; - emit('\'' + selectorString + '\'' + qsInvalid); - } - // end of switch symbol - if (!selectorRecursion) { - break; - } - if (!match) { - emit('\'' + selectorString + '\'' + qsInvalid); - return ''; - } - - // pop last component - selector = match.pop(); - } - // end of while selector - - return source; - }; - - // compile groups or single selector strings into - // executable functions for matching or selecting - const compile = function (selector, mode, callback) { - let head = ''; let loop = ''; let macro = ''; let source = ''; let vars = ''; - - // 'mode' can be boolean or null - // true = select / false = match - // null to use collection.item() - switch (mode) { - case true: - if (selectLambdas[selector]) { - return selectLambdas[selector]; - } - macro = S_BODY + (callback ? S_TEST : '') + S_TAIL; - head = S_HEAD; - loop = S_LOOP; - break; - case false: - if (matchLambdas[selector]) { - return matchLambdas[selector]; - } - macro = M_BODY + (callback ? M_TEST : '') + M_TAIL; - head = M_HEAD; - loop = M_LOOP; - break; - case null: - if (selectLambdas[selector]) { - return selectLambdas[selector]; - } - macro = N_BODY + (callback ? N_TEST : '') + S_TAIL; - head = S_HEAD; - loop = N_LOOP; - break; - default: - } - - source = compileSelector(selector, macro, mode, callback); - - loop += (mode || mode === null) ? '{' + source + '}' : source; - - if ((mode || mode === null) && selector.includes(':nth')) { - loop += reNthElem.test(selector) ? 's.nthElement(null, 2);' : ''; - loop += reNthType.test(selector) ? 's.nthOfType(null, 2);' : ''; - } - - if (S_VARS[0] || M_VARS[0]) { - vars = ',' + (S_VARS.join(',') || M_VARS.join(',')); - S_VARS = []; - M_VARS = []; - } - - const factory = Function('s', F_INIT + '{' + head + vars + ';' + loop + 'return r;}')(Snapshot); - - return mode || mode === null ? (selectLambdas[selector] = factory) : (matchLambdas[selector] = factory); - }; - - // optimize selectors avoiding duplicated checks - const optimize = function (selector, token) { - const index = token.index; - const length = token[1].length + token[2].length; - return selector.slice(0, index) + - (' >+~'.indexOf(selector.charAt(index - 1)) > -1 - ? (':['.indexOf(selector.charAt(index + length + 1)) > -1 - ? '*' - : '') - : '') + selector.slice(index + length - (token[1] === '*' ? 1 : 0)); - }; - - // prepare factory resolvers and closure collections - const collect = function (selectors, context, callback) { - let i; - let l; - const seen = { }; - let token = ['', '*', '*']; - const optimized = selectors; - const factory = []; - const htmlset = []; - const nodeset = []; - let results = []; - let type; - - for (i = 0, l = selectors.length; l > i; ++i) { - if (!seen[selectors[i]] && (seen[selectors[i]] = true)) { - type = selectors[i].match(reOptimizer); - if (type && type[1] !== ':' && (token = type)) { - token[1] || (token[1] = '*'); - optimized[i] = optimize(optimized[i], token); - } else { - token = ['', '*', '*']; - } - } - - nodeset[i] = token[1] + token[2]; - htmlset[i] = compat[token[1]](context, token[2]); - factory[i] = compile(optimized[i], true, null); - - factory[i] - ? factory[i](htmlset[i](), callback, context, results) - : results.concat(htmlset[i]()); - } - - if (l > 1) { - results.sort(documentOrder); - hasDupes && (results = unique(results)); - } - - return { - callback, - context, - factory, - htmlset, - nodeset, - results - }; - }; - - // replace ':scope' pseudo-class with element references - const makeref = function (selectors, element) { - // DOCUMENT_NODE (9) - if (element.nodeType === 9) { - element = element.documentElement; - } - - return selectors.replace(/:scope/gi, - element.localName + - (element.id ? '#' + element.id : '') + - (element.className ? '.' + element.classList[0] : '')); - }; - - const matchAssert = function (f, element, callback) { - let r = false; - for (let i = 0, l = f.length; l > i; ++i) { - f[i](element, callback, null, false) && (r = true); - } - return r; - }; - - const matchCollect = function (selectors, callback) { - const f = []; - for (let i = 0, l = selectors.length; l > i; ++i) { - f[i] = compile(selectors[i], false, callback); - } - return { factory: f }; - }; - - // equivalent of w3c 'matches' method - const match = function _matches(selectors, element, callback) { - let expressions; - - if (element && !/:has\(/.test(selectors) && matchResolvers[selectors]) { - return matchAssert(matchResolvers[selectors].factory, element, callback); - } - - lastMatched = selectors; - - // arguments validation - if (arguments.length === 0) { - emit(qsNotArgs, 'TypeError'); - return Config.VERBOSITY ? undefined : false; - } else if (arguments[0] === '') { - emit('\'\'' + qsInvalid); - return Config.VERBOSITY ? undefined : false; - } - - // input NULL or UNDEFINED - if (typeof selectors !== 'string') { - selectors = '' + selectors; - } - - if ((/:scope/i).test(selectors)) { - selectors = makeref(selectors, element); - } - - // normalize input string - const parsed = selectors - .replace(/\0|\\$/g, '\ufffd') - .replace(REX.combineWSP, '\x20') - .replace(REX.pseudosWSP, '$1') - .replace(REX.tabCharWSP, '\t') - .replace(REX.commaGroup, ',') - .replace(REX.trimSpaces, ''); - - // parse, validate and split possible compound selectors - if ((expressions = parsed.match(reValidator)) && expressions.join('') === parsed) { - expressions = parsed.match(REX.splitGroup); - if (parsed[parsed.length - 1] === ',') { - emit(qsInvalid); - return Config.VERBOSITY ? undefined : false; - } - } else { - emit('\'' + selectors + '\'' + qsInvalid); - return Config.VERBOSITY ? undefined : false; - } - - matchResolvers[selectors] = matchCollect(expressions, callback); - - return matchAssert(matchResolvers[selectors].factory, element, callback); - }; - - // equivalent of w3c 'closest' method - const ancestor = function _closest(selectors, element, callback) { - if ((/:scope/i).test(selectors)) { - selectors = makeref(selectors, element); - } - - while (element) { - if (match(selectors, element, callback)) break; - element = element.parentElement; - } - return element; - }; - - // equivalent of w3c 'querySelectorAll' method - const select = function _querySelectorAll(selectors, context, callback) { - let expressions; let nodes = []; let resolver; - - context || (context = doc); - - if (selectors) { - if ((resolver = selectResolvers[selectors])) { - if (resolver.context === context && resolver.callback === callback) { - const f = resolver.factory; - const h = resolver.htmlset; - const n = resolver.nodeset; - if (n.length > 1) { - const l = n.length; - for (let i = 0, l = n.length, list; l > i; ++i) { - list = compat[n[i][0]](context, n[i].slice(1))(); - if (f[i] !== null) { - f[i](list, callback, context, nodes); - } else { - nodes = nodes.concat(list); - } - } - if (l > 1 && nodes.length > 1) { - nodes.sort(documentOrder); - hasDupes && (nodes = unique(nodes)); - } - } else { - if (f[0]) { - nodes = f[0](h[0](), callback, context, nodes); - } else { - nodes = h[0](); - } - } - return typeof callback === 'function' - ? concatCall(nodes, callback) - : nodes; - } - } - } - - lastSelected = selectors; - - // arguments validation - if (arguments.length === 0) { - emit(qsNotArgs, 'TypeError'); - return Config.VERBOSITY ? undefined : none; - } else if (arguments[0] === '') { - emit('\'\'' + qsInvalid); - return Config.VERBOSITY ? undefined : none; - } else if (lastContext !== context) { - lastContext = switchContext(context); - } - - // input NULL or UNDEFINED - if (typeof selectors !== 'string') { - selectors = '' + selectors; - } - - if ((/:scope/i).test(selectors)) { - selectors = makeref(selectors, context); - } - - // normalize input string - const parsed = selectors - .replace(/\0|\\$/g, '\ufffd') - .replace(REX.combineWSP, '\x20') - .replace(REX.pseudosWSP, '$1') - .replace(REX.tabCharWSP, '\t') - .replace(REX.commaGroup, ',') - .replace(REX.trimSpaces, ''); - - // parse, validate and split possible compound selectors - if ((expressions = parsed.match(reValidator)) && expressions.join('') === parsed) { - expressions = parsed.match(REX.splitGroup); - if (parsed[parsed.length - 1] === ',') { - emit(qsInvalid); - return Config.VERBOSITY ? undefined : false; - } - } else { - emit('\'' + selectors + '\'' + qsInvalid); - return Config.VERBOSITY ? undefined : false; - } - - // save/reuse factory and closure collection - selectResolvers[selectors] = collect(expressions, context, callback); - - nodes = selectResolvers[selectors].results; - - return typeof callback === 'function' - ? concatCall(nodes, callback) - : nodes; - }; - - // equivalent of w3c 'querySelector' method - const first = function _querySelector(selectors, context, callback) { - if (arguments.length === 0) { - emit(qsNotArgs, 'TypeError'); - } - return select(selectors, context, typeof callback === 'function' - ? function firstMatch(element) { - callback(element); - return false; - } - : function firstMatch() { - return false; - } - )[0] || null; - }; - - // execute the engine initialization code - const initialize = function (d) { - setIdentifierSyntax(); - lastContext = switchContext(d, true); - Snapshot.doc = doc; - Snapshot.from = doc; - Snapshot.byTag = byTag; - Snapshot.first = first; - Snapshot.match = match; - Snapshot.ancestor = ancestor; - Snapshot.nthOfType = nthOfType; - Snapshot.nthElement = nthElement; - Snapshot.hasAttributeNS = hasAttributeNS; - Snapshot.isTarget = isTarget; - Snapshot.isIndeterminate = isIndeterminate; - Snapshot.isContentEditable = isContentEditable; - }; - - initialize(doc); - - // public exported methods/objects - const Dom = { - // exported engine methods - Version: version, - configure, - match, - closest: ancestor, - first, - select - }; - - return Dom; -}); |
