@versatiles/style 5.2.6 → 5.2.7

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 (130) hide show
  1. package/dist/index.d.ts +274 -14
  2. package/dist/index.js +3650 -11
  3. package/dist/index.js.map +1 -1
  4. package/package.json +8 -8
  5. package/src/color/abstract.ts +83 -0
  6. package/src/color/hsl.test.ts +182 -0
  7. package/src/color/hsl.ts +122 -0
  8. package/src/color/hsv.test.ts +174 -0
  9. package/src/color/hsv.ts +100 -0
  10. package/src/color/index.test.ts +119 -0
  11. package/src/color/index.ts +38 -0
  12. package/src/color/random.test.ts +35 -0
  13. package/src/color/random.ts +165 -0
  14. package/src/color/rgb.test.ts +227 -0
  15. package/src/color/rgb.ts +248 -0
  16. package/src/color/utils.test.ts +86 -0
  17. package/src/color/utils.ts +13 -0
  18. package/src/guess_style/guess_style.test.ts +134 -0
  19. package/src/guess_style/guess_style.ts +166 -0
  20. package/{dist/guess_style/index.d.ts → src/guess_style/index.ts} +1 -0
  21. package/src/index.test.ts +77 -0
  22. package/src/index.ts +18 -0
  23. package/src/lib/utils.test.ts +197 -0
  24. package/src/lib/utils.ts +134 -0
  25. package/{dist/shortbread/index.d.ts → src/shortbread/index.ts} +1 -0
  26. package/src/shortbread/layers.test.ts +36 -0
  27. package/src/shortbread/layers.ts +564 -0
  28. package/src/shortbread/properties.test.ts +44 -0
  29. package/src/shortbread/properties.ts +142 -0
  30. package/src/shortbread/template.test.ts +43 -0
  31. package/src/shortbread/template.ts +343 -0
  32. package/src/style_builder/decorator.test.ts +67 -0
  33. package/src/style_builder/decorator.ts +135 -0
  34. package/src/style_builder/recolor.test.ts +306 -0
  35. package/src/style_builder/recolor.ts +110 -0
  36. package/src/style_builder/style_builder.test.ts +103 -0
  37. package/src/style_builder/style_builder.ts +134 -0
  38. package/src/style_builder/types.ts +141 -0
  39. package/src/styles/LICENSE.md +41 -0
  40. package/src/styles/colorful.ts +1041 -0
  41. package/src/styles/eclipse.ts +11 -0
  42. package/{dist/styles/empty.d.ts → src/styles/empty.ts} +7 -3
  43. package/src/styles/graybeard.ts +11 -0
  44. package/src/styles/index.ts +33 -0
  45. package/src/styles/neutrino.ts +429 -0
  46. package/{dist/types/index.d.ts → src/types/index.ts} +1 -0
  47. package/{dist/types/maplibre.d.ts → src/types/maplibre.ts} +3 -0
  48. package/src/types/tilejson.test.ts +94 -0
  49. package/src/types/tilejson.ts +125 -0
  50. package/src/types/vector_layer.test.ts +64 -0
  51. package/src/types/vector_layer.ts +69 -0
  52. package/dist/color/abstract.d.ts +0 -34
  53. package/dist/color/abstract.js +0 -53
  54. package/dist/color/abstract.js.map +0 -1
  55. package/dist/color/hsl.d.ts +0 -23
  56. package/dist/color/hsl.js +0 -98
  57. package/dist/color/hsl.js.map +0 -1
  58. package/dist/color/hsv.d.ts +0 -20
  59. package/dist/color/hsv.js +0 -100
  60. package/dist/color/hsv.js.map +0 -1
  61. package/dist/color/index.d.ts +0 -6
  62. package/dist/color/index.js +0 -29
  63. package/dist/color/index.js.map +0 -1
  64. package/dist/color/random.d.ts +0 -9
  65. package/dist/color/random.js +0 -134
  66. package/dist/color/random.js.map +0 -1
  67. package/dist/color/rgb.d.ts +0 -28
  68. package/dist/color/rgb.js +0 -195
  69. package/dist/color/rgb.js.map +0 -1
  70. package/dist/color/utils.d.ts +0 -3
  71. package/dist/color/utils.js +0 -10
  72. package/dist/color/utils.js.map +0 -1
  73. package/dist/guess_style/guess_style.d.ts +0 -8
  74. package/dist/guess_style/guess_style.js +0 -147
  75. package/dist/guess_style/guess_style.js.map +0 -1
  76. package/dist/guess_style/index.js +0 -2
  77. package/dist/guess_style/index.js.map +0 -1
  78. package/dist/lib/utils.d.ts +0 -6
  79. package/dist/lib/utils.js +0 -126
  80. package/dist/lib/utils.js.map +0 -1
  81. package/dist/shortbread/index.js +0 -3
  82. package/dist/shortbread/index.js.map +0 -1
  83. package/dist/shortbread/layers.d.ts +0 -5
  84. package/dist/shortbread/layers.js +0 -521
  85. package/dist/shortbread/layers.js.map +0 -1
  86. package/dist/shortbread/properties.d.ts +0 -7
  87. package/dist/shortbread/properties.js +0 -125
  88. package/dist/shortbread/properties.js.map +0 -1
  89. package/dist/shortbread/template.d.ts +0 -4
  90. package/dist/shortbread/template.js +0 -339
  91. package/dist/shortbread/template.js.map +0 -1
  92. package/dist/style_builder/decorator.d.ts +0 -4
  93. package/dist/style_builder/decorator.js +0 -127
  94. package/dist/style_builder/decorator.js.map +0 -1
  95. package/dist/style_builder/recolor.d.ts +0 -22
  96. package/dist/style_builder/recolor.js +0 -89
  97. package/dist/style_builder/recolor.js.map +0 -1
  98. package/dist/style_builder/style_builder.d.ts +0 -15
  99. package/dist/style_builder/style_builder.js +0 -106
  100. package/dist/style_builder/style_builder.js.map +0 -1
  101. package/dist/style_builder/types.d.ts +0 -122
  102. package/dist/style_builder/types.js +0 -3
  103. package/dist/style_builder/types.js.map +0 -1
  104. package/dist/styles/colorful.d.ts +0 -11
  105. package/dist/styles/colorful.js +0 -956
  106. package/dist/styles/colorful.js.map +0 -1
  107. package/dist/styles/eclipse.d.ts +0 -5
  108. package/dist/styles/eclipse.js +0 -9
  109. package/dist/styles/eclipse.js.map +0 -1
  110. package/dist/styles/empty.js +0 -8
  111. package/dist/styles/empty.js.map +0 -1
  112. package/dist/styles/graybeard.d.ts +0 -5
  113. package/dist/styles/graybeard.js +0 -9
  114. package/dist/styles/graybeard.js.map +0 -1
  115. package/dist/styles/index.d.ts +0 -11
  116. package/dist/styles/index.js +0 -20
  117. package/dist/styles/index.js.map +0 -1
  118. package/dist/styles/neutrino.d.ts +0 -11
  119. package/dist/styles/neutrino.js +0 -401
  120. package/dist/styles/neutrino.js.map +0 -1
  121. package/dist/types/index.js +0 -3
  122. package/dist/types/index.js.map +0 -1
  123. package/dist/types/maplibre.js +0 -2
  124. package/dist/types/maplibre.js.map +0 -1
  125. package/dist/types/tilejson.d.ts +0 -32
  126. package/dist/types/tilejson.js +0 -87
  127. package/dist/types/tilejson.js.map +0 -1
  128. package/dist/types/vector_layer.d.ts +0 -14
  129. package/dist/types/vector_layer.js +0 -51
  130. package/dist/types/vector_layer.js.map +0 -1
@@ -0,0 +1,125 @@
1
+ import type { VectorLayer } from './vector_layer.js';
2
+
3
+ /** Basic structure for TileJSON specification, applicable to both raster and vector types. */
4
+ export interface TileJSONSpecificationRaster {
5
+ tilejson?: '3.0.0';
6
+ tiles: string[];
7
+
8
+ attribution?: string;
9
+ bounds?: [number, number, number, number];
10
+ center?: [number, number];
11
+ data?: string[];
12
+ description?: string;
13
+ fillzoom?: number;
14
+ grids?: string[];
15
+ legend?: string;
16
+ maxzoom?: number;
17
+ minzoom?: number;
18
+ name?: string;
19
+ scheme?: 'tms' | 'xyz';
20
+ template?: string;
21
+ version?: string;
22
+ }
23
+
24
+ /** Structure for TileJSON specification of vector type, specifying vector-specific properties. */
25
+ export interface TileJSONSpecificationVector extends TileJSONSpecificationRaster {
26
+ vector_layers: VectorLayer[];
27
+ }
28
+
29
+ /** Represents a TileJSON specification, which can be either raster or vector. */
30
+ export type TileJSONSpecification = TileJSONSpecificationRaster | TileJSONSpecificationVector;
31
+
32
+ /**
33
+ * Checks if an object adheres to the TileJSON specification.
34
+ * Throws errors if the object does not conform to the expected structure or types.
35
+ */
36
+ export function isTileJSONSpecification(spec: unknown): spec is TileJSONSpecification {
37
+ if (typeof spec !== 'object' || spec === null) {
38
+ throw Error('spec must be an object');
39
+ }
40
+
41
+ const obj = spec as Record<string, unknown>;
42
+
43
+ // Common property validation
44
+ if (obj.data != null && obj.tilejson !== '3.0.0') {
45
+ throw Error('spec.tilejson must be "3.0.0"');
46
+ }
47
+
48
+ if (obj.attribution != null && typeof obj.attribution !== 'string') {
49
+ throw Error('spec.attribution must be a string if present');
50
+ }
51
+
52
+ if (obj.bounds != null) {
53
+ if (!Array.isArray(obj.bounds) || obj.bounds.length !== 4 || obj.bounds.some(num => typeof num !== 'number')) {
54
+ throw Error('spec.bounds must be an array of four numbers if present');
55
+ }
56
+ const a = obj.bounds as [number, number, number, number];
57
+ if (a[0] < -180 || a[0] > 180) throw Error('spec.bounds[0] must be between -180 and 180');
58
+ if (a[1] < -90 || a[1] > 90) throw Error('spec.bounds[1] must be between -90 and 90');
59
+ if (a[2] < -180 || a[2] > 180) throw Error('spec.bounds[2] must be between -180 and 180');
60
+ if (a[3] < -90 || a[3] > 90) throw Error('spec.bounds[3] must be between -90 and 90');
61
+ if (a[0] > a[2]) throw Error('spec.bounds[0] must be smaller than spec.bounds[2]');
62
+ if (a[1] > a[3]) throw Error('spec.bounds[1] must be smaller than spec.bounds[3]');
63
+ }
64
+
65
+ if (obj.center != null) {
66
+ if (!Array.isArray(obj.center) || obj.center.length !== 2 || obj.center.some(num => typeof num !== 'number')) {
67
+ throw Error('spec.center must be an array of two numbers if present');
68
+ }
69
+ const a = obj.center as [number, number];
70
+ if (a[0] < -180 || a[0] > 180) throw Error('spec.center[0] must be between -180 and 180');
71
+ if (a[1] < -90 || a[1] > 90) throw Error('spec.center[1] must be between -90 and 90');
72
+ }
73
+
74
+ if (obj.data != null && (!Array.isArray(obj.data) || obj.data.some(url => typeof url !== 'string'))) {
75
+ throw Error('spec.data must be an array of strings if present');
76
+ }
77
+
78
+ if (obj.description != null && typeof obj.description !== 'string') {
79
+ throw Error('spec.description must be a string if present');
80
+ }
81
+
82
+ if (obj.fillzoom != null && (typeof obj.fillzoom !== 'number' || (obj.fillzoom < 0))) {
83
+ throw Error('spec.fillzoom must be a positive integer if present');
84
+ }
85
+
86
+ if (obj.grids != null && (!Array.isArray(obj.grids) || obj.grids.some(url => typeof url !== 'string'))) {
87
+ throw Error('spec.grids must be an array of strings if present');
88
+ }
89
+
90
+ if (obj.legend != null && typeof obj.legend !== 'string') {
91
+ throw Error('spec.legend must be a string if present');
92
+ }
93
+
94
+ if (obj.minzoom != null && (typeof obj.minzoom !== 'number' || (obj.minzoom < 0))) {
95
+ throw Error('spec.minzoom must be a positive integer if present');
96
+ }
97
+
98
+ if (obj.maxzoom != null && (typeof obj.maxzoom !== 'number' || (obj.maxzoom < 0))) {
99
+ throw Error('spec.maxzoom must be a positive integer if present');
100
+ }
101
+
102
+ if (obj.name != null && typeof obj.name !== 'string') {
103
+ throw Error('spec.name must be a string if present');
104
+ }
105
+
106
+ if (obj.scheme != null && obj.scheme !== 'xyz' && obj.scheme !== 'tms') {
107
+ throw Error('spec.scheme must be "tms" or "xyz" if present');
108
+ }
109
+
110
+ if (obj.template != null && typeof obj.template !== 'string') {
111
+ throw Error('spec.template must be a string if present');
112
+ }
113
+
114
+ if (!Array.isArray(obj.tiles) || obj.tiles.length === 0 || obj.tiles.some(url => typeof url !== 'string')) {
115
+ throw Error('spec.tiles must be an array of strings');
116
+ }
117
+
118
+ return true;
119
+ }
120
+
121
+ export function isRasterTileJSONSpecification(spec: unknown): spec is TileJSONSpecificationRaster {
122
+ if (!isTileJSONSpecification(spec)) return false;
123
+ if (('vector_layers' in spec) && (spec.vector_layers != null)) return false;
124
+ return true;
125
+ }
@@ -0,0 +1,64 @@
1
+ import type { VectorLayer } from './vector_layer.js';
2
+ import { isVectorLayer, isVectorLayers } from './vector_layer.js';
3
+
4
+ describe('isVectorLayer', () => {
5
+ it('should validate a correct VectorLayer object', () => {
6
+ const validLayer: VectorLayer = { id: 'test-layer', fields: { field1: 'Number', field2: 'String' } };
7
+
8
+ expect(() => isVectorLayer(validLayer)).not.toThrow();
9
+ });
10
+
11
+ it('should throw an error for non-object inputs', () => {
12
+ verifyError(null, 'Layer must be a non-null object');
13
+ verifyError(42, 'Layer must be a non-null object');
14
+ });
15
+
16
+ it('should throw an error for invalid id types', () => {
17
+ verifyError({ id: 123, fields: {} }, 'Layer.id must be a string');
18
+ });
19
+
20
+ it('should throw an error for invalid fields', () => {
21
+ verifyError({ id: 'test', fields: null }, 'Layer.fields must be a non-null object');
22
+ verifyError({ id: 'test', fields: { field1: 'InvalidType' } }, 'Layer.fields values must be one of \'Boolean\', \'Number\', or \'String\'');
23
+ });
24
+
25
+ it('should throw an error for invalid optional properties', () => {
26
+ verifyError({ id: 'test', fields: {}, description: 123 }, 'Layer.description must be a string if present');
27
+ verifyError({ id: 'test', fields: {}, minzoom: -1 }, 'Layer.minzoom must be a non-negative number if present');
28
+ verifyError({ id: 'test', fields: {}, maxzoom: 'high' }, 'Layer.maxzoom must be a non-negative number if present');
29
+ verifyError({ id: 'test', fields: {}, maxzoom: -1 }, 'Layer.maxzoom must be a non-negative number if present');
30
+ });
31
+
32
+ function verifyError(layer: unknown, message: string): void {
33
+ expect(() => isVectorLayer(layer)).toThrow(message);
34
+ }
35
+ });
36
+
37
+ describe('isVectorLayers', () => {
38
+ it('should validate an array of correct VectorLayer objects', () => {
39
+ const validLayers = [
40
+ { id: 'layer1', fields: { field1: 'Number' } },
41
+ { id: 'layer2', fields: { field2: 'String' }, description: 'A test layer' },
42
+ ];
43
+
44
+ expect(() => isVectorLayers(validLayers)).not.toThrow();
45
+ });
46
+
47
+ it('should throw an error for non-array inputs', () => {
48
+ expect(() => isVectorLayers(null)).toThrow('Expected an array of layers');
49
+ expect(() => isVectorLayers({})).toThrow('Expected an array of layers');
50
+ });
51
+
52
+ it('should throw an error for empty arrays', () => {
53
+ expect(() => isVectorLayers([])).toThrow('Array of layers cannot be empty');
54
+ });
55
+
56
+ it('should throw an error for arrays containing invalid layers', () => {
57
+ const invalidLayers = [
58
+ { id: 'layer1', fields: { field1: 'Number' } },
59
+ { id: 'layer2', fields: { field2: 'InvalidType' } },
60
+ ];
61
+
62
+ expect(() => isVectorLayers(invalidLayers)).toThrow(/Layer\[\d+\] at invalid:/);
63
+ });
64
+ });
@@ -0,0 +1,69 @@
1
+ /** Represents the structure of a vector layer in a TileJSON specification. */
2
+ export interface VectorLayer {
3
+ id: string;
4
+ fields: Record<string, 'Boolean' | 'Number' | 'String'>;
5
+ description?: string;
6
+ minzoom?: number;
7
+ maxzoom?: number;
8
+ }
9
+
10
+ /**
11
+ * Verifies if an object conforms to the VectorLayer structure.
12
+ * Throws errors for any deviations from the expected structure or types.
13
+ */
14
+ export function isVectorLayer(layer: unknown): layer is VectorLayer {
15
+ if (typeof layer !== 'object' || layer === null) {
16
+ throw new Error('Layer must be a non-null object');
17
+ }
18
+
19
+ const obj = layer as Record<string, unknown>;
20
+
21
+ if (typeof obj.id !== 'string') {
22
+ throw new Error('Layer.id must be a string');
23
+ }
24
+
25
+ if (typeof obj.fields !== 'object' || obj.fields === null) {
26
+ throw new Error('Layer.fields must be a non-null object');
27
+ }
28
+ if (Object.values(obj.fields).some(type => !['Boolean', 'Number', 'String'].includes(type as string))) {
29
+ throw new Error('Layer.fields values must be one of \'Boolean\', \'Number\', or \'String\'');
30
+ }
31
+
32
+ if ('description' in obj && typeof obj.description !== 'string') {
33
+ throw new Error('Layer.description must be a string if present');
34
+ }
35
+
36
+ if ('minzoom' in obj && (typeof obj.minzoom !== 'number' || obj.minzoom < 0)) {
37
+ throw new Error('Layer.minzoom must be a non-negative number if present');
38
+ }
39
+
40
+ if ('maxzoom' in obj && (typeof obj.maxzoom !== 'number' || obj.maxzoom < 0)) {
41
+ throw new Error('Layer.maxzoom must be a non-negative number if present');
42
+ }
43
+
44
+ return true;
45
+ }
46
+
47
+ export function isVectorLayers(layers: unknown): layers is VectorLayer[] {
48
+ if (!Array.isArray(layers)) {
49
+ throw new Error('Expected an array of layers');
50
+ }
51
+
52
+ if (layers.length === 0) {
53
+ throw new Error('Array of layers cannot be empty');
54
+ }
55
+
56
+ layers.forEach((layer, index) => {
57
+ try {
58
+ if (!isVectorLayer(layer)) {
59
+ throw new Error(`Layer[${index}] is invalid`);
60
+ }
61
+ } catch (error) {
62
+ // Assuming `isVectorLayer` throws an error with a meaningful message, you can rethrow it
63
+ // Alternatively, customize the error message or handle the error as needed
64
+ throw new Error(`Layer[${index}] at invalid: ${String((error instanceof Error) ? error.message : error)}`);
65
+ }
66
+ });
67
+
68
+ return true;
69
+ }
@@ -1,34 +0,0 @@
1
- import type { HSL } from './hsl.js';
2
- import type { HSV } from './hsv.js';
3
- import { RandomColorOptions } from './random.js';
4
- import type { RGB } from './rgb.js';
5
- export declare abstract class Color {
6
- static parse: (input: Color | string) => Color;
7
- static HSL: typeof HSL;
8
- static HSV: typeof HSV;
9
- static RGB: typeof RGB;
10
- static random: (options?: RandomColorOptions) => HSV;
11
- abstract clone(): Color;
12
- asHex(): string;
13
- abstract asString(): string;
14
- abstract round(): Color;
15
- abstract asArray(): number[];
16
- abstract asHSL(): HSL;
17
- abstract asHSV(): HSV;
18
- abstract asRGB(): RGB;
19
- toHSL(): HSL;
20
- toHSV(): HSV;
21
- toRGB(): RGB;
22
- invertLuminosity(): HSL;
23
- rotateHue(offset: number): HSL;
24
- saturate(ratio: number): HSL;
25
- gamma(value: number): RGB;
26
- invert(): RGB;
27
- contrast(value: number): RGB;
28
- brightness(value: number): RGB;
29
- lighten(value: number): RGB;
30
- darken(value: number): RGB;
31
- tint(value: number, tintColor: Color): RGB;
32
- setHue(value: number): HSV;
33
- abstract fade(value: number): Color;
34
- }
@@ -1,53 +0,0 @@
1
- export class Color {
2
- static parse;
3
- static HSL;
4
- static HSV;
5
- static RGB;
6
- static random;
7
- asHex() {
8
- return this.toRGB().asHex();
9
- }
10
- toHSL() {
11
- return this.asHSL();
12
- }
13
- toHSV() {
14
- return this.asHSV();
15
- }
16
- toRGB() {
17
- return this.asRGB();
18
- }
19
- invertLuminosity() {
20
- return this.toHSL().invertLuminosity();
21
- }
22
- rotateHue(offset) {
23
- return this.toHSL().rotateHue(offset);
24
- }
25
- saturate(ratio) {
26
- return this.toHSL().saturate(ratio);
27
- }
28
- gamma(value) {
29
- return this.toRGB().gamma(value);
30
- }
31
- invert() {
32
- return this.toRGB().invert();
33
- }
34
- contrast(value) {
35
- return this.toRGB().contrast(value);
36
- }
37
- brightness(value) {
38
- return this.toRGB().brightness(value);
39
- }
40
- lighten(value) {
41
- return this.toRGB().lighten(value);
42
- }
43
- darken(value) {
44
- return this.toRGB().darken(value);
45
- }
46
- tint(value, tintColor) {
47
- return this.toRGB().tint(value, tintColor);
48
- }
49
- setHue(value) {
50
- return this.toHSV().setHue(value);
51
- }
52
- }
53
- //# sourceMappingURL=abstract.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"abstract.js","sourceRoot":"","sources":["../../src/color/abstract.ts"],"names":[],"mappings":"AAKA,MAAM,OAAgB,KAAK;IAC1B,MAAM,CAAC,KAAK,CAAmC;IAC/C,MAAM,CAAC,GAAG,CAAa;IACvB,MAAM,CAAC,GAAG,CAAa;IACvB,MAAM,CAAC,GAAG,CAAa;IACvB,MAAM,CAAC,MAAM,CAAwC;IAGrD,KAAK;QACJ,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAUD,KAAK;QACJ,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,KAAK;QACJ,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,KAAK;QACJ,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,gBAAgB;QACf,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACxC,CAAC;IAED,SAAS,CAAC,MAAc;QACvB,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,QAAQ,CAAC,KAAa;QACrB,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,KAAa;QAClB,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,MAAM;QACL,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC;IAC9B,CAAC;IAED,QAAQ,CAAC,KAAa;QACrB,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,UAAU,CAAC,KAAa;QACvB,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,CAAC,KAAa;QACpB,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,KAAa;QACnB,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,CAAC,KAAa,EAAE,SAAgB;QACnC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,KAAa;QACnB,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;CAGD"}
@@ -1,23 +0,0 @@
1
- import { Color } from './abstract.js';
2
- import { HSV } from './hsv.js';
3
- import { RGB } from './rgb.js';
4
- export declare class HSL extends Color {
5
- readonly h: number;
6
- readonly s: number;
7
- readonly l: number;
8
- readonly a: number;
9
- constructor(h: number, s: number, l: number, a?: number);
10
- asArray(): [number, number, number, number];
11
- round(): HSL;
12
- clone(): HSL;
13
- asString(): string;
14
- asHSL(): HSL;
15
- toHSL(): HSL;
16
- asHSV(): HSV;
17
- asRGB(): RGB;
18
- static parse(input: string | Color): HSL;
19
- invertLuminosity(): HSL;
20
- rotateHue(offset: number): HSL;
21
- saturate(ratio: number): HSL;
22
- fade(value: number): HSL;
23
- }
package/dist/color/hsl.js DELETED
@@ -1,98 +0,0 @@
1
- import { Color } from './abstract.js';
2
- import { HSV } from './hsv.js';
3
- import { RGB } from './rgb.js';
4
- import { clamp, formatFloat, mod } from './utils.js';
5
- export class HSL extends Color {
6
- h = 0; // between 0 and 360
7
- s = 0; // between 0 and 100
8
- l = 0; // between 0 and 100
9
- a = 1; // between 0 and 1
10
- constructor(h, s, l, a = 1) {
11
- super();
12
- this.h = mod(h, 360);
13
- this.s = clamp(s, 0, 100);
14
- this.l = clamp(l, 0, 100);
15
- this.a = clamp(a, 0, 1);
16
- }
17
- asArray() {
18
- return [this.h, this.s, this.l, this.a];
19
- }
20
- round() {
21
- return new HSL(Math.round(this.h), Math.round(this.s), Math.round(this.l), Math.round(this.a * 1000) / 1000);
22
- }
23
- clone() {
24
- return new HSL(this.h, this.s, this.l, this.a);
25
- }
26
- asString() {
27
- if (this.a === 1) {
28
- return `hsl(${this.h.toFixed(0)},${this.s.toFixed(0)}%,${this.l.toFixed(0)}%)`;
29
- }
30
- else {
31
- return `hsla(${this.h.toFixed(0)},${this.s.toFixed(0)}%,${this.l.toFixed(0)}%,${formatFloat(this.a, 3)})`;
32
- }
33
- }
34
- asHSL() {
35
- return this.clone();
36
- }
37
- toHSL() {
38
- return this;
39
- }
40
- asHSV() {
41
- const s = this.s / 100, l = this.l / 100;
42
- const v = l + s * Math.min(l, 1 - l);
43
- const sv = v === 0 ? 0 : 2 * (1 - l / v);
44
- return new HSV(this.h, sv * 100, v * 100, this.a);
45
- }
46
- asRGB() {
47
- const h = this.h / 360;
48
- const s = this.s / 100;
49
- const l = this.l / 100;
50
- // Achromatic (grey)
51
- if (s === 0)
52
- return new RGB(l * 255, l * 255, l * 255, this.a);
53
- const q = l < 0.5 ? l * (1 + s) : l + s - l * s;
54
- const p = 2 * l - q;
55
- const hueToRgb = (t) => {
56
- if (t < 0)
57
- t += 1;
58
- if (t > 1)
59
- t -= 1;
60
- if (t < 1 / 6)
61
- return p + (q - p) * 6 * t;
62
- if (t < 1 / 2)
63
- return q;
64
- if (t < 2 / 3)
65
- return p + (q - p) * (2 / 3 - t) * 6;
66
- return p;
67
- };
68
- // Convert to RGB in the 0-255 range and return
69
- return new RGB(255 * hueToRgb(h + 1 / 3), 255 * hueToRgb(h), 255 * hueToRgb(h - 1 / 3), this.a);
70
- }
71
- static parse(input) {
72
- if (input instanceof Color)
73
- return input.asHSL();
74
- input = input.replace(/\s+/g, '').toLowerCase();
75
- let match = input.match(/^hsl\((?<h>[-+0-9.]+)(?:deg)?,(?<s>[-+0-9.]+)%,(?<l>[-+0-9.]+)%\)$/);
76
- if (match) {
77
- return new HSL(parseFloat(match.groups.h), parseFloat(match.groups.s), parseFloat(match.groups.l));
78
- }
79
- match = input.match(/^hsla\((?<h>[-+0-9.]+)(?:deg)?,(?<s>[-+0-9.]+)%,(?<l>[-+0-9.]+)%,(?<a>[-+0-9.]+)\)$/);
80
- if (match) {
81
- return new HSL(parseFloat(match.groups.h), parseFloat(match.groups.s), parseFloat(match.groups.l), parseFloat(match.groups.a));
82
- }
83
- throw new Error(`Invalid HSL color string: "${input}"`);
84
- }
85
- invertLuminosity() {
86
- return new HSL(this.h, this.s, 100 - this.l, this.a);
87
- }
88
- rotateHue(offset) {
89
- return new HSL(mod(this.h + offset, 360), this.s, this.l, this.a);
90
- }
91
- saturate(ratio) {
92
- return new HSL(this.h, clamp(this.s * (1 + ratio), 0, 100), this.l, this.a);
93
- }
94
- fade(value) {
95
- return new HSL(this.h, this.s, this.l, this.a * (1 - value));
96
- }
97
- }
98
- //# sourceMappingURL=hsl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hsl.js","sourceRoot":"","sources":["../../src/color/hsl.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import { Color } from './abstract.js';
2
- import { HSL } from './hsl.js';
3
- import { RGB } from './rgb.js';
4
- export declare class HSV extends Color {
5
- readonly h: number;
6
- readonly s: number;
7
- readonly v: number;
8
- readonly a: number;
9
- constructor(h: number, s: number, v: number, a?: number);
10
- asArray(): [number, number, number, number];
11
- round(): HSV;
12
- asString(): string;
13
- clone(): HSV;
14
- asHSL(): HSL;
15
- asHSV(): HSV;
16
- toHSV(): HSV;
17
- asRGB(): RGB;
18
- fade(value: number): HSV;
19
- setHue(value: number): HSV;
20
- }
package/dist/color/hsv.js DELETED
@@ -1,100 +0,0 @@
1
- import { Color } from './abstract.js';
2
- import { HSL } from './hsl.js';
3
- import { RGB } from './rgb.js';
4
- import { clamp, mod } from './utils.js';
5
- export class HSV extends Color {
6
- h = 0; // between 0 and 360
7
- s = 0; // between 0 and 100
8
- v = 0; // between 0 and 100
9
- a = 1; // between 0 and 1
10
- constructor(h, s, v, a = 1) {
11
- super();
12
- this.h = mod(h, 360);
13
- this.s = clamp(s, 0, 100);
14
- this.v = clamp(v, 0, 100);
15
- this.a = clamp(a, 0, 1);
16
- }
17
- asArray() {
18
- return [this.h, this.s, this.v, this.a];
19
- }
20
- round() {
21
- return new HSV(Math.round(this.h), Math.round(this.s), Math.round(this.v), Math.round(this.a * 1000) / 1000);
22
- }
23
- asString() {
24
- return this.asHSL().asString();
25
- }
26
- clone() {
27
- return new HSV(this.h, this.s, this.v, this.a);
28
- }
29
- asHSL() {
30
- const s = this.s / 100;
31
- const v = this.v / 100;
32
- const k = (2 - s) * v;
33
- const q = k < 1 ? k : 2 - k;
34
- return new HSL(this.h, q == 0 ? 0 : 100 * s * v / q, 100 * k / 2, this.a);
35
- }
36
- asHSV() {
37
- return this.clone();
38
- }
39
- toHSV() {
40
- return this;
41
- }
42
- asRGB() {
43
- const h = this.h / 360; // Normalize h to range [0, 1]
44
- const s = this.s / 100; // Normalize s to range [0, 1]
45
- const v = this.v / 100; // Normalize v to range [0, 1]
46
- let r = 0, g = 0, b = 0;
47
- if (s === 0) {
48
- // Achromatic (grey)
49
- r = g = b = v;
50
- }
51
- else {
52
- const i = Math.floor(h * 6); // Determine the sector of the color wheel
53
- const f = h * 6 - i; // Fractional part of h * 6
54
- const p = v * (1 - s);
55
- const q = v * (1 - s * f);
56
- const t = v * (1 - s * (1 - f));
57
- switch (i % 6) {
58
- case 0:
59
- r = v;
60
- g = t;
61
- b = p;
62
- break;
63
- case 1:
64
- r = q;
65
- g = v;
66
- b = p;
67
- break;
68
- case 2:
69
- r = p;
70
- g = v;
71
- b = t;
72
- break;
73
- case 3:
74
- r = p;
75
- g = q;
76
- b = v;
77
- break;
78
- case 4:
79
- r = t;
80
- g = p;
81
- b = v;
82
- break;
83
- case 5:
84
- r = v;
85
- g = p;
86
- b = q;
87
- break;
88
- }
89
- }
90
- // Convert to RGB in the 0-255 range and return
91
- return new RGB(r * 255, g * 255, b * 255, this.a);
92
- }
93
- fade(value) {
94
- return new HSV(this.h, this.s, this.v, this.a * (1 - value));
95
- }
96
- setHue(value) {
97
- return new HSV(value, this.s, this.v, this.a);
98
- }
99
- }
100
- //# sourceMappingURL=hsv.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hsv.js","sourceRoot":"","sources":["../../src/color/hsv.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import { Color } from './abstract.js';
2
- export type { RandomColorOptions } from './random.js';
3
- export type { HSL } from './hsl.js';
4
- export type { HSV } from './hsv.js';
5
- export type { RGB } from './rgb.js';
6
- export { Color };
@@ -1,29 +0,0 @@
1
- import { Color } from './abstract.js';
2
- import { HSL } from './hsl.js';
3
- import { HSV } from './hsv.js';
4
- import randomColor from './random.js';
5
- import { RGB } from './rgb.js';
6
- Color.parse = function (input) {
7
- if (input instanceof Color)
8
- return input;
9
- input = input.trim().toLowerCase();
10
- if (input.startsWith('#'))
11
- return RGB.parse(input);
12
- const prefix = input.replace(/\d.*/, '').trim().toLowerCase();
13
- switch (prefix) {
14
- case 'rgb(':
15
- case 'rgba(':
16
- return RGB.parse(input);
17
- case 'hsl(':
18
- case 'hsla(':
19
- return HSL.parse(input);
20
- default:
21
- throw Error('Unknown color format: ' + input);
22
- }
23
- };
24
- Color.HSL = HSL;
25
- Color.HSV = HSV;
26
- Color.RGB = RGB;
27
- Color.random = randomColor;
28
- export { Color };
29
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/color/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,WAAW,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,KAAK,CAAC,KAAK,GAAG,UAAU,KAAqB;IAC5C,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC;IAEzC,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAEnC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEnD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE9D,QAAQ,MAAM,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO;YACX,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzB,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO;YACX,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzB;YACC,MAAM,KAAK,CAAC,wBAAwB,GAAG,KAAK,CAAC,CAAC;IAChD,CAAC;AACF,CAAC,CAAA;AAED,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;AAChB,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;AAChB,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;AAEhB,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC;AAM3B,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -1,9 +0,0 @@
1
- import { HSV } from './hsv.js';
2
- export interface RandomColorOptions {
3
- seed?: string;
4
- hue?: number | string;
5
- opacity?: number;
6
- luminosity?: number | string;
7
- saturation?: number | string;
8
- }
9
- export default function randomColor(options?: RandomColorOptions): HSV;