frosty 0.0.13 → 0.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_native.js +3 -4
- package/dist/_native.js.map +1 -1
- package/dist/_native.mjs +2 -3
- package/dist/_native.mjs.map +1 -1
- package/dist/dom.js +3 -4
- package/dist/dom.js.map +1 -1
- package/dist/dom.mjs +3 -4
- package/dist/dom.mjs.map +1 -1
- package/dist/index.d.ts +307 -6
- package/dist/index.js +668 -27
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +639 -6
- package/dist/index.mjs.map +1 -1
- package/dist/internals/{common-CEjwzc0j.js → common-FG7T3c2f.js} +2 -2
- package/dist/internals/{common-CEjwzc0j.js.map → common-FG7T3c2f.js.map} +1 -1
- package/dist/internals/{common-CQOkvSXp.mjs → common-KSKXTzR8.mjs} +2 -2
- package/dist/internals/{common-CQOkvSXp.mjs.map → common-KSKXTzR8.mjs.map} +1 -1
- package/dist/internals/{renderer-CTxeL82F.mjs → renderer-GTnF-hYa.mjs} +2 -3
- package/dist/internals/{renderer-CTxeL82F.mjs.map → renderer-GTnF-hYa.mjs.map} +1 -1
- package/dist/internals/{renderer-BL3b1IbL.js → renderer-jjw2FwKT.js} +8 -9
- package/dist/internals/{renderer-BL3b1IbL.js.map → renderer-jjw2FwKT.js.map} +1 -1
- package/dist/internals/{sync-Cq3pCYO3.mjs → sync-B9zfuWYQ.mjs} +60 -60
- package/dist/internals/sync-B9zfuWYQ.mjs.map +1 -0
- package/dist/internals/{sync-CSxmMfGm.js → sync-BIbWmXEq.js} +74 -74
- package/dist/internals/sync-BIbWmXEq.js.map +1 -0
- package/dist/internals/{state-BiYNImPF.mjs → utils-BJL3yvTI.mjs} +61 -48
- package/dist/internals/utils-BJL3yvTI.mjs.map +1 -0
- package/dist/internals/{state-DH_D-jro.js → utils-Bipfwp1R.js} +61 -47
- package/dist/internals/utils-Bipfwp1R.js.map +1 -0
- package/dist/jsx-runtime.js +29 -2
- package/dist/jsx-runtime.js.map +1 -1
- package/dist/jsx-runtime.mjs +29 -2
- package/dist/jsx-runtime.mjs.map +1 -1
- package/dist/server-dom.js +3 -4
- package/dist/server-dom.js.map +1 -1
- package/dist/server-dom.mjs +3 -4
- package/dist/server-dom.mjs.map +1 -1
- package/dist/web.d.ts +2 -2
- package/dist/web.js +30 -15
- package/dist/web.js.map +1 -1
- package/dist/web.mjs +26 -11
- package/dist/web.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/hooks.d.ts +0 -301
- package/dist/hooks.d.ts.map +0 -1
- package/dist/hooks.js +0 -456
- package/dist/hooks.js.map +0 -1
- package/dist/hooks.mjs +0 -447
- package/dist/hooks.mjs.map +0 -1
- package/dist/internals/fragment-B0rB4qEp.js +0 -32
- package/dist/internals/fragment-B0rB4qEp.js.map +0 -1
- package/dist/internals/fragment-DPs1AriN.mjs +0 -30
- package/dist/internals/fragment-DPs1AriN.mjs.map +0 -1
- package/dist/internals/state-0jEjYdYV.js +0 -203
- package/dist/internals/state-0jEjYdYV.js.map +0 -1
- package/dist/internals/state-BiYNImPF.mjs.map +0 -1
- package/dist/internals/state-DH_D-jro.js.map +0 -1
- package/dist/internals/state-zydBhS8M.mjs +0 -197
- package/dist/internals/state-zydBhS8M.mjs.map +0 -1
- package/dist/internals/sync-CSxmMfGm.js.map +0 -1
- package/dist/internals/sync-Cq3pCYO3.mjs.map +0 -1
- package/dist/internals/utils-DAEKakog.mjs +0 -42
- package/dist/internals/utils-DAEKakog.mjs.map +0 -1
- package/dist/internals/utils-Dc66ARNS.js +0 -44
- package/dist/internals/utils-Dc66ARNS.js.map +0 -1
package/dist/jsx-runtime.mjs
CHANGED
|
@@ -1,6 +1,33 @@
|
|
|
1
1
|
import { C as ComponentNode } from './internals/component-tyF62qKh.mjs';
|
|
2
2
|
import { _ as _createElement } from './internals/runtime-BN27rc51.mjs';
|
|
3
|
-
|
|
3
|
+
|
|
4
|
+
//
|
|
5
|
+
// index.ts
|
|
6
|
+
//
|
|
7
|
+
// The MIT License
|
|
8
|
+
// Copyright (c) 2021 - 2025 O2ter Limited. All rights reserved.
|
|
9
|
+
//
|
|
10
|
+
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
+
// of this software and associated documentation files (the "Software"), to deal
|
|
12
|
+
// in the Software without restriction, including without limitation the rights
|
|
13
|
+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
+
// copies of the Software, and to permit persons to whom the Software is
|
|
15
|
+
// furnished to do so, subject to the following conditions:
|
|
16
|
+
//
|
|
17
|
+
// The above copyright notice and this permission notice shall be included in
|
|
18
|
+
// all copies or substantial portions of the Software.
|
|
19
|
+
//
|
|
20
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
26
|
+
// THE SOFTWARE.
|
|
27
|
+
//
|
|
28
|
+
const Fragment = ({ children }) => {
|
|
29
|
+
return children;
|
|
30
|
+
};
|
|
4
31
|
|
|
5
32
|
//
|
|
6
33
|
// index.ts
|
|
@@ -34,5 +61,5 @@ function jsx(type, props, key) {
|
|
|
34
61
|
}
|
|
35
62
|
const jsxs = jsx;
|
|
36
63
|
|
|
37
|
-
export { JSX, jsx, jsxs };
|
|
64
|
+
export { Fragment, JSX, jsx, jsxs };
|
|
38
65
|
//# sourceMappingURL=jsx-runtime.mjs.map
|
package/dist/jsx-runtime.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsx-runtime.mjs","sources":["../../src/jsx-runtime.ts"],"sourcesContent":["//\n// index.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 { ComponentNode } from './core/types/component';\nimport { _createElement, _ElementType, _IntrinsicAttributes, _IntrinsicElements, PropsType } from './core/types/runtime';\n\nexport { Fragment } from './core/types/fragment';\n\nexport declare namespace JSX {\n type IntrinsicElements = _IntrinsicElements;\n type IntrinsicAttributes = _IntrinsicAttributes;\n type ElementType = _ElementType;\n type Element = ComponentNode;\n type ElementChildrenAttribute = { children: {}; };\n};\n\nexport const JSX = Object.freeze({\n Element: ComponentNode,\n});\n\nexport function jsx(\n type: _ElementType,\n props: PropsType,\n key?: string | number\n): ComponentNode {\n return _createElement(type, { ...props, key });\n}\n\nexport const jsxs = jsx;\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"jsx-runtime.mjs","sources":["../../src/core/types/fragment.ts","../../src/jsx-runtime.ts"],"sourcesContent":["//\n// index.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 { ComponentType, PropsWithChildren } from './common';\n\nexport const Fragment: ComponentType<PropsWithChildren<{}>> = ({ children }) => {\n return children;\n}\n","//\n// index.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 { ComponentNode } from './core/types/component';\nimport { _createElement, _ElementType, _IntrinsicAttributes, _IntrinsicElements, PropsType } from './core/types/runtime';\n\nexport { Fragment } from './core/types/fragment';\n\nexport declare namespace JSX {\n type IntrinsicElements = _IntrinsicElements;\n type IntrinsicAttributes = _IntrinsicAttributes;\n type ElementType = _ElementType;\n type Element = ComponentNode;\n type ElementChildrenAttribute = { children: {}; };\n};\n\nexport const JSX = Object.freeze({\n Element: ComponentNode,\n});\n\nexport function jsx(\n type: _ElementType,\n props: PropsType,\n key?: string | number\n): ComponentNode {\n return _createElement(type, { ...props, key });\n}\n\nexport const jsxs = jsx;\n"],"names":[],"mappings":";;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MAIa,QAAQ,GAAyC,CAAC,EAAE,QAAQ,EAAE,KAAI;AAC7E,IAAA,OAAO,QAAQ;AACjB;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAea,MAAA,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;AAC/B,IAAA,OAAO,EAAE,aAAa;AACvB,CAAA;SAEe,GAAG,CACjB,IAAkB,EAClB,KAAgB,EAChB,GAAqB,EAAA;IAErB,OAAO,cAAc,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,CAAC;AAChD;AAEO,MAAM,IAAI,GAAG;;;;"}
|
package/dist/server-dom.js
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var jsdom = require('jsdom');
|
|
4
|
-
var common = require('./internals/common-
|
|
4
|
+
var common = require('./internals/common-FG7T3c2f.js');
|
|
5
5
|
require('lodash');
|
|
6
6
|
require('myers.js');
|
|
7
|
-
require('./internals/renderer-
|
|
8
|
-
require('./internals/
|
|
7
|
+
require('./internals/renderer-jjw2FwKT.js');
|
|
8
|
+
require('./internals/utils-Bipfwp1R.js');
|
|
9
9
|
require('./internals/component-DJsXAx2C.js');
|
|
10
10
|
require('nextick');
|
|
11
|
-
require('./internals/utils-Dc66ARNS.js');
|
|
12
11
|
require('postcss');
|
|
13
12
|
require('postcss-js');
|
|
14
13
|
require('postcss-nested');
|
package/dist/server-dom.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-dom.js","sources":["../../src/renderer/server-dom.ts"],"sourcesContent":["//\n// dom.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 { JSDOM } from 'jsdom';\nimport { _DOMRenderer } from './common';\n\nexport * from 'jsdom';\n\nexport class ServerDOMRenderer extends _DOMRenderer {\n\n constructor(dom = new JSDOM()) {\n super(dom.window.document);\n }\n\n /** @internal */\n get _server(): boolean {\n return true;\n }\n}\n"],"names":["_DOMRenderer","JSDOM"],"mappings":"
|
|
1
|
+
{"version":3,"file":"server-dom.js","sources":["../../src/renderer/server-dom.ts"],"sourcesContent":["//\n// dom.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 { JSDOM } from 'jsdom';\nimport { _DOMRenderer } from './common';\n\nexport * from 'jsdom';\n\nexport class ServerDOMRenderer extends _DOMRenderer {\n\n constructor(dom = new JSDOM()) {\n super(dom.window.document);\n }\n\n /** @internal */\n get _server(): boolean {\n return true;\n }\n}\n"],"names":["_DOMRenderer","JSDOM"],"mappings":";;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQM,MAAO,iBAAkB,SAAQA,mBAAY,CAAA;AAEjD,IAAA,WAAA,CAAY,GAAG,GAAG,IAAIC,WAAK,EAAE,EAAA;AAC3B,QAAA,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;;;AAI5B,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI;;AAEd;;;;;;;;;;"}
|
package/dist/server-dom.mjs
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { JSDOM } from 'jsdom';
|
|
2
2
|
export * from 'jsdom';
|
|
3
|
-
import { _ as _DOMRenderer } from './internals/common-
|
|
3
|
+
import { _ as _DOMRenderer } from './internals/common-KSKXTzR8.mjs';
|
|
4
4
|
import 'lodash';
|
|
5
5
|
import 'myers.js';
|
|
6
|
-
import './internals/renderer-
|
|
7
|
-
import './internals/
|
|
6
|
+
import './internals/renderer-GTnF-hYa.mjs';
|
|
7
|
+
import './internals/utils-BJL3yvTI.mjs';
|
|
8
8
|
import './internals/component-tyF62qKh.mjs';
|
|
9
9
|
import 'nextick';
|
|
10
|
-
import './internals/utils-DAEKakog.mjs';
|
|
11
10
|
import 'postcss';
|
|
12
11
|
import 'postcss-js';
|
|
13
12
|
import 'postcss-nested';
|
package/dist/server-dom.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-dom.mjs","sources":["../../src/renderer/server-dom.ts"],"sourcesContent":["//\n// dom.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 { JSDOM } from 'jsdom';\nimport { _DOMRenderer } from './common';\n\nexport * from 'jsdom';\n\nexport class ServerDOMRenderer extends _DOMRenderer {\n\n constructor(dom = new JSDOM()) {\n super(dom.window.document);\n }\n\n /** @internal */\n get _server(): boolean {\n return true;\n }\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server-dom.mjs","sources":["../../src/renderer/server-dom.ts"],"sourcesContent":["//\n// dom.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 { JSDOM } from 'jsdom';\nimport { _DOMRenderer } from './common';\n\nexport * from 'jsdom';\n\nexport class ServerDOMRenderer extends _DOMRenderer {\n\n constructor(dom = new JSDOM()) {\n super(dom.window.document);\n }\n\n /** @internal */\n get _server(): boolean {\n return true;\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQM,MAAO,iBAAkB,SAAQ,YAAY,CAAA;AAEjD,IAAA,WAAA,CAAY,GAAG,GAAG,IAAI,KAAK,EAAE,EAAA;AAC3B,QAAA,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;;;AAI5B,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI;;AAEd;;;;"}
|
package/dist/web.d.ts
CHANGED
|
@@ -8,8 +8,8 @@ declare const useIntersectionObserver: (target: Element | null | undefined, call
|
|
|
8
8
|
declare const useMutationObserver: (target: Node | null | undefined, callback: MutationCallback, options?: MutationObserverInit) => void;
|
|
9
9
|
declare const usePerformanceObserver: (callback: PerformanceObserverCallback, options?: PerformanceObserverInit) => void;
|
|
10
10
|
|
|
11
|
-
declare const useLocalStorage: (key: string, initialValue?: string | null) => readonly [string | null
|
|
12
|
-
declare const useSessionStorage: (key: string, initialValue?: string | null) => readonly [string | null
|
|
11
|
+
declare const useLocalStorage: (key: string, initialValue?: string | null) => readonly [string | null, (v: SetStateAction<string | null | undefined>) => void];
|
|
12
|
+
declare const useSessionStorage: (key: string, initialValue?: string | null) => readonly [string | null, (v: SetStateAction<string | null | undefined>) => void];
|
|
13
13
|
|
|
14
14
|
declare const useWindowMetrics: () => {
|
|
15
15
|
devicePixelRatio: number;
|
package/dist/web.js
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var _ = require('lodash');
|
|
4
|
-
var sync = require('./internals/sync-
|
|
5
|
-
var
|
|
6
|
-
var common = require('./internals/common-
|
|
4
|
+
var sync = require('./internals/sync-BIbWmXEq.js');
|
|
5
|
+
var utils = require('./internals/utils-Bipfwp1R.js');
|
|
6
|
+
var common = require('./internals/common-FG7T3c2f.js');
|
|
7
7
|
require('./internals/component-DJsXAx2C.js');
|
|
8
8
|
require('myers.js');
|
|
9
|
-
require('./internals/renderer-
|
|
9
|
+
require('./internals/renderer-jjw2FwKT.js');
|
|
10
10
|
require('nextick');
|
|
11
|
-
require('./internals/utils-Dc66ARNS.js');
|
|
12
11
|
require('postcss');
|
|
13
12
|
require('postcss-js');
|
|
14
13
|
require('postcss-nested');
|
|
@@ -134,21 +133,30 @@ const usePerformanceObserver = (callback, options) => {
|
|
|
134
133
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
135
134
|
// THE SOFTWARE.
|
|
136
135
|
//
|
|
136
|
+
const emitters$1 = new WeakMap();
|
|
137
|
+
const emitterFor$1 = (storage) => {
|
|
138
|
+
if (!emitters$1.has(storage))
|
|
139
|
+
emitters$1.set(storage, new utils.EventEmitter());
|
|
140
|
+
return emitters$1.get(storage);
|
|
141
|
+
};
|
|
137
142
|
const _useStorage = (storage, key, initialValue) => {
|
|
138
143
|
const state = sync.useSyncExternalStore((onStoreChange) => {
|
|
139
144
|
const _storage = storage();
|
|
145
|
+
const emitter = emitterFor$1(_storage);
|
|
140
146
|
const callback = (ev) => {
|
|
141
147
|
if (!ev.storageArea || ev.storageArea === _storage)
|
|
142
148
|
onStoreChange();
|
|
143
149
|
};
|
|
144
150
|
window.addEventListener('storage', callback);
|
|
145
|
-
|
|
151
|
+
const event = emitter.register('change', () => { onStoreChange(); });
|
|
152
|
+
return () => {
|
|
153
|
+
window.removeEventListener('storage', callback);
|
|
154
|
+
event.remove();
|
|
155
|
+
};
|
|
146
156
|
}, () => storage().getItem(key), () => undefined);
|
|
147
157
|
const setState = sync.useCallback((v) => {
|
|
148
158
|
try {
|
|
149
159
|
const _storage = storage();
|
|
150
|
-
if (!_storage)
|
|
151
|
-
return;
|
|
152
160
|
const newValue = _.isFunction(v) ? v(state) : v;
|
|
153
161
|
if (_.isNil(newValue)) {
|
|
154
162
|
_storage.removeItem(key);
|
|
@@ -156,13 +164,14 @@ const _useStorage = (storage, key, initialValue) => {
|
|
|
156
164
|
else {
|
|
157
165
|
_storage.setItem(key, newValue);
|
|
158
166
|
}
|
|
159
|
-
|
|
167
|
+
const emitter = emitterFor$1(_storage);
|
|
168
|
+
emitter.emit('change');
|
|
160
169
|
}
|
|
161
170
|
catch (e) {
|
|
162
171
|
console.error(e);
|
|
163
172
|
}
|
|
164
173
|
}, [key]);
|
|
165
|
-
return [state ?? initialValue, setState];
|
|
174
|
+
return [state ?? initialValue ?? null, setState];
|
|
166
175
|
};
|
|
167
176
|
const useLocalStorage = (key, initialValue) => _useStorage(() => window.localStorage, key, initialValue);
|
|
168
177
|
const useSessionStorage = (key, initialValue) => _useStorage(() => window.sessionStorage, key, initialValue);
|
|
@@ -245,11 +254,11 @@ const useWindowMetrics = () => sync.useSyncExternalStore((onStoreChange) => {
|
|
|
245
254
|
// THE SOFTWARE.
|
|
246
255
|
//
|
|
247
256
|
const useDocument = () => {
|
|
248
|
-
const state
|
|
249
|
-
if (!state
|
|
257
|
+
const state = utils.reconciler.currentHookState;
|
|
258
|
+
if (!state)
|
|
250
259
|
throw Error('useDocument must be used within a render function.');
|
|
251
|
-
if (state
|
|
252
|
-
return state
|
|
260
|
+
if (state.renderer instanceof common._DOMRenderer) {
|
|
261
|
+
return state.renderer.doc;
|
|
253
262
|
}
|
|
254
263
|
else {
|
|
255
264
|
throw Error('Unsupported renderer.');
|
|
@@ -280,7 +289,12 @@ const useDocument = () => {
|
|
|
280
289
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
281
290
|
// THE SOFTWARE.
|
|
282
291
|
//
|
|
283
|
-
const
|
|
292
|
+
const emitters = new WeakMap();
|
|
293
|
+
const emitterFor = (document) => {
|
|
294
|
+
if (!emitters.has(document))
|
|
295
|
+
emitters.set(document, new utils.EventEmitter());
|
|
296
|
+
return emitters.get(document);
|
|
297
|
+
};
|
|
284
298
|
/**
|
|
285
299
|
* A hook that provides the current browser location and methods to manipulate the browser history.
|
|
286
300
|
*
|
|
@@ -309,6 +323,7 @@ const emitter = new state.EventEmitter();
|
|
|
309
323
|
*/
|
|
310
324
|
const useLocation = () => {
|
|
311
325
|
const document = useDocument();
|
|
326
|
+
const emitter = emitterFor(document);
|
|
312
327
|
const result = (history) => ({
|
|
313
328
|
..._.pick(document.location, 'hash', 'host', 'hostname', 'href', 'origin', 'pathname', 'port', 'protocol', 'search'),
|
|
314
329
|
state: history?.state ?? null,
|
package/dist/web.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.js","sources":["../../src/web/observer.ts","../../src/web/storage.ts","../../src/web/window.ts","../../src/web/document.ts","../../src/web/location.ts"],"sourcesContent":["//\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';\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: Element | null | undefined,\n callback: (entry: ResizeObserverEntry) => void,\n options?: ResizeObserverOptions,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\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: Element | null | undefined,\n callback: (entry: IntersectionObserverEntry) => void,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\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: Node | null | undefined,\n callback: MutationCallback,\n options?: MutationObserverInit,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\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// 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';\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 callback = (ev: StorageEvent) => { \n if (!ev.storageArea || ev.storageArea === _storage) onStoreChange();\n };\n window.addEventListener('storage', callback);\n return () => window.removeEventListener('storage', callback);\n }, () => storage().getItem(key), () => undefined);\n const setState = useCallback((v: SetStateAction<string | null | undefined>) => {\n try {\n const _storage = storage();\n if (!_storage) return;\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 window.dispatchEvent(new StorageEvent('storage', { key, newValue, storageArea: _storage }));\n } catch (e) {\n console.error(e);\n }\n }, [key]);\n return [state ?? initialValue, 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// 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';\n\nexport const useWindowMetrics = () => useSyncExternalStore((onStoreChange) => {\n window.addEventListener('resize', onStoreChange);\n window.addEventListener('scroll', onStoreChange);\n return () => {\n window.removeEventListener('resize', onStoreChange);\n window.removeEventListener('scroll', onStoreChange);\n };\n}, () => ({\n devicePixelRatio: window.devicePixelRatio,\n outerWidth: window.outerWidth,\n outerHeight: window.outerHeight,\n innerWidth: window.innerWidth,\n innerHeight: window.innerHeight,\n screenX: window.screenX,\n screenY: window.screenY,\n scrollX: window.scrollX,\n scrollY: window.scrollY,\n}), () => ({\n devicePixelRatio: 1,\n outerWidth: 0,\n outerHeight: 0,\n innerWidth: 0,\n innerHeight: 0,\n screenX: 0,\n screenY: 0,\n scrollX: 0,\n scrollY: 0,\n}));","//\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.doc;\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 emitter = new EventEmitter();\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 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 const callback = () => { onStoreChange(); };\n window.addEventListener('popstate', callback);\n const event = emitter.register('change', callback);\n return () => {\n window.removeEventListener('popstate', callback);\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"],"names":["useCallback","useEffect","useSyncExternalStore","state","reconciler","_DOMRenderer","EventEmitter","useMemo"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"web.js","sources":["../../src/web/observer.ts","../../src/web/storage.ts","../../src/web/window.ts","../../src/web/document.ts","../../src/web/location.ts"],"sourcesContent":["//\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';\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: Element | null | undefined,\n callback: (entry: ResizeObserverEntry) => void,\n options?: ResizeObserverOptions,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\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: Element | null | undefined,\n callback: (entry: IntersectionObserverEntry) => void,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\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: Node | null | undefined,\n callback: MutationCallback,\n options?: MutationObserverInit,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\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// 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// 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';\n\nexport const useWindowMetrics = () => useSyncExternalStore((onStoreChange) => {\n window.addEventListener('resize', onStoreChange);\n window.addEventListener('scroll', onStoreChange);\n return () => {\n window.removeEventListener('resize', onStoreChange);\n window.removeEventListener('scroll', onStoreChange);\n };\n}, () => ({\n devicePixelRatio: window.devicePixelRatio,\n outerWidth: window.outerWidth,\n outerHeight: window.outerHeight,\n innerWidth: window.innerWidth,\n innerHeight: window.innerHeight,\n screenX: window.screenX,\n screenY: window.screenY,\n scrollX: window.scrollX,\n scrollY: window.scrollY,\n}), () => ({\n devicePixelRatio: 1,\n outerWidth: 0,\n outerHeight: 0,\n innerWidth: 0,\n innerHeight: 0,\n screenX: 0,\n screenY: 0,\n scrollX: 0,\n scrollY: 0,\n}));","//\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.doc;\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 const callback = () => { onStoreChange(); };\n window.addEventListener('popstate', callback);\n const event = emitter.register('change', callback);\n return () => {\n window.removeEventListener('popstate', callback);\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"],"names":["useCallback","useEffect","emitters","emitterFor","EventEmitter","useSyncExternalStore","reconciler","_DOMRenderer","useMemo"],"mappings":";;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAWA,MAAM,cAAc,GAAG,CACrB,WAAmE,KACjE;AACF,IAAA,MAAM,SAAS,GAAG,IAAI,OAAO,EAAmC;IAChE,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,CAAC,OAAO,KAAI;AAC3C,QAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;AAC3B,YAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE;gBACxD,CAAC,YAAW;AACV,oBAAA,IAAI;AACF,wBAAA,MAAM,QAAQ,CAAC,KAAK,CAAC;;oBACrB,OAAO,CAAC,EAAE;AACV,wBAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;;iBAEnB,GAAG;;;AAGV,KAAC,CAAC;IACF,OAAO;QACL,OAAO,EAAE,CAAC,MAAe,EAAE,QAA4B,EAAE,OAAW,KAAI;AACtE,YAAA,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;AACjC,YAAA,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;SAClE;AACD,QAAA,SAAS,EAAE,CAAC,MAAe,EAAE,QAA4B,KAAI;YAC3D,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC;AACjE,YAAA,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;AAAE,gBAAA,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC;SAClD;KACF;AACH,CAAC;AAED,MAAM,QAAQ,GAAG,OAAO,MAAM,KAAK,WAAW,GAAG,SAAS,GAAG;AAC3D,IAAA,MAAM,EAAE,cAAc,CAAC,cAAc,CAAC;AACtC,IAAA,YAAY,EAAE,cAAc,CAAC,oBAAoB,CAAC;CACnD;AAEY,MAAA,iBAAiB,GAAG,CAC/B,MAAkC,EAClC,QAA8C,EAC9C,OAA+B,KAC7B;AACF,IAAA,MAAM,SAAS,GAAGA,gBAAW,CAAC,QAAQ,CAAC;IACvCC,cAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM;YAAE;QAC1B,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;AACnD,QAAA,OAAO,MAAM,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC;AAC3D,KAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AACd;MAEa,uBAAuB,GAAG,CACrC,MAAkC,EAClC,QAAoD,KAClD;AACF,IAAA,MAAM,SAAS,GAAGD,gBAAW,CAAC,QAAQ,CAAC;IACvCC,cAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM;YAAE;QAC1B,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC;AAChD,QAAA,OAAO,MAAM,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC;AACjE,KAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AACd;AAEa,MAAA,mBAAmB,GAAG,CACjC,MAA+B,EAC/B,QAA0B,EAC1B,OAA8B,KAC5B;AACF,IAAA,MAAM,SAAS,GAAGD,gBAAW,CAAC,QAAQ,CAAC;IACvCC,cAAS,CAAC,MAAK;AACb,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,MAAM;YAAE;AAC9C,QAAA,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,SAAS,CAAC;AAChD,QAAA,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;AACjC,QAAA,OAAO,MAAM,QAAQ,CAAC,UAAU,EAAE;AACpC,KAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AACd;MAEa,sBAAsB,GAAG,CACpC,QAAqC,EACrC,OAAiC,KAC/B;AACF,IAAA,MAAM,SAAS,GAAGD,gBAAW,CAAC,QAAQ,CAAC;IACvCC,cAAS,CAAC,MAAK;QACb,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE;AACnC,QAAA,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CAAC,SAAS,CAAC;AACnD,QAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;AACzB,QAAA,OAAO,MAAM,QAAQ,CAAC,UAAU,EAAE;KACnC,EAAE,EAAE,CAAC;AACR;;ACvHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA,MAAMC,UAAQ,GAAG,IAAI,OAAO,EAAyB;AACrD,MAAMC,YAAU,GAAG,CAAC,OAAgB,KAAI;AACtC,IAAA,IAAI,CAACD,UAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;QAAEA,UAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,IAAIE,kBAAY,EAAE,CAAC;AACrE,IAAA,OAAOF,UAAQ,CAAC,GAAG,CAAC,OAAO,CAAE;AAC/B,CAAC;AAED,MAAM,WAAW,GAAG,CAClB,OAAsB,EACtB,GAAW,EACX,YAA4B,KAC1B;AACF,IAAA,MAAM,KAAK,GAAGG,yBAAoB,CAAC,CAAC,aAAa,KAAI;AACnD,QAAA,MAAM,QAAQ,GAAG,OAAO,EAAE;AAC1B,QAAA,MAAM,OAAO,GAAGF,YAAU,CAAC,QAAQ,CAAC;AACpC,QAAA,MAAM,QAAQ,GAAG,CAAC,EAAgB,KAAI;YACpC,IAAI,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,WAAW,KAAK,QAAQ;AAAE,gBAAA,aAAa,EAAE;AACrE,SAAC;AACD,QAAA,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC;AAC5C,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,aAAa,EAAE,CAAA,EAAE,CAAC;AACnE,QAAA,OAAO,MAAK;AACV,YAAA,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,QAAQ,CAAC;YAC/C,KAAK,CAAC,MAAM,EAAE;AAChB,SAAC;AACH,KAAC,EAAE,MAAM,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,SAAS,CAAC;AACjD,IAAA,MAAM,QAAQ,GAAGH,gBAAW,CAAC,CAAC,CAA4C,KAAI;AAC5E,QAAA,IAAI;AACF,YAAA,MAAM,QAAQ,GAAG,OAAO,EAAE;AAC1B,YAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;AAC/C,YAAA,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AACrB,gBAAA,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;;iBACnB;AACL,gBAAA,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC;;AAEjC,YAAA,MAAM,OAAO,GAAGG,YAAU,CAAC,QAAQ,CAAC;AACpC,YAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;;QACtB,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;;AAEpB,KAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACT,OAAO,CAAC,KAAK,IAAI,YAAY,IAAI,IAAI,EAAE,QAAQ,CAAU;AAC3D,CAAC;AAEY,MAAA,eAAe,GAAG,CAC7B,GAAW,EACX,YAA4B,KACzB,WAAW,CAAC,MAAM,MAAM,CAAC,YAAY,EAAE,GAAG,EAAE,YAAY;AAEhD,MAAA,iBAAiB,GAAG,CAC/B,GAAW,EACX,YAA4B,KACzB,WAAW,CAAC,MAAM,MAAM,CAAC,cAAc,EAAE,GAAG,EAAE,YAAY;;ACjF/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKO,MAAM,gBAAgB,GAAG,MAAME,yBAAoB,CAAC,CAAC,aAAa,KAAI;AAC3E,IAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC;AAChD,IAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC;AAChD,IAAA,OAAO,MAAK;AACV,QAAA,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,aAAa,CAAC;AACnD,QAAA,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,aAAa,CAAC;AACrD,KAAC;AACH,CAAC,EAAE,OAAO;IACR,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;IACzC,UAAU,EAAE,MAAM,CAAC,UAAU;IAC7B,WAAW,EAAE,MAAM,CAAC,WAAW;IAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;IAC7B,WAAW,EAAE,MAAM,CAAC,WAAW;IAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;IACvB,OAAO,EAAE,MAAM,CAAC,OAAO;IACvB,OAAO,EAAE,MAAM,CAAC,OAAO;IACvB,OAAO,EAAE,MAAM,CAAC,OAAO;AACxB,CAAA,CAAC,EAAE,OAAO;AACT,IAAA,gBAAgB,EAAE,CAAC;AACnB,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,OAAO,EAAE,CAAC;AACX,CAAA,CAAC;;ACvDF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMO,MAAM,WAAW,GAAG,MAAK;AAC9B,IAAA,MAAM,KAAK,GAAGC,gBAAU,CAAC,gBAAgB;AACzC,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,MAAM,KAAK,CAAC,oDAAoD,CAAC;AAC7E,IAAA,IAAI,KAAK,CAAC,QAAQ,YAAYC,mBAAY,EAAE;AAC1C,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG;;SACpB;AACL,QAAA,MAAM,KAAK,CAAC,uBAAuB,CAAC;;AAExC;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AASA,MAAM,QAAQ,GAAG,IAAI,OAAO,EAA0B;AACtD,MAAM,UAAU,GAAG,CAAC,QAAkB,KAAI;AACxC,IAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAIH,kBAAY,EAAE,CAAC;AACvE,IAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAE;AAChC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;AACI,MAAM,WAAW,GAAG,MAAK;AAC9B,IAAA,MAAM,QAAQ,GAAG,WAAW,EAAE;AAC9B,IAAA,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC;AACpC,IAAA,MAAM,MAAM,GAAG,CAAC,OAAiB,MAAM;QACrC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC;AACpH,QAAA,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI;QAC7B,IAAI,EAAE,MAAK;YACT,OAAO,EAAE,IAAI,EAAE;SAChB;QACD,OAAO,EAAE,MAAK;YACZ,OAAO,EAAE,OAAO,EAAE;AAClB,YAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;SACvB;AACD,QAAA,SAAS,EAAE,CAAC,IAAS,EAAE,GAAyB,KAAI;YAClD,OAAO,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC;AACjC,YAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;SACvB;AACD,QAAA,YAAY,EAAE,CAAC,IAAS,EAAE,GAAyB,KAAI;YACrD,OAAO,EAAE,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC;AACpC,YAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;SACvB;AACF,KAAA,CAAC;AACF,IAAA,OAAOC,yBAAoB,CAAC,CAAC,aAAa,KAAI;QAC5C,MAAM,QAAQ,GAAG,MAAK,EAAG,aAAa,EAAE,CAAC,EAAE;AAC3C,QAAA,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC;QAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAClD,QAAA,OAAO,MAAK;AACV,YAAA,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,QAAQ,CAAC;YAChD,KAAK,CAAC,MAAM,EAAE;AAChB,SAAC;AACH,KAAC,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,MAAM,EAAE,CAAC;AAClD;AAIA;;;;;;;;;;;;;;AAcG;AACI,MAAM,eAAe,GAAG,MAAK;AAClC,IAAA,MAAM,QAAQ,GAAG,WAAW,EAAE;IAC9B,MAAM,YAAY,GAAGG,YAAO,CAAC,MAAM,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC3F,IAAA,MAAM,eAAe,GAAGR,gBAAW,CAAC,CAAC,MAA2B,KAAI;AAClE,QAAA,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC;AAC7C,QAAA,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAI,CAAA,EAAA,SAAS,CAAC,QAAQ,EAAE,CAAA,CAAE,CAAC;AAChE,KAAC,CAAC;AACF,IAAA,OAAO,CAAC,YAAY,EAAE,eAAe,CAAC;AACxC;;;;;;;;;;;;;"}
|
package/dist/web.mjs
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import _ from 'lodash';
|
|
2
|
-
import { u as useCallback,
|
|
3
|
-
import {
|
|
4
|
-
import { _ as _DOMRenderer } from './internals/common-
|
|
2
|
+
import { u as useCallback, c as useEffect, d as useSyncExternalStore, b as useMemo } from './internals/sync-B9zfuWYQ.mjs';
|
|
3
|
+
import { a as EventEmitter, r as reconciler } from './internals/utils-BJL3yvTI.mjs';
|
|
4
|
+
import { _ as _DOMRenderer } from './internals/common-KSKXTzR8.mjs';
|
|
5
5
|
import './internals/component-tyF62qKh.mjs';
|
|
6
6
|
import 'myers.js';
|
|
7
|
-
import './internals/renderer-
|
|
7
|
+
import './internals/renderer-GTnF-hYa.mjs';
|
|
8
8
|
import 'nextick';
|
|
9
|
-
import './internals/utils-DAEKakog.mjs';
|
|
10
9
|
import 'postcss';
|
|
11
10
|
import 'postcss-js';
|
|
12
11
|
import 'postcss-nested';
|
|
@@ -132,21 +131,30 @@ const usePerformanceObserver = (callback, options) => {
|
|
|
132
131
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
133
132
|
// THE SOFTWARE.
|
|
134
133
|
//
|
|
134
|
+
const emitters$1 = new WeakMap();
|
|
135
|
+
const emitterFor$1 = (storage) => {
|
|
136
|
+
if (!emitters$1.has(storage))
|
|
137
|
+
emitters$1.set(storage, new EventEmitter());
|
|
138
|
+
return emitters$1.get(storage);
|
|
139
|
+
};
|
|
135
140
|
const _useStorage = (storage, key, initialValue) => {
|
|
136
141
|
const state = useSyncExternalStore((onStoreChange) => {
|
|
137
142
|
const _storage = storage();
|
|
143
|
+
const emitter = emitterFor$1(_storage);
|
|
138
144
|
const callback = (ev) => {
|
|
139
145
|
if (!ev.storageArea || ev.storageArea === _storage)
|
|
140
146
|
onStoreChange();
|
|
141
147
|
};
|
|
142
148
|
window.addEventListener('storage', callback);
|
|
143
|
-
|
|
149
|
+
const event = emitter.register('change', () => { onStoreChange(); });
|
|
150
|
+
return () => {
|
|
151
|
+
window.removeEventListener('storage', callback);
|
|
152
|
+
event.remove();
|
|
153
|
+
};
|
|
144
154
|
}, () => storage().getItem(key), () => undefined);
|
|
145
155
|
const setState = useCallback((v) => {
|
|
146
156
|
try {
|
|
147
157
|
const _storage = storage();
|
|
148
|
-
if (!_storage)
|
|
149
|
-
return;
|
|
150
158
|
const newValue = _.isFunction(v) ? v(state) : v;
|
|
151
159
|
if (_.isNil(newValue)) {
|
|
152
160
|
_storage.removeItem(key);
|
|
@@ -154,13 +162,14 @@ const _useStorage = (storage, key, initialValue) => {
|
|
|
154
162
|
else {
|
|
155
163
|
_storage.setItem(key, newValue);
|
|
156
164
|
}
|
|
157
|
-
|
|
165
|
+
const emitter = emitterFor$1(_storage);
|
|
166
|
+
emitter.emit('change');
|
|
158
167
|
}
|
|
159
168
|
catch (e) {
|
|
160
169
|
console.error(e);
|
|
161
170
|
}
|
|
162
171
|
}, [key]);
|
|
163
|
-
return [state ?? initialValue, setState];
|
|
172
|
+
return [state ?? initialValue ?? null, setState];
|
|
164
173
|
};
|
|
165
174
|
const useLocalStorage = (key, initialValue) => _useStorage(() => window.localStorage, key, initialValue);
|
|
166
175
|
const useSessionStorage = (key, initialValue) => _useStorage(() => window.sessionStorage, key, initialValue);
|
|
@@ -278,7 +287,12 @@ const useDocument = () => {
|
|
|
278
287
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
279
288
|
// THE SOFTWARE.
|
|
280
289
|
//
|
|
281
|
-
const
|
|
290
|
+
const emitters = new WeakMap();
|
|
291
|
+
const emitterFor = (document) => {
|
|
292
|
+
if (!emitters.has(document))
|
|
293
|
+
emitters.set(document, new EventEmitter());
|
|
294
|
+
return emitters.get(document);
|
|
295
|
+
};
|
|
282
296
|
/**
|
|
283
297
|
* A hook that provides the current browser location and methods to manipulate the browser history.
|
|
284
298
|
*
|
|
@@ -307,6 +321,7 @@ const emitter = new EventEmitter();
|
|
|
307
321
|
*/
|
|
308
322
|
const useLocation = () => {
|
|
309
323
|
const document = useDocument();
|
|
324
|
+
const emitter = emitterFor(document);
|
|
310
325
|
const result = (history) => ({
|
|
311
326
|
..._.pick(document.location, 'hash', 'host', 'hostname', 'href', 'origin', 'pathname', 'port', 'protocol', 'search'),
|
|
312
327
|
state: history?.state ?? null,
|
package/dist/web.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.mjs","sources":["../../src/web/observer.ts","../../src/web/storage.ts","../../src/web/window.ts","../../src/web/document.ts","../../src/web/location.ts"],"sourcesContent":["//\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';\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: Element | null | undefined,\n callback: (entry: ResizeObserverEntry) => void,\n options?: ResizeObserverOptions,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\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: Element | null | undefined,\n callback: (entry: IntersectionObserverEntry) => void,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\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: Node | null | undefined,\n callback: MutationCallback,\n options?: MutationObserverInit,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\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// 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';\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 callback = (ev: StorageEvent) => { \n if (!ev.storageArea || ev.storageArea === _storage) onStoreChange();\n };\n window.addEventListener('storage', callback);\n return () => window.removeEventListener('storage', callback);\n }, () => storage().getItem(key), () => undefined);\n const setState = useCallback((v: SetStateAction<string | null | undefined>) => {\n try {\n const _storage = storage();\n if (!_storage) return;\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 window.dispatchEvent(new StorageEvent('storage', { key, newValue, storageArea: _storage }));\n } catch (e) {\n console.error(e);\n }\n }, [key]);\n return [state ?? initialValue, 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// 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';\n\nexport const useWindowMetrics = () => useSyncExternalStore((onStoreChange) => {\n window.addEventListener('resize', onStoreChange);\n window.addEventListener('scroll', onStoreChange);\n return () => {\n window.removeEventListener('resize', onStoreChange);\n window.removeEventListener('scroll', onStoreChange);\n };\n}, () => ({\n devicePixelRatio: window.devicePixelRatio,\n outerWidth: window.outerWidth,\n outerHeight: window.outerHeight,\n innerWidth: window.innerWidth,\n innerHeight: window.innerHeight,\n screenX: window.screenX,\n screenY: window.screenY,\n scrollX: window.scrollX,\n scrollY: window.scrollY,\n}), () => ({\n devicePixelRatio: 1,\n outerWidth: 0,\n outerHeight: 0,\n innerWidth: 0,\n innerHeight: 0,\n screenX: 0,\n screenY: 0,\n scrollX: 0,\n scrollY: 0,\n}));","//\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.doc;\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 emitter = new EventEmitter();\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 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 const callback = () => { onStoreChange(); };\n window.addEventListener('popstate', callback);\n const event = emitter.register('change', callback);\n return () => {\n window.removeEventListener('popstate', callback);\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"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAWA,MAAM,cAAc,GAAG,CACrB,WAAmE,KACjE;AACF,IAAA,MAAM,SAAS,GAAG,IAAI,OAAO,EAAmC;IAChE,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,CAAC,OAAO,KAAI;AAC3C,QAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;AAC3B,YAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE;gBACxD,CAAC,YAAW;AACV,oBAAA,IAAI;AACF,wBAAA,MAAM,QAAQ,CAAC,KAAK,CAAC;;oBACrB,OAAO,CAAC,EAAE;AACV,wBAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;;iBAEnB,GAAG;;;AAGV,KAAC,CAAC;IACF,OAAO;QACL,OAAO,EAAE,CAAC,MAAe,EAAE,QAA4B,EAAE,OAAW,KAAI;AACtE,YAAA,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;AACjC,YAAA,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;SAClE;AACD,QAAA,SAAS,EAAE,CAAC,MAAe,EAAE,QAA4B,KAAI;YAC3D,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC;AACjE,YAAA,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;AAAE,gBAAA,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC;SAClD;KACF;AACH,CAAC;AAED,MAAM,QAAQ,GAAG,OAAO,MAAM,KAAK,WAAW,GAAG,SAAS,GAAG;AAC3D,IAAA,MAAM,EAAE,cAAc,CAAC,cAAc,CAAC;AACtC,IAAA,YAAY,EAAE,cAAc,CAAC,oBAAoB,CAAC;CACnD;AAEY,MAAA,iBAAiB,GAAG,CAC/B,MAAkC,EAClC,QAA8C,EAC9C,OAA+B,KAC7B;AACF,IAAA,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC;IACvC,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM;YAAE;QAC1B,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;AACnD,QAAA,OAAO,MAAM,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC;AAC3D,KAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AACd;MAEa,uBAAuB,GAAG,CACrC,MAAkC,EAClC,QAAoD,KAClD;AACF,IAAA,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC;IACvC,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM;YAAE;QAC1B,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC;AAChD,QAAA,OAAO,MAAM,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC;AACjE,KAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AACd;AAEa,MAAA,mBAAmB,GAAG,CACjC,MAA+B,EAC/B,QAA0B,EAC1B,OAA8B,KAC5B;AACF,IAAA,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC;IACvC,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,MAAM;YAAE;AAC9C,QAAA,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,SAAS,CAAC;AAChD,QAAA,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;AACjC,QAAA,OAAO,MAAM,QAAQ,CAAC,UAAU,EAAE;AACpC,KAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AACd;MAEa,sBAAsB,GAAG,CACpC,QAAqC,EACrC,OAAiC,KAC/B;AACF,IAAA,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC;IACvC,SAAS,CAAC,MAAK;QACb,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE;AACnC,QAAA,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CAAC,SAAS,CAAC;AACnD,QAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;AACzB,QAAA,OAAO,MAAM,QAAQ,CAAC,UAAU,EAAE;KACnC,EAAE,EAAE,CAAC;AACR;;ACvHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA,MAAM,WAAW,GAAG,CAClB,OAAsB,EACtB,GAAW,EACX,YAA4B,KAC1B;AACF,IAAA,MAAM,KAAK,GAAG,oBAAoB,CAAC,CAAC,aAAa,KAAI;AACnD,QAAA,MAAM,QAAQ,GAAG,OAAO,EAAE;AAC1B,QAAA,MAAM,QAAQ,GAAG,CAAC,EAAgB,KAAI;YACpC,IAAI,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,WAAW,KAAK,QAAQ;AAAE,gBAAA,aAAa,EAAE;AACrE,SAAC;AACD,QAAA,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC;QAC5C,OAAO,MAAM,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,QAAQ,CAAC;AAC9D,KAAC,EAAE,MAAM,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,SAAS,CAAC;AACjD,IAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAA4C,KAAI;AAC5E,QAAA,IAAI;AACF,YAAA,MAAM,QAAQ,GAAG,OAAO,EAAE;AAC1B,YAAA,IAAI,CAAC,QAAQ;gBAAE;AACf,YAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;AAC/C,YAAA,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AACrB,gBAAA,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;;iBACnB;AACL,gBAAA,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC;;AAEjC,YAAA,MAAM,CAAC,aAAa,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;;QAC3F,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;;AAEpB,KAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACT,IAAA,OAAO,CAAC,KAAK,IAAI,YAAY,EAAE,QAAQ,CAAU;AACnD,CAAC;AAEY,MAAA,eAAe,GAAG,CAC7B,GAAW,EACX,YAA4B,KACzB,WAAW,CAAC,MAAM,MAAM,CAAC,YAAY,EAAE,GAAG,EAAE,YAAY;AAEhD,MAAA,iBAAiB,GAAG,CAC/B,GAAW,EACX,YAA4B,KACzB,WAAW,CAAC,MAAM,MAAM,CAAC,cAAc,EAAE,GAAG,EAAE,YAAY;;ACrE/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKO,MAAM,gBAAgB,GAAG,MAAM,oBAAoB,CAAC,CAAC,aAAa,KAAI;AAC3E,IAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC;AAChD,IAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC;AAChD,IAAA,OAAO,MAAK;AACV,QAAA,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,aAAa,CAAC;AACnD,QAAA,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,aAAa,CAAC;AACrD,KAAC;AACH,CAAC,EAAE,OAAO;IACR,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;IACzC,UAAU,EAAE,MAAM,CAAC,UAAU;IAC7B,WAAW,EAAE,MAAM,CAAC,WAAW;IAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;IAC7B,WAAW,EAAE,MAAM,CAAC,WAAW;IAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;IACvB,OAAO,EAAE,MAAM,CAAC,OAAO;IACvB,OAAO,EAAE,MAAM,CAAC,OAAO;IACvB,OAAO,EAAE,MAAM,CAAC,OAAO;AACxB,CAAA,CAAC,EAAE,OAAO;AACT,IAAA,gBAAgB,EAAE,CAAC;AACnB,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,OAAO,EAAE,CAAC;AACX,CAAA,CAAC;;ACvDF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMO,MAAM,WAAW,GAAG,MAAK;AAC9B,IAAA,MAAM,KAAK,GAAG,UAAU,CAAC,gBAAgB;AACzC,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,MAAM,KAAK,CAAC,oDAAoD,CAAC;AAC7E,IAAA,IAAI,KAAK,CAAC,QAAQ,YAAY,YAAY,EAAE;AAC1C,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG;;SACpB;AACL,QAAA,MAAM,KAAK,CAAC,uBAAuB,CAAC;;AAExC;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AASA,MAAM,OAAO,GAAG,IAAI,YAAY,EAAE;AAElC;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;AACI,MAAM,WAAW,GAAG,MAAK;AAC9B,IAAA,MAAM,QAAQ,GAAG,WAAW,EAAE;AAC9B,IAAA,MAAM,MAAM,GAAG,CAAC,OAAiB,MAAM;QACrC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC;AACpH,QAAA,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI;QAC7B,IAAI,EAAE,MAAK;YACT,OAAO,EAAE,IAAI,EAAE;SAChB;QACD,OAAO,EAAE,MAAK;YACZ,OAAO,EAAE,OAAO,EAAE;AAClB,YAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;SACvB;AACD,QAAA,SAAS,EAAE,CAAC,IAAS,EAAE,GAAyB,KAAI;YAClD,OAAO,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC;AACjC,YAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;SACvB;AACD,QAAA,YAAY,EAAE,CAAC,IAAS,EAAE,GAAyB,KAAI;YACrD,OAAO,EAAE,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC;AACpC,YAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;SACvB;AACF,KAAA,CAAC;AACF,IAAA,OAAO,oBAAoB,CAAC,CAAC,aAAa,KAAI;QAC5C,MAAM,QAAQ,GAAG,MAAK,EAAG,aAAa,EAAE,CAAC,EAAE;AAC3C,QAAA,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC;QAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAClD,QAAA,OAAO,MAAK;AACV,YAAA,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,QAAQ,CAAC;YAChD,KAAK,CAAC,MAAM,EAAE;AAChB,SAAC;AACH,KAAC,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,MAAM,EAAE,CAAC;AAClD;AAIA;;;;;;;;;;;;;;AAcG;AACI,MAAM,eAAe,GAAG,MAAK;AAClC,IAAA,MAAM,QAAQ,GAAG,WAAW,EAAE;IAC9B,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC3F,IAAA,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,MAA2B,KAAI;AAClE,QAAA,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC;AAC7C,QAAA,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAI,CAAA,EAAA,SAAS,CAAC,QAAQ,EAAE,CAAA,CAAE,CAAC;AAChE,KAAC,CAAC;AACF,IAAA,OAAO,CAAC,YAAY,EAAE,eAAe,CAAC;AACxC;;;;"}
|
|
1
|
+
{"version":3,"file":"web.mjs","sources":["../../src/web/observer.ts","../../src/web/storage.ts","../../src/web/window.ts","../../src/web/document.ts","../../src/web/location.ts"],"sourcesContent":["//\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';\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: Element | null | undefined,\n callback: (entry: ResizeObserverEntry) => void,\n options?: ResizeObserverOptions,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\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: Element | null | undefined,\n callback: (entry: IntersectionObserverEntry) => void,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\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: Node | null | undefined,\n callback: MutationCallback,\n options?: MutationObserverInit,\n) => {\n const _callback = useCallback(callback);\n useEffect(() => {\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// 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// 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';\n\nexport const useWindowMetrics = () => useSyncExternalStore((onStoreChange) => {\n window.addEventListener('resize', onStoreChange);\n window.addEventListener('scroll', onStoreChange);\n return () => {\n window.removeEventListener('resize', onStoreChange);\n window.removeEventListener('scroll', onStoreChange);\n };\n}, () => ({\n devicePixelRatio: window.devicePixelRatio,\n outerWidth: window.outerWidth,\n outerHeight: window.outerHeight,\n innerWidth: window.innerWidth,\n innerHeight: window.innerHeight,\n screenX: window.screenX,\n screenY: window.screenY,\n scrollX: window.scrollX,\n scrollY: window.scrollY,\n}), () => ({\n devicePixelRatio: 1,\n outerWidth: 0,\n outerHeight: 0,\n innerWidth: 0,\n innerHeight: 0,\n screenX: 0,\n screenY: 0,\n scrollX: 0,\n scrollY: 0,\n}));","//\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.doc;\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 const callback = () => { onStoreChange(); };\n window.addEventListener('popstate', callback);\n const event = emitter.register('change', callback);\n return () => {\n window.removeEventListener('popstate', callback);\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"],"names":["emitters","emitterFor"],"mappings":"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"}
|