@gradient-ui/gradient-engine 0.6.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -6
- package/dist/animation.cjs +13 -13
- package/dist/animation.mjs +36 -36
- package/dist/core.cjs +1 -1
- package/dist/core.mjs +17 -17
- package/dist/css-B3xGfmW1.js +17 -0
- package/dist/css-CREh0Awz.cjs +1 -0
- package/dist/design-tokens.cjs +1 -1
- package/dist/design-tokens.mjs +5 -5
- package/dist/designTokens-Bw-HZ1f1.js +116 -0
- package/dist/designTokens-DsIk5RSi.cjs +1 -0
- package/dist/effects.cjs +67 -67
- package/dist/effects.mjs +153 -153
- package/dist/formatters.cjs +1 -1
- package/dist/formatters.mjs +33 -33
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +63 -63
- package/dist/material.cjs +8 -8
- package/dist/material.mjs +170 -170
- package/dist/presets-DA-6KYJh.cjs +316 -0
- package/dist/presets-Du6aTLtD.js +4025 -0
- package/dist/svg-B2CaHCLv.js +118 -0
- package/dist/svg-BtMrj3fP.cjs +32 -0
- package/dist/types/animation/css.d.ts +2 -2
- package/dist/types/animation/index.d.ts +1 -1
- package/dist/types/colorSystem.d.ts +3 -3
- package/dist/types/core.d.ts +7 -7
- package/dist/types/designTokens.d.ts +4 -4
- package/dist/types/effects/index.d.ts +2 -2
- package/dist/types/effects/morph.d.ts +1 -1
- package/dist/types/effects/shadow.d.ts +1 -1
- package/dist/types/formatters/canvas.d.ts +1 -1
- package/dist/types/formatters/css.d.ts +1 -1
- package/dist/types/formatters/index.d.ts +3 -3
- package/dist/types/formatters/svg.d.ts +1 -1
- package/dist/types/index.d.ts +11 -11
- package/dist/types/material.d.ts +1 -1
- package/dist/types/model.d.ts +3 -3
- package/dist/types/palette.d.ts +1 -1
- package/dist/types/presets.d.ts +1 -1
- package/dist/types/recipes.d.ts +12 -12
- package/dist/types/tokens.d.ts +3 -3
- package/dist/types/types.d.ts +1 -1
- package/dist/types/utils.d.ts +1 -1
- package/dist/{types-BFr1fN-7.js → types-B0eCazk8.js} +4 -4
- package/dist/types-BFkUlDkW.cjs +1 -0
- package/dist/types-cjs/animation/css.d.cts +12 -0
- package/dist/types-cjs/animation/index.d.cts +1 -0
- package/dist/types-cjs/color.d.cts +11 -0
- package/dist/types-cjs/colorMath.d.cts +3 -0
- package/dist/types-cjs/colorSeeds.d.cts +22 -0
- package/dist/types-cjs/colorSystem.d.cts +20 -0
- package/dist/types-cjs/constants.d.cts +3 -0
- package/dist/types-cjs/core.d.cts +9 -0
- package/dist/types-cjs/designTokens.d.cts +24 -0
- package/dist/types-cjs/effects/index.d.cts +2 -0
- package/dist/types-cjs/effects/morph.d.cts +8 -0
- package/dist/types-cjs/effects/shadow.d.cts +3 -0
- package/dist/types-cjs/formatters/canvas.d.cts +2 -0
- package/dist/types-cjs/formatters/css.d.cts +3 -0
- package/dist/types-cjs/formatters/index.d.cts +3 -0
- package/dist/types-cjs/formatters/svg.d.cts +5 -0
- package/dist/types-cjs/index.d.cts +11 -0
- package/dist/types-cjs/material.d.cts +1 -0
- package/dist/types-cjs/model.d.cts +5 -0
- package/dist/types-cjs/package.json +3 -0
- package/dist/types-cjs/palette.d.cts +13 -0
- package/dist/types-cjs/presets.d.cts +239 -0
- package/dist/types-cjs/recipes.d.cts +14 -0
- package/dist/types-cjs/scheme.d.cts +3 -0
- package/dist/types-cjs/tokens.d.cts +107 -0
- package/dist/types-cjs/types.d.cts +127 -0
- package/dist/types-cjs/utils.d.cts +10 -0
- package/dist/utils-Bry9BTmj.cjs +1 -0
- package/dist/utils-VaqPefmS.js +76 -0
- package/package.json +59 -23
- package/dist/css-BVHXLMRl.cjs +0 -1
- package/dist/css-DVaTTIqS.js +0 -17
- package/dist/designTokens-BnzZfRES.js +0 -116
- package/dist/designTokens-C1WdzS3v.cjs +0 -1
- package/dist/presets-BBLdqUE4.cjs +0 -316
- package/dist/presets-DYXLx_nN.js +0 -4025
- package/dist/svg-dGtLYnIJ.cjs +0 -32
- package/dist/svg-hZus3ztj.js +0 -118
- package/dist/types-BMLEvdee.cjs +0 -1
- package/dist/utils-BzSNCfat.js +0 -76
- package/dist/utils-D83DMCMa.cjs +0 -1
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type ColorInput } from './color.cjs';
|
|
2
|
+
export declare const COLOR_SHADES: readonly [50, 100, 200, 300, 400, 500, 600, 700, 800, 900];
|
|
3
|
+
export type ColorShade = (typeof COLOR_SHADES)[number];
|
|
4
|
+
export type ColorPalette = Record<ColorShade, string>;
|
|
5
|
+
export interface ColorPalettePair {
|
|
6
|
+
colors: ColorPalette;
|
|
7
|
+
onColors: ColorPalette;
|
|
8
|
+
}
|
|
9
|
+
export declare const SHADE_TONES: Record<ColorShade, number>;
|
|
10
|
+
export declare const ON_SHADE_TONES: Record<ColorShade, number>;
|
|
11
|
+
export declare const createPalette: (seed: ColorInput) => ColorPalette;
|
|
12
|
+
export declare const createOnPalette: (seed: ColorInput) => ColorPalette;
|
|
13
|
+
export declare const createPalettePair: (seed: ColorInput) => ColorPalettePair;
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
import type { GradientAnimationOptions, GradientAnimationPreset, GradientOptions, GradientRecipe, GradientShadowOptions, GradientType } from './types.cjs';
|
|
2
|
+
export interface GradientPreset {
|
|
3
|
+
label: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
gradient: Omit<GradientOptions, 'shade' | 'colors'> & {
|
|
6
|
+
recipe: GradientRecipe;
|
|
7
|
+
type?: GradientType;
|
|
8
|
+
};
|
|
9
|
+
shadow?: GradientShadowOptions;
|
|
10
|
+
dropShadow?: GradientShadowOptions;
|
|
11
|
+
animation?: Omit<GradientAnimationOptions, 'name' | 'selector'> & {
|
|
12
|
+
preset: GradientAnimationPreset;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export type GradientPresetRegistry = Record<string, GradientPreset>;
|
|
16
|
+
export declare const defineGradientPreset: <T extends GradientPreset>(preset: T) => T;
|
|
17
|
+
export declare const defineGradientPresetRegistry: <T extends GradientPresetRegistry>(presets: T) => T;
|
|
18
|
+
export declare const gradientPresets: {
|
|
19
|
+
materialBorder: {
|
|
20
|
+
label: string;
|
|
21
|
+
description: string;
|
|
22
|
+
gradient: {
|
|
23
|
+
recipe: "glare";
|
|
24
|
+
type: "linear";
|
|
25
|
+
direction: number;
|
|
26
|
+
};
|
|
27
|
+
shadow: {
|
|
28
|
+
layers: number;
|
|
29
|
+
opacity: number;
|
|
30
|
+
blur: number;
|
|
31
|
+
y: number;
|
|
32
|
+
spread: number;
|
|
33
|
+
};
|
|
34
|
+
dropShadow: {
|
|
35
|
+
layers: number;
|
|
36
|
+
opacity: number;
|
|
37
|
+
blur: number;
|
|
38
|
+
y: number;
|
|
39
|
+
};
|
|
40
|
+
animation: {
|
|
41
|
+
preset: "shift";
|
|
42
|
+
duration: number;
|
|
43
|
+
easing: string;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
materialAction: {
|
|
47
|
+
label: string;
|
|
48
|
+
description: string;
|
|
49
|
+
gradient: {
|
|
50
|
+
recipe: "glare";
|
|
51
|
+
type: "linear";
|
|
52
|
+
direction: number;
|
|
53
|
+
};
|
|
54
|
+
shadow: {
|
|
55
|
+
layers: number;
|
|
56
|
+
opacity: number;
|
|
57
|
+
blur: number;
|
|
58
|
+
y: number;
|
|
59
|
+
spread: number;
|
|
60
|
+
};
|
|
61
|
+
dropShadow: {
|
|
62
|
+
layers: number;
|
|
63
|
+
opacity: number;
|
|
64
|
+
blur: number;
|
|
65
|
+
y: number;
|
|
66
|
+
};
|
|
67
|
+
animation: {
|
|
68
|
+
preset: "shift";
|
|
69
|
+
duration: number;
|
|
70
|
+
easing: string;
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
materialSurface: {
|
|
74
|
+
label: string;
|
|
75
|
+
description: string;
|
|
76
|
+
gradient: {
|
|
77
|
+
recipe: "monochrome";
|
|
78
|
+
type: "linear";
|
|
79
|
+
direction: number;
|
|
80
|
+
};
|
|
81
|
+
shadow: {
|
|
82
|
+
layers: number;
|
|
83
|
+
opacity: number;
|
|
84
|
+
blur: number;
|
|
85
|
+
y: number;
|
|
86
|
+
spread: number;
|
|
87
|
+
};
|
|
88
|
+
dropShadow: {
|
|
89
|
+
layers: number;
|
|
90
|
+
opacity: number;
|
|
91
|
+
blur: number;
|
|
92
|
+
y: number;
|
|
93
|
+
};
|
|
94
|
+
animation: {
|
|
95
|
+
preset: "pulse";
|
|
96
|
+
duration: number;
|
|
97
|
+
easing: string;
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
brandGlare: {
|
|
101
|
+
label: string;
|
|
102
|
+
description: string;
|
|
103
|
+
gradient: {
|
|
104
|
+
recipe: "glare";
|
|
105
|
+
type: "linear";
|
|
106
|
+
direction: number;
|
|
107
|
+
};
|
|
108
|
+
shadow: {
|
|
109
|
+
layers: number;
|
|
110
|
+
opacity: number;
|
|
111
|
+
blur: number;
|
|
112
|
+
y: number;
|
|
113
|
+
spread: number;
|
|
114
|
+
};
|
|
115
|
+
dropShadow: {
|
|
116
|
+
layers: number;
|
|
117
|
+
opacity: number;
|
|
118
|
+
blur: number;
|
|
119
|
+
y: number;
|
|
120
|
+
};
|
|
121
|
+
animation: {
|
|
122
|
+
preset: "shift";
|
|
123
|
+
duration: number;
|
|
124
|
+
easing: string;
|
|
125
|
+
};
|
|
126
|
+
};
|
|
127
|
+
softMono: {
|
|
128
|
+
label: string;
|
|
129
|
+
description: string;
|
|
130
|
+
gradient: {
|
|
131
|
+
recipe: "monochrome";
|
|
132
|
+
type: "linear";
|
|
133
|
+
direction: number;
|
|
134
|
+
};
|
|
135
|
+
shadow: {
|
|
136
|
+
layers: number;
|
|
137
|
+
opacity: number;
|
|
138
|
+
blur: number;
|
|
139
|
+
y: number;
|
|
140
|
+
spread: number;
|
|
141
|
+
};
|
|
142
|
+
dropShadow: {
|
|
143
|
+
layers: number;
|
|
144
|
+
opacity: number;
|
|
145
|
+
blur: number;
|
|
146
|
+
y: number;
|
|
147
|
+
};
|
|
148
|
+
animation: {
|
|
149
|
+
preset: "pulse";
|
|
150
|
+
duration: number;
|
|
151
|
+
easing: string;
|
|
152
|
+
};
|
|
153
|
+
};
|
|
154
|
+
neonDuo: {
|
|
155
|
+
label: string;
|
|
156
|
+
description: string;
|
|
157
|
+
gradient: {
|
|
158
|
+
recipe: "duotone";
|
|
159
|
+
type: "linear";
|
|
160
|
+
direction: number;
|
|
161
|
+
};
|
|
162
|
+
shadow: {
|
|
163
|
+
layers: number;
|
|
164
|
+
opacity: number;
|
|
165
|
+
blur: number;
|
|
166
|
+
y: number;
|
|
167
|
+
spread: number;
|
|
168
|
+
};
|
|
169
|
+
dropShadow: {
|
|
170
|
+
layers: number;
|
|
171
|
+
opacity: number;
|
|
172
|
+
blur: number;
|
|
173
|
+
y: number;
|
|
174
|
+
};
|
|
175
|
+
animation: {
|
|
176
|
+
preset: "shift";
|
|
177
|
+
duration: number;
|
|
178
|
+
easing: string;
|
|
179
|
+
};
|
|
180
|
+
};
|
|
181
|
+
orbitalConic: {
|
|
182
|
+
label: string;
|
|
183
|
+
description: string;
|
|
184
|
+
gradient: {
|
|
185
|
+
recipe: "triadic";
|
|
186
|
+
type: "conic";
|
|
187
|
+
direction: number;
|
|
188
|
+
position: string;
|
|
189
|
+
};
|
|
190
|
+
shadow: {
|
|
191
|
+
layers: number;
|
|
192
|
+
opacity: number;
|
|
193
|
+
blur: number;
|
|
194
|
+
y: number;
|
|
195
|
+
spread: number;
|
|
196
|
+
};
|
|
197
|
+
dropShadow: {
|
|
198
|
+
layers: number;
|
|
199
|
+
opacity: number;
|
|
200
|
+
blur: number;
|
|
201
|
+
y: number;
|
|
202
|
+
};
|
|
203
|
+
animation: {
|
|
204
|
+
preset: "rotate";
|
|
205
|
+
duration: number;
|
|
206
|
+
};
|
|
207
|
+
};
|
|
208
|
+
auroraRadial: {
|
|
209
|
+
label: string;
|
|
210
|
+
description: string;
|
|
211
|
+
gradient: {
|
|
212
|
+
recipe: "analogous";
|
|
213
|
+
type: "radial";
|
|
214
|
+
direction: number;
|
|
215
|
+
position: string;
|
|
216
|
+
shape: "circle";
|
|
217
|
+
};
|
|
218
|
+
shadow: {
|
|
219
|
+
layers: number;
|
|
220
|
+
opacity: number;
|
|
221
|
+
blur: number;
|
|
222
|
+
y: number;
|
|
223
|
+
spread: number;
|
|
224
|
+
};
|
|
225
|
+
dropShadow: {
|
|
226
|
+
layers: number;
|
|
227
|
+
opacity: number;
|
|
228
|
+
blur: number;
|
|
229
|
+
y: number;
|
|
230
|
+
};
|
|
231
|
+
animation: {
|
|
232
|
+
preset: "hue-rotate";
|
|
233
|
+
duration: number;
|
|
234
|
+
easing: string;
|
|
235
|
+
};
|
|
236
|
+
};
|
|
237
|
+
};
|
|
238
|
+
export type GradientPresetName = keyof typeof gradientPresets;
|
|
239
|
+
export declare const getGradientPreset: (name: GradientPresetName | string, registry?: GradientPresetRegistry) => GradientPreset;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { GradientRecipe } from './types.cjs';
|
|
2
|
+
export declare const gradientRecipes: {
|
|
3
|
+
glare: (base: string) => import("./types.cjs").GradientStop[];
|
|
4
|
+
monochrome: (base: string) => import("./types.cjs").GradientStop[];
|
|
5
|
+
complementary: (base: string) => import("./types.cjs").GradientStop[];
|
|
6
|
+
'split-complementary': (base: string) => import("./types.cjs").GradientStop[];
|
|
7
|
+
analogous: (base: string) => import("./types.cjs").GradientStop[];
|
|
8
|
+
triadic: (base: string) => import("./types.cjs").GradientStop[];
|
|
9
|
+
tetradic: (base: string) => import("./types.cjs").GradientStop[];
|
|
10
|
+
rectangle: (base: string) => import("./types.cjs").GradientStop[];
|
|
11
|
+
square: (base: string) => import("./types.cjs").GradientStop[];
|
|
12
|
+
duotone: (base: string, colors: readonly string[] | undefined) => import("./types.cjs").GradientStop[];
|
|
13
|
+
};
|
|
14
|
+
export declare const createRecipeStops: (base: string, recipe: GradientRecipe, colors?: readonly string[]) => import("./types.cjs").GradientStop[];
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import type { ColorInput } from './color.cjs';
|
|
2
|
+
import { type GradientPresetName, type GradientPresetRegistry } from './presets.cjs';
|
|
3
|
+
import type { GradientAnimationOptions, GradientMorphBlendMode, GradientMorphBlob, GradientMorphOptions, GradientModel, GradientOptions, GradientRecipe, GradientShadowOptions, GradientStop } from './types.cjs';
|
|
4
|
+
export type GradientTokenRecipe = GradientRecipe | GradientPresetName | 'mesh' | 'soft';
|
|
5
|
+
export interface GradientTokenEntry {
|
|
6
|
+
value: string;
|
|
7
|
+
cssVar: string;
|
|
8
|
+
model?: GradientModel;
|
|
9
|
+
layers?: string[];
|
|
10
|
+
stops?: GradientStop[];
|
|
11
|
+
svg?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface GradientEffectTokenEntry {
|
|
14
|
+
boxShadow?: {
|
|
15
|
+
value: string;
|
|
16
|
+
cssVar: string;
|
|
17
|
+
};
|
|
18
|
+
dropShadow?: {
|
|
19
|
+
value: string;
|
|
20
|
+
cssVar: string;
|
|
21
|
+
};
|
|
22
|
+
morph?: {
|
|
23
|
+
value: string;
|
|
24
|
+
cssVar: string;
|
|
25
|
+
svg: string;
|
|
26
|
+
blendMode: GradientMorphBlendMode;
|
|
27
|
+
blendModeCssVar: string;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export interface GradientAnimationTokenEntry {
|
|
31
|
+
name: string;
|
|
32
|
+
value: string;
|
|
33
|
+
css: string;
|
|
34
|
+
keyframes: string;
|
|
35
|
+
cssVar: string;
|
|
36
|
+
}
|
|
37
|
+
export interface CreatedGradientPreset {
|
|
38
|
+
name: string;
|
|
39
|
+
label: string;
|
|
40
|
+
description?: string;
|
|
41
|
+
gradient: GradientTokenEntry;
|
|
42
|
+
effects?: GradientEffectTokenEntry;
|
|
43
|
+
animation?: GradientAnimationTokenEntry;
|
|
44
|
+
cssVars: Record<string, string>;
|
|
45
|
+
cssText: string;
|
|
46
|
+
keyframes: string;
|
|
47
|
+
}
|
|
48
|
+
export interface GradientTokenOptions {
|
|
49
|
+
recipes?: readonly GradientTokenRecipe[];
|
|
50
|
+
effects?: boolean;
|
|
51
|
+
animations?: boolean;
|
|
52
|
+
morph?: GradientMorphOptions;
|
|
53
|
+
registry?: GradientPresetRegistry;
|
|
54
|
+
prefix?: string;
|
|
55
|
+
}
|
|
56
|
+
export interface CreatedGradientTokens {
|
|
57
|
+
gradients: Record<string, GradientTokenEntry>;
|
|
58
|
+
effects: Record<string, GradientEffectTokenEntry>;
|
|
59
|
+
animations: Record<string, GradientAnimationTokenEntry>;
|
|
60
|
+
cssVars: Record<string, string>;
|
|
61
|
+
cssText: string;
|
|
62
|
+
keyframes: string;
|
|
63
|
+
}
|
|
64
|
+
export interface GradientMaterialOptions extends Omit<GradientOptions, 'recipe'> {
|
|
65
|
+
animation?: GradientAnimationOptions;
|
|
66
|
+
animations?: boolean;
|
|
67
|
+
className?: string;
|
|
68
|
+
dropShadow?: GradientShadowOptions;
|
|
69
|
+
effects?: boolean;
|
|
70
|
+
id?: string;
|
|
71
|
+
morph?: GradientMorphOptions;
|
|
72
|
+
prefix?: string;
|
|
73
|
+
recipe?: GradientTokenRecipe;
|
|
74
|
+
registry?: GradientPresetRegistry;
|
|
75
|
+
shadow?: GradientShadowOptions;
|
|
76
|
+
}
|
|
77
|
+
export interface CreatedGradientMaterial {
|
|
78
|
+
id: string;
|
|
79
|
+
className: string;
|
|
80
|
+
style: Record<string, string>;
|
|
81
|
+
cssVars: Record<string, string>;
|
|
82
|
+
cssText: string;
|
|
83
|
+
keyframes: string;
|
|
84
|
+
preset: CreatedGradientPreset;
|
|
85
|
+
gradient: GradientTokenEntry;
|
|
86
|
+
effects?: GradientEffectTokenEntry;
|
|
87
|
+
animation?: GradientAnimationTokenEntry;
|
|
88
|
+
morphBlobs?: GradientMorphBlob[];
|
|
89
|
+
}
|
|
90
|
+
export declare const clearGradientMaterialCache: () => void;
|
|
91
|
+
export declare const setGradientMaterialCacheLimit: (limit: number) => void;
|
|
92
|
+
export declare const getGradientMaterialCacheStats: () => {
|
|
93
|
+
limit: number;
|
|
94
|
+
size: number;
|
|
95
|
+
};
|
|
96
|
+
export declare const createGradientPreset: (seed: ColorInput, recipe?: GradientTokenRecipe, options?: GradientOptions & {
|
|
97
|
+
animation?: GradientAnimationOptions;
|
|
98
|
+
dropShadow?: GradientShadowOptions;
|
|
99
|
+
effects?: boolean;
|
|
100
|
+
morph?: GradientMorphOptions;
|
|
101
|
+
prefix?: string;
|
|
102
|
+
registry?: GradientPresetRegistry;
|
|
103
|
+
shadow?: GradientShadowOptions;
|
|
104
|
+
animations?: boolean;
|
|
105
|
+
}) => CreatedGradientPreset;
|
|
106
|
+
export declare const createGradientTokens: (seed: ColorInput, options?: GradientTokenOptions) => CreatedGradientTokens;
|
|
107
|
+
export declare const createGradientMaterial: (seed: ColorInput, options?: GradientMaterialOptions) => CreatedGradientMaterial;
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import type { ColorShade } from './palette.cjs';
|
|
2
|
+
export type GradientDirection = number | string;
|
|
3
|
+
export type GradientType = 'linear' | 'radial' | 'conic';
|
|
4
|
+
export type GradientRecipe = 'glare' | 'monochrome' | 'complementary' | 'split-complementary' | 'analogous' | 'triadic' | 'tetradic' | 'rectangle' | 'square' | 'duotone';
|
|
5
|
+
export type GradientShape = 'circle' | 'ellipse';
|
|
6
|
+
export type GradientAnimationPreset = 'shift' | 'pulse' | 'rotate' | 'hue-rotate';
|
|
7
|
+
export interface GradientStop {
|
|
8
|
+
color: string;
|
|
9
|
+
position: number;
|
|
10
|
+
opacity?: number;
|
|
11
|
+
}
|
|
12
|
+
export interface GradientModel {
|
|
13
|
+
type: GradientType;
|
|
14
|
+
stops: GradientStop[];
|
|
15
|
+
direction: GradientDirection;
|
|
16
|
+
shape?: GradientShape;
|
|
17
|
+
position?: string;
|
|
18
|
+
size?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface GradientOptions {
|
|
21
|
+
direction?: GradientDirection;
|
|
22
|
+
recipe?: GradientRecipe;
|
|
23
|
+
shade?: ColorShade;
|
|
24
|
+
type?: GradientType;
|
|
25
|
+
shape?: GradientShape;
|
|
26
|
+
position?: string;
|
|
27
|
+
size?: string;
|
|
28
|
+
colors?: readonly string[];
|
|
29
|
+
}
|
|
30
|
+
export interface GradientShadowOptions {
|
|
31
|
+
x?: number | string;
|
|
32
|
+
y?: number | string;
|
|
33
|
+
blur?: number | string;
|
|
34
|
+
spread?: number | string;
|
|
35
|
+
opacity?: number;
|
|
36
|
+
layers?: number;
|
|
37
|
+
}
|
|
38
|
+
export type GradientMorphPreset = 'soft' | 'liquid' | 'ripple';
|
|
39
|
+
export declare const GRADIENT_MORPH_BLEND_MODES: readonly ["normal", "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity"];
|
|
40
|
+
export type GradientMorphBlendMode = (typeof GRADIENT_MORPH_BLEND_MODES)[number];
|
|
41
|
+
export declare const DEFAULT_GRADIENT_MORPH_BLEND_MODE = "hard-light";
|
|
42
|
+
export interface GradientMorphOptions {
|
|
43
|
+
id?: string;
|
|
44
|
+
preset?: GradientMorphPreset;
|
|
45
|
+
blendMode?: GradientMorphBlendMode;
|
|
46
|
+
blobCount?: number;
|
|
47
|
+
blobOpacity?: number;
|
|
48
|
+
blur?: number;
|
|
49
|
+
contrast?: number;
|
|
50
|
+
duration?: number | string;
|
|
51
|
+
opacity?: number;
|
|
52
|
+
scale?: number;
|
|
53
|
+
selector?: string;
|
|
54
|
+
}
|
|
55
|
+
export interface GradientMorphMarkupOptions extends GradientMorphOptions {
|
|
56
|
+
width?: number;
|
|
57
|
+
height?: number;
|
|
58
|
+
rx?: number;
|
|
59
|
+
}
|
|
60
|
+
export interface GradientMorphBlob {
|
|
61
|
+
animationName: string;
|
|
62
|
+
blur: number;
|
|
63
|
+
color: string;
|
|
64
|
+
delay: number;
|
|
65
|
+
dx: number;
|
|
66
|
+
dx2: number;
|
|
67
|
+
dy: number;
|
|
68
|
+
dy2: number;
|
|
69
|
+
duration: number | string;
|
|
70
|
+
opacity: number;
|
|
71
|
+
originX: string;
|
|
72
|
+
originY: string;
|
|
73
|
+
rotateMid: number;
|
|
74
|
+
rotateTo: number;
|
|
75
|
+
scaleMid: number;
|
|
76
|
+
scaleTo: number;
|
|
77
|
+
size: number;
|
|
78
|
+
x: number;
|
|
79
|
+
y: number;
|
|
80
|
+
}
|
|
81
|
+
export interface SvgGradientOptions {
|
|
82
|
+
id?: string;
|
|
83
|
+
width?: number;
|
|
84
|
+
height?: number;
|
|
85
|
+
rx?: number;
|
|
86
|
+
x1?: string;
|
|
87
|
+
x2?: string;
|
|
88
|
+
y1?: string;
|
|
89
|
+
y2?: string;
|
|
90
|
+
cx?: string;
|
|
91
|
+
cy?: string;
|
|
92
|
+
r?: string;
|
|
93
|
+
}
|
|
94
|
+
export interface SvgPathAnimationOptions extends SvgGradientOptions {
|
|
95
|
+
path?: string;
|
|
96
|
+
strokeWidth?: number;
|
|
97
|
+
linecap?: 'butt' | 'round' | 'square';
|
|
98
|
+
duration?: number | string;
|
|
99
|
+
repeatCount?: number | string;
|
|
100
|
+
backgroundStroke?: string;
|
|
101
|
+
activeStroke?: string;
|
|
102
|
+
backgroundOpacity?: number;
|
|
103
|
+
}
|
|
104
|
+
export interface SvgSourceAnimationOptions extends SvgPathAnimationOptions {
|
|
105
|
+
normalizeStrokeWidth?: boolean;
|
|
106
|
+
sourceOpacity?: number;
|
|
107
|
+
viewBoxPadding?: number | false;
|
|
108
|
+
strokeWidthBase?: number;
|
|
109
|
+
}
|
|
110
|
+
export interface CanvasGradientOptions {
|
|
111
|
+
x0?: number;
|
|
112
|
+
y0?: number;
|
|
113
|
+
x1?: number;
|
|
114
|
+
y1?: number;
|
|
115
|
+
r0?: number;
|
|
116
|
+
r1?: number;
|
|
117
|
+
startAngle?: number;
|
|
118
|
+
width?: number;
|
|
119
|
+
height?: number;
|
|
120
|
+
}
|
|
121
|
+
export interface GradientAnimationOptions {
|
|
122
|
+
name?: string;
|
|
123
|
+
preset?: GradientAnimationPreset;
|
|
124
|
+
duration?: number | string;
|
|
125
|
+
easing?: string;
|
|
126
|
+
selector?: string;
|
|
127
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { GradientDirection, GradientStop } from './types.cjs';
|
|
2
|
+
export declare const normalizeDirection: (direction?: GradientDirection) => string;
|
|
3
|
+
export declare const toCssLength: (value: number | string) => string;
|
|
4
|
+
export declare const addCssLength: (value: number | string, offset: number) => string;
|
|
5
|
+
export declare const toCssDuration: (value: number | string) => string;
|
|
6
|
+
export declare const clamp: (value: number, min?: number, max?: number) => number;
|
|
7
|
+
export declare const toCssColor: (color: string, opacity?: number) => string;
|
|
8
|
+
export declare const formatStop: ({ color, opacity, position }: GradientStop) => string;
|
|
9
|
+
export declare const createStop: (color: string, position: number, opacity?: number) => GradientStop;
|
|
10
|
+
export declare const getConicStops: (stops: readonly GradientStop[]) => readonly GradientStop[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const clamp$1=(value,min=0,max=1)=>Math.min(max,Math.max(min,value)),toLinear=value=>{const channel=value/255;return channel<=.04045?channel/12.92:((channel+.055)/1.055)**2.4},parseHex=value=>{const hex=value.slice(1),normalized=hex.length===3||hex.length===4?hex.slice(0,3).split("").map(character=>character.repeat(2)).join(""):hex.slice(0,6);return normalized.length!==6||!/^[\da-f]{6}$/i.test(normalized)?null:{r:parseInt(normalized.slice(0,2),16),g:parseInt(normalized.slice(2,4),16),b:parseInt(normalized.slice(4,6),16)}},parseRgb=value=>{const match=value.match(/^rgba?\(\s*([\d.]+)[,\s]+([\d.]+)[,\s]+([\d.]+)(?:\s*[,/]\s*[\d.]+%?)?\s*\)$/i);return match?{r:clamp$1(Number(match[1]),0,255),g:clamp$1(Number(match[2]),0,255),b:clamp$1(Number(match[3]),0,255)}:null},parseColor=input=>{if(typeof input=="number"){const value2=input&16777215;return{r:value2>>16&255,g:value2>>8&255,b:value2&255}}const value=input.trim();return value.startsWith("#")?parseHex(value):value.toLowerCase().startsWith("rgb")?parseRgb(value):null},rgbToHex=({r,g,b})=>`#${[r,g,b].map(channel=>Math.round(channel).toString(16).padStart(2,"0")).join("")}`,rgbToChannels=({r,g,b})=>`${Math.round(r)}, ${Math.round(g)}, ${Math.round(b)}`,colorToHex=(input,fallback)=>{const color=parseColor(input)??parseColor(fallback);if(!color)throw new Error(`Invalid fallback color: ${fallback}`);return rgbToHex(color)},relativeLuminance=color=>.2126*toLinear(color.r)+.7152*toLinear(color.g)+.0722*toLinear(color.b),getContrastingColor=color=>{const parsed=parseColor(color);if(!parsed)return"#ffffff";const luminance=relativeLuminance(parsed),whiteContrast=1.05/(luminance+.05),darkContrast=(luminance+.05)/.055;return whiteContrast>=darkContrast?"#ffffff":"#0d0d12"};const DEFAULT_GRADIENT_POSITION="center",DEFAULT_GRADIENT_SIZE="farthest-corner",normalizeDirection=(direction=135)=>typeof direction=="number"?`${direction}deg`:direction,toCssLength=value=>typeof value=="number"?`${value}px`:value,toCssDuration=value=>typeof value=="number"?`${value}ms`:value,clamp=(value,min=0,max=1)=>Math.min(max,Math.max(min,value)),toCssColor=(color,opacity)=>{if(opacity===void 0)return color;const parsed=parseColor(color);return parsed?`rgb(${rgbToChannels(parsed).replace(/,/g,"")} / ${clamp(opacity)})`:color},formatStop=({color,opacity,position})=>`${toCssColor(color,opacity)} ${position}%`,createStop=(color,position,opacity)=>({color,position}),getConicStops=stops=>{if(stops.length<=1)return stops;const firstHalf=stops.map(stop=>({...stop,position:stop.position/2})),secondHalf=[...stops].reverse().map(stop=>({...stop,position:100-stop.position/2}));return[...firstHalf,...secondHalf]};exports.DEFAULT_GRADIENT_DIRECTION=135;exports.DEFAULT_GRADIENT_POSITION=DEFAULT_GRADIENT_POSITION;exports.DEFAULT_GRADIENT_SIZE=DEFAULT_GRADIENT_SIZE;exports.clamp=clamp;exports.colorToHex=colorToHex;exports.createStop=createStop;exports.formatStop=formatStop;exports.getConicStops=getConicStops;exports.getContrastingColor=getContrastingColor;exports.normalizeDirection=normalizeDirection;exports.parseColor=parseColor;exports.rgbToChannels=rgbToChannels;exports.rgbToHex=rgbToHex;exports.toCssColor=toCssColor;exports.toCssDuration=toCssDuration;exports.toCssLength=toCssLength;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
const clamp$1 = (value, min = 0, max = 1) => Math.min(max, Math.max(min, value)), toLinear = (value) => {
|
|
2
|
+
const channel = value / 255;
|
|
3
|
+
return channel <= 0.04045 ? channel / 12.92 : ((channel + 0.055) / 1.055) ** 2.4;
|
|
4
|
+
}, parseHex = (value) => {
|
|
5
|
+
const hex = value.slice(1), normalized = hex.length === 3 || hex.length === 4 ? hex.slice(0, 3).split("").map((character) => character.repeat(2)).join("") : hex.slice(0, 6);
|
|
6
|
+
return normalized.length !== 6 || !/^[\da-f]{6}$/i.test(normalized) ? null : {
|
|
7
|
+
r: parseInt(normalized.slice(0, 2), 16),
|
|
8
|
+
g: parseInt(normalized.slice(2, 4), 16),
|
|
9
|
+
b: parseInt(normalized.slice(4, 6), 16)
|
|
10
|
+
};
|
|
11
|
+
}, parseRgb = (value) => {
|
|
12
|
+
const match = value.match(
|
|
13
|
+
/^rgba?\(\s*([\d.]+)[,\s]+([\d.]+)[,\s]+([\d.]+)(?:\s*[,/]\s*[\d.]+%?)?\s*\)$/i
|
|
14
|
+
);
|
|
15
|
+
return match ? {
|
|
16
|
+
r: clamp$1(Number(match[1]), 0, 255),
|
|
17
|
+
g: clamp$1(Number(match[2]), 0, 255),
|
|
18
|
+
b: clamp$1(Number(match[3]), 0, 255)
|
|
19
|
+
} : null;
|
|
20
|
+
}, parseColor = (input) => {
|
|
21
|
+
if (typeof input == "number") {
|
|
22
|
+
const value2 = input & 16777215;
|
|
23
|
+
return {
|
|
24
|
+
r: value2 >> 16 & 255,
|
|
25
|
+
g: value2 >> 8 & 255,
|
|
26
|
+
b: value2 & 255
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
const value = input.trim();
|
|
30
|
+
return value.startsWith("#") ? parseHex(value) : value.toLowerCase().startsWith("rgb") ? parseRgb(value) : null;
|
|
31
|
+
}, rgbToHex = ({ r, g, b }) => `#${[r, g, b].map((channel) => Math.round(channel).toString(16).padStart(2, "0")).join("")}`, rgbToChannels = ({ r, g, b }) => `${Math.round(r)}, ${Math.round(g)}, ${Math.round(b)}`, colorToHex = (input, fallback) => {
|
|
32
|
+
const color = parseColor(input) ?? parseColor(fallback);
|
|
33
|
+
if (!color)
|
|
34
|
+
throw new Error(`Invalid fallback color: ${fallback}`);
|
|
35
|
+
return rgbToHex(color);
|
|
36
|
+
}, relativeLuminance = (color) => 0.2126 * toLinear(color.r) + 0.7152 * toLinear(color.g) + 0.0722 * toLinear(color.b), getContrastingColor = (color) => {
|
|
37
|
+
const parsed = parseColor(color);
|
|
38
|
+
if (!parsed) return "#ffffff";
|
|
39
|
+
const luminance = relativeLuminance(parsed), whiteContrast = 1.05 / (luminance + 0.05), darkContrast = (luminance + 0.05) / 0.055;
|
|
40
|
+
return whiteContrast >= darkContrast ? "#ffffff" : "#0d0d12";
|
|
41
|
+
}, DEFAULT_GRADIENT_DIRECTION = 135, DEFAULT_GRADIENT_POSITION = "center", DEFAULT_GRADIENT_SIZE = "farthest-corner", normalizeDirection = (direction = 135) => typeof direction == "number" ? `${direction}deg` : direction, toCssLength = (value) => typeof value == "number" ? `${value}px` : value, toCssDuration = (value) => typeof value == "number" ? `${value}ms` : value, clamp = (value, min = 0, max = 1) => Math.min(max, Math.max(min, value)), toCssColor = (color, opacity) => {
|
|
42
|
+
if (opacity === void 0) return color;
|
|
43
|
+
const parsed = parseColor(color);
|
|
44
|
+
return parsed ? `rgb(${rgbToChannels(parsed).replace(/,/g, "")} / ${clamp(opacity)})` : color;
|
|
45
|
+
}, formatStop = ({ color, opacity, position }) => `${toCssColor(color, opacity)} ${position}%`, createStop = (color, position, opacity) => ({
|
|
46
|
+
color,
|
|
47
|
+
position
|
|
48
|
+
}), getConicStops = (stops) => {
|
|
49
|
+
if (stops.length <= 1) return stops;
|
|
50
|
+
const firstHalf = stops.map((stop) => ({
|
|
51
|
+
...stop,
|
|
52
|
+
position: stop.position / 2
|
|
53
|
+
})), secondHalf = [...stops].reverse().map((stop) => ({
|
|
54
|
+
...stop,
|
|
55
|
+
position: 100 - stop.position / 2
|
|
56
|
+
}));
|
|
57
|
+
return [...firstHalf, ...secondHalf];
|
|
58
|
+
};
|
|
59
|
+
export {
|
|
60
|
+
DEFAULT_GRADIENT_DIRECTION as D,
|
|
61
|
+
rgbToHex as a,
|
|
62
|
+
clamp as b,
|
|
63
|
+
colorToHex as c,
|
|
64
|
+
DEFAULT_GRADIENT_SIZE as d,
|
|
65
|
+
DEFAULT_GRADIENT_POSITION as e,
|
|
66
|
+
formatStop as f,
|
|
67
|
+
getContrastingColor as g,
|
|
68
|
+
getConicStops as h,
|
|
69
|
+
createStop as i,
|
|
70
|
+
toCssLength as j,
|
|
71
|
+
toCssColor as k,
|
|
72
|
+
normalizeDirection as n,
|
|
73
|
+
parseColor as p,
|
|
74
|
+
rgbToChannels as r,
|
|
75
|
+
toCssDuration as t
|
|
76
|
+
};
|