chnobli 0.1.9 → 0.1.11

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 (197) hide show
  1. package/dist/animation/Animation.d.ts +37 -0
  2. package/dist/animation/Animation.d.ts.map +1 -0
  3. package/dist/animation/Animation.js +232 -0
  4. package/dist/animation/Animation.js.map +1 -0
  5. package/dist/animation/public.d.ts +68 -0
  6. package/dist/animation/public.d.ts.map +1 -0
  7. package/dist/animation/public.js +115 -0
  8. package/dist/animation/public.js.map +1 -0
  9. package/dist/animator/Animator.d.ts +30 -0
  10. package/dist/animator/Animator.d.ts.map +1 -0
  11. package/dist/animator/Animator.js +97 -0
  12. package/dist/animator/Animator.js.map +1 -0
  13. package/dist/animator/index.d.ts +5 -0
  14. package/dist/animator/index.d.ts.map +1 -0
  15. package/dist/animator/index.js +53 -0
  16. package/dist/animator/index.js.map +1 -0
  17. package/dist/animator/public.d.ts +16 -0
  18. package/dist/animator/public.d.ts.map +1 -0
  19. package/dist/animator/public.js +50 -0
  20. package/dist/animator/public.js.map +1 -0
  21. package/dist/chnobli.d.ts +15 -0
  22. package/dist/chnobli.d.ts.map +1 -0
  23. package/dist/chnobli.js +59 -0
  24. package/dist/chnobli.js.map +1 -0
  25. package/dist/property/BasicProperty.d.ts +38 -0
  26. package/dist/property/BasicProperty.d.ts.map +1 -0
  27. package/dist/property/BasicProperty.js +72 -0
  28. package/dist/property/BasicProperty.js.map +1 -0
  29. package/dist/property/ClassProperty.d.ts +32 -0
  30. package/dist/property/ClassProperty.d.ts.map +1 -0
  31. package/dist/property/ClassProperty.js +108 -0
  32. package/dist/property/ClassProperty.js.map +1 -0
  33. package/dist/property/Property.d.ts +13 -0
  34. package/dist/property/Property.d.ts.map +1 -0
  35. package/dist/property/Property.js +22 -0
  36. package/dist/property/Property.js.map +1 -0
  37. package/dist/property/StyleProperty.d.ts +25 -0
  38. package/dist/property/StyleProperty.d.ts.map +1 -0
  39. package/dist/property/StyleProperty.js +221 -0
  40. package/dist/property/StyleProperty.js.map +1 -0
  41. package/dist/property/TransformProperty.d.ts +15 -0
  42. package/dist/property/TransformProperty.d.ts.map +1 -0
  43. package/dist/property/TransformProperty.js +43 -0
  44. package/dist/property/TransformProperty.js.map +1 -0
  45. package/dist/property/TransformXYProperty.d.ts +28 -0
  46. package/dist/property/TransformXYProperty.d.ts.map +1 -0
  47. package/dist/property/TransformXYProperty.js +65 -0
  48. package/dist/property/TransformXYProperty.js.map +1 -0
  49. package/dist/responsive/ResponsiveEvent.d.ts +17 -0
  50. package/dist/responsive/ResponsiveEvent.d.ts.map +1 -0
  51. package/dist/responsive/ResponsiveEvent.js +45 -0
  52. package/dist/responsive/ResponsiveEvent.js.map +1 -0
  53. package/dist/responsive/TestEvent.d.ts +11 -0
  54. package/dist/responsive/TestEvent.d.ts.map +1 -0
  55. package/dist/responsive/TestEvent.js +26 -0
  56. package/dist/responsive/TestEvent.js.map +1 -0
  57. package/dist/scroll/Scroll.d.ts +61 -0
  58. package/dist/scroll/Scroll.d.ts.map +1 -0
  59. package/dist/scroll/Scroll.js +280 -0
  60. package/dist/scroll/Scroll.js.map +1 -0
  61. package/dist/scroll/ScrollEvent.d.ts +17 -0
  62. package/dist/scroll/ScrollEvent.d.ts.map +1 -0
  63. package/dist/scroll/ScrollEvent.js +40 -0
  64. package/dist/scroll/ScrollEvent.js.map +1 -0
  65. package/dist/scroll/index.d.ts +8 -0
  66. package/dist/scroll/index.d.ts.map +1 -0
  67. package/dist/scroll/index.js +9 -0
  68. package/dist/scroll/index.js.map +1 -0
  69. package/dist/scroll/public.d.ts +35 -0
  70. package/dist/scroll/public.d.ts.map +1 -0
  71. package/dist/scroll/public.js +50 -0
  72. package/dist/scroll/public.js.map +1 -0
  73. package/dist/stagger/stagger.d.ts +20 -0
  74. package/dist/stagger/stagger.d.ts.map +1 -0
  75. package/dist/stagger/stagger.js +43 -0
  76. package/dist/stagger/stagger.js.map +1 -0
  77. package/dist/target/BaseTarget.old.d.ts +33 -0
  78. package/dist/target/BaseTarget.old.d.ts.map +1 -0
  79. package/dist/target/BaseTarget.old.js +73 -0
  80. package/dist/target/BaseTarget.old.js.map +1 -0
  81. package/dist/target/DomTarget.d.ts +41 -0
  82. package/dist/target/DomTarget.d.ts.map +1 -0
  83. package/dist/target/DomTarget.js +230 -0
  84. package/dist/target/DomTarget.js.map +1 -0
  85. package/dist/target/ObjectTarget.d.ts +31 -0
  86. package/dist/target/ObjectTarget.d.ts.map +1 -0
  87. package/dist/target/ObjectTarget.js +108 -0
  88. package/dist/target/ObjectTarget.js.map +1 -0
  89. package/dist/target/Target.d.ts +25 -0
  90. package/dist/target/Target.d.ts.map +1 -0
  91. package/dist/target/Target.js +25 -0
  92. package/dist/target/Target.js.map +1 -0
  93. package/dist/target/TestDomNode.d.ts +14 -0
  94. package/dist/target/TestDomNode.d.ts.map +1 -0
  95. package/dist/target/TestDomNode.js +55 -0
  96. package/dist/target/TestDomNode.js.map +1 -0
  97. package/dist/timeline/Nested.d.ts +30 -0
  98. package/dist/timeline/Nested.d.ts.map +1 -0
  99. package/dist/timeline/Nested.js +51 -0
  100. package/dist/timeline/Nested.js.map +1 -0
  101. package/dist/timeline/Timeline.d.ts +42 -0
  102. package/dist/timeline/Timeline.d.ts.map +1 -0
  103. package/dist/timeline/Timeline.js +306 -0
  104. package/dist/timeline/Timeline.js.map +1 -0
  105. package/dist/timeline/public.d.ts +167 -0
  106. package/dist/timeline/public.d.ts.map +1 -0
  107. package/dist/timeline/public.js +396 -0
  108. package/dist/timeline/public.js.map +1 -0
  109. package/dist/timing/AnimationFrameTicker.d.ts +32 -0
  110. package/dist/timing/AnimationFrameTicker.d.ts.map +1 -0
  111. package/dist/timing/AnimationFrameTicker.js +138 -0
  112. package/dist/timing/AnimationFrameTicker.js.map +1 -0
  113. package/dist/timing/Ease.d.ts +6 -0
  114. package/dist/timing/Ease.d.ts.map +1 -0
  115. package/dist/timing/Ease.js +15 -0
  116. package/dist/timing/Ease.js.map +1 -0
  117. package/dist/timing/TestTicker.d.ts +19 -0
  118. package/dist/timing/TestTicker.d.ts.map +1 -0
  119. package/dist/timing/TestTicker.js +85 -0
  120. package/dist/timing/TestTicker.js.map +1 -0
  121. package/dist/timing/Ticker.d.ts +16 -0
  122. package/dist/timing/Ticker.d.ts.map +1 -0
  123. package/dist/timing/Ticker.js +2 -0
  124. package/dist/timing/Ticker.js.map +1 -0
  125. package/dist/timing/Timing.d.ts +116 -0
  126. package/dist/timing/Timing.d.ts.map +1 -0
  127. package/dist/timing/Timing.js +310 -0
  128. package/dist/timing/Timing.js.map +1 -0
  129. package/dist/timing/easing.d.ts +158 -0
  130. package/dist/timing/easing.d.ts.map +1 -0
  131. package/dist/timing/easing.js +273 -0
  132. package/dist/timing/easing.js.map +1 -0
  133. package/dist/utils/Events.d.ts +9 -0
  134. package/dist/utils/Events.d.ts.map +1 -0
  135. package/dist/utils/Events.js +35 -0
  136. package/dist/utils/Events.js.map +1 -0
  137. package/dist/utils/internal.d.ts +5 -0
  138. package/dist/utils/internal.d.ts.map +1 -0
  139. package/dist/utils/internal.js +9 -0
  140. package/dist/utils/internal.js.map +1 -0
  141. package/dist/utils/motionpath.d.ts +16 -0
  142. package/dist/utils/motionpath.d.ts.map +1 -0
  143. package/dist/utils/motionpath.js +41 -0
  144. package/dist/utils/motionpath.js.map +1 -0
  145. package/dist/utils/utils.d.ts +44 -0
  146. package/dist/utils/utils.d.ts.map +1 -0
  147. package/dist/utils/utils.js +88 -0
  148. package/dist/utils/utils.js.map +1 -0
  149. package/dist/values/ColorValue.d.ts +12 -0
  150. package/dist/values/ColorValue.d.ts.map +1 -0
  151. package/dist/values/ColorValue.js +134 -0
  152. package/dist/values/ColorValue.js.map +1 -0
  153. package/dist/values/StyleValue.d.ts +41 -0
  154. package/dist/values/StyleValue.d.ts.map +1 -0
  155. package/dist/values/StyleValue.js +159 -0
  156. package/dist/values/StyleValue.js.map +1 -0
  157. package/dist/values/Value.d.ts +13 -0
  158. package/dist/values/Value.d.ts.map +1 -0
  159. package/dist/values/Value.js +38 -0
  160. package/dist/values/Value.js.map +1 -0
  161. package/dist/values/defaultcolors.d.ts +2 -0
  162. package/dist/values/defaultcolors.d.ts.map +1 -0
  163. package/dist/values/defaultcolors.js +149 -0
  164. package/dist/values/defaultcolors.js.map +1 -0
  165. package/eslint.config.js +23 -0
  166. package/package.json +10 -3
  167. package/src/animation/Animation.ts +6 -3
  168. package/src/animator/Animator.ts +130 -0
  169. package/src/animator/index.ts +56 -0
  170. package/src/animator/public.ts +66 -0
  171. package/src/chnobli.ts +3 -2
  172. package/src/property/ClassProperty.ts +1 -1
  173. package/src/property/TransformXYProperty.ts +1 -1
  174. package/src/scroll/Scroll.ts +202 -51
  175. package/src/scroll/ScrollEvent.ts +1 -0
  176. package/src/scroll/index.ts +3 -0
  177. package/src/scroll/public.ts +35 -2
  178. package/src/target/DomTarget.ts +1 -1
  179. package/src/target/ObjectTarget.ts +19 -13
  180. package/src/tests/properties.test.ts +44 -3
  181. package/src/tests/timeline.test.ts +1 -1
  182. package/src/tests/timing.test.ts +32 -0
  183. package/src/tests/usecases.test.ts +40 -2
  184. package/src/tests/values.test.ts +9 -9
  185. package/src/timeline/Timeline.ts +5 -4
  186. package/src/timeline/public.ts +34 -12
  187. package/src/timing/AnimationFrameTicker.ts +6 -1
  188. package/src/timing/TestTicker.ts +7 -1
  189. package/src/timing/Ticker.ts +5 -1
  190. package/src/timing/Timing.ts +127 -91
  191. package/src/utils/Events.ts +1 -1
  192. package/src/utils/motionpath.ts +5 -5
  193. package/src/utils/utils.ts +0 -10
  194. package/src/values/ColorValue.ts +1 -0
  195. package/src/values/Value.ts +1 -1
  196. package/.eslintrc.cjs +0 -39
  197. package/src/animator.js +0 -187
@@ -0,0 +1,88 @@
1
+ import { curve } from './motionpath.js';
2
+ export { curve };
3
+ /**
4
+ * Explicitly tells a property to animate the to value
5
+ */
6
+ export function to(to) {
7
+ return { to };
8
+ }
9
+ /**
10
+ * Explicitly tells a property to animate the from value
11
+ */
12
+ export function from(from) {
13
+ return { from };
14
+ }
15
+ /**
16
+ * Explicitly tells a property to animate with the from and to values
17
+ */
18
+ export function fromTo(from, to) {
19
+ return { from, to };
20
+ }
21
+ /**
22
+ * makes a value reactive to `Timeline::update` calls or resizes
23
+ */
24
+ export function responsive(fn) {
25
+ return { responsive: fn };
26
+ }
27
+ /**
28
+ * Converts an element with text into span with chars
29
+ */
30
+ export function chars(element) {
31
+ if (element.dataset.processedChars)
32
+ return Array.from(element.children);
33
+ const chars = element.textContent.split('');
34
+ element.textContent = '';
35
+ element.dataset.processedChars = 'yes';
36
+ return chars
37
+ .map(c => {
38
+ if (c.trim().length === 0) {
39
+ element.appendChild(document.createTextNode(c));
40
+ return null;
41
+ }
42
+ const span = document.createElement('span');
43
+ span.textContent = c;
44
+ span.style.display = 'inline-block';
45
+ element.appendChild(span);
46
+ return span;
47
+ })
48
+ .filter(c => !!c);
49
+ }
50
+ function defWordCallback(element, word) {
51
+ const span = document.createElement('span');
52
+ span.textContent = word;
53
+ span.style.display = 'inline-block';
54
+ element.appendChild(span);
55
+ return span;
56
+ }
57
+ /**
58
+ * Converts an element with text into span with words
59
+ */
60
+ export function words(element, cb = defWordCallback) {
61
+ if (element.dataset.processedWords)
62
+ return Array.from(element.children);
63
+ const words = element.textContent.split(/(\s+)/);
64
+ element.textContent = '';
65
+ element.dataset.processedWords = 'yes';
66
+ return words
67
+ .map(word => {
68
+ if (word.trim().length === 0) {
69
+ element.appendChild(document.createTextNode(word));
70
+ return null;
71
+ }
72
+ return cb(element, word);
73
+ })
74
+ .filter(w => !!w);
75
+ }
76
+ /**
77
+ * get the offset to the current page page
78
+ */
79
+ export function pageOffset(el) {
80
+ const rect = el.getBoundingClientRect();
81
+ return {
82
+ top: window.scrollY + rect.top,
83
+ left: window.scrollX + rect.left,
84
+ width: rect.width,
85
+ height: rect.height,
86
+ };
87
+ }
88
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export type RGBA = [number, number, number, number];
2
+ export type HSLA = [number, number, number, number];
3
+ export type RGB = [number, number, number];
4
+ export default class ColorValue {
5
+ values: RGBA;
6
+ constructor(v: RGBA | RGB);
7
+ static parse(v: string | number[]): ColorValue;
8
+ static mightBeAColor(v: string): boolean;
9
+ clone(): ColorValue;
10
+ toString(): string;
11
+ }
12
+ //# sourceMappingURL=ColorValue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorValue.d.ts","sourceRoot":"","sources":["../../src/values/ColorValue.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACpD,MAAM,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACpD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE3C,MAAM,CAAC,OAAO,OAAO,UAAU;IAC9B,MAAM,EAAE,IAAI,CAAC;gBAGD,CAAC,EAAE,IAAI,GAAG,GAAG;IASzB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;IAuBjC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM;IAW9B,KAAK;IAIL,QAAQ;CAMR"}
@@ -0,0 +1,134 @@
1
+ import { COLORS } from './defaultcolors.js';
2
+ export default class ColorValue {
3
+ values;
4
+ // [r, g, b, a?]
5
+ constructor(v) {
6
+ if (v.length === 3) {
7
+ v = [...v, 1];
8
+ }
9
+ // always [r, g, b, a]
10
+ this.values = v;
11
+ }
12
+ static parse(v) {
13
+ if (Array.isArray(v)) {
14
+ if (v.length < 3 || v.length > 4)
15
+ throw new Error('expected array [r, g, b, a]');
16
+ return new ColorValue(v);
17
+ }
18
+ if (typeof v !== 'string')
19
+ throw new Error('expected a string or an array');
20
+ v = v.trim();
21
+ if (v.startsWith('#'))
22
+ return new ColorValue(parseHex(v.substring(1)));
23
+ if (v.startsWith('rgb'))
24
+ return new ColorValue(parseRgb(v));
25
+ if (v.startsWith('hsl'))
26
+ return new ColorValue(parseHsl(v));
27
+ if (v in COLORS)
28
+ return new ColorValue(COLORS[v]);
29
+ throw new Error('unknown color value ' + v);
30
+ }
31
+ // v needs to be a string
32
+ static mightBeAColor(v) {
33
+ v = v.trim();
34
+ return (v.startsWith('#') ||
35
+ v.startsWith('rgb') ||
36
+ v.startsWith('hsl') ||
37
+ v in COLORS);
38
+ }
39
+ clone() {
40
+ return new ColorValue(this.values.slice());
41
+ }
42
+ toString() {
43
+ const [r, g, b, a] = this.values;
44
+ return `rgba(${[r, g, b].map(v => Math.round(v)).join(', ')}, ${a.toFixed(3)})`;
45
+ }
46
+ }
47
+ // hex without the hash
48
+ function parseHex(hex) {
49
+ if (hex.length !== 3 && hex.length !== 6 && hex.length !== 8)
50
+ throw new Error('unknown hex value ' + hex);
51
+ // Convert 3-character hex to 6-character hex
52
+ if (hex.length === 3)
53
+ hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
54
+ // Parse the hex values
55
+ const r = parseInt(hex.substring(0, 2), 16);
56
+ const g = parseInt(hex.substring(2, 4), 16);
57
+ const b = parseInt(hex.substring(4, 6), 16);
58
+ let a = 255;
59
+ if (hex.length === 8)
60
+ a = parseInt(hex.substring(6, 8), 16);
61
+ return [r, g, b, a / 255];
62
+ }
63
+ // rgb needs to start with rgb
64
+ function parseRgb(rgb) {
65
+ const rgba = rgb.startsWith('rgba');
66
+ // remove the function name
67
+ rgb = rgb.substring(3 + +rgba);
68
+ if (!rgb.startsWith('(') && !rgb.endsWith(')'))
69
+ throw new Error('invalid rgb function ' + rgb);
70
+ rgb = rgb.substring(1, rgb.length - 1);
71
+ const vals = rgb.split(',');
72
+ if ((rgba && vals.length !== 4) || vals.length !== 3)
73
+ throw new Error('invalid rgb function ' + rgb);
74
+ const r = parseInt(vals[0].trim());
75
+ const g = parseInt(vals[1].trim());
76
+ const b = parseInt(vals[2].trim());
77
+ const a = rgba ? parseFloat(vals[3].trim()) : 1;
78
+ return [r, g, b, a];
79
+ }
80
+ // hsl needs to start with hsl
81
+ function parseHsl(hsl) {
82
+ const hsla = hsl.startsWith('hsla');
83
+ // Remove the function name
84
+ hsl = hsl.substring(3 + +hsla);
85
+ if (!hsl.startsWith('(') || !hsl.endsWith(')'))
86
+ throw new Error('invalid hsl function ' + hsl);
87
+ hsl = hsl.substring(1, hsl.length - 1);
88
+ let vals = hsl.split(',');
89
+ if ((hsla && vals.length !== 4) || (!hsla && vals.length !== 3))
90
+ throw new Error('invalid hsl function ' + hsl);
91
+ vals = vals.map(v => v.trim());
92
+ if (!vals[1].endsWith('%') && !vals[2].endsWith('%'))
93
+ throw new Error('invalid hsl function ' + hsl);
94
+ const h = parseInt(vals[0]);
95
+ const s = parseInt(vals[1].substring(0, vals[1].length - 1));
96
+ const l = parseInt(vals[2].substring(0, vals[2].length - 1));
97
+ const a = hsla ? parseFloat(vals[3]) : 1;
98
+ return hslToRgba([h, s, l, a]);
99
+ }
100
+ /// expects [h, s, l, a]
101
+ function hslToRgba(hsla) {
102
+ // eslint-disable-next-line prefer-const
103
+ let [h, s, l, a] = hsla;
104
+ // normalize
105
+ h /= 360;
106
+ s /= 100;
107
+ l /= 100;
108
+ let r, g, b;
109
+ if (s === 0) {
110
+ r = g = b = l;
111
+ }
112
+ else {
113
+ const q = l < 0.5 ? l * (1 + s) : l + s - l * s;
114
+ const p = 2 * l - q;
115
+ r = Math.round(hueToRgb(p, q, h + 1 / 3) * 255);
116
+ g = Math.round(hueToRgb(p, q, h) * 255);
117
+ b = Math.round(hueToRgb(p, q, h - 1 / 3) * 255);
118
+ }
119
+ return [r, g, b, a];
120
+ }
121
+ function hueToRgb(p, q, t) {
122
+ if (t < 0)
123
+ t += 1;
124
+ if (t > 1)
125
+ t -= 1;
126
+ if (t < 1 / 6)
127
+ return p + (q - p) * 6 * t;
128
+ if (t < 1 / 2)
129
+ return q;
130
+ if (t < 2 / 3)
131
+ return p + (q - p) * (2 / 3 - t) * 6;
132
+ return p;
133
+ }
134
+ //# sourceMappingURL=ColorValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorValue.js","sourceRoot":"","sources":["../../src/values/ColorValue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import Value from './Value.js';
2
+ import ColorValue from './ColorValue.js';
3
+ /**
4
+ * A value from a style property
5
+ *
6
+ * might be a textual representation like none|auto|block|var(--abc)
7
+ * might be a value with unit or not
8
+ * might be multiple values `10 20px 4rem`
9
+ *
10
+ * values like hidden|none|null|undefined are market as at the end
11
+ * which means they should be set at the end
12
+ */
13
+ export default class StyleValue {
14
+ private inner;
15
+ private textAtTheEnd;
16
+ /**
17
+ * Creates a style value
18
+ *
19
+ * ## value must be one of the following
20
+ * - string (meaning this is of kind text)
21
+ * - number (meaning this is of kind values with one value)
22
+ * - array (meaning this is of kind values and each array element needs to
23
+ * be a Value)
24
+ * - ColorValue
25
+ */
26
+ constructor(value: string | number | Value[] | ColorValue);
27
+ static parse(v: string | number | (string | number)[]): StyleValue;
28
+ get kind(): 'text' | 'values' | 'color';
29
+ get values(): string | Value[] | ColorValue;
30
+ get length(): number;
31
+ extendToLength(length: number): void;
32
+ /**
33
+ * Throws if the this does not contain exactly one value
34
+ */
35
+ intoValue(): Value;
36
+ clone(): StyleValue;
37
+ withDefaultUnit(unit: string | null): StyleValue;
38
+ toString(): string;
39
+ toMixed(): string | number;
40
+ }
41
+ //# sourceMappingURL=StyleValue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StyleValue.d.ts","sourceRoot":"","sources":["../../src/values/StyleValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,UAAU,MAAM,iBAAiB,CAAC;AAmBzC;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IAC9B,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,YAAY,CAAU;IAE9B;;;;;;;;;OASG;gBACS,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,EAAE,GAAG,UAAU;IAmCzD,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE;IAkCrD,IAAI,IAAI,IAAI,MAAM,GAAG,QAAQ,GAAG,OAAO,CAEtC;IAED,IAAI,MAAM,IAAI,MAAM,GAAG,KAAK,EAAE,GAAG,UAAU,CAE1C;IAGD,IAAI,MAAM,WAKT;IAED,cAAc,CAAC,MAAM,EAAE,MAAM;IAO7B;;OAEG;IACH,SAAS,IAAI,KAAK;IAQlB,KAAK;IAWL,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAYnC,QAAQ,IAAI,MAAM;IAiBlB,OAAO,IAAI,MAAM,GAAG,MAAM;CAU1B"}
@@ -0,0 +1,159 @@
1
+ import Value from './Value.js';
2
+ import ColorValue from './ColorValue.js';
3
+ const AT_THE_END_VALUES = ['none', 'hidden'];
4
+ /**
5
+ * A value from a style property
6
+ *
7
+ * might be a textual representation like none|auto|block|var(--abc)
8
+ * might be a value with unit or not
9
+ * might be multiple values `10 20px 4rem`
10
+ *
11
+ * values like hidden|none|null|undefined are market as at the end
12
+ * which means they should be set at the end
13
+ */
14
+ export default class StyleValue {
15
+ inner;
16
+ textAtTheEnd;
17
+ /**
18
+ * Creates a style value
19
+ *
20
+ * ## value must be one of the following
21
+ * - string (meaning this is of kind text)
22
+ * - number (meaning this is of kind values with one value)
23
+ * - array (meaning this is of kind values and each array element needs to
24
+ * be a Value)
25
+ * - ColorValue
26
+ */
27
+ constructor(value) {
28
+ if (typeof value === 'string') {
29
+ this.inner = {
30
+ kind: 'text',
31
+ values: value.trim(),
32
+ };
33
+ }
34
+ else if (typeof value === 'number') {
35
+ this.inner = {
36
+ kind: 'values',
37
+ values: [Value.parse(value)],
38
+ };
39
+ }
40
+ else if (Array.isArray(value)) {
41
+ this.inner = {
42
+ kind: 'values',
43
+ values: value,
44
+ };
45
+ }
46
+ else if (value instanceof ColorValue) {
47
+ this.inner = {
48
+ kind: 'color',
49
+ values: value,
50
+ };
51
+ }
52
+ else {
53
+ throw new Error('unknown style value ' + value);
54
+ }
55
+ /**
56
+ * If this is true the value should be set at the end of a animation
57
+ * this only works with kind === text
58
+ */
59
+ this.textAtTheEnd =
60
+ this.inner.kind === 'text'
61
+ ? AT_THE_END_VALUES.includes(this.inner.values)
62
+ : false;
63
+ }
64
+ static parse(v) {
65
+ if (typeof v === 'number')
66
+ return new StyleValue(v);
67
+ if (Array.isArray(v)) {
68
+ const val = v.map(v => Value.parse(v));
69
+ return new StyleValue(val);
70
+ }
71
+ if (typeof v !== 'string')
72
+ throw new Error('expected a string as style value ' + v);
73
+ // let's first try to make it a color
74
+ if (ColorValue.mightBeAColor(v))
75
+ return new StyleValue(ColorValue.parse(v));
76
+ const split = v
77
+ .split(' ')
78
+ .map(v => v.trim())
79
+ .filter(v => !!v);
80
+ if (split.length === 0)
81
+ throw new Error('style value cannot be empty');
82
+ if (split.length === 1) {
83
+ try {
84
+ const val = Value.parse(split[0]);
85
+ return new StyleValue([val]);
86
+ }
87
+ catch (e) {
88
+ // console.log('failed to parse first style value ', e);
89
+ return new StyleValue(split[0]);
90
+ }
91
+ }
92
+ return new StyleValue(split.map(v => Value.parse(v)));
93
+ }
94
+ get kind() {
95
+ return this.inner.kind;
96
+ }
97
+ get values() {
98
+ return this.inner.values;
99
+ }
100
+ /// only works if the kind is values
101
+ get length() {
102
+ if (this.inner.kind !== 'values')
103
+ throw new Error('only works with kind values');
104
+ return this.inner.values.length;
105
+ }
106
+ extendToLength(length) {
107
+ if (this.length >= length)
108
+ return;
109
+ // length already checks that kind is values
110
+ this.inner.values = Array(length).fill(this.values).flat();
111
+ }
112
+ /**
113
+ * Throws if the this does not contain exactly one value
114
+ */
115
+ intoValue() {
116
+ if (this.length !== 1)
117
+ throw new Error('style value does not contain only one value');
118
+ // length already checks that kind is values
119
+ return this.inner.values[0];
120
+ }
121
+ clone() {
122
+ if (this.inner.kind === 'text')
123
+ return new StyleValue(this.inner.values);
124
+ if (this.inner.kind === 'color')
125
+ return new StyleValue(this.inner.values.clone());
126
+ return new StyleValue(this.inner.values.map(v => v.clone()));
127
+ }
128
+ /// if this is called with a text value nothing happens
129
+ withDefaultUnit(unit) {
130
+ if (this.inner.kind === 'text')
131
+ return new StyleValue(this.inner.values);
132
+ if (this.inner.kind === 'color')
133
+ return new StyleValue(this.inner.values.clone());
134
+ return new StyleValue(this.inner.values.map(v => v.withDefaultUnit(unit)));
135
+ }
136
+ toString() {
137
+ switch (this.inner.kind) {
138
+ case 'text':
139
+ return this.inner.values;
140
+ case 'color':
141
+ return this.inner.values.toString();
142
+ case 'values':
143
+ return this.inner.values.join(' ');
144
+ default:
145
+ throw new Error('unknown kind ' + this.kind);
146
+ }
147
+ }
148
+ // returns the value as a number if possible otherwise as a string
149
+ toMixed() {
150
+ if (this.inner.kind !== 'values' || this.inner.values.length !== 1)
151
+ return this.toString();
152
+ // length already checks that kind is values
153
+ const val = this.inner.values[0];
154
+ if (val.unit)
155
+ return this.toString();
156
+ return val.num;
157
+ }
158
+ }
159
+ //# sourceMappingURL=StyleValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StyleValue.js","sourceRoot":"","sources":["../../src/values/StyleValue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export default class Value {
2
+ num: number;
3
+ unit: string | null;
4
+ constructor(num: number, unit?: string | null);
5
+ static parse(v: string | number): Value;
6
+ eq(other: Value): boolean;
7
+ clone(newNum?: number | null): Value;
8
+ cloneAdd(add: number): Value;
9
+ cloneMul(mul: number): Value;
10
+ withDefaultUnit(unit: string | null): Value;
11
+ toString(): string;
12
+ }
13
+ //# sourceMappingURL=Value.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Value.d.ts","sourceRoot":"","sources":["../../src/values/Value.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,KAAK;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;gBAER,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,GAAG,IAAW;IAKnD,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAW/B,EAAE,CAAC,KAAK,EAAE,KAAK;IAIf,KAAK,CAAC,MAAM,GAAE,MAAM,GAAG,IAAW;IAMlC,QAAQ,CAAC,GAAG,EAAE,MAAM;IAIpB,QAAQ,CAAC,GAAG,EAAE,MAAM;IAIpB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAInC,QAAQ;CAGR"}
@@ -0,0 +1,38 @@
1
+ const REGEX = /^(-?\d+\.?\d*|\.\d+)(\w*|%)$/;
2
+ export default class Value {
3
+ num;
4
+ unit;
5
+ constructor(num, unit = null) {
6
+ this.num = num;
7
+ this.unit = unit;
8
+ }
9
+ static parse(v) {
10
+ if (typeof v === 'number') {
11
+ return new Value(v);
12
+ }
13
+ // @ts-ignore
14
+ const [_v, num, unit] = REGEX.exec(v);
15
+ return new Value(parseFloat(num), unit ? unit : null);
16
+ }
17
+ eq(other) {
18
+ return this.unit === other.unit && this.num === other.num;
19
+ }
20
+ clone(newNum = null) {
21
+ if (newNum !== null)
22
+ return new Value(newNum, this.unit);
23
+ return new Value(this.num, this.unit);
24
+ }
25
+ cloneAdd(add) {
26
+ return new Value(this.num + add, this.unit);
27
+ }
28
+ cloneMul(mul) {
29
+ return new Value(this.num * mul, this.unit);
30
+ }
31
+ withDefaultUnit(unit) {
32
+ return new Value(this.num, this.unit ?? unit);
33
+ }
34
+ toString() {
35
+ return this.num.toFixed(3) + (this.unit ?? '');
36
+ }
37
+ }
38
+ //# sourceMappingURL=Value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Value.js","sourceRoot":"","sources":["../../src/values/Value.ts"],"names":[],"mappings":"AAAA,MAAM,KAAK,GAAG,8BAA8B,CAAC;AAE7C,MAAM,CAAC,OAAO,OAAO,KAAK;IACzB,GAAG,CAAS;IACZ,IAAI,CAAgB;IAEpB,YAAY,GAAW,EAAE,OAAsB,IAAI;QAClD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,CAAkB;QAC9B,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC3B,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;QAED,aAAa;QACb,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEtC,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,EAAE,CAAC,KAAY;QACd,OAAO,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,SAAwB,IAAI;QACjC,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAEzD,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,QAAQ,CAAC,GAAW;QACnB,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,QAAQ,CAAC,GAAW;QACnB,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,eAAe,CAAC,IAAmB;QAClC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,QAAQ;QACP,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;CACD"}
@@ -0,0 +1,2 @@
1
+ export declare const COLORS: Record<string, [number, number, number]>;
2
+ //# sourceMappingURL=defaultcolors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultcolors.d.ts","sourceRoot":"","sources":["../../src/values/defaultcolors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAmJ3D,CAAC"}