@gen-epix/ui-core 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +287 -0
- package/README.md +59 -0
- package/dist/@types/vite-env.d.ts +2 -0
- package/dist/_chunks/StringUtil.js +69 -0
- package/dist/_chunks/StringUtil.js.map +1 -0
- package/dist/classes/Subject/Subject.d.ts +9 -0
- package/dist/classes/Subject/index.d.ts +1 -0
- package/dist/classes/Subject/index.js +23 -0
- package/dist/classes/Subject/index.js.map +1 -0
- package/dist/classes/abstracts/EventBusAbstract/EventBusAbstract.d.ts +7 -0
- package/dist/classes/abstracts/EventBusAbstract/index.d.ts +1 -0
- package/dist/classes/abstracts/EventBusAbstract/index.js +34 -0
- package/dist/classes/abstracts/EventBusAbstract/index.js.map +1 -0
- package/dist/classes/abstracts/SubscribableAbstract/SubscribableAbstract.d.ts +8 -0
- package/dist/classes/abstracts/SubscribableAbstract/index.d.ts +1 -0
- package/dist/classes/abstracts/SubscribableAbstract/index.js +20 -0
- package/dist/classes/abstracts/SubscribableAbstract/index.js.map +1 -0
- package/dist/classes/services/DevicePixelRatioService/DevicePixelRatioService.d.ts +6 -0
- package/dist/classes/services/DevicePixelRatioService/index.d.ts +1 -0
- package/dist/classes/services/DevicePixelRatioService/index.js +25 -0
- package/dist/classes/services/DevicePixelRatioService/index.js.map +1 -0
- package/dist/classes/services/KeyboardShortcutService/KeyboardShortcutService.d.ts +15 -0
- package/dist/classes/services/KeyboardShortcutService/index.d.ts +1 -0
- package/dist/classes/services/KeyboardShortcutService/index.js +57 -0
- package/dist/classes/services/KeyboardShortcutService/index.js.map +1 -0
- package/dist/classes/services/WindowService/WindowService.d.ts +8 -0
- package/dist/classes/services/WindowService/index.d.ts +1 -0
- package/dist/classes/services/WindowService/index.js +22 -0
- package/dist/classes/services/WindowService/index.js.map +1 -0
- package/dist/constants/date.d.ts +8 -0
- package/dist/constants/date.js +13 -0
- package/dist/constants/date.js.map +1 -0
- package/dist/hooks/useArray/index.d.ts +1 -0
- package/dist/hooks/useArray/index.js +7 -0
- package/dist/hooks/useArray/index.js.map +1 -0
- package/dist/hooks/useArray/useArray.d.ts +1 -0
- package/dist/hooks/useDimensions/index.d.ts +1 -0
- package/dist/hooks/useDimensions/index.js +36 -0
- package/dist/hooks/useDimensions/index.js.map +1 -0
- package/dist/hooks/useDimensions/useDimensions.d.ts +11 -0
- package/dist/hooks/useScrollbarSize/index.d.ts +1 -0
- package/dist/hooks/useScrollbarSize/index.js +13 -0
- package/dist/hooks/useScrollbarSize/index.js.map +1 -0
- package/dist/hooks/useScrollbarSize/useScrollbarSize.d.ts +1 -0
- package/dist/hooks/useSubscribable/index.d.ts +1 -0
- package/dist/hooks/useSubscribable/index.js +22 -0
- package/dist/hooks/useSubscribable/index.js.map +1 -0
- package/dist/hooks/useSubscribable/useSubscribable.d.ts +7 -0
- package/dist/models/generic.d.ts +8 -0
- package/dist/models/generic.js +0 -0
- package/dist/models/testId.d.ts +3 -0
- package/dist/models/testId.js +0 -0
- package/dist/utils/DataUtil/DataUtil.d.ts +5 -0
- package/dist/utils/DataUtil/index.d.ts +1 -0
- package/dist/utils/DataUtil/index.js +15 -0
- package/dist/utils/DataUtil/index.js.map +1 -0
- package/dist/utils/DownloadUtil/DownloadUtil.d.ts +9 -0
- package/dist/utils/DownloadUtil/index.d.ts +1 -0
- package/dist/utils/DownloadUtil/index.js +32 -0
- package/dist/utils/DownloadUtil/index.js.map +1 -0
- package/dist/utils/HmrUtil/HmrUtil.d.ts +3 -0
- package/dist/utils/HmrUtil/index.d.ts +1 -0
- package/dist/utils/HmrUtil/index.js +10 -0
- package/dist/utils/HmrUtil/index.js.map +1 -0
- package/dist/utils/NumberUtil/NumberUtil.d.ts +4 -0
- package/dist/utils/NumberUtil/index.d.ts +1 -0
- package/dist/utils/NumberUtil/index.js +22 -0
- package/dist/utils/NumberUtil/index.js.map +1 -0
- package/dist/utils/ObjectUtil/ObjectUtil.d.ts +7 -0
- package/dist/utils/ObjectUtil/index.d.ts +1 -0
- package/dist/utils/ObjectUtil/index.js +677 -0
- package/dist/utils/ObjectUtil/index.js.map +1 -0
- package/dist/utils/StringUtil/StringUtil.d.ts +9 -0
- package/dist/utils/StringUtil/index.d.ts +1 -0
- package/dist/utils/StringUtil/index.js +2 -0
- package/dist/utils/TestIdUtil/TestIdUtil.d.ts +3 -0
- package/dist/utils/TestIdUtil/index.d.ts +1 -0
- package/dist/utils/TestIdUtil/index.js +13 -0
- package/dist/utils/TestIdUtil/index.js.map +1 -0
- package/dist/utils/ValidationUtil/ValidationUtil.d.ts +28 -0
- package/dist/utils/ValidationUtil/index.d.ts +1 -0
- package/dist/utils/ValidationUtil/index.js +39 -0
- package/dist/utils/ValidationUtil/index.js.map +1 -0
- package/package.json +140 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { HmrUtil as e } from "../../../utils/HmrUtil/index.js";
|
|
2
|
+
//#region src/classes/services/KeyboardShortcutService/KeyboardShortcutService.ts
|
|
3
|
+
var t = [
|
|
4
|
+
"form",
|
|
5
|
+
"input",
|
|
6
|
+
"label",
|
|
7
|
+
"select",
|
|
8
|
+
"textarea",
|
|
9
|
+
"button",
|
|
10
|
+
"fieldset",
|
|
11
|
+
"legend",
|
|
12
|
+
"datalist",
|
|
13
|
+
"output",
|
|
14
|
+
"option",
|
|
15
|
+
"optgroup"
|
|
16
|
+
], n = class n {
|
|
17
|
+
static __instance;
|
|
18
|
+
configs = [];
|
|
19
|
+
constructor() {
|
|
20
|
+
window.addEventListener("keydown", this.handleKeyDown.bind(this));
|
|
21
|
+
}
|
|
22
|
+
static getInstance() {
|
|
23
|
+
return n.__instance = e.getHmrSingleton("keyboardShortcutService", n.__instance, () => new n()), n.__instance;
|
|
24
|
+
}
|
|
25
|
+
static shouldIgnoreShortcut() {
|
|
26
|
+
let e = document.activeElement;
|
|
27
|
+
for (; e;) {
|
|
28
|
+
if (t.includes(e.tagName.toLowerCase())) return !0;
|
|
29
|
+
e = e.parentElement;
|
|
30
|
+
}
|
|
31
|
+
return !1;
|
|
32
|
+
}
|
|
33
|
+
registerShortcut({ callback: e, key: t, modifier: n }) {
|
|
34
|
+
let r = {
|
|
35
|
+
callback: e,
|
|
36
|
+
key: t,
|
|
37
|
+
modifier: n
|
|
38
|
+
};
|
|
39
|
+
return this.configs.push(r), () => {
|
|
40
|
+
this.configs.splice(this.configs.indexOf(r), 1);
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
handleKeyDown(e) {
|
|
44
|
+
for (let t of this.configs) {
|
|
45
|
+
let { callback: r, key: i, modifier: a } = t;
|
|
46
|
+
if (e.key === i) {
|
|
47
|
+
if (a && !e.getModifierState(a) || !a && (e.getModifierState("Control") || e.getModifierState("Alt") || e.getModifierState("Meta")) || n.shouldIgnoreShortcut()) return;
|
|
48
|
+
r();
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
//#endregion
|
|
55
|
+
export { n as KeyboardShortcutService };
|
|
56
|
+
|
|
57
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/classes/services/KeyboardShortcutService/KeyboardShortcutService.ts"],"sourcesContent":["import { HmrUtil } from '../../../utils/HmrUtil';\n\nconst FORM_ELEMENT_TAG_NAMES = [\n 'form',\n 'input',\n 'label',\n 'select',\n 'textarea',\n 'button',\n 'fieldset',\n 'legend',\n 'datalist',\n 'output',\n 'option',\n 'optgroup',\n];\n\ntype KeyboardShortcutConfig = {\n callback: () => void;\n key: string;\n modifier?: string;\n};\n\nexport class KeyboardShortcutService {\n private static __instance: KeyboardShortcutService;\n\n private readonly configs: KeyboardShortcutConfig[] = [];\n\n private constructor() {\n window.addEventListener('keydown', this.handleKeyDown.bind(this));\n }\n\n public static getInstance(): KeyboardShortcutService {\n KeyboardShortcutService.__instance = HmrUtil.getHmrSingleton('keyboardShortcutService', KeyboardShortcutService.__instance, () => new KeyboardShortcutService());\n return KeyboardShortcutService.__instance;\n }\n\n private static shouldIgnoreShortcut(): boolean {\n let activeElement = document.activeElement as HTMLElement;\n while (activeElement) {\n if (FORM_ELEMENT_TAG_NAMES.includes(activeElement.tagName.toLowerCase())) {\n return true; // ignore all shortcuts when typing in form elements\n }\n activeElement = activeElement.parentElement;\n }\n return false;\n }\n\n public registerShortcut({ callback, key, modifier }: KeyboardShortcutConfig): () => void {\n const config: KeyboardShortcutConfig = { callback, key, modifier };\n this.configs.push(config);\n\n return () => {\n this.configs.splice(this.configs.indexOf(config), 1);\n };\n }\n\n private handleKeyDown(event: KeyboardEvent): void {\n for (const config of this.configs) {\n const { callback, key, modifier } = config;\n if (event.key !== key) {\n continue;\n }\n if (modifier && !event.getModifierState(modifier)) {\n return;\n }\n if (!modifier && (event.getModifierState('Control') || event.getModifierState('Alt') || event.getModifierState('Meta'))) {\n return;\n }\n\n if (KeyboardShortcutService.shouldIgnoreShortcut()) {\n return;\n }\n callback();\n return; // only one callback per shortcut\n }\n }\n}\n"],"mappings":";;AAEA,IAAM,IAAyB;CAC7B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,GAQa,IAAb,MAAa,EAAwB;CACnC,OAAe;CAEf,UAAqD,CAAC;CAEtD,cAAsB;EACpB,OAAO,iBAAiB,WAAW,KAAK,cAAc,KAAK,IAAI,CAAC;CAClE;CAEA,OAAc,cAAuC;EAEnD,OADA,EAAwB,aAAa,EAAQ,gBAAgB,2BAA2B,EAAwB,kBAAkB,IAAI,EAAwB,CAAC,GACxJ,EAAwB;CACjC;CAEA,OAAe,uBAAgC;EAC7C,IAAI,IAAgB,SAAS;EAC7B,OAAO,IAAe;GACpB,IAAI,EAAuB,SAAS,EAAc,QAAQ,YAAY,CAAC,GACrE,OAAO;GAET,IAAgB,EAAc;EAChC;EACA,OAAO;CACT;CAEA,iBAAwB,EAAE,aAAU,QAAK,eAAgD;EACvF,IAAM,IAAiC;GAAE;GAAU;GAAK;EAAS;EAGjE,OAFA,KAAK,QAAQ,KAAK,CAAM,SAEX;GACX,KAAK,QAAQ,OAAO,KAAK,QAAQ,QAAQ,CAAM,GAAG,CAAC;EACrD;CACF;CAEA,cAAsB,GAA4B;EAChD,KAAK,IAAM,KAAU,KAAK,SAAS;GACjC,IAAM,EAAE,aAAU,QAAK,gBAAa;GAChC,MAAM,QAAQ,GAUlB;QAPI,KAAY,CAAC,EAAM,iBAAiB,CAAQ,KAG5C,CAAC,MAAa,EAAM,iBAAiB,SAAS,KAAK,EAAM,iBAAiB,KAAK,KAAK,EAAM,iBAAiB,MAAM,MAIjH,EAAwB,qBAAqB,GAC/C;IAEF,EAAS;IACT;GAHE;EAIJ;CACF;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './WindowService';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { HmrUtil as e } from "../../../utils/HmrUtil/index.js";
|
|
2
|
+
//#region src/classes/services/WindowService/WindowService.ts
|
|
3
|
+
var t = class t {
|
|
4
|
+
static __instance;
|
|
5
|
+
get body() {
|
|
6
|
+
return this.document ? this.document.body : null;
|
|
7
|
+
}
|
|
8
|
+
get document() {
|
|
9
|
+
return this.window ? this.window.document : null;
|
|
10
|
+
}
|
|
11
|
+
get window() {
|
|
12
|
+
return globalThis;
|
|
13
|
+
}
|
|
14
|
+
constructor() {}
|
|
15
|
+
static getInstance() {
|
|
16
|
+
return t.__instance = e.getHmrSingleton("windowService", t.__instance, () => new t()), t.__instance;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
//#endregion
|
|
20
|
+
export { t as WindowService };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/classes/services/WindowService/WindowService.ts"],"sourcesContent":["import { HmrUtil } from '../../../utils/HmrUtil';\n\nexport class WindowService {\n private static __instance: WindowService;\n\n public get body(): HTMLBodyElement {\n return this.document ? this.document.body as HTMLBodyElement : null;\n }\n\n public get document(): Document {\n return this.window ? this.window.document : null;\n }\n\n public get window(): typeof globalThis & Window {\n return globalThis as typeof globalThis & Window;\n }\n\n private constructor() {\n //\n }\n\n public static getInstance(): WindowService {\n WindowService.__instance = HmrUtil.getHmrSingleton('windowService', WindowService.__instance, () => new WindowService());\n return WindowService.__instance;\n }\n}\n"],"mappings":";;AAEA,IAAa,IAAb,MAAa,EAAc;CACzB,OAAe;CAEf,IAAW,OAAwB;EACjC,OAAO,KAAK,WAAW,KAAK,SAAS,OAA0B;CACjE;CAEA,IAAW,WAAqB;EAC9B,OAAO,KAAK,SAAS,KAAK,OAAO,WAAW;CAC9C;CAEA,IAAW,SAAqC;EAC9C,OAAO;CACT;CAEA,cAAsB,CAEtB;CAEA,OAAc,cAA6B;EAEzC,OADA,EAAc,aAAa,EAAQ,gBAAgB,iBAAiB,EAAc,kBAAkB,IAAI,EAAc,CAAC,GAChH,EAAc;CACvB;AACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region src/constants/date.ts
|
|
2
|
+
var e = {
|
|
3
|
+
DATE: "yyyy-MM-dd",
|
|
4
|
+
DATE_TIME: "yyyy-MM-dd HH:mm:ss",
|
|
5
|
+
YEAR: "yyyy",
|
|
6
|
+
YEAR_MONTH: "yyyy-MM",
|
|
7
|
+
YEAR_QUARTER: "yyyy-QQQ",
|
|
8
|
+
YEAR_WEEK: "YYYY-'W'ww"
|
|
9
|
+
};
|
|
10
|
+
//#endregion
|
|
11
|
+
export { e as DATE_FORMAT };
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=date.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.js","names":[],"sources":["../../src/constants/date.ts"],"sourcesContent":["export const DATE_FORMAT = {\n DATE: 'yyyy-MM-dd',\n DATE_TIME: 'yyyy-MM-dd HH:mm:ss',\n YEAR: 'yyyy',\n YEAR_MONTH: 'yyyy-MM',\n YEAR_QUARTER: 'yyyy-QQQ',\n YEAR_WEEK: 'YYYY-\\'W\\'ww',\n} as const;\n"],"mappings":";AAAA,IAAa,IAAc;CACzB,MAAM;CACN,WAAW;CACX,MAAM;CACN,YAAY;CACZ,cAAc;CACd,WAAW;AACb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './useArray';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/hooks/useArray/useArray.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nexport const useArray = <T extends Array<unknown>>(items: T): T => {\n return useMemo(() => items, [items]);\n};\n"],"mappings":";;AAEA,IAAa,KAAsC,MAC1C,QAAc,GAAO,CAAC,CAAK,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useArray: <T extends Array<unknown>>(items: T) => T;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './useDimensions';
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { WindowService as e } from "../../classes/services/WindowService/index.js";
|
|
2
|
+
import { useCallback as t, useMemo as n, useRef as r, useState as i, useSyncExternalStore as a } from "react";
|
|
3
|
+
//#region src/hooks/useDimensions/useDimensions.ts
|
|
4
|
+
var o = (o, s) => {
|
|
5
|
+
let c = r(null), [l, u] = i(!1), d = r(null), f = a(t((t) => {
|
|
6
|
+
let n = o?.current;
|
|
7
|
+
if (!n) return;
|
|
8
|
+
let r = new ResizeObserver((n) => {
|
|
9
|
+
let r = {
|
|
10
|
+
height: n?.[0].contentRect.height,
|
|
11
|
+
width: n?.[0].contentRect.width
|
|
12
|
+
};
|
|
13
|
+
d.current?.width === r.width && d.current?.height === r.height || (d.current = r, l || u(!0), c.current && clearTimeout(c.current), c.current = e.getInstance().window.setTimeout(() => {
|
|
14
|
+
u(!1), s && s(), t();
|
|
15
|
+
}, 0));
|
|
16
|
+
});
|
|
17
|
+
return r.observe(n, { box: "content-box" }), r.observe(document.body), () => {
|
|
18
|
+
r.disconnect();
|
|
19
|
+
};
|
|
20
|
+
}, [
|
|
21
|
+
l,
|
|
22
|
+
s,
|
|
23
|
+
o
|
|
24
|
+
]), () => JSON.stringify({
|
|
25
|
+
dimensions: {
|
|
26
|
+
height: d?.current?.height ?? 0,
|
|
27
|
+
width: d?.current?.width ?? 0
|
|
28
|
+
},
|
|
29
|
+
isResizing: l
|
|
30
|
+
}));
|
|
31
|
+
return n(() => JSON.parse(f), [f]);
|
|
32
|
+
};
|
|
33
|
+
//#endregion
|
|
34
|
+
export { o as useDimensions };
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/hooks/useDimensions/useDimensions.ts"],"sourcesContent":["import type { RefObject } from 'react';\nimport {\n useCallback,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from 'react';\n\nimport { WindowService } from '../../classes/services/WindowService';\n\n\ntype Dimensions = { height: number; width: number };\n\ntype Result = {\n dimensions: Dimensions;\n isResizing: boolean;\n};\n\nexport const useDimensions = (ref: RefObject<HTMLElement>, onResizeCallback?: () => void) => {\n const timeoutHandleRef = useRef<ReturnType<typeof window.setTimeout>>(null);\n const [isResizing, setIsResizing] = useState(false);\n const dimensionsRef = useRef<Dimensions>(null);\n\n const subscribe = useCallback((callback: () => void) => {\n const current = ref?.current;\n\n if (!current) {\n return;\n }\n\n const observer = new ResizeObserver((mutations) => {\n const dimensions: Dimensions = {\n height: mutations?.[0].contentRect.height,\n width: mutations?.[0].contentRect.width,\n };\n\n if (dimensionsRef.current?.width === dimensions.width && dimensionsRef.current?.height === dimensions.height) {\n return;\n }\n\n dimensionsRef.current = dimensions;\n\n if (!isResizing) {\n setIsResizing(true);\n }\n if (timeoutHandleRef.current) {\n clearTimeout(timeoutHandleRef.current);\n }\n timeoutHandleRef.current = WindowService.getInstance().window.setTimeout(() => {\n setIsResizing(false);\n if (onResizeCallback) {\n onResizeCallback();\n }\n callback();\n }, 0);\n });\n\n observer.observe(current, {\n box: 'content-box',\n });\n observer.observe(document.body);\n\n return () => {\n observer.disconnect();\n };\n }, [isResizing, onResizeCallback, ref]);\n\n const resultString = useSyncExternalStore(\n subscribe,\n () => {\n return JSON.stringify({\n dimensions: {\n height: dimensionsRef?.current?.height ?? 0,\n width: dimensionsRef?.current?.width ?? 0,\n },\n isResizing,\n });\n },\n );\n return useMemo<Result>(() => JSON.parse(resultString) as Result, [resultString]);\n};\n"],"mappings":";;;AAmBA,IAAa,KAAiB,GAA6B,MAAkC;CAC3F,IAAM,IAAmB,EAA6C,IAAI,GACpE,CAAC,GAAY,KAAiB,EAAS,EAAK,GAC5C,IAAgB,EAAmB,IAAI,GA8CvC,IAAe,EA5CH,GAAa,MAAyB;EACtD,IAAM,IAAU,GAAK;EAErB,IAAI,CAAC,GACH;EAGF,IAAM,IAAW,IAAI,gBAAgB,MAAc;GACjD,IAAM,IAAyB;IAC7B,QAAQ,IAAY,EAAE,CAAC,YAAY;IACnC,OAAO,IAAY,EAAE,CAAC,YAAY;GACpC;GAEI,EAAc,SAAS,UAAU,EAAW,SAAS,EAAc,SAAS,WAAW,EAAW,WAItG,EAAc,UAAU,GAEnB,KACH,EAAc,EAAI,GAEhB,EAAiB,WACnB,aAAa,EAAiB,OAAO,GAEvC,EAAiB,UAAU,EAAc,YAAY,CAAC,CAAC,OAAO,iBAAiB;IAK7E,AAJA,EAAc,EAAK,GACf,KACF,EAAiB,GAEnB,EAAS;GACX,GAAG,CAAC;EACN,CAAC;EAOD,OALA,EAAS,QAAQ,GAAS,EACxB,KAAK,cACP,CAAC,GACD,EAAS,QAAQ,SAAS,IAAI,SAEjB;GACX,EAAS,WAAW;EACtB;CACF,GAAG;EAAC;EAAY;EAAkB;CAAG,CAGnC,SAES,KAAK,UAAU;EACpB,YAAY;GACV,QAAQ,GAAe,SAAS,UAAU;GAC1C,OAAO,GAAe,SAAS,SAAS;EAC1C;EACA;CACF,CAAC,CAEL;CACA,OAAO,QAAsB,KAAK,MAAM,CAAY,GAAa,CAAC,CAAY,CAAC;AACjF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { RefObject } from 'react';
|
|
2
|
+
type Dimensions = {
|
|
3
|
+
height: number;
|
|
4
|
+
width: number;
|
|
5
|
+
};
|
|
6
|
+
type Result = {
|
|
7
|
+
dimensions: Dimensions;
|
|
8
|
+
isResizing: boolean;
|
|
9
|
+
};
|
|
10
|
+
export declare const useDimensions: (ref: RefObject<HTMLElement>, onResizeCallback?: () => void) => Result;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './useScrollbarSize';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { WindowService as e } from "../../classes/services/WindowService/index.js";
|
|
2
|
+
import { useMemo as t } from "react";
|
|
3
|
+
//#region src/hooks/useScrollbarSize/useScrollbarSize.ts
|
|
4
|
+
var n = () => t(() => {
|
|
5
|
+
let t = e.getInstance().window, n = t.document.createElement("div"), r = t.document.createElement("div");
|
|
6
|
+
n.style.width = "100px", n.style.overflowX = "scroll", r.style.width = "100px", t.document.body.appendChild(n), t.document.body.appendChild(r);
|
|
7
|
+
let i = n.offsetHeight - r.offsetHeight;
|
|
8
|
+
return t.document.body.removeChild(n), t.document.body.removeChild(r), i;
|
|
9
|
+
}, []);
|
|
10
|
+
//#endregion
|
|
11
|
+
export { n as useScrollbarSize };
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/hooks/useScrollbarSize/useScrollbarSize.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { WindowService } from '../../classes/services/WindowService';\n\n\nexport const useScrollbarSize = () => {\n const scrollbarSize = useMemo(() => {\n const win = WindowService.getInstance().window;\n const div1 = win.document.createElement('div');\n const div2 = win.document.createElement('div');\n div1.style.width = '100px';\n div1.style.overflowX = 'scroll';\n div2.style.width = '100px';\n win.document.body.appendChild(div1);\n win.document.body.appendChild(div2);\n const size = div1.offsetHeight - div2.offsetHeight;\n win.document.body.removeChild(div1);\n win.document.body.removeChild(div2);\n return size;\n }, []);\n\n return scrollbarSize;\n};\n"],"mappings":";;;AAKA,IAAa,UACW,QAAc;CAClC,IAAM,IAAM,EAAc,YAAY,CAAC,CAAC,QAClC,IAAO,EAAI,SAAS,cAAc,KAAK,GACvC,IAAO,EAAI,SAAS,cAAc,KAAK;CAK7C,AAJA,EAAK,MAAM,QAAQ,SACnB,EAAK,MAAM,YAAY,UACvB,EAAK,MAAM,QAAQ,SACnB,EAAI,SAAS,KAAK,YAAY,CAAI,GAClC,EAAI,SAAS,KAAK,YAAY,CAAI;CAClC,IAAM,IAAO,EAAK,eAAe,EAAK;CAGtC,OAFA,EAAI,SAAS,KAAK,YAAY,CAAI,GAClC,EAAI,SAAS,KAAK,YAAY,CAAI,GAC3B;AACT,GAAG,CAAC,CAEG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useScrollbarSize: () => number;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './useSubscribable';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { useEffect as e, useState as t } from "react";
|
|
2
|
+
//#region src/hooks/useSubscribable/useSubscribable.ts
|
|
3
|
+
var n = (n, r = {}) => {
|
|
4
|
+
let { callback: i, select: a } = r, [o, s] = t(n.data);
|
|
5
|
+
return e(() => {
|
|
6
|
+
let e = n.subscribe((e, t) => {
|
|
7
|
+
let n = a ? a(e) : e;
|
|
8
|
+
s(n), i && i(n, t);
|
|
9
|
+
});
|
|
10
|
+
return () => {
|
|
11
|
+
e();
|
|
12
|
+
};
|
|
13
|
+
}, [
|
|
14
|
+
n,
|
|
15
|
+
a,
|
|
16
|
+
i
|
|
17
|
+
]), o;
|
|
18
|
+
};
|
|
19
|
+
//#endregion
|
|
20
|
+
export { n as useSubscribable };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/hooks/useSubscribable/useSubscribable.ts"],"sourcesContent":["import {\n useEffect,\n useState,\n} from 'react';\n\nimport type { SubscribableAbstract } from '../../classes/abstracts/SubscribableAbstract';\n\ntype UseSubscribableKwArgs<TSubjectData> = {\n readonly callback?: (data: TSubjectData, prevData: TSubjectData) => void;\n readonly select?: (data: TSubjectData) => TSubjectData;\n};\n\nexport const useSubscribable = <TSubjectData>(subscribable: SubscribableAbstract<TSubjectData>, kwArgs: UseSubscribableKwArgs<TSubjectData> = {}) => {\n const { callback, select } = kwArgs;\n\n const [data, setData] = useState<TSubjectData>(subscribable.data);\n useEffect(() => {\n const unsubscribe = subscribable.subscribe((x, prevX) => {\n const newData = select ? select(x) : x;\n setData(newData);\n if (callback) {\n callback(newData, prevX);\n }\n });\n return () => {\n unsubscribe();\n };\n }, [subscribable, select, callback]);\n return data;\n};\n"],"mappings":";;AAYA,IAAa,KAAiC,GAAkD,IAA8C,CAAC,MAAM;CACnJ,IAAM,EAAE,aAAU,cAAW,GAEvB,CAAC,GAAM,KAAW,EAAuB,EAAa,IAAI;CAahE,OAZA,QAAgB;EACd,IAAM,IAAc,EAAa,WAAW,GAAG,MAAU;GACvD,IAAM,IAAU,IAAS,EAAO,CAAC,IAAI;GAErC,AADA,EAAQ,CAAO,GACX,KACF,EAAS,GAAS,CAAK;EAE3B,CAAC;EACD,aAAa;GACX,EAAY;EACd;CACF,GAAG;EAAC;EAAc;EAAQ;CAAQ,CAAC,GAC5B;AACT"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { SubscribableAbstract } from '../../classes/abstracts/SubscribableAbstract';
|
|
2
|
+
type UseSubscribableKwArgs<TSubjectData> = {
|
|
3
|
+
readonly callback?: (data: TSubjectData, prevData: TSubjectData) => void;
|
|
4
|
+
readonly select?: (data: TSubjectData) => TSubjectData;
|
|
5
|
+
};
|
|
6
|
+
export declare const useSubscribable: <TSubjectData>(subscribable: SubscribableAbstract<TSubjectData>, kwArgs?: UseSubscribableKwArgs<TSubjectData>) => TSubjectData;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type ArgumentTypes<F extends Function> = F extends (...args: infer A) => any ? A : never;
|
|
2
|
+
export type ConvertType<T, K> = {
|
|
3
|
+
[P in keyof T]: K;
|
|
4
|
+
};
|
|
5
|
+
export type DeepPartial<T> = {
|
|
6
|
+
[P in keyof T]?: DeepPartial<T[P]>;
|
|
7
|
+
};
|
|
8
|
+
export type UnwrapArray<T> = T extends Array<infer U> ? U : T;
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './DataUtil';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region src/utils/DataUtil/DataUtil.ts
|
|
2
|
+
var e = class {
|
|
3
|
+
static rankSortComperatorFactory(e) {
|
|
4
|
+
return (t, n) => {
|
|
5
|
+
let r = (t.rank ?? 0) - (n.rank ?? 0);
|
|
6
|
+
if (r !== 0 || !e) return r;
|
|
7
|
+
let i, a;
|
|
8
|
+
return typeof e == "function" ? (i = e(t), a = e(n)) : (i = t[e], a = n[e]), i === a ? 0 : i == null ? -1 : a == null ? 1 : typeof i == "string" && typeof a == "string" ? i.localeCompare(a) : typeof i == "number" && typeof a == "number" ? i - a : 0;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
//#endregion
|
|
13
|
+
export { e as DataUtil };
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/utils/DataUtil/DataUtil.ts"],"sourcesContent":["export class DataUtil {\n public static rankSortComperatorFactory<TSecondarySorKey extends keyof TItem, TItem extends { rank?: number }>(secondarySortKeyOrFn?: ((item: TItem) => string) | TSecondarySorKey) {\n return (a: TItem, b: TItem): number => {\n const rankComparison = (a.rank ?? 0) - (b.rank ?? 0);\n if (rankComparison !== 0 || !secondarySortKeyOrFn) {\n return rankComparison;\n }\n let aSecondary: unknown;\n let bSecondary: unknown;\n if (typeof secondarySortKeyOrFn === 'function') {\n aSecondary = secondarySortKeyOrFn(a);\n bSecondary = secondarySortKeyOrFn(b);\n } else {\n aSecondary = a[secondarySortKeyOrFn];\n bSecondary = b[secondarySortKeyOrFn];\n }\n if (aSecondary === bSecondary) {\n return 0;\n }\n if (aSecondary === undefined || aSecondary === null) {\n return -1;\n }\n if (bSecondary === undefined || bSecondary === null) {\n return 1;\n }\n if (typeof aSecondary === 'string' && typeof bSecondary === 'string') {\n return aSecondary.localeCompare(bSecondary);\n }\n if (typeof aSecondary === 'number' && typeof bSecondary === 'number') {\n return aSecondary - bSecondary;\n }\n return 0;\n };\n }\n}\n"],"mappings":";AAAA,IAAa,IAAb,MAAsB;CACpB,OAAc,0BAAiG,GAAqE;EAClL,QAAQ,GAAU,MAAqB;GACrC,IAAM,KAAkB,EAAE,QAAQ,MAAM,EAAE,QAAQ;GAClD,IAAI,MAAmB,KAAK,CAAC,GAC3B,OAAO;GAET,IAAI,GACA;GAuBJ,OAtBI,OAAO,KAAyB,cAClC,IAAa,EAAqB,CAAC,GACnC,IAAa,EAAqB,CAAC,MAEnC,IAAa,EAAE,IACf,IAAa,EAAE,KAEb,MAAe,IACV,IAEL,KAA2C,OACtC,KAEL,KAA2C,OACtC,IAEL,OAAO,KAAe,YAAY,OAAO,KAAe,WACnD,EAAW,cAAc,CAAU,IAExC,OAAO,KAAe,YAAY,OAAO,KAAe,WACnD,IAAa,IAEf;EACT;CACF;AACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare class DownloadUtil {
|
|
2
|
+
static arrayBufferToBase64(buffer: ArrayBuffer): string;
|
|
3
|
+
static createDownloadUrl(url: string, name: string): void;
|
|
4
|
+
static downloadAsMultiPartForm(kwArgs: {
|
|
5
|
+
accessToken: string;
|
|
6
|
+
action: string;
|
|
7
|
+
data: Record<string, string | string[]>;
|
|
8
|
+
}): void;
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './DownloadUtil';
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
//#region src/utils/DownloadUtil/DownloadUtil.ts
|
|
2
|
+
var e = class {
|
|
3
|
+
static arrayBufferToBase64(e) {
|
|
4
|
+
let t = "", n = new Uint8Array(e), r = n.byteLength;
|
|
5
|
+
for (let e = 0; e < r; e++) t += String.fromCharCode(n[e]);
|
|
6
|
+
return window.btoa(t);
|
|
7
|
+
}
|
|
8
|
+
static createDownloadUrl(e, t) {
|
|
9
|
+
let n = document.createElement("a");
|
|
10
|
+
n.download = t, n.href = e, document.body.appendChild(n), n.click(), document.body.removeChild(n);
|
|
11
|
+
}
|
|
12
|
+
static downloadAsMultiPartForm(e) {
|
|
13
|
+
let t = document.createElement("form");
|
|
14
|
+
t.method = "POST", t.action = e.action, t.style.display = "none", t.target = "_blank", Object.entries(e.data).forEach(([e, n]) => {
|
|
15
|
+
if (Array.isArray(n)) {
|
|
16
|
+
n.forEach((n) => {
|
|
17
|
+
let r = document.createElement("input");
|
|
18
|
+
r.name = e, r.value = n, t.appendChild(r);
|
|
19
|
+
});
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
let r = document.createElement("input");
|
|
23
|
+
r.name = e, r.value = n, t.appendChild(r);
|
|
24
|
+
});
|
|
25
|
+
let n = document.createElement("input");
|
|
26
|
+
n.name = "token", n.value = e.accessToken, t.appendChild(n), document.body.appendChild(t), t.submit(), document.body.removeChild(t);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
//#endregion
|
|
30
|
+
export { e as DownloadUtil };
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/utils/DownloadUtil/DownloadUtil.ts"],"sourcesContent":["export class DownloadUtil {\n public static arrayBufferToBase64(buffer: ArrayBuffer) {\n let binary = '';\n const bytes = new Uint8Array(buffer);\n const len = bytes.byteLength;\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n }\n\n public static createDownloadUrl(url: string, name: string): void {\n const link = document.createElement('a');\n link.download = name;\n link.href = url;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n\n public static downloadAsMultiPartForm(kwArgs: { accessToken: string; action: string; data: Record<string, string | string[]> }): void {\n const formElement = document.createElement('form');\n formElement.method = 'POST';\n formElement.action = kwArgs.action;\n formElement.style.display = 'none';\n formElement.target = '_blank';\n\n Object.entries(kwArgs.data).forEach(([key, value]) => {\n if (Array.isArray(value)) {\n value.forEach((v) => {\n const input = document.createElement('input');\n input.name = key;\n input.value = v;\n formElement.appendChild(input);\n });\n return;\n }\n\n const input = document.createElement('input');\n input.name = key;\n input.value = value;\n formElement.appendChild(input);\n });\n const input = document.createElement('input');\n input.name = 'token';\n // ! FIXME: add access token to arguments instead of accessing it directly here\n input.value = kwArgs.accessToken;\n formElement.appendChild(input);\n\n document.body.appendChild(formElement);\n\n formElement.submit();\n document.body.removeChild(formElement);\n }\n}\n"],"mappings":";AAAA,IAAa,IAAb,MAA0B;CACxB,OAAc,oBAAoB,GAAqB;EACrD,IAAI,IAAS,IACP,IAAQ,IAAI,WAAW,CAAM,GAC7B,IAAM,EAAM;EAClB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAK,KACvB,KAAU,OAAO,aAAa,EAAM,EAAE;EAExC,OAAO,OAAO,KAAK,CAAM;CAC3B;CAEA,OAAc,kBAAkB,GAAa,GAAoB;EAC/D,IAAM,IAAO,SAAS,cAAc,GAAG;EAKvC,AAJA,EAAK,WAAW,GAChB,EAAK,OAAO,GACZ,SAAS,KAAK,YAAY,CAAI,GAC9B,EAAK,MAAM,GACX,SAAS,KAAK,YAAY,CAAI;CAChC;CAEA,OAAc,wBAAwB,GAAgG;EACpI,IAAM,IAAc,SAAS,cAAc,MAAM;EAMjD,AALA,EAAY,SAAS,QACrB,EAAY,SAAS,EAAO,QAC5B,EAAY,MAAM,UAAU,QAC5B,EAAY,SAAS,UAErB,OAAO,QAAQ,EAAO,IAAI,CAAC,CAAC,SAAS,CAAC,GAAK,OAAW;GACpD,IAAI,MAAM,QAAQ,CAAK,GAAG;IACxB,EAAM,SAAS,MAAM;KACnB,IAAM,IAAQ,SAAS,cAAc,OAAO;KAG5C,AAFA,EAAM,OAAO,GACb,EAAM,QAAQ,GACd,EAAY,YAAY,CAAK;IAC/B,CAAC;IACD;GACF;GAEA,IAAM,IAAQ,SAAS,cAAc,OAAO;GAG5C,AAFA,EAAM,OAAO,GACb,EAAM,QAAQ,GACd,EAAY,YAAY,CAAK;EAC/B,CAAC;EACD,IAAM,IAAQ,SAAS,cAAc,OAAO;EAS5C,AARA,EAAM,OAAO,SAEb,EAAM,QAAQ,EAAO,aACrB,EAAY,YAAY,CAAK,GAE7B,SAAS,KAAK,YAAY,CAAW,GAErC,EAAY,OAAO,GACnB,SAAS,KAAK,YAAY,CAAW;CACvC;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './HmrUtil';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/utils/HmrUtil/HmrUtil.ts"],"sourcesContent":["type HmrSingletonData = Record<string, unknown>;\n\n\nexport class HmrUtil {\n public static getHmrSingleton<T>(key: string, currentInstance: T | undefined, create: () => T): T {\n const hotData = import.meta.hot?.data as HmrSingletonData | undefined;\n const instance = currentInstance || (hotData?.[key] as T | undefined) || create();\n\n if (hotData) {\n hotData[key] = instance;\n }\n\n return instance;\n }\n}\n"],"mappings":";AAGA,IAAa,IAAb,MAAqB;CACnB,OAAc,gBAAmB,GAAa,GAAgC,GAAoB;EAQhG,OANiB,KAAwD,EAAO;CAOlF;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './NumberUtil';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
//#region src/utils/NumberUtil/NumberUtil.ts
|
|
2
|
+
var e = class {
|
|
3
|
+
static parse(e) {
|
|
4
|
+
if (typeof e == "number") return e;
|
|
5
|
+
if (typeof e != "string" || e.trim() === "") return NaN;
|
|
6
|
+
let t = e.trim().replace(/[^0-9,.-\s]/g, ""), n = (t.match(/[.]/g) || []).length, r = (t.match(/[,]/g) || []).length, i = (t.match(/[\s]/g) || []).length;
|
|
7
|
+
return [
|
|
8
|
+
n,
|
|
9
|
+
r,
|
|
10
|
+
i
|
|
11
|
+
].filter((e) => e > 1).length > 1 ? NaN : r > 1 ? parseFloat(t.replace(/[,\s]/g, "")) : i > 1 ? (t = t.replace(/\s/g, ""), parseFloat(t.replace(",", "."))) : n > 1 ? (t = t.replace(/[.\s]/g, "").replace(",", "."), parseFloat(t)) : (t = t.replace(/[,.\s](?=.*[,.\s])/g, "").replace(",", "."), parseFloat(t));
|
|
12
|
+
}
|
|
13
|
+
static toStringWithPrecision(e, t) {
|
|
14
|
+
if (typeof e != "number" || !isFinite(e)) return "";
|
|
15
|
+
let n = t.toString().split(".")?.[1]?.length ?? 0, r = e.toString().split("."), i = r[0];
|
|
16
|
+
return n > 0 && (i = `${i}.${(r[1] ?? "").padEnd(n, "0").slice(0, n)}`), i;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
//#endregion
|
|
20
|
+
export { e as NumberUtil };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/utils/NumberUtil/NumberUtil.ts"],"sourcesContent":["export class NumberUtil {\n public static parse(value: number | string): number {\n if (typeof value === 'number') {\n return value;\n }\n\n if (typeof value !== 'string' || value.trim() === '') {\n return NaN;\n }\n\n let sanitizedValue = value\n .trim()\n .replace(/[^0-9,.-\\s]/g, ''); // Remove all except digits, commas, periods, minus signs, and whitespace\n\n // if multiple commas or periods exist, assume they are thousands separators and remove them\n const periodMatchesLength = (sanitizedValue.match(/[.]/g) || []).length;\n const commaMatchesLength = (sanitizedValue.match(/[,]/g) || []).length;\n const spaceMatchesLength = (sanitizedValue.match(/[\\s]/g) || []).length;\n\n if ([periodMatchesLength, commaMatchesLength, spaceMatchesLength].filter(count => count > 1).length > 1) {\n return NaN;\n }\n\n if (commaMatchesLength > 1) {\n // Remove all commas if there are multiple, assuming they are thousands separators\n // Note: remaining periods are treated as decimal separators\n return parseFloat(sanitizedValue.replace(/[,\\s]/g, ''));\n }\n if (spaceMatchesLength > 1) {\n // Remove all whitespace if there are multiple, assuming they are thousands separators\n sanitizedValue = sanitizedValue.replace(/\\s/g, '');\n // Note: remaining commas or periods are treated as decimal separators\n return parseFloat(sanitizedValue.replace(',', '.'));\n }\n if (periodMatchesLength > 1) {\n // Remove all periods if there are multiple, assuming they are thousands separators\n sanitizedValue = sanitizedValue.replace(/[.\\s]/g, '').replace(',', '.'); // Replace remaining comma with period for decimal\n return parseFloat(sanitizedValue);\n }\n\n sanitizedValue = sanitizedValue.replace(/[,.\\s](?=.*[,.\\s])/g, '')\n .replace(',', '.'); // Replace remaining comma with period for decimal\n\n return parseFloat(sanitizedValue);\n }\n\n\n public static toStringWithPrecision(value: number, base: number): string {\n if (typeof value !== 'number' || !isFinite(value)) {\n return '';\n }\n const precision = base.toString().split('.')?.[1]?.length ?? 0;\n const splitValue = value.toString().split('.');\n\n let stringValue = splitValue[0];\n if (precision > 0) {\n stringValue = `${stringValue}.${(splitValue[1] ?? '').padEnd(precision, '0').slice(0, precision)}`;\n }\n return stringValue;\n }\n}\n"],"mappings":";AAAA,IAAa,IAAb,MAAwB;CACtB,OAAc,MAAM,GAAgC;EAClD,IAAI,OAAO,KAAU,UACnB,OAAO;EAGT,IAAI,OAAO,KAAU,YAAY,EAAM,KAAK,MAAM,IAChD,OAAO;EAGT,IAAI,IAAiB,EAClB,KAAK,CAAC,CACN,QAAQ,gBAAgB,EAAE,GAGvB,KAAuB,EAAe,MAAM,MAAM,KAAK,CAAC,EAAA,CAAG,QAC3D,KAAsB,EAAe,MAAM,MAAM,KAAK,CAAC,EAAA,CAAG,QAC1D,KAAsB,EAAe,MAAM,OAAO,KAAK,CAAC,EAAA,CAAG;EA0BjE,OAxBI;GAAC;GAAqB;GAAoB;EAAkB,CAAC,CAAC,QAAO,MAAS,IAAQ,CAAC,CAAC,CAAC,SAAS,IAC7F,MAGL,IAAqB,IAGhB,WAAW,EAAe,QAAQ,UAAU,EAAE,CAAC,IAEpD,IAAqB,KAEvB,IAAiB,EAAe,QAAQ,OAAO,EAAE,GAE1C,WAAW,EAAe,QAAQ,KAAK,GAAG,CAAC,KAEhD,IAAsB,KAExB,IAAiB,EAAe,QAAQ,UAAU,EAAE,CAAC,CAAC,QAAQ,KAAK,GAAG,GAC/D,WAAW,CAAc,MAGlC,IAAiB,EAAe,QAAQ,uBAAuB,EAAE,CAAC,CAC/D,QAAQ,KAAK,GAAG,GAEZ,WAAW,CAAc;CAClC;CAGA,OAAc,sBAAsB,GAAe,GAAsB;EACvE,IAAI,OAAO,KAAU,YAAY,CAAC,SAAS,CAAK,GAC9C,OAAO;EAET,IAAM,IAAY,EAAK,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,EAAE,UAAU,GACvD,IAAa,EAAM,SAAS,CAAC,CAAC,MAAM,GAAG,GAEzC,IAAc,EAAW;EAI7B,OAHI,IAAY,MACd,IAAc,GAAG,EAAY,IAAI,EAAW,MAAM,GAAA,CAAI,OAAO,GAAW,GAAG,CAAC,CAAC,MAAM,GAAG,CAAS,MAE1F;CACT;AACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare class ObjectUtil {
|
|
2
|
+
static deepNullifyEmptyStrings<T>(inputObject: T): T;
|
|
3
|
+
static getObjectDiff(obj1: Record<string, unknown>, obj2: Record<string, unknown>): string[];
|
|
4
|
+
static mergeWithUndefined<T extends {
|
|
5
|
+
[key: string]: unknown;
|
|
6
|
+
}>(obj1: T, obj2: T): T;
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ObjectUtil';
|