frosty 0.0.59 → 0.0.60

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 ADDED
@@ -0,0 +1,80 @@
1
+ # Frosty
2
+
3
+ A fast, flexible, and modern JSX-based UI library.
4
+
5
+ ## Features
6
+
7
+ - ⚡ Fast rendering and reconciliation
8
+ - 🧩 Flexible component model
9
+ - 🎨 Built-in style and CSS support
10
+ - 🪝 Modern hooks API (React-like)
11
+ - 🌐 SSR-ready (Server-side rendering)
12
+
13
+ ## Installation
14
+
15
+ Install Frosty using npm:
16
+
17
+ ```sh
18
+ npm install frosty
19
+ ```
20
+
21
+ ## Quick Start
22
+
23
+ Here's a simple example to get you started:
24
+
25
+ ```tsx
26
+ import { useState } from 'frosty';
27
+
28
+ function App() {
29
+ const [count, setCount] = useState(0);
30
+ return (
31
+ <div>
32
+ <span>Hello, Frosty!</span>
33
+ <button onClick={() => setCount(count + 1)}>Count: {count}</button>
34
+ </div>
35
+ );
36
+ }
37
+ ```
38
+
39
+ See the [API documentation](./docs) for more details and advanced usage.
40
+
41
+ ## TypeScript Setup
42
+
43
+ To enable JSX support with Frosty in TypeScript, update your `tsconfig.json`:
44
+
45
+ ```json
46
+ {
47
+ "compilerOptions": {
48
+ "jsx": "react-jsx",
49
+ "jsxImportSource": "frosty"
50
+ }
51
+ }
52
+ ```
53
+
54
+ This configures TypeScript to use Frosty's JSX runtime.
55
+
56
+ ## Babel Setup
57
+
58
+ To use Frosty with Babel, add the following to your Babel config:
59
+
60
+ ```json
61
+ {
62
+ "presets": [
63
+ [
64
+ "@babel/preset-react",
65
+ {
66
+ "runtime": "automatic",
67
+ "importSource": "frosty"
68
+ }
69
+ ]
70
+ ]
71
+ }
72
+ ```
73
+
74
+ ## Contributing
75
+
76
+ We welcome contributions! Please open issues or submit pull requests.
77
+
78
+ ## License
79
+
80
+ MIT © O2ter Limited
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { C as ComponentType, P as PropsWithChildren, S as SetStateAction, E as ElementNode, R as RefObject, a as Ref, b as ComponentNode, _ as _ElementType, N as NativeElementType, c as PropsType } from './internals/common-CfPzr225.js';
1
+ import { S as SetStateAction, C as ComponentType, P as PropsWithChildren, E as ElementNode, R as RefObject, a as Ref, b as ComponentNode, _ as _ElementType, N as NativeElementType, c as PropsType } from './internals/common-CfPzr225.js';
2
2
  export { h as CSSProperties, e as ClassName, j as ComponentProps, k as ComponentPropsWithoutRef, m as ComponentRef, g as ExtendedCSSProperties, i as RefAttribute, l as RefCallback, f as StyleProp, d as createElement } from './internals/common-CfPzr225.js';
3
3
  import _ from 'lodash';
4
4
  import { Awaitable } from '@o2ter/utils-js';
@@ -83,7 +83,7 @@ type Fetch<T, P> = (x: {
83
83
  abortSignal: AbortSignal;
84
84
  param?: P;
85
85
  prevState?: T;
86
- dispatch: (value: T | ((prevState?: T) => T)) => void;
86
+ dispatch: (value: SetStateAction<T, T | undefined>) => void;
87
87
  }) => PromiseLike<void | T>;
88
88
  /**
89
89
  * Represents a function to fetch asynchronous iterable resources, such as streams or paginated data.
package/dist/web.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { R as RefObject, S as SetStateAction } from './internals/common-CfPzr225.js';
1
+ import { S as SetStateAction, R as RefObject } from './internals/common-CfPzr225.js';
2
2
  import * as jsdom from 'jsdom';
3
3
  export { D as DOMNativeNode, _ as _DOMRenderer } from './internals/common-dr6cqGx7.js';
4
4
  import '@o2ter/utils-js';
@@ -66,7 +66,9 @@ type URLSearchParamsInit = ConstructorParameters<typeof URLSearchParams>[0];
66
66
  * const page = searchParams.get('page');
67
67
  * setSearchParams({ page: '2', filter: 'active' });
68
68
  */
69
- declare const useSearchParams: () => (URLSearchParams | ((params: URLSearchParamsInit) => void))[];
69
+ declare const useSearchParams: () => readonly [URLSearchParams, (dispatch: SetStateAction<URLSearchParamsInit, URLSearchParams>, config?: {
70
+ replace?: boolean;
71
+ }) => void];
70
72
 
71
73
  declare const useResizeObserver: (target: RefObject<Element | null | undefined> | Element | null | undefined, callback: (entry: ResizeObserverEntry) => void, options?: ResizeObserverOptions) => void;
72
74
  declare const useIntersectionObserver: (target: RefObject<Element | null | undefined> | Element | null | undefined, callback: (entry: IntersectionObserverEntry) => void) => void;
package/dist/web.js CHANGED
@@ -49,6 +49,117 @@ const useDocument = () => {
49
49
  }
50
50
  };
51
51
 
52
+ //
53
+ // window.ts
54
+ //
55
+ // The MIT License
56
+ // Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.
57
+ //
58
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
59
+ // of this software and associated documentation files (the "Software"), to deal
60
+ // in the Software without restriction, including without limitation the rights
61
+ // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
62
+ // copies of the Software, and to permit persons to whom the Software is
63
+ // furnished to do so, subject to the following conditions:
64
+ //
65
+ // The above copyright notice and this permission notice shall be included in
66
+ // all copies or substantial portions of the Software.
67
+ //
68
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
69
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
70
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
71
+ // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
72
+ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
73
+ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
74
+ // THE SOFTWARE.
75
+ //
76
+ const useWindow = () => {
77
+ const state$1 = state.reconciler.currentHookState;
78
+ if (!state$1)
79
+ throw Error('useWindow must be used within a render function.');
80
+ if (state$1.renderer instanceof common._DOMRenderer) {
81
+ return state$1.renderer.window;
82
+ }
83
+ else {
84
+ throw Error('Unsupported renderer.');
85
+ }
86
+ };
87
+ const emptyInsets = { top: 0, left: 0, right: 0, bottom: 0 };
88
+ const safeAreaInsets = (window) => {
89
+ let support;
90
+ if (!('CSS' in window) || !_.isFunction(window.CSS.supports)) {
91
+ return emptyInsets;
92
+ }
93
+ if (window.CSS.supports('top: env(safe-area-inset-top)')) {
94
+ support = 'env';
95
+ }
96
+ else if (window.CSS.supports('top: constant(safe-area-inset-top)')) {
97
+ support = 'constant';
98
+ }
99
+ else {
100
+ return emptyInsets;
101
+ }
102
+ const id = state.uniqueId();
103
+ const style = document.createElement('style');
104
+ style.textContent = `:root {
105
+ --${id}-top: ${support}(safe-area-inset-top);
106
+ --${id}-left: ${support}(safe-area-inset-left);
107
+ --${id}-right: ${support}(safe-area-inset-right);
108
+ --${id}-bottom: ${support}(safe-area-inset-bottom);
109
+ }`;
110
+ document.head.appendChild(style);
111
+ const computedStyle = getComputedStyle(document.documentElement);
112
+ const insets = {
113
+ top: computedStyle.getPropertyValue(`--${id}-top`),
114
+ left: computedStyle.getPropertyValue(`--${id}-left`),
115
+ right: computedStyle.getPropertyValue(`--${id}-right`),
116
+ bottom: computedStyle.getPropertyValue(`--${id}-bottom`),
117
+ };
118
+ style.remove();
119
+ return _.mapValues(insets, v => parseFloat(v));
120
+ };
121
+ const useWindowMetrics = () => {
122
+ const window = useWindow();
123
+ return sync.useSyncExternalStore((onStoreChange) => {
124
+ window.addEventListener('resize', onStoreChange);
125
+ return () => {
126
+ window.removeEventListener('resize', onStoreChange);
127
+ };
128
+ }, () => ({
129
+ safeAreaInsets: safeAreaInsets(window),
130
+ devicePixelRatio: window.devicePixelRatio,
131
+ outerWidth: window.outerWidth,
132
+ outerHeight: window.outerHeight,
133
+ innerWidth: window.innerWidth,
134
+ innerHeight: window.innerHeight,
135
+ }));
136
+ };
137
+ const useWindowScroll = () => {
138
+ const window = useWindow();
139
+ return sync.useSyncExternalStore((onStoreChange) => {
140
+ window.addEventListener('scroll', onStoreChange);
141
+ return () => {
142
+ window.removeEventListener('scroll', onStoreChange);
143
+ };
144
+ }, () => ({
145
+ scrollX: window.scrollX,
146
+ scrollY: window.scrollY,
147
+ }));
148
+ };
149
+ const colorSchemeDarkCache = new WeakMap();
150
+ const useColorScheme = () => {
151
+ const window = useWindow();
152
+ if (!colorSchemeDarkCache.has(window))
153
+ colorSchemeDarkCache.set(window, window.matchMedia?.('(prefers-color-scheme: dark)'));
154
+ const colorSchemeDark = colorSchemeDarkCache.get(window);
155
+ return sync.useSyncExternalStore((onStoreChange) => {
156
+ colorSchemeDark?.addEventListener('change', onStoreChange);
157
+ return () => {
158
+ colorSchemeDark?.removeEventListener('change', onStoreChange);
159
+ };
160
+ }, () => colorSchemeDark?.matches ? 'dark' : 'light');
161
+ };
162
+
52
163
  //
53
164
  // location.ts
54
165
  //
@@ -106,10 +217,10 @@ const emitterFor$1 = (document) => {
106
217
  * location.pushState({ some: 'state' }, '/new-path');
107
218
  */
108
219
  const useLocation = () => {
109
- const document = useDocument();
110
- const emitter = emitterFor$1(document);
220
+ const window = useWindow();
221
+ const emitter = emitterFor$1(window.document);
111
222
  const result = (history) => ({
112
- ..._.pick(document.location, 'hash', 'host', 'hostname', 'href', 'origin', 'pathname', 'port', 'protocol', 'search'),
223
+ ..._.pick(window.document.location, 'hash', 'host', 'hostname', 'href', 'origin', 'pathname', 'port', 'protocol', 'search'),
113
224
  state: history?.state ?? null,
114
225
  back: () => {
115
226
  history?.back();
@@ -134,7 +245,7 @@ const useLocation = () => {
134
245
  window.removeEventListener('popstate', onStoreChange);
135
246
  event.remove();
136
247
  };
137
- }, () => result(window.history), () => result());
248
+ }, () => result(window.history));
138
249
  };
139
250
  /**
140
251
  * A hook for reading and updating the URL's query string (search parameters).
@@ -154,9 +265,15 @@ const useLocation = () => {
154
265
  const useSearchParams = () => {
155
266
  const location = useLocation();
156
267
  const searchParams = sync.useMemo(() => new URLSearchParams(location.search), [location.search]);
157
- const setSearchParams = sync.useCallback((params) => {
268
+ const setSearchParams = sync.useCallback((dispatch, config) => {
269
+ const params = _.isFunction(dispatch) ? dispatch(new URLSearchParams(location.search)) : dispatch;
158
270
  const newParams = new URLSearchParams(params);
159
- location.pushState(location.state, `?${newParams.toString()}`);
271
+ if (config?.replace === false) {
272
+ location.pushState(location.state, `?${newParams.toString()}`);
273
+ }
274
+ else {
275
+ location.replaceState(location.state, `?${newParams.toString()}`);
276
+ }
160
277
  });
161
278
  return [searchParams, setSearchParams];
162
279
  };
@@ -404,117 +521,6 @@ const useVisibility = () => {
404
521
  }, () => 'unknown');
405
522
  };
406
523
 
407
- //
408
- // window.ts
409
- //
410
- // The MIT License
411
- // Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.
412
- //
413
- // Permission is hereby granted, free of charge, to any person obtaining a copy
414
- // of this software and associated documentation files (the "Software"), to deal
415
- // in the Software without restriction, including without limitation the rights
416
- // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
417
- // copies of the Software, and to permit persons to whom the Software is
418
- // furnished to do so, subject to the following conditions:
419
- //
420
- // The above copyright notice and this permission notice shall be included in
421
- // all copies or substantial portions of the Software.
422
- //
423
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
424
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
425
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
426
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
427
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
428
- // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
429
- // THE SOFTWARE.
430
- //
431
- const useWindow = () => {
432
- const state$1 = state.reconciler.currentHookState;
433
- if (!state$1)
434
- throw Error('useWindow must be used within a render function.');
435
- if (state$1.renderer instanceof common._DOMRenderer) {
436
- return state$1.renderer.window;
437
- }
438
- else {
439
- throw Error('Unsupported renderer.');
440
- }
441
- };
442
- const emptyInsets = { top: 0, left: 0, right: 0, bottom: 0 };
443
- const safeAreaInsets = (window) => {
444
- let support;
445
- if (!('CSS' in window) || !_.isFunction(window.CSS.supports)) {
446
- return emptyInsets;
447
- }
448
- if (window.CSS.supports('top: env(safe-area-inset-top)')) {
449
- support = 'env';
450
- }
451
- else if (window.CSS.supports('top: constant(safe-area-inset-top)')) {
452
- support = 'constant';
453
- }
454
- else {
455
- return emptyInsets;
456
- }
457
- const id = state.uniqueId();
458
- const style = document.createElement('style');
459
- style.textContent = `:root {
460
- --${id}-top: ${support}(safe-area-inset-top);
461
- --${id}-left: ${support}(safe-area-inset-left);
462
- --${id}-right: ${support}(safe-area-inset-right);
463
- --${id}-bottom: ${support}(safe-area-inset-bottom);
464
- }`;
465
- document.head.appendChild(style);
466
- const computedStyle = getComputedStyle(document.documentElement);
467
- const insets = {
468
- top: computedStyle.getPropertyValue(`--${id}-top`),
469
- left: computedStyle.getPropertyValue(`--${id}-left`),
470
- right: computedStyle.getPropertyValue(`--${id}-right`),
471
- bottom: computedStyle.getPropertyValue(`--${id}-bottom`),
472
- };
473
- style.remove();
474
- return _.mapValues(insets, v => parseFloat(v));
475
- };
476
- const useWindowMetrics = () => {
477
- const window = useWindow();
478
- return sync.useSyncExternalStore((onStoreChange) => {
479
- window.addEventListener('resize', onStoreChange);
480
- return () => {
481
- window.removeEventListener('resize', onStoreChange);
482
- };
483
- }, () => ({
484
- safeAreaInsets: safeAreaInsets(window),
485
- devicePixelRatio: window.devicePixelRatio,
486
- outerWidth: window.outerWidth,
487
- outerHeight: window.outerHeight,
488
- innerWidth: window.innerWidth,
489
- innerHeight: window.innerHeight,
490
- }));
491
- };
492
- const useWindowScroll = () => {
493
- const window = useWindow();
494
- return sync.useSyncExternalStore((onStoreChange) => {
495
- window.addEventListener('scroll', onStoreChange);
496
- return () => {
497
- window.removeEventListener('scroll', onStoreChange);
498
- };
499
- }, () => ({
500
- scrollX: window.scrollX,
501
- scrollY: window.scrollY,
502
- }));
503
- };
504
- const colorSchemeDarkCache = new WeakMap();
505
- const useColorScheme = () => {
506
- const window = useWindow();
507
- if (!colorSchemeDarkCache.has(window))
508
- colorSchemeDarkCache.set(window, window.matchMedia?.('(prefers-color-scheme: dark)'));
509
- const colorSchemeDark = colorSchemeDarkCache.get(window);
510
- return sync.useSyncExternalStore((onStoreChange) => {
511
- colorSchemeDark?.addEventListener('change', onStoreChange);
512
- return () => {
513
- colorSchemeDark?.removeEventListener('change', onStoreChange);
514
- };
515
- }, () => colorSchemeDark?.matches ? 'dark' : 'light');
516
- };
517
-
518
524
  exports.DOMNativeNode = common.DOMNativeNode;
519
525
  exports.useColorScheme = useColorScheme;
520
526
  exports.useDocument = useDocument;
package/dist/web.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"web.js","sources":["../../src/web/document.ts","../../src/web/location.ts","../../src/web/observer.ts","../../src/web/online.ts","../../src/web/storage.ts","../../src/web/visibility.ts","../../src/web/window.ts"],"sourcesContent":["//\n// document.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { reconciler } from '../core/reconciler/state';\nimport { _DOMRenderer } from '../renderer/common';\n\nexport const useDocument = () => {\n const state = reconciler.currentHookState;\n if (!state) throw Error('useDocument must be used within a render function.');\n if (state.renderer instanceof _DOMRenderer) {\n return state.renderer.document;\n } else {\n throw Error('Unsupported renderer.');\n }\n}","//\n// location.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useMemo } from '../core/hooks/memo';\nimport { useCallback } from '../core/hooks/callback';\nimport { useSyncExternalStore } from '../core/hooks/sync';\nimport { EventEmitter } from '../core/reconciler/events';\nimport { useDocument } from './document';\n\nconst emitters = new WeakMap<Document, EventEmitter>();\nconst emitterFor = (document: Document) => {\n if (!emitters.has(document)) emitters.set(document, new EventEmitter());\n return emitters.get(document)!;\n}\n\n/**\n * A hook that provides the current browser location and methods to manipulate the browser history.\n *\n * @returns An object with the following properties and methods:\n * - `hash`: The fragment identifier of the URL.\n * - `host`: The hostname and port number.\n * - `hostname`: The domain name.\n * - `href`: The full URL.\n * - `origin`: The protocol, hostname, and port.\n * - `pathname`: The path of the URL.\n * - `port`: The port number.\n * - `protocol`: The protocol scheme.\n * - `search`: The query string.\n * - `state`: The current state object associated with the history entry.\n * - `back()`: Navigates to the previous entry in the history stack.\n * - `forward()`: Navigates to the next entry in the history stack.\n * - `pushState(data, url)`: Pushes a new entry onto the history stack.\n * - `replaceState(data, url)`: Replaces the current history entry.\n *\n * The hook subscribes to changes in the browser's history and location, causing components to re-render when navigation occurs.\n *\n * @example\n * const location = useLocation();\n * console.log(location.pathname); // e.g., \"/about\"\n * location.pushState({ some: 'state' }, '/new-path');\n */\nexport const useLocation = () => {\n const document = useDocument();\n const emitter = emitterFor(document);\n const result = (history?: History) => ({\n ..._.pick(document.location, 'hash', 'host', 'hostname', 'href', 'origin', 'pathname', 'port', 'protocol', 'search'),\n state: history?.state ?? null,\n back: () => {\n history?.back();\n },\n forward: () => {\n history?.forward();\n emitter.emit('change');\n },\n pushState: (data: any, url?: string | URL | null) => {\n history?.pushState(data, '', url);\n emitter.emit('change');\n },\n replaceState: (data: any, url?: string | URL | null) => {\n history?.replaceState(data, '', url);\n emitter.emit('change');\n },\n });\n return useSyncExternalStore((onStoreChange) => {\n window.addEventListener('popstate', onStoreChange);\n const event = emitter.register('change', onStoreChange);\n return () => {\n window.removeEventListener('popstate', onStoreChange);\n event.remove();\n }\n }, () => result(window.history), () => result());\n}\n\ntype URLSearchParamsInit = ConstructorParameters<typeof URLSearchParams>[0];\n\n/**\n * A hook for reading and updating the URL's query string (search parameters).\n *\n * @returns A tuple:\n * - The first element is a `URLSearchParams` instance representing the current query string.\n * - The second element is a function to update the search parameters, which accepts any valid\n * `URLSearchParams` initializer (string, array, or object).\n *\n * Updating the search parameters will push a new history entry and update the URL in the address bar.\n *\n * @example\n * const [searchParams, setSearchParams] = useSearchParams();\n * const page = searchParams.get('page');\n * setSearchParams({ page: '2', filter: 'active' });\n */\nexport const useSearchParams = () => {\n const location = useLocation();\n const searchParams = useMemo(() => new URLSearchParams(location.search), [location.search]);\n const setSearchParams = useCallback((params: URLSearchParamsInit) => {\n const newParams = new URLSearchParams(params);\n location.pushState(location.state, `?${newParams.toString()}`);\n });\n return [searchParams, setSearchParams];\n}\n","//\n// observer.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useEffect } from '../core/hooks/effect';\nimport { useCallback } from '../core/hooks/callback';\nimport { RefObject } from '../core/types/common';\n\ninterface _Observer<T> {\n observe(target: Element, options?: T): void;\n unobserve(target: Element): void;\n}\n\nconst createObserver = <E extends { target: Element; }, T>(\n constructor: new (callback: (entries: E[]) => void) => _Observer<T>\n) => {\n const listeners = new WeakMap<Element, ((entry: E) => void)[]>();\n const observer = new constructor((entries) => {\n for (const entry of entries) {\n for (const listener of listeners.get(entry.target) ?? []) {\n (async () => {\n try {\n await listener(entry);\n } catch (e) {\n console.error(e);\n }\n })();\n }\n }\n });\n return {\n observe: (target: Element, callback: (entry: E) => void, options?: T) => {\n observer.observe(target, options);\n listeners.set(target, [...listeners.get(target) ?? [], callback]);\n },\n unobserve: (target: Element, callback: (entry: E) => void) => {\n const list = _.filter(listeners.get(target), x => x !== callback);\n listeners.set(target, list);\n if (_.isEmpty(list)) observer.unobserve?.(target);\n },\n };\n};\n\nconst observer = typeof window === 'undefined' ? undefined : {\n resize: createObserver(ResizeObserver),\n intersection: createObserver(IntersectionObserver),\n};\n\nexport const useResizeObserver = (\n target: RefObject<Element | null | undefined> | Element | null | undefined,\n callback: (entry: ResizeObserverEntry) => void,\n options?: ResizeObserverOptions,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\n const _target = target && 'current' in target ? target.current : target;\n if (!observer || !_target) return;\n observer.resize.observe(_target, _callback, options);\n return () => observer.resize.unobserve(_target, _callback);\n }, [target]);\n}\n\nexport const useIntersectionObserver = (\n target: RefObject<Element | null | undefined> | Element | null | undefined,\n callback: (entry: IntersectionObserverEntry) => void,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\n const _target = target && 'current' in target ? target.current : target;\n if (!observer || !_target) return;\n observer.intersection.observe(_target, _callback);\n return () => observer.intersection.unobserve(_target, _callback);\n }, [target]);\n}\n\nexport const useMutationObserver = (\n target: RefObject<Node | null | undefined> | Node | null | undefined,\n callback: MutationCallback,\n options?: MutationObserverInit,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\n const _target = target && 'current' in target ? target.current : target;\n if (typeof window === 'undefined' || !_target) return;\n const observer = new MutationObserver(_callback);\n observer.observe(_target, options);\n return () => observer.disconnect();\n }, [target]);\n}\n\nexport const usePerformanceObserver = (\n callback: PerformanceObserverCallback,\n options?: PerformanceObserverInit,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const observer = new PerformanceObserver(_callback);\n observer.observe(options);\n return () => observer.disconnect();\n }, []);\n}\n","//\n// online.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useSyncExternalStore } from '../core/hooks/sync';\n\nexport const useOnline = () => useSyncExternalStore((onStoreChange) => {\n window.addEventListener('offline', onStoreChange);\n window.addEventListener('online', onStoreChange);\n return () => {\n window.removeEventListener('offline', onStoreChange);\n window.removeEventListener('online', onStoreChange);\n };\n}, () => navigator.onLine, () => false);","//\n// storage.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useSyncExternalStore } from '../core/hooks/sync';\nimport { useCallback } from '../core/hooks/callback';\nimport { SetStateAction } from '../core/types/common';\nimport { EventEmitter } from '../core/reconciler/events';\n\nconst emitters = new WeakMap<Storage, EventEmitter>();\nconst emitterFor = (storage: Storage) => {\n if (!emitters.has(storage)) emitters.set(storage, new EventEmitter());\n return emitters.get(storage)!;\n}\n\nconst _useStorage = (\n storage: () => Storage,\n key: string,\n initialValue?: string | null\n) => {\n const state = useSyncExternalStore((onStoreChange) => {\n const _storage = storage();\n const emitter = emitterFor(_storage);\n const callback = (ev: StorageEvent) => { \n if (!ev.storageArea || ev.storageArea === _storage) onStoreChange();\n };\n window.addEventListener('storage', callback);\n const event = emitter.register('change', onStoreChange);\n return () => {\n window.removeEventListener('storage', callback);\n event.remove();\n }\n }, () => storage().getItem(key), () => undefined);\n const setState = useCallback((v: SetStateAction<string | null | undefined>) => {\n try {\n const _storage = storage();\n const newValue = _.isFunction(v) ? v(state) : v;\n if (_.isNil(newValue)) {\n _storage.removeItem(key);\n } else {\n _storage.setItem(key, newValue);\n }\n const emitter = emitterFor(_storage);\n emitter.emit('change');\n } catch (e) {\n console.error(e);\n }\n }, [key]);\n return [state ?? initialValue ?? null, setState] as const;\n}\n\nexport const useLocalStorage = (\n key: string,\n initialValue?: string | null\n) => _useStorage(() => window.localStorage, key, initialValue);\n\nexport const useSessionStorage = (\n key: string,\n initialValue?: string | null\n) => _useStorage(() => window.sessionStorage, key, initialValue);\n","//\n// visibility.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useSyncExternalStore } from '../core/hooks/sync';\nimport { useDocument } from './document';\n\nexport const useVisibility = () => {\n const document = useDocument();\n return useSyncExternalStore((onStoreChange) => {\n document.addEventListener('visibilitychange', onStoreChange);\n return () => {\n document.removeEventListener('visibilitychange', onStoreChange);\n }\n }, () => {\n if (document.hasFocus()) {\n return 'active' as const;\n } else if (document.visibilityState === 'visible') {\n return 'inactive' as const;\n } else {\n return 'background' as const;\n }\n }, () => 'unknown' as const);\n}\n","//\n// window.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useSyncExternalStore } from '../core/hooks/sync';\nimport { uniqueId } from '../core/utils';\nimport { reconciler } from '../core/reconciler/state';\nimport { _DOMRenderer } from '../renderer/common';\n\nexport const useWindow = () => {\n const state = reconciler.currentHookState;\n if (!state) throw Error('useWindow must be used within a render function.');\n if (state.renderer instanceof _DOMRenderer) {\n return state.renderer.window;\n } else {\n throw Error('Unsupported renderer.');\n }\n}\n\nconst emptyInsets = { top: 0, left: 0, right: 0, bottom: 0 };\nconst safeAreaInsets = (window: ReturnType<typeof useWindow>) => {\n let support;\n if (!('CSS' in window) || !_.isFunction(window.CSS.supports)) {\n return emptyInsets;\n }\n if (window.CSS.supports('top: env(safe-area-inset-top)')) {\n support = 'env'\n } else if (window.CSS.supports('top: constant(safe-area-inset-top)')) {\n support = 'constant'\n } else {\n return emptyInsets;\n }\n const id = uniqueId();\n const style = document.createElement('style');\n style.textContent = `:root {\n --${id}-top: ${support}(safe-area-inset-top);\n --${id}-left: ${support}(safe-area-inset-left);\n --${id}-right: ${support}(safe-area-inset-right);\n --${id}-bottom: ${support}(safe-area-inset-bottom);\n }`;\n document.head.appendChild(style);\n const computedStyle = getComputedStyle(document.documentElement);\n const insets = {\n top: computedStyle.getPropertyValue(`--${id}-top`),\n left: computedStyle.getPropertyValue(`--${id}-left`),\n right: computedStyle.getPropertyValue(`--${id}-right`),\n bottom: computedStyle.getPropertyValue(`--${id}-bottom`),\n };\n style.remove();\n return _.mapValues(insets, v => parseFloat(v));\n}\n\nexport const useWindowMetrics = () => {\n const window = useWindow();\n return useSyncExternalStore((onStoreChange) => {\n window.addEventListener('resize', onStoreChange);\n return () => {\n window.removeEventListener('resize', onStoreChange);\n };\n }, () => ({\n safeAreaInsets: safeAreaInsets(window),\n devicePixelRatio: window.devicePixelRatio,\n outerWidth: window.outerWidth,\n outerHeight: window.outerHeight,\n innerWidth: window.innerWidth,\n innerHeight: window.innerHeight,\n }));\n}\n\nexport const useWindowScroll = () => {\n const window = useWindow();\n return useSyncExternalStore((onStoreChange) => {\n window.addEventListener('scroll', onStoreChange);\n return () => {\n window.removeEventListener('scroll', onStoreChange);\n };\n }, () => ({\n scrollX: window.scrollX,\n scrollY: window.scrollY,\n }));\n}\n\nconst colorSchemeDarkCache = new WeakMap<ReturnType<typeof useWindow>, MediaQueryList | undefined>();\n\nexport const useColorScheme = () => {\n const window = useWindow();\n if (!colorSchemeDarkCache.has(window)) colorSchemeDarkCache.set(window, window.matchMedia?.('(prefers-color-scheme: dark)'));\n const colorSchemeDark = colorSchemeDarkCache.get(window);\n return useSyncExternalStore((onStoreChange) => {\n colorSchemeDark?.addEventListener('change', onStoreChange);\n return () => {\n colorSchemeDark?.removeEventListener('change', onStoreChange);\n };\n }, () => colorSchemeDark?.matches ? 'dark' : 'light');\n}\n"],"names":["state","reconciler","_DOMRenderer","emitters","emitterFor","EventEmitter","useSyncExternalStore","useMemo","useCallback","useEffect","uniqueId"],"mappings":"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"}
1
+ {"version":3,"file":"web.js","sources":["../../src/web/document.ts","../../src/web/window.ts","../../src/web/location.ts","../../src/web/observer.ts","../../src/web/online.ts","../../src/web/storage.ts","../../src/web/visibility.ts"],"sourcesContent":["//\n// document.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { reconciler } from '../core/reconciler/state';\nimport { _DOMRenderer } from '../renderer/common';\n\nexport const useDocument = () => {\n const state = reconciler.currentHookState;\n if (!state) throw Error('useDocument must be used within a render function.');\n if (state.renderer instanceof _DOMRenderer) {\n return state.renderer.document;\n } else {\n throw Error('Unsupported renderer.');\n }\n}","//\n// window.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useSyncExternalStore } from '../core/hooks/sync';\nimport { uniqueId } from '../core/utils';\nimport { reconciler } from '../core/reconciler/state';\nimport { _DOMRenderer } from '../renderer/common';\n\nexport const useWindow = () => {\n const state = reconciler.currentHookState;\n if (!state) throw Error('useWindow must be used within a render function.');\n if (state.renderer instanceof _DOMRenderer) {\n return state.renderer.window;\n } else {\n throw Error('Unsupported renderer.');\n }\n}\n\nconst emptyInsets = { top: 0, left: 0, right: 0, bottom: 0 };\nconst safeAreaInsets = (window: ReturnType<typeof useWindow>) => {\n let support;\n if (!('CSS' in window) || !_.isFunction(window.CSS.supports)) {\n return emptyInsets;\n }\n if (window.CSS.supports('top: env(safe-area-inset-top)')) {\n support = 'env'\n } else if (window.CSS.supports('top: constant(safe-area-inset-top)')) {\n support = 'constant'\n } else {\n return emptyInsets;\n }\n const id = uniqueId();\n const style = document.createElement('style');\n style.textContent = `:root {\n --${id}-top: ${support}(safe-area-inset-top);\n --${id}-left: ${support}(safe-area-inset-left);\n --${id}-right: ${support}(safe-area-inset-right);\n --${id}-bottom: ${support}(safe-area-inset-bottom);\n }`;\n document.head.appendChild(style);\n const computedStyle = getComputedStyle(document.documentElement);\n const insets = {\n top: computedStyle.getPropertyValue(`--${id}-top`),\n left: computedStyle.getPropertyValue(`--${id}-left`),\n right: computedStyle.getPropertyValue(`--${id}-right`),\n bottom: computedStyle.getPropertyValue(`--${id}-bottom`),\n };\n style.remove();\n return _.mapValues(insets, v => parseFloat(v));\n}\n\nexport const useWindowMetrics = () => {\n const window = useWindow();\n return useSyncExternalStore((onStoreChange) => {\n window.addEventListener('resize', onStoreChange);\n return () => {\n window.removeEventListener('resize', onStoreChange);\n };\n }, () => ({\n safeAreaInsets: safeAreaInsets(window),\n devicePixelRatio: window.devicePixelRatio,\n outerWidth: window.outerWidth,\n outerHeight: window.outerHeight,\n innerWidth: window.innerWidth,\n innerHeight: window.innerHeight,\n }));\n}\n\nexport const useWindowScroll = () => {\n const window = useWindow();\n return useSyncExternalStore((onStoreChange) => {\n window.addEventListener('scroll', onStoreChange);\n return () => {\n window.removeEventListener('scroll', onStoreChange);\n };\n }, () => ({\n scrollX: window.scrollX,\n scrollY: window.scrollY,\n }));\n}\n\nconst colorSchemeDarkCache = new WeakMap<ReturnType<typeof useWindow>, MediaQueryList | undefined>();\n\nexport const useColorScheme = () => {\n const window = useWindow();\n if (!colorSchemeDarkCache.has(window)) colorSchemeDarkCache.set(window, window.matchMedia?.('(prefers-color-scheme: dark)'));\n const colorSchemeDark = colorSchemeDarkCache.get(window);\n return useSyncExternalStore((onStoreChange) => {\n colorSchemeDark?.addEventListener('change', onStoreChange);\n return () => {\n colorSchemeDark?.removeEventListener('change', onStoreChange);\n };\n }, () => colorSchemeDark?.matches ? 'dark' : 'light');\n}\n","//\n// location.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useMemo } from '../core/hooks/memo';\nimport { useCallback } from '../core/hooks/callback';\nimport { useSyncExternalStore } from '../core/hooks/sync';\nimport { EventEmitter } from '../core/reconciler/events';\nimport { SetStateAction } from '../core/types/common';\nimport { useWindow } from './window';\n\nconst emitters = new WeakMap<Document, EventEmitter>();\nconst emitterFor = (document: Document) => {\n if (!emitters.has(document)) emitters.set(document, new EventEmitter());\n return emitters.get(document)!;\n}\n\n/**\n * A hook that provides the current browser location and methods to manipulate the browser history.\n *\n * @returns An object with the following properties and methods:\n * - `hash`: The fragment identifier of the URL.\n * - `host`: The hostname and port number.\n * - `hostname`: The domain name.\n * - `href`: The full URL.\n * - `origin`: The protocol, hostname, and port.\n * - `pathname`: The path of the URL.\n * - `port`: The port number.\n * - `protocol`: The protocol scheme.\n * - `search`: The query string.\n * - `state`: The current state object associated with the history entry.\n * - `back()`: Navigates to the previous entry in the history stack.\n * - `forward()`: Navigates to the next entry in the history stack.\n * - `pushState(data, url)`: Pushes a new entry onto the history stack.\n * - `replaceState(data, url)`: Replaces the current history entry.\n *\n * The hook subscribes to changes in the browser's history and location, causing components to re-render when navigation occurs.\n *\n * @example\n * const location = useLocation();\n * console.log(location.pathname); // e.g., \"/about\"\n * location.pushState({ some: 'state' }, '/new-path');\n */\nexport const useLocation = () => {\n const window = useWindow();\n const emitter = emitterFor(window.document);\n const result = (history?: History) => ({\n ..._.pick(window.document.location, 'hash', 'host', 'hostname', 'href', 'origin', 'pathname', 'port', 'protocol', 'search'),\n state: history?.state ?? null,\n back: () => {\n history?.back();\n },\n forward: () => {\n history?.forward();\n emitter.emit('change');\n },\n pushState: (data: any, url?: string | URL | null) => {\n history?.pushState(data, '', url);\n emitter.emit('change');\n },\n replaceState: (data: any, url?: string | URL | null) => {\n history?.replaceState(data, '', url);\n emitter.emit('change');\n },\n });\n return useSyncExternalStore((onStoreChange) => {\n window.addEventListener('popstate', onStoreChange);\n const event = emitter.register('change', onStoreChange);\n return () => {\n window.removeEventListener('popstate', onStoreChange);\n event.remove();\n }\n }, () => result(window.history));\n}\n\ntype URLSearchParamsInit = ConstructorParameters<typeof URLSearchParams>[0];\n\n/**\n * A hook for reading and updating the URL's query string (search parameters).\n *\n * @returns A tuple:\n * - The first element is a `URLSearchParams` instance representing the current query string.\n * - The second element is a function to update the search parameters, which accepts any valid\n * `URLSearchParams` initializer (string, array, or object).\n *\n * Updating the search parameters will push a new history entry and update the URL in the address bar.\n *\n * @example\n * const [searchParams, setSearchParams] = useSearchParams();\n * const page = searchParams.get('page');\n * setSearchParams({ page: '2', filter: 'active' });\n */\nexport const useSearchParams = () => {\n const location = useLocation();\n const searchParams = useMemo(() => new URLSearchParams(location.search), [location.search]);\n const setSearchParams = useCallback((\n dispatch: SetStateAction<URLSearchParamsInit, URLSearchParams>,\n config?: {\n replace?: boolean;\n },\n ) => {\n const params = _.isFunction(dispatch) ? dispatch(new URLSearchParams(location.search)) : dispatch;\n const newParams = new URLSearchParams(params);\n if (config?.replace === false) {\n location.pushState(location.state, `?${newParams.toString()}`);\n } else {\n location.replaceState(location.state, `?${newParams.toString()}`);\n }\n });\n return [searchParams, setSearchParams] as const;\n}\n","//\n// observer.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useEffect } from '../core/hooks/effect';\nimport { useCallback } from '../core/hooks/callback';\nimport { RefObject } from '../core/types/common';\n\ninterface _Observer<T> {\n observe(target: Element, options?: T): void;\n unobserve(target: Element): void;\n}\n\nconst createObserver = <E extends { target: Element; }, T>(\n constructor: new (callback: (entries: E[]) => void) => _Observer<T>\n) => {\n const listeners = new WeakMap<Element, ((entry: E) => void)[]>();\n const observer = new constructor((entries) => {\n for (const entry of entries) {\n for (const listener of listeners.get(entry.target) ?? []) {\n (async () => {\n try {\n await listener(entry);\n } catch (e) {\n console.error(e);\n }\n })();\n }\n }\n });\n return {\n observe: (target: Element, callback: (entry: E) => void, options?: T) => {\n observer.observe(target, options);\n listeners.set(target, [...listeners.get(target) ?? [], callback]);\n },\n unobserve: (target: Element, callback: (entry: E) => void) => {\n const list = _.filter(listeners.get(target), x => x !== callback);\n listeners.set(target, list);\n if (_.isEmpty(list)) observer.unobserve?.(target);\n },\n };\n};\n\nconst observer = typeof window === 'undefined' ? undefined : {\n resize: createObserver(ResizeObserver),\n intersection: createObserver(IntersectionObserver),\n};\n\nexport const useResizeObserver = (\n target: RefObject<Element | null | undefined> | Element | null | undefined,\n callback: (entry: ResizeObserverEntry) => void,\n options?: ResizeObserverOptions,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\n const _target = target && 'current' in target ? target.current : target;\n if (!observer || !_target) return;\n observer.resize.observe(_target, _callback, options);\n return () => observer.resize.unobserve(_target, _callback);\n }, [target]);\n}\n\nexport const useIntersectionObserver = (\n target: RefObject<Element | null | undefined> | Element | null | undefined,\n callback: (entry: IntersectionObserverEntry) => void,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\n const _target = target && 'current' in target ? target.current : target;\n if (!observer || !_target) return;\n observer.intersection.observe(_target, _callback);\n return () => observer.intersection.unobserve(_target, _callback);\n }, [target]);\n}\n\nexport const useMutationObserver = (\n target: RefObject<Node | null | undefined> | Node | null | undefined,\n callback: MutationCallback,\n options?: MutationObserverInit,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\n const _target = target && 'current' in target ? target.current : target;\n if (typeof window === 'undefined' || !_target) return;\n const observer = new MutationObserver(_callback);\n observer.observe(_target, options);\n return () => observer.disconnect();\n }, [target]);\n}\n\nexport const usePerformanceObserver = (\n callback: PerformanceObserverCallback,\n options?: PerformanceObserverInit,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const observer = new PerformanceObserver(_callback);\n observer.observe(options);\n return () => observer.disconnect();\n }, []);\n}\n","//\n// online.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useSyncExternalStore } from '../core/hooks/sync';\n\nexport const useOnline = () => useSyncExternalStore((onStoreChange) => {\n window.addEventListener('offline', onStoreChange);\n window.addEventListener('online', onStoreChange);\n return () => {\n window.removeEventListener('offline', onStoreChange);\n window.removeEventListener('online', onStoreChange);\n };\n}, () => navigator.onLine, () => false);","//\n// storage.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useSyncExternalStore } from '../core/hooks/sync';\nimport { useCallback } from '../core/hooks/callback';\nimport { SetStateAction } from '../core/types/common';\nimport { EventEmitter } from '../core/reconciler/events';\n\nconst emitters = new WeakMap<Storage, EventEmitter>();\nconst emitterFor = (storage: Storage) => {\n if (!emitters.has(storage)) emitters.set(storage, new EventEmitter());\n return emitters.get(storage)!;\n}\n\nconst _useStorage = (\n storage: () => Storage,\n key: string,\n initialValue?: string | null\n) => {\n const state = useSyncExternalStore((onStoreChange) => {\n const _storage = storage();\n const emitter = emitterFor(_storage);\n const callback = (ev: StorageEvent) => { \n if (!ev.storageArea || ev.storageArea === _storage) onStoreChange();\n };\n window.addEventListener('storage', callback);\n const event = emitter.register('change', onStoreChange);\n return () => {\n window.removeEventListener('storage', callback);\n event.remove();\n }\n }, () => storage().getItem(key), () => undefined);\n const setState = useCallback((v: SetStateAction<string | null | undefined>) => {\n try {\n const _storage = storage();\n const newValue = _.isFunction(v) ? v(state) : v;\n if (_.isNil(newValue)) {\n _storage.removeItem(key);\n } else {\n _storage.setItem(key, newValue);\n }\n const emitter = emitterFor(_storage);\n emitter.emit('change');\n } catch (e) {\n console.error(e);\n }\n }, [key]);\n return [state ?? initialValue ?? null, setState] as const;\n}\n\nexport const useLocalStorage = (\n key: string,\n initialValue?: string | null\n) => _useStorage(() => window.localStorage, key, initialValue);\n\nexport const useSessionStorage = (\n key: string,\n initialValue?: string | null\n) => _useStorage(() => window.sessionStorage, key, initialValue);\n","//\n// visibility.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useSyncExternalStore } from '../core/hooks/sync';\nimport { useDocument } from './document';\n\nexport const useVisibility = () => {\n const document = useDocument();\n return useSyncExternalStore((onStoreChange) => {\n document.addEventListener('visibilitychange', onStoreChange);\n return () => {\n document.removeEventListener('visibilitychange', onStoreChange);\n }\n }, () => {\n if (document.hasFocus()) {\n return 'active' as const;\n } else if (document.visibilityState === 'visible') {\n return 'inactive' as const;\n } else {\n return 'background' as const;\n }\n }, () => 'unknown' as const);\n}\n"],"names":["state","reconciler","_DOMRenderer","uniqueId","useSyncExternalStore","emitters","emitterFor","EventEmitter","useMemo","useCallback","useEffect"],"mappings":"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"}
package/dist/web.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { r as reconciler, b as EventEmitter, a as uniqueId } from './internals/state-j1YggBhW.mjs';
1
+ import { r as reconciler, a as uniqueId, b as EventEmitter } from './internals/state-j1YggBhW.mjs';
2
2
  import { _ as _DOMRenderer } from './internals/common-uTufm_t7.mjs';
3
3
  export { D as DOMNativeNode } from './internals/common-uTufm_t7.mjs';
4
4
  import _ from 'lodash';
@@ -48,6 +48,117 @@ const useDocument = () => {
48
48
  }
49
49
  };
50
50
 
51
+ //
52
+ // window.ts
53
+ //
54
+ // The MIT License
55
+ // Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.
56
+ //
57
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
58
+ // of this software and associated documentation files (the "Software"), to deal
59
+ // in the Software without restriction, including without limitation the rights
60
+ // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
61
+ // copies of the Software, and to permit persons to whom the Software is
62
+ // furnished to do so, subject to the following conditions:
63
+ //
64
+ // The above copyright notice and this permission notice shall be included in
65
+ // all copies or substantial portions of the Software.
66
+ //
67
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
68
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
69
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
70
+ // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
71
+ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
72
+ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
73
+ // THE SOFTWARE.
74
+ //
75
+ const useWindow = () => {
76
+ const state = reconciler.currentHookState;
77
+ if (!state)
78
+ throw Error('useWindow must be used within a render function.');
79
+ if (state.renderer instanceof _DOMRenderer) {
80
+ return state.renderer.window;
81
+ }
82
+ else {
83
+ throw Error('Unsupported renderer.');
84
+ }
85
+ };
86
+ const emptyInsets = { top: 0, left: 0, right: 0, bottom: 0 };
87
+ const safeAreaInsets = (window) => {
88
+ let support;
89
+ if (!('CSS' in window) || !_.isFunction(window.CSS.supports)) {
90
+ return emptyInsets;
91
+ }
92
+ if (window.CSS.supports('top: env(safe-area-inset-top)')) {
93
+ support = 'env';
94
+ }
95
+ else if (window.CSS.supports('top: constant(safe-area-inset-top)')) {
96
+ support = 'constant';
97
+ }
98
+ else {
99
+ return emptyInsets;
100
+ }
101
+ const id = uniqueId();
102
+ const style = document.createElement('style');
103
+ style.textContent = `:root {
104
+ --${id}-top: ${support}(safe-area-inset-top);
105
+ --${id}-left: ${support}(safe-area-inset-left);
106
+ --${id}-right: ${support}(safe-area-inset-right);
107
+ --${id}-bottom: ${support}(safe-area-inset-bottom);
108
+ }`;
109
+ document.head.appendChild(style);
110
+ const computedStyle = getComputedStyle(document.documentElement);
111
+ const insets = {
112
+ top: computedStyle.getPropertyValue(`--${id}-top`),
113
+ left: computedStyle.getPropertyValue(`--${id}-left`),
114
+ right: computedStyle.getPropertyValue(`--${id}-right`),
115
+ bottom: computedStyle.getPropertyValue(`--${id}-bottom`),
116
+ };
117
+ style.remove();
118
+ return _.mapValues(insets, v => parseFloat(v));
119
+ };
120
+ const useWindowMetrics = () => {
121
+ const window = useWindow();
122
+ return useSyncExternalStore((onStoreChange) => {
123
+ window.addEventListener('resize', onStoreChange);
124
+ return () => {
125
+ window.removeEventListener('resize', onStoreChange);
126
+ };
127
+ }, () => ({
128
+ safeAreaInsets: safeAreaInsets(window),
129
+ devicePixelRatio: window.devicePixelRatio,
130
+ outerWidth: window.outerWidth,
131
+ outerHeight: window.outerHeight,
132
+ innerWidth: window.innerWidth,
133
+ innerHeight: window.innerHeight,
134
+ }));
135
+ };
136
+ const useWindowScroll = () => {
137
+ const window = useWindow();
138
+ return useSyncExternalStore((onStoreChange) => {
139
+ window.addEventListener('scroll', onStoreChange);
140
+ return () => {
141
+ window.removeEventListener('scroll', onStoreChange);
142
+ };
143
+ }, () => ({
144
+ scrollX: window.scrollX,
145
+ scrollY: window.scrollY,
146
+ }));
147
+ };
148
+ const colorSchemeDarkCache = new WeakMap();
149
+ const useColorScheme = () => {
150
+ const window = useWindow();
151
+ if (!colorSchemeDarkCache.has(window))
152
+ colorSchemeDarkCache.set(window, window.matchMedia?.('(prefers-color-scheme: dark)'));
153
+ const colorSchemeDark = colorSchemeDarkCache.get(window);
154
+ return useSyncExternalStore((onStoreChange) => {
155
+ colorSchemeDark?.addEventListener('change', onStoreChange);
156
+ return () => {
157
+ colorSchemeDark?.removeEventListener('change', onStoreChange);
158
+ };
159
+ }, () => colorSchemeDark?.matches ? 'dark' : 'light');
160
+ };
161
+
51
162
  //
52
163
  // location.ts
53
164
  //
@@ -105,10 +216,10 @@ const emitterFor$1 = (document) => {
105
216
  * location.pushState({ some: 'state' }, '/new-path');
106
217
  */
107
218
  const useLocation = () => {
108
- const document = useDocument();
109
- const emitter = emitterFor$1(document);
219
+ const window = useWindow();
220
+ const emitter = emitterFor$1(window.document);
110
221
  const result = (history) => ({
111
- ..._.pick(document.location, 'hash', 'host', 'hostname', 'href', 'origin', 'pathname', 'port', 'protocol', 'search'),
222
+ ..._.pick(window.document.location, 'hash', 'host', 'hostname', 'href', 'origin', 'pathname', 'port', 'protocol', 'search'),
112
223
  state: history?.state ?? null,
113
224
  back: () => {
114
225
  history?.back();
@@ -133,7 +244,7 @@ const useLocation = () => {
133
244
  window.removeEventListener('popstate', onStoreChange);
134
245
  event.remove();
135
246
  };
136
- }, () => result(window.history), () => result());
247
+ }, () => result(window.history));
137
248
  };
138
249
  /**
139
250
  * A hook for reading and updating the URL's query string (search parameters).
@@ -153,9 +264,15 @@ const useLocation = () => {
153
264
  const useSearchParams = () => {
154
265
  const location = useLocation();
155
266
  const searchParams = useMemo(() => new URLSearchParams(location.search), [location.search]);
156
- const setSearchParams = useCallback((params) => {
267
+ const setSearchParams = useCallback((dispatch, config) => {
268
+ const params = _.isFunction(dispatch) ? dispatch(new URLSearchParams(location.search)) : dispatch;
157
269
  const newParams = new URLSearchParams(params);
158
- location.pushState(location.state, `?${newParams.toString()}`);
270
+ if (config?.replace === false) {
271
+ location.pushState(location.state, `?${newParams.toString()}`);
272
+ }
273
+ else {
274
+ location.replaceState(location.state, `?${newParams.toString()}`);
275
+ }
159
276
  });
160
277
  return [searchParams, setSearchParams];
161
278
  };
@@ -403,116 +520,5 @@ const useVisibility = () => {
403
520
  }, () => 'unknown');
404
521
  };
405
522
 
406
- //
407
- // window.ts
408
- //
409
- // The MIT License
410
- // Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.
411
- //
412
- // Permission is hereby granted, free of charge, to any person obtaining a copy
413
- // of this software and associated documentation files (the "Software"), to deal
414
- // in the Software without restriction, including without limitation the rights
415
- // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
416
- // copies of the Software, and to permit persons to whom the Software is
417
- // furnished to do so, subject to the following conditions:
418
- //
419
- // The above copyright notice and this permission notice shall be included in
420
- // all copies or substantial portions of the Software.
421
- //
422
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
423
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
424
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
425
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
426
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
427
- // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
428
- // THE SOFTWARE.
429
- //
430
- const useWindow = () => {
431
- const state = reconciler.currentHookState;
432
- if (!state)
433
- throw Error('useWindow must be used within a render function.');
434
- if (state.renderer instanceof _DOMRenderer) {
435
- return state.renderer.window;
436
- }
437
- else {
438
- throw Error('Unsupported renderer.');
439
- }
440
- };
441
- const emptyInsets = { top: 0, left: 0, right: 0, bottom: 0 };
442
- const safeAreaInsets = (window) => {
443
- let support;
444
- if (!('CSS' in window) || !_.isFunction(window.CSS.supports)) {
445
- return emptyInsets;
446
- }
447
- if (window.CSS.supports('top: env(safe-area-inset-top)')) {
448
- support = 'env';
449
- }
450
- else if (window.CSS.supports('top: constant(safe-area-inset-top)')) {
451
- support = 'constant';
452
- }
453
- else {
454
- return emptyInsets;
455
- }
456
- const id = uniqueId();
457
- const style = document.createElement('style');
458
- style.textContent = `:root {
459
- --${id}-top: ${support}(safe-area-inset-top);
460
- --${id}-left: ${support}(safe-area-inset-left);
461
- --${id}-right: ${support}(safe-area-inset-right);
462
- --${id}-bottom: ${support}(safe-area-inset-bottom);
463
- }`;
464
- document.head.appendChild(style);
465
- const computedStyle = getComputedStyle(document.documentElement);
466
- const insets = {
467
- top: computedStyle.getPropertyValue(`--${id}-top`),
468
- left: computedStyle.getPropertyValue(`--${id}-left`),
469
- right: computedStyle.getPropertyValue(`--${id}-right`),
470
- bottom: computedStyle.getPropertyValue(`--${id}-bottom`),
471
- };
472
- style.remove();
473
- return _.mapValues(insets, v => parseFloat(v));
474
- };
475
- const useWindowMetrics = () => {
476
- const window = useWindow();
477
- return useSyncExternalStore((onStoreChange) => {
478
- window.addEventListener('resize', onStoreChange);
479
- return () => {
480
- window.removeEventListener('resize', onStoreChange);
481
- };
482
- }, () => ({
483
- safeAreaInsets: safeAreaInsets(window),
484
- devicePixelRatio: window.devicePixelRatio,
485
- outerWidth: window.outerWidth,
486
- outerHeight: window.outerHeight,
487
- innerWidth: window.innerWidth,
488
- innerHeight: window.innerHeight,
489
- }));
490
- };
491
- const useWindowScroll = () => {
492
- const window = useWindow();
493
- return useSyncExternalStore((onStoreChange) => {
494
- window.addEventListener('scroll', onStoreChange);
495
- return () => {
496
- window.removeEventListener('scroll', onStoreChange);
497
- };
498
- }, () => ({
499
- scrollX: window.scrollX,
500
- scrollY: window.scrollY,
501
- }));
502
- };
503
- const colorSchemeDarkCache = new WeakMap();
504
- const useColorScheme = () => {
505
- const window = useWindow();
506
- if (!colorSchemeDarkCache.has(window))
507
- colorSchemeDarkCache.set(window, window.matchMedia?.('(prefers-color-scheme: dark)'));
508
- const colorSchemeDark = colorSchemeDarkCache.get(window);
509
- return useSyncExternalStore((onStoreChange) => {
510
- colorSchemeDark?.addEventListener('change', onStoreChange);
511
- return () => {
512
- colorSchemeDark?.removeEventListener('change', onStoreChange);
513
- };
514
- }, () => colorSchemeDark?.matches ? 'dark' : 'light');
515
- };
516
-
517
523
  export { useColorScheme, useDocument, useIntersectionObserver, useLocalStorage, useLocation, useMutationObserver, useOnline, usePerformanceObserver, useResizeObserver, useSearchParams, useSessionStorage, useVisibility, useWindow, useWindowMetrics, useWindowScroll };
518
524
  //# sourceMappingURL=web.mjs.map
package/dist/web.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"web.mjs","sources":["../../src/web/document.ts","../../src/web/location.ts","../../src/web/observer.ts","../../src/web/online.ts","../../src/web/storage.ts","../../src/web/visibility.ts","../../src/web/window.ts"],"sourcesContent":["//\n// document.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { reconciler } from '../core/reconciler/state';\nimport { _DOMRenderer } from '../renderer/common';\n\nexport const useDocument = () => {\n const state = reconciler.currentHookState;\n if (!state) throw Error('useDocument must be used within a render function.');\n if (state.renderer instanceof _DOMRenderer) {\n return state.renderer.document;\n } else {\n throw Error('Unsupported renderer.');\n }\n}","//\n// location.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useMemo } from '../core/hooks/memo';\nimport { useCallback } from '../core/hooks/callback';\nimport { useSyncExternalStore } from '../core/hooks/sync';\nimport { EventEmitter } from '../core/reconciler/events';\nimport { useDocument } from './document';\n\nconst emitters = new WeakMap<Document, EventEmitter>();\nconst emitterFor = (document: Document) => {\n if (!emitters.has(document)) emitters.set(document, new EventEmitter());\n return emitters.get(document)!;\n}\n\n/**\n * A hook that provides the current browser location and methods to manipulate the browser history.\n *\n * @returns An object with the following properties and methods:\n * - `hash`: The fragment identifier of the URL.\n * - `host`: The hostname and port number.\n * - `hostname`: The domain name.\n * - `href`: The full URL.\n * - `origin`: The protocol, hostname, and port.\n * - `pathname`: The path of the URL.\n * - `port`: The port number.\n * - `protocol`: The protocol scheme.\n * - `search`: The query string.\n * - `state`: The current state object associated with the history entry.\n * - `back()`: Navigates to the previous entry in the history stack.\n * - `forward()`: Navigates to the next entry in the history stack.\n * - `pushState(data, url)`: Pushes a new entry onto the history stack.\n * - `replaceState(data, url)`: Replaces the current history entry.\n *\n * The hook subscribes to changes in the browser's history and location, causing components to re-render when navigation occurs.\n *\n * @example\n * const location = useLocation();\n * console.log(location.pathname); // e.g., \"/about\"\n * location.pushState({ some: 'state' }, '/new-path');\n */\nexport const useLocation = () => {\n const document = useDocument();\n const emitter = emitterFor(document);\n const result = (history?: History) => ({\n ..._.pick(document.location, 'hash', 'host', 'hostname', 'href', 'origin', 'pathname', 'port', 'protocol', 'search'),\n state: history?.state ?? null,\n back: () => {\n history?.back();\n },\n forward: () => {\n history?.forward();\n emitter.emit('change');\n },\n pushState: (data: any, url?: string | URL | null) => {\n history?.pushState(data, '', url);\n emitter.emit('change');\n },\n replaceState: (data: any, url?: string | URL | null) => {\n history?.replaceState(data, '', url);\n emitter.emit('change');\n },\n });\n return useSyncExternalStore((onStoreChange) => {\n window.addEventListener('popstate', onStoreChange);\n const event = emitter.register('change', onStoreChange);\n return () => {\n window.removeEventListener('popstate', onStoreChange);\n event.remove();\n }\n }, () => result(window.history), () => result());\n}\n\ntype URLSearchParamsInit = ConstructorParameters<typeof URLSearchParams>[0];\n\n/**\n * A hook for reading and updating the URL's query string (search parameters).\n *\n * @returns A tuple:\n * - The first element is a `URLSearchParams` instance representing the current query string.\n * - The second element is a function to update the search parameters, which accepts any valid\n * `URLSearchParams` initializer (string, array, or object).\n *\n * Updating the search parameters will push a new history entry and update the URL in the address bar.\n *\n * @example\n * const [searchParams, setSearchParams] = useSearchParams();\n * const page = searchParams.get('page');\n * setSearchParams({ page: '2', filter: 'active' });\n */\nexport const useSearchParams = () => {\n const location = useLocation();\n const searchParams = useMemo(() => new URLSearchParams(location.search), [location.search]);\n const setSearchParams = useCallback((params: URLSearchParamsInit) => {\n const newParams = new URLSearchParams(params);\n location.pushState(location.state, `?${newParams.toString()}`);\n });\n return [searchParams, setSearchParams];\n}\n","//\n// observer.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useEffect } from '../core/hooks/effect';\nimport { useCallback } from '../core/hooks/callback';\nimport { RefObject } from '../core/types/common';\n\ninterface _Observer<T> {\n observe(target: Element, options?: T): void;\n unobserve(target: Element): void;\n}\n\nconst createObserver = <E extends { target: Element; }, T>(\n constructor: new (callback: (entries: E[]) => void) => _Observer<T>\n) => {\n const listeners = new WeakMap<Element, ((entry: E) => void)[]>();\n const observer = new constructor((entries) => {\n for (const entry of entries) {\n for (const listener of listeners.get(entry.target) ?? []) {\n (async () => {\n try {\n await listener(entry);\n } catch (e) {\n console.error(e);\n }\n })();\n }\n }\n });\n return {\n observe: (target: Element, callback: (entry: E) => void, options?: T) => {\n observer.observe(target, options);\n listeners.set(target, [...listeners.get(target) ?? [], callback]);\n },\n unobserve: (target: Element, callback: (entry: E) => void) => {\n const list = _.filter(listeners.get(target), x => x !== callback);\n listeners.set(target, list);\n if (_.isEmpty(list)) observer.unobserve?.(target);\n },\n };\n};\n\nconst observer = typeof window === 'undefined' ? undefined : {\n resize: createObserver(ResizeObserver),\n intersection: createObserver(IntersectionObserver),\n};\n\nexport const useResizeObserver = (\n target: RefObject<Element | null | undefined> | Element | null | undefined,\n callback: (entry: ResizeObserverEntry) => void,\n options?: ResizeObserverOptions,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\n const _target = target && 'current' in target ? target.current : target;\n if (!observer || !_target) return;\n observer.resize.observe(_target, _callback, options);\n return () => observer.resize.unobserve(_target, _callback);\n }, [target]);\n}\n\nexport const useIntersectionObserver = (\n target: RefObject<Element | null | undefined> | Element | null | undefined,\n callback: (entry: IntersectionObserverEntry) => void,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\n const _target = target && 'current' in target ? target.current : target;\n if (!observer || !_target) return;\n observer.intersection.observe(_target, _callback);\n return () => observer.intersection.unobserve(_target, _callback);\n }, [target]);\n}\n\nexport const useMutationObserver = (\n target: RefObject<Node | null | undefined> | Node | null | undefined,\n callback: MutationCallback,\n options?: MutationObserverInit,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\n const _target = target && 'current' in target ? target.current : target;\n if (typeof window === 'undefined' || !_target) return;\n const observer = new MutationObserver(_callback);\n observer.observe(_target, options);\n return () => observer.disconnect();\n }, [target]);\n}\n\nexport const usePerformanceObserver = (\n callback: PerformanceObserverCallback,\n options?: PerformanceObserverInit,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const observer = new PerformanceObserver(_callback);\n observer.observe(options);\n return () => observer.disconnect();\n }, []);\n}\n","//\n// online.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useSyncExternalStore } from '../core/hooks/sync';\n\nexport const useOnline = () => useSyncExternalStore((onStoreChange) => {\n window.addEventListener('offline', onStoreChange);\n window.addEventListener('online', onStoreChange);\n return () => {\n window.removeEventListener('offline', onStoreChange);\n window.removeEventListener('online', onStoreChange);\n };\n}, () => navigator.onLine, () => false);","//\n// storage.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useSyncExternalStore } from '../core/hooks/sync';\nimport { useCallback } from '../core/hooks/callback';\nimport { SetStateAction } from '../core/types/common';\nimport { EventEmitter } from '../core/reconciler/events';\n\nconst emitters = new WeakMap<Storage, EventEmitter>();\nconst emitterFor = (storage: Storage) => {\n if (!emitters.has(storage)) emitters.set(storage, new EventEmitter());\n return emitters.get(storage)!;\n}\n\nconst _useStorage = (\n storage: () => Storage,\n key: string,\n initialValue?: string | null\n) => {\n const state = useSyncExternalStore((onStoreChange) => {\n const _storage = storage();\n const emitter = emitterFor(_storage);\n const callback = (ev: StorageEvent) => { \n if (!ev.storageArea || ev.storageArea === _storage) onStoreChange();\n };\n window.addEventListener('storage', callback);\n const event = emitter.register('change', onStoreChange);\n return () => {\n window.removeEventListener('storage', callback);\n event.remove();\n }\n }, () => storage().getItem(key), () => undefined);\n const setState = useCallback((v: SetStateAction<string | null | undefined>) => {\n try {\n const _storage = storage();\n const newValue = _.isFunction(v) ? v(state) : v;\n if (_.isNil(newValue)) {\n _storage.removeItem(key);\n } else {\n _storage.setItem(key, newValue);\n }\n const emitter = emitterFor(_storage);\n emitter.emit('change');\n } catch (e) {\n console.error(e);\n }\n }, [key]);\n return [state ?? initialValue ?? null, setState] as const;\n}\n\nexport const useLocalStorage = (\n key: string,\n initialValue?: string | null\n) => _useStorage(() => window.localStorage, key, initialValue);\n\nexport const useSessionStorage = (\n key: string,\n initialValue?: string | null\n) => _useStorage(() => window.sessionStorage, key, initialValue);\n","//\n// visibility.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useSyncExternalStore } from '../core/hooks/sync';\nimport { useDocument } from './document';\n\nexport const useVisibility = () => {\n const document = useDocument();\n return useSyncExternalStore((onStoreChange) => {\n document.addEventListener('visibilitychange', onStoreChange);\n return () => {\n document.removeEventListener('visibilitychange', onStoreChange);\n }\n }, () => {\n if (document.hasFocus()) {\n return 'active' as const;\n } else if (document.visibilityState === 'visible') {\n return 'inactive' as const;\n } else {\n return 'background' as const;\n }\n }, () => 'unknown' as const);\n}\n","//\n// window.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useSyncExternalStore } from '../core/hooks/sync';\nimport { uniqueId } from '../core/utils';\nimport { reconciler } from '../core/reconciler/state';\nimport { _DOMRenderer } from '../renderer/common';\n\nexport const useWindow = () => {\n const state = reconciler.currentHookState;\n if (!state) throw Error('useWindow must be used within a render function.');\n if (state.renderer instanceof _DOMRenderer) {\n return state.renderer.window;\n } else {\n throw Error('Unsupported renderer.');\n }\n}\n\nconst emptyInsets = { top: 0, left: 0, right: 0, bottom: 0 };\nconst safeAreaInsets = (window: ReturnType<typeof useWindow>) => {\n let support;\n if (!('CSS' in window) || !_.isFunction(window.CSS.supports)) {\n return emptyInsets;\n }\n if (window.CSS.supports('top: env(safe-area-inset-top)')) {\n support = 'env'\n } else if (window.CSS.supports('top: constant(safe-area-inset-top)')) {\n support = 'constant'\n } else {\n return emptyInsets;\n }\n const id = uniqueId();\n const style = document.createElement('style');\n style.textContent = `:root {\n --${id}-top: ${support}(safe-area-inset-top);\n --${id}-left: ${support}(safe-area-inset-left);\n --${id}-right: ${support}(safe-area-inset-right);\n --${id}-bottom: ${support}(safe-area-inset-bottom);\n }`;\n document.head.appendChild(style);\n const computedStyle = getComputedStyle(document.documentElement);\n const insets = {\n top: computedStyle.getPropertyValue(`--${id}-top`),\n left: computedStyle.getPropertyValue(`--${id}-left`),\n right: computedStyle.getPropertyValue(`--${id}-right`),\n bottom: computedStyle.getPropertyValue(`--${id}-bottom`),\n };\n style.remove();\n return _.mapValues(insets, v => parseFloat(v));\n}\n\nexport const useWindowMetrics = () => {\n const window = useWindow();\n return useSyncExternalStore((onStoreChange) => {\n window.addEventListener('resize', onStoreChange);\n return () => {\n window.removeEventListener('resize', onStoreChange);\n };\n }, () => ({\n safeAreaInsets: safeAreaInsets(window),\n devicePixelRatio: window.devicePixelRatio,\n outerWidth: window.outerWidth,\n outerHeight: window.outerHeight,\n innerWidth: window.innerWidth,\n innerHeight: window.innerHeight,\n }));\n}\n\nexport const useWindowScroll = () => {\n const window = useWindow();\n return useSyncExternalStore((onStoreChange) => {\n window.addEventListener('scroll', onStoreChange);\n return () => {\n window.removeEventListener('scroll', onStoreChange);\n };\n }, () => ({\n scrollX: window.scrollX,\n scrollY: window.scrollY,\n }));\n}\n\nconst colorSchemeDarkCache = new WeakMap<ReturnType<typeof useWindow>, MediaQueryList | undefined>();\n\nexport const useColorScheme = () => {\n const window = useWindow();\n if (!colorSchemeDarkCache.has(window)) colorSchemeDarkCache.set(window, window.matchMedia?.('(prefers-color-scheme: dark)'));\n const colorSchemeDark = colorSchemeDarkCache.get(window);\n return useSyncExternalStore((onStoreChange) => {\n colorSchemeDark?.addEventListener('change', onStoreChange);\n return () => {\n colorSchemeDark?.removeEventListener('change', onStoreChange);\n };\n }, () => colorSchemeDark?.matches ? 'dark' : 'light');\n}\n"],"names":["emitters","emitterFor"],"mappings":"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"}
1
+ {"version":3,"file":"web.mjs","sources":["../../src/web/document.ts","../../src/web/window.ts","../../src/web/location.ts","../../src/web/observer.ts","../../src/web/online.ts","../../src/web/storage.ts","../../src/web/visibility.ts"],"sourcesContent":["//\n// document.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { reconciler } from '../core/reconciler/state';\nimport { _DOMRenderer } from '../renderer/common';\n\nexport const useDocument = () => {\n const state = reconciler.currentHookState;\n if (!state) throw Error('useDocument must be used within a render function.');\n if (state.renderer instanceof _DOMRenderer) {\n return state.renderer.document;\n } else {\n throw Error('Unsupported renderer.');\n }\n}","//\n// window.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useSyncExternalStore } from '../core/hooks/sync';\nimport { uniqueId } from '../core/utils';\nimport { reconciler } from '../core/reconciler/state';\nimport { _DOMRenderer } from '../renderer/common';\n\nexport const useWindow = () => {\n const state = reconciler.currentHookState;\n if (!state) throw Error('useWindow must be used within a render function.');\n if (state.renderer instanceof _DOMRenderer) {\n return state.renderer.window;\n } else {\n throw Error('Unsupported renderer.');\n }\n}\n\nconst emptyInsets = { top: 0, left: 0, right: 0, bottom: 0 };\nconst safeAreaInsets = (window: ReturnType<typeof useWindow>) => {\n let support;\n if (!('CSS' in window) || !_.isFunction(window.CSS.supports)) {\n return emptyInsets;\n }\n if (window.CSS.supports('top: env(safe-area-inset-top)')) {\n support = 'env'\n } else if (window.CSS.supports('top: constant(safe-area-inset-top)')) {\n support = 'constant'\n } else {\n return emptyInsets;\n }\n const id = uniqueId();\n const style = document.createElement('style');\n style.textContent = `:root {\n --${id}-top: ${support}(safe-area-inset-top);\n --${id}-left: ${support}(safe-area-inset-left);\n --${id}-right: ${support}(safe-area-inset-right);\n --${id}-bottom: ${support}(safe-area-inset-bottom);\n }`;\n document.head.appendChild(style);\n const computedStyle = getComputedStyle(document.documentElement);\n const insets = {\n top: computedStyle.getPropertyValue(`--${id}-top`),\n left: computedStyle.getPropertyValue(`--${id}-left`),\n right: computedStyle.getPropertyValue(`--${id}-right`),\n bottom: computedStyle.getPropertyValue(`--${id}-bottom`),\n };\n style.remove();\n return _.mapValues(insets, v => parseFloat(v));\n}\n\nexport const useWindowMetrics = () => {\n const window = useWindow();\n return useSyncExternalStore((onStoreChange) => {\n window.addEventListener('resize', onStoreChange);\n return () => {\n window.removeEventListener('resize', onStoreChange);\n };\n }, () => ({\n safeAreaInsets: safeAreaInsets(window),\n devicePixelRatio: window.devicePixelRatio,\n outerWidth: window.outerWidth,\n outerHeight: window.outerHeight,\n innerWidth: window.innerWidth,\n innerHeight: window.innerHeight,\n }));\n}\n\nexport const useWindowScroll = () => {\n const window = useWindow();\n return useSyncExternalStore((onStoreChange) => {\n window.addEventListener('scroll', onStoreChange);\n return () => {\n window.removeEventListener('scroll', onStoreChange);\n };\n }, () => ({\n scrollX: window.scrollX,\n scrollY: window.scrollY,\n }));\n}\n\nconst colorSchemeDarkCache = new WeakMap<ReturnType<typeof useWindow>, MediaQueryList | undefined>();\n\nexport const useColorScheme = () => {\n const window = useWindow();\n if (!colorSchemeDarkCache.has(window)) colorSchemeDarkCache.set(window, window.matchMedia?.('(prefers-color-scheme: dark)'));\n const colorSchemeDark = colorSchemeDarkCache.get(window);\n return useSyncExternalStore((onStoreChange) => {\n colorSchemeDark?.addEventListener('change', onStoreChange);\n return () => {\n colorSchemeDark?.removeEventListener('change', onStoreChange);\n };\n }, () => colorSchemeDark?.matches ? 'dark' : 'light');\n}\n","//\n// location.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useMemo } from '../core/hooks/memo';\nimport { useCallback } from '../core/hooks/callback';\nimport { useSyncExternalStore } from '../core/hooks/sync';\nimport { EventEmitter } from '../core/reconciler/events';\nimport { SetStateAction } from '../core/types/common';\nimport { useWindow } from './window';\n\nconst emitters = new WeakMap<Document, EventEmitter>();\nconst emitterFor = (document: Document) => {\n if (!emitters.has(document)) emitters.set(document, new EventEmitter());\n return emitters.get(document)!;\n}\n\n/**\n * A hook that provides the current browser location and methods to manipulate the browser history.\n *\n * @returns An object with the following properties and methods:\n * - `hash`: The fragment identifier of the URL.\n * - `host`: The hostname and port number.\n * - `hostname`: The domain name.\n * - `href`: The full URL.\n * - `origin`: The protocol, hostname, and port.\n * - `pathname`: The path of the URL.\n * - `port`: The port number.\n * - `protocol`: The protocol scheme.\n * - `search`: The query string.\n * - `state`: The current state object associated with the history entry.\n * - `back()`: Navigates to the previous entry in the history stack.\n * - `forward()`: Navigates to the next entry in the history stack.\n * - `pushState(data, url)`: Pushes a new entry onto the history stack.\n * - `replaceState(data, url)`: Replaces the current history entry.\n *\n * The hook subscribes to changes in the browser's history and location, causing components to re-render when navigation occurs.\n *\n * @example\n * const location = useLocation();\n * console.log(location.pathname); // e.g., \"/about\"\n * location.pushState({ some: 'state' }, '/new-path');\n */\nexport const useLocation = () => {\n const window = useWindow();\n const emitter = emitterFor(window.document);\n const result = (history?: History) => ({\n ..._.pick(window.document.location, 'hash', 'host', 'hostname', 'href', 'origin', 'pathname', 'port', 'protocol', 'search'),\n state: history?.state ?? null,\n back: () => {\n history?.back();\n },\n forward: () => {\n history?.forward();\n emitter.emit('change');\n },\n pushState: (data: any, url?: string | URL | null) => {\n history?.pushState(data, '', url);\n emitter.emit('change');\n },\n replaceState: (data: any, url?: string | URL | null) => {\n history?.replaceState(data, '', url);\n emitter.emit('change');\n },\n });\n return useSyncExternalStore((onStoreChange) => {\n window.addEventListener('popstate', onStoreChange);\n const event = emitter.register('change', onStoreChange);\n return () => {\n window.removeEventListener('popstate', onStoreChange);\n event.remove();\n }\n }, () => result(window.history));\n}\n\ntype URLSearchParamsInit = ConstructorParameters<typeof URLSearchParams>[0];\n\n/**\n * A hook for reading and updating the URL's query string (search parameters).\n *\n * @returns A tuple:\n * - The first element is a `URLSearchParams` instance representing the current query string.\n * - The second element is a function to update the search parameters, which accepts any valid\n * `URLSearchParams` initializer (string, array, or object).\n *\n * Updating the search parameters will push a new history entry and update the URL in the address bar.\n *\n * @example\n * const [searchParams, setSearchParams] = useSearchParams();\n * const page = searchParams.get('page');\n * setSearchParams({ page: '2', filter: 'active' });\n */\nexport const useSearchParams = () => {\n const location = useLocation();\n const searchParams = useMemo(() => new URLSearchParams(location.search), [location.search]);\n const setSearchParams = useCallback((\n dispatch: SetStateAction<URLSearchParamsInit, URLSearchParams>,\n config?: {\n replace?: boolean;\n },\n ) => {\n const params = _.isFunction(dispatch) ? dispatch(new URLSearchParams(location.search)) : dispatch;\n const newParams = new URLSearchParams(params);\n if (config?.replace === false) {\n location.pushState(location.state, `?${newParams.toString()}`);\n } else {\n location.replaceState(location.state, `?${newParams.toString()}`);\n }\n });\n return [searchParams, setSearchParams] as const;\n}\n","//\n// observer.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useEffect } from '../core/hooks/effect';\nimport { useCallback } from '../core/hooks/callback';\nimport { RefObject } from '../core/types/common';\n\ninterface _Observer<T> {\n observe(target: Element, options?: T): void;\n unobserve(target: Element): void;\n}\n\nconst createObserver = <E extends { target: Element; }, T>(\n constructor: new (callback: (entries: E[]) => void) => _Observer<T>\n) => {\n const listeners = new WeakMap<Element, ((entry: E) => void)[]>();\n const observer = new constructor((entries) => {\n for (const entry of entries) {\n for (const listener of listeners.get(entry.target) ?? []) {\n (async () => {\n try {\n await listener(entry);\n } catch (e) {\n console.error(e);\n }\n })();\n }\n }\n });\n return {\n observe: (target: Element, callback: (entry: E) => void, options?: T) => {\n observer.observe(target, options);\n listeners.set(target, [...listeners.get(target) ?? [], callback]);\n },\n unobserve: (target: Element, callback: (entry: E) => void) => {\n const list = _.filter(listeners.get(target), x => x !== callback);\n listeners.set(target, list);\n if (_.isEmpty(list)) observer.unobserve?.(target);\n },\n };\n};\n\nconst observer = typeof window === 'undefined' ? undefined : {\n resize: createObserver(ResizeObserver),\n intersection: createObserver(IntersectionObserver),\n};\n\nexport const useResizeObserver = (\n target: RefObject<Element | null | undefined> | Element | null | undefined,\n callback: (entry: ResizeObserverEntry) => void,\n options?: ResizeObserverOptions,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\n const _target = target && 'current' in target ? target.current : target;\n if (!observer || !_target) return;\n observer.resize.observe(_target, _callback, options);\n return () => observer.resize.unobserve(_target, _callback);\n }, [target]);\n}\n\nexport const useIntersectionObserver = (\n target: RefObject<Element | null | undefined> | Element | null | undefined,\n callback: (entry: IntersectionObserverEntry) => void,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\n const _target = target && 'current' in target ? target.current : target;\n if (!observer || !_target) return;\n observer.intersection.observe(_target, _callback);\n return () => observer.intersection.unobserve(_target, _callback);\n }, [target]);\n}\n\nexport const useMutationObserver = (\n target: RefObject<Node | null | undefined> | Node | null | undefined,\n callback: MutationCallback,\n options?: MutationObserverInit,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\n const _target = target && 'current' in target ? target.current : target;\n if (typeof window === 'undefined' || !_target) return;\n const observer = new MutationObserver(_callback);\n observer.observe(_target, options);\n return () => observer.disconnect();\n }, [target]);\n}\n\nexport const usePerformanceObserver = (\n callback: PerformanceObserverCallback,\n options?: PerformanceObserverInit,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const observer = new PerformanceObserver(_callback);\n observer.observe(options);\n return () => observer.disconnect();\n }, []);\n}\n","//\n// online.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useSyncExternalStore } from '../core/hooks/sync';\n\nexport const useOnline = () => useSyncExternalStore((onStoreChange) => {\n window.addEventListener('offline', onStoreChange);\n window.addEventListener('online', onStoreChange);\n return () => {\n window.removeEventListener('offline', onStoreChange);\n window.removeEventListener('online', onStoreChange);\n };\n}, () => navigator.onLine, () => false);","//\n// storage.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useSyncExternalStore } from '../core/hooks/sync';\nimport { useCallback } from '../core/hooks/callback';\nimport { SetStateAction } from '../core/types/common';\nimport { EventEmitter } from '../core/reconciler/events';\n\nconst emitters = new WeakMap<Storage, EventEmitter>();\nconst emitterFor = (storage: Storage) => {\n if (!emitters.has(storage)) emitters.set(storage, new EventEmitter());\n return emitters.get(storage)!;\n}\n\nconst _useStorage = (\n storage: () => Storage,\n key: string,\n initialValue?: string | null\n) => {\n const state = useSyncExternalStore((onStoreChange) => {\n const _storage = storage();\n const emitter = emitterFor(_storage);\n const callback = (ev: StorageEvent) => { \n if (!ev.storageArea || ev.storageArea === _storage) onStoreChange();\n };\n window.addEventListener('storage', callback);\n const event = emitter.register('change', onStoreChange);\n return () => {\n window.removeEventListener('storage', callback);\n event.remove();\n }\n }, () => storage().getItem(key), () => undefined);\n const setState = useCallback((v: SetStateAction<string | null | undefined>) => {\n try {\n const _storage = storage();\n const newValue = _.isFunction(v) ? v(state) : v;\n if (_.isNil(newValue)) {\n _storage.removeItem(key);\n } else {\n _storage.setItem(key, newValue);\n }\n const emitter = emitterFor(_storage);\n emitter.emit('change');\n } catch (e) {\n console.error(e);\n }\n }, [key]);\n return [state ?? initialValue ?? null, setState] as const;\n}\n\nexport const useLocalStorage = (\n key: string,\n initialValue?: string | null\n) => _useStorage(() => window.localStorage, key, initialValue);\n\nexport const useSessionStorage = (\n key: string,\n initialValue?: string | null\n) => _useStorage(() => window.sessionStorage, key, initialValue);\n","//\n// visibility.ts\n//\n// The MIT License\n// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n\nimport _ from 'lodash';\nimport { useSyncExternalStore } from '../core/hooks/sync';\nimport { useDocument } from './document';\n\nexport const useVisibility = () => {\n const document = useDocument();\n return useSyncExternalStore((onStoreChange) => {\n document.addEventListener('visibilitychange', onStoreChange);\n return () => {\n document.removeEventListener('visibilitychange', onStoreChange);\n }\n }, () => {\n if (document.hasFocus()) {\n return 'active' as const;\n } else if (document.visibilityState === 'visible') {\n return 'inactive' as const;\n } else {\n return 'background' as const;\n }\n }, () => 'unknown' as const);\n}\n"],"names":["emitters","emitterFor"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "frosty",
3
- "version": "0.0.59",
3
+ "version": "0.0.60",
4
4
  "main": "dist/index",
5
5
  "module": "dist/index",
6
6
  "types": "dist/index",