@fluixi/utils 1.0.0-alpha.53
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/LICENSE +21 -0
- package/README.md +73 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -0
- package/dist/index.mjs +1 -0
- package/dist/lib/array/advanced.cjs +1 -0
- package/dist/lib/array/advanced.d.ts +1116 -0
- package/dist/lib/array/advanced.d.ts.map +1 -0
- package/dist/lib/array/advanced.js +2429 -0
- package/dist/lib/array/advanced.mjs +1 -0
- package/dist/lib/array/array.cjs +1 -0
- package/dist/lib/array/array.d.ts +6 -0
- package/dist/lib/array/array.d.ts.map +1 -0
- package/dist/lib/array/array.js +31 -0
- package/dist/lib/array/array.mjs +1 -0
- package/dist/lib/array/index.cjs +1 -0
- package/dist/lib/array/index.d.ts +4 -0
- package/dist/lib/array/index.d.ts.map +1 -0
- package/dist/lib/array/index.js +3 -0
- package/dist/lib/array/index.mjs +1 -0
- package/dist/lib/array/utils.cjs +1 -0
- package/dist/lib/array/utils.d.ts +100 -0
- package/dist/lib/array/utils.d.ts.map +1 -0
- package/dist/lib/array/utils.js +165 -0
- package/dist/lib/array/utils.mjs +1 -0
- package/dist/lib/color/color.cjs +1 -0
- package/dist/lib/color/color.d.ts +366 -0
- package/dist/lib/color/color.d.ts.map +1 -0
- package/dist/lib/color/color.js +722 -0
- package/dist/lib/color/color.mjs +1 -0
- package/dist/lib/color/constants.cjs +1 -0
- package/dist/lib/color/constants.d.ts +361 -0
- package/dist/lib/color/constants.d.ts.map +1 -0
- package/dist/lib/color/constants.js +358 -0
- package/dist/lib/color/constants.mjs +1 -0
- package/dist/lib/color/conversions.cjs +1 -0
- package/dist/lib/color/conversions.d.ts +166 -0
- package/dist/lib/color/conversions.d.ts.map +1 -0
- package/dist/lib/color/conversions.js +766 -0
- package/dist/lib/color/conversions.mjs +1 -0
- package/dist/lib/color/helpers.cjs +1 -0
- package/dist/lib/color/helpers.d.ts +75 -0
- package/dist/lib/color/helpers.d.ts.map +1 -0
- package/dist/lib/color/helpers.js +419 -0
- package/dist/lib/color/helpers.mjs +1 -0
- package/dist/lib/color/index.cjs +1 -0
- package/dist/lib/color/index.d.ts +12 -0
- package/dist/lib/color/index.d.ts.map +1 -0
- package/dist/lib/color/index.js +15 -0
- package/dist/lib/color/index.mjs +1 -0
- package/dist/lib/color/types.cjs +1 -0
- package/dist/lib/color/types.d.ts +179 -0
- package/dist/lib/color/types.d.ts.map +1 -0
- package/dist/lib/color/types.js +1 -0
- package/dist/lib/color/types.mjs +0 -0
- package/dist/lib/color/utils.cjs +1 -0
- package/dist/lib/color/utils.d.ts +199 -0
- package/dist/lib/color/utils.d.ts.map +1 -0
- package/dist/lib/color/utils.js +858 -0
- package/dist/lib/color/utils.mjs +1 -0
- package/dist/lib/compare/comparators.cjs +1 -0
- package/dist/lib/compare/comparators.d.ts +65 -0
- package/dist/lib/compare/comparators.d.ts.map +1 -0
- package/dist/lib/compare/comparators.js +210 -0
- package/dist/lib/compare/comparators.mjs +1 -0
- package/dist/lib/compare/index.cjs +1 -0
- package/dist/lib/compare/index.d.ts +2 -0
- package/dist/lib/compare/index.d.ts.map +1 -0
- package/dist/lib/compare/index.js +1 -0
- package/dist/lib/compare/index.mjs +1 -0
- package/dist/lib/crypto/hash.cjs +1 -0
- package/dist/lib/crypto/hash.d.ts +6 -0
- package/dist/lib/crypto/hash.d.ts.map +1 -0
- package/dist/lib/crypto/hash.js +53 -0
- package/dist/lib/crypto/hash.mjs +1 -0
- package/dist/lib/crypto/index.cjs +1 -0
- package/dist/lib/crypto/index.d.ts +2 -0
- package/dist/lib/crypto/index.d.ts.map +1 -0
- package/dist/lib/crypto/index.js +1 -0
- package/dist/lib/crypto/index.mjs +1 -0
- package/dist/lib/dom/events.cjs +1 -0
- package/dist/lib/dom/events.d.ts +159 -0
- package/dist/lib/dom/events.d.ts.map +1 -0
- package/dist/lib/dom/events.js +50 -0
- package/dist/lib/dom/events.mjs +1 -0
- package/dist/lib/dom/index.cjs +1 -0
- package/dist/lib/dom/index.d.ts +3 -0
- package/dist/lib/dom/index.d.ts.map +1 -0
- package/dist/lib/dom/index.js +2 -0
- package/dist/lib/dom/index.mjs +1 -0
- package/dist/lib/dom/utils.cjs +1 -0
- package/dist/lib/dom/utils.d.ts +6 -0
- package/dist/lib/dom/utils.d.ts.map +1 -0
- package/dist/lib/dom/utils.js +37 -0
- package/dist/lib/dom/utils.mjs +1 -0
- package/dist/lib/functions/functions.cjs +1 -0
- package/dist/lib/functions/functions.d.ts +329 -0
- package/dist/lib/functions/functions.d.ts.map +1 -0
- package/dist/lib/functions/functions.js +585 -0
- package/dist/lib/functions/functions.mjs +1 -0
- package/dist/lib/functions/index.cjs +1 -0
- package/dist/lib/functions/index.d.ts +3 -0
- package/dist/lib/functions/index.d.ts.map +1 -0
- package/dist/lib/functions/index.js +1 -0
- package/dist/lib/functions/index.mjs +1 -0
- package/dist/lib/functions/types.cjs +1 -0
- package/dist/lib/functions/types.d.ts +2 -0
- package/dist/lib/functions/types.d.ts.map +1 -0
- package/dist/lib/functions/types.js +1 -0
- package/dist/lib/functions/types.mjs +0 -0
- package/dist/lib/helpers.cjs +1 -0
- package/dist/lib/helpers.d.ts +13 -0
- package/dist/lib/helpers.d.ts.map +1 -0
- package/dist/lib/helpers.js +66 -0
- package/dist/lib/helpers.mjs +1 -0
- package/dist/lib/index.cjs +1 -0
- package/dist/lib/index.d.ts +6 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +8 -0
- package/dist/lib/index.mjs +1 -0
- package/dist/lib/maths/constants.cjs +1 -0
- package/dist/lib/maths/constants.d.ts +84 -0
- package/dist/lib/maths/constants.d.ts.map +1 -0
- package/dist/lib/maths/constants.js +79 -0
- package/dist/lib/maths/constants.mjs +1 -0
- package/dist/lib/maths/fn/advanced.cjs +1 -0
- package/dist/lib/maths/fn/advanced.d.ts +149 -0
- package/dist/lib/maths/fn/advanced.d.ts.map +1 -0
- package/dist/lib/maths/fn/advanced.js +264 -0
- package/dist/lib/maths/fn/advanced.mjs +1 -0
- package/dist/lib/maths/fn/basic.cjs +1 -0
- package/dist/lib/maths/fn/basic.d.ts +182 -0
- package/dist/lib/maths/fn/basic.d.ts.map +1 -0
- package/dist/lib/maths/fn/basic.js +343 -0
- package/dist/lib/maths/fn/basic.mjs +1 -0
- package/dist/lib/maths/fn/complex.cjs +1 -0
- package/dist/lib/maths/fn/complex.d.ts +153 -0
- package/dist/lib/maths/fn/complex.d.ts.map +1 -0
- package/dist/lib/maths/fn/complex.js +383 -0
- package/dist/lib/maths/fn/complex.mjs +1 -0
- package/dist/lib/maths/fn/index.cjs +1 -0
- package/dist/lib/maths/fn/index.d.ts +10 -0
- package/dist/lib/maths/fn/index.d.ts.map +1 -0
- package/dist/lib/maths/fn/index.js +9 -0
- package/dist/lib/maths/fn/index.mjs +1 -0
- package/dist/lib/maths/fn/trigo.cjs +1 -0
- package/dist/lib/maths/fn/trigo.d.ts +147 -0
- package/dist/lib/maths/fn/trigo.d.ts.map +1 -0
- package/dist/lib/maths/fn/trigo.js +227 -0
- package/dist/lib/maths/fn/trigo.mjs +1 -0
- package/dist/lib/maths/fn/vector.cjs +1 -0
- package/dist/lib/maths/fn/vector.d.ts +512 -0
- package/dist/lib/maths/fn/vector.d.ts.map +1 -0
- package/dist/lib/maths/fn/vector.js +1136 -0
- package/dist/lib/maths/fn/vector.mjs +1 -0
- package/dist/lib/maths/formatter.cjs +1 -0
- package/dist/lib/maths/formatter.d.ts +35 -0
- package/dist/lib/maths/formatter.d.ts.map +1 -0
- package/dist/lib/maths/formatter.js +56 -0
- package/dist/lib/maths/formatter.mjs +1 -0
- package/dist/lib/maths/guards.cjs +1 -0
- package/dist/lib/maths/guards.d.ts +166 -0
- package/dist/lib/maths/guards.d.ts.map +1 -0
- package/dist/lib/maths/guards.js +315 -0
- package/dist/lib/maths/guards.mjs +1 -0
- package/dist/lib/maths/index.cjs +1 -0
- package/dist/lib/maths/index.d.ts +24 -0
- package/dist/lib/maths/index.d.ts.map +1 -0
- package/dist/lib/maths/index.js +29 -0
- package/dist/lib/maths/index.mjs +1 -0
- package/dist/lib/maths/parser.cjs +1 -0
- package/dist/lib/maths/parser.d.ts +20 -0
- package/dist/lib/maths/parser.d.ts.map +1 -0
- package/dist/lib/maths/parser.js +78 -0
- package/dist/lib/maths/parser.mjs +1 -0
- package/dist/lib/maths/random.cjs +1 -0
- package/dist/lib/maths/random.d.ts +27 -0
- package/dist/lib/maths/random.d.ts.map +1 -0
- package/dist/lib/maths/random.js +49 -0
- package/dist/lib/maths/random.mjs +1 -0
- package/dist/lib/maths/types/advanced.cjs +1 -0
- package/dist/lib/maths/types/advanced.d.ts +357 -0
- package/dist/lib/maths/types/advanced.d.ts.map +1 -0
- package/dist/lib/maths/types/advanced.js +5 -0
- package/dist/lib/maths/types/advanced.mjs +0 -0
- package/dist/lib/maths/types/basic.cjs +1 -0
- package/dist/lib/maths/types/basic.d.ts +95 -0
- package/dist/lib/maths/types/basic.d.ts.map +1 -0
- package/dist/lib/maths/types/basic.js +5 -0
- package/dist/lib/maths/types/basic.mjs +0 -0
- package/dist/lib/maths/types/index.cjs +1 -0
- package/dist/lib/maths/types/index.d.ts +4 -0
- package/dist/lib/maths/types/index.d.ts.map +1 -0
- package/dist/lib/maths/types/index.js +3 -0
- package/dist/lib/maths/types/index.mjs +0 -0
- package/dist/lib/maths/types/negative.cjs +1 -0
- package/dist/lib/maths/types/negative.d.ts +51 -0
- package/dist/lib/maths/types/negative.d.ts.map +1 -0
- package/dist/lib/maths/types/negative.js +5 -0
- package/dist/lib/maths/types/negative.mjs +0 -0
- package/dist/lib/maths/types/operations.cjs +1 -0
- package/dist/lib/maths/types/operations.d.ts +188 -0
- package/dist/lib/maths/types/operations.d.ts.map +1 -0
- package/dist/lib/maths/types/operations.js +6 -0
- package/dist/lib/maths/types/operations.mjs +0 -0
- package/dist/lib/object/clone.cjs +1 -0
- package/dist/lib/object/clone.d.ts +46 -0
- package/dist/lib/object/clone.d.ts.map +1 -0
- package/dist/lib/object/clone.js +104 -0
- package/dist/lib/object/clone.mjs +1 -0
- package/dist/lib/object/diff.cjs +1 -0
- package/dist/lib/object/diff.d.ts +203 -0
- package/dist/lib/object/diff.d.ts.map +1 -0
- package/dist/lib/object/diff.js +805 -0
- package/dist/lib/object/diff.mjs +1 -0
- package/dist/lib/object/getter-setter.cjs +1 -0
- package/dist/lib/object/getter-setter.d.ts +361 -0
- package/dist/lib/object/getter-setter.d.ts.map +1 -0
- package/dist/lib/object/getter-setter.js +1771 -0
- package/dist/lib/object/getter-setter.mjs +1 -0
- package/dist/lib/object/index.cjs +6 -0
- package/dist/lib/object/index.d.ts +13 -0
- package/dist/lib/object/index.d.ts.map +1 -0
- package/dist/lib/object/index.js +12 -0
- package/dist/lib/object/index.mjs +6 -0
- package/dist/lib/object/merge.cjs +1 -0
- package/dist/lib/object/merge.d.ts +93 -0
- package/dist/lib/object/merge.d.ts.map +1 -0
- package/dist/lib/object/merge.js +474 -0
- package/dist/lib/object/merge.mjs +1 -0
- package/dist/lib/object/object.cjs +1 -0
- package/dist/lib/object/object.d.ts +128 -0
- package/dist/lib/object/object.d.ts.map +1 -0
- package/dist/lib/object/object.js +432 -0
- package/dist/lib/object/object.mjs +1 -0
- package/dist/lib/object/omit.cjs +1 -0
- package/dist/lib/object/omit.d.ts +351 -0
- package/dist/lib/object/omit.d.ts.map +1 -0
- package/dist/lib/object/omit.js +656 -0
- package/dist/lib/object/omit.mjs +1 -0
- package/dist/lib/object/reconcile.cjs +1 -0
- package/dist/lib/object/reconcile.d.ts +7 -0
- package/dist/lib/object/reconcile.d.ts.map +1 -0
- package/dist/lib/object/reconcile.js +122 -0
- package/dist/lib/object/reconcile.mjs +1 -0
- package/dist/lib/object/selector.cjs +1 -0
- package/dist/lib/object/selector.d.ts +50 -0
- package/dist/lib/object/selector.d.ts.map +1 -0
- package/dist/lib/object/selector.js +371 -0
- package/dist/lib/object/selector.mjs +1 -0
- package/dist/lib/object/sort.cjs +1 -0
- package/dist/lib/object/sort.d.ts +149 -0
- package/dist/lib/object/sort.d.ts.map +1 -0
- package/dist/lib/object/sort.js +298 -0
- package/dist/lib/object/sort.mjs +1 -0
- package/dist/lib/object/transform.cjs +1 -0
- package/dist/lib/object/transform.d.ts +620 -0
- package/dist/lib/object/transform.d.ts.map +1 -0
- package/dist/lib/object/transform.js +1058 -0
- package/dist/lib/object/transform.mjs +1 -0
- package/dist/lib/object/types.cjs +1 -0
- package/dist/lib/object/types.d.ts +250 -0
- package/dist/lib/object/types.d.ts.map +1 -0
- package/dist/lib/object/types.js +1 -0
- package/dist/lib/object/types.mjs +0 -0
- package/dist/lib/object/utils.cjs +6 -0
- package/dist/lib/object/utils.d.ts +165 -0
- package/dist/lib/object/utils.d.ts.map +1 -0
- package/dist/lib/object/utils.js +444 -0
- package/dist/lib/object/utils.mjs +6 -0
- package/dist/lib/primitive/boolean/boolean.cjs +1 -0
- package/dist/lib/primitive/boolean/boolean.d.ts +276 -0
- package/dist/lib/primitive/boolean/boolean.d.ts.map +1 -0
- package/dist/lib/primitive/boolean/boolean.js +615 -0
- package/dist/lib/primitive/boolean/boolean.mjs +1 -0
- package/dist/lib/primitive/boolean/index.cjs +1 -0
- package/dist/lib/primitive/boolean/index.d.ts +3 -0
- package/dist/lib/primitive/boolean/index.d.ts.map +1 -0
- package/dist/lib/primitive/boolean/index.js +2 -0
- package/dist/lib/primitive/boolean/index.mjs +1 -0
- package/dist/lib/primitive/boolean/types.cjs +1 -0
- package/dist/lib/primitive/boolean/types.d.ts +14 -0
- package/dist/lib/primitive/boolean/types.d.ts.map +1 -0
- package/dist/lib/primitive/boolean/types.js +1 -0
- package/dist/lib/primitive/boolean/types.mjs +0 -0
- package/dist/lib/primitive/date/date.cjs +1 -0
- package/dist/lib/primitive/date/date.d.ts +641 -0
- package/dist/lib/primitive/date/date.d.ts.map +1 -0
- package/dist/lib/primitive/date/date.js +1998 -0
- package/dist/lib/primitive/date/date.mjs +1 -0
- package/dist/lib/primitive/date/index.cjs +1 -0
- package/dist/lib/primitive/date/index.d.ts +3 -0
- package/dist/lib/primitive/date/index.d.ts.map +1 -0
- package/dist/lib/primitive/date/index.js +2 -0
- package/dist/lib/primitive/date/index.mjs +1 -0
- package/dist/lib/primitive/date/types.cjs +1 -0
- package/dist/lib/primitive/date/types.d.ts +205 -0
- package/dist/lib/primitive/date/types.d.ts.map +1 -0
- package/dist/lib/primitive/date/types.js +7 -0
- package/dist/lib/primitive/date/types.mjs +0 -0
- package/dist/lib/primitive/index.cjs +5 -0
- package/dist/lib/primitive/index.d.ts +5 -0
- package/dist/lib/primitive/index.d.ts.map +1 -0
- package/dist/lib/primitive/index.js +4 -0
- package/dist/lib/primitive/index.mjs +5 -0
- package/dist/lib/primitive/string/index.cjs +5 -0
- package/dist/lib/primitive/string/index.d.ts +3 -0
- package/dist/lib/primitive/string/index.d.ts.map +1 -0
- package/dist/lib/primitive/string/index.js +2 -0
- package/dist/lib/primitive/string/index.mjs +5 -0
- package/dist/lib/primitive/string/parser-2.cjs +8 -0
- package/dist/lib/primitive/string/parser-2.d.ts +17 -0
- package/dist/lib/primitive/string/parser-2.d.ts.map +1 -0
- package/dist/lib/primitive/string/parser-2.js +656 -0
- package/dist/lib/primitive/string/parser-2.mjs +8 -0
- package/dist/lib/primitive/string/parser.cjs +3 -0
- package/dist/lib/primitive/string/parser.d.ts +9 -0
- package/dist/lib/primitive/string/parser.d.ts.map +1 -0
- package/dist/lib/primitive/string/parser.js +775 -0
- package/dist/lib/primitive/string/parser.mjs +3 -0
- package/dist/lib/primitive/string/string.cjs +5 -0
- package/dist/lib/primitive/string/string.d.ts +535 -0
- package/dist/lib/primitive/string/string.d.ts.map +1 -0
- package/dist/lib/primitive/string/string.js +1301 -0
- package/dist/lib/primitive/string/string.mjs +5 -0
- package/dist/lib/primitive/string/types.cjs +1 -0
- package/dist/lib/primitive/string/types.d.ts +318 -0
- package/dist/lib/primitive/string/types.d.ts.map +1 -0
- package/dist/lib/primitive/string/types.js +5 -0
- package/dist/lib/primitive/string/types.mjs +0 -0
- package/dist/lib/primitive/types.cjs +1 -0
- package/dist/lib/primitive/types.d.ts +27 -0
- package/dist/lib/primitive/types.d.ts.map +1 -0
- package/dist/lib/primitive/types.js +1 -0
- package/dist/lib/primitive/types.mjs +0 -0
- package/dist/lib/url/index.cjs +1 -0
- package/dist/lib/url/index.d.ts +3 -0
- package/dist/lib/url/index.d.ts.map +1 -0
- package/dist/lib/url/index.js +2 -0
- package/dist/lib/url/index.mjs +1 -0
- package/dist/lib/url/parser.cjs +1 -0
- package/dist/lib/url/parser.d.ts +216 -0
- package/dist/lib/url/parser.d.ts.map +1 -0
- package/dist/lib/url/parser.js +488 -0
- package/dist/lib/url/parser.mjs +1 -0
- package/dist/lib/url/types.cjs +1 -0
- package/dist/lib/url/types.d.ts +18 -0
- package/dist/lib/url/types.d.ts.map +1 -0
- package/dist/lib/url/types.js +1 -0
- package/dist/lib/url/types.mjs +0 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -0
- package/package.json +150 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var f={x:.95047,y:1,z:1.08883},g=.008856,b=903.3;function p(o,n,t){return Math.max(n,Math.min(t,o))}function G(o,n=2){let t=Math.pow(10,n);return Math.round(o*t)/t}function M(o){let n=o.r/255,t=o.g/255,r=o.b/255,e=Math.max(n,t,r),c=Math.min(n,t,r),s=e-c,a=0,l=0,u=(e+c)/2;if(s!==0)switch(l=u>.5?s/(2-e-c):s/(e+c),e){case n:a=((t-r)/s+(t<r?6:0))/6;break;case t:a=((r-n)/s+2)/6;break;case r:a=((n-t)/s+4)/6;break}return{h:a*360,s:l*100,l:u*100,a:o.a}}function x(o){let n=o.r/255,t=o.g/255,r=o.b/255,e=Math.max(n,t,r),c=Math.min(n,t,r),s=e-c,a=0,l=e===0?0:s/e,u=e;if(s!==0)switch(e){case n:a=((t-r)/s+(t<r?6:0))/6;break;case t:a=((r-n)/s+2)/6;break;case r:a=((n-t)/s+4)/6;break}return{h:a*360,s:l*100,v:u*100,a:o.a}}function d(o){let n=x(o),t=(100-n.s)*n.v/100,r=100-n.v;return{h:n.h,w:t,b:r,a:o.a}}function O(o){let n=o.r/255,t=o.g/255,r=o.b/255,e=1-Math.max(n,t,r),c=e===1?0:(1-n-e)/(1-e),s=e===1?0:(1-t-e)/(1-e),a=e===1?0:(1-r-e)/(1-e);return{c:c*100,m:s*100,y:a*100,k:e*100,a:o.a}}function y(o){let n=o.r/255,t=o.g/255,r=o.b/255;n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92,t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92,r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92;let e=n*.4124564+t*.3575761+r*.1804375,c=n*.2126729+t*.7151522+r*.072175,s=n*.0193339+t*.119192+r*.9503041;return{x:e*100,y:c*100,z:s*100,alpha:o.a}}function m(o){let n=y(o);return A(n)}function S(o){let n=m(o);return Y(n)}function T(o){let n=o.r/255,t=o.g/255,r=o.b/255,e=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92,c=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92,s=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92,a=.4122214708*e+.5363325363*c+.0514459929*s,l=.2119034982*e+.6806995451*c+.1073969566*s,u=.0883024619*e+.2817188376*c+.6299787005*s,i=Math.cbrt(a),h=Math.cbrt(l),C=Math.cbrt(u);return{l:.2104542553*i+.793617785*h-.0040720468*C,a:1.9779984951*i-2.428592205*h+.4505937099*C,b:.0259040371*i+.7827717662*h-.808675766*C,alpha:o.a}}function K(o){let n=T(o);return W(n)}function H(o){let n=o.h/360,t=o.s/100,r=o.l/100,e,c,s;if(t===0)e=c=s=r;else{let a=(i,h,C)=>(C<0&&(C+=1),C>1&&(C-=1),C<.16666666666666666?i+(h-i)*6*C:C<.5?h:C<.6666666666666666?i+(h-i)*(.6666666666666666-C)*6:i),l=r<.5?r*(1+t):r+t-r*t,u=2*r-l;e=a(u,l,n+1/3),c=a(u,l,n),s=a(u,l,n-1/3)}return{r:Math.round(e*255),g:Math.round(c*255),b:Math.round(s*255),a:o.a}}function q(o){let n=H(o);return x(n)}function D(o){let n=H(o);return d(n)}function L(o){let n=o.h/360,t=o.s/100,r=o.v/100,e=Math.floor(n*6),c=n*6-e,s=r*(1-t),a=r*(1-c*t),l=r*(1-(1-c)*t),u,i,h;switch(e%6){case 0:u=r,i=l,h=s;break;case 1:u=a,i=r,h=s;break;case 2:u=s,i=r,h=l;break;case 3:u=s,i=a,h=r;break;case 4:u=l,i=s,h=r;break;default:u=r,i=s,h=a;break}return{r:Math.round(u*255),g:Math.round(i*255),b:Math.round(h*255),a:o.a}}function F(o){let n=L(o);return M(n)}function N(o){let n=(100-o.s)*o.v/100,t=100-o.v;return{h:o.h,w:n,b:t,a:o.a}}function B(o){let n=o.h,t=o.w/100,r=o.b/100,e=t+r;e>1&&(t/=e,r/=e);let c=1-r,s=c===0?0:1-t/c;return L({h:n,s:s*100,v:c*100,a:o.a})}function U(o){let n=B(o);return M(n)}function J(o){let n=B(o);return x(n)}function w(o){let n=o.c/100,t=o.m/100,r=o.y/100,e=o.k/100,c=255*(1-n)*(1-e),s=255*(1-t)*(1-e),a=255*(1-r)*(1-e);return{r:Math.round(c),g:Math.round(s),b:Math.round(a),a:o.a}}function Q(o){let n=w(o);return M(n)}function $(o){let n=w(o);return x(n)}function k(o){let n=o.x/100,t=o.y/100,r=o.z/100,e=n*3.2404542+t*-1.5371385+r*-.4985314,c=n*-.969266+t*1.8760108+r*.041556,s=n*.0556434+t*-.2040259+r*1.0572252;return e=e>.0031308?1.055*Math.pow(e,1/2.4)-.055:12.92*e,c=c>.0031308?1.055*Math.pow(c,1/2.4)-.055:12.92*c,s=s>.0031308?1.055*Math.pow(s,1/2.4)-.055:12.92*s,{r:Math.round(p(e*255,0,255)),g:Math.round(p(c*255,0,255)),b:Math.round(p(s*255,0,255)),a:o.alpha||1}}function A(o){let n=o.x/f.x/100,t=o.y/f.y/100,r=o.z/f.z/100,e=n>g?Math.cbrt(n):(b*n+16)/116,c=t>g?Math.cbrt(t):(b*t+16)/116,s=r>g?Math.cbrt(r):(b*r+16)/116,a=116*c-16,l=500*(e-c),u=200*(c-s);return{l:p(a,0,100),a:l,b:u,alpha:o.alpha}}function R(o){let n=(o.l+16)/116,t=o.a/500+n,r=n-o.b/200,e=t*t*t>g?t*t*t:(116*t-16)/b,c=o.l>b*g?Math.pow((o.l+16)/116,3):o.l/b,s=r*r*r>g?r*r*r:(116*r-16)/b;return{x:e*f.x*100,y:c*f.y*100,z:s*f.z*100,alpha:o.alpha}}function v(o){let n=R(o);return k(n)}function Y(o){let n=Math.sqrt(o.a*o.a+o.b*o.b),t=Math.atan2(o.b,o.a)*180/Math.PI;return t<0&&(t+=360),{l:o.l,c:n,h:t,alpha:o.alpha}}function z(o){let n=o.h*Math.PI/180,t=o.c*Math.cos(n),r=o.c*Math.sin(n);return{l:o.l,a:t,b:r,alpha:o.alpha}}function V(o){let n=z(o);return v(n)}function oo(o){let n=z(o);return R(n)}function X(o){let n=o.l+.3963377774*o.a+.2158037573*o.b,t=o.l-.1055613458*o.a-.0638541728*o.b,r=o.l-.0894841775*o.a-1.291485548*o.b,e=n*n*n,c=t*t*t,s=r*r*r,a=4.0767416621*e-3.3077115913*c+.2309699292*s,l=-1.2684380046*e+2.6097574011*c-.3413193965*s,u=-.0041960863*e-.7034186147*c+1.707614701*s;return a=a>.0031308?1.055*Math.pow(a,1/2.4)-.055:12.92*a,l=l>.0031308?1.055*Math.pow(l,1/2.4)-.055:12.92*l,u=u>.0031308?1.055*Math.pow(u,1/2.4)-.055:12.92*u,{r:Math.round(p(a*255,0,255)),g:Math.round(p(l*255,0,255)),b:Math.round(p(u*255,0,255)),a:o.alpha}}function W(o){let n=Math.sqrt(o.a*o.a+o.b*o.b),t=Math.atan2(o.b,o.a)*180/Math.PI;return t<0&&(t+=360),{l:o.l,c:n,h:t,alpha:o.alpha}}function P(o){let n=o.h*Math.PI/180,t=o.c*Math.cos(n),r=o.c*Math.sin(n);return{l:o.l,a:t,b:r,alpha:o.alpha}}function Z(o){let n=P(o);return X(n)}function _(o){if("r"in o&&"g"in o&&"b"in o)return o;if("h"in o&&"s"in o&&"l"in o)return H(o);if("h"in o&&"s"in o&&"v"in o)return L(o);if("h"in o&&"w"in o&&"b"in o)return B(o);if("c"in o&&"m"in o&&"y"in o&&"k"in o)return w(o);if("x"in o&&"y"in o&&"z"in o)return k(o);if("l"in o&&"a"in o&&"b"in o&&!("c"in o)&&!("h"in o))return v(o);if("l"in o&&"c"in o&&"h"in o){let n=o;return n.l<=1?Z(o):V(n)}throw new Error("Unknown color format")}function I(o,n,t={}){let{round:r=!0,precision:e=2,preserveAlpha:c=!0}=t,s=_(o),a;switch(n.toLowerCase()){case"rgb":a=s;break;case"hsl":a=M(s);break;case"hsv":a=x(s);break;case"hwb":a=d(s);break;case"cmyk":a=O(s);break;case"xyz":a=y(s);break;case"lab":a=m(s);break;case"lch":a=S(s);break;case"oklab":a=T(s);break;case"oklch":a=K(s);break;default:a=s}return r&&a&&Object.keys(a).forEach(l=>{typeof a[l]=="number"&&l!=="a"&&l!=="alpha"&&(a[l]=G(a[l],e))}),c||(delete a.a,delete a.alpha),a}function no(o,n,t={}){return o.map(r=>I(r,n,t))}function E(o,n){let t={rgb:["hsl","hsv","hwb","cmyk","xyz","lab","lch","oklab","oklch"],hsl:["rgb","hsv","hwb"],hsv:["rgb","hsl","hwb"],hwb:["rgb","hsl","hsv"],cmyk:["rgb","hsl","hsv"],xyz:["rgb","lab"],lab:["rgb","xyz","lch"],lch:["rgb","lab","xyz"],oklab:["rgb","oklch"],oklch:["rgb","oklab"]};return o=o.toLowerCase(),n=n.toLowerCase(),o===n?[o]:t[o]?.includes(n)?[o,n]:t[o]?.includes("rgb")&&t.rgb?.includes(n)?[o,"rgb",n]:["lab","lch"].includes(o)&&["lab","lch"].includes(n)&&o!==n?[o,"xyz",n]:["oklab","oklch"].includes(o)&&["oklab","oklch"].includes(n)&&o!==n?[o,"oklab",n]:t[o]&&t.rgb?.includes(n)?[o,"rgb",n]:null}function to(o,n){let t=E(o,n);return t!==null&&t.length<=2}function j(){return["rgb","hsl","hsv","hwb","cmyk","xyz","lab","lch","oklab","oklch"]}function ro(o){return j().includes(o.toLowerCase())}export{_ as anyToRgb,no as batchConvert,Q as cmykToHsl,$ as cmykToHsv,w as cmykToRgb,I as convertColor,E as getConversionPath,j as getSupportedFormats,to as hasDirectConversion,q as hslToHsv,D as hslToHwb,H as hslToRgb,F as hsvToHsl,N as hsvToHwb,L as hsvToRgb,U as hwbToHsl,J as hwbToHsv,B as hwbToRgb,ro as isValidFormat,Y as labToLch,v as labToRgb,R as labToXyz,z as lchToLab,V as lchToRgb,oo as lchToXyz,W as oklabToOklch,X as oklabToRgb,P as oklchToOklab,Z as oklchToRgb,O as rgbToCmyk,M as rgbToHsl,x as rgbToHsv,d as rgbToHwb,m as rgbToLab,S as rgbToLch,T as rgbToOklab,K as rgbToOklch,y as rgbToXyz,A as xyzToLab,k as xyzToRgb};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var Q=Object.defineProperty;var kt=Object.getOwnPropertyDescriptor;var wt=Object.getOwnPropertyNames;var Rt=Object.prototype.hasOwnProperty;var Ot=(t,e)=>{for(var r in e)Q(t,r,{get:e[r],enumerable:!0})},Ht=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of wt(e))!Rt.call(t,s)&&s!==r&&Q(t,s,{get:()=>e[s],enumerable:!(n=kt(e,s))||n.enumerable});return t};var Lt=t=>Ht(Q({},"__esModule",{value:!0}),t);var Zt={};Ot(Zt,{adjustTemperature:()=>Gt,blendColors:()=>Xt,colorDistance:()=>Mt,findClosestColor:()=>Vt,generateGradient:()=>Yt,getColorName:()=>It,getDominantComponent:()=>Wt,getPerceivedBrightness:()=>yt,invertColor:()=>Pt,isDark:()=>Et,isLight:()=>xt,randomColor:()=>qt,simulateColorBlindness:()=>Ft,toGrayscale:()=>Kt,toSepia:()=>zt});module.exports=Lt(Zt);var Y={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",transparent:"transparent",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32",zinc:"#71717a",stone:"#78716c",neutral:"#737373",slate:"#64748b",gray50:"#f9fafb",gray100:"#f3f4f6",gray200:"#e5e7eb",gray300:"#d1d5db",gray400:"#9ca3af",gray500:"#6b7280",gray600:"#4b5563",gray700:"#374151",gray800:"#1f2937",gray900:"#111827",gray950:"#030712",red50:"#fef2f2",red100:"#fee2e2",red200:"#fecaca",red300:"#fca5a5",red400:"#f87171",red500:"#ef4444",red600:"#dc2626",red700:"#b91c1c",red800:"#991b1b",red900:"#7f1d1d",red950:"#450a0a",orange50:"#fff7ed",orange100:"#ffedd5",orange200:"#fed7aa",orange300:"#fdba74",orange400:"#fb923c",orange500:"#f97316",orange600:"#ea580c",orange700:"#c2410c",orange800:"#9a3412",orange900:"#7c2d12",orange950:"#431407",amber50:"#fffbeb",amber100:"#fef3c7",amber200:"#fde68a",amber300:"#fcd34d",amber400:"#fbbf24",amber500:"#f59e0b",amber600:"#d97706",amber700:"#b45309",amber800:"#92400e",amber900:"#78350f",amber950:"#451a03",yellow50:"#fefce8",yellow100:"#fef9c3",yellow200:"#fef08a",yellow300:"#fde047",yellow400:"#facc15",yellow500:"#eab308",yellow600:"#ca8a04",yellow700:"#a16207",yellow800:"#854d0e",yellow900:"#713f12",yellow950:"#422006",lime50:"#f7fee7",lime100:"#ecfccb",lime200:"#d9f99d",lime300:"#bef264",lime400:"#a3e635",lime500:"#84cc16",lime600:"#65a30d",lime700:"#4d7c0f",lime800:"#3f6212",lime900:"#365314",lime950:"#1a2e05",green50:"#f0fdf4",green100:"#dcfce7",green200:"#bbf7d0",green300:"#86efac",green400:"#4ade80",green500:"#22c55e",green600:"#16a34a",green700:"#15803d",green800:"#166534",green900:"#14532d",green950:"#052e16",emerald50:"#ecfdf5",emerald100:"#d1fae5",emerald200:"#a7f3d0",emerald300:"#6ee7b7",emerald400:"#34d399",emerald500:"#10b981",emerald600:"#059669",emerald700:"#047857",emerald800:"#065f46",emerald900:"#064e3b",emerald950:"#022c22",teal50:"#f0fdfa",teal100:"#ccfbf1",teal200:"#99f6e4",teal300:"#5eead4",teal400:"#2dd4bf",teal500:"#14b8a6",teal600:"#0d9488",teal700:"#0f766e",teal800:"#115e59",teal900:"#134e4a",teal950:"#042f2e",cyan50:"#ecfeff",cyan100:"#cffafe",cyan200:"#a5f3fc",cyan300:"#67e8f9",cyan400:"#22d3ee",cyan500:"#06b6d4",cyan600:"#0891b2",cyan700:"#0e7490",cyan800:"#155e75",cyan900:"#164e63",cyan950:"#083344",sky50:"#f0f9ff",sky100:"#e0f2fe",sky200:"#bae6fd",sky300:"#7dd3fc",sky400:"#38bdf8",sky500:"#0ea5e9",sky600:"#0284c7",sky700:"#0369a1",sky800:"#075985",sky900:"#0c4a6e",sky950:"#082f49",blue50:"#eff6ff",blue100:"#dbeafe",blue200:"#bfdbfe",blue300:"#93c5fd",blue400:"#60a5fa",blue500:"#3b82f6",blue600:"#2563eb",blue700:"#1d4ed8",blue800:"#1e40af",blue900:"#1e3a8a",blue950:"#172554",indigo50:"#eef2ff",indigo100:"#e0e7ff",indigo200:"#c7d2fe",indigo300:"#a5b4fc",indigo400:"#818cf8",indigo500:"#6366f1",indigo600:"#4f46e5",indigo700:"#4338ca",indigo800:"#3730a3",indigo900:"#312e81",indigo950:"#1e1b4b",violet50:"#f5f3ff",violet100:"#ede9fe",violet200:"#ddd6fe",violet300:"#c4b5fd",violet400:"#a78bfa",violet500:"#8b5cf6",violet600:"#7c3aed",violet700:"#6d28d9",violet800:"#5b21b6",violet900:"#4c1d95",violet950:"#2e1065",purple50:"#faf5ff",purple100:"#f3e8ff",purple200:"#e9d5ff",purple300:"#d8b4fe",purple400:"#c084fc",purple500:"#a855f7",purple600:"#9333ea",purple700:"#7e22ce",purple800:"#6b21a8",purple900:"#581c87",purple950:"#3b0764",fuchsia50:"#fdf4ff",fuchsia100:"#fae8ff",fuchsia200:"#f5d0fe",fuchsia300:"#f0abfc",fuchsia400:"#e879f9",fuchsia500:"#d946ef",fuchsia600:"#c026d3",fuchsia700:"#a21caf",fuchsia800:"#86198f",fuchsia900:"#701a75",fuchsia950:"#4a044e",pink50:"#fdf2f8",pink100:"#fce7f3",pink200:"#fbcfe8",pink300:"#f9a8d4",pink400:"#f472b6",pink500:"#ec4899",pink600:"#db2777",pink700:"#be185d",pink800:"#9d174d",pink900:"#831843",pink950:"#500724",rose50:"#fff1f2",rose100:"#ffe4e6",rose200:"#fecdd3",rose300:"#fda4af",rose400:"#fb7185",rose500:"#f43f5e",rose600:"#e11d48",rose700:"#be123c",rose800:"#9f1239",rose900:"#881337",rose950:"#4c0519"};var W={LEGACY_RGB:/^rgb\(\s*(\d{1,3}|\.\d+|\d+\.\d+%?)\s*,\s*(\d{1,3}|\.\d+|\d+\.\d+%?)\s*,\s*(\d{1,3}|\.\d+|\d+\.\d+%?)\s*\)$/i,MODERN_RGB:/^rgb\(\s*(\d{1,3}|\.\d+|\d+\.\d+%?)\s+(\d{1,3}|\.\d+|\d+\.\d+%?)\s+(\d{1,3}|\.\d+|\d+\.\d+%?)\s*\)$/i,LEGACY_RGBA:/^rgba\(\s*(\d{1,3}|\.\d+|\d+\.\d+%?)\s*,\s*(\d{1,3}|\.\d+|\d+\.\d+%?)\s*,\s*(\d{1,3}|\.\d+|\d+\.\d+%?)\s*,\s*(0|1|0?\.\d+|\d{1,3}%?|\.\d+%?)\s*\)$/i,MODERN_RGBA:/^rgba?\(\s*(\d{1,3}|\.\d+|\d+\.\d+%?)\s+(\d{1,3}|\.\d+|\d+\.\d+%?)\s+(\d{1,3}|\.\d+|\d+\.\d+%?)\s*\/\s*(0|1|0?\.\d+|\d{1,3}%?|\.\d+%?)\s*\)$/i,COMPREHENSIVE:/^rgba?\(\s*((?:\d{1,3}(?:\.\d+)?%?|\.\d+%?|var\([^)]+\)))\s*(?:[,\s]\s*((?:\d{1,3}(?:\.\d+)?%?|\.\d+%?|var\([^)]+\))))?\s*(?:[,\s]\s*((?:\d{1,3}(?:\.\d+)?%?|\.\d+%?|var\([^)]+\))))?\s*(?:(?:\s*[,\s]?\s*\/?\s*|\s*\/\s*)((?:0|1|0?\.\d+|\.\d+|\d{1,3}%?|var\([^)]+\))))?\s*\)$/i,STRICT_RGB:/^rgb\(\s*((?:\d{1,2}|1\d{2}|2[0-4]\d|25[0-5]|\d{1,2}(?:\.\d+)?%|100%|\.\d+%?|var\([^)]+\)))\s*,\s*((?:\d{1,2}|1\d{2}|2[0-4]\d|25[0-5]|\d{1,2}(?:\.\d+)?%|100%|\.\d+%?|var\([^)]+\)))\s*,\s*((?:\d{1,2}|1\d{2}|2[0-4]\d|25[0-5]|\d{1,2}(?:\.\d+)?%|100%|\.\d+%?|var\([^)]+\)))\s*\)$/i,STRICT_RGBA:/^rgba\(\s*((?:\d{1,2}|1\d{2}|2[0-4]\d|25[0-5]|\d{1,2}(?:\.\d+)?%|100%|\.\d+%?|var\([^)]+\)))\s*,\s*((?:\d{1,2}|1\d{2}|2[0-4]\d|25[0-5]|\d{1,2}(?:\.\d+)?%|100%|\.\d+%?|var\([^)]+\)))\s*,\s*((?:\d{1,2}|1\d{2}|2[0-4]\d|25[0-5]|\d{1,2}(?:\.\d+)?%|100%|\.\d+%?|var\([^)]+\)))\s*,\s*((?:0|1|0?\.\d+|\.\d+|\d{1,2}(?:\.\d+)?%|100%|var\([^)]+\)))\s*\)$/i,MODERN_RGB_ALPHA:/^rgba?\(\s*((?:\d{1,3}(?:\.\d+)?%?|\.\d+%?|var\([^)]+\)))\s+((?:\d{1,3}(?:\.\d+)?%?|\.\d+%?|var\([^)]+\)))\s+((?:\d{1,3}(?:\.\d+)?%?|\.\d+%?|var\([^)]+\)))\s*(?:\/\s*((?:0|1|0?\.\d+|\.\d+|\d{1,3}%?|var\([^)]+\))))?\s*\)$/i},K=t=>{let e=t.trim().toLowerCase();if(!e||e.includes("var("))return null;let r=l=>{if(!l)return null;let b=l.trim();if(!b||b.includes("var("))return null;if(b.endsWith("%")){let u=parseFloat(b);if(isNaN(u))return null;let h=Math.max(0,Math.min(100,u));return Math.round(h*255/100)}let c=parseFloat(b);return isNaN(c)?null:Math.round(Math.max(0,Math.min(255,c)))},n=l=>{if(!l)return 1;let b=l.trim();if(!b||b.includes("var("))return 1;if(b.endsWith("%")){let u=parseFloat(b);return isNaN(u)?1:Math.max(0,Math.min(100,u))/100}let c=parseFloat(b);return isNaN(c)?1:Math.max(0,Math.min(1,c))},s=/^rgba?\(\s*([^,]+)\s*,\s*([^,]+)\s*,\s*([^,]+)\s*(?:,\s*([^\)]+))?\s*\)$/,o=e.match(s);if(o){let l=r(o[1]),b=r(o[2]),c=r(o[3]),u=n(o[4]);if(l!==null&&b!==null&&c!==null)return[l,b,c,u]}let i=/^rgba?\(\s*([^\s\/]+)\s+([^\s\/]+)\s+([^\s\/]+)\s*(?:\/\s*([^\)]+))?\s*\)$/;if(o=e.match(i),o){let l=r(o[1]),b=r(o[2]),c=r(o[3]),u=n(o[4]);if(l!==null&&b!==null&&c!==null)return[l,b,c,u]}let a=/^rgb\(\s*([^\s,]+)\s+([^\s,]+)\s+([^\s,]+)\s*\)$/;if(o=e.match(a),o){let l=r(o[1]),b=r(o[2]),c=r(o[3]);if(l!==null&&b!==null&&c!==null)return[l,b,c,1]}return null},X={HEX:/^#([a-fA-F0-9]{3,4}|[a-fA-F0-9]{6}|[a-fA-F0-9]{8})$/,RGB:W.COMPREHENSIVE,HSL:/^hsla?\(\s*(\d+(?:\.\d+)?)(?:deg|rad|grad|turn)?\s*,\s*(\d+(?:\.\d+)?)%\s*,\s*(\d+(?:\.\d+)?)%(?:\s*[,\s/]\s*(\d*\.?\d+%?))?\s*\)$/i,OKLCH:/^oklch\(\s*(\d+(?:\.\d+)?%?)\s+(\d+(?:\.\d+)?)\s+(\d+(?:\.\d+)?)(?:\s+[,\s/]\s*(\d*\.?\d+%?))?\s*\)$/i,OKLAB:/^oklab\(\s*(\d+(?:\.\d+)?%?)\s+([+-]?\d+(?:\.\d+)?)\s+([+-]?\d+(?:\.\d+)?)(?:\s+[,\s/]\s*(\d*\.?\d+%?))?\s*\)$/i,HSV:/^hsv\(\s*(\d+(?:\.\d+)?)(?:deg|rad|grad|turn)?\s*,\s*(\d+(?:\.\d+)?)%\s*,\s*(\d+(?:\.\d+)?)%(?:\s*[,\s/]\s*(\d*\.?\d+%?))?\s*\)$/i,CMYK:/^cmyk\(\s*(\d+(?:\.\d+)?)%\s*,\s*(\d+(?:\.\d+)?)%\s*,\s*(\d+(?:\.\d+)?)%\s*,\s*(\d+(?:\.\d+)?)%(?:\s*[,\s/]\s*(\d*\.?\d+%?))?\s*\)$/i,COLOR_FUNCTION:/^color\(\s*([a-z]+)\s+((?:\d+(?:\.\d+)?%?\s+)*\d+(?:\.\d+)?%?)(?:\s*[,\s/]\s*(\d*\.?\d+%?))?\s*\)$/i,LAB:/^lab\(\s*(\d+(?:\.\d+)?%?)\s+([+-]?\d+(?:\.\d+)?)\s+([+-]?\d+(?:\.\d+)?)(?:\s*[,\s/]\s*(\d*\.?\d+%?))?\s*\)$/i,LCH:/^lch\(\s*(\d+(?:\.\d+)?%?)\s+(\d+(?:\.\d+)?)\s+(\d+(?:\.\d+)?)(?:\s*[,\s/]\s*(\d*\.?\d+%?))?\s*\)$/i};var C=t=>{if(!t||typeof t!="string")return null;let e=t.trim().toLowerCase();if(!e)return null;if(e==="transparent")return[0,0,0,0];let r=e;if(Y[r])return C(Y[r]);let n=K(e);if(n)return n;let s=e.match(X.HEX);if(s){let a=s[1];(a.length===3||a.length===4)&&(a=a.split("").map(h=>h+h).join(""));let l=parseInt(a.substring(0,2),16),b=parseInt(a.substring(2,4),16),c=parseInt(a.substring(4,6),16),u=a.length===8?parseInt(a.substring(6,8),16)/255:1;if(!isNaN(l)&&!isNaN(b)&&!isNaN(c)&&!isNaN(u))return[l,b,c,u]}let o=e.match(X.HSL);if(o){let a=parseFloat(o[1]),l=parseFloat(o[2])/100,b=parseFloat(o[3])/100,c=o[4]?P(o[4]):1;if(!isNaN(a)&&!isNaN(l)&&!isNaN(b)&&!isNaN(c))return ct(a,l,b,c)}let i=e.match(X.OKLCH);if(i){let a=P(i[1]),l=parseFloat(i[2]),b=parseFloat(i[3]),c=i[4]?P(i[4]):1;if(!isNaN(a)&&!isNaN(l)&&!isNaN(b)&&!isNaN(c))return vt(a,l,b,c)}return null},ct=(t,e,r,n=1)=>{t=t%360,t<0&&(t+=360);let s=(1-Math.abs(2*r-1))*e,o=s*(1-Math.abs(t/60%2-1)),i=r-s/2,a=0,l=0,b=0;return t>=0&&t<60?[a,l,b]=[s,o,0]:t>=60&&t<120?[a,l,b]=[o,s,0]:t>=120&&t<180?[a,l,b]=[0,s,o]:t>=180&&t<240?[a,l,b]=[0,o,s]:t>=240&&t<300?[a,l,b]=[o,0,s]:t>=300&&t<360&&([a,l,b]=[s,0,o]),[Math.round((a+i)*255),Math.round((l+i)*255),Math.round((b+i)*255),n]},vt=(t,e,r,n=1)=>{let s=r%360,o=Math.min(100,e*100),i=t*100;return ct(s,o/100,i/100,n)},tt=(t,e,r,n=1)=>(a=>typeof a=="string"&&a.includes("var("))(n)||typeof n=="number"&&n!==1?`rgba(${t} ${e} ${r} / ${n})`:`rgb(${t} ${e} ${r})`,E=t=>{let e=Math.round(t).toString(16);return e.length===1?`0${e}`:e},P=t=>t.endsWith("%")?parseFloat(t)/100:parseFloat(t),et=t=>{if(t.toLowerCase()in Y)return!0;if(t.toLowerCase().trim().startsWith("rgb"))return K(t)!==null;let{RGB:e,...r}=X;return Object.values(r).some(n=>n.test(t))},I=(t,e,r,n=1)=>{let s=`#${E(t)}${E(e)}${E(r)}`;return n<1?`${s}${E(Math.round(n*255))}`:s},$=(t,e,r,n=1)=>{let s=t/255,o=e/255,i=r/255,a=Math.max(s,o,i),l=Math.min(s,o,i),b=0,c=0,u=(a+l)/2;if(a!==l){let d=a-l;switch(c=u>.5?d/(2-a-l):d/(a+l),a){case s:b=(o-i)/d+(o<i?6:0);break;case o:b=(i-s)/d+2;break;case i:b=(s-o)/d+4;break}b/=6}b=Math.round(b*360),c=Math.round(c*100);let h=Math.round(u*100);return n===1?`hsl(${b}, ${c}%, ${h}%)`:`hsla(${b}, ${c}%, ${h}%, ${n})`},bt=(t,e,r,n=1)=>{let s=t/255,o=e/255,i=r/255,a=Math.max(s,o,i),l=Math.min(s,o,i),b=a-l,c=0;if(b!==0){switch(a){case s:c=(o-i)/b+(o<i?6:0);break;case o:c=(i-s)/b+2;break;case i:c=(s-o)/b+4;break}c/=6}let u=a===0?0:b/a,h=a;c=Math.round(c*360);let d=Math.round(u*100),g=Math.round(h*100);return n===1?`hsv(${c}, ${d}%, ${g}%)`:`hsva(${c}, ${d}%, ${g}%, ${n})`},ut=(t,e,r,n=1)=>{if(t===0&&e===0&&r===0)return"cmyk(0%, 0%, 0%, 100%)";let s=t/255,o=e/255,i=r/255,a=1-Math.max(s,o,i),l=(1-s-a)/(1-a),b=(1-o-a)/(1-a),c=(1-i-a)/(1-a),u=Math.round(l*100),h=Math.round(b*100),d=Math.round(c*100),g=Math.round(a*100);return`cmyk(${u}%, ${h}%, ${d}%, ${g}%)`},j=(t,e,r)=>{let[n,s,o]=[t,e,r].map(i=>(i=i/255,i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4)));return .2126*n+.7152*s+.0722*o},ht=(t,e)=>{let r=C(t),n=C(e);if(!r||!n)return 1;let s=j(r[0],r[1],r[2]),o=j(n[0],n[1],n[2]),i=Math.max(s,o),a=Math.min(s,o);return(i+.05)/(a+.05)},rt=(t,e)=>{let r=C(t);if(!r)return t;let[n,s,o,i]=r;e.alpha!==void 0&&(i=Math.max(0,Math.min(1,e.alpha)));let a=0,l=0,b=0;if(e.lightness!==void 0||e.saturation!==void 0||e.hue!==void 0){let c=n/255,u=s/255,h=o/255,d=Math.max(c,u,h),g=Math.min(c,u,h);if(b=(d+g)/2,d!==g){let v=d-g;switch(l=b>.5?v/(2-d-g):v/(d+g),d){case c:a=(u-h)/v+(u<h?6:0);break;case u:a=(h-c)/v+2;break;case h:a=(c-u)/v+4;break}a/=6}a*=360,l*=100,b*=100,e.hue!==void 0&&(a=(a+e.hue)%360,a<0&&(a+=360)),e.saturation!==void 0&&(l=Math.max(0,Math.min(100,l+e.saturation))),e.lightness!==void 0&&(b=Math.max(0,Math.min(100,b+e.lightness)));let m=a/360,L=l/100,R=b/100,p=(1-Math.abs(2*R-1))*L,O=p*(1-Math.abs(m*6%2-1)),y=R-p/2,M=0,k=0,w=0;m<1/6?[M,k,w]=[p,O,0]:m<2/6?[M,k,w]=[O,p,0]:m<3/6?[M,k,w]=[0,p,O]:m<4/6?[M,k,w]=[0,O,p]:m<5/6?[M,k,w]=[O,0,p]:[M,k,w]=[p,0,O],n=Math.round((M+y)*255),s=Math.round((k+y)*255),o=Math.round((w+y)*255)}if(e.contrast!==void 0){let c=e.contrast/100*2.55,u=(n+s+o)/3;n=Math.round(u+(n-u)*(1+c)),s=Math.round(u+(s-u)*(1+c)),o=Math.round(u+(o-u)*(1+c)),n=Math.max(0,Math.min(255,n)),s=Math.max(0,Math.min(255,s)),o=Math.max(0,Math.min(255,o))}return I(n,s,o,i)},ft=t=>{let{color:e,with:r="transparent",percentage:n=50,colorSpace:s="srgb"}=t,o=C(e),i=C(r);if(!o||!i)return e;let a=n/100,[l,b,c,u]=o,[h,d,g,m]=i;switch(t.opacity!==void 0&&(u=typeof t.opacity=="number"?t.opacity:P(t.opacity)),t.withOpacity!==void 0&&(m=typeof t.withOpacity=="number"?t.withOpacity:P(t.withOpacity)),s){case"srgb":default:let L=Math.round(l+(h-l)*a),R=Math.round(b+(d-b)*a),p=Math.round(c+(g-c)*a),O=u+(m-u)*a;return I(L,R,p,O);case"hsl":let y=C($(l,b,c,u)),M=C($(h,d,g,m));if(!y||!M)return e;let k=(y[0]+(M[0]-y[0])*a)%360,w=y[1]+(M[1]-y[1])*a,v=y[2]+(M[2]-y[2])*a;return`hsl(${k}, ${w}%, ${v}%)`}},dt=(t,e={})=>{let r=C(t);if(!r)return{};let n=e.shades||10,s=e.lightnessFactor||.1,o=e.saturationFactor||.05,i={};for(let a=0;a<n;a++){let l=a/(n-1),b=(l-.5)*2*s*100,c=rt(t,{lightness:b,saturation:(l-.5)*2*o*100}),u=a===0?"50":`${a*100}`;i[u]=c}if(e.includeComplementary){let a=C($(r[0],r[1],r[2]));if(a){let l=a[0];l=(l+180)%360,i.complementary=`hsl(${l}, ${a[1]}%, ${a[2]}%)`}}if(e.includeAnalogous){let a=C($(r[0],r[1],r[2]));if(a){let l=a[0];i.analogous1=`hsl(${(l-30+360)%360}, ${a[1]}%, ${a[2]}%)`,i.analogous2=`hsl(${(l+30)%360}, ${a[1]}%, ${a[2]}%)`}}if(e.includeTriadic){let a=C($(r[0],r[1],r[2]));if(a){let l=a[0];i.triadic1=`hsl(${(l+120)%360}, ${a[1]}%, ${a[2]}%)`,i.triadic2=`hsl(${(l+240)%360}, ${a[1]}%, ${a[2]}%)`}}return i},gt=(t,e={})=>{let{lightColor:r="#ffffff",darkColor:n="#000000",targetRatio:s=4.5,fallbackColor:o="#000000"}=e,i=C(t);if(!i)return o;let a=j(i[0],i[1],i[2]),l=j(...C(r).slice(0,3)),b=j(...C(n).slice(0,3)),c=(Math.max(a,l)+.05)/(Math.min(a,l)+.05),u=(Math.max(a,b)+.05)/(Math.min(a,b)+.05);return c>=s&&u>=s?c>u?r:n:c>=s?r:u>=s?n:c>u?r:n};var S={x:.95047,y:1,z:1.08883},A=.008856,T=903.3;function B(t,e,r){return Math.max(e,Math.min(r,t))}function $t(t,e=2){let r=Math.pow(10,e);return Math.round(t*r)/r}function _(t){let e=t.r/255,r=t.g/255,n=t.b/255,s=Math.max(e,r,n),o=Math.min(e,r,n),i=s-o,a=0,l=0,b=(s+o)/2;if(i!==0)switch(l=b>.5?i/(2-s-o):i/(s+o),s){case e:a=((r-n)/i+(r<n?6:0))/6;break;case r:a=((n-e)/i+2)/6;break;case n:a=((e-r)/i+4)/6;break}return{h:a*360,s:l*100,l:b*100,a:t.a}}function q(t){let e=t.r/255,r=t.g/255,n=t.b/255,s=Math.max(e,r,n),o=Math.min(e,r,n),i=s-o,a=0,l=s===0?0:i/s,b=s;if(i!==0)switch(s){case e:a=((r-n)/i+(r<n?6:0))/6;break;case r:a=((n-e)/i+2)/6;break;case n:a=((e-r)/i+4)/6;break}return{h:a*360,s:l*100,v:b*100,a:t.a}}function Z(t){let e=q(t),r=(100-e.s)*e.v/100,n=100-e.v;return{h:e.h,w:r,b:n,a:t.a}}function nt(t){let e=t.r/255,r=t.g/255,n=t.b/255,s=1-Math.max(e,r,n),o=s===1?0:(1-e-s)/(1-s),i=s===1?0:(1-r-s)/(1-s),a=s===1?0:(1-n-s)/(1-s);return{c:o*100,m:i*100,y:a*100,k:s*100,a:t.a}}function z(t){let e=t.r/255,r=t.g/255,n=t.b/255;e=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92,r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92,n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92;let s=e*.4124564+r*.3575761+n*.1804375,o=e*.2126729+r*.7151522+n*.072175,i=e*.0193339+r*.119192+n*.9503041;return{x:s*100,y:o*100,z:i*100,alpha:t.a}}function x(t){let e=z(t);return jt(e)}function D(t){let e=x(t);return Bt(e)}function H(t){let e=t.r/255,r=t.g/255,n=t.b/255,s=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92,o=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92,i=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92,a=.4122214708*s+.5363325363*o+.0514459929*i,l=.2119034982*s+.6806995451*o+.1073969566*i,b=.0883024619*s+.2817188376*o+.6299787005*i,c=Math.cbrt(a),u=Math.cbrt(l),h=Math.cbrt(b);return{l:.2104542553*c+.793617785*u-.0040720468*h,a:1.9779984951*c-2.428592205*u+.4505937099*h,b:.0259040371*c+.7827717662*u-.808675766*h,alpha:t.a}}function N(t){let e=H(t);return Nt(e)}function G(t){let e=t.h/360,r=t.s/100,n=t.l/100,s,o,i;if(r===0)s=o=i=n;else{let a=(c,u,h)=>(h<0&&(h+=1),h>1&&(h-=1),h<.16666666666666666?c+(u-c)*6*h:h<.5?u:h<.6666666666666666?c+(u-c)*(.6666666666666666-h)*6:c),l=n<.5?n*(1+r):n+r-n*r,b=2*n-l;s=a(b,l,e+1/3),o=a(b,l,e),i=a(b,l,e-1/3)}return{r:Math.round(s*255),g:Math.round(o*255),b:Math.round(i*255),a:t.a}}function U(t){let e=t.h/360,r=t.s/100,n=t.v/100,s=Math.floor(e*6),o=e*6-s,i=n*(1-r),a=n*(1-o*r),l=n*(1-(1-o)*r),b,c,u;switch(s%6){case 0:b=n,c=l,u=i;break;case 1:b=a,c=n,u=i;break;case 2:b=i,c=n,u=l;break;case 3:b=i,c=a,u=n;break;case 4:b=l,c=i,u=n;break;default:b=n,c=i,u=a;break}return{r:Math.round(b*255),g:Math.round(c*255),b:Math.round(u*255),a:t.a}}function ot(t){let e=t.h,r=t.w/100,n=t.b/100,s=r+n;s>1&&(r/=s,n/=s);let o=1-n,i=o===0?0:1-r/o;return U({h:e,s:i*100,v:o*100,a:t.a})}function st(t){let e=t.c/100,r=t.m/100,n=t.y/100,s=t.k/100,o=255*(1-e)*(1-s),i=255*(1-r)*(1-s),a=255*(1-n)*(1-s);return{r:Math.round(o),g:Math.round(i),b:Math.round(a),a:t.a}}function J(t){let e=t.x/100,r=t.y/100,n=t.z/100,s=e*3.2404542+r*-1.5371385+n*-.4985314,o=e*-.969266+r*1.8760108+n*.041556,i=e*.0556434+r*-.2040259+n*1.0572252;return s=s>.0031308?1.055*Math.pow(s,1/2.4)-.055:12.92*s,o=o>.0031308?1.055*Math.pow(o,1/2.4)-.055:12.92*o,i=i>.0031308?1.055*Math.pow(i,1/2.4)-.055:12.92*i,{r:Math.round(B(s*255,0,255)),g:Math.round(B(o*255,0,255)),b:Math.round(B(i*255,0,255)),a:t.alpha||1}}function jt(t){let e=t.x/S.x/100,r=t.y/S.y/100,n=t.z/S.z/100,s=e>A?Math.cbrt(e):(T*e+16)/116,o=r>A?Math.cbrt(r):(T*r+16)/116,i=n>A?Math.cbrt(n):(T*n+16)/116,a=116*o-16,l=500*(s-o),b=200*(o-i);return{l:B(a,0,100),a:l,b,alpha:t.alpha}}function Tt(t){let e=(t.l+16)/116,r=t.a/500+e,n=e-t.b/200,s=r*r*r>A?r*r*r:(116*r-16)/T,o=t.l>T*A?Math.pow((t.l+16)/116,3):t.l/T,i=n*n*n>A?n*n*n:(116*n-16)/T;return{x:s*S.x*100,y:o*S.y*100,z:i*S.z*100,alpha:t.alpha}}function F(t){let e=Tt(t);return J(e)}function Bt(t){let e=Math.sqrt(t.a*t.a+t.b*t.b),r=Math.atan2(t.b,t.a)*180/Math.PI;return r<0&&(r+=360),{l:t.l,c:e,h:r,alpha:t.alpha}}function _t(t){let e=t.h*Math.PI/180,r=t.c*Math.cos(e),n=t.c*Math.sin(e);return{l:t.l,a:r,b:n,alpha:t.alpha}}function at(t){let e=_t(t);return F(e)}function it(t){let e=t.l+.3963377774*t.a+.2158037573*t.b,r=t.l-.1055613458*t.a-.0638541728*t.b,n=t.l-.0894841775*t.a-1.291485548*t.b,s=e*e*e,o=r*r*r,i=n*n*n,a=4.0767416621*s-3.3077115913*o+.2309699292*i,l=-1.2684380046*s+2.6097574011*o-.3413193965*i,b=-.0041960863*s-.7034186147*o+1.707614701*i;return a=a>.0031308?1.055*Math.pow(a,1/2.4)-.055:12.92*a,l=l>.0031308?1.055*Math.pow(l,1/2.4)-.055:12.92*l,b=b>.0031308?1.055*Math.pow(b,1/2.4)-.055:12.92*b,{r:Math.round(B(a*255,0,255)),g:Math.round(B(l*255,0,255)),b:Math.round(B(b*255,0,255)),a:t.alpha}}function Nt(t){let e=Math.sqrt(t.a*t.a+t.b*t.b),r=Math.atan2(t.b,t.a)*180/Math.PI;return r<0&&(r+=360),{l:t.l,c:e,h:r,alpha:t.alpha}}function St(t){let e=t.h*Math.PI/180,r=t.c*Math.cos(e),n=t.c*Math.sin(e);return{l:t.l,a:r,b:n,alpha:t.alpha}}function V(t){let e=St(t);return it(e)}function At(t){if("r"in t&&"g"in t&&"b"in t)return t;if("h"in t&&"s"in t&&"l"in t)return G(t);if("h"in t&&"s"in t&&"v"in t)return U(t);if("h"in t&&"w"in t&&"b"in t)return ot(t);if("c"in t&&"m"in t&&"y"in t&&"k"in t)return st(t);if("x"in t&&"y"in t&&"z"in t)return J(t);if("l"in t&&"a"in t&&"b"in t&&!("c"in t)&&!("h"in t))return F(t);if("l"in t&&"c"in t&&"h"in t){let e=t;return e.l<=1?V(t):at(e)}throw new Error("Unknown color format")}function mt(t,e,r={}){let{round:n=!0,precision:s=2,preserveAlpha:o=!0}=r,i=At(t),a;switch(e.toLowerCase()){case"rgb":a=i;break;case"hsl":a=_(i);break;case"hsv":a=q(i);break;case"hwb":a=Z(i);break;case"cmyk":a=nt(i);break;case"xyz":a=z(i);break;case"lab":a=x(i);break;case"lch":a=D(i);break;case"oklab":a=H(i);break;case"oklch":a=N(i);break;default:a=i}return n&&a&&Object.keys(a).forEach(l=>{typeof a[l]=="number"&&l!=="a"&&l!=="alpha"&&(a[l]=$t(a[l],s))}),o||(delete a.a,delete a.alpha),a}function Ct(t,e){let r={rgb:["hsl","hsv","hwb","cmyk","xyz","lab","lch","oklab","oklch"],hsl:["rgb","hsv","hwb"],hsv:["rgb","hsl","hwb"],hwb:["rgb","hsl","hsv"],cmyk:["rgb","hsl","hsv"],xyz:["rgb","lab"],lab:["rgb","xyz","lch"],lch:["rgb","lab","xyz"],oklab:["rgb","oklch"],oklch:["rgb","oklab"]};return t=t.toLowerCase(),e=e.toLowerCase(),t===e?[t]:r[t]?.includes(e)?[t,e]:r[t]?.includes("rgb")&&r.rgb?.includes(e)?[t,"rgb",e]:["lab","lch"].includes(t)&&["lab","lch"].includes(e)&&t!==e?[t,"xyz",e]:["oklab","oklch"].includes(t)&&["oklab","oklch"].includes(e)&&t!==e?[t,"oklab",e]:r[t]&&r.rgb?.includes(e)?[t,"rgb",e]:null}function lt(){return["rgb","hsl","hsv","hwb","cmyk","xyz","lab","lch","oklab","oklch"]}function pt(t){return lt().includes(t.toLowerCase())}var f=class t{constructor(e="#000000"){this._r=0;this._g=0;this._b=0;this._a=1;this.set(e)}static parseRgbString(e){return K(e)}static isRgbFormat(e){return Object.values(W).some(r=>r.test(e.trim()))}static getRgbPatternMatch(e){let r=e.trim();for(let[n,s]of Object.entries(W))if(s.test(r))return n;return null}static toModernRgbSyntax(e,r,n,s){let o=[e,r,n];return s!==void 0&&s!==1?`rgb(${o.join(" ")} / ${s})`:`rgb(${o.join(" ")})`}static toLegacyRgbSyntax(e,r,n,s){let o=[e,r,n];return s!==void 0&&s!==1?`rgba(${o.join(", ")}, ${s})`:`rgb(${o.join(", ")})`}static normalizeRgbString(e,r="modern"){let n=K(e);if(!n)return null;let[s,o,i,a]=n;return r==="modern"?this.toModernRgbSyntax(s,o,i,a):this.toLegacyRgbSyntax(s,o,i,a)}set(e){if(typeof e=="string"){let r=C(e);r&&([this._r,this._g,this._b,this._a]=r)}else if(Array.isArray(e))[this._r=0,this._g=0,this._b=0,this._a=1]=e;else if(e instanceof t)[this._r,this._g,this._b,this._a]=[e._r,e._g,e._b,e._a];else if(typeof e=="object")return this.setFromObject(e);return this._clamp(),this}_clamp(){this._r=Math.max(0,Math.min(255,Math.round(this._r))),this._g=Math.max(0,Math.min(255,Math.round(this._g))),this._b=Math.max(0,Math.min(255,Math.round(this._b))),this._a=Math.max(0,Math.min(1,this._a))}get r(){return this._r}set r(e){this._r=e,this._clamp()}get g(){return this._g}set g(e){this._g=e,this._clamp()}get b(){return this._b}set b(e){this._b=e,this._clamp()}get a(){return this._a}set a(e){this._a=e,this._clamp()}get rgb(){return[this._r,this._g,this._b]}get rgba(){return[this._r,this._g,this._b,this._a]}toHex(){return I(this._r,this._g,this._b,this._a)}toRgb(){return tt(this._r,this._g,this._b)}toRgba(){return tt(this._r,this._g,this._b,this._a)}getRgbObject(){return{r:this._r,g:this._g,b:this._b,a:this._a}}toHsl(){return $(this._r,this._g,this._b,this._a)}getHslObject(){return _(this.getRgbObject())}toHsv(){return bt(this._r,this._g,this._b,this._a)}getHsvObject(){return q(this.getRgbObject())}toHwb(){let e=Z(this.getRgbObject()),r=this._a<1?` / ${Math.round(this._a*100)/100}`:"";return`hwb(${Math.round(e.h)} ${Math.round(e.w)}% ${Math.round(e.b)}%${r})`}getHwbObject(){return Z(this.getRgbObject())}toCmyk(){return ut(this._r,this._g,this._b,this._a)}getCmykObject(){return nt(this.getRgbObject())}toXyz(){let e=z(this.getRgbObject()),r=this._a<1?` / ${Math.round(this._a*100)/100}`:"";return`color(xyz ${e.x.toFixed(4)} ${e.y.toFixed(4)} ${e.z.toFixed(4)}${r})`}getXyzObject(){return z(this.getRgbObject())}toLab(){let e=x(this.getRgbObject()),r=this._a<1?` / ${Math.round(this._a*100)/100}`:"";return`lab(${e.l.toFixed(2)}% ${e.a.toFixed(2)} ${e.b.toFixed(2)}${r})`}getLabObject(){return x(this.getRgbObject())}toLch(){let e=D(this.getRgbObject()),r=this._a<1?` / ${Math.round(this._a*100)/100}`:"";return`lch(${e.l.toFixed(2)}% ${e.c.toFixed(2)} ${e.h.toFixed(2)}${r})`}getLchObject(){return D(this.getRgbObject())}toOklab(){let e=H(this.getRgbObject()),r=this._a<1?` / ${Math.round(this._a*100)/100}`:"";return`oklab(${e.l.toFixed(4)} ${e.a.toFixed(4)} ${e.b.toFixed(4)}${r})`}getOklabObject(){return H(this.getRgbObject())}toOklch(){let e=N(this.getRgbObject()),r=this._a<1?` / ${Math.round(this._a*100)/100}`:"";return`oklch(${e.l.toFixed(4)} ${e.c.toFixed(4)} ${e.h.toFixed(2)}${r})`}getOklchObject(){return N(this.getRgbObject())}adjust(e){let r=rt(this.toHex(),e);return this.set(r),this}lighten(e){return this.adjust({lightness:e})}darken(e){return this.adjust({lightness:-e})}saturate(e){return this.adjust({saturation:e})}desaturate(e){return this.adjust({saturation:-e})}rotate(e){return this.adjust({hue:e})}alpha(e){return this._a=Math.max(0,Math.min(1,e)),this}mix(e,r=50,n="srgb"){let s=ft({color:this.toHex(),with:e,percentage:r,colorSpace:n});return this.set(s),this}getContrastColor(e={}){let r=gt(this.toHex(),e);return new t(r)}getLuminance(){return j(this._r,this._g,this._b)}getContrastRatio(e){let r=e instanceof t?e.toHex():e;return ht(this.toHex(),r)}getPalette(e={}){return dt(this.toHex(),e)}clone(){return new t(this.rgba)}toString(e="hex"){switch(e){case"hex":return this.toHex();case"rgb":return this.toRgb();case"rgba":return this.toRgba();case"hsl":return this.toHsl();case"hsla":return this.toHsl();case"hsv":return this.toHsv();case"hsva":return this.toHsv();case"hwb":return this.toHwb();case"cmyk":return this.toCmyk();case"xyz":return this.toXyz();case"lab":return this.toLab();case"lch":return this.toLch();case"oklab":return this.toOklab();case"oklch":return this.toOklch();default:return this.toHex()}}convertTo(e,r={}){return mt(this.getRgbObject(),e,r)}setFromObject(e){let r;if("r"in e&&"g"in e&&"b"in e)r=e;else if("h"in e&&"s"in e&&"l"in e)r=G(e);else if("h"in e&&"s"in e&&"v"in e)r=U(e);else if("h"in e&&"w"in e&&"b"in e)r=ot(e);else if("c"in e&&"m"in e&&"y"in e&&"k"in e)r=st(e);else if("x"in e&&"y"in e&&"z"in e)r=J(e);else if("l"in e&&"a"in e&&"b"in e)r=F(e);else if("l"in e&&"c"in e&&"h"in e){let n=e;r=n.l<=1?V(e):at(n)}else throw new Error("Unknown color format");return this._r=r.r,this._g=r.g,this._b=r.b,this._a=r.a??1,this._clamp(),this}getHarmony(e={}){let{type:r="complementary",count:n=5,angleOffset:s=30}=e,o=this.getHslObject(),i=[];switch(r){case"complementary":i.push(new t({h:(o.h+180)%360,s:o.s,l:o.l,a:o.a}));break;case"analogous":i.push(new t({h:(o.h-s+360)%360,s:o.s,l:o.l,a:o.a}),new t({h:(o.h+s)%360,s:o.s,l:o.l,a:o.a}));break;case"triadic":i.push(new t({h:(o.h+120)%360,s:o.s,l:o.l,a:o.a}),new t({h:(o.h+240)%360,s:o.s,l:o.l,a:o.a}));break;case"tetradic":i.push(new t({h:(o.h+90)%360,s:o.s,l:o.l,a:o.a}),new t({h:(o.h+180)%360,s:o.s,l:o.l,a:o.a}),new t({h:(o.h+270)%360,s:o.s,l:o.l,a:o.a}));break;case"split-complementary":i.push(new t({h:(o.h+150)%360,s:o.s,l:o.l,a:o.a}),new t({h:(o.h+210)%360,s:o.s,l:o.l,a:o.a}));break;case"square":i.push(new t({h:(o.h+90)%360,s:o.s,l:o.l,a:o.a}),new t({h:(o.h+180)%360,s:o.s,l:o.l,a:o.a}),new t({h:(o.h+270)%360,s:o.s,l:o.l,a:o.a}));break;case"monochromatic":let a=100/(n+1);for(let l=1;l<=n;l++)i.push(new t({h:o.h,s:o.s,l:Math.max(0,Math.min(100,a*l)),a:o.a}));break}return i}static getSupportedFormats(){return lt()}static isValidFormat(e){return pt(e)}static getConversionPath(e,r){return Ct(e,r)}isValid(){return et(this.toHex())}static fromString(e){return et(e)?new t(e):null}static random(){let e=Math.floor(Math.random()*256),r=Math.floor(Math.random()*256),n=Math.floor(Math.random()*256);return new t([e,r,n,1])}static get transparent(){return new t("transparent")}static get white(){return new t("#ffffff")}static get black(){return new t("#000000")}static get red(){return new t("#ff0000")}static get green(){return new t("#00ff00")}static get blue(){return new t("#0000ff")}static get yellow(){return new t("#ffff00")}static get cyan(){return new t("#00ffff")}static get magenta(){return new t("#ff00ff")}static get gray(){return new t("#808080")}static get lightGray(){return new t("#d3d3d3")}static get darkGray(){return new t("#a9a9a9")}static get orange(){return new t("#ffa500")}static get purple(){return new t("#800080")}static get pink(){return new t("#ffc0cb")}static get brown(){return new t("#a52a2a")}static get teal(){return new t("#008080")}static get lime(){return new t("#00ff00")}static get indigo(){return new t("#4b0082")}static get violet(){return new t("#ee82ee")}};function Gt(t,e={}){let{temperature:r=0,intensity:n=.5}=e,o=(t instanceof f?t:new f(t)).getRgbObject(),i=Math.max(-1,Math.min(1,r/1e4)),a=o.r,l=o.g,b=o.b;if(i>0)a=Math.min(255,a+i*255*n),l=Math.min(255,l+i*200*n),b=Math.max(0,b-i*100*n);else{let c=Math.abs(i);a=Math.max(0,a-c*100*n),l=Math.max(0,l-c*50*n),b=Math.min(255,b+c*255*n)}return new f([Math.round(a),Math.round(l),Math.round(b),o.a||1])}function Ft(t,e="protanopia"){let n=(t instanceof f?t:new f(t)).getRgbObject(),s=n.r/255,o=n.g/255,i=n.b/255,a;switch(e){case"protanopia":a=[[.56667,.43333,0],[.55833,.44167,0],[0,.24167,.75833]];break;case"deuteranopia":a=[[.625,.375,0],[.7,.3,0],[0,.3,.7]];break;case"tritanopia":a=[[.95,.05,0],[0,.43333,.56667],[0,.475,.525]];break;case"achromatopsia":let u=.299*s+.587*o+.114*i;return new f([Math.round(u*255),Math.round(u*255),Math.round(u*255),n.a||1]);default:a=[[1,0,0],[0,1,0],[0,0,1]]}let l=a[0][0]*s+a[0][1]*o+a[0][2]*i,b=a[1][0]*s+a[1][1]*o+a[1][2]*i,c=a[2][0]*s+a[2][1]*o+a[2][2]*i;return new f([Math.round(Math.max(0,Math.min(255,l*255))),Math.round(Math.max(0,Math.min(255,b*255))),Math.round(Math.max(0,Math.min(255,c*255))),n.a||1])}function Pt(t,e=!1){let n=(t instanceof f?t:new f(t)).getRgbObject();return e?(.299*n.r+.587*n.g+.114*n.b)/255>.5?f.black:f.white:new f([255-n.r,255-n.g,255-n.b,n.a||1])}function Kt(t,e="luminosity"){let n=(t instanceof f?t:new f(t)).getRgbObject(),s;switch(e){case"average":s=(n.r+n.g+n.b)/3;break;case"luminosity":s=.299*n.r+.587*n.g+.114*n.b;break;case"lightness":s=(Math.max(n.r,n.g,n.b)+Math.min(n.r,n.g,n.b))/2;break;default:s=.299*n.r+.587*n.g+.114*n.b}let o=Math.round(s);return new f([o,o,o,n.a||1])}function zt(t,e=1){let n=(t instanceof f?t:new f(t)).getRgbObject(),s=n.r/255,o=n.g/255,i=n.b/255,a=.393*s+.769*o+.189*i,l=.349*s+.686*o+.168*i,b=.272*s+.534*o+.131*i;return a=s+(a-s)*e,l=o+(l-o)*e,b=i+(b-i)*e,new f([Math.round(Math.max(0,Math.min(255,a*255))),Math.round(Math.max(0,Math.min(255,l*255))),Math.round(Math.max(0,Math.min(255,b*255))),n.a||1])}function Mt(t,e){let r=t instanceof f?t:new f(t),n=e instanceof f?e:new f(e),s=x(r.getRgbObject()),o=x(n.getRgbObject()),i=s.l-o.l,a=s.a-o.a,l=s.b-o.b;return Math.sqrt(i*i+a*a+l*l)}function Vt(t,e){let r=t instanceof f?t:new f(t),n=null,s=1/0;for(let o of e){let i=Mt(r,o);i<s&&(s=i,n=o instanceof f?o:new f(o))}return n||r}function Yt(t,e,r=5,n="rgb"){let s=t instanceof f?t:new f(t),o=e instanceof f?e:new f(e),i=[];if(r<2)return[s];for(let a=0;a<r;a++){let l=a/(r-1),b;switch(n){case"hsl":{let c=_(s.getRgbObject()),u=_(o.getRgbObject()),h=c.h,d=u.h,g=d-h;Math.abs(g)>180&&(h<d?h+=360:d+=360);let m=(h+(d-h)*l)%360,L=c.s+(u.s-c.s)*l,R=c.l+(u.l-c.l)*l,p=(c.a??1)+((u.a??1)-(c.a??1))*l;b=G({h:m,s:L,l:R,a:p});break}case"lab":{let c=x(s.getRgbObject()),u=x(o.getRgbObject()),h=c.l+(u.l-c.l)*l,d=c.a+(u.a-c.a)*l,g=c.b+(u.b-c.b)*l,m=(c.alpha??1)+((u.alpha??1)-(c.alpha??1))*l;b=F({l:h,a:d,b:g,alpha:m});break}case"oklab":{let c=H(s.getRgbObject()),u=H(o.getRgbObject()),h=c.l+(u.l-c.l)*l,d=c.a+(u.a-c.a)*l,g=c.b+(u.b-c.b)*l,m=(c.alpha??1)+((u.alpha??1)-(c.alpha??1))*l;b=it({l:h,a:d,b:g,alpha:m});break}case"oklch":{let c=N(s.getRgbObject()),u=N(o.getRgbObject()),h=c.h,d=u.h,g=d-h;Math.abs(g)>180&&(h<d?h+=360:d+=360);let m=c.l+(u.l-c.l)*l,L=c.c+(u.c-c.c)*l,R=(h+(d-h)*l)%360,p=(c.alpha??1)+((u.alpha??1)-(c.alpha??1))*l;b=V({l:m,c:L,h:R,alpha:p});break}default:{let c=s.getRgbObject(),u=o.getRgbObject();b={r:Math.round(c.r+(u.r-c.r)*l),g:Math.round(c.g+(u.g-c.g)*l),b:Math.round(c.b+(u.b-c.b)*l),a:(c.a??1)+((u.a??1)-(c.a??1))*l};break}}i.push(new f(b))}return i}function yt(t){let r=(t instanceof f?t:new f(t)).getRgbObject();return(.299*r.r+.587*r.g+.114*r.b)/255}function xt(t){return yt(t)>.5}function Et(t){return!xt(t)}function Xt(t,e,r="normal",n=1){let s=t instanceof f?t:new f(t),o=e instanceof f?e:new f(e),i=s.getRgbObject(),a=o.getRgbObject(),l=(b,c)=>{let u=b/255,h=c/255,d;switch(r){case"multiply":d=u*h;break;case"screen":d=1-(1-u)*(1-h);break;case"overlay":d=u<.5?2*u*h:1-2*(1-u)*(1-h);break;default:d=h*n+u*(1-n);break}return Math.round(Math.max(0,Math.min(255,d*255)))};return new f([l(i.r,a.r),l(i.g,a.g),l(i.b,a.b),i.a||1])}function Wt(t){let r=(t instanceof f?t:new f(t)).getRgbObject(),n=Math.max(r.r,r.g,r.b),s=Math.min(r.r,r.g,r.b);return n-s<20?"gray":r.r===n?"red":r.g===n?"green":"blue"}function It(t){let e=t instanceof f?t:new f(t),r=_(e.getRgbObject());if(r.s<10)return r.l>90?"white":r.l<10?"black":r.l>60?"light gray":r.l<40?"dark gray":"gray";let n=r.h,s;return n<15||n>=345?s="red":n<45?s="orange":n<75?s="yellow":n<165?s="green":n<255?s="blue":n<285?s="purple":n<315?s="magenta":s="pink",r.l<30?`dark ${s}`:r.l>70?`light ${s}`:r.s<30?`dull ${s}`:r.s>70?`vivid ${s}`:s}function qt(t={}){let{hue:e=[0,360],saturation:r=[0,100],lightness:n=[0,100],alpha:s=1}=t,o=e[0]+Math.random()*(e[1]-e[0]),i=r[0]+Math.random()*(r[1]-r[0]),a=n[0]+Math.random()*(n[1]-n[0]),l=G({h:o,s:i,l:a,a:s});return new f(l)}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Advanced color helper utilities
|
|
3
|
+
* Provides temperature adjustments, color blindness simulation, and other advanced operations
|
|
4
|
+
*/
|
|
5
|
+
import type { ColorTemperatureOptions } from './types.js';
|
|
6
|
+
import { Color } from './color.js';
|
|
7
|
+
/**
|
|
8
|
+
* Color temperature adjustment
|
|
9
|
+
* Adjusts color temperature (warm/cool)
|
|
10
|
+
*/
|
|
11
|
+
export declare function adjustTemperature(color: string | Color, options?: ColorTemperatureOptions): Color;
|
|
12
|
+
/**
|
|
13
|
+
* Simulate color blindness
|
|
14
|
+
* Types: protanopia, deuteranopia, tritanopia, achromatopsia
|
|
15
|
+
*/
|
|
16
|
+
export declare function simulateColorBlindness(color: string | Color, type?: 'protanopia' | 'deuteranopia' | 'tritanopia' | 'achromatopsia'): Color;
|
|
17
|
+
/**
|
|
18
|
+
* Invert color
|
|
19
|
+
*/
|
|
20
|
+
export declare function invertColor(color: string | Color, bw?: boolean): Color;
|
|
21
|
+
/**
|
|
22
|
+
* Grayscale conversion
|
|
23
|
+
*/
|
|
24
|
+
export declare function toGrayscale(color: string | Color, method?: 'average' | 'luminosity' | 'lightness'): Color;
|
|
25
|
+
/**
|
|
26
|
+
* Sepia tone effect
|
|
27
|
+
*/
|
|
28
|
+
export declare function toSepia(color: string | Color, intensity?: number): Color;
|
|
29
|
+
/**
|
|
30
|
+
* Calculate color distance using Delta E (CIE2000)
|
|
31
|
+
* Returns a value where 0 = identical, >100 = very different
|
|
32
|
+
*/
|
|
33
|
+
export declare function colorDistance(color1: string | Color, color2: string | Color): number;
|
|
34
|
+
/**
|
|
35
|
+
* Find closest color from a palette
|
|
36
|
+
*/
|
|
37
|
+
export declare function findClosestColor(color: string | Color, palette: (string | Color)[]): Color;
|
|
38
|
+
/**
|
|
39
|
+
* Generate gradient colors
|
|
40
|
+
*/
|
|
41
|
+
export declare function generateGradient(startColor: string | Color, endColor: string | Color, steps?: number, colorSpace?: 'rgb' | 'hsl' | 'lab' | 'oklab' | 'oklch'): Color[];
|
|
42
|
+
/**
|
|
43
|
+
* Calculate perceptual brightness (0-1)
|
|
44
|
+
*/
|
|
45
|
+
export declare function getPerceivedBrightness(color: string | Color): number;
|
|
46
|
+
/**
|
|
47
|
+
* Check if color is light (brightness > 0.5)
|
|
48
|
+
*/
|
|
49
|
+
export declare function isLight(color: string | Color): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Check if color is dark (brightness <= 0.5)
|
|
52
|
+
*/
|
|
53
|
+
export declare function isDark(color: string | Color): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Blend two colors using various blend modes
|
|
56
|
+
*/
|
|
57
|
+
export declare function blendColors(base: string | Color, blend: string | Color, mode?: 'multiply' | 'screen' | 'overlay' | 'normal', opacity?: number): Color;
|
|
58
|
+
/**
|
|
59
|
+
* Get dominant color component
|
|
60
|
+
*/
|
|
61
|
+
export declare function getDominantComponent(color: string | Color): 'red' | 'green' | 'blue' | 'gray';
|
|
62
|
+
/**
|
|
63
|
+
* Get color name (basic approximation)
|
|
64
|
+
*/
|
|
65
|
+
export declare function getColorName(color: string | Color): string;
|
|
66
|
+
/**
|
|
67
|
+
* Random color generator with constraints
|
|
68
|
+
*/
|
|
69
|
+
export declare function randomColor(options?: {
|
|
70
|
+
hue?: [number, number];
|
|
71
|
+
saturation?: [number, number];
|
|
72
|
+
lightness?: [number, number];
|
|
73
|
+
alpha?: number;
|
|
74
|
+
}): Color;
|
|
75
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/lib/color/helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAY,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAYnC;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,GAAG,KAAK,EACrB,OAAO,GAAE,uBAA4B,GACpC,KAAK,CA2BP;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,GAAG,KAAK,EACrB,IAAI,GACA,YAAY,GACZ,cAAc,GACd,YAAY,GACZ,eAA8B,GACjC,KAAK,CAgEP;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,EAAE,GAAE,OAAe,GAAG,KAAK,CAY7E;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,GAAG,KAAK,EACrB,MAAM,GAAE,SAAS,GAAG,YAAY,GAAG,WAA0B,GAC5D,KAAK,CA0BP;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,SAAS,GAAE,MAAU,GAAG,KAAK,CAwB3E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,GAAG,KAAK,EACtB,MAAM,EAAE,MAAM,GAAG,KAAK,GACrB,MAAM,CAaR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,GAAG,KAAK,EACrB,OAAO,EAAE,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,GAC1B,KAAK,CAeP;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,GAAG,KAAK,EAC1B,QAAQ,EAAE,MAAM,GAAG,KAAK,EACxB,KAAK,GAAE,MAAU,EACjB,UAAU,GAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,OAAe,GAC5D,KAAK,EAAE,CAoHT;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAMpE;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,CAEtD;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,CAErD;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,GAAG,KAAK,EACpB,KAAK,EAAE,MAAM,GAAG,KAAK,EACrB,IAAI,GAAE,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAmB,EAC7D,OAAO,GAAE,MAAU,GAClB,KAAK,CAyCP;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,GAAG,KAAK,GACpB,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAenC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAmC1D;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,OAAO,GAAE;IACP,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CACX,GACL,KAAK,CAcP"}
|
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Advanced color helper utilities
|
|
3
|
+
* Provides temperature adjustments, color blindness simulation, and other advanced operations
|
|
4
|
+
*/
|
|
5
|
+
import { Color } from './color.js';
|
|
6
|
+
import { rgbToHsl, hslToRgb, rgbToLab, labToRgb, rgbToOklab, oklabToRgb, rgbToOklch, oklchToRgb, } from './conversions.js';
|
|
7
|
+
/**
|
|
8
|
+
* Color temperature adjustment
|
|
9
|
+
* Adjusts color temperature (warm/cool)
|
|
10
|
+
*/
|
|
11
|
+
export function adjustTemperature(color, options = {}) {
|
|
12
|
+
const { temperature = 0, intensity = 0.5 } = options;
|
|
13
|
+
const colorObj = color instanceof Color ? color : new Color(color);
|
|
14
|
+
const rgb = colorObj.getRgbObject();
|
|
15
|
+
// Normalized temperature (-1 to 1)
|
|
16
|
+
const normalizedTemp = Math.max(-1, Math.min(1, temperature / 10000));
|
|
17
|
+
// Adjust RGB channels based on temperature
|
|
18
|
+
let r = rgb.r;
|
|
19
|
+
let g = rgb.g;
|
|
20
|
+
let b = rgb.b;
|
|
21
|
+
if (normalizedTemp > 0) {
|
|
22
|
+
// Warmer (add red/yellow)
|
|
23
|
+
r = Math.min(255, r + normalizedTemp * 255 * intensity);
|
|
24
|
+
g = Math.min(255, g + normalizedTemp * 200 * intensity);
|
|
25
|
+
b = Math.max(0, b - normalizedTemp * 100 * intensity);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
// Cooler (add blue)
|
|
29
|
+
const coolness = Math.abs(normalizedTemp);
|
|
30
|
+
r = Math.max(0, r - coolness * 100 * intensity);
|
|
31
|
+
g = Math.max(0, g - coolness * 50 * intensity);
|
|
32
|
+
b = Math.min(255, b + coolness * 255 * intensity);
|
|
33
|
+
}
|
|
34
|
+
return new Color([Math.round(r), Math.round(g), Math.round(b), rgb.a || 1]);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Simulate color blindness
|
|
38
|
+
* Types: protanopia, deuteranopia, tritanopia, achromatopsia
|
|
39
|
+
*/
|
|
40
|
+
export function simulateColorBlindness(color, type = 'protanopia') {
|
|
41
|
+
const colorObj = color instanceof Color ? color : new Color(color);
|
|
42
|
+
const rgb = colorObj.getRgbObject();
|
|
43
|
+
let r = rgb.r / 255;
|
|
44
|
+
let g = rgb.g / 255;
|
|
45
|
+
let b = rgb.b / 255;
|
|
46
|
+
// Transformation matrices for different types of color blindness
|
|
47
|
+
let matrix;
|
|
48
|
+
switch (type) {
|
|
49
|
+
case 'protanopia': // Red-blind
|
|
50
|
+
matrix = [
|
|
51
|
+
[0.56667, 0.43333, 0.0],
|
|
52
|
+
[0.55833, 0.44167, 0.0],
|
|
53
|
+
[0.0, 0.24167, 0.75833],
|
|
54
|
+
];
|
|
55
|
+
break;
|
|
56
|
+
case 'deuteranopia': // Green-blind
|
|
57
|
+
matrix = [
|
|
58
|
+
[0.625, 0.375, 0.0],
|
|
59
|
+
[0.7, 0.3, 0.0],
|
|
60
|
+
[0.0, 0.3, 0.7],
|
|
61
|
+
];
|
|
62
|
+
break;
|
|
63
|
+
case 'tritanopia': // Blue-blind
|
|
64
|
+
matrix = [
|
|
65
|
+
[0.95, 0.05, 0.0],
|
|
66
|
+
[0.0, 0.43333, 0.56667],
|
|
67
|
+
[0.0, 0.475, 0.525],
|
|
68
|
+
];
|
|
69
|
+
break;
|
|
70
|
+
case 'achromatopsia': // Complete color blindness (grayscale)
|
|
71
|
+
const gray = 0.299 * r + 0.587 * g + 0.114 * b;
|
|
72
|
+
return new Color([
|
|
73
|
+
Math.round(gray * 255),
|
|
74
|
+
Math.round(gray * 255),
|
|
75
|
+
Math.round(gray * 255),
|
|
76
|
+
rgb.a || 1,
|
|
77
|
+
]);
|
|
78
|
+
default:
|
|
79
|
+
matrix = [
|
|
80
|
+
[1, 0, 0],
|
|
81
|
+
[0, 1, 0],
|
|
82
|
+
[0, 0, 1],
|
|
83
|
+
];
|
|
84
|
+
}
|
|
85
|
+
// Apply transformation
|
|
86
|
+
const newR = matrix[0][0] * r + matrix[0][1] * g + matrix[0][2] * b;
|
|
87
|
+
const newG = matrix[1][0] * r + matrix[1][1] * g + matrix[1][2] * b;
|
|
88
|
+
const newB = matrix[2][0] * r + matrix[2][1] * g + matrix[2][2] * b;
|
|
89
|
+
return new Color([
|
|
90
|
+
Math.round(Math.max(0, Math.min(255, newR * 255))),
|
|
91
|
+
Math.round(Math.max(0, Math.min(255, newG * 255))),
|
|
92
|
+
Math.round(Math.max(0, Math.min(255, newB * 255))),
|
|
93
|
+
rgb.a || 1,
|
|
94
|
+
]);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Invert color
|
|
98
|
+
*/
|
|
99
|
+
export function invertColor(color, bw = false) {
|
|
100
|
+
const colorObj = color instanceof Color ? color : new Color(color);
|
|
101
|
+
const rgb = colorObj.getRgbObject();
|
|
102
|
+
if (bw) {
|
|
103
|
+
// Black or white inversion based on luminance
|
|
104
|
+
const luminance = (0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b) / 255;
|
|
105
|
+
return luminance > 0.5 ? Color.black : Color.white;
|
|
106
|
+
}
|
|
107
|
+
// RGB inversion
|
|
108
|
+
return new Color([255 - rgb.r, 255 - rgb.g, 255 - rgb.b, rgb.a || 1]);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Grayscale conversion
|
|
112
|
+
*/
|
|
113
|
+
export function toGrayscale(color, method = 'luminosity') {
|
|
114
|
+
const colorObj = color instanceof Color ? color : new Color(color);
|
|
115
|
+
const rgb = colorObj.getRgbObject();
|
|
116
|
+
let gray;
|
|
117
|
+
switch (method) {
|
|
118
|
+
case 'average':
|
|
119
|
+
gray = (rgb.r + rgb.g + rgb.b) / 3;
|
|
120
|
+
break;
|
|
121
|
+
case 'luminosity':
|
|
122
|
+
gray = 0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b;
|
|
123
|
+
break;
|
|
124
|
+
case 'lightness':
|
|
125
|
+
gray =
|
|
126
|
+
(Math.max(rgb.r, rgb.g, rgb.b) + Math.min(rgb.r, rgb.g, rgb.b)) / 2;
|
|
127
|
+
break;
|
|
128
|
+
default:
|
|
129
|
+
gray = 0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b;
|
|
130
|
+
}
|
|
131
|
+
const value = Math.round(gray);
|
|
132
|
+
return new Color([value, value, value, rgb.a || 1]);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Sepia tone effect
|
|
136
|
+
*/
|
|
137
|
+
export function toSepia(color, intensity = 1) {
|
|
138
|
+
const colorObj = color instanceof Color ? color : new Color(color);
|
|
139
|
+
const rgb = colorObj.getRgbObject();
|
|
140
|
+
const r = rgb.r / 255;
|
|
141
|
+
const g = rgb.g / 255;
|
|
142
|
+
const b = rgb.b / 255;
|
|
143
|
+
// Sepia transformation matrix
|
|
144
|
+
let newR = 0.393 * r + 0.769 * g + 0.189 * b;
|
|
145
|
+
let newG = 0.349 * r + 0.686 * g + 0.168 * b;
|
|
146
|
+
let newB = 0.272 * r + 0.534 * g + 0.131 * b;
|
|
147
|
+
// Apply intensity
|
|
148
|
+
newR = r + (newR - r) * intensity;
|
|
149
|
+
newG = g + (newG - g) * intensity;
|
|
150
|
+
newB = b + (newB - b) * intensity;
|
|
151
|
+
return new Color([
|
|
152
|
+
Math.round(Math.max(0, Math.min(255, newR * 255))),
|
|
153
|
+
Math.round(Math.max(0, Math.min(255, newG * 255))),
|
|
154
|
+
Math.round(Math.max(0, Math.min(255, newB * 255))),
|
|
155
|
+
rgb.a || 1,
|
|
156
|
+
]);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Calculate color distance using Delta E (CIE2000)
|
|
160
|
+
* Returns a value where 0 = identical, >100 = very different
|
|
161
|
+
*/
|
|
162
|
+
export function colorDistance(color1, color2) {
|
|
163
|
+
const c1 = color1 instanceof Color ? color1 : new Color(color1);
|
|
164
|
+
const c2 = color2 instanceof Color ? color2 : new Color(color2);
|
|
165
|
+
const lab1 = rgbToLab(c1.getRgbObject());
|
|
166
|
+
const lab2 = rgbToLab(c2.getRgbObject());
|
|
167
|
+
// Simplified Delta E calculation (Euclidean distance in LAB space)
|
|
168
|
+
const deltaL = lab1.l - lab2.l;
|
|
169
|
+
const deltaA = lab1.a - lab2.a;
|
|
170
|
+
const deltaB = lab1.b - lab2.b;
|
|
171
|
+
return Math.sqrt(deltaL * deltaL + deltaA * deltaA + deltaB * deltaB);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Find closest color from a palette
|
|
175
|
+
*/
|
|
176
|
+
export function findClosestColor(color, palette) {
|
|
177
|
+
const targetColor = color instanceof Color ? color : new Color(color);
|
|
178
|
+
let closestColor = null;
|
|
179
|
+
let minDistance = Infinity;
|
|
180
|
+
for (const paletteColor of palette) {
|
|
181
|
+
const distance = colorDistance(targetColor, paletteColor);
|
|
182
|
+
if (distance < minDistance) {
|
|
183
|
+
minDistance = distance;
|
|
184
|
+
closestColor =
|
|
185
|
+
paletteColor instanceof Color ? paletteColor : new Color(paletteColor);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return closestColor || targetColor;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Generate gradient colors
|
|
192
|
+
*/
|
|
193
|
+
export function generateGradient(startColor, endColor, steps = 5, colorSpace = 'rgb') {
|
|
194
|
+
const start = startColor instanceof Color ? startColor : new Color(startColor);
|
|
195
|
+
const end = endColor instanceof Color ? endColor : new Color(endColor);
|
|
196
|
+
const colors = [];
|
|
197
|
+
if (steps < 2) {
|
|
198
|
+
return [start];
|
|
199
|
+
}
|
|
200
|
+
for (let i = 0; i < steps; i++) {
|
|
201
|
+
const t = i / (steps - 1);
|
|
202
|
+
let interpolated;
|
|
203
|
+
switch (colorSpace) {
|
|
204
|
+
case 'hsl': {
|
|
205
|
+
const hsl1 = rgbToHsl(start.getRgbObject());
|
|
206
|
+
const hsl2 = rgbToHsl(end.getRgbObject());
|
|
207
|
+
// Handle hue interpolation (shortest path around color wheel)
|
|
208
|
+
let h1 = hsl1.h;
|
|
209
|
+
let h2 = hsl2.h;
|
|
210
|
+
const diff = h2 - h1;
|
|
211
|
+
if (Math.abs(diff) > 180) {
|
|
212
|
+
if (h1 < h2) {
|
|
213
|
+
h1 += 360;
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
h2 += 360;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
const h = (h1 + (h2 - h1) * t) % 360;
|
|
220
|
+
const s = hsl1.s + (hsl2.s - hsl1.s) * t;
|
|
221
|
+
const l = hsl1.l + (hsl2.l - hsl1.l) * t;
|
|
222
|
+
const a = (hsl1.a ?? 1) + ((hsl2.a ?? 1) - (hsl1.a ?? 1)) * t;
|
|
223
|
+
interpolated = hslToRgb({ h, s, l, a });
|
|
224
|
+
break;
|
|
225
|
+
}
|
|
226
|
+
case 'lab': {
|
|
227
|
+
const lab1 = rgbToLab(start.getRgbObject());
|
|
228
|
+
const lab2 = rgbToLab(end.getRgbObject());
|
|
229
|
+
const l = lab1.l + (lab2.l - lab1.l) * t;
|
|
230
|
+
const a = lab1.a + (lab2.a - lab1.a) * t;
|
|
231
|
+
const b = lab1.b + (lab2.b - lab1.b) * t;
|
|
232
|
+
const alpha = (lab1.alpha ?? 1) + ((lab2.alpha ?? 1) - (lab1.alpha ?? 1)) * t;
|
|
233
|
+
interpolated = labToRgb({ l, a, b, alpha });
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
case 'oklab': {
|
|
237
|
+
const oklab1 = rgbToOklab(start.getRgbObject());
|
|
238
|
+
const oklab2 = rgbToOklab(end.getRgbObject());
|
|
239
|
+
const l = oklab1.l + (oklab2.l - oklab1.l) * t;
|
|
240
|
+
const a = oklab1.a + (oklab2.a - oklab1.a) * t;
|
|
241
|
+
const b = oklab1.b + (oklab2.b - oklab1.b) * t;
|
|
242
|
+
const alpha = (oklab1.alpha ?? 1) + ((oklab2.alpha ?? 1) - (oklab1.alpha ?? 1)) * t;
|
|
243
|
+
interpolated = oklabToRgb({ l, a, b, alpha });
|
|
244
|
+
break;
|
|
245
|
+
}
|
|
246
|
+
case 'oklch': {
|
|
247
|
+
const oklch1 = rgbToOklch(start.getRgbObject());
|
|
248
|
+
const oklch2 = rgbToOklch(end.getRgbObject());
|
|
249
|
+
// Handle hue interpolation (shortest path around color wheel)
|
|
250
|
+
let h1 = oklch1.h;
|
|
251
|
+
let h2 = oklch2.h;
|
|
252
|
+
const diff = h2 - h1;
|
|
253
|
+
if (Math.abs(diff) > 180) {
|
|
254
|
+
if (h1 < h2) {
|
|
255
|
+
h1 += 360;
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
h2 += 360;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
const l = oklch1.l + (oklch2.l - oklch1.l) * t;
|
|
262
|
+
const c = oklch1.c + (oklch2.c - oklch1.c) * t;
|
|
263
|
+
const h = (h1 + (h2 - h1) * t) % 360;
|
|
264
|
+
const alpha = (oklch1.alpha ?? 1) + ((oklch2.alpha ?? 1) - (oklch1.alpha ?? 1)) * t;
|
|
265
|
+
interpolated = oklchToRgb({ l, c, h, alpha });
|
|
266
|
+
break;
|
|
267
|
+
}
|
|
268
|
+
case 'rgb':
|
|
269
|
+
default: {
|
|
270
|
+
const rgb1 = start.getRgbObject();
|
|
271
|
+
const rgb2 = end.getRgbObject();
|
|
272
|
+
interpolated = {
|
|
273
|
+
r: Math.round(rgb1.r + (rgb2.r - rgb1.r) * t),
|
|
274
|
+
g: Math.round(rgb1.g + (rgb2.g - rgb1.g) * t),
|
|
275
|
+
b: Math.round(rgb1.b + (rgb2.b - rgb1.b) * t),
|
|
276
|
+
a: (rgb1.a ?? 1) + ((rgb2.a ?? 1) - (rgb1.a ?? 1)) * t,
|
|
277
|
+
};
|
|
278
|
+
break;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
colors.push(new Color(interpolated));
|
|
282
|
+
}
|
|
283
|
+
return colors;
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Calculate perceptual brightness (0-1)
|
|
287
|
+
*/
|
|
288
|
+
export function getPerceivedBrightness(color) {
|
|
289
|
+
const colorObj = color instanceof Color ? color : new Color(color);
|
|
290
|
+
const rgb = colorObj.getRgbObject();
|
|
291
|
+
// Using W3C formula for perceived brightness
|
|
292
|
+
return (0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b) / 255;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Check if color is light (brightness > 0.5)
|
|
296
|
+
*/
|
|
297
|
+
export function isLight(color) {
|
|
298
|
+
return getPerceivedBrightness(color) > 0.5;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Check if color is dark (brightness <= 0.5)
|
|
302
|
+
*/
|
|
303
|
+
export function isDark(color) {
|
|
304
|
+
return !isLight(color);
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Blend two colors using various blend modes
|
|
308
|
+
*/
|
|
309
|
+
export function blendColors(base, blend, mode = 'normal', opacity = 1) {
|
|
310
|
+
const baseColor = base instanceof Color ? base : new Color(base);
|
|
311
|
+
const blendColor = blend instanceof Color ? blend : new Color(blend);
|
|
312
|
+
const b = baseColor.getRgbObject();
|
|
313
|
+
const a = blendColor.getRgbObject();
|
|
314
|
+
const blendChannel = (base, blend) => {
|
|
315
|
+
const b = base / 255;
|
|
316
|
+
const a = blend / 255;
|
|
317
|
+
let result;
|
|
318
|
+
switch (mode) {
|
|
319
|
+
case 'multiply':
|
|
320
|
+
result = b * a;
|
|
321
|
+
break;
|
|
322
|
+
case 'screen':
|
|
323
|
+
result = 1 - (1 - b) * (1 - a);
|
|
324
|
+
break;
|
|
325
|
+
case 'overlay':
|
|
326
|
+
result = b < 0.5 ? 2 * b * a : 1 - 2 * (1 - b) * (1 - a);
|
|
327
|
+
break;
|
|
328
|
+
case 'normal':
|
|
329
|
+
default:
|
|
330
|
+
result = a * opacity + b * (1 - opacity);
|
|
331
|
+
break;
|
|
332
|
+
}
|
|
333
|
+
return Math.round(Math.max(0, Math.min(255, result * 255)));
|
|
334
|
+
};
|
|
335
|
+
return new Color([
|
|
336
|
+
blendChannel(b.r, a.r),
|
|
337
|
+
blendChannel(b.g, a.g),
|
|
338
|
+
blendChannel(b.b, a.b),
|
|
339
|
+
b.a || 1,
|
|
340
|
+
]);
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Get dominant color component
|
|
344
|
+
*/
|
|
345
|
+
export function getDominantComponent(color) {
|
|
346
|
+
const colorObj = color instanceof Color ? color : new Color(color);
|
|
347
|
+
const rgb = colorObj.getRgbObject();
|
|
348
|
+
const max = Math.max(rgb.r, rgb.g, rgb.b);
|
|
349
|
+
const min = Math.min(rgb.r, rgb.g, rgb.b);
|
|
350
|
+
// Check if color is grayscale
|
|
351
|
+
if (max - min < 20) {
|
|
352
|
+
return 'gray';
|
|
353
|
+
}
|
|
354
|
+
if (rgb.r === max)
|
|
355
|
+
return 'red';
|
|
356
|
+
if (rgb.g === max)
|
|
357
|
+
return 'green';
|
|
358
|
+
return 'blue';
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Get color name (basic approximation)
|
|
362
|
+
*/
|
|
363
|
+
export function getColorName(color) {
|
|
364
|
+
const colorObj = color instanceof Color ? color : new Color(color);
|
|
365
|
+
const hsl = rgbToHsl(colorObj.getRgbObject());
|
|
366
|
+
// Determine saturation level
|
|
367
|
+
if (hsl.s < 10) {
|
|
368
|
+
if (hsl.l > 90)
|
|
369
|
+
return 'white';
|
|
370
|
+
if (hsl.l < 10)
|
|
371
|
+
return 'black';
|
|
372
|
+
if (hsl.l > 60)
|
|
373
|
+
return 'light gray';
|
|
374
|
+
if (hsl.l < 40)
|
|
375
|
+
return 'dark gray';
|
|
376
|
+
return 'gray';
|
|
377
|
+
}
|
|
378
|
+
// Determine hue
|
|
379
|
+
const h = hsl.h;
|
|
380
|
+
let hueName;
|
|
381
|
+
if (h < 15 || h >= 345)
|
|
382
|
+
hueName = 'red';
|
|
383
|
+
else if (h < 45)
|
|
384
|
+
hueName = 'orange';
|
|
385
|
+
else if (h < 75)
|
|
386
|
+
hueName = 'yellow';
|
|
387
|
+
else if (h < 165)
|
|
388
|
+
hueName = 'green';
|
|
389
|
+
else if (h < 255)
|
|
390
|
+
hueName = 'blue';
|
|
391
|
+
else if (h < 285)
|
|
392
|
+
hueName = 'purple';
|
|
393
|
+
else if (h < 315)
|
|
394
|
+
hueName = 'magenta';
|
|
395
|
+
else
|
|
396
|
+
hueName = 'pink';
|
|
397
|
+
// Add lightness modifier
|
|
398
|
+
if (hsl.l < 30)
|
|
399
|
+
return `dark ${hueName}`;
|
|
400
|
+
if (hsl.l > 70)
|
|
401
|
+
return `light ${hueName}`;
|
|
402
|
+
// Add saturation modifier
|
|
403
|
+
if (hsl.s < 30)
|
|
404
|
+
return `dull ${hueName}`;
|
|
405
|
+
if (hsl.s > 70)
|
|
406
|
+
return `vivid ${hueName}`;
|
|
407
|
+
return hueName;
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Random color generator with constraints
|
|
411
|
+
*/
|
|
412
|
+
export function randomColor(options = {}) {
|
|
413
|
+
const { hue = [0, 360], saturation = [0, 100], lightness = [0, 100], alpha = 1, } = options;
|
|
414
|
+
const h = hue[0] + Math.random() * (hue[1] - hue[0]);
|
|
415
|
+
const s = saturation[0] + Math.random() * (saturation[1] - saturation[0]);
|
|
416
|
+
const l = lightness[0] + Math.random() * (lightness[1] - lightness[0]);
|
|
417
|
+
const rgb = hslToRgb({ h, s, l, a: alpha });
|
|
418
|
+
return new Color(rgb);
|
|
419
|
+
}
|