@tarsis/toolkit 0.6.5 → 0.7.0
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/dist/Container-BVX2MW1U.cjs +138 -0
- package/dist/Container-BirkN1fA.js +119 -0
- package/dist/SelectBase-BC6WKZVF.cjs +448 -0
- package/dist/SelectBase-DPcXvMTa.js +399 -0
- package/dist/Slot-SOe-b2n6.cjs +77 -0
- package/dist/Slot-z71j7q57.js +65 -0
- package/dist/animation-BFpILbqb.js +102 -0
- package/dist/animation-BauloIgQ.cjs +119 -0
- package/dist/assets-BMqH4phf.cjs +52 -0
- package/dist/assets-huTvlamy.js +29 -0
- package/dist/audio/fail.mp3 +0 -0
- package/dist/audio/fail.ogg +0 -0
- package/dist/audio/hover.mp3 +0 -0
- package/dist/audio/hover.ogg +0 -0
- package/dist/audio/lock/fail.mp3 +0 -0
- package/dist/audio/lock/fail.ogg +0 -0
- package/dist/audio/lock/hover.mp3 +0 -0
- package/dist/audio/lock/hover.ogg +0 -0
- package/dist/audio/lock/prev-next.mp3 +0 -0
- package/dist/audio/lock/prev-next.ogg +0 -0
- package/dist/audio/lock/select.mp3 +0 -0
- package/dist/audio/lock/select.ogg +0 -0
- package/dist/audio/lock/success.mp3 +0 -0
- package/dist/audio/lock/success.ogg +0 -0
- package/dist/audio/prev-next.mp3 +0 -0
- package/dist/audio/prev-next.ogg +0 -0
- package/dist/audio/select.mp3 +0 -0
- package/dist/audio/select.ogg +0 -0
- package/dist/audio/success.mp3 +0 -0
- package/dist/audio/success.ogg +0 -0
- package/dist/chunk-CKQMccvm.cjs +28 -0
- package/dist/fonts/orbitron/orbitron-black.fnt +426 -0
- package/dist/fonts/orbitron/orbitron-black.png +0 -0
- package/dist/fonts/orbitron-black.fnt +426 -0
- package/dist/fonts/orbitron-black.png +0 -0
- package/dist/gl-B0NhVYRl.cjs +177 -0
- package/dist/gl-BipoEx9s.js +171 -0
- package/dist/hooks.cjs +661 -24
- package/dist/hooks.d.ts +72 -0
- package/dist/hooks.js +635 -1
- package/dist/index.cjs +26708 -384
- package/dist/index.d.ts +913 -27
- package/dist/index.js +26282 -3
- package/dist/layout.cjs +5 -0
- package/dist/layout.d.ts +45 -0
- package/dist/layout.js +2 -0
- package/dist/primitives.cjs +13 -0
- package/dist/primitives.d.ts +178 -0
- package/dist/primitives.js +3 -0
- package/dist/server.cjs +25 -0
- package/dist/server.d.ts +70 -0
- package/dist/server.js +2 -0
- package/dist/styles.css +3872 -2798
- package/dist/tokens-B2AxRYyF.js +434 -0
- package/dist/tokens-DlMougUi.cjs +469 -0
- package/dist/tokens.cjs +12 -0
- package/dist/tokens.d.ts +435 -0
- package/dist/tokens.js +3 -0
- package/dist/useMergeRefs-BM2-gSLn.js +16 -0
- package/dist/useMergeRefs-C_l6omwU.cjs +28 -0
- package/dist/utils-BGgmkNY4.cjs +330 -0
- package/dist/utils-Dw5El_3G.js +222 -0
- package/dist/utils.cjs +44 -38
- package/dist/utils.d.ts +75 -0
- package/dist/utils.js +3 -1
- package/dist/values-BTw18-W5.js +138 -0
- package/dist/values-BqSJ0h9o.cjs +275 -0
- package/package.json +88 -36
- package/dist/gl-Bp3e3vph.js +0 -3258
- package/dist/gl-Duf2UKsB.cjs +0 -3262
- package/dist/index-BcIzOPR7.cjs +0 -116866
- package/dist/index-BjG_vCX_.js +0 -3910
- package/dist/index-ZBjz1bHI.cjs +0 -3912
- package/dist/index-ss50SEnC.js +0 -116503
- package/dist/svg-BT_esDTZ.cjs +0 -236
- package/dist/svg-CQLdTbLk.js +0 -205
- package/dist/useWindowReady-6kIdYolB.cjs +0 -9317
- package/dist/useWindowReady-tUs-ONyG.js +0 -9224
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
require("./chunk-CKQMccvm.cjs");
|
|
2
|
+
const require_animation = require("./animation-BauloIgQ.cjs");
|
|
3
|
+
let react = require("react");
|
|
4
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
5
|
+
//#region src/utils/collections/BoundedMap.ts
|
|
6
|
+
/**
|
|
7
|
+
* LRU map with optional TTL. Evicts least-recently-used entries
|
|
8
|
+
* when maxSize is exceeded, and expired entries on access.
|
|
9
|
+
*/
|
|
10
|
+
function createBoundedMap(options) {
|
|
11
|
+
const store = /* @__PURE__ */ new Map();
|
|
12
|
+
const maxSize = options.maxSize;
|
|
13
|
+
const ttlMs = options.ttlMs ?? null;
|
|
14
|
+
function evictExpired() {
|
|
15
|
+
if (ttlMs === null) return;
|
|
16
|
+
const now = Date.now();
|
|
17
|
+
for (const [key, entry] of store) if (entry.expiresAt !== null && entry.expiresAt <= now) store.delete(key);
|
|
18
|
+
}
|
|
19
|
+
function evictOverflow() {
|
|
20
|
+
while (store.size > maxSize) {
|
|
21
|
+
const oldestKey = store.keys().next().value;
|
|
22
|
+
if (oldestKey === void 0) break;
|
|
23
|
+
store.delete(oldestKey);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
get(key) {
|
|
28
|
+
const entry = store.get(key);
|
|
29
|
+
if (!entry) return void 0;
|
|
30
|
+
if (entry.expiresAt !== null && entry.expiresAt <= Date.now()) {
|
|
31
|
+
store.delete(key);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
store.delete(key);
|
|
35
|
+
store.set(key, entry);
|
|
36
|
+
return entry.value;
|
|
37
|
+
},
|
|
38
|
+
has(key) {
|
|
39
|
+
return this.get(key) !== void 0;
|
|
40
|
+
},
|
|
41
|
+
set(key, value) {
|
|
42
|
+
const expiresAt = ttlMs === null ? null : Date.now() + ttlMs;
|
|
43
|
+
if (store.has(key)) store.delete(key);
|
|
44
|
+
store.set(key, {
|
|
45
|
+
value,
|
|
46
|
+
expiresAt
|
|
47
|
+
});
|
|
48
|
+
evictExpired();
|
|
49
|
+
evictOverflow();
|
|
50
|
+
},
|
|
51
|
+
delete(key) {
|
|
52
|
+
return store.delete(key);
|
|
53
|
+
},
|
|
54
|
+
clear() {
|
|
55
|
+
store.clear();
|
|
56
|
+
},
|
|
57
|
+
get size() {
|
|
58
|
+
evictExpired();
|
|
59
|
+
return store.size;
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//#endregion
|
|
64
|
+
//#region src/utils/ui/chain.tsx
|
|
65
|
+
var chain = (...elements) => {
|
|
66
|
+
return elements.map((element, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: element }), index !== elements.length - 1 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: " • " })] }, index));
|
|
67
|
+
};
|
|
68
|
+
//#endregion
|
|
69
|
+
//#region src/utils/error.ts
|
|
70
|
+
/**
|
|
71
|
+
* Normalises unknown thrown values into proper Error instances.
|
|
72
|
+
* Preserves original Error objects; wraps strings and unknowns.
|
|
73
|
+
*/
|
|
74
|
+
function normalizeError(err) {
|
|
75
|
+
if (err instanceof Error) return err;
|
|
76
|
+
if (typeof err === "string") return new Error(err);
|
|
77
|
+
return /* @__PURE__ */ new Error("Unknown error");
|
|
78
|
+
}
|
|
79
|
+
//#endregion
|
|
80
|
+
//#region src/utils/format.ts
|
|
81
|
+
/**
|
|
82
|
+
* Formats seconds into MM:SS display string.
|
|
83
|
+
*/
|
|
84
|
+
function formatDuration(totalSeconds) {
|
|
85
|
+
return `${Math.floor(totalSeconds / 60)}:${(totalSeconds % 60).toString().padStart(2, "0")}`;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Formats milliseconds into MM:SS.ms display string.
|
|
89
|
+
* Useful for timers and stopwatches.
|
|
90
|
+
*/
|
|
91
|
+
function formatTime(totalMs) {
|
|
92
|
+
const totalSeconds = Math.floor(totalMs / 1e3);
|
|
93
|
+
const minutes = Math.floor(totalSeconds / 60);
|
|
94
|
+
const seconds = totalSeconds % 60;
|
|
95
|
+
const ms = Math.floor(totalMs % 1e3 / 10);
|
|
96
|
+
return `${minutes.toString().padStart(2, "0")}:${seconds.toString().padStart(2, "0")}.${ms.toString().padStart(2, "0")}`;
|
|
97
|
+
}
|
|
98
|
+
//#endregion
|
|
99
|
+
//#region src/utils/math.ts
|
|
100
|
+
/**
|
|
101
|
+
* Math utility functions for animations and interactions
|
|
102
|
+
*/
|
|
103
|
+
function distance(x1, x2, y1, y2) {
|
|
104
|
+
const a = x1 - x2;
|
|
105
|
+
const b = y1 - y2;
|
|
106
|
+
return Math.hypot(a, b);
|
|
107
|
+
}
|
|
108
|
+
function lineEq(y2, y1, x2, x1, currentVal) {
|
|
109
|
+
const m = (y2 - y1) / (x2 - x1);
|
|
110
|
+
const b = y1 - m * x1;
|
|
111
|
+
return m * currentVal + b;
|
|
112
|
+
}
|
|
113
|
+
function lerp(a, b, n) {
|
|
114
|
+
return (1 - n) * a + n * b;
|
|
115
|
+
}
|
|
116
|
+
//#endregion
|
|
117
|
+
//#region src/utils/presence.ts
|
|
118
|
+
/**
|
|
119
|
+
* Create standardized enter/exit motion variants using toolkit tokens.
|
|
120
|
+
* Returns `{ initial, animate, exit }` for framer-motion / motion.
|
|
121
|
+
*/
|
|
122
|
+
var createPresenceVariants = (enter, exit, duration = require_animation.animationDuration.medium, easingCurve = require_animation.easing.easeOutCubic) => ({
|
|
123
|
+
initial: exit,
|
|
124
|
+
animate: {
|
|
125
|
+
...enter,
|
|
126
|
+
transition: {
|
|
127
|
+
duration,
|
|
128
|
+
ease: easingCurve
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
exit: {
|
|
132
|
+
...exit,
|
|
133
|
+
transition: {
|
|
134
|
+
duration,
|
|
135
|
+
ease: easingCurve
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
var fadePresence = createPresenceVariants({ opacity: 1 }, { opacity: 0 }, require_animation.animationDuration.fast);
|
|
140
|
+
var slideUpPresence = createPresenceVariants({
|
|
141
|
+
opacity: 1,
|
|
142
|
+
y: 0
|
|
143
|
+
}, {
|
|
144
|
+
opacity: 0,
|
|
145
|
+
y: 8
|
|
146
|
+
});
|
|
147
|
+
var scalePresence = createPresenceVariants({
|
|
148
|
+
opacity: 1,
|
|
149
|
+
scale: 1
|
|
150
|
+
}, {
|
|
151
|
+
opacity: 0,
|
|
152
|
+
scale: .95
|
|
153
|
+
}, require_animation.animationDuration.short);
|
|
154
|
+
var slideDownPresence = createPresenceVariants({
|
|
155
|
+
opacity: 1,
|
|
156
|
+
y: 0
|
|
157
|
+
}, {
|
|
158
|
+
opacity: 0,
|
|
159
|
+
y: -8
|
|
160
|
+
});
|
|
161
|
+
//#endregion
|
|
162
|
+
//#region src/utils/promise.ts
|
|
163
|
+
function delay(ms) {
|
|
164
|
+
return new Promise((resolve) => {
|
|
165
|
+
setTimeout(() => {
|
|
166
|
+
resolve(void 0);
|
|
167
|
+
}, ms);
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
var wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
171
|
+
//#endregion
|
|
172
|
+
//#region src/utils/svg.ts
|
|
173
|
+
function getPath(x, smoothing) {
|
|
174
|
+
const points = [
|
|
175
|
+
[2, 2],
|
|
176
|
+
[12 - x, 12 + x],
|
|
177
|
+
[22, 22]
|
|
178
|
+
];
|
|
179
|
+
const calculateControlPoint = (current, previous, next, reverse) => {
|
|
180
|
+
const p = previous || current;
|
|
181
|
+
const n = next || current;
|
|
182
|
+
const o = {
|
|
183
|
+
length: Math.sqrt(Math.pow(n[0] - p[0], 2) + Math.pow(n[1] - p[1], 2)),
|
|
184
|
+
angle: Math.atan2(n[1] - p[1], n[0] - p[0])
|
|
185
|
+
};
|
|
186
|
+
const angle = o.angle + (reverse ? Math.PI : 0);
|
|
187
|
+
const length = o.length * smoothing;
|
|
188
|
+
return [current[0] + Math.cos(angle) * length, current[1] + Math.sin(angle) * length];
|
|
189
|
+
};
|
|
190
|
+
return points.reduce((acc, point, i, a) => {
|
|
191
|
+
if (i === 0) return `M ${point[0]},${point[1]}`;
|
|
192
|
+
const previous = a[i - 1];
|
|
193
|
+
const cp1 = calculateControlPoint(previous, a[i - 2], point, false);
|
|
194
|
+
const cp2 = calculateControlPoint(point, previous, a[i + 1], true);
|
|
195
|
+
return `${acc} C ${cp1[0]},${cp1[1]} ${cp2[0]},${cp2[1]} ${point[0]},${point[1]}`;
|
|
196
|
+
}, "");
|
|
197
|
+
}
|
|
198
|
+
//#endregion
|
|
199
|
+
//#region src/utils/viewTransition.ts
|
|
200
|
+
/**
|
|
201
|
+
* Wrapper around the View Transitions API.
|
|
202
|
+
* Uses `document.startViewTransition` when available (Chrome 111+, Safari 18+),
|
|
203
|
+
* falls back to calling the callback directly on unsupported browsers.
|
|
204
|
+
*/
|
|
205
|
+
var startViewTransition = (callback) => {
|
|
206
|
+
const doc = document;
|
|
207
|
+
if (typeof doc.startViewTransition === "function") return doc.startViewTransition(callback);
|
|
208
|
+
const result = callback();
|
|
209
|
+
const resolved = result instanceof Promise ? result : Promise.resolve();
|
|
210
|
+
return {
|
|
211
|
+
finished: resolved,
|
|
212
|
+
ready: Promise.resolve(),
|
|
213
|
+
updateCallbackDone: resolved
|
|
214
|
+
};
|
|
215
|
+
};
|
|
216
|
+
/**
|
|
217
|
+
* Check if the View Transitions API is supported in the current browser.
|
|
218
|
+
*/
|
|
219
|
+
var supportsViewTransitions = () => {
|
|
220
|
+
return typeof document.startViewTransition === "function";
|
|
221
|
+
};
|
|
222
|
+
//#endregion
|
|
223
|
+
Object.defineProperty(exports, "chain", {
|
|
224
|
+
enumerable: true,
|
|
225
|
+
get: function() {
|
|
226
|
+
return chain;
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
Object.defineProperty(exports, "createBoundedMap", {
|
|
230
|
+
enumerable: true,
|
|
231
|
+
get: function() {
|
|
232
|
+
return createBoundedMap;
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
Object.defineProperty(exports, "createPresenceVariants", {
|
|
236
|
+
enumerable: true,
|
|
237
|
+
get: function() {
|
|
238
|
+
return createPresenceVariants;
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
Object.defineProperty(exports, "delay", {
|
|
242
|
+
enumerable: true,
|
|
243
|
+
get: function() {
|
|
244
|
+
return delay;
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
Object.defineProperty(exports, "distance", {
|
|
248
|
+
enumerable: true,
|
|
249
|
+
get: function() {
|
|
250
|
+
return distance;
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
Object.defineProperty(exports, "fadePresence", {
|
|
254
|
+
enumerable: true,
|
|
255
|
+
get: function() {
|
|
256
|
+
return fadePresence;
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
Object.defineProperty(exports, "formatDuration", {
|
|
260
|
+
enumerable: true,
|
|
261
|
+
get: function() {
|
|
262
|
+
return formatDuration;
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
Object.defineProperty(exports, "formatTime", {
|
|
266
|
+
enumerable: true,
|
|
267
|
+
get: function() {
|
|
268
|
+
return formatTime;
|
|
269
|
+
}
|
|
270
|
+
});
|
|
271
|
+
Object.defineProperty(exports, "getPath", {
|
|
272
|
+
enumerable: true,
|
|
273
|
+
get: function() {
|
|
274
|
+
return getPath;
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
Object.defineProperty(exports, "lerp", {
|
|
278
|
+
enumerable: true,
|
|
279
|
+
get: function() {
|
|
280
|
+
return lerp;
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
Object.defineProperty(exports, "lineEq", {
|
|
284
|
+
enumerable: true,
|
|
285
|
+
get: function() {
|
|
286
|
+
return lineEq;
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
Object.defineProperty(exports, "normalizeError", {
|
|
290
|
+
enumerable: true,
|
|
291
|
+
get: function() {
|
|
292
|
+
return normalizeError;
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
Object.defineProperty(exports, "scalePresence", {
|
|
296
|
+
enumerable: true,
|
|
297
|
+
get: function() {
|
|
298
|
+
return scalePresence;
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
Object.defineProperty(exports, "slideDownPresence", {
|
|
302
|
+
enumerable: true,
|
|
303
|
+
get: function() {
|
|
304
|
+
return slideDownPresence;
|
|
305
|
+
}
|
|
306
|
+
});
|
|
307
|
+
Object.defineProperty(exports, "slideUpPresence", {
|
|
308
|
+
enumerable: true,
|
|
309
|
+
get: function() {
|
|
310
|
+
return slideUpPresence;
|
|
311
|
+
}
|
|
312
|
+
});
|
|
313
|
+
Object.defineProperty(exports, "startViewTransition", {
|
|
314
|
+
enumerable: true,
|
|
315
|
+
get: function() {
|
|
316
|
+
return startViewTransition;
|
|
317
|
+
}
|
|
318
|
+
});
|
|
319
|
+
Object.defineProperty(exports, "supportsViewTransitions", {
|
|
320
|
+
enumerable: true,
|
|
321
|
+
get: function() {
|
|
322
|
+
return supportsViewTransitions;
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
Object.defineProperty(exports, "wait", {
|
|
326
|
+
enumerable: true,
|
|
327
|
+
get: function() {
|
|
328
|
+
return wait;
|
|
329
|
+
}
|
|
330
|
+
});
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { n as easing, t as animationDuration } from "./animation-BFpILbqb.js";
|
|
2
|
+
import { Fragment } from "react";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
//#region src/utils/collections/BoundedMap.ts
|
|
5
|
+
/**
|
|
6
|
+
* LRU map with optional TTL. Evicts least-recently-used entries
|
|
7
|
+
* when maxSize is exceeded, and expired entries on access.
|
|
8
|
+
*/
|
|
9
|
+
function createBoundedMap(options) {
|
|
10
|
+
const store = /* @__PURE__ */ new Map();
|
|
11
|
+
const maxSize = options.maxSize;
|
|
12
|
+
const ttlMs = options.ttlMs ?? null;
|
|
13
|
+
function evictExpired() {
|
|
14
|
+
if (ttlMs === null) return;
|
|
15
|
+
const now = Date.now();
|
|
16
|
+
for (const [key, entry] of store) if (entry.expiresAt !== null && entry.expiresAt <= now) store.delete(key);
|
|
17
|
+
}
|
|
18
|
+
function evictOverflow() {
|
|
19
|
+
while (store.size > maxSize) {
|
|
20
|
+
const oldestKey = store.keys().next().value;
|
|
21
|
+
if (oldestKey === void 0) break;
|
|
22
|
+
store.delete(oldestKey);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
get(key) {
|
|
27
|
+
const entry = store.get(key);
|
|
28
|
+
if (!entry) return void 0;
|
|
29
|
+
if (entry.expiresAt !== null && entry.expiresAt <= Date.now()) {
|
|
30
|
+
store.delete(key);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
store.delete(key);
|
|
34
|
+
store.set(key, entry);
|
|
35
|
+
return entry.value;
|
|
36
|
+
},
|
|
37
|
+
has(key) {
|
|
38
|
+
return this.get(key) !== void 0;
|
|
39
|
+
},
|
|
40
|
+
set(key, value) {
|
|
41
|
+
const expiresAt = ttlMs === null ? null : Date.now() + ttlMs;
|
|
42
|
+
if (store.has(key)) store.delete(key);
|
|
43
|
+
store.set(key, {
|
|
44
|
+
value,
|
|
45
|
+
expiresAt
|
|
46
|
+
});
|
|
47
|
+
evictExpired();
|
|
48
|
+
evictOverflow();
|
|
49
|
+
},
|
|
50
|
+
delete(key) {
|
|
51
|
+
return store.delete(key);
|
|
52
|
+
},
|
|
53
|
+
clear() {
|
|
54
|
+
store.clear();
|
|
55
|
+
},
|
|
56
|
+
get size() {
|
|
57
|
+
evictExpired();
|
|
58
|
+
return store.size;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
//#endregion
|
|
63
|
+
//#region src/utils/ui/chain.tsx
|
|
64
|
+
var chain = (...elements) => {
|
|
65
|
+
return elements.map((element, index) => /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", { children: element }), index !== elements.length - 1 && /* @__PURE__ */ jsx("span", { children: " • " })] }, index));
|
|
66
|
+
};
|
|
67
|
+
//#endregion
|
|
68
|
+
//#region src/utils/error.ts
|
|
69
|
+
/**
|
|
70
|
+
* Normalises unknown thrown values into proper Error instances.
|
|
71
|
+
* Preserves original Error objects; wraps strings and unknowns.
|
|
72
|
+
*/
|
|
73
|
+
function normalizeError(err) {
|
|
74
|
+
if (err instanceof Error) return err;
|
|
75
|
+
if (typeof err === "string") return new Error(err);
|
|
76
|
+
return /* @__PURE__ */ new Error("Unknown error");
|
|
77
|
+
}
|
|
78
|
+
//#endregion
|
|
79
|
+
//#region src/utils/format.ts
|
|
80
|
+
/**
|
|
81
|
+
* Formats seconds into MM:SS display string.
|
|
82
|
+
*/
|
|
83
|
+
function formatDuration(totalSeconds) {
|
|
84
|
+
return `${Math.floor(totalSeconds / 60)}:${(totalSeconds % 60).toString().padStart(2, "0")}`;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Formats milliseconds into MM:SS.ms display string.
|
|
88
|
+
* Useful for timers and stopwatches.
|
|
89
|
+
*/
|
|
90
|
+
function formatTime(totalMs) {
|
|
91
|
+
const totalSeconds = Math.floor(totalMs / 1e3);
|
|
92
|
+
const minutes = Math.floor(totalSeconds / 60);
|
|
93
|
+
const seconds = totalSeconds % 60;
|
|
94
|
+
const ms = Math.floor(totalMs % 1e3 / 10);
|
|
95
|
+
return `${minutes.toString().padStart(2, "0")}:${seconds.toString().padStart(2, "0")}.${ms.toString().padStart(2, "0")}`;
|
|
96
|
+
}
|
|
97
|
+
//#endregion
|
|
98
|
+
//#region src/utils/math.ts
|
|
99
|
+
/**
|
|
100
|
+
* Math utility functions for animations and interactions
|
|
101
|
+
*/
|
|
102
|
+
function distance(x1, x2, y1, y2) {
|
|
103
|
+
const a = x1 - x2;
|
|
104
|
+
const b = y1 - y2;
|
|
105
|
+
return Math.hypot(a, b);
|
|
106
|
+
}
|
|
107
|
+
function lineEq(y2, y1, x2, x1, currentVal) {
|
|
108
|
+
const m = (y2 - y1) / (x2 - x1);
|
|
109
|
+
const b = y1 - m * x1;
|
|
110
|
+
return m * currentVal + b;
|
|
111
|
+
}
|
|
112
|
+
function lerp(a, b, n) {
|
|
113
|
+
return (1 - n) * a + n * b;
|
|
114
|
+
}
|
|
115
|
+
//#endregion
|
|
116
|
+
//#region src/utils/presence.ts
|
|
117
|
+
/**
|
|
118
|
+
* Create standardized enter/exit motion variants using toolkit tokens.
|
|
119
|
+
* Returns `{ initial, animate, exit }` for framer-motion / motion.
|
|
120
|
+
*/
|
|
121
|
+
var createPresenceVariants = (enter, exit, duration = animationDuration.medium, easingCurve = easing.easeOutCubic) => ({
|
|
122
|
+
initial: exit,
|
|
123
|
+
animate: {
|
|
124
|
+
...enter,
|
|
125
|
+
transition: {
|
|
126
|
+
duration,
|
|
127
|
+
ease: easingCurve
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
exit: {
|
|
131
|
+
...exit,
|
|
132
|
+
transition: {
|
|
133
|
+
duration,
|
|
134
|
+
ease: easingCurve
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
var fadePresence = createPresenceVariants({ opacity: 1 }, { opacity: 0 }, animationDuration.fast);
|
|
139
|
+
var slideUpPresence = createPresenceVariants({
|
|
140
|
+
opacity: 1,
|
|
141
|
+
y: 0
|
|
142
|
+
}, {
|
|
143
|
+
opacity: 0,
|
|
144
|
+
y: 8
|
|
145
|
+
});
|
|
146
|
+
var scalePresence = createPresenceVariants({
|
|
147
|
+
opacity: 1,
|
|
148
|
+
scale: 1
|
|
149
|
+
}, {
|
|
150
|
+
opacity: 0,
|
|
151
|
+
scale: .95
|
|
152
|
+
}, animationDuration.short);
|
|
153
|
+
var slideDownPresence = createPresenceVariants({
|
|
154
|
+
opacity: 1,
|
|
155
|
+
y: 0
|
|
156
|
+
}, {
|
|
157
|
+
opacity: 0,
|
|
158
|
+
y: -8
|
|
159
|
+
});
|
|
160
|
+
//#endregion
|
|
161
|
+
//#region src/utils/promise.ts
|
|
162
|
+
function delay(ms) {
|
|
163
|
+
return new Promise((resolve) => {
|
|
164
|
+
setTimeout(() => {
|
|
165
|
+
resolve(void 0);
|
|
166
|
+
}, ms);
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
var wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
170
|
+
//#endregion
|
|
171
|
+
//#region src/utils/svg.ts
|
|
172
|
+
function getPath(x, smoothing) {
|
|
173
|
+
const points = [
|
|
174
|
+
[2, 2],
|
|
175
|
+
[12 - x, 12 + x],
|
|
176
|
+
[22, 22]
|
|
177
|
+
];
|
|
178
|
+
const calculateControlPoint = (current, previous, next, reverse) => {
|
|
179
|
+
const p = previous || current;
|
|
180
|
+
const n = next || current;
|
|
181
|
+
const o = {
|
|
182
|
+
length: Math.sqrt(Math.pow(n[0] - p[0], 2) + Math.pow(n[1] - p[1], 2)),
|
|
183
|
+
angle: Math.atan2(n[1] - p[1], n[0] - p[0])
|
|
184
|
+
};
|
|
185
|
+
const angle = o.angle + (reverse ? Math.PI : 0);
|
|
186
|
+
const length = o.length * smoothing;
|
|
187
|
+
return [current[0] + Math.cos(angle) * length, current[1] + Math.sin(angle) * length];
|
|
188
|
+
};
|
|
189
|
+
return points.reduce((acc, point, i, a) => {
|
|
190
|
+
if (i === 0) return `M ${point[0]},${point[1]}`;
|
|
191
|
+
const previous = a[i - 1];
|
|
192
|
+
const cp1 = calculateControlPoint(previous, a[i - 2], point, false);
|
|
193
|
+
const cp2 = calculateControlPoint(point, previous, a[i + 1], true);
|
|
194
|
+
return `${acc} C ${cp1[0]},${cp1[1]} ${cp2[0]},${cp2[1]} ${point[0]},${point[1]}`;
|
|
195
|
+
}, "");
|
|
196
|
+
}
|
|
197
|
+
//#endregion
|
|
198
|
+
//#region src/utils/viewTransition.ts
|
|
199
|
+
/**
|
|
200
|
+
* Wrapper around the View Transitions API.
|
|
201
|
+
* Uses `document.startViewTransition` when available (Chrome 111+, Safari 18+),
|
|
202
|
+
* falls back to calling the callback directly on unsupported browsers.
|
|
203
|
+
*/
|
|
204
|
+
var startViewTransition = (callback) => {
|
|
205
|
+
const doc = document;
|
|
206
|
+
if (typeof doc.startViewTransition === "function") return doc.startViewTransition(callback);
|
|
207
|
+
const result = callback();
|
|
208
|
+
const resolved = result instanceof Promise ? result : Promise.resolve();
|
|
209
|
+
return {
|
|
210
|
+
finished: resolved,
|
|
211
|
+
ready: Promise.resolve(),
|
|
212
|
+
updateCallbackDone: resolved
|
|
213
|
+
};
|
|
214
|
+
};
|
|
215
|
+
/**
|
|
216
|
+
* Check if the View Transitions API is supported in the current browser.
|
|
217
|
+
*/
|
|
218
|
+
var supportsViewTransitions = () => {
|
|
219
|
+
return typeof document.startViewTransition === "function";
|
|
220
|
+
};
|
|
221
|
+
//#endregion
|
|
222
|
+
export { chain as _, wait as a, scalePresence as c, distance as d, lerp as f, normalizeError as g, formatTime as h, delay as i, slideDownPresence as l, formatDuration as m, supportsViewTransitions as n, createPresenceVariants as o, lineEq as p, getPath as r, fadePresence as s, startViewTransition as t, slideUpPresence as u, createBoundedMap as v };
|
package/dist/utils.cjs
CHANGED
|
@@ -1,38 +1,44 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
exports.
|
|
10
|
-
exports.
|
|
11
|
-
exports.
|
|
12
|
-
exports.
|
|
13
|
-
exports.
|
|
14
|
-
exports.
|
|
15
|
-
exports.
|
|
16
|
-
exports.
|
|
17
|
-
exports.
|
|
18
|
-
exports.getCurrentLogLevel =
|
|
19
|
-
exports.getPath =
|
|
20
|
-
exports.hookLogger =
|
|
21
|
-
exports.is =
|
|
22
|
-
exports.isDebugEnabled =
|
|
23
|
-
exports.isNonNullable =
|
|
24
|
-
exports.keys =
|
|
25
|
-
exports.lerp =
|
|
26
|
-
exports.lineEq =
|
|
27
|
-
exports.logger =
|
|
28
|
-
exports.move =
|
|
29
|
-
exports.noop =
|
|
30
|
-
exports.
|
|
31
|
-
exports.
|
|
32
|
-
exports.
|
|
33
|
-
exports.
|
|
34
|
-
exports.
|
|
35
|
-
exports.
|
|
36
|
-
exports.
|
|
37
|
-
exports.
|
|
38
|
-
exports.
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_values = require("./values-BqSJ0h9o.cjs");
|
|
3
|
+
const require_utils = require("./utils-BGgmkNY4.cjs");
|
|
4
|
+
exports.BaseLogger = require_values.BaseLogger;
|
|
5
|
+
exports.animationLogger = require_values.animationLogger;
|
|
6
|
+
exports.apiLogger = require_values.apiLogger;
|
|
7
|
+
exports.chain = require_utils.chain;
|
|
8
|
+
exports.clearSession = require_values.clearSession;
|
|
9
|
+
exports.componentLogger = require_values.componentLogger;
|
|
10
|
+
exports.createBoundedMap = require_utils.createBoundedMap;
|
|
11
|
+
exports.createPresenceVariants = require_utils.createPresenceVariants;
|
|
12
|
+
exports.delay = require_utils.delay;
|
|
13
|
+
exports.distance = require_utils.distance;
|
|
14
|
+
exports.eventLogger = require_values.eventLogger;
|
|
15
|
+
exports.fadePresence = require_utils.fadePresence;
|
|
16
|
+
exports.formatDuration = require_utils.formatDuration;
|
|
17
|
+
exports.formatTime = require_utils.formatTime;
|
|
18
|
+
exports.getCurrentLogLevel = require_values.getCurrentLogLevel;
|
|
19
|
+
exports.getPath = require_utils.getPath;
|
|
20
|
+
exports.hookLogger = require_values.hookLogger;
|
|
21
|
+
exports.is = require_values.is;
|
|
22
|
+
exports.isDebugEnabled = require_values.isDebugEnabled;
|
|
23
|
+
exports.isNonNullable = require_values.isNonNullable;
|
|
24
|
+
exports.keys = require_values.keys;
|
|
25
|
+
exports.lerp = require_utils.lerp;
|
|
26
|
+
exports.lineEq = require_utils.lineEq;
|
|
27
|
+
exports.logger = require_values.logger;
|
|
28
|
+
exports.move = require_values.move;
|
|
29
|
+
exports.noop = require_values.noop;
|
|
30
|
+
exports.normalizeError = require_utils.normalizeError;
|
|
31
|
+
exports.notReachable = require_values.notReachable;
|
|
32
|
+
exports.scalePresence = require_utils.scalePresence;
|
|
33
|
+
exports.setLogLevel = require_values.setLogLevel;
|
|
34
|
+
exports.setRequestId = require_values.setRequestId;
|
|
35
|
+
exports.setSessionId = require_values.setSessionId;
|
|
36
|
+
exports.slideDownPresence = require_utils.slideDownPresence;
|
|
37
|
+
exports.slideUpPresence = require_utils.slideUpPresence;
|
|
38
|
+
exports.startViewTransition = require_utils.startViewTransition;
|
|
39
|
+
exports.storageLogger = require_values.storageLogger;
|
|
40
|
+
exports.supportsViewTransitions = require_utils.supportsViewTransitions;
|
|
41
|
+
exports.times = require_values.times;
|
|
42
|
+
exports.utilsLogger = require_values.utilsLogger;
|
|
43
|
+
exports.values = require_values.values;
|
|
44
|
+
exports.wait = require_utils.wait;
|