@stacksjs/browser 0.70.58 → 0.70.59

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/index.js CHANGED
@@ -1,1556 +1,16 @@
1
- var __defProp = Object.defineProperty;
2
- var __returnValue = (v) => v;
3
- function __exportSetter(name, newValue) {
4
- this[name] = __returnValue.bind(null, newValue);
5
- }
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, {
9
- get: all[name],
10
- enumerable: true,
11
- configurable: true,
12
- set: __exportSetter.bind(all, name)
13
- });
14
- };
1
+ import"./auto-init";
15
2
 
16
- // src/auto-init.ts
17
- import {
3
+ export * from "./composables";
4
+ export * from "./utils";
5
+ export * from "./model-loader";
6
+ export {
18
7
  browserQuery,
19
8
  BrowserQueryBuilder,
20
9
  BrowserQueryError,
21
- browserAuth as browserAuth2,
22
- configureBrowser as configureBrowser2,
10
+ browserAuth,
11
+ configureBrowser,
23
12
  getBrowserConfig,
24
13
  createBrowserDb,
25
- createBrowserModel as createBrowserModel2,
14
+ createBrowserModel,
26
15
  isBrowser
27
16
  } from "bun-query-builder/browser";
28
-
29
- // src/composables/index.ts
30
- var exports_composables = {};
31
- __export(exports_composables, {
32
- useWindowSize: () => useWindowSize,
33
- useWindowScroll: () => useWindowScroll,
34
- useWindowFocus: () => useWindowFocus,
35
- useWebWorkerFn: () => useWebWorkerFn,
36
- useWebWorker: () => useWebWorker,
37
- useWebSocket: () => useWebSocket,
38
- useWebNotification: () => useWebNotification,
39
- useWakeLock: () => useWakeLock,
40
- useVibrate: () => useVibrate,
41
- useUrlSearchParams: () => useUrlSearchParams,
42
- useTransition: () => useTransition,
43
- useToggle: () => useToggle,
44
- useTitle: () => useTitle,
45
- useTimestamp: () => useTimestamp,
46
- useTimeoutPoll: () => useTimeoutPoll,
47
- useTimeoutFn: () => useTimeoutFn,
48
- useTimeout: () => useTimeout,
49
- useTimeAgo: () => useTimeAgo,
50
- useThrottleFn: () => useThrottleFn,
51
- useTextSelection: () => useTextSelection,
52
- useTextDirection: () => useTextDirection,
53
- useSwipe: () => useSwipe,
54
- useSupported: () => useSupported,
55
- useStorage: () => useStorage2,
56
- useStepper: () => useStepper,
57
- useShare: () => useShare,
58
- useSessionStorage: () => useSessionStorage,
59
- useScrollLock: () => useScrollLock,
60
- useScroll: () => useScroll,
61
- useScreenOrientation: () => useScreenOrientation,
62
- useRafFn: () => useRafFn,
63
- usePreferredReducedMotion: () => usePreferredReducedMotion,
64
- usePreferredLanguages: () => usePreferredLanguages,
65
- usePreferredDark: () => usePreferredDark,
66
- usePreferredContrast: () => usePreferredContrast,
67
- usePreferredColorScheme: () => usePreferredColorScheme,
68
- usePointerSwipe: () => usePointerSwipe,
69
- usePointer: () => usePointer,
70
- usePermission: () => usePermission,
71
- usePageLeave: () => usePageLeave,
72
- useOnline: () => useOnline,
73
- useObjectUrl: () => useObjectUrl,
74
- useNow: () => useNow,
75
- useNetwork: () => useNetwork,
76
- useNavigatorLanguage: () => useNavigatorLanguage,
77
- useMousePressed: () => useMousePressed,
78
- useMouseInElement: () => useMouseInElement,
79
- useMouse: () => useMouse,
80
- useMounted: () => useMounted,
81
- useMemoize: () => useMemoize,
82
- useMediaQuery: () => useMediaQuery,
83
- useMagicKeys: () => useMagicKeys,
84
- useLocalStorage: () => useLocalStorage,
85
- useKeyModifier: () => useKeyModifier,
86
- useIntervalFn: () => useIntervalFn,
87
- useInterval: () => useInterval,
88
- useInfiniteScroll: () => useInfiniteScroll,
89
- useImage: () => useImage,
90
- useIdle: () => useIdle,
91
- useGeolocation: () => useGeolocation,
92
- useFullscreen: () => useFullscreen,
93
- useFocusWithin: () => useFocusWithin,
94
- useFocus: () => useFocus,
95
- useFileDialog: () => useFileDialog,
96
- useFetch: () => useFetch,
97
- useFavicon: () => useFavicon,
98
- useEyeDropper: () => useEyeDropper,
99
- useEventSource: () => useEventSource,
100
- useEventListener: () => useEventListener,
101
- useEventBus: () => useEventBus,
102
- useElementVisibility: () => useElementVisibility,
103
- useElementSize: () => useElementSize,
104
- useElementHover: () => useElementHover,
105
- useElementBounding: () => useElementBounding,
106
- useDropZone: () => useDropZone,
107
- useDraggable: () => useDraggable,
108
- useDocumentVisibility: () => useDocumentVisibility,
109
- useDevicePixelRatio: () => useDevicePixelRatio,
110
- useDeviceOrientation: () => useDeviceOrientation,
111
- useDeviceMotion: () => useDeviceMotion,
112
- useDebounceFn: () => useDebounceFn,
113
- useDateFormat: () => useDateFormat,
114
- useDark: () => useDark,
115
- useCycleList: () => useCycleList,
116
- useCssVar: () => useCssVar,
117
- useCounter: () => useCounter,
118
- useConfirmDialog: () => useConfirmDialog,
119
- useColorMode: () => useColorMode,
120
- useClipboardItems: () => useClipboardItems,
121
- useClipboard: () => useClipboard,
122
- useBrowserLocation: () => useBrowserLocation,
123
- useBroadcastChannel: () => useBroadcastChannel,
124
- useBreakpoints: () => useBreakpoints,
125
- useBattery: () => useBattery,
126
- useBase64: () => useBase64,
127
- useAuth: () => useAuth,
128
- useAnimate: () => useAnimate,
129
- useActiveElement: () => useActiveElement,
130
- onStartTyping: () => onStartTyping,
131
- onLongPress: () => onLongPress,
132
- onKeyUp: () => onKeyUp,
133
- onKeyStroke: () => onKeyStroke,
134
- onKeyDown: () => onKeyDown,
135
- onClickOutside: () => onClickOutside,
136
- initApi: () => initApi,
137
- getRelativeTime: () => getRelativeTime,
138
- formatElevation: () => formatElevation,
139
- formatDuration: () => formatDuration,
140
- formatDistance: () => formatDistance,
141
- formatAreaSize: () => formatAreaSize,
142
- fetchData: () => fetchData,
143
- breakpointsTailwind: () => breakpointsTailwind,
144
- breakpointsBootstrapV5: () => breakpointsBootstrapV5,
145
- authGuard: () => authGuard,
146
- auth: () => auth,
147
- TransitionPresets: () => TransitionPresets
148
- });
149
-
150
- // src/composables/useAuth.ts
151
- import { useStorage } from "@stacksjs/composables";
152
- import { ref } from "@stacksjs/stx";
153
- var token = useStorage("token", "");
154
- var stacksConfig = globalThis.__STACKS_CONFIG__ || {};
155
- var baseUrl = stacksConfig.API_URL || (typeof window !== "undefined" ? window.location.origin : `http://localhost:${process.env.PORT_API || "3008"}`);
156
- var user = ref(null);
157
- var isAuthenticated = ref(false);
158
- function useAuth() {
159
- async function fetchAuthUser() {
160
- try {
161
- if (!token.value) {
162
- isAuthenticated.value = false;
163
- user.value = null;
164
- return null;
165
- }
166
- const response = await fetch(`${baseUrl}/me`, {
167
- headers: {
168
- Authorization: `Bearer ${token.value}`,
169
- Accept: "application/json"
170
- }
171
- });
172
- if (!response.ok) {
173
- token.value = "";
174
- isAuthenticated.value = false;
175
- user.value = null;
176
- return null;
177
- }
178
- const data = await response.json();
179
- user.value = data;
180
- isAuthenticated.value = true;
181
- return data;
182
- } catch (error) {
183
- console.error("Error fetching user:", error);
184
- token.value = "";
185
- isAuthenticated.value = false;
186
- user.value = null;
187
- return null;
188
- }
189
- }
190
- async function checkAuthentication() {
191
- try {
192
- const userData = await fetchAuthUser();
193
- return userData !== null;
194
- } catch (error) {
195
- console.error("Error checking authentication:", error);
196
- return false;
197
- }
198
- }
199
- async function register(user2) {
200
- const url = `${baseUrl}/register`;
201
- const response = await fetch(url, {
202
- method: "POST",
203
- headers: {
204
- "Content-Type": "application/json"
205
- },
206
- body: JSON.stringify(user2)
207
- });
208
- const data = await response.json();
209
- if (isRegisterError(data)) {
210
- return data;
211
- }
212
- if (isRegisterResponse(data)) {
213
- token.value = data.token;
214
- return data;
215
- }
216
- return data;
217
- }
218
- function isRegisterError(data) {
219
- return "errors" in data;
220
- }
221
- function isRegisterResponse(data) {
222
- return "token" in data && "user" in data;
223
- }
224
- async function login(user2) {
225
- try {
226
- const url = `${baseUrl}/login`;
227
- const response = await fetch(url, {
228
- method: "POST",
229
- headers: {
230
- "Content-Type": "application/json"
231
- },
232
- body: JSON.stringify(user2)
233
- });
234
- if (!response.ok) {
235
- const errorData = await response.json();
236
- throw new Error(errorData.message || `HTTP error! status: ${response.status}`);
237
- }
238
- const data = await response.json();
239
- token.value = data.token;
240
- await fetchAuthUser();
241
- return data;
242
- } catch (error) {
243
- return error;
244
- }
245
- }
246
- async function logout() {
247
- try {
248
- const currentToken = token.value;
249
- if (currentToken) {
250
- await fetch(`${baseUrl}/logout`, {
251
- method: "POST",
252
- headers: {
253
- Authorization: `Bearer ${currentToken}`,
254
- Accept: "application/json"
255
- }
256
- });
257
- }
258
- } catch (error) {
259
- console.error("Error during logout:", error);
260
- } finally {
261
- token.value = "";
262
- user.value = null;
263
- isAuthenticated.value = false;
264
- }
265
- }
266
- return {
267
- user,
268
- isAuthenticated,
269
- token,
270
- getToken: () => token.value,
271
- register,
272
- login,
273
- logout,
274
- fetchAuthUser,
275
- checkAuthentication
276
- };
277
- }
278
- function authGuard(options = {}) {
279
- const guest = options.guest ?? false;
280
- const { isAuthenticated: isAuthenticated2 } = useAuth();
281
- if (guest) {
282
- if (isAuthenticated2.value) {
283
- window.location.replace("/");
284
- }
285
- return;
286
- }
287
- if (!isAuthenticated2.value) {
288
- window.location.replace("/login");
289
- }
290
- }
291
- // src/composables/useApi.ts
292
- import { configureBrowser, browserAuth } from "bun-query-builder/browser";
293
- function initApi(options) {
294
- const stacksConfig2 = globalThis.__STACKS_CONFIG__ || {};
295
- const baseUrl2 = options?.baseUrl || (typeof window !== "undefined" ? `${window.location.origin}/api` : `http://localhost:${process.env.PORT_API || "3008"}/api`);
296
- configureBrowser({
297
- baseUrl: baseUrl2,
298
- getToken: () => {
299
- if (typeof localStorage !== "undefined") {
300
- return localStorage.getItem("token");
301
- }
302
- return null;
303
- },
304
- onUnauthorized: options?.onUnauthorized || (() => {
305
- if (typeof window !== "undefined") {
306
- window.location.href = "/login";
307
- }
308
- }),
309
- transformResponse: (data) => {
310
- return data?.data ?? data;
311
- }
312
- });
313
- }
314
- var auth = browserAuth;
315
- function formatAreaSize(sqMeters) {
316
- if (sqMeters >= 1e6) {
317
- return `${(sqMeters / 1e6).toFixed(2)} km²`;
318
- }
319
- if (sqMeters >= 1e4) {
320
- return `${(sqMeters / 1e4).toFixed(2)} ha`;
321
- }
322
- return `${sqMeters.toLocaleString()} m²`;
323
- }
324
- function formatDistance(miles) {
325
- return `${miles.toFixed(1)} mi`;
326
- }
327
- function formatElevation(feet) {
328
- return `${feet.toLocaleString()} ft`;
329
- }
330
- function formatDuration(seconds) {
331
- const hours = Math.floor(seconds / 3600);
332
- const minutes = Math.floor(seconds % 3600 / 60);
333
- const secs = seconds % 60;
334
- if (hours > 0) {
335
- return `${hours}h ${minutes}m`;
336
- }
337
- if (minutes > 0) {
338
- return `${minutes}m ${secs}s`;
339
- }
340
- return `${secs}s`;
341
- }
342
- function getRelativeTime(dateString) {
343
- const date = new Date(dateString);
344
- const now = new Date;
345
- const diffMs = now.getTime() - date.getTime();
346
- const diffSeconds = Math.floor(diffMs / 1000);
347
- const diffMinutes = Math.floor(diffSeconds / 60);
348
- const diffHours = Math.floor(diffMinutes / 60);
349
- const diffDays = Math.floor(diffHours / 24);
350
- const diffWeeks = Math.floor(diffDays / 7);
351
- if (diffSeconds < 60)
352
- return "just now";
353
- if (diffMinutes < 60)
354
- return `${diffMinutes} minute${diffMinutes === 1 ? "" : "s"} ago`;
355
- if (diffHours < 24)
356
- return `${diffHours} hour${diffHours === 1 ? "" : "s"} ago`;
357
- if (diffDays < 7)
358
- return `${diffDays} day${diffDays === 1 ? "" : "s"} ago`;
359
- if (diffWeeks < 4)
360
- return `${diffWeeks} week${diffWeeks === 1 ? "" : "s"} ago`;
361
- return date.toLocaleDateString();
362
- }
363
- async function fetchData(fetcher, options) {
364
- try {
365
- return await fetcher();
366
- } catch (error) {
367
- if (options?.onError) {
368
- options.onError(error);
369
- } else {
370
- console.error("API Error:", error);
371
- }
372
- return options?.fallback;
373
- }
374
- }
375
-
376
- // src/composables/index.ts
377
- import {
378
- useColorMode,
379
- useDark,
380
- usePreferredColorScheme,
381
- usePreferredContrast,
382
- usePreferredDark,
383
- usePreferredReducedMotion,
384
- useDateFormat,
385
- useNow,
386
- useTimeAgo,
387
- useTimestamp,
388
- useFetch,
389
- useNetwork,
390
- useOnline,
391
- useLocalStorage,
392
- useSessionStorage,
393
- useStorage as useStorage2,
394
- useToggle,
395
- useCounter,
396
- useStepper,
397
- useCycleList,
398
- useActiveElement,
399
- useClipboard,
400
- useClipboardItems,
401
- useCssVar,
402
- useDocumentVisibility,
403
- useElementBounding,
404
- useElementHover,
405
- useElementSize,
406
- useElementVisibility,
407
- useFocus,
408
- useFocusWithin,
409
- useFullscreen,
410
- useScroll,
411
- useScrollLock,
412
- useTitle,
413
- useWindowFocus,
414
- useWindowScroll,
415
- useWindowSize,
416
- onClickOutside,
417
- onKeyDown,
418
- onKeyStroke,
419
- onKeyUp,
420
- onLongPress,
421
- onStartTyping,
422
- useEventListener,
423
- useKeyModifier,
424
- useMagicKeys,
425
- useDraggable,
426
- useDropZone,
427
- useMouse,
428
- useMouseInElement,
429
- useMousePressed,
430
- usePointer,
431
- usePointerSwipe,
432
- useSwipe,
433
- useBattery,
434
- useDeviceMotion,
435
- useDeviceOrientation,
436
- useDevicePixelRatio,
437
- useGeolocation,
438
- useBreakpoints,
439
- useMediaQuery,
440
- breakpointsTailwind,
441
- breakpointsBootstrapV5,
442
- useBrowserLocation,
443
- useIdle,
444
- useInfiniteScroll,
445
- useNavigatorLanguage,
446
- usePageLeave,
447
- usePreferredLanguages,
448
- useScreenOrientation,
449
- useTextDirection,
450
- useTextSelection,
451
- useUrlSearchParams,
452
- useDebounceFn,
453
- useInterval,
454
- useIntervalFn,
455
- useRafFn,
456
- useThrottleFn,
457
- useTimeout,
458
- useTimeoutFn,
459
- useTimeoutPoll,
460
- useAnimate,
461
- useTransition,
462
- TransitionPresets,
463
- useBase64,
464
- useBroadcastChannel,
465
- useConfirmDialog,
466
- useEventBus,
467
- useEventSource,
468
- useEyeDropper,
469
- useFavicon,
470
- useFileDialog,
471
- useImage,
472
- useObjectUrl,
473
- usePermission,
474
- useShare,
475
- useVibrate,
476
- useWakeLock,
477
- useWebNotification,
478
- useWebSocket,
479
- useWebWorker,
480
- useWebWorkerFn,
481
- useSupported,
482
- useMemoize,
483
- useMounted
484
- } from "@stacksjs/composables";
485
-
486
- // src/model-loader.ts
487
- import { createBrowserModel } from "bun-query-builder/browser";
488
- var modelModules = typeof import.meta.glob === "function" ? import.meta.glob("~/app/Models/*.ts", { eager: true }) : {};
489
- function loadBrowserModels() {
490
- if (typeof window === "undefined")
491
- return;
492
- if (!window.StacksBrowser) {
493
- window.StacksBrowser = {};
494
- }
495
- for (const [path, module] of Object.entries(modelModules)) {
496
- const definition = module.default;
497
- if (!definition || !definition.name) {
498
- console.warn(`[model-loader] Skipping ${path}: no valid model definition`);
499
- continue;
500
- }
501
- if (!definition.traits?.useApi?.uri) {
502
- continue;
503
- }
504
- try {
505
- const browserModel = createBrowserModel({
506
- name: definition.name,
507
- table: definition.table,
508
- primaryKey: definition.primaryKey || "id",
509
- traits: {
510
- useUuid: definition.traits?.useUuid ?? false,
511
- useTimestamps: definition.traits?.useTimestamps ?? true,
512
- useSoftDeletes: definition.traits?.useSoftDeletes ?? false,
513
- useApi: definition.traits?.useApi
514
- },
515
- attributes: extractBrowserAttributes(definition.attributes ?? {})
516
- });
517
- window.StacksBrowser[definition.name] = browserModel;
518
- } catch (error) {
519
- console.error(`[model-loader] Failed to create browser model for ${definition.name}:`, error);
520
- }
521
- }
522
- }
523
- function extractBrowserAttributes(attributes) {
524
- const browserAttrs = {};
525
- for (const [name, attr] of Object.entries(attributes)) {
526
- browserAttrs[name] = {
527
- fillable: attr.fillable ?? false,
528
- hidden: attr.hidden ?? false,
529
- guarded: attr.guarded ?? false,
530
- nullable: attr.nullable ?? false
531
- };
532
- }
533
- return browserAttrs;
534
- }
535
- function getBrowserModel(name) {
536
- if (typeof window === "undefined")
537
- return null;
538
- return window.StacksBrowser?.[name] ?? null;
539
- }
540
- function getBrowserModelNames() {
541
- if (typeof window === "undefined")
542
- return [];
543
- const stacksBrowser = window.StacksBrowser;
544
- if (!stacksBrowser)
545
- return [];
546
- return Object.keys(stacksBrowser).filter((key) => {
547
- const value = stacksBrowser[key];
548
- return value != null && typeof value.all === "function" && typeof value.find === "function";
549
- });
550
- }
551
-
552
- // src/auto-init.ts
553
- var isInitialized = false;
554
- function autoInit() {
555
- if (isInitialized)
556
- return;
557
- if (typeof window === "undefined")
558
- return;
559
- if (typeof document === "undefined")
560
- return;
561
- isInitialized = true;
562
- const baseUrl2 = window.__STACKS_API_URL__ || `${window.location.origin}/api`;
563
- configureBrowser2({
564
- baseUrl: baseUrl2,
565
- getToken: () => {
566
- try {
567
- return localStorage.getItem("token");
568
- } catch {
569
- return null;
570
- }
571
- },
572
- onUnauthorized: () => {
573
- const loginUrl = window.__STACKS_LOGIN_URL__ || "/login";
574
- if (!window.location.pathname.startsWith(loginUrl)) {
575
- window.location.href = loginUrl;
576
- }
577
- },
578
- transformResponse: (data) => {
579
- return data?.data ?? data;
580
- }
581
- });
582
- window.StacksBrowser = {
583
- browserQuery,
584
- BrowserQueryBuilder,
585
- BrowserQueryError,
586
- browserAuth: browserAuth2,
587
- configureBrowser: configureBrowser2,
588
- getBrowserConfig,
589
- createBrowserDb,
590
- createBrowserModel: createBrowserModel2,
591
- isBrowser,
592
- ...exports_composables
593
- };
594
- loadBrowserModels();
595
- window.dispatchEvent(new CustomEvent("stacks:api-ready"));
596
- if (window.__STACKS_DEBUG__) {
597
- console.debug("[Stacks] Browser API initialized:", baseUrl2);
598
- }
599
- }
600
- autoInit();
601
- // src/utils/base.ts
602
- import { toString } from "@stacksjs/strings";
603
- async function loop(times, callback) {
604
- Array.from({ length: times }).forEach(async (_, i) => await callback(i));
605
- }
606
- // src/utils/billable.ts
607
- import { loadStripe } from "@stripe/stripe-js";
608
- var stacksConfig2 = globalThis.__STACKS_CONFIG__ || {};
609
- var publishableKey = stacksConfig2.FRONTEND_STRIPE_PUBLIC_KEY || "";
610
- var client;
611
- async function loadCardElement(clientSecret) {
612
- client = await loadStripe(publishableKey);
613
- const elements = client.elements({ clientSecret });
614
- const cardElement = elements.create("card");
615
- cardElement.mount("#card-element");
616
- return cardElement;
617
- }
618
- async function loadPaymentElement(clientSecret) {
619
- client = await loadStripe(publishableKey);
620
- const elements = client.elements({ clientSecret });
621
- const paymentElement = elements.create("payment", {
622
- fields: { billingDetails: "auto" }
623
- });
624
- paymentElement.mount("#payment-element");
625
- return elements;
626
- }
627
- async function confirmCardSetup(clientSecret, elements) {
628
- const data = await client.confirmCardSetup(clientSecret, { payment_method: { card: elements } });
629
- const { setupIntent, error } = data;
630
- return { setupIntent, error };
631
- }
632
- async function confirmCardPayment(clientSecret, elements) {
633
- try {
634
- const data = await client.confirmCardPayment(clientSecret, {
635
- payment_method: {
636
- card: elements,
637
- billing_details: {
638
- name: stacksConfig2.USER_NAME || ""
639
- }
640
- }
641
- });
642
- const { paymentIntent, error } = data;
643
- return { paymentIntent, error };
644
- } catch (err) {
645
- console.error("Error confirming card payment:", err);
646
- return { paymentIntent: null, error: err };
647
- }
648
- }
649
- async function createPaymentMethod(elements) {
650
- try {
651
- const data = await client.createPaymentMethod({
652
- type: "card",
653
- card: elements
654
- });
655
- const { paymentIntent, error } = data;
656
- return { paymentIntent, error };
657
- } catch (err) {
658
- console.error("Error confirming card payment:", err);
659
- return { paymentIntent: null, error: err };
660
- }
661
- }
662
- async function confirmPayment(elements) {
663
- try {
664
- const data = await client.confirmPayment({
665
- elements,
666
- confirmParams: {
667
- return_url: `${window.location.origin}/settings/billing`
668
- }
669
- });
670
- const { paymentIntent, error } = data;
671
- return { paymentIntent, error };
672
- } catch (err) {
673
- console.error("Error confirming card payment:", err);
674
- return { paymentIntent: null, error: err };
675
- }
676
- }
677
- // src/utils/date.ts
678
- import { useDateFormat as useDateFormat2, useNow as useNow2 } from "@stacksjs/composables";
679
- import { format, parse } from "@stacksjs/datetime";
680
- // src/utils/debounce.ts
681
- function debounce(fn, wait = 0, options = {}) {
682
- const { leading = false, trailing = true } = options;
683
- let timeout = null;
684
- let lastArgs = null;
685
- let lastThis = null;
686
- let result;
687
- const invokeFunc = () => {
688
- if (lastArgs) {
689
- result = fn.apply(lastThis, lastArgs);
690
- lastArgs = null;
691
- lastThis = null;
692
- }
693
- return result;
694
- };
695
- const cancel = () => {
696
- if (timeout) {
697
- clearTimeout(timeout);
698
- timeout = null;
699
- }
700
- lastArgs = null;
701
- lastThis = null;
702
- };
703
- const flush = () => {
704
- if (timeout) {
705
- clearTimeout(timeout);
706
- timeout = null;
707
- return invokeFunc();
708
- }
709
- return result;
710
- };
711
- const debounced = function(...args) {
712
- lastArgs = args;
713
- lastThis = this;
714
- const shouldCallNow = leading && !timeout;
715
- if (timeout)
716
- clearTimeout(timeout);
717
- timeout = setTimeout(() => {
718
- timeout = null;
719
- if (trailing && lastArgs)
720
- invokeFunc();
721
- }, wait);
722
- if (shouldCallNow)
723
- return invokeFunc();
724
- return result;
725
- };
726
- debounced.cancel = cancel;
727
- debounced.flush = flush;
728
- return debounced;
729
- }
730
- // src/utils/fetch.ts
731
- var loading = false;
732
- var token2 = "";
733
- var baseURL = "/";
734
- function appendParam(search, key, value) {
735
- if (value === undefined || value === null)
736
- return;
737
- if (Array.isArray(value)) {
738
- for (const v of value)
739
- appendParam(search, key, v);
740
- return;
741
- }
742
- if (typeof value === "object") {
743
- search.append(key, JSON.stringify(value));
744
- return;
745
- }
746
- search.append(key, String(value));
747
- }
748
- function buildUrl(url, params) {
749
- const absolute = /^https?:\/\//i.test(url);
750
- const full = absolute ? url : `${baseURL.replace(/\/$/, "")}/${url.replace(/^\//, "")}`;
751
- if (!params || Object.keys(params).length === 0)
752
- return full;
753
- const search = new URLSearchParams;
754
- for (const [key, value] of Object.entries(params))
755
- appendParam(search, key, value);
756
- const qs = search.toString();
757
- if (!qs)
758
- return full;
759
- return full.includes("?") ? `${full}&${qs}` : `${full}?${qs}`;
760
- }
761
- function applyAuth(headers) {
762
- const h = headers ?? new Headers;
763
- if (token2 && !h.has("Authorization"))
764
- h.set("Authorization", `Bearer ${token2}`);
765
- return h;
766
- }
767
- async function parseBody(response) {
768
- const contentType = response.headers.get("content-type") ?? "";
769
- if (contentType.includes("application/json"))
770
- return await response.json();
771
- if (contentType.startsWith("text/") || contentType.includes("xml"))
772
- return await response.text();
773
- return await response.blob();
774
- }
775
- async function request(method, url, params, headers) {
776
- const sendsBody = method !== "GET" && method !== "DELETE";
777
- const finalUrl = sendsBody ? buildUrl(url) : buildUrl(url, params);
778
- const finalHeaders = applyAuth(headers);
779
- const init = { method, headers: finalHeaders };
780
- if (sendsBody && params !== undefined) {
781
- if (!finalHeaders.has("Content-Type"))
782
- finalHeaders.set("Content-Type", "application/json");
783
- init.body = JSON.stringify(params);
784
- }
785
- if (sendsBody)
786
- loading = true;
787
- try {
788
- const response = await fetch(finalUrl, init);
789
- if (!response.ok) {
790
- const errorBody = await parseBody(response).catch(() => null);
791
- const error = new Error(`Request failed with status ${response.status}`);
792
- error.status = response.status;
793
- error.data = errorBody;
794
- throw error;
795
- }
796
- return await parseBody(response);
797
- } finally {
798
- if (sendsBody)
799
- loading = false;
800
- }
801
- }
802
- async function get(url, params, headers) {
803
- return await request("GET", url, params, headers);
804
- }
805
- async function post(url, params, headers) {
806
- return await request("POST", url, params, headers);
807
- }
808
- async function patch(url, params, headers) {
809
- return await request("PATCH", url, params, headers);
810
- }
811
- async function put(url, params, headers) {
812
- return await request("PUT", url, params, headers);
813
- }
814
- async function destroy(url, params, headers) {
815
- return await request("DELETE", url, params, headers);
816
- }
817
- function setToken(authToken) {
818
- token2 = authToken;
819
- }
820
- var Fetch = {
821
- get,
822
- post,
823
- patch,
824
- put,
825
- destroy,
826
- baseURL,
827
- token: token2,
828
- setToken,
829
- loading
830
- };
831
- // src/utils/function.ts
832
- function batchInvoke(functions) {
833
- functions.forEach((fn) => fn?.());
834
- }
835
- function tap(value, callback) {
836
- callback(value);
837
- return value;
838
- }
839
- // src/utils/guards.ts
840
- function notNullish(v) {
841
- return v != null;
842
- }
843
- function noNull(v) {
844
- return v !== null;
845
- }
846
- function notUndefined(v) {
847
- return v !== undefined;
848
- }
849
- function isTruthy(v) {
850
- return Boolean(v);
851
- }
852
- // src/utils/lazy.ts
853
- function lazy(getter) {
854
- return {
855
- get value() {
856
- const value = getter();
857
- Object.defineProperty(this, "value", { value });
858
- return value;
859
- }
860
- };
861
- }
862
- // src/utils/math.ts
863
- import {
864
- and,
865
- logicNot,
866
- logicOr,
867
- or,
868
- useAbs,
869
- useAverage,
870
- useCeil,
871
- useClamp,
872
- useFloor,
873
- useMax,
874
- useMin,
875
- usePrecision,
876
- useRound,
877
- useSum,
878
- useTrunc
879
- } from "@stacksjs/composables";
880
- var clamp = (n, min, max) => Math.min(max, Math.max(min, n));
881
- function rand(min, max) {
882
- min = Math.ceil(min);
883
- max = Math.floor(max);
884
- return Math.floor(Math.random() * (max - min + 1)) + min;
885
- }
886
- // src/utils/plans.ts
887
- var saas = {
888
- plans: [
889
- {
890
- productName: "Stacks Hobby",
891
- description: "All the Stacks features.",
892
- pricing: [
893
- {
894
- key: "stacks_hobby_early_monthly",
895
- price: 1900,
896
- interval: "month",
897
- currency: "usd"
898
- },
899
- {
900
- key: "stacks_hobby_launch_monthly",
901
- price: 2900,
902
- interval: "month",
903
- currency: "usd"
904
- },
905
- {
906
- key: "stacks_hobby_monthly",
907
- price: 3900,
908
- interval: "month",
909
- currency: "usd"
910
- },
911
- {
912
- key: "stacks_hobby_yearly",
913
- price: 37900,
914
- interval: "year",
915
- currency: "usd"
916
- }
917
- ],
918
- metadata: {
919
- createdBy: "admin",
920
- version: "1.0.0"
921
- }
922
- },
923
- {
924
- productName: "Stacks Pro",
925
- description: "All the Stacks features, including being able to invite team members.",
926
- pricing: [
927
- {
928
- key: "stacks_pro_early_monthly",
929
- price: 3900,
930
- interval: "month",
931
- currency: "usd"
932
- },
933
- {
934
- key: "stacks_pro_monthly",
935
- price: 5900,
936
- interval: "month",
937
- currency: "usd"
938
- },
939
- {
940
- key: "stacks_pro_yearly",
941
- price: 57900,
942
- interval: "year",
943
- currency: "usd"
944
- },
945
- {
946
- key: "stacks_pro_early_yearly",
947
- price: 39000,
948
- interval: "year",
949
- currency: "usd"
950
- }
951
- ],
952
- metadata: {
953
- createdBy: "admin",
954
- version: "1.0.0"
955
- }
956
- },
957
- {
958
- productName: "Stacks Lifetime",
959
- description: "One-time lifetime access to all Stacks features.",
960
- pricing: [
961
- {
962
- key: "stacks_hobby_early_lifetime",
963
- price: 17900,
964
- currency: "usd"
965
- },
966
- {
967
- key: "stacks_hobby_launch_lifetime",
968
- price: 27900,
969
- currency: "usd"
970
- },
971
- {
972
- key: "stacks_hobby_lifetime",
973
- price: 47900,
974
- currency: "usd"
975
- },
976
- {
977
- key: "stacks_pro_early_lifetime",
978
- price: 27900,
979
- currency: "usd"
980
- },
981
- {
982
- key: "stacks_pro_launch_lifetime",
983
- price: 37900,
984
- currency: "usd"
985
- },
986
- {
987
- key: "stacks_pro_lifetime",
988
- price: 74900,
989
- currency: "usd"
990
- }
991
- ],
992
- metadata: {
993
- createdBy: "admin",
994
- version: "1.0.0"
995
- }
996
- }
997
- ],
998
- webhook: {
999
- endpoint: "your-webhook-endpoint",
1000
- secret: "your-webhook-secret"
1001
- },
1002
- currencies: ["usd"],
1003
- coupons: [],
1004
- products: [
1005
- {
1006
- name: "Stacks Hobby",
1007
- description: "All the Stacks features.",
1008
- images: ["image-url"]
1009
- },
1010
- {
1011
- name: "Stacks Pro",
1012
- description: "All the Stacks features, including team invites.",
1013
- images: ["image-url"]
1014
- },
1015
- {
1016
- name: "Stacks Lifetime",
1017
- description: "Lifetime access to Stacks features.",
1018
- images: ["image-url"]
1019
- }
1020
- ]
1021
- };
1022
- // src/utils/promise.ts
1023
- function createSingletonPromise(fn) {
1024
- let _promise;
1025
- function wrapper() {
1026
- if (!_promise)
1027
- _promise = fn();
1028
- return _promise;
1029
- }
1030
- wrapper.reset = async () => {
1031
- const _prev = _promise;
1032
- _promise = undefined;
1033
- if (_prev)
1034
- await _prev;
1035
- };
1036
- return wrapper;
1037
- }
1038
- function createPromiseLock() {
1039
- let currentPromise = Promise.resolve();
1040
- const queue = [];
1041
- return {
1042
- async run(fn) {
1043
- const runTask = async () => {
1044
- await currentPromise;
1045
- return fn();
1046
- };
1047
- const taskPromise = runTask();
1048
- queue.push(taskPromise);
1049
- currentPromise = taskPromise.catch(() => {}).finally(() => {
1050
- const index = queue.indexOf(taskPromise);
1051
- if (index > -1)
1052
- queue.splice(index, 1);
1053
- });
1054
- return taskPromise;
1055
- },
1056
- async wait() {
1057
- while (queue.length > 0) {
1058
- await Promise.all(queue);
1059
- }
1060
- },
1061
- isWaiting() {
1062
- return queue.length > 0;
1063
- },
1064
- clear() {
1065
- queue.length = 0;
1066
- currentPromise = Promise.resolve();
1067
- }
1068
- };
1069
- }
1070
- function createControlledPromise() {
1071
- let resolve;
1072
- let reject;
1073
- const promise = new Promise((_resolve, _reject) => {
1074
- resolve = _resolve;
1075
- reject = _reject;
1076
- });
1077
- promise.resolve = resolve;
1078
- promise.reject = reject;
1079
- return promise;
1080
- }
1081
- // src/utils/random.ts
1082
- var POOL_SIZE_MULTIPLIER = 128;
1083
- var pool = null;
1084
- var poolOffset = 0;
1085
- var urlAlphabet = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
1086
- function fillPool(bytes) {
1087
- if (!pool || pool.length < bytes) {
1088
- pool = new Uint8Array(bytes * POOL_SIZE_MULTIPLIER);
1089
- globalThis.crypto.getRandomValues(pool);
1090
- poolOffset = 0;
1091
- } else if (poolOffset + bytes > pool.length) {
1092
- globalThis.crypto.getRandomValues(pool);
1093
- poolOffset = 0;
1094
- }
1095
- poolOffset += bytes;
1096
- }
1097
- function randomPool(bytes) {
1098
- fillPool(bytes |= 0);
1099
- if (!pool) {
1100
- throw new Error("Pool is not initialized");
1101
- }
1102
- return pool.subarray(poolOffset - bytes, poolOffset);
1103
- }
1104
- function customRandom(alphabet, defaultSize, getRandom) {
1105
- const mask = (2 << 31 - Math.clz32(alphabet.length - 1 | 1)) - 1;
1106
- const step = Math.ceil(1.6 * mask * defaultSize / alphabet.length);
1107
- return (size = defaultSize) => {
1108
- let id = "";
1109
- while (true) {
1110
- const bytes = getRandom(step);
1111
- let i = step;
1112
- while (i--) {
1113
- const byte = bytes[i];
1114
- if (byte === undefined)
1115
- continue;
1116
- id += alphabet[byte & mask] || "";
1117
- if (id.length >= size)
1118
- return id;
1119
- }
1120
- }
1121
- };
1122
- }
1123
- function customAlphabet(alphabet, size = 21) {
1124
- return customRandom(alphabet, size, randomPool);
1125
- }
1126
- function randomNonSecure(size = 21) {
1127
- let id = "";
1128
- let i = size | 0;
1129
- while (i--) {
1130
- id += urlAlphabet[Math.random() * 64 | 0];
1131
- }
1132
- return id;
1133
- }
1134
- function random(size = 21) {
1135
- fillPool(size |= 0);
1136
- if (!pool) {
1137
- return "";
1138
- }
1139
- let id = "";
1140
- for (let i = poolOffset - size;i < poolOffset; i++) {
1141
- const byte = pool[i];
1142
- if (byte === undefined)
1143
- continue;
1144
- id += urlAlphabet[byte & 63];
1145
- }
1146
- return id;
1147
- }
1148
- // src/utils/regex.ts
1149
- import {
1150
- anyOf,
1151
- carriageReturn,
1152
- caseInsensitive,
1153
- char,
1154
- charIn,
1155
- charNotIn,
1156
- digit,
1157
- dotAll,
1158
- exactly,
1159
- global,
1160
- letter,
1161
- linefeed,
1162
- maybe,
1163
- multiline,
1164
- not,
1165
- oneOrMore,
1166
- sticky,
1167
- tab,
1168
- unicode,
1169
- whitespace,
1170
- withIndices,
1171
- word,
1172
- wordBoundary,
1173
- wordChar
1174
- } from "magic-regexp";
1175
- function createRegExp(pattern, options = {}) {
1176
- return new RegExp(pattern, options.flags);
1177
- }
1178
- // src/utils/retry.ts
1179
- function retry(fn, options = {}) {
1180
- const { retries = 3, initialDelay = 1000, backoffFactor = 2, jitter = true } = options;
1181
- return new Promise((resolve, reject) => {
1182
- let attemptCount = 0;
1183
- const attempt = async () => {
1184
- try {
1185
- resolve(await fn());
1186
- } catch (err) {
1187
- if (attemptCount >= retries) {
1188
- reject(err);
1189
- } else {
1190
- const delay = calculateDelay(attemptCount, initialDelay, backoffFactor, jitter);
1191
- setTimeout(() => attempt(), delay);
1192
- attemptCount++;
1193
- }
1194
- }
1195
- };
1196
- attempt();
1197
- });
1198
- }
1199
- function calculateDelay(attemptCount, initialDelay, backoffFactor, jitter) {
1200
- let delay = initialDelay * backoffFactor ** attemptCount;
1201
- if (jitter) {
1202
- const random2 = Math.random();
1203
- const jitterValue = delay * 0.3;
1204
- delay = delay + jitterValue * (random2 - 0.5) * 2;
1205
- }
1206
- return delay;
1207
- }
1208
- // src/utils/sleep.ts
1209
- function sleep(ms) {
1210
- if (ms < 0 || !Number.isInteger(ms)) {
1211
- throw new Error("sleep() requires a non-negative integer");
1212
- }
1213
- return new Promise((resolve) => setTimeout(resolve, ms));
1214
- }
1215
- function wait(ms) {
1216
- if (ms < 0 || !Number.isInteger(ms)) {
1217
- throw new Error("wait() requires a non-negative integer");
1218
- }
1219
- return new Promise((resolve) => setTimeout(resolve, ms));
1220
- }
1221
- function delay(ms) {
1222
- if (ms < 0 || !Number.isInteger(ms)) {
1223
- throw new Error("delay() requires a non-negative integer");
1224
- }
1225
- return new Promise((resolve) => setTimeout(resolve, ms));
1226
- }
1227
- function waitUntil(condition, options = {}) {
1228
- return new Promise((resolve) => {
1229
- const { interval, timeout } = normalizeOptions(options);
1230
- if (condition()) {
1231
- resolve();
1232
- return;
1233
- }
1234
- const check = () => {
1235
- if (condition()) {
1236
- resolve();
1237
- } else {
1238
- setTimeout(check, interval);
1239
- }
1240
- };
1241
- if (timeout) {
1242
- setTimeout(resolve, timeout);
1243
- }
1244
- check();
1245
- });
1246
- }
1247
- function normalizeOptions(options) {
1248
- if (typeof options === "number") {
1249
- return { interval: options, timeout: 0 };
1250
- }
1251
- return {
1252
- interval: options.interval ?? 100,
1253
- timeout: options.timeout ?? 0
1254
- };
1255
- }
1256
- function waitWhile(condition, options = {}) {
1257
- return new Promise((resolve) => {
1258
- const { interval = 100, timeout = 0 } = options;
1259
- if (!condition()) {
1260
- resolve();
1261
- return;
1262
- }
1263
- const check = () => {
1264
- if (!condition()) {
1265
- resolve();
1266
- } else {
1267
- setTimeout(check, interval);
1268
- }
1269
- };
1270
- if (timeout) {
1271
- setTimeout(resolve, timeout);
1272
- }
1273
- check();
1274
- });
1275
- }
1276
- // src/utils/throttle.ts
1277
- function throttle(fn, wait2 = 300) {
1278
- let inThrottle;
1279
- let lastFn;
1280
- let lastTime;
1281
- return function(...args) {
1282
- if (!inThrottle) {
1283
- fn.apply(this, args);
1284
- lastTime = Date.now();
1285
- inThrottle = true;
1286
- } else {
1287
- clearTimeout(lastFn);
1288
- lastFn = setTimeout(() => {
1289
- if (Date.now() - lastTime >= wait2) {
1290
- fn.apply(this, args);
1291
- lastTime = Date.now();
1292
- }
1293
- }, Math.max(wait2 - (Date.now() - lastTime), 0));
1294
- }
1295
- };
1296
- }
1297
- // src/utils/vendors.ts
1298
- import {
1299
- useDark as useDark2,
1300
- useDateFormat as useDateFormat3,
1301
- useFetch as useFetch2,
1302
- useNow as useNow3,
1303
- useOnline as useOnline2,
1304
- usePreferredDark as usePreferredDark2,
1305
- useStorage as useStorage3,
1306
- useToggle as useToggle2
1307
- } from "@stacksjs/composables";
1308
- import {
1309
- useHead,
1310
- useHead as useHead2,
1311
- renderHead
1312
- } from "@stacksjs/stx";
1313
- var DECIMAL_UNITS = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
1314
- var BINARY_UNITS = ["B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"];
1315
- function readableSize(bytes, options = {}) {
1316
- const {
1317
- precision = 1,
1318
- binary = false,
1319
- space = true,
1320
- locale = "en-US",
1321
- minimumFractionDigits = 0,
1322
- maximumFractionDigits = precision
1323
- } = options;
1324
- if (!Number.isFinite(bytes))
1325
- throw new TypeError(`Expected a finite number, got ${typeof bytes}: ${bytes}`);
1326
- const isNegative = bytes < 0;
1327
- const prefix = isNegative ? "-" : "";
1328
- if (isNegative)
1329
- bytes = -bytes;
1330
- if (bytes < 1) {
1331
- const numberString2 = bytes.toLocaleString(locale, { minimumFractionDigits, maximumFractionDigits });
1332
- return `${prefix}${numberString2}${space ? " " : ""}B`;
1333
- }
1334
- const base = binary ? 1024 : 1000;
1335
- const units = binary ? BINARY_UNITS : DECIMAL_UNITS;
1336
- const exponent = Math.min(Math.floor(Math.log(bytes) / Math.log(base)), units.length - 1);
1337
- const value = bytes / base ** exponent;
1338
- const numberString = value.toLocaleString(locale, { minimumFractionDigits, maximumFractionDigits });
1339
- return `${prefix}${numberString}${space ? " " : ""}${units[exponent]}`;
1340
- }
1341
- // src/index.ts
1342
- import {
1343
- browserQuery as browserQuery2,
1344
- BrowserQueryBuilder as BrowserQueryBuilder2,
1345
- BrowserQueryError as BrowserQueryError2,
1346
- browserAuth as browserAuth3,
1347
- configureBrowser as configureBrowser3,
1348
- getBrowserConfig as getBrowserConfig2,
1349
- createBrowserDb as createBrowserDb2,
1350
- createBrowserModel as createBrowserModel3,
1351
- isBrowser as isBrowser2
1352
- } from "bun-query-builder/browser";
1353
- export {
1354
- wordChar,
1355
- wordBoundary,
1356
- word,
1357
- withIndices,
1358
- whitespace,
1359
- waitWhile,
1360
- waitUntil,
1361
- wait,
1362
- useWindowSize,
1363
- useWindowScroll,
1364
- useWindowFocus,
1365
- useWebWorkerFn,
1366
- useWebWorker,
1367
- useWebSocket,
1368
- useWebNotification,
1369
- useWakeLock,
1370
- useVibrate,
1371
- useUrlSearchParams,
1372
- useTrunc,
1373
- useTransition,
1374
- useTitle,
1375
- useTimestamp,
1376
- useTimeoutPoll,
1377
- useTimeoutFn,
1378
- useTimeout,
1379
- useTimeAgo,
1380
- useThrottleFn,
1381
- useTextSelection,
1382
- useTextDirection,
1383
- useSwipe,
1384
- useSupported,
1385
- useSum,
1386
- useStepper,
1387
- useShare,
1388
- useSessionStorage,
1389
- useScrollLock,
1390
- useScroll,
1391
- useScreenOrientation,
1392
- useRound,
1393
- useRafFn,
1394
- usePreferredReducedMotion,
1395
- usePreferredLanguages,
1396
- usePreferredContrast,
1397
- usePreferredColorScheme,
1398
- usePrecision,
1399
- usePointerSwipe,
1400
- usePointer,
1401
- usePermission,
1402
- usePageLeave,
1403
- useObjectUrl,
1404
- useNetwork,
1405
- useNavigatorLanguage,
1406
- useMousePressed,
1407
- useMouseInElement,
1408
- useMouse,
1409
- useMounted,
1410
- useMin,
1411
- useMemoize,
1412
- useMediaQuery,
1413
- useMax,
1414
- useMagicKeys,
1415
- useLocalStorage,
1416
- useKeyModifier,
1417
- useIntervalFn,
1418
- useInterval,
1419
- useInfiniteScroll,
1420
- useImage,
1421
- useIdle,
1422
- useGeolocation,
1423
- useFullscreen,
1424
- useFocusWithin,
1425
- useFocus,
1426
- useFloor,
1427
- useFileDialog,
1428
- useFavicon,
1429
- useEyeDropper,
1430
- useEventSource,
1431
- useEventListener,
1432
- useEventBus,
1433
- useElementVisibility,
1434
- useElementSize,
1435
- useElementHover,
1436
- useElementBounding,
1437
- useDropZone,
1438
- useDraggable,
1439
- useDocumentVisibility,
1440
- useDevicePixelRatio,
1441
- useDeviceOrientation,
1442
- useDeviceMotion,
1443
- useDebounceFn,
1444
- useCycleList,
1445
- useCssVar,
1446
- useCounter,
1447
- useConfirmDialog,
1448
- useColorMode,
1449
- useClipboardItems,
1450
- useClipboard,
1451
- useClamp,
1452
- useCeil,
1453
- useBrowserLocation,
1454
- useBroadcastChannel,
1455
- useBreakpoints,
1456
- useBattery,
1457
- useBase64,
1458
- useAverage,
1459
- useAuth,
1460
- useAnimate,
1461
- useActiveElement,
1462
- useAbs,
1463
- unicode,
1464
- toString,
1465
- throttle,
1466
- tap,
1467
- tab,
1468
- sticky,
1469
- sleep,
1470
- saas,
1471
- retry,
1472
- renderHead as renderHeadToString,
1473
- readableSize,
1474
- randomNonSecure,
1475
- random,
1476
- rand,
1477
- publishableKey,
1478
- parse,
1479
- or,
1480
- oneOrMore,
1481
- onStartTyping,
1482
- onLongPress,
1483
- onKeyUp,
1484
- onKeyStroke,
1485
- onKeyDown,
1486
- onClickOutside,
1487
- notUndefined,
1488
- notNullish,
1489
- not,
1490
- noNull,
1491
- multiline,
1492
- maybe,
1493
- loop,
1494
- logicOr,
1495
- logicNot,
1496
- loadPaymentElement,
1497
- loadCardElement,
1498
- loadBrowserModels,
1499
- linefeed,
1500
- letter,
1501
- lazy,
1502
- isTruthy,
1503
- isBrowser2 as isBrowser,
1504
- initApi,
1505
- global,
1506
- getRelativeTime,
1507
- getBrowserModelNames,
1508
- getBrowserModel,
1509
- getBrowserConfig2 as getBrowserConfig,
1510
- formatElevation,
1511
- formatDuration,
1512
- formatDistance,
1513
- formatAreaSize,
1514
- format,
1515
- fetchData,
1516
- exactly,
1517
- dotAll,
1518
- digit,
1519
- delay,
1520
- debounce,
1521
- customRandom,
1522
- customAlphabet,
1523
- createSingletonPromise,
1524
- createRegExp,
1525
- createPromiseLock,
1526
- createPaymentMethod,
1527
- useHead as createHead,
1528
- createControlledPromise,
1529
- createBrowserModel3 as createBrowserModel,
1530
- createBrowserDb2 as createBrowserDb,
1531
- confirmPayment,
1532
- confirmCardSetup,
1533
- confirmCardPayment,
1534
- configureBrowser3 as configureBrowser,
1535
- clamp,
1536
- charNotIn,
1537
- charIn,
1538
- char,
1539
- caseInsensitive,
1540
- carriageReturn,
1541
- calculateDelay,
1542
- browserQuery2 as browserQuery,
1543
- browserAuth3 as browserAuth,
1544
- breakpointsTailwind,
1545
- breakpointsBootstrapV5,
1546
- batchInvoke,
1547
- authGuard,
1548
- auth,
1549
- anyOf,
1550
- and,
1551
- TransitionPresets,
1552
- useHead2 as Head,
1553
- Fetch,
1554
- BrowserQueryError2 as BrowserQueryError,
1555
- BrowserQueryBuilder2 as BrowserQueryBuilder
1556
- };