chnobli 0.1.5 → 0.1.6

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 (237) hide show
  1. package/.prettierignore +4 -0
  2. package/.prettierrc +6 -0
  3. package/.vscode/settings.json +4 -0
  4. package/auto-docs/easing.js.html +342 -0
  5. package/auto-docs/fonts/OpenSans-Bold-webfont.eot +0 -0
  6. package/auto-docs/fonts/OpenSans-Bold-webfont.svg +1830 -0
  7. package/auto-docs/fonts/OpenSans-Bold-webfont.woff +0 -0
  8. package/auto-docs/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
  9. package/auto-docs/fonts/OpenSans-BoldItalic-webfont.svg +1830 -0
  10. package/auto-docs/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
  11. package/auto-docs/fonts/OpenSans-Italic-webfont.eot +0 -0
  12. package/auto-docs/fonts/OpenSans-Italic-webfont.svg +1830 -0
  13. package/auto-docs/fonts/OpenSans-Italic-webfont.woff +0 -0
  14. package/auto-docs/fonts/OpenSans-Light-webfont.eot +0 -0
  15. package/auto-docs/fonts/OpenSans-Light-webfont.svg +1831 -0
  16. package/auto-docs/fonts/OpenSans-Light-webfont.woff +0 -0
  17. package/auto-docs/fonts/OpenSans-LightItalic-webfont.eot +0 -0
  18. package/auto-docs/fonts/OpenSans-LightItalic-webfont.svg +1835 -0
  19. package/auto-docs/fonts/OpenSans-LightItalic-webfont.woff +0 -0
  20. package/auto-docs/fonts/OpenSans-Regular-webfont.eot +0 -0
  21. package/auto-docs/fonts/OpenSans-Regular-webfont.svg +1831 -0
  22. package/auto-docs/fonts/OpenSans-Regular-webfont.woff +0 -0
  23. package/auto-docs/global.html +4810 -0
  24. package/auto-docs/index.html +65 -0
  25. package/auto-docs/scripts/linenumber.js +25 -0
  26. package/auto-docs/scripts/prettify/Apache-License-2.0.txt +202 -0
  27. package/auto-docs/scripts/prettify/lang-css.js +2 -0
  28. package/auto-docs/scripts/prettify/prettify.js +28 -0
  29. package/auto-docs/styles/jsdoc-default.css +358 -0
  30. package/auto-docs/styles/prettify-jsdoc.css +111 -0
  31. package/auto-docs/styles/prettify-tomorrow.css +132 -0
  32. package/dist/animation/Animation.d.ts +36 -0
  33. package/dist/animation/Animation.d.ts.map +1 -0
  34. package/dist/animation/Animation.js +230 -0
  35. package/dist/animation/Animation.js.map +1 -0
  36. package/dist/animation/animation.d.ts +36 -0
  37. package/dist/animation/animation.d.ts.map +1 -0
  38. package/dist/animation/animation.js +230 -0
  39. package/dist/animation/animation.js.map +1 -0
  40. package/dist/animation/public.d.ts +55 -0
  41. package/dist/animation/public.d.ts.map +1 -0
  42. package/dist/animation/public.js +104 -0
  43. package/dist/animation/public.js.map +1 -0
  44. package/dist/chnobli.d.ts +15 -0
  45. package/dist/chnobli.d.ts.map +1 -0
  46. package/dist/chnobli.js +63 -0
  47. package/dist/chnobli.js.map +1 -0
  48. package/dist/property/BasicProperty.d.ts +38 -0
  49. package/dist/property/BasicProperty.d.ts.map +1 -0
  50. package/dist/property/BasicProperty.js +72 -0
  51. package/dist/property/BasicProperty.js.map +1 -0
  52. package/dist/property/ClassProperty.d.ts +32 -0
  53. package/dist/property/ClassProperty.d.ts.map +1 -0
  54. package/dist/property/ClassProperty.js +108 -0
  55. package/dist/property/ClassProperty.js.map +1 -0
  56. package/dist/property/Property.d.ts +13 -0
  57. package/dist/property/Property.d.ts.map +1 -0
  58. package/dist/property/Property.js +20 -0
  59. package/dist/property/Property.js.map +1 -0
  60. package/dist/property/StyleProperty.d.ts +25 -0
  61. package/dist/property/StyleProperty.d.ts.map +1 -0
  62. package/dist/property/StyleProperty.js +221 -0
  63. package/dist/property/StyleProperty.js.map +1 -0
  64. package/dist/property/TransformProperty.d.ts +15 -0
  65. package/dist/property/TransformProperty.d.ts.map +1 -0
  66. package/dist/property/TransformProperty.js +43 -0
  67. package/dist/property/TransformProperty.js.map +1 -0
  68. package/dist/property/TransformXYProperty.d.ts +28 -0
  69. package/dist/property/TransformXYProperty.d.ts.map +1 -0
  70. package/dist/property/TransformXYProperty.js +65 -0
  71. package/dist/property/TransformXYProperty.js.map +1 -0
  72. package/dist/responsive/ResponsiveEvent.d.ts +17 -0
  73. package/dist/responsive/ResponsiveEvent.d.ts.map +1 -0
  74. package/dist/responsive/ResponsiveEvent.js +45 -0
  75. package/dist/responsive/ResponsiveEvent.js.map +1 -0
  76. package/dist/responsive/TestEvent.d.ts +11 -0
  77. package/dist/responsive/TestEvent.d.ts.map +1 -0
  78. package/dist/responsive/TestEvent.js +26 -0
  79. package/dist/responsive/TestEvent.js.map +1 -0
  80. package/dist/responsive/event.d.ts +10 -0
  81. package/dist/responsive/event.d.ts.map +1 -0
  82. package/dist/responsive/event.js +39 -0
  83. package/dist/responsive/event.js.map +1 -0
  84. package/dist/scroll/Scroll.d.ts +27 -0
  85. package/dist/scroll/Scroll.d.ts.map +1 -0
  86. package/dist/scroll/Scroll.js +132 -0
  87. package/dist/scroll/Scroll.js.map +1 -0
  88. package/dist/scroll/ScrollEvent.d.ts +17 -0
  89. package/dist/scroll/ScrollEvent.d.ts.map +1 -0
  90. package/dist/scroll/ScrollEvent.js +39 -0
  91. package/dist/scroll/ScrollEvent.js.map +1 -0
  92. package/dist/scroll/public.d.ts +7 -0
  93. package/dist/scroll/public.d.ts.map +1 -0
  94. package/dist/scroll/public.js +17 -0
  95. package/dist/scroll/public.js.map +1 -0
  96. package/dist/stagger/stagger.d.ts +13 -0
  97. package/dist/stagger/stagger.d.ts.map +1 -0
  98. package/dist/stagger/stagger.js +35 -0
  99. package/dist/stagger/stagger.js.map +1 -0
  100. package/dist/target/BaseTarget.old.d.ts +33 -0
  101. package/dist/target/BaseTarget.old.d.ts.map +1 -0
  102. package/dist/target/BaseTarget.old.js +73 -0
  103. package/dist/target/BaseTarget.old.js.map +1 -0
  104. package/dist/target/DomTarget.d.ts +41 -0
  105. package/dist/target/DomTarget.d.ts.map +1 -0
  106. package/dist/target/DomTarget.js +230 -0
  107. package/dist/target/DomTarget.js.map +1 -0
  108. package/dist/target/Target.d.ts +22 -0
  109. package/dist/target/Target.d.ts.map +1 -0
  110. package/dist/target/Target.js +21 -0
  111. package/dist/target/Target.js.map +1 -0
  112. package/dist/target/TestDomNode.d.ts +14 -0
  113. package/dist/target/TestDomNode.d.ts.map +1 -0
  114. package/dist/target/TestDomNode.js +55 -0
  115. package/dist/target/TestDomNode.js.map +1 -0
  116. package/dist/timeline/Nested.d.ts +30 -0
  117. package/dist/timeline/Nested.d.ts.map +1 -0
  118. package/dist/timeline/Nested.js +51 -0
  119. package/dist/timeline/Nested.js.map +1 -0
  120. package/dist/timeline/TimeLine.d.ts +32 -0
  121. package/dist/timeline/TimeLine.d.ts.map +1 -0
  122. package/dist/timeline/TimeLine.js +288 -0
  123. package/dist/timeline/TimeLine.js.map +1 -0
  124. package/dist/timeline/public.d.ts +120 -0
  125. package/dist/timeline/public.d.ts.map +1 -0
  126. package/dist/timeline/public.js +301 -0
  127. package/dist/timeline/public.js.map +1 -0
  128. package/dist/timing/AnimationFrameTicker.d.ts +32 -0
  129. package/dist/timing/AnimationFrameTicker.d.ts.map +1 -0
  130. package/dist/timing/AnimationFrameTicker.js +134 -0
  131. package/dist/timing/AnimationFrameTicker.js.map +1 -0
  132. package/dist/timing/Ease.d.ts +6 -0
  133. package/dist/timing/Ease.d.ts.map +1 -0
  134. package/dist/timing/Ease.js +15 -0
  135. package/dist/timing/Ease.js.map +1 -0
  136. package/dist/timing/TestTicker.d.ts +19 -0
  137. package/dist/timing/TestTicker.d.ts.map +1 -0
  138. package/dist/timing/TestTicker.js +81 -0
  139. package/dist/timing/TestTicker.js.map +1 -0
  140. package/dist/timing/Ticker.d.ts +14 -0
  141. package/dist/timing/Ticker.d.ts.map +1 -0
  142. package/dist/timing/Ticker.js +2 -0
  143. package/dist/timing/Ticker.js.map +1 -0
  144. package/dist/timing/Timing.d.ts +62 -0
  145. package/dist/timing/Timing.d.ts.map +1 -0
  146. package/dist/timing/Timing.js +257 -0
  147. package/dist/timing/Timing.js.map +1 -0
  148. package/dist/timing/easing.d.ts +158 -0
  149. package/dist/timing/easing.d.ts.map +1 -0
  150. package/dist/timing/easing.js +273 -0
  151. package/dist/timing/easing.js.map +1 -0
  152. package/dist/utils/Events.d.ts +9 -0
  153. package/dist/utils/Events.d.ts.map +1 -0
  154. package/dist/utils/Events.js +35 -0
  155. package/dist/utils/Events.js.map +1 -0
  156. package/dist/utils/internal.d.ts +2 -0
  157. package/dist/utils/internal.d.ts.map +1 -0
  158. package/dist/utils/internal.js +6 -0
  159. package/dist/utils/internal.js.map +1 -0
  160. package/dist/utils/motionpath.d.ts +16 -0
  161. package/dist/utils/motionpath.d.ts.map +1 -0
  162. package/dist/utils/motionpath.js +41 -0
  163. package/dist/utils/motionpath.js.map +1 -0
  164. package/dist/utils/utils.d.ts +43 -0
  165. package/dist/utils/utils.d.ts.map +1 -0
  166. package/dist/utils/utils.js +93 -0
  167. package/dist/utils/utils.js.map +1 -0
  168. package/dist/values/ColorValue.d.ts +12 -0
  169. package/dist/values/ColorValue.d.ts.map +1 -0
  170. package/dist/values/ColorValue.js +133 -0
  171. package/dist/values/ColorValue.js.map +1 -0
  172. package/dist/values/StyleValue.d.ts +40 -0
  173. package/dist/values/StyleValue.d.ts.map +1 -0
  174. package/dist/values/StyleValue.js +149 -0
  175. package/dist/values/StyleValue.js.map +1 -0
  176. package/dist/values/Value.d.ts +13 -0
  177. package/dist/values/Value.d.ts.map +1 -0
  178. package/dist/values/Value.js +38 -0
  179. package/dist/values/Value.js.map +1 -0
  180. package/dist/values/defaultcolors.d.ts +2 -0
  181. package/dist/values/defaultcolors.d.ts.map +1 -0
  182. package/dist/values/defaultcolors.js +149 -0
  183. package/dist/values/defaultcolors.js.map +1 -0
  184. package/package.json +11 -7
  185. package/src/animation/{animation.js → Animation.ts} +56 -54
  186. package/src/animation/{public.js → public.ts} +23 -18
  187. package/src/{chnobli.js → chnobli.ts} +11 -12
  188. package/src/property/BasicProperty.ts +91 -0
  189. package/src/property/ClassProperty.ts +132 -0
  190. package/src/property/Property.ts +33 -0
  191. package/src/property/StyleProperty.ts +273 -0
  192. package/src/property/TransformProperty.ts +56 -0
  193. package/src/property/TransformXYProperty.ts +88 -0
  194. package/src/responsive/ResponsiveEvent.ts +60 -0
  195. package/src/responsive/{testevent.js → TestEvent.ts} +12 -10
  196. package/src/scroll/{scroll.js → Scroll.ts} +53 -35
  197. package/src/scroll/ScrollEvent.ts +53 -0
  198. package/src/scroll/public.ts +20 -0
  199. package/src/stagger/stagger.ts +45 -0
  200. package/src/target/{basetarget.js → BaseTarget.old.ts} +25 -26
  201. package/src/target/DomTarget.ts +281 -0
  202. package/src/target/Target.ts +48 -0
  203. package/src/target/{testdomnode.js → TestDomNode.ts} +18 -15
  204. package/src/tests/{properties.test.js → properties.test.ts} +54 -49
  205. package/src/tests/{timeline.test.js → timeline.test.ts} +92 -75
  206. package/src/tests/{timing.test.js → timing.test.ts} +25 -22
  207. package/src/tests/{usecases.test.js → usecases.test.ts} +13 -10
  208. package/src/tests/{values.test.js → values.test.ts} +21 -21
  209. package/src/timeline/{nested.js → Nested.ts} +18 -12
  210. package/src/timeline/{timeline.js → TimeLine.ts} +100 -60
  211. package/src/timeline/{public.js → public.ts} +75 -60
  212. package/src/timing/{ticker.js → AnimationFrameTicker.ts} +36 -21
  213. package/src/timing/{ease.js → Ease.ts} +6 -5
  214. package/src/timing/{testticker.js → TestTicker.ts} +27 -24
  215. package/src/timing/Ticker.ts +11 -0
  216. package/src/timing/{timing.js → Timing.ts} +72 -63
  217. package/src/timing/{easing.js → easing.ts} +52 -43
  218. package/src/utils/{events.js → Events.ts} +12 -11
  219. package/src/utils/internal.ts +10 -0
  220. package/src/utils/{motionpath.js → motionpath.ts} +36 -13
  221. package/src/utils/utils.ts +110 -0
  222. package/src/values/{colorvalue.js → ColorValue.ts} +46 -47
  223. package/src/values/StyleValue.ts +186 -0
  224. package/src/values/{value.js → Value.ts} +14 -12
  225. package/src/values/{defaultcolors.js → defaultcolors.ts} +2 -2
  226. package/tsconfig.build.json +19 -0
  227. package/tsconfig.json +17 -108
  228. package/src/animation/property.js +0 -556
  229. package/src/responsive/event.js +0 -46
  230. package/src/scroll/event.js +0 -41
  231. package/src/scroll/public.js +0 -17
  232. package/src/stagger/stagger.js +0 -42
  233. package/src/target/domtarget.js +0 -266
  234. package/src/target/target.js +0 -22
  235. package/src/utils/internal.js +0 -7
  236. package/src/utils/utils.js +0 -107
  237. package/src/values/stylevalue.js +0 -148
@@ -1,46 +0,0 @@
1
- export default class ResponsiveEvent {
2
- constructor() {
3
- this._listeners = new Set;
4
-
5
- window.addEventListener('resize', e => this._onResize(e));
6
- }
7
-
8
- static global() {
9
- // allow to define a test ticker
10
- if (typeof globalThis !== 'undefined' && globalThis.chnobliResponsive)
11
- return globalThis.chnobliResponsive;
12
-
13
- if (typeof window === 'undefined')
14
- return null;
15
-
16
- if (typeof window.chnobliResponsive === 'undefined')
17
- window.chnobliResponsive = new ResponsiveEvent;
18
- return window.chnobliResponsive;
19
- }
20
-
21
- // fn({ width, height }, { remove() })
22
- add(fn) {
23
- this._listeners.add(fn);
24
-
25
- return {
26
- remove: () => {
27
- this.remove(fn);
28
- }
29
- };
30
- }
31
-
32
- remove(fn) {
33
- this._listeners.delete(fn);
34
- }
35
-
36
- _onResize(_e) {
37
- for (const fn of this._listeners) {
38
- fn({
39
- width: window.innerWidth,
40
- height: window.innerHeight
41
- }, {
42
- remove: () => this.remove(fn)
43
- });
44
- }
45
- }
46
- }
@@ -1,41 +0,0 @@
1
- export default class ScrollEvent {
2
- constructor() {
3
- this._listeners = new Set;
4
-
5
- window.addEventListener('scroll', e => this._onScroll(e));
6
- }
7
-
8
- static global() {
9
- if (typeof window === 'undefined')
10
- return null;
11
-
12
- if (typeof window.chnobliScroll === 'undefined')
13
- window.chnobliScroll = new ScrollEvent;
14
- return window.chnobliScroll;
15
- }
16
-
17
- add(fn) {
18
- this._listeners.add(fn);
19
-
20
- return {
21
- remove: () => {
22
- this.remove(fn);
23
- }
24
- };
25
- }
26
-
27
- remove(fn) {
28
- this._listeners.delete(fn);
29
- }
30
-
31
- _onScroll(_e) {
32
- for (const fn of this._listeners) {
33
- fn({
34
- y: window.scrollY,
35
- height: window.innerHeight
36
- }, {
37
- remove: () => this.remove(fn)
38
- });
39
- }
40
- }
41
- }
@@ -1,17 +0,0 @@
1
- import Scroll from './scroll.js';
2
-
3
- export default class PublicScroll {
4
- /*
5
- {
6
- start: el | px
7
- startView: 'top'
8
- }
9
- */
10
- constructor(props = {}) {
11
- this._inner = new Scroll(props);
12
- }
13
-
14
- add(timeline) {
15
- this._inner.addTimeline(timeline);
16
- }
17
- }
@@ -1,42 +0,0 @@
1
- /**
2
- * Staggering allows to have a different value for every target
3
- * allowing to easely offset each target by a few pixels
4
- */
5
-
6
- function isStagger(value) {
7
- return typeof value === 'object' &&
8
- value !== null &&
9
- typeof value.__isStagger__ === 'function';
10
- }
11
-
12
- export function callStagger(value, i, l) {
13
- if (isStagger(value))
14
- return value.call(i, l);
15
-
16
- return value;
17
- }
18
-
19
- export function staggerMap(value, fn) {
20
- if (isStagger(value))
21
- return new Stagger((...args) => fn(value.call(...args)));
22
-
23
- return fn(value);
24
- }
25
-
26
- export default class Stagger {
27
- constructor(value) {
28
- if (typeof value === 'function') {
29
- this.fn = value;
30
- return;
31
- }
32
-
33
- // if (value === )
34
- throw new Error('unknown stagger value ' + value);
35
- }
36
-
37
- call(...args) {
38
- return this.fn(...args);
39
- }
40
-
41
- __isStagger__() {}
42
- }
@@ -1,266 +0,0 @@
1
- import BaseTarget from './basetarget.js';
2
- import Value from '../values/value.js';
3
- import StyleValue from '../values/stylevalue.js';
4
-
5
-
6
- export default class DomTarget extends BaseTarget {
7
- /**
8
- * target a dom node or svg
9
- *
10
- * extFns: {getComputedStyle, getRootElement}
11
- */
12
- constructor(target, extFns) {
13
- super(target);
14
-
15
- this._extFns = extFns;
16
-
17
- // for the moment
18
-
19
- this.transformValues = new Map;
20
- this.styleValues = new Map;
21
- this.values = new Map;
22
- }
23
-
24
- type() {
25
- return 'dom';
26
- }
27
-
28
- getValue(name) {
29
- return this.values.get(name);
30
- }
31
-
32
- setValue(name, value) {
33
- this.values.set(name, value);
34
- }
35
-
36
- removeValue(name) {
37
- this.values.delete(name);
38
- }
39
-
40
- getTransformValue(name) {
41
- const [fn, idx] = TRANSFORM_PROPS[name] ?? [];
42
- if (!fn)
43
- return null;
44
-
45
- const r = this.transformValues.get(fn);
46
- return r?.[idx ?? 0] ?? null;
47
- }
48
-
49
- setTransformValue(name, value) {
50
- const [fn, idx] = TRANSFORM_PROPS[name] ?? [];
51
- if (!fn)
52
- throw new Error('unknown transform ' + name);
53
-
54
- let vals = this.transformValues.get(fn);
55
- if (!vals)
56
- vals = Array(TRANSFORM_FUNCTIONS[fn].length).fill(null);
57
-
58
- if (idx === null)
59
- vals = vals.map(() => value.clone());
60
- else
61
- vals[idx] = value;
62
-
63
- this.transformValues.set(fn, vals);
64
- }
65
-
66
- removeTransformValue(name) {
67
- const [fn, idx] = TRANSFORM_PROPS[name] ?? [];
68
- if (!fn)
69
- return;
70
-
71
- if (idx === null) {
72
- this.transformValues.delete(fn);
73
- return;
74
- }
75
-
76
- let vals = this.transformValues.get(fn);
77
- if (!vals)
78
- return;
79
-
80
- vals[idx] = null;
81
-
82
- if (vals.every(v => v === null))
83
- this.transformValues.delete(fn);
84
- }
85
-
86
- getStyleValue(name) {
87
- const v = this.styleValues.get(name);
88
-
89
- if (typeof v === 'undefined' || v === null) {
90
- // let's try to get it from the dom
91
- const style = this._extFns.getComputedStyle(this.target);
92
- const styleV = style.getPropertyValue(name);
93
-
94
- if (typeof styleV === 'undefined' || styleV === null)
95
- return styleV;
96
-
97
- try {
98
- const value = StyleValue.parse(styleV);
99
- this.styleValues.set(name, value);
100
-
101
- return value;
102
- } catch (e) {
103
- console.log('could not parse value', styleV);
104
- return v;
105
- }
106
- } else
107
- return v;
108
- }
109
-
110
- setStyleValue(name, value) {
111
- this.styleValues.set(name, value);
112
- }
113
-
114
- removeStyleValue(name) {
115
- this.styleValues.set(name, undefined);
116
- }
117
-
118
- hasClass(name) {
119
- return this.target.classList.contains(name);
120
- }
121
-
122
- addClass(name) {
123
- return this.target.classList.add(name);
124
- }
125
-
126
- removeClass(name) {
127
- return this.target.classList.remove(name);
128
- }
129
-
130
- _getRem() {
131
- const rootEl = this._extFns.getRootElement();
132
- const style = this._extFns.getComputedStyle(rootEl);
133
- const fontSize = Value.parse(style.fontSize, 'px');
134
- if (fontSize.unit !== 'px')
135
- throw new Error('rem could not be determined');
136
-
137
- return fontSize.num;
138
- }
139
-
140
- _convertToPx(name, value) {
141
- if (value.num === 0)
142
- return new Value(0, 'px');
143
-
144
- switch (value.unit) {
145
- case 'px':
146
- return value;
147
- case 'rem':
148
- return new Value(value.num * this._getRem(), 'px');
149
- default:
150
- throw new Error(
151
- `cannot convert ${name} from ${value.unit} to px`
152
- );
153
- }
154
- }
155
-
156
- // value needs to be a unit with pixels
157
- _convertFromPx(name, value, unit) {
158
- if (value.num === 0)
159
- return new Value(0, unit);
160
-
161
- let v;
162
- switch (unit) {
163
- case 'px':
164
- return value;
165
-
166
- case 'rem':
167
- return new Value(value.num / this._getRem(), 'rem');
168
-
169
- case '%':
170
- v = this.getStyleValue(name).intoValue();
171
- if (v.unit !== 'px')
172
- throw new Error('cannot get style value of ' + name);
173
-
174
- return new Value((value.num / v.num) * 100, '%');
175
-
176
- default:
177
- throw new Error(
178
- `cannot convert ${name} from px to ${unit}`
179
- );
180
- }
181
- }
182
-
183
- unifyValues(name, a, b) {
184
- if (a.unit === b.unit)
185
- return [a, b];
186
-
187
- if (!a.unit && b.unit)
188
- a.unit = b.unit;
189
-
190
- if (!b.unit && a.unit)
191
- b.unit = a.unit;
192
-
193
- const aPx = this._convertToPx(name, a);
194
- const aBUnit = this._convertFromPx(name, aPx, b.unit);
195
-
196
- return [aBUnit, b];
197
- }
198
-
199
- apply() {
200
- this.target.style.transform = Array.from(this.transformValues.entries())
201
- .map(([k, vals]) => {
202
- // since we allow null in default Values we now need to make
203
- // sure either a value or a default value are set for the
204
- // transform function
205
-
206
- const defVals = TRANSFORM_FUNCTIONS[k];
207
- if (vals.length !== defVals.length)
208
- throw new Error('transform values don\'t match');
209
-
210
- const nArray = Array(vals.length);
211
-
212
- for (let i = 0; i < vals.length; i++) {
213
- let val = vals[i];
214
-
215
- if (val === null)
216
- val = new Value(defVals[i][0]);
217
-
218
- nArray[i] = val.withDefaultUnit(defVals[i][1]);
219
- }
220
-
221
- return `${k}(${nArray.join(',')})`;
222
- })
223
- .join(' ');
224
-
225
- // style
226
- for (const [k, v] of this.styleValues.entries()) {
227
- if (v === undefined) {
228
- this.target.style.removeProperty(k);
229
- // is this a problem?
230
- this.styleValues.delete(k);
231
- } else {
232
- this.target.style.setProperty(k, v.toString());
233
- }
234
- }
235
-
236
- // values
237
- for (const [k, _v] of this.values.entries()) {
238
- console.log('what todo with this ' + k);
239
- }
240
- }
241
- }
242
-
243
-
244
- const TRANSFORM_PROPS = {
245
- 'x': ['translate3d', 0],
246
- 'y': ['translate3d', 1],
247
- 'z': ['translate3d', 2],
248
- 'scale': ['scale3d', null],
249
- 'scaleX': ['scale3d', 0],
250
- 'scaleY': ['scale3d', 1],
251
- 'scaleZ': ['scale3d', 2],
252
- 'rotate': ['rotate3d', null],
253
- 'rotateX': ['rotate3d', 0],
254
- 'rotateY': ['rotate3d', 1],
255
- 'rotateZ': ['rotate3d', 2],
256
- 'skew': ['skew', 0],
257
- 'skewX': ['skew', 0],
258
- 'skewY': ['skew', 1]
259
- };
260
-
261
- const TRANSFORM_FUNCTIONS = {
262
- 'translate3d': [[0, 'px'], [0, 'px'], [0, 'px']],
263
- 'scale3d': [[1, null], [1, null], [1, null]],
264
- 'rotate3d': [[0, 'deg'], [0, 'deg'], [0, 'deg']],
265
- 'skew': [[0, 'deg'], [0, 'deg']]
266
- };
@@ -1,22 +0,0 @@
1
- import DomTarget from './domtarget.js';
2
-
3
-
4
- export function newTarget(target) {
5
- if (typeof window === 'undefined') {
6
- if (typeof target.__simulatedDom__ === 'function') {
7
- return new DomTarget(target, {
8
- getComputedStyle: target.__getComputedStyleFn__(),
9
- getRootElement: target.__getRootElementFn__()
10
- });
11
- }
12
- } else {
13
- if (target instanceof HTMLElement || target instanceof SVGElement) {
14
- return new DomTarget(target, {
15
- getComputedStyle: e => window.getComputedStyle(e),
16
- getRootElement: () => document.documentElement
17
- });
18
- }
19
- }
20
-
21
- throw new Error('unknown target');
22
- }
@@ -1,7 +0,0 @@
1
-
2
- export function takeProp(props, name, def = null) {
3
- const v = props[name] ?? def;
4
- delete props[name];
5
-
6
- return v;
7
- }
@@ -1,107 +0,0 @@
1
- import { curve } from './motionpath.js';
2
-
3
- export { curve };
4
-
5
- /**
6
- * Explicitly tells a property to animate the to value
7
- */
8
- export function to(to) {
9
- return { to };
10
- }
11
-
12
- /**
13
- * Explicitly tells a property to animate the from value
14
- */
15
- export function from(from) {
16
- return { from };
17
- }
18
-
19
- /**
20
- * Explicitly tells a property to animate with the from and to values
21
- */
22
- export function fromTo(from, to) {
23
- return { from, to };
24
- }
25
-
26
- /**
27
- * makes a value reactive to `Timeline::update` calls or resizes
28
- */
29
- export function responsive(fn) {
30
- return { responsive: fn };
31
- }
32
-
33
- /**
34
- * Converts an element with text into span with chars
35
- */
36
- export function chars(element) {
37
- if (element.dataset.processedChars)
38
- return Array.from(element.children);
39
-
40
- const chars = element.textContent.split('');
41
-
42
- element.textContent = '';
43
- element.dataset.processedChars = 'yes';
44
-
45
- return chars.map(c => {
46
- if (c.trim().length === 0) {
47
- element.appendChild(document.createTextNode(c));
48
- return null;
49
- }
50
-
51
- const span = document.createElement('span');
52
- span.textContent = c;
53
- span.style.display = 'inline-block';
54
- element.appendChild(span);
55
-
56
- return span;
57
- }).filter(c => !!c);
58
- }
59
-
60
- /**
61
- * Converts an element with text into span with words
62
- */
63
- export function words(element) {
64
- if (element.dataset.processedWords)
65
- return Array.from(element.children);
66
-
67
- const words = element.textContent.split(/(\s+)/);
68
-
69
- element.textContent = '';
70
- element.dataset.processedWords = 'yes';
71
-
72
- return words.map(word => {
73
- if (word.trim().length === 0) {
74
- element.appendChild(document.createTextNode(word));
75
- return null;
76
- }
77
-
78
- const span = document.createElement('span');
79
- span.textContent = word;
80
- span.style.display = 'inline-block';
81
- element.appendChild(span);
82
-
83
- return span;
84
- }).filter(w => !!w);
85
- }
86
-
87
- /**
88
- * get the offset to the current page page
89
- */
90
- export function pageOffset(el) {
91
- if ('offsetTop' in el) {
92
- return {
93
- top: el.offsetTop,
94
- left: el.offsetLeft,
95
- width: el.offsetWidth,
96
- height: el.offsetHeight
97
- };
98
- }
99
-
100
- const rect = el.getBoundingClientRect();
101
- return {
102
- top: window.scrollY + rect.top,
103
- left: window.scrollX + rect.left,
104
- width: rect.width,
105
- height: rect.height
106
- };
107
- }
@@ -1,148 +0,0 @@
1
- import Value from './value.js';
2
- import ColorValue from './colorvalue.js';
3
-
4
- const AT_THE_END_VALUES = ['none', 'hidden'];
5
-
6
- /**
7
- * A value from a style property
8
- *
9
- * might be a textual representation like none|auto|block|var(--abc)
10
- * might be a value with unit or not
11
- * might be multiple values `10 20px 4rem`
12
- *
13
- * values like hidden|none|null|undefined are market as at the end
14
- * which means they should be set at the end
15
- */
16
- export default class StyleValue {
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.kind = 'text';
30
- value = value.trim();
31
- } else if (typeof value === 'number') {
32
- this.kind = 'values';
33
- value = [Value.parse(value)];
34
- } else if (Array.isArray(value)) {
35
- this.kind = 'values';
36
- } else if (value instanceof ColorValue) {
37
- this.kind = 'color';
38
- } else {
39
- throw new Error('unknown style value ' + value);
40
- }
41
-
42
- this.values = value;
43
-
44
- /**
45
- * If this is true the value should be set at the end of a animation
46
- * this only works with kind === text
47
- */
48
- this.textAtTheEnd = this.kind === 'text'
49
- ? AT_THE_END_VALUES.includes(this.values)
50
- : false;
51
- }
52
-
53
-
54
- static parse(v) {
55
- if (typeof v === 'number')
56
- return new StyleValue(v);
57
-
58
- if (Array.isArray(v)) {
59
- const val = v.map(v => Value.parse(v));
60
- return new StyleValue(val);
61
- }
62
-
63
- if (typeof v !== 'string')
64
- throw new Error('expected a string as style value ' + v);
65
-
66
- // let's first try to make it a color
67
- if (ColorValue.mightBeAColor(v))
68
- return new StyleValue(ColorValue.parse(v));
69
-
70
- const split = v.split(' ').map(v => v.trim()).filter(v => !!v);
71
- if (split.length === 0)
72
- throw new Error('style value cannot be empty');
73
-
74
- if (split.length === 1) {
75
- try {
76
- const val = Value.parse(split[0]);
77
- return new StyleValue([val]);
78
- } catch (e) {
79
- // console.log('failed to parse first style value ', e);
80
- return new StyleValue(split[0]);
81
- }
82
- }
83
-
84
- return new StyleValue(split.map(v => Value.parse(v)));
85
- }
86
-
87
- /// only works if the kind is values
88
- get length() {
89
- if (this.kind !== 'values')
90
- throw new Error('only works with kind values');
91
-
92
- return this.values.length;
93
- }
94
-
95
- extendToLength(length) {
96
- if (this.length >= length)
97
- return;
98
-
99
- this.values = Array(length).fill(this.values).flat();
100
- }
101
-
102
- /**
103
- * Throws if the this does not contain exactly one value
104
- */
105
- intoValue() {
106
- if (this.length !== 1)
107
- throw new Error('style value does not contain only one value');
108
-
109
- return this.values[0];
110
- }
111
-
112
- clone() {
113
- if (this.kind === 'text')
114
- return new StyleValue(this.values);
115
-
116
- if (this.kind === 'color')
117
- return new StyleValue(this.values.clone());
118
-
119
- return new StyleValue(this.values.map(v => v.clone()));
120
- }
121
-
122
- /// if this is called with a text value nothing happens
123
- withDefaultUnit(unit) {
124
- if (this.kind === 'text')
125
- return new StyleValue(this.values);
126
-
127
- if (this.kind === 'color')
128
- return new StyleValue(this.values.clone());
129
-
130
- return new StyleValue(this.values.map(v => v.withDefaultUnit(unit)));
131
- }
132
-
133
- toString() {
134
- switch (this.kind) {
135
- case 'text':
136
- return this.values;
137
-
138
- case 'color':
139
- return this.values.toString();
140
-
141
- case 'values':
142
- return this.values.join(' ');
143
-
144
- default:
145
- throw new Error('unknown kind ' + this.kind);
146
- }
147
- }
148
- }