@useinovex/react-hooks 1.0.0

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.
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ import * as react_jsx_runtime from 'react/jsx-runtime';
3
+
4
+ declare const useIsomorphicLayoutEffect: typeof React.useEffect;
5
+
6
+ declare function useComposedRefs<TRefValue>(...Refs: React.Ref<TRefValue>[]): React.RefCallback<TRefValue>;
7
+
8
+ declare function useMediaQuery(Query: string): boolean;
9
+
10
+ type ContextProviderProps<TContextValue> = React.PropsWithChildren<{
11
+ scopeName?: string;
12
+ value?: TContextValue;
13
+ }>;
14
+ declare function createContext<TContextValue extends object>(ContextName: string, DefaultContext?: TContextValue): {
15
+ useOptionalContext: () => TContextValue | undefined;
16
+ useContext: () => TContextValue;
17
+ Provider: {
18
+ ({ value, children, scopeName }: ContextProviderProps<TContextValue>): react_jsx_runtime.JSX.Element;
19
+ displayName: string;
20
+ };
21
+ };
22
+
23
+ declare function useId(): string;
24
+
25
+ export { createContext, useComposedRefs, useId, useIsomorphicLayoutEffect, useMediaQuery };
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ import * as react_jsx_runtime from 'react/jsx-runtime';
3
+
4
+ declare const useIsomorphicLayoutEffect: typeof React.useEffect;
5
+
6
+ declare function useComposedRefs<TRefValue>(...Refs: React.Ref<TRefValue>[]): React.RefCallback<TRefValue>;
7
+
8
+ declare function useMediaQuery(Query: string): boolean;
9
+
10
+ type ContextProviderProps<TContextValue> = React.PropsWithChildren<{
11
+ scopeName?: string;
12
+ value?: TContextValue;
13
+ }>;
14
+ declare function createContext<TContextValue extends object>(ContextName: string, DefaultContext?: TContextValue): {
15
+ useOptionalContext: () => TContextValue | undefined;
16
+ useContext: () => TContextValue;
17
+ Provider: {
18
+ ({ value, children, scopeName }: ContextProviderProps<TContextValue>): react_jsx_runtime.JSX.Element;
19
+ displayName: string;
20
+ };
21
+ };
22
+
23
+ declare function useId(): string;
24
+
25
+ export { createContext, useComposedRefs, useId, useIsomorphicLayoutEffect, useMediaQuery };
package/dist/index.js ADDED
@@ -0,0 +1,104 @@
1
+ 'use strict';
2
+
3
+ var React4 = require('react');
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+
6
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
7
+
8
+ var React4__default = /*#__PURE__*/_interopDefault(React4);
9
+
10
+ // src/isomorphic-layout-effect/use-isomorphic-layout-effect.ts
11
+ var useIsomorphicLayoutEffect = typeof window === "undefined" ? React4__default.default.useEffect : React4__default.default.useLayoutEffect;
12
+
13
+ // src/composed-refs/utils.ts
14
+ function composeRefs(...Refs) {
15
+ return function(Node) {
16
+ const CleanupRefs = Refs.map(function(Ref) {
17
+ if (!Ref) {
18
+ return;
19
+ }
20
+ return setRef(Ref, Node);
21
+ }).filter(Boolean);
22
+ return function cleanup() {
23
+ CleanupRefs.forEach(function(cleanup2, Index) {
24
+ if (typeof cleanup2 === "function") {
25
+ return cleanup2();
26
+ }
27
+ setRef(Refs[Index], null);
28
+ });
29
+ };
30
+ };
31
+ }
32
+ function setRef(Ref, Value) {
33
+ if (typeof Ref === "function") {
34
+ return Ref(Value);
35
+ }
36
+ if (Ref === null || Ref == void 0) {
37
+ return;
38
+ }
39
+ Ref.current = Value;
40
+ }
41
+ function useComposedRefs(...Refs) {
42
+ return React4__default.default.useCallback(composeRefs(...Refs), Refs);
43
+ }
44
+ function useMediaQuery(Query) {
45
+ const [Matches, setMatches] = React4__default.default.useState(false);
46
+ useIsomorphicLayoutEffect(function() {
47
+ if (typeof window === "undefined") {
48
+ return;
49
+ }
50
+ const MediaQueryList = window.matchMedia(Query);
51
+ function handleChange(Event) {
52
+ setMatches(Event.matches);
53
+ }
54
+ setMatches(MediaQueryList.matches);
55
+ MediaQueryList.addEventListener("change", handleChange);
56
+ return function cleanup() {
57
+ MediaQueryList.removeEventListener("change", handleChange);
58
+ };
59
+ }, [Query]);
60
+ return Matches;
61
+ }
62
+ function createContext(ContextName, DefaultContext) {
63
+ const Context = React4__default.default.createContext(DefaultContext);
64
+ function useOptionalContext() {
65
+ return React4__default.default.useContext(Context);
66
+ }
67
+ function useContext() {
68
+ const Value = useOptionalContext();
69
+ if (!Value) {
70
+ throw new Error(`${ContextName}.useContext() must be used within a <${ContextName}.Provider/>`);
71
+ }
72
+ return Value;
73
+ }
74
+ const Provider = function({ value, children, scopeName }) {
75
+ const Value = React4__default.default.useMemo(function() {
76
+ if (value === void 0) {
77
+ if (DefaultContext === void 0) {
78
+ throw new Error(`<${ContextName}.Provider/> can't be initialized without a "value" property, when the ${ContextName}Context does not have a DefaultContext.`);
79
+ }
80
+ return DefaultContext;
81
+ }
82
+ return value;
83
+ }, [value, DefaultContext]);
84
+ return /* @__PURE__ */ jsxRuntime.jsx(Context.Provider, { value: Value, children });
85
+ };
86
+ Provider.displayName = `${ContextName}.Provider`;
87
+ return {
88
+ useOptionalContext,
89
+ useContext,
90
+ Provider
91
+ };
92
+ }
93
+ function useId() {
94
+ const Id = React4__default.default.useId();
95
+ return `lumina-${Id}`;
96
+ }
97
+
98
+ exports.createContext = createContext;
99
+ exports.useComposedRefs = useComposedRefs;
100
+ exports.useId = useId;
101
+ exports.useIsomorphicLayoutEffect = useIsomorphicLayoutEffect;
102
+ exports.useMediaQuery = useMediaQuery;
103
+ //# sourceMappingURL=index.js.map
104
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/isomorphic-layout-effect/use-isomorphic-layout-effect.ts","../src/composed-refs/utils.ts","../src/composed-refs/use-composed-refs.ts","../src/media-query/use-media-query.ts","../src/context/create-context.tsx","../src/id/use-id.ts"],"names":["React","cleanup"],"mappings":"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","file":"index.js","sourcesContent":["import React from \"react\";\r\n\r\nexport const useIsomorphicLayoutEffect = typeof window === \"undefined\" ? React.useEffect : React.useLayoutEffect;","import React from \"react\";\r\n\r\nexport function composeRefs<TRefValue>(...Refs: React.Ref<TRefValue>[]): React.RefCallback<TRefValue> {\r\n return function (Node) {\r\n const CleanupRefs = Refs.map(function (Ref) {\r\n if (!Ref) {\r\n return;\r\n };\r\n\r\n return setRef(Ref, Node);\r\n }).filter(Boolean);\r\n\r\n return function cleanup() {\r\n CleanupRefs.forEach(function (cleanup, Index) {\r\n if (typeof cleanup === \"function\") {\r\n return cleanup();\r\n };\r\n\r\n setRef(Refs[Index], null);\r\n });\r\n };\r\n };\r\n};\r\n\r\ntype SetRefReturn = void | (() => void);\r\n\r\nexport function setRef<TRefValue>(Ref: React.Ref<TRefValue>, Value: TRefValue): SetRefReturn {\r\n if (typeof Ref === \"function\") {\r\n return Ref(Value);\r\n };\r\n\r\n if (Ref === null || Ref == undefined) {\r\n return;\r\n };\r\n\r\n Ref.current = Value;\r\n};","import { composeRefs } from \"./utils\";\r\n\r\nimport React from \"react\";\r\n\r\nexport function useComposedRefs<TRefValue>(...Refs: React.Ref<TRefValue>[]): React.RefCallback<TRefValue> {\r\n return React.useCallback(composeRefs(...Refs), Refs);\r\n};","import { useIsomorphicLayoutEffect } from \"../isomorphic-layout-effect\";\r\n\r\nimport React from \"react\";\r\n\r\nexport function useMediaQuery(Query: string): boolean {\r\n const [Matches, setMatches] = React.useState<boolean>(false);\r\n\r\n useIsomorphicLayoutEffect(function () {\r\n if (typeof window === \"undefined\") {\r\n return;\r\n };\r\n\r\n const MediaQueryList = window.matchMedia(Query);\r\n\r\n function handleChange(Event: MediaQueryListEvent) {\r\n setMatches(Event.matches);\r\n };\r\n\r\n setMatches(MediaQueryList.matches);\r\n\r\n MediaQueryList.addEventListener(\"change\", handleChange);\r\n\r\n return function cleanup() {\r\n MediaQueryList.removeEventListener(\"change\", handleChange);\r\n };\r\n }, [Query]);\r\n\r\n return Matches;\r\n};","\r\nimport React from \"react\";\r\n\r\n\r\ntype ContextProviderProps<TContextValue> = React.PropsWithChildren<{\r\n scopeName?: string,\r\n value?: TContextValue\r\n}>;\r\n\r\ntype ContextEqualityFn<T> = (ValueA: T, ValueB: T) => boolean;\r\ntype ContextSelectorFn<TContextValue, TSelected> = (Context: TContextValue) => TSelected;\r\n\r\nexport function createContext<TContextValue extends object>(ContextName: string, DefaultContext?: TContextValue) {\r\n const Context = React.createContext<TContextValue | undefined>(DefaultContext);\r\n\r\n /*function useOptionalContextSelector<TSelected>(selectorFn: ContextSelectorFn<TContextValue, TSelected>, equalityFn: ContextEqualityFn<TSelected> = Object.is): TSelected | undefined {\r\n const Value = useOptionalContext();\r\n\r\n if (!Value) {\r\n return;\r\n };\r\n\r\n const select = React.useCallback(selectorFn, [selectorFn]);\r\n \r\n };*/\r\n\r\n function useOptionalContext(): TContextValue | undefined {\r\n return React.useContext(Context);\r\n };\r\n\r\n /*function useContextSelector<TSelected>(selectorFn: ContextSelectorFn<TContextValue, TSelected>, equalityFn: ContextEqualityFn<TSelected> = Object.is): TSelected {\r\n const Ctx = useContext();\r\n\r\n const select = React.useCallback(selectorFn, [selectorFn]);\r\n\r\n\r\n /*\r\nconst store = React.useContext(StoreContext);\r\n\r\n if (!store) {\r\n if (strict) {\r\n throw new Error(\r\n `${contextName}.useContextSelector() must be used within a <${contextName}.Provider />`\r\n );\r\n }\r\n return selector(defaultValue as TContextValue);\r\n }\r\n\r\n const select = React.useCallback(selector, [selector]);\r\n\r\n const [selected, setSelected] = React.useState(() => select(store.getSnapshot()));\r\n\r\n useIsomorphicLayoutEffect(() => {\r\n const update = () => {\r\n const next = select(store.getSnapshot());\r\n setSelected((prev) => (equalityFn(prev, next) ? prev : next));\r\n };\r\n\r\n update();\r\n return store.subscribe(update);\r\n }, [store, select, equalityFn]);\r\n\r\n return selected;\r\n *\r\n };*/\r\n\r\n function useContext(): TContextValue {\r\n const Value = useOptionalContext();\r\n\r\n if (!Value) {\r\n throw new Error(`${ContextName}.useContext() must be used within a <${ContextName}.Provider/>`)\r\n };\r\n\r\n return Value;\r\n };\r\n\r\n const Provider = function ({ value, children, scopeName }: ContextProviderProps<TContextValue>) {\r\n const Value = React.useMemo<TContextValue>(function () {\r\n if (value === undefined) {\r\n if (DefaultContext === undefined) {\r\n throw new Error(`<${ContextName}.Provider/> can't be initialized without a \"value\" property, when the ${ContextName}Context does not have a DefaultContext.`);\r\n };\r\n\r\n return DefaultContext;\r\n };\r\n\r\n return value;\r\n }, [value, DefaultContext]);\r\n\r\n return (\r\n <Context.Provider value={Value}>\r\n {children}\r\n </Context.Provider>\r\n );\r\n };\r\n\r\n Provider.displayName = `${ContextName}.Provider`;\r\n\r\n return {\r\n useOptionalContext,\r\n useContext,\r\n\r\n Provider\r\n };\r\n};","import React from \"react\";\r\n\r\nexport function useId() {\r\n const Id = React.useId();\r\n\r\n return `lumina-${Id}`;\r\n};"]}
package/dist/index.mjs ADDED
@@ -0,0 +1,94 @@
1
+ import React4 from 'react';
2
+ import { jsx } from 'react/jsx-runtime';
3
+
4
+ // src/isomorphic-layout-effect/use-isomorphic-layout-effect.ts
5
+ var useIsomorphicLayoutEffect = typeof window === "undefined" ? React4.useEffect : React4.useLayoutEffect;
6
+
7
+ // src/composed-refs/utils.ts
8
+ function composeRefs(...Refs) {
9
+ return function(Node) {
10
+ const CleanupRefs = Refs.map(function(Ref) {
11
+ if (!Ref) {
12
+ return;
13
+ }
14
+ return setRef(Ref, Node);
15
+ }).filter(Boolean);
16
+ return function cleanup() {
17
+ CleanupRefs.forEach(function(cleanup2, Index) {
18
+ if (typeof cleanup2 === "function") {
19
+ return cleanup2();
20
+ }
21
+ setRef(Refs[Index], null);
22
+ });
23
+ };
24
+ };
25
+ }
26
+ function setRef(Ref, Value) {
27
+ if (typeof Ref === "function") {
28
+ return Ref(Value);
29
+ }
30
+ if (Ref === null || Ref == void 0) {
31
+ return;
32
+ }
33
+ Ref.current = Value;
34
+ }
35
+ function useComposedRefs(...Refs) {
36
+ return React4.useCallback(composeRefs(...Refs), Refs);
37
+ }
38
+ function useMediaQuery(Query) {
39
+ const [Matches, setMatches] = React4.useState(false);
40
+ useIsomorphicLayoutEffect(function() {
41
+ if (typeof window === "undefined") {
42
+ return;
43
+ }
44
+ const MediaQueryList = window.matchMedia(Query);
45
+ function handleChange(Event) {
46
+ setMatches(Event.matches);
47
+ }
48
+ setMatches(MediaQueryList.matches);
49
+ MediaQueryList.addEventListener("change", handleChange);
50
+ return function cleanup() {
51
+ MediaQueryList.removeEventListener("change", handleChange);
52
+ };
53
+ }, [Query]);
54
+ return Matches;
55
+ }
56
+ function createContext(ContextName, DefaultContext) {
57
+ const Context = React4.createContext(DefaultContext);
58
+ function useOptionalContext() {
59
+ return React4.useContext(Context);
60
+ }
61
+ function useContext() {
62
+ const Value = useOptionalContext();
63
+ if (!Value) {
64
+ throw new Error(`${ContextName}.useContext() must be used within a <${ContextName}.Provider/>`);
65
+ }
66
+ return Value;
67
+ }
68
+ const Provider = function({ value, children, scopeName }) {
69
+ const Value = React4.useMemo(function() {
70
+ if (value === void 0) {
71
+ if (DefaultContext === void 0) {
72
+ throw new Error(`<${ContextName}.Provider/> can't be initialized without a "value" property, when the ${ContextName}Context does not have a DefaultContext.`);
73
+ }
74
+ return DefaultContext;
75
+ }
76
+ return value;
77
+ }, [value, DefaultContext]);
78
+ return /* @__PURE__ */ jsx(Context.Provider, { value: Value, children });
79
+ };
80
+ Provider.displayName = `${ContextName}.Provider`;
81
+ return {
82
+ useOptionalContext,
83
+ useContext,
84
+ Provider
85
+ };
86
+ }
87
+ function useId() {
88
+ const Id = React4.useId();
89
+ return `lumina-${Id}`;
90
+ }
91
+
92
+ export { createContext, useComposedRefs, useId, useIsomorphicLayoutEffect, useMediaQuery };
93
+ //# sourceMappingURL=index.mjs.map
94
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/isomorphic-layout-effect/use-isomorphic-layout-effect.ts","../src/composed-refs/utils.ts","../src/composed-refs/use-composed-refs.ts","../src/media-query/use-media-query.ts","../src/context/create-context.tsx","../src/id/use-id.ts"],"names":["React","cleanup"],"mappings":"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","file":"index.mjs","sourcesContent":["import React from \"react\";\r\n\r\nexport const useIsomorphicLayoutEffect = typeof window === \"undefined\" ? React.useEffect : React.useLayoutEffect;","import React from \"react\";\r\n\r\nexport function composeRefs<TRefValue>(...Refs: React.Ref<TRefValue>[]): React.RefCallback<TRefValue> {\r\n return function (Node) {\r\n const CleanupRefs = Refs.map(function (Ref) {\r\n if (!Ref) {\r\n return;\r\n };\r\n\r\n return setRef(Ref, Node);\r\n }).filter(Boolean);\r\n\r\n return function cleanup() {\r\n CleanupRefs.forEach(function (cleanup, Index) {\r\n if (typeof cleanup === \"function\") {\r\n return cleanup();\r\n };\r\n\r\n setRef(Refs[Index], null);\r\n });\r\n };\r\n };\r\n};\r\n\r\ntype SetRefReturn = void | (() => void);\r\n\r\nexport function setRef<TRefValue>(Ref: React.Ref<TRefValue>, Value: TRefValue): SetRefReturn {\r\n if (typeof Ref === \"function\") {\r\n return Ref(Value);\r\n };\r\n\r\n if (Ref === null || Ref == undefined) {\r\n return;\r\n };\r\n\r\n Ref.current = Value;\r\n};","import { composeRefs } from \"./utils\";\r\n\r\nimport React from \"react\";\r\n\r\nexport function useComposedRefs<TRefValue>(...Refs: React.Ref<TRefValue>[]): React.RefCallback<TRefValue> {\r\n return React.useCallback(composeRefs(...Refs), Refs);\r\n};","import { useIsomorphicLayoutEffect } from \"../isomorphic-layout-effect\";\r\n\r\nimport React from \"react\";\r\n\r\nexport function useMediaQuery(Query: string): boolean {\r\n const [Matches, setMatches] = React.useState<boolean>(false);\r\n\r\n useIsomorphicLayoutEffect(function () {\r\n if (typeof window === \"undefined\") {\r\n return;\r\n };\r\n\r\n const MediaQueryList = window.matchMedia(Query);\r\n\r\n function handleChange(Event: MediaQueryListEvent) {\r\n setMatches(Event.matches);\r\n };\r\n\r\n setMatches(MediaQueryList.matches);\r\n\r\n MediaQueryList.addEventListener(\"change\", handleChange);\r\n\r\n return function cleanup() {\r\n MediaQueryList.removeEventListener(\"change\", handleChange);\r\n };\r\n }, [Query]);\r\n\r\n return Matches;\r\n};","\r\nimport React from \"react\";\r\n\r\n\r\ntype ContextProviderProps<TContextValue> = React.PropsWithChildren<{\r\n scopeName?: string,\r\n value?: TContextValue\r\n}>;\r\n\r\ntype ContextEqualityFn<T> = (ValueA: T, ValueB: T) => boolean;\r\ntype ContextSelectorFn<TContextValue, TSelected> = (Context: TContextValue) => TSelected;\r\n\r\nexport function createContext<TContextValue extends object>(ContextName: string, DefaultContext?: TContextValue) {\r\n const Context = React.createContext<TContextValue | undefined>(DefaultContext);\r\n\r\n /*function useOptionalContextSelector<TSelected>(selectorFn: ContextSelectorFn<TContextValue, TSelected>, equalityFn: ContextEqualityFn<TSelected> = Object.is): TSelected | undefined {\r\n const Value = useOptionalContext();\r\n\r\n if (!Value) {\r\n return;\r\n };\r\n\r\n const select = React.useCallback(selectorFn, [selectorFn]);\r\n \r\n };*/\r\n\r\n function useOptionalContext(): TContextValue | undefined {\r\n return React.useContext(Context);\r\n };\r\n\r\n /*function useContextSelector<TSelected>(selectorFn: ContextSelectorFn<TContextValue, TSelected>, equalityFn: ContextEqualityFn<TSelected> = Object.is): TSelected {\r\n const Ctx = useContext();\r\n\r\n const select = React.useCallback(selectorFn, [selectorFn]);\r\n\r\n\r\n /*\r\nconst store = React.useContext(StoreContext);\r\n\r\n if (!store) {\r\n if (strict) {\r\n throw new Error(\r\n `${contextName}.useContextSelector() must be used within a <${contextName}.Provider />`\r\n );\r\n }\r\n return selector(defaultValue as TContextValue);\r\n }\r\n\r\n const select = React.useCallback(selector, [selector]);\r\n\r\n const [selected, setSelected] = React.useState(() => select(store.getSnapshot()));\r\n\r\n useIsomorphicLayoutEffect(() => {\r\n const update = () => {\r\n const next = select(store.getSnapshot());\r\n setSelected((prev) => (equalityFn(prev, next) ? prev : next));\r\n };\r\n\r\n update();\r\n return store.subscribe(update);\r\n }, [store, select, equalityFn]);\r\n\r\n return selected;\r\n *\r\n };*/\r\n\r\n function useContext(): TContextValue {\r\n const Value = useOptionalContext();\r\n\r\n if (!Value) {\r\n throw new Error(`${ContextName}.useContext() must be used within a <${ContextName}.Provider/>`)\r\n };\r\n\r\n return Value;\r\n };\r\n\r\n const Provider = function ({ value, children, scopeName }: ContextProviderProps<TContextValue>) {\r\n const Value = React.useMemo<TContextValue>(function () {\r\n if (value === undefined) {\r\n if (DefaultContext === undefined) {\r\n throw new Error(`<${ContextName}.Provider/> can't be initialized without a \"value\" property, when the ${ContextName}Context does not have a DefaultContext.`);\r\n };\r\n\r\n return DefaultContext;\r\n };\r\n\r\n return value;\r\n }, [value, DefaultContext]);\r\n\r\n return (\r\n <Context.Provider value={Value}>\r\n {children}\r\n </Context.Provider>\r\n );\r\n };\r\n\r\n Provider.displayName = `${ContextName}.Provider`;\r\n\r\n return {\r\n useOptionalContext,\r\n useContext,\r\n\r\n Provider\r\n };\r\n};","import React from \"react\";\r\n\r\nexport function useId() {\r\n const Id = React.useId();\r\n\r\n return `lumina-${Id}`;\r\n};"]}
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@useinovex/react-hooks",
3
+ "version": "1.0.0",
4
+ "description": "React utility hooks",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.mjs",
7
+ "types": "./dist/index.d.ts",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "scripts": {
12
+ "type-check": "tsc --noEmit",
13
+ "build": "tsup",
14
+ "lint": "eslint src --ext .ts,.tsx",
15
+ "dev": "tsup --watch"
16
+ },
17
+ "devDependencies": {
18
+ "@types/react": "^19.2.2",
19
+ "@types/react-dom": "19.2.2",
20
+ "react": "^19.2.0",
21
+ "react-dom": "^19.2.0",
22
+ "tsup": "^8.5.1"
23
+ },
24
+ "peerDependencies": {
25
+ "react": "^19.2.0",
26
+ "react-dom": "^19.2.0"
27
+ }
28
+ }