@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.
- package/README.md +112 -109
- package/dist/preact/preact.d.mts +62 -0
- package/dist/preact/preact.d.mts.map +1 -0
- package/dist/preact/preact.mjs +181 -0
- package/dist/preact/preact.mjs.map +1 -0
- package/dist/react/react.d.mts +62 -0
- package/dist/react/react.d.mts.map +1 -0
- package/dist/react/react.mjs +183 -0
- package/dist/react/react.mjs.map +1 -0
- package/dist/solid/solid.d.mts +60 -0
- package/dist/solid/solid.d.mts.map +1 -0
- package/dist/solid/solid.mjs +157 -0
- package/dist/solid/solid.mjs.map +1 -0
- package/dist/svelte/svelte.d.mts.map +1 -0
- package/dist/svelte/svelte.mjs.map +1 -0
- package/dist/svelte/tween.svelte.d.ts +58 -0
- package/dist/svelte/tween.svelte.js +156 -0
- package/dist/tween/index.d.mts +939 -0
- package/dist/tween/index.d.mts.map +1 -0
- package/dist/tween/index.mjs +1929 -0
- package/dist/tween/index.mjs.map +1 -0
- package/dist/tween.min.js +8 -0
- package/dist/tween.min.js.map +1 -0
- package/dist/vue/vue.d.mts +61 -0
- package/dist/vue/vue.d.mts.map +1 -0
- package/dist/vue/vue.mjs +157 -0
- package/dist/vue/vue.mjs.map +1 -0
- package/package.json +49 -40
- package/dist/index.cjs +0 -621
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -184
- package/dist/index.d.mts +0 -184
- package/dist/index.mjs +0 -610
- package/dist/index.mjs.map +0 -1
- package/dist/react.cjs +0 -61
- package/dist/react.cjs.map +0 -1
- package/dist/react.d.cts +0 -9
- package/dist/react.d.mts +0 -9
- package/dist/react.mjs +0 -55
- package/dist/react.mjs.map +0 -1
- package/dist/solid.cjs +0 -81
- package/dist/solid.cjs.map +0 -1
- package/dist/solid.d.cts +0 -9
- package/dist/solid.d.mts +0 -9
- package/dist/solid.mjs +0 -75
- package/dist/solid.mjs.map +0 -1
- package/dist/tween.iife.js +0 -2
- package/dist/tween.iife.js.map +0 -1
- package/wiki/Easing.md +0 -58
- package/wiki/React.md +0 -255
- package/wiki/Solid.md +0 -149
- package/wiki/Timeline.md +0 -207
- 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
|