sibujs 1.0.0 → 1.0.2

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 (52) hide show
  1. package/dist/browser.js +4 -3
  2. package/dist/build.cjs +11 -3
  3. package/dist/build.js +10 -9
  4. package/dist/cdn.global.js +4 -4
  5. package/dist/chunk-24WSRM54.js +2002 -0
  6. package/dist/chunk-3CRQALYP.js +877 -0
  7. package/dist/chunk-6HLLIF3K.js +398 -0
  8. package/dist/chunk-7TQKR4PP.js +294 -0
  9. package/dist/chunk-CZUGLNJS.js +37 -0
  10. package/dist/chunk-DTCOOBMX.js +725 -0
  11. package/dist/chunk-FGOEVHY3.js +60 -0
  12. package/dist/chunk-HGMJFBC7.js +654 -0
  13. package/dist/chunk-HS6OOE3Q.js +365 -0
  14. package/dist/chunk-L36YN45V.js +949 -0
  15. package/dist/chunk-MJ4LVHGX.js +712 -0
  16. package/dist/chunk-N6IZB6KJ.js +567 -0
  17. package/dist/chunk-NMRUZALC.js +1097 -0
  18. package/dist/chunk-OHQQWZ7P.js +969 -0
  19. package/dist/chunk-ONCYDOK6.js +466 -0
  20. package/dist/chunk-OWLQ4HZI.js +282 -0
  21. package/dist/chunk-PZEGYCF5.js +61 -0
  22. package/dist/chunk-QVKGGB2S.js +300 -0
  23. package/dist/chunk-SDLZDHKP.js +107 -0
  24. package/dist/chunk-Y6GP4QGG.js +276 -0
  25. package/dist/chunk-YECR7UIA.js +347 -0
  26. package/dist/chunk-Z65KYU7I.js +26 -0
  27. package/dist/data.cjs +24 -4
  28. package/dist/data.js +6 -5
  29. package/dist/devtools.cjs +1 -1
  30. package/dist/devtools.js +4 -3
  31. package/dist/ecosystem.cjs +9 -2
  32. package/dist/ecosystem.js +7 -6
  33. package/dist/extras.cjs +68 -24
  34. package/dist/extras.js +21 -20
  35. package/dist/index.cjs +11 -3
  36. package/dist/index.js +10 -9
  37. package/dist/motion.js +3 -2
  38. package/dist/patterns.cjs +7 -2
  39. package/dist/patterns.d.cts +15 -0
  40. package/dist/patterns.d.ts +15 -0
  41. package/dist/patterns.js +5 -4
  42. package/dist/performance.js +3 -2
  43. package/dist/plugins.cjs +65 -29
  44. package/dist/plugins.js +9 -8
  45. package/dist/ssr-WKUPVSSK.js +36 -0
  46. package/dist/ssr.cjs +60 -41
  47. package/dist/ssr.d.cts +9 -3
  48. package/dist/ssr.d.ts +9 -3
  49. package/dist/ssr.js +8 -7
  50. package/dist/ui.js +6 -5
  51. package/dist/widgets.js +5 -4
  52. package/package.json +1 -1
@@ -0,0 +1,466 @@
1
+ import {
2
+ effect
3
+ } from "./chunk-PZEGYCF5.js";
4
+ import {
5
+ batch,
6
+ signal
7
+ } from "./chunk-YECR7UIA.js";
8
+
9
+ // src/browser/media.ts
10
+ function media(query) {
11
+ if (typeof window === "undefined" || typeof window.matchMedia !== "function") {
12
+ const [matches2] = signal(false);
13
+ return { matches: matches2, dispose: () => {
14
+ } };
15
+ }
16
+ const mql = window.matchMedia(query);
17
+ const [matches, setMatches] = signal(mql.matches);
18
+ const handler = (event) => {
19
+ setMatches(event.matches);
20
+ };
21
+ mql.addEventListener("change", handler);
22
+ function dispose() {
23
+ mql.removeEventListener("change", handler);
24
+ }
25
+ return { matches, dispose };
26
+ }
27
+
28
+ // src/browser/resize.ts
29
+ function resolveTarget(target) {
30
+ return typeof target === "function" ? target : () => target.current;
31
+ }
32
+ function resize(target) {
33
+ const [width, setWidth] = signal(0);
34
+ const [height, setHeight] = signal(0);
35
+ let observer = null;
36
+ if (typeof window === "undefined" || typeof ResizeObserver === "undefined") {
37
+ return { width, height, dispose: () => {
38
+ } };
39
+ }
40
+ const getter = resolveTarget(target);
41
+ const cleanup = effect(() => {
42
+ const el = getter();
43
+ if (observer) {
44
+ observer.disconnect();
45
+ observer = null;
46
+ }
47
+ if (!el) return;
48
+ observer = new ResizeObserver((entries) => {
49
+ const entry = entries[0];
50
+ if (entry) {
51
+ batch(() => {
52
+ setWidth(entry.contentRect.width);
53
+ setHeight(entry.contentRect.height);
54
+ });
55
+ }
56
+ });
57
+ observer.observe(el);
58
+ });
59
+ function dispose() {
60
+ cleanup();
61
+ if (observer) {
62
+ observer.disconnect();
63
+ observer = null;
64
+ }
65
+ }
66
+ return { width, height, dispose };
67
+ }
68
+
69
+ // src/browser/scroll.ts
70
+ function scroll(target) {
71
+ const [x, setX] = signal(0);
72
+ const [y, setY] = signal(0);
73
+ const [isScrolling, setIsScrolling] = signal(false);
74
+ let scrollTimer = null;
75
+ if (typeof window === "undefined") {
76
+ return { x, y, isScrolling, dispose: () => {
77
+ } };
78
+ }
79
+ const handler = () => {
80
+ const el = target ? target() : null;
81
+ batch(() => {
82
+ if (el) {
83
+ setX(el.scrollLeft);
84
+ setY(el.scrollTop);
85
+ } else {
86
+ setX(window.scrollX ?? window.pageXOffset ?? 0);
87
+ setY(window.scrollY ?? window.pageYOffset ?? 0);
88
+ }
89
+ setIsScrolling(true);
90
+ });
91
+ if (scrollTimer !== null) clearTimeout(scrollTimer);
92
+ scrollTimer = setTimeout(() => {
93
+ setIsScrolling(false);
94
+ scrollTimer = null;
95
+ }, 150);
96
+ };
97
+ const scrollTarget = target ? target() : null;
98
+ const eventTarget = scrollTarget || window;
99
+ eventTarget.addEventListener("scroll", handler, { passive: true });
100
+ function dispose() {
101
+ eventTarget.removeEventListener("scroll", handler);
102
+ if (scrollTimer !== null) {
103
+ clearTimeout(scrollTimer);
104
+ scrollTimer = null;
105
+ }
106
+ }
107
+ return { x, y, isScrolling, dispose };
108
+ }
109
+
110
+ // src/browser/online.ts
111
+ function online() {
112
+ if (typeof window === "undefined" || typeof navigator === "undefined") {
113
+ const [online3] = signal(true);
114
+ return { online: online3, dispose: () => {
115
+ } };
116
+ }
117
+ const [online2, setOnline] = signal(navigator.onLine);
118
+ const onOnline = () => setOnline(true);
119
+ const onOffline = () => setOnline(false);
120
+ window.addEventListener("online", onOnline);
121
+ window.addEventListener("offline", onOffline);
122
+ function dispose() {
123
+ window.removeEventListener("online", onOnline);
124
+ window.removeEventListener("offline", onOffline);
125
+ }
126
+ return { online: online2, dispose };
127
+ }
128
+
129
+ // src/browser/geo.ts
130
+ function geo(options) {
131
+ const [latitude, setLatitude] = signal(null);
132
+ const [longitude, setLongitude] = signal(null);
133
+ const [accuracy, setAccuracy] = signal(null);
134
+ const [error, setError] = signal(null);
135
+ let watchId = null;
136
+ if (typeof navigator !== "undefined" && navigator.geolocation) {
137
+ watchId = navigator.geolocation.watchPosition(
138
+ (position) => {
139
+ batch(() => {
140
+ setLatitude(position.coords.latitude);
141
+ setLongitude(position.coords.longitude);
142
+ setAccuracy(position.coords.accuracy);
143
+ setError(null);
144
+ });
145
+ },
146
+ (err) => {
147
+ setError(err);
148
+ },
149
+ options
150
+ );
151
+ }
152
+ function dispose() {
153
+ if (watchId !== null && typeof navigator !== "undefined" && navigator.geolocation) {
154
+ navigator.geolocation.clearWatch(watchId);
155
+ watchId = null;
156
+ }
157
+ }
158
+ return { latitude, longitude, accuracy, error, dispose };
159
+ }
160
+
161
+ // src/browser/battery.ts
162
+ function battery() {
163
+ const [level, setLevel] = signal(null);
164
+ const [charging, setCharging] = signal(null);
165
+ const [chargingTime, setChargingTime] = signal(null);
166
+ const [dischargingTime, setDischargingTime] = signal(null);
167
+ const [supported, setSupported] = signal(false);
168
+ let battery2 = null;
169
+ let onLevelChange = null;
170
+ let onChargingChange = null;
171
+ let onChargingTimeChange = null;
172
+ let onDischargingTimeChange = null;
173
+ let disposed = false;
174
+ if (typeof navigator !== "undefined" && "getBattery" in navigator) {
175
+ setSupported(true);
176
+ navigator.getBattery().then((bm) => {
177
+ if (disposed) return;
178
+ battery2 = bm;
179
+ batch(() => {
180
+ setLevel(bm.level);
181
+ setCharging(bm.charging);
182
+ setChargingTime(bm.chargingTime);
183
+ setDischargingTime(bm.dischargingTime);
184
+ });
185
+ onLevelChange = () => setLevel(bm.level);
186
+ onChargingChange = () => setCharging(bm.charging);
187
+ onChargingTimeChange = () => setChargingTime(bm.chargingTime);
188
+ onDischargingTimeChange = () => setDischargingTime(bm.dischargingTime);
189
+ bm.addEventListener("levelchange", onLevelChange);
190
+ bm.addEventListener("chargingchange", onChargingChange);
191
+ bm.addEventListener("chargingtimechange", onChargingTimeChange);
192
+ bm.addEventListener("dischargingtimechange", onDischargingTimeChange);
193
+ });
194
+ }
195
+ function dispose() {
196
+ disposed = true;
197
+ if (battery2) {
198
+ if (onLevelChange) battery2.removeEventListener("levelchange", onLevelChange);
199
+ if (onChargingChange) battery2.removeEventListener("chargingchange", onChargingChange);
200
+ if (onChargingTimeChange) battery2.removeEventListener("chargingtimechange", onChargingTimeChange);
201
+ if (onDischargingTimeChange) battery2.removeEventListener("dischargingtimechange", onDischargingTimeChange);
202
+ battery2 = null;
203
+ }
204
+ }
205
+ return { level, charging, chargingTime, dischargingTime, supported, dispose };
206
+ }
207
+
208
+ // src/browser/idle.ts
209
+ var ACTIVITY_EVENTS = ["mousemove", "mousedown", "keydown", "touchstart", "scroll"];
210
+ function idle(timeout = 6e4) {
211
+ const [idle2, setIdle] = signal(false);
212
+ if (typeof window === "undefined" || typeof document === "undefined") {
213
+ return { idle: idle2, dispose: () => {
214
+ } };
215
+ }
216
+ let timer = null;
217
+ function resetTimer() {
218
+ setIdle(false);
219
+ if (timer !== null) clearTimeout(timer);
220
+ timer = setTimeout(() => {
221
+ setIdle(true);
222
+ }, timeout);
223
+ }
224
+ for (const event of ACTIVITY_EVENTS) {
225
+ document.addEventListener(event, resetTimer, { passive: true });
226
+ }
227
+ resetTimer();
228
+ function dispose() {
229
+ if (timer !== null) {
230
+ clearTimeout(timer);
231
+ timer = null;
232
+ }
233
+ for (const event of ACTIVITY_EVENTS) {
234
+ document.removeEventListener(event, resetTimer);
235
+ }
236
+ }
237
+ return { idle: idle2, dispose };
238
+ }
239
+
240
+ // src/browser/permissions.ts
241
+ function permissions(name) {
242
+ const [state, setState] = signal("prompt");
243
+ let permissionStatus = null;
244
+ let onChange = null;
245
+ let disposed = false;
246
+ if (typeof navigator === "undefined" || !navigator.permissions) {
247
+ setState("unsupported");
248
+ return { state, dispose: () => {
249
+ } };
250
+ }
251
+ navigator.permissions.query({ name }).then((status) => {
252
+ if (disposed) return;
253
+ permissionStatus = status;
254
+ setState(status.state);
255
+ onChange = () => {
256
+ setState(status.state);
257
+ };
258
+ status.addEventListener("change", onChange);
259
+ }).catch(() => {
260
+ setState("unsupported");
261
+ });
262
+ function dispose() {
263
+ disposed = true;
264
+ if (permissionStatus && onChange) {
265
+ permissionStatus.removeEventListener("change", onChange);
266
+ permissionStatus = null;
267
+ onChange = null;
268
+ }
269
+ }
270
+ return { state, dispose };
271
+ }
272
+
273
+ // src/browser/clipboard.ts
274
+ function clipboard() {
275
+ const [text, setText] = signal("");
276
+ const [copied, setCopied] = signal(false);
277
+ let copiedTimer = null;
278
+ async function copy(value) {
279
+ if (typeof navigator === "undefined" || !navigator.clipboard) {
280
+ return;
281
+ }
282
+ await navigator.clipboard.writeText(value);
283
+ setText(value);
284
+ setCopied(true);
285
+ if (copiedTimer !== null) clearTimeout(copiedTimer);
286
+ copiedTimer = setTimeout(() => {
287
+ setCopied(false);
288
+ copiedTimer = null;
289
+ }, 2e3);
290
+ }
291
+ function dispose() {
292
+ if (copiedTimer !== null) {
293
+ clearTimeout(copiedTimer);
294
+ copiedTimer = null;
295
+ }
296
+ }
297
+ return { text, copy, copied, dispose };
298
+ }
299
+
300
+ // src/browser/dragDrop.ts
301
+ function resolveTarget2(target) {
302
+ return typeof target === "function" ? target : () => target.current;
303
+ }
304
+ function draggable(element, data) {
305
+ const [isDragging, setIsDragging] = signal(false);
306
+ if (typeof window === "undefined") {
307
+ return { isDragging, dispose: () => {
308
+ } };
309
+ }
310
+ let currentEl = null;
311
+ let onDragStart = null;
312
+ let onDragEnd = null;
313
+ const getter = resolveTarget2(element);
314
+ const cleanup = effect(() => {
315
+ if (currentEl && onDragStart && onDragEnd) {
316
+ currentEl.removeEventListener("dragstart", onDragStart);
317
+ currentEl.removeEventListener("dragend", onDragEnd);
318
+ }
319
+ const el = getter();
320
+ currentEl = el;
321
+ if (!el) return;
322
+ el.draggable = true;
323
+ onDragStart = (e) => {
324
+ setIsDragging(true);
325
+ if (e.dataTransfer && data !== void 0) {
326
+ e.dataTransfer.setData("application/json", JSON.stringify(data));
327
+ }
328
+ };
329
+ onDragEnd = () => {
330
+ setIsDragging(false);
331
+ };
332
+ el.addEventListener("dragstart", onDragStart);
333
+ el.addEventListener("dragend", onDragEnd);
334
+ });
335
+ function dispose() {
336
+ cleanup();
337
+ if (currentEl && onDragStart && onDragEnd) {
338
+ currentEl.removeEventListener("dragstart", onDragStart);
339
+ currentEl.removeEventListener("dragend", onDragEnd);
340
+ currentEl = null;
341
+ }
342
+ }
343
+ return { isDragging, dispose };
344
+ }
345
+ function dropZone(element, options) {
346
+ const [isOver, setIsOver] = signal(false);
347
+ if (typeof window === "undefined") {
348
+ return { isOver, dispose: () => {
349
+ } };
350
+ }
351
+ let currentEl = null;
352
+ let onDragOver = null;
353
+ let onDragEnter = null;
354
+ let onDragLeave = null;
355
+ let onDrop = null;
356
+ const getter = resolveTarget2(element);
357
+ const cleanup = effect(() => {
358
+ if (currentEl && onDragOver && onDragEnter && onDragLeave && onDrop) {
359
+ currentEl.removeEventListener("dragover", onDragOver);
360
+ currentEl.removeEventListener("dragenter", onDragEnter);
361
+ currentEl.removeEventListener("dragleave", onDragLeave);
362
+ currentEl.removeEventListener("drop", onDrop);
363
+ }
364
+ const el = getter();
365
+ currentEl = el;
366
+ if (!el) return;
367
+ onDragOver = (e) => {
368
+ e.preventDefault();
369
+ };
370
+ onDragEnter = (e) => {
371
+ e.preventDefault();
372
+ setIsOver(true);
373
+ };
374
+ onDragLeave = () => {
375
+ setIsOver(false);
376
+ };
377
+ onDrop = (e) => {
378
+ e.preventDefault();
379
+ setIsOver(false);
380
+ let transferData = null;
381
+ if (e.dataTransfer) {
382
+ const raw = e.dataTransfer.getData("application/json");
383
+ if (raw) {
384
+ try {
385
+ transferData = JSON.parse(raw);
386
+ } catch {
387
+ transferData = raw;
388
+ }
389
+ }
390
+ }
391
+ options.onDrop(transferData, e);
392
+ };
393
+ el.addEventListener("dragover", onDragOver);
394
+ el.addEventListener("dragenter", onDragEnter);
395
+ el.addEventListener("dragleave", onDragLeave);
396
+ el.addEventListener("drop", onDrop);
397
+ });
398
+ function dispose() {
399
+ cleanup();
400
+ if (currentEl && onDragOver && onDragEnter && onDragLeave && onDrop) {
401
+ currentEl.removeEventListener("dragover", onDragOver);
402
+ currentEl.removeEventListener("dragenter", onDragEnter);
403
+ currentEl.removeEventListener("dragleave", onDragLeave);
404
+ currentEl.removeEventListener("drop", onDrop);
405
+ currentEl = null;
406
+ }
407
+ }
408
+ return { isOver, dispose };
409
+ }
410
+
411
+ // src/browser/title.ts
412
+ function title(value) {
413
+ if (typeof document === "undefined") {
414
+ return () => {
415
+ };
416
+ }
417
+ const previousTitle = document.title;
418
+ if (typeof value === "function") {
419
+ const cleanup = effect(() => {
420
+ document.title = value();
421
+ });
422
+ return () => {
423
+ cleanup();
424
+ document.title = previousTitle;
425
+ };
426
+ }
427
+ document.title = value;
428
+ return () => {
429
+ document.title = previousTitle;
430
+ };
431
+ }
432
+
433
+ // src/browser/colorScheme.ts
434
+ function colorScheme() {
435
+ if (typeof window === "undefined" || typeof window.matchMedia !== "function") {
436
+ const [scheme2] = signal("light");
437
+ return { scheme: scheme2, dispose: () => {
438
+ } };
439
+ }
440
+ const mql = window.matchMedia("(prefers-color-scheme: dark)");
441
+ const [scheme, setScheme] = signal(mql.matches ? "dark" : "light");
442
+ const handler = (event) => {
443
+ setScheme(event.matches ? "dark" : "light");
444
+ };
445
+ mql.addEventListener("change", handler);
446
+ function dispose() {
447
+ mql.removeEventListener("change", handler);
448
+ }
449
+ return { scheme, dispose };
450
+ }
451
+
452
+ export {
453
+ media,
454
+ resize,
455
+ scroll,
456
+ online,
457
+ geo,
458
+ battery,
459
+ idle,
460
+ permissions,
461
+ clipboard,
462
+ draggable,
463
+ dropZone,
464
+ title,
465
+ colorScheme
466
+ };