postcss-lab-function 4.1.1 → 4.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,44 @@
1
1
  # Changes to PostCSS Lab Function
2
2
 
3
+ ### 4.2.1 (July 8, 2022)
4
+
5
+ - Fix case insensitive matching.
6
+
7
+ ### 4.2.0 (April 4, 2022)
8
+
9
+ - Allow percentage and number units in more color components.
10
+
11
+ ```css
12
+ .percentages {
13
+ color-1: lab(40% 35% 30%);
14
+ color-2: lch(40% 50% 39);
15
+
16
+ /* becomes */
17
+
18
+ color-1: rgb(163, 57, 35);
19
+ color-1: color(display-p3 0.59266 0.25309 0.17075);
20
+ color-2: rgb(181, 30, 19);
21
+ color-2: color(display-p3 0.65205 0.18193 0.12753);
22
+ }
23
+
24
+ .numbers {
25
+ color-1: lab(40 35 30);
26
+ color-2: lch(40 50 39);
27
+
28
+ /* becomes */
29
+
30
+ color-1: rgb(152, 68, 47);
31
+ color-1: color(display-p3 0.55453 0.28432 0.20788);
32
+ color-2: rgb(157, 63, 45);
33
+ color-2: color(display-p3 0.57072 0.27138 0.20109);
34
+ }
35
+ ```
36
+
37
+ ### 4.1.2 (March 8, 2022)
38
+
39
+ - Fix gamut mapping giving overly unsaturated colors.
40
+ - Implement powerless color components in gamut mapping.
41
+
3
42
  ### 4.1.1 (February 15, 2022)
4
43
 
5
44
  - Fix plugin name
@@ -1,3 +1,3 @@
1
1
  declare type color = [number, number, number];
2
- export declare function lchToDisplayP3(lch: color): [color, boolean];
2
+ export declare function lchToDisplayP3(lchRaw: color): [color, boolean];
3
3
  export {};
@@ -1,3 +1,3 @@
1
1
  declare type color = [number, number, number];
2
- export declare function lchToSRgb(lch: color): color;
2
+ export declare function lchToSRgb(lchRaw: color): color;
3
3
  export {};
package/dist/index.cjs CHANGED
@@ -11,7 +11,7 @@
11
11
  *
12
12
  * @see https://github.com/w3c/csswg-drafts/blob/main/css-color-4/multiply-matrices.js
13
13
  */
14
- function a(e,t){const n=e.length;let r,u;r=Array.isArray(e[0])?e:[e],Array.isArray(t[0])||(u=t.map((e=>[e])));const a=u[0].length,o=u[0].map(((e,t)=>u.map((e=>e[t]))));let i=r.map((e=>o.map((t=>Array.isArray(e)?e.reduce(((e,n,r)=>e+n*(t[r]||0)),0):t.reduce(((t,n)=>t+n*e),0)))));return 1===n&&(i=i[0]),1===a?i.map((e=>e[0])):i}
14
+ function a(e,t){const n=e.length;let r,u;r=Array.isArray(e[0])?e:[e],Array.isArray(t[0])||(u=t.map((e=>[e])));const a=u[0].length,o=u[0].map(((e,t)=>u.map((e=>e[t]))));let s=r.map((e=>o.map((t=>Array.isArray(e)?e.reduce(((e,n,r)=>e+n*(t[r]||0)),0):t.reduce(((t,n)=>t+n*e),0)))));return 1===n&&(s=s[0]),1===a?s.map((e=>e[0])):s}
15
15
  /**
16
16
  * @license W3C
17
17
  * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document
@@ -19,7 +19,7 @@ function a(e,t){const n=e.length;let r,u;r=Array.isArray(e[0])?e:[e],Array.isArr
19
19
  * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).
20
20
  *
21
21
  * @see https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js
22
- */const o=[.3457/.3585,1,.2958/.3585];function i(e){return e.map((function(e){const t=e<0?-1:1,n=Math.abs(e);return n<.04045?e/12.92:t*Math.pow((n+.055)/1.055,2.4)}))}function s(e){return e.map((function(e){const t=e<0?-1:1,n=Math.abs(e);return n>.0031308?t*(1.055*Math.pow(n,1/2.4)-.055):12.92*e}))}function l(e){return a([[.41239079926595934,.357584339383878,.1804807884018343],[.21263900587151027,.715168678767756,.07219231536073371],[.01933081871559182,.11919477979462598,.9505321522496607]],e)}function c(e){return a([[3.2409699419045226,-1.537383177570094,-.4986107602930034],[-.9692436362808796,1.8759675015077202,.04155505740717559],[.05563007969699366,-.20397695888897652,1.0569715142428786]],e)}function f(e){return i(e)}function p(e){return s(e)}function d(e){return a([[.4865709486482162,.26566769316909306,.1982172852343625],[.2289745640697488,.6917385218365064,.079286914093745],[0,.04511338185890264,1.043944368900976]],e)}function h(e){return a([[2.493496911941425,-.9313836179191239,-.40271078445071684],[-.8294889695615747,1.7626640603183463,.023624685841943577],[.03584583024378447,-.07617238926804182,.9568845240076872]],e)}function v(e){return a([[.9554734527042182,-.023098536874261423,.0632593086610217],[-.028369706963208136,1.0099954580058226,.021041398966943008],[.012314001688319899,-.020507696433477912,1.3303659366080753]],e)}function m(e){const t=24389/27,n=216/24389,r=[];r[1]=(e[0]+16)/116,r[0]=e[1]/500+r[1],r[2]=r[1]-e[2]/200;return[Math.pow(r[0],3)>n?Math.pow(r[0],3):(116*r[0]-16)/t,e[0]>8?Math.pow((e[0]+16)/116,3):e[0]/t,Math.pow(r[2],3)>n?Math.pow(r[2],3):(116*r[2]-16)/t].map(((e,t)=>e*o[t]))}function b(e){return[e[0],e[1]*Math.cos(e[2]*Math.PI/180),e[1]*Math.sin(e[2]*Math.PI/180)]}function y(e){const t=a([[.8190224432164319,.3619062562801221,-.12887378261216414],[.0329836671980271,.9292868468965546,.03614466816999844],[.048177199566046255,.26423952494422764,.6335478258136937]],e);return a([[.2104542553,.793617785,-.0040720468],[1.9779984951,-2.428592205,.4505937099],[.0259040371,.7827717662,-.808675766]],t.map((e=>Math.cbrt(e))))}function M(e){const t=a([[.9999999984505198,.39633779217376786,.2158037580607588],[1.0000000088817609,-.10556134232365635,-.06385417477170591],[1.0000000546724108,-.08948418209496575,-1.2914855378640917]],e);return a([[1.2268798733741557,-.5578149965554813,.28139105017721583],[-.04057576262431372,1.1122868293970594,-.07171106666151701],[-.07637294974672142,-.4214933239627914,1.5869240244272418]],t.map((e=>e**3)))}function g(e){const t=180*Math.atan2(e[2],e[1])/Math.PI;return[e[0],Math.sqrt(e[1]**2+e[2]**2),t>=0?t:t+360]}function x(e){return[e[0],e[1]*Math.cos(e[2]*Math.PI/180),e[1]*Math.sin(e[2]*Math.PI/180)]}
22
+ */const o=[.3457/.3585,1,.2958/.3585];function s(e){return e.map((function(e){const t=e<0?-1:1,n=Math.abs(e);return n<.04045?e/12.92:t*Math.pow((n+.055)/1.055,2.4)}))}function i(e){return e.map((function(e){const t=e<0?-1:1,n=Math.abs(e);return n>.0031308?t*(1.055*Math.pow(n,1/2.4)-.055):12.92*e}))}function l(e){return a([[.41239079926595934,.357584339383878,.1804807884018343],[.21263900587151027,.715168678767756,.07219231536073371],[.01933081871559182,.11919477979462598,.9505321522496607]],e)}function c(e){return a([[3.2409699419045226,-1.537383177570094,-.4986107602930034],[-.9692436362808796,1.8759675015077202,.04155505740717559],[.05563007969699366,-.20397695888897652,1.0569715142428786]],e)}function f(e){return s(e)}function p(e){return i(e)}function d(e){return a([[.4865709486482162,.26566769316909306,.1982172852343625],[.2289745640697488,.6917385218365064,.079286914093745],[0,.04511338185890264,1.043944368900976]],e)}function h(e){return a([[2.493496911941425,-.9313836179191239,-.40271078445071684],[-.8294889695615747,1.7626640603183463,.023624685841943577],[.03584583024378447,-.07617238926804182,.9568845240076872]],e)}function m(e){return a([[.9554734527042182,-.023098536874261423,.0632593086610217],[-.028369706963208136,1.0099954580058226,.021041398966943008],[.012314001688319899,-.020507696433477912,1.3303659366080753]],e)}function v(e){const t=24389/27,n=216/24389,r=[];r[1]=(e[0]+16)/116,r[0]=e[1]/500+r[1],r[2]=r[1]-e[2]/200;return[Math.pow(r[0],3)>n?Math.pow(r[0],3):(116*r[0]-16)/t,e[0]>8?Math.pow((e[0]+16)/116,3):e[0]/t,Math.pow(r[2],3)>n?Math.pow(r[2],3):(116*r[2]-16)/t].map(((e,t)=>e*o[t]))}function b(e){return[e[0],e[1]*Math.cos(e[2]*Math.PI/180),e[1]*Math.sin(e[2]*Math.PI/180)]}function y(e){const t=a([[.8190224432164319,.3619062562801221,-.12887378261216414],[.0329836671980271,.9292868468965546,.03614466816999844],[.048177199566046255,.26423952494422764,.6335478258136937]],e);return a([[.2104542553,.793617785,-.0040720468],[1.9779984951,-2.428592205,.4505937099],[.0259040371,.7827717662,-.808675766]],t.map((e=>Math.cbrt(e))))}function M(e){const t=a([[.9999999984505198,.39633779217376786,.2158037580607588],[1.0000000088817609,-.10556134232365635,-.06385417477170591],[1.0000000546724108,-.08948418209496575,-1.2914855378640917]],e);return a([[1.2268798733741557,-.5578149965554813,.28139105017721583],[-.04057576262431372,1.1122868293970594,-.07171106666151701],[-.07637294974672142,-.4214933239627914,1.5869240244272418]],t.map((e=>e**3)))}function g(e){const t=180*Math.atan2(e[2],e[1])/Math.PI;return[e[0],Math.sqrt(e[1]**2+e[2]**2),t>=0?t:t+360]}function w(e){return[e[0],e[1]*Math.cos(e[2]*Math.PI/180),e[1]*Math.sin(e[2]*Math.PI/180)]}
23
23
  /**
24
24
  * @license W3C
25
25
  * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document
@@ -27,4 +27,4 @@ function a(e,t){const n=e.length;let r,u;r=Array.isArray(e[0])?e:[e],Array.isArr
27
27
  * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/deltaEOK.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).
28
28
  *
29
29
  * @see https://github.com/w3c/csswg-drafts/blob/main/css-color-4/deltaEOK.js
30
- */function w(e,t){const[n,r,u]=e,[a,o,i]=t,s=n-a,l=r-o,c=u-i;return Math.sqrt(s**2+l**2+c**2)}function P(e,t,n){return function(e,t,n){let r=0,u=e[1];const a=e;for(;u-r>1e-4;){w(a,n(F(t(a))))-.02<1e-4?r=a[1]:u=a[1],a[1]=(u+r)/2}return F(t([...a]))}(e,t,n)}function F(e){return e.map((e=>e<0?0:e>1?1:e))}function I(e){const[t,n,r]=e;return t>=-1e-4&&t<=1.0001&&n>=-1e-4&&n<=1.0001&&r>=-1e-4&&r<=1.0001}function N(e){const[t,n,r]=e;let u=[Math.min(Math.max(t,0),100),Math.min(Math.max(n,-127),128),Math.min(Math.max(r,-127),128)].slice();u=m(u);let a=u.slice();return a=v(a),a=y(a),a=g(a),u=v(u),u=h(u),u=p(u),I(u)?[F(u),!0]:[P(a,(e=>p(e=h(e=M(e=x(e))))),(e=>g(e=y(e=d(e=f(e)))))),!1]}function S(e){const[t,n,r]=e;let u=[Math.min(Math.max(t,0),100),Math.min(Math.max(n,-127),128),Math.min(Math.max(r,-127),128)].slice();u=m(u);let a=u.slice();return a=v(a),a=y(a),a=g(a),u=v(u),u=c(u),u=s(u),I(u)?F(u).map((e=>Math.round(255*e))):P(a,(e=>s(e=c(e=M(e=x(e))))),(e=>g(e=y(e=l(e=i(e)))))).map((e=>Math.round(255*e)))}function O(e){let t=e.slice();t=b(t),t=m(t);let n=t.slice();return n=v(n),n=y(n),n=g(n),t=v(t),t=h(t),t=p(t),I(t)?[F(t),!0]:[P(n,(e=>p(e=h(e=M(e=x(e))))),(e=>g(e=y(e=d(e=f(e)))))),!1]}function A(e){let t=e.slice();t=b(t),t=m(t);let n=t.slice();return n=v(n),n=y(n),n=g(n),t=v(t),t=c(t),t=s(t),I(t)?F(t).map((e=>Math.round(255*e))):P(n,(e=>s(e=c(e=M(e=x(e))))),(e=>g(e=y(e=l(e=i(e)))))).map((e=>Math.round(255*e)))}function q(e){const t=e.value,n=e.nodes.slice().filter((e=>"comment"!==e.type&&"space"!==e.type));let r=null;if("lab"===t?r=G(n):"lch"===t&&(r=D(n)),!r)return;if(n.length>3&&(!r.slash||!r.alpha))return;e.value="rgb",function(e,t,n){if(!t||!n)return;if(e.value="rgba",t.value=",",t.before="",!function(e){if(!e||"word"!==e.type)return!1;if(!K(e))return!1;const t=u.default.unit(e.value);if(!t)return!1;return!!t.number}(n))return;const r=u.default.unit(n.value);if(!r)return;"%"===r.unit&&(r.number=String(parseFloat(r.number)/100),n.value=String(r.number))}(e,r.slash,r.alpha);const[a,o,i]=z(r),[s,l,c]=H(r),f=("lab"===t?S:A)([s.number,l.number,c.number].map((e=>parseFloat(e))));e.nodes.splice(e.nodes.indexOf(a)+1,0,{sourceIndex:0,sourceEndIndex:1,value:",",type:"div",before:"",after:""}),e.nodes.splice(e.nodes.indexOf(o)+1,0,{sourceIndex:0,sourceEndIndex:1,value:",",type:"div",before:"",after:""}),J(e.nodes,a,{...a,value:String(f[0])}),J(e.nodes,o,{...o,value:String(f[1])}),J(e.nodes,i,{...i,value:String(f[2])})}function B(e){if(!e||"word"!==e.type)return!1;if(!K(e))return!1;const t=u.default.unit(e.value);return!!t&&(!!t.number&&""===t.unit)}function E(e){if(!e||"word"!==e.type)return!1;if(!K(e))return!1;const t=u.default.unit(e.value);return!!t&&"%"===t.unit}function j(e){if(!e||"word"!==e.type)return!1;if(!K(e))return!1;const t=u.default.unit(e.value);return!!t&&("%"===t.unit||""===t.unit)}function k(e){return e&&"function"===e.type&&"calc"===e.value}function C(e){return e&&"function"===e.type&&"var"===e.value}function $(e){return e&&"div"===e.type&&"/"===e.value}function D(e){if(!E(e[0]))return null;if(!B(e[1]))return null;if(!function(e){if(!e||"word"!==e.type)return!1;if(!K(e))return!1;const t=u.default.unit(e.value);return!(!t||!t.number||"deg"!==t.unit&&"grad"!==t.unit&&"rad"!==t.unit&&"turn"!==t.unit&&""!==t.unit)}(e[2]))return null;const t={l:u.default.unit(e[0].value),lNode:e[0],c:u.default.unit(e[1].value),cNode:e[1],h:u.default.unit(e[2].value),hNode:e[2]};return function(e){switch(e.unit){case"deg":return void(e.unit="");case"rad":return e.unit="",void(e.number=(180*parseFloat(e.number)/Math.PI).toString());case"grad":return e.unit="",void(e.number=(.9*parseFloat(e.number)).toString());case"turn":e.unit="",e.number=(360*parseFloat(e.number)).toString()}}(t.h),""!==t.h.unit?null:($(e[3])&&(t.slash=e[3]),(j(e[4])||k(e[4])||C(e[4]))&&(t.alpha=e[4]),t)}function G(e){if(!E(e[0]))return null;if(!B(e[1]))return null;if(!B(e[2]))return null;const t={l:u.default.unit(e[0].value),lNode:e[0],a:u.default.unit(e[1].value),aNode:e[1],b:u.default.unit(e[2].value),bNode:e[2]};return $(e[3])&&(t.slash=e[3]),(j(e[4])||k(e[4])||C(e[4]))&&(t.alpha=e[4]),t}function L(e){return void 0!==e.a}function z(e){return L(e)?[e.lNode,e.aNode,e.bNode]:[e.lNode,e.cNode,e.hNode]}function H(e){return L(e)?[e.l,e.a,e.b]:[e.l,e.c,e.h]}function J(e,t,n){const r=e.indexOf(t);e[r]=n}function K(e){if(!e||!e.value)return!1;try{return!1!==u.default.unit(e.value)}catch(e){return!1}}function Q(e,t,n,r){let a;try{a=u.default(e)}catch(r){t.warn(n,`Failed to parse value '${e}' as a lab or lch function. Leaving the original value intact.`)}if(void 0===a)return;a.walk((e=>{e.type&&"function"===e.type&&("lab"!==e.value&&"lch"!==e.value||q(e))}));const o=String(a);if(o===e)return;const i=u.default(e);i.walk((e=>{e.type&&"function"===e.type&&("lab"!==e.value&&"lch"!==e.value||function(e,t,n,r){const a=u.default.stringify(e),o=e.value,i=e.nodes.slice().filter((e=>"comment"!==e.type&&"space"!==e.type));let s=null;if("lab"===o?s=G(i):"lch"===o&&(s=D(i)),!s)return;if(i.length>3&&(!s.slash||!s.alpha))return;e.value="color";const[l,c,f]=z(s),[p,d,h]=H(s),v="lab"===o?N:O,m=[p.number,d.number,h.number].map((e=>parseFloat(e))),[b,y]=v(m);!y&&r&&t.warn(n,`"${a}" is out of gamut for "display-p3". Given "preserve: true" is set, this will lead to unexpected results in some browsers.`),e.nodes.splice(0,0,{sourceIndex:0,sourceEndIndex:10,value:"display-p3",type:"word"}),e.nodes.splice(1,0,{sourceIndex:0,sourceEndIndex:1,value:" ",type:"space"}),J(e.nodes,l,{...l,value:b[0].toFixed(5)}),J(e.nodes,c,{...c,value:b[1].toFixed(5)}),J(e.nodes,f,{...f,value:b[2].toFixed(5)})}(e,t,n,r))}));return{rgb:o,displayP3:String(i)}}const R=e=>({postcssPlugin:"postcss-lab-function",Declaration:(t,{result:n})=>{if(function(e){const t=e.parent;if(!t)return!1;const n=t.index(e);for(let r=0;r<n;r++){const n=t.nodes[r];if("decl"===n.type&&n.prop===e.prop)return!0}return!1}(t))return;if(function(e){let t=e.parent;for(;t;)if("atrule"===t.type){if("supports"===t.name){if(-1!==t.params.indexOf("lab("))return!0;if(-1!==t.params.indexOf("lch("))return!0}t=t.parent}else t=t.parent;return!1}(t))return;const r=t.value;if(!/(^|[^\w-])(lab|lch)\(/i.test(r))return;const u=Q(r,t,n,e.preserve);void 0!==u&&(e.preserve?(t.cloneBefore({value:u.rgb}),e.subFeatures.displayP3&&t.cloneBefore({value:u.displayP3})):(t.cloneBefore({value:u.rgb}),e.subFeatures.displayP3&&t.cloneBefore({value:u.displayP3}),t.remove()))}});R.postcss=!0;const T=e=>{const t=Object.assign({enableProgressiveCustomProperties:!0,preserve:!1,subFeatures:{displayP3:!0}},e);return t.subFeatures=Object.assign({displayP3:!0},t.subFeatures),t.enableProgressiveCustomProperties&&(t.preserve||t.subFeatures.displayP3)?{postcssPlugin:"postcss-lab-function",plugins:[r.default(),R(t)]}:R(t)};T.postcss=!0,module.exports=T;
30
+ */function x(e,t){const[n,r,u]=e,[a,o,s]=t,i=n-a,l=r-o,c=u-s;return Math.sqrt(i**2+l**2+c**2)}function F(e,t,n){return function(e,t,n){let r=0,u=e[1];const a=e;for(;u-r>1e-4;){const e=P(t(a));x(w(a),w(n(e)))-.02<1e-4?r=a[1]:u=a[1],a[1]=(u+r)/2}return P(t([...a]))}(e,t,n)}function P(e){return e.map((e=>e<0?0:e>1?1:e))}function C(e){const[t,n,r]=e;return t>=-1e-4&&t<=1.0001&&n>=-1e-4&&n<=1.0001&&r>=-1e-4&&r<=1.0001}function L(e){const[t,n,r]=e;let u=[Math.max(t,0),Math.min(Math.max(n,-160),160),Math.min(Math.max(r,-160),160)];u=v(u);let a=u.slice();return a=m(a),a=y(a),a=g(a),a[0]<1e-6&&(a=[0,0,0]),a[0]>.999999&&(a=[1,0,0]),u=m(u),u=h(u),u=p(u),C(u)?[P(u),!0]:[F(a,(e=>p(e=h(e=M(e=w(e))))),(e=>g(e=y(e=d(e=f(e)))))),!1]}function I(e){const[t,n,r]=e;let u=[Math.max(t,0),Math.min(Math.max(n,-160),160),Math.min(Math.max(r,-160),160)];u=v(u);let a=u.slice();return a=m(a),a=y(a),a=g(a),a[0]<1e-6&&(a=[0,0,0]),a[0]>.999999&&(a=[1,0,0]),u=m(u),u=c(u),u=i(u),C(u)?P(u).map((e=>Math.round(255*e))):F(a,(e=>i(e=c(e=M(e=w(e))))),(e=>g(e=y(e=l(e=s(e)))))).map((e=>Math.round(255*e)))}function N(e){const[t,n,r]=e;let u=[Math.max(t,0),n,r%360];u=b(u),u=v(u);let a=u.slice();return a=m(a),a=y(a),a=g(a),a[0]<1e-6&&(a=[0,0,0]),a[0]>.999999&&(a=[1,0,0]),u=m(u),u=h(u),u=p(u),C(u)?[P(u),!0]:[F(a,(e=>p(e=h(e=M(e=w(e))))),(e=>g(e=y(e=d(e=f(e)))))),!1]}function S(e){const[t,n,r]=e;let u=[Math.max(t,0),n,r%360];u=b(u),u=v(u);let a=u.slice();return a=m(a),a=y(a),a=g(a),a[0]<1e-6&&(a=[0,0,0]),a[0]>.999999&&(a=[1,0,0]),u=m(u),u=c(u),u=i(u),C(u)?P(u).map((e=>Math.round(255*e))):F(a,(e=>i(e=c(e=M(e=w(e))))),(e=>g(e=y(e=l(e=s(e)))))).map((e=>Math.round(255*e)))}function O(e){const t=e.value.toLowerCase(),n=e.nodes.slice().filter((e=>"comment"!==e.type&&"space"!==e.type));let r=null;if("lab"===t?r=k(n):"lch"===t&&(r=j(n)),!r)return;e.value="rgb",function(e,t,n){if(!t||!n)return;if(e.value="rgba",t.value=",",t.before="",!function(e){if(!e||"word"!==e.type)return!1;if(!H(e))return!1;const t=u.default.unit(e.value);if(!t)return!1;return!!t.number}(n))return;const r=u.default.unit(n.value);if(!r)return;"%"===r.unit&&(r.number=String(parseFloat(r.number)/100),n.value=String(r.number))}(e,r.slash,r.alpha);const[a,o,s]=D(r),[i,l,c]=G(r),f=("lab"===t?I:S)([i.number,l.number,c.number].map((e=>parseFloat(e))));e.nodes.splice(e.nodes.indexOf(a)+1,0,{sourceIndex:0,sourceEndIndex:1,value:",",type:"div",before:"",after:""}),e.nodes.splice(e.nodes.indexOf(o)+1,0,{sourceIndex:0,sourceEndIndex:1,value:",",type:"div",before:"",after:""}),z(e.nodes,a,{...a,value:String(f[0])}),z(e.nodes,o,{...o,value:String(f[1])}),z(e.nodes,s,{...s,value:String(f[2])})}function A(e){if(!e||"word"!==e.type)return!1;if(!H(e))return!1;const t=u.default.unit(e.value);return!!t&&("%"===t.unit||""===t.unit)}function q(e){return e&&"function"===e.type&&"calc"===e.value.toLowerCase()}function B(e){return e&&"function"===e.type&&"var"===e.value.toLowerCase()}function E(e){return e&&"div"===e.type&&"/"===e.value}function j(e){if(!A(e[0]))return null;if(!A(e[1]))return null;if(!function(e){if(!e||"word"!==e.type)return!1;if(!H(e))return!1;const t=u.default.unit(e.value);if(!t)return!1;const n=t.unit.toLowerCase();return!!t.number&&("deg"===n||"grad"===n||"rad"===n||"turn"===n||""===n)}(e[2]))return null;const t={l:u.default.unit(e[0].value),lNode:e[0],c:u.default.unit(e[1].value),cNode:e[1],h:u.default.unit(e[2].value),hNode:e[2]};return function(e){switch(e.unit.toLowerCase()){case"deg":return void(e.unit="");case"rad":return e.unit="",void(e.number=(180*parseFloat(e.number)/Math.PI).toString());case"grad":return e.unit="",void(e.number=(.9*parseFloat(e.number)).toString());case"turn":e.unit="",e.number=(360*parseFloat(e.number)).toString()}}(t.h),""!==t.h.unit?null:(E(e[3])&&(t.slash=e[3]),(A(e[4])||q(e[4])||B(e[4]))&&(t.alpha=e[4]),!(e.length>3)||t.slash&&t.alpha?("%"===t.l.unit&&(t.l.unit=""),"%"===t.c.unit&&(t.c.unit="",t.c.number=(parseFloat(t.c.number)/100*150).toFixed(10)),t):null)}function k(e){if(!A(e[0]))return null;if(!A(e[1]))return null;if(!A(e[2]))return null;const t={l:u.default.unit(e[0].value),lNode:e[0],a:u.default.unit(e[1].value),aNode:e[1],b:u.default.unit(e[2].value),bNode:e[2]};return E(e[3])&&(t.slash=e[3]),(A(e[4])||q(e[4])||B(e[4]))&&(t.alpha=e[4]),!(e.length>3)||t.slash&&t.alpha?("%"===t.l.unit&&(t.l.unit=""),"%"===t.a.unit&&(t.a.unit="",t.a.number=(parseFloat(t.a.number)/100*125).toFixed(10)),"%"===t.b.unit&&(t.b.unit="",t.b.number=(parseFloat(t.b.number)/100*125).toFixed(10)),t):null}function $(e){return void 0!==e.a}function D(e){return $(e)?[e.lNode,e.aNode,e.bNode]:[e.lNode,e.cNode,e.hNode]}function G(e){return $(e)?[e.l,e.a,e.b]:[e.l,e.c,e.h]}function z(e,t,n){const r=e.indexOf(t);e[r]=n}function H(e){if(!e||!e.value)return!1;try{return!1!==u.default.unit(e.value)}catch(e){return!1}}function J(e,t,n,r){let a;try{a=u.default(e)}catch(r){t.warn(n,`Failed to parse value '${e}' as a lab or lch function. Leaving the original value intact.`)}if(void 0===a)return;a.walk((e=>{e.type&&"function"===e.type&&("lab"!==e.value.toLowerCase()&&"lch"!==e.value.toLowerCase()||O(e))}));const o=String(a);if(o===e)return;const s=u.default(e);s.walk((e=>{e.type&&"function"===e.type&&("lab"!==e.value.toLowerCase()&&"lch"!==e.value.toLowerCase()||function(e,t,n,r){const a=u.default.stringify(e),o=e.value.toLowerCase(),s=e.nodes.slice().filter((e=>"comment"!==e.type&&"space"!==e.type));let i=null;if("lab"===o?i=k(s):"lch"===o&&(i=j(s)),!i)return;if(s.length>3&&(!i.slash||!i.alpha))return;e.value="color";const[l,c,f]=D(i),[p,d,h]=G(i),m="lab"===o?L:N,v=[p.number,d.number,h.number].map((e=>parseFloat(e))),[b,y]=m(v);!y&&r&&t.warn(n,`"${a}" is out of gamut for "display-p3". Given "preserve: true" is set, this will lead to unexpected results in some browsers.`),e.nodes.splice(0,0,{sourceIndex:0,sourceEndIndex:10,value:"display-p3",type:"word"}),e.nodes.splice(1,0,{sourceIndex:0,sourceEndIndex:1,value:" ",type:"space"}),z(e.nodes,l,{...l,value:b[0].toFixed(5)}),z(e.nodes,c,{...c,value:b[1].toFixed(5)}),z(e.nodes,f,{...f,value:b[2].toFixed(5)})}(e,t,n,r))}));return{rgb:o,displayP3:String(s)}}const K=e=>({postcssPlugin:"postcss-lab-function",Declaration:(t,{result:n})=>{if(function(e){const t=e.parent;if(!t)return!1;const n=t.index(e);for(let r=0;r<n;r++){const n=t.nodes[r];if("decl"===n.type&&n.prop.toLowerCase()===e.prop.toLowerCase())return!0}return!1}(t))return;if(function(e){let t=e.parent;for(;t;)if("atrule"===t.type){if("supports"===t.name.toLowerCase()){if(-1!==t.params.toLowerCase().indexOf("lab("))return!0;if(-1!==t.params.toLowerCase().indexOf("lch("))return!0}t=t.parent}else t=t.parent;return!1}(t))return;const r=t.value;if(!/(^|[^\w-])(lab|lch)\(/i.test(r.toLowerCase()))return;const u=J(r,t,n,e.preserve);void 0!==u&&(e.preserve?(t.cloneBefore({value:u.rgb}),e.subFeatures.displayP3&&t.cloneBefore({value:u.displayP3})):(t.cloneBefore({value:u.rgb}),e.subFeatures.displayP3&&t.cloneBefore({value:u.displayP3}),t.remove()))}});K.postcss=!0;const Q=e=>{const t=Object.assign({enableProgressiveCustomProperties:!0,preserve:!1,subFeatures:{displayP3:!0}},e);return t.subFeatures=Object.assign({displayP3:!0},t.subFeatures),t.enableProgressiveCustomProperties&&(t.preserve||t.subFeatures.displayP3)?{postcssPlugin:"postcss-lab-function",plugins:[r.default(),K(t)]}:K(t)};Q.postcss=!0,module.exports=Q;
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import e from"@csstools/postcss-progressive-custom-properties";import n from"postcss-value-parser";
1
+ import e from"@csstools/postcss-progressive-custom-properties";import t from"postcss-value-parser";
2
2
  /**
3
3
  * Simple matrix (and vector) multiplication
4
4
  * Warning: No error handling for incompatible dimensions!
@@ -11,7 +11,7 @@ import e from"@csstools/postcss-progressive-custom-properties";import n from"pos
11
11
  *
12
12
  * @see https://github.com/w3c/csswg-drafts/blob/main/css-color-4/multiply-matrices.js
13
13
  */
14
- function t(e,n){const t=e.length;let r,u;r=Array.isArray(e[0])?e:[e],Array.isArray(n[0])||(u=n.map((e=>[e])));const a=u[0].length,o=u[0].map(((e,n)=>u.map((e=>e[n]))));let i=r.map((e=>o.map((n=>Array.isArray(e)?e.reduce(((e,t,r)=>e+t*(n[r]||0)),0):n.reduce(((n,t)=>n+t*e),0)))));return 1===t&&(i=i[0]),1===a?i.map((e=>e[0])):i}
14
+ function n(e,t){const n=e.length;let r,u;r=Array.isArray(e[0])?e:[e],Array.isArray(t[0])||(u=t.map((e=>[e])));const a=u[0].length,o=u[0].map(((e,t)=>u.map((e=>e[t]))));let s=r.map((e=>o.map((t=>Array.isArray(e)?e.reduce(((e,n,r)=>e+n*(t[r]||0)),0):t.reduce(((t,n)=>t+n*e),0)))));return 1===n&&(s=s[0]),1===a?s.map((e=>e[0])):s}
15
15
  /**
16
16
  * @license W3C
17
17
  * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document
@@ -19,7 +19,7 @@ function t(e,n){const t=e.length;let r,u;r=Array.isArray(e[0])?e:[e],Array.isArr
19
19
  * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).
20
20
  *
21
21
  * @see https://github.com/w3c/csswg-drafts/blob/main/css-color-4/conversions.js
22
- */const r=[.3457/.3585,1,.2958/.3585];function u(e){return e.map((function(e){const n=e<0?-1:1,t=Math.abs(e);return t<.04045?e/12.92:n*Math.pow((t+.055)/1.055,2.4)}))}function a(e){return e.map((function(e){const n=e<0?-1:1,t=Math.abs(e);return t>.0031308?n*(1.055*Math.pow(t,1/2.4)-.055):12.92*e}))}function o(e){return t([[.41239079926595934,.357584339383878,.1804807884018343],[.21263900587151027,.715168678767756,.07219231536073371],[.01933081871559182,.11919477979462598,.9505321522496607]],e)}function i(e){return t([[3.2409699419045226,-1.537383177570094,-.4986107602930034],[-.9692436362808796,1.8759675015077202,.04155505740717559],[.05563007969699366,-.20397695888897652,1.0569715142428786]],e)}function s(e){return u(e)}function l(e){return a(e)}function c(e){return t([[.4865709486482162,.26566769316909306,.1982172852343625],[.2289745640697488,.6917385218365064,.079286914093745],[0,.04511338185890264,1.043944368900976]],e)}function f(e){return t([[2.493496911941425,-.9313836179191239,-.40271078445071684],[-.8294889695615747,1.7626640603183463,.023624685841943577],[.03584583024378447,-.07617238926804182,.9568845240076872]],e)}function p(e){return t([[.9554734527042182,-.023098536874261423,.0632593086610217],[-.028369706963208136,1.0099954580058226,.021041398966943008],[.012314001688319899,-.020507696433477912,1.3303659366080753]],e)}function d(e){const n=24389/27,t=216/24389,u=[];u[1]=(e[0]+16)/116,u[0]=e[1]/500+u[1],u[2]=u[1]-e[2]/200;return[Math.pow(u[0],3)>t?Math.pow(u[0],3):(116*u[0]-16)/n,e[0]>8?Math.pow((e[0]+16)/116,3):e[0]/n,Math.pow(u[2],3)>t?Math.pow(u[2],3):(116*u[2]-16)/n].map(((e,n)=>e*r[n]))}function h(e){return[e[0],e[1]*Math.cos(e[2]*Math.PI/180),e[1]*Math.sin(e[2]*Math.PI/180)]}function v(e){const n=t([[.8190224432164319,.3619062562801221,-.12887378261216414],[.0329836671980271,.9292868468965546,.03614466816999844],[.048177199566046255,.26423952494422764,.6335478258136937]],e);return t([[.2104542553,.793617785,-.0040720468],[1.9779984951,-2.428592205,.4505937099],[.0259040371,.7827717662,-.808675766]],n.map((e=>Math.cbrt(e))))}function m(e){const n=t([[.9999999984505198,.39633779217376786,.2158037580607588],[1.0000000088817609,-.10556134232365635,-.06385417477170591],[1.0000000546724108,-.08948418209496575,-1.2914855378640917]],e);return t([[1.2268798733741557,-.5578149965554813,.28139105017721583],[-.04057576262431372,1.1122868293970594,-.07171106666151701],[-.07637294974672142,-.4214933239627914,1.5869240244272418]],n.map((e=>e**3)))}function b(e){const n=180*Math.atan2(e[2],e[1])/Math.PI;return[e[0],Math.sqrt(e[1]**2+e[2]**2),n>=0?n:n+360]}function y(e){return[e[0],e[1]*Math.cos(e[2]*Math.PI/180),e[1]*Math.sin(e[2]*Math.PI/180)]}
22
+ */const r=[.3457/.3585,1,.2958/.3585];function u(e){return e.map((function(e){const t=e<0?-1:1,n=Math.abs(e);return n<.04045?e/12.92:t*Math.pow((n+.055)/1.055,2.4)}))}function a(e){return e.map((function(e){const t=e<0?-1:1,n=Math.abs(e);return n>.0031308?t*(1.055*Math.pow(n,1/2.4)-.055):12.92*e}))}function o(e){return n([[.41239079926595934,.357584339383878,.1804807884018343],[.21263900587151027,.715168678767756,.07219231536073371],[.01933081871559182,.11919477979462598,.9505321522496607]],e)}function s(e){return n([[3.2409699419045226,-1.537383177570094,-.4986107602930034],[-.9692436362808796,1.8759675015077202,.04155505740717559],[.05563007969699366,-.20397695888897652,1.0569715142428786]],e)}function i(e){return u(e)}function l(e){return a(e)}function c(e){return n([[.4865709486482162,.26566769316909306,.1982172852343625],[.2289745640697488,.6917385218365064,.079286914093745],[0,.04511338185890264,1.043944368900976]],e)}function p(e){return n([[2.493496911941425,-.9313836179191239,-.40271078445071684],[-.8294889695615747,1.7626640603183463,.023624685841943577],[.03584583024378447,-.07617238926804182,.9568845240076872]],e)}function f(e){return n([[.9554734527042182,-.023098536874261423,.0632593086610217],[-.028369706963208136,1.0099954580058226,.021041398966943008],[.012314001688319899,-.020507696433477912,1.3303659366080753]],e)}function d(e){const t=24389/27,n=216/24389,u=[];u[1]=(e[0]+16)/116,u[0]=e[1]/500+u[1],u[2]=u[1]-e[2]/200;return[Math.pow(u[0],3)>n?Math.pow(u[0],3):(116*u[0]-16)/t,e[0]>8?Math.pow((e[0]+16)/116,3):e[0]/t,Math.pow(u[2],3)>n?Math.pow(u[2],3):(116*u[2]-16)/t].map(((e,t)=>e*r[t]))}function h(e){return[e[0],e[1]*Math.cos(e[2]*Math.PI/180),e[1]*Math.sin(e[2]*Math.PI/180)]}function m(e){const t=n([[.8190224432164319,.3619062562801221,-.12887378261216414],[.0329836671980271,.9292868468965546,.03614466816999844],[.048177199566046255,.26423952494422764,.6335478258136937]],e);return n([[.2104542553,.793617785,-.0040720468],[1.9779984951,-2.428592205,.4505937099],[.0259040371,.7827717662,-.808675766]],t.map((e=>Math.cbrt(e))))}function v(e){const t=n([[.9999999984505198,.39633779217376786,.2158037580607588],[1.0000000088817609,-.10556134232365635,-.06385417477170591],[1.0000000546724108,-.08948418209496575,-1.2914855378640917]],e);return n([[1.2268798733741557,-.5578149965554813,.28139105017721583],[-.04057576262431372,1.1122868293970594,-.07171106666151701],[-.07637294974672142,-.4214933239627914,1.5869240244272418]],t.map((e=>e**3)))}function b(e){const t=180*Math.atan2(e[2],e[1])/Math.PI;return[e[0],Math.sqrt(e[1]**2+e[2]**2),t>=0?t:t+360]}function y(e){return[e[0],e[1]*Math.cos(e[2]*Math.PI/180),e[1]*Math.sin(e[2]*Math.PI/180)]}
23
23
  /**
24
24
  * @license W3C
25
25
  * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document
@@ -27,4 +27,4 @@ function t(e,n){const t=e.length;let r,u;r=Array.isArray(e[0])?e:[e],Array.isArr
27
27
  * @copyright This software or document includes material copied from or derived from https://github.com/w3c/csswg-drafts/blob/main/css-color-4/deltaEOK.js. Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang).
28
28
  *
29
29
  * @see https://github.com/w3c/csswg-drafts/blob/main/css-color-4/deltaEOK.js
30
- */function M(e,n){const[t,r,u]=e,[a,o,i]=n,s=t-a,l=r-o,c=u-i;return Math.sqrt(s**2+l**2+c**2)}function g(e,n,t){return function(e,n,t){let r=0,u=e[1];const a=e;for(;u-r>1e-4;){M(a,t(x(n(a))))-.02<1e-4?r=a[1]:u=a[1],a[1]=(u+r)/2}return x(n([...a]))}(e,n,t)}function x(e){return e.map((e=>e<0?0:e>1?1:e))}function w(e){const[n,t,r]=e;return n>=-1e-4&&n<=1.0001&&t>=-1e-4&&t<=1.0001&&r>=-1e-4&&r<=1.0001}function P(e){const[n,t,r]=e;let u=[Math.min(Math.max(n,0),100),Math.min(Math.max(t,-127),128),Math.min(Math.max(r,-127),128)].slice();u=d(u);let a=u.slice();return a=p(a),a=v(a),a=b(a),u=p(u),u=f(u),u=l(u),w(u)?[x(u),!0]:[g(a,(e=>l(e=f(e=m(e=y(e))))),(e=>b(e=v(e=c(e=s(e)))))),!1]}function F(e){const[n,t,r]=e;let s=[Math.min(Math.max(n,0),100),Math.min(Math.max(t,-127),128),Math.min(Math.max(r,-127),128)].slice();s=d(s);let l=s.slice();return l=p(l),l=v(l),l=b(l),s=p(s),s=i(s),s=a(s),w(s)?x(s).map((e=>Math.round(255*e))):g(l,(e=>a(e=i(e=m(e=y(e))))),(e=>b(e=v(e=o(e=u(e)))))).map((e=>Math.round(255*e)))}function I(e){let n=e.slice();n=h(n),n=d(n);let t=n.slice();return t=p(t),t=v(t),t=b(t),n=p(n),n=f(n),n=l(n),w(n)?[x(n),!0]:[g(t,(e=>l(e=f(e=m(e=y(e))))),(e=>b(e=v(e=c(e=s(e)))))),!1]}function N(e){let n=e.slice();n=h(n),n=d(n);let t=n.slice();return t=p(t),t=v(t),t=b(t),n=p(n),n=i(n),n=a(n),w(n)?x(n).map((e=>Math.round(255*e))):g(t,(e=>a(e=i(e=m(e=y(e))))),(e=>b(e=v(e=o(e=u(e)))))).map((e=>Math.round(255*e)))}function S(e){const t=e.value,r=e.nodes.slice().filter((e=>"comment"!==e.type&&"space"!==e.type));let u=null;if("lab"===t?u=C(r):"lch"===t&&(u=q(r)),!u)return;if(r.length>3&&(!u.slash||!u.alpha))return;e.value="rgb",function(e,t,r){if(!t||!r)return;if(e.value="rgba",t.value=",",t.before="",!function(e){if(!e||"word"!==e.type)return!1;if(!z(e))return!1;const t=n.unit(e.value);if(!t)return!1;return!!t.number}(r))return;const u=n.unit(r.value);if(!u)return;"%"===u.unit&&(u.number=String(parseFloat(u.number)/100),r.value=String(u.number))}(e,u.slash,u.alpha);const[a,o,i]=D(u),[s,l,c]=G(u),f=("lab"===t?F:N)([s.number,l.number,c.number].map((e=>parseFloat(e))));e.nodes.splice(e.nodes.indexOf(a)+1,0,{sourceIndex:0,sourceEndIndex:1,value:",",type:"div",before:"",after:""}),e.nodes.splice(e.nodes.indexOf(o)+1,0,{sourceIndex:0,sourceEndIndex:1,value:",",type:"div",before:"",after:""}),L(e.nodes,a,{...a,value:String(f[0])}),L(e.nodes,o,{...o,value:String(f[1])}),L(e.nodes,i,{...i,value:String(f[2])})}function O(e){if(!e||"word"!==e.type)return!1;if(!z(e))return!1;const t=n.unit(e.value);return!!t&&(!!t.number&&""===t.unit)}function A(e){if(!e||"word"!==e.type)return!1;if(!z(e))return!1;const t=n.unit(e.value);return!!t&&"%"===t.unit}function B(e){if(!e||"word"!==e.type)return!1;if(!z(e))return!1;const t=n.unit(e.value);return!!t&&("%"===t.unit||""===t.unit)}function E(e){return e&&"function"===e.type&&"calc"===e.value}function j(e){return e&&"function"===e.type&&"var"===e.value}function k(e){return e&&"div"===e.type&&"/"===e.value}function q(e){if(!A(e[0]))return null;if(!O(e[1]))return null;if(!function(e){if(!e||"word"!==e.type)return!1;if(!z(e))return!1;const t=n.unit(e.value);return!(!t||!t.number||"deg"!==t.unit&&"grad"!==t.unit&&"rad"!==t.unit&&"turn"!==t.unit&&""!==t.unit)}(e[2]))return null;const t={l:n.unit(e[0].value),lNode:e[0],c:n.unit(e[1].value),cNode:e[1],h:n.unit(e[2].value),hNode:e[2]};return function(e){switch(e.unit){case"deg":return void(e.unit="");case"rad":return e.unit="",void(e.number=(180*parseFloat(e.number)/Math.PI).toString());case"grad":return e.unit="",void(e.number=(.9*parseFloat(e.number)).toString());case"turn":e.unit="",e.number=(360*parseFloat(e.number)).toString()}}(t.h),""!==t.h.unit?null:(k(e[3])&&(t.slash=e[3]),(B(e[4])||E(e[4])||j(e[4]))&&(t.alpha=e[4]),t)}function C(e){if(!A(e[0]))return null;if(!O(e[1]))return null;if(!O(e[2]))return null;const t={l:n.unit(e[0].value),lNode:e[0],a:n.unit(e[1].value),aNode:e[1],b:n.unit(e[2].value),bNode:e[2]};return k(e[3])&&(t.slash=e[3]),(B(e[4])||E(e[4])||j(e[4]))&&(t.alpha=e[4]),t}function $(e){return void 0!==e.a}function D(e){return $(e)?[e.lNode,e.aNode,e.bNode]:[e.lNode,e.cNode,e.hNode]}function G(e){return $(e)?[e.l,e.a,e.b]:[e.l,e.c,e.h]}function L(e,n,t){const r=e.indexOf(n);e[r]=t}function z(e){if(!e||!e.value)return!1;try{return!1!==n.unit(e.value)}catch(e){return!1}}function H(e,t,r,u){let a;try{a=n(e)}catch(n){t.warn(r,`Failed to parse value '${e}' as a lab or lch function. Leaving the original value intact.`)}if(void 0===a)return;a.walk((e=>{e.type&&"function"===e.type&&("lab"!==e.value&&"lch"!==e.value||S(e))}));const o=String(a);if(o===e)return;const i=n(e);i.walk((e=>{e.type&&"function"===e.type&&("lab"!==e.value&&"lch"!==e.value||function(e,t,r,u){const a=n.stringify(e),o=e.value,i=e.nodes.slice().filter((e=>"comment"!==e.type&&"space"!==e.type));let s=null;if("lab"===o?s=C(i):"lch"===o&&(s=q(i)),!s)return;if(i.length>3&&(!s.slash||!s.alpha))return;e.value="color";const[l,c,f]=D(s),[p,d,h]=G(s),v="lab"===o?P:I,m=[p.number,d.number,h.number].map((e=>parseFloat(e))),[b,y]=v(m);!y&&u&&t.warn(r,`"${a}" is out of gamut for "display-p3". Given "preserve: true" is set, this will lead to unexpected results in some browsers.`),e.nodes.splice(0,0,{sourceIndex:0,sourceEndIndex:10,value:"display-p3",type:"word"}),e.nodes.splice(1,0,{sourceIndex:0,sourceEndIndex:1,value:" ",type:"space"}),L(e.nodes,l,{...l,value:b[0].toFixed(5)}),L(e.nodes,c,{...c,value:b[1].toFixed(5)}),L(e.nodes,f,{...f,value:b[2].toFixed(5)})}(e,t,r,u))}));return{rgb:o,displayP3:String(i)}}const J=e=>({postcssPlugin:"postcss-lab-function",Declaration:(n,{result:t})=>{if(function(e){const n=e.parent;if(!n)return!1;const t=n.index(e);for(let r=0;r<t;r++){const t=n.nodes[r];if("decl"===t.type&&t.prop===e.prop)return!0}return!1}(n))return;if(function(e){let n=e.parent;for(;n;)if("atrule"===n.type){if("supports"===n.name){if(-1!==n.params.indexOf("lab("))return!0;if(-1!==n.params.indexOf("lch("))return!0}n=n.parent}else n=n.parent;return!1}(n))return;const r=n.value;if(!/(^|[^\w-])(lab|lch)\(/i.test(r))return;const u=H(r,n,t,e.preserve);void 0!==u&&(e.preserve?(n.cloneBefore({value:u.rgb}),e.subFeatures.displayP3&&n.cloneBefore({value:u.displayP3})):(n.cloneBefore({value:u.rgb}),e.subFeatures.displayP3&&n.cloneBefore({value:u.displayP3}),n.remove()))}});J.postcss=!0;const K=n=>{const t=Object.assign({enableProgressiveCustomProperties:!0,preserve:!1,subFeatures:{displayP3:!0}},n);return t.subFeatures=Object.assign({displayP3:!0},t.subFeatures),t.enableProgressiveCustomProperties&&(t.preserve||t.subFeatures.displayP3)?{postcssPlugin:"postcss-lab-function",plugins:[e(),J(t)]}:J(t)};K.postcss=!0;export{K as default};
30
+ */function M(e,t){const[n,r,u]=e,[a,o,s]=t,i=n-a,l=r-o,c=u-s;return Math.sqrt(i**2+l**2+c**2)}function g(e,t,n){return function(e,t,n){let r=0,u=e[1];const a=e;for(;u-r>1e-4;){const e=w(t(a));M(y(a),y(n(e)))-.02<1e-4?r=a[1]:u=a[1],a[1]=(u+r)/2}return w(t([...a]))}(e,t,n)}function w(e){return e.map((e=>e<0?0:e>1?1:e))}function x(e){const[t,n,r]=e;return t>=-1e-4&&t<=1.0001&&n>=-1e-4&&n<=1.0001&&r>=-1e-4&&r<=1.0001}function F(e){const[t,n,r]=e;let u=[Math.max(t,0),Math.min(Math.max(n,-160),160),Math.min(Math.max(r,-160),160)];u=d(u);let a=u.slice();return a=f(a),a=m(a),a=b(a),a[0]<1e-6&&(a=[0,0,0]),a[0]>.999999&&(a=[1,0,0]),u=f(u),u=p(u),u=l(u),x(u)?[w(u),!0]:[g(a,(e=>l(e=p(e=v(e=y(e))))),(e=>b(e=m(e=c(e=i(e)))))),!1]}function P(e){const[t,n,r]=e;let i=[Math.max(t,0),Math.min(Math.max(n,-160),160),Math.min(Math.max(r,-160),160)];i=d(i);let l=i.slice();return l=f(l),l=m(l),l=b(l),l[0]<1e-6&&(l=[0,0,0]),l[0]>.999999&&(l=[1,0,0]),i=f(i),i=s(i),i=a(i),x(i)?w(i).map((e=>Math.round(255*e))):g(l,(e=>a(e=s(e=v(e=y(e))))),(e=>b(e=m(e=o(e=u(e)))))).map((e=>Math.round(255*e)))}function C(e){const[t,n,r]=e;let u=[Math.max(t,0),n,r%360];u=h(u),u=d(u);let a=u.slice();return a=f(a),a=m(a),a=b(a),a[0]<1e-6&&(a=[0,0,0]),a[0]>.999999&&(a=[1,0,0]),u=f(u),u=p(u),u=l(u),x(u)?[w(u),!0]:[g(a,(e=>l(e=p(e=v(e=y(e))))),(e=>b(e=m(e=c(e=i(e)))))),!1]}function L(e){const[t,n,r]=e;let i=[Math.max(t,0),n,r%360];i=h(i),i=d(i);let l=i.slice();return l=f(l),l=m(l),l=b(l),l[0]<1e-6&&(l=[0,0,0]),l[0]>.999999&&(l=[1,0,0]),i=f(i),i=s(i),i=a(i),x(i)?w(i).map((e=>Math.round(255*e))):g(l,(e=>a(e=s(e=v(e=y(e))))),(e=>b(e=m(e=o(e=u(e)))))).map((e=>Math.round(255*e)))}function I(e){const n=e.value.toLowerCase(),r=e.nodes.slice().filter((e=>"comment"!==e.type&&"space"!==e.type));let u=null;if("lab"===n?u=E(r):"lch"===n&&(u=B(r)),!u)return;e.value="rgb",function(e,n,r){if(!n||!r)return;if(e.value="rgba",n.value=",",n.before="",!function(e){if(!e||"word"!==e.type)return!1;if(!D(e))return!1;const n=t.unit(e.value);if(!n)return!1;return!!n.number}(r))return;const u=t.unit(r.value);if(!u)return;"%"===u.unit&&(u.number=String(parseFloat(u.number)/100),r.value=String(u.number))}(e,u.slash,u.alpha);const[a,o,s]=k(u),[i,l,c]=q(u),p=("lab"===n?P:L)([i.number,l.number,c.number].map((e=>parseFloat(e))));e.nodes.splice(e.nodes.indexOf(a)+1,0,{sourceIndex:0,sourceEndIndex:1,value:",",type:"div",before:"",after:""}),e.nodes.splice(e.nodes.indexOf(o)+1,0,{sourceIndex:0,sourceEndIndex:1,value:",",type:"div",before:"",after:""}),$(e.nodes,a,{...a,value:String(p[0])}),$(e.nodes,o,{...o,value:String(p[1])}),$(e.nodes,s,{...s,value:String(p[2])})}function N(e){if(!e||"word"!==e.type)return!1;if(!D(e))return!1;const n=t.unit(e.value);return!!n&&("%"===n.unit||""===n.unit)}function S(e){return e&&"function"===e.type&&"calc"===e.value.toLowerCase()}function O(e){return e&&"function"===e.type&&"var"===e.value.toLowerCase()}function A(e){return e&&"div"===e.type&&"/"===e.value}function B(e){if(!N(e[0]))return null;if(!N(e[1]))return null;if(!function(e){if(!e||"word"!==e.type)return!1;if(!D(e))return!1;const n=t.unit(e.value);if(!n)return!1;const r=n.unit.toLowerCase();return!!n.number&&("deg"===r||"grad"===r||"rad"===r||"turn"===r||""===r)}(e[2]))return null;const n={l:t.unit(e[0].value),lNode:e[0],c:t.unit(e[1].value),cNode:e[1],h:t.unit(e[2].value),hNode:e[2]};return function(e){switch(e.unit.toLowerCase()){case"deg":return void(e.unit="");case"rad":return e.unit="",void(e.number=(180*parseFloat(e.number)/Math.PI).toString());case"grad":return e.unit="",void(e.number=(.9*parseFloat(e.number)).toString());case"turn":e.unit="",e.number=(360*parseFloat(e.number)).toString()}}(n.h),""!==n.h.unit?null:(A(e[3])&&(n.slash=e[3]),(N(e[4])||S(e[4])||O(e[4]))&&(n.alpha=e[4]),!(e.length>3)||n.slash&&n.alpha?("%"===n.l.unit&&(n.l.unit=""),"%"===n.c.unit&&(n.c.unit="",n.c.number=(parseFloat(n.c.number)/100*150).toFixed(10)),n):null)}function E(e){if(!N(e[0]))return null;if(!N(e[1]))return null;if(!N(e[2]))return null;const n={l:t.unit(e[0].value),lNode:e[0],a:t.unit(e[1].value),aNode:e[1],b:t.unit(e[2].value),bNode:e[2]};return A(e[3])&&(n.slash=e[3]),(N(e[4])||S(e[4])||O(e[4]))&&(n.alpha=e[4]),!(e.length>3)||n.slash&&n.alpha?("%"===n.l.unit&&(n.l.unit=""),"%"===n.a.unit&&(n.a.unit="",n.a.number=(parseFloat(n.a.number)/100*125).toFixed(10)),"%"===n.b.unit&&(n.b.unit="",n.b.number=(parseFloat(n.b.number)/100*125).toFixed(10)),n):null}function j(e){return void 0!==e.a}function k(e){return j(e)?[e.lNode,e.aNode,e.bNode]:[e.lNode,e.cNode,e.hNode]}function q(e){return j(e)?[e.l,e.a,e.b]:[e.l,e.c,e.h]}function $(e,t,n){const r=e.indexOf(t);e[r]=n}function D(e){if(!e||!e.value)return!1;try{return!1!==t.unit(e.value)}catch(e){return!1}}function G(e,n,r,u){let a;try{a=t(e)}catch(t){n.warn(r,`Failed to parse value '${e}' as a lab or lch function. Leaving the original value intact.`)}if(void 0===a)return;a.walk((e=>{e.type&&"function"===e.type&&("lab"!==e.value.toLowerCase()&&"lch"!==e.value.toLowerCase()||I(e))}));const o=String(a);if(o===e)return;const s=t(e);s.walk((e=>{e.type&&"function"===e.type&&("lab"!==e.value.toLowerCase()&&"lch"!==e.value.toLowerCase()||function(e,n,r,u){const a=t.stringify(e),o=e.value.toLowerCase(),s=e.nodes.slice().filter((e=>"comment"!==e.type&&"space"!==e.type));let i=null;if("lab"===o?i=E(s):"lch"===o&&(i=B(s)),!i)return;if(s.length>3&&(!i.slash||!i.alpha))return;e.value="color";const[l,c,p]=k(i),[f,d,h]=q(i),m="lab"===o?F:C,v=[f.number,d.number,h.number].map((e=>parseFloat(e))),[b,y]=m(v);!y&&u&&n.warn(r,`"${a}" is out of gamut for "display-p3". Given "preserve: true" is set, this will lead to unexpected results in some browsers.`),e.nodes.splice(0,0,{sourceIndex:0,sourceEndIndex:10,value:"display-p3",type:"word"}),e.nodes.splice(1,0,{sourceIndex:0,sourceEndIndex:1,value:" ",type:"space"}),$(e.nodes,l,{...l,value:b[0].toFixed(5)}),$(e.nodes,c,{...c,value:b[1].toFixed(5)}),$(e.nodes,p,{...p,value:b[2].toFixed(5)})}(e,n,r,u))}));return{rgb:o,displayP3:String(s)}}const z=e=>({postcssPlugin:"postcss-lab-function",Declaration:(t,{result:n})=>{if(function(e){const t=e.parent;if(!t)return!1;const n=t.index(e);for(let r=0;r<n;r++){const n=t.nodes[r];if("decl"===n.type&&n.prop.toLowerCase()===e.prop.toLowerCase())return!0}return!1}(t))return;if(function(e){let t=e.parent;for(;t;)if("atrule"===t.type){if("supports"===t.name.toLowerCase()){if(-1!==t.params.toLowerCase().indexOf("lab("))return!0;if(-1!==t.params.toLowerCase().indexOf("lch("))return!0}t=t.parent}else t=t.parent;return!1}(t))return;const r=t.value;if(!/(^|[^\w-])(lab|lch)\(/i.test(r.toLowerCase()))return;const u=G(r,t,n,e.preserve);void 0!==u&&(e.preserve?(t.cloneBefore({value:u.rgb}),e.subFeatures.displayP3&&t.cloneBefore({value:u.displayP3})):(t.cloneBefore({value:u.rgb}),e.subFeatures.displayP3&&t.cloneBefore({value:u.displayP3}),t.remove()))}});z.postcss=!0;const H=t=>{const n=Object.assign({enableProgressiveCustomProperties:!0,preserve:!1,subFeatures:{displayP3:!0}},t);return n.subFeatures=Object.assign({displayP3:!0},n.subFeatures),n.enableProgressiveCustomProperties&&(n.preserve||n.subFeatures.displayP3)?{postcssPlugin:"postcss-lab-function",plugins:[e(),z(n)]}:z(n)};H.postcss=!0;export{H as default};
package/package.json CHANGED
@@ -1,70 +1,81 @@
1
1
  {
2
- "name": "postcss-lab-function",
3
- "version": "4.1.1",
4
- "description": "Use lab() and lch() color functions in CSS",
5
- "author": "Jonathan Neal <jonathantneal@hotmail.com>",
6
- "license": "CC0-1.0",
7
- "homepage": "https://github.com/csstools/postcss-plugins/tree/main/plugins/postcss-lab-function#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
- "exports": {
13
- ".": {
14
- "import": "./dist/index.mjs",
15
- "require": "./dist/index.cjs",
16
- "default": "./dist/index.mjs"
17
- }
18
- },
19
- "files": [
20
- "CHANGELOG.md",
21
- "LICENSE.md",
22
- "README.md",
23
- "dist"
24
- ],
25
- "scripts": {
26
- "build": "rollup -c ../../rollup/default.js",
27
- "clean": "node -e \"fs.rmSync('./dist', { recursive: true, force: true });\"",
28
- "lint": "eslint ./src --ext .js --ext .ts --ext .mjs --no-error-on-unmatched-pattern",
29
- "prepublishOnly": "npm run clean && npm run build && npm run test",
30
- "stryker": "stryker run --logLevel error",
31
- "test": "node .tape.mjs && npm run test:exports",
32
- "test:rewrite-expects": "REWRITE_EXPECTS=true node .tape.mjs",
33
- "test:exports": "node ./test/_import.mjs && node ./test/_require.cjs"
34
- },
35
- "engines": {
36
- "node": "^12 || ^14 || >=16"
37
- },
38
- "dependencies": {
39
- "@csstools/postcss-progressive-custom-properties": "^1.1.0",
40
- "postcss-value-parser": "^4.2.0"
41
- },
42
- "peerDependencies": {
43
- "postcss": "^8.4"
44
- },
45
- "keywords": [
46
- "postcss",
47
- "css",
48
- "postcss-plugin",
49
- "color",
50
- "colors",
51
- "rgb",
52
- "rgba",
53
- "lab",
54
- "lch",
55
- "functional",
56
- "notation",
57
- "design",
58
- "syntax",
59
- "space",
60
- "comma"
61
- ],
62
- "repository": {
63
- "type": "git",
64
- "url": "https://github.com/csstools/postcss-plugins.git",
65
- "directory": "plugins/postcss-lab-function"
66
- },
67
- "volta": {
68
- "extends": "../../package.json"
69
- }
2
+ "name": "postcss-lab-function",
3
+ "description": "Use lab() and lch() color functions in CSS",
4
+ "version": "4.2.1",
5
+ "author": "Jonathan Neal <jonathantneal@hotmail.com>",
6
+ "license": "CC0-1.0",
7
+ "funding": {
8
+ "type": "opencollective",
9
+ "url": "https://opencollective.com/csstools"
10
+ },
11
+ "engines": {
12
+ "node": "^12 || ^14 || >=16"
13
+ },
14
+ "main": "dist/index.cjs",
15
+ "module": "dist/index.mjs",
16
+ "types": "./dist/index.d.ts",
17
+ "exports": {
18
+ ".": {
19
+ "import": "./dist/index.mjs",
20
+ "require": "./dist/index.cjs",
21
+ "default": "./dist/index.mjs"
22
+ }
23
+ },
24
+ "files": [
25
+ "CHANGELOG.md",
26
+ "LICENSE.md",
27
+ "README.md",
28
+ "dist"
29
+ ],
30
+ "dependencies": {
31
+ "@csstools/postcss-progressive-custom-properties": "^1.1.0",
32
+ "postcss-value-parser": "^4.2.0"
33
+ },
34
+ "peerDependencies": {
35
+ "postcss": "^8.2"
36
+ },
37
+ "scripts": {
38
+ "build": "rollup -c ../../rollup/default.js",
39
+ "clean": "node -e \"fs.rmSync('./dist', { recursive: true, force: true });\"",
40
+ "docs": "node ../../.github/bin/generate-docs/install.mjs",
41
+ "lint": "npm run lint:eslint && npm run lint:package-json",
42
+ "lint:eslint": "eslint ./src --ext .js --ext .ts --ext .mjs --no-error-on-unmatched-pattern",
43
+ "lint:package-json": "node ../../.github/bin/format-package-json.mjs",
44
+ "prepublishOnly": "npm run clean && npm run build && npm run test",
45
+ "test": "node .tape.mjs && npm run test:exports",
46
+ "test:exports": "node ./test/_import.mjs && node ./test/_require.cjs",
47
+ "test:rewrite-expects": "REWRITE_EXPECTS=true node .tape.mjs"
48
+ },
49
+ "homepage": "https://github.com/csstools/postcss-plugins/tree/main/plugins/postcss-lab-function#readme",
50
+ "repository": {
51
+ "type": "git",
52
+ "url": "https://github.com/csstools/postcss-plugins.git",
53
+ "directory": "plugins/postcss-lab-function"
54
+ },
55
+ "bugs": "https://github.com/csstools/postcss-plugins/issues",
56
+ "keywords": [
57
+ "color",
58
+ "colors",
59
+ "comma",
60
+ "css",
61
+ "design",
62
+ "functional",
63
+ "lab",
64
+ "lch",
65
+ "notation",
66
+ "postcss",
67
+ "postcss-plugin",
68
+ "rgb",
69
+ "rgba",
70
+ "space",
71
+ "syntax"
72
+ ],
73
+ "csstools": {
74
+ "cssdb": "lab-function",
75
+ "exportName": "postcssLabFunction",
76
+ "humanReadableName": "PostCSS Lab Function"
77
+ },
78
+ "volta": {
79
+ "extends": "../../package.json"
80
+ }
70
81
  }