gradiente 2.0.0 → 2.1.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.
package/README.md CHANGED
@@ -1,111 +1,94 @@
1
- <div align="center">
2
-
3
- <img src="https://raw.githubusercontent.com/Flowscape-UI/gradiente/fff32510afe7e3e1b7b2f73dbf7246843a06d859/assets/logo.svg" alt="gradiente logo" />
4
-
5
- <h1>gradiente</h1>
6
-
7
- <p>Minimalist & lightweight engine for sophisticated web gradients</p>
8
-
9
- <img src="https://raw.githubusercontent.com/Flowscape-UI/gradiente/d8429051f700698f664d8d2392cfa58a604f8e83/assets/flowscape-badge.svg" alt="npm version" />
10
- <br />
11
-
12
- <a href="https://www.npmjs.com/package/gradiente">
13
- <img src="https://img.shields.io/npm/v/gradiente.svg?style=flat-square&labelColor=d84f4c&color=black" alt="npm version">
14
- </a>
15
- <a href="https://bundlephobia.com/result?p=gradiente">
16
- <img src="https://img.shields.io/bundlephobia/minzip/gradiente?style=flat-square&labelColor=d84f4c&color=black" alt="bundle size"/>
17
- </a>
18
- <a href="https://github.com/Flowscape-UI/gradiente/blob/main/LICENSE">
19
- <img src="https://img.shields.io/github/license/Flowscape-UI/gradiente?style=flat-square&labelColor=d84f4c&color=black" alt="license"/>
20
- </a>
21
- </div>
22
-
23
-
24
- # Gradiente
25
-
26
- **Gradiente** is a lightweight gradient parser and transformer for modern rendering systems.
27
-
28
- Parse CSS gradients → work with structured data → render anywhere.
29
-
30
- > Gradients as data, not strings.
31
-
32
- ---
33
-
34
- ## Install
35
-
36
- ```bash
37
- npm install gradiente
38
- ````
39
-
40
- ---
41
-
42
- ## Example
43
-
44
- ```ts
45
- import { parse, transformTo } from "gradiente";
46
-
47
- const gradient = parse("linear-gradient(red, blue)");
48
-
49
- const css = transformTo("css", gradient);
50
- const canvas = transformTo("canvas", gradient);
51
-
52
- canvas.draw(ctx, 300, 300);
53
- ```
54
-
55
- ---
56
-
57
- ## Supported
58
-
59
- ```ts
60
- linear-gradient(...)
61
- repeating-linear-gradient(...)
62
-
63
- radial-gradient(...)
64
- repeating-radial-gradient(...)
65
-
66
- conic-gradient(...)
67
- repeating-conic-gradient(...)
68
- ```
69
-
70
- ---
71
-
72
- ## What it does
73
-
74
- * Parses gradients into structured objects
75
- * Normalizes angles, positions, and stops
76
- * Transforms gradients to different targets:
77
-
78
- * CSS
79
- * Canvas
80
- * (more coming)
81
-
82
- ---
83
-
84
- ## Built for
85
-
86
- * design tools
87
- * visual editors
88
- * canvas engines
89
- * WebGL / Pixi / Konva
90
- * custom rendering pipelines
91
-
92
- ---
93
-
94
- ## Status
95
-
96
- * [x] linear gradients
97
- * [x] radial gradients
98
- * [x] conic gradients
99
- * [x] canvas + css transformers
100
- * [ ] docs
101
- * [ ] playground
102
- * [ ] more render targets
103
-
104
- ---
105
-
106
- ## Philosophy
107
-
108
- Gradiente treats gradients as a graphics primitive.
109
-
110
- Not a string to preserve -
111
- but data you can transform and render anywhere.
1
+ <div align="center">
2
+
3
+ <img src="https://raw.githubusercontent.com/Flowscape-UI/gradiente/fff32510afe7e3e1b7b2f73dbf7246843a06d859/assets/logo.svg" alt="gradiente logo" />
4
+
5
+ <h1>gradiente</h1>
6
+
7
+ <p>Minimalist & lightweight engine for sophisticated web gradients</p>
8
+
9
+ <img src="https://raw.githubusercontent.com/Flowscape-UI/gradiente/d8429051f700698f664d8d2392cfa58a604f8e83/assets/flowscape-badge.svg" alt="npm version" />
10
+ <br />
11
+
12
+ <a href="https://www.npmjs.com/package/gradiente">
13
+ <img src="https://img.shields.io/npm/v/gradiente.svg?style=flat-square&labelColor=d84f4c&color=black" alt="npm version">
14
+ </a>
15
+ <a href="https://bundlephobia.com/result?p=gradiente">
16
+ <img src="https://img.shields.io/bundlephobia/minzip/gradiente?style=flat-square&labelColor=d84f4c&color=black" alt="bundle size"/>
17
+ </a>
18
+ <a href="https://github.com/Flowscape-UI/gradiente/blob/main/LICENSE">
19
+ <img src="https://img.shields.io/github/license/Flowscape-UI/gradiente?style=flat-square&labelColor=d84f4c&color=black" alt="license"/>
20
+ </a>
21
+ </div>
22
+
23
+
24
+ # Gradiente
25
+
26
+ **Gradiente** is a lightweight gradient parser and transformer for modern rendering systems.
27
+
28
+ Parse CSS gradients → work with structured data → render anywhere.
29
+
30
+ > Gradients as data, not strings.
31
+
32
+
33
+ ## Install
34
+
35
+ ```bash
36
+ npm install gradiente
37
+ ```
38
+
39
+
40
+ ## Example
41
+
42
+ ```ts
43
+ import { parse, transformTo } from "gradiente";
44
+
45
+ const gradient = parse("linear-gradient(red, blue)");
46
+
47
+ const css = transformTo("css", gradient);
48
+ const canvas = transformTo("canvas", gradient);
49
+
50
+ canvas.draw(ctx, 300, 300);
51
+ ```
52
+
53
+ The full documentation is published on [gradiente docs](https://flowscape-ui.github.io/gradiente/). Some quick entry points:
54
+
55
+ - [Getting started](https://flowscape-ui.github.io/gradiente/getting-started.html)
56
+ - [API References](https://flowscape-ui.github.io/gradiente/core-api/working-with-gradients.html)
57
+ - [Custom Gradients](https://flowscape-ui.github.io/gradiente/core-api/custom-gradients.html)
58
+
59
+
60
+ ## What it does
61
+
62
+ - Parses gradients into structured objects
63
+ - Normalizes angles, positions, and stops
64
+ - Transforms gradients to different targets:
65
+ - CSS
66
+ - Canvas
67
+ - (more coming)
68
+
69
+ ---
70
+
71
+ ## Built for
72
+
73
+ * design tools
74
+ * visual editors
75
+ * canvas engines
76
+ * WebGL / Pixi / Konva
77
+ * custom rendering pipelines
78
+
79
+ ---
80
+
81
+ ## Philosophy
82
+
83
+ Gradiente treats gradients as a graphics primitive.
84
+
85
+ Not a string to preserve -
86
+ but data you can transform and render anywhere.
87
+
88
+ ## Contributing
89
+
90
+ Contributions of all kinds (feedback, ideas, bug fixes, documentation) are welcome.
91
+
92
+ Please open a GitHub issue/discussion before putting in any work that’s not straightforward.
93
+
94
+ More in [CONTRIBUTING.md](../../CONTRIBUTING.md).
package/dist/index.d.mts CHANGED
@@ -10,14 +10,14 @@ declare function fromPercent(value: number): number;
10
10
  //#region src/utils/math/angle.d.ts
11
11
  type AngleUnit = 'deg' | 'rad' | 'turn' | 'grad';
12
12
  declare function isAngleUnit(unit: string): unit is AngleUnit;
13
+ declare function isAngle(value: string): boolean;
14
+ declare function angleValueFromString(value: string): number;
13
15
  declare function degToRad(value: number): number;
14
16
  declare function radToDeg(value: number): number;
15
17
  declare function turnToRad(value: number): number;
16
18
  declare function gradToRad(value: number): number;
17
19
  declare function normalizeAngleDeg(value: number, digits?: number): number;
18
- declare function normalizeAngleRad(value: number): number;
19
- declare function toAngleRad(value: number, unit: AngleUnit): number;
20
- declare function normalizeAngle(value: number, unit: AngleUnit, digits?: number): number;
20
+ declare function normalizeAngleRad(value: number, digits?: number): number;
21
21
  //#endregion
22
22
  //#region src/abi.d.ts
23
23
  /***************************************************************************************************/
@@ -84,6 +84,17 @@ declare function matchExpression(classified: GradientAbiInput[], patternTokens:
84
84
  declare function isValid(input: GradientAbiInput[], pattern: string): boolean;
85
85
  declare function validate(classified: GradientAbiInput[], pattern: string): boolean;
86
86
  //#endregion
87
+ //#region src/gradients/helpers.d.ts
88
+ declare const GRADIENT_COLOR_SPACE: readonly ["oklab", "lch", "oklch", "hsl", "hwb", "lab", "srgb", "srgb-linear", "xyz", "display-p3", "a98-rgb", "prophoto-rgb", "rec2020"];
89
+ declare const GRADIENT_HUE_INTERPOLATIONS: readonly ['shorter', 'longer', 'increasing', 'decreasing'];
90
+ declare const GRADIENT_POLAR_COLOR_SPACES: readonly ["hsl", "hwb", "lch", "oklch"];
91
+ type GradientHueInterpolation = (typeof GRADIENT_HUE_INTERPOLATIONS)[number];
92
+ type GradientColorSpace = (typeof GRADIENT_COLOR_SPACE)[number];
93
+ type GradientPolarColorSpace = (typeof GRADIENT_POLAR_COLOR_SPACES)[number];
94
+ declare function isGradientHueInterpolation(value: string): value is GradientHueInterpolation;
95
+ declare function isGradientColorSpace(value: string): value is GradientColorSpace;
96
+ declare function isGradientPolarColorSpace(value: string): value is GradientPolarColorSpace;
97
+ //#endregion
87
98
  //#region src/gradients/types.d.ts
88
99
  /**
89
100
  * Shared scalar units
@@ -131,7 +142,6 @@ type GradientPosition = {
131
142
  */
132
143
  type GradientHueInterpolationMethod = "shorter" | "longer" | "increasing" | "decreasing";
133
144
  type GradientRectangularColorSpace = "srgb" | "srgb-linear" | "display-p3" | "display-p3-linear" | "a98-rgb" | "prophoto-rgb" | "rec2020" | "lab" | "oklab" | "xyz" | "xyz-d50" | "xyz-d65";
134
- type GradientPolarColorSpace = "hsl" | "hwb" | "lch" | "oklch";
135
145
  type GradientColorInterpolation = {
136
146
  kind: "rectangular";
137
147
  space: GradientRectangularColorSpace;
@@ -236,21 +246,28 @@ declare abstract class GradientBase<TConfig = unknown> implements IGradientBase<
236
246
  }
237
247
  //#endregion
238
248
  //#region src/gradients/LinearGradient.d.ts
239
- type LinearGradientConfig = GradientCommonConfig & {
249
+ type GradientInterpolation = {
250
+ colorSpace: GradientColorSpace;
251
+ hue?: GradientHueInterpolation;
252
+ };
253
+ type LinearGradientConfig = {
240
254
  angle: number;
255
+ interpolation?: GradientInterpolation;
241
256
  };
242
257
  declare class LinearGradient extends GradientBase<LinearGradientConfig> {
243
258
  readonly type = "linear-gradient";
244
259
  constructor(config: GradientData<LinearGradientConfig>);
245
- static normalizeConfig(value: {
246
- value: number;
247
- unit: AngleUnit;
248
- } | string): LinearGradientConfig;
260
+ static normalizeConfig(value: string): LinearGradientConfig;
249
261
  static fromString(input: string): LinearGradient;
250
262
  static fromAbi(abi: GradientAbi): LinearGradient;
251
263
  clone(): this;
252
264
  toString(): string;
253
265
  protected _validateConfig(_: LinearGradientConfig): void;
266
+ private static _normalizeConfigInterpolation;
267
+ private _parseConfigToString;
268
+ private _parseAngleToString;
269
+ private _parseInterpolationToString;
270
+ private static _tokenizeConfigInput;
254
271
  }
255
272
  //#endregion
256
273
  //#region src/gradients/RadialGradient.d.ts
@@ -338,19 +355,6 @@ interface ICanvasPaintResult {
338
355
  draw(ctx: CanvasRenderingContext2D, width: number, height: number): void;
339
356
  }
340
357
  //#endregion
341
- //#region src/gradient-transformer/GradientTransformer.d.ts
342
- declare class GradientTransformer {
343
- private static readonly _modules;
344
- private static _initialized;
345
- static add(module: IGradientTransformerModule): void;
346
- static get(target: string, gradientType: string): IGradientTransformerModule | null;
347
- static remove(target: string, gradientType: string): boolean;
348
- static to<TOutput = unknown>(target: string, input: string | GradientBase<any>): TOutput;
349
- static from<TOutput = unknown>(target: string, gradientType: string, input: TOutput): GradientBase<any>;
350
- private static _ensureInitialized;
351
- private static _getKey;
352
- }
353
- //#endregion
354
358
  //#region src/gradient-transformer/modules/css/ModuleTransformerLinearGradientToCss.d.ts
355
359
  declare class ModuleTransformerLinearGradientToCss implements IGradientTransformerModule<string> {
356
360
  readonly target = "css";
@@ -374,14 +378,14 @@ declare class ModuleTransformerConicGradientToCss implements IGradientTransforme
374
378
  //#endregion
375
379
  //#region src/gradient-transformer/modules/canvas/ModuleTransformerLinearGradientToCanvas.d.ts
376
380
  declare class ModuleTransformerLinearGradientToCanvas implements IGradientTransformerModule<ICanvasPaintResult> {
377
- readonly target = "canvas";
381
+ readonly target = "canvas-2d";
378
382
  readonly gradientType = "linear-gradient";
379
383
  to(input: GradientBase<any>): ICanvasPaintResult;
380
384
  }
381
385
  //#endregion
382
386
  //#region src/gradient-transformer/modules/canvas/ModuleTransformerRadialGradientToCanvas.d.ts
383
387
  declare class ModuleTransformerRadialGradientToCanvas implements IGradientTransformerModule<ICanvasPaintResult> {
384
- readonly target = "canvas";
388
+ readonly target = "canvas-2d";
385
389
  readonly gradientType = "radial-gradient";
386
390
  to(input: GradientBase<any>): ICanvasPaintResult;
387
391
  private _resolve;
@@ -389,7 +393,7 @@ declare class ModuleTransformerRadialGradientToCanvas implements IGradientTransf
389
393
  //#endregion
390
394
  //#region src/gradient-transformer/modules/canvas/ModuleTransformerConicGradientToCanvas.d.ts
391
395
  declare class ModuleTransformerConicGradientToCanvas implements IGradientTransformerModule<ICanvasPaintResult> {
392
- readonly target = "canvas";
396
+ readonly target = "canvas-2d";
393
397
  readonly gradientType = "conic-gradient";
394
398
  to(input: GradientBase<any>): ICanvasPaintResult;
395
399
  private _resolvePosition;
@@ -404,4 +408,27 @@ declare class ModuleTransformerConicGradientToCanvas implements IGradientTransfo
404
408
  private _clamp01;
405
409
  }
406
410
  //#endregion
407
- export { AbiInputType, AngleUnit, AnyGradient, ConicGradient, ConicGradientConfig, GradientAbi, GradientAbiInput, GradientAngleUnit, GradientAngleValue, GradientBase, GradientColorHint, GradientColorInterpolation, GradientColorStop, GradientCommonConfig, GradientData, GradientFactory, GradientHueInterpolationMethod, GradientLengthPercentage, GradientLengthUnit, GradientLengthValue, GradientNumberValue, GradientPercentValue, GradientPolarColorSpace, GradientPosition, GradientPositionKeywordX, GradientPositionKeywordY, GradientRectangularColorSpace, GradientStop, GradientTransformer, GradientType, ICanvasPaintResult, IGradientBase, IGradientStatic, IGradientTransformerModule, LinearGradient, LinearGradientConfig, ModuleTransformerConicGradientToCanvas, ModuleTransformerConicGradientToCss, ModuleTransformerLinearGradientToCanvas, ModuleTransformerLinearGradientToCss, ModuleTransformerRadialGradientToCanvas, ModuleTransformerRadialGradientToCss, PatternTokenKind, RadialGradient, RadialGradientConfig, RadialGradientExtent, RadialGradientShape, RadialGradientSize, ceilTo, clamp, degToRad, floorTo, format, fromPercent, gradToRad, isAngleUnit, isColorHint, isColorStop, isConfig, isGradient, isPatternSyntaxValid, isPatternValid, isValid, matchExpression, normalizeAngle, normalizeAngleDeg, normalizeAngleRad, parse, parseStringToAbi, radToDeg, roundTo, splitTopLevelByWhitespace, toAngleRad, toPercent, tokenizePattern, transformFrom, transformTo, truncTo, turnToRad, validate, validatePattern, validatePatternSemantic, validatePatternStructure, validatePatternSyntax };
411
+ //#region src/gradient-transformer/modules/webgl/ModuleTransformerLinearGradientToWebgl.d.ts
412
+ interface IWebGLPaintResult {
413
+ draw(canvas: HTMLCanvasElement, width: number, height: number): void;
414
+ }
415
+ declare class ModuleTransformerLinearGradientToCanvasWebGL implements IGradientTransformerModule<IWebGLPaintResult> {
416
+ readonly target = "canvas-webgl";
417
+ readonly gradientType = "linear-gradient";
418
+ to(input: GradientBase<any>): IWebGLPaintResult;
419
+ }
420
+ //#endregion
421
+ //#region src/gradient-transformer/GradientTransformer.d.ts
422
+ declare class GradientTransformer {
423
+ private static readonly _modules;
424
+ private static _initialized;
425
+ static add(module: IGradientTransformerModule): void;
426
+ static get(target: string, gradientType: string): IGradientTransformerModule | null;
427
+ static remove(target: string, gradientType: string): boolean;
428
+ static to<TOutput = unknown>(target: string, input: string | GradientBase<any>): TOutput;
429
+ static from<TOutput = unknown>(target: string, gradientType: string, input: TOutput): GradientBase<any>;
430
+ private static _ensureInitialized;
431
+ private static _getKey;
432
+ }
433
+ //#endregion
434
+ export { AbiInputType, AngleUnit, AnyGradient, ConicGradient, ConicGradientConfig, GRADIENT_COLOR_SPACE, GRADIENT_HUE_INTERPOLATIONS, GRADIENT_POLAR_COLOR_SPACES, GradientAbi, GradientAbiInput, GradientAngleUnit, GradientAngleValue, GradientBase, GradientColorHint, GradientColorInterpolation, GradientColorSpace, GradientColorStop, GradientCommonConfig, GradientData, GradientFactory, GradientHueInterpolation, GradientHueInterpolationMethod, GradientInterpolation, GradientLengthPercentage, GradientLengthUnit, GradientLengthValue, GradientNumberValue, GradientPercentValue, GradientPolarColorSpace, GradientPosition, GradientPositionKeywordX, GradientPositionKeywordY, GradientRectangularColorSpace, GradientStop, GradientTransformer, GradientType, ICanvasPaintResult, IGradientBase, IGradientStatic, IGradientTransformerModule, IWebGLPaintResult, LinearGradient, LinearGradientConfig, ModuleTransformerConicGradientToCanvas, ModuleTransformerConicGradientToCss, ModuleTransformerLinearGradientToCanvas, ModuleTransformerLinearGradientToCanvasWebGL, ModuleTransformerLinearGradientToCss, ModuleTransformerRadialGradientToCanvas, ModuleTransformerRadialGradientToCss, PatternTokenKind, RadialGradient, RadialGradientConfig, RadialGradientExtent, RadialGradientShape, RadialGradientSize, angleValueFromString, ceilTo, clamp, degToRad, floorTo, format, fromPercent, gradToRad, isAngle, isAngleUnit, isColorHint, isColorStop, isConfig, isGradient, isGradientColorSpace, isGradientHueInterpolation, isGradientPolarColorSpace, isPatternSyntaxValid, isPatternValid, isValid, matchExpression, normalizeAngleDeg, normalizeAngleRad, parse, parseStringToAbi, radToDeg, roundTo, splitTopLevelByWhitespace, toPercent, tokenizePattern, transformFrom, transformTo, truncTo, turnToRad, validate, validatePattern, validatePatternSemantic, validatePatternStructure, validatePatternSyntax };