yummies 5.11.1 → 5.12.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/async.cjs +1 -1
- package/async.cjs.map +1 -1
- package/async.js +38 -21
- package/async.js.map +1 -1
- package/common.cjs +1 -1
- package/common.cjs.map +1 -1
- package/common.js +9 -3
- package/common.js.map +1 -1
- package/complex.cjs +1 -1
- package/complex.cjs.map +1 -1
- package/complex.js +56 -33
- package/complex.js.map +1 -1
- package/cookie.cjs +1 -1
- package/cookie.cjs.map +1 -1
- package/cookie.js +7 -2
- package/cookie.js.map +1 -1
- package/css.cjs +1 -1
- package/css.cjs.map +1 -1
- package/css.js +41 -20
- package/css.js.map +1 -1
- package/data.cjs +1 -1
- package/data.cjs.map +1 -1
- package/data.js +35 -25
- package/data.js.map +1 -1
- package/date-time.cjs +1 -1
- package/date-time.cjs.map +1 -1
- package/date-time.js +332 -250
- package/date-time.js.map +1 -1
- package/device.cjs +1 -1
- package/device.cjs.map +1 -1
- package/device.js +27 -18
- package/device.js.map +1 -1
- package/encodings.cjs +1 -1
- package/encodings.cjs.map +1 -1
- package/encodings.js +10 -10
- package/encodings.js.map +1 -1
- package/errors.cjs +1 -1
- package/errors.cjs.map +1 -1
- package/errors.js +21 -6
- package/errors.js.map +1 -1
- package/file.cjs +1 -1
- package/file.cjs.map +1 -1
- package/file.js +26 -17
- package/file.js.map +1 -1
- package/format.cjs +1 -1
- package/format.cjs.map +1 -1
- package/format.js +66 -39
- package/format.js.map +1 -1
- package/html.cjs +1 -1
- package/html.cjs.map +1 -1
- package/html.d.ts +1 -1
- package/html.d.ts.map +1 -1
- package/html.js +111 -68
- package/html.js.map +1 -1
- package/id.cjs +1 -2
- package/id.cjs.map +1 -1
- package/id.js +23 -13
- package/id.js.map +1 -1
- package/imports.cjs +1 -1
- package/imports.cjs.map +1 -1
- package/imports.js +27 -18
- package/imports.js.map +1 -1
- package/math.cjs +1 -1
- package/math.cjs.map +1 -1
- package/math.js +10 -8
- package/math.js.map +1 -1
- package/media.cjs +1 -1
- package/media.cjs.map +1 -1
- package/media.js +94 -49
- package/media.js.map +1 -1
- package/mobx.cjs +1 -1
- package/mobx.cjs.map +1 -1
- package/mobx.js +123 -68
- package/mobx.js.map +1 -1
- package/ms.cjs +1 -1
- package/ms.cjs.map +1 -1
- package/ms.js +9 -8
- package/ms.js.map +1 -1
- package/number.cjs +1 -1
- package/number.cjs.map +1 -1
- package/number.js +7 -6
- package/number.js.map +1 -1
- package/package.json +28 -27
- package/parser.cjs +1 -1
- package/parser.cjs.map +1 -1
- package/parser.js +63 -28
- package/parser.js.map +1 -1
- package/price.cjs +1 -1
- package/price.cjs.map +1 -1
- package/price.js +14 -7
- package/price.js.map +1 -1
- package/random.cjs +1 -1
- package/random.cjs.map +1 -1
- package/random.js +22 -9
- package/random.js.map +1 -1
- package/react.cjs +1 -1
- package/react.cjs.map +1 -1
- package/react.js +195 -130
- package/react.js.map +1 -1
- package/sound.cjs +1 -1
- package/sound.cjs.map +1 -1
- package/sound.js +8 -4
- package/sound.js.map +1 -1
- package/text.cjs +1 -1
- package/text.cjs.map +1 -1
- package/text.js +30 -14
- package/text.js.map +1 -1
- package/type-guard.cjs +1 -1
- package/type-guard.cjs.map +1 -1
- package/type-guard.js +58 -38
- package/type-guard.js.map +1 -1
- package/utility-types.d.ts +15 -0
- package/utils/types.d.ts +15 -0
- package/utils/types.d.ts.map +1 -1
- package/vibrate.cjs +1 -1
- package/vibrate.cjs.map +1 -1
- package/vibrate.js +5 -3
- package/vibrate.js.map +1 -1
package/react.js
CHANGED
|
@@ -1,152 +1,217 @@
|
|
|
1
|
-
import { useRef
|
|
2
|
-
const
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
return
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
1
|
+
import { useRef, useEffect, useLayoutEffect, useCallback, useState } from "react";
|
|
2
|
+
const useConstant = (defineValue) => {
|
|
3
|
+
const ref = useRef();
|
|
4
|
+
if (!ref.current) {
|
|
5
|
+
ref.current = { value: defineValue() };
|
|
6
|
+
}
|
|
7
|
+
return ref.current.value;
|
|
8
|
+
};
|
|
9
|
+
const useAbortController = () => {
|
|
10
|
+
const controller = useConstant(() => new AbortController());
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
return () => {
|
|
13
|
+
controller.abort();
|
|
14
|
+
};
|
|
15
|
+
}, []);
|
|
16
|
+
return controller;
|
|
17
|
+
};
|
|
18
|
+
const useAbortSignal = () => {
|
|
19
|
+
return useAbortController().signal;
|
|
20
|
+
};
|
|
21
|
+
const useSyncRef = (value) => {
|
|
22
|
+
const ref = useRef(value);
|
|
23
|
+
ref.current = value;
|
|
24
|
+
return ref;
|
|
25
|
+
};
|
|
26
|
+
const useEventListener = ({
|
|
27
|
+
event,
|
|
28
|
+
handler,
|
|
29
|
+
options,
|
|
30
|
+
deps = [],
|
|
31
|
+
node = document
|
|
19
32
|
}) => {
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
},
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
33
|
+
const handlerRef = useSyncRef(handler);
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
const handleEvent = (e) => handlerRef.current(e);
|
|
36
|
+
node.addEventListener(event, handleEvent, options);
|
|
37
|
+
return () => node.removeEventListener(event, handleEvent, options);
|
|
38
|
+
}, deps);
|
|
39
|
+
};
|
|
40
|
+
const useClickOutside = ({
|
|
41
|
+
contentRef,
|
|
42
|
+
onClick,
|
|
43
|
+
options
|
|
29
44
|
}) => {
|
|
30
|
-
|
|
45
|
+
useEventListener({
|
|
31
46
|
event: "mousedown",
|
|
32
|
-
handler: (
|
|
33
|
-
|
|
47
|
+
handler: (event) => {
|
|
48
|
+
if (contentRef.current && !contentRef.current.contains(event.target)) {
|
|
49
|
+
onClick();
|
|
50
|
+
}
|
|
34
51
|
},
|
|
35
|
-
options
|
|
52
|
+
options
|
|
36
53
|
});
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}), u((...n) => {
|
|
50
|
-
const r = t.current;
|
|
51
|
-
return r(...n);
|
|
54
|
+
};
|
|
55
|
+
const useDefineRef = (defineFn) => {
|
|
56
|
+
const ref = useRef(void 0);
|
|
57
|
+
if (!ref.current) {
|
|
58
|
+
ref.current = defineFn();
|
|
59
|
+
}
|
|
60
|
+
return ref;
|
|
61
|
+
};
|
|
62
|
+
const useElementRef = (selector) => {
|
|
63
|
+
const ref = useRef();
|
|
64
|
+
useLayoutEffect(() => {
|
|
65
|
+
ref.current = selector();
|
|
52
66
|
}, []);
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
67
|
+
return ref;
|
|
68
|
+
};
|
|
69
|
+
const useEvent = (handler) => {
|
|
70
|
+
const handlerRef = useRef(handler);
|
|
71
|
+
useLayoutEffect(() => {
|
|
72
|
+
handlerRef.current = handler;
|
|
59
73
|
});
|
|
60
|
-
return
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
return u(() => {
|
|
64
|
-
e({});
|
|
74
|
+
return useCallback((...args) => {
|
|
75
|
+
const fn = handlerRef.current;
|
|
76
|
+
return fn(...args);
|
|
65
77
|
}, []);
|
|
66
|
-
}
|
|
67
|
-
|
|
78
|
+
};
|
|
79
|
+
const useFlag = (defaultValue = false) => {
|
|
80
|
+
const [enabled, setEnabled] = useState(defaultValue);
|
|
81
|
+
const toggle = useCallback(() => setEnabled((value) => !value), []);
|
|
82
|
+
const enable = useCallback(() => setEnabled(true), []);
|
|
83
|
+
const disable = useCallback(() => setEnabled(false), []);
|
|
84
|
+
const flagObjRef = useRef({
|
|
85
|
+
enabled,
|
|
86
|
+
toggle,
|
|
87
|
+
enable,
|
|
88
|
+
disable
|
|
89
|
+
});
|
|
90
|
+
flagObjRef.current.enabled = enabled;
|
|
91
|
+
return flagObjRef.current;
|
|
92
|
+
};
|
|
93
|
+
const useForceUpdate = () => {
|
|
94
|
+
const [, setState] = useState(null);
|
|
95
|
+
return useCallback(() => {
|
|
96
|
+
setState({});
|
|
97
|
+
}, []);
|
|
98
|
+
};
|
|
99
|
+
const useInitialHeight = () => {
|
|
100
|
+
const ref = useRef(null);
|
|
101
|
+
const [initialHeight, setInitialHeight] = useState(
|
|
68
102
|
void 0
|
|
69
103
|
);
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
104
|
+
useEffect(() => {
|
|
105
|
+
if (ref.current && !initialHeight) {
|
|
106
|
+
setInitialHeight(ref.current.offsetHeight);
|
|
107
|
+
}
|
|
108
|
+
}, [initialHeight]);
|
|
109
|
+
return { ref, initialHeight };
|
|
110
|
+
};
|
|
111
|
+
const createUseInstanceHook = (extension) => (factory, config) => {
|
|
112
|
+
const abortSignal = useAbortSignal();
|
|
113
|
+
const instance = useConstant(
|
|
114
|
+
() => factory({
|
|
115
|
+
...extension,
|
|
116
|
+
abortSignal,
|
|
117
|
+
payload: config?.payload
|
|
79
118
|
})
|
|
80
119
|
);
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}, [
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
120
|
+
useLayoutEffect(() => {
|
|
121
|
+
config?.onUpdate?.(config.payload);
|
|
122
|
+
}, [config?.payload]);
|
|
123
|
+
return instance;
|
|
124
|
+
};
|
|
125
|
+
const useInstance = createUseInstanceHook();
|
|
126
|
+
const useIntersectionObserver = (callback, options) => {
|
|
127
|
+
const [intersectionObserver] = useState(
|
|
128
|
+
() => new IntersectionObserver(callback, options)
|
|
87
129
|
);
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
return
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
130
|
+
useEffect(() => {
|
|
131
|
+
return () => {
|
|
132
|
+
intersectionObserver.disconnect();
|
|
133
|
+
};
|
|
134
|
+
}, []);
|
|
135
|
+
return intersectionObserver;
|
|
136
|
+
};
|
|
137
|
+
const useLastDefinedValue = (value) => {
|
|
138
|
+
const ref = useRef(value);
|
|
139
|
+
if (value != null) {
|
|
140
|
+
ref.current = value;
|
|
141
|
+
}
|
|
142
|
+
return ref.current;
|
|
143
|
+
};
|
|
144
|
+
const useLastValueRef = (value) => {
|
|
145
|
+
const ref = useRef(value);
|
|
146
|
+
if (value != null) {
|
|
147
|
+
ref.current = value;
|
|
148
|
+
}
|
|
149
|
+
return ref;
|
|
150
|
+
};
|
|
151
|
+
const useLifeCycle = (fn) => {
|
|
152
|
+
const fnRef = useSyncRef(fn);
|
|
153
|
+
useEffect(() => {
|
|
154
|
+
const fnOperation = fnRef.current();
|
|
155
|
+
fnOperation.mount?.();
|
|
156
|
+
return fnOperation.unmount?.();
|
|
102
157
|
}, []);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
158
|
+
};
|
|
159
|
+
const useResizeObserver = (callback) => {
|
|
160
|
+
const resizeObserverRef = useDefineRef(() => new ResizeObserver(callback));
|
|
161
|
+
useLayoutEffect(() => {
|
|
162
|
+
return () => {
|
|
163
|
+
resizeObserverRef.current.disconnect();
|
|
164
|
+
};
|
|
165
|
+
}, []);
|
|
166
|
+
return resizeObserverRef;
|
|
167
|
+
};
|
|
168
|
+
const useToggle = (initialState) => {
|
|
169
|
+
const [toggled, setToggled] = useState(!!initialState);
|
|
170
|
+
const toggle = useCallback(() => setToggled((toggled2) => !toggled2), []);
|
|
171
|
+
return [toggled, toggle, setToggled];
|
|
172
|
+
};
|
|
173
|
+
const useValue = (defaults) => {
|
|
174
|
+
const [value, setValue] = useState(defaults);
|
|
113
175
|
return {
|
|
114
|
-
value
|
|
115
|
-
set:
|
|
176
|
+
value,
|
|
177
|
+
set: setValue
|
|
116
178
|
};
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
179
|
+
};
|
|
180
|
+
const useVisibilityState = () => {
|
|
181
|
+
const [state, setState] = useState();
|
|
182
|
+
useEffect(() => {
|
|
183
|
+
const handleVisibilityChange = () => {
|
|
184
|
+
setState(document.visibilityState);
|
|
122
185
|
};
|
|
123
|
-
|
|
124
|
-
|
|
186
|
+
document.addEventListener("visibilitychange", handleVisibilityChange);
|
|
187
|
+
return () => {
|
|
188
|
+
document.removeEventListener("visibilitychange", handleVisibilityChange);
|
|
125
189
|
};
|
|
126
|
-
}, [])
|
|
190
|
+
}, []);
|
|
191
|
+
return state;
|
|
127
192
|
};
|
|
128
193
|
export {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
194
|
+
createUseInstanceHook,
|
|
195
|
+
useAbortController,
|
|
196
|
+
useAbortSignal,
|
|
197
|
+
useClickOutside,
|
|
198
|
+
useConstant,
|
|
199
|
+
useDefineRef,
|
|
200
|
+
useElementRef,
|
|
201
|
+
useEvent,
|
|
202
|
+
useEventListener,
|
|
203
|
+
useFlag,
|
|
204
|
+
useForceUpdate,
|
|
205
|
+
useInitialHeight,
|
|
206
|
+
useInstance,
|
|
207
|
+
useIntersectionObserver,
|
|
208
|
+
useLastDefinedValue,
|
|
209
|
+
useLastValueRef,
|
|
210
|
+
useLifeCycle,
|
|
211
|
+
useResizeObserver,
|
|
212
|
+
useSyncRef,
|
|
213
|
+
useToggle,
|
|
214
|
+
useValue,
|
|
215
|
+
useVisibilityState
|
|
151
216
|
};
|
|
152
217
|
//# sourceMappingURL=react.js.map
|
package/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.js","sources":["../src/react/hooks/use-constant.ts","../src/react/hooks/use-abort-controller.ts","../src/react/hooks/use-abort-signal.ts","../src/react/hooks/use-sync-ref.ts","../src/react/hooks/use-event-listener.ts","../src/react/hooks/use-click-outside.ts","../src/react/hooks/use-define-ref.ts","../src/react/hooks/use-element-ref.ts","../src/react/hooks/use-event.ts","../src/react/hooks/use-flag.ts","../src/react/hooks/use-force-update.ts","../src/react/hooks/use-initial-height.ts","../src/react/hooks/use-instance.ts","../src/react/hooks/use-intersection-observer.ts","../src/react/hooks/use-last-defined-value.ts","../src/react/hooks/use-last-value-ref.ts","../src/react/hooks/use-life-cycle.ts","../src/react/hooks/use-resize-observer.ts","../src/react/hooks/use-toggle.ts","../src/react/hooks/use-value.ts","../src/react/hooks/use-visibility-state.ts"],"sourcesContent":["import { useRef } from 'react';\n\n/**\n * React hook for creating a value exactly once.\n * useMemo doesn't give this guarantee unfortunately -\n * https://reactjs.org/docs/hooks-faq.html#how-to-create-expensive-objects-lazily\n * https://reactjs.org/docs/hooks-reference.html#usememo\n * @param defineValue Function which returns defined value.\n */\nexport const useConstant = <T>(defineValue: () => T): T => {\n const ref = useRef<{ value: T }>();\n\n if (!ref.current) {\n ref.current = { value: defineValue() };\n }\n\n return ref.current.value;\n};\n","import { useEffect } from 'react';\n\nimport { useConstant } from './use-constant.js';\n\nexport const useAbortController = () => {\n const controller = useConstant(() => new AbortController());\n\n useEffect(() => {\n return () => {\n controller.abort();\n };\n }, []);\n\n return controller;\n};\n","import { useAbortController } from './use-abort-controller.js';\n\nexport const useAbortSignal = () => {\n return useAbortController().signal;\n};\n","import { useRef } from 'react';\n\nexport const useSyncRef = <T>(value: T) => {\n const ref = useRef(value);\n ref.current = value;\n return ref;\n};\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { useEffect } from 'react';\nimport { useSyncRef } from './use-sync-ref.js';\n\nexport const useEventListener = <EventName extends keyof HTMLElementEventMap>({\n event,\n handler,\n options,\n deps = [],\n node = document,\n}: {\n event: EventName;\n handler: (e: HTMLElementEventMap[EventName]) => void;\n options?: boolean | AddEventListenerOptions;\n deps?: unknown[];\n node?: HTMLElement | Document | Window;\n}) => {\n const handlerRef = useSyncRef(handler);\n\n useEffect(() => {\n const handleEvent = (e: HTMLElementEventMap[EventName]) =>\n handlerRef.current(e);\n\n // @ts-expect-error\n node.addEventListener(event, handleEvent, options);\n // @ts-expect-error\n return () => node.removeEventListener(event, handleEvent, options);\n }, deps);\n};\n","import type { MutableRefObject } from 'react';\nimport { useEventListener } from './use-event-listener.js';\n\ntype ClickOutsideInput = {\n contentRef: MutableRefObject<HTMLElement | null>;\n onClick: VoidFunction;\n options?: AddEventListenerOptions;\n};\n\nexport const useClickOutside = ({\n contentRef,\n onClick,\n options,\n}: ClickOutsideInput) => {\n useEventListener({\n event: 'mousedown',\n handler: (event) => {\n if (\n contentRef.current &&\n !contentRef.current.contains(event.target as Node)\n ) {\n onClick();\n }\n },\n options,\n });\n};\n","import { type MutableRefObject, useRef } from 'react';\n\n/**\n * React hook for creating a value exactly once.\n * useMemo doesn't give this guarantee unfortunately -\n * https://reactjs.org/docs/hooks-faq.html#how-to-create-expensive-objects-lazily\n * https://reactjs.org/docs/hooks-reference.html#usememo\n * @param defineFn Function which returns defined value.\n */\nexport const useDefineRef = <T>(defineFn: () => T): MutableRefObject<T> => {\n const ref = useRef<T>(void 0 as T);\n\n if (!ref.current) {\n ref.current = defineFn();\n }\n\n return ref;\n};\n","import { useLayoutEffect, useRef } from 'react';\n\nexport const useElementRef = <T extends HTMLElement>(selector: () => T) => {\n const ref = useRef<T>();\n\n useLayoutEffect(() => {\n ref.current = selector();\n }, []);\n\n return ref;\n};\n","/**\n * A Hook to define an event handler with an always-stable function identity.\n *\n * borrowed from @gaeron\n * https://github.com/reactjs/rfcs/blob/useevent/text/0000-useevent.md\n */\nimport { useCallback, useLayoutEffect, useRef } from 'react';\nimport type { AnyFunction } from 'yummies/utils/types';\n\nexport const useEvent = <H extends AnyFunction>(handler: H): H => {\n const handlerRef = useRef<H>(handler);\n\n // In a real implementation, this would run before layout effects\n useLayoutEffect(() => {\n handlerRef.current = handler;\n });\n\n return useCallback((...args: unknown[]) => {\n // In a real implementation, this would throw if called during render\n const fn = handlerRef.current as AnyFunction;\n return fn(...args);\n }, []) as unknown as H;\n};\n","import { useCallback, useRef, useState } from 'react';\n\nexport interface FlagHook {\n enabled: boolean;\n toggle: VoidFunction;\n enable: VoidFunction;\n disable: VoidFunction;\n}\n\nexport const useFlag = (defaultValue = false): FlagHook => {\n const [enabled, setEnabled] = useState(defaultValue);\n\n const toggle = useCallback(() => setEnabled((value) => !value), []);\n const enable = useCallback(() => setEnabled(true), []);\n const disable = useCallback(() => setEnabled(false), []);\n\n const flagObjRef = useRef<FlagHook>({\n enabled,\n toggle,\n enable,\n disable,\n });\n\n flagObjRef.current.enabled = enabled;\n\n return flagObjRef.current;\n};\n","import { useCallback, useState } from 'react';\n\nexport const useForceUpdate = () => {\n const [, setState] = useState<unknown>(null);\n\n return useCallback(() => {\n setState({});\n }, []);\n};\n","import { useEffect, useRef, useState } from 'react';\n\nexport const useInitialHeight = <T extends HTMLElement>() => {\n const ref = useRef<T | null>(null);\n const [initialHeight, setInitialHeight] = useState<number | undefined>(\n undefined,\n );\n\n useEffect(() => {\n if (ref.current && !initialHeight) {\n setInitialHeight(ref.current.offsetHeight);\n }\n }, [initialHeight]);\n\n return { ref, initialHeight };\n};\n","import { useLayoutEffect } from 'react';\nimport { useAbortSignal } from './use-abort-signal.js';\nimport { useConstant } from './use-constant.js';\n\nexport type InstanceCreateConfig<TPayload, TExtension = {}> = TExtension & {\n abortSignal: AbortSignal;\n payload: TPayload;\n};\n\nexport const createUseInstanceHook =\n <TExtension = {}>(extension?: TExtension) =>\n <TInstance, TPayload>(\n factory: (\n config: InstanceCreateConfig<NoInfer<TPayload>, TExtension>,\n ) => TInstance,\n config?: {\n payload?: TPayload;\n onUpdate?: (payload: TPayload) => void;\n },\n ) => {\n const abortSignal = useAbortSignal();\n\n const instance = useConstant(() =>\n factory({\n ...(extension as TExtension),\n abortSignal,\n payload: config?.payload as any,\n }),\n );\n\n useLayoutEffect(() => {\n config?.onUpdate?.(config.payload!);\n }, [config?.payload]);\n\n return instance;\n };\n\n/**\n * The `useInstance` hook is used to create and manage an instance of an object\n * that requires access to the root store and an abort signal.\n *\n * You can create YOUR OWN CUSTOM `useInstance` hook using `createUseInstanceHook` if you need\n * to provide some specific data\n *\n * @param factory - A factory function that takes a configuration and returns an instance.\n * @param config - An optional configuration containing additional input parameters and an update function.\n * @returns An instance created by the factory function.\n */\nexport const useInstance = createUseInstanceHook();\n","import { useEffect, useState } from 'react';\n\nexport const useIntersectionObserver = (\n callback: IntersectionObserverCallback,\n options?: IntersectionObserverInit,\n) => {\n const [intersectionObserver] = useState(\n () => new IntersectionObserver(callback, options),\n );\n\n useEffect(() => {\n return () => {\n intersectionObserver.disconnect();\n };\n }, []);\n\n return intersectionObserver;\n};\n","import { useRef } from 'react';\n\nexport const useLastDefinedValue = <T>(value: T) => {\n const ref = useRef(value);\n if (value != null) {\n ref.current = value;\n }\n return ref.current;\n};\n","import { useRef } from 'react';\n\nexport const useLastValueRef = <T>(value: T | null | undefined) => {\n const ref = useRef(value);\n\n if (value != null) {\n ref.current = value;\n }\n\n return ref;\n};\n","import { useEffect } from 'react';\nimport { useSyncRef } from './use-sync-ref.js';\n\nexport const useLifeCycle = (\n fn: () => {\n mount?: VoidFunction;\n unmount?: VoidFunction;\n },\n) => {\n const fnRef = useSyncRef(fn);\n\n useEffect(() => {\n const fnOperation = fnRef.current();\n fnOperation.mount?.();\n return fnOperation.unmount?.();\n }, []);\n};\n","import { useLayoutEffect } from 'react';\nimport { useDefineRef } from './use-define-ref.js';\n\nexport const useResizeObserver = (callback: ResizeObserverCallback) => {\n const resizeObserverRef = useDefineRef(() => new ResizeObserver(callback));\n\n useLayoutEffect(() => {\n return () => {\n resizeObserverRef.current.disconnect();\n };\n }, []);\n\n return resizeObserverRef;\n};\n","import { useCallback, useState } from 'react';\n\nexport const useToggle = (initialState?: boolean) => {\n const [toggled, setToggled] = useState(!!initialState);\n\n const toggle = useCallback(() => setToggled((toggled) => !toggled), []);\n\n return [toggled, toggle, setToggled] as const;\n};\n","import { useState } from 'react';\n\nexport const useValue = <T>(defaults: T | (() => T)) => {\n const [value, setValue] = useState<T>(defaults);\n\n return {\n value,\n set: setValue,\n };\n};\n","import { useEffect, useState } from 'react';\n\nexport const useVisibilityState = () => {\n const [state, setState] = useState<DocumentVisibilityState>();\n\n useEffect(() => {\n const handleVisibilityChange = () => {\n setState(document.visibilityState);\n };\n\n document.addEventListener('visibilitychange', handleVisibilityChange);\n\n return () => {\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n };\n }, []);\n\n return state;\n};\n"],"names":["useConstant","defineValue","ref","useRef","useAbortController","controller","useEffect","useAbortSignal","useSyncRef","value","useEventListener","event","handler","options","deps","node","handlerRef","handleEvent","e","useClickOutside","contentRef","onClick","useDefineRef","defineFn","useElementRef","selector","useLayoutEffect","useEvent","useCallback","args","fn","useFlag","defaultValue","enabled","setEnabled","useState","toggle","enable","disable","flagObjRef","useForceUpdate","setState","useInitialHeight","initialHeight","setInitialHeight","createUseInstanceHook","extension","factory","config","abortSignal","instance","useInstance","useIntersectionObserver","callback","intersectionObserver","useLastDefinedValue","useLastValueRef","useLifeCycle","fnRef","fnOperation","useResizeObserver","resizeObserverRef","useToggle","initialState","toggled","setToggled","useValue","defaults","setValue","useVisibilityState","state","handleVisibilityChange"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"react.js","sources":["../src/react/hooks/use-constant.ts","../src/react/hooks/use-abort-controller.ts","../src/react/hooks/use-abort-signal.ts","../src/react/hooks/use-sync-ref.ts","../src/react/hooks/use-event-listener.ts","../src/react/hooks/use-click-outside.ts","../src/react/hooks/use-define-ref.ts","../src/react/hooks/use-element-ref.ts","../src/react/hooks/use-event.ts","../src/react/hooks/use-flag.ts","../src/react/hooks/use-force-update.ts","../src/react/hooks/use-initial-height.ts","../src/react/hooks/use-instance.ts","../src/react/hooks/use-intersection-observer.ts","../src/react/hooks/use-last-defined-value.ts","../src/react/hooks/use-last-value-ref.ts","../src/react/hooks/use-life-cycle.ts","../src/react/hooks/use-resize-observer.ts","../src/react/hooks/use-toggle.ts","../src/react/hooks/use-value.ts","../src/react/hooks/use-visibility-state.ts"],"sourcesContent":["import { useRef } from 'react';\n\n/**\n * React hook for creating a value exactly once.\n * useMemo doesn't give this guarantee unfortunately -\n * https://reactjs.org/docs/hooks-faq.html#how-to-create-expensive-objects-lazily\n * https://reactjs.org/docs/hooks-reference.html#usememo\n * @param defineValue Function which returns defined value.\n */\nexport const useConstant = <T>(defineValue: () => T): T => {\n const ref = useRef<{ value: T }>();\n\n if (!ref.current) {\n ref.current = { value: defineValue() };\n }\n\n return ref.current.value;\n};\n","import { useEffect } from 'react';\n\nimport { useConstant } from './use-constant.js';\n\nexport const useAbortController = () => {\n const controller = useConstant(() => new AbortController());\n\n useEffect(() => {\n return () => {\n controller.abort();\n };\n }, []);\n\n return controller;\n};\n","import { useAbortController } from './use-abort-controller.js';\n\nexport const useAbortSignal = () => {\n return useAbortController().signal;\n};\n","import { useRef } from 'react';\n\nexport const useSyncRef = <T>(value: T) => {\n const ref = useRef(value);\n ref.current = value;\n return ref;\n};\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { useEffect } from 'react';\nimport { useSyncRef } from './use-sync-ref.js';\n\nexport const useEventListener = <EventName extends keyof HTMLElementEventMap>({\n event,\n handler,\n options,\n deps = [],\n node = document,\n}: {\n event: EventName;\n handler: (e: HTMLElementEventMap[EventName]) => void;\n options?: boolean | AddEventListenerOptions;\n deps?: unknown[];\n node?: HTMLElement | Document | Window;\n}) => {\n const handlerRef = useSyncRef(handler);\n\n useEffect(() => {\n const handleEvent = (e: HTMLElementEventMap[EventName]) =>\n handlerRef.current(e);\n\n // @ts-expect-error\n node.addEventListener(event, handleEvent, options);\n // @ts-expect-error\n return () => node.removeEventListener(event, handleEvent, options);\n }, deps);\n};\n","import type { MutableRefObject } from 'react';\nimport { useEventListener } from './use-event-listener.js';\n\ntype ClickOutsideInput = {\n contentRef: MutableRefObject<HTMLElement | null>;\n onClick: VoidFunction;\n options?: AddEventListenerOptions;\n};\n\nexport const useClickOutside = ({\n contentRef,\n onClick,\n options,\n}: ClickOutsideInput) => {\n useEventListener({\n event: 'mousedown',\n handler: (event) => {\n if (\n contentRef.current &&\n !contentRef.current.contains(event.target as Node)\n ) {\n onClick();\n }\n },\n options,\n });\n};\n","import { type MutableRefObject, useRef } from 'react';\n\n/**\n * React hook for creating a value exactly once.\n * useMemo doesn't give this guarantee unfortunately -\n * https://reactjs.org/docs/hooks-faq.html#how-to-create-expensive-objects-lazily\n * https://reactjs.org/docs/hooks-reference.html#usememo\n * @param defineFn Function which returns defined value.\n */\nexport const useDefineRef = <T>(defineFn: () => T): MutableRefObject<T> => {\n const ref = useRef<T>(void 0 as T);\n\n if (!ref.current) {\n ref.current = defineFn();\n }\n\n return ref;\n};\n","import { useLayoutEffect, useRef } from 'react';\n\nexport const useElementRef = <T extends HTMLElement>(selector: () => T) => {\n const ref = useRef<T>();\n\n useLayoutEffect(() => {\n ref.current = selector();\n }, []);\n\n return ref;\n};\n","/**\n * A Hook to define an event handler with an always-stable function identity.\n *\n * borrowed from @gaeron\n * https://github.com/reactjs/rfcs/blob/useevent/text/0000-useevent.md\n */\nimport { useCallback, useLayoutEffect, useRef } from 'react';\nimport type { AnyFunction } from 'yummies/utils/types';\n\nexport const useEvent = <H extends AnyFunction>(handler: H): H => {\n const handlerRef = useRef<H>(handler);\n\n // In a real implementation, this would run before layout effects\n useLayoutEffect(() => {\n handlerRef.current = handler;\n });\n\n return useCallback((...args: unknown[]) => {\n // In a real implementation, this would throw if called during render\n const fn = handlerRef.current as AnyFunction;\n return fn(...args);\n }, []) as unknown as H;\n};\n","import { useCallback, useRef, useState } from 'react';\n\nexport interface FlagHook {\n enabled: boolean;\n toggle: VoidFunction;\n enable: VoidFunction;\n disable: VoidFunction;\n}\n\nexport const useFlag = (defaultValue = false): FlagHook => {\n const [enabled, setEnabled] = useState(defaultValue);\n\n const toggle = useCallback(() => setEnabled((value) => !value), []);\n const enable = useCallback(() => setEnabled(true), []);\n const disable = useCallback(() => setEnabled(false), []);\n\n const flagObjRef = useRef<FlagHook>({\n enabled,\n toggle,\n enable,\n disable,\n });\n\n flagObjRef.current.enabled = enabled;\n\n return flagObjRef.current;\n};\n","import { useCallback, useState } from 'react';\n\nexport const useForceUpdate = () => {\n const [, setState] = useState<unknown>(null);\n\n return useCallback(() => {\n setState({});\n }, []);\n};\n","import { useEffect, useRef, useState } from 'react';\n\nexport const useInitialHeight = <T extends HTMLElement>() => {\n const ref = useRef<T | null>(null);\n const [initialHeight, setInitialHeight] = useState<number | undefined>(\n undefined,\n );\n\n useEffect(() => {\n if (ref.current && !initialHeight) {\n setInitialHeight(ref.current.offsetHeight);\n }\n }, [initialHeight]);\n\n return { ref, initialHeight };\n};\n","import { useLayoutEffect } from 'react';\nimport { useAbortSignal } from './use-abort-signal.js';\nimport { useConstant } from './use-constant.js';\n\nexport type InstanceCreateConfig<TPayload, TExtension = {}> = TExtension & {\n abortSignal: AbortSignal;\n payload: TPayload;\n};\n\nexport const createUseInstanceHook =\n <TExtension = {}>(extension?: TExtension) =>\n <TInstance, TPayload>(\n factory: (\n config: InstanceCreateConfig<NoInfer<TPayload>, TExtension>,\n ) => TInstance,\n config?: {\n payload?: TPayload;\n onUpdate?: (payload: TPayload) => void;\n },\n ) => {\n const abortSignal = useAbortSignal();\n\n const instance = useConstant(() =>\n factory({\n ...(extension as TExtension),\n abortSignal,\n payload: config?.payload as any,\n }),\n );\n\n useLayoutEffect(() => {\n config?.onUpdate?.(config.payload!);\n }, [config?.payload]);\n\n return instance;\n };\n\n/**\n * The `useInstance` hook is used to create and manage an instance of an object\n * that requires access to the root store and an abort signal.\n *\n * You can create YOUR OWN CUSTOM `useInstance` hook using `createUseInstanceHook` if you need\n * to provide some specific data\n *\n * @param factory - A factory function that takes a configuration and returns an instance.\n * @param config - An optional configuration containing additional input parameters and an update function.\n * @returns An instance created by the factory function.\n */\nexport const useInstance = createUseInstanceHook();\n","import { useEffect, useState } from 'react';\n\nexport const useIntersectionObserver = (\n callback: IntersectionObserverCallback,\n options?: IntersectionObserverInit,\n) => {\n const [intersectionObserver] = useState(\n () => new IntersectionObserver(callback, options),\n );\n\n useEffect(() => {\n return () => {\n intersectionObserver.disconnect();\n };\n }, []);\n\n return intersectionObserver;\n};\n","import { useRef } from 'react';\n\nexport const useLastDefinedValue = <T>(value: T) => {\n const ref = useRef(value);\n if (value != null) {\n ref.current = value;\n }\n return ref.current;\n};\n","import { useRef } from 'react';\n\nexport const useLastValueRef = <T>(value: T | null | undefined) => {\n const ref = useRef(value);\n\n if (value != null) {\n ref.current = value;\n }\n\n return ref;\n};\n","import { useEffect } from 'react';\nimport { useSyncRef } from './use-sync-ref.js';\n\nexport const useLifeCycle = (\n fn: () => {\n mount?: VoidFunction;\n unmount?: VoidFunction;\n },\n) => {\n const fnRef = useSyncRef(fn);\n\n useEffect(() => {\n const fnOperation = fnRef.current();\n fnOperation.mount?.();\n return fnOperation.unmount?.();\n }, []);\n};\n","import { useLayoutEffect } from 'react';\nimport { useDefineRef } from './use-define-ref.js';\n\nexport const useResizeObserver = (callback: ResizeObserverCallback) => {\n const resizeObserverRef = useDefineRef(() => new ResizeObserver(callback));\n\n useLayoutEffect(() => {\n return () => {\n resizeObserverRef.current.disconnect();\n };\n }, []);\n\n return resizeObserverRef;\n};\n","import { useCallback, useState } from 'react';\n\nexport const useToggle = (initialState?: boolean) => {\n const [toggled, setToggled] = useState(!!initialState);\n\n const toggle = useCallback(() => setToggled((toggled) => !toggled), []);\n\n return [toggled, toggle, setToggled] as const;\n};\n","import { useState } from 'react';\n\nexport const useValue = <T>(defaults: T | (() => T)) => {\n const [value, setValue] = useState<T>(defaults);\n\n return {\n value,\n set: setValue,\n };\n};\n","import { useEffect, useState } from 'react';\n\nexport const useVisibilityState = () => {\n const [state, setState] = useState<DocumentVisibilityState>();\n\n useEffect(() => {\n const handleVisibilityChange = () => {\n setState(document.visibilityState);\n };\n\n document.addEventListener('visibilitychange', handleVisibilityChange);\n\n return () => {\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n };\n }, []);\n\n return state;\n};\n"],"names":["toggled"],"mappings":"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"}
|
package/sound.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});exports.playSound=async(e,{volume:o=1}={})=>{let t=new Audio(e);t.volume=o,t.muted=!o,await t.play(),t.remove(),t=null};
|
|
2
2
|
//# sourceMappingURL=sound.cjs.map
|
package/sound.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sound.cjs","sources":["../src/sound.ts"],"sourcesContent":["/**\n * Воспроизводит звук из файла\n */\nexport const playSound = async (\n file: string,\n { volume = 1 }: { volume?: number } = {},\n) => {\n let audio = new Audio(file);\n audio.volume = volume;\n audio.muted = !volume;\n await audio.play();\n audio.remove();\n // @ts-expect-error\n audio = null;\n};\n"],"names":["
|
|
1
|
+
{"version":3,"file":"sound.cjs","sources":["../src/sound.ts"],"sourcesContent":["/**\n * Воспроизводит звук из файла\n */\nexport const playSound = async (\n file: string,\n { volume = 1 }: { volume?: number } = {},\n) => {\n let audio = new Audio(file);\n audio.volume = volume;\n audio.muted = !volume;\n await audio.play();\n audio.remove();\n // @ts-expect-error\n audio = null;\n};\n"],"names":["async","file","volume","audio","Audio","muted","play","remove"],"mappings":"kGAGyBA,MACvBC,GACEC,SAAS,GAA2B,CAAA,KAEtC,IAAIC,EAAQ,IAAIC,MAAMH,GACtBE,EAAMD,OAASA,EACfC,EAAME,OAASH,QACTC,EAAMG,OACZH,EAAMI,SAENJ,EAAQ"}
|
package/sound.js
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
const
|
|
2
|
-
let
|
|
3
|
-
|
|
1
|
+
const playSound = async (file, { volume = 1 } = {}) => {
|
|
2
|
+
let audio = new Audio(file);
|
|
3
|
+
audio.volume = volume;
|
|
4
|
+
audio.muted = !volume;
|
|
5
|
+
await audio.play();
|
|
6
|
+
audio.remove();
|
|
7
|
+
audio = null;
|
|
4
8
|
};
|
|
5
9
|
export {
|
|
6
|
-
|
|
10
|
+
playSound
|
|
7
11
|
};
|
|
8
12
|
//# sourceMappingURL=sound.js.map
|
package/sound.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sound.js","sources":["../src/sound.ts"],"sourcesContent":["/**\n * Воспроизводит звук из файла\n */\nexport const playSound = async (\n file: string,\n { volume = 1 }: { volume?: number } = {},\n) => {\n let audio = new Audio(file);\n audio.volume = volume;\n audio.muted = !volume;\n await audio.play();\n audio.remove();\n // @ts-expect-error\n audio = null;\n};\n"],"names":[
|
|
1
|
+
{"version":3,"file":"sound.js","sources":["../src/sound.ts"],"sourcesContent":["/**\n * Воспроизводит звук из файла\n */\nexport const playSound = async (\n file: string,\n { volume = 1 }: { volume?: number } = {},\n) => {\n let audio = new Audio(file);\n audio.volume = volume;\n audio.muted = !volume;\n await audio.play();\n audio.remove();\n // @ts-expect-error\n audio = null;\n};\n"],"names":[],"mappings":"AAGO,MAAM,YAAY,OACvB,MACA,EAAE,SAAS,EAAA,IAA2B,CAAA,MACnC;AACH,MAAI,QAAQ,IAAI,MAAM,IAAI;AAC1B,QAAM,SAAS;AACf,QAAM,QAAQ,CAAC;AACf,QAAM,MAAM,KAAA;AACZ,QAAM,OAAA;AAEN,UAAQ;AACV;"}
|
package/text.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});exports.declension=(t,e,s=[2,0,1,1,1,2])=>e[t%100>4&&t%100<20?2:s[Math.min(t%10,5)]],exports.splitTextByLines=(t,e=60)=>{const s=t.split(/\s+/).filter(t=>""!==t),n=[];let l="";for(const o of s){if(o.length>e){""!==l&&(n.push(l),l="");let t=0;for(;t<o.length;){const s=o.slice(t,t+e);n.push(s),t+=e}continue}""===l?l=o:l.length+1+o.length<=e?l+=` ${o}`:(n.push(l),l=o)}return""===l&&0!==n.length||n.push(l),n};
|
|
2
2
|
//# sourceMappingURL=text.cjs.map
|
package/text.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.cjs","sources":["../src/text.ts"],"sourcesContent":["/**\n * Склонение слова в зависимости от количества\n * @example\n * declension(1, ['слово', 'слова', 'слов']) // 'слово'\n * @example\n * declension(2, ['слово', 'слова', 'слов']) // 'слова'\n * @example\n * declension(5, ['слово', 'слова', 'слов']) // 'слов'\n */\nexport const declension = (\n count: number,\n txt: readonly [one: string, two: string, five: string],\n cases = [2, 0, 1, 1, 1, 2],\n) =>\n txt[count % 100 > 4 && count % 100 < 20 ? 2 : cases[Math.min(count % 10, 5)]];\n\n/**\n * Разбиение текста на линии\n */\nexport const splitTextByLines = (\n text: string,\n lineLingth: number = 60,\n): string[] => {\n const words = text.split(/\\s+/).filter((word) => word !== '');\n const lines = [];\n let currentLine = '';\n\n for (const word of words) {\n if (word.length > lineLingth) {\n if (currentLine !== '') {\n lines.push(currentLine);\n currentLine = '';\n }\n\n let start = 0;\n while (start < word.length) {\n const chunk = word.slice(start, start + lineLingth);\n lines.push(chunk);\n start += lineLingth;\n }\n continue;\n }\n\n // Проверка возможности добавления слова в текущую строку\n if (currentLine === '') {\n currentLine = word;\n } else if (currentLine.length + 1 + word.length <= lineLingth) {\n currentLine += ` ${word}`;\n } else {\n lines.push(currentLine);\n currentLine = word;\n }\n }\n\n if (currentLine !== '' || lines.length === 0) {\n lines.push(currentLine);\n }\n\n return lines;\n};\n"],"names":["
|
|
1
|
+
{"version":3,"file":"text.cjs","sources":["../src/text.ts"],"sourcesContent":["/**\n * Склонение слова в зависимости от количества\n * @example\n * declension(1, ['слово', 'слова', 'слов']) // 'слово'\n * @example\n * declension(2, ['слово', 'слова', 'слов']) // 'слова'\n * @example\n * declension(5, ['слово', 'слова', 'слов']) // 'слов'\n */\nexport const declension = (\n count: number,\n txt: readonly [one: string, two: string, five: string],\n cases = [2, 0, 1, 1, 1, 2],\n) =>\n txt[count % 100 > 4 && count % 100 < 20 ? 2 : cases[Math.min(count % 10, 5)]];\n\n/**\n * Разбиение текста на линии\n */\nexport const splitTextByLines = (\n text: string,\n lineLingth: number = 60,\n): string[] => {\n const words = text.split(/\\s+/).filter((word) => word !== '');\n const lines = [];\n let currentLine = '';\n\n for (const word of words) {\n if (word.length > lineLingth) {\n if (currentLine !== '') {\n lines.push(currentLine);\n currentLine = '';\n }\n\n let start = 0;\n while (start < word.length) {\n const chunk = word.slice(start, start + lineLingth);\n lines.push(chunk);\n start += lineLingth;\n }\n continue;\n }\n\n // Проверка возможности добавления слова в текущую строку\n if (currentLine === '') {\n currentLine = word;\n } else if (currentLine.length + 1 + word.length <= lineLingth) {\n currentLine += ` ${word}`;\n } else {\n lines.push(currentLine);\n currentLine = word;\n }\n }\n\n if (currentLine !== '' || lines.length === 0) {\n lines.push(currentLine);\n }\n\n return lines;\n};\n"],"names":["count","txt","cases","Math","min","text","lineLingth","words","split","filter","word","lines","currentLine","length","push","start","chunk","slice"],"mappings":"mGAS0B,CACxBA,EACAC,EACAC,EAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,KAExBD,EAAID,EAAQ,IAAM,GAAKA,EAAQ,IAAM,GAAK,EAAIE,EAAMC,KAAKC,IAAIJ,EAAQ,GAAI,8BAK3C,CAC9BK,EACAC,EAAqB,MAErB,MAAMC,EAAQF,EAAKG,MAAM,OAAOC,OAAQC,GAAkB,KAATA,GAC3CC,EAAQ,GACd,IAAIC,EAAc,GAElB,IAAA,MAAWF,KAAQH,EAAO,CACxB,GAAIG,EAAKG,OAASP,EAAY,CACR,KAAhBM,IACFD,EAAMG,KAAKF,GACXA,EAAc,IAGhB,IAAIG,EAAQ,EACZ,KAAOA,EAAQL,EAAKG,QAAQ,CAC1B,MAAMG,EAAQN,EAAKO,MAAMF,EAAOA,EAAQT,GACxCK,EAAMG,KAAKE,GACXD,GAAST,CACX,CACA,QACF,CAGoB,KAAhBM,EACFA,EAAcF,EACLE,EAAYC,OAAS,EAAIH,EAAKG,QAAUP,EACjDM,GAAe,IAAIF,KAEnBC,EAAMG,KAAKF,GACXA,EAAcF,EAElB,CAMA,MAJoB,KAAhBE,GAAuC,IAAjBD,EAAME,QAC9BF,EAAMG,KAAKF,GAGND"}
|
package/text.js
CHANGED
|
@@ -1,22 +1,38 @@
|
|
|
1
|
-
const
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
const declension = (count, txt, cases = [2, 0, 1, 1, 1, 2]) => txt[count % 100 > 4 && count % 100 < 20 ? 2 : cases[Math.min(count % 10, 5)]];
|
|
2
|
+
const splitTextByLines = (text, lineLingth = 60) => {
|
|
3
|
+
const words = text.split(/\s+/).filter((word) => word !== "");
|
|
4
|
+
const lines = [];
|
|
5
|
+
let currentLine = "";
|
|
6
|
+
for (const word of words) {
|
|
7
|
+
if (word.length > lineLingth) {
|
|
8
|
+
if (currentLine !== "") {
|
|
9
|
+
lines.push(currentLine);
|
|
10
|
+
currentLine = "";
|
|
11
|
+
}
|
|
12
|
+
let start = 0;
|
|
13
|
+
while (start < word.length) {
|
|
14
|
+
const chunk = word.slice(start, start + lineLingth);
|
|
15
|
+
lines.push(chunk);
|
|
16
|
+
start += lineLingth;
|
|
11
17
|
}
|
|
12
18
|
continue;
|
|
13
19
|
}
|
|
14
|
-
|
|
20
|
+
if (currentLine === "") {
|
|
21
|
+
currentLine = word;
|
|
22
|
+
} else if (currentLine.length + 1 + word.length <= lineLingth) {
|
|
23
|
+
currentLine += ` ${word}`;
|
|
24
|
+
} else {
|
|
25
|
+
lines.push(currentLine);
|
|
26
|
+
currentLine = word;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
if (currentLine !== "" || lines.length === 0) {
|
|
30
|
+
lines.push(currentLine);
|
|
15
31
|
}
|
|
16
|
-
return
|
|
32
|
+
return lines;
|
|
17
33
|
};
|
|
18
34
|
export {
|
|
19
|
-
|
|
20
|
-
|
|
35
|
+
declension,
|
|
36
|
+
splitTextByLines
|
|
21
37
|
};
|
|
22
38
|
//# sourceMappingURL=text.js.map
|
package/text.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.js","sources":["../src/text.ts"],"sourcesContent":["/**\n * Склонение слова в зависимости от количества\n * @example\n * declension(1, ['слово', 'слова', 'слов']) // 'слово'\n * @example\n * declension(2, ['слово', 'слова', 'слов']) // 'слова'\n * @example\n * declension(5, ['слово', 'слова', 'слов']) // 'слов'\n */\nexport const declension = (\n count: number,\n txt: readonly [one: string, two: string, five: string],\n cases = [2, 0, 1, 1, 1, 2],\n) =>\n txt[count % 100 > 4 && count % 100 < 20 ? 2 : cases[Math.min(count % 10, 5)]];\n\n/**\n * Разбиение текста на линии\n */\nexport const splitTextByLines = (\n text: string,\n lineLingth: number = 60,\n): string[] => {\n const words = text.split(/\\s+/).filter((word) => word !== '');\n const lines = [];\n let currentLine = '';\n\n for (const word of words) {\n if (word.length > lineLingth) {\n if (currentLine !== '') {\n lines.push(currentLine);\n currentLine = '';\n }\n\n let start = 0;\n while (start < word.length) {\n const chunk = word.slice(start, start + lineLingth);\n lines.push(chunk);\n start += lineLingth;\n }\n continue;\n }\n\n // Проверка возможности добавления слова в текущую строку\n if (currentLine === '') {\n currentLine = word;\n } else if (currentLine.length + 1 + word.length <= lineLingth) {\n currentLine += ` ${word}`;\n } else {\n lines.push(currentLine);\n currentLine = word;\n }\n }\n\n if (currentLine !== '' || lines.length === 0) {\n lines.push(currentLine);\n }\n\n return lines;\n};\n"],"names":[
|
|
1
|
+
{"version":3,"file":"text.js","sources":["../src/text.ts"],"sourcesContent":["/**\n * Склонение слова в зависимости от количества\n * @example\n * declension(1, ['слово', 'слова', 'слов']) // 'слово'\n * @example\n * declension(2, ['слово', 'слова', 'слов']) // 'слова'\n * @example\n * declension(5, ['слово', 'слова', 'слов']) // 'слов'\n */\nexport const declension = (\n count: number,\n txt: readonly [one: string, two: string, five: string],\n cases = [2, 0, 1, 1, 1, 2],\n) =>\n txt[count % 100 > 4 && count % 100 < 20 ? 2 : cases[Math.min(count % 10, 5)]];\n\n/**\n * Разбиение текста на линии\n */\nexport const splitTextByLines = (\n text: string,\n lineLingth: number = 60,\n): string[] => {\n const words = text.split(/\\s+/).filter((word) => word !== '');\n const lines = [];\n let currentLine = '';\n\n for (const word of words) {\n if (word.length > lineLingth) {\n if (currentLine !== '') {\n lines.push(currentLine);\n currentLine = '';\n }\n\n let start = 0;\n while (start < word.length) {\n const chunk = word.slice(start, start + lineLingth);\n lines.push(chunk);\n start += lineLingth;\n }\n continue;\n }\n\n // Проверка возможности добавления слова в текущую строку\n if (currentLine === '') {\n currentLine = word;\n } else if (currentLine.length + 1 + word.length <= lineLingth) {\n currentLine += ` ${word}`;\n } else {\n lines.push(currentLine);\n currentLine = word;\n }\n }\n\n if (currentLine !== '' || lines.length === 0) {\n lines.push(currentLine);\n }\n\n return lines;\n};\n"],"names":[],"mappings":"AASO,MAAM,aAAa,CACxB,OACA,KACA,QAAQ,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,MAEzB,IAAI,QAAQ,MAAM,KAAK,QAAQ,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI,QAAQ,IAAI,CAAC,CAAC,CAAC;AAKvE,MAAM,mBAAmB,CAC9B,MACA,aAAqB,OACR;AACb,QAAM,QAAQ,KAAK,MAAM,KAAK,EAAE,OAAO,CAAC,SAAS,SAAS,EAAE;AAC5D,QAAM,QAAQ,CAAA;AACd,MAAI,cAAc;AAElB,aAAW,QAAQ,OAAO;AACxB,QAAI,KAAK,SAAS,YAAY;AAC5B,UAAI,gBAAgB,IAAI;AACtB,cAAM,KAAK,WAAW;AACtB,sBAAc;AAAA,MAChB;AAEA,UAAI,QAAQ;AACZ,aAAO,QAAQ,KAAK,QAAQ;AAC1B,cAAM,QAAQ,KAAK,MAAM,OAAO,QAAQ,UAAU;AAClD,cAAM,KAAK,KAAK;AAChB,iBAAS;AAAA,MACX;AACA;AAAA,IACF;AAGA,QAAI,gBAAgB,IAAI;AACtB,oBAAc;AAAA,IAChB,WAAW,YAAY,SAAS,IAAI,KAAK,UAAU,YAAY;AAC7D,qBAAe,IAAI,IAAI;AAAA,IACzB,OAAO;AACL,YAAM,KAAK,WAAW;AACtB,oBAAc;AAAA,IAChB;AAAA,EACF;AAEA,MAAI,gBAAgB,MAAM,MAAM,WAAW,GAAG;AAC5C,UAAM,KAAK,WAAW;AAAA,EACxB;AAEA,SAAO;AACT;"}
|
package/type-guard.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=e=>n=>function(e){if(void 0===e)return"undefined";if(null===e)return"null";if(e&&(1===e.nodeType||9===e.nodeType))return"element";const n=Object.prototype.toString.call(e);if("[object Number]"===n){if(Number.isNaN(e))return"nan";if(!Number.isFinite(e))return"infinite"}return n}(n)===e,n=e("null"),t=e("undefined"),i=e("[object Object]"),o=e("[object Array]"),r=e("[object String]"),u=e("[object Number]"),l=e("[object Boolean]"),b=e("[object Function]"),c=e("[object RegExp]"),s=e("element"),f=e("nan"),d=e("infinite"),j=e("[object Symbol]"),a=Object.freeze(Object.defineProperty({__proto__:null,isArray:o,isBoolean:l,isDefined:e=>null!=e,isElement:s,isFunction:b,isInfinite:d,isNaN:f,isNull:n,isNumber:u,isObject:i,isRegExp:c,isString:r,isSymbol:j,isUndefined:t},Symbol.toStringTag,{value:"Module"}));exports.typeGuard=a;
|
|
2
2
|
//# sourceMappingURL=type-guard.cjs.map
|
package/type-guard.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-guard.cjs","sources":["../src/type-guard/_exports.ts"],"sourcesContent":["import type { AnyFunction, AnyObject } from 'yummies/utils/types';\n\nenum Type {\n Null = 'null',\n Undefined = 'undefined',\n NaN = 'nan',\n Object = '[object Object]',\n Array = '[object Array]',\n String = '[object String]',\n Number = '[object Number]',\n Boolean = '[object Boolean]',\n Function = '[object Function]',\n RegExp = '[object RegExp]',\n Symbol = '[object Symbol]',\n Infinite = 'infinite',\n Element = 'element',\n}\n\nfunction getType(value: unknown): Type {\n if (value === undefined) {\n return Type.Undefined;\n }\n if (value === null) {\n return Type.Null;\n }\n\n // handle DOM elements\n // @ts-expect-error\n if (value && (value.nodeType === 1 || value.nodeType === 9)) {\n return Type.Element;\n }\n\n const stringifiedValue = Object.prototype.toString.call(value);\n\n // handle NaN and Infinity\n if (stringifiedValue === Type.Number) {\n if (Number.isNaN(value as number)) {\n return Type.NaN;\n }\n if (!Number.isFinite(value as number)) {\n return Type.Infinite;\n }\n }\n\n return stringifiedValue as Type;\n}\n\nconst createTypeGuard =\n <T>(type: Type) =>\n (value: unknown): value is T =>\n getType(value) === type;\n\n/**\n * Check if a value is not null or undefined\n * @param value the value to check\n * @returns boolean\n */\nexport const isDefined = <T>(value: T | undefined | null): value is T =>\n value != null;\n\n/**\n * Check if a value is null\n * @param value the value to check\n * @returns boolean\n */\nexport const isNull = createTypeGuard<null>(Type.Null);\n\n/**\n * Check if a value is undefined\n * @param value the value to check\n * @returns boolean\n */\nexport const isUndefined = createTypeGuard<undefined>(Type.Undefined);\n\n/**\n * Check if a value is an object\n * @param value the value to check\n * @returns boolean\n */\nexport const isObject = createTypeGuard<AnyObject>(Type.Object);\n\n/**\n * Check if a value is an array\n * @param value the value to check\n * @returns boolean\n */\nexport const isArray = createTypeGuard<unknown[]>(Type.Array);\n\n/**\n * Check if a value is a string\n * @param value the value to check\n * @returns boolean\n */\nexport const isString = createTypeGuard<string>(Type.String);\n\n/**\n * Check if a value is a number\n * @param value the value to check\n * @returns boolean\n */\nexport const isNumber = createTypeGuard<number>(Type.Number);\n\n/**\n * Check if a value is a boolean\n * @param value the value to check\n * @returns boolean\n */\nexport const isBoolean = createTypeGuard<boolean>(Type.Boolean);\n\n/**\n * Check if a value is a function\n * @param value the value to check\n * @returns boolean\n */\nexport const isFunction = createTypeGuard<AnyFunction>(Type.Function);\n\n/**\n * Check if a value is a regular expression\n * @param value the value to check\n * @returns boolean\n */\nexport const isRegExp = createTypeGuard<RegExp>(Type.RegExp);\n\n/**\n * Check if a value is a DOM element\n * @param value the value to check\n * @returns boolean\n */\nexport const isElement = createTypeGuard<HTMLElement>(Type.Element);\n\n/**\n * Check if a value is NaN\n * @param value the value to check\n * @returns boolean\n */\nexport const isNaN = createTypeGuard<number>(Type.NaN) as (\n value: unknown,\n) => boolean;\n\n/**\n * Check if a value is infinity\n * @param value the value to check\n * @returns boolean\n */\nexport const isInfinite = createTypeGuard<number>(Type.Infinite) as (\n value: unknown,\n) => boolean;\n\n/**\n * Check if a value is a symbol\n * @param value the value to check\n * @returns boolean\n */\nexport const isSymbol = createTypeGuard<symbol>(Type.Symbol);\n"],"names":["
|
|
1
|
+
{"version":3,"file":"type-guard.cjs","sources":["../src/type-guard/_exports.ts"],"sourcesContent":["import type { AnyFunction, AnyObject } from 'yummies/utils/types';\n\nenum Type {\n Null = 'null',\n Undefined = 'undefined',\n NaN = 'nan',\n Object = '[object Object]',\n Array = '[object Array]',\n String = '[object String]',\n Number = '[object Number]',\n Boolean = '[object Boolean]',\n Function = '[object Function]',\n RegExp = '[object RegExp]',\n Symbol = '[object Symbol]',\n Infinite = 'infinite',\n Element = 'element',\n}\n\nfunction getType(value: unknown): Type {\n if (value === undefined) {\n return Type.Undefined;\n }\n if (value === null) {\n return Type.Null;\n }\n\n // handle DOM elements\n // @ts-expect-error\n if (value && (value.nodeType === 1 || value.nodeType === 9)) {\n return Type.Element;\n }\n\n const stringifiedValue = Object.prototype.toString.call(value);\n\n // handle NaN and Infinity\n if (stringifiedValue === Type.Number) {\n if (Number.isNaN(value as number)) {\n return Type.NaN;\n }\n if (!Number.isFinite(value as number)) {\n return Type.Infinite;\n }\n }\n\n return stringifiedValue as Type;\n}\n\nconst createTypeGuard =\n <T>(type: Type) =>\n (value: unknown): value is T =>\n getType(value) === type;\n\n/**\n * Check if a value is not null or undefined\n * @param value the value to check\n * @returns boolean\n */\nexport const isDefined = <T>(value: T | undefined | null): value is T =>\n value != null;\n\n/**\n * Check if a value is null\n * @param value the value to check\n * @returns boolean\n */\nexport const isNull = createTypeGuard<null>(Type.Null);\n\n/**\n * Check if a value is undefined\n * @param value the value to check\n * @returns boolean\n */\nexport const isUndefined = createTypeGuard<undefined>(Type.Undefined);\n\n/**\n * Check if a value is an object\n * @param value the value to check\n * @returns boolean\n */\nexport const isObject = createTypeGuard<AnyObject>(Type.Object);\n\n/**\n * Check if a value is an array\n * @param value the value to check\n * @returns boolean\n */\nexport const isArray = createTypeGuard<unknown[]>(Type.Array);\n\n/**\n * Check if a value is a string\n * @param value the value to check\n * @returns boolean\n */\nexport const isString = createTypeGuard<string>(Type.String);\n\n/**\n * Check if a value is a number\n * @param value the value to check\n * @returns boolean\n */\nexport const isNumber = createTypeGuard<number>(Type.Number);\n\n/**\n * Check if a value is a boolean\n * @param value the value to check\n * @returns boolean\n */\nexport const isBoolean = createTypeGuard<boolean>(Type.Boolean);\n\n/**\n * Check if a value is a function\n * @param value the value to check\n * @returns boolean\n */\nexport const isFunction = createTypeGuard<AnyFunction>(Type.Function);\n\n/**\n * Check if a value is a regular expression\n * @param value the value to check\n * @returns boolean\n */\nexport const isRegExp = createTypeGuard<RegExp>(Type.RegExp);\n\n/**\n * Check if a value is a DOM element\n * @param value the value to check\n * @returns boolean\n */\nexport const isElement = createTypeGuard<HTMLElement>(Type.Element);\n\n/**\n * Check if a value is NaN\n * @param value the value to check\n * @returns boolean\n */\nexport const isNaN = createTypeGuard<number>(Type.NaN) as (\n value: unknown,\n) => boolean;\n\n/**\n * Check if a value is infinity\n * @param value the value to check\n * @returns boolean\n */\nexport const isInfinite = createTypeGuard<number>(Type.Infinite) as (\n value: unknown,\n) => boolean;\n\n/**\n * Check if a value is a symbol\n * @param value the value to check\n * @returns boolean\n */\nexport const isSymbol = createTypeGuard<symbol>(Type.Symbol);\n"],"names":["createTypeGuard","type","value","nodeType","stringifiedValue","Object","prototype","toString","call","Number","isNaN","isFinite","getType","isNull","isUndefined","isObject","isArray","isString","isNumber","isBoolean","isFunction","isRegExp","isElement","isInfinite","isSymbol"],"mappings":"gFA+CA,MAAMA,EACAC,GACHC,GA/BH,SAAiBA,GACf,QAAc,IAAVA,EACF,MAAO,YAET,GAAc,OAAVA,EACF,MAAO,OAKT,GAAIA,IAA6B,IAAnBA,EAAMC,UAAqC,IAAnBD,EAAMC,UAC1C,MAAO,UAGT,MAAMC,EAAmBC,OAAOC,UAAUC,SAASC,KAAKN,GAGxD,GAAyB,oBAArBE,EAAkC,CACpC,GAAIK,OAAOC,MAAMR,GACf,MAAO,MAET,IAAKO,OAAOE,SAAST,GACnB,MAAO,UAEX,CAEA,OAAOE,CACT,CAKIQ,CAAQV,KAAWD,EAeVY,EAASb,EAAsB,QAO/Bc,EAAcd,EAA2B,aAOzCe,EAAWf,EAA2B,mBAOtCgB,EAAUhB,EAA2B,kBAOrCiB,EAAWjB,EAAwB,mBAOnCkB,EAAWlB,EAAwB,mBAOnCmB,EAAYnB,EAAyB,oBAOrCoB,EAAapB,EAA6B,qBAO1CqB,EAAWrB,EAAwB,mBAOnCsB,EAAYtB,EAA6B,WAOzCU,EAAQV,EAAwB,OAShCuB,EAAavB,EAAwB,YASrCwB,EAAWxB,EAAwB,yGAhGnBE,GAClB,MAATA"}
|