yummies 5.7.1 → 5.8.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.js +26 -59
- package/async.js.map +1 -0
- package/common.d.ts +1 -1
- package/common.d.ts.map +1 -1
- package/common.js +5 -13
- package/common.js.map +1 -0
- package/complex/global-config.d.ts +1 -1
- package/complex/global-config.d.ts.map +1 -1
- package/complex/index.d.ts +3 -3
- package/complex/index.d.ts.map +1 -1
- package/complex/modules-factory.d.ts +1 -1
- package/complex/modules-factory.d.ts.map +1 -1
- package/complex.js +66 -0
- package/complex.js.map +1 -0
- package/cookie.d.ts +1 -1
- package/cookie.d.ts.map +1 -1
- package/cookie.js +4 -8
- package/cookie.js.map +1 -0
- package/css.d.ts +1 -1
- package/css.js +2780 -49
- package/css.js.map +1 -0
- package/data.js +32 -50
- package/data.js.map +1 -0
- package/date-time.d.ts +2 -3
- package/date-time.d.ts.map +1 -1
- package/date-time.js +588 -154
- package/date-time.js.map +1 -0
- package/device.js +23 -20
- package/device.js.map +1 -0
- package/encodings.js +269 -265
- package/encodings.js.map +1 -0
- package/errors.d.ts +1 -1
- package/errors.d.ts.map +1 -1
- package/errors.js +8 -29
- package/errors.js.map +1 -0
- package/file.js +19 -23
- package/file.js.map +1 -0
- package/format/_exports.d.ts +4 -4
- package/format/_exports.d.ts.map +1 -1
- package/format/index.d.ts +1 -1
- package/format/index.d.ts.map +1 -1
- package/format/number.d.ts +1 -1
- package/format/number.d.ts.map +1 -1
- package/format/percent.d.ts +2 -2
- package/format/percent.d.ts.map +1 -1
- package/format.js +27 -0
- package/format.js.map +1 -0
- package/html.d.ts +2 -2
- package/html.d.ts.map +1 -1
- package/html.js +636 -169
- package/html.js.map +1 -0
- package/id.js +25 -70
- package/id.js.map +1 -0
- package/imports.js +22 -37
- package/imports.js.map +1 -0
- package/math.d.ts +1 -1
- package/math.d.ts.map +1 -1
- package/math.js +10 -14
- package/math.js.map +1 -0
- package/media.js +54 -96
- package/media.js.map +1 -0
- package/mobx/apply-observable.d.ts +1 -1
- package/mobx/apply-observable.d.ts.map +1 -1
- package/mobx/create-enhanced-atom.d.ts +2 -2
- package/mobx/create-enhanced-atom.d.ts.map +1 -1
- package/mobx/deep-observable-struct.d.ts +1 -1
- package/mobx/deep-observable-struct.d.ts.map +1 -1
- package/mobx/get-mobx-administration.d.ts +2 -2
- package/mobx/get-mobx-administration.d.ts.map +1 -1
- package/mobx/index.d.ts +5 -5
- package/mobx/index.d.ts.map +1 -1
- package/mobx.js +89 -0
- package/mobx.js.map +1 -0
- package/ms.js +12 -17
- package/ms.js.map +1 -0
- package/number.js +9 -12
- package/number.js.map +1 -0
- package/package.json +93 -92
- package/parser/_exports.d.ts +3 -3
- package/parser/_exports.d.ts.map +1 -1
- package/parser/index.d.ts +1 -1
- package/parser/index.d.ts.map +1 -1
- package/parser/number.d.ts +1 -1
- package/parser/number.d.ts.map +1 -1
- package/parser/percent.d.ts +2 -2
- package/parser/percent.d.ts.map +1 -1
- package/parser/string.d.ts +1 -1
- package/parser/string.d.ts.map +1 -1
- package/parser.js +15 -0
- package/parser.js.map +1 -0
- package/price.js +13 -16
- package/price.js.map +1 -0
- package/random.js +11 -13
- package/random.js.map +1 -0
- package/react/hooks/index.d.ts +21 -21
- package/react/hooks/index.d.ts.map +1 -1
- package/react/hooks/use-click-outside.d.ts +1 -1
- package/react/hooks/use-define-ref.d.ts +1 -1
- package/react/hooks/use-element-ref.d.ts +1 -1
- package/react/hooks/use-event.d.ts +1 -1
- package/react/hooks/use-event.d.ts.map +1 -1
- package/react/hooks/use-initial-height.d.ts +1 -1
- package/react/hooks/use-last-value-ref.d.ts +1 -1
- package/react/hooks/use-resize-observer.d.ts +1 -1
- package/react/hooks/use-sync-ref.d.ts +1 -1
- package/react/hooks/use-toggle.d.ts +1 -1
- package/react/hooks/use-value.d.ts +1 -1
- package/react/index.d.ts +1 -1
- package/react/index.d.ts.map +1 -1
- package/react.js +152 -0
- package/react.js.map +1 -0
- package/sound.js +7 -11
- package/sound.js.map +1 -0
- package/text.js +20 -46
- package/text.js.map +1 -0
- package/type-guard/_exports.d.ts +1 -1
- package/type-guard/_exports.d.ts.map +1 -1
- package/type-guard/index.d.ts +1 -1
- package/type-guard/index.d.ts.map +1 -1
- package/type-guard.js +5 -0
- package/type-guard.js.map +1 -0
- package/utility-types.d.ts.map +1 -0
- package/utility-types.js +2 -0
- package/utility-types.js.map +1 -0
- package/utils/types.js +2 -1
- package/utils/types.js.map +1 -0
- package/vibrate.js +6 -7
- package/vibrate.js.map +1 -0
- package/~index-C3wKHvHr.js +80 -0
- package/~index-C3wKHvHr.js.map +1 -0
- package/~number-EWff2XI6.js +25 -0
- package/~number-EWff2XI6.js.map +1 -0
- package/~number-baxVnzrJ.js +32 -0
- package/~number-baxVnzrJ.js.map +1 -0
- package/async.cjs +0 -70
- package/async.d.cts +0 -28
- package/async.d.cts.map +0 -1
- package/common.cjs +0 -18
- package/common.d.cts +0 -15
- package/common.d.cts.map +0 -1
- package/complex/counter.cjs +0 -21
- package/complex/counter.d.cts +0 -15
- package/complex/counter.d.cts.map +0 -1
- package/complex/counter.js +0 -17
- package/complex/global-config.cjs +0 -46
- package/complex/global-config.d.cts +0 -11
- package/complex/global-config.d.cts.map +0 -1
- package/complex/global-config.js +0 -41
- package/complex/index.cjs +0 -19
- package/complex/index.d.cts +0 -4
- package/complex/index.d.cts.map +0 -1
- package/complex/index.js +0 -3
- package/complex/modules-factory.cjs +0 -50
- package/complex/modules-factory.d.cts +0 -49
- package/complex/modules-factory.d.cts.map +0 -1
- package/complex/modules-factory.js +0 -46
- package/cookie.cjs +0 -13
- package/cookie.d.cts +0 -3
- package/cookie.d.cts.map +0 -1
- package/css.cjs +0 -64
- package/css.d.cts +0 -42
- package/css.d.cts.map +0 -1
- package/data.cjs +0 -58
- package/data.d.cts +0 -4
- package/data.d.cts.map +0 -1
- package/date-time.cjs +0 -171
- package/date-time.d.cts +0 -28
- package/date-time.d.cts.map +0 -1
- package/device.cjs +0 -28
- package/device.d.cts +0 -8
- package/device.d.cts.map +0 -1
- package/encodings.cjs +0 -270
- package/encodings.d.cts +0 -2
- package/encodings.d.cts.map +0 -1
- package/errors.cjs +0 -34
- package/errors.d.cts +0 -19
- package/errors.d.cts.map +0 -1
- package/file.cjs +0 -29
- package/file.d.cts +0 -3
- package/file.d.cts.map +0 -1
- package/format/_exports.cjs +0 -20
- package/format/_exports.d.cts +0 -5
- package/format/_exports.d.cts.map +0 -1
- package/format/_exports.js +0 -4
- package/format/constants.cjs +0 -6
- package/format/constants.d.cts +0 -4
- package/format/constants.d.cts.map +0 -1
- package/format/constants.js +0 -3
- package/format/index.cjs +0 -40
- package/format/index.d.cts +0 -3
- package/format/index.d.cts.map +0 -1
- package/format/index.js +0 -4
- package/format/number.cjs +0 -48
- package/format/number.d.cts +0 -36
- package/format/number.d.cts.map +0 -1
- package/format/number.js +0 -44
- package/format/percent.cjs +0 -27
- package/format/percent.d.cts +0 -15
- package/format/percent.d.cts.map +0 -1
- package/format/percent.js +0 -23
- package/format/skip-spaces.cjs +0 -8
- package/format/skip-spaces.d.cts +0 -5
- package/format/skip-spaces.d.cts.map +0 -1
- package/format/skip-spaces.js +0 -4
- package/html.cjs +0 -202
- package/html.d.cts +0 -44
- package/html.d.cts.map +0 -1
- package/id.cjs +0 -76
- package/id.d.cts +0 -63
- package/id.d.cts.map +0 -1
- package/imports.cjs +0 -45
- package/imports.d.cts +0 -15
- package/imports.d.cts.map +0 -1
- package/math.cjs +0 -23
- package/math.d.cts +0 -13
- package/math.d.cts.map +0 -1
- package/media.cjs +0 -115
- package/media.d.cts +0 -20
- package/media.d.cts.map +0 -1
- package/mobx/apply-observable.cjs +0 -16
- package/mobx/apply-observable.d.cts +0 -4
- package/mobx/apply-observable.d.cts.map +0 -1
- package/mobx/apply-observable.js +0 -12
- package/mobx/create-enhanced-atom.cjs +0 -16
- package/mobx/create-enhanced-atom.d.cts +0 -11
- package/mobx/create-enhanced-atom.d.cts.map +0 -1
- package/mobx/create-enhanced-atom.js +0 -12
- package/mobx/deep-observable-struct.cjs +0 -61
- package/mobx/deep-observable-struct.d.cts +0 -7
- package/mobx/deep-observable-struct.d.cts.map +0 -1
- package/mobx/deep-observable-struct.js +0 -57
- package/mobx/get-mobx-administration.cjs +0 -6
- package/mobx/get-mobx-administration.d.cts +0 -6
- package/mobx/get-mobx-administration.d.cts.map +0 -1
- package/mobx/get-mobx-administration.js +0 -2
- package/mobx/index.cjs +0 -21
- package/mobx/index.d.cts +0 -6
- package/mobx/index.d.cts.map +0 -1
- package/mobx/index.js +0 -5
- package/mobx/lazy-observe.cjs +0 -66
- package/mobx/lazy-observe.d.cts +0 -14
- package/mobx/lazy-observe.d.cts.map +0 -1
- package/mobx/lazy-observe.js +0 -62
- package/ms.cjs +0 -22
- package/ms.d.cts +0 -19
- package/ms.d.cts.map +0 -1
- package/number.cjs +0 -16
- package/number.d.cts +0 -8
- package/number.d.cts.map +0 -1
- package/parser/_exports.cjs +0 -19
- package/parser/_exports.d.cts +0 -4
- package/parser/_exports.d.cts.map +0 -1
- package/parser/_exports.js +0 -3
- package/parser/index.cjs +0 -40
- package/parser/index.d.cts +0 -3
- package/parser/index.d.cts.map +0 -1
- package/parser/index.js +0 -4
- package/parser/number.cjs +0 -48
- package/parser/number.d.cts +0 -21
- package/parser/number.d.cts.map +0 -1
- package/parser/number.js +0 -44
- package/parser/percent.cjs +0 -8
- package/parser/percent.d.cts +0 -4
- package/parser/percent.d.cts.map +0 -1
- package/parser/percent.js +0 -4
- package/parser/string.cjs +0 -18
- package/parser/string.d.cts +0 -7
- package/parser/string.d.cts.map +0 -1
- package/parser/string.js +0 -14
- package/price.cjs +0 -21
- package/price.d.cts +0 -6
- package/price.d.cts.map +0 -1
- package/random.cjs +0 -25
- package/random.d.cts +0 -9
- package/random.d.cts.map +0 -1
- package/react/hooks/index.cjs +0 -37
- package/react/hooks/index.d.cts +0 -22
- package/react/hooks/index.d.cts.map +0 -1
- package/react/hooks/index.js +0 -21
- package/react/hooks/use-abort-controller.cjs +0 -15
- package/react/hooks/use-abort-controller.d.cts +0 -2
- package/react/hooks/use-abort-controller.d.cts.map +0 -1
- package/react/hooks/use-abort-controller.js +0 -11
- package/react/hooks/use-abort-signal.cjs +0 -8
- package/react/hooks/use-abort-signal.d.cts +0 -2
- package/react/hooks/use-abort-signal.d.cts.map +0 -1
- package/react/hooks/use-abort-signal.js +0 -4
- package/react/hooks/use-click-outside.cjs +0 -17
- package/react/hooks/use-click-outside.d.cts +0 -9
- package/react/hooks/use-click-outside.d.cts.map +0 -1
- package/react/hooks/use-click-outside.js +0 -13
- package/react/hooks/use-constant.cjs +0 -19
- package/react/hooks/use-constant.d.cts +0 -9
- package/react/hooks/use-constant.d.cts.map +0 -1
- package/react/hooks/use-constant.js +0 -15
- package/react/hooks/use-define-ref.cjs +0 -19
- package/react/hooks/use-define-ref.d.cts +0 -10
- package/react/hooks/use-define-ref.d.cts.map +0 -1
- package/react/hooks/use-define-ref.js +0 -15
- package/react/hooks/use-element-ref.cjs +0 -12
- package/react/hooks/use-element-ref.d.cts +0 -2
- package/react/hooks/use-element-ref.d.cts.map +0 -1
- package/react/hooks/use-element-ref.js +0 -8
- package/react/hooks/use-event-listener.cjs +0 -17
- package/react/hooks/use-event-listener.d.cts +0 -8
- package/react/hooks/use-event-listener.d.cts.map +0 -1
- package/react/hooks/use-event-listener.js +0 -13
- package/react/hooks/use-event.cjs +0 -23
- package/react/hooks/use-event.d.cts +0 -3
- package/react/hooks/use-event.d.cts.map +0 -1
- package/react/hooks/use-event.js +0 -19
- package/react/hooks/use-flag.cjs +0 -19
- package/react/hooks/use-flag.d.cts +0 -8
- package/react/hooks/use-flag.d.cts.map +0 -1
- package/react/hooks/use-flag.js +0 -15
- package/react/hooks/use-force-update.cjs +0 -11
- package/react/hooks/use-force-update.d.cts +0 -2
- package/react/hooks/use-force-update.d.cts.map +0 -1
- package/react/hooks/use-force-update.js +0 -7
- package/react/hooks/use-initial-height.cjs +0 -15
- package/react/hooks/use-initial-height.d.cts +0 -5
- package/react/hooks/use-initial-height.d.cts.map +0 -1
- package/react/hooks/use-initial-height.js +0 -11
- package/react/hooks/use-instance.cjs +0 -31
- package/react/hooks/use-instance.d.cts +0 -27
- package/react/hooks/use-instance.d.cts.map +0 -1
- package/react/hooks/use-instance.js +0 -27
- package/react/hooks/use-intersection-observer.cjs +0 -14
- package/react/hooks/use-intersection-observer.d.cts +0 -2
- package/react/hooks/use-intersection-observer.d.cts.map +0 -1
- package/react/hooks/use-intersection-observer.js +0 -10
- package/react/hooks/use-last-defined-value.cjs +0 -12
- package/react/hooks/use-last-defined-value.d.cts +0 -2
- package/react/hooks/use-last-defined-value.d.cts.map +0 -1
- package/react/hooks/use-last-defined-value.js +0 -8
- package/react/hooks/use-last-value-ref.cjs +0 -12
- package/react/hooks/use-last-value-ref.d.cts +0 -2
- package/react/hooks/use-last-value-ref.d.cts.map +0 -1
- package/react/hooks/use-last-value-ref.js +0 -8
- package/react/hooks/use-life-cycle.cjs +0 -14
- package/react/hooks/use-life-cycle.d.cts +0 -5
- package/react/hooks/use-life-cycle.d.cts.map +0 -1
- package/react/hooks/use-life-cycle.js +0 -10
- package/react/hooks/use-resize-observer.cjs +0 -15
- package/react/hooks/use-resize-observer.d.cts +0 -2
- package/react/hooks/use-resize-observer.d.cts.map +0 -1
- package/react/hooks/use-resize-observer.js +0 -11
- package/react/hooks/use-sync-ref.cjs +0 -10
- package/react/hooks/use-sync-ref.d.cts +0 -2
- package/react/hooks/use-sync-ref.d.cts.map +0 -1
- package/react/hooks/use-sync-ref.js +0 -6
- package/react/hooks/use-toggle.cjs +0 -10
- package/react/hooks/use-toggle.d.cts +0 -2
- package/react/hooks/use-toggle.d.cts.map +0 -1
- package/react/hooks/use-toggle.js +0 -6
- package/react/hooks/use-value.cjs +0 -12
- package/react/hooks/use-value.d.cts +0 -5
- package/react/hooks/use-value.d.cts.map +0 -1
- package/react/hooks/use-value.js +0 -8
- package/react/hooks/use-visibility-state.cjs +0 -18
- package/react/hooks/use-visibility-state.d.cts +0 -2
- package/react/hooks/use-visibility-state.d.cts.map +0 -1
- package/react/hooks/use-visibility-state.js +0 -14
- package/react/index.cjs +0 -17
- package/react/index.d.cts +0 -2
- package/react/index.d.cts.map +0 -1
- package/react/index.js +0 -1
- package/sound.cjs +0 -16
- package/sound.d.cts +0 -7
- package/sound.d.cts.map +0 -1
- package/storage.cjs +0 -48
- package/storage.d.cts +0 -39
- package/storage.d.cts.map +0 -1
- package/storage.js +0 -43
- package/text.cjs +0 -53
- package/text.d.cts +0 -15
- package/text.d.cts.map +0 -1
- package/type-guard/_exports.cjs +0 -129
- package/type-guard/_exports.d.cts +0 -86
- package/type-guard/_exports.d.cts.map +0 -1
- package/type-guard/_exports.js +0 -125
- package/type-guard/index.cjs +0 -40
- package/type-guard/index.d.cts +0 -3
- package/type-guard/index.d.cts.map +0 -1
- package/type-guard/index.js +0 -4
- package/utils/types.cjs +0 -2
- package/utils/types.d.cts +0 -395
- package/utils/types.d.cts.map +0 -1
- package/vibrate.cjs +0 -12
- package/vibrate.d.cts +0 -5
- package/vibrate.d.cts.map +0 -1
package/media.js
CHANGED
|
@@ -1,103 +1,61 @@
|
|
|
1
|
-
import { degToRad } from "
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
reader.readAsDataURL(blob);
|
|
8
|
-
});
|
|
1
|
+
import { degToRad as m } from "yummies/math";
|
|
2
|
+
function y(t) {
|
|
3
|
+
return new Promise((o, a) => {
|
|
4
|
+
const e = new FileReader();
|
|
5
|
+
e.onloadend = () => o(e.result), e.onerror = a, e.readAsDataURL(t);
|
|
6
|
+
});
|
|
9
7
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const base64data = dataUri.split(',')[1];
|
|
21
|
-
const base64MimeType = dataUri.split(';')[0].slice(5);
|
|
22
|
-
const bytes = globalThis.atob(base64data);
|
|
23
|
-
const buf = new ArrayBuffer(bytes.length);
|
|
24
|
-
const array = new Uint8Array(buf);
|
|
25
|
-
for (let index = 0; index < bytes.length; index++) {
|
|
26
|
-
array[index] = bytes.charCodeAt(index);
|
|
27
|
-
}
|
|
28
|
-
const blob = new Blob([array], { type: base64MimeType });
|
|
29
|
-
return blob;
|
|
30
|
-
};
|
|
31
|
-
/**
|
|
32
|
-
* Загружает и отрисовывает изображение с использованием Image
|
|
33
|
-
*
|
|
34
|
-
* @returns {Promise<HTMLImageElement>}
|
|
35
|
-
*/
|
|
36
|
-
export const renderImage = (urlOrBlob) => new Promise((resolve, reject) => {
|
|
37
|
-
const image = new Image();
|
|
38
|
-
image.src = blobToUrl(urlOrBlob);
|
|
39
|
-
image.onload = () => resolve(image);
|
|
40
|
-
image.onerror = () => reject();
|
|
8
|
+
const p = (t) => t instanceof Blob ? URL.createObjectURL(t) : t, f = (t) => new Blob([t], { type: t.type }), I = (t, o = "image/png") => {
|
|
9
|
+
const a = document.createElement("canvas");
|
|
10
|
+
a.width = t.naturalWidth || 300, a.height = t.naturalHeight || 300, a.getContext("2d").drawImage(t, 0, 0);
|
|
11
|
+
const e = a.toDataURL(o, 1), n = e.split(",")[1], h = e.split(";")[0].slice(5), s = globalThis.atob(n), r = new ArrayBuffer(s.length), i = new Uint8Array(r);
|
|
12
|
+
for (let c = 0; c < s.length; c++)
|
|
13
|
+
i[c] = s.charCodeAt(c);
|
|
14
|
+
return new Blob([i], { type: h });
|
|
15
|
+
}, w = (t) => new Promise((o, a) => {
|
|
16
|
+
const e = new Image();
|
|
17
|
+
e.src = p(t), e.onload = () => o(e), e.onerror = () => a();
|
|
41
18
|
});
|
|
42
|
-
function
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
pix.x.push(x);
|
|
56
|
-
pix.y.push(y);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
pix.x.sort((a, b) => a - b);
|
|
61
|
-
pix.y.sort((a, b) => a - b);
|
|
62
|
-
const n = pix.x.length - 1;
|
|
63
|
-
w = 1 + pix.x[n] - pix.x[0];
|
|
64
|
-
h = 1 + pix.y[n] - pix.y[0];
|
|
65
|
-
const cut = context.getImageData(pix.x[0], pix.y[0], w, h);
|
|
66
|
-
canvas.width = w;
|
|
67
|
-
canvas.height = h;
|
|
68
|
-
context.putImageData(cut, 0, 0);
|
|
69
|
-
return canvas;
|
|
19
|
+
function b(t) {
|
|
20
|
+
const o = t.canvas;
|
|
21
|
+
let a = o.width, e = o.height;
|
|
22
|
+
const n = { x: [], y: [] }, h = t.getImageData(0, 0, o.width, o.height);
|
|
23
|
+
let s, r, i;
|
|
24
|
+
for (r = 0; r < e; r++)
|
|
25
|
+
for (s = 0; s < a; s++)
|
|
26
|
+
i = (r * a + s) * 4, h.data[i + 3] > 0 && (n.x.push(s), n.y.push(r));
|
|
27
|
+
n.x.sort((g, l) => g - l), n.y.sort((g, l) => g - l);
|
|
28
|
+
const d = n.x.length - 1;
|
|
29
|
+
a = 1 + n.x[d] - n.x[0], e = 1 + n.y[d] - n.y[0];
|
|
30
|
+
const c = t.getImageData(n.x[0], n.y[0], a, e);
|
|
31
|
+
return o.width = a, o.height = e, t.putImageData(c, 0, 0), o;
|
|
70
32
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
canvas.height = maxSize;
|
|
77
|
-
const context = canvas.getContext('2d');
|
|
78
|
-
context.save();
|
|
79
|
-
context.translate(canvas.width / 2, canvas.height / 2);
|
|
80
|
-
context.rotate(degToRad(angle));
|
|
81
|
-
context.drawImage(image, -image.width / 2, -image.height / 2);
|
|
82
|
-
context.restore();
|
|
83
|
-
cropImageFromCanvas(context);
|
|
84
|
-
return renderImage(canvas.toDataURL('image/png'));
|
|
33
|
+
const U = (t, o) => {
|
|
34
|
+
const a = Math.max(t.width, t.height), e = document.createElement("canvas");
|
|
35
|
+
e.width = a, e.height = a;
|
|
36
|
+
const n = e.getContext("2d");
|
|
37
|
+
return n.save(), n.translate(e.width / 2, e.height / 2), n.rotate(m(o)), n.drawImage(t, -t.width / 2, -t.height / 2), n.restore(), b(n), w(e.toDataURL("image/png"));
|
|
85
38
|
};
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
return {
|
|
93
|
-
mimeType: matches?.[1],
|
|
94
|
-
data: matches?.[2],
|
|
95
|
-
};
|
|
39
|
+
function u(t) {
|
|
40
|
+
const o = /^data:(.*);base64,\s?(.*)$/, a = new RegExp(o).exec(t);
|
|
41
|
+
return {
|
|
42
|
+
mimeType: a?.[1],
|
|
43
|
+
data: a?.[2]
|
|
44
|
+
};
|
|
96
45
|
}
|
|
97
|
-
|
|
98
|
-
|
|
46
|
+
const T = (t) => t.startsWith("https://") || t.startsWith("http://"), v = (t) => {
|
|
47
|
+
const { mimeType: o, data: a } = u(t);
|
|
48
|
+
return !!(a && o?.startsWith("image/"));
|
|
99
49
|
};
|
|
100
|
-
export
|
|
101
|
-
|
|
102
|
-
|
|
50
|
+
export {
|
|
51
|
+
y as blobToBase64,
|
|
52
|
+
p as blobToUrl,
|
|
53
|
+
u as decodeDataUrl,
|
|
54
|
+
f as fileToBlob,
|
|
55
|
+
I as imageToBlob,
|
|
56
|
+
v as isBase64Image,
|
|
57
|
+
T as isHttpUrl,
|
|
58
|
+
w as renderImage,
|
|
59
|
+
U as rotateImage
|
|
103
60
|
};
|
|
61
|
+
//# sourceMappingURL=media.js.map
|
package/media.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.js","sources":["../src/media.ts"],"sourcesContent":["import { degToRad } from 'yummies/math';\n\nexport function blobToBase64(blob: Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => resolve(reader.result as string);\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n });\n}\n\nexport const blobToUrl = (urlOrBlob: string | Blob) =>\n urlOrBlob instanceof Blob ? URL.createObjectURL(urlOrBlob) : urlOrBlob;\n\nexport const fileToBlob = (file: File) => {\n return new Blob([file], { type: file.type });\n};\n\nexport const imageToBlob = (\n imageElement: HTMLImageElement,\n mimeType: string = 'image/png',\n) => {\n const canvas = document.createElement('canvas');\n\n canvas.width = imageElement.naturalWidth || 300;\n canvas.height = imageElement.naturalHeight || 300;\n\n canvas.getContext('2d')!.drawImage(imageElement, 0, 0);\n\n const dataUri = canvas.toDataURL(mimeType, 1);\n const base64data = dataUri.split(',')[1];\n const base64MimeType = dataUri.split(';')[0].slice(5);\n\n const bytes = globalThis.atob(base64data);\n const buf = new ArrayBuffer(bytes.length);\n const array = new Uint8Array(buf);\n\n for (let index = 0; index < bytes.length; index++) {\n array[index] = bytes.charCodeAt(index);\n }\n\n const blob = new Blob([array], { type: base64MimeType });\n\n return blob;\n};\n\n/**\n * Загружает и отрисовывает изображение с использованием Image\n *\n * @returns {Promise<HTMLImageElement>}\n */\nexport const renderImage = (urlOrBlob: Blob | string) =>\n new Promise<HTMLImageElement>((resolve, reject) => {\n const image = new Image();\n image.src = blobToUrl(urlOrBlob);\n image.onload = () => resolve(image);\n image.onerror = () => reject();\n });\n\nfunction cropImageFromCanvas(context: CanvasRenderingContext2D) {\n const canvas = context.canvas;\n let w = canvas.width;\n let h = canvas.height;\n const pix: { x: number[]; y: number[] } = { x: [], y: [] };\n const imageData = context.getImageData(0, 0, canvas.width, canvas.height);\n let x: number;\n let y: number;\n let index: number;\n\n for (y = 0; y < h; y++) {\n for (x = 0; x < w; x++) {\n index = (y * w + x) * 4;\n if (imageData.data[index + 3] > 0) {\n pix.x.push(x);\n pix.y.push(y);\n }\n }\n }\n pix.x.sort((a, b) => a - b);\n pix.y.sort((a, b) => a - b);\n const n = pix.x.length - 1;\n\n w = 1 + pix.x[n] - pix.x[0];\n h = 1 + pix.y[n] - pix.y[0];\n const cut = context.getImageData(pix.x[0], pix.y[0], w, h);\n\n canvas.width = w;\n canvas.height = h;\n context.putImageData(cut, 0, 0);\n return canvas;\n}\n\n// TODO: ломает iphone с огромными изображениями\nexport const rotateImage = (image: HTMLImageElement, angle: number) => {\n const maxSize = Math.max(image.width, image.height);\n const canvas = document.createElement('canvas');\n canvas.width = maxSize;\n canvas.height = maxSize;\n const context = canvas.getContext('2d')!;\n context.save();\n context.translate(canvas.width / 2, canvas.height / 2);\n context.rotate(degToRad(angle));\n context.drawImage(image, -image.width / 2, -image.height / 2);\n context.restore();\n cropImageFromCanvas(context);\n return renderImage(canvas.toDataURL('image/png'));\n};\n\ninterface DecodedDataUrl {\n mimeType?: string;\n data?: string;\n}\n\n/*\n * Returning object which contains base64 data and mime type of passed data url string.\n * */\nexport function decodeDataUrl(url: string): DecodedDataUrl {\n const regex = /^data:(.*);base64,\\s?(.*)$/;\n const matches = new RegExp(regex).exec(url);\n\n return {\n mimeType: matches?.[1],\n data: matches?.[2],\n };\n}\n\nexport const isHttpUrl = (url: string): boolean => {\n return url.startsWith('https://') || url.startsWith('http://');\n};\n\nexport const isBase64Image = (str: string): boolean => {\n const { mimeType, data } = decodeDataUrl(str);\n return !!(data && mimeType?.startsWith('image/'));\n};\n"],"names":["blobToBase64","blob","resolve","reject","reader","blobToUrl","urlOrBlob","fileToBlob","file","imageToBlob","imageElement","mimeType","canvas","dataUri","base64data","base64MimeType","bytes","buf","array","index","renderImage","image","cropImageFromCanvas","context","w","h","pix","imageData","x","y","a","b","n","cut","rotateImage","angle","maxSize","degToRad","decodeDataUrl","url","regex","matches","isHttpUrl","isBase64Image","str","data"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { AnyObject } from '../utils/types.ts';
|
|
2
2
|
export type ObservableAnnotationsArray = [string, any][];
|
|
3
3
|
export declare const applyObservable: (context: AnyObject, annotationsArray: ObservableAnnotationsArray, useDecorators?: boolean) => void;
|
|
4
4
|
//# sourceMappingURL=apply-observable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply-observable.d.ts","sourceRoot":"","sources":["../../src/mobx/apply-observable.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"apply-observable.d.ts","sourceRoot":"","sources":["../../src/mobx/apply-observable.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,MAAM,0BAA0B,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;AAEzD,eAAO,MAAM,eAAe,GAC1B,SAAS,SAAS,EAClB,kBAAkB,0BAA0B,EAC5C,gBAAgB,OAAO,SAWxB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { IAtom } from 'mobx';
|
|
2
|
+
import { AnyObject } from '../utils/types.ts';
|
|
3
3
|
export interface IEnhancedAtom<TMeta extends AnyObject = AnyObject> extends IAtom {
|
|
4
4
|
meta: TMeta;
|
|
5
5
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-enhanced-atom.d.ts","sourceRoot":"","sources":["../../src/mobx/create-enhanced-atom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,KAAK,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"create-enhanced-atom.d.ts","sourceRoot":"","sources":["../../src/mobx/create-enhanced-atom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,KAAK,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,WAAW,aAAa,CAAC,KAAK,SAAS,SAAS,GAAG,SAAS,CAChE,SAAQ,KAAK;IACb,IAAI,EAAE,KAAK,CAAC;CACb;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,KAAK,SAAS,SAAS,EACxD,MAAM,MAAM,EACZ,0BAA0B,CAAC,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,IAAI,EAC9D,4BAA4B,CAAC,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,IAAI,EAChE,OAAO,KAAK,KACX,aAAa,CAAC,KAAK,CAUrB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deep-observable-struct.d.ts","sourceRoot":"","sources":["../../src/mobx/deep-observable-struct.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deep-observable-struct.d.ts","sourceRoot":"","sources":["../../src/mobx/deep-observable-struct.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGrD,qBAAa,oBAAoB,CAAC,KAAK,SAAS,SAAS;IACvD,IAAI,EAAE,KAAK,CAAC;gBAEA,IAAI,EAAE,KAAK;IASvB,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC;CAoD5B"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { AnnotationMapEntry } from 'mobx';
|
|
2
|
+
import { AnyObject } from '../utils/types.ts';
|
|
3
3
|
type ObservableObjectAdministration = Parameters<Exclude<AnnotationMapEntry, boolean>['make_']>[0];
|
|
4
4
|
export declare const getMobxAdministration: (context: AnyObject) => ObservableObjectAdministration;
|
|
5
5
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-mobx-administration.d.ts","sourceRoot":"","sources":["../../src/mobx/get-mobx-administration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,kBAAkB,EAAE,MAAM,MAAM,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"get-mobx-administration.d.ts","sourceRoot":"","sources":["../../src/mobx/get-mobx-administration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,kBAAkB,EAAE,MAAM,MAAM,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,KAAK,8BAA8B,GAAG,UAAU,CAC9C,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,CAC9C,CAAC,CAAC,CAAC,CAAC;AAEL,eAAO,MAAM,qBAAqB,GAChC,SAAS,SAAS,KACjB,8BAAgD,CAAC"}
|
package/mobx/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
4
|
-
export * from
|
|
5
|
-
export * from
|
|
1
|
+
export * from './apply-observable.js';
|
|
2
|
+
export * from './create-enhanced-atom.js';
|
|
3
|
+
export * from './deep-observable-struct.js';
|
|
4
|
+
export * from './get-mobx-administration.js';
|
|
5
|
+
export * from './lazy-observe.js';
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
package/mobx/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mobx/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mobx/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC"}
|
package/mobx.js
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { makeObservable as u, createAtom as k, action as j, observable as A, $mobx as E, onBecomeObserved as m, onBecomeUnobserved as v } from "mobx";
|
|
2
|
+
import { b as O } from "./~index-C3wKHvHr.js";
|
|
3
|
+
const V = (a, s, c) => {
|
|
4
|
+
c ? (s.forEach(([o, t]) => {
|
|
5
|
+
t(a, o);
|
|
6
|
+
}), u(a)) : u(a, Object.fromEntries(s));
|
|
7
|
+
}, C = (a, s, c, o) => {
|
|
8
|
+
const t = k(
|
|
9
|
+
a,
|
|
10
|
+
s && (() => s?.(t)),
|
|
11
|
+
c && (() => c?.(t))
|
|
12
|
+
);
|
|
13
|
+
return t.meta = o ?? {}, t.reportChanged = t.reportChanged.bind(t), t.reportObserved = t.reportObserved.bind(t), t;
|
|
14
|
+
};
|
|
15
|
+
class I {
|
|
16
|
+
data;
|
|
17
|
+
constructor(s) {
|
|
18
|
+
this.data = s, u(this, {
|
|
19
|
+
data: A.deep,
|
|
20
|
+
set: j
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
set(s) {
|
|
24
|
+
const c = Object.keys(this.data).map((e) => [
|
|
25
|
+
e,
|
|
26
|
+
this.data,
|
|
27
|
+
s
|
|
28
|
+
]);
|
|
29
|
+
let o = 0, t = c.length;
|
|
30
|
+
for (; o < t; ) {
|
|
31
|
+
const [e, r, n] = c[o], l = n[e], b = r[e];
|
|
32
|
+
if (o++, e in n)
|
|
33
|
+
if (O(l) && O(b)) {
|
|
34
|
+
const f = Object.keys(l);
|
|
35
|
+
Object.keys(b).forEach((d) => {
|
|
36
|
+
d in l || delete r[e][d];
|
|
37
|
+
}), f.forEach((d) => {
|
|
38
|
+
t = c.push([
|
|
39
|
+
d,
|
|
40
|
+
r[e],
|
|
41
|
+
l
|
|
42
|
+
]);
|
|
43
|
+
});
|
|
44
|
+
} else l !== b && (r[e] = l);
|
|
45
|
+
else
|
|
46
|
+
delete r[e];
|
|
47
|
+
}
|
|
48
|
+
Object.keys(s).forEach((e) => {
|
|
49
|
+
this.data[e] || (this.data[e] = s[e]);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const S = (a) => a[E], w = ({
|
|
54
|
+
context: a,
|
|
55
|
+
property: s,
|
|
56
|
+
onStart: c,
|
|
57
|
+
onEnd: o,
|
|
58
|
+
endDelay: t = !1
|
|
59
|
+
}) => {
|
|
60
|
+
let e, r;
|
|
61
|
+
const n = /* @__PURE__ */ new Set(), l = Array.isArray(s) ? s : [s], b = () => {
|
|
62
|
+
if (n.clear(), t === !1) {
|
|
63
|
+
o?.(r, b), r = void 0;
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
e && (clearTimeout(e), e = void 0), e = setTimeout(() => {
|
|
67
|
+
o?.(r, b), e = void 0, r = void 0;
|
|
68
|
+
}, t);
|
|
69
|
+
}, f = (i) => {
|
|
70
|
+
const h = n.size > 0;
|
|
71
|
+
n.add(i), !h && (e && (clearTimeout(e), e = void 0), r = c?.());
|
|
72
|
+
}, d = (i) => {
|
|
73
|
+
const h = !n.size;
|
|
74
|
+
n.delete(i);
|
|
75
|
+
const g = n.size > 0;
|
|
76
|
+
h || g || b();
|
|
77
|
+
};
|
|
78
|
+
return l.forEach((i) => {
|
|
79
|
+
a ? (m(a, i, () => f(i)), v(a, i, () => d(i))) : (m(i, () => f(i)), v(i, () => d(i)));
|
|
80
|
+
}), b;
|
|
81
|
+
};
|
|
82
|
+
export {
|
|
83
|
+
I as DeepObservableStruct,
|
|
84
|
+
V as applyObservable,
|
|
85
|
+
C as createEnhancedAtom,
|
|
86
|
+
S as getMobxAdministration,
|
|
87
|
+
w as lazyObserve
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=mobx.js.map
|
package/mobx.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mobx.js","sources":["../src/mobx/apply-observable.ts","../src/mobx/create-enhanced-atom.ts","../src/mobx/deep-observable-struct.ts","../src/mobx/get-mobx-administration.ts","../src/mobx/lazy-observe.ts"],"sourcesContent":["import { makeObservable } from 'mobx';\nimport type { AnyObject } from 'yummies/utils/types';\n\nexport type ObservableAnnotationsArray = [string, any][];\n\nexport const applyObservable = (\n context: AnyObject,\n annotationsArray: ObservableAnnotationsArray,\n useDecorators?: boolean,\n) => {\n if (useDecorators) {\n annotationsArray.forEach(([field, annotation]) => {\n annotation(context, field);\n });\n\n makeObservable(context);\n } else {\n makeObservable(context, Object.fromEntries(annotationsArray));\n }\n};\n","import { createAtom, type IAtom } from 'mobx';\nimport type { AnyObject } from 'yummies/utils/types';\n\nexport interface IEnhancedAtom<TMeta extends AnyObject = AnyObject>\n extends IAtom {\n meta: TMeta;\n}\n\n/**\n * Creates an enhanced atom with meta data\n * And bind `reportChanged` and `reportObserved` method to the atom\n */\nexport const createEnhancedAtom = <TMeta extends AnyObject>(\n name: string,\n onBecomeObservedHandler?: (atom: IEnhancedAtom<TMeta>) => void,\n onBecomeUnobservedHandler?: (atom: IEnhancedAtom<TMeta>) => void,\n meta?: TMeta,\n): IEnhancedAtom<TMeta> => {\n const atom = createAtom(\n name,\n onBecomeObservedHandler && (() => onBecomeObservedHandler?.(atom)),\n onBecomeUnobservedHandler && (() => onBecomeUnobservedHandler?.(atom)),\n ) as IEnhancedAtom<TMeta>;\n atom.meta = meta ?? ({} as TMeta);\n atom.reportChanged = atom.reportChanged.bind(atom);\n atom.reportObserved = atom.reportObserved.bind(atom);\n return atom;\n};\n","import { action, makeObservable, observable } from 'mobx';\nimport type { AnyObject } from 'yummies/utils/types';\nimport { typeGuard } from '../type-guard/index.js';\n\nexport class DeepObservableStruct<TData extends AnyObject> {\n data: TData;\n\n constructor(data: TData) {\n this.data = data;\n\n makeObservable(this, {\n data: observable.deep,\n set: action,\n });\n }\n\n set(newData: Partial<TData>) {\n type StackItem = [key: string, currObservable: AnyObject, new: AnyObject];\n\n const stack: StackItem[] = Object.keys(this.data).map((key) => [\n key,\n this.data,\n newData,\n ]);\n\n let currentIndex = 0;\n let stackLength = stack.length;\n\n while (currentIndex < stackLength) {\n const [key, currObservableData, newData] = stack[currentIndex];\n const newValue = newData[key];\n const currValue = currObservableData[key];\n\n currentIndex++;\n\n if (key in newData) {\n if (typeGuard.isObject(newValue) && typeGuard.isObject(currValue)) {\n const newValueKeys = Object.keys(newValue);\n\n Object.keys(currValue).forEach((childKey) => {\n if (!(childKey in newValue)) {\n delete currObservableData[key][childKey];\n }\n });\n\n newValueKeys.forEach((childKey) => {\n const length = stack.push([\n childKey,\n currObservableData[key],\n newValue,\n ]);\n stackLength = length;\n });\n } else if (newValue !== currValue) {\n currObservableData[key] = newValue;\n }\n } else {\n delete currObservableData[key];\n }\n }\n\n Object.keys(newData).forEach((newDataKey) => {\n if (!this.data[newDataKey]) {\n // @ts-expect-error\n this.data[newDataKey] = newData[newDataKey];\n }\n });\n }\n}\n","import { $mobx, type AnnotationMapEntry } from 'mobx';\nimport type { AnyObject } from 'yummies/utils/types';\n\ntype ObservableObjectAdministration = Parameters<\n Exclude<AnnotationMapEntry, boolean>['make_']\n>[0];\n\nexport const getMobxAdministration = (\n context: AnyObject,\n): ObservableObjectAdministration => context[$mobx];\n","import { onBecomeObserved, onBecomeUnobserved } from 'mobx';\n\n/**\n * When ONE OF the properties is becomes observed then `onStart` function is called.\n * WHen ALL properties are unobserved then `onEnd` function is called with the `metaData` that was returned by `onStart`.\n *\n * It uses `onBecomeObserved` and `onBecomeUnobserved` mobx hooks to perform lazy observation.\n */\nexport const lazyObserve = <TMetaData = void>({\n context,\n property,\n onStart,\n onEnd,\n endDelay = false,\n}: {\n context?: any;\n property: any | any[];\n onStart?: () => TMetaData;\n onEnd?: (metaData: TMetaData, cleanupFn: VoidFunction) => void;\n endDelay?: number | false;\n}) => {\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n let metaData: TMetaData | undefined;\n const observingProps = new Set<string>();\n const properties = Array.isArray(property) ? property : [property];\n\n const cleanup = () => {\n observingProps.clear();\n\n if (endDelay === false) {\n onEnd?.(metaData!, cleanup);\n metaData = undefined;\n return;\n }\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n\n timeoutId = setTimeout(() => {\n onEnd?.(metaData!, cleanup);\n timeoutId = undefined;\n metaData = undefined;\n }, endDelay);\n };\n\n const start = (property: string) => {\n const isAlreadyObserving = observingProps.size > 0;\n observingProps.add(property);\n\n if (isAlreadyObserving) {\n return;\n }\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n\n metaData = onStart?.();\n };\n\n const stop = (property: string) => {\n const isAlreadyNotObserving = !observingProps.size;\n\n observingProps.delete(property);\n\n const isObserving = observingProps.size > 0;\n\n if (isAlreadyNotObserving || isObserving) {\n return;\n }\n\n cleanup();\n };\n\n properties.forEach((property) => {\n if (context) {\n onBecomeObserved(context, property, () => start(property));\n onBecomeUnobserved(context, property, () => stop(property));\n } else {\n onBecomeObserved(property, () => start(property));\n onBecomeUnobserved(property, () => stop(property));\n }\n });\n\n return cleanup;\n};\n"],"names":["applyObservable","context","annotationsArray","useDecorators","field","annotation","makeObservable","createEnhancedAtom","name","onBecomeObservedHandler","onBecomeUnobservedHandler","meta","atom","createAtom","DeepObservableStruct","data","observable","action","newData","stack","key","currentIndex","stackLength","currObservableData","newValue","currValue","typeGuard.isObject","newValueKeys","childKey","newDataKey","getMobxAdministration","$mobx","lazyObserve","property","onStart","onEnd","endDelay","timeoutId","metaData","observingProps","properties","cleanup","start","isAlreadyObserving","stop","isAlreadyNotObserving","isObserving","onBecomeObserved","onBecomeUnobserved"],"mappings":"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"}
|
package/ms.js
CHANGED
|
@@ -1,18 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
const o = {
|
|
2
|
+
ms: 1,
|
|
3
|
+
sec: 1e3,
|
|
4
|
+
min: 6e4,
|
|
5
|
+
hour: 36e5,
|
|
6
|
+
day: 864e5,
|
|
7
|
+
week: 6048e5
|
|
8
|
+
}, m = (e, s = "ms") => e * o[s];
|
|
9
|
+
export {
|
|
10
|
+
m as ms,
|
|
11
|
+
o as unitsToMs
|
|
8
12
|
};
|
|
9
|
-
|
|
10
|
-
* Переводит значение в юнитах в миллисекунды
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* ```ts
|
|
14
|
-
* ms(1, 'min') // 60_000
|
|
15
|
-
* ms(30, 'sec') // 30_000
|
|
16
|
-
* ```
|
|
17
|
-
*/
|
|
18
|
-
export const ms = (value, unit = 'ms') => value * unitsToMs[unit];
|
|
13
|
+
//# sourceMappingURL=ms.js.map
|
package/ms.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ms.js","sources":["../src/ms.ts"],"sourcesContent":["export const unitsToMs = {\n ms: 1,\n sec: 1000,\n min: 1000 * 60,\n hour: 1000 * 60 * 60,\n day: 1000 * 60 * 60 * 24,\n week: 1000 * 60 * 60 * 24 * 7,\n} as const;\n\n/**\n * Переводит значение в юнитах в миллисекунды\n *\n * @example\n * ```ts\n * ms(1, 'min') // 60_000\n * ms(30, 'sec') // 30_000\n * ```\n */\nexport const ms = (value: number, unit: keyof typeof unitsToMs = 'ms') =>\n value * unitsToMs[unit];\n"],"names":["unitsToMs","ms","value","unit"],"mappings":"AAAO,MAAMA,IAAY;AAAA,EACvB,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AACR,GAWaC,IAAK,CAACC,GAAeC,IAA+B,SAC/DD,IAAQF,EAAUG,CAAI;"}
|
package/number.js
CHANGED
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
*/
|
|
7
|
-
export function round(value, decimalPlaces = 0) {
|
|
8
|
-
if (!decimalPlaces) {
|
|
9
|
-
return Math.round(value);
|
|
10
|
-
}
|
|
11
|
-
const factor = 10 ** decimalPlaces;
|
|
12
|
-
return Math.round(value * factor) / factor;
|
|
1
|
+
function o(r, n = 0) {
|
|
2
|
+
if (!n)
|
|
3
|
+
return Math.round(r);
|
|
4
|
+
const t = 10 ** n;
|
|
5
|
+
return Math.round(r * t) / t;
|
|
13
6
|
}
|
|
7
|
+
export {
|
|
8
|
+
o as round
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=number.js.map
|
package/number.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number.js","sources":["../src/number.ts"],"sourcesContent":["/**\n * Works like `parseFloat(number.toFixed(4))` but performance better\n *\n * @example\n * round(191.212999999999999999999999, 4) // 191.213\n */\nexport function round(value: number, decimalPlaces: number = 0): number {\n if (!decimalPlaces) {\n return Math.round(value);\n }\n\n const factor = 10 ** decimalPlaces;\n return Math.round(value * factor) / factor;\n}\n"],"names":["round","value","decimalPlaces","factor"],"mappings":"AAMO,SAASA,EAAMC,GAAeC,IAAwB,GAAW;AACtE,MAAI,CAACA;AACH,WAAO,KAAK,MAAMD,CAAK;AAGzB,QAAME,IAAS,MAAMD;AACrB,SAAO,KAAK,MAAMD,IAAQE,CAAM,IAAIA;AACtC;"}
|