@hrnec06/react_utils 1.1.0 → 1.2.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.
- package/package.json +3 -11
- package/src/debugger/DebugParser.tsx +401 -0
- package/src/debugger/Debugger.tsx +297 -0
- package/src/debugger/DebuggerContext.ts +41 -0
- package/src/debugger/DebuggerLogic.ts +30 -0
- package/src/debugger/DebuggerScrollBar.tsx +108 -0
- package/src/debugger/DebuggerSymbols.tsx +63 -0
- package/src/debugger/DebuggerWindowResize.tsx +136 -0
- package/src/hooks/useKeyListener.ts +47 -0
- package/src/hooks/useListener.ts +11 -0
- package/src/hooks/useSignal.ts +31 -0
- package/src/hooks/useUpdateEffect.ts +14 -0
- package/src/hooks/useUpdatedRef.ts +12 -0
- package/src/hooks/useWindowSize.ts +22 -0
- package/src/index.tsx +17 -0
- package/dist/index.d.mts +0 -40
- package/dist/index.d.ts +0 -40
- package/dist/index.js +0 -934
- package/dist/index.mjs +0 -891
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { useEffect, useState } from "react";
|
|
2
|
+
|
|
3
|
+
interface KeyListenerOptions {
|
|
4
|
+
ctrl?: boolean,
|
|
5
|
+
shift?: boolean,
|
|
6
|
+
alt?: boolean
|
|
7
|
+
}
|
|
8
|
+
export default function useKeyListener(key: string, options?: KeyListenerOptions) {
|
|
9
|
+
const [pressing, setPressing] = useState(false);
|
|
10
|
+
|
|
11
|
+
const keyMatching = (e: KeyboardEvent, strict: boolean): boolean => {
|
|
12
|
+
if (strict && options?.ctrl && !e.ctrlKey)
|
|
13
|
+
return false;
|
|
14
|
+
|
|
15
|
+
if (strict && options?.shift && !e.shiftKey)
|
|
16
|
+
return false;
|
|
17
|
+
|
|
18
|
+
if (strict && options?.alt && !e.altKey)
|
|
19
|
+
return false;
|
|
20
|
+
|
|
21
|
+
return e.code == key;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
const downListener = (e: KeyboardEvent) => {
|
|
26
|
+
if (!keyMatching(e, true)) return;
|
|
27
|
+
|
|
28
|
+
setPressing(true);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const upListener = (e: KeyboardEvent) => {
|
|
32
|
+
if (!keyMatching(e, false)) return;
|
|
33
|
+
|
|
34
|
+
setPressing(false);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
window.addEventListener('keydown', downListener);
|
|
38
|
+
window.addEventListener('keyup', upListener);
|
|
39
|
+
|
|
40
|
+
return () => {
|
|
41
|
+
window.removeEventListener('keydown', downListener);
|
|
42
|
+
window.removeEventListener('keyup', upListener);
|
|
43
|
+
}
|
|
44
|
+
}, []);
|
|
45
|
+
|
|
46
|
+
return pressing;
|
|
47
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { DependencyList, useEffect } from "react"
|
|
2
|
+
|
|
3
|
+
export default function useListener<E extends keyof GlobalEventHandlersEventMap>(element: Node, event: E, listener: (event: GlobalEventHandlersEventMap[E]) => void, deps?: DependencyList) {
|
|
4
|
+
useEffect(() => {
|
|
5
|
+
element.addEventListener(event, listener as EventListenerOrEventListenerObject);
|
|
6
|
+
|
|
7
|
+
return () => {
|
|
8
|
+
element.removeEventListener(event, listener as EventListenerOrEventListenerObject);
|
|
9
|
+
}
|
|
10
|
+
}, deps);
|
|
11
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ReactUtils } from "@hrnec06/util";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
|
|
4
|
+
export default function useSignal<T>(value: T): Signal<T>
|
|
5
|
+
{
|
|
6
|
+
const [_value, _setValue] = useState(value);
|
|
7
|
+
|
|
8
|
+
const signal = new Signal(_value, _setValue);
|
|
9
|
+
|
|
10
|
+
return signal;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export class Signal<T>
|
|
14
|
+
{
|
|
15
|
+
constructor(
|
|
16
|
+
private _value: T,
|
|
17
|
+
private setState: ReactUtils.SetState<T>
|
|
18
|
+
)
|
|
19
|
+
{
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
public set value(value: T)
|
|
23
|
+
{
|
|
24
|
+
this.setState(value);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
public get value(): T
|
|
28
|
+
{
|
|
29
|
+
return this._value;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { useEffect, useRef, useState } from "react";
|
|
2
|
+
|
|
3
|
+
export default function useUpdateEffect(callback: React.EffectCallback, value: unknown[]) {
|
|
4
|
+
const isFirstRun = useRef(true);
|
|
5
|
+
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
if (isFirstRun.current) {
|
|
8
|
+
isFirstRun.current = false;
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
return callback();
|
|
13
|
+
}, value);
|
|
14
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { useRef } from "react";
|
|
2
|
+
import useUpdateEffect from "./useUpdateEffect";
|
|
3
|
+
|
|
4
|
+
export default function useUpdatedRef<V>(value: V): React.RefObject<V> {
|
|
5
|
+
const ref = useRef(value);
|
|
6
|
+
|
|
7
|
+
useUpdateEffect(() => {
|
|
8
|
+
ref.current = value;
|
|
9
|
+
}, [value]);
|
|
10
|
+
|
|
11
|
+
return ref;
|
|
12
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Vector2 } from "@hrnec06/util";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
|
+
|
|
4
|
+
export default function useWindowSize(): Vector2 {
|
|
5
|
+
const [dimensions, setDimensions] = useState<Vector2>([1920, 1080]);
|
|
6
|
+
|
|
7
|
+
useEffect(() => {
|
|
8
|
+
setDimensions([window.innerWidth, window.innerHeight]);
|
|
9
|
+
|
|
10
|
+
const listener = () => {
|
|
11
|
+
setDimensions([window.innerWidth, window.innerHeight]);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
window.addEventListener('resize', listener);
|
|
15
|
+
|
|
16
|
+
return () => {
|
|
17
|
+
window.removeEventListener('resize', listener);
|
|
18
|
+
}
|
|
19
|
+
}, []);
|
|
20
|
+
|
|
21
|
+
return dimensions;
|
|
22
|
+
}
|
package/src/index.tsx
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import useKeyListener from "./hooks/useKeyListener";
|
|
2
|
+
import useListener from "./hooks/useListener";
|
|
3
|
+
import useUpdatedRef from "./hooks/useUpdatedRef";
|
|
4
|
+
import useUpdateEffect from "./hooks/useUpdateEffect";
|
|
5
|
+
import useWindowSize from "./hooks/useWindowSize";
|
|
6
|
+
import useSignal from "./hooks/useSignal";
|
|
7
|
+
import Debugger from './debugger/Debugger';
|
|
8
|
+
|
|
9
|
+
export {
|
|
10
|
+
useKeyListener,
|
|
11
|
+
useListener,
|
|
12
|
+
useUpdatedRef,
|
|
13
|
+
useUpdateEffect,
|
|
14
|
+
useWindowSize,
|
|
15
|
+
useSignal,
|
|
16
|
+
Debugger
|
|
17
|
+
};
|
package/dist/index.d.mts
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { DependencyList } from 'react';
|
|
2
|
-
import { Vector2, ReactUtils } from '@hrnec06/util';
|
|
3
|
-
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
|
-
|
|
5
|
-
interface KeyListenerOptions {
|
|
6
|
-
ctrl?: boolean;
|
|
7
|
-
shift?: boolean;
|
|
8
|
-
alt?: boolean;
|
|
9
|
-
}
|
|
10
|
-
declare function useKeyListener(key: string, options?: KeyListenerOptions): boolean;
|
|
11
|
-
|
|
12
|
-
declare function useListener<E extends keyof GlobalEventHandlersEventMap>(element: Node, event: E, listener: (event: GlobalEventHandlersEventMap[E]) => void, deps?: DependencyList): void;
|
|
13
|
-
|
|
14
|
-
declare function useUpdatedRef<V>(value: V): React.RefObject<V>;
|
|
15
|
-
|
|
16
|
-
declare function useUpdateEffect(callback: React.EffectCallback, value: unknown[]): void;
|
|
17
|
-
|
|
18
|
-
declare function useWindowSize(): Vector2;
|
|
19
|
-
|
|
20
|
-
declare function useSignal<T>(value: T): Signal<T>;
|
|
21
|
-
declare class Signal<T> {
|
|
22
|
-
private _value;
|
|
23
|
-
private setState;
|
|
24
|
-
constructor(_value: T, setState: ReactUtils.SetState<T>);
|
|
25
|
-
set value(value: T);
|
|
26
|
-
get value(): T;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
interface DebugProps {
|
|
30
|
-
value: unknown;
|
|
31
|
-
openPaths?: string[];
|
|
32
|
-
excludePaths?: string[];
|
|
33
|
-
size?: 'normal' | 'big' | 'tiny';
|
|
34
|
-
compactArrays?: number;
|
|
35
|
-
autoHeight?: boolean;
|
|
36
|
-
openRoot?: boolean;
|
|
37
|
-
}
|
|
38
|
-
declare function Debug({ value, openPaths, excludePaths, size, compactArrays, autoHeight, openRoot }: DebugProps): react_jsx_runtime.JSX.Element;
|
|
39
|
-
|
|
40
|
-
export { Debug as Debugger, useKeyListener, useListener, useSignal, useUpdateEffect, useUpdatedRef, useWindowSize };
|
package/dist/index.d.ts
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { DependencyList } from 'react';
|
|
2
|
-
import { Vector2, ReactUtils } from '@hrnec06/util';
|
|
3
|
-
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
|
-
|
|
5
|
-
interface KeyListenerOptions {
|
|
6
|
-
ctrl?: boolean;
|
|
7
|
-
shift?: boolean;
|
|
8
|
-
alt?: boolean;
|
|
9
|
-
}
|
|
10
|
-
declare function useKeyListener(key: string, options?: KeyListenerOptions): boolean;
|
|
11
|
-
|
|
12
|
-
declare function useListener<E extends keyof GlobalEventHandlersEventMap>(element: Node, event: E, listener: (event: GlobalEventHandlersEventMap[E]) => void, deps?: DependencyList): void;
|
|
13
|
-
|
|
14
|
-
declare function useUpdatedRef<V>(value: V): React.RefObject<V>;
|
|
15
|
-
|
|
16
|
-
declare function useUpdateEffect(callback: React.EffectCallback, value: unknown[]): void;
|
|
17
|
-
|
|
18
|
-
declare function useWindowSize(): Vector2;
|
|
19
|
-
|
|
20
|
-
declare function useSignal<T>(value: T): Signal<T>;
|
|
21
|
-
declare class Signal<T> {
|
|
22
|
-
private _value;
|
|
23
|
-
private setState;
|
|
24
|
-
constructor(_value: T, setState: ReactUtils.SetState<T>);
|
|
25
|
-
set value(value: T);
|
|
26
|
-
get value(): T;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
interface DebugProps {
|
|
30
|
-
value: unknown;
|
|
31
|
-
openPaths?: string[];
|
|
32
|
-
excludePaths?: string[];
|
|
33
|
-
size?: 'normal' | 'big' | 'tiny';
|
|
34
|
-
compactArrays?: number;
|
|
35
|
-
autoHeight?: boolean;
|
|
36
|
-
openRoot?: boolean;
|
|
37
|
-
}
|
|
38
|
-
declare function Debug({ value, openPaths, excludePaths, size, compactArrays, autoHeight, openRoot }: DebugProps): react_jsx_runtime.JSX.Element;
|
|
39
|
-
|
|
40
|
-
export { Debug as Debugger, useKeyListener, useListener, useSignal, useUpdateEffect, useUpdatedRef, useWindowSize };
|