@gradient-ui/gradient-engine 0.6.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/README.md +0 -6
  2. package/dist/animation.cjs +13 -13
  3. package/dist/animation.mjs +36 -36
  4. package/dist/core.cjs +1 -1
  5. package/dist/core.mjs +17 -17
  6. package/dist/css-B3xGfmW1.js +17 -0
  7. package/dist/css-CREh0Awz.cjs +1 -0
  8. package/dist/design-tokens.cjs +1 -1
  9. package/dist/design-tokens.mjs +5 -5
  10. package/dist/designTokens-Bw-HZ1f1.js +116 -0
  11. package/dist/designTokens-DsIk5RSi.cjs +1 -0
  12. package/dist/effects.cjs +67 -67
  13. package/dist/effects.mjs +153 -153
  14. package/dist/formatters.cjs +1 -1
  15. package/dist/formatters.mjs +33 -33
  16. package/dist/index.cjs +1 -1
  17. package/dist/index.mjs +63 -63
  18. package/dist/material.cjs +8 -8
  19. package/dist/material.mjs +170 -170
  20. package/dist/presets-DA-6KYJh.cjs +316 -0
  21. package/dist/presets-Du6aTLtD.js +4025 -0
  22. package/dist/svg-B2CaHCLv.js +118 -0
  23. package/dist/svg-BtMrj3fP.cjs +32 -0
  24. package/dist/types/animation/css.d.ts +2 -2
  25. package/dist/types/animation/index.d.ts +1 -1
  26. package/dist/types/colorSystem.d.ts +3 -3
  27. package/dist/types/core.d.ts +7 -7
  28. package/dist/types/designTokens.d.ts +4 -4
  29. package/dist/types/effects/index.d.ts +2 -2
  30. package/dist/types/effects/morph.d.ts +1 -1
  31. package/dist/types/effects/shadow.d.ts +1 -1
  32. package/dist/types/formatters/canvas.d.ts +1 -1
  33. package/dist/types/formatters/css.d.ts +1 -1
  34. package/dist/types/formatters/index.d.ts +3 -3
  35. package/dist/types/formatters/svg.d.ts +1 -1
  36. package/dist/types/index.d.ts +11 -11
  37. package/dist/types/material.d.ts +1 -1
  38. package/dist/types/model.d.ts +3 -3
  39. package/dist/types/palette.d.ts +1 -1
  40. package/dist/types/presets.d.ts +1 -1
  41. package/dist/types/recipes.d.ts +12 -12
  42. package/dist/types/tokens.d.ts +3 -3
  43. package/dist/types/types.d.ts +1 -1
  44. package/dist/types/utils.d.ts +1 -1
  45. package/dist/{types-BFr1fN-7.js → types-B0eCazk8.js} +4 -4
  46. package/dist/types-BFkUlDkW.cjs +1 -0
  47. package/dist/types-cjs/animation/css.d.cts +12 -0
  48. package/dist/types-cjs/animation/index.d.cts +1 -0
  49. package/dist/types-cjs/color.d.cts +11 -0
  50. package/dist/types-cjs/colorMath.d.cts +3 -0
  51. package/dist/types-cjs/colorSeeds.d.cts +22 -0
  52. package/dist/types-cjs/colorSystem.d.cts +20 -0
  53. package/dist/types-cjs/constants.d.cts +3 -0
  54. package/dist/types-cjs/core.d.cts +9 -0
  55. package/dist/types-cjs/designTokens.d.cts +24 -0
  56. package/dist/types-cjs/effects/index.d.cts +2 -0
  57. package/dist/types-cjs/effects/morph.d.cts +8 -0
  58. package/dist/types-cjs/effects/shadow.d.cts +3 -0
  59. package/dist/types-cjs/formatters/canvas.d.cts +2 -0
  60. package/dist/types-cjs/formatters/css.d.cts +3 -0
  61. package/dist/types-cjs/formatters/index.d.cts +3 -0
  62. package/dist/types-cjs/formatters/svg.d.cts +5 -0
  63. package/dist/types-cjs/index.d.cts +11 -0
  64. package/dist/types-cjs/material.d.cts +1 -0
  65. package/dist/types-cjs/model.d.cts +5 -0
  66. package/dist/types-cjs/package.json +3 -0
  67. package/dist/types-cjs/palette.d.cts +13 -0
  68. package/dist/types-cjs/presets.d.cts +239 -0
  69. package/dist/types-cjs/recipes.d.cts +14 -0
  70. package/dist/types-cjs/scheme.d.cts +3 -0
  71. package/dist/types-cjs/tokens.d.cts +107 -0
  72. package/dist/types-cjs/types.d.cts +127 -0
  73. package/dist/types-cjs/utils.d.cts +10 -0
  74. package/dist/utils-Bry9BTmj.cjs +1 -0
  75. package/dist/utils-VaqPefmS.js +76 -0
  76. package/package.json +59 -23
  77. package/dist/css-BVHXLMRl.cjs +0 -1
  78. package/dist/css-DVaTTIqS.js +0 -17
  79. package/dist/designTokens-BnzZfRES.js +0 -116
  80. package/dist/designTokens-C1WdzS3v.cjs +0 -1
  81. package/dist/presets-BBLdqUE4.cjs +0 -316
  82. package/dist/presets-DYXLx_nN.js +0 -4025
  83. package/dist/svg-dGtLYnIJ.cjs +0 -32
  84. package/dist/svg-hZus3ztj.js +0 -118
  85. package/dist/types-BMLEvdee.cjs +0 -1
  86. package/dist/utils-BzSNCfat.js +0 -76
  87. package/dist/utils-D83DMCMa.cjs +0 -1
package/dist/effects.cjs CHANGED
@@ -1,23 +1,23 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("./utils-D83DMCMa.cjs"),D=require("./css-BVHXLMRl.cjs"),S=require("./types-BMLEvdee.cjs"),_="http://www.w3.org/2000/svg",k="http://www.w3.org/1999/xhtml",O=r=>r.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),X={soft:{blobCount:5,blur:40,contrast:18,duration:12e3,opacity:.76,scale:1.05},liquid:{blobCount:6,blur:46,contrast:22,duration:9200,opacity:.82,scale:1.18},ripple:{blobCount:7,blur:34,contrast:20,duration:7200,opacity:.78,scale:.94}},Y=new Set(S.GRADIENT_MORPH_BLEND_MODES),G=r=>Y.has(r),N=r=>r&&G(r)?r:S.DEFAULT_GRADIENT_MORPH_BLEND_MODE,y=(r={})=>{const a=X[r.preset??"soft"];return{blobCount:Math.max(2,Math.round(r.blobCount??a.blobCount)),blendMode:N(r.blendMode),blobOpacity:c.clamp(r.blobOpacity??1,0,1.6),blur:c.clamp(r.blur??a.blur,0,80),contrast:c.clamp(r.contrast??a.contrast,0,36),duration:r.duration??a.duration,id:r.id??"g-gradient-morph",opacity:c.clamp(r.opacity??a.opacity),scale:c.clamp(r.scale??a.scale,.4,2)}},L=(r,a)=>{var t,i;return((t=r.stops[a%r.stops.length])==null?void 0:t.color)??((i=r.stops[0])==null?void 0:i.color)??"currentColor"},E=r=>{if(typeof r=="number")return r;const a=Number.parseFloat(r);return Number.isFinite(a)?a:9e3},A=(r,a)=>{const t=Math.sin((r+1)*12.9898+a*78.233)*43758.5453;return t-Math.floor(t)},l=(r,a,t,i)=>t+A(r,a)*(i-t),h=r=>Number(r.toFixed(3)),w=[{animationName:"g-gradient-morph-drift",dx:20,dx2:8,dy:-8,dy2:16,originX:"50%",originY:"50%",scaleMid:1.16,scaleTo:1.04,x:6,y:58},{animationName:"g-gradient-morph-orbit",dx:-18,dx2:10,dy:18,dy2:-10,originX:"24%",originY:"68%",scaleMid:.96,scaleTo:1.12,x:44,y:20},{animationName:"g-gradient-morph-float",dx:-16,dx2:-8,dy:-12,dy2:18,originX:"50%",originY:"50%",scaleMid:1.2,scaleTo:1.08,x:74,y:58},{animationName:"g-gradient-morph-orbit",dx:12,dx2:-20,dy:14,dy2:6,originX:"70%",originY:"30%",scaleMid:1.04,scaleTo:1.18,x:88,y:25},{animationName:"g-gradient-morph-drift",dx:24,dx2:-12,dy:-16,dy2:-8,originX:"50%",originY:"50%",scaleMid:1.12,scaleTo:.98,x:30,y:78},{animationName:"g-gradient-morph-float",dx:-22,dx2:14,dy:10,dy2:-18,originX:"50%",originY:"50%",scaleMid:.94,scaleTo:1.1,x:104,y:82},{animationName:"g-gradient-morph-orbit",dx:14,dx2:-16,dy:-22,dy2:10,originX:"35%",originY:"35%",scaleMid:1.18,scaleTo:1.02,x:55,y:64},{animationName:"g-gradient-morph-drift",dx:-18,dx2:18,dy:-14,dy2:14,originX:"50%",originY:"50%",scaleMid:1.08,scaleTo:.96,x:18,y:24}],v=(r,a={})=>{const{blobCount:t,blobOpacity:i,duration:g,scale:d}=y(a),e=E(g);return Array.from({length:t},(m,n)=>{const s=w[n%w.length],p=l(n,1,.88,1.16),o=l(n,2,.86,1.24),$=c.clamp(l(n,3,.72,1)*i),f=l(n,4,0,4),x=(34+n%4*9)*d*p;return{animationName:s.animationName,blur:h(f),color:L(r,n),delay:Math.round(n*-.19*e-l(n,5,0,900)),dx:h(s.dx*l(n,6,.84,1.18)),dx2:h(s.dx2*l(n,7,.82,1.22)),dy:h(s.dy*l(n,8,.84,1.18)),dy2:h(s.dy2*l(n,9,.82,1.22)),duration:Math.round(e*(1+n%3*.11)*o),opacity:h($),originX:s.originX,originY:s.originY,rotateMid:Math.round(l(n,10,95,165)),rotateTo:Math.round(l(n,11,220,310)),scaleMid:s.scaleMid,scaleTo:s.scaleTo,size:h(x),x:s.x,y:s.y}})},M=(r={})=>`url(#${y(r).id}) blur(${y(r).blur}px)`,B=(r={})=>{const{blur:a,contrast:t,id:i}=y(r),g=Math.max(2,Math.round(a*.25)),d=-(t*.45),e=t<=0?"":`
2
- <feColorMatrix in="g-gradient-morph-blur" mode="matrix" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 ${t} ${d}" result="g-gradient-morph-goo" />
3
- <feBlend in="SourceGraphic" in2="g-gradient-morph-goo" />`;return`<svg xmlns="${_}" width="0" height="0" aria-hidden="true" focusable="false" style="position:absolute;overflow:hidden;inline-size:0;block-size:0;">
4
- <filter id="${i}" x="-30%" y="-30%" width="160%" height="160%" color-interpolation-filters="sRGB">
5
- <feGaussianBlur in="SourceGraphic" stdDeviation="${g}" result="g-gradient-morph-blur" />${e}
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const utils=require("./utils-Bry9BTmj.cjs"),css=require("./css-CREh0Awz.cjs"),types=require("./types-BFkUlDkW.cjs"),SVG_NAMESPACE="http://www.w3.org/2000/svg",XHTML_NAMESPACE="http://www.w3.org/1999/xhtml",escapeAttribute=value=>value.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;"),morphPresets={soft:{blobCount:5,blur:40,contrast:18,duration:12e3,opacity:.76,scale:1.05},liquid:{blobCount:6,blur:46,contrast:22,duration:9200,opacity:.82,scale:1.18},ripple:{blobCount:7,blur:34,contrast:20,duration:7200,opacity:.78,scale:.94}},gradientMorphBlendModeSet=new Set(types.GRADIENT_MORPH_BLEND_MODES),isGradientMorphBlendMode=value=>gradientMorphBlendModeSet.has(value),resolveGradientMorphBlendMode=value=>value&&isGradientMorphBlendMode(value)?value:types.DEFAULT_GRADIENT_MORPH_BLEND_MODE,getMorphOptions=(options={})=>{const preset=morphPresets[options.preset??"soft"];return{blobCount:Math.max(2,Math.round(options.blobCount??preset.blobCount)),blendMode:resolveGradientMorphBlendMode(options.blendMode),blobOpacity:utils.clamp(options.blobOpacity??1,0,1.6),blur:utils.clamp(options.blur??preset.blur,0,80),contrast:utils.clamp(options.contrast??preset.contrast,0,36),duration:options.duration??preset.duration,id:options.id??"g-gradient-morph",opacity:utils.clamp(options.opacity??preset.opacity),scale:utils.clamp(options.scale??preset.scale,.4,2)}},getBlobColor=(model,index)=>{var _a,_b;return((_a=model.stops[index%model.stops.length])==null?void 0:_a.color)??((_b=model.stops[0])==null?void 0:_b.color)??"currentColor"},getDurationMs=duration=>{if(typeof duration=="number")return duration;const parsed=Number.parseFloat(duration);return Number.isFinite(parsed)?parsed:9e3},getNoise=(index,salt)=>{const value=Math.sin((index+1)*12.9898+salt*78.233)*43758.5453;return value-Math.floor(value)},getNoiseRange=(index,salt,min,max)=>min+getNoise(index,salt)*(max-min),round=value=>Number(value.toFixed(3)),blobPaths=[{animationName:"g-gradient-morph-drift",dx:20,dx2:8,dy:-8,dy2:16,originX:"50%",originY:"50%",scaleMid:1.16,scaleTo:1.04,x:6,y:58},{animationName:"g-gradient-morph-orbit",dx:-18,dx2:10,dy:18,dy2:-10,originX:"24%",originY:"68%",scaleMid:.96,scaleTo:1.12,x:44,y:20},{animationName:"g-gradient-morph-float",dx:-16,dx2:-8,dy:-12,dy2:18,originX:"50%",originY:"50%",scaleMid:1.2,scaleTo:1.08,x:74,y:58},{animationName:"g-gradient-morph-orbit",dx:12,dx2:-20,dy:14,dy2:6,originX:"70%",originY:"30%",scaleMid:1.04,scaleTo:1.18,x:88,y:25},{animationName:"g-gradient-morph-drift",dx:24,dx2:-12,dy:-16,dy2:-8,originX:"50%",originY:"50%",scaleMid:1.12,scaleTo:.98,x:30,y:78},{animationName:"g-gradient-morph-float",dx:-22,dx2:14,dy:10,dy2:-18,originX:"50%",originY:"50%",scaleMid:.94,scaleTo:1.1,x:104,y:82},{animationName:"g-gradient-morph-orbit",dx:14,dx2:-16,dy:-22,dy2:10,originX:"35%",originY:"35%",scaleMid:1.18,scaleTo:1.02,x:55,y:64},{animationName:"g-gradient-morph-drift",dx:-18,dx2:18,dy:-14,dy2:14,originX:"50%",originY:"50%",scaleMid:1.08,scaleTo:.96,x:18,y:24}],createGradientMorphBlobs=(model,options={})=>{const{blobCount,blobOpacity,duration,scale}=getMorphOptions(options),durationMs=getDurationMs(duration);return Array.from({length:blobCount},(_,index)=>{const path=blobPaths[index%blobPaths.length],sizeJitter=getNoiseRange(index,1,.88,1.16),durationJitter=getNoiseRange(index,2,.86,1.24),opacity=utils.clamp(getNoiseRange(index,3,.72,1)*blobOpacity),blur=getNoiseRange(index,4,0,4),size=(34+index%4*9)*scale*sizeJitter;return{animationName:path.animationName,blur:round(blur),color:getBlobColor(model,index),delay:Math.round(index*-.19*durationMs-getNoiseRange(index,5,0,900)),dx:round(path.dx*getNoiseRange(index,6,.84,1.18)),dx2:round(path.dx2*getNoiseRange(index,7,.82,1.22)),dy:round(path.dy*getNoiseRange(index,8,.84,1.18)),dy2:round(path.dy2*getNoiseRange(index,9,.82,1.22)),duration:Math.round(durationMs*(1+index%3*.11)*durationJitter),opacity:round(opacity),originX:path.originX,originY:path.originY,rotateMid:Math.round(getNoiseRange(index,10,95,165)),rotateTo:Math.round(getNoiseRange(index,11,220,310)),scaleMid:path.scaleMid,scaleTo:path.scaleTo,size:round(size),x:path.x,y:path.y}})},toGradientMorphFilter=(options={})=>`url(#${getMorphOptions(options).id}) blur(${getMorphOptions(options).blur}px)`,toGradientMorphFilterMarkup=(options={})=>{const{blur,contrast,id}=getMorphOptions(options),gooBlur=Math.max(2,Math.round(blur*.25)),alphaOffset=-(contrast*.45),matrix=contrast<=0?"":`
2
+ <feColorMatrix in="g-gradient-morph-blur" mode="matrix" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 ${contrast} ${alphaOffset}" result="g-gradient-morph-goo" />
3
+ <feBlend in="SourceGraphic" in2="g-gradient-morph-goo" />`;return`<svg xmlns="${SVG_NAMESPACE}" width="0" height="0" aria-hidden="true" focusable="false" style="position:absolute;overflow:hidden;inline-size:0;block-size:0;">
4
+ <filter id="${id}" x="-30%" y="-30%" width="160%" height="160%" color-interpolation-filters="sRGB">
5
+ <feGaussianBlur in="SourceGraphic" stdDeviation="${gooBlur}" result="g-gradient-morph-blur" />${matrix}
6
6
  </filter>
7
- </svg>`},P=(r,a={})=>{const t=a.selector??".g-gradient-morph",{blendMode:i,opacity:g}=y(a),d=v(r,a);return`${t} {
7
+ </svg>`},toGradientMorphCSS=(model,options={})=>{const selector=options.selector??".g-gradient-morph",{blendMode,opacity}=getMorphOptions(options),blobs=createGradientMorphBlobs(model,options);return`${selector} {
8
8
  position: relative;
9
9
  overflow: hidden;
10
10
  }
11
11
 
12
- ${t}__blobs {
12
+ ${selector}__blobs {
13
13
  position: absolute;
14
14
  inset: -18%;
15
- opacity: ${g};
16
- filter: ${M(a)};
17
- mix-blend-mode: ${i};
15
+ opacity: ${opacity};
16
+ filter: ${toGradientMorphFilter(options)};
17
+ mix-blend-mode: ${blendMode};
18
18
  }
19
19
 
20
- ${t}__blob {
20
+ ${selector}__blob {
21
21
  position: absolute;
22
22
  transform: translate(-50%, -50%);
23
23
  transform-origin: var(--g-gradient-morph-origin-x) var(--g-gradient-morph-origin-y);
@@ -28,28 +28,28 @@ ${t}__blob {
28
28
  animation: var(--g-gradient-morph-animation) var(--g-gradient-morph-duration, 9000ms) ease-in-out infinite alternate;
29
29
  }
30
30
 
31
- ${d.map((e,m)=>`${t}__blob:nth-child(${m+1}) {
32
- top: ${e.y}%;
33
- left: ${e.x}%;
34
- width: ${e.size}%;
31
+ ${blobs.map((blob,index)=>`${selector}__blob:nth-child(${index+1}) {
32
+ top: ${blob.y}%;
33
+ left: ${blob.x}%;
34
+ width: ${blob.size}%;
35
35
  aspect-ratio: 1;
36
- --g-gradient-morph-blob-color: ${e.color};
37
- --g-gradient-morph-x: ${e.dx}%;
38
- --g-gradient-morph-x2: ${e.dx2}%;
39
- --g-gradient-morph-y: ${e.dy}%;
40
- --g-gradient-morph-y2: ${e.dy2}%;
41
- --g-gradient-morph-origin-x: ${e.originX};
42
- --g-gradient-morph-origin-y: ${e.originY};
43
- --g-gradient-morph-animation: ${e.animationName};
44
- --g-gradient-morph-blur: ${e.blur}px;
45
- --g-gradient-morph-opacity: ${e.opacity};
46
- --g-gradient-morph-rotate-mid: ${e.rotateMid}deg;
47
- --g-gradient-morph-rotate-to: ${e.rotateTo}deg;
48
- --g-gradient-morph-scale-mid: ${e.scaleMid};
49
- --g-gradient-morph-scale: ${e.scaleTo};
50
- --g-gradient-morph-delay: ${e.delay}ms;
36
+ --g-gradient-morph-blob-color: ${blob.color};
37
+ --g-gradient-morph-x: ${blob.dx}%;
38
+ --g-gradient-morph-x2: ${blob.dx2}%;
39
+ --g-gradient-morph-y: ${blob.dy}%;
40
+ --g-gradient-morph-y2: ${blob.dy2}%;
41
+ --g-gradient-morph-origin-x: ${blob.originX};
42
+ --g-gradient-morph-origin-y: ${blob.originY};
43
+ --g-gradient-morph-animation: ${blob.animationName};
44
+ --g-gradient-morph-blur: ${blob.blur}px;
45
+ --g-gradient-morph-opacity: ${blob.opacity};
46
+ --g-gradient-morph-rotate-mid: ${blob.rotateMid}deg;
47
+ --g-gradient-morph-rotate-to: ${blob.rotateTo}deg;
48
+ --g-gradient-morph-scale-mid: ${blob.scaleMid};
49
+ --g-gradient-morph-scale: ${blob.scaleTo};
50
+ --g-gradient-morph-delay: ${blob.delay}ms;
51
51
  animation-delay: var(--g-gradient-morph-delay);
52
- animation-duration: ${c.toCssDuration(e.duration)};
52
+ animation-duration: ${utils.toCssDuration(blob.duration)};
53
53
  }`).join(`
54
54
 
55
55
  `)}
@@ -94,23 +94,23 @@ ${d.map((e,m)=>`${t}__blob:nth-child(${m+1}) {
94
94
  100% {
95
95
  transform: translate(calc(-50% + var(--g-gradient-morph-x2)), calc(-50% + var(--g-gradient-morph-y2))) rotate(var(--g-gradient-morph-rotate-to)) scale(var(--g-gradient-morph-scale));
96
96
  }
97
- }`},z=(r,a={})=>{const t=a.id??"g-gradient-morph",i=a.width??360,g=a.height??240,d=a.rx??24,e=`${t}-filter`,m=M({...a,id:e}),n=v(r,a),{blendMode:s,opacity:p}=y(a);return`<svg xmlns="${_}" viewBox="0 0 ${i} ${g}" width="${i}" height="${g}" role="img">
97
+ }`},toGradientMorphMarkup=(model,options={})=>{const id=options.id??"g-gradient-morph",width=options.width??360,height=options.height??240,rx=options.rx??24,filterId=`${id}-filter`,filter=toGradientMorphFilter({...options,id:filterId}),blobs=createGradientMorphBlobs(model,options),{blendMode,opacity}=getMorphOptions(options);return`<svg xmlns="${SVG_NAMESPACE}" viewBox="0 0 ${width} ${height}" width="${width}" height="${height}" role="img">
98
98
  <defs>
99
- <clipPath id="${t}-clip">
100
- <rect width="${i}" height="${g}" rx="${d}" />
99
+ <clipPath id="${id}-clip">
100
+ <rect width="${width}" height="${height}" rx="${rx}" />
101
101
  </clipPath>
102
102
  </defs>
103
- <foreignObject width="${i}" height="${g}" clip-path="url(#${t}-clip)">
104
- <div xmlns="${k}" class="g-gradient-material">
105
- ${B({...a,id:`${t}-filter`})}
103
+ <foreignObject width="${width}" height="${height}" clip-path="url(#${id}-clip)">
104
+ <div xmlns="${XHTML_NAMESPACE}" class="g-gradient-material">
105
+ ${toGradientMorphFilterMarkup({...options,id:`${id}-filter`})}
106
106
  <style>
107
107
  .g-gradient-material {
108
108
  position: relative;
109
109
  overflow: hidden;
110
110
  display: flex;
111
- width: ${i}px;
112
- height: ${g}px;
113
- border-radius: ${d}px;
111
+ width: ${width}px;
112
+ height: ${height}px;
113
+ border-radius: ${rx}px;
114
114
  }
115
115
 
116
116
  .g-gradient-material__surface {
@@ -119,8 +119,8 @@ ${d.map((e,m)=>`${t}__blob:nth-child(${m+1}) {
119
119
  display: flex;
120
120
  width: 100%;
121
121
  height: 100%;
122
- border-radius: ${d}px;
123
- background: ${O(D.toCssGradient(r))};
122
+ border-radius: ${rx}px;
123
+ background: ${escapeAttribute(css.toCssGradient(model))};
124
124
  }
125
125
 
126
126
  .g-gradient-material__morph {
@@ -130,9 +130,9 @@ ${d.map((e,m)=>`${t}__blob:nth-child(${m+1}) {
130
130
  inset: calc(-1 * var(--g-gradient-material-morph-bleed));
131
131
  width: calc(100% + 2 * var(--g-gradient-material-morph-bleed));
132
132
  height: calc(100% + 2 * var(--g-gradient-material-morph-bleed));
133
- opacity: ${p};
134
- filter: ${m};
135
- mix-blend-mode: ${s};
133
+ opacity: ${opacity};
134
+ filter: ${filter};
135
+ mix-blend-mode: ${blendMode};
136
136
  }
137
137
 
138
138
  .g-gradient-material__morph-blob {
@@ -147,27 +147,27 @@ ${d.map((e,m)=>`${t}__blob:nth-child(${m+1}) {
147
147
  animation: var(--g-gradient-morph-animation) var(--g-gradient-morph-duration, 9000ms) ease-in-out infinite alternate;
148
148
  }
149
149
 
150
- ${n.map((o,$)=>`.g-gradient-material__morph-blob:nth-child(${$+1}) {
151
- left: ${o.x}%;
152
- top: ${o.y}%;
153
- width: ${o.size}%;
154
- --g-gradient-morph-blob-color: ${o.color};
155
- --g-gradient-morph-x: ${o.dx}%;
156
- --g-gradient-morph-x2: ${o.dx2}%;
157
- --g-gradient-morph-y: ${o.dy}%;
158
- --g-gradient-morph-y2: ${o.dy2}%;
159
- --g-gradient-morph-origin-x: ${o.originX};
160
- --g-gradient-morph-origin-y: ${o.originY};
161
- --g-gradient-morph-animation: ${o.animationName};
162
- --g-gradient-morph-blur: ${o.blur}px;
163
- --g-gradient-morph-opacity: ${o.opacity};
164
- --g-gradient-morph-rotate-mid: ${o.rotateMid}deg;
165
- --g-gradient-morph-rotate-to: ${o.rotateTo}deg;
166
- --g-gradient-morph-scale-mid: ${o.scaleMid};
167
- --g-gradient-morph-scale: ${o.scaleTo};
168
- --g-gradient-morph-delay: ${o.delay}ms;
150
+ ${blobs.map((blob,index)=>`.g-gradient-material__morph-blob:nth-child(${index+1}) {
151
+ left: ${blob.x}%;
152
+ top: ${blob.y}%;
153
+ width: ${blob.size}%;
154
+ --g-gradient-morph-blob-color: ${blob.color};
155
+ --g-gradient-morph-x: ${blob.dx}%;
156
+ --g-gradient-morph-x2: ${blob.dx2}%;
157
+ --g-gradient-morph-y: ${blob.dy}%;
158
+ --g-gradient-morph-y2: ${blob.dy2}%;
159
+ --g-gradient-morph-origin-x: ${blob.originX};
160
+ --g-gradient-morph-origin-y: ${blob.originY};
161
+ --g-gradient-morph-animation: ${blob.animationName};
162
+ --g-gradient-morph-blur: ${blob.blur}px;
163
+ --g-gradient-morph-opacity: ${blob.opacity};
164
+ --g-gradient-morph-rotate-mid: ${blob.rotateMid}deg;
165
+ --g-gradient-morph-rotate-to: ${blob.rotateTo}deg;
166
+ --g-gradient-morph-scale-mid: ${blob.scaleMid};
167
+ --g-gradient-morph-scale: ${blob.scaleTo};
168
+ --g-gradient-morph-delay: ${blob.delay}ms;
169
169
  animation-delay: var(--g-gradient-morph-delay);
170
- animation-duration: ${c.toCssDuration(o.duration)};
170
+ animation-duration: ${utils.toCssDuration(blob.duration)};
171
171
  }`).join(`
172
172
 
173
173
  `)}
@@ -192,10 +192,10 @@ ${n.map((o,$)=>`.g-gradient-material__morph-blob:nth-child(${$+1}) {
192
192
  </style>
193
193
  <span class="g-gradient-material__surface">
194
194
  <span class="g-gradient-material__morph">
195
- ${n.map(()=>'<span class="g-gradient-material__morph-blob"></span>').join(`
195
+ ${blobs.map(()=>'<span class="g-gradient-material__morph-blob"></span>').join(`
196
196
  `)}
197
197
  </span>
198
198
  </span>
199
199
  </div>
200
200
  </foreignObject>
201
- </svg>`},T=(r,a)=>{const t=r.stops.filter(d=>d.position>=25&&d.position<=85),i=r.stops.filter(d=>!t.includes(d));return[...t,...i].sort((d,e)=>Math.abs(d.position-50)-Math.abs(e.position-50)).slice(0,a)},F=(r,a)=>r*([1,.54,.3,.18][a]??.12),u=(r,a)=>{const t=String(r).match(/^(-?\d*\.?\d+)(.*)$/);return t?`${Math.round(Number(t[1])*a*1e3)/1e3}${t[2]||"px"}`:null},C=(r,a,t)=>u(r,1/a)??(t===0?c.toCssLength(r):"0px"),j=(r,a)=>u(r,1/Math.sqrt(a))??c.toCssLength(r),q=(r,a={})=>{var b;const t=a.x??0,i=a.y??6,g=a.blur??14,d=a.spread??-3,e=a.opacity??.24,m=Math.max(1,Math.round(a.layers??2)),n=((b=T(r,1)[0])==null?void 0:b.color)??"#000000",s=`${c.toCssLength(t)} ${c.toCssLength(i)} ${c.toCssLength(g)} ${c.toCssLength(d)} ${c.toCssColor(n,e)}`;if(m===1)return s;const p=u(t,.35)??"0px",o=u(i,.35)??"2px",$=u(g,.3)??"4px",f=u(d,.5)??"-2px",x=Math.min(.18,e*.65);return`${`${p} ${o} ${$} ${f} ${c.toCssColor("#000000",x)}`}, ${s}`},R=(r,a={})=>{const t=a.x??0,i=a.y??6,g=a.blur??14,d=a.opacity??.42,e=Math.max(1,Math.round(a.layers??2)),m=j(g,e);return T(r,e).map((n,s)=>{const p=C(t,e,s),o=C(i,e,s);return`drop-shadow(${p} ${o} ${m} ${c.toCssColor(n.color,F(d,s))})`}).join(" ")};exports.createGradientMorphBlobs=v;exports.isGradientMorphBlendMode=G;exports.resolveGradientMorphBlendMode=N;exports.toGradientBoxShadow=q;exports.toGradientDropShadow=R;exports.toGradientMorphCSS=P;exports.toGradientMorphFilter=M;exports.toGradientMorphFilterMarkup=B;exports.toGradientMorphMarkup=z;
201
+ </svg>`},getShadowStops=(model,layers)=>{const saturatedStops=model.stops.filter(stop=>stop.position>=25&&stop.position<=85),fallbackStops=model.stops.filter(stop=>!saturatedStops.includes(stop));return[...saturatedStops,...fallbackStops].sort((first,second)=>Math.abs(first.position-50)-Math.abs(second.position-50)).slice(0,layers)},getDropShadowLayerOpacity=(opacity,index)=>opacity*([1,.54,.3,.18][index]??.12),scaleSimpleCssLength=(value,factor)=>{const match=String(value).match(/^(-?\d*\.?\d+)(.*)$/);return match?`${Math.round(Number(match[1])*factor*1e3)/1e3}${match[2]||"px"}`:null},getDistributedOffset=(value,layers,index)=>scaleSimpleCssLength(value,1/layers)??(index===0?utils.toCssLength(value):"0px"),getDistributedBlur=(value,layers)=>scaleSimpleCssLength(value,1/Math.sqrt(layers))??utils.toCssLength(value),toGradientBoxShadow=(model,options={})=>{var _a;const x=options.x??0,y=options.y??6,blur=options.blur??14,spread=options.spread??-3,opacity=options.opacity??.24,layers=Math.max(1,Math.round(options.layers??2)),dominantColor=((_a=getShadowStops(model,1)[0])==null?void 0:_a.color)??"#000000",ambientShadow=`${utils.toCssLength(x)} ${utils.toCssLength(y)} ${utils.toCssLength(blur)} ${utils.toCssLength(spread)} ${utils.toCssColor(dominantColor,opacity)}`;if(layers===1)return ambientShadow;const contactX=scaleSimpleCssLength(x,.35)??"0px",contactY=scaleSimpleCssLength(y,.35)??"2px",contactBlur=scaleSimpleCssLength(blur,.3)??"4px",contactSpread=scaleSimpleCssLength(spread,.5)??"-2px",contactOpacity=Math.min(.18,opacity*.65);return`${`${contactX} ${contactY} ${contactBlur} ${contactSpread} ${utils.toCssColor("#000000",contactOpacity)}`}, ${ambientShadow}`},toGradientDropShadow=(model,options={})=>{const x=options.x??0,y=options.y??6,blur=options.blur??14,opacity=options.opacity??.42,layers=Math.max(1,Math.round(options.layers??2)),distributedBlur=getDistributedBlur(blur,layers);return getShadowStops(model,layers).map((stop,index)=>{const distributedX=getDistributedOffset(x,layers,index),distributedY=getDistributedOffset(y,layers,index);return`drop-shadow(${distributedX} ${distributedY} ${distributedBlur} ${utils.toCssColor(stop.color,getDropShadowLayerOpacity(opacity,index))})`}).join(" ")};exports.createGradientMorphBlobs=createGradientMorphBlobs;exports.isGradientMorphBlendMode=isGradientMorphBlendMode;exports.resolveGradientMorphBlendMode=resolveGradientMorphBlendMode;exports.toGradientBoxShadow=toGradientBoxShadow;exports.toGradientDropShadow=toGradientDropShadow;exports.toGradientMorphCSS=toGradientMorphCSS;exports.toGradientMorphFilter=toGradientMorphFilter;exports.toGradientMorphFilterMarkup=toGradientMorphFilterMarkup;exports.toGradientMorphMarkup=toGradientMorphMarkup;