@thednp/tween 0.0.1 → 0.0.3

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 (53) hide show
  1. package/README.md +112 -109
  2. package/dist/preact/preact.d.mts +62 -0
  3. package/dist/preact/preact.d.mts.map +1 -0
  4. package/dist/preact/preact.mjs +181 -0
  5. package/dist/preact/preact.mjs.map +1 -0
  6. package/dist/react/react.d.mts +62 -0
  7. package/dist/react/react.d.mts.map +1 -0
  8. package/dist/react/react.mjs +183 -0
  9. package/dist/react/react.mjs.map +1 -0
  10. package/dist/solid/solid.d.mts +60 -0
  11. package/dist/solid/solid.d.mts.map +1 -0
  12. package/dist/solid/solid.mjs +157 -0
  13. package/dist/solid/solid.mjs.map +1 -0
  14. package/dist/svelte/svelte.d.mts.map +1 -0
  15. package/dist/svelte/svelte.mjs.map +1 -0
  16. package/dist/svelte/tween.svelte.d.ts +58 -0
  17. package/dist/svelte/tween.svelte.js +156 -0
  18. package/dist/tween/index.d.mts +939 -0
  19. package/dist/tween/index.d.mts.map +1 -0
  20. package/dist/tween/index.mjs +1929 -0
  21. package/dist/tween/index.mjs.map +1 -0
  22. package/dist/tween.min.js +8 -0
  23. package/dist/tween.min.js.map +1 -0
  24. package/dist/vue/vue.d.mts +61 -0
  25. package/dist/vue/vue.d.mts.map +1 -0
  26. package/dist/vue/vue.mjs +157 -0
  27. package/dist/vue/vue.mjs.map +1 -0
  28. package/package.json +49 -40
  29. package/dist/index.cjs +0 -621
  30. package/dist/index.cjs.map +0 -1
  31. package/dist/index.d.cts +0 -184
  32. package/dist/index.d.mts +0 -184
  33. package/dist/index.mjs +0 -610
  34. package/dist/index.mjs.map +0 -1
  35. package/dist/react.cjs +0 -61
  36. package/dist/react.cjs.map +0 -1
  37. package/dist/react.d.cts +0 -9
  38. package/dist/react.d.mts +0 -9
  39. package/dist/react.mjs +0 -55
  40. package/dist/react.mjs.map +0 -1
  41. package/dist/solid.cjs +0 -81
  42. package/dist/solid.cjs.map +0 -1
  43. package/dist/solid.d.cts +0 -9
  44. package/dist/solid.d.mts +0 -9
  45. package/dist/solid.mjs +0 -75
  46. package/dist/solid.mjs.map +0 -1
  47. package/dist/tween.iife.js +0 -2
  48. package/dist/tween.iife.js.map +0 -1
  49. package/wiki/Easing.md +0 -58
  50. package/wiki/React.md +0 -255
  51. package/wiki/Solid.md +0 -149
  52. package/wiki/Timeline.md +0 -207
  53. package/wiki/Tween.md +0 -230
@@ -0,0 +1,156 @@
1
+ /*!
2
+ * @thednp/tween utils for Svelte v0.0.3 (https://github.com/thednp/tween)
3
+ * Copyright 2026 © thednp
4
+ * Licensed under MIT (https://github.com/thednp/tween/blob/master/LICENSE)
5
+ */
6
+ "use strict";
7
+
8
+ import { Timeline, Tween, dummyInstance, isArray, isPlainObject, isServer, objectHasProp } from "@thednp/tween";
9
+ import { onDestroy } from "svelte";
10
+
11
+ //#region src/svelte/miniStore.svelte.ts
12
+ const STATE_PROXY = "_proxy";
13
+ const proxyProps = {
14
+ value: 1,
15
+ enumerable: false,
16
+ configurable: false,
17
+ writable: false
18
+ };
19
+ function defineArrayProxy(index, value, target, sourceLen, notifyListeners) {
20
+ const itemIsLast = index === sourceLen - 1;
21
+ if (isArray(value)) {
22
+ const subArray = [];
23
+ const valueLen = value.length;
24
+ value.forEach((itm, idx) => {
25
+ const subItemIsLast = itemIsLast && idx === valueLen - 1;
26
+ let currentItem = itm;
27
+ Object.defineProperty(subArray, idx, {
28
+ get: () => currentItem,
29
+ set: (newValue) => {
30
+ currentItem = newValue;
31
+ if (subItemIsLast) notifyListeners();
32
+ },
33
+ enumerable: true
34
+ });
35
+ });
36
+ target[index] = subArray;
37
+ } else {
38
+ let currentValue = value;
39
+ const getter = () => currentValue;
40
+ const setter = (newVal) => {
41
+ currentValue = newVal;
42
+ if (itemIsLast) notifyListeners();
43
+ };
44
+ Object.defineProperties(target, { [index]: {
45
+ get: getter,
46
+ set: setter,
47
+ enumerable: true
48
+ } });
49
+ }
50
+ }
51
+ function defineStateProxy(key, value, target) {
52
+ let state = $state.raw(value);
53
+ let getter = () => state;
54
+ let setter;
55
+ if (isArray(value)) {
56
+ const arrayProxy = [];
57
+ const valLength = value.length;
58
+ let version = $state.raw(0);
59
+ const getVersion = () => version;
60
+ for (let i = 0; i < valLength; i++) defineArrayProxy(i, value[i], arrayProxy, valLength, () => {
61
+ version = 1 - version;
62
+ });
63
+ getter = () => {
64
+ getVersion();
65
+ return state;
66
+ };
67
+ state = arrayProxy;
68
+ } else {
69
+ setter = (newVal) => state = newVal;
70
+ state = value;
71
+ }
72
+ Object.defineProperties(target, {
73
+ [STATE_PROXY]: proxyProps,
74
+ [key]: {
75
+ get: getter,
76
+ set: setter,
77
+ enumerable: true
78
+ }
79
+ });
80
+ }
81
+ function createMiniState(obj, parentReceiver) {
82
+ if (objectHasProp(obj, STATE_PROXY)) return obj;
83
+ for (const [key, value] of Object.entries(obj)) if (isPlainObject(value)) parentReceiver[key] = createMiniState(value, {});
84
+ else defineStateProxy(key, value, parentReceiver);
85
+ return parentReceiver;
86
+ }
87
+ function miniStore(init) {
88
+ return createMiniState(init, {});
89
+ }
90
+
91
+ //#endregion
92
+ //#region src/svelte/index.svelte.ts
93
+ /**
94
+ * Svelte hook for updating values with Tween.
95
+ *
96
+ * @param initialValues - Initial tween values
97
+ * @returns [store, tween] Tuple of reactive store and Tween instance
98
+ *
99
+ * @example
100
+ * <script lang="ts">
101
+ * const [state, tween] = createTween({ x: 0, y: 0 })
102
+ *
103
+ * // configuration is free-form, no re-render ever happens
104
+ * tween.to({ x: 100, y: 100 })
105
+ *
106
+ * onMount(() => {
107
+ * tween.start()
108
+ * })
109
+ * <\/script>
110
+ *
111
+ * <div style={{ translate: `${state.x}px ${state.y}px` }} />
112
+ */
113
+ function createTween(initialValues) {
114
+ if (isServer) return [initialValues, dummyInstance];
115
+ const store = miniStore(initialValues);
116
+ const tween = new Tween(store);
117
+ onDestroy(() => {
118
+ tween.stop();
119
+ tween.clear();
120
+ });
121
+ return [store, tween];
122
+ }
123
+ /**
124
+ * Svelte hook for sequencing values update with Timeline.
125
+ *
126
+ * @param initialValues - Initial tween values
127
+ * @returns [store, timeline] Tuple of reactive store and Timeline instance
128
+ *
129
+ * @example
130
+ * <script lang="ts">
131
+ * const [state, timeline] = createTimeline({ x: 0, y: 0 })
132
+ *
133
+ * // configuration is free-form
134
+ * timeline.to({ x: 100, y: 100 })
135
+ *
136
+ * onMount(() => {
137
+ * timeline.start()
138
+ * })
139
+ * <\/script>
140
+ *
141
+ * <div style={{ translate: `${state.x}px ${state.y}px` }} />
142
+ */
143
+ function createTimeline(initialValues) {
144
+ if (isServer) return [initialValues, dummyInstance];
145
+ const store = miniStore(initialValues);
146
+ const timeline = new Timeline(store);
147
+ onDestroy(() => {
148
+ timeline.stop();
149
+ timeline.clear();
150
+ });
151
+ return [store, timeline];
152
+ }
153
+
154
+ //#endregion
155
+ export { Timeline, Tween, createTimeline, createTween, miniStore };
156
+ //# sourceMappingURL=svelte.mjs.map