@dappworks/kit 0.4.68 → 0.4.69
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/dist/{PromiseState-2a8c856c.d.ts → PromiseState-b0cc408e.d.ts} +3 -0
- package/dist/{chunk-N4XCPX4L.mjs → chunk-4YCP5CJ4.mjs} +9 -2
- package/dist/chunk-4YCP5CJ4.mjs.map +1 -0
- package/dist/{chunk-CFVG66F4.mjs → chunk-66N3D7MI.mjs} +1 -1
- package/dist/chunk-66N3D7MI.mjs.map +1 -0
- package/dist/{chunk-SXQEYWUP.mjs → chunk-DZMNL4BZ.mjs} +1 -1
- package/dist/chunk-DZMNL4BZ.mjs.map +1 -0
- package/dist/{chunk-WAYJJYKN.mjs → chunk-OZ3JSH5J.mjs} +2 -2
- package/dist/{chunk-I5WU3NZO.mjs → chunk-PPYYRQDD.mjs} +26 -15
- package/dist/chunk-PPYYRQDD.mjs.map +1 -0
- package/dist/chunk-Y23EH2XR.mjs +24 -0
- package/dist/chunk-Y23EH2XR.mjs.map +1 -0
- package/dist/{chunk-VB62FUWK.mjs → chunk-YOCDMBRI.mjs} +2 -2
- package/dist/dev.mjs +111 -29
- package/dist/dev.mjs.map +1 -1
- package/dist/experimental.mjs +2 -2
- package/dist/form.d.mts +2 -105
- package/dist/form.mjs +72 -78
- package/dist/form.mjs.map +1 -1
- package/dist/index.d.mts +8 -28
- package/dist/index.mjs +24 -72
- package/dist/index.mjs.map +1 -1
- package/dist/jsontable.mjs +3 -3
- package/dist/metrics.mjs +20 -37
- package/dist/metrics.mjs.map +1 -1
- package/dist/plugins.d.mts +5 -5
- package/dist/plugins.mjs +4 -4
- package/dist/ui.d.mts +10 -1
- package/dist/ui.mjs +2 -1
- package/dist/ui.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-CFVG66F4.mjs.map +0 -1
- package/dist/chunk-I5WU3NZO.mjs.map +0 -1
- package/dist/chunk-N4XCPX4L.mjs.map +0 -1
- package/dist/chunk-SXQEYWUP.mjs.map +0 -1
- package/dist/chunk-ZPPKSMXO.mjs +0 -90
- package/dist/chunk-ZPPKSMXO.mjs.map +0 -1
- /package/dist/{chunk-WAYJJYKN.mjs.map → chunk-OZ3JSH5J.mjs.map} +0 -0
- /package/dist/{chunk-VB62FUWK.mjs.map → chunk-YOCDMBRI.mjs.map} +0 -0
|
@@ -24,6 +24,8 @@ declare class PromiseState<T extends (...args: any[]) => Promise<any>, U = Retur
|
|
|
24
24
|
loadingLock: boolean;
|
|
25
25
|
event: EventEmitter;
|
|
26
26
|
on<E extends keyof Events>(event: E, listener: Events[E]): this;
|
|
27
|
+
once<E extends keyof Events>(event: E, listener: Events[E]): this;
|
|
28
|
+
use<E extends keyof Events>(event: E, listener: Events[E]): () => EventEmitter;
|
|
27
29
|
emit<E extends keyof Events>(event: E, ...args: Parameters<Events[E]>): void;
|
|
28
30
|
init: () => Promise<void>;
|
|
29
31
|
currentIndex: BaseState;
|
|
@@ -44,6 +46,7 @@ declare class PromiseState<T extends (...args: any[]) => Promise<any>, U = Retur
|
|
|
44
46
|
constructor(args?: Partial<PromiseState<T, U>>);
|
|
45
47
|
setValue(val: any): Promise<void>;
|
|
46
48
|
call(...args: Parameters<T>): Promise<Awaited<U>>;
|
|
49
|
+
signOut: () => void;
|
|
47
50
|
}
|
|
48
51
|
|
|
49
52
|
export { PromiseState as P };
|
|
@@ -5,7 +5,14 @@ import toast, { Toaster } from 'react-hot-toast';
|
|
|
5
5
|
var ToastPlugin = class {
|
|
6
6
|
constructor() {
|
|
7
7
|
this.sid = "ToastPlugin";
|
|
8
|
-
this.provider = () => /* @__PURE__ */ React.createElement(
|
|
8
|
+
this.provider = () => /* @__PURE__ */ React.createElement(
|
|
9
|
+
Toaster,
|
|
10
|
+
{
|
|
11
|
+
toastOptions: {
|
|
12
|
+
className: "!bg-[#fff] !text-[#000] dark:!bg-[#333] dark:!text-[#fff] !rounded-md !shadow-md"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
);
|
|
9
16
|
this.success = toast.success;
|
|
10
17
|
this.error = toast.error;
|
|
11
18
|
this.loading = toast.loading;
|
|
@@ -18,4 +25,4 @@ var ToastPlugin = class {
|
|
|
18
25
|
|
|
19
26
|
export { ToastPlugin };
|
|
20
27
|
//# sourceMappingURL=out.js.map
|
|
21
|
-
//# sourceMappingURL=chunk-
|
|
28
|
+
//# sourceMappingURL=chunk-4YCP5CJ4.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../module/Toast/Toast.tsx"],"names":[],"mappings":";AAAA,OAAO,WAAW;AAClB,OAAO,SAAS,eAAe;AAGxB,IAAM,cAAN,MAAmC;AAAA,EAAnC;AACL,eAAM;AACN,oBAAW,MACT;AAAA,MAAC;AAAA;AAAA,QACC,cAAc;AAAA,UACZ,WAAW;AAAA,QACb;AAAA;AAAA,IACF;AAGF,mBAAU,MAAM;AAChB,iBAAQ,MAAM;AACd,mBAAU,MAAM;AAChB,kBAAS,MAAM;AACf,mBAAU,MAAM;AAChB,kBAAS,MAAM;AACf,mBAAU,MAAM;AAAA;AAClB","sourcesContent":["import React from \"react\";\nimport toast, { Toaster } from \"react-hot-toast\";\nimport { type Store } from \"../../store/standard/base\";\n\nexport class ToastPlugin implements Store {\n sid = \"ToastPlugin\";\n provider = () => (\n <Toaster\n toastOptions={{\n className: '!bg-[#fff] !text-[#000] dark:!bg-[#333] dark:!text-[#fff] !rounded-md !shadow-md',\n }}\n />\n );\n\n success = toast.success;\n error = toast.error;\n loading = toast.loading;\n custom = toast.custom;\n dismiss = toast.dismiss;\n remove = toast.remove;\n promise = toast.promise;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../lib/helper.ts"],"names":[],"mappings":"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","sourcesContent":["import BN from \"bignumber.js\";\nimport JSONFormat from \"json-format\";\nimport { _ } from \"./lodash\";\nimport copy from \"copy-to-clipboard\";\nimport numeral from \"numeral\";\n\nconst valMap = {\n undefined: \"\",\n null: \"\",\n false: false,\n};\n\nexport const helper = {\n env: {\n isIopayMobile: () => navigator.userAgent && (navigator.userAgent.includes(\"IoPayAndroid\") || navigator.userAgent.includes(\"IoPayiOs\")),\n isBrowser: () => typeof window === \"object\",\n onBrowser(func) {\n if (this.isBrowser()) {\n func();\n }\n },\n },\n promise: {\n async sleep(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n },\n async runAsync<T, U = Error>(promise: Promise<T>): Promise<[U | null, T | null]> {\n return promise.then<[null, T]>((data: T) => [null, data]).catch<[U, null]>((err) => [err, null]);\n },\n },\n object: {\n crawlObject(object, options) {\n const newObj = JSON.parse(JSON.stringify(object));\n return helper.object.crawl(newObj, options);\n },\n crawl(object, options) {\n Object.keys(object).forEach((i) => {\n if (typeof object[i] === \"object\") {\n helper.object.crawl(object[i], options);\n } else {\n const handler = options[typeof object[i]];\n if (handler) {\n object[i] = handler(object[i]);\n }\n }\n });\n return object;\n },\n },\n json: {\n isJsonString(str: string) {\n if (!str || typeof str !== \"string\") return false;\n if (!str?.includes(\"{\")) return false;\n try {\n JSON.parse(str);\n } catch (e) {\n return false;\n }\n return true;\n },\n safeParse(val: any) {\n try {\n return JSON.parse(val);\n } catch (error) {\n return val;\n }\n },\n },\n deepAssign(target, ...sources) {\n sources.forEach((source) => {\n Object.keys(source).forEach((key) => {\n let descriptor = Object.getOwnPropertyDescriptor(source, key);\n if (descriptor && descriptor?.get) {\n return Object.defineProperty(target, key, descriptor);\n }\n const targetValue = target[key];\n let sourceValue = source[key];\n if (helper.isObject(targetValue) && helper.isObject(sourceValue)) {\n try {\n target[key] = helper.deepAssign(targetValue, sourceValue);\n } catch (e) {\n target[key] = Object.assign(targetValue, sourceValue);\n }\n } else {\n target[key] = sourceValue;\n }\n });\n });\n return target;\n },\n isObject(value) {\n return value != null && typeof value === \"object\";\n },\n deepMerge(obj, newObj) {\n const newVal = _.mergeWith(obj, newObj, (...args) => {\n const [objValue, srcValue] = args;\n if (typeof srcValue === \"object\") {\n return helper.deepMerge(objValue, srcValue);\n }\n return srcValue || valMap[srcValue];\n });\n return newVal;\n },\n img: {\n parse(src: string | undefined) {\n if (!src) return \"/img-404.svg\";\n if (src?.startsWith(\"ipfs\")) {\n return \"https://ipfs.io/ipfs/\" + src.split(\"://\")[1];\n }\n return src;\n },\n },\n string: {\n copy(str: string) {\n copy(str);\n },\n fristUpper(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n },\n firstUpperCase(str: string) {\n return str.replace(/^\\S/, (s) => s.toUpperCase());\n },\n toFixString(str, length) {\n if (str && str.length > length) {\n return str.substr(0, length) + \"...\";\n } else {\n return str;\n }\n },\n truncate(fullStr = \"\", strLen, separator) {\n if (fullStr.length <= strLen) return fullStr;\n\n separator = separator || \"...\";\n\n var sepLen = separator.length,\n charsToShow = strLen - sepLen,\n frontChars = Math.ceil(charsToShow / 2),\n backChars = Math.floor(charsToShow / 2);\n\n return fullStr.substr(0, frontChars) + separator + fullStr.substr(fullStr.length - backChars);\n },\n validAbi(abi: string): { abi: any[]; address: string } {\n try {\n JSON.parse(abi);\n const _abi = helper.json.safeParse(abi);\n if (!_abi) {\n return { abi: [], address: \"\" };\n }\n if (Array.isArray(_abi)) {\n return { abi: _abi, address: \"\" };\n } else if (_abi.abi && _abi.address) {\n return { abi: _abi.abi, address: _abi.address };\n } else if (_abi.abi && !_abi.addresses) {\n return { abi: _abi.abi, address: \"\" };\n }\n return { abi: [], address: \"\" };\n } catch (error) {\n return { abi: [], address: \"\" };\n }\n },\n random(count: number) {\n const chars = \"abcdefghijklmnopqrstuvwxyz\";\n let result = \"\";\n for (let i = 0; i < count; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n return result;\n },\n },\n download: {\n downloadByBlob(name: string, blob: Blob) {\n const a = document.createElement(\"a\");\n const href = window.URL.createObjectURL(blob);\n a.href = href;\n a.download = name;\n a.click();\n },\n downloadJSON(name: string, jsonObj: object) {\n try {\n const jsonStr: string = JSONFormat(jsonObj);\n const blob = new Blob([jsonStr], { type: \"application/json\" });\n this.downloadByBlob(name + \".json\", blob);\n } catch (error) {\n console.error(error);\n }\n },\n },\n number: {\n countNonZeroNumbers: (str: string) => {\n let index = 0;\n const length = str.length;\n for (; index < length && (str[index] === \"0\" || str[index] === \".\"); index += 1);\n return length - index - Number(str.includes(\".\"));\n },\n numberWithCommas(num: number) {\n return num.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n },\n getBN: (value: number | string | BN) => {\n return value instanceof BN ? value : typeof value === \"string\" ? new BN(Number(value)) : new BN(value);\n },\n toPrecisionFloor: (str: number | string, options?: { decimals?: number; format?: string; toLocalString?: boolean }) => {\n const { decimals = 6, format = \"\", toLocalString = false } = options || {};\n if (!str || isNaN(Number(str))) return \"\";\n\n if (helper.number.countNonZeroNumbers(String(str)) <= decimals) return String(str);\n const numStr = new BN(str).toFixed();\n let result = \"\";\n let index = 0;\n const numLength = numStr.length;\n\n for (; numStr[index] === \"0\" && index < numLength; index += 1);\n\n if (index === numLength) return \"0\";\n\n if (numStr[index] === \".\") {\n // number < 0\n result = \"0\";\n for (; (numStr[index] === \"0\" || numStr[index] === \".\") && index < numLength; index += 1) {\n result = result + numStr[index];\n }\n }\n let resultNumLength = 0;\n for (; index < numLength && (resultNumLength < decimals || !result.includes(\".\")); index += 1) {\n result = result + numStr[index];\n\n if (numStr[index] !== \".\") resultNumLength += 1;\n }\n if (format) {\n return numeral(Number(result)).format(format);\n }\n\n if (toLocalString) {\n return helper.number.numberWithCommas(Number(new BN(result).toFixed()));\n }\n\n return new BN(result).toFixed();\n },\n },\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../store/index.ts"],"names":[],"mappings":";;;;;AAEO,IAAM,YAAY,UAAU,KAAe;AAE3C,IAAM,WAAW,MAAM,UAAU,KAAK","sourcesContent":["import { RootStore, EventMap } from \"./root\";\n\nexport const rootStore = RootStore.init<EventMap>();\n\nexport const useStore = () => RootStore.init();\n\nexport { RootStore };\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useStore, rootStore } from './chunk-
|
|
1
|
+
import { useStore, rootStore } from './chunk-DZMNL4BZ.mjs';
|
|
2
2
|
import { cn } from './chunk-6UHBBDKI.mjs';
|
|
3
3
|
import { __spreadProps, __spreadValues } from './chunk-6F7H4PAA.mjs';
|
|
4
4
|
import React from 'react';
|
|
@@ -70,4 +70,4 @@ var DialogStore = class _DialogStore {
|
|
|
70
70
|
|
|
71
71
|
export { DialogStore };
|
|
72
72
|
//# sourceMappingURL=out.js.map
|
|
73
|
-
//# sourceMappingURL=chunk-
|
|
73
|
+
//# sourceMappingURL=chunk-OZ3JSH5J.mjs.map
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { ToastPlugin } from './chunk-
|
|
1
|
+
import { ToastPlugin } from './chunk-4YCP5CJ4.mjs';
|
|
2
2
|
import { RootStore } from './chunk-HRWHDF2F.mjs';
|
|
3
3
|
import { makeAutoObservable } from 'mobx';
|
|
4
4
|
import { EventEmitter } from 'events';
|
|
5
|
+
import { useEffect } from 'react';
|
|
5
6
|
|
|
6
7
|
var Store = class {
|
|
7
8
|
};
|
|
@@ -86,6 +87,19 @@ var PromiseState = class {
|
|
|
86
87
|
this.event.on(event, listener);
|
|
87
88
|
return this;
|
|
88
89
|
}
|
|
90
|
+
once(event, listener) {
|
|
91
|
+
this.event.once(event, listener);
|
|
92
|
+
return this;
|
|
93
|
+
}
|
|
94
|
+
use(event, listener) {
|
|
95
|
+
useEffect(() => {
|
|
96
|
+
this.event.on(event, listener);
|
|
97
|
+
return () => {
|
|
98
|
+
this.event.off(event, listener);
|
|
99
|
+
};
|
|
100
|
+
}, []);
|
|
101
|
+
return () => this.event.off(event, listener);
|
|
102
|
+
}
|
|
89
103
|
emit(event, ...args) {
|
|
90
104
|
this.event.emit(event, ...args);
|
|
91
105
|
}
|
|
@@ -141,8 +155,8 @@ var PromiseState = class {
|
|
|
141
155
|
this.event.emit("data", val);
|
|
142
156
|
this.event.emit("update");
|
|
143
157
|
}
|
|
144
|
-
//@ts-ignore
|
|
145
158
|
async call(...args) {
|
|
159
|
+
var _a;
|
|
146
160
|
const toast = RootStore.Get(ToastPlugin);
|
|
147
161
|
try {
|
|
148
162
|
if (this.loadingLock && this.loading.value == true)
|
|
@@ -157,18 +171,15 @@ var PromiseState = class {
|
|
|
157
171
|
} catch (error) {
|
|
158
172
|
if (this.autoAlert) {
|
|
159
173
|
const message = error.message;
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
toast.error(
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
this.errMsg = message;
|
|
170
|
-
toast.error(message);
|
|
171
|
-
}
|
|
174
|
+
if (message.includes("UNAUTHORIZED")) {
|
|
175
|
+
toast.dismiss();
|
|
176
|
+
toast.error(message, {
|
|
177
|
+
id: "UNAUTHORIZED"
|
|
178
|
+
});
|
|
179
|
+
(_a = this.signOut) == null ? void 0 : _a.call(this);
|
|
180
|
+
} else {
|
|
181
|
+
this.errMsg = message;
|
|
182
|
+
toast.error(message);
|
|
172
183
|
}
|
|
173
184
|
} else {
|
|
174
185
|
this.event.emit("error", error);
|
|
@@ -183,4 +194,4 @@ var PromiseState = class {
|
|
|
183
194
|
|
|
184
195
|
export { BooleanState, NumberState, PromiseState, Store, StringState, ValueState };
|
|
185
196
|
//# sourceMappingURL=out.js.map
|
|
186
|
-
//# sourceMappingURL=chunk-
|
|
197
|
+
//# sourceMappingURL=chunk-PPYYRQDD.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../store/standard/base.ts","../store/standard/PromiseState.ts"],"names":["makeAutoObservable"],"mappings":"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","sourcesContent":["import { makeAutoObservable } from \"mobx\";\n\nimport { type RootStore } from \"../root\";\n\nexport abstract class Store {\n sid?: string;\n stype?: string;\n disabled?: boolean;\n autoObservable?: boolean;\n autoAsyncable?: boolean;\n\n stores?: Store[];\n\n private pannel?: {\n title: string;\n render: any;\n };\n devtools?: {\n enable?: boolean;\n started?: boolean;\n panels: Store[\"pannel\"][];\n };\n\n private slot?: {\n name?: string;\n input?: Record<string, any>;\n render: React.FC;\n };\n slots?: Record<string, Store[\"slot\"]>;\n\n events?: Record<string, { name: string; handler(args: { e: MouseEvent; v?: any }): any }>;\n\n provider?({ rootStore }: { rootStore: RootStore }): any;\n\n onNewStore?({ rootStore, store }: { rootStore: RootStore; store: Store }): void;\n onAddedStores?({ rootStore }: { rootStore: RootStore }): void;\n onAdded?({ rootStore }: { rootStore: RootStore }): void;\n\n init?(): void;\n JSONView?: Record<string, { name: string; render: React.FC }>;\n\n onKeyBindings?: () => { key: string; fn: () => void }[];\n}\n\nexport type StoreClass<T extends Store> = new (...args: any[]) => T;\n\nexport interface BaseState {\n value: number;\n setValue(value: any): any;\n}\n\nexport class StringState<T extends string> {\n //@ts-ignore\n value: T = null;\n constructor(args: Partial<StringState<T>> = {}) {\n Object.assign(this, args);\n makeAutoObservable(this);\n }\n setValue(value: T) {\n this.value = value;\n }\n}\n\nexport class BooleanState {\n value: boolean = false;\n constructor(args: Partial<BooleanState> = {}) {\n Object.assign(this, args);\n makeAutoObservable(this);\n }\n setValue(value: boolean) {\n this.value = value;\n }\n}\n\nexport class NumberState {\n value: number = 0;\n constructor(args: Partial<NumberState> = {}) {\n Object.assign(this, args);\n makeAutoObservable(this);\n }\n setValue(value: number) {\n this.value = value;\n }\n}\n\nexport class ValueState<T> {\n //@ts-ignore\n _value: T = null;\n constructor(args: Partial<ValueState<T>> = {}) {\n Object.assign(this, args);\n makeAutoObservable(this);\n }\n\n get value() {\n return this.getValue ? this.getValue(this._value) : this._value;\n }\n\n set value(value) {\n this._value = value;\n }\n\n getValue: (value: T) => T;\n\n setValue(value: T) {\n this._value = value;\n }\n}\n\n// export interface Events {\n// data: (data: any) => void;\n// error: (error: any) => void;\n// update: () => void;\n// wait: () => void;\n// }\n","import { EventEmitter } from \"events\";\nimport { makeAutoObservable } from \"mobx\";\nimport { ToastPlugin } from \"../../module/Toast/Toast\";\nimport { RootStore } from \"../root\";\nimport { BaseState, BooleanState, NumberState } from \"./base\";\nimport { useEffect } from \"react\";\n\nexport interface Events {\n data: (data: any) => void;\n error: (error: any) => void;\n select: (index: number) => void;\n update: () => void;\n finally: () => void;\n wait: () => void;\n}\n\nexport class PromiseState<T extends (...args: any[]) => Promise<any>, U = ReturnType<T>> {\n sid = \"PromiseState\";\n key?: string;\n loading = new BooleanState();\n //@ts-ignore\n value?: Awaited<U> = null;\n defaultValue: any = null;\n function: T;\n transform?: (value: any) => Promise<Awaited<U>> | Awaited<U> = null;\n\n autoAlert = true;\n context: any = undefined;\n\n successMsg: string = \"\";\n errMsg: string = \"\";\n\n loadingLock = true;\n\n // event plugin\n event = new EventEmitter();\n\n on<E extends keyof Events>(event: E, listener: Events[E]) {\n this.event.on(event, listener);\n return this;\n }\n\n once<E extends keyof Events>(event: E, listener: Events[E]) {\n this.event.once(event, listener);\n return this;\n }\n\n use<E extends keyof Events>(event: E, listener: Events[E]) {\n useEffect(() => {\n this.event.on(event, listener);\n return () => {\n this.event.off(event, listener);\n };\n }, []);\n\n return () => this.event.off(event, listener);\n }\n\n emit<E extends keyof Events>(event: E, ...args: Parameters<Events[E]>) {\n this.event.emit(event, ...args);\n }\n\n // init plugin\n init: () => Promise<void>;\n\n // list selector plugin\n currentIndex: BaseState = new NumberState({ value: 0 });\n get current() {\n if (Array.isArray(this.value) && this.value.length > 0 && !this.value[this.currentIndex.value]) {\n this.currentIndex.setValue(0);\n }\n //@ts-ignore\n return this.value[this.currentIndex.value];\n }\n\n _onSelect(index: number) {\n this.currentIndex.setValue(index);\n this.event.emit(\"select\", index);\n this.event.emit(\"update\");\n }\n\n onSelect(index: number) {\n this._onSelect(index);\n }\n\n toJSON() {\n return {\n value: this.value,\n };\n }\n\n //@ts-ignore\n async waitItem(): Promise<Awaited<U>[0]> {\n await this.wait();\n return this.current;\n }\n\n // wait hook plugin\n async wait({ call = false } = {}): Promise<Awaited<U>> {\n return new Promise<Awaited<U>>((res, rej) => {\n if (this.value) {\n if (Array.isArray(this.value)) {\n if (this.value.length > 0) {\n res(this.value);\n }\n } else {\n res(this.value);\n }\n }\n\n //@ts-ignore\n if (call && !this.loading.value) this.call();\n this.event.emit(\"wait\");\n this.event.once(\"data\", res);\n this.event.on(\"error\", rej);\n });\n }\n\n // devtool plugin\n debug: { name: string; input: Record<string, any> } = null;\n\n constructor(args: Partial<PromiseState<T, U>> = {}) {\n Object.assign(this, args);\n if (this.defaultValue) {\n this.value = this.defaultValue;\n }\n if (this.key) {\n RootStore.init().add(this, { sid: this.key });\n } else {\n makeAutoObservable(this);\n }\n }\n\n async setValue(val) {\n let _val = val;\n if (this.transform) {\n _val = await this.transform(val);\n }\n this.value = _val;\n this.event.emit(\"data\", val);\n this.event.emit(\"update\");\n }\n\n async call(...args: Parameters<T>): Promise<Awaited<U>> {\n const toast = RootStore.Get(ToastPlugin);\n try {\n if (this.loadingLock && this.loading.value == true) return;\n this.loading.setValue(true);\n const res = await this.function.apply(this.context, args);\n this.setValue(res);\n if (this.autoAlert && this.successMsg && res) {\n toast.success(this.successMsg);\n }\n return res;\n } catch (error) {\n if (this.autoAlert) {\n const message = error.message;\n if (message.includes(\"UNAUTHORIZED\")) {\n toast.dismiss();\n toast.error(message, {\n id: \"UNAUTHORIZED\",\n });\n this.signOut?.();\n } else {\n this.errMsg = message;\n toast.error(message);\n }\n } else {\n this.event.emit(\"error\", error);\n throw error;\n }\n } finally {\n this.event.emit(\"finally\");\n this.loading.setValue(false);\n }\n }\n\n // 401 403\n signOut: () => void;\n}\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { cn } from './chunk-6UHBBDKI.mjs';
|
|
2
|
+
import { Skeleton } from '@nextui-org/react';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
|
|
5
|
+
var SkeletonBox = ({ line, skClassName, className }) => {
|
|
6
|
+
const lineCamp = [...new Array(line || 1).keys()];
|
|
7
|
+
return /* @__PURE__ */ React.createElement("div", { className: cn("flex items-center gap-4", className) }, lineCamp.map((_, index) => {
|
|
8
|
+
return /* @__PURE__ */ React.createElement(
|
|
9
|
+
Skeleton,
|
|
10
|
+
{
|
|
11
|
+
key: index,
|
|
12
|
+
classNames: {
|
|
13
|
+
base: "transition-background !duration-700 before:transition-opacity before:!duration-700",
|
|
14
|
+
content: "transition-opacity motion-reduce:transition-none !duration-700"
|
|
15
|
+
},
|
|
16
|
+
className: cn("w-full h-10", skClassName)
|
|
17
|
+
}
|
|
18
|
+
);
|
|
19
|
+
}));
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export { SkeletonBox };
|
|
23
|
+
//# sourceMappingURL=out.js.map
|
|
24
|
+
//# sourceMappingURL=chunk-Y23EH2XR.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../components/Common/SkeletonBox/index.tsx"],"names":[],"mappings":";;;;;AACA,SAAS,gBAAgB;AACzB,OAAO,WAAW;AAQX,IAAM,cAAc,CAAC,EAAE,MAAM,aAAa,UAAU,MAAkE;AAC3H,QAAM,WAAW,CAAC,GAAG,IAAI,MAAM,QAAQ,CAAC,EAAE,KAAK,CAAC;AAEhD,SACE,oCAAC,SAAI,WAAW,GAAG,2BAA2B,SAAS,KACpD,SAAS,IAAI,CAAC,GAAG,UAAU;AAC1B,WACE;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,YAAY;AAAA,UACV,MAAM;AAAA,UACN,SAAS;AAAA,QACX;AAAA,QACA,WAAW,GAAG,eAAe,WAAW;AAAA;AAAA,IAC1C;AAAA,EAEJ,CAAC,CACH;AAEJ","sourcesContent":["\nimport { Skeleton } from '@nextui-org/react';\nimport React from 'react';\nimport { cn } from '../../../lib/utils';\n\nexport interface SkeletonBox {\n line?: number;\n skClassName: string;\n}\n\nexport const SkeletonBox = ({ line, skClassName, className }: SkeletonBox & { skClassName?: string; className?: string }) => {\n const lineCamp = [...new Array(line || 1).keys()];\n\n return (\n <div className={cn('flex items-center gap-4', className)}>\n {lineCamp.map((_, index) => {\n return (\n <Skeleton\n key={index}\n classNames={{\n base: 'transition-background !duration-700 before:transition-opacity before:!duration-700',\n content: 'transition-opacity motion-reduce:transition-none !duration-700',\n }}\n className={cn('w-full h-10', skClassName)}\n />\n );\n })}\n </div>\n );\n};\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { PaginationState } from './chunk-ONVPCAMQ.mjs';
|
|
2
|
-
import { DialogStore } from './chunk-
|
|
2
|
+
import { DialogStore } from './chunk-OZ3JSH5J.mjs';
|
|
3
3
|
import { JSONHighlight } from './chunk-U7JFOBSQ.mjs';
|
|
4
4
|
import { _ } from './chunk-MGU3KYGC.mjs';
|
|
5
5
|
import { cn } from './chunk-6UHBBDKI.mjs';
|
|
@@ -512,4 +512,4 @@ function CardOnMobile({
|
|
|
512
512
|
|
|
513
513
|
export { JSONTable, JSONTable_default };
|
|
514
514
|
//# sourceMappingURL=out.js.map
|
|
515
|
-
//# sourceMappingURL=chunk-
|
|
515
|
+
//# sourceMappingURL=chunk-YOCDMBRI.mjs.map
|
package/dist/dev.mjs
CHANGED
|
@@ -1,27 +1,28 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import './chunk-MGU3KYGC.mjs';
|
|
1
|
+
import { helper } from './chunk-66N3D7MI.mjs';
|
|
2
|
+
import { _ } from './chunk-MGU3KYGC.mjs';
|
|
4
3
|
import { cn } from './chunk-6UHBBDKI.mjs';
|
|
5
4
|
import { __objRest, __spreadProps, __spreadValues } from './chunk-6F7H4PAA.mjs';
|
|
6
|
-
import * as
|
|
7
|
-
import
|
|
5
|
+
import * as React3 from 'react';
|
|
6
|
+
import React3__default, { useMemo, useRef } from 'react';
|
|
8
7
|
import * as SheetPrimitive from '@radix-ui/react-dialog';
|
|
9
8
|
import { cva } from 'class-variance-authority';
|
|
10
9
|
import { Wrench, X } from 'lucide-react';
|
|
11
|
-
import { Tabs, Tab } from '@nextui-org/react';
|
|
10
|
+
import { Tabs, Tab, Button } from '@nextui-org/react';
|
|
12
11
|
import { observer, useLocalObservable } from 'mobx-react-lite';
|
|
13
12
|
import { toJS } from 'mobx';
|
|
14
13
|
import EventEmitter from 'events';
|
|
14
|
+
import MonacoEditor from '@monaco-editor/react';
|
|
15
|
+
import * as jsonpatch from 'fast-json-patch';
|
|
15
16
|
|
|
16
17
|
var Sheet = SheetPrimitive.Root;
|
|
17
18
|
var SheetPortal = (_a) => {
|
|
18
19
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
19
|
-
return /* @__PURE__ */
|
|
20
|
+
return /* @__PURE__ */ React3.createElement(SheetPrimitive.Portal, __spreadValues({ className: cn(className) }, props));
|
|
20
21
|
};
|
|
21
22
|
SheetPortal.displayName = SheetPrimitive.Portal.displayName;
|
|
22
|
-
var SheetOverlay =
|
|
23
|
+
var SheetOverlay = React3.forwardRef((_a, ref) => {
|
|
23
24
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
24
|
-
return /* @__PURE__ */
|
|
25
|
+
return /* @__PURE__ */ React3.createElement(SheetPrimitive.Overlay, __spreadProps(__spreadValues({ className: cn("fixed inset-0 z-50 bg-background/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0", className) }, props), { ref }));
|
|
25
26
|
});
|
|
26
27
|
SheetOverlay.displayName = SheetPrimitive.Overlay.displayName;
|
|
27
28
|
var sheetVariants = cva("fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500", {
|
|
@@ -39,24 +40,105 @@ var sheetVariants = cva("fixed z-50 gap-4 bg-background p-6 shadow-lg transition
|
|
|
39
40
|
});
|
|
40
41
|
var SheetClose = (_a) => {
|
|
41
42
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
42
|
-
return /* @__PURE__ */
|
|
43
|
+
return /* @__PURE__ */ React3.createElement(SheetPrimitive.Close, __spreadValues({ className: cn("absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary", className) }, props), /* @__PURE__ */ React3.createElement(X, { className: "h-4 w-4" }), /* @__PURE__ */ React3.createElement("span", { className: "sr-only" }, "Close"));
|
|
43
44
|
};
|
|
44
45
|
SheetClose.displayName = "Close";
|
|
45
|
-
var SheetContent =
|
|
46
|
+
var SheetContent = React3.forwardRef((_a, ref) => {
|
|
46
47
|
var _b = _a, { side = "right", className, children, showOverlay = false, open } = _b, props = __objRest(_b, ["side", "className", "children", "showOverlay", "open"]);
|
|
47
|
-
return /* @__PURE__ */
|
|
48
|
+
return /* @__PURE__ */ React3.createElement(SheetPortal, null, showOverlay && /* @__PURE__ */ React3.createElement(SheetOverlay, null), /* @__PURE__ */ React3.createElement("div", __spreadValues({ ref, "data-state": open ? "open" : "closed", className: cn(sheetVariants({ side }), className) }, props), children));
|
|
48
49
|
});
|
|
49
50
|
SheetContent.displayName = SheetPrimitive.Content.displayName;
|
|
50
|
-
var SheetTitle =
|
|
51
|
+
var SheetTitle = React3.forwardRef((_a, ref) => {
|
|
51
52
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
52
|
-
return /* @__PURE__ */
|
|
53
|
+
return /* @__PURE__ */ React3.createElement(SheetPrimitive.Title, __spreadValues({ ref, className: cn("text-lg font-semibold text-foreground", className) }, props));
|
|
53
54
|
});
|
|
54
55
|
SheetTitle.displayName = SheetPrimitive.Title.displayName;
|
|
55
|
-
var SheetDescription =
|
|
56
|
+
var SheetDescription = React3.forwardRef((_a, ref) => {
|
|
56
57
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
57
|
-
return /* @__PURE__ */
|
|
58
|
+
return /* @__PURE__ */ React3.createElement(SheetPrimitive.Description, __spreadValues({ ref, className: cn("text-sm text-muted-foreground", className) }, props));
|
|
58
59
|
});
|
|
59
60
|
SheetDescription.displayName = SheetPrimitive.Description.displayName;
|
|
61
|
+
var JSONEditor = ({ className, height = "100%", initialJson, onChange, onSubmit }) => {
|
|
62
|
+
const valueRef = useRef(initialJson);
|
|
63
|
+
const changeValueRef = useRef(
|
|
64
|
+
_.debounce((initialJson2, currentJson) => {
|
|
65
|
+
if (onChange) {
|
|
66
|
+
try {
|
|
67
|
+
const tree1 = JSON.parse(initialJson2);
|
|
68
|
+
const tree2 = JSON.parse(currentJson);
|
|
69
|
+
const diff = jsonpatch.compare(tree1, tree2);
|
|
70
|
+
const applyDiff = (diff2) => {
|
|
71
|
+
const result2 = {};
|
|
72
|
+
for (const change of diff2) {
|
|
73
|
+
const { op, path, value } = change;
|
|
74
|
+
const keys = path.split("/").filter((key) => key !== "");
|
|
75
|
+
let current = result2;
|
|
76
|
+
for (let i = 0; i < keys.length - 1; i++) {
|
|
77
|
+
const key = keys[i];
|
|
78
|
+
if (!current[key]) {
|
|
79
|
+
current[key] = {};
|
|
80
|
+
}
|
|
81
|
+
current = current[key];
|
|
82
|
+
}
|
|
83
|
+
let lastKey = keys[keys.length - 1];
|
|
84
|
+
lastKey = lastKey.replace("~1", "/");
|
|
85
|
+
if (op === "replace") {
|
|
86
|
+
current[lastKey] = value;
|
|
87
|
+
}
|
|
88
|
+
if (op === "add") {
|
|
89
|
+
current[lastKey] = value;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return result2;
|
|
93
|
+
};
|
|
94
|
+
const result = applyDiff(diff);
|
|
95
|
+
if (Object.keys(result).length > 0) {
|
|
96
|
+
onChange(result);
|
|
97
|
+
}
|
|
98
|
+
} catch (error) {
|
|
99
|
+
console.error(error);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}, 1e3)
|
|
103
|
+
);
|
|
104
|
+
return /* @__PURE__ */ React3__default.createElement("div", { className: cn("relative w-full", className) }, /* @__PURE__ */ React3__default.createElement(
|
|
105
|
+
MonacoEditor,
|
|
106
|
+
{
|
|
107
|
+
options: {
|
|
108
|
+
minimap: {
|
|
109
|
+
enabled: false
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
height,
|
|
113
|
+
theme: "vs-dark",
|
|
114
|
+
language: "json",
|
|
115
|
+
value: initialJson,
|
|
116
|
+
onChange: (v) => {
|
|
117
|
+
var _a;
|
|
118
|
+
(_a = changeValueRef.current) == null ? void 0 : _a.call(changeValueRef, initialJson, v);
|
|
119
|
+
valueRef.current = v;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
), onSubmit && /* @__PURE__ */ React3__default.createElement(
|
|
123
|
+
Button,
|
|
124
|
+
{
|
|
125
|
+
className: "z-50 absolute bottom-[50px] right-[20px]",
|
|
126
|
+
color: "primary",
|
|
127
|
+
size: "sm",
|
|
128
|
+
onClick: () => {
|
|
129
|
+
try {
|
|
130
|
+
const json = JSON.parse(valueRef.current);
|
|
131
|
+
onSubmit(json);
|
|
132
|
+
} catch (error) {
|
|
133
|
+
console.error(error);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
"Submit"
|
|
138
|
+
));
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
// module/Devtool/devtool.tsx
|
|
60
142
|
function filterState(obj) {
|
|
61
143
|
if (obj.toJSON) {
|
|
62
144
|
return obj.toJSON();
|
|
@@ -85,7 +167,7 @@ var DevTool = class {
|
|
|
85
167
|
constructor(args = {}) {
|
|
86
168
|
this.sid = "DevTool";
|
|
87
169
|
this.stype = "Plugin";
|
|
88
|
-
this.provider = ({ rootStore }) => /* @__PURE__ */
|
|
170
|
+
this.provider = ({ rootStore }) => /* @__PURE__ */ React3__default.createElement(DevToolProvider, { rootStore });
|
|
89
171
|
this.disabled = false;
|
|
90
172
|
this.autoObservable = true;
|
|
91
173
|
this.isOpen = false;
|
|
@@ -105,7 +187,7 @@ var DevTool = class {
|
|
|
105
187
|
const filteredData = filterState(state.curStore || {});
|
|
106
188
|
return JSON.stringify(toJS(filteredData), null, 2);
|
|
107
189
|
}, [state.curStore]);
|
|
108
|
-
return /* @__PURE__ */
|
|
190
|
+
return /* @__PURE__ */ React3__default.createElement("div", { className: "flex flex-col md:flex-row text-sm" }, /* @__PURE__ */ React3__default.createElement("div", null, /* @__PURE__ */ React3__default.createElement(
|
|
109
191
|
Tabs,
|
|
110
192
|
{
|
|
111
193
|
size: "sm",
|
|
@@ -115,9 +197,9 @@ var DevTool = class {
|
|
|
115
197
|
},
|
|
116
198
|
(item) => {
|
|
117
199
|
const stores = Object.values(rootStore.instance).filter((i) => i.stype == item.value && i.sid).sort((a, b) => a.sid.length - b.sid.length);
|
|
118
|
-
return /* @__PURE__ */
|
|
200
|
+
return /* @__PURE__ */ React3__default.createElement(Tab, { key: item.title, title: item.title }, /* @__PURE__ */ React3__default.createElement("div", null, /* @__PURE__ */ React3__default.createElement("div", { className: "w-full md:w-[300px] space-y-1 pr-2 overflow-auto" }, stores.map((store) => {
|
|
119
201
|
var _a;
|
|
120
|
-
return /* @__PURE__ */
|
|
202
|
+
return /* @__PURE__ */ React3__default.createElement(
|
|
121
203
|
"div",
|
|
122
204
|
{
|
|
123
205
|
key: store == null ? void 0 : store.sid,
|
|
@@ -130,7 +212,7 @@ var DevTool = class {
|
|
|
130
212
|
);
|
|
131
213
|
}))));
|
|
132
214
|
}
|
|
133
|
-
)), /* @__PURE__ */
|
|
215
|
+
)), /* @__PURE__ */ React3__default.createElement("div", { className: "mt-4 w-full overflow-auto md:mt-0" }, /* @__PURE__ */ React3__default.createElement(
|
|
134
216
|
JSONEditor,
|
|
135
217
|
{
|
|
136
218
|
className: "h-full",
|
|
@@ -165,7 +247,7 @@ var DevToolProvider = observer(({ rootStore }) => {
|
|
|
165
247
|
const store = useLocalObservable(() => ({
|
|
166
248
|
sheetHeight: minSheetHeight
|
|
167
249
|
}));
|
|
168
|
-
return /* @__PURE__ */
|
|
250
|
+
return /* @__PURE__ */ React3__default.createElement(React3__default.Fragment, null, /* @__PURE__ */ React3__default.createElement("div", { className: "fixed right-4 bottom-4 z-10" }, /* @__PURE__ */ React3__default.createElement(
|
|
169
251
|
"div",
|
|
170
252
|
{
|
|
171
253
|
className: "p-1 rounded-sm bg-gray-300 hover:bg-gray-400 dark:bg-gray-600 dark:hover:bg-gray-500 cursor-pointer",
|
|
@@ -173,8 +255,8 @@ var DevToolProvider = observer(({ rootStore }) => {
|
|
|
173
255
|
devTool.isOpen = true;
|
|
174
256
|
}
|
|
175
257
|
},
|
|
176
|
-
/* @__PURE__ */
|
|
177
|
-
)), /* @__PURE__ */
|
|
258
|
+
/* @__PURE__ */ React3__default.createElement(Wrench, { size: 20 })
|
|
259
|
+
)), /* @__PURE__ */ React3__default.createElement(Sheet, { open: devTool.isOpen }, /* @__PURE__ */ React3__default.createElement(
|
|
178
260
|
SheetContent,
|
|
179
261
|
{
|
|
180
262
|
open: devTool.isOpen,
|
|
@@ -184,8 +266,8 @@ var DevToolProvider = observer(({ rootStore }) => {
|
|
|
184
266
|
height: store.sheetHeight
|
|
185
267
|
}
|
|
186
268
|
},
|
|
187
|
-
/* @__PURE__ */
|
|
188
|
-
/* @__PURE__ */
|
|
269
|
+
/* @__PURE__ */ React3__default.createElement("div", { className: "absolute top-0 left-0 h-[32px] w-full bg-gray-100 dark:bg-gray-800" }),
|
|
270
|
+
/* @__PURE__ */ React3__default.createElement(
|
|
189
271
|
SheetClose,
|
|
190
272
|
{
|
|
191
273
|
className: "top-2 right-2",
|
|
@@ -194,7 +276,7 @@ var DevToolProvider = observer(({ rootStore }) => {
|
|
|
194
276
|
}
|
|
195
277
|
}
|
|
196
278
|
),
|
|
197
|
-
/* @__PURE__ */
|
|
279
|
+
/* @__PURE__ */ React3__default.createElement(
|
|
198
280
|
"div",
|
|
199
281
|
{
|
|
200
282
|
className: "absolute top-[-8px] left-0 w-full h-[10px] cursor-row-resize",
|
|
@@ -216,7 +298,7 @@ var DevToolProvider = observer(({ rootStore }) => {
|
|
|
216
298
|
}
|
|
217
299
|
}
|
|
218
300
|
),
|
|
219
|
-
/* @__PURE__ */
|
|
301
|
+
/* @__PURE__ */ React3__default.createElement(
|
|
220
302
|
Tabs,
|
|
221
303
|
{
|
|
222
304
|
className: "w-full",
|
|
@@ -226,7 +308,7 @@ var DevToolProvider = observer(({ rootStore }) => {
|
|
|
226
308
|
},
|
|
227
309
|
(panel) => {
|
|
228
310
|
const Component = panel.render || (() => null);
|
|
229
|
-
return /* @__PURE__ */
|
|
311
|
+
return /* @__PURE__ */ React3__default.createElement(Tab, { key: panel.title, title: panel.title }, /* @__PURE__ */ React3__default.createElement("div", { className: "p-0", style: { height: `calc(${store.sheetHeight}px - 50px)` } }, /* @__PURE__ */ React3__default.createElement(Component, { rootStore })));
|
|
230
312
|
}
|
|
231
313
|
)
|
|
232
314
|
)));
|
package/dist/dev.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../components/ui/sheet.tsx","../module/Devtool/devtool.tsx"],"names":["React"],"mappings":"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","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { X } from \"lucide-react\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst Sheet = SheetPrimitive.Root;\n\nconst SheetTrigger = SheetPrimitive.Trigger;\n\nconst SheetPortal = ({ className, ...props }: SheetPrimitive.DialogPortalProps) => <SheetPrimitive.Portal className={cn(className)} {...props} />;\nSheetPortal.displayName = SheetPrimitive.Portal.displayName;\n\nconst SheetOverlay = React.forwardRef<React.ElementRef<typeof SheetPrimitive.Overlay>, React.ComponentPropsWithoutRef<typeof SheetPrimitive.Overlay>>(({ className, ...props }, ref) => (\n <SheetPrimitive.Overlay className={cn(\"fixed inset-0 z-50 bg-background/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\", className)} {...props} ref={ref} />\n));\nSheetOverlay.displayName = SheetPrimitive.Overlay.displayName;\n\nconst sheetVariants = cva(\"fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500\", {\n variants: {\n side: {\n top: \"inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top\",\n bottom: \"inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\",\n left: \"inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm\",\n right: \"inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm\",\n },\n },\n defaultVariants: {\n side: \"right\",\n },\n});\n\nconst SheetClose = ({ className, ...props }: SheetPrimitive.DialogCloseProps) => (\n <SheetPrimitive.Close className={cn(\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary\", className)} {...props}>\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n);\nSheetClose.displayName = \"Close\";\n\ninterface SheetContentProps extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>, VariantProps<typeof sheetVariants> {}\n\nconst SheetContent = React.forwardRef<React.ElementRef<typeof SheetPrimitive.Content>, SheetContentProps & { showOverlay?: boolean; open?: boolean }>(({ side = \"right\", className, children, showOverlay = false, open, ...props }, ref) => {\n return (\n <SheetPortal>\n {showOverlay && <SheetOverlay />}\n <div ref={ref} data-state={open ? \"open\" : \"closed\"} className={cn(sheetVariants({ side }), className)} {...props}>\n {children}\n </div>\n </SheetPortal>\n );\n});\nSheetContent.displayName = SheetPrimitive.Content.displayName;\n\nconst SheetHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => <div className={cn(\"flex flex-col space-y-2 text-center sm:text-left\", className)} {...props} />;\nSheetHeader.displayName = \"SheetHeader\";\n\nconst SheetFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => <div className={cn(\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\", className)} {...props} />;\nSheetFooter.displayName = \"SheetFooter\";\n\nconst SheetTitle = React.forwardRef<React.ElementRef<typeof SheetPrimitive.Title>, React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title>>(({ className, ...props }, ref) => <SheetPrimitive.Title ref={ref} className={cn(\"text-lg font-semibold text-foreground\", className)} {...props} />);\nSheetTitle.displayName = SheetPrimitive.Title.displayName;\n\nconst SheetDescription = React.forwardRef<React.ElementRef<typeof SheetPrimitive.Description>, React.ComponentPropsWithoutRef<typeof SheetPrimitive.Description>>(({ className, ...props }, ref) => (\n <SheetPrimitive.Description ref={ref} className={cn(\"text-sm text-muted-foreground\", className)} {...props} />\n));\nSheetDescription.displayName = SheetPrimitive.Description.displayName;\n\nexport { Sheet, SheetTrigger, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription, SheetClose };\n","import { Sheet, SheetClose, SheetContent } from \"../../components/ui/sheet\";\nimport { Tabs, Tab } from \"@nextui-org/react\";\nimport { cn } from \"../../lib/utils\";\nimport { RootStore } from \"../../store/root\";\nimport { PromiseState } from \"../../store/standard/PromiseState\";\nimport { Store } from \"../../store/standard/base\";\nimport { Wrench } from \"lucide-react\";\nimport { observer, useLocalObservable } from \"mobx-react-lite\";\nimport { toJS } from \"mobx\";\nimport { helper } from \"../../lib/helper\";\nimport EventEmitter from \"events\";\nimport { useMemo } from \"react\";\nimport React from \"react\";\nimport { JSONEditor } from \"../../components/JSONEditor\"\n\nfunction filterState(obj) {\n if (obj.toJSON) {\n return obj.toJSON()\n }\n\n if (typeof obj !== \"object\" || obj === null) {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(filterState);\n }\n\n const filteredObj = {};\n\n for (const [key, value] of Object.entries(obj)) {\n try {\n if (\n ![\"sid\", \"disabled\", \"autoObservable\", \"promiseState\", \"autoAsyncable\", \"stype\"].includes(key) &&\n // !(value instanceof PromiseState) &&\n !(value instanceof EventEmitter) &&\n !value?.hasOwnProperty(\"$$typeof\")\n ) {\n filteredObj[key] = filterState(value);\n }\n } catch (error) {\n console.error(error);\n return obj;\n }\n }\n\n return filteredObj;\n}\n\nexport class DevTool implements Store {\n sid = \"DevTool\";\n stype = \"Plugin\"\n provider = ({ rootStore }: { rootStore: RootStore }) => <DevToolProvider rootStore={rootStore} />;\n disabled?: boolean = false;\n autoObservable?: boolean = true;\n isOpen = false;\n\n panels: Store[\"pannel\"][] = [\n {\n title: \"Store\",\n render: observer(({ rootStore }: { rootStore: RootStore }) => {\n const state = useLocalObservable<{\n curStore: Store;\n curPromiseStateList: { name: string; promiseState: PromiseState<any, any> }[];\n }>(() => ({\n //@ts-ignore\n curStore: null,\n curPromiseStateList: [],\n }));\n const initialJson = useMemo(() => {\n //@ts-ignore\n if (state.curStore?.toJSON) return JSON.stringify(state.curStore?.toJSON(), null, 2);\n const filteredData = filterState(state.curStore || {});\n return JSON.stringify(toJS(filteredData), null, 2);\n }, [state.curStore]);\n return (\n <div className=\"flex flex-col md:flex-row text-sm\">\n <div>\n <Tabs\n size=\"sm\"\n radius=\"none\"\n variant=\"underlined\"\n items={[{ title: \"Store\", value: \"Store\" }, { title: \"Plugin\", value: \"Plugin\" }]}\n >\n {(item) => {\n const stores = Object.values(rootStore.instance).filter(i => i.stype == item.value && i.sid).sort((a, b) => a.sid.length - b.sid.length);\n return (\n <Tab key={item.title} title={item.title} >\n <div>\n <div className=\"w-full md:w-[300px] space-y-1 pr-2 overflow-auto\">\n {stores.map((store) => {\n return (\n <div\n key={store?.sid}\n className={cn(\"px-2 rounded-md hover:bg-green-600 hover:text-white cursor-pointer\", { \"bg-green-600 text-white\": state.curStore?.sid === store.sid })}\n onClick={() => {\n state.curStore = store;\n }}\n >\n {store.sid}\n </div>\n );\n })}\n </div>\n </div>\n </Tab>\n )\n }}\n </Tabs>\n </div>\n\n <div className=\"mt-4 w-full overflow-auto md:mt-0\">\n <JSONEditor\n className={\"h-full\"}\n height={450}\n initialJson={initialJson}\n onChange={(data) => {\n console.log(\"onChange\", data);\n helper.deepMerge(state.curStore, data);\n }}\n />\n {/* <PromiseStateDebug promiseStateList={state.curPromiseStateList} /> */}\n </div>\n </div>\n );\n }),\n },\n ];\n\n onNewStore({ rootStore }: { rootStore: RootStore }) {\n Object.values(rootStore.instance).forEach((store) => {\n if (store.devtools?.started) return;\n if (store.devtools?.panels) {\n store.devtools.started = true;\n this.panels = [...this.panels, ...store.devtools?.panels];\n }\n });\n }\n\n constructor(args: Partial<DevTool> = {}) {\n Object.assign(this, args);\n }\n}\n\n// const PromiseStateDebug = ({ promiseStateList }: { promiseStateList: { name: string; promiseState: PromiseState<any, any> }[] }) => {\n// if (promiseStateList.length === 0) return null;\n// return (\n// <>\n// <div className=\"mt-6 mb-2 pt-2 border-t-[1px] font-bold dark:border-gray-600\">Debug PromiseState</div>\n// <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4\">\n// {promiseStateList.map((item, index) => {\n// const formData = item.promiseState.debug.input;\n// return (\n// <Card className=\"p-2 dark:border-gray-800\" key={index}>\n// <div className=\"font-bold text-xs\">{item.name}</div>\n// <JSONSchemaForm\n// formState={getFormState({\n// data: formData,\n// onSubmit: (data) => {\n// item.promiseState.call(data);\n// },\n// })}\n// />\n// </Card>\n// );\n// })}\n// </div>\n// </>\n// );\n// };\n\nexport const DevToolProvider = observer(({ rootStore }: { rootStore: RootStore }) => {\n const devTool = rootStore.get(DevTool);\n const minSheetHeight = 500;\n const store = useLocalObservable(() => ({\n sheetHeight: minSheetHeight,\n }));\n return (\n <>\n <div className=\"fixed right-4 bottom-4 z-10\">\n <div\n className=\"p-1 rounded-sm bg-gray-300 hover:bg-gray-400 dark:bg-gray-600 dark:hover:bg-gray-500 cursor-pointer\"\n onClick={() => {\n devTool.isOpen = true;\n }}\n >\n <Wrench size={20} />\n </div>\n </div>\n <Sheet open={devTool.isOpen}>\n <SheetContent\n open={devTool.isOpen}\n side=\"bottom\"\n className=\"p-0 outline-none bg-card dark:border-none\"\n style={{\n height: store.sheetHeight,\n }}\n >\n <div className=\"absolute top-0 left-0 h-[32px] w-full bg-gray-100 dark:bg-gray-800\"></div>\n <SheetClose\n className=\"top-2 right-2\"\n onClick={() => {\n devTool.isOpen = false;\n }}\n />\n <div\n className=\"absolute top-[-8px] left-0 w-full h-[10px] cursor-row-resize\"\n onMouseDown={(e) => {\n const startH = store.sheetHeight;\n const startPageY = e.pageY;\n const onMouseMove = (mouseMoveEvent: MouseEvent) => {\n const diff = startPageY - mouseMoveEvent.pageY;\n const h = startH + diff;\n if (h > minSheetHeight && h < window.innerHeight) {\n store.sheetHeight = h;\n }\n };\n const onMouseUp = () => {\n document.body.removeEventListener(\"mousemove\", onMouseMove);\n };\n document.body.addEventListener(\"mousemove\", onMouseMove);\n document.body.addEventListener(\"mouseup\", onMouseUp, { once: true });\n }}\n />\n <Tabs\n className='w-full'\n size=\"sm\"\n radius=\"none\"\n items={devTool.panels}\n >\n {(panel) => {\n const Component = panel.render || (() => null);\n return (\n <Tab key={panel.title} title={panel.title}>\n <div className=\"p-0\" style={{ height: `calc(${store.sheetHeight}px - 50px)` }}>\n <Component rootStore={rootStore} />\n </div>\n </Tab>\n )\n }}\n </Tabs>\n </SheetContent>\n </Sheet>\n </>\n );\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../components/ui/sheet.tsx","../module/Devtool/devtool.tsx","../components/JSONEditor/index.tsx"],"names":["React","initialJson","diff","result"],"mappings":";;;;;;;;;;;;;;;;AAEA,YAAY,WAAW;AACvB,YAAY,oBAAoB;AAChC,SAAS,WAA8B;AACvC,SAAS,SAAS;AAIlB,IAAM,QAAuB;AAI7B,IAAM,cAAc,CAAC,OAA2D;AAA3D,eAAE,YAbvB,IAaqB,IAAgB,kBAAhB,IAAgB,CAAd;AAA4D,6CAAgB,uBAAf,iBAAsB,WAAW,GAAG,SAAS,KAAO,MAAO;AAAA;AAC/I,YAAY,cAA6B,sBAAO;AAEhD,IAAM,eAAqB,iBAA2H,CAAC,IAAyB,QAAK;AAA9B,eAAE,YAhBzJ,IAgBuJ,IAAgB,kBAAhB,IAAgB,CAAd;AACvJ,6CAAgB,wBAAf,+BAAuB,WAAW,GAAG,gLAAgL,SAAS,KAAO,QAArO,EAA4O,MAAU;AAAA,CACxP;AACD,aAAa,cAA6B,uBAAQ;AAElD,IAAM,gBAAgB,IAAI,oMAAoM;AAAA,EAC5N,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,EACR;AACF,CAAC;AAED,IAAM,aAAa,CAAC,OAA0D;AAA1D,eAAE,YAnCtB,IAmCoB,IAAgB,kBAAhB,IAAgB,CAAd;AACpB,6CAAgB,sBAAf,iBAAqB,WAAW,GAAG,4OAA4O,SAAS,KAAO,QAC9R,oCAAC,KAAE,WAAU,WAAU,GACvB,oCAAC,UAAK,WAAU,aAAU,OAAK,CACjC;AAAA;AAEF,WAAW,cAAc;AAIzB,IAAM,eAAqB,iBAA2H,CAAC,IAA8E,QAAQ;AAAtF,eAAE,SAAO,SAAS,WAAW,UAAU,cAAc,OAAO,KA7CnN,IA6CuJ,IAAqE,kBAArE,IAAqE,CAAnE,QAAgB,aAAW,YAAU,eAAqB;AACjN,SACE,oCAAC,mBACE,eAAe,oCAAC,kBAAa,GAC9B,oCAAC,wBAAI,KAAU,cAAY,OAAO,SAAS,UAAU,WAAW,GAAG,cAAc,EAAE,KAAK,CAAC,GAAG,SAAS,KAAO,QACzG,QACH,CACF;AAEJ,CAAC;AACD,aAAa,cAA6B,uBAAQ;AAElD,IAAM,cAAc,CAAC,OAA+D;AAA/D,eAAE,YAzDvB,IAyDqB,IAAgB,kBAAhB,IAAgB,CAAd;AAAgE,6CAAC,wBAAI,WAAW,GAAG,oDAAoD,SAAS,KAAO,MAAO;AAAA;AACrL,YAAY,cAAc;AAE1B,IAAM,cAAc,CAAC,OAA+D;AAA/D,eAAE,YA5DvB,IA4DqB,IAAgB,kBAAhB,IAAgB,CAAd;AAAgE,6CAAC,wBAAI,WAAW,GAAG,iEAAiE,SAAS,KAAO,MAAO;AAAA;AAClM,YAAY,cAAc;AAE1B,IAAM,aAAmB,iBAAuH,CAAC,IAAyB,QAAK;AAA9B,eAAE,YA/DnJ,IA+DiJ,IAAgB,kBAAhB,IAAgB,CAAd;AAA+B,6CAAgB,sBAAf,iBAAqB,KAAU,WAAW,GAAG,yCAAyC,SAAS,KAAO,MAAO;AAAA,CAAE;AAClS,WAAW,cAA6B,qBAAM;AAE9C,IAAM,mBAAyB,iBAAmI,CAAC,IAAyB,QAAK;AAA9B,eAAE,YAlErK,IAkEmK,IAAgB,kBAAhB,IAAgB,CAAd;AACnK,6CAAgB,4BAAf,iBAA2B,KAAU,WAAW,GAAG,iCAAiC,SAAS,KAAO,MAAO;AAAA,CAC7G;AACD,iBAAiB,cAA6B,2BAAY;;;ACpE1D,SAAS,MAAM,WAAW;AAK1B,SAAS,cAAc;AACvB,SAAS,UAAU,0BAA0B;AAC7C,SAAS,YAAY;AAErB,OAAO,kBAAkB;AACzB,SAAS,eAAe;AACxB,OAAOA,YAAW;;;ACVlB,OAAOA,UAAS,cAAc;AAC9B,OAAO,kBAAkB;AAEzB,YAAY,eAAe;AAE3B,SAAS,cAAc;AAEhB,IAAM,aAAa,CAAC,EAAE,WAAW,SAAS,QAAQ,aAAa,UAAU,SAAS,MAA+K;AACtQ,QAAM,WAAW,OAAe,WAAW;AAC3C,QAAM,iBAAiB;AAAA,IACrB,EAAE,SAAS,CAACC,cAAqB,gBAAwB;AACvD,UAAI,UAAU;AACZ,YAAI;AACF,gBAAM,QAAQ,KAAK,MAAMA,YAAW;AACpC,gBAAM,QAAQ,KAAK,MAAM,WAAW;AACpC,gBAAM,OAAiB,kBAAQ,OAAO,KAAK;AAE3C,gBAAM,YAAY,CAACC,UAAS;AAC1B,kBAAMC,UAAS,CAAC;AAChB,uBAAW,UAAUD,OAAM;AACzB,oBAAM,EAAE,IAAI,MAAM,MAAM,IAAI;AAE5B,oBAAM,OAAO,KAAK,MAAM,GAAG,EAAE,OAAO,CAAC,QAAQ,QAAQ,EAAE;AACvD,kBAAI,UAAUC;AACd,uBAAS,IAAI,GAAG,IAAI,KAAK,SAAS,GAAG,KAAK;AACxC,sBAAM,MAAM,KAAK,CAAC;AAElB,oBAAI,CAAC,QAAQ,GAAG,GAAG;AAEjB,0BAAQ,GAAG,IAAI,CAAC;AAAA,gBAClB;AAEA,0BAAU,QAAQ,GAAG;AAAA,cACvB;AACA,kBAAI,UAAU,KAAK,KAAK,SAAS,CAAC;AAClC,wBAAU,QAAQ,QAAQ,MAAM,GAAG;AACnC,kBAAI,OAAO,WAAW;AAEpB,wBAAQ,OAAO,IAAI;AAAA,cACrB;AACA,kBAAI,OAAO,OAAO;AAEhB,wBAAQ,OAAO,IAAI;AAAA,cACrB;AAAA,YACF;AACA,mBAAOA;AAAA,UACT;AACA,gBAAM,SAAS,UAAU,IAAI;AAC7B,cAAI,OAAO,KAAK,MAAM,EAAE,SAAS,GAAG;AAClC,qBAAS,MAAM;AAAA,UACjB;AAAA,QACF,SAAS,OAAO;AACd,kBAAQ,MAAM,KAAK;AAAA,QACrB;AAAA,MACF;AAAA,IACF,GAAG,GAAI;AAAA,EACT;AAEA,SACE,gBAAAH,OAAA,cAAC,SAAI,WAAW,GAAG,mBAAmB,SAAS,KAC7C,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAS;AAAA,QACP,SAAS;AAAA,UACP,SAAS;AAAA,QACX;AAAA,MACF;AAAA,MACA;AAAA,MACA,OAAM;AAAA,MACN,UAAS;AAAA,MACT,OAAO;AAAA,MACP,UAAU,CAAC,MAAM;AAxEzB;AAyEU,6BAAe,YAAf,wCAAyB,aAAa;AAEtC,iBAAS,UAAU;AAAA,MACrB;AAAA;AAAA,EACF,GACC,YACC,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAM;AAAA,MACN,MAAK;AAAA,MACL,SAAS,MAAM;AACb,YAAI;AACF,gBAAM,OAAO,KAAK,MAAM,SAAS,OAAO;AACxC,mBAAS,IAAI;AAAA,QACf,SAAS,OAAO;AACd,kBAAQ,MAAM,KAAK;AAAA,QACrB;AAAA,MACF;AAAA;AAAA,IAAG;AAAA,EAEL,CAEJ;AAEJ;;;ADjFA,SAAS,YAAY,KAAK;AACxB,MAAI,IAAI,QAAQ;AACd,WAAO,IAAI,OAAO;AAAA,EACpB;AAEA,MAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC3C,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,WAAO,IAAI,IAAI,WAAW;AAAA,EAC5B;AAEA,QAAM,cAAc,CAAC;AAErB,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,GAAG,GAAG;AAC9C,QAAI;AACF,UACE,CAAC,CAAC,OAAO,YAAY,kBAAkB,gBAAgB,iBAAiB,OAAO,EAAE,SAAS,GAAG;AAAA,MAE7F,EAAE,iBAAiB,iBACnB,EAAC,+BAAO,eAAe,cACvB;AACA,oBAAY,GAAG,IAAI,YAAY,KAAK;AAAA,MACtC;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAM,KAAK;AACnB,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAEO,IAAM,UAAN,MAA+B;AAAA,EA0FpC,YAAY,OAAyB,CAAC,GAAG;AAzFzC,eAAM;AACN,iBAAQ;AACR,oBAAW,CAAC,EAAE,UAAU,MAAgC,gBAAAA,OAAA,cAAC,mBAAgB,WAAsB;AAC/F,oBAAqB;AACrB,0BAA2B;AAC3B,kBAAS;AAET,kBAA4B;AAAA,MAC1B;AAAA,QACE,OAAO;AAAA,QACP,QAAQ,SAAS,CAAC,EAAE,UAAU,MAAgC;AAC5D,gBAAM,QAAQ,mBAGX,OAAO;AAAA;AAAA,YAER,UAAU;AAAA,YACV,qBAAqB,CAAC;AAAA,UACxB,EAAE;AACF,gBAAM,cAAc,QAAQ,MAAM;AArE1C;AAuEU,iBAAI,WAAM,aAAN,mBAAgB;AAAQ,qBAAO,KAAK,WAAU,WAAM,aAAN,mBAAgB,UAAU,MAAM,CAAC;AACnF,kBAAM,eAAe,YAAY,MAAM,YAAY,CAAC,CAAC;AACrD,mBAAO,KAAK,UAAU,KAAK,YAAY,GAAG,MAAM,CAAC;AAAA,UACnD,GAAG,CAAC,MAAM,QAAQ,CAAC;AACnB,iBACE,gBAAAA,OAAA,cAAC,SAAI,WAAU,uCACb,gBAAAA,OAAA,cAAC,aACC,gBAAAA,OAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,QAAO;AAAA,cACP,SAAQ;AAAA,cACR,OAAO,CAAC,EAAE,OAAO,SAAS,OAAO,QAAQ,GAAG,EAAE,OAAO,UAAU,OAAO,SAAS,CAAC;AAAA;AAAA,YAE/E,CAAC,SAAS;AACT,oBAAM,SAAS,OAAO,OAAO,UAAU,QAAQ,EAAE,OAAO,OAAK,EAAE,SAAS,KAAK,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,IAAI,SAAS,EAAE,IAAI,MAAM;AACvI,qBACE,gBAAAA,OAAA,cAAC,OAAI,KAAK,KAAK,OAAO,OAAO,KAAK,SAChC,gBAAAA,OAAA,cAAC,aACC,gBAAAA,OAAA,cAAC,SAAI,WAAU,sDACZ,OAAO,IAAI,CAAC,UAAU;AA1FjD;AA2F4B,uBACE,gBAAAA,OAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,KAAK,+BAAO;AAAA,oBACZ,WAAW,GAAG,sEAAsE,EAAE,6BAA2B,WAAM,aAAN,mBAAgB,SAAQ,MAAM,IAAI,CAAC;AAAA,oBACpJ,SAAS,MAAM;AACb,4BAAM,WAAW;AAAA,oBACnB;AAAA;AAAA,kBAEC,MAAM;AAAA,gBACT;AAAA,cAEJ,CAAC,CACH,CACF,CACF;AAAA,YAEJ;AAAA,UACF,CACF,GAEA,gBAAAA,OAAA,cAAC,SAAI,WAAU,uCACb,gBAAAA,OAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,cACX,QAAQ;AAAA,cACR;AAAA,cACA,UAAU,CAAC,SAAS;AAClB,wBAAQ,IAAI,YAAY,IAAI;AAC5B,uBAAO,UAAU,MAAM,UAAU,IAAI;AAAA,cACvC;AAAA;AAAA,UACF,CAEF,CACF;AAAA,QAEJ,CAAC;AAAA,MACH;AAAA,IACF;AAaE,WAAO,OAAO,MAAM,IAAI;AAAA,EAC1B;AAAA,EAZA,WAAW,EAAE,UAAU,GAA6B;AAClD,WAAO,OAAO,UAAU,QAAQ,EAAE,QAAQ,CAAC,UAAU;AAlIzD;AAmIM,WAAI,WAAM,aAAN,mBAAgB;AAAS;AAC7B,WAAI,WAAM,aAAN,mBAAgB,QAAQ;AAC1B,cAAM,SAAS,UAAU;AACzB,aAAK,SAAS,CAAC,GAAG,KAAK,QAAQ,IAAG,WAAM,aAAN,mBAAgB,MAAM;AAAA,MAC1D;AAAA,IACF,CAAC;AAAA,EACH;AAKF;AA6BO,IAAM,kBAAkB,SAAS,CAAC,EAAE,UAAU,MAAgC;AACnF,QAAM,UAAU,UAAU,IAAI,OAAO;AACrC,QAAM,iBAAiB;AACvB,QAAM,QAAQ,mBAAmB,OAAO;AAAA,IACtC,aAAa;AAAA,EACf,EAAE;AACF,SACE,gBAAAA,OAAA,cAAAA,OAAA,gBACE,gBAAAA,OAAA,cAAC,SAAI,WAAU,iCACb,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,SAAS,MAAM;AACb,gBAAQ,SAAS;AAAA,MACnB;AAAA;AAAA,IAEA,gBAAAA,OAAA,cAAC,UAAO,MAAM,IAAI;AAAA,EACpB,CACF,GACA,gBAAAA,OAAA,cAAC,SAAM,MAAM,QAAQ,UACnB,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,QAAQ;AAAA,MACd,MAAK;AAAA,MACL,WAAU;AAAA,MACV,OAAO;AAAA,QACL,QAAQ,MAAM;AAAA,MAChB;AAAA;AAAA,IAEA,gBAAAA,OAAA,cAAC,SAAI,WAAU,sEAAqE;AAAA,IACpF,gBAAAA,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,SAAS,MAAM;AACb,kBAAQ,SAAS;AAAA,QACnB;AAAA;AAAA,IACF;AAAA,IACA,gBAAAA,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,aAAa,CAAC,MAAM;AAClB,gBAAM,SAAS,MAAM;AACrB,gBAAM,aAAa,EAAE;AACrB,gBAAM,cAAc,CAAC,mBAA+B;AAClD,kBAAM,OAAO,aAAa,eAAe;AACzC,kBAAM,IAAI,SAAS;AACnB,gBAAI,IAAI,kBAAkB,IAAI,OAAO,aAAa;AAChD,oBAAM,cAAc;AAAA,YACtB;AAAA,UACF;AACA,gBAAM,YAAY,MAAM;AACtB,qBAAS,KAAK,oBAAoB,aAAa,WAAW;AAAA,UAC5D;AACA,mBAAS,KAAK,iBAAiB,aAAa,WAAW;AACvD,mBAAS,KAAK,iBAAiB,WAAW,WAAW,EAAE,MAAM,KAAK,CAAC;AAAA,QACrE;AAAA;AAAA,IACF;AAAA,IACA,gBAAAA,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,MAAK;AAAA,QACL,QAAO;AAAA,QACP,OAAO,QAAQ;AAAA;AAAA,MAEd,CAAC,UAAU;AACV,cAAM,YAAY,MAAM,WAAW,MAAM;AACzC,eACE,gBAAAA,OAAA,cAAC,OAAI,KAAK,MAAM,OAAO,OAAO,MAAM,SAClC,gBAAAA,OAAA,cAAC,SAAI,WAAU,OAAM,OAAO,EAAE,QAAQ,QAAQ,MAAM,WAAW,aAAa,KAC1E,gBAAAA,OAAA,cAAC,aAAU,WAAsB,CACnC,CACF;AAAA,MAEJ;AAAA,IACF;AAAA,EACF,CACF,CACF;AAEJ,CAAC","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { X } from \"lucide-react\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst Sheet = SheetPrimitive.Root;\n\nconst SheetTrigger = SheetPrimitive.Trigger;\n\nconst SheetPortal = ({ className, ...props }: SheetPrimitive.DialogPortalProps) => <SheetPrimitive.Portal className={cn(className)} {...props} />;\nSheetPortal.displayName = SheetPrimitive.Portal.displayName;\n\nconst SheetOverlay = React.forwardRef<React.ElementRef<typeof SheetPrimitive.Overlay>, React.ComponentPropsWithoutRef<typeof SheetPrimitive.Overlay>>(({ className, ...props }, ref) => (\n <SheetPrimitive.Overlay className={cn(\"fixed inset-0 z-50 bg-background/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\", className)} {...props} ref={ref} />\n));\nSheetOverlay.displayName = SheetPrimitive.Overlay.displayName;\n\nconst sheetVariants = cva(\"fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500\", {\n variants: {\n side: {\n top: \"inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top\",\n bottom: \"inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\",\n left: \"inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm\",\n right: \"inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm\",\n },\n },\n defaultVariants: {\n side: \"right\",\n },\n});\n\nconst SheetClose = ({ className, ...props }: SheetPrimitive.DialogCloseProps) => (\n <SheetPrimitive.Close className={cn(\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary\", className)} {...props}>\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n);\nSheetClose.displayName = \"Close\";\n\ninterface SheetContentProps extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>, VariantProps<typeof sheetVariants> {}\n\nconst SheetContent = React.forwardRef<React.ElementRef<typeof SheetPrimitive.Content>, SheetContentProps & { showOverlay?: boolean; open?: boolean }>(({ side = \"right\", className, children, showOverlay = false, open, ...props }, ref) => {\n return (\n <SheetPortal>\n {showOverlay && <SheetOverlay />}\n <div ref={ref} data-state={open ? \"open\" : \"closed\"} className={cn(sheetVariants({ side }), className)} {...props}>\n {children}\n </div>\n </SheetPortal>\n );\n});\nSheetContent.displayName = SheetPrimitive.Content.displayName;\n\nconst SheetHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => <div className={cn(\"flex flex-col space-y-2 text-center sm:text-left\", className)} {...props} />;\nSheetHeader.displayName = \"SheetHeader\";\n\nconst SheetFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => <div className={cn(\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\", className)} {...props} />;\nSheetFooter.displayName = \"SheetFooter\";\n\nconst SheetTitle = React.forwardRef<React.ElementRef<typeof SheetPrimitive.Title>, React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title>>(({ className, ...props }, ref) => <SheetPrimitive.Title ref={ref} className={cn(\"text-lg font-semibold text-foreground\", className)} {...props} />);\nSheetTitle.displayName = SheetPrimitive.Title.displayName;\n\nconst SheetDescription = React.forwardRef<React.ElementRef<typeof SheetPrimitive.Description>, React.ComponentPropsWithoutRef<typeof SheetPrimitive.Description>>(({ className, ...props }, ref) => (\n <SheetPrimitive.Description ref={ref} className={cn(\"text-sm text-muted-foreground\", className)} {...props} />\n));\nSheetDescription.displayName = SheetPrimitive.Description.displayName;\n\nexport { Sheet, SheetTrigger, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription, SheetClose };\n","import { Sheet, SheetClose, SheetContent } from \"../../components/ui/sheet\";\nimport { Tabs, Tab } from \"@nextui-org/react\";\nimport { cn } from \"../../lib/utils\";\nimport { RootStore } from \"../../store/root\";\nimport { PromiseState } from \"../../store/standard/PromiseState\";\nimport { Store } from \"../../store/standard/base\";\nimport { Wrench } from \"lucide-react\";\nimport { observer, useLocalObservable } from \"mobx-react-lite\";\nimport { toJS } from \"mobx\";\nimport { helper } from \"../../lib/helper\";\nimport EventEmitter from \"events\";\nimport { useMemo } from \"react\";\nimport React from \"react\";\nimport { JSONEditor } from \"../../components/JSONEditor\"\n\nfunction filterState(obj) {\n if (obj.toJSON) {\n return obj.toJSON()\n }\n\n if (typeof obj !== \"object\" || obj === null) {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(filterState);\n }\n\n const filteredObj = {};\n\n for (const [key, value] of Object.entries(obj)) {\n try {\n if (\n ![\"sid\", \"disabled\", \"autoObservable\", \"promiseState\", \"autoAsyncable\", \"stype\"].includes(key) &&\n // !(value instanceof PromiseState) &&\n !(value instanceof EventEmitter) &&\n !value?.hasOwnProperty(\"$$typeof\")\n ) {\n filteredObj[key] = filterState(value);\n }\n } catch (error) {\n console.error(error);\n return obj;\n }\n }\n\n return filteredObj;\n}\n\nexport class DevTool implements Store {\n sid = \"DevTool\";\n stype = \"Plugin\"\n provider = ({ rootStore }: { rootStore: RootStore }) => <DevToolProvider rootStore={rootStore} />;\n disabled?: boolean = false;\n autoObservable?: boolean = true;\n isOpen = false;\n\n panels: Store[\"pannel\"][] = [\n {\n title: \"Store\",\n render: observer(({ rootStore }: { rootStore: RootStore }) => {\n const state = useLocalObservable<{\n curStore: Store;\n curPromiseStateList: { name: string; promiseState: PromiseState<any, any> }[];\n }>(() => ({\n //@ts-ignore\n curStore: null,\n curPromiseStateList: [],\n }));\n const initialJson = useMemo(() => {\n //@ts-ignore\n if (state.curStore?.toJSON) return JSON.stringify(state.curStore?.toJSON(), null, 2);\n const filteredData = filterState(state.curStore || {});\n return JSON.stringify(toJS(filteredData), null, 2);\n }, [state.curStore]);\n return (\n <div className=\"flex flex-col md:flex-row text-sm\">\n <div>\n <Tabs\n size=\"sm\"\n radius=\"none\"\n variant=\"underlined\"\n items={[{ title: \"Store\", value: \"Store\" }, { title: \"Plugin\", value: \"Plugin\" }]}\n >\n {(item) => {\n const stores = Object.values(rootStore.instance).filter(i => i.stype == item.value && i.sid).sort((a, b) => a.sid.length - b.sid.length);\n return (\n <Tab key={item.title} title={item.title} >\n <div>\n <div className=\"w-full md:w-[300px] space-y-1 pr-2 overflow-auto\">\n {stores.map((store) => {\n return (\n <div\n key={store?.sid}\n className={cn(\"px-2 rounded-md hover:bg-green-600 hover:text-white cursor-pointer\", { \"bg-green-600 text-white\": state.curStore?.sid === store.sid })}\n onClick={() => {\n state.curStore = store;\n }}\n >\n {store.sid}\n </div>\n );\n })}\n </div>\n </div>\n </Tab>\n )\n }}\n </Tabs>\n </div>\n\n <div className=\"mt-4 w-full overflow-auto md:mt-0\">\n <JSONEditor\n className={\"h-full\"}\n height={450}\n initialJson={initialJson}\n onChange={(data) => {\n console.log(\"onChange\", data);\n helper.deepMerge(state.curStore, data);\n }}\n />\n {/* <PromiseStateDebug promiseStateList={state.curPromiseStateList} /> */}\n </div>\n </div>\n );\n }),\n },\n ];\n\n onNewStore({ rootStore }: { rootStore: RootStore }) {\n Object.values(rootStore.instance).forEach((store) => {\n if (store.devtools?.started) return;\n if (store.devtools?.panels) {\n store.devtools.started = true;\n this.panels = [...this.panels, ...store.devtools?.panels];\n }\n });\n }\n\n constructor(args: Partial<DevTool> = {}) {\n Object.assign(this, args);\n }\n}\n\n// const PromiseStateDebug = ({ promiseStateList }: { promiseStateList: { name: string; promiseState: PromiseState<any, any> }[] }) => {\n// if (promiseStateList.length === 0) return null;\n// return (\n// <>\n// <div className=\"mt-6 mb-2 pt-2 border-t-[1px] font-bold dark:border-gray-600\">Debug PromiseState</div>\n// <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4\">\n// {promiseStateList.map((item, index) => {\n// const formData = item.promiseState.debug.input;\n// return (\n// <Card className=\"p-2 dark:border-gray-800\" key={index}>\n// <div className=\"font-bold text-xs\">{item.name}</div>\n// <JSONSchemaForm\n// formState={getFormState({\n// data: formData,\n// onSubmit: (data) => {\n// item.promiseState.call(data);\n// },\n// })}\n// />\n// </Card>\n// );\n// })}\n// </div>\n// </>\n// );\n// };\n\nexport const DevToolProvider = observer(({ rootStore }: { rootStore: RootStore }) => {\n const devTool = rootStore.get(DevTool);\n const minSheetHeight = 500;\n const store = useLocalObservable(() => ({\n sheetHeight: minSheetHeight,\n }));\n return (\n <>\n <div className=\"fixed right-4 bottom-4 z-10\">\n <div\n className=\"p-1 rounded-sm bg-gray-300 hover:bg-gray-400 dark:bg-gray-600 dark:hover:bg-gray-500 cursor-pointer\"\n onClick={() => {\n devTool.isOpen = true;\n }}\n >\n <Wrench size={20} />\n </div>\n </div>\n <Sheet open={devTool.isOpen}>\n <SheetContent\n open={devTool.isOpen}\n side=\"bottom\"\n className=\"p-0 outline-none bg-card dark:border-none\"\n style={{\n height: store.sheetHeight,\n }}\n >\n <div className=\"absolute top-0 left-0 h-[32px] w-full bg-gray-100 dark:bg-gray-800\"></div>\n <SheetClose\n className=\"top-2 right-2\"\n onClick={() => {\n devTool.isOpen = false;\n }}\n />\n <div\n className=\"absolute top-[-8px] left-0 w-full h-[10px] cursor-row-resize\"\n onMouseDown={(e) => {\n const startH = store.sheetHeight;\n const startPageY = e.pageY;\n const onMouseMove = (mouseMoveEvent: MouseEvent) => {\n const diff = startPageY - mouseMoveEvent.pageY;\n const h = startH + diff;\n if (h > minSheetHeight && h < window.innerHeight) {\n store.sheetHeight = h;\n }\n };\n const onMouseUp = () => {\n document.body.removeEventListener(\"mousemove\", onMouseMove);\n };\n document.body.addEventListener(\"mousemove\", onMouseMove);\n document.body.addEventListener(\"mouseup\", onMouseUp, { once: true });\n }}\n />\n <Tabs\n className='w-full'\n size=\"sm\"\n radius=\"none\"\n items={devTool.panels}\n >\n {(panel) => {\n const Component = panel.render || (() => null);\n return (\n <Tab key={panel.title} title={panel.title}>\n <div className=\"p-0\" style={{ height: `calc(${store.sheetHeight}px - 50px)` }}>\n <Component rootStore={rootStore} />\n </div>\n </Tab>\n )\n }}\n </Tabs>\n </SheetContent>\n </Sheet>\n </>\n );\n});\n","\"use client\";\n\nimport React, { useRef } from \"react\";\nimport MonacoEditor from \"@monaco-editor/react\";\nimport { _ } from \"../../lib/lodash\";\nimport * as jsonpatch from \"fast-json-patch\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from '@nextui-org/react';\n\nexport const JSONEditor = ({ className, height = \"100%\", initialJson, onChange, onSubmit }: { className?: string; height?: string | number; initialJson: string; onChange?: (value: Record<string, any>) => void; onSubmit?: (value: Record<string, any>) => void }) => {\n const valueRef = useRef<string>(initialJson);\n const changeValueRef = useRef(\n _.debounce((initialJson: string, currentJson: string) => {\n if (onChange) {\n try {\n const tree1 = JSON.parse(initialJson);\n const tree2 = JSON.parse(currentJson);\n const diff = jsonpatch.compare(tree1, tree2);\n // @ts-ignore\n const applyDiff = (diff) => {\n const result = {};\n for (const change of diff) {\n const { op, path, value } = change;\n // @ts-ignore\n const keys = path.split(\"/\").filter((key) => key !== \"\");\n let current = result;\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i];\n // @ts-ignore\n if (!current[key]) {\n // @ts-ignore\n current[key] = {};\n }\n // @ts-ignore\n current = current[key];\n }\n let lastKey = keys[keys.length - 1];\n lastKey = lastKey.replace('~1', '/');\n if (op === \"replace\") {\n // @ts-ignore\n current[lastKey] = value;\n }\n if (op === \"add\") {\n // @ts-ignore\n current[lastKey] = value;\n }\n }\n return result;\n };\n const result = applyDiff(diff);\n if (Object.keys(result).length > 0) {\n onChange(result);\n }\n } catch (error) {\n console.error(error);\n }\n }\n }, 1000)\n );\n\n return (\n <div className={cn(\"relative w-full\", className)}>\n <MonacoEditor\n options={{\n minimap: {\n enabled: false,\n },\n }}\n height={height}\n theme=\"vs-dark\"\n language=\"json\"\n value={initialJson}\n onChange={(v) => {\n changeValueRef.current?.(initialJson, v);\n // @ts-ignore\n valueRef.current = v;\n }}\n />\n {onSubmit && (\n <Button\n className=\"z-50 absolute bottom-[50px] right-[20px]\"\n color='primary'\n size='sm'\n onClick={() => {\n try {\n const json = JSON.parse(valueRef.current);\n onSubmit(json);\n } catch (error) {\n console.error(error);\n }\n }}>\n Submit\n </Button>\n )}\n </div>\n );\n};\n\n"]}
|