postcss-color-functional-notation 3.0.2 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # Changes to PostCSS Color Functional Notation
2
2
 
3
+ ### 4.1.0 (December 15, 2021)
4
+
5
+ - Added: support for Alpha value as a CSS variable in `rgb()` and `rgba()`.
6
+
7
+ ### 4.0.2 (December 13, 2021)
8
+
9
+ - Changed: now uses `postcss-value-parser` for parsing.
10
+ - Updated: documentation
11
+ - Added: support for CSS variables with `preserve: true` option.
12
+
13
+ ### 4.0.1 (November 18, 2021)
14
+
15
+ - Added: Safeguards against postcss-values-parser potentially throwing an error.
16
+ - Updated: postcss-value-parser to 6.0.1 (patch)
17
+
18
+ ### 4.0.0 (September 17, 2021)
19
+
20
+ - Updated: Support for PostCS 8+ (major).
21
+ - Updated: Support for Node 12+ (major).
22
+
3
23
  ### 3.0.2 (April 25, 2020)
4
24
 
5
25
  - Updated: Publish
package/INSTALL.md ADDED
@@ -0,0 +1,170 @@
1
+ # Installing PostCSS Color Functional Notation
2
+
3
+ [PostCSS Color Functional Notation] runs in all Node environments, with special instructions for:
4
+
5
+ | [Node](#node) | [PostCSS CLI](#postcss-cli) | [Webpack](#webpack) | [Create React App](#create-react-app) | [Gulp](#gulp) | [Grunt](#grunt) |
6
+ | --- | --- | --- | --- | --- | --- |
7
+
8
+ ## Node
9
+
10
+ Add [PostCSS Color Functional Notation] to your project:
11
+
12
+ ```bash
13
+ npm install postcss-color-functional-notation --save-dev
14
+ ```
15
+
16
+ Use [PostCSS Color Functional Notation] to process your CSS:
17
+
18
+ ```js
19
+ const postcssColorFunctionalNotation = require('postcss-color-functional-notation');
20
+
21
+ postcssColorFunctionalNotation.process(YOUR_CSS /*, processOptions, pluginOptions */);
22
+ ```
23
+
24
+ Or use it as a [PostCSS] plugin:
25
+
26
+ ```js
27
+ const postcss = require('postcss');
28
+ const postcssColorFunctionalNotation = require('postcss-color-functional-notation');
29
+
30
+ postcss([
31
+ postcssColorFunctionalNotation(/* pluginOptions */)
32
+ ]).process(YOUR_CSS /*, processOptions */);
33
+ ```
34
+
35
+ ## PostCSS CLI
36
+
37
+ Add [PostCSS CLI] to your project:
38
+
39
+ ```bash
40
+ npm install postcss-cli --save-dev
41
+ ```
42
+
43
+ Use [PostCSS Color Functional Notation] in your `postcss.config.js` configuration file:
44
+
45
+ ```js
46
+ const postcssColorFunctionalNotation = require('postcss-color-functional-notation');
47
+
48
+ module.exports = {
49
+ plugins: [
50
+ postcssColorFunctionalNotation(/* pluginOptions */)
51
+ ]
52
+ }
53
+ ```
54
+
55
+ ## Webpack
56
+
57
+ Add [PostCSS Loader] to your project:
58
+
59
+ ```bash
60
+ npm install postcss-loader --save-dev
61
+ ```
62
+
63
+ Use [PostCSS Color Functional Notation] in your Webpack configuration:
64
+
65
+ ```js
66
+ const postcssColorFunctionalNotation = require('postcss-color-functional-notation');
67
+
68
+ module.exports = {
69
+ module: {
70
+ rules: [
71
+ {
72
+ test: /\.css$/,
73
+ use: [
74
+ 'style-loader',
75
+ { loader: 'css-loader', options: { importLoaders: 1 } },
76
+ { loader: 'postcss-loader', options: {
77
+ ident: 'postcss',
78
+ plugins: () => [
79
+ postcssColorFunctionalNotation(/* pluginOptions */)
80
+ ]
81
+ } }
82
+ ]
83
+ }
84
+ ]
85
+ }
86
+ }
87
+ ```
88
+
89
+ ## Create React App
90
+
91
+ Add [React App Rewired] and [React App Rewire PostCSS] to your project:
92
+
93
+ ```bash
94
+ npm install react-app-rewired react-app-rewire-postcss --save-dev
95
+ ```
96
+
97
+ Use [React App Rewire PostCSS] and [PostCSS Color Functional Notation] in your
98
+ `config-overrides.js` file:
99
+
100
+ ```js
101
+ const reactAppRewirePostcss = require('react-app-rewire-postcss');
102
+ const postcssColorFunctionalNotation = require('postcss-color-functional-notation');
103
+
104
+ module.exports = config => reactAppRewirePostcss(config, {
105
+ plugins: () => [
106
+ postcssColorFunctionalNotation(/* pluginOptions */)
107
+ ]
108
+ });
109
+ ```
110
+
111
+ ## Gulp
112
+
113
+ Add [Gulp PostCSS] to your project:
114
+
115
+ ```bash
116
+ npm install gulp-postcss --save-dev
117
+ ```
118
+
119
+ Use [PostCSS Color Functional Notation] in your Gulpfile:
120
+
121
+ ```js
122
+ const postcss = require('gulp-postcss');
123
+ const postcssColorFunctionalNotation = require('postcss-color-functional-notation');
124
+
125
+ gulp.task('css', () => gulp.src('./src/*.css').pipe(
126
+ postcss([
127
+ postcssColorFunctionalNotation(/* pluginOptions */)
128
+ ])
129
+ ).pipe(
130
+ gulp.dest('.')
131
+ ));
132
+ ```
133
+
134
+ ## Grunt
135
+
136
+ Add [Grunt PostCSS] to your project:
137
+
138
+ ```bash
139
+ npm install grunt-postcss --save-dev
140
+ ```
141
+
142
+ Use [PostCSS Color Functional Notation] in your Gruntfile:
143
+
144
+ ```js
145
+ const postcssColorFunctionalNotation = require('postcss-color-functional-notation');
146
+
147
+ grunt.loadNpmTasks('grunt-postcss');
148
+
149
+ grunt.initConfig({
150
+ postcss: {
151
+ options: {
152
+ use: [
153
+ postcssColorFunctionalNotation(/* pluginOptions */)
154
+ ]
155
+ },
156
+ dist: {
157
+ src: '*.css'
158
+ }
159
+ }
160
+ });
161
+ ```
162
+
163
+ [Gulp PostCSS]: https://github.com/postcss/gulp-postcss
164
+ [Grunt PostCSS]: https://github.com/nDmitry/grunt-postcss
165
+ [PostCSS]: https://github.com/postcss/postcss
166
+ [PostCSS CLI]: https://github.com/postcss/postcss-cli
167
+ [PostCSS Loader]: https://github.com/postcss/postcss-loader
168
+ [PostCSS Color Functional Notation]: https://github.com/csstools/postcss-plugins/postcss-color-functional-notation
169
+ [React App Rewire PostCSS]: https://github.com/csstools/react-app-rewire-postcss
170
+ [React App Rewired]: https://github.com/timarney/react-app-rewired
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [<img alt="NPM Version" src="https://img.shields.io/npm/v/postcss-color-functional-notation.svg" height="20">][npm-url]
4
4
  [<img alt="CSS Standard Status" src="https://cssdb.org/badge/lab-function.svg" height="20">][css-url]
5
- [<img alt="Build Status" src="https://img.shields.io/travis/csstools/postcss-color-functional-notation/master.svg" height="20">][cli-url]
5
+ [<img alt="Build Status" src="https://github.com/csstools/postcss-plugins/workflows/test/badge.svg" height="20">][cli-url]
6
6
  [<img alt="Support Chat" src="https://img.shields.io/badge/support-chat-blue.svg" height="20">][git-url]
7
7
 
8
8
  [PostCSS Color Functional Notation] lets you use space and slash separated
@@ -36,14 +36,6 @@ npm install postcss-color-functional-notation --save-dev
36
36
 
37
37
  Use [PostCSS Color Functional Notation] to process your CSS:
38
38
 
39
- ```js
40
- const postcssColorFunctionalNotation = require('postcss-color-functional-notation');
41
-
42
- postcssColorFunctionalNotation.process(YOUR_CSS /*, processOptions, pluginOptions */);
43
- ```
44
-
45
- Or use it as a [PostCSS] plugin:
46
-
47
39
  ```js
48
40
  const postcss = require('postcss');
49
41
  const postcssColorFunctionalNotation = require('postcss-color-functional-notation');
@@ -91,7 +83,7 @@ postcssImageSetFunction({ preserve: true })
91
83
  }
92
84
  ```
93
85
 
94
- [cli-url]: https://travis-ci.org/csstools/postcss-color-functional-notation
86
+ [cli-url]: https://github.com/csstools/postcss-plugins/actions/workflows/test.yml?query=workflow/test
95
87
  [css-url]: https://cssdb.org/#color-functional-notation
96
88
  [git-url]: https://gitter.im/postcss/postcss
97
89
  [npm-url]: https://www.npmjs.com/package/postcss-color-functional-notation
@@ -101,4 +93,4 @@ postcssImageSetFunction({ preserve: true })
101
93
  [Grunt PostCSS]: https://github.com/nDmitry/grunt-postcss
102
94
  [PostCSS]: https://github.com/postcss/postcss
103
95
  [PostCSS Loader]: https://github.com/postcss/postcss-loader
104
- [PostCSS Color Functional Notation]: https://github.com/csstools/postcss-color-functional-notation
96
+ [PostCSS Color Functional Notation]: https://github.com/csstools/postcss-plugins/tree/main/plugins/postcss-color-functional-notation
package/dist/cli.d.ts ADDED
@@ -0,0 +1 @@
1
+ export {};
package/dist/cli.mjs ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+
3
+ import e from"postcss-value-parser";import t from"tty";import r from"path";import n from"url";import s,{promises as i}from"fs";function o(t){const r=t.value,n=t.nodes.slice().filter((e=>"comment"!==e.type&&"space"!==e.type));let s=null;if("hsl"===r||"hsla"===r?s=function(t){if(!function(t){if(!t||"word"!==t.type)return!1;if(!h(t))return!1;const r=e.unit(t.value);if(!r)return!1;return!!r.number&&("deg"===r.unit||"grad"===r.unit||"rad"===r.unit||"turn"===r.unit||""===r.unit)}(t[0]))return null;if(!a(t[1]))return null;if(!a(t[2]))return null;const r={h:e.unit(t[0].value),hNode:t[0],s:e.unit(t[1].value),sNode:t[1],l:e.unit(t[2].value),lNode:t[2]};if(function(e){switch(e.unit){case"deg":return void(e.unit="");case"rad":return e.unit="",void(e.number=Math.round(180*parseFloat(e.number)/Math.PI).toString());case"grad":return e.unit="",void(e.number=Math.round(.9*parseFloat(e.number)).toString());case"turn":e.unit="",e.number=Math.round(360*parseFloat(e.number)).toString()}}(r.h),""!==r.h.unit)return null;r.hNode.value=r.h.number,c(t[3])&&(r.slash=t[3]);(a(t[4])||l(t[4])||u(t[4]))&&(r.alpha=t[4]);return r}(n):"rgb"!==r&&"rgba"!==r||(s=function(t){if(!a(t[0]))return null;if(!a(t[1]))return null;if(!a(t[2]))return null;const r={r:e.unit(t[0].value),rNode:t[0],g:e.unit(t[1].value),gNode:t[1],b:e.unit(t[2].value),bNode:t[2]};"%"===r.r.unit&&(r.r.number=String(Math.floor(Number(r.r.number)/100*255)),r.rNode.value=r.r.number);"%"===r.g.unit&&(r.g.number=String(Math.floor(Number(r.g.number)/100*255)),r.gNode.value=r.g.number);"%"===r.b.unit&&(r.b.number=String(Math.floor(Number(r.b.number)/100*255)),r.bNode.value=r.b.number);c(t[3])&&(r.slash=t[3]);(a(t[4])||l(t[4])||u(t[4]))&&(r.alpha=t[4]);return r}(n)),!s)return;if(n.length>3&&(!s.slash||!s.alpha))return;!function(t,r,n){"hsl"===t.value||"hsla"===t.value?t.value="hsl":"rgb"!==t.value&&"rgba"!==t.value||(t.value="rgb");if(!r||!n)return;"hsl"===t.value?t.value="hsla":t.value="rgba";if(r.value=",",r.before="",!function(t){if(!t||"word"!==t.type)return!1;if(!h(t))return!1;const r=e.unit(t.value);if(!r)return!1;return!!r.number}(n))return;const s=e.unit(n.value);if(!s)return;"%"===s.unit&&(s.number=String(parseFloat(s.number)/100),n.value=String(s.number))}(t,s.slash,s.alpha);const[i,o]=function(e){if(function(e){if(void 0!==e.r)return!0;return!1}(e))return[e.rNode,e.gNode,e.bNode];return[e.hNode,e.sNode,e.lNode]}(s);t.nodes.splice(t.nodes.indexOf(i)+1,0,{sourceIndex:0,sourceEndIndex:1,value:",",type:"div",before:"",after:""}),t.nodes.splice(t.nodes.indexOf(o)+1,0,{sourceIndex:0,sourceEndIndex:1,value:",",type:"div",before:"",after:""})}function a(t){if(!t||"word"!==t.type)return!1;if(!h(t))return!1;const r=e.unit(t.value);return!!r&&("%"===r.unit||""===r.unit)}function l(e){return e&&"function"===e.type&&"calc"===e.value}function u(e){return e&&"function"===e.type&&"var"===e.value}function c(e){return e&&"div"===e.type&&"/"===e.value}function h(t){if(!t||!t.value)return!1;try{return!1!==e.unit(t.value)}catch(e){return!1}}const p=t=>{const r="preserve"in Object(t)&&Boolean(t.preserve);return{postcssPlugin:"postcss-color-functional-notation",Declaration:(t,{result:n,postcss:s})=>{if(r&&function(e){let t=e.parent;for(;t;)if("atrule"===t.type){if("supports"===t.name&&-1!==t.params.indexOf("(color: rgb(0 0 0 / 0.5)) and (color: hsl(0 0% 0% / 0.5))"))return!0;t=t.parent}else t=t.parent;return!1}(t))return;const i=t.value;if(!/(^|[^\w-])(hsla?|rgba?)\(/i.test(i))return;let a;try{a=e(i)}catch(e){t.warn(n,`Failed to parse value '${i}' as a hsl or rgb function. Leaving the original value intact.`)}if(void 0===a)return;a.walk((e=>{e.type&&"function"===e.type&&("hsl"!==e.value&&"hsla"!==e.value&&"rgb"!==e.value&&"rgba"!==e.value||o(e))}));const l=String(a);if(l!==i)if(r&&t.variable){const e=t.parent,r="(color: rgb(0 0 0 / 0.5)) and (color: hsl(0 0% 0% / 0.5))",n=s.atRule({name:"supports",params:r,source:t.source}),i=e.clone();i.removeAll(),i.append(t.clone()),n.append(i);let o=e,a=e.next();for(;o&&a&&"atrule"===a.type&&"supports"===a.name&&a.params===r;)o=a,a=a.next();o.after(n),t.value=l}else r?t.cloneBefore({value:l}):t.value=l}}};var f;p.postcss=!0,function(e){e.InvalidArguments="INVALID_ARGUMENTS"}(f||(f={}));var d={exports:{}};let g=t,m=!("NO_COLOR"in process.env||process.argv.includes("--no-color"))&&("FORCE_COLOR"in process.env||process.argv.includes("--color")||"win32"===process.platform||g.isatty(1)&&"dumb"!==process.env.TERM||"CI"in process.env),w=(e,t,r=e)=>n=>{let s=""+n,i=s.indexOf(t,e.length);return~i?e+y(s,t,r,i)+t:e+s+t},y=(e,t,r,n)=>{let s=e.substring(0,n)+r,i=e.substring(n+t.length),o=i.indexOf(t);return~o?s+y(i,t,r,o):s+i},v=(e=m)=>({isColorSupported:e,reset:e?e=>`${e}`:String,bold:e?w("","",""):String,dim:e?w("","",""):String,italic:e?w("",""):String,underline:e?w("",""):String,inverse:e?w("",""):String,hidden:e?w("",""):String,strikethrough:e?w("",""):String,black:e?w("",""):String,red:e?w("",""):String,green:e?w("",""):String,yellow:e?w("",""):String,blue:e?w("",""):String,magenta:e?w("",""):String,cyan:e?w("",""):String,white:e?w("",""):String,gray:e?w("",""):String,bgBlack:e?w("",""):String,bgRed:e?w("",""):String,bgGreen:e?w("",""):String,bgYellow:e?w("",""):String,bgBlue:e?w("",""):String,bgMagenta:e?w("",""):String,bgCyan:e?w("",""):String,bgWhite:e?w("",""):String});d.exports=v(),d.exports.createColors=v;const b="'".charCodeAt(0),S='"'.charCodeAt(0),C="\\".charCodeAt(0),_="/".charCodeAt(0),x="\n".charCodeAt(0),O=" ".charCodeAt(0),A="\f".charCodeAt(0),M="\t".charCodeAt(0),k="\r".charCodeAt(0),E="[".charCodeAt(0),L="]".charCodeAt(0),R="(".charCodeAt(0),P=")".charCodeAt(0),I="{".charCodeAt(0),N="}".charCodeAt(0),F=";".charCodeAt(0),j="*".charCodeAt(0),U=":".charCodeAt(0),D="@".charCodeAt(0),B=/[\t\n\f\r "#'()/;[\\\]{}]/g,T=/[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g,$=/.[\n"'(/\\]/,G=/[\da-f]/i;var z=function(e,t={}){let r,n,s,i,o,a,l,u,c,h,p=e.css.valueOf(),f=t.ignoreErrors,d=p.length,g=0,m=[],w=[];function y(t){throw e.error("Unclosed "+t,g)}return{back:function(e){w.push(e)},nextToken:function(e){if(w.length)return w.pop();if(g>=d)return;let t=!!e&&e.ignoreUnclosed;switch(r=p.charCodeAt(g),r){case x:case O:case M:case k:case A:n=g;do{n+=1,r=p.charCodeAt(n)}while(r===O||r===x||r===M||r===k||r===A);h=["space",p.slice(g,n)],g=n-1;break;case E:case L:case I:case N:case U:case F:case P:{let e=String.fromCharCode(r);h=[e,e,g];break}case R:if(u=m.length?m.pop()[1]:"",c=p.charCodeAt(g+1),"url"===u&&c!==b&&c!==S&&c!==O&&c!==x&&c!==M&&c!==A&&c!==k){n=g;do{if(a=!1,n=p.indexOf(")",n+1),-1===n){if(f||t){n=g;break}y("bracket")}for(l=n;p.charCodeAt(l-1)===C;)l-=1,a=!a}while(a);h=["brackets",p.slice(g,n+1),g,n],g=n}else n=p.indexOf(")",g+1),i=p.slice(g,n+1),-1===n||$.test(i)?h=["(","(",g]:(h=["brackets",i,g,n],g=n);break;case b:case S:s=r===b?"'":'"',n=g;do{if(a=!1,n=p.indexOf(s,n+1),-1===n){if(f||t){n=g+1;break}y("string")}for(l=n;p.charCodeAt(l-1)===C;)l-=1,a=!a}while(a);h=["string",p.slice(g,n+1),g,n],g=n;break;case D:B.lastIndex=g+1,B.test(p),n=0===B.lastIndex?p.length-1:B.lastIndex-2,h=["at-word",p.slice(g,n+1),g,n],g=n;break;case C:for(n=g,o=!0;p.charCodeAt(n+1)===C;)n+=1,o=!o;if(r=p.charCodeAt(n+1),o&&r!==_&&r!==O&&r!==x&&r!==M&&r!==k&&r!==A&&(n+=1,G.test(p.charAt(n)))){for(;G.test(p.charAt(n+1));)n+=1;p.charCodeAt(n+1)===O&&(n+=1)}h=["word",p.slice(g,n+1),g,n],g=n;break;default:r===_&&p.charCodeAt(g+1)===j?(n=p.indexOf("*/",g+2)+1,0===n&&(f||t?n=p.length:y("comment")),h=["comment",p.slice(g,n+1),g,n],g=n):(T.lastIndex=g+1,T.test(p),n=0===T.lastIndex?p.length-1:T.lastIndex-2,h=["word",p.slice(g,n+1),g,n],m.push(h),g=n)}return g++,h},endOfFile:function(){return 0===w.length&&g>=d},position:function(){return g}}};let W,V=d.exports,J=z;const q={brackets:V.cyan,"at-word":V.cyan,comment:V.gray,string:V.green,class:V.yellow,hash:V.magenta,call:V.cyan,"(":V.cyan,")":V.cyan,"{":V.yellow,"}":V.yellow,"[":V.yellow,"]":V.yellow,":":V.yellow,";":V.yellow};function Y([e,t],r){if("word"===e){if("."===t[0])return"class";if("#"===t[0])return"hash"}if(!r.endOfFile()){let e=r.nextToken();if(r.back(e),"brackets"===e[0]||"("===e[0])return"call"}return e}function Q(e){let t=J(new W(e),{ignoreErrors:!0}),r="";for(;!t.endOfFile();){let e=t.nextToken(),n=q[Y(e,t)];r+=n?e[1].split(/\r?\n/).map((e=>n(e))).join("\n"):e[1]}return r}Q.registerInput=function(e){W=e};var Z=Q;let H=d.exports,K=Z;class X extends Error{constructor(e,t,r,n,s,i){super(e),this.name="CssSyntaxError",this.reason=e,s&&(this.file=s),n&&(this.source=n),i&&(this.plugin=i),void 0!==t&&void 0!==r&&("number"==typeof t?(this.line=t,this.column=r):(this.line=t.line,this.column=t.column,this.endLine=r.line,this.endColumn=r.column)),this.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(this,X)}setMessage(){this.message=this.plugin?this.plugin+": ":"",this.message+=this.file?this.file:"<css input>",void 0!==this.line&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason}showSourceCode(e){if(!this.source)return"";let t=this.source;null==e&&(e=H.isColorSupported),K&&e&&(t=K(t));let r,n,s=t.split(/\r?\n/),i=Math.max(this.line-3,0),o=Math.min(this.line+2,s.length),a=String(o).length;if(e){let{bold:e,red:t,gray:s}=H.createColors(!0);r=r=>e(t(r)),n=e=>s(e)}else r=n=e=>e;return s.slice(i,o).map(((e,t)=>{let s=i+1+t,o=" "+(" "+s).slice(-a)+" | ";if(s===this.line){let t=n(o.replace(/\d/g," "))+e.slice(0,this.column-1).replace(/[^\t]/g," ");return r(">")+n(o)+e+"\n "+t+r("^")}return" "+n(o)+e})).join("\n")}toString(){let e=this.showSourceCode();return e&&(e="\n\n"+e+"\n"),this.name+": "+this.message+e}}var ee=X;X.default=X;var te={};te.isClean=Symbol("isClean"),te.my=Symbol("my");const re={colon:": ",indent:" ",beforeDecl:"\n",beforeRule:"\n",beforeOpen:" ",beforeClose:"\n",beforeComment:"\n",after:"\n",emptyBody:"",commentLeft:" ",commentRight:" ",semicolon:!1};class ne{constructor(e){this.builder=e}stringify(e,t){if(!this[e.type])throw new Error("Unknown AST node type "+e.type+". Maybe you need to change PostCSS stringifier.");this[e.type](e,t)}document(e){this.body(e)}root(e){this.body(e),e.raws.after&&this.builder(e.raws.after)}comment(e){let t=this.raw(e,"left","commentLeft"),r=this.raw(e,"right","commentRight");this.builder("/*"+t+e.text+r+"*/",e)}decl(e,t){let r=this.raw(e,"between","colon"),n=e.prop+r+this.rawValue(e,"value");e.important&&(n+=e.raws.important||" !important"),t&&(n+=";"),this.builder(n,e)}rule(e){this.block(e,this.rawValue(e,"selector")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,"end")}atrule(e,t){let r="@"+e.name,n=e.params?this.rawValue(e,"params"):"";if(void 0!==e.raws.afterName?r+=e.raws.afterName:n&&(r+=" "),e.nodes)this.block(e,r+n);else{let s=(e.raws.between||"")+(t?";":"");this.builder(r+n+s,e)}}body(e){let t=e.nodes.length-1;for(;t>0&&"comment"===e.nodes[t].type;)t-=1;let r=this.raw(e,"semicolon");for(let n=0;n<e.nodes.length;n++){let s=e.nodes[n],i=this.raw(s,"before");i&&this.builder(i),this.stringify(s,t!==n||r)}}block(e,t){let r,n=this.raw(e,"between","beforeOpen");this.builder(t+n+"{",e,"start"),e.nodes&&e.nodes.length?(this.body(e),r=this.raw(e,"after")):r=this.raw(e,"after","emptyBody"),r&&this.builder(r),this.builder("}",e,"end")}raw(e,t,r){let n;if(r||(r=t),t&&(n=e.raws[t],void 0!==n))return n;let s=e.parent;if("before"===r){if(!s||"root"===s.type&&s.first===e)return"";if(s&&"document"===s.type)return""}if(!s)return re[r];let i=e.root();if(i.rawCache||(i.rawCache={}),void 0!==i.rawCache[r])return i.rawCache[r];if("before"===r||"after"===r)return this.beforeAfter(e,r);{let s="raw"+((o=r)[0].toUpperCase()+o.slice(1));this[s]?n=this[s](i,e):i.walk((e=>{if(n=e.raws[t],void 0!==n)return!1}))}var o;return void 0===n&&(n=re[r]),i.rawCache[r]=n,n}rawSemicolon(e){let t;return e.walk((e=>{if(e.nodes&&e.nodes.length&&"decl"===e.last.type&&(t=e.raws.semicolon,void 0!==t))return!1})),t}rawEmptyBody(e){let t;return e.walk((e=>{if(e.nodes&&0===e.nodes.length&&(t=e.raws.after,void 0!==t))return!1})),t}rawIndent(e){if(e.raws.indent)return e.raws.indent;let t;return e.walk((r=>{let n=r.parent;if(n&&n!==e&&n.parent&&n.parent===e&&void 0!==r.raws.before){let e=r.raws.before.split("\n");return t=e[e.length-1],t=t.replace(/\S/g,""),!1}})),t}rawBeforeComment(e,t){let r;return e.walkComments((e=>{if(void 0!==e.raws.before)return r=e.raws.before,r.includes("\n")&&(r=r.replace(/[^\n]+$/,"")),!1})),void 0===r?r=this.raw(t,null,"beforeDecl"):r&&(r=r.replace(/\S/g,"")),r}rawBeforeDecl(e,t){let r;return e.walkDecls((e=>{if(void 0!==e.raws.before)return r=e.raws.before,r.includes("\n")&&(r=r.replace(/[^\n]+$/,"")),!1})),void 0===r?r=this.raw(t,null,"beforeRule"):r&&(r=r.replace(/\S/g,"")),r}rawBeforeRule(e){let t;return e.walk((r=>{if(r.nodes&&(r.parent!==e||e.first!==r)&&void 0!==r.raws.before)return t=r.raws.before,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1})),t&&(t=t.replace(/\S/g,"")),t}rawBeforeClose(e){let t;return e.walk((e=>{if(e.nodes&&e.nodes.length>0&&void 0!==e.raws.after)return t=e.raws.after,t.includes("\n")&&(t=t.replace(/[^\n]+$/,"")),!1})),t&&(t=t.replace(/\S/g,"")),t}rawBeforeOpen(e){let t;return e.walk((e=>{if("decl"!==e.type&&(t=e.raws.between,void 0!==t))return!1})),t}rawColon(e){let t;return e.walkDecls((e=>{if(void 0!==e.raws.between)return t=e.raws.between.replace(/[^\s:]/g,""),!1})),t}beforeAfter(e,t){let r;r="decl"===e.type?this.raw(e,null,"beforeDecl"):"comment"===e.type?this.raw(e,null,"beforeComment"):"before"===t?this.raw(e,null,"beforeRule"):this.raw(e,null,"beforeClose");let n=e.parent,s=0;for(;n&&"root"!==n.type;)s+=1,n=n.parent;if(r.includes("\n")){let t=this.raw(e,null,"indent");if(t.length)for(let e=0;e<s;e++)r+=t}return r}rawValue(e,t){let r=e[t],n=e.raws[t];return n&&n.value===r?n.raw:r}}var se=ne;ne.default=ne;let ie=se;function oe(e,t){new ie(t).stringify(e)}var ae=oe;oe.default=oe;let{isClean:le,my:ue}=te,ce=ee,he=se,pe=ae;function fe(e,t){let r=new e.constructor;for(let n in e){if(!Object.prototype.hasOwnProperty.call(e,n))continue;if("proxyCache"===n)continue;let s=e[n],i=typeof s;"parent"===n&&"object"===i?t&&(r[n]=t):"source"===n?r[n]=s:Array.isArray(s)?r[n]=s.map((e=>fe(e,r))):("object"===i&&null!==s&&(s=fe(s)),r[n]=s)}return r}class de{constructor(e={}){this.raws={},this[le]=!1,this[ue]=!0;for(let t in e)if("nodes"===t){this.nodes=[];for(let r of e[t])"function"==typeof r.clone?this.append(r.clone()):this.append(r)}else this[t]=e[t]}error(e,t={}){if(this.source){let{start:r,end:n}=this.rangeBy(t);return this.source.input.error(e,{line:r.line,column:r.column},{line:n.line,column:n.column},t)}return new ce(e)}warn(e,t,r){let n={node:this};for(let e in r)n[e]=r[e];return e.warn(t,n)}remove(){return this.parent&&this.parent.removeChild(this),this.parent=void 0,this}toString(e=pe){e.stringify&&(e=e.stringify);let t="";return e(this,(e=>{t+=e})),t}assign(e={}){for(let t in e)this[t]=e[t];return this}clone(e={}){let t=fe(this);for(let r in e)t[r]=e[r];return t}cloneBefore(e={}){let t=this.clone(e);return this.parent.insertBefore(this,t),t}cloneAfter(e={}){let t=this.clone(e);return this.parent.insertAfter(this,t),t}replaceWith(...e){if(this.parent){let t=this,r=!1;for(let n of e)n===this?r=!0:r?(this.parent.insertAfter(t,n),t=n):this.parent.insertBefore(t,n);r||this.remove()}return this}next(){if(!this.parent)return;let e=this.parent.index(this);return this.parent.nodes[e+1]}prev(){if(!this.parent)return;let e=this.parent.index(this);return this.parent.nodes[e-1]}before(e){return this.parent.insertBefore(this,e),this}after(e){return this.parent.insertAfter(this,e),this}root(){let e=this;for(;e.parent&&"document"!==e.parent.type;)e=e.parent;return e}raw(e,t){return(new he).raw(this,e,t)}cleanRaws(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between}toJSON(e,t){let r={},n=null==t;t=t||new Map;let s=0;for(let e in this){if(!Object.prototype.hasOwnProperty.call(this,e))continue;if("parent"===e||"proxyCache"===e)continue;let n=this[e];if(Array.isArray(n))r[e]=n.map((e=>"object"==typeof e&&e.toJSON?e.toJSON(null,t):e));else if("object"==typeof n&&n.toJSON)r[e]=n.toJSON(null,t);else if("source"===e){let i=t.get(n.input);null==i&&(i=s,t.set(n.input,s),s++),r[e]={inputId:i,start:n.start,end:n.end}}else r[e]=n}return n&&(r.inputs=[...t.keys()].map((e=>e.toJSON()))),r}positionInside(e){let t=this.toString(),r=this.source.start.column,n=this.source.start.line;for(let s=0;s<e;s++)"\n"===t[s]?(r=1,n+=1):r+=1;return{line:n,column:r}}positionBy(e){let t=this.source.start;if(e.index)t=this.positionInside(e.index);else if(e.word){let r=this.toString().indexOf(e.word);-1!==r&&(t=this.positionInside(r))}return t}rangeBy(e){let t={line:this.source.start.line,column:this.source.start.column},r=this.source.end?{line:this.source.end.line,column:this.source.end.column+1}:{line:t.line,column:t.column+1};if(e.word){let n=this.toString().indexOf(e.word);-1!==n&&(t=this.positionInside(n),r=this.positionInside(n+e.word.length))}else e.start?t={line:e.start.line,column:e.start.column}:e.index&&(t=this.positionInside(e.index)),e.end?r={line:e.end.line,column:e.end.column}:e.endIndex?r=this.positionInside(e.endIndex):e.index&&(r=this.positionInside(e.index+1));return(r.line<t.line||r.line===t.line&&r.column<=t.column)&&(r={line:t.line,column:t.column+1}),{start:t,end:r}}getProxyProcessor(){return{set:(e,t,r)=>(e[t]===r||(e[t]=r,"prop"!==t&&"value"!==t&&"name"!==t&&"params"!==t&&"important"!==t&&"text"!==t||e.markDirty()),!0),get:(e,t)=>"proxyOf"===t?e:"root"===t?()=>e.root().toProxy():e[t]}}toProxy(){return this.proxyCache||(this.proxyCache=new Proxy(this,this.getProxyProcessor())),this.proxyCache}addToError(e){if(e.postcssNode=this,e.stack&&this.source&&/\n\s{4}at /.test(e.stack)){let t=this.source;e.stack=e.stack.replace(/\n\s{4}at /,`$&${t.input.from}:${t.start.line}:${t.start.column}$&`)}return e}markDirty(){if(this[le]){this[le]=!1;let e=this;for(;e=e.parent;)e[le]=!1}}get proxyOf(){return this}}var ge=de;de.default=de;let me=ge;class we extends me{constructor(e){e&&void 0!==e.value&&"string"!=typeof e.value&&(e={...e,value:String(e.value)}),super(e),this.type="decl"}get variable(){return this.prop.startsWith("--")||"$"===this.prop[0]}}var ye=we;we.default=we;var ve={},be={},Se={},Ce={},_e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");Ce.encode=function(e){if(0<=e&&e<_e.length)return _e[e];throw new TypeError("Must be between 0 and 63: "+e)},Ce.decode=function(e){return 65<=e&&e<=90?e-65:97<=e&&e<=122?e-97+26:48<=e&&e<=57?e-48+52:43==e?62:47==e?63:-1};var xe=Ce;Se.encode=function(e){var t,r="",n=function(e){return e<0?1+(-e<<1):0+(e<<1)}(e);do{t=31&n,(n>>>=5)>0&&(t|=32),r+=xe.encode(t)}while(n>0);return r},Se.decode=function(e,t,r){var n,s,i,o,a=e.length,l=0,u=0;do{if(t>=a)throw new Error("Expected more digits in base 64 VLQ value.");if(-1===(s=xe.decode(e.charCodeAt(t++))))throw new Error("Invalid base64 digit: "+e.charAt(t-1));n=!!(32&s),l+=(s&=31)<<u,u+=5}while(n);r.value=(o=(i=l)>>1,1==(1&i)?-o:o),r.rest=t};var Oe={};!function(e){e.getArg=function(e,t,r){if(t in e)return e[t];if(3===arguments.length)return r;throw new Error('"'+t+'" is a required argument.')};var t=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/,r=/^data:.+\,.+$/;function n(e){var r=e.match(t);return r?{scheme:r[1],auth:r[2],host:r[3],port:r[4],path:r[5]}:null}function s(e){var t="";return e.scheme&&(t+=e.scheme+":"),t+="//",e.auth&&(t+=e.auth+"@"),e.host&&(t+=e.host),e.port&&(t+=":"+e.port),e.path&&(t+=e.path),t}e.urlParse=n,e.urlGenerate=s;var i,o,a=(i=function(t){var r=t,i=n(t);if(i){if(!i.path)return t;r=i.path}for(var o=e.isAbsolute(r),a=[],l=0,u=0;;){if(l=u,-1===(u=r.indexOf("/",l))){a.push(r.slice(l));break}for(a.push(r.slice(l,u));u<r.length&&"/"===r[u];)u++}var c,h=0;for(u=a.length-1;u>=0;u--)"."===(c=a[u])?a.splice(u,1):".."===c?h++:h>0&&(""===c?(a.splice(u+1,h),h=0):(a.splice(u,2),h--));return""===(r=a.join("/"))&&(r=o?"/":"."),i?(i.path=r,s(i)):r},o=[],function(e){for(var t=0;t<o.length;t++)if(o[t].input===e){var r=o[0];return o[0]=o[t],o[t]=r,o[0].result}var n=i(e);return o.unshift({input:e,result:n}),o.length>32&&o.pop(),n});function l(e,t){""===e&&(e="."),""===t&&(t=".");var i=n(t),o=n(e);if(o&&(e=o.path||"/"),i&&!i.scheme)return o&&(i.scheme=o.scheme),s(i);if(i||t.match(r))return t;if(o&&!o.host&&!o.path)return o.host=t,s(o);var l="/"===t.charAt(0)?t:a(e.replace(/\/+$/,"")+"/"+t);return o?(o.path=l,s(o)):l}e.normalize=a,e.join=l,e.isAbsolute=function(e){return"/"===e.charAt(0)||t.test(e)},e.relative=function(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==t.indexOf(e+"/");){var n=e.lastIndexOf("/");if(n<0)return t;if((e=e.slice(0,n)).match(/^([^\/]+:\/)?\/*$/))return t;++r}return Array(r+1).join("../")+t.substr(e.length+1)};var u=!("__proto__"in Object.create(null));function c(e){return e}function h(e){if(!e)return!1;var t=e.length;if(t<9)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var r=t-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,t){return e===t?0:null===e?1:null===t?-1:e>t?1:-1}e.toSetString=u?c:function(e){return h(e)?"$"+e:e},e.fromSetString=u?c:function(e){return h(e)?e.slice(1):e},e.compareByOriginalPositions=function(e,t,r){var n=p(e.source,t.source);return 0!==n||0!==(n=e.originalLine-t.originalLine)||0!==(n=e.originalColumn-t.originalColumn)||r||0!==(n=e.generatedColumn-t.generatedColumn)||0!==(n=e.generatedLine-t.generatedLine)?n:p(e.name,t.name)},e.compareByOriginalPositionsNoSource=function(e,t,r){var n;return 0!==(n=e.originalLine-t.originalLine)||0!==(n=e.originalColumn-t.originalColumn)||r||0!==(n=e.generatedColumn-t.generatedColumn)||0!==(n=e.generatedLine-t.generatedLine)?n:p(e.name,t.name)},e.compareByGeneratedPositionsDeflated=function(e,t,r){var n=e.generatedLine-t.generatedLine;return 0!==n||0!==(n=e.generatedColumn-t.generatedColumn)||r||0!==(n=p(e.source,t.source))||0!==(n=e.originalLine-t.originalLine)||0!==(n=e.originalColumn-t.originalColumn)?n:p(e.name,t.name)},e.compareByGeneratedPositionsDeflatedNoLine=function(e,t,r){var n=e.generatedColumn-t.generatedColumn;return 0!==n||r||0!==(n=p(e.source,t.source))||0!==(n=e.originalLine-t.originalLine)||0!==(n=e.originalColumn-t.originalColumn)?n:p(e.name,t.name)},e.compareByGeneratedPositionsInflated=function(e,t){var r=e.generatedLine-t.generatedLine;return 0!==r||0!==(r=e.generatedColumn-t.generatedColumn)||0!==(r=p(e.source,t.source))||0!==(r=e.originalLine-t.originalLine)||0!==(r=e.originalColumn-t.originalColumn)?r:p(e.name,t.name)},e.parseSourceMapInput=function(e){return JSON.parse(e.replace(/^\)]}'[^\n]*\n/,""))},e.computeSourceURL=function(e,t,r){if(t=t||"",e&&("/"!==e[e.length-1]&&"/"!==t[0]&&(e+="/"),t=e+t),r){var i=n(r);if(!i)throw new Error("sourceMapURL could not be parsed");if(i.path){var o=i.path.lastIndexOf("/");o>=0&&(i.path=i.path.substring(0,o+1))}t=l(s(i),t)}return a(t)}}(Oe);var Ae={},Me=Oe,ke=Object.prototype.hasOwnProperty,Ee="undefined"!=typeof Map;function Le(){this._array=[],this._set=Ee?new Map:Object.create(null)}Le.fromArray=function(e,t){for(var r=new Le,n=0,s=e.length;n<s;n++)r.add(e[n],t);return r},Le.prototype.size=function(){return Ee?this._set.size:Object.getOwnPropertyNames(this._set).length},Le.prototype.add=function(e,t){var r=Ee?e:Me.toSetString(e),n=Ee?this.has(e):ke.call(this._set,r),s=this._array.length;n&&!t||this._array.push(e),n||(Ee?this._set.set(e,s):this._set[r]=s)},Le.prototype.has=function(e){if(Ee)return this._set.has(e);var t=Me.toSetString(e);return ke.call(this._set,t)},Le.prototype.indexOf=function(e){if(Ee){var t=this._set.get(e);if(t>=0)return t}else{var r=Me.toSetString(e);if(ke.call(this._set,r))return this._set[r]}throw new Error('"'+e+'" is not in the set.')},Le.prototype.at=function(e){if(e>=0&&e<this._array.length)return this._array[e];throw new Error("No element indexed by "+e)},Le.prototype.toArray=function(){return this._array.slice()},Ae.ArraySet=Le;var Re={},Pe=Oe;function Ie(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}Ie.prototype.unsortedForEach=function(e,t){this._array.forEach(e,t)},Ie.prototype.add=function(e){var t,r,n,s,i,o;t=this._last,r=e,n=t.generatedLine,s=r.generatedLine,i=t.generatedColumn,o=r.generatedColumn,s>n||s==n&&o>=i||Pe.compareByGeneratedPositionsInflated(t,r)<=0?(this._last=e,this._array.push(e)):(this._sorted=!1,this._array.push(e))},Ie.prototype.toArray=function(){return this._sorted||(this._array.sort(Pe.compareByGeneratedPositionsInflated),this._sorted=!0),this._array},Re.MappingList=Ie;var Ne=Se,Fe=Oe,je=Ae.ArraySet,Ue=Re.MappingList;function De(e){e||(e={}),this._file=Fe.getArg(e,"file",null),this._sourceRoot=Fe.getArg(e,"sourceRoot",null),this._skipValidation=Fe.getArg(e,"skipValidation",!1),this._sources=new je,this._names=new je,this._mappings=new Ue,this._sourcesContents=null}De.prototype._version=3,De.fromSourceMap=function(e){var t=e.sourceRoot,r=new De({file:e.file,sourceRoot:t});return e.eachMapping((function(e){var n={generated:{line:e.generatedLine,column:e.generatedColumn}};null!=e.source&&(n.source=e.source,null!=t&&(n.source=Fe.relative(t,n.source)),n.original={line:e.originalLine,column:e.originalColumn},null!=e.name&&(n.name=e.name)),r.addMapping(n)})),e.sources.forEach((function(n){var s=n;null!==t&&(s=Fe.relative(t,n)),r._sources.has(s)||r._sources.add(s);var i=e.sourceContentFor(n);null!=i&&r.setSourceContent(n,i)})),r},De.prototype.addMapping=function(e){var t=Fe.getArg(e,"generated"),r=Fe.getArg(e,"original",null),n=Fe.getArg(e,"source",null),s=Fe.getArg(e,"name",null);this._skipValidation||this._validateMapping(t,r,n,s),null!=n&&(n=String(n),this._sources.has(n)||this._sources.add(n)),null!=s&&(s=String(s),this._names.has(s)||this._names.add(s)),this._mappings.add({generatedLine:t.line,generatedColumn:t.column,originalLine:null!=r&&r.line,originalColumn:null!=r&&r.column,source:n,name:s})},De.prototype.setSourceContent=function(e,t){var r=e;null!=this._sourceRoot&&(r=Fe.relative(this._sourceRoot,r)),null!=t?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[Fe.toSetString(r)]=t):this._sourcesContents&&(delete this._sourcesContents[Fe.toSetString(r)],0===Object.keys(this._sourcesContents).length&&(this._sourcesContents=null))},De.prototype.applySourceMap=function(e,t,r){var n=t;if(null==t){if(null==e.file)throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map\'s "file" property. Both were omitted.');n=e.file}var s=this._sourceRoot;null!=s&&(n=Fe.relative(s,n));var i=new je,o=new je;this._mappings.unsortedForEach((function(t){if(t.source===n&&null!=t.originalLine){var a=e.originalPositionFor({line:t.originalLine,column:t.originalColumn});null!=a.source&&(t.source=a.source,null!=r&&(t.source=Fe.join(r,t.source)),null!=s&&(t.source=Fe.relative(s,t.source)),t.originalLine=a.line,t.originalColumn=a.column,null!=a.name&&(t.name=a.name))}var l=t.source;null==l||i.has(l)||i.add(l);var u=t.name;null==u||o.has(u)||o.add(u)}),this),this._sources=i,this._names=o,e.sources.forEach((function(t){var n=e.sourceContentFor(t);null!=n&&(null!=r&&(t=Fe.join(r,t)),null!=s&&(t=Fe.relative(s,t)),this.setSourceContent(t,n))}),this)},De.prototype._validateMapping=function(e,t,r,n){if(t&&"number"!=typeof t.line&&"number"!=typeof t.column)throw new Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.");if((!(e&&"line"in e&&"column"in e&&e.line>0&&e.column>=0)||t||r||n)&&!(e&&"line"in e&&"column"in e&&t&&"line"in t&&"column"in t&&e.line>0&&e.column>=0&&t.line>0&&t.column>=0&&r))throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:r,original:t,name:n}))},De.prototype._serializeMappings=function(){for(var e,t,r,n,s=0,i=1,o=0,a=0,l=0,u=0,c="",h=this._mappings.toArray(),p=0,f=h.length;p<f;p++){if(e="",(t=h[p]).generatedLine!==i)for(s=0;t.generatedLine!==i;)e+=";",i++;else if(p>0){if(!Fe.compareByGeneratedPositionsInflated(t,h[p-1]))continue;e+=","}e+=Ne.encode(t.generatedColumn-s),s=t.generatedColumn,null!=t.source&&(n=this._sources.indexOf(t.source),e+=Ne.encode(n-u),u=n,e+=Ne.encode(t.originalLine-1-a),a=t.originalLine-1,e+=Ne.encode(t.originalColumn-o),o=t.originalColumn,null!=t.name&&(r=this._names.indexOf(t.name),e+=Ne.encode(r-l),l=r)),c+=e}return c},De.prototype._generateSourcesContent=function(e,t){return e.map((function(e){if(!this._sourcesContents)return null;null!=t&&(e=Fe.relative(t,e));var r=Fe.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,r)?this._sourcesContents[r]:null}),this)},De.prototype.toJSON=function(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return null!=this._file&&(e.file=this._file),null!=this._sourceRoot&&(e.sourceRoot=this._sourceRoot),this._sourcesContents&&(e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)),e},De.prototype.toString=function(){return JSON.stringify(this.toJSON())},be.SourceMapGenerator=De;var Be={},Te={};!function(e){function t(r,n,s,i,o,a){var l=Math.floor((n-r)/2)+r,u=o(s,i[l],!0);return 0===u?l:u>0?n-l>1?t(l,n,s,i,o,a):a==e.LEAST_UPPER_BOUND?n<i.length?n:-1:l:l-r>1?t(r,l,s,i,o,a):a==e.LEAST_UPPER_BOUND?l:r<0?-1:r}e.GREATEST_LOWER_BOUND=1,e.LEAST_UPPER_BOUND=2,e.search=function(r,n,s,i){if(0===n.length)return-1;var o=t(-1,n.length,r,n,s,i||e.GREATEST_LOWER_BOUND);if(o<0)return-1;for(;o-1>=0&&0===s(n[o],n[o-1],!0);)--o;return o}}(Te);var $e={};function Ge(e){function t(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}return function e(r,n,s,i){if(s<i){var o=s-1;t(r,(c=s,h=i,Math.round(c+Math.random()*(h-c))),i);for(var a=r[i],l=s;l<i;l++)n(r[l],a,!1)<=0&&t(r,o+=1,l);t(r,o+1,l);var u=o+1;e(r,n,s,u-1),e(r,n,u+1,i)}var c,h}}let ze=new WeakMap;$e.quickSort=function(e,t,r=0){let n=ze.get(t);void 0===n&&(n=function(e){let t=Ge.toString();return new Function(`return ${t}`)()(e)}(t),ze.set(t,n)),n(e,t,r,e.length-1)};var We=Oe,Ve=Te,Je=Ae.ArraySet,qe=Se,Ye=$e.quickSort;function Qe(e,t){var r=e;return"string"==typeof e&&(r=We.parseSourceMapInput(e)),null!=r.sections?new et(r,t):new Ze(r,t)}function Ze(e,t){var r=e;"string"==typeof e&&(r=We.parseSourceMapInput(e));var n=We.getArg(r,"version"),s=We.getArg(r,"sources"),i=We.getArg(r,"names",[]),o=We.getArg(r,"sourceRoot",null),a=We.getArg(r,"sourcesContent",null),l=We.getArg(r,"mappings"),u=We.getArg(r,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);o&&(o=We.normalize(o)),s=s.map(String).map(We.normalize).map((function(e){return o&&We.isAbsolute(o)&&We.isAbsolute(e)?We.relative(o,e):e})),this._names=Je.fromArray(i.map(String),!0),this._sources=Je.fromArray(s,!0),this._absoluteSources=this._sources.toArray().map((function(e){return We.computeSourceURL(o,e,t)})),this.sourceRoot=o,this.sourcesContent=a,this._mappings=l,this._sourceMapURL=t,this.file=u}function He(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}Qe.fromSourceMap=function(e,t){return Ze.fromSourceMap(e,t)},Qe.prototype._version=3,Qe.prototype.__generatedMappings=null,Object.defineProperty(Qe.prototype,"_generatedMappings",{configurable:!0,enumerable:!0,get:function(){return this.__generatedMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__generatedMappings}}),Qe.prototype.__originalMappings=null,Object.defineProperty(Qe.prototype,"_originalMappings",{configurable:!0,enumerable:!0,get:function(){return this.__originalMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__originalMappings}}),Qe.prototype._charIsMappingSeparator=function(e,t){var r=e.charAt(t);return";"===r||","===r},Qe.prototype._parseMappings=function(e,t){throw new Error("Subclasses must implement _parseMappings")},Qe.GENERATED_ORDER=1,Qe.ORIGINAL_ORDER=2,Qe.GREATEST_LOWER_BOUND=1,Qe.LEAST_UPPER_BOUND=2,Qe.prototype.eachMapping=function(e,t,r){var n,s=t||null;switch(r||Qe.GENERATED_ORDER){case Qe.GENERATED_ORDER:n=this._generatedMappings;break;case Qe.ORIGINAL_ORDER:n=this._originalMappings;break;default:throw new Error("Unknown order of iteration.")}for(var i=this.sourceRoot,o=e.bind(s),a=this._names,l=this._sources,u=this._sourceMapURL,c=0,h=n.length;c<h;c++){var p=n[c],f=null===p.source?null:l.at(p.source);o({source:f=We.computeSourceURL(i,f,u),generatedLine:p.generatedLine,generatedColumn:p.generatedColumn,originalLine:p.originalLine,originalColumn:p.originalColumn,name:null===p.name?null:a.at(p.name)})}},Qe.prototype.allGeneratedPositionsFor=function(e){var t=We.getArg(e,"line"),r={source:We.getArg(e,"source"),originalLine:t,originalColumn:We.getArg(e,"column",0)};if(r.source=this._findSourceIndex(r.source),r.source<0)return[];var n=[],s=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",We.compareByOriginalPositions,Ve.LEAST_UPPER_BOUND);if(s>=0){var i=this._originalMappings[s];if(void 0===e.column)for(var o=i.originalLine;i&&i.originalLine===o;)n.push({line:We.getArg(i,"generatedLine",null),column:We.getArg(i,"generatedColumn",null),lastColumn:We.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++s];else for(var a=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==a;)n.push({line:We.getArg(i,"generatedLine",null),column:We.getArg(i,"generatedColumn",null),lastColumn:We.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++s]}return n},Be.SourceMapConsumer=Qe,Ze.prototype=Object.create(Qe.prototype),Ze.prototype.consumer=Qe,Ze.prototype._findSourceIndex=function(e){var t,r=e;if(null!=this.sourceRoot&&(r=We.relative(this.sourceRoot,r)),this._sources.has(r))return this._sources.indexOf(r);for(t=0;t<this._absoluteSources.length;++t)if(this._absoluteSources[t]==e)return t;return-1},Ze.fromSourceMap=function(e,t){var r=Object.create(Ze.prototype),n=r._names=Je.fromArray(e._names.toArray(),!0),s=r._sources=Je.fromArray(e._sources.toArray(),!0);r.sourceRoot=e._sourceRoot,r.sourcesContent=e._generateSourcesContent(r._sources.toArray(),r.sourceRoot),r.file=e._file,r._sourceMapURL=t,r._absoluteSources=r._sources.toArray().map((function(e){return We.computeSourceURL(r.sourceRoot,e,t)}));for(var i=e._mappings.toArray().slice(),o=r.__generatedMappings=[],a=r.__originalMappings=[],l=0,u=i.length;l<u;l++){var c=i[l],h=new He;h.generatedLine=c.generatedLine,h.generatedColumn=c.generatedColumn,c.source&&(h.source=s.indexOf(c.source),h.originalLine=c.originalLine,h.originalColumn=c.originalColumn,c.name&&(h.name=n.indexOf(c.name)),a.push(h)),o.push(h)}return Ye(r.__originalMappings,We.compareByOriginalPositions),r},Ze.prototype._version=3,Object.defineProperty(Ze.prototype,"sources",{get:function(){return this._absoluteSources.slice()}});const Ke=We.compareByGeneratedPositionsDeflatedNoLine;function Xe(e,t){let r=e.length,n=e.length-t;if(!(n<=1))if(2==n){let r=e[t],n=e[t+1];Ke(r,n)>0&&(e[t]=n,e[t+1]=r)}else if(n<20)for(let n=t;n<r;n++)for(let r=n;r>t;r--){let t=e[r-1],n=e[r];if(Ke(t,n)<=0)break;e[r-1]=n,e[r]=t}else Ye(e,Ke,t)}function et(e,t){var r=e;"string"==typeof e&&(r=We.parseSourceMapInput(e));var n=We.getArg(r,"version"),s=We.getArg(r,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new Je,this._names=new Je;var i={line:-1,column:0};this._sections=s.map((function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var r=We.getArg(e,"offset"),n=We.getArg(r,"line"),s=We.getArg(r,"column");if(n<i.line||n===i.line&&s<i.column)throw new Error("Section offsets must be ordered and non-overlapping.");return i=r,{generatedOffset:{generatedLine:n+1,generatedColumn:s+1},consumer:new Qe(We.getArg(e,"map"),t)}}))}Ze.prototype._parseMappings=function(e,t){var r,n,s,i,o=1,a=0,l=0,u=0,c=0,h=0,p=e.length,f=0,d={},g=[],m=[];let w=0;for(;f<p;)if(";"===e.charAt(f))o++,f++,a=0,Xe(m,w),w=m.length;else if(","===e.charAt(f))f++;else{for((r=new He).generatedLine=o,s=f;s<p&&!this._charIsMappingSeparator(e,s);s++);for(e.slice(f,s),n=[];f<s;)qe.decode(e,f,d),i=d.value,f=d.rest,n.push(i);if(2===n.length)throw new Error("Found a source, but no line and column");if(3===n.length)throw new Error("Found a source and line, but no column");if(r.generatedColumn=a+n[0],a=r.generatedColumn,n.length>1&&(r.source=c+n[1],c+=n[1],r.originalLine=l+n[2],l=r.originalLine,r.originalLine+=1,r.originalColumn=u+n[3],u=r.originalColumn,n.length>4&&(r.name=h+n[4],h+=n[4])),m.push(r),"number"==typeof r.originalLine){let e=r.source;for(;g.length<=e;)g.push(null);null===g[e]&&(g[e]=[]),g[e].push(r)}}Xe(m,w),this.__generatedMappings=m;for(var y=0;y<g.length;y++)null!=g[y]&&Ye(g[y],We.compareByOriginalPositionsNoSource);this.__originalMappings=[].concat(...g)},Ze.prototype._findMapping=function(e,t,r,n,s,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[n]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[n]);return Ve.search(e,t,s,i)},Ze.prototype.computeColumnSpans=function(){for(var e=0;e<this._generatedMappings.length;++e){var t=this._generatedMappings[e];if(e+1<this._generatedMappings.length){var r=this._generatedMappings[e+1];if(t.generatedLine===r.generatedLine){t.lastGeneratedColumn=r.generatedColumn-1;continue}}t.lastGeneratedColumn=1/0}},Ze.prototype.originalPositionFor=function(e){var t={generatedLine:We.getArg(e,"line"),generatedColumn:We.getArg(e,"column")},r=this._findMapping(t,this._generatedMappings,"generatedLine","generatedColumn",We.compareByGeneratedPositionsDeflated,We.getArg(e,"bias",Qe.GREATEST_LOWER_BOUND));if(r>=0){var n=this._generatedMappings[r];if(n.generatedLine===t.generatedLine){var s=We.getArg(n,"source",null);null!==s&&(s=this._sources.at(s),s=We.computeSourceURL(this.sourceRoot,s,this._sourceMapURL));var i=We.getArg(n,"name",null);return null!==i&&(i=this._names.at(i)),{source:s,line:We.getArg(n,"originalLine",null),column:We.getArg(n,"originalColumn",null),name:i}}}return{source:null,line:null,column:null,name:null}},Ze.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some((function(e){return null==e})))},Ze.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;var r=this._findSourceIndex(e);if(r>=0)return this.sourcesContent[r];var n,s=e;if(null!=this.sourceRoot&&(s=We.relative(this.sourceRoot,s)),null!=this.sourceRoot&&(n=We.urlParse(this.sourceRoot))){var i=s.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(i))return this.sourcesContent[this._sources.indexOf(i)];if((!n.path||"/"==n.path)&&this._sources.has("/"+s))return this.sourcesContent[this._sources.indexOf("/"+s)]}if(t)return null;throw new Error('"'+s+'" is not in the SourceMap.')},Ze.prototype.generatedPositionFor=function(e){var t=We.getArg(e,"source");if((t=this._findSourceIndex(t))<0)return{line:null,column:null,lastColumn:null};var r={source:t,originalLine:We.getArg(e,"line"),originalColumn:We.getArg(e,"column")},n=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",We.compareByOriginalPositions,We.getArg(e,"bias",Qe.GREATEST_LOWER_BOUND));if(n>=0){var s=this._originalMappings[n];if(s.source===r.source)return{line:We.getArg(s,"generatedLine",null),column:We.getArg(s,"generatedColumn",null),lastColumn:We.getArg(s,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},Be.BasicSourceMapConsumer=Ze,et.prototype=Object.create(Qe.prototype),et.prototype.constructor=Qe,et.prototype._version=3,Object.defineProperty(et.prototype,"sources",{get:function(){for(var e=[],t=0;t<this._sections.length;t++)for(var r=0;r<this._sections[t].consumer.sources.length;r++)e.push(this._sections[t].consumer.sources[r]);return e}}),et.prototype.originalPositionFor=function(e){var t={generatedLine:We.getArg(e,"line"),generatedColumn:We.getArg(e,"column")},r=Ve.search(t,this._sections,(function(e,t){var r=e.generatedLine-t.generatedOffset.generatedLine;return r||e.generatedColumn-t.generatedOffset.generatedColumn})),n=this._sections[r];return n?n.consumer.originalPositionFor({line:t.generatedLine-(n.generatedOffset.generatedLine-1),column:t.generatedColumn-(n.generatedOffset.generatedLine===t.generatedLine?n.generatedOffset.generatedColumn-1:0),bias:e.bias}):{source:null,line:null,column:null,name:null}},et.prototype.hasContentsOfAllSources=function(){return this._sections.every((function(e){return e.consumer.hasContentsOfAllSources()}))},et.prototype.sourceContentFor=function(e,t){for(var r=0;r<this._sections.length;r++){var n=this._sections[r].consumer.sourceContentFor(e,!0);if(n)return n}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},et.prototype.generatedPositionFor=function(e){for(var t=0;t<this._sections.length;t++){var r=this._sections[t];if(-1!==r.consumer._findSourceIndex(We.getArg(e,"source"))){var n=r.consumer.generatedPositionFor(e);if(n)return{line:n.line+(r.generatedOffset.generatedLine-1),column:n.column+(r.generatedOffset.generatedLine===n.line?r.generatedOffset.generatedColumn-1:0)}}}return{line:null,column:null}},et.prototype._parseMappings=function(e,t){this.__generatedMappings=[],this.__originalMappings=[];for(var r=0;r<this._sections.length;r++)for(var n=this._sections[r],s=n.consumer._generatedMappings,i=0;i<s.length;i++){var o=s[i],a=n.consumer._sources.at(o.source);a=We.computeSourceURL(n.consumer.sourceRoot,a,this._sourceMapURL),this._sources.add(a),a=this._sources.indexOf(a);var l=null;o.name&&(l=n.consumer._names.at(o.name),this._names.add(l),l=this._names.indexOf(l));var u={source:a,generatedLine:o.generatedLine+(n.generatedOffset.generatedLine-1),generatedColumn:o.generatedColumn+(n.generatedOffset.generatedLine===o.generatedLine?n.generatedOffset.generatedColumn-1:0),originalLine:o.originalLine,originalColumn:o.originalColumn,name:l};this.__generatedMappings.push(u),"number"==typeof u.originalLine&&this.__originalMappings.push(u)}Ye(this.__generatedMappings,We.compareByGeneratedPositionsDeflated),Ye(this.__originalMappings,We.compareByOriginalPositions)},Be.IndexedSourceMapConsumer=et;var tt={},rt=be.SourceMapGenerator,nt=Oe,st=/(\r?\n)/,it="$$$isSourceNode$$$";function ot(e,t,r,n,s){this.children=[],this.sourceContents={},this.line=null==e?null:e,this.column=null==t?null:t,this.source=null==r?null:r,this.name=null==s?null:s,this[it]=!0,null!=n&&this.add(n)}ot.fromStringWithSourceMap=function(e,t,r){var n=new ot,s=e.split(st),i=0,o=function(){return e()+(e()||"");function e(){return i<s.length?s[i++]:void 0}},a=1,l=0,u=null;return t.eachMapping((function(e){if(null!==u){if(!(a<e.generatedLine)){var t=(r=s[i]||"").substr(0,e.generatedColumn-l);return s[i]=r.substr(e.generatedColumn-l),l=e.generatedColumn,c(u,t),void(u=e)}c(u,o()),a++,l=0}for(;a<e.generatedLine;)n.add(o()),a++;if(l<e.generatedColumn){var r=s[i]||"";n.add(r.substr(0,e.generatedColumn)),s[i]=r.substr(e.generatedColumn),l=e.generatedColumn}u=e}),this),i<s.length&&(u&&c(u,o()),n.add(s.splice(i).join(""))),t.sources.forEach((function(e){var s=t.sourceContentFor(e);null!=s&&(null!=r&&(e=nt.join(r,e)),n.setSourceContent(e,s))})),n;function c(e,t){if(null===e||void 0===e.source)n.add(t);else{var s=r?nt.join(r,e.source):e.source;n.add(new ot(e.originalLine,e.originalColumn,s,t,e.name))}}},ot.prototype.add=function(e){if(Array.isArray(e))e.forEach((function(e){this.add(e)}),this);else{if(!e[it]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);e&&this.children.push(e)}return this},ot.prototype.prepend=function(e){if(Array.isArray(e))for(var t=e.length-1;t>=0;t--)this.prepend(e[t]);else{if(!e[it]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);this.children.unshift(e)}return this},ot.prototype.walk=function(e){for(var t,r=0,n=this.children.length;r<n;r++)(t=this.children[r])[it]?t.walk(e):""!==t&&e(t,{source:this.source,line:this.line,column:this.column,name:this.name})},ot.prototype.join=function(e){var t,r,n=this.children.length;if(n>0){for(t=[],r=0;r<n-1;r++)t.push(this.children[r]),t.push(e);t.push(this.children[r]),this.children=t}return this},ot.prototype.replaceRight=function(e,t){var r=this.children[this.children.length-1];return r[it]?r.replaceRight(e,t):"string"==typeof r?this.children[this.children.length-1]=r.replace(e,t):this.children.push("".replace(e,t)),this},ot.prototype.setSourceContent=function(e,t){this.sourceContents[nt.toSetString(e)]=t},ot.prototype.walkSourceContents=function(e){for(var t=0,r=this.children.length;t<r;t++)this.children[t][it]&&this.children[t].walkSourceContents(e);var n=Object.keys(this.sourceContents);for(t=0,r=n.length;t<r;t++)e(nt.fromSetString(n[t]),this.sourceContents[n[t]])},ot.prototype.toString=function(){var e="";return this.walk((function(t){e+=t})),e},ot.prototype.toStringWithSourceMap=function(e){var t={code:"",line:1,column:0},r=new rt(e),n=!1,s=null,i=null,o=null,a=null;return this.walk((function(e,l){t.code+=e,null!==l.source&&null!==l.line&&null!==l.column?(s===l.source&&i===l.line&&o===l.column&&a===l.name||r.addMapping({source:l.source,original:{line:l.line,column:l.column},generated:{line:t.line,column:t.column},name:l.name}),s=l.source,i=l.line,o=l.column,a=l.name,n=!0):n&&(r.addMapping({generated:{line:t.line,column:t.column}}),s=null,n=!1);for(var u=0,c=e.length;u<c;u++)10===e.charCodeAt(u)?(t.line++,t.column=0,u+1===c?(s=null,n=!1):n&&r.addMapping({source:l.source,original:{line:l.line,column:l.column},generated:{line:t.line,column:t.column},name:l.name})):t.column++})),this.walkSourceContents((function(e,t){r.setSourceContent(e,t)})),{code:t.code,map:r}},tt.SourceNode=ot,ve.SourceMapGenerator=be.SourceMapGenerator,ve.SourceMapConsumer=Be.SourceMapConsumer,ve.SourceNode=tt.SourceNode;var at={nanoid:(e=21)=>{let t="",r=e;for(;r--;)t+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[64*Math.random()|0];return t},customAlphabet:(e,t)=>()=>{let r="",n=t;for(;n--;)r+=e[Math.random()*e.length|0];return r}};let{SourceMapConsumer:lt,SourceMapGenerator:ut}=ve,{existsSync:ct,readFileSync:ht}=s,{dirname:pt,join:ft}=r;class dt{constructor(e,t){if(!1===t.map)return;this.loadAnnotation(e),this.inline=this.startWith(this.annotation,"data:");let r=t.map?t.map.prev:void 0,n=this.loadMap(t.from,r);!this.mapFile&&t.from&&(this.mapFile=t.from),this.mapFile&&(this.root=pt(this.mapFile)),n&&(this.text=n)}consumer(){return this.consumerCache||(this.consumerCache=new lt(this.text)),this.consumerCache}withContent(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)}startWith(e,t){return!!e&&e.substr(0,t.length)===t}getAnnotationURL(e){return e.replace(/^\/\*\s*# sourceMappingURL=/,"").trim()}loadAnnotation(e){let t=e.match(/\/\*\s*# sourceMappingURL=/gm);if(!t)return;let r=e.lastIndexOf(t.pop()),n=e.indexOf("*/",r);r>-1&&n>-1&&(this.annotation=this.getAnnotationURL(e.substring(r,n)))}decodeInline(e){if(/^data:application\/json;charset=utf-?8,/.test(e)||/^data:application\/json,/.test(e))return decodeURIComponent(e.substr(RegExp.lastMatch.length));if(/^data:application\/json;charset=utf-?8;base64,/.test(e)||/^data:application\/json;base64,/.test(e))return t=e.substr(RegExp.lastMatch.length),Buffer?Buffer.from(t,"base64").toString():window.atob(t);var t;let r=e.match(/data:application\/json;([^,]+),/)[1];throw new Error("Unsupported source map encoding "+r)}loadFile(e){if(this.root=pt(e),ct(e))return this.mapFile=e,ht(e,"utf-8").toString().trim()}loadMap(e,t){if(!1===t)return!1;if(t){if("string"==typeof t)return t;if("function"!=typeof t){if(t instanceof lt)return ut.fromSourceMap(t).toString();if(t instanceof ut)return t.toString();if(this.isMap(t))return JSON.stringify(t);throw new Error("Unsupported previous source map format: "+t.toString())}{let r=t(e);if(r){let e=this.loadFile(r);if(!e)throw new Error("Unable to load previous source map: "+r.toString());return e}}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){let t=this.annotation;return e&&(t=ft(pt(e),t)),this.loadFile(t)}}}isMap(e){return"object"==typeof e&&("string"==typeof e.mappings||"string"==typeof e._mappings||Array.isArray(e.sections))}}var gt=dt;dt.default=dt;let{SourceMapConsumer:mt,SourceMapGenerator:wt}=ve,{fileURLToPath:yt,pathToFileURL:vt}=n,{resolve:bt,isAbsolute:St}=r,{nanoid:Ct}=at,_t=Z,xt=ee,Ot=gt,At=Symbol("fromOffsetCache"),Mt=Boolean(mt&&wt),kt=Boolean(bt&&St);class Et{constructor(e,t={}){if(null==e||"object"==typeof e&&!e.toString)throw new Error(`PostCSS received ${e} instead of CSS string`);if(this.css=e.toString(),"\ufeff"===this.css[0]||"￾"===this.css[0]?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,t.from&&(!kt||/^\w+:\/\//.test(t.from)||St(t.from)?this.file=t.from:this.file=bt(t.from)),kt&&Mt){let e=new Ot(this.css,t);if(e.text){this.map=e;let t=e.consumer().file;!this.file&&t&&(this.file=this.mapResolve(t))}}this.file||(this.id="<input css "+Ct(6)+">"),this.map&&(this.map.file=this.from)}fromOffset(e){let t,r;if(this[At])r=this[At];else{let e=this.css.split("\n");r=new Array(e.length);let t=0;for(let n=0,s=e.length;n<s;n++)r[n]=t,t+=e[n].length+1;this[At]=r}t=r[r.length-1];let n=0;if(e>=t)n=r.length-1;else{let t,s=r.length-2;for(;n<s;)if(t=n+(s-n>>1),e<r[t])s=t-1;else{if(!(e>=r[t+1])){n=t;break}n=t+1}}return{line:n+1,col:e-r[n]+1}}error(e,t,r,n={}){let s,i,o;if(t&&"object"==typeof t){let e=t,n=r;if("number"==typeof t.offset){let n=this.fromOffset(e.offset);t=n.line,r=n.col}else t=e.line,r=e.column;if("number"==typeof n.offset){let e=this.fromOffset(n.offset);i=e.line,o=e.col}else i=n.line,o=n.column}else if(!r){let e=this.fromOffset(t);t=e.line,r=e.col}let a=this.origin(t,r,i,o);return s=a?new xt(e,void 0===a.endLine?a.line:{line:a.line,column:a.column},void 0===a.endLine?a.column:{line:a.endLine,column:a.endColumn},a.source,a.file,n.plugin):new xt(e,void 0===i?t:{line:t,column:r},void 0===i?r:{line:i,column:o},this.css,this.file,n.plugin),s.input={line:t,column:r,endLine:i,endColumn:o,source:this.css},this.file&&(vt&&(s.input.url=vt(this.file).toString()),s.input.file=this.file),s}origin(e,t,r,n){if(!this.map)return!1;let s,i,o=this.map.consumer(),a=o.originalPositionFor({line:e,column:t});if(!a.source)return!1;"number"==typeof r&&(s=o.originalPositionFor({line:r,column:n})),i=St(a.source)?vt(a.source):new URL(a.source,this.map.consumer().sourceRoot||vt(this.map.mapFile));let l={url:i.toString(),line:a.line,column:a.column,endLine:s&&s.line,endColumn:s&&s.column};if("file:"===i.protocol){if(!yt)throw new Error("file: protocol is not available in this PostCSS build");l.file=yt(i)}let u=o.sourceContentFor(a.source);return u&&(l.source=u),l}mapResolve(e){return/^\w+:\/\//.test(e)?e:bt(this.map.consumer().sourceRoot||this.map.root||".",e)}get from(){return this.file||this.id}toJSON(){let e={};for(let t of["hasBOM","css","file","id"])null!=this[t]&&(e[t]=this[t]);return this.map&&(e.map={...this.map},e.map.consumerCache&&(e.map.consumerCache=void 0)),e}}var Lt=Et;Et.default=Et,_t&&_t.registerInput&&_t.registerInput(Et);let{SourceMapConsumer:Rt,SourceMapGenerator:Pt}=ve,{dirname:It,resolve:Nt,relative:Ft,sep:jt}=r,{pathToFileURL:Ut}=n,Dt=Lt,Bt=Boolean(Rt&&Pt),Tt=Boolean(It&&Nt&&Ft&&jt);var $t=class{constructor(e,t,r,n){this.stringify=e,this.mapOpts=r.map||{},this.root=t,this.opts=r,this.css=n}isMap(){return void 0!==this.opts.map?!!this.opts.map:this.previous().length>0}previous(){if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk((e=>{if(e.source&&e.source.input.map){let t=e.source.input.map;this.previousMaps.includes(t)||this.previousMaps.push(t)}}));else{let e=new Dt(this.css,this.opts);e.map&&this.previousMaps.push(e.map)}return this.previousMaps}isInline(){if(void 0!==this.mapOpts.inline)return this.mapOpts.inline;let e=this.mapOpts.annotation;return(void 0===e||!0===e)&&(!this.previous().length||this.previous().some((e=>e.inline)))}isSourcesContent(){return void 0!==this.mapOpts.sourcesContent?this.mapOpts.sourcesContent:!this.previous().length||this.previous().some((e=>e.withContent()))}clearAnnotation(){if(!1!==this.mapOpts.annotation)if(this.root){let e;for(let t=this.root.nodes.length-1;t>=0;t--)e=this.root.nodes[t],"comment"===e.type&&0===e.text.indexOf("# sourceMappingURL=")&&this.root.removeChild(t)}else this.css&&(this.css=this.css.replace(/(\n)?\/\*#[\S\s]*?\*\/$/gm,""))}setSourcesContent(){let e={};if(this.root)this.root.walk((t=>{if(t.source){let r=t.source.input.from;r&&!e[r]&&(e[r]=!0,this.map.setSourceContent(this.toUrl(this.path(r)),t.source.input.css))}}));else if(this.css){let e=this.opts.from?this.toUrl(this.path(this.opts.from)):"<no source>";this.map.setSourceContent(e,this.css)}}applyPrevMaps(){for(let e of this.previous()){let t,r=this.toUrl(this.path(e.file)),n=e.root||It(e.file);!1===this.mapOpts.sourcesContent?(t=new Rt(e.text),t.sourcesContent&&(t.sourcesContent=t.sourcesContent.map((()=>null)))):t=e.consumer(),this.map.applySourceMap(t,r,this.toUrl(this.path(n)))}}isAnnotation(){return!!this.isInline()||(void 0!==this.mapOpts.annotation?this.mapOpts.annotation:!this.previous().length||this.previous().some((e=>e.annotation)))}toBase64(e){return Buffer?Buffer.from(e).toString("base64"):window.btoa(unescape(encodeURIComponent(e)))}addAnnotation(){let e;e=this.isInline()?"data:application/json;base64,"+this.toBase64(this.map.toString()):"string"==typeof this.mapOpts.annotation?this.mapOpts.annotation:"function"==typeof this.mapOpts.annotation?this.mapOpts.annotation(this.opts.to,this.root):this.outputFile()+".map";let t="\n";this.css.includes("\r\n")&&(t="\r\n"),this.css+=t+"/*# sourceMappingURL="+e+" */"}outputFile(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):"to.css"}generateMap(){if(this.root)this.generateString();else if(1===this.previous().length){let e=this.previous()[0].consumer();e.file=this.outputFile(),this.map=Pt.fromSourceMap(e)}else this.map=new Pt({file:this.outputFile()}),this.map.addMapping({source:this.opts.from?this.toUrl(this.path(this.opts.from)):"<no source>",generated:{line:1,column:0},original:{line:1,column:0}});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]}path(e){if(0===e.indexOf("<"))return e;if(/^\w+:\/\//.test(e))return e;if(this.mapOpts.absolute)return e;let t=this.opts.to?It(this.opts.to):".";return"string"==typeof this.mapOpts.annotation&&(t=It(Nt(t,this.mapOpts.annotation))),e=Ft(t,e)}toUrl(e){return"\\"===jt&&(e=e.replace(/\\/g,"/")),encodeURI(e).replace(/[#?]/g,encodeURIComponent)}sourcePath(e){if(this.mapOpts.from)return this.toUrl(this.mapOpts.from);if(this.mapOpts.absolute){if(Ut)return Ut(e.source.input.from).toString();throw new Error("`map.absolute` option is not available in this PostCSS build")}return this.toUrl(this.path(e.source.input.from))}generateString(){this.css="",this.map=new Pt({file:this.outputFile()});let e,t,r=1,n=1,s="<no source>",i={source:"",generated:{line:0,column:0},original:{line:0,column:0}};this.stringify(this.root,((o,a,l)=>{if(this.css+=o,a&&"end"!==l&&(i.generated.line=r,i.generated.column=n-1,a.source&&a.source.start?(i.source=this.sourcePath(a),i.original.line=a.source.start.line,i.original.column=a.source.start.column-1,this.map.addMapping(i)):(i.source=s,i.original.line=1,i.original.column=0,this.map.addMapping(i))),e=o.match(/\n/g),e?(r+=e.length,t=o.lastIndexOf("\n"),n=o.length-t):n+=o.length,a&&"start"!==l){let e=a.parent||{raws:{}};("decl"!==a.type||a!==e.last||e.raws.semicolon)&&(a.source&&a.source.end?(i.source=this.sourcePath(a),i.original.line=a.source.end.line,i.original.column=a.source.end.column-1,i.generated.line=r,i.generated.column=n-2,this.map.addMapping(i)):(i.source=s,i.original.line=1,i.original.column=0,i.generated.line=r,i.generated.column=n-1,this.map.addMapping(i)))}}))}generate(){if(this.clearAnnotation(),Tt&&Bt&&this.isMap())return this.generateMap();{let e="";return this.stringify(this.root,(t=>{e+=t})),[e]}}};let Gt=ge;class zt extends Gt{constructor(e){super(e),this.type="comment"}}var Wt=zt;zt.default=zt;let Vt,Jt,qt,{isClean:Yt,my:Qt}=te,Zt=ye,Ht=Wt,Kt=ge;function Xt(e){return e.map((e=>(e.nodes&&(e.nodes=Xt(e.nodes)),delete e.source,e)))}function er(e){if(e[Yt]=!1,e.proxyOf.nodes)for(let t of e.proxyOf.nodes)er(t)}class tr extends Kt{push(e){return e.parent=this,this.proxyOf.nodes.push(e),this}each(e){if(!this.proxyOf.nodes)return;let t,r,n=this.getIterator();for(;this.indexes[n]<this.proxyOf.nodes.length&&(t=this.indexes[n],r=e(this.proxyOf.nodes[t],t),!1!==r);)this.indexes[n]+=1;return delete this.indexes[n],r}walk(e){return this.each(((t,r)=>{let n;try{n=e(t,r)}catch(e){throw t.addToError(e)}return!1!==n&&t.walk&&(n=t.walk(e)),n}))}walkDecls(e,t){return t?e instanceof RegExp?this.walk(((r,n)=>{if("decl"===r.type&&e.test(r.prop))return t(r,n)})):this.walk(((r,n)=>{if("decl"===r.type&&r.prop===e)return t(r,n)})):(t=e,this.walk(((e,r)=>{if("decl"===e.type)return t(e,r)})))}walkRules(e,t){return t?e instanceof RegExp?this.walk(((r,n)=>{if("rule"===r.type&&e.test(r.selector))return t(r,n)})):this.walk(((r,n)=>{if("rule"===r.type&&r.selector===e)return t(r,n)})):(t=e,this.walk(((e,r)=>{if("rule"===e.type)return t(e,r)})))}walkAtRules(e,t){return t?e instanceof RegExp?this.walk(((r,n)=>{if("atrule"===r.type&&e.test(r.name))return t(r,n)})):this.walk(((r,n)=>{if("atrule"===r.type&&r.name===e)return t(r,n)})):(t=e,this.walk(((e,r)=>{if("atrule"===e.type)return t(e,r)})))}walkComments(e){return this.walk(((t,r)=>{if("comment"===t.type)return e(t,r)}))}append(...e){for(let t of e){let e=this.normalize(t,this.last);for(let t of e)this.proxyOf.nodes.push(t)}return this.markDirty(),this}prepend(...e){e=e.reverse();for(let t of e){let e=this.normalize(t,this.first,"prepend").reverse();for(let t of e)this.proxyOf.nodes.unshift(t);for(let t in this.indexes)this.indexes[t]=this.indexes[t]+e.length}return this.markDirty(),this}cleanRaws(e){if(super.cleanRaws(e),this.nodes)for(let t of this.nodes)t.cleanRaws(e)}insertBefore(e,t){let r,n=0===(e=this.index(e))&&"prepend",s=this.normalize(t,this.proxyOf.nodes[e],n).reverse();for(let t of s)this.proxyOf.nodes.splice(e,0,t);for(let t in this.indexes)r=this.indexes[t],e<=r&&(this.indexes[t]=r+s.length);return this.markDirty(),this}insertAfter(e,t){e=this.index(e);let r,n=this.normalize(t,this.proxyOf.nodes[e]).reverse();for(let t of n)this.proxyOf.nodes.splice(e+1,0,t);for(let t in this.indexes)r=this.indexes[t],e<r&&(this.indexes[t]=r+n.length);return this.markDirty(),this}removeChild(e){let t;e=this.index(e),this.proxyOf.nodes[e].parent=void 0,this.proxyOf.nodes.splice(e,1);for(let r in this.indexes)t=this.indexes[r],t>=e&&(this.indexes[r]=t-1);return this.markDirty(),this}removeAll(){for(let e of this.proxyOf.nodes)e.parent=void 0;return this.proxyOf.nodes=[],this.markDirty(),this}replaceValues(e,t,r){return r||(r=t,t={}),this.walkDecls((n=>{t.props&&!t.props.includes(n.prop)||t.fast&&!n.value.includes(t.fast)||(n.value=n.value.replace(e,r))})),this.markDirty(),this}every(e){return this.nodes.every(e)}some(e){return this.nodes.some(e)}index(e){return"number"==typeof e?e:(e.proxyOf&&(e=e.proxyOf),this.proxyOf.nodes.indexOf(e))}get first(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}get last(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}normalize(e,t){if("string"==typeof e)e=Xt(Vt(e).nodes);else if(Array.isArray(e)){e=e.slice(0);for(let t of e)t.parent&&t.parent.removeChild(t,"ignore")}else if("root"===e.type&&"document"!==this.type){e=e.nodes.slice(0);for(let t of e)t.parent&&t.parent.removeChild(t,"ignore")}else if(e.type)e=[e];else if(e.prop){if(void 0===e.value)throw new Error("Value field is missed in node creation");"string"!=typeof e.value&&(e.value=String(e.value)),e=[new Zt(e)]}else if(e.selector)e=[new Jt(e)];else if(e.name)e=[new qt(e)];else{if(!e.text)throw new Error("Unknown node type in node creation");e=[new Ht(e)]}return e.map((e=>(e[Qt]||tr.rebuild(e),(e=e.proxyOf).parent&&e.parent.removeChild(e),e[Yt]&&er(e),void 0===e.raws.before&&t&&void 0!==t.raws.before&&(e.raws.before=t.raws.before.replace(/\S/g,"")),e.parent=this,e)))}getProxyProcessor(){return{set:(e,t,r)=>(e[t]===r||(e[t]=r,"name"!==t&&"params"!==t&&"selector"!==t||e.markDirty()),!0),get:(e,t)=>"proxyOf"===t?e:e[t]?"each"===t||"string"==typeof t&&t.startsWith("walk")?(...r)=>e[t](...r.map((e=>"function"==typeof e?(t,r)=>e(t.toProxy(),r):e))):"every"===t||"some"===t?r=>e[t](((e,...t)=>r(e.toProxy(),...t))):"root"===t?()=>e.root().toProxy():"nodes"===t?e.nodes.map((e=>e.toProxy())):"first"===t||"last"===t?e[t].toProxy():e[t]:e[t]}}getIterator(){this.lastEach||(this.lastEach=0),this.indexes||(this.indexes={}),this.lastEach+=1;let e=this.lastEach;return this.indexes[e]=0,e}}tr.registerParse=e=>{Vt=e},tr.registerRule=e=>{Jt=e},tr.registerAtRule=e=>{qt=e};var rr=tr;tr.default=tr,tr.rebuild=e=>{"atrule"===e.type?Object.setPrototypeOf(e,qt.prototype):"rule"===e.type?Object.setPrototypeOf(e,Jt.prototype):"decl"===e.type?Object.setPrototypeOf(e,Zt.prototype):"comment"===e.type&&Object.setPrototypeOf(e,Ht.prototype),e[Qt]=!0,e.nodes&&e.nodes.forEach((e=>{tr.rebuild(e)}))};let nr,sr,ir=rr;class or extends ir{constructor(e){super({type:"document",...e}),this.nodes||(this.nodes=[])}toResult(e={}){return new nr(new sr,this,e).stringify()}}or.registerLazyResult=e=>{nr=e},or.registerProcessor=e=>{sr=e};var ar=or;or.default=or;let lr={};var ur=function(e){lr[e]||(lr[e]=!0,"undefined"!=typeof console&&console.warn&&console.warn(e))};class cr{constructor(e,t={}){if(this.type="warning",this.text=e,t.node&&t.node.source){let e=t.node.rangeBy(t);this.line=e.start.line,this.column=e.start.column,this.endLine=e.end.line,this.endColumn=e.end.column}for(let e in t)this[e]=t[e]}toString(){return this.node?this.node.error(this.text,{plugin:this.plugin,index:this.index,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text}}var hr=cr;cr.default=cr;let pr=hr;class fr{constructor(e,t,r){this.processor=e,this.messages=[],this.root=t,this.opts=r,this.css=void 0,this.map=void 0}toString(){return this.css}warn(e,t={}){t.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(t.plugin=this.lastPlugin.postcssPlugin);let r=new pr(e,t);return this.messages.push(r),r}warnings(){return this.messages.filter((e=>"warning"===e.type))}get content(){return this.css}}var dr=fr;fr.default=fr;let gr=rr;class mr extends gr{constructor(e){super(e),this.type="atrule"}append(...e){return this.proxyOf.nodes||(this.nodes=[]),super.append(...e)}prepend(...e){return this.proxyOf.nodes||(this.nodes=[]),super.prepend(...e)}}var wr=mr;mr.default=mr,gr.registerAtRule(mr);let yr,vr,br=rr;class Sr extends br{constructor(e){super(e),this.type="root",this.nodes||(this.nodes=[])}removeChild(e,t){let r=this.index(e);return!t&&0===r&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[r].raws.before),super.removeChild(e)}normalize(e,t,r){let n=super.normalize(e);if(t)if("prepend"===r)this.nodes.length>1?t.raws.before=this.nodes[1].raws.before:delete t.raws.before;else if(this.first!==t)for(let e of n)e.raws.before=t.raws.before;return n}toResult(e={}){return new yr(new vr,this,e).stringify()}}Sr.registerLazyResult=e=>{yr=e},Sr.registerProcessor=e=>{vr=e};var Cr=Sr;Sr.default=Sr;let _r={split(e,t,r){let n=[],s="",i=!1,o=0,a=!1,l=!1;for(let r of e)l?l=!1:"\\"===r?l=!0:a?r===a&&(a=!1):'"'===r||"'"===r?a=r:"("===r?o+=1:")"===r?o>0&&(o-=1):0===o&&t.includes(r)&&(i=!0),i?(""!==s&&n.push(s.trim()),s="",i=!1):s+=r;return(r||""!==s)&&n.push(s.trim()),n},space:e=>_r.split(e,[" ","\n","\t"]),comma:e=>_r.split(e,[","],!0)};var xr=_r;_r.default=_r;let Or=rr,Ar=xr;class Mr extends Or{constructor(e){super(e),this.type="rule",this.nodes||(this.nodes=[])}get selectors(){return Ar.comma(this.selector)}set selectors(e){let t=this.selector?this.selector.match(/,\s*/):null,r=t?t[0]:","+this.raw("between","beforeOpen");this.selector=e.join(r)}}var kr=Mr;Mr.default=Mr,Or.registerRule(Mr);let Er=ye,Lr=z,Rr=Wt,Pr=wr,Ir=Cr,Nr=kr;var Fr=class{constructor(e){this.input=e,this.root=new Ir,this.current=this.root,this.spaces="",this.semicolon=!1,this.customProperty=!1,this.createTokenizer(),this.root.source={input:e,start:{offset:0,line:1,column:1}}}createTokenizer(){this.tokenizer=Lr(this.input)}parse(){let e;for(;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case"space":this.spaces+=e[1];break;case";":this.freeSemicolon(e);break;case"}":this.end(e);break;case"comment":this.comment(e);break;case"at-word":this.atrule(e);break;case"{":this.emptyRule(e);break;default:this.other(e)}this.endFile()}comment(e){let t=new Rr;this.init(t,e[2]),t.source.end=this.getPosition(e[3]||e[2]);let r=e[1].slice(2,-2);if(/^\s*$/.test(r))t.text="",t.raws.left=r,t.raws.right="";else{let e=r.match(/^(\s*)([^]*\S)(\s*)$/);t.text=e[2],t.raws.left=e[1],t.raws.right=e[3]}}emptyRule(e){let t=new Nr;this.init(t,e[2]),t.selector="",t.raws.between="",this.current=t}other(e){let t=!1,r=null,n=!1,s=null,i=[],o=e[1].startsWith("--"),a=[],l=e;for(;l;){if(r=l[0],a.push(l),"("===r||"["===r)s||(s=l),i.push("("===r?")":"]");else if(o&&n&&"{"===r)s||(s=l),i.push("}");else if(0===i.length){if(";"===r){if(n)return void this.decl(a,o);break}if("{"===r)return void this.rule(a);if("}"===r){this.tokenizer.back(a.pop()),t=!0;break}":"===r&&(n=!0)}else r===i[i.length-1]&&(i.pop(),0===i.length&&(s=null));l=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(t=!0),i.length>0&&this.unclosedBracket(s),t&&n){for(;a.length&&(l=a[a.length-1][0],"space"===l||"comment"===l);)this.tokenizer.back(a.pop());this.decl(a,o)}else this.unknownWord(a)}rule(e){e.pop();let t=new Nr;this.init(t,e[0][2]),t.raws.between=this.spacesAndCommentsFromEnd(e),this.raw(t,"selector",e),this.current=t}decl(e,t){let r=new Er;this.init(r,e[0][2]);let n,s=e[e.length-1];for(";"===s[0]&&(this.semicolon=!0,e.pop()),r.source.end=this.getPosition(s[3]||s[2]);"word"!==e[0][0];)1===e.length&&this.unknownWord(e),r.raws.before+=e.shift()[1];for(r.source.start=this.getPosition(e[0][2]),r.prop="";e.length;){let t=e[0][0];if(":"===t||"space"===t||"comment"===t)break;r.prop+=e.shift()[1]}for(r.raws.between="";e.length;){if(n=e.shift(),":"===n[0]){r.raws.between+=n[1];break}"word"===n[0]&&/\w/.test(n[1])&&this.unknownWord([n]),r.raws.between+=n[1]}"_"!==r.prop[0]&&"*"!==r.prop[0]||(r.raws.before+=r.prop[0],r.prop=r.prop.slice(1));let i=this.spacesAndCommentsFromStart(e);this.precheckMissedSemicolon(e);for(let t=e.length-1;t>=0;t--){if(n=e[t],"!important"===n[1].toLowerCase()){r.important=!0;let n=this.stringFrom(e,t);n=this.spacesFromEnd(e)+n," !important"!==n&&(r.raws.important=n);break}if("important"===n[1].toLowerCase()){let n=e.slice(0),s="";for(let e=t;e>0;e--){let t=n[e][0];if(0===s.trim().indexOf("!")&&"space"!==t)break;s=n.pop()[1]+s}0===s.trim().indexOf("!")&&(r.important=!0,r.raws.important=s,e=n)}if("space"!==n[0]&&"comment"!==n[0])break}let o=e.some((e=>"space"!==e[0]&&"comment"!==e[0]));this.raw(r,"value",e),o?r.raws.between+=i:r.value=i+r.value,r.value.includes(":")&&!t&&this.checkMissedSemicolon(e)}atrule(e){let t,r,n,s=new Pr;s.name=e[1].slice(1),""===s.name&&this.unnamedAtrule(s,e),this.init(s,e[2]);let i=!1,o=!1,a=[],l=[];for(;!this.tokenizer.endOfFile();){if(t=(e=this.tokenizer.nextToken())[0],"("===t||"["===t?l.push("("===t?")":"]"):"{"===t&&l.length>0?l.push("}"):t===l[l.length-1]&&l.pop(),0===l.length){if(";"===t){s.source.end=this.getPosition(e[2]),this.semicolon=!0;break}if("{"===t){o=!0;break}if("}"===t){if(a.length>0){for(n=a.length-1,r=a[n];r&&"space"===r[0];)r=a[--n];r&&(s.source.end=this.getPosition(r[3]||r[2]))}this.end(e);break}a.push(e)}else a.push(e);if(this.tokenizer.endOfFile()){i=!0;break}}s.raws.between=this.spacesAndCommentsFromEnd(a),a.length?(s.raws.afterName=this.spacesAndCommentsFromStart(a),this.raw(s,"params",a),i&&(e=a[a.length-1],s.source.end=this.getPosition(e[3]||e[2]),this.spaces=s.raws.between,s.raws.between="")):(s.raws.afterName="",s.params=""),o&&(s.nodes=[],this.current=s)}end(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current=this.current.parent):this.unexpectedClose(e)}endFile(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||"")+this.spaces}freeSemicolon(e){if(this.spaces+=e[1],this.current.nodes){let e=this.current.nodes[this.current.nodes.length-1];e&&"rule"===e.type&&!e.raws.ownSemicolon&&(e.raws.ownSemicolon=this.spaces,this.spaces="")}}getPosition(e){let t=this.input.fromOffset(e);return{offset:e,line:t.line,column:t.col}}init(e,t){this.current.push(e),e.source={start:this.getPosition(t),input:this.input},e.raws.before=this.spaces,this.spaces="","comment"!==e.type&&(this.semicolon=!1)}raw(e,t,r){let n,s,i,o,a=r.length,l="",u=!0,c=/^([#.|])?(\w)+/i;for(let t=0;t<a;t+=1)n=r[t],s=n[0],"comment"!==s||"rule"!==e.type?"comment"===s||"space"===s&&t===a-1?u=!1:l+=n[1]:(o=r[t-1],i=r[t+1],"space"!==o[0]&&"space"!==i[0]&&c.test(o[1])&&c.test(i[1])?l+=n[1]:u=!1);if(!u){let n=r.reduce(((e,t)=>e+t[1]),"");e.raws[t]={value:l,raw:n}}e[t]=l}spacesAndCommentsFromEnd(e){let t,r="";for(;e.length&&(t=e[e.length-1][0],"space"===t||"comment"===t);)r=e.pop()[1]+r;return r}spacesAndCommentsFromStart(e){let t,r="";for(;e.length&&(t=e[0][0],"space"===t||"comment"===t);)r+=e.shift()[1];return r}spacesFromEnd(e){let t,r="";for(;e.length&&(t=e[e.length-1][0],"space"===t);)r=e.pop()[1]+r;return r}stringFrom(e,t){let r="";for(let n=t;n<e.length;n++)r+=e[n][1];return e.splice(t,e.length-t),r}colon(e){let t,r,n,s=0;for(let[i,o]of e.entries()){if(t=o,r=t[0],"("===r&&(s+=1),")"===r&&(s-=1),0===s&&":"===r){if(n){if("word"===n[0]&&"progid"===n[1])continue;return i}this.doubleColon(t)}n=t}return!1}unclosedBracket(e){throw this.input.error("Unclosed bracket",{offset:e[2]},{offset:e[2]+1})}unknownWord(e){throw this.input.error("Unknown word",{offset:e[0][2]},{offset:e[0][2]+e[0][1].length})}unexpectedClose(e){throw this.input.error("Unexpected }",{offset:e[2]},{offset:e[2]+1})}unclosedBlock(){let e=this.current.source.start;throw this.input.error("Unclosed block",e.line,e.column)}doubleColon(e){throw this.input.error("Double colon",{offset:e[2]},{offset:e[2]+e[1].length})}unnamedAtrule(e,t){throw this.input.error("At-rule without name",{offset:t[2]},{offset:t[2]+t[1].length})}precheckMissedSemicolon(){}checkMissedSemicolon(e){let t=this.colon(e);if(!1===t)return;let r,n=0;for(let s=t-1;s>=0&&(r=e[s],"space"===r[0]||(n+=1,2!==n));s--);throw this.input.error("Missed semicolon","word"===r[0]?r[3]+1:r[2])}};let jr=rr,Ur=Fr,Dr=Lt;function Br(e,t){let r=new Dr(e,t),n=new Ur(r);try{n.parse()}catch(e){throw"production"!==process.env.NODE_ENV&&"CssSyntaxError"===e.name&&t&&t.from&&(/\.scss$/i.test(t.from)?e.message+="\nYou tried to parse SCSS with the standard CSS parser; try again with the postcss-scss parser":/\.sass/i.test(t.from)?e.message+="\nYou tried to parse Sass with the standard CSS parser; try again with the postcss-sass parser":/\.less$/i.test(t.from)&&(e.message+="\nYou tried to parse Less with the standard CSS parser; try again with the postcss-less parser")),e}return n.root}var Tr=Br;Br.default=Br,jr.registerParse(Br);let{isClean:$r,my:Gr}=te,zr=$t,Wr=ae,Vr=rr,Jr=ar,qr=ur,Yr=dr,Qr=Tr,Zr=Cr;const Hr={document:"Document",root:"Root",atrule:"AtRule",rule:"Rule",decl:"Declaration",comment:"Comment"},Kr={postcssPlugin:!0,prepare:!0,Once:!0,Document:!0,Root:!0,Declaration:!0,Rule:!0,AtRule:!0,Comment:!0,DeclarationExit:!0,RuleExit:!0,AtRuleExit:!0,CommentExit:!0,RootExit:!0,DocumentExit:!0,OnceExit:!0},Xr={postcssPlugin:!0,prepare:!0,Once:!0};function en(e){return"object"==typeof e&&"function"==typeof e.then}function tn(e){let t=!1,r=Hr[e.type];return"decl"===e.type?t=e.prop.toLowerCase():"atrule"===e.type&&(t=e.name.toLowerCase()),t&&e.append?[r,r+"-"+t,0,r+"Exit",r+"Exit-"+t]:t?[r,r+"-"+t,r+"Exit",r+"Exit-"+t]:e.append?[r,0,r+"Exit"]:[r,r+"Exit"]}function rn(e){let t;return t="document"===e.type?["Document",0,"DocumentExit"]:"root"===e.type?["Root",0,"RootExit"]:tn(e),{node:e,events:t,eventIndex:0,visitors:[],visitorIndex:0,iterator:0}}function nn(e){return e[$r]=!1,e.nodes&&e.nodes.forEach((e=>nn(e))),e}let sn={};class on{constructor(e,t,r){let n;if(this.stringified=!1,this.processed=!1,"object"!=typeof t||null===t||"root"!==t.type&&"document"!==t.type)if(t instanceof on||t instanceof Yr)n=nn(t.root),t.map&&(void 0===r.map&&(r.map={}),r.map.inline||(r.map.inline=!1),r.map.prev=t.map);else{let e=Qr;r.syntax&&(e=r.syntax.parse),r.parser&&(e=r.parser),e.parse&&(e=e.parse);try{n=e(t,r)}catch(e){this.processed=!0,this.error=e}n&&!n[Gr]&&Vr.rebuild(n)}else n=nn(t);this.result=new Yr(e,n,r),this.helpers={...sn,result:this.result,postcss:sn},this.plugins=this.processor.plugins.map((e=>"object"==typeof e&&e.prepare?{...e,...e.prepare(this.result)}:e))}get[Symbol.toStringTag](){return"LazyResult"}get processor(){return this.result.processor}get opts(){return this.result.opts}get css(){return this.stringify().css}get content(){return this.stringify().content}get map(){return this.stringify().map}get root(){return this.sync().root}get messages(){return this.sync().messages}warnings(){return this.sync().warnings()}toString(){return this.css}then(e,t){return"production"!==process.env.NODE_ENV&&("from"in this.opts||qr("Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.")),this.async().then(e,t)}catch(e){return this.async().catch(e)}finally(e){return this.async().then(e,e)}async(){return this.error?Promise.reject(this.error):this.processed?Promise.resolve(this.result):(this.processing||(this.processing=this.runAsync()),this.processing)}sync(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(let e of this.plugins){if(en(this.runOnRoot(e)))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){let e=this.result.root;for(;!e[$r];)e[$r]=!0,this.walkSync(e);if(this.listeners.OnceExit)if("document"===e.type)for(let t of e.nodes)this.visitSync(this.listeners.OnceExit,t);else this.visitSync(this.listeners.OnceExit,e)}return this.result}stringify(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();let e=this.result.opts,t=Wr;e.syntax&&(t=e.syntax.stringify),e.stringifier&&(t=e.stringifier),t.stringify&&(t=t.stringify);let r=new zr(t,this.result.root,this.result.opts).generate();return this.result.css=r[0],this.result.map=r[1],this.result}walkSync(e){e[$r]=!0;let t=tn(e);for(let r of t)if(0===r)e.nodes&&e.each((e=>{e[$r]||this.walkSync(e)}));else{let t=this.listeners[r];if(t&&this.visitSync(t,e.toProxy()))return}}visitSync(e,t){for(let[r,n]of e){let e;this.result.lastPlugin=r;try{e=n(t,this.helpers)}catch(e){throw this.handleError(e,t.proxyOf)}if("root"!==t.type&&"document"!==t.type&&!t.parent)return!0;if(en(e))throw this.getAsyncError()}}runOnRoot(e){this.result.lastPlugin=e;try{if("object"==typeof e&&e.Once){if("document"===this.result.root.type){let t=this.result.root.nodes.map((t=>e.Once(t,this.helpers)));return en(t[0])?Promise.all(t):t}return e.Once(this.result.root,this.helpers)}if("function"==typeof e)return e(this.result.root,this.result)}catch(e){throw this.handleError(e)}}getAsyncError(){throw new Error("Use process(css).then(cb) to work with async plugins")}handleError(e,t){let r=this.result.lastPlugin;try{if(t&&t.addToError(e),this.error=e,"CssSyntaxError"!==e.name||e.plugin){if(r.postcssVersion&&"production"!==process.env.NODE_ENV){let e=r.postcssPlugin,t=r.postcssVersion,n=this.result.processor.version,s=t.split("."),i=n.split(".");(s[0]!==i[0]||parseInt(s[1])>parseInt(i[1]))&&console.error("Unknown error from PostCSS plugin. Your current PostCSS version is "+n+", but "+e+" uses "+t+". Perhaps this is the source of the error below.")}}else e.plugin=r.postcssPlugin,e.setMessage()}catch(e){console&&console.error&&console.error(e)}return e}async runAsync(){this.plugin=0;for(let e=0;e<this.plugins.length;e++){let t=this.plugins[e],r=this.runOnRoot(t);if(en(r))try{await r}catch(e){throw this.handleError(e)}}if(this.prepareVisitors(),this.hasListener){let e=this.result.root;for(;!e[$r];){e[$r]=!0;let t=[rn(e)];for(;t.length>0;){let e=this.visitTick(t);if(en(e))try{await e}catch(e){let r=t[t.length-1].node;throw this.handleError(e,r)}}}if(this.listeners.OnceExit)for(let[t,r]of this.listeners.OnceExit){this.result.lastPlugin=t;try{if("document"===e.type){let t=e.nodes.map((e=>r(e,this.helpers)));await Promise.all(t)}else await r(e,this.helpers)}catch(e){throw this.handleError(e)}}}return this.processed=!0,this.stringify()}prepareVisitors(){this.listeners={};let e=(e,t,r)=>{this.listeners[t]||(this.listeners[t]=[]),this.listeners[t].push([e,r])};for(let t of this.plugins)if("object"==typeof t)for(let r in t){if(!Kr[r]&&/^[A-Z]/.test(r))throw new Error(`Unknown event ${r} in ${t.postcssPlugin}. Try to update PostCSS (${this.processor.version} now).`);if(!Xr[r])if("object"==typeof t[r])for(let n in t[r])e(t,"*"===n?r:r+"-"+n.toLowerCase(),t[r][n]);else"function"==typeof t[r]&&e(t,r,t[r])}this.hasListener=Object.keys(this.listeners).length>0}visitTick(e){let t=e[e.length-1],{node:r,visitors:n}=t;if("root"!==r.type&&"document"!==r.type&&!r.parent)return void e.pop();if(n.length>0&&t.visitorIndex<n.length){let[e,s]=n[t.visitorIndex];t.visitorIndex+=1,t.visitorIndex===n.length&&(t.visitors=[],t.visitorIndex=0),this.result.lastPlugin=e;try{return s(r.toProxy(),this.helpers)}catch(e){throw this.handleError(e,r)}}if(0!==t.iterator){let n,s=t.iterator;for(;n=r.nodes[r.indexes[s]];)if(r.indexes[s]+=1,!n[$r])return n[$r]=!0,void e.push(rn(n));t.iterator=0,delete r.indexes[s]}let s=t.events;for(;t.eventIndex<s.length;){let e=s[t.eventIndex];if(t.eventIndex+=1,0===e)return void(r.nodes&&r.nodes.length&&(r[$r]=!0,t.iterator=r.getIterator()));if(this.listeners[e])return void(t.visitors=this.listeners[e])}e.pop()}}on.registerPostcss=e=>{sn=e};var an=on;on.default=on,Zr.registerLazyResult(on),Jr.registerLazyResult(on);let ln=$t,un=ae,cn=ur,hn=Tr;const pn=dr;class fn{constructor(e,t,r){let n;t=t.toString(),this.stringified=!1,this._processor=e,this._css=t,this._opts=r,this._map=void 0;let s=un;this.result=new pn(this._processor,n,this._opts),this.result.css=t;let i=this;Object.defineProperty(this.result,"root",{get:()=>i.root});let o=new ln(s,n,this._opts,t);if(o.isMap()){let[e,t]=o.generate();e&&(this.result.css=e),t&&(this.result.map=t)}}get[Symbol.toStringTag](){return"NoWorkResult"}get processor(){return this.result.processor}get opts(){return this.result.opts}get css(){return this.result.css}get content(){return this.result.css}get map(){return this.result.map}get root(){if(this._root)return this._root;let e,t=hn;try{e=t(this._css,this._opts)}catch(e){this.error=e}return this._root=e,e}get messages(){return[]}warnings(){return[]}toString(){return this._css}then(e,t){return"production"!==process.env.NODE_ENV&&("from"in this._opts||cn("Without `from` option PostCSS could generate wrong source map and will not find Browserslist config. Set it to CSS file path or to `undefined` to prevent this warning.")),this.async().then(e,t)}catch(e){return this.async().catch(e)}finally(e){return this.async().then(e,e)}async(){return this.error?Promise.reject(this.error):Promise.resolve(this.result)}sync(){if(this.error)throw this.error;return this.result}}var dn=fn;fn.default=fn;let gn=dn,mn=an,wn=ar,yn=Cr;class vn{constructor(e=[]){this.version="8.4.5",this.plugins=this.normalize(e)}use(e){return this.plugins=this.plugins.concat(this.normalize([e])),this}process(e,t={}){return 0===this.plugins.length&&void 0===t.parser&&void 0===t.stringifier&&void 0===t.syntax?new gn(this,e,t):new mn(this,e,t)}normalize(e){let t=[];for(let r of e)if(!0===r.postcss?r=r():r.postcss&&(r=r.postcss),"object"==typeof r&&Array.isArray(r.plugins))t=t.concat(r.plugins);else if("object"==typeof r&&r.postcssPlugin)t.push(r);else if("function"==typeof r)t.push(r);else{if("object"!=typeof r||!r.parse&&!r.stringify)throw new Error(r+" is not a PostCSS plugin");if("production"!==process.env.NODE_ENV)throw new Error("PostCSS syntaxes cannot be used as plugins. Instead, please use one of the syntax/parser/stringifier options as outlined in your PostCSS runner documentation.")}return t}}var bn=vn;vn.default=vn,yn.registerProcessor(vn),wn.registerProcessor(vn);let Sn=ye,Cn=gt,_n=Wt,xn=wr,On=Lt,An=Cr,Mn=kr;function kn(e,t){if(Array.isArray(e))return e.map((e=>kn(e)));let{inputs:r,...n}=e;if(r){t=[];for(let e of r){let r={...e,__proto__:On.prototype};r.map&&(r.map={...r.map,__proto__:Cn.prototype}),t.push(r)}}if(n.nodes&&(n.nodes=e.nodes.map((e=>kn(e,t)))),n.source){let{inputId:e,...r}=n.source;n.source=r,null!=e&&(n.source.input=t[e])}if("root"===n.type)return new An(n);if("decl"===n.type)return new Sn(n);if("rule"===n.type)return new Mn(n);if("comment"===n.type)return new _n(n);if("atrule"===n.type)return new xn(n);throw new Error("Unknown node type: "+e.type)}var En=kn;kn.default=kn;let Ln=ee,Rn=ye,Pn=an,In=rr,Nn=bn,Fn=ae,jn=En,Un=ar,Dn=hr,Bn=Wt,Tn=wr,$n=dr,Gn=Lt,zn=Tr,Wn=xr,Vn=kr,Jn=Cr,qn=ge;function Yn(...e){return 1===e.length&&Array.isArray(e[0])&&(e=e[0]),new Nn(e)}Yn.plugin=function(e,t){function r(...r){let n=t(...r);return n.postcssPlugin=e,n.postcssVersion=(new Nn).version,n}let n;return console&&console.warn&&(console.warn(e+": postcss.plugin was deprecated. Migration guide:\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration"),process.env.LANG&&process.env.LANG.startsWith("cn")&&console.warn(e+": 里面 postcss.plugin 被弃用. 迁移指南:\nhttps://www.w3ctech.com/topic/2226")),Object.defineProperty(r,"postcss",{get:()=>(n||(n=r()),n)}),r.process=function(e,t,n){return Yn([r(n)]).process(e,t)},r},Yn.stringify=Fn,Yn.parse=zn,Yn.fromJSON=jn,Yn.list=Wn,Yn.comment=e=>new Bn(e),Yn.atRule=e=>new Tn(e),Yn.decl=e=>new Rn(e),Yn.rule=e=>new Vn(e),Yn.root=e=>new Jn(e),Yn.document=e=>new Un(e),Yn.CssSyntaxError=Ln,Yn.Declaration=Rn,Yn.Container=In,Yn.Processor=Nn,Yn.Document=Un,Yn.Comment=Bn,Yn.Warning=Dn,Yn.AtRule=Tn,Yn.Result=$n,Yn.Input=Gn,Yn.Rule=Vn,Yn.Root=Jn,Yn.Node=qn,Pn.registerPostcss(Yn);var Qn=Yn;async function Zn(){return new Promise((e=>{let t="",r=!1;if(setTimeout((()=>{r=!0,e("")}),1e4),process.stdin.isTTY){if(r)return;e(t)}else process.stdin.setEncoding("utf8"),process.stdin.on("readable",(()=>{let e;for(;e=process.stdin.read();)t+=e})),process.stdin.on("end",(()=>{r||e(t)}))}))}Yn.default=Yn,async function(e,t,n){const s=function(e,t,r){const n=e.map((e=>e.trim())).filter((e=>!!e)),s={stdin:!1,stdout:!1,output:null,outputDir:null,inputs:[],inlineMap:!0,externalMap:!1,replace:!1,pluginOptions:{},debug:!1};let i=null,o=!1;for(let e=0;e<n.length;e++){const t=n[e];switch(t){case"-o":case"--output":s.output=n[e+1],e++,o=!0;break;case"-m":case"--map":s.externalMap=!0,s.inlineMap=!1,o=!0;break;case"--no-map":s.externalMap=!1,s.inlineMap=!1,o=!0;break;case"-r":case"--replace":s.replace=!0,o=!0;break;case"--debug":s.debug=!0,o=!0;break;case"-d":case"--dir":s.outputDir=n[e+1],e++,o=!0;break;case"-p":case"--plugin-options":i=n[e+1],e++,o=!0;break;default:if(0===t.indexOf("-"))return console.warn(`[error] unknown argument : ${t}\n`),r(),f.InvalidArguments;if(!o){s.inputs.push(t);break}return r(),f.InvalidArguments}}if(s.replace&&(s.output=null,s.outputDir=null),s.outputDir&&(s.output=null),s.inputs.length>1&&s.output)return console.warn('[error] omit "--output" when processing multiple inputs\n'),r(),f.InvalidArguments;0===s.inputs.length&&(s.stdin=!0),s.output||s.outputDir||s.replace||(s.stdout=!0),s.stdout&&(s.externalMap=!1);let a={};if(i)try{a=JSON.parse(i)}catch(e){return console.warn("[error] plugin options must be valid JSON\n"),r(),f.InvalidArguments}for(const e in a){const n=a[e];if(!t.includes(e))return console.warn(`[error] unknown plugin option: ${e}\n`),r(),f.InvalidArguments;s.pluginOptions[e]=n}return s}(process.argv.slice(2),t,n);s===f.InvalidArguments&&process.exit(1);const o=e(s.pluginOptions);s.stdin&&s.stdout?await async function(e,t,r){let n="";try{const s=await Zn();s||(r(),process.exit(1)),n=(await Qn([e]).process(s,{from:"stdin",to:"stdout",map:!!t.inlineMap&&{inline:!0}})).css}catch(e){console.error(t.debug?e:e.message),process.exit(1)}process.stdout.write(n+(t.inlineMap?"\n":"")),process.exit(0)}(o,s,n):s.stdin?await async function(e,t,n){let s=t.output;!s&&t.outputDir&&(s=r.join(t.outputDir,"output.css"));try{const r=await Zn();r||(n(),process.exit(1));const o=await Qn([e]).process(r,{from:"stdin",to:s,map:!(!t.inlineMap&&!t.externalMap)&&{inline:t.inlineMap}});t.externalMap&&o.map?await Promise.all([await i.writeFile(s,o.css+(t.inlineMap?"\n":"")),await i.writeFile(`${s}.map`,o.map.toString())]):await i.writeFile(s,o.css+(t.inlineMap?"\n":""))}catch(e){console.error(t.debug?e:e.message),process.exit(1)}console.log(`CSS was written to "${r.normalize(s)}"`),process.exit(0)}(o,s,n):s.stdout?await async function(e,t){let r=[];try{r=await Promise.all(t.inputs.map((async t=>{const r=await i.readFile(t);return(await Qn([e]).process(r,{from:t,to:"stdout",map:!1})).css})))}catch(e){console.error(t.debug?e:e.message),process.exit(1)}for(const e of r)process.stdout.write(e);process.exit(0)}(o,s):await async function(e,t){try{await Promise.all(t.inputs.map((async n=>{let s=t.output;t.outputDir&&(s=r.join(t.outputDir,r.basename(n))),t.replace&&(s=n);const o=await i.readFile(n),a=await Qn([e]).process(o,{from:n,to:s,map:!(!t.inlineMap&&!t.externalMap)&&{inline:t.inlineMap}});t.externalMap&&a.map?await Promise.all([await i.writeFile(s,a.css+(t.inlineMap?"\n":"")),await i.writeFile(`${s}.map`,a.map.toString())]):await i.writeFile(s,a.css+(t.inlineMap?"\n":"")),console.log(`CSS was written to "${r.normalize(s)}"`)})))}catch(e){console.error(t.debug?e:e.message),process.exit(1)}process.exit(0)}(o,s)}(p,["preserve"],function(e,t,r,n=null){let s=[];if(n){const e=Math.max(...Object.keys(n).map((e=>e.length))),t=new Array(e).fill(" ").join("");t.length&&(s=["\nPlugin Options:",...Object.keys(n).map((e=>` ${(e+t).slice(0,t.length)} ${typeof n[e]}`))],s.push(`\n ${JSON.stringify(n,null,2).split("\n").join("\n ")}`))}const i=[`${t}\n`,` ${r}\n`,"Usage:",` ${e} [input.css] [OPTIONS] [-o|--output output.css]`,` ${e} <input.css>... [OPTIONS] --dir <output-directory>`,` ${e} <input.css>... [OPTIONS] --replace`,"\nOptions:"," -o, --output Output file"," -d, --dir Output directory"," -r, --replace Replace (overwrite) the input file"," -m, --map Create an external sourcemap"," --no-map Disable the default inline sourcemaps"," -p, --plugin-options Stringified JSON object with plugin options"];return s.length>0&&i.push(...s),()=>{console.warn(i.join("\n"))}}("postcss-color-functional-notation","PostCSS Color Functional Notation","Lets you use space and slash separated color notation in CSS, following the [CSS Color] specification.",{preserve:!0}));
@@ -0,0 +1,2 @@
1
+ import type { Node } from 'postcss';
2
+ export declare function hasSupportsAtRuleAncestor(node: Node): boolean;
package/dist/index.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=e(require("postcss-value-parser"));function n(e){const n=e.value,i=e.nodes.slice().filter((e=>"comment"!==e.type&&"space"!==e.type));let s=null;if("hsl"===n||"hsla"===n?s=function(e){if(!function(e){if(!e||"word"!==e.type)return!1;if(!o(e))return!1;const n=r.default.unit(e.value);if(!n)return!1;return!!n.number&&("deg"===n.unit||"grad"===n.unit||"rad"===n.unit||"turn"===n.unit||""===n.unit)}(e[0]))return null;if(!t(e[1]))return null;if(!t(e[2]))return null;const n={h:r.default.unit(e[0].value),hNode:e[0],s:r.default.unit(e[1].value),sNode:e[1],l:r.default.unit(e[2].value),lNode:e[2]};if(function(e){switch(e.unit){case"deg":return void(e.unit="");case"rad":return e.unit="",void(e.number=Math.round(180*parseFloat(e.number)/Math.PI).toString());case"grad":return e.unit="",void(e.number=Math.round(.9*parseFloat(e.number)).toString());case"turn":e.unit="",e.number=Math.round(360*parseFloat(e.number)).toString()}}(n.h),""!==n.h.unit)return null;n.hNode.value=n.h.number,l(e[3])&&(n.slash=e[3]);(t(e[4])||u(e[4])||a(e[4]))&&(n.alpha=e[4]);return n}(i):"rgb"!==n&&"rgba"!==n||(s=function(e){if(!t(e[0]))return null;if(!t(e[1]))return null;if(!t(e[2]))return null;const n={r:r.default.unit(e[0].value),rNode:e[0],g:r.default.unit(e[1].value),gNode:e[1],b:r.default.unit(e[2].value),bNode:e[2]};"%"===n.r.unit&&(n.r.number=String(Math.floor(Number(n.r.number)/100*255)),n.rNode.value=n.r.number);"%"===n.g.unit&&(n.g.number=String(Math.floor(Number(n.g.number)/100*255)),n.gNode.value=n.g.number);"%"===n.b.unit&&(n.b.number=String(Math.floor(Number(n.b.number)/100*255)),n.bNode.value=n.b.number);l(e[3])&&(n.slash=e[3]);(t(e[4])||u(e[4])||a(e[4]))&&(n.alpha=e[4]);return n}(i)),!s)return;if(i.length>3&&(!s.slash||!s.alpha))return;!function(e,n,t){"hsl"===e.value||"hsla"===e.value?e.value="hsl":"rgb"!==e.value&&"rgba"!==e.value||(e.value="rgb");if(!n||!t)return;"hsl"===e.value?e.value="hsla":e.value="rgba";if(n.value=",",n.before="",!function(e){if(!e||"word"!==e.type)return!1;if(!o(e))return!1;const n=r.default.unit(e.value);if(!n)return!1;return!!n.number}(t))return;const u=r.default.unit(t.value);if(!u)return;"%"===u.unit&&(u.number=String(parseFloat(u.number)/100),t.value=String(u.number))}(e,s.slash,s.alpha);const[f,c]=function(e){if(function(e){if(void 0!==e.r)return!0;return!1}(e))return[e.rNode,e.gNode,e.bNode];return[e.hNode,e.sNode,e.lNode]}(s);e.nodes.splice(e.nodes.indexOf(f)+1,0,{sourceIndex:0,sourceEndIndex:1,value:",",type:"div",before:"",after:""}),e.nodes.splice(e.nodes.indexOf(c)+1,0,{sourceIndex:0,sourceEndIndex:1,value:",",type:"div",before:"",after:""})}function t(e){if(!e||"word"!==e.type)return!1;if(!o(e))return!1;const n=r.default.unit(e.value);return!!n&&("%"===n.unit||""===n.unit)}function u(e){return e&&"function"===e.type&&"calc"===e.value}function a(e){return e&&"function"===e.type&&"var"===e.value}function l(e){return e&&"div"===e.type&&"/"===e.value}function o(e){if(!e||!e.value)return!1;try{return!1!==r.default.unit(e.value)}catch(e){return!1}}const i=e=>{const t="preserve"in Object(e)&&Boolean(e.preserve);return{postcssPlugin:"postcss-color-functional-notation",Declaration:(e,{result:u,postcss:a})=>{if(t&&function(e){let r=e.parent;for(;r;)if("atrule"===r.type){if("supports"===r.name&&-1!==r.params.indexOf("(color: rgb(0 0 0 / 0.5)) and (color: hsl(0 0% 0% / 0.5))"))return!0;r=r.parent}else r=r.parent;return!1}(e))return;const l=e.value;if(!/(^|[^\w-])(hsla?|rgba?)\(/i.test(l))return;let o;try{o=r.default(l)}catch(r){e.warn(u,`Failed to parse value '${l}' as a hsl or rgb function. Leaving the original value intact.`)}if(void 0===o)return;o.walk((e=>{e.type&&"function"===e.type&&("hsl"!==e.value&&"hsla"!==e.value&&"rgb"!==e.value&&"rgba"!==e.value||n(e))}));const i=String(o);if(i!==l)if(t&&e.variable){const r=e.parent,n="(color: rgb(0 0 0 / 0.5)) and (color: hsl(0 0% 0% / 0.5))",t=a.atRule({name:"supports",params:n,source:e.source}),u=r.clone();u.removeAll(),u.append(e.clone()),t.append(u);let l=r,o=r.next();for(;l&&o&&"atrule"===o.type&&"supports"===o.name&&o.params===n;)l=o,o=o.next();l.after(t),e.value=i}else t?e.cloneBefore({value:i}):e.value=i}}};i.postcss=!0,module.exports=i;
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../src/on-css-function.ts","../src/index.ts","../src/has-supports-at-rule-ancestor.ts"],"sourcesContent":["import valueParser from 'postcss-value-parser';\nimport type { FunctionNode, Dimension, Node, DivNode, WordNode } from 'postcss-value-parser';\n\nfunction onCSSFunction(node: FunctionNode) {\n\tconst value = node.value;\n\tconst rawNodes = node.nodes;\n\tconst relevantNodes = rawNodes.slice().filter((x) => {\n\t\treturn x.type !== 'comment' && x.type !== 'space';\n\t});\n\n\tlet nodes: Rgb | Hsl | null = null;\n\tif (value === 'hsl' || value === 'hsla') {\n\t\tnodes = hslFunctionContents(relevantNodes);\n\t} else if (value === 'rgb' || value === 'rgba') {\n\t\tnodes = rgbFunctionContents(relevantNodes);\n\t}\n\n\tif (!nodes) {\n\t\treturn;\n\t}\n\n\tif (relevantNodes.length > 3 && (!nodes.slash || !nodes.alpha)) {\n\t\treturn;\n\t}\n\n\ttransformAlpha(node, nodes.slash, nodes.alpha);\n\n\t/** Extracted Color channels. */\n\tconst [channelNode1, channelNode2] = channelNodes(nodes);\n\n\tnode.nodes.splice(node.nodes.indexOf(channelNode1) + 1, 0, commaNode());\n\tnode.nodes.splice(node.nodes.indexOf(channelNode2) + 1, 0, commaNode());\n}\n\nexport default onCSSFunction;\n\nfunction commaNode(): DivNode {\n\treturn {\n\t\tsourceIndex: 0,\n\t\tsourceEndIndex: 1,\n\t\tvalue: ',',\n\t\ttype: 'div',\n\t\tbefore: '',\n\t\tafter: '',\n\t};\n}\n\nfunction isNumericNode(node: Node): node is WordNode {\n\tif (!node || node.type !== 'word') {\n\t\treturn false;\n\t}\n\n\tif (!canParseAsUnit(node)) {\n\t\treturn false;\n\t}\n\n\tconst unitAndValue = valueParser.unit(node.value);\n\tif (!unitAndValue) {\n\t\treturn false;\n\t}\n\n\treturn !!unitAndValue.number;\n}\n\nfunction isNumericNodeHueLike(node: Node): node is WordNode {\n\tif (!node || node.type !== 'word') {\n\t\treturn false;\n\t}\n\n\tif (!canParseAsUnit(node)) {\n\t\treturn false;\n\t}\n\n\tconst unitAndValue = valueParser.unit(node.value);\n\tif (!unitAndValue) {\n\t\treturn false;\n\t}\n\n\treturn !!unitAndValue.number && (\n\t\tunitAndValue.unit === 'deg' ||\n\t\tunitAndValue.unit === 'grad' ||\n\t\tunitAndValue.unit === 'rad' ||\n\t\tunitAndValue.unit === 'turn' ||\n\t\tunitAndValue.unit === ''\n\t);\n}\n\nfunction isNumericNodePercentageOrNumber(node: Node): node is WordNode {\n\tif (!node || node.type !== 'word') {\n\t\treturn false;\n\t}\n\n\tif (!canParseAsUnit(node)) {\n\t\treturn false;\n\t}\n\n\tconst unitAndValue = valueParser.unit(node.value);\n\tif (!unitAndValue) {\n\t\treturn false;\n\t}\n\n\treturn unitAndValue.unit === '%' || unitAndValue.unit === '';\n}\n\nfunction isCalcNode(node: Node): node is FunctionNode {\n\treturn node && node.type === 'function' && node.value === 'calc';\n}\n\nfunction isVarNode(node: Node): node is FunctionNode {\n\treturn node && node.type === 'function' && node.value === 'var';\n}\n\nfunction isSlashNode(node: Node): node is DivNode {\n\treturn node && node.type === 'div' && node.value === '/';\n}\n\ntype Hsl = {\n\th: Dimension,\n\thNode: Node,\n\ts: Dimension,\n\tsNode: Node,\n\tl: Dimension,\n\tlNode: Node,\n\tslash?: DivNode,\n\talpha?: WordNode|FunctionNode,\n}\n\nfunction hslFunctionContents(nodes): Hsl|null {\n\tif (!isNumericNodeHueLike(nodes[0])) {\n\t\treturn null;\n\t}\n\n\tif (!isNumericNodePercentageOrNumber(nodes[1])) {\n\t\treturn null;\n\t}\n\n\tif (!isNumericNodePercentageOrNumber(nodes[2])) {\n\t\treturn null;\n\t}\n\n\tconst out: Hsl = {\n\t\th: valueParser.unit(nodes[0].value) as Dimension,\n\t\thNode: nodes[0],\n\t\ts: valueParser.unit(nodes[1].value) as Dimension,\n\t\tsNode: nodes[1],\n\t\tl: valueParser.unit(nodes[2].value) as Dimension,\n\t\tlNode: nodes[2],\n\t};\n\n\tnormalizeHueNode(out.h);\n\tif (out.h.unit !== '') {\n\t\treturn null;\n\t}\n\n\tout.hNode.value = out.h.number;\n\n\tif (isSlashNode(nodes[3])) {\n\t\tout.slash = nodes[3];\n\t}\n\n\tif ((isNumericNodePercentageOrNumber(nodes[4]) || isCalcNode(nodes[4]) || isVarNode(nodes[4]))) {\n\t\tout.alpha = nodes[4];\n\t}\n\n\treturn out;\n}\n\ntype Rgb = {\n\tr: Dimension,\n\trNode: Node,\n\tg: Dimension,\n\tgNode: Node,\n\tb: Dimension,\n\tbNode: Node,\n\tslash?: DivNode,\n\talpha?: WordNode | FunctionNode,\n}\n\nfunction rgbFunctionContents(nodes): Rgb|null {\n\tif (!isNumericNodePercentageOrNumber(nodes[0])) {\n\t\treturn null;\n\t}\n\n\tif (!isNumericNodePercentageOrNumber(nodes[1])) {\n\t\treturn null;\n\t}\n\n\tif (!isNumericNodePercentageOrNumber(nodes[2])) {\n\t\treturn null;\n\t}\n\n\tconst out: Rgb = {\n\t\tr: valueParser.unit(nodes[0].value) as Dimension,\n\t\trNode: nodes[0],\n\t\tg: valueParser.unit(nodes[1].value) as Dimension,\n\t\tgNode: nodes[1],\n\t\tb: valueParser.unit(nodes[2].value) as Dimension,\n\t\tbNode: nodes[2],\n\t};\n\n\tif (out.r.unit === '%') {\n\t\tout.r.number = String(Math.floor(Number(out.r.number) / 100 * 255));\n\t\tout.rNode.value = out.r.number;\n\t}\n\n\tif (out.g.unit === '%') {\n\t\tout.g.number = String(Math.floor(Number(out.g.number) / 100 * 255));\n\t\tout.gNode.value = out.g.number;\n\t}\n\n\tif (out.b.unit === '%') {\n\t\tout.b.number = String(Math.floor(Number(out.b.number) / 100 * 255));\n\t\tout.bNode.value = out.b.number;\n\t}\n\n\tif (isSlashNode(nodes[3])) {\n\t\tout.slash = nodes[3];\n\t}\n\n\tif ((isNumericNodePercentageOrNumber(nodes[4]) || isCalcNode(nodes[4]) || isVarNode(nodes[4]))) {\n\t\tout.alpha = nodes[4];\n\t}\n\n\treturn out;\n}\n\nfunction isRgb(x: Hsl | Rgb): x is Rgb {\n\tif (typeof (x as Rgb).r !== 'undefined') {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction channelNodes(x: Hsl | Rgb): [Node, Node, Node] {\n\tif (isRgb(x)) {\n\t\treturn [x.rNode, x.gNode, x.bNode];\n\t}\n\n\treturn [x.hNode, x.sNode, x.lNode];\n}\n\nfunction transformAlpha(node: FunctionNode, slashNode: DivNode | undefined, alphaNode: WordNode | FunctionNode | undefined) {\n\tif (node.value === 'hsl' || node.value === 'hsla') {\n\t\tnode.value = 'hsl';\n\t} else if (node.value === 'rgb' || node.value === 'rgba') {\n\t\tnode.value = 'rgb';\n\t}\n\n\tif (!slashNode || !alphaNode) {\n\t\treturn;\n\t}\n\n\tif (node.value === 'hsl') {\n\t\tnode.value = 'hsla';\n\t} else {\n\t\tnode.value = 'rgba';\n\t}\n\n\tslashNode.value = ',';\n\tslashNode.before = '';\n\n\tif (!isNumericNode(alphaNode)) {\n\t\treturn;\n\t}\n\n\tconst unitAndValue = valueParser.unit(alphaNode.value);\n\tif (!unitAndValue) {\n\t\treturn;\n\t}\n\n\tif (unitAndValue.unit === '%') {\n\t\t// transform the Alpha channel from a Percentage to (0-1) Number\n\t\tunitAndValue.number = String(parseFloat(unitAndValue.number) / 100);\n\t\talphaNode.value = String(unitAndValue.number);\n\t}\n}\n\nfunction normalizeHueNode(dimension: Dimension) {\n\tswitch (dimension.unit) {\n\t\tcase 'deg':\n\t\t\tdimension.unit = '';\n\t\t\treturn;\n\t\tcase 'rad':\n\t\t\t// radians -> degrees\n\t\t\tdimension.unit = '';\n\t\t\tdimension.number = Math.round(parseFloat(dimension.number) * 180 / Math.PI).toString();\n\t\t\treturn;\n\n\t\tcase 'grad':\n\t\t\t// grades -> degrees\n\t\t\tdimension.unit = '';\n\t\t\tdimension.number = Math.round(parseFloat(dimension.number) * 0.9).toString();\n\t\t\treturn;\n\n\t\tcase 'turn':\n\t\t\t// turns -> degrees\n\t\t\tdimension.unit = '';\n\t\t\tdimension.number = Math.round(parseFloat(dimension.number) * 360).toString();\n\t\t\treturn;\n\t}\n}\n\nfunction canParseAsUnit(node : Node): boolean {\n\tif (!node || !node.value) {\n\t\treturn false;\n\t}\n\n\ttry {\n\t\treturn valueParser.unit(node.value) !== false;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}\n","import valueParser from 'postcss-value-parser';\nimport type { ParsedValue, FunctionNode } from 'postcss-value-parser';\nimport type { Declaration, Postcss, Result } from 'postcss';\nimport onCSSFunction from './on-css-function';\n\nimport type { PluginCreator } from 'postcss';\nimport { hasSupportsAtRuleAncestor } from './has-supports-at-rule-ancestor';\n\n/** Transform lab() and lch() functions in CSS. */\nconst postcssPlugin: PluginCreator<{ preserve: boolean }> = (opts?: { preserve: boolean }) => {\n\tconst preserve = 'preserve' in Object(opts) ? Boolean(opts.preserve) : false;\n\n\treturn {\n\t\tpostcssPlugin: 'postcss-color-functional-notation',\n\t\tDeclaration: (decl: Declaration, { result, postcss }: { result: Result, postcss: Postcss }) => {\n\t\t\tif (preserve && hasSupportsAtRuleAncestor(decl)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst originalValue = decl.value;\n\t\t\tif (!(/(^|[^\\w-])(hsla?|rgba?)\\(/i.test(originalValue))) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet valueAST: ParsedValue|undefined;\n\n\t\t\ttry {\n\t\t\t\tvalueAST = valueParser(originalValue);\n\t\t\t} catch (error) {\n\t\t\t\tdecl.warn(\n\t\t\t\t\tresult,\n\t\t\t\t\t`Failed to parse value '${originalValue}' as a hsl or rgb function. Leaving the original value intact.`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (typeof valueAST === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvalueAST.walk((node) => {\n\t\t\t\tif (!node.type || node.type !== 'function') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tnode.value !== 'hsl' &&\n\t\t\t\t\tnode.value !== 'hsla' &&\n\t\t\t\t\tnode.value !== 'rgb' &&\n\t\t\t\t\tnode.value !== 'rgba'\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tonCSSFunction(node as FunctionNode);\n\t\t\t});\n\t\t\tconst modifiedValue = String(valueAST);\n\n\t\t\tif (modifiedValue === originalValue) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (preserve && decl.variable) {\n\t\t\t\tconst parent = decl.parent;\n\t\t\t\tconst atSupportsParams = '(color: rgb(0 0 0 / 0.5)) and (color: hsl(0 0% 0% / 0.5))';\n\t\t\t\tconst atSupports = postcss.atRule({ name: 'supports', params: atSupportsParams, source: decl.source });\n\n\t\t\t\tconst parentClone = parent.clone();\n\t\t\t\tparentClone.removeAll();\n\n\t\t\t\tparentClone.append(decl.clone());\n\t\t\t\tatSupports.append(parentClone);\n\n\t\t\t\t// Ensure correct order of @supports rules\n\t\t\t\t// Find the last one created by us or the current parent and insert after.\n\t\t\t\tlet insertAfter = parent;\n\t\t\t\tlet nextInsertAfter = parent.next();\n\t\t\t\twhile (\n\t\t\t\t\tinsertAfter &&\n\t\t\t\t\tnextInsertAfter &&\n\t\t\t\t\tnextInsertAfter.type === 'atrule' &&\n\t\t\t\t\tnextInsertAfter.name === 'supports' &&\n\t\t\t\t\tnextInsertAfter.params === atSupportsParams\n\t\t\t\t) {\n\t\t\t\t\tinsertAfter = nextInsertAfter;\n\t\t\t\t\tnextInsertAfter = nextInsertAfter.next();\n\t\t\t\t}\n\n\t\t\t\tinsertAfter.after(atSupports);\n\n\t\t\t\tdecl.value = modifiedValue;\n\t\t\t} else if (preserve) {\n\t\t\t\tdecl.cloneBefore({ value: modifiedValue });\n\t\t\t} else {\n\t\t\t\tdecl.value = modifiedValue;\n\t\t\t}\n\t\t},\n\t};\n};\n\npostcssPlugin.postcss = true;\n\nexport default postcssPlugin;\n","import type { Node, AtRule } from 'postcss';\n\nexport function hasSupportsAtRuleAncestor(node: Node): boolean {\n\tlet parent = node.parent;\n\twhile (parent) {\n\t\tif (parent.type !== 'atrule') {\n\t\t\tparent = parent.parent;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif ((parent as AtRule).name === 'supports' && (parent as AtRule).params.indexOf('(color: rgb(0 0 0 / 0.5)) and (color: hsl(0 0% 0% / 0.5))') !== -1) {\n\t\t\treturn true;\n\t\t}\n\n\t\tparent = parent.parent;\n\t}\n\n\treturn false;\n}\n"],"names":["onCSSFunction","node","value","relevantNodes","nodes","slice","filter","x","type","canParseAsUnit","unitAndValue","valueParser","unit","number","isNumericNodeHueLike","isNumericNodePercentageOrNumber","out","h","hNode","s","sNode","l","lNode","dimension","Math","round","parseFloat","PI","toString","normalizeHueNode","isSlashNode","slash","isCalcNode","isVarNode","alpha","hslFunctionContents","r","rNode","g","gNode","b","bNode","String","floor","Number","rgbFunctionContents","length","slashNode","alphaNode","before","isNumericNode","transformAlpha","channelNode1","channelNode2","isRgb","channelNodes","splice","indexOf","sourceIndex","sourceEndIndex","after","e","postcssPlugin","opts","preserve","Object","Boolean","Declaration","decl","result","postcss","parent","name","params","hasSupportsAtRuleAncestor","originalValue","test","valueAST","error","warn","walk","modifiedValue","variable","atSupportsParams","atSupports","atRule","source","parentClone","clone","removeAll","append","insertAfter","nextInsertAfter","next","cloneBefore"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { PluginCreator } from 'postcss';
2
+ /** Transform lab() and lch() functions in CSS. */
3
+ declare const postcssPlugin: PluginCreator<{
4
+ preserve: boolean;
5
+ }>;
6
+ export default postcssPlugin;
package/dist/index.mjs ADDED
@@ -0,0 +1,2 @@
1
+ import e from"postcss-value-parser";function r(r){const o=r.value,i=r.nodes.slice().filter((e=>"comment"!==e.type&&"space"!==e.type));let s=null;if("hsl"===o||"hsla"===o?s=function(r){if(!function(r){if(!r||"word"!==r.type)return!1;if(!l(r))return!1;const n=e.unit(r.value);if(!n)return!1;return!!n.number&&("deg"===n.unit||"grad"===n.unit||"rad"===n.unit||"turn"===n.unit||""===n.unit)}(r[0]))return null;if(!n(r[1]))return null;if(!n(r[2]))return null;const o={h:e.unit(r[0].value),hNode:r[0],s:e.unit(r[1].value),sNode:r[1],l:e.unit(r[2].value),lNode:r[2]};if(function(e){switch(e.unit){case"deg":return void(e.unit="");case"rad":return e.unit="",void(e.number=Math.round(180*parseFloat(e.number)/Math.PI).toString());case"grad":return e.unit="",void(e.number=Math.round(.9*parseFloat(e.number)).toString());case"turn":e.unit="",e.number=Math.round(360*parseFloat(e.number)).toString()}}(o.h),""!==o.h.unit)return null;o.hNode.value=o.h.number,a(r[3])&&(o.slash=r[3]);(n(r[4])||t(r[4])||u(r[4]))&&(o.alpha=r[4]);return o}(i):"rgb"!==o&&"rgba"!==o||(s=function(r){if(!n(r[0]))return null;if(!n(r[1]))return null;if(!n(r[2]))return null;const l={r:e.unit(r[0].value),rNode:r[0],g:e.unit(r[1].value),gNode:r[1],b:e.unit(r[2].value),bNode:r[2]};"%"===l.r.unit&&(l.r.number=String(Math.floor(Number(l.r.number)/100*255)),l.rNode.value=l.r.number);"%"===l.g.unit&&(l.g.number=String(Math.floor(Number(l.g.number)/100*255)),l.gNode.value=l.g.number);"%"===l.b.unit&&(l.b.number=String(Math.floor(Number(l.b.number)/100*255)),l.bNode.value=l.b.number);a(r[3])&&(l.slash=r[3]);(n(r[4])||t(r[4])||u(r[4]))&&(l.alpha=r[4]);return l}(i)),!s)return;if(i.length>3&&(!s.slash||!s.alpha))return;!function(r,n,t){"hsl"===r.value||"hsla"===r.value?r.value="hsl":"rgb"!==r.value&&"rgba"!==r.value||(r.value="rgb");if(!n||!t)return;"hsl"===r.value?r.value="hsla":r.value="rgba";if(n.value=",",n.before="",!function(r){if(!r||"word"!==r.type)return!1;if(!l(r))return!1;const n=e.unit(r.value);if(!n)return!1;return!!n.number}(t))return;const u=e.unit(t.value);if(!u)return;"%"===u.unit&&(u.number=String(parseFloat(u.number)/100),t.value=String(u.number))}(r,s.slash,s.alpha);const[c,f]=function(e){if(function(e){if(void 0!==e.r)return!0;return!1}(e))return[e.rNode,e.gNode,e.bNode];return[e.hNode,e.sNode,e.lNode]}(s);r.nodes.splice(r.nodes.indexOf(c)+1,0,{sourceIndex:0,sourceEndIndex:1,value:",",type:"div",before:"",after:""}),r.nodes.splice(r.nodes.indexOf(f)+1,0,{sourceIndex:0,sourceEndIndex:1,value:",",type:"div",before:"",after:""})}function n(r){if(!r||"word"!==r.type)return!1;if(!l(r))return!1;const n=e.unit(r.value);return!!n&&("%"===n.unit||""===n.unit)}function t(e){return e&&"function"===e.type&&"calc"===e.value}function u(e){return e&&"function"===e.type&&"var"===e.value}function a(e){return e&&"div"===e.type&&"/"===e.value}function l(r){if(!r||!r.value)return!1;try{return!1!==e.unit(r.value)}catch(e){return!1}}const o=n=>{const t="preserve"in Object(n)&&Boolean(n.preserve);return{postcssPlugin:"postcss-color-functional-notation",Declaration:(n,{result:u,postcss:a})=>{if(t&&function(e){let r=e.parent;for(;r;)if("atrule"===r.type){if("supports"===r.name&&-1!==r.params.indexOf("(color: rgb(0 0 0 / 0.5)) and (color: hsl(0 0% 0% / 0.5))"))return!0;r=r.parent}else r=r.parent;return!1}(n))return;const l=n.value;if(!/(^|[^\w-])(hsla?|rgba?)\(/i.test(l))return;let o;try{o=e(l)}catch(e){n.warn(u,`Failed to parse value '${l}' as a hsl or rgb function. Leaving the original value intact.`)}if(void 0===o)return;o.walk((e=>{e.type&&"function"===e.type&&("hsl"!==e.value&&"hsla"!==e.value&&"rgb"!==e.value&&"rgba"!==e.value||r(e))}));const i=String(o);if(i!==l)if(t&&n.variable){const e=n.parent,r="(color: rgb(0 0 0 / 0.5)) and (color: hsl(0 0% 0% / 0.5))",t=a.atRule({name:"supports",params:r,source:n.source}),u=e.clone();u.removeAll(),u.append(n.clone()),t.append(u);let l=e,o=e.next();for(;l&&o&&"atrule"===o.type&&"supports"===o.name&&o.params===r;)l=o,o=o.next();l.after(t),n.value=i}else t?n.cloneBefore({value:i}):n.value=i}}};o.postcss=!0;export{o as default};
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../src/on-css-function.ts","../src/index.ts","../src/has-supports-at-rule-ancestor.ts"],"sourcesContent":["import valueParser from 'postcss-value-parser';\nimport type { FunctionNode, Dimension, Node, DivNode, WordNode } from 'postcss-value-parser';\n\nfunction onCSSFunction(node: FunctionNode) {\n\tconst value = node.value;\n\tconst rawNodes = node.nodes;\n\tconst relevantNodes = rawNodes.slice().filter((x) => {\n\t\treturn x.type !== 'comment' && x.type !== 'space';\n\t});\n\n\tlet nodes: Rgb | Hsl | null = null;\n\tif (value === 'hsl' || value === 'hsla') {\n\t\tnodes = hslFunctionContents(relevantNodes);\n\t} else if (value === 'rgb' || value === 'rgba') {\n\t\tnodes = rgbFunctionContents(relevantNodes);\n\t}\n\n\tif (!nodes) {\n\t\treturn;\n\t}\n\n\tif (relevantNodes.length > 3 && (!nodes.slash || !nodes.alpha)) {\n\t\treturn;\n\t}\n\n\ttransformAlpha(node, nodes.slash, nodes.alpha);\n\n\t/** Extracted Color channels. */\n\tconst [channelNode1, channelNode2] = channelNodes(nodes);\n\n\tnode.nodes.splice(node.nodes.indexOf(channelNode1) + 1, 0, commaNode());\n\tnode.nodes.splice(node.nodes.indexOf(channelNode2) + 1, 0, commaNode());\n}\n\nexport default onCSSFunction;\n\nfunction commaNode(): DivNode {\n\treturn {\n\t\tsourceIndex: 0,\n\t\tsourceEndIndex: 1,\n\t\tvalue: ',',\n\t\ttype: 'div',\n\t\tbefore: '',\n\t\tafter: '',\n\t};\n}\n\nfunction isNumericNode(node: Node): node is WordNode {\n\tif (!node || node.type !== 'word') {\n\t\treturn false;\n\t}\n\n\tif (!canParseAsUnit(node)) {\n\t\treturn false;\n\t}\n\n\tconst unitAndValue = valueParser.unit(node.value);\n\tif (!unitAndValue) {\n\t\treturn false;\n\t}\n\n\treturn !!unitAndValue.number;\n}\n\nfunction isNumericNodeHueLike(node: Node): node is WordNode {\n\tif (!node || node.type !== 'word') {\n\t\treturn false;\n\t}\n\n\tif (!canParseAsUnit(node)) {\n\t\treturn false;\n\t}\n\n\tconst unitAndValue = valueParser.unit(node.value);\n\tif (!unitAndValue) {\n\t\treturn false;\n\t}\n\n\treturn !!unitAndValue.number && (\n\t\tunitAndValue.unit === 'deg' ||\n\t\tunitAndValue.unit === 'grad' ||\n\t\tunitAndValue.unit === 'rad' ||\n\t\tunitAndValue.unit === 'turn' ||\n\t\tunitAndValue.unit === ''\n\t);\n}\n\nfunction isNumericNodePercentageOrNumber(node: Node): node is WordNode {\n\tif (!node || node.type !== 'word') {\n\t\treturn false;\n\t}\n\n\tif (!canParseAsUnit(node)) {\n\t\treturn false;\n\t}\n\n\tconst unitAndValue = valueParser.unit(node.value);\n\tif (!unitAndValue) {\n\t\treturn false;\n\t}\n\n\treturn unitAndValue.unit === '%' || unitAndValue.unit === '';\n}\n\nfunction isCalcNode(node: Node): node is FunctionNode {\n\treturn node && node.type === 'function' && node.value === 'calc';\n}\n\nfunction isVarNode(node: Node): node is FunctionNode {\n\treturn node && node.type === 'function' && node.value === 'var';\n}\n\nfunction isSlashNode(node: Node): node is DivNode {\n\treturn node && node.type === 'div' && node.value === '/';\n}\n\ntype Hsl = {\n\th: Dimension,\n\thNode: Node,\n\ts: Dimension,\n\tsNode: Node,\n\tl: Dimension,\n\tlNode: Node,\n\tslash?: DivNode,\n\talpha?: WordNode|FunctionNode,\n}\n\nfunction hslFunctionContents(nodes): Hsl|null {\n\tif (!isNumericNodeHueLike(nodes[0])) {\n\t\treturn null;\n\t}\n\n\tif (!isNumericNodePercentageOrNumber(nodes[1])) {\n\t\treturn null;\n\t}\n\n\tif (!isNumericNodePercentageOrNumber(nodes[2])) {\n\t\treturn null;\n\t}\n\n\tconst out: Hsl = {\n\t\th: valueParser.unit(nodes[0].value) as Dimension,\n\t\thNode: nodes[0],\n\t\ts: valueParser.unit(nodes[1].value) as Dimension,\n\t\tsNode: nodes[1],\n\t\tl: valueParser.unit(nodes[2].value) as Dimension,\n\t\tlNode: nodes[2],\n\t};\n\n\tnormalizeHueNode(out.h);\n\tif (out.h.unit !== '') {\n\t\treturn null;\n\t}\n\n\tout.hNode.value = out.h.number;\n\n\tif (isSlashNode(nodes[3])) {\n\t\tout.slash = nodes[3];\n\t}\n\n\tif ((isNumericNodePercentageOrNumber(nodes[4]) || isCalcNode(nodes[4]) || isVarNode(nodes[4]))) {\n\t\tout.alpha = nodes[4];\n\t}\n\n\treturn out;\n}\n\ntype Rgb = {\n\tr: Dimension,\n\trNode: Node,\n\tg: Dimension,\n\tgNode: Node,\n\tb: Dimension,\n\tbNode: Node,\n\tslash?: DivNode,\n\talpha?: WordNode | FunctionNode,\n}\n\nfunction rgbFunctionContents(nodes): Rgb|null {\n\tif (!isNumericNodePercentageOrNumber(nodes[0])) {\n\t\treturn null;\n\t}\n\n\tif (!isNumericNodePercentageOrNumber(nodes[1])) {\n\t\treturn null;\n\t}\n\n\tif (!isNumericNodePercentageOrNumber(nodes[2])) {\n\t\treturn null;\n\t}\n\n\tconst out: Rgb = {\n\t\tr: valueParser.unit(nodes[0].value) as Dimension,\n\t\trNode: nodes[0],\n\t\tg: valueParser.unit(nodes[1].value) as Dimension,\n\t\tgNode: nodes[1],\n\t\tb: valueParser.unit(nodes[2].value) as Dimension,\n\t\tbNode: nodes[2],\n\t};\n\n\tif (out.r.unit === '%') {\n\t\tout.r.number = String(Math.floor(Number(out.r.number) / 100 * 255));\n\t\tout.rNode.value = out.r.number;\n\t}\n\n\tif (out.g.unit === '%') {\n\t\tout.g.number = String(Math.floor(Number(out.g.number) / 100 * 255));\n\t\tout.gNode.value = out.g.number;\n\t}\n\n\tif (out.b.unit === '%') {\n\t\tout.b.number = String(Math.floor(Number(out.b.number) / 100 * 255));\n\t\tout.bNode.value = out.b.number;\n\t}\n\n\tif (isSlashNode(nodes[3])) {\n\t\tout.slash = nodes[3];\n\t}\n\n\tif ((isNumericNodePercentageOrNumber(nodes[4]) || isCalcNode(nodes[4]) || isVarNode(nodes[4]))) {\n\t\tout.alpha = nodes[4];\n\t}\n\n\treturn out;\n}\n\nfunction isRgb(x: Hsl | Rgb): x is Rgb {\n\tif (typeof (x as Rgb).r !== 'undefined') {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction channelNodes(x: Hsl | Rgb): [Node, Node, Node] {\n\tif (isRgb(x)) {\n\t\treturn [x.rNode, x.gNode, x.bNode];\n\t}\n\n\treturn [x.hNode, x.sNode, x.lNode];\n}\n\nfunction transformAlpha(node: FunctionNode, slashNode: DivNode | undefined, alphaNode: WordNode | FunctionNode | undefined) {\n\tif (node.value === 'hsl' || node.value === 'hsla') {\n\t\tnode.value = 'hsl';\n\t} else if (node.value === 'rgb' || node.value === 'rgba') {\n\t\tnode.value = 'rgb';\n\t}\n\n\tif (!slashNode || !alphaNode) {\n\t\treturn;\n\t}\n\n\tif (node.value === 'hsl') {\n\t\tnode.value = 'hsla';\n\t} else {\n\t\tnode.value = 'rgba';\n\t}\n\n\tslashNode.value = ',';\n\tslashNode.before = '';\n\n\tif (!isNumericNode(alphaNode)) {\n\t\treturn;\n\t}\n\n\tconst unitAndValue = valueParser.unit(alphaNode.value);\n\tif (!unitAndValue) {\n\t\treturn;\n\t}\n\n\tif (unitAndValue.unit === '%') {\n\t\t// transform the Alpha channel from a Percentage to (0-1) Number\n\t\tunitAndValue.number = String(parseFloat(unitAndValue.number) / 100);\n\t\talphaNode.value = String(unitAndValue.number);\n\t}\n}\n\nfunction normalizeHueNode(dimension: Dimension) {\n\tswitch (dimension.unit) {\n\t\tcase 'deg':\n\t\t\tdimension.unit = '';\n\t\t\treturn;\n\t\tcase 'rad':\n\t\t\t// radians -> degrees\n\t\t\tdimension.unit = '';\n\t\t\tdimension.number = Math.round(parseFloat(dimension.number) * 180 / Math.PI).toString();\n\t\t\treturn;\n\n\t\tcase 'grad':\n\t\t\t// grades -> degrees\n\t\t\tdimension.unit = '';\n\t\t\tdimension.number = Math.round(parseFloat(dimension.number) * 0.9).toString();\n\t\t\treturn;\n\n\t\tcase 'turn':\n\t\t\t// turns -> degrees\n\t\t\tdimension.unit = '';\n\t\t\tdimension.number = Math.round(parseFloat(dimension.number) * 360).toString();\n\t\t\treturn;\n\t}\n}\n\nfunction canParseAsUnit(node : Node): boolean {\n\tif (!node || !node.value) {\n\t\treturn false;\n\t}\n\n\ttry {\n\t\treturn valueParser.unit(node.value) !== false;\n\t} catch (e) {\n\t\treturn false;\n\t}\n}\n","import valueParser from 'postcss-value-parser';\nimport type { ParsedValue, FunctionNode } from 'postcss-value-parser';\nimport type { Declaration, Postcss, Result } from 'postcss';\nimport onCSSFunction from './on-css-function';\n\nimport type { PluginCreator } from 'postcss';\nimport { hasSupportsAtRuleAncestor } from './has-supports-at-rule-ancestor';\n\n/** Transform lab() and lch() functions in CSS. */\nconst postcssPlugin: PluginCreator<{ preserve: boolean }> = (opts?: { preserve: boolean }) => {\n\tconst preserve = 'preserve' in Object(opts) ? Boolean(opts.preserve) : false;\n\n\treturn {\n\t\tpostcssPlugin: 'postcss-color-functional-notation',\n\t\tDeclaration: (decl: Declaration, { result, postcss }: { result: Result, postcss: Postcss }) => {\n\t\t\tif (preserve && hasSupportsAtRuleAncestor(decl)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst originalValue = decl.value;\n\t\t\tif (!(/(^|[^\\w-])(hsla?|rgba?)\\(/i.test(originalValue))) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet valueAST: ParsedValue|undefined;\n\n\t\t\ttry {\n\t\t\t\tvalueAST = valueParser(originalValue);\n\t\t\t} catch (error) {\n\t\t\t\tdecl.warn(\n\t\t\t\t\tresult,\n\t\t\t\t\t`Failed to parse value '${originalValue}' as a hsl or rgb function. Leaving the original value intact.`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (typeof valueAST === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvalueAST.walk((node) => {\n\t\t\t\tif (!node.type || node.type !== 'function') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tnode.value !== 'hsl' &&\n\t\t\t\t\tnode.value !== 'hsla' &&\n\t\t\t\t\tnode.value !== 'rgb' &&\n\t\t\t\t\tnode.value !== 'rgba'\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tonCSSFunction(node as FunctionNode);\n\t\t\t});\n\t\t\tconst modifiedValue = String(valueAST);\n\n\t\t\tif (modifiedValue === originalValue) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (preserve && decl.variable) {\n\t\t\t\tconst parent = decl.parent;\n\t\t\t\tconst atSupportsParams = '(color: rgb(0 0 0 / 0.5)) and (color: hsl(0 0% 0% / 0.5))';\n\t\t\t\tconst atSupports = postcss.atRule({ name: 'supports', params: atSupportsParams, source: decl.source });\n\n\t\t\t\tconst parentClone = parent.clone();\n\t\t\t\tparentClone.removeAll();\n\n\t\t\t\tparentClone.append(decl.clone());\n\t\t\t\tatSupports.append(parentClone);\n\n\t\t\t\t// Ensure correct order of @supports rules\n\t\t\t\t// Find the last one created by us or the current parent and insert after.\n\t\t\t\tlet insertAfter = parent;\n\t\t\t\tlet nextInsertAfter = parent.next();\n\t\t\t\twhile (\n\t\t\t\t\tinsertAfter &&\n\t\t\t\t\tnextInsertAfter &&\n\t\t\t\t\tnextInsertAfter.type === 'atrule' &&\n\t\t\t\t\tnextInsertAfter.name === 'supports' &&\n\t\t\t\t\tnextInsertAfter.params === atSupportsParams\n\t\t\t\t) {\n\t\t\t\t\tinsertAfter = nextInsertAfter;\n\t\t\t\t\tnextInsertAfter = nextInsertAfter.next();\n\t\t\t\t}\n\n\t\t\t\tinsertAfter.after(atSupports);\n\n\t\t\t\tdecl.value = modifiedValue;\n\t\t\t} else if (preserve) {\n\t\t\t\tdecl.cloneBefore({ value: modifiedValue });\n\t\t\t} else {\n\t\t\t\tdecl.value = modifiedValue;\n\t\t\t}\n\t\t},\n\t};\n};\n\npostcssPlugin.postcss = true;\n\nexport default postcssPlugin;\n","import type { Node, AtRule } from 'postcss';\n\nexport function hasSupportsAtRuleAncestor(node: Node): boolean {\n\tlet parent = node.parent;\n\twhile (parent) {\n\t\tif (parent.type !== 'atrule') {\n\t\t\tparent = parent.parent;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif ((parent as AtRule).name === 'supports' && (parent as AtRule).params.indexOf('(color: rgb(0 0 0 / 0.5)) and (color: hsl(0 0% 0% / 0.5))') !== -1) {\n\t\t\treturn true;\n\t\t}\n\n\t\tparent = parent.parent;\n\t}\n\n\treturn false;\n}\n"],"names":["onCSSFunction","node","value","relevantNodes","nodes","slice","filter","x","type","canParseAsUnit","unitAndValue","valueParser","unit","number","isNumericNodeHueLike","isNumericNodePercentageOrNumber","out","h","hNode","s","sNode","l","lNode","dimension","Math","round","parseFloat","PI","toString","normalizeHueNode","isSlashNode","slash","isCalcNode","isVarNode","alpha","hslFunctionContents","r","rNode","g","gNode","b","bNode","String","floor","Number","rgbFunctionContents","length","slashNode","alphaNode","before","isNumericNode","transformAlpha","channelNode1","channelNode2","isRgb","channelNodes","splice","indexOf","sourceIndex","sourceEndIndex","after","e","postcssPlugin","opts","preserve","Object","Boolean","Declaration","decl","result","postcss","parent","name","params","hasSupportsAtRuleAncestor","originalValue","test","valueAST","error","warn","walk","modifiedValue","variable","atSupportsParams","atSupports","atRule","source","parentClone","clone","removeAll","append","insertAfter","nextInsertAfter","next","cloneBefore"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { FunctionNode } from 'postcss-value-parser';
2
+ declare function onCSSFunction(node: FunctionNode): void;
3
+ export default onCSSFunction;
package/package.json CHANGED
@@ -1,77 +1,44 @@
1
1
  {
2
2
  "name": "postcss-color-functional-notation",
3
- "version": "3.0.2",
3
+ "version": "4.1.0",
4
4
  "description": "Use space and slash separated color notation in CSS",
5
5
  "author": "Jonathan Neal <jonathantneal@hotmail.com>",
6
6
  "license": "CC0-1.0",
7
- "repository": "csstools/postcss-color-functional-notation",
8
- "homepage": "https://github.com/csstools/postcss-color-functional-notation#readme",
9
- "bugs": "https://github.com/csstools/postcss-color-functional-notation/issues",
10
- "main": "dist/index.cjs.js",
11
- "module": "dist/index.esm.mjs",
7
+ "homepage": "https://github.com/csstools/postcss-plugins/tree/main/plugins/postcss-color-functional-notation#readme",
8
+ "bugs": "https://github.com/csstools/postcss-plugins/issues",
9
+ "main": "dist/index.cjs",
10
+ "module": "dist/index.mjs",
11
+ "types": "./dist/index.d.ts",
12
12
  "files": [
13
+ "CHANGELOG.md",
14
+ "INSTALL.md",
15
+ "LICENSE.md",
16
+ "README.md",
13
17
  "dist"
14
18
  ],
19
+ "bin": {
20
+ "postcss-color-functional-notation": "dist/cli.mjs"
21
+ },
15
22
  "scripts": {
16
- "build": "npx rollup -c .rollup.js",
17
- "build:watch": "npx rollup -c .rollup.js --watch",
18
- "lint": "npx eslint --cache src",
19
- "lint:fix": "npx eslint --cache --fix",
20
- "pretest": "npm install && npm run build",
21
- "test": "npm run lint && npm run tape",
22
- "tape": "npx postcss-tape",
23
- "prepublishOnly": "npm test"
23
+ "build": "rollup -c ../../rollup/default.js",
24
+ "clean": "node -e \"fs.rmSync('./dist', { recursive: true, force: true });\"",
25
+ "lint": "eslint ./src --ext .js --ext .ts --ext .mjs --no-error-on-unmatched-pattern",
26
+ "prepublishOnly": "npm run clean && npm run build && npm run test",
27
+ "stryker": "stryker run --logLevel error",
28
+ "test": "postcss-tape --ci"
24
29
  },
25
30
  "engines": {
26
- "node": ">=10.0.0"
31
+ "node": "^12 || ^14 || >=16"
27
32
  },
28
33
  "dependencies": {
29
- "postcss": "^7.0.27",
30
- "postcss-values-parser": "^3.2.0"
34
+ "postcss-value-parser": "^4.2.0"
31
35
  },
32
36
  "devDependencies": {
33
- "@babel/core": "^7.9.0",
34
- "@babel/preset-env": "^7.9.5",
35
- "babel-eslint": "^10.1.0",
36
- "eslint": "^6.8.0",
37
- "postcss-tape": "^5.0.2",
38
- "pre-commit": "^1.2.2",
39
- "rollup": "^2.7.2",
40
- "rollup-plugin-babel": "^4.4.0"
41
- },
42
- "babel": {
43
- "presets": [
44
- [
45
- "@babel/env",
46
- {
47
- "targets": "maintained node versions"
48
- }
49
- ]
50
- ]
51
- },
52
- "eslintConfig": {
53
- "env": {
54
- "es6": true,
55
- "node": true
56
- },
57
- "extends": "eslint:recommended",
58
- "parser": "babel-eslint"
37
+ "postcss": "^8.3.6",
38
+ "postcss-tape": "^6.0.1"
59
39
  },
60
- "rollup": {
61
- "input": "src/index.js",
62
- "plugins": [
63
- "rollup-plugin-babel"
64
- ],
65
- "output": [
66
- {
67
- "file": "dist/index.cjs.js",
68
- "format": "cjs"
69
- },
70
- {
71
- "file": "dist/index.esm.js",
72
- "format": "esm"
73
- }
74
- ]
40
+ "peerDependencies": {
41
+ "postcss": "^8.3"
75
42
  },
76
43
  "keywords": [
77
44
  "postcss",
@@ -90,5 +57,13 @@
90
57
  "syntax",
91
58
  "space",
92
59
  "comma"
93
- ]
60
+ ],
61
+ "repository": {
62
+ "type": "git",
63
+ "url": "https://github.com/csstools/postcss-plugins.git",
64
+ "directory": "plugins/postcss-color-functional-notation"
65
+ },
66
+ "volta": {
67
+ "extends": "../../package.json"
68
+ }
94
69
  }
package/dist/index.cjs.js DELETED
@@ -1,218 +0,0 @@
1
- 'use strict';
2
-
3
- function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
4
-
5
- var postcss = _interopDefault(require('postcss'));
6
- var postcssValuesParser = require('postcss-values-parser');
7
-
8
- /** @type {(decl: CSSFunction) => void} Transform a space and slash separated color function. */
9
-
10
- const onCSSFunction = node => {
11
- /** @type {{ name: string, nodes: CSSNode[] }} */
12
- const {
13
- name,
14
- nodes
15
- } = node;
16
-
17
- if (isColorFunctionName(name)) {
18
- const isHsl = isHslColorFunctionName(name) && isHslFunctionContents(nodes);
19
- const isRgbWithNumbers = isRgbColorFunctionName(name) && isRgbNumberFunctionContents(nodes);
20
- const isRgbWithPercents = isRgbColorFunctionName(name) && isRgbPercentFunctionContents(nodes);
21
-
22
- if (name === 'hsl' && !isHsl) {
23
- console.log([name, isHue(nodes[0])], nodes[0]);
24
- }
25
-
26
- if (isHsl || isRgbWithNumbers || isRgbWithPercents) {
27
- // rename the Color function to `hsl` or `rgb`
28
- Object.assign(node, {
29
- name: isHsl ? 'hsl' : 'rgb'
30
- });
31
- /** @type {CSSPunctuation} Slash punctuation before the Alpha channel. */
32
-
33
- const slashNode = nodes[3];
34
- /** @type {CSSNumber} Alpha channel. */
35
-
36
- const alphaNode = nodes[4];
37
-
38
- if (alphaNode) {
39
- if (isPercentage(alphaNode) && !isCalc(alphaNode)) {
40
- // transform the Alpha channel from a Percentage to (0-1) Number
41
- Object.assign(alphaNode, {
42
- value: String(alphaNode.value / 100),
43
- unit: ''
44
- });
45
- } // if the color is fully opaque (i.e. the Alpha channel is `1`)
46
-
47
-
48
- if (alphaNode.value === '1') {
49
- // remove the Slash and Alpha channel
50
- slashNode.remove();
51
- alphaNode.remove();
52
- } else {
53
- // otherwise, rename the Color function to `hsla` or `rgba`
54
- Object.assign(node, {
55
- name: isHsl ? 'hsla' : 'rgba'
56
- });
57
- }
58
- } // replace a remaining Slash with a Comma
59
-
60
-
61
- if (slashNode && isSlash(slashNode)) {
62
- slashNode.replaceWith(commaNode.clone());
63
- }
64
- /** Extracted Color channels. */
65
-
66
-
67
- let [channelNode1, channelNode2, channelNode3] = nodes;
68
-
69
- if (isRgbWithPercents) {
70
- Object.assign(channelNode1, {
71
- value: to255ColorValue(channelNode1.value),
72
- unit: ''
73
- });
74
- Object.assign(channelNode2, {
75
- value: to255ColorValue(channelNode2.value),
76
- unit: ''
77
- });
78
- Object.assign(channelNode3, {
79
- value: to255ColorValue(channelNode3.value),
80
- unit: ''
81
- });
82
- }
83
-
84
- channelNode2.after(commaNode.clone());
85
- channelNode1.after(commaNode.clone());
86
- }
87
- }
88
- };
89
- const commaNode = postcssValuesParser.parse(',').first;
90
- /** Return a value transformed from a scale of 0-100 to a scale of 0-255 */
91
-
92
- function to255ColorValue(value) {
93
- return String(Math.floor(value * 255 / 100));
94
- }
95
- /** @type {(value: RegExp) => (value: string) => boolean} Return a function that checks whether the expression exists in a value. */
96
-
97
-
98
- const createRegExpTest = Function.bind.bind(RegExp.prototype.test);
99
- /** Return whether the function name is `hsl()`, `hsla()`, `rgb()`, or `rgba()`. */
100
-
101
- const isColorFunctionName = createRegExpTest(/^(hsl|rgb)a?$/i);
102
- /** Return whether the function name is `hsl()` or `hsla()`. */
103
-
104
- const isHslColorFunctionName = createRegExpTest(/^hsla?$/i);
105
- /** Return whether the function name is `rgb()` or `rgba()`. */
106
-
107
- const isRgbColorFunctionName = createRegExpTest(/^rgba?$/i);
108
- /** Return whether the function name is `calc`. */
109
-
110
- const isCalcFunctionName = createRegExpTest(/^calc$/i);
111
- /** Return whether the unit is alpha-like. */
112
-
113
- const isAlphaLikeUnit = createRegExpTest(/^%?$/i);
114
- /** Return whether the unit is hue-like. */
115
-
116
- const isHueLikeUnit = createRegExpTest(/^(deg|grad|rad|turn)?$/i);
117
- /** @type {(node: CSSNumber) => boolean} Return whether the node is an Alpha-like unit. */
118
-
119
- const isAlphaValue = node => isCalc(node) || node.type === 'numeric' && isAlphaLikeUnit(node.unit);
120
- /** @type {(node: CSSFunction) => boolean} Return whether the node is a calc() function. */
121
-
122
-
123
- const isCalc = node => node.type === 'func' && isCalcFunctionName(node.name);
124
- /** @type {(node: CSSNumber) => boolean} Return whether the node is a Hue-like unit. */
125
-
126
-
127
- const isHue = node => isCalc(node) || node.type === 'numeric' && isHueLikeUnit(node.unit);
128
- /** @type {(node: CSSNumber) => boolean} Return whether the node is a Number unit. */
129
-
130
-
131
- const isNumber = node => isCalc(node) || node.type === 'numeric' && node.unit === '';
132
- /** @type {(node: CSSNumber) => boolean} Return whether the node is a Percentage unit. */
133
-
134
-
135
- const isPercentage = node => isCalc(node) || node.type === 'numeric' && (node.unit === '%' || node.unit === '' && node.value === '0');
136
- /** @type {(node: CSSOperator) => boolean} Return whether the node is a Slash delimiter. */
137
-
138
-
139
- const isSlash = node => node.type === 'operator' && node.value === '/';
140
- /** @type {(nodes: Node[]) => boolean} Return whether a set of nodes is an hsl() function. */
141
-
142
-
143
- const isHslFunctionContents = nodes => nodes.every((node, index) => typeof hslFunctionContents[index] === 'function' && hslFunctionContents[index](node));
144
- /** Set of nodes in a lab() function. */
145
-
146
-
147
- const hslFunctionContents = [isHue, isPercentage, isPercentage, isSlash, isAlphaValue];
148
- /** @type {(nodes: Node[]) => boolean} Return whether a set of nodes is an rgb() function with numbers. */
149
-
150
- const isRgbNumberFunctionContents = nodes => nodes.every((node, index) => typeof rgbNumberFunctionContents[index] === 'function' && rgbNumberFunctionContents[index](node));
151
- /** Set of nodes in a rgb() function with numbers. */
152
-
153
-
154
- const rgbNumberFunctionContents = [isNumber, isNumber, isNumber, isSlash, isAlphaValue];
155
- /** @type {(nodes: Node[]) => boolean} Return whether a set of nodes is an rgb() function with percentages. */
156
-
157
- const isRgbPercentFunctionContents = nodes => nodes.every((node, index) => typeof rgbPercentFunctionContents[index] === 'function' && rgbPercentFunctionContents[index](node));
158
- /** Set of nodes in a rgb() function with percentages. */
159
-
160
-
161
- const rgbPercentFunctionContents = [isPercentage, isPercentage, isPercentage, isSlash, isAlphaValue];
162
- /** @typedef {import('postcss-values-parser').Func} CSSFunction */
163
-
164
- /** @typedef {import('postcss-values-parser').Node} CSSNode */
165
-
166
- /** @typedef {import('postcss-values-parser').Numeric} CSSNumber */
167
-
168
- /** @typedef {import('postcss-values-parser').Operator} CSSOperator */
169
-
170
- /** @typedef {import('postcss-values-parser').Punctuation} CSSPunctuation */
171
-
172
- var options = {
173
- /** Whether to preserve the original functional color declaration. */
174
- preserve: false
175
- };
176
-
177
- /** @type {(decl: CSSDeclaration) => void} Transform space and slash separated color functions in CSS Declarations. */
178
-
179
- const onCSSDeclaration = decl => {
180
- const {
181
- value: originalValue
182
- } = decl;
183
-
184
- if (hasAnyColorFunction(originalValue)) {
185
- const valueAST = postcssValuesParser.parse(originalValue);
186
- valueAST.walkType('func', onCSSFunction);
187
- const modifiedValue = String(valueAST);
188
-
189
- if (modifiedValue !== originalValue) {
190
- if (options.preserve) decl.cloneBefore({
191
- value: modifiedValue
192
- });else decl.value = modifiedValue;
193
- }
194
- }
195
- };
196
- /** @type {(value: RegExp) => (value: string) => boolean} Return a function that checks whether the expression exists in a value. */
197
-
198
- const createRegExpTest$1 = Function.bind.bind(RegExp.prototype.test);
199
- /** Return whether the value has an `hsl()`, `hsla()`, `rgb()`, or `rgba()` function. */
200
-
201
- const hasAnyColorFunction = createRegExpTest$1(/(^|[^\w-])(hsla?|rgba?)\(/i);
202
- /** @typedef {import('postcss').Declaration} CSSDeclaration */
203
-
204
- /** Transform space and slash separated color functions in CSS. */
205
-
206
- const postcssPlugin = postcss.plugin('postcss-color-functional-notation', opts => {
207
- options.preserve = 'preserve' in Object(opts) ? Boolean(opts.preserve) : false;
208
- return root => {
209
- root.walkDecls(onCSSDeclaration);
210
- };
211
- });
212
- /** @typedef {import('postcss').Root} CSSRoot */
213
-
214
- /** @typedef {(root: CSSRoot) => void} PostCSSTransformCallback */
215
-
216
- /** @typedef {(opts: options) => PostCSSTransformCallback} PostCSSPluginInitializer */
217
-
218
- module.exports = postcssPlugin;
package/dist/index.esm.js DELETED
@@ -1,214 +0,0 @@
1
- import postcss from 'postcss';
2
- import { parse } from 'postcss-values-parser';
3
-
4
- /** @type {(decl: CSSFunction) => void} Transform a space and slash separated color function. */
5
-
6
- const onCSSFunction = node => {
7
- /** @type {{ name: string, nodes: CSSNode[] }} */
8
- const {
9
- name,
10
- nodes
11
- } = node;
12
-
13
- if (isColorFunctionName(name)) {
14
- const isHsl = isHslColorFunctionName(name) && isHslFunctionContents(nodes);
15
- const isRgbWithNumbers = isRgbColorFunctionName(name) && isRgbNumberFunctionContents(nodes);
16
- const isRgbWithPercents = isRgbColorFunctionName(name) && isRgbPercentFunctionContents(nodes);
17
-
18
- if (name === 'hsl' && !isHsl) {
19
- console.log([name, isHue(nodes[0])], nodes[0]);
20
- }
21
-
22
- if (isHsl || isRgbWithNumbers || isRgbWithPercents) {
23
- // rename the Color function to `hsl` or `rgb`
24
- Object.assign(node, {
25
- name: isHsl ? 'hsl' : 'rgb'
26
- });
27
- /** @type {CSSPunctuation} Slash punctuation before the Alpha channel. */
28
-
29
- const slashNode = nodes[3];
30
- /** @type {CSSNumber} Alpha channel. */
31
-
32
- const alphaNode = nodes[4];
33
-
34
- if (alphaNode) {
35
- if (isPercentage(alphaNode) && !isCalc(alphaNode)) {
36
- // transform the Alpha channel from a Percentage to (0-1) Number
37
- Object.assign(alphaNode, {
38
- value: String(alphaNode.value / 100),
39
- unit: ''
40
- });
41
- } // if the color is fully opaque (i.e. the Alpha channel is `1`)
42
-
43
-
44
- if (alphaNode.value === '1') {
45
- // remove the Slash and Alpha channel
46
- slashNode.remove();
47
- alphaNode.remove();
48
- } else {
49
- // otherwise, rename the Color function to `hsla` or `rgba`
50
- Object.assign(node, {
51
- name: isHsl ? 'hsla' : 'rgba'
52
- });
53
- }
54
- } // replace a remaining Slash with a Comma
55
-
56
-
57
- if (slashNode && isSlash(slashNode)) {
58
- slashNode.replaceWith(commaNode.clone());
59
- }
60
- /** Extracted Color channels. */
61
-
62
-
63
- let [channelNode1, channelNode2, channelNode3] = nodes;
64
-
65
- if (isRgbWithPercents) {
66
- Object.assign(channelNode1, {
67
- value: to255ColorValue(channelNode1.value),
68
- unit: ''
69
- });
70
- Object.assign(channelNode2, {
71
- value: to255ColorValue(channelNode2.value),
72
- unit: ''
73
- });
74
- Object.assign(channelNode3, {
75
- value: to255ColorValue(channelNode3.value),
76
- unit: ''
77
- });
78
- }
79
-
80
- channelNode2.after(commaNode.clone());
81
- channelNode1.after(commaNode.clone());
82
- }
83
- }
84
- };
85
- const commaNode = parse(',').first;
86
- /** Return a value transformed from a scale of 0-100 to a scale of 0-255 */
87
-
88
- function to255ColorValue(value) {
89
- return String(Math.floor(value * 255 / 100));
90
- }
91
- /** @type {(value: RegExp) => (value: string) => boolean} Return a function that checks whether the expression exists in a value. */
92
-
93
-
94
- const createRegExpTest = Function.bind.bind(RegExp.prototype.test);
95
- /** Return whether the function name is `hsl()`, `hsla()`, `rgb()`, or `rgba()`. */
96
-
97
- const isColorFunctionName = createRegExpTest(/^(hsl|rgb)a?$/i);
98
- /** Return whether the function name is `hsl()` or `hsla()`. */
99
-
100
- const isHslColorFunctionName = createRegExpTest(/^hsla?$/i);
101
- /** Return whether the function name is `rgb()` or `rgba()`. */
102
-
103
- const isRgbColorFunctionName = createRegExpTest(/^rgba?$/i);
104
- /** Return whether the function name is `calc`. */
105
-
106
- const isCalcFunctionName = createRegExpTest(/^calc$/i);
107
- /** Return whether the unit is alpha-like. */
108
-
109
- const isAlphaLikeUnit = createRegExpTest(/^%?$/i);
110
- /** Return whether the unit is hue-like. */
111
-
112
- const isHueLikeUnit = createRegExpTest(/^(deg|grad|rad|turn)?$/i);
113
- /** @type {(node: CSSNumber) => boolean} Return whether the node is an Alpha-like unit. */
114
-
115
- const isAlphaValue = node => isCalc(node) || node.type === 'numeric' && isAlphaLikeUnit(node.unit);
116
- /** @type {(node: CSSFunction) => boolean} Return whether the node is a calc() function. */
117
-
118
-
119
- const isCalc = node => node.type === 'func' && isCalcFunctionName(node.name);
120
- /** @type {(node: CSSNumber) => boolean} Return whether the node is a Hue-like unit. */
121
-
122
-
123
- const isHue = node => isCalc(node) || node.type === 'numeric' && isHueLikeUnit(node.unit);
124
- /** @type {(node: CSSNumber) => boolean} Return whether the node is a Number unit. */
125
-
126
-
127
- const isNumber = node => isCalc(node) || node.type === 'numeric' && node.unit === '';
128
- /** @type {(node: CSSNumber) => boolean} Return whether the node is a Percentage unit. */
129
-
130
-
131
- const isPercentage = node => isCalc(node) || node.type === 'numeric' && (node.unit === '%' || node.unit === '' && node.value === '0');
132
- /** @type {(node: CSSOperator) => boolean} Return whether the node is a Slash delimiter. */
133
-
134
-
135
- const isSlash = node => node.type === 'operator' && node.value === '/';
136
- /** @type {(nodes: Node[]) => boolean} Return whether a set of nodes is an hsl() function. */
137
-
138
-
139
- const isHslFunctionContents = nodes => nodes.every((node, index) => typeof hslFunctionContents[index] === 'function' && hslFunctionContents[index](node));
140
- /** Set of nodes in a lab() function. */
141
-
142
-
143
- const hslFunctionContents = [isHue, isPercentage, isPercentage, isSlash, isAlphaValue];
144
- /** @type {(nodes: Node[]) => boolean} Return whether a set of nodes is an rgb() function with numbers. */
145
-
146
- const isRgbNumberFunctionContents = nodes => nodes.every((node, index) => typeof rgbNumberFunctionContents[index] === 'function' && rgbNumberFunctionContents[index](node));
147
- /** Set of nodes in a rgb() function with numbers. */
148
-
149
-
150
- const rgbNumberFunctionContents = [isNumber, isNumber, isNumber, isSlash, isAlphaValue];
151
- /** @type {(nodes: Node[]) => boolean} Return whether a set of nodes is an rgb() function with percentages. */
152
-
153
- const isRgbPercentFunctionContents = nodes => nodes.every((node, index) => typeof rgbPercentFunctionContents[index] === 'function' && rgbPercentFunctionContents[index](node));
154
- /** Set of nodes in a rgb() function with percentages. */
155
-
156
-
157
- const rgbPercentFunctionContents = [isPercentage, isPercentage, isPercentage, isSlash, isAlphaValue];
158
- /** @typedef {import('postcss-values-parser').Func} CSSFunction */
159
-
160
- /** @typedef {import('postcss-values-parser').Node} CSSNode */
161
-
162
- /** @typedef {import('postcss-values-parser').Numeric} CSSNumber */
163
-
164
- /** @typedef {import('postcss-values-parser').Operator} CSSOperator */
165
-
166
- /** @typedef {import('postcss-values-parser').Punctuation} CSSPunctuation */
167
-
168
- var options = {
169
- /** Whether to preserve the original functional color declaration. */
170
- preserve: false
171
- };
172
-
173
- /** @type {(decl: CSSDeclaration) => void} Transform space and slash separated color functions in CSS Declarations. */
174
-
175
- const onCSSDeclaration = decl => {
176
- const {
177
- value: originalValue
178
- } = decl;
179
-
180
- if (hasAnyColorFunction(originalValue)) {
181
- const valueAST = parse(originalValue);
182
- valueAST.walkType('func', onCSSFunction);
183
- const modifiedValue = String(valueAST);
184
-
185
- if (modifiedValue !== originalValue) {
186
- if (options.preserve) decl.cloneBefore({
187
- value: modifiedValue
188
- });else decl.value = modifiedValue;
189
- }
190
- }
191
- };
192
- /** @type {(value: RegExp) => (value: string) => boolean} Return a function that checks whether the expression exists in a value. */
193
-
194
- const createRegExpTest$1 = Function.bind.bind(RegExp.prototype.test);
195
- /** Return whether the value has an `hsl()`, `hsla()`, `rgb()`, or `rgba()` function. */
196
-
197
- const hasAnyColorFunction = createRegExpTest$1(/(^|[^\w-])(hsla?|rgba?)\(/i);
198
- /** @typedef {import('postcss').Declaration} CSSDeclaration */
199
-
200
- /** Transform space and slash separated color functions in CSS. */
201
-
202
- const postcssPlugin = postcss.plugin('postcss-color-functional-notation', opts => {
203
- options.preserve = 'preserve' in Object(opts) ? Boolean(opts.preserve) : false;
204
- return root => {
205
- root.walkDecls(onCSSDeclaration);
206
- };
207
- });
208
- /** @typedef {import('postcss').Root} CSSRoot */
209
-
210
- /** @typedef {(root: CSSRoot) => void} PostCSSTransformCallback */
211
-
212
- /** @typedef {(opts: options) => PostCSSTransformCallback} PostCSSPluginInitializer */
213
-
214
- export default postcssPlugin;