@gradient-ui/gradient-engine 0.6.0 → 1.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/index.mjs CHANGED
@@ -1,65 +1,65 @@
1
- import { createGradient as r, createGradientFromColor as t } from "./core.mjs";
2
- import { c as s, g as i, p as n, r as d, a as G } from "./utils-BzSNCfat.js";
3
- import { C as p, D as S, c as l, a as M, b as m, n as C } from "./designTokens-BnzZfRES.js";
4
- import { C as g, O as E, S as h, c as f, a as x, b as O, d as T, e as _, f as P, g as k, h as A, i as R, j as L, k as H } from "./presets-DYXLx_nN.js";
5
- import { c as b, t as u } from "./css-DVaTTIqS.js";
6
- import { toCanvasGradient as B } from "./formatters.mjs";
7
- import { t as w, a as y, b as I, c as U } from "./svg-hZus3ztj.js";
8
- import { createGradientMorphBlobs as z, isGradientMorphBlendMode as q, resolveGradientMorphBlendMode as J, toGradientBoxShadow as K, toGradientDropShadow as Q, toGradientMorphCSS as V, toGradientMorphFilter as W, toGradientMorphFilterMarkup as X, toGradientMorphMarkup as Y } from "./effects.mjs";
9
- import { toGradientAnimationCSS as $ } from "./animation.mjs";
10
- import { clearGradientMaterialCache as ae, createGradientMaterial as re, createGradientPreset as te, createGradientTokens as oe, getGradientMaterialCacheStats as se, setGradientMaterialCacheLimit as ie } from "./material.mjs";
11
- import { D as de, G as Ge } from "./types-BFr1fN-7.js";
1
+ import { createGradient, createGradientFromColor } from "./core.mjs";
2
+ import { c, g, p, r, a } from "./utils-VaqPefmS.js";
3
+ import { C, D, c as c2, a as a2, b, n } from "./designTokens-Bw-HZ1f1.js";
4
+ import { C as C2, O, S, c as c3, a as a3, b as b2, d, e, f, g as g2, h, i, j, k } from "./presets-Du6aTLtD.js";
5
+ import { c as c4, t } from "./css-B3xGfmW1.js";
6
+ import { toCanvasGradient } from "./formatters.mjs";
7
+ import { t as t2, a as a4, b as b3, c as c5 } from "./svg-B2CaHCLv.js";
8
+ import { createGradientMorphBlobs, isGradientMorphBlendMode, resolveGradientMorphBlendMode, toGradientBoxShadow, toGradientDropShadow, toGradientMorphCSS, toGradientMorphFilter, toGradientMorphFilterMarkup, toGradientMorphMarkup } from "./effects.mjs";
9
+ import { toGradientAnimationCSS } from "./animation.mjs";
10
+ import { clearGradientMaterialCache, createGradientMaterial, createGradientPreset, createGradientTokens, getGradientMaterialCacheStats, setGradientMaterialCacheLimit } from "./material.mjs";
11
+ import { D as D2, G } from "./types-B0eCazk8.js";
12
12
  export {
13
- p as COLOR_SEEDS,
14
- g as COLOR_SHADES,
15
- de as DEFAULT_GRADIENT_MORPH_BLEND_MODE,
16
- S as DEFAULT_SEED,
17
- Ge as GRADIENT_MORPH_BLEND_MODES,
18
- E as ON_SHADE_TONES,
19
- h as SHADE_TONES,
20
- ae as clearGradientMaterialCache,
21
- s as colorToHex,
22
- l as createColorSystem,
23
- M as createDesignTokens,
24
- r as createGradient,
25
- t as createGradientFromColor,
26
- re as createGradientMaterial,
27
- f as createGradientModel,
28
- x as createGradientModelFromColor,
29
- z as createGradientMorphBlobs,
30
- te as createGradientPreset,
31
- oe as createGradientTokens,
32
- b as createLinearGradient,
33
- O as createOnPalette,
34
- T as createPalette,
35
- _ as createPalettePair,
36
- P as createRecipeStops,
37
- m as createSemanticTokens,
38
- k as defineGradientPreset,
39
- A as defineGradientPresetRegistry,
40
- i as getContrastingColor,
41
- se as getGradientMaterialCacheStats,
42
- R as getGradientPreset,
43
- L as gradientPresets,
44
- H as gradientRecipes,
45
- q as isGradientMorphBlendMode,
46
- C as normalizeDesignTokenSeed,
47
- n as parseColor,
48
- J as resolveGradientMorphBlendMode,
49
- d as rgbToChannels,
50
- G as rgbToHex,
51
- ie as setGradientMaterialCacheLimit,
52
- B as toCanvasGradient,
53
- u as toCssGradient,
54
- $ as toGradientAnimationCSS,
55
- K as toGradientBoxShadow,
56
- Q as toGradientDropShadow,
57
- V as toGradientMorphCSS,
58
- W as toGradientMorphFilter,
59
- X as toGradientMorphFilterMarkup,
60
- Y as toGradientMorphMarkup,
61
- w as toSvgGradient,
62
- y as toSvgGradientMarkup,
63
- I as toSvgPathAnimationMarkup,
64
- U as toSvgSourceAnimationMarkup
13
+ C as COLOR_SEEDS,
14
+ C2 as COLOR_SHADES,
15
+ D2 as DEFAULT_GRADIENT_MORPH_BLEND_MODE,
16
+ D as DEFAULT_SEED,
17
+ G as GRADIENT_MORPH_BLEND_MODES,
18
+ O as ON_SHADE_TONES,
19
+ S as SHADE_TONES,
20
+ clearGradientMaterialCache,
21
+ c as colorToHex,
22
+ c2 as createColorSystem,
23
+ a2 as createDesignTokens,
24
+ createGradient,
25
+ createGradientFromColor,
26
+ createGradientMaterial,
27
+ c3 as createGradientModel,
28
+ a3 as createGradientModelFromColor,
29
+ createGradientMorphBlobs,
30
+ createGradientPreset,
31
+ createGradientTokens,
32
+ c4 as createLinearGradient,
33
+ b2 as createOnPalette,
34
+ d as createPalette,
35
+ e as createPalettePair,
36
+ f as createRecipeStops,
37
+ b as createSemanticTokens,
38
+ g2 as defineGradientPreset,
39
+ h as defineGradientPresetRegistry,
40
+ g as getContrastingColor,
41
+ getGradientMaterialCacheStats,
42
+ i as getGradientPreset,
43
+ j as gradientPresets,
44
+ k as gradientRecipes,
45
+ isGradientMorphBlendMode,
46
+ n as normalizeDesignTokenSeed,
47
+ p as parseColor,
48
+ resolveGradientMorphBlendMode,
49
+ r as rgbToChannels,
50
+ a as rgbToHex,
51
+ setGradientMaterialCacheLimit,
52
+ toCanvasGradient,
53
+ t as toCssGradient,
54
+ toGradientAnimationCSS,
55
+ toGradientBoxShadow,
56
+ toGradientDropShadow,
57
+ toGradientMorphCSS,
58
+ toGradientMorphFilter,
59
+ toGradientMorphFilterMarkup,
60
+ toGradientMorphMarkup,
61
+ t2 as toSvgGradient,
62
+ a4 as toSvgGradientMarkup,
63
+ b3 as toSvgPathAnimationMarkup,
64
+ c5 as toSvgSourceAnimationMarkup
65
65
  };
package/dist/material.cjs CHANGED
@@ -1,9 +1,9 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("./presets-BBLdqUE4.cjs"),S=require("./animation.cjs"),u=require("./effects.cjs"),G=require("./css-BVHXLMRl.cjs"),x=require("./svg-dGtLYnIJ.cjs"),k=["glare","soft","mesh"],T=128;let y=T;const m=new Map,V=a=>a.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`),p=a=>V(a),j=(a,e,t)=>`${a}-${e}`,$=a=>Object.entries(a).map(([e,t])=>`${e}: ${t};`).join(`
2
- `),A=a=>a.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`),E=a=>Object.entries(a).map(([e,t])=>`${A(e)}: ${t};`).join(`
3
- `),b=a=>a===null||typeof a!="object"?JSON.stringify(a):Array.isArray(a)?`[${a.map(b).join(",")}]`:`{${Object.entries(a).filter(([,e])=>e!==void 0).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>`${JSON.stringify(e)}:${b(t)}`).join(",")}}`,O=a=>{let e=5381;for(let t=0;t<a.length;t+=1)e=e*33^a.charCodeAt(t);return(e>>>0).toString(36)},P=(a,e)=>b({options:e,seed:a}),L=a=>{const e=m.get(a);if(e)return m.delete(a),m.set(a,e),e},B=(a,e)=>{if(y<=0)return e;for(m.set(a,e);m.size>y;){const t=m.keys().next().value;if(t===void 0)break;m.delete(t)}return e},I=()=>{m.clear()},K=a=>{for(y=Math.max(0,Math.floor(a));m.size>y;){const e=m.keys().next().value;if(e===void 0)break;m.delete(e)}},q=()=>({limit:y,size:m.size}),z=(a,e,t,r)=>{const i=$(e),c=E(t),s=[i,c].filter(Boolean).join(`
4
- `);return[`.${a} {
5
- ${s}
6
- }`,r].filter(Boolean).join(`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const presets=require("./presets-DA-6KYJh.cjs"),animation=require("./animation.cjs"),effects=require("./effects.cjs"),css=require("./css-CREh0Awz.cjs"),svg=require("./svg-BtMrj3fP.cjs"),DEFAULT_TOKEN_RECIPES=["glare","soft","mesh"],DEFAULT_MATERIAL_CACHE_LIMIT=128;let materialCacheLimit=DEFAULT_MATERIAL_CACHE_LIMIT;const materialCache=new Map,toKebabCase=value=>value.replace(/[A-Z]/g,match=>`-${match.toLowerCase()}`),toTokenName=recipe=>toKebabCase(recipe),toCssVar=(prefix,name,suffix)=>`${prefix}-${name}`,toCssText=cssVars=>Object.entries(cssVars).map(([name,value])=>`${name}: ${value};`).join(`
2
+ `),toCssProperty=value=>value.replace(/[A-Z]/g,match=>`-${match.toLowerCase()}`),toCssDeclarations=styles=>Object.entries(styles).map(([name,value])=>`${toCssProperty(name)}: ${value};`).join(`
3
+ `),stableSerialize=value=>value===null||typeof value!="object"?JSON.stringify(value):Array.isArray(value)?`[${value.map(stableSerialize).join(",")}]`:`{${Object.entries(value).filter(([,entryValue])=>entryValue!==void 0).sort(([firstKey],[secondKey])=>firstKey.localeCompare(secondKey)).map(([key,entryValue])=>`${JSON.stringify(key)}:${stableSerialize(entryValue)}`).join(",")}}`,hashString=value=>{let hash=5381;for(let index=0;index<value.length;index+=1)hash=hash*33^value.charCodeAt(index);return(hash>>>0).toString(36)},getMaterialCacheKey=(seed,options)=>stableSerialize({options,seed}),getCachedMaterial=key=>{const cachedMaterial=materialCache.get(key);if(cachedMaterial)return materialCache.delete(key),materialCache.set(key,cachedMaterial),cachedMaterial},setCachedMaterial=(key,material)=>{if(materialCacheLimit<=0)return material;for(materialCache.set(key,material);materialCache.size>materialCacheLimit;){const oldestKey=materialCache.keys().next().value;if(oldestKey===void 0)break;materialCache.delete(oldestKey)}return material},clearGradientMaterialCache=()=>{materialCache.clear()},setGradientMaterialCacheLimit=limit=>{for(materialCacheLimit=Math.max(0,Math.floor(limit));materialCache.size>materialCacheLimit;){const oldestKey=materialCache.keys().next().value;if(oldestKey===void 0)break;materialCache.delete(oldestKey)}},getGradientMaterialCacheStats=()=>({limit:materialCacheLimit,size:materialCache.size}),toScopedCssText=(className,cssVars,style,keyframes)=>{const vars=toCssText(cssVars),styles=toCssDeclarations(style),body=[vars,styles].filter(Boolean).join(`
4
+ `);return[`.${className} {
5
+ ${body}
6
+ }`,keyframes].filter(Boolean).join(`
7
7
 
8
- `)},N=(a,e)=>a in e,v=(a,e)=>N(a,e)?g.getGradientPreset(a,e):a==="soft"?{label:"Soft",description:"Quiet monochrome radial gradient.",gradient:{recipe:"monochrome",type:"radial",position:"center",shape:"ellipse"},shadow:{layers:2,opacity:.18,blur:18,y:7,spread:-4},dropShadow:{layers:2,opacity:.26,blur:16,y:6},animation:{preset:"pulse",duration:7200,easing:"ease-in-out"}}:a==="mesh"?null:{label:a,gradient:{recipe:a,type:"linear",direction:a==="glare"?135:145}},_=a=>{const e=[`radial-gradient(circle at 16% 18%, ${g.shiftHue(a,-42,72,1.05)} 0%, transparent 34%)`,`radial-gradient(circle at 86% 20%, ${g.getComplementaryColor(a)} 0%, transparent 32%)`,`radial-gradient(circle at 50% 84%, ${g.shiftHue(a,56,64,1.08)} 0%, transparent 38%)`,`linear-gradient(135deg, ${g.changeTone(a,94)}, ${g.changeTone(a,28)})`];return{layers:e,value:e.join(", ")}},D=(a,e,t,r,i)=>{if(e==="mesh"){const n=_(a);return{cssVar:t,layers:n.layers,value:n.value}}const c=v(e,i),s=g.createPalette(a),l=g.createGradientModel(s,{...c==null?void 0:c.gradient,...r});return{cssVar:t,model:l,stops:l.stops,svg:x.toSvgGradient(l,{id:t.replace(/^--/,"")}),value:G.toCssGradient(l)}},F=(a,e,t,r)=>{var l,n;if(!a)return{};const i=`${e.replace(/^--/,"")}-morph`,c=u.resolveGradientMorphBlendMode((l=r==null?void 0:r.morph)==null?void 0:l.blendMode),s={...r==null?void 0:r.morph,id:((n=r==null?void 0:r.morph)==null?void 0:n.id)??i};return{boxShadow:{cssVar:`${e}-shadow`,value:u.toGradientBoxShadow(a,(r==null?void 0:r.shadow)??(t==null?void 0:t.shadow))},dropShadow:{cssVar:`${e}-drop-shadow`,value:u.toGradientDropShadow(a,(r==null?void 0:r.dropShadow)??(t==null?void 0:t.dropShadow))},morph:{blendMode:c,blendModeCssVar:`${e}-morph-blend-mode`,cssVar:`${e}-morph`,svg:u.toGradientMorphFilterMarkup(s),value:u.toGradientMorphFilter(s)}}},H=(a,e,t,r)=>{var c;const i={...t==null?void 0:t.animation,...r,name:`g-gradient-${a}-${(r==null?void 0:r.preset)??((c=t==null?void 0:t.animation)==null?void 0:c.preset)??"shift"}`,selector:`.g-gradient-${a}`};return{css:S.toGradientAnimationCSS(i),cssVar:`${e}-animation`,keyframes:S.toGradientAnimationKeyframes(i),name:i.name,value:S.toGradientAnimationValue(i)}},M=(a,e="glare",t={})=>{const r=t.registry??g.gradientPresets,i=p(e),c=j(t.prefix??"--g-gradient",i),s=v(e,r),n=g.createPalette(a)[500],d=D(n,e,c,t,r),f={[c]:d.value},o=t.effects?F(d.model,c,s,{dropShadow:t.dropShadow,morph:t.morph,shadow:t.shadow}):void 0,h=t.animations?H(i,c,s,t.animation):void 0;return o!=null&&o.boxShadow&&(f[o.boxShadow.cssVar]=o.boxShadow.value),o!=null&&o.dropShadow&&(f[o.dropShadow.cssVar]=o.dropShadow.value),o!=null&&o.morph&&(f[o.morph.cssVar]=o.morph.value,f[o.morph.blendModeCssVar]=o.morph.blendMode),h&&(f[h.cssVar]=h.value),{animation:h,cssText:$(f),cssVars:f,description:s==null?void 0:s.description,effects:o,gradient:d,keyframes:(h==null?void 0:h.keyframes)??"",label:(s==null?void 0:s.label)??i,name:i}},J=(a,e={})=>{const t=e.recipes??k,r={},i={},c={},s={},l=[];for(const n of t){const d=M(a,n,{animations:e.animations,effects:e.effects,morph:e.morph,prefix:e.prefix,registry:e.registry});r[d.name]=d.gradient,Object.assign(s,d.cssVars),d.effects&&(i[d.name]=d.effects),d.animation&&(c[d.name]=d.animation,l.push(d.animation.keyframes))}return{animations:c,cssText:$(s),cssVars:s,effects:i,gradients:r,keyframes:l.join(`
9
- `)}},R=(a,e={})=>{var w,C;const t=P(a,e),r=L(t);if(r)return r;const{className:i,id:c,recipe:s="glare",...l}=e,n=M(a,s,l),d=n.gradient.model&&e.effects&&e.morph?u.createGradientMorphBlobs(n.gradient.model,e.morph):void 0,f=c??`g-gradient-${n.name}-${O(b({options:e,seed:a}))}`,o=i??f,h={backgroundImage:`var(${n.gradient.cssVar})`};return(w=n.effects)!=null&&w.boxShadow&&(h.boxShadow=`var(${n.effects.boxShadow.cssVar})`),(C=n.effects)!=null&&C.dropShadow&&(h.filter=`var(${n.effects.dropShadow.cssVar})`),n.animation&&(h.animation=`var(${n.animation.cssVar})`),B(t,{animation:n.animation,className:o,cssText:z(o,n.cssVars,h,n.keyframes),cssVars:n.cssVars,effects:n.effects,gradient:n.gradient,id:f,keyframes:n.keyframes,morphBlobs:d,preset:n,style:h})};exports.clearGradientMaterialCache=I;exports.createGradientMaterial=R;exports.createGradientPreset=M;exports.createGradientTokens=J;exports.getGradientMaterialCacheStats=q;exports.setGradientMaterialCacheLimit=K;
8
+ `)},isGradientPresetName=(value,registry)=>value in registry,resolveTokenPreset=(recipe,registry)=>isGradientPresetName(recipe,registry)?presets.getGradientPreset(recipe,registry):recipe==="soft"?{label:"Soft",description:"Quiet monochrome radial gradient.",gradient:{recipe:"monochrome",type:"radial",position:"center",shape:"ellipse"},shadow:{layers:2,opacity:.18,blur:18,y:7,spread:-4},dropShadow:{layers:2,opacity:.26,blur:16,y:6},animation:{preset:"pulse",duration:7200,easing:"ease-in-out"}}:recipe==="mesh"?null:{label:recipe,gradient:{recipe,type:"linear",direction:recipe==="glare"?135:145}},createMeshGradient=seed=>{const layers=[`radial-gradient(circle at 16% 18%, ${presets.shiftHue(seed,-42,72,1.05)} 0%, transparent 34%)`,`radial-gradient(circle at 86% 20%, ${presets.getComplementaryColor(seed)} 0%, transparent 32%)`,`radial-gradient(circle at 50% 84%, ${presets.shiftHue(seed,56,64,1.08)} 0%, transparent 38%)`,`linear-gradient(135deg, ${presets.changeTone(seed,94)}, ${presets.changeTone(seed,28)})`];return{layers,value:layers.join(", ")}},createTokenGradientEntry=(seed,recipe,cssVar,options,registry)=>{if(recipe==="mesh"){const mesh=createMeshGradient(seed);return{cssVar,layers:mesh.layers,value:mesh.value}}const preset=resolveTokenPreset(recipe,registry),palette=presets.createPalette(seed),model=presets.createGradientModel(palette,{...preset==null?void 0:preset.gradient,...options});return{cssVar,model,stops:model.stops,svg:svg.toSvgGradient(model,{id:cssVar.replace(/^--/,"")}),value:css.toCssGradient(model)}},createTokenEffectEntry=(model,cssVarName,preset,options)=>{var _a,_b;if(!model)return{};const morphId=`${cssVarName.replace(/^--/,"")}-morph`,morphBlendMode=effects.resolveGradientMorphBlendMode((_a=options==null?void 0:options.morph)==null?void 0:_a.blendMode),morphOptions={...options==null?void 0:options.morph,id:((_b=options==null?void 0:options.morph)==null?void 0:_b.id)??morphId};return{boxShadow:{cssVar:`${cssVarName}-shadow`,value:effects.toGradientBoxShadow(model,(options==null?void 0:options.shadow)??(preset==null?void 0:preset.shadow))},dropShadow:{cssVar:`${cssVarName}-drop-shadow`,value:effects.toGradientDropShadow(model,(options==null?void 0:options.dropShadow)??(preset==null?void 0:preset.dropShadow))},morph:{blendMode:morphBlendMode,blendModeCssVar:`${cssVarName}-morph-blend-mode`,cssVar:`${cssVarName}-morph`,svg:effects.toGradientMorphFilterMarkup(morphOptions),value:effects.toGradientMorphFilter(morphOptions)}}},createTokenAnimationEntry=(name,cssVarName,preset,options)=>{var _a;const animationOptions={...preset==null?void 0:preset.animation,...options,name:`g-gradient-${name}-${(options==null?void 0:options.preset)??((_a=preset==null?void 0:preset.animation)==null?void 0:_a.preset)??"shift"}`,selector:`.g-gradient-${name}`};return{css:animation.toGradientAnimationCSS(animationOptions),cssVar:`${cssVarName}-animation`,keyframes:animation.toGradientAnimationKeyframes(animationOptions),name:animationOptions.name,value:animation.toGradientAnimationValue(animationOptions)}},createGradientPreset=(seed,recipe="glare",options={})=>{const registry=options.registry??presets.gradientPresets,name=toTokenName(recipe),cssVarName=toCssVar(options.prefix??"--g-gradient",name),preset=resolveTokenPreset(recipe,registry),seedColor=presets.createPalette(seed)[500],gradient=createTokenGradientEntry(seedColor,recipe,cssVarName,options,registry),cssVars={[cssVarName]:gradient.value},effects2=options.effects?createTokenEffectEntry(gradient.model,cssVarName,preset,{dropShadow:options.dropShadow,morph:options.morph,shadow:options.shadow}):void 0,animation2=options.animations?createTokenAnimationEntry(name,cssVarName,preset,options.animation):void 0;return effects2!=null&&effects2.boxShadow&&(cssVars[effects2.boxShadow.cssVar]=effects2.boxShadow.value),effects2!=null&&effects2.dropShadow&&(cssVars[effects2.dropShadow.cssVar]=effects2.dropShadow.value),effects2!=null&&effects2.morph&&(cssVars[effects2.morph.cssVar]=effects2.morph.value,cssVars[effects2.morph.blendModeCssVar]=effects2.morph.blendMode),animation2&&(cssVars[animation2.cssVar]=animation2.value),{animation:animation2,cssText:toCssText(cssVars),cssVars,description:preset==null?void 0:preset.description,effects:effects2,gradient,keyframes:(animation2==null?void 0:animation2.keyframes)??"",label:(preset==null?void 0:preset.label)??name,name}},createGradientTokens=(seed,options={})=>{const recipes=options.recipes??DEFAULT_TOKEN_RECIPES,gradients={},effects2={},animations={},cssVars={},keyframes=[];for(const recipe of recipes){const preset=createGradientPreset(seed,recipe,{animations:options.animations,effects:options.effects,morph:options.morph,prefix:options.prefix,registry:options.registry});gradients[preset.name]=preset.gradient,Object.assign(cssVars,preset.cssVars),preset.effects&&(effects2[preset.name]=preset.effects),preset.animation&&(animations[preset.name]=preset.animation,keyframes.push(preset.animation.keyframes))}return{animations,cssText:toCssText(cssVars),cssVars,effects:effects2,gradients,keyframes:keyframes.join(`
9
+ `)}},createGradientMaterial=(seed,options={})=>{var _a,_b;const cacheKey=getMaterialCacheKey(seed,options),cachedMaterial=getCachedMaterial(cacheKey);if(cachedMaterial)return cachedMaterial;const{className,id,recipe="glare",...presetOptions}=options,preset=createGradientPreset(seed,recipe,presetOptions),morphBlobs=preset.gradient.model&&options.effects&&options.morph?effects.createGradientMorphBlobs(preset.gradient.model,options.morph):void 0,stableId=id??`g-gradient-${preset.name}-${hashString(stableSerialize({options,seed}))}`,stableClassName=className??stableId,style={backgroundImage:`var(${preset.gradient.cssVar})`};return(_a=preset.effects)!=null&&_a.boxShadow&&(style.boxShadow=`var(${preset.effects.boxShadow.cssVar})`),(_b=preset.effects)!=null&&_b.dropShadow&&(style.filter=`var(${preset.effects.dropShadow.cssVar})`),preset.animation&&(style.animation=`var(${preset.animation.cssVar})`),setCachedMaterial(cacheKey,{animation:preset.animation,className:stableClassName,cssText:toScopedCssText(stableClassName,preset.cssVars,style,preset.keyframes),cssVars:preset.cssVars,effects:preset.effects,gradient:preset.gradient,id:stableId,keyframes:preset.keyframes,morphBlobs,preset,style})};exports.clearGradientMaterialCache=clearGradientMaterialCache;exports.createGradientMaterial=createGradientMaterial;exports.createGradientPreset=createGradientPreset;exports.createGradientTokens=createGradientTokens;exports.getGradientMaterialCacheStats=getGradientMaterialCacheStats;exports.setGradientMaterialCacheLimit=setGradientMaterialCacheLimit;
package/dist/material.mjs CHANGED
@@ -1,51 +1,51 @@
1
- import { j as x, d as C, i as G, c as p, s as w, n as k, o as S } from "./presets-DYXLx_nN.js";
2
- import { toGradientAnimationValue as T, toGradientAnimationKeyframes as V, toGradientAnimationCSS as j } from "./animation.mjs";
3
- import { createGradientMorphBlobs as A, resolveGradientMorphBlendMode as E, toGradientMorphFilter as O, toGradientMorphFilterMarkup as L, toGradientDropShadow as P, toGradientBoxShadow as B } from "./effects.mjs";
4
- import { t as I } from "./css-DVaTTIqS.js";
5
- import { t as K } from "./svg-hZus3ztj.js";
6
- const z = ["glare", "soft", "mesh"], N = 128;
7
- let g = N;
8
- const h = /* @__PURE__ */ new Map(), _ = (a) => a.replace(/[A-Z]/g, (e) => `-${e.toLowerCase()}`), D = (a) => _(a), F = (a, e, r) => `${a}-${e}`, y = (a) => Object.entries(a).map(([e, r]) => `${e}: ${r};`).join(`
9
- `), H = (a) => a.replace(/[A-Z]/g, (e) => `-${e.toLowerCase()}`), J = (a) => Object.entries(a).map(([e, r]) => `${H(e)}: ${r};`).join(`
10
- `), u = (a) => a === null || typeof a != "object" ? JSON.stringify(a) : Array.isArray(a) ? `[${a.map(u).join(",")}]` : `{${Object.entries(a).filter(([, e]) => e !== void 0).sort(([e], [r]) => e.localeCompare(r)).map(
11
- ([e, r]) => `${JSON.stringify(e)}:${u(r)}`
12
- ).join(",")}}`, R = (a) => {
13
- let e = 5381;
14
- for (let r = 0; r < a.length; r += 1)
15
- e = e * 33 ^ a.charCodeAt(r);
16
- return (e >>> 0).toString(36);
17
- }, U = (a, e) => u({ options: e, seed: a }), Z = (a) => {
18
- const e = h.get(a);
19
- if (e)
20
- return h.delete(a), h.set(a, e), e;
21
- }, Q = (a, e) => {
22
- if (g <= 0) return e;
23
- for (h.set(a, e); h.size > g; ) {
24
- const r = h.keys().next().value;
25
- if (r === void 0) break;
26
- h.delete(r);
1
+ import { j as gradientPresets, d as createPalette, i as getGradientPreset, c as createGradientModel, s as shiftHue, n as getComplementaryColor, o as changeTone } from "./presets-Du6aTLtD.js";
2
+ import { toGradientAnimationValue, toGradientAnimationKeyframes, toGradientAnimationCSS } from "./animation.mjs";
3
+ import { createGradientMorphBlobs, resolveGradientMorphBlendMode, toGradientMorphFilter, toGradientMorphFilterMarkup, toGradientDropShadow, toGradientBoxShadow } from "./effects.mjs";
4
+ import { t as toCssGradient } from "./css-B3xGfmW1.js";
5
+ import { t as toSvgGradient } from "./svg-B2CaHCLv.js";
6
+ const DEFAULT_TOKEN_RECIPES = ["glare", "soft", "mesh"], DEFAULT_MATERIAL_CACHE_LIMIT = 128;
7
+ let materialCacheLimit = DEFAULT_MATERIAL_CACHE_LIMIT;
8
+ const materialCache = /* @__PURE__ */ new Map(), toKebabCase = (value) => value.replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`), toTokenName = (recipe) => toKebabCase(recipe), toCssVar = (prefix, name, suffix) => `${prefix}-${name}`, toCssText = (cssVars) => Object.entries(cssVars).map(([name, value]) => `${name}: ${value};`).join(`
9
+ `), toCssProperty = (value) => value.replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`), toCssDeclarations = (styles) => Object.entries(styles).map(([name, value]) => `${toCssProperty(name)}: ${value};`).join(`
10
+ `), stableSerialize = (value) => value === null || typeof value != "object" ? JSON.stringify(value) : Array.isArray(value) ? `[${value.map(stableSerialize).join(",")}]` : `{${Object.entries(value).filter(([, entryValue]) => entryValue !== void 0).sort(([firstKey], [secondKey]) => firstKey.localeCompare(secondKey)).map(
11
+ ([key, entryValue]) => `${JSON.stringify(key)}:${stableSerialize(entryValue)}`
12
+ ).join(",")}}`, hashString = (value) => {
13
+ let hash = 5381;
14
+ for (let index = 0; index < value.length; index += 1)
15
+ hash = hash * 33 ^ value.charCodeAt(index);
16
+ return (hash >>> 0).toString(36);
17
+ }, getMaterialCacheKey = (seed, options) => stableSerialize({ options, seed }), getCachedMaterial = (key) => {
18
+ const cachedMaterial = materialCache.get(key);
19
+ if (cachedMaterial)
20
+ return materialCache.delete(key), materialCache.set(key, cachedMaterial), cachedMaterial;
21
+ }, setCachedMaterial = (key, material) => {
22
+ if (materialCacheLimit <= 0) return material;
23
+ for (materialCache.set(key, material); materialCache.size > materialCacheLimit; ) {
24
+ const oldestKey = materialCache.keys().next().value;
25
+ if (oldestKey === void 0) break;
26
+ materialCache.delete(oldestKey);
27
27
  }
28
- return e;
29
- }, ie = () => {
30
- h.clear();
31
- }, ce = (a) => {
32
- for (g = Math.max(0, Math.floor(a)); h.size > g; ) {
33
- const e = h.keys().next().value;
34
- if (e === void 0) break;
35
- h.delete(e);
28
+ return material;
29
+ }, clearGradientMaterialCache = () => {
30
+ materialCache.clear();
31
+ }, setGradientMaterialCacheLimit = (limit) => {
32
+ for (materialCacheLimit = Math.max(0, Math.floor(limit)); materialCache.size > materialCacheLimit; ) {
33
+ const oldestKey = materialCache.keys().next().value;
34
+ if (oldestKey === void 0) break;
35
+ materialCache.delete(oldestKey);
36
36
  }
37
- }, de = () => ({
38
- limit: g,
39
- size: h.size
40
- }), q = (a, e, r, t) => {
41
- const i = y(e), c = J(r), s = [i, c].filter(Boolean).join(`
37
+ }, getGradientMaterialCacheStats = () => ({
38
+ limit: materialCacheLimit,
39
+ size: materialCache.size
40
+ }), toScopedCssText = (className, cssVars, style, keyframes) => {
41
+ const vars = toCssText(cssVars), styles = toCssDeclarations(style), body = [vars, styles].filter(Boolean).join(`
42
42
  `);
43
- return [`.${a} {
44
- ${s}
45
- }`, t].filter(Boolean).join(`
43
+ return [`.${className} {
44
+ ${body}
45
+ }`, keyframes].filter(Boolean).join(`
46
46
 
47
47
  `);
48
- }, W = (a, e) => a in e, M = (a, e) => W(a, e) ? G(a, e) : a === "soft" ? {
48
+ }, isGradientPresetName = (value, registry) => value in registry, resolveTokenPreset = (recipe, registry) => isGradientPresetName(recipe, registry) ? getGradientPreset(recipe, registry) : recipe === "soft" ? {
49
49
  label: "Soft",
50
50
  description: "Quiet monochrome radial gradient.",
51
51
  gradient: {
@@ -72,167 +72,167 @@ ${s}
72
72
  duration: 7200,
73
73
  easing: "ease-in-out"
74
74
  }
75
- } : a === "mesh" ? null : {
76
- label: a,
75
+ } : recipe === "mesh" ? null : {
76
+ label: recipe,
77
77
  gradient: {
78
- recipe: a,
78
+ recipe,
79
79
  type: "linear",
80
- direction: a === "glare" ? 135 : 145
80
+ direction: recipe === "glare" ? 135 : 145
81
81
  }
82
- }, X = (a) => {
83
- const e = [
84
- `radial-gradient(circle at 16% 18%, ${w(a, -42, 72, 1.05)} 0%, transparent 34%)`,
85
- `radial-gradient(circle at 86% 20%, ${k(a)} 0%, transparent 32%)`,
86
- `radial-gradient(circle at 50% 84%, ${w(a, 56, 64, 1.08)} 0%, transparent 38%)`,
87
- `linear-gradient(135deg, ${S(a, 94)}, ${S(a, 28)})`
82
+ }, createMeshGradient = (seed) => {
83
+ const layers = [
84
+ `radial-gradient(circle at 16% 18%, ${shiftHue(seed, -42, 72, 1.05)} 0%, transparent 34%)`,
85
+ `radial-gradient(circle at 86% 20%, ${getComplementaryColor(seed)} 0%, transparent 32%)`,
86
+ `radial-gradient(circle at 50% 84%, ${shiftHue(seed, 56, 64, 1.08)} 0%, transparent 38%)`,
87
+ `linear-gradient(135deg, ${changeTone(seed, 94)}, ${changeTone(seed, 28)})`
88
88
  ];
89
89
  return {
90
- layers: e,
91
- value: e.join(", ")
90
+ layers,
91
+ value: layers.join(", ")
92
92
  };
93
- }, Y = (a, e, r, t, i) => {
94
- if (e === "mesh") {
95
- const n = X(a);
93
+ }, createTokenGradientEntry = (seed, recipe, cssVar, options, registry) => {
94
+ if (recipe === "mesh") {
95
+ const mesh = createMeshGradient(seed);
96
96
  return {
97
- cssVar: r,
98
- layers: n.layers,
99
- value: n.value
97
+ cssVar,
98
+ layers: mesh.layers,
99
+ value: mesh.value
100
100
  };
101
101
  }
102
- const c = M(e, i), s = C(a), l = p(s, {
103
- ...c == null ? void 0 : c.gradient,
104
- ...t
102
+ const preset = resolveTokenPreset(recipe, registry), palette = createPalette(seed), model = createGradientModel(palette, {
103
+ ...preset == null ? void 0 : preset.gradient,
104
+ ...options
105
105
  });
106
106
  return {
107
- cssVar: r,
108
- model: l,
109
- stops: l.stops,
110
- svg: K(l, { id: r.replace(/^--/, "") }),
111
- value: I(l)
107
+ cssVar,
108
+ model,
109
+ stops: model.stops,
110
+ svg: toSvgGradient(model, { id: cssVar.replace(/^--/, "") }),
111
+ value: toCssGradient(model)
112
112
  };
113
- }, ee = (a, e, r, t) => {
114
- var l, n;
115
- if (!a) return {};
116
- const i = `${e.replace(/^--/, "")}-morph`, c = E(
117
- (l = t == null ? void 0 : t.morph) == null ? void 0 : l.blendMode
118
- ), s = {
119
- ...t == null ? void 0 : t.morph,
120
- id: ((n = t == null ? void 0 : t.morph) == null ? void 0 : n.id) ?? i
113
+ }, createTokenEffectEntry = (model, cssVarName, preset, options) => {
114
+ var _a, _b;
115
+ if (!model) return {};
116
+ const morphId = `${cssVarName.replace(/^--/, "")}-morph`, morphBlendMode = resolveGradientMorphBlendMode(
117
+ (_a = options == null ? void 0 : options.morph) == null ? void 0 : _a.blendMode
118
+ ), morphOptions = {
119
+ ...options == null ? void 0 : options.morph,
120
+ id: ((_b = options == null ? void 0 : options.morph) == null ? void 0 : _b.id) ?? morphId
121
121
  };
122
122
  return {
123
123
  boxShadow: {
124
- cssVar: `${e}-shadow`,
125
- value: B(a, (t == null ? void 0 : t.shadow) ?? (r == null ? void 0 : r.shadow))
124
+ cssVar: `${cssVarName}-shadow`,
125
+ value: toGradientBoxShadow(model, (options == null ? void 0 : options.shadow) ?? (preset == null ? void 0 : preset.shadow))
126
126
  },
127
127
  dropShadow: {
128
- cssVar: `${e}-drop-shadow`,
129
- value: P(
130
- a,
131
- (t == null ? void 0 : t.dropShadow) ?? (r == null ? void 0 : r.dropShadow)
128
+ cssVar: `${cssVarName}-drop-shadow`,
129
+ value: toGradientDropShadow(
130
+ model,
131
+ (options == null ? void 0 : options.dropShadow) ?? (preset == null ? void 0 : preset.dropShadow)
132
132
  )
133
133
  },
134
134
  morph: {
135
- blendMode: c,
136
- blendModeCssVar: `${e}-morph-blend-mode`,
137
- cssVar: `${e}-morph`,
138
- svg: L(s),
139
- value: O(s)
135
+ blendMode: morphBlendMode,
136
+ blendModeCssVar: `${cssVarName}-morph-blend-mode`,
137
+ cssVar: `${cssVarName}-morph`,
138
+ svg: toGradientMorphFilterMarkup(morphOptions),
139
+ value: toGradientMorphFilter(morphOptions)
140
140
  }
141
141
  };
142
- }, ae = (a, e, r, t) => {
143
- var c;
144
- const i = {
145
- ...r == null ? void 0 : r.animation,
146
- ...t,
147
- name: `g-gradient-${a}-${(t == null ? void 0 : t.preset) ?? ((c = r == null ? void 0 : r.animation) == null ? void 0 : c.preset) ?? "shift"}`,
148
- selector: `.g-gradient-${a}`
142
+ }, createTokenAnimationEntry = (name, cssVarName, preset, options) => {
143
+ var _a;
144
+ const animationOptions = {
145
+ ...preset == null ? void 0 : preset.animation,
146
+ ...options,
147
+ name: `g-gradient-${name}-${(options == null ? void 0 : options.preset) ?? ((_a = preset == null ? void 0 : preset.animation) == null ? void 0 : _a.preset) ?? "shift"}`,
148
+ selector: `.g-gradient-${name}`
149
149
  };
150
150
  return {
151
- css: j(i),
152
- cssVar: `${e}-animation`,
153
- keyframes: V(i),
154
- name: i.name,
155
- value: T(i)
151
+ css: toGradientAnimationCSS(animationOptions),
152
+ cssVar: `${cssVarName}-animation`,
153
+ keyframes: toGradientAnimationKeyframes(animationOptions),
154
+ name: animationOptions.name,
155
+ value: toGradientAnimationValue(animationOptions)
156
156
  };
157
- }, v = (a, e = "glare", r = {}) => {
158
- const t = r.registry ?? x, i = D(e), c = F(r.prefix ?? "--g-gradient", i), s = M(e, t), n = C(a)[500], d = Y(
159
- n,
160
- e,
161
- c,
162
- r,
163
- t
164
- ), f = {
165
- [c]: d.value
166
- }, o = r.effects ? ee(d.model, c, s, {
167
- dropShadow: r.dropShadow,
168
- morph: r.morph,
169
- shadow: r.shadow
170
- }) : void 0, m = r.animations ? ae(i, c, s, r.animation) : void 0;
171
- return o != null && o.boxShadow && (f[o.boxShadow.cssVar] = o.boxShadow.value), o != null && o.dropShadow && (f[o.dropShadow.cssVar] = o.dropShadow.value), o != null && o.morph && (f[o.morph.cssVar] = o.morph.value, f[o.morph.blendModeCssVar] = o.morph.blendMode), m && (f[m.cssVar] = m.value), {
172
- animation: m,
173
- cssText: y(f),
174
- cssVars: f,
175
- description: s == null ? void 0 : s.description,
176
- effects: o,
177
- gradient: d,
178
- keyframes: (m == null ? void 0 : m.keyframes) ?? "",
179
- label: (s == null ? void 0 : s.label) ?? i,
180
- name: i
157
+ }, createGradientPreset = (seed, recipe = "glare", options = {}) => {
158
+ const registry = options.registry ?? gradientPresets, name = toTokenName(recipe), cssVarName = toCssVar(options.prefix ?? "--g-gradient", name), preset = resolveTokenPreset(recipe, registry), seedColor = createPalette(seed)[500], gradient = createTokenGradientEntry(
159
+ seedColor,
160
+ recipe,
161
+ cssVarName,
162
+ options,
163
+ registry
164
+ ), cssVars = {
165
+ [cssVarName]: gradient.value
166
+ }, effects = options.effects ? createTokenEffectEntry(gradient.model, cssVarName, preset, {
167
+ dropShadow: options.dropShadow,
168
+ morph: options.morph,
169
+ shadow: options.shadow
170
+ }) : void 0, animation = options.animations ? createTokenAnimationEntry(name, cssVarName, preset, options.animation) : void 0;
171
+ return effects != null && effects.boxShadow && (cssVars[effects.boxShadow.cssVar] = effects.boxShadow.value), effects != null && effects.dropShadow && (cssVars[effects.dropShadow.cssVar] = effects.dropShadow.value), effects != null && effects.morph && (cssVars[effects.morph.cssVar] = effects.morph.value, cssVars[effects.morph.blendModeCssVar] = effects.morph.blendMode), animation && (cssVars[animation.cssVar] = animation.value), {
172
+ animation,
173
+ cssText: toCssText(cssVars),
174
+ cssVars,
175
+ description: preset == null ? void 0 : preset.description,
176
+ effects,
177
+ gradient,
178
+ keyframes: (animation == null ? void 0 : animation.keyframes) ?? "",
179
+ label: (preset == null ? void 0 : preset.label) ?? name,
180
+ name
181
181
  };
182
- }, le = (a, e = {}) => {
183
- const r = e.recipes ?? z, t = {}, i = {}, c = {}, s = {}, l = [];
184
- for (const n of r) {
185
- const d = v(a, n, {
186
- animations: e.animations,
187
- effects: e.effects,
188
- morph: e.morph,
189
- prefix: e.prefix,
190
- registry: e.registry
182
+ }, createGradientTokens = (seed, options = {}) => {
183
+ const recipes = options.recipes ?? DEFAULT_TOKEN_RECIPES, gradients = {}, effects = {}, animations = {}, cssVars = {}, keyframes = [];
184
+ for (const recipe of recipes) {
185
+ const preset = createGradientPreset(seed, recipe, {
186
+ animations: options.animations,
187
+ effects: options.effects,
188
+ morph: options.morph,
189
+ prefix: options.prefix,
190
+ registry: options.registry
191
191
  });
192
- t[d.name] = d.gradient, Object.assign(s, d.cssVars), d.effects && (i[d.name] = d.effects), d.animation && (c[d.name] = d.animation, l.push(d.animation.keyframes));
192
+ gradients[preset.name] = preset.gradient, Object.assign(cssVars, preset.cssVars), preset.effects && (effects[preset.name] = preset.effects), preset.animation && (animations[preset.name] = preset.animation, keyframes.push(preset.animation.keyframes));
193
193
  }
194
194
  return {
195
- animations: c,
196
- cssText: y(s),
197
- cssVars: s,
198
- effects: i,
199
- gradients: t,
200
- keyframes: l.join(`
195
+ animations,
196
+ cssText: toCssText(cssVars),
197
+ cssVars,
198
+ effects,
199
+ gradients,
200
+ keyframes: keyframes.join(`
201
201
  `)
202
202
  };
203
- }, me = (a, e = {}) => {
204
- var b, $;
205
- const r = U(a, e), t = Z(r);
206
- if (t) return t;
207
- const { className: i, id: c, recipe: s = "glare", ...l } = e, n = v(a, s, l), d = n.gradient.model && e.effects && e.morph ? A(n.gradient.model, e.morph) : void 0, f = c ?? `g-gradient-${n.name}-${R(
208
- u({ options: e, seed: a })
209
- )}`, o = i ?? f, m = {
210
- backgroundImage: `var(${n.gradient.cssVar})`
203
+ }, createGradientMaterial = (seed, options = {}) => {
204
+ var _a, _b;
205
+ const cacheKey = getMaterialCacheKey(seed, options), cachedMaterial = getCachedMaterial(cacheKey);
206
+ if (cachedMaterial) return cachedMaterial;
207
+ const { className, id, recipe = "glare", ...presetOptions } = options, preset = createGradientPreset(seed, recipe, presetOptions), morphBlobs = preset.gradient.model && options.effects && options.morph ? createGradientMorphBlobs(preset.gradient.model, options.morph) : void 0, stableId = id ?? `g-gradient-${preset.name}-${hashString(
208
+ stableSerialize({ options, seed })
209
+ )}`, stableClassName = className ?? stableId, style = {
210
+ backgroundImage: `var(${preset.gradient.cssVar})`
211
211
  };
212
- return (b = n.effects) != null && b.boxShadow && (m.boxShadow = `var(${n.effects.boxShadow.cssVar})`), ($ = n.effects) != null && $.dropShadow && (m.filter = `var(${n.effects.dropShadow.cssVar})`), n.animation && (m.animation = `var(${n.animation.cssVar})`), Q(r, {
213
- animation: n.animation,
214
- className: o,
215
- cssText: q(
216
- o,
217
- n.cssVars,
218
- m,
219
- n.keyframes
212
+ return (_a = preset.effects) != null && _a.boxShadow && (style.boxShadow = `var(${preset.effects.boxShadow.cssVar})`), (_b = preset.effects) != null && _b.dropShadow && (style.filter = `var(${preset.effects.dropShadow.cssVar})`), preset.animation && (style.animation = `var(${preset.animation.cssVar})`), setCachedMaterial(cacheKey, {
213
+ animation: preset.animation,
214
+ className: stableClassName,
215
+ cssText: toScopedCssText(
216
+ stableClassName,
217
+ preset.cssVars,
218
+ style,
219
+ preset.keyframes
220
220
  ),
221
- cssVars: n.cssVars,
222
- effects: n.effects,
223
- gradient: n.gradient,
224
- id: f,
225
- keyframes: n.keyframes,
226
- morphBlobs: d,
227
- preset: n,
228
- style: m
221
+ cssVars: preset.cssVars,
222
+ effects: preset.effects,
223
+ gradient: preset.gradient,
224
+ id: stableId,
225
+ keyframes: preset.keyframes,
226
+ morphBlobs,
227
+ preset,
228
+ style
229
229
  });
230
230
  };
231
231
  export {
232
- ie as clearGradientMaterialCache,
233
- me as createGradientMaterial,
234
- v as createGradientPreset,
235
- le as createGradientTokens,
236
- de as getGradientMaterialCacheStats,
237
- ce as setGradientMaterialCacheLimit
232
+ clearGradientMaterialCache,
233
+ createGradientMaterial,
234
+ createGradientPreset,
235
+ createGradientTokens,
236
+ getGradientMaterialCacheStats,
237
+ setGradientMaterialCacheLimit
238
238
  };