@gradient-ui/gradient-engine 0.5.0 → 0.6.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 (46) hide show
  1. package/README.md +22 -2
  2. package/dist/animation.cjs +1 -1
  3. package/dist/animation.mjs +1 -1
  4. package/dist/core.cjs +1 -1
  5. package/dist/core.mjs +12 -9
  6. package/dist/{css-YuAJQW13.cjs → css-BVHXLMRl.cjs} +1 -1
  7. package/dist/{css-CaOuUhfh.js → css-DVaTTIqS.js} +1 -1
  8. package/dist/design-tokens.cjs +1 -0
  9. package/dist/design-tokens.mjs +8 -0
  10. package/dist/designTokens-BnzZfRES.js +116 -0
  11. package/dist/designTokens-C1WdzS3v.cjs +1 -0
  12. package/dist/effects.cjs +137 -32
  13. package/dist/effects.mjs +221 -104
  14. package/dist/formatters.cjs +1 -1
  15. package/dist/formatters.mjs +3 -3
  16. package/dist/index.cjs +1 -1
  17. package/dist/index.mjs +61 -41
  18. package/dist/material.cjs +9 -1
  19. package/dist/material.mjs +236 -4
  20. package/dist/presets-BBLdqUE4.cjs +316 -0
  21. package/dist/presets-DYXLx_nN.js +4025 -0
  22. package/dist/{svg-BVcl24Cf.cjs → svg-dGtLYnIJ.cjs} +1 -1
  23. package/dist/{svg-CZThYPKf.js → svg-hZus3ztj.js} +2 -2
  24. package/dist/types/color.d.ts +1 -0
  25. package/dist/types/colorSeeds.d.ts +22 -0
  26. package/dist/types/colorSystem.d.ts +20 -0
  27. package/dist/types/designTokens.d.ts +24 -0
  28. package/dist/types/effects/index.d.ts +1 -1
  29. package/dist/types/effects/morph.d.ts +4 -1
  30. package/dist/types/index.d.ts +4 -0
  31. package/dist/types/material.d.ts +1 -1
  32. package/dist/types/palette.d.ts +7 -0
  33. package/dist/types/scheme.d.ts +3 -0
  34. package/dist/types/tokens.d.ts +9 -1
  35. package/dist/types/types.d.ts +10 -0
  36. package/dist/types-BFr1fN-7.js +22 -0
  37. package/dist/types-BMLEvdee.cjs +1 -0
  38. package/dist/utils-BzSNCfat.js +76 -0
  39. package/dist/utils-D83DMCMa.cjs +1 -0
  40. package/package.json +9 -1
  41. package/dist/presets-55krt4L_.js +0 -354
  42. package/dist/presets-UIJJyagu.cjs +0 -1
  43. package/dist/tokens-DMGI7_df.cjs +0 -9
  44. package/dist/tokens-OfSofVKl.js +0 -204
  45. package/dist/utils-6iJ6IpZZ.cjs +0 -1
  46. package/dist/utils-B_VQDGMy.js +0 -67
package/README.md CHANGED
@@ -41,6 +41,10 @@ const material = createGradientMaterial('#704aff', {
41
41
  `createGradientMaterial` returns a richer object for components: CSS variables,
42
42
  CSS text, optional keyframes, effects and the underlying gradient model.
43
43
 
44
+ Material output is memoized by seed and material options. Repeated calls with
45
+ the same input reuse the same pure result instead of recalculating palettes,
46
+ stops, shadows, morph blobs and keyframes.
47
+
44
48
  ## API Layers
45
49
 
46
50
  The package is split into small subpath exports:
@@ -130,6 +134,21 @@ This lets a Vue, React or vanilla adapter decide how to apply the result:
130
134
  inline styles, a generated stylesheet, CSS variables, SSR-injected CSS or a
131
135
  client runtime registry.
132
136
 
137
+ The material cache is intentionally small and bounded. Use the cache helpers
138
+ when a long-running tool needs explicit control:
139
+
140
+ ```ts
141
+ import {
142
+ clearGradientMaterialCache,
143
+ getGradientMaterialCacheStats,
144
+ setGradientMaterialCacheLimit
145
+ } from '@gradient-ui/gradient-engine/material';
146
+
147
+ setGradientMaterialCacheLimit(256);
148
+ console.log(getGradientMaterialCacheStats());
149
+ clearGradientMaterialCache();
150
+ ```
151
+
133
152
  ## SVG
134
153
 
135
154
  ```ts
@@ -200,8 +219,9 @@ morph SVG filters.
200
219
 
201
220
  ## Version
202
221
 
203
- `0.5.0` is the first standalone release line for the engine extracted from
204
- Gradient UI.
222
+ `0.5.0` was the first standalone release line for the engine extracted from
223
+ Gradient UI. `0.6.0` adds the public morph blend-mode API used by the
224
+ `0.5.0` core release line.
205
225
 
206
226
  ## License
207
227
 
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("./utils-6iJ6IpZZ.cjs"),c=t=>`@keyframes ${t} {
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("./utils-D83DMCMa.cjs"),c=t=>`@keyframes ${t} {
2
2
  0% {
3
3
  background-position: 0% 50%;
4
4
  }
@@ -1,4 +1,4 @@
1
- import { t as s } from "./utils-B_VQDGMy.js";
1
+ import { t as s } from "./utils-BzSNCfat.js";
2
2
  const u = (t) => `@keyframes ${t} {
3
3
  0% {
4
4
  background-position: 0% 50%;
package/dist/core.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./presets-UIJJyagu.cjs"),i=require("./css-YuAJQW13.cjs"),a=(t,r={})=>i.toCssGradient(e.createGradientModel(t,r)),d=(t,r={})=>a(e.createPalette(t),r);exports.createGradientModel=e.createGradientModel;exports.createGradientModelFromColor=e.createGradientModelFromColor;exports.createRecipeStops=e.createRecipeStops;exports.defineGradientPreset=e.defineGradientPreset;exports.defineGradientPresetRegistry=e.defineGradientPresetRegistry;exports.getGradientPreset=e.getGradientPreset;exports.gradientPresets=e.gradientPresets;exports.gradientRecipes=e.gradientRecipes;exports.createGradient=a;exports.createGradientFromColor=d;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./presets-BBLdqUE4.cjs"),d=require("./css-BVHXLMRl.cjs"),i=require("./types-BMLEvdee.cjs"),a=(t,r={})=>d.toCssGradient(e.createGradientModel(t,r)),n=(t,r={})=>a(e.createPalette(t),r);exports.createGradientModel=e.createGradientModel;exports.createGradientModelFromColor=e.createGradientModelFromColor;exports.createRecipeStops=e.createRecipeStops;exports.defineGradientPreset=e.defineGradientPreset;exports.defineGradientPresetRegistry=e.defineGradientPresetRegistry;exports.getGradientPreset=e.getGradientPreset;exports.gradientPresets=e.gradientPresets;exports.gradientRecipes=e.gradientRecipes;exports.DEFAULT_GRADIENT_MORPH_BLEND_MODE=i.DEFAULT_GRADIENT_MORPH_BLEND_MODE;exports.GRADIENT_MORPH_BLEND_MODES=i.GRADIENT_MORPH_BLEND_MODES;exports.createGradient=a;exports.createGradientFromColor=n;
package/dist/core.mjs CHANGED
@@ -1,16 +1,19 @@
1
- import { c as r, b as a } from "./presets-55krt4L_.js";
2
- import { a as m, d as p, e as f, f as g, g as l, h as P, i as C } from "./presets-55krt4L_.js";
3
- import { t as s } from "./css-CaOuUhfh.js";
4
- const o = (e, t = {}) => s(r(e, t)), n = (e, t = {}) => o(a(e), t);
1
+ import { c as t, d as a } from "./presets-DYXLx_nN.js";
2
+ import { a as m, f as p, g as D, h as f, i as E, j as P, k as R } from "./presets-DYXLx_nN.js";
3
+ import { t as s } from "./css-DVaTTIqS.js";
4
+ import { D as M, G as g } from "./types-BFr1fN-7.js";
5
+ const o = (e, r = {}) => s(t(e, r)), n = (e, r = {}) => o(a(e), r);
5
6
  export {
7
+ M as DEFAULT_GRADIENT_MORPH_BLEND_MODE,
8
+ g as GRADIENT_MORPH_BLEND_MODES,
6
9
  o as createGradient,
7
10
  n as createGradientFromColor,
8
- r as createGradientModel,
11
+ t as createGradientModel,
9
12
  m as createGradientModelFromColor,
10
13
  p as createRecipeStops,
11
- f as defineGradientPreset,
12
- g as defineGradientPresetRegistry,
13
- l as getGradientPreset,
14
+ D as defineGradientPreset,
15
+ f as defineGradientPresetRegistry,
16
+ E as getGradientPreset,
14
17
  P as gradientPresets,
15
- C as gradientRecipes
18
+ R as gradientRecipes
16
19
  };
@@ -1 +1 @@
1
- "use strict";const i=require("./utils-6iJ6IpZZ.cjs"),a=(t,n=i.DEFAULT_GRADIENT_DIRECTION)=>`linear-gradient(${i.normalizeDirection(n)}, ${t.join(", ")})`,e=t=>{const n=t.stops.map(i.formatStop).join(", ");if(t.type==="radial"){const o=t.shape??"ellipse",s=t.size??i.DEFAULT_GRADIENT_SIZE,r=t.position??i.DEFAULT_GRADIENT_POSITION;return`radial-gradient(${o} ${s} at ${r}, ${n})`}if(t.type==="conic"){const o=i.normalizeDirection(t.direction),s=t.position??i.DEFAULT_GRADIENT_POSITION,r=i.getConicStops(t.stops).map(i.formatStop).join(", ");return`conic-gradient(from ${o} at ${s}, ${r})`}return a(t.stops.map(i.formatStop),t.direction)};exports.createLinearGradient=a;exports.toCssGradient=e;
1
+ "use strict";const i=require("./utils-D83DMCMa.cjs"),a=(t,n=i.DEFAULT_GRADIENT_DIRECTION)=>`linear-gradient(${i.normalizeDirection(n)}, ${t.join(", ")})`,e=t=>{const n=t.stops.map(i.formatStop).join(", ");if(t.type==="radial"){const o=t.shape??"ellipse",s=t.size??i.DEFAULT_GRADIENT_SIZE,r=t.position??i.DEFAULT_GRADIENT_POSITION;return`radial-gradient(${o} ${s} at ${r}, ${n})`}if(t.type==="conic"){const o=i.normalizeDirection(t.direction),s=t.position??i.DEFAULT_GRADIENT_POSITION,r=i.getConicStops(t.stops).map(i.formatStop).join(", ");return`conic-gradient(from ${o} at ${s}, ${r})`}return a(t.stops.map(i.formatStop),t.direction)};exports.createLinearGradient=a;exports.toCssGradient=e;
@@ -1,4 +1,4 @@
1
- import { D as p, n as c, f as a, d as e, e as r, g as D } from "./utils-B_VQDGMy.js";
1
+ import { D as p, n as c, f as a, d as e, e as r, h as D } from "./utils-BzSNCfat.js";
2
2
  const $ = (t, i = p) => `linear-gradient(${c(i)}, ${t.join(", ")})`, I = (t) => {
3
3
  const i = t.stops.map(a).join(", ");
4
4
  if (t.type === "radial") {
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("./utils-D83DMCMa.cjs");const e=require("./designTokens-C1WdzS3v.cjs");require("./material.cjs");exports.DEFAULT_SEED=e.DEFAULT_SEED;exports.createDesignTokens=e.createDesignTokens;exports.normalizeDesignTokenSeed=e.normalizeDesignTokenSeed;
@@ -0,0 +1,8 @@
1
+ import "./utils-BzSNCfat.js";
2
+ import { D as r, a as s, n as i } from "./designTokens-BnzZfRES.js";
3
+ import "./material.mjs";
4
+ export {
5
+ r as DEFAULT_SEED,
6
+ s as createDesignTokens,
7
+ i as normalizeDesignTokenSeed
8
+ };
@@ -0,0 +1,116 @@
1
+ import { p as f, r as u, g as h, c as F } from "./utils-BzSNCfat.js";
2
+ import { createGradient as c, createGradientFromColor as S } from "./core.mjs";
3
+ import { e as m, C as T, t as $, l as k, m as y } from "./presets-DYXLx_nN.js";
4
+ import { createGradientTokens as E } from "./material.mjs";
5
+ const p = {
6
+ red: "#F44336",
7
+ pink: "#E91E63",
8
+ purple: "#9C27B0",
9
+ deepPurple: "#673AB7",
10
+ indigo: "#3F51B5",
11
+ blue: "#2196F3",
12
+ lightBlue: "#03A9F4",
13
+ cyan: "#00BCD4",
14
+ teal: "#009688",
15
+ green: "#4CAF50",
16
+ lightGreen: "#8BC34A",
17
+ lime: "#CDDC39",
18
+ yellow: "#FFEB3B",
19
+ amber: "#FFC107",
20
+ orange: "#FF9800",
21
+ deepOrange: "#FF5722",
22
+ brown: "#795548",
23
+ grey: "#9E9E9E",
24
+ blueGrey: "#607D8B"
25
+ }, l = (e) => {
26
+ const n = f(e);
27
+ if (!n)
28
+ throw new Error(`Unsupported generated color: ${String(e)}`);
29
+ return u(n);
30
+ }, D = (e) => `${e.charAt(0).toUpperCase()}${e.slice(1)}`, i = (e) => `on${D(e)}`, O = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), w = (e) => e.replace(
31
+ /-([a-z0-9])/g,
32
+ (n, o) => o.toUpperCase()
33
+ ), b = (e, n, o, r) => {
34
+ const { colors: t, onColors: a } = r;
35
+ for (const s of T) {
36
+ const C = t[s];
37
+ e[`${o}${s}`] = l(C), e[`${i(o)}${s}`] = l(a[s]), n[`${o}${s}`] = c(t, { shade: s });
38
+ }
39
+ e[o] = e[`${o}500`], e[i(o)] = e[`${i(o)}500`], n[o] = n[`${o}500`];
40
+ }, P = (e) => typeof e == "object" && e !== null && "color" in e, A = (e) => P(e) ? e : { color: e }, B = (e, n, o, r) => {
41
+ e[o] = l(r.color), e[i(o)] = l(
42
+ r.onColor ?? h(r.color)
43
+ ), r.gradient !== !1 && (n[o] = r.gradient ?? S(r.color));
44
+ }, j = (e, n, o, r, t) => {
45
+ const a = w(O(r)), s = A(t);
46
+ if (s.palette === !1) {
47
+ B(e, n, a, s);
48
+ return;
49
+ }
50
+ const C = m(s.color);
51
+ o[a] = C, b(e, n, a, C), s.onColor && (e[i(a)] = l(s.onColor)), s.gradient && (n[a] = s.gradient);
52
+ }, z = (e, n = {}) => {
53
+ const o = {}, r = {}, t = {
54
+ source: m(e)
55
+ };
56
+ for (const [a, s] of Object.entries(p))
57
+ t[a] = m(s);
58
+ for (const [a, s] of Object.entries(t))
59
+ b(o, r, a, s);
60
+ for (const [a, s] of Object.entries(n.colors ?? {}))
61
+ j(o, r, t, a, s);
62
+ return r.main = c(t.source.colors), r.error = c(t.red.colors, { shade: 600 }), r.warning = c(t.amber.colors, { shade: 600 }), r.success = c(t.green.colors, { shade: 600 }), {
63
+ colors: o,
64
+ gradients: r,
65
+ palettes: t
66
+ };
67
+ }, G = (e) => {
68
+ const n = f(e);
69
+ if (!n)
70
+ throw new Error(`Unsupported generated color: ${String(e)}`);
71
+ return u(n);
72
+ }, g = (e, n) => {
73
+ const o = $(k(e)).schemes[n].toJSON();
74
+ return Object.fromEntries(
75
+ Object.entries(o).map(([r, t]) => [
76
+ r,
77
+ G(y(t))
78
+ ])
79
+ );
80
+ }, U = (e, n) => {
81
+ const o = g(e, n), r = g(p.amber, n), t = g(p.green, n);
82
+ return {
83
+ ...o,
84
+ warning: r.primary,
85
+ onWarning: r.onPrimary,
86
+ warningContainer: r.primaryContainer,
87
+ onWarningContainer: r.onPrimaryContainer,
88
+ success: t.primary,
89
+ onSuccess: t.onPrimary,
90
+ successContainer: t.primaryContainer,
91
+ onSuccessContainer: t.onPrimaryContainer
92
+ };
93
+ }, d = "#4e51ff", x = (e = d) => F(e, d), R = (e = {}) => {
94
+ const n = e.mode ?? "light", o = x(e.seed), r = z(o, {
95
+ colors: e.colors
96
+ });
97
+ return {
98
+ colorSystem: r,
99
+ gradientTokens: E(o, e.gradientTokens),
100
+ mode: n,
101
+ seed: o,
102
+ tokens: {
103
+ theme: U(o, n),
104
+ colors: r.colors,
105
+ gradients: r.gradients
106
+ }
107
+ };
108
+ };
109
+ export {
110
+ p as C,
111
+ d as D,
112
+ R as a,
113
+ U as b,
114
+ z as c,
115
+ x as n
116
+ };
@@ -0,0 +1 @@
1
+ "use strict";const l=require("./utils-D83DMCMa.cjs"),i=require("./core.cjs"),c=require("./presets-BBLdqUE4.cjs"),E=require("./material.cjs"),m={red:"#F44336",pink:"#E91E63",purple:"#9C27B0",deepPurple:"#673AB7",indigo:"#3F51B5",blue:"#2196F3",lightBlue:"#03A9F4",cyan:"#00BCD4",teal:"#009688",green:"#4CAF50",lightGreen:"#8BC34A",lime:"#CDDC39",yellow:"#FFEB3B",amber:"#FFC107",orange:"#FF9800",deepOrange:"#FF5722",brown:"#795548",grey:"#9E9E9E",blueGrey:"#607D8B"},g=e=>{const n=l.parseColor(e);if(!n)throw new Error(`Unsupported generated color: ${String(e)}`);return l.rgbToChannels(n)},F=e=>`${e.charAt(0).toUpperCase()}${e.slice(1)}`,C=e=>`on${F(e)}`,f=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),k=e=>e.replace(/-([a-z0-9])/g,(n,r)=>r.toUpperCase()),S=(e,n,r,o)=>{const{colors:t,onColors:a}=o;for(const s of c.COLOR_SHADES){const d=t[s];e[`${r}${s}`]=g(d),e[`${C(r)}${s}`]=g(a[s]),n[`${r}${s}`]=i.createGradient(t,{shade:s})}e[r]=e[`${r}500`],e[C(r)]=e[`${C(r)}500`],n[r]=n[`${r}500`]},D=e=>typeof e=="object"&&e!==null&&"color"in e,$=e=>D(e)?e:{color:e},y=(e,n,r,o)=>{e[r]=g(o.color),e[C(r)]=g(o.onColor??l.getContrastingColor(o.color)),o.gradient!==!1&&(n[r]=o.gradient??i.createGradientFromColor(o.color))},O=(e,n,r,o,t)=>{const a=k(f(o)),s=$(t);if(s.palette===!1){y(e,n,a,s);return}const d=c.createPalettePair(s.color);r[a]=d,S(e,n,a,d),s.onColor&&(e[C(a)]=g(s.onColor)),s.gradient&&(n[a]=s.gradient)},T=(e,n={})=>{const r={},o={},t={source:c.createPalettePair(e)};for(const[a,s]of Object.entries(m))t[a]=c.createPalettePair(s);for(const[a,s]of Object.entries(t))S(r,o,a,s);for(const[a,s]of Object.entries(n.colors??{}))O(r,o,t,a,s);return o.main=i.createGradient(t.source.colors),o.error=i.createGradient(t.red.colors,{shade:600}),o.warning=i.createGradient(t.amber.colors,{shade:600}),o.success=i.createGradient(t.green.colors,{shade:600}),{colors:r,gradients:o,palettes:t}},P=e=>{const n=l.parseColor(e);if(!n)throw new Error(`Unsupported generated color: ${String(e)}`);return l.rgbToChannels(n)},p=(e,n)=>{const r=c.themeFromSourceColor(c.argbFromHex(e)).schemes[n].toJSON();return Object.fromEntries(Object.entries(r).map(([o,t])=>[o,P(c.hexFromArgb(t))]))},b=(e,n)=>{const r=p(e,n),o=p(m.amber,n),t=p(m.green,n);return{...r,warning:o.primary,onWarning:o.onPrimary,warningContainer:o.primaryContainer,onWarningContainer:o.onPrimaryContainer,success:t.primary,onSuccess:t.onPrimary,successContainer:t.primaryContainer,onSuccessContainer:t.onPrimaryContainer}},u="#4e51ff",h=(e=u)=>l.colorToHex(e,u),w=(e={})=>{const n=e.mode??"light",r=h(e.seed),o=T(r,{colors:e.colors});return{colorSystem:o,gradientTokens:E.createGradientTokens(r,e.gradientTokens),mode:n,seed:r,tokens:{theme:b(r,n),colors:o.colors,gradients:o.gradients}}};exports.COLOR_SEEDS=m;exports.DEFAULT_SEED=u;exports.createColorSystem=T;exports.createDesignTokens=w;exports.createSemanticTokens=b;exports.normalizeDesignTokenSeed=h;
package/dist/effects.cjs CHANGED
@@ -1,23 +1,23 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("./utils-6iJ6IpZZ.cjs"),N="http://www.w3.org/2000/svg",G={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=(t={})=>{const r=G[t.preset??"soft"];return{blobCount:Math.max(2,Math.round(t.blobCount??r.blobCount)),blur:c.clamp(t.blur??r.blur,0,80),contrast:c.clamp(t.contrast??r.contrast,0,36),duration:t.duration??r.duration,id:t.id??"g-gradient-morph",opacity:c.clamp(t.opacity??r.opacity),scale:c.clamp(t.scale??r.scale,.4,2)}},T=(t,r)=>{var o,n;return((o=t.stops[r%t.stops.length])==null?void 0:o.color)??((n=t.stops[0])==null?void 0:n.color)??"currentColor"},X=t=>{if(typeof t=="number")return t;const r=Number.parseFloat(t);return Number.isFinite(r)?r:9e3},Y=(t,r)=>{const o=Math.sin((t+1)*12.9898+r*78.233)*43758.5453;return o-Math.floor(o)},g=(t,r,o,n)=>o+Y(t,r)*(n-o),m=t=>Number(t.toFixed(3)),M=[{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=(t,r={})=>{const{blobCount:o,duration:n,scale:d}=y(r),a=X(n);return Array.from({length:o},(s,e)=>{const i=M[e%M.length],l=g(e,1,.88,1.16),p=g(e,2,.86,1.24),u=g(e,3,.72,1),$=g(e,4,0,4),x=(34+e%4*9)*d*l;return{animationName:i.animationName,blur:m($),color:T(t,e),delay:Math.round(e*-.19*a-g(e,5,0,900)),dx:m(i.dx*g(e,6,.84,1.18)),dx2:m(i.dx2*g(e,7,.82,1.22)),dy:m(i.dy*g(e,8,.84,1.18)),dy2:m(i.dy2*g(e,9,.82,1.22)),duration:Math.round(a*(1+e%3*.11)*p),opacity:m(u),originX:i.originX,originY:i.originY,rotateMid:Math.round(g(e,10,95,165)),rotateTo:Math.round(g(e,11,220,310)),scaleMid:i.scaleMid,scaleTo:i.scaleTo,size:m(x),x:i.x,y:i.y}})},C=(t={})=>`url(#${y(t).id}) blur(${y(t).blur}px)`,B=(t={})=>{const{blur:r,contrast:o,id:n}=y(t),d=Math.max(2,Math.round(r*.25)),a=-(o*.45),s=o<=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 ${o} ${a}" result="g-gradient-morph-goo" />
3
- <feBlend in="SourceGraphic" in2="g-gradient-morph-goo" />`;return`<svg xmlns="${N}" width="0" height="0" aria-hidden="true" focusable="false" style="position:absolute;overflow:hidden;inline-size:0;block-size:0;">
4
- <filter id="${n}" x="-30%" y="-30%" width="160%" height="160%" color-interpolation-filters="sRGB">
5
- <feGaussianBlur in="SourceGraphic" stdDeviation="${d}" result="g-gradient-morph-blur" />${s}
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}
6
6
  </filter>
7
- </svg>`},k=(t,r={})=>{const o=r.selector??".g-gradient-morph",{opacity:n}=y(r),d=v(t,r);return`${o} {
7
+ </svg>`},P=(r,a={})=>{const t=a.selector??".g-gradient-morph",{blendMode:i,opacity:g}=y(a),d=v(r,a);return`${t} {
8
8
  position: relative;
9
9
  overflow: hidden;
10
10
  }
11
11
 
12
- ${o}__blobs {
12
+ ${t}__blobs {
13
13
  position: absolute;
14
14
  inset: -18%;
15
- opacity: ${n};
16
- filter: ${C(r)};
17
- mix-blend-mode: hard-light;
15
+ opacity: ${g};
16
+ filter: ${M(a)};
17
+ mix-blend-mode: ${i};
18
18
  }
19
19
 
20
- ${o}__blob {
20
+ ${t}__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,27 +28,28 @@ ${o}__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((a,s)=>`${o}__blob:nth-child(${s+1}) {
32
- top: ${a.y}%;
33
- left: ${a.x}%;
34
- width: ${a.size}%;
31
+ ${d.map((e,m)=>`${t}__blob:nth-child(${m+1}) {
32
+ top: ${e.y}%;
33
+ left: ${e.x}%;
34
+ width: ${e.size}%;
35
35
  aspect-ratio: 1;
36
- --g-gradient-morph-blob-color: ${a.color};
37
- --g-gradient-morph-x: ${a.dx}%;
38
- --g-gradient-morph-x2: ${a.dx2}%;
39
- --g-gradient-morph-y: ${a.dy}%;
40
- --g-gradient-morph-y2: ${a.dy2}%;
41
- --g-gradient-morph-origin-x: ${a.originX};
42
- --g-gradient-morph-origin-y: ${a.originY};
43
- --g-gradient-morph-animation: ${a.animationName};
44
- --g-gradient-morph-blur: ${a.blur}px;
45
- --g-gradient-morph-opacity: ${a.opacity};
46
- --g-gradient-morph-rotate-mid: ${a.rotateMid}deg;
47
- --g-gradient-morph-rotate-to: ${a.rotateTo}deg;
48
- --g-gradient-morph-scale-mid: ${a.scaleMid};
49
- --g-gradient-morph-scale: ${a.scaleTo};
50
- animation-delay: ${a.delay}ms;
51
- animation-duration: ${c.toCssDuration(a.duration)};
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;
51
+ animation-delay: var(--g-gradient-morph-delay);
52
+ animation-duration: ${c.toCssDuration(e.duration)};
52
53
  }`).join(`
53
54
 
54
55
  `)}
@@ -93,4 +94,108 @@ ${d.map((a,s)=>`${o}__blob:nth-child(${s+1}) {
93
94
  100% {
94
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));
95
96
  }
96
- }`},S=(t,r)=>{const o=t.stops.filter(a=>a.position>=25&&a.position<=85),n=t.stops.filter(a=>!o.includes(a));return[...o,...n].sort((a,s)=>Math.abs(a.position-50)-Math.abs(s.position-50)).slice(0,r)},D=(t,r)=>t*([1,.54,.3,.18][r]??.12),h=(t,r)=>{const o=String(t).match(/^(-?\d*\.?\d+)(.*)$/);return o?`${Math.round(Number(o[1])*r*1e3)/1e3}${o[2]||"px"}`:null},b=(t,r,o)=>h(t,1/r)??(o===0?c.toCssLength(t):"0px"),L=(t,r)=>h(t,1/Math.sqrt(r))??c.toCssLength(t),_=(t,r={})=>{var f;const o=r.x??0,n=r.y??6,d=r.blur??14,a=r.spread??-3,s=r.opacity??.24,e=Math.max(1,Math.round(r.layers??2)),i=((f=S(t,1)[0])==null?void 0:f.color)??"#000000",l=`${c.toCssLength(o)} ${c.toCssLength(n)} ${c.toCssLength(d)} ${c.toCssLength(a)} ${c.toCssColor(i,s)}`;if(e===1)return l;const p=h(o,.35)??"0px",u=h(n,.35)??"2px",$=h(d,.3)??"4px",x=h(a,.5)??"-2px",w=Math.min(.18,s*.65);return`${`${p} ${u} ${$} ${x} ${c.toCssColor("#000000",w)}`}, ${l}`},F=(t,r={})=>{const o=r.x??0,n=r.y??6,d=r.blur??14,a=r.opacity??.42,s=Math.max(1,Math.round(r.layers??2)),e=L(d,s);return S(t,s).map((i,l)=>{const p=b(o,s,l),u=b(n,s,l);return`drop-shadow(${p} ${u} ${e} ${c.toCssColor(i.color,D(a,l))})`}).join(" ")};exports.createGradientMorphBlobs=v;exports.toGradientBoxShadow=_;exports.toGradientDropShadow=F;exports.toGradientMorphCSS=k;exports.toGradientMorphFilter=C;exports.toGradientMorphFilterMarkup=B;
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">
98
+ <defs>
99
+ <clipPath id="${t}-clip">
100
+ <rect width="${i}" height="${g}" rx="${d}" />
101
+ </clipPath>
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`})}
106
+ <style>
107
+ .g-gradient-material {
108
+ position: relative;
109
+ overflow: hidden;
110
+ display: flex;
111
+ width: ${i}px;
112
+ height: ${g}px;
113
+ border-radius: ${d}px;
114
+ }
115
+
116
+ .g-gradient-material__surface {
117
+ position: relative;
118
+ overflow: hidden;
119
+ display: flex;
120
+ width: 100%;
121
+ height: 100%;
122
+ border-radius: ${d}px;
123
+ background: ${O(D.toCssGradient(r))};
124
+ }
125
+
126
+ .g-gradient-material__morph {
127
+ --g-gradient-material-morph-bleed: 18%;
128
+ position: absolute;
129
+ z-index: 1;
130
+ inset: calc(-1 * var(--g-gradient-material-morph-bleed));
131
+ width: calc(100% + 2 * var(--g-gradient-material-morph-bleed));
132
+ height: calc(100% + 2 * var(--g-gradient-material-morph-bleed));
133
+ opacity: ${p};
134
+ filter: ${m};
135
+ mix-blend-mode: ${s};
136
+ }
137
+
138
+ .g-gradient-material__morph-blob {
139
+ position: absolute;
140
+ transform-origin: var(--g-gradient-morph-origin-x) var(--g-gradient-morph-origin-y);
141
+ transform: translate(-50%, -50%);
142
+ aspect-ratio: 1;
143
+ border-radius: 999px;
144
+ opacity: var(--g-gradient-morph-opacity);
145
+ background: radial-gradient(circle, var(--g-gradient-morph-blob-color) 0%, transparent 72%);
146
+ filter: blur(var(--g-gradient-morph-blur));
147
+ animation: var(--g-gradient-morph-animation) var(--g-gradient-morph-duration, 9000ms) ease-in-out infinite alternate;
148
+ }
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;
169
+ animation-delay: var(--g-gradient-morph-delay);
170
+ animation-duration: ${c.toCssDuration(o.duration)};
171
+ }`).join(`
172
+
173
+ `)}
174
+
175
+ @keyframes g-gradient-morph-drift {
176
+ 0% { transform: translate(-50%, -50%) scale(0.92); }
177
+ 42% { transform: translate(calc(-50% + var(--g-gradient-morph-x)), calc(-50% + var(--g-gradient-morph-y))) scale(var(--g-gradient-morph-scale)); }
178
+ 100% { transform: translate(calc(-50% + var(--g-gradient-morph-x2)), calc(-50% + var(--g-gradient-morph-y2))) scale(var(--g-gradient-morph-scale-mid)); }
179
+ }
180
+
181
+ @keyframes g-gradient-morph-float {
182
+ 0% { transform: translate(-50%, -50%) scale(1); }
183
+ 50% { transform: translate(calc(-50% + var(--g-gradient-morph-x)), calc(-50% + var(--g-gradient-morph-y))) scale(var(--g-gradient-morph-scale-mid)); }
184
+ 100% { transform: translate(calc(-50% + var(--g-gradient-morph-x2)), calc(-50% + var(--g-gradient-morph-y2))) scale(var(--g-gradient-morph-scale)); }
185
+ }
186
+
187
+ @keyframes g-gradient-morph-orbit {
188
+ 0% { transform: translate(-50%, -50%) rotate(0deg) scale(0.96); }
189
+ 50% { transform: translate(calc(-50% + var(--g-gradient-morph-x)), calc(-50% + var(--g-gradient-morph-y))) rotate(var(--g-gradient-morph-rotate-mid)) scale(var(--g-gradient-morph-scale-mid)); }
190
+ 100% { 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)); }
191
+ }
192
+ </style>
193
+ <span class="g-gradient-material__surface">
194
+ <span class="g-gradient-material__morph">
195
+ ${n.map(()=>'<span class="g-gradient-material__morph-blob"></span>').join(`
196
+ `)}
197
+ </span>
198
+ </span>
199
+ </div>
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;