@wiggindev/hooks 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- package/.editorconfig +10 -0
- package/.eslintrc.cjs +54 -0
- package/.husky/pre-commit +4 -0
- package/.idea/codestream.xml +7 -0
- package/.idea/hooks.iml +14 -0
- package/.idea/modules.xml +10 -0
- package/.idea/vcs.xml +7 -0
- package/.idea/workspace.xml +79 -0
- package/.prettierignore +2 -0
- package/.prettierrc.json +9 -0
- package/README.md +1 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.modern.js +2 -0
- package/dist/index.modern.js.map +1 -0
- package/dist/index.module.js +2 -0
- package/dist/index.module.js.map +1 -0
- package/dist/index.umd.js +2 -0
- package/dist/index.umd.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types.d.ts +4 -0
- package/dist/useDocumentEventListener.d.ts +2 -0
- package/dist/useEvent.d.ts +3 -0
- package/dist/useEventListener.d.ts +3 -0
- package/dist/useIsomorphicLayoutEffect.d.ts +2 -0
- package/dist/useWindowEventListener.d.ts +2 -0
- package/lint-staged.config.cjs +9 -0
- package/package.json +54 -0
- package/src/index.ts +5 -0
- package/src/types.ts +6 -0
- package/src/useDocumentEventListener.ts +17 -0
- package/src/useEvent.ts +12 -0
- package/src/useEventListener.ts +22 -0
- package/src/useIsomorphicLayoutEffect.ts +4 -0
- package/src/useWindowEventListener.ts +17 -0
- package/tsconfig.json +29 -0
package/.editorconfig
ADDED
package/.eslintrc.cjs
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
module.exports = {
|
2
|
+
root: true,
|
3
|
+
parser: '@typescript-eslint/parser',
|
4
|
+
parserOptions: {
|
5
|
+
ecmaFeatures: {
|
6
|
+
jsx: true,
|
7
|
+
},
|
8
|
+
},
|
9
|
+
plugins: ['@typescript-eslint', 'react', 'prettier'],
|
10
|
+
extends: ['eslint:recommended', 'plugin:react/recommended', 'prettier'],
|
11
|
+
rules: {
|
12
|
+
'prefer-const': 'error',
|
13
|
+
'no-unused-vars': 'off',
|
14
|
+
'no-cond-assign': ['error', 'always'],
|
15
|
+
'@typescript-eslint/no-unused-vars': [
|
16
|
+
'error',
|
17
|
+
{ ignoreRestSiblings: true },
|
18
|
+
],
|
19
|
+
'@typescript-eslint/no-explicit-any': 'error',
|
20
|
+
'react/jsx-uses-react': 'error',
|
21
|
+
'react/jsx-uses-vars': 'error',
|
22
|
+
'@next/next/no-html-link-for-pages': 'off',
|
23
|
+
'prettier/prettier': 'error',
|
24
|
+
},
|
25
|
+
overrides: [
|
26
|
+
{
|
27
|
+
files: ['*.ts', '*.tsx'],
|
28
|
+
extends: [
|
29
|
+
'plugin:@typescript-eslint/recommended',
|
30
|
+
'plugin:@typescript-eslint/recommended-requiring-type-checking',
|
31
|
+
],
|
32
|
+
parserOptions: {
|
33
|
+
tsconfigRootDir: __dirname,
|
34
|
+
project: ['./tsconfig.json'],
|
35
|
+
},
|
36
|
+
},
|
37
|
+
{
|
38
|
+
files: ['*.js'],
|
39
|
+
rules: {
|
40
|
+
'@typescript-eslint/no-var-requires': 'off',
|
41
|
+
},
|
42
|
+
},
|
43
|
+
],
|
44
|
+
ignorePatterns: [
|
45
|
+
'node_modules',
|
46
|
+
'.fleet',
|
47
|
+
'.yarn',
|
48
|
+
'.idea',
|
49
|
+
'.next',
|
50
|
+
'.vercel',
|
51
|
+
'dist',
|
52
|
+
'.pnp.*',
|
53
|
+
],
|
54
|
+
};
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<project version="4">
|
3
|
+
<component name="CodeStream">
|
4
|
+
<option name="teamId" value="627c6dbe4df6f3ed8737f84c" />
|
5
|
+
<option name="webViewContext" value="{"chatProviderAccess":"strict","currentTeamId":"627c6dbe4df6f3ed8737f84c","currentStreamId":"","pullRequestCheckoutBranch":false,"isRepositioning":false,"onboardStep":0,"panelStack":["landing-redirect"],"hasFocus":false,"channelFilter":"all","channelsMuteAll":false,"codemarkFileFilter":"all","codemarkTypeFilter":"all","codemarkTagFilter":"all","codemarkBranchFilter":"all","codemarkAuthorFilter":"all","codemarksFileViewStyle":"inline","codemarksShowArchived":false,"codemarksShowResolved":false,"codemarksWrapComments":false,"showFeedbackSmiley":true,"route":{"name":"login","params":{}},"spatialViewShowPRComments":false,"__teamless__":{"selectedRegion":"us"},"sessionStart":1652466791260,"isFirstPageview":false}" />
|
6
|
+
</component>
|
7
|
+
</project>
|
package/.idea/hooks.iml
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<module type="WEB_MODULE" version="4">
|
3
|
+
<component name="NewModuleRootManager">
|
4
|
+
<content url="file://$MODULE_DIR$">
|
5
|
+
<excludeFolder url="file://$MODULE_DIR$/temp" />
|
6
|
+
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
|
7
|
+
<excludeFolder url="file://$MODULE_DIR$/tmp" />
|
8
|
+
</content>
|
9
|
+
<orderEntry type="inheritedJdk" />
|
10
|
+
<orderEntry type="sourceFolder" forTests="false" />
|
11
|
+
<orderEntry type="module" module-name="newportfolio" />
|
12
|
+
<orderEntry type="module" module-name="event-listener" />
|
13
|
+
</component>
|
14
|
+
</module>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<project version="4">
|
3
|
+
<component name="ProjectModuleManager">
|
4
|
+
<modules>
|
5
|
+
<module fileurl="file://$PROJECT_DIR$/../event-listeners/.idea/event-listener.iml" filepath="$PROJECT_DIR$/../event-listeners/.idea/event-listener.iml" />
|
6
|
+
<module fileurl="file://$PROJECT_DIR$/.idea/hooks.iml" filepath="$PROJECT_DIR$/.idea/hooks.iml" />
|
7
|
+
<module fileurl="file://$PROJECT_DIR$/../portfolio/.idea/newportfolio.iml" filepath="$PROJECT_DIR$/../portfolio/.idea/newportfolio.iml" />
|
8
|
+
</modules>
|
9
|
+
</component>
|
10
|
+
</project>
|
package/.idea/vcs.xml
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<project version="4">
|
3
|
+
<component name="ChangeListManager">
|
4
|
+
<list default="true" id="4964792f-b5d0-49fc-acf7-bc8ffeafca73" name="Changes" comment="">
|
5
|
+
<change beforePath="$PROJECT_DIR$/../event-listeners/.idea/event-listener.iml" beforeDir="false" afterPath="$PROJECT_DIR$/../event-listeners/.idea/event-listener.iml" afterDir="false" />
|
6
|
+
<change beforePath="$PROJECT_DIR$/.yarnrc.yml" beforeDir="false" afterPath="$PROJECT_DIR$/.yarnrc.yml" afterDir="false" />
|
7
|
+
<change beforePath="$PROJECT_DIR$/../portfolio/.idea/codestream.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../portfolio/.idea/codestream.xml" afterDir="false" />
|
8
|
+
<change beforePath="$PROJECT_DIR$/../portfolio/.idea/vcs.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../portfolio/.idea/vcs.xml" afterDir="false" />
|
9
|
+
<change beforePath="$PROJECT_DIR$/../portfolio/.yarn/cache/@types-prettier-npm-2.6.0-68db36c8c1-946f1f82ce.zip" beforeDir="false" />
|
10
|
+
<change beforePath="$PROJECT_DIR$/../portfolio/.yarn/cache/axe-core-npm-4.4.1-95b0d6a519-ad14c5b710.zip" beforeDir="false" />
|
11
|
+
<change beforePath="$PROJECT_DIR$/../portfolio/.yarn/cache/glob-npm-7.2.0-bb4644d239-78a8ea9423.zip" beforeDir="false" />
|
12
|
+
<change beforePath="$PROJECT_DIR$/../portfolio/.yarn/cache/glob-npm-8.0.1-3485e1ee02-7ac782f3ef.zip" beforeDir="false" />
|
13
|
+
<change beforePath="$PROJECT_DIR$/../portfolio/package.json" beforeDir="false" afterPath="$PROJECT_DIR$/../portfolio/package.json" afterDir="false" />
|
14
|
+
<change beforePath="$PROJECT_DIR$/../portfolio/pages/_app.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/../portfolio/pages/_app.tsx" afterDir="false" />
|
15
|
+
<change beforePath="$PROJECT_DIR$/../portfolio/src/hooks/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/../portfolio/src/hooks/index.ts" afterDir="false" />
|
16
|
+
<change beforePath="$PROJECT_DIR$/../portfolio/src/hooks/useDocumentEventListener.ts" beforeDir="false" />
|
17
|
+
<change beforePath="$PROJECT_DIR$/../portfolio/src/hooks/useEventListener.ts" beforeDir="false" />
|
18
|
+
<change beforePath="$PROJECT_DIR$/../portfolio/src/hooks/useWindowDimensions.ts" beforeDir="false" afterPath="$PROJECT_DIR$/../portfolio/src/hooks/useWindowDimensions.ts" afterDir="false" />
|
19
|
+
<change beforePath="$PROJECT_DIR$/../portfolio/src/hooks/useWindowEventListener.ts" beforeDir="false" />
|
20
|
+
<change beforePath="$PROJECT_DIR$/../portfolio/yarn.lock" beforeDir="false" afterPath="$PROJECT_DIR$/../portfolio/yarn.lock" afterDir="false" />
|
21
|
+
</list>
|
22
|
+
<option name="SHOW_DIALOG" value="false" />
|
23
|
+
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
24
|
+
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
25
|
+
<option name="LAST_RESOLUTION" value="IGNORE" />
|
26
|
+
</component>
|
27
|
+
<component name="Git.Settings">
|
28
|
+
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
29
|
+
</component>
|
30
|
+
<component name="MarkdownSettingsMigration">
|
31
|
+
<option name="stateVersion" value="1" />
|
32
|
+
</component>
|
33
|
+
<component name="ProjectId" id="297asfPdQivGT4C9paNuenxvTVF" />
|
34
|
+
<component name="ProjectLevelVcsManager" settingsEditedManually="true">
|
35
|
+
<ConfirmationsSetting value="2" id="Add" />
|
36
|
+
</component>
|
37
|
+
<component name="ProjectViewState">
|
38
|
+
<option name="hideEmptyMiddlePackages" value="true" />
|
39
|
+
<option name="showLibraryContents" value="true" />
|
40
|
+
</component>
|
41
|
+
<component name="PropertiesComponent"><![CDATA[{
|
42
|
+
"keyToString": {
|
43
|
+
"RunOnceActivity.OpenProjectViewOnStart": "true",
|
44
|
+
"RunOnceActivity.ShowReadmeOnStart": "true",
|
45
|
+
"WebServerToolWindowFactoryState": "false",
|
46
|
+
"last_opened_file_path": "/Users/wiggindev/git/hooks",
|
47
|
+
"nodejs_package_manager_path": "yarn",
|
48
|
+
"prettierjs.PrettierConfiguration.Package": "yarn:package.json:prettier",
|
49
|
+
"ts.external.directory.path": "yarn:package.json:typescript",
|
50
|
+
"vue.rearranger.settings.migration": "true"
|
51
|
+
}
|
52
|
+
}]]></component>
|
53
|
+
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
|
54
|
+
<component name="TaskManager">
|
55
|
+
<task active="true" id="Default" summary="Default task">
|
56
|
+
<changelist id="4964792f-b5d0-49fc-acf7-bc8ffeafca73" name="Changes" comment="" />
|
57
|
+
<created>1652466785863</created>
|
58
|
+
<option name="number" value="Default" />
|
59
|
+
<option name="presentableId" value="Default" />
|
60
|
+
<updated>1652466785863</updated>
|
61
|
+
<workItem from="1652466786963" duration="3281000" />
|
62
|
+
</task>
|
63
|
+
<servers />
|
64
|
+
</component>
|
65
|
+
<component name="TypeScriptGeneratedFilesManager">
|
66
|
+
<option name="version" value="3" />
|
67
|
+
</component>
|
68
|
+
<component name="Vcs.Log.Tabs.Properties">
|
69
|
+
<option name="TAB_STATES">
|
70
|
+
<map>
|
71
|
+
<entry key="MAIN">
|
72
|
+
<value>
|
73
|
+
<State />
|
74
|
+
</value>
|
75
|
+
</entry>
|
76
|
+
</map>
|
77
|
+
</option>
|
78
|
+
</component>
|
79
|
+
</project>
|
package/.prettierignore
ADDED
package/.prettierrc.json
ADDED
package/README.md
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
# hooks
|
package/dist/index.cjs
ADDED
@@ -0,0 +1,2 @@
|
|
1
|
+
function e(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=/*#__PURE__*/e(require("react")),n="undefined"!=typeof window?t.default.useLayoutEffect:t.default.useEffect,u=function(e){var u=t.default.useRef(e);return n(function(){u.current=e}),t.default.useMemo(function(){return u.current},[])};exports.useDocumentEventListener=function(e,n){var r=u(n);t.default.useEffect(function(){if(document&&document.addEventListener)return document.addEventListener(e,r),function(){return document.addEventListener(e,r)}},[e,r])},exports.useEvent=u,exports.useEventListener=function(e,n,r){var f=u(n);t.default.useEffect(function(){var t=r.current;if(t&&t.addEventListener)return t.addEventListener(e,f),function(){return t.addEventListener(e,f)}},[r,e,f])},exports.useIsomorphicLayoutEffect=n,exports.useWindowEventListener=function(e,n){var r=u(n);t.default.useEffect(function(){if(window&&window.addEventListener)return window.addEventListener(e,r),function(){return window.addEventListener(e,r)}},[e,r])};
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/useIsomorphicLayoutEffect.ts","../src/useEvent.ts","../src/useDocumentEventListener.ts","../src/useEventListener.ts","../src/useWindowEventListener.ts"],"sourcesContent":["import React from 'react';\n\nexport const useIsomorphicLayoutEffect =\n typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n","import React from 'react';\nimport { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect';\n\ntype Callback = (...args: any[]) => any;\n\nexport const useEvent = <C extends Callback>(callback: C): C => {\n const callbackRef = React.useRef(callback);\n useIsomorphicLayoutEffect(() => {\n callbackRef.current = callback;\n });\n return React.useMemo(() => callbackRef.current, []);\n};\n","import React from 'react';\nimport { useEvent } from './useEvent';\nimport { EventName, EventListener } from './types';\n\nexport const useDocumentEventListener = <K extends EventName<DocumentEventMap>>(\n eventName: K,\n listener: EventListener<DocumentEventMap, K>\n) => {\n const stableListener = useEvent(listener);\n React.useEffect(() => {\n if (!document || !document.addEventListener) {\n return;\n }\n document.addEventListener(eventName, stableListener);\n return () => document.addEventListener(eventName, stableListener);\n }, [eventName, stableListener]);\n};\n","import React from 'react';\nimport { useEvent } from './useEvent';\nimport { EventName, EventListener } from './types';\n\nexport const useEventListener = <\n K extends EventName<HTMLElementEventMap>,\n E extends HTMLElement\n>(\n eventName: K,\n listener: EventListener<HTMLElementEventMap, K>,\n element: React.RefObject<E>\n) => {\n const stableListener = useEvent(listener);\n React.useEffect(() => {\n const node = element.current;\n if (!node || !node.addEventListener) {\n return;\n }\n node.addEventListener(eventName, stableListener);\n return () => node.addEventListener(eventName, stableListener);\n }, [element, eventName, stableListener]);\n};\n","import React from 'react';\nimport { useEvent } from './useEvent';\nimport { EventName, EventListener } from './types';\n\nexport const useWindowEventListener = <K extends EventName<WindowEventMap>>(\n eventName: K,\n listener: EventListener<WindowEventMap, K>\n) => {\n const stableListener = useEvent(listener);\n React.useEffect(() => {\n if (!window || !window.addEventListener) {\n return;\n }\n window.addEventListener(eventName, stableListener);\n return () => window.addEventListener(eventName, stableListener);\n }, [eventName, stableListener]);\n};\n"],"names":["useIsomorphicLayoutEffect","window","React","useLayoutEffect","useEffect","useEvent","callback","callbackRef","useRef","current","useMemo","eventName","listener","stableListener","document","addEventListener","element","node"],"mappings":"+GAEaA,EACS,oBAAXC,OAAyBC,EAAAA,QAAMC,gBAAkBD,EAAAA,QAAME,UCErDC,EAAW,SAAqBC,GACzC,IAAMC,EAAcL,EAAK,QAACM,OAAOF,GAIjC,OAHAN,EAA0B,WACtBO,EAAYE,QAAUH,IAEnBJ,UAAMQ,QAAQ,WAAA,OAAMH,EAAYE,SAAS,sCCNZ,SACpCE,EACAC,GAEA,IAAMC,EAAiBR,EAASO,GAChCV,EAAAA,QAAME,UAAU,WACZ,GAAKU,UAAaA,SAASC,iBAI3B,OADAD,SAASC,iBAAiBJ,EAAWE,GACxBC,WAAAA,OAAAA,SAASC,iBAAiBJ,EAAWE,KACnD,CAACF,EAAWE,iDCXa,SAI5BF,EACAC,EACAI,GAEA,IAAMH,EAAiBR,EAASO,GAChCV,UAAME,UAAU,WACZ,IAAMa,EAAOD,EAAQP,QACrB,GAAKQ,GAASA,EAAKF,iBAInB,OADAE,EAAKF,iBAAiBJ,EAAWE,GACpBI,WAAAA,OAAAA,EAAKF,iBAAiBJ,EAAWE,KAC/C,CAACG,EAASL,EAAWE,wEChBU,SAClCF,EACAC,GAEA,IAAMC,EAAiBR,EAASO,GAChCV,EAAAA,QAAME,UAAU,WACZ,GAAKH,QAAWA,OAAOc,iBAIvB,OADAd,OAAOc,iBAAiBJ,EAAWE,GACtBZ,WAAAA,OAAAA,OAAOc,iBAAiBJ,EAAWE,KACjD,CAACF,EAAWE"}
|
package/dist/index.d.ts
ADDED
@@ -0,0 +1,2 @@
|
|
1
|
+
import e from"react";const t="undefined"!=typeof window?e.useLayoutEffect:e.useEffect,n=n=>{const d=e.useRef(n);return t(()=>{d.current=n}),e.useMemo(()=>d.current,[])},d=(t,d,r)=>{const s=n(d);e.useEffect(()=>{const e=r.current;if(e&&e.addEventListener)return e.addEventListener(t,s),()=>e.addEventListener(t,s)},[r,t,s])},r=(t,d)=>{const r=n(d);e.useEffect(()=>{if(document&&document.addEventListener)return document.addEventListener(t,r),()=>document.addEventListener(t,r)},[t,r])},s=(t,d)=>{const r=n(d);e.useEffect(()=>{if(window&&window.addEventListener)return window.addEventListener(t,r),()=>window.addEventListener(t,r)},[t,r])};export{r as useDocumentEventListener,n as useEvent,d as useEventListener,t as useIsomorphicLayoutEffect,s as useWindowEventListener};
|
2
|
+
//# sourceMappingURL=index.modern.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.modern.js","sources":["../src/useIsomorphicLayoutEffect.ts","../src/useEvent.ts","../src/useEventListener.ts","../src/useDocumentEventListener.ts","../src/useWindowEventListener.ts"],"sourcesContent":["import React from 'react';\n\nexport const useIsomorphicLayoutEffect =\n typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n","import React from 'react';\nimport { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect';\n\ntype Callback = (...args: any[]) => any;\n\nexport const useEvent = <C extends Callback>(callback: C): C => {\n const callbackRef = React.useRef(callback);\n useIsomorphicLayoutEffect(() => {\n callbackRef.current = callback;\n });\n return React.useMemo(() => callbackRef.current, []);\n};\n","import React from 'react';\nimport { useEvent } from './useEvent';\nimport { EventName, EventListener } from './types';\n\nexport const useEventListener = <\n K extends EventName<HTMLElementEventMap>,\n E extends HTMLElement\n>(\n eventName: K,\n listener: EventListener<HTMLElementEventMap, K>,\n element: React.RefObject<E>\n) => {\n const stableListener = useEvent(listener);\n React.useEffect(() => {\n const node = element.current;\n if (!node || !node.addEventListener) {\n return;\n }\n node.addEventListener(eventName, stableListener);\n return () => node.addEventListener(eventName, stableListener);\n }, [element, eventName, stableListener]);\n};\n","import React from 'react';\nimport { useEvent } from './useEvent';\nimport { EventName, EventListener } from './types';\n\nexport const useDocumentEventListener = <K extends EventName<DocumentEventMap>>(\n eventName: K,\n listener: EventListener<DocumentEventMap, K>\n) => {\n const stableListener = useEvent(listener);\n React.useEffect(() => {\n if (!document || !document.addEventListener) {\n return;\n }\n document.addEventListener(eventName, stableListener);\n return () => document.addEventListener(eventName, stableListener);\n }, [eventName, stableListener]);\n};\n","import React from 'react';\nimport { useEvent } from './useEvent';\nimport { EventName, EventListener } from './types';\n\nexport const useWindowEventListener = <K extends EventName<WindowEventMap>>(\n eventName: K,\n listener: EventListener<WindowEventMap, K>\n) => {\n const stableListener = useEvent(listener);\n React.useEffect(() => {\n if (!window || !window.addEventListener) {\n return;\n }\n window.addEventListener(eventName, stableListener);\n return () => window.addEventListener(eventName, stableListener);\n }, [eventName, stableListener]);\n};\n"],"names":["useIsomorphicLayoutEffect","window","React","useLayoutEffect","useEffect","useEvent","callback","callbackRef","useRef","current","useMemo","useEventListener","eventName","listener","element","stableListener","node","addEventListener","useDocumentEventListener","document","useWindowEventListener"],"mappings":"qBAEaA,MAAAA,EACS,oBAAXC,OAAyBC,EAAMC,gBAAkBD,EAAME,UCErDC,EAAgCC,IACzC,MAAMC,EAAcL,EAAMM,OAAOF,GAIjC,OAHAN,EAA0B,KACtBO,EAAYE,QAAUH,IAEnBJ,EAAMQ,QAAQ,IAAMH,EAAYE,QAAS,KCNvCE,EAAmB,CAI5BC,EACAC,EACAC,KAEA,MAAMC,EAAiBV,EAASQ,GAChCX,EAAME,UAAU,KACZ,MAAMY,EAAOF,EAAQL,QACrB,GAAKO,GAASA,EAAKC,iBAInB,OADAD,EAAKC,iBAAiBL,EAAWG,GAC1B,IAAMC,EAAKC,iBAAiBL,EAAWG,IAC/C,CAACD,EAASF,EAAWG,KChBfG,EAA2B,CACpCN,EACAC,KAEA,MAAME,EAAiBV,EAASQ,GAChCX,EAAME,UAAU,KACZ,GAAKe,UAAaA,SAASF,iBAI3B,OADAE,SAASF,iBAAiBL,EAAWG,GAC9B,IAAMI,SAASF,iBAAiBL,EAAWG,IACnD,CAACH,EAAWG,KCXNK,EAAyB,CAClCR,EACAC,KAEA,MAAME,EAAiBV,EAASQ,GAChCX,EAAME,UAAU,KACZ,GAAKH,QAAWA,OAAOgB,iBAIvB,OADAhB,OAAOgB,iBAAiBL,EAAWG,GAC5B,IAAMd,OAAOgB,iBAAiBL,EAAWG,IACjD,CAACH,EAAWG"}
|
@@ -0,0 +1,2 @@
|
|
1
|
+
import n from"react";var e="undefined"!=typeof window?n.useLayoutEffect:n.useEffect,t=function(t){var r=n.useRef(t);return e(function(){r.current=t}),n.useMemo(function(){return r.current},[])},r=function(e,r,u){var i=t(r);n.useEffect(function(){var n=u.current;if(n&&n.addEventListener)return n.addEventListener(e,i),function(){return n.addEventListener(e,i)}},[u,e,i])},u=function(e,r){var u=t(r);n.useEffect(function(){if(document&&document.addEventListener)return document.addEventListener(e,u),function(){return document.addEventListener(e,u)}},[e,u])},i=function(e,r){var u=t(r);n.useEffect(function(){if(window&&window.addEventListener)return window.addEventListener(e,u),function(){return window.addEventListener(e,u)}},[e,u])};export{u as useDocumentEventListener,t as useEvent,r as useEventListener,e as useIsomorphicLayoutEffect,i as useWindowEventListener};
|
2
|
+
//# sourceMappingURL=index.module.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.module.js","sources":["../src/useIsomorphicLayoutEffect.ts","../src/useEvent.ts","../src/useEventListener.ts","../src/useDocumentEventListener.ts","../src/useWindowEventListener.ts"],"sourcesContent":["import React from 'react';\n\nexport const useIsomorphicLayoutEffect =\n typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n","import React from 'react';\nimport { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect';\n\ntype Callback = (...args: any[]) => any;\n\nexport const useEvent = <C extends Callback>(callback: C): C => {\n const callbackRef = React.useRef(callback);\n useIsomorphicLayoutEffect(() => {\n callbackRef.current = callback;\n });\n return React.useMemo(() => callbackRef.current, []);\n};\n","import React from 'react';\nimport { useEvent } from './useEvent';\nimport { EventName, EventListener } from './types';\n\nexport const useEventListener = <\n K extends EventName<HTMLElementEventMap>,\n E extends HTMLElement\n>(\n eventName: K,\n listener: EventListener<HTMLElementEventMap, K>,\n element: React.RefObject<E>\n) => {\n const stableListener = useEvent(listener);\n React.useEffect(() => {\n const node = element.current;\n if (!node || !node.addEventListener) {\n return;\n }\n node.addEventListener(eventName, stableListener);\n return () => node.addEventListener(eventName, stableListener);\n }, [element, eventName, stableListener]);\n};\n","import React from 'react';\nimport { useEvent } from './useEvent';\nimport { EventName, EventListener } from './types';\n\nexport const useDocumentEventListener = <K extends EventName<DocumentEventMap>>(\n eventName: K,\n listener: EventListener<DocumentEventMap, K>\n) => {\n const stableListener = useEvent(listener);\n React.useEffect(() => {\n if (!document || !document.addEventListener) {\n return;\n }\n document.addEventListener(eventName, stableListener);\n return () => document.addEventListener(eventName, stableListener);\n }, [eventName, stableListener]);\n};\n","import React from 'react';\nimport { useEvent } from './useEvent';\nimport { EventName, EventListener } from './types';\n\nexport const useWindowEventListener = <K extends EventName<WindowEventMap>>(\n eventName: K,\n listener: EventListener<WindowEventMap, K>\n) => {\n const stableListener = useEvent(listener);\n React.useEffect(() => {\n if (!window || !window.addEventListener) {\n return;\n }\n window.addEventListener(eventName, stableListener);\n return () => window.addEventListener(eventName, stableListener);\n }, [eventName, stableListener]);\n};\n"],"names":["useIsomorphicLayoutEffect","window","React","useLayoutEffect","useEffect","useEvent","callback","callbackRef","useRef","current","useMemo","useEventListener","eventName","listener","element","stableListener","node","addEventListener","useDocumentEventListener","document","useWindowEventListener"],"mappings":"qBAEaA,IAAAA,EACS,oBAAXC,OAAyBC,EAAMC,gBAAkBD,EAAME,UCErDC,EAAW,SAAqBC,GACzC,IAAMC,EAAcL,EAAMM,OAAOF,GAIjC,OAHAN,EAA0B,WACtBO,EAAYE,QAAUH,IAEnBJ,EAAMQ,QAAQ,WAAA,OAAMH,EAAYE,SAAS,KCNvCE,EAAmB,SAI5BC,EACAC,EACAC,GAEA,IAAMC,EAAiBV,EAASQ,GAChCX,EAAME,UAAU,WACZ,IAAMY,EAAOF,EAAQL,QACrB,GAAKO,GAASA,EAAKC,iBAInB,OADAD,EAAKC,iBAAiBL,EAAWG,GACpBC,WAAAA,OAAAA,EAAKC,iBAAiBL,EAAWG,KAC/C,CAACD,EAASF,EAAWG,KChBfG,EAA2B,SACpCN,EACAC,GAEA,IAAME,EAAiBV,EAASQ,GAChCX,EAAME,UAAU,WACZ,GAAKe,UAAaA,SAASF,iBAI3B,OADAE,SAASF,iBAAiBL,EAAWG,GACxBI,WAAAA,OAAAA,SAASF,iBAAiBL,EAAWG,KACnD,CAACH,EAAWG,KCXNK,EAAyB,SAClCR,EACAC,GAEA,IAAME,EAAiBV,EAASQ,GAChCX,EAAME,UAAU,WACZ,GAAKH,QAAWA,OAAOgB,iBAIvB,OADAhB,OAAOgB,iBAAiBL,EAAWG,GACtBd,WAAAA,OAAAA,OAAOgB,iBAAiBL,EAAWG,KACjD,CAACH,EAAWG"}
|
@@ -0,0 +1,2 @@
|
|
1
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("react")):"function"==typeof define&&define.amd?define(["exports","react"],n):n((e||self).hooks={},e.react)}(this,function(e,n){function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=/*#__PURE__*/t(n),f="undefined"!=typeof window?u.default.useLayoutEffect:u.default.useEffect,r=function(e){var n=u.default.useRef(e);return f(function(){n.current=e}),u.default.useMemo(function(){return n.current},[])};e.useDocumentEventListener=function(e,n){var t=r(n);u.default.useEffect(function(){if(document&&document.addEventListener)return document.addEventListener(e,t),function(){return document.addEventListener(e,t)}},[e,t])},e.useEvent=r,e.useEventListener=function(e,n,t){var f=r(n);u.default.useEffect(function(){var n=t.current;if(n&&n.addEventListener)return n.addEventListener(e,f),function(){return n.addEventListener(e,f)}},[t,e,f])},e.useIsomorphicLayoutEffect=f,e.useWindowEventListener=function(e,n){var t=r(n);u.default.useEffect(function(){if(window&&window.addEventListener)return window.addEventListener(e,t),function(){return window.addEventListener(e,t)}},[e,t])}});
|
2
|
+
//# sourceMappingURL=index.umd.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.umd.js","sources":["../src/useIsomorphicLayoutEffect.ts","../src/useEvent.ts","../src/useDocumentEventListener.ts","../src/useEventListener.ts","../src/useWindowEventListener.ts"],"sourcesContent":["import React from 'react';\n\nexport const useIsomorphicLayoutEffect =\n typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n","import React from 'react';\nimport { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect';\n\ntype Callback = (...args: any[]) => any;\n\nexport const useEvent = <C extends Callback>(callback: C): C => {\n const callbackRef = React.useRef(callback);\n useIsomorphicLayoutEffect(() => {\n callbackRef.current = callback;\n });\n return React.useMemo(() => callbackRef.current, []);\n};\n","import React from 'react';\nimport { useEvent } from './useEvent';\nimport { EventName, EventListener } from './types';\n\nexport const useDocumentEventListener = <K extends EventName<DocumentEventMap>>(\n eventName: K,\n listener: EventListener<DocumentEventMap, K>\n) => {\n const stableListener = useEvent(listener);\n React.useEffect(() => {\n if (!document || !document.addEventListener) {\n return;\n }\n document.addEventListener(eventName, stableListener);\n return () => document.addEventListener(eventName, stableListener);\n }, [eventName, stableListener]);\n};\n","import React from 'react';\nimport { useEvent } from './useEvent';\nimport { EventName, EventListener } from './types';\n\nexport const useEventListener = <\n K extends EventName<HTMLElementEventMap>,\n E extends HTMLElement\n>(\n eventName: K,\n listener: EventListener<HTMLElementEventMap, K>,\n element: React.RefObject<E>\n) => {\n const stableListener = useEvent(listener);\n React.useEffect(() => {\n const node = element.current;\n if (!node || !node.addEventListener) {\n return;\n }\n node.addEventListener(eventName, stableListener);\n return () => node.addEventListener(eventName, stableListener);\n }, [element, eventName, stableListener]);\n};\n","import React from 'react';\nimport { useEvent } from './useEvent';\nimport { EventName, EventListener } from './types';\n\nexport const useWindowEventListener = <K extends EventName<WindowEventMap>>(\n eventName: K,\n listener: EventListener<WindowEventMap, K>\n) => {\n const stableListener = useEvent(listener);\n React.useEffect(() => {\n if (!window || !window.addEventListener) {\n return;\n }\n window.addEventListener(eventName, stableListener);\n return () => window.addEventListener(eventName, stableListener);\n }, [eventName, stableListener]);\n};\n"],"names":["useIsomorphicLayoutEffect","window","React","useLayoutEffect","useEffect","useEvent","callback","callbackRef","useRef","current","useMemo","eventName","listener","stableListener","document","addEventListener","element","node"],"mappings":"kWAEaA,EACS,oBAAXC,OAAyBC,EAAAA,QAAMC,gBAAkBD,EAAAA,QAAME,UCErDC,EAAW,SAAqBC,GACzC,IAAMC,EAAcL,EAAK,QAACM,OAAOF,GAIjC,OAHAN,EAA0B,WACtBO,EAAYE,QAAUH,IAEnBJ,UAAMQ,QAAQ,WAAA,OAAMH,EAAYE,SAAS,gCCNZ,SACpCE,EACAC,GAEA,IAAMC,EAAiBR,EAASO,GAChCV,EAAAA,QAAME,UAAU,WACZ,GAAKU,UAAaA,SAASC,iBAI3B,OADAD,SAASC,iBAAiBJ,EAAWE,GACxBC,WAAAA,OAAAA,SAASC,iBAAiBJ,EAAWE,KACnD,CAACF,EAAWE,qCCXa,SAI5BF,EACAC,EACAI,GAEA,IAAMH,EAAiBR,EAASO,GAChCV,UAAME,UAAU,WACZ,IAAMa,EAAOD,EAAQP,QACrB,GAAKQ,GAASA,EAAKF,iBAInB,OADAE,EAAKF,iBAAiBJ,EAAWE,GACpBI,WAAAA,OAAAA,EAAKF,iBAAiBJ,EAAWE,KAC/C,CAACG,EAASL,EAAWE,4DChBU,SAClCF,EACAC,GAEA,IAAMC,EAAiBR,EAASO,GAChCV,EAAAA,QAAME,UAAU,WACZ,GAAKH,QAAWA,OAAOc,iBAIvB,OADAd,OAAOc,iBAAiBJ,EAAWE,GACtBZ,WAAAA,OAAAA,OAAOc,iBAAiBJ,EAAWE,KACjD,CAACF,EAAWE"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"program":{"fileNames":["../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es5.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2015.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2016.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2017.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2018.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2019.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2020.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2021.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2022.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.esnext.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.dom.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.dom.iterable.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2015.core.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2015.collection.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2015.generator.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2015.promise.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2017.object.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2017.string.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2017.intl.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2018.intl.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2018.promise.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2019.array.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2019.object.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2019.string.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2020.promise.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2020.string.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2020.intl.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2021.promise.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2021.string.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2021.intl.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2022.array.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2022.error.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2022.object.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.es2022.string.d.ts","../.yarn/cache/typescript-patch-e50fdcf519-1cb434fbc6.zip/node_modules/typescript/lib/lib.esnext.intl.d.ts","../.yarn/cache/@types-react-npm-18.0.9-4dccadcd56-162364dad7.zip/node_modules/@types/react/global.d.ts","../.yarn/cache/csstype-npm-3.0.11-b49897178d-95e56abfe9.zip/node_modules/csstype/index.d.ts","../.yarn/cache/@types-prop-types-npm-15.7.5-2aa48aa177-5b43b8b154.zip/node_modules/@types/prop-types/index.d.ts","../.yarn/cache/@types-scheduler-npm-0.16.2-ba3a7d8c68-b6b4dcfeae.zip/node_modules/@types/scheduler/tracing.d.ts","../.yarn/cache/@types-react-npm-18.0.9-4dccadcd56-162364dad7.zip/node_modules/@types/react/index.d.ts","../src/useIsomorphicLayoutEffect.ts","../src/useEvent.ts","../src/types.ts","../src/useEventListener.ts","../src/useDocumentEventListener.ts","../src/useWindowEventListener.ts","../src/index.ts"],"fileInfos":[{"version":"3ac1b83264055b28c0165688fda6dfcc39001e9e7828f649299101c23ad0a0c3","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84","e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940","746d62152361558ea6d6115cf0da4dd10ede041d14882ede3568bce5dc4b4f1f","2f93dda35dafec68ec217c9ce67f0f4fbbbb030c055ac312641565ad60dd7e26","aea179452def8a6152f98f63b191b84e7cbd69b0e248c91e61fb2e52328abe8c",{"version":"72704b10d97777e15f1a581b73f88273037ef752d2e50b72287bd0a90af64fe6","affectsGlobalScope":true},{"version":"dbb73d4d99be496175cb432c74c2615f78c76f4272f1d83cba11ee0ed6dbddf0","affectsGlobalScope":true},{"version":"d8996609230d17e90484a2dd58f22668f9a05a3bfe00bfb1d6271171e54a31fb","affectsGlobalScope":true},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"c5c05907c02476e4bde6b7e76a79ffcd948aedd14b6a8f56e4674221b0417398","affectsGlobalScope":true},{"version":"0d5f52b3174bee6edb81260ebcd792692c32c81fd55499d69531496f3f2b25e7","affectsGlobalScope":true},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true},{"version":"62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"75ec0bdd727d887f1b79ed6619412ea72ba3c81d92d0787ccb64bab18d261f14","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"1b3fe904465430e030c93239a348f05e1be80640d91f2f004c3512c2c2c89f34","affectsGlobalScope":true},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"5075b36ab861c8c0c45377cb8c96270d7c65f0eeaf105d53fac6850da61f1027","affectsGlobalScope":true},{"version":"6c55633c733c8378db65ac3da7a767c3cf2cf3057f0565a9124a16a3a2019e87","affectsGlobalScope":true},{"version":"fb4416144c1bf0323ccbc9afb0ab289c07312214e8820ad17d709498c865a3fe","affectsGlobalScope":true},{"version":"5b0ca94ec819d68d33da516306c15297acec88efeb0ae9e2b39f71dbd9685ef7","affectsGlobalScope":true},{"version":"e8c9f4e445a489991ca1a4232667de3ac36b07ba75ea335971fbeacf2d26fe67","affectsGlobalScope":true},{"version":"34478567f8a80171f88f2f30808beb7da15eac0538ae91282dd33dce928d98ed","affectsGlobalScope":true},{"version":"6ea9ab679ea030cf46c16a711a316078e9e02619ebaf07a7fcd16964aba88f2d","affectsGlobalScope":true},{"version":"aedb8de1abb2ff1095c153854a6df7deae4a5709c37297f9d6e9948b6806fa66","affectsGlobalScope":true},{"version":"11ffe3c281f375fff9ffdde8bbec7669b4dd671905509079f866f2354a788064","affectsGlobalScope":true},{"version":"10bbdc1981b8d9310ee75bfac28ee0477bb2353e8529da8cff7cb26c409cb5e8","affectsGlobalScope":true},{"version":"bbdf156fea2fabed31a569445835aeedcc33643d404fcbaa54541f06c109df3f","affectsGlobalScope":true},"ea0aa24a32c073b8639aa1f3130ba0add0f0f2f76b314d9ba988a5cb91d7e3c4","6a386ff939f180ae8ef064699d8b7b6e62bc2731a62d7fbf5e02589383838dea","f5a8b384f182b3851cec3596ccc96cb7464f8d3469f48c74bf2befb782a19de5",{"version":"4c4229a7fe27b87aba0b8bab7f7338bc63e74b814156ba6925b552f9bec83154","affectsGlobalScope":true},"0dfebd7a9a889c693e40e4f6951b33aadc47d4645b53d2510bb326f444533db1","bf7e1213717faab14f8928719c2dfaeb89ba63c9ef1e7fa1c58ac4423aa9cfaa","1ec0fe7df21853aac79d4ae0479928c4922e9fadc8dd32526bffc020b865eb87","577cc19407cde5cc329b6c0771d16ed8c28aa1e9ef7c2e2b3574a49ecfe0c062","0679dab9c4565a6e3df0857d3b35cffcb2e5fe283dc165d80b599a065cf8baff","2d24cbc3ea7ce11ee415450f1e2fe9a98775dd5cbd03f5d660569e1f5e0f3fa0","db2aeb3d66f5b802acc7e87d681e472f47a137cba63c952e99d138c62b758de6"],"options":{"esModuleInterop":true,"module":99,"outDir":"./","skipLibCheck":true,"strict":true,"target":99},"fileIdsList":[[52,53,54,55],[57,58,60,61,62],[56,58,59],[56,57],[56]],"referencedMap":[[56,1],[63,2],[61,3],[58,4],[60,3],[57,5],[62,3]],"exportedModulesMap":[[56,1],[63,2],[61,3],[58,4],[60,3],[57,5],[62,3]],"semanticDiagnosticsPerFile":[54,52,56,55,53,11,12,14,13,2,15,16,17,18,19,20,21,22,3,4,26,23,24,25,27,28,29,5,30,31,32,33,6,34,35,36,37,7,42,38,39,40,41,8,46,43,44,45,47,9,48,49,50,1,10,51,63,59,61,58,60,57,62],"affectedFilesPendingEmit":[[54,1],[52,1],[56,1],[55,1],[53,1],[2,1],[3,1],[4,1],[5,1],[6,1],[7,1],[8,1],[9,1],[10,1],[63,1],[59,1],[61,1],[58,1],[60,1],[57,1],[62,1]]},"version":"4.6.4"}
|
package/dist/types.d.ts
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
module.exports = {
|
2
|
+
'**/*.ts': () => 'yarn tsc --noEmit',
|
3
|
+
'**/*.{ts,js}': filenames => [
|
4
|
+
`yarn eslint --fix ${filenames.join(' ')}`,
|
5
|
+
`yarn prettier --write ${filenames.join(' ')}`,
|
6
|
+
],
|
7
|
+
'**/*.{md,json}': filenames =>
|
8
|
+
`yarn prettier --write ${filenames.join(' ')}`,
|
9
|
+
};
|
package/package.json
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
{
|
2
|
+
"name": "@wiggindev/hooks",
|
3
|
+
"description": "Various hooks that I use in my projects",
|
4
|
+
"version": "0.1.0",
|
5
|
+
"author": {
|
6
|
+
"name": "Andrew Wiggin",
|
7
|
+
"email": "andrew@wiggin.dev",
|
8
|
+
"url": "https://wiggin.dev"
|
9
|
+
},
|
10
|
+
"type": "module",
|
11
|
+
"source": "src/index.ts",
|
12
|
+
"exports": {
|
13
|
+
"require": "./dist/index.cjs",
|
14
|
+
"default": "./dist/index.modern.js"
|
15
|
+
},
|
16
|
+
"main": "dist/index.cjs",
|
17
|
+
"module": "dist/index.module.js",
|
18
|
+
"unpkg": "dist/index.umd.js",
|
19
|
+
"types": "dist/types.d.ts",
|
20
|
+
"scripts": {
|
21
|
+
"prebuild": "rimraf dist",
|
22
|
+
"build": "microbundle",
|
23
|
+
"dev": "microbundle watch",
|
24
|
+
"_postinstall": "husky install",
|
25
|
+
"prepack": "pinst --disable",
|
26
|
+
"postpack": "pinst --enable",
|
27
|
+
"lint": "tsc --noEmit && yarn eslint",
|
28
|
+
"format": "yarn eslint --fix && yarn prettier --write ."
|
29
|
+
},
|
30
|
+
"peerDependencies": {
|
31
|
+
"react": ">= 18"
|
32
|
+
},
|
33
|
+
"devDependencies": {
|
34
|
+
"@types/react": "^18.0.9",
|
35
|
+
"@typescript-eslint/eslint-plugin": "^5.23.0",
|
36
|
+
"@typescript-eslint/parser": "^5.23.0",
|
37
|
+
"eslint": "^8.15.0",
|
38
|
+
"eslint-config-prettier": "^8.5.0",
|
39
|
+
"eslint-plugin-prettier": "^4.0.0",
|
40
|
+
"eslint-plugin-react": "^7.29.4",
|
41
|
+
"husky": "^8.0.1",
|
42
|
+
"lint-staged": "^12.4.1",
|
43
|
+
"microbundle": "^0.15.0",
|
44
|
+
"pinst": "^3.0.0",
|
45
|
+
"prettier": "^2.6.2",
|
46
|
+
"rimraf": "^3.0.2",
|
47
|
+
"typescript": "^4.6.4"
|
48
|
+
},
|
49
|
+
"packageManager": "yarn@3.2.1",
|
50
|
+
"publishConfig": {
|
51
|
+
"access": "public",
|
52
|
+
"registry": "https://registry.npmjs.org/"
|
53
|
+
}
|
54
|
+
}
|
package/src/index.ts
ADDED
package/src/types.ts
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { useEvent } from './useEvent';
|
3
|
+
import { EventName, EventListener } from './types';
|
4
|
+
|
5
|
+
export const useDocumentEventListener = <K extends EventName<DocumentEventMap>>(
|
6
|
+
eventName: K,
|
7
|
+
listener: EventListener<DocumentEventMap, K>
|
8
|
+
) => {
|
9
|
+
const stableListener = useEvent(listener);
|
10
|
+
React.useEffect(() => {
|
11
|
+
if (!document || !document.addEventListener) {
|
12
|
+
return;
|
13
|
+
}
|
14
|
+
document.addEventListener(eventName, stableListener);
|
15
|
+
return () => document.addEventListener(eventName, stableListener);
|
16
|
+
}, [eventName, stableListener]);
|
17
|
+
};
|
package/src/useEvent.ts
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect';
|
3
|
+
|
4
|
+
type Callback = (...args: any[]) => any;
|
5
|
+
|
6
|
+
export const useEvent = <C extends Callback>(callback: C): C => {
|
7
|
+
const callbackRef = React.useRef(callback);
|
8
|
+
useIsomorphicLayoutEffect(() => {
|
9
|
+
callbackRef.current = callback;
|
10
|
+
});
|
11
|
+
return React.useMemo(() => callbackRef.current, []);
|
12
|
+
};
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { useEvent } from './useEvent';
|
3
|
+
import { EventName, EventListener } from './types';
|
4
|
+
|
5
|
+
export const useEventListener = <
|
6
|
+
K extends EventName<HTMLElementEventMap>,
|
7
|
+
E extends HTMLElement
|
8
|
+
>(
|
9
|
+
eventName: K,
|
10
|
+
listener: EventListener<HTMLElementEventMap, K>,
|
11
|
+
element: React.RefObject<E>
|
12
|
+
) => {
|
13
|
+
const stableListener = useEvent(listener);
|
14
|
+
React.useEffect(() => {
|
15
|
+
const node = element.current;
|
16
|
+
if (!node || !node.addEventListener) {
|
17
|
+
return;
|
18
|
+
}
|
19
|
+
node.addEventListener(eventName, stableListener);
|
20
|
+
return () => node.addEventListener(eventName, stableListener);
|
21
|
+
}, [element, eventName, stableListener]);
|
22
|
+
};
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { useEvent } from './useEvent';
|
3
|
+
import { EventName, EventListener } from './types';
|
4
|
+
|
5
|
+
export const useWindowEventListener = <K extends EventName<WindowEventMap>>(
|
6
|
+
eventName: K,
|
7
|
+
listener: EventListener<WindowEventMap, K>
|
8
|
+
) => {
|
9
|
+
const stableListener = useEvent(listener);
|
10
|
+
React.useEffect(() => {
|
11
|
+
if (!window || !window.addEventListener) {
|
12
|
+
return;
|
13
|
+
}
|
14
|
+
window.addEventListener(eventName, stableListener);
|
15
|
+
return () => window.addEventListener(eventName, stableListener);
|
16
|
+
}, [eventName, stableListener]);
|
17
|
+
};
|
package/tsconfig.json
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
{
|
2
|
+
"compilerOptions": {
|
3
|
+
"baseUrl": "src",
|
4
|
+
"outDir": "dist",
|
5
|
+
"module": "esnext",
|
6
|
+
"target": "esnext",
|
7
|
+
"lib": ["dom", "dom.iterable", "esnext"],
|
8
|
+
"allowJs": true,
|
9
|
+
"skipLibCheck": true,
|
10
|
+
"strict": true,
|
11
|
+
"forceConsistentCasingInFileNames": true,
|
12
|
+
"noEmit": true,
|
13
|
+
"esModuleInterop": true,
|
14
|
+
"moduleResolution": "node",
|
15
|
+
"resolveJsonModule": true,
|
16
|
+
"isolatedModules": true,
|
17
|
+
"incremental": true
|
18
|
+
},
|
19
|
+
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
|
20
|
+
"exclude": [
|
21
|
+
"node_modules",
|
22
|
+
".fleet",
|
23
|
+
".yarn",
|
24
|
+
".idea",
|
25
|
+
".next",
|
26
|
+
".vercel",
|
27
|
+
"dist"
|
28
|
+
]
|
29
|
+
}
|