@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.
Files changed (39) hide show
  1. package/dist/{PromiseState-2a8c856c.d.ts → PromiseState-b0cc408e.d.ts} +3 -0
  2. package/dist/{chunk-N4XCPX4L.mjs → chunk-4YCP5CJ4.mjs} +9 -2
  3. package/dist/chunk-4YCP5CJ4.mjs.map +1 -0
  4. package/dist/{chunk-CFVG66F4.mjs → chunk-66N3D7MI.mjs} +1 -1
  5. package/dist/chunk-66N3D7MI.mjs.map +1 -0
  6. package/dist/{chunk-SXQEYWUP.mjs → chunk-DZMNL4BZ.mjs} +1 -1
  7. package/dist/chunk-DZMNL4BZ.mjs.map +1 -0
  8. package/dist/{chunk-WAYJJYKN.mjs → chunk-OZ3JSH5J.mjs} +2 -2
  9. package/dist/{chunk-I5WU3NZO.mjs → chunk-PPYYRQDD.mjs} +26 -15
  10. package/dist/chunk-PPYYRQDD.mjs.map +1 -0
  11. package/dist/chunk-Y23EH2XR.mjs +24 -0
  12. package/dist/chunk-Y23EH2XR.mjs.map +1 -0
  13. package/dist/{chunk-VB62FUWK.mjs → chunk-YOCDMBRI.mjs} +2 -2
  14. package/dist/dev.mjs +111 -29
  15. package/dist/dev.mjs.map +1 -1
  16. package/dist/experimental.mjs +2 -2
  17. package/dist/form.d.mts +2 -105
  18. package/dist/form.mjs +72 -78
  19. package/dist/form.mjs.map +1 -1
  20. package/dist/index.d.mts +8 -28
  21. package/dist/index.mjs +24 -72
  22. package/dist/index.mjs.map +1 -1
  23. package/dist/jsontable.mjs +3 -3
  24. package/dist/metrics.mjs +20 -37
  25. package/dist/metrics.mjs.map +1 -1
  26. package/dist/plugins.d.mts +5 -5
  27. package/dist/plugins.mjs +4 -4
  28. package/dist/ui.d.mts +10 -1
  29. package/dist/ui.mjs +2 -1
  30. package/dist/ui.mjs.map +1 -1
  31. package/package.json +1 -1
  32. package/dist/chunk-CFVG66F4.mjs.map +0 -1
  33. package/dist/chunk-I5WU3NZO.mjs.map +0 -1
  34. package/dist/chunk-N4XCPX4L.mjs.map +0 -1
  35. package/dist/chunk-SXQEYWUP.mjs.map +0 -1
  36. package/dist/chunk-ZPPKSMXO.mjs +0 -90
  37. package/dist/chunk-ZPPKSMXO.mjs.map +0 -1
  38. /package/dist/{chunk-WAYJJYKN.mjs.map → chunk-OZ3JSH5J.mjs.map} +0 -0
  39. /package/dist/{chunk-VB62FUWK.mjs.map → chunk-YOCDMBRI.mjs.map} +0 -0
package/dist/index.mjs CHANGED
@@ -1,18 +1,16 @@
1
- export { BooleanState, NumberState, PromiseState, Store, StringState, ValueState } from './chunk-I5WU3NZO.mjs';
2
- import './chunk-N4XCPX4L.mjs';
3
- import { helper } from './chunk-CFVG66F4.mjs';
4
- export { helper } from './chunk-CFVG66F4.mjs';
5
- import { rootStore } from './chunk-SXQEYWUP.mjs';
6
- export { rootStore, useStore } from './chunk-SXQEYWUP.mjs';
1
+ export { BooleanState, NumberState, PromiseState, Store, StringState, ValueState } from './chunk-PPYYRQDD.mjs';
2
+ import './chunk-4YCP5CJ4.mjs';
3
+ import { helper } from './chunk-66N3D7MI.mjs';
4
+ export { helper } from './chunk-66N3D7MI.mjs';
5
+ export { PaginationState } from './chunk-ONVPCAMQ.mjs';
6
+ export { rootStore, useStore } from './chunk-DZMNL4BZ.mjs';
7
7
  import { RootStore } from './chunk-HRWHDF2F.mjs';
8
8
  export { RootStore } from './chunk-HRWHDF2F.mjs';
9
9
  import './chunk-MGU3KYGC.mjs';
10
10
  import './chunk-6F7H4PAA.mjs';
11
11
  import { observable, makeAutoObservable } from 'mobx';
12
12
  import BigNumber2 from 'bignumber.js';
13
- import EventEmitter from 'events';
14
- import axios from 'axios';
15
- import React, { useEffect } from 'react';
13
+ import React from 'react';
16
14
  import { observer } from 'mobx-react-lite';
17
15
  import DataLoader from 'dataloader';
18
16
  import { Dexie } from 'dexie';
@@ -178,64 +176,12 @@ var BigNumberInputState = class {
178
176
  return this.value.isZero() && this.format == "";
179
177
  }
180
178
  };
181
- var UserStore = class _UserStore {
182
- constructor() {
183
- this.sid = "user";
184
- this.id = "";
185
- this.name = "";
186
- this.email = "";
187
- this.image = "";
188
- this.token = "";
189
- this.event = new EventEmitter();
190
- makeAutoObservable(this);
191
- }
192
- signin() {
193
- this.event.emit("user:signin", this);
194
- }
195
- logout() {
196
- this.set({
197
- token: "",
198
- name: "",
199
- email: "",
200
- image: ""
201
- });
202
- this.event.emit("user:logout", this);
203
- }
204
- wait() {
205
- return new Promise((res, rej) => {
206
- if (this.id && this.token) {
207
- res(this);
208
- }
209
- this.event.once("user:ready", (user) => {
210
- res(this);
211
- });
212
- });
213
- }
214
- get isLogin() {
215
- return !!this.token;
216
- }
217
- set(args) {
218
- Object.assign(this, args);
219
- this.event.emit("user:ready", this);
220
- }
221
- use() {
222
- useEffect(() => {
223
- const userStore = rootStore.get(_UserStore);
224
- axios.get("/api/auth/session").then((res) => {
225
- var _a;
226
- if (!userStore.isLogin && ((_a = res == null ? void 0 : res.data) == null ? void 0 : _a.user)) {
227
- this.set(res.data.user);
228
- }
229
- });
230
- }, []);
231
- }
232
- };
233
179
  var AppProvider = observer(({ children }) => {
234
180
  const rootStore2 = RootStore.init();
235
181
  return /* @__PURE__ */ React.createElement(React.Fragment, null, rootStore2.providers.map((store) => {
236
182
  const Component = store.provider;
237
183
  return /* @__PURE__ */ React.createElement(Component, { rootStore: rootStore2, key: store.sid });
238
- }), children);
184
+ }), children && children);
239
185
  });
240
186
  var DexieStorage = class extends Dexie {
241
187
  constructor() {
@@ -249,15 +195,21 @@ var dexie = new DexieStorage();
249
195
  var DexieCache = class {
250
196
  constructor() {
251
197
  this.kv = dexie.kv;
252
- this.kv_get = new DataLoader(async (ids) => {
253
- const res = await this.kv.bulkGet(ids);
254
- return res.map((i) => i == null ? void 0 : i.value);
255
- }, { cache: false });
256
- this.kv_set = new DataLoader(async (ids) => {
257
- const now = /* @__PURE__ */ new Date();
258
- await this.kv.bulkPut(ids.map((i) => ({ key: i.key, value: { value: i.value, expiration: now.setTime(now.getTime() + i.ttl) } })));
259
- return ids;
260
- }, { cache: false });
198
+ this.kv_get = new DataLoader(
199
+ async (ids) => {
200
+ const res = await this.kv.bulkGet(ids);
201
+ return res.map((i) => i == null ? void 0 : i.value);
202
+ },
203
+ { cache: false }
204
+ );
205
+ this.kv_set = new DataLoader(
206
+ async (ids) => {
207
+ const now = /* @__PURE__ */ new Date();
208
+ await this.kv.bulkPut(ids.map((i) => ({ key: i.key, value: { value: i.value, expiration: now.setTime(now.getTime() + i.ttl) } })));
209
+ return ids;
210
+ },
211
+ { cache: false }
212
+ );
261
213
  this.options = {
262
214
  ttl: 60 * 1e3,
263
215
  prefix: ""
@@ -316,6 +268,6 @@ var DexieCache = class {
316
268
  };
317
269
  var cache = new DexieCache();
318
270
 
319
- export { AppProvider, BigNumberInputState, BigNumberState, PromiseHook, UserStore, cache };
271
+ export { AppProvider, BigNumberInputState, BigNumberState, PromiseHook, cache };
320
272
  //# sourceMappingURL=out.js.map
321
273
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../store/standard/PromiseHook.ts","../store/standard/BigNumberState.ts","../store/standard/BigNumberInputState.ts","../store/user.ts","../module/AppProvider.tsx","../lib/dexie.ts"],"names":["makeAutoObservable","BigNumber","rootStore"],"mappings":"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","sourcesContent":["\n\nimport { makeAutoObservable, observable } from 'mobx';\n\nexport class KV {\n //@ts-ignore\n static datas = observable();\n}\n\nexport abstract class ContractBase {\n // chainId?: number;\n // address?: string;\n\n}\n\nexport type ContractClass<T extends ContractBase> = new (args: Partial<T>) => T\n\nexport type PromiseHookData<T, U> = { value: Awaited<U>; get: T; call: T, loading: boolean }\n\nexport class PromiseHook {\n static entities = observable([]);\n static Get<T extends ContractBase>(cls: ContractClass<T>): (args: { args: Partial<T>; id?: string, select?: { [key in keyof Partial<T>]: boolean }, unselect?: { [key in keyof Partial<T>]: boolean } }) => Promise<T & { refresh: () => Promise<void> }> {\n try {\n return async ({ args, select, id, unselect }) => {\n let instance: any\n //@ts-ignore\n if (!id || !this.entities[id]) {\n instance = new cls(args);\n\n instance.refresh = async () => {\n const hooks = Object.entries(instance)\n .filter((i) => {\n if (!this.isPromiseHook(instance[i[0]])) return false\n if (select && !select[i[0]]) return false\n if (unselect && unselect[i[0]]) return false\n return true\n }).map(i => {\n const hook = instance[i[0]]\n return hook\n })\n\n await Promise.all(hooks.map((i) => i.call()));\n }\n if (id) {\n //@ts-ignore\n this.entities[id] = instance\n }\n } else {\n instance = this.entities[id!]\n }\n\n\n await instance.refresh()\n return instance;\n };\n } catch (e) {\n throw e\n }\n }\n\n\n static isPromiseHook(target) {\n return target?._type == \"promiseHook\"\n }\n\n\n //ttl : ms\n static wrap<T extends (...args: any[]) => Promise<any>, U = ReturnType<T>>({ func, defaultValue }: { func: T; defaultValue?: Awaited<U>; }): PromiseHookData<T, U> {\n let context;\n const call = () => {\n context.loading = true;\n if (!context._call) {\n context._call = func()\n .then((i) => {\n context.value = i;\n context.loading = false;\n context._call = null\n return i\n })\n .catch((i) => {\n console.error(i, func);\n context.value = defaultValue\n context._call = null\n context.loading = false;\n throw i;\n });\n }\n\n\n return context._call\n };\n const get = async () => {\n if (!context.value) {\n\n return call();\n }\n return context.value;\n };\n\n if (!context) {\n context = observable({\n _type: 'promiseHook',\n _value: defaultValue,\n get value() {\n return context['_value'];\n },\n set value(val) {\n context['_value'] = val;\n },\n get,\n loading: false,\n call,\n defaultValue,\n toJSON() {\n return context.value\n },\n toString() {\n return context.value\n },\n });\n }\n\n return context;\n }\n\n}\n","import BigNumber from \"bignumber.js\";\nimport { makeAutoObservable } from \"mobx\";\nimport { helper } from \"../../lib/helper\";\n\nexport class BigNumberState {\n value = new BigNumber(0);\n loading = false;\n decimals = 18;\n fixed = 6;\n formatter?: Function;\n constructor(args: Partial<BigNumberState>) {\n Object.assign(this, args);\n makeAutoObservable(this, {\n getFormat: false,\n });\n }\n get format() {\n if (this.loading) return \"...\";\n return this.getFormat();\n }\n\n getFormat({ decimals = this.decimals, fixed = this.fixed }: { decimals?: number; fixed?: number } = {}) {\n if (this.loading) return \"...\";\n if (this.formatter) return this.formatter(this);\n return helper.number.toPrecisionFloor(new BigNumber(this.value).dividedBy(10 ** decimals).toFixed(), {\n decimals: fixed,\n });\n }\n\n setDecimals(decimals: number) {\n this.decimals = decimals;\n }\n\n setValue(value: BigNumber) {\n this.value = value;\n this.setLoading(false);\n }\n\n setLoading(val) {\n this.loading = val;\n }\n}\n","import BigNumber from 'bignumber.js';\nimport { makeAutoObservable } from 'mobx';\nimport { helper } from '../../lib/helper';\nexport class BigNumberInputState {\n value = new BigNumber(0);\n format = '';\n loading = false;\n decimals = 18;\n formatter?: Function;\n constructor(args: Partial<BigNumberInputState>) {\n Object.assign(this, args);\n makeAutoObservable(this);\n }\n get noDecimasValue(): BigNumber {\n return new BigNumber(this.value).dividedBy(10 ** this.decimals);\n }\n setValue(value: any) {\n this.value = new BigNumber(value);\n this.format = helper.number.toPrecisionFloor(new BigNumber(this.value).dividedBy(10 ** this.decimals).toFixed());\n this.setLoading(false);\n }\n setFormat(val: any) {\n this.format = val;\n this.format = helper.number.toPrecisionFloor(this.format);\n this.value = new BigNumber(val).multipliedBy(10 ** this.decimals);\n }\n setLoading(val: boolean) {\n this.loading = val;\n }\n setDecimals(val: number) {\n this.decimals = val;\n }\n get isZero(): boolean {\n return this.value.isZero() && this.format == '';\n }\n}\n","import { makeAutoObservable } from \"mobx\";\nimport { type User } from \"next-auth\";\nimport EventEmitter from \"events\";\nimport { type Store } from \"./standard/base\";\nimport { rootStore } from \".\";\nimport axios from \"axios\";\nimport { useEffect } from \"react\";\n\nexport class UserStore implements User, Store {\n sid = \"user\";\n id: string = \"\";\n name?: string = \"\";\n email?: string = \"\";\n image?: string = \"\";\n token: string = \"\";\n\n event = new EventEmitter();\n\n signin() {\n this.event.emit(\"user:signin\", this);\n }\n\n logout() {\n this.set({\n token: \"\",\n name: \"\",\n email: \"\",\n image: \"\",\n });\n this.event.emit(\"user:logout\", this);\n }\n\n wait() {\n return new Promise<UserStore>((res, rej) => {\n if (this.id && this.token) {\n res(this);\n }\n\n this.event.once(\"user:ready\", (user) => {\n res(this);\n });\n });\n }\n\n get isLogin() {\n return !!this.token;\n }\n\n set(args: Partial<UserStore>) {\n Object.assign(this, args);\n this.event.emit(\"user:ready\", this);\n }\n\n constructor() {\n makeAutoObservable(this);\n }\n\n use() {\n useEffect(() => {\n const userStore = rootStore.get(UserStore);\n axios.get(\"/api/auth/session\").then((res) => {\n // console.log(res.data.user,'res')\n if (!userStore.isLogin && res?.data?.user) {\n this.set(res.data.user);\n }\n });\n }, []);\n }\n}\n","import React from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { RootStore } from \"../store/root\";\n\nexport const AppProvider = observer(({ children }: { children: any }) => {\n const rootStore = RootStore.init()\n return <>\n {rootStore.providers.map((store) => {\n const Component: any = store.provider;\n return <Component rootStore={rootStore} key={store.sid} />;\n })}\n {children}\n </>\n})","import DataLoader from 'dataloader'\nimport { Dexie, type Table } from 'dexie'\n\n\nexport class DexieStorage extends Dexie {\n kv: Table<{ key: string, value: { value: any, expiration: number } }>\n\n constructor() {\n super(\"cache\")\n this.version(1).stores({\n kv: 'key, value'\n })\n }\n}\nexport const dexie = new DexieStorage()\n\nexport class DexieCache {\n kv = dexie.kv\n kv_get = new DataLoader(async (ids: string[]) => {\n const res = await this.kv.bulkGet(ids)\n return res.map(i => i?.value)\n }, { cache: false })\n kv_set = new DataLoader(async (ids: { key: string, value: any, ttl: number }[]) => {\n const now = new Date()\n await this.kv.bulkPut(ids.map(i => ({ key: i.key, value: { value: i.value, expiration: now.setTime(now.getTime() + i.ttl) } })))\n return ids\n }, { cache: false })\n options = {\n ttl: 60 * 1000,\n prefix: ''\n }\n\n async get(_key) {\n const key = this.options.prefix + _key;\n console.time('get ' + key);\n const res = await this.kv_get.load(key);\n console.timeEnd('get ' + key);\n const data = res?.value\n if (!data) return;\n return data?.value;\n }\n\n async getRaw(_key) {\n const key = this.options.prefix + _key;\n console.time('get ' + key);\n const res = await this.kv_get.load(key);\n console.timeEnd('get ' + key);\n const data = res?.value\n if (!data) return;\n return data;\n }\n\n async set(_key, value, options?: { ttl?: number }) {\n const key = this.options.prefix + _key;\n this.kv_set.load({ key, value, ttl: options?.ttl || this.options.ttl });\n\n return this;\n }\n\n async delete(key) {\n // return this.dataloader.load(['del', key]);\n return\n }\n\n async clear() { }\n\n async wrap<T extends (...args: any[]) => Promise<any>, U = ReturnType<T>>(key, fn: T, args?: { ttl?: number, alowStale?: boolean }): Promise<Awaited<U>> {\n let data = await this.kv_get.load(key)\n if (data?.expiration && new Date(data.expiration) <= new Date()) {\n // console.log(\"cache expired\", key)\n\n if (args?.alowStale) {\n fn().then((value) => {\n this.kv_set.load({ key, value, ttl: args?.ttl || this.options.ttl })\n }).catch(err => {\n console.error(err)\n })\n } else {\n //@ts-ignore\n data = null;\n }\n }\n if (!data) {\n // console.log(\"miss cache\", key)\n const value = await fn();\n this.kv_set.load({ key, value, ttl: args?.ttl || this.options.ttl });\n return value;\n }\n return data.value;\n }\n}\n\nexport const cache = new DexieCache()\n\n"]}
1
+ {"version":3,"sources":["../store/standard/PromiseHook.ts","../store/standard/BigNumberState.ts","../store/standard/BigNumberInputState.ts","../module/AppProvider.tsx","../lib/dexie.ts"],"names":["makeAutoObservable","BigNumber","rootStore"],"mappings":"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","sourcesContent":["\n\nimport { makeAutoObservable, observable } from 'mobx';\n\nexport class KV {\n //@ts-ignore\n static datas = observable();\n}\n\nexport abstract class ContractBase {\n // chainId?: number;\n // address?: string;\n\n}\n\nexport type ContractClass<T extends ContractBase> = new (args: Partial<T>) => T\n\nexport type PromiseHookData<T, U> = { value: Awaited<U>; get: T; call: T, loading: boolean }\n\nexport class PromiseHook {\n static entities = observable([]);\n static Get<T extends ContractBase>(cls: ContractClass<T>): (args: { args: Partial<T>; id?: string, select?: { [key in keyof Partial<T>]: boolean }, unselect?: { [key in keyof Partial<T>]: boolean } }) => Promise<T & { refresh: () => Promise<void> }> {\n try {\n return async ({ args, select, id, unselect }) => {\n let instance: any\n //@ts-ignore\n if (!id || !this.entities[id]) {\n instance = new cls(args);\n\n instance.refresh = async () => {\n const hooks = Object.entries(instance)\n .filter((i) => {\n if (!this.isPromiseHook(instance[i[0]])) return false\n if (select && !select[i[0]]) return false\n if (unselect && unselect[i[0]]) return false\n return true\n }).map(i => {\n const hook = instance[i[0]]\n return hook\n })\n\n await Promise.all(hooks.map((i) => i.call()));\n }\n if (id) {\n //@ts-ignore\n this.entities[id] = instance\n }\n } else {\n instance = this.entities[id!]\n }\n\n\n await instance.refresh()\n return instance;\n };\n } catch (e) {\n throw e\n }\n }\n\n\n static isPromiseHook(target) {\n return target?._type == \"promiseHook\"\n }\n\n\n //ttl : ms\n static wrap<T extends (...args: any[]) => Promise<any>, U = ReturnType<T>>({ func, defaultValue }: { func: T; defaultValue?: Awaited<U>; }): PromiseHookData<T, U> {\n let context;\n const call = () => {\n context.loading = true;\n if (!context._call) {\n context._call = func()\n .then((i) => {\n context.value = i;\n context.loading = false;\n context._call = null\n return i\n })\n .catch((i) => {\n console.error(i, func);\n context.value = defaultValue\n context._call = null\n context.loading = false;\n throw i;\n });\n }\n\n\n return context._call\n };\n const get = async () => {\n if (!context.value) {\n\n return call();\n }\n return context.value;\n };\n\n if (!context) {\n context = observable({\n _type: 'promiseHook',\n _value: defaultValue,\n get value() {\n return context['_value'];\n },\n set value(val) {\n context['_value'] = val;\n },\n get,\n loading: false,\n call,\n defaultValue,\n toJSON() {\n return context.value\n },\n toString() {\n return context.value\n },\n });\n }\n\n return context;\n }\n\n}\n","import BigNumber from \"bignumber.js\";\nimport { makeAutoObservable } from \"mobx\";\nimport { helper } from \"../../lib/helper\";\n\nexport class BigNumberState {\n value = new BigNumber(0);\n loading = false;\n decimals = 18;\n fixed = 6;\n formatter?: Function;\n constructor(args: Partial<BigNumberState>) {\n Object.assign(this, args);\n makeAutoObservable(this, {\n getFormat: false,\n });\n }\n get format() {\n if (this.loading) return \"...\";\n return this.getFormat();\n }\n\n getFormat({ decimals = this.decimals, fixed = this.fixed }: { decimals?: number; fixed?: number } = {}) {\n if (this.loading) return \"...\";\n if (this.formatter) return this.formatter(this);\n return helper.number.toPrecisionFloor(new BigNumber(this.value).dividedBy(10 ** decimals).toFixed(), {\n decimals: fixed,\n });\n }\n\n setDecimals(decimals: number) {\n this.decimals = decimals;\n }\n\n setValue(value: BigNumber) {\n this.value = value;\n this.setLoading(false);\n }\n\n setLoading(val) {\n this.loading = val;\n }\n}\n","import BigNumber from 'bignumber.js';\nimport { makeAutoObservable } from 'mobx';\nimport { helper } from '../../lib/helper';\nexport class BigNumberInputState {\n value = new BigNumber(0);\n format = '';\n loading = false;\n decimals = 18;\n formatter?: Function;\n constructor(args: Partial<BigNumberInputState>) {\n Object.assign(this, args);\n makeAutoObservable(this);\n }\n get noDecimasValue(): BigNumber {\n return new BigNumber(this.value).dividedBy(10 ** this.decimals);\n }\n setValue(value: any) {\n this.value = new BigNumber(value);\n this.format = helper.number.toPrecisionFloor(new BigNumber(this.value).dividedBy(10 ** this.decimals).toFixed());\n this.setLoading(false);\n }\n setFormat(val: any) {\n this.format = val;\n this.format = helper.number.toPrecisionFloor(this.format);\n this.value = new BigNumber(val).multipliedBy(10 ** this.decimals);\n }\n setLoading(val: boolean) {\n this.loading = val;\n }\n setDecimals(val: number) {\n this.decimals = val;\n }\n get isZero(): boolean {\n return this.value.isZero() && this.format == '';\n }\n}\n","import React from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { RootStore } from \"../store/root\";\n\nexport const AppProvider = observer(({ children }: { children?: React.ReactNode }) => {\n const rootStore = RootStore.init()\n return (\n <>\n {rootStore.providers.map((store) => {\n const Component: any = store.provider;\n return <Component rootStore={rootStore} key={store.sid} />;\n })}\n {children && children}\n </>\n )\n})","import DataLoader from \"dataloader\";\nimport { Dexie, type Table } from \"dexie\";\n\nexport class DexieStorage extends Dexie {\n kv: Table<{ key: string; value: { value: any; expiration: number } }>;\n\n constructor() {\n super(\"cache\");\n this.version(1).stores({\n kv: \"key, value\",\n });\n }\n}\nexport const dexie = new DexieStorage();\n\nexport class DexieCache {\n kv = dexie.kv;\n kv_get = new DataLoader(\n async (ids: string[]) => {\n const res = await this.kv.bulkGet(ids);\n return res.map((i) => i?.value);\n },\n { cache: false },\n );\n kv_set = new DataLoader(\n async (ids: { key: string; value: any; ttl: number }[]) => {\n const now = new Date();\n await this.kv.bulkPut(ids.map((i) => ({ key: i.key, value: { value: i.value, expiration: now.setTime(now.getTime() + i.ttl) } })));\n return ids;\n },\n { cache: false },\n );\n options = {\n ttl: 60 * 1000,\n prefix: \"\",\n };\n\n async get(_key) {\n const key = this.options.prefix + _key;\n console.time(\"get \" + key);\n const res = await this.kv_get.load(key);\n console.timeEnd(\"get \" + key);\n const data = res?.value;\n if (!data) return;\n return data?.value;\n }\n\n async getRaw(_key) {\n const key = this.options.prefix + _key;\n console.time(\"get \" + key);\n const res = await this.kv_get.load(key);\n console.timeEnd(\"get \" + key);\n const data = res?.value;\n if (!data) return;\n return data;\n }\n\n async set(_key, value, options?: { ttl?: number }) {\n const key = this.options.prefix + _key;\n this.kv_set.load({ key, value, ttl: options?.ttl || this.options.ttl });\n\n return this;\n }\n\n async delete(key) {\n // return this.dataloader.load(['del', key]);\n return;\n }\n\n async clear() {}\n\n async wrap<T extends (...args: any[]) => Promise<any>, U = ReturnType<T>>(key, fn: T, args?: { ttl?: number; alowStale?: boolean }): Promise<Awaited<U>> {\n let data = await this.kv_get.load(key);\n if (data?.expiration && new Date(data.expiration) <= new Date()) {\n // console.log(\"cache expired\", key)\n\n if (args?.alowStale) {\n fn()\n .then((value) => {\n this.kv_set.load({ key, value, ttl: args?.ttl || this.options.ttl });\n })\n .catch((err) => {\n console.error(err);\n });\n } else {\n //@ts-ignore\n data = null;\n }\n }\n if (!data) {\n // console.log(\"miss cache\", key)\n const value = await fn();\n this.kv_set.load({ key, value, ttl: args?.ttl || this.options.ttl });\n return value;\n }\n return data.value;\n }\n}\n\nexport const cache = new DexieCache();\n"]}
@@ -1,7 +1,7 @@
1
- export { JSONTable } from './chunk-VB62FUWK.mjs';
1
+ export { JSONTable } from './chunk-YOCDMBRI.mjs';
2
2
  import './chunk-ONVPCAMQ.mjs';
3
- import './chunk-WAYJJYKN.mjs';
4
- import './chunk-SXQEYWUP.mjs';
3
+ import './chunk-OZ3JSH5J.mjs';
4
+ import './chunk-DZMNL4BZ.mjs';
5
5
  import './chunk-HRWHDF2F.mjs';
6
6
  import './chunk-U7JFOBSQ.mjs';
7
7
  import './chunk-MGU3KYGC.mjs';
package/dist/metrics.mjs CHANGED
@@ -1,18 +1,19 @@
1
- import { JSONTable_default } from './chunk-VB62FUWK.mjs';
1
+ import { SkeletonBox } from './chunk-Y23EH2XR.mjs';
2
+ import { JSONTable_default } from './chunk-YOCDMBRI.mjs';
2
3
  import './chunk-ONVPCAMQ.mjs';
3
- import './chunk-WAYJJYKN.mjs';
4
- import './chunk-SXQEYWUP.mjs';
4
+ import './chunk-OZ3JSH5J.mjs';
5
+ import './chunk-DZMNL4BZ.mjs';
5
6
  import './chunk-HRWHDF2F.mjs';
6
7
  import './chunk-U7JFOBSQ.mjs';
7
8
  import './chunk-MGU3KYGC.mjs';
8
9
  import { cn } from './chunk-6UHBBDKI.mjs';
9
10
  import { __spreadValues } from './chunk-6F7H4PAA.mjs';
10
- import React9 from 'react';
11
+ import React8 from 'react';
11
12
  import { Grid, Col, BarChart, LineChart, AreaChart, DonutChart, Text } from '@tremor/react';
12
- import { Card, Skeleton } from '@nextui-org/react';
13
+ import { Card } from '@nextui-org/react';
13
14
 
14
15
  var ChartBox = ({ title, description, error, children, className, headerClassName, contentClassName }) => {
15
- return /* @__PURE__ */ React9.createElement(Card, { className: cn("dark:border-gray-800 shadow-sm border", className) }, (title || description) && /* @__PURE__ */ React9.createElement("div", { className: cn("p-4 h-[60px]", headerClassName) }, title && /* @__PURE__ */ React9.createElement("div", null, title), description && /* @__PURE__ */ React9.createElement("div", { className: "text-xs" }, description)), /* @__PURE__ */ React9.createElement("div", { className: cn("px-2 pb-5", contentClassName) }, error ? /* @__PURE__ */ React9.createElement("div", { className: "text-red-600" }, error) : children));
16
+ return /* @__PURE__ */ React8.createElement(Card, { className: cn("dark:border-gray-800 shadow-sm border", className) }, (title || description) && /* @__PURE__ */ React8.createElement("div", { className: cn("p-4 h-[60px]", headerClassName) }, title && /* @__PURE__ */ React8.createElement("div", null, title), description && /* @__PURE__ */ React8.createElement("div", { className: "text-xs" }, description)), /* @__PURE__ */ React8.createElement("div", { className: cn("px-2 pb-5", contentClassName) }, error ? /* @__PURE__ */ React8.createElement("div", { className: "text-red-600" }, error) : children));
16
17
  };
17
18
 
18
19
  // components/JSONMetricsView/BarChartCard/index.tsx
@@ -28,7 +29,7 @@ var BarChartCard = (props) => {
28
29
  chartClassName,
29
30
  showAnimation = true
30
31
  } = props;
31
- return /* @__PURE__ */ React9.createElement(ChartBox, __spreadValues({}, props), /* @__PURE__ */ React9.createElement(
32
+ return /* @__PURE__ */ React8.createElement(ChartBox, __spreadValues({}, props), /* @__PURE__ */ React8.createElement(
32
33
  BarChart,
33
34
  {
34
35
  className: cn("h-72 mt-4", chartClassName),
@@ -63,7 +64,7 @@ var LineChartCard = (props) => {
63
64
  autoMinValue = true,
64
65
  valueFormatter = (number) => `${number}`
65
66
  } = props;
66
- return /* @__PURE__ */ React9.createElement(ChartBox, __spreadValues({}, props), /* @__PURE__ */ React9.createElement(
67
+ return /* @__PURE__ */ React8.createElement(ChartBox, __spreadValues({}, props), /* @__PURE__ */ React8.createElement(
67
68
  LineChart,
68
69
  {
69
70
  className: cn("h-72 mt-4", chartClassName),
@@ -104,7 +105,7 @@ var AreaChartCard = (props) => {
104
105
  valueFormatter = (number) => `${number}`,
105
106
  customTooltip
106
107
  } = props;
107
- return /* @__PURE__ */ React9.createElement(ChartBox, __spreadValues({}, props), /* @__PURE__ */ React9.createElement(
108
+ return /* @__PURE__ */ React8.createElement(ChartBox, __spreadValues({}, props), /* @__PURE__ */ React8.createElement(
108
109
  AreaChart,
109
110
  {
110
111
  className: cn("h-72 mt-4", chartClassName),
@@ -130,7 +131,7 @@ var AreaChartCard = (props) => {
130
131
  var DonutChartCard = (props) => {
131
132
  const { data = [], categories = ["value"], index = "name", valueFormatter = (number) => `${number}`, showLabel = true, variant = "donut", chartClassName, showAnimation = true } = props;
132
133
  const category = categories[0];
133
- return /* @__PURE__ */ React9.createElement(ChartBox, __spreadValues({}, props), /* @__PURE__ */ React9.createElement(
134
+ return /* @__PURE__ */ React8.createElement(ChartBox, __spreadValues({}, props), /* @__PURE__ */ React8.createElement(
134
135
  DonutChart,
135
136
  {
136
137
  className: cn("h-72 mt-4", chartClassName),
@@ -148,10 +149,10 @@ var DonutChartCard = (props) => {
148
149
  var CountCard = (props) => {
149
150
  var _a;
150
151
  if (!((_a = props.data) == null ? void 0 : _a.length)) {
151
- return /* @__PURE__ */ React9.createElement(ChartBox, __spreadValues({}, props), /* @__PURE__ */ React9.createElement("div", { className: cn("mt-2 ml-2 text-2xl overflow-auto", props.chartClassName) }, /* @__PURE__ */ React9.createElement("span", { className: "text-gray-400" }, "No data")));
152
+ return /* @__PURE__ */ React8.createElement(ChartBox, __spreadValues({}, props), /* @__PURE__ */ React8.createElement("div", { className: cn("mt-2 ml-2 text-2xl overflow-auto", props.chartClassName) }, /* @__PURE__ */ React8.createElement("span", { className: "text-gray-400" }, "No data")));
152
153
  }
153
154
  if (!props.summedColumnIndex) {
154
- return /* @__PURE__ */ React9.createElement(ChartBox, __spreadValues({}, props), /* @__PURE__ */ React9.createElement("div", { className: cn("mt-2 ml-2 text-2xl overflow-auto", props.chartClassName) }, /* @__PURE__ */ React9.createElement("span", { className: "text-gray-400 text-sm" }, "set ", /* @__PURE__ */ React9.createElement("span", { className: "font-bold" }, "summedColumnIndex"), " to sum up values")));
155
+ return /* @__PURE__ */ React8.createElement(ChartBox, __spreadValues({}, props), /* @__PURE__ */ React8.createElement("div", { className: cn("mt-2 ml-2 text-2xl overflow-auto", props.chartClassName) }, /* @__PURE__ */ React8.createElement("span", { className: "text-gray-400 text-sm" }, "set ", /* @__PURE__ */ React8.createElement("span", { className: "font-bold" }, "summedColumnIndex"), " to sum up values")));
155
156
  }
156
157
  const sum = props.data.reduce((acc, cur) => {
157
158
  const v = cur[props.summedColumnIndex];
@@ -161,37 +162,19 @@ var CountCard = (props) => {
161
162
  return acc;
162
163
  }
163
164
  }, 0);
164
- return /* @__PURE__ */ React9.createElement(ChartBox, __spreadValues({}, props), /* @__PURE__ */ React9.createElement("div", { className: cn("mt-2 ml-2 font-bold text-2xl overflow-auto", props.chartClassName) }, sum));
165
+ return /* @__PURE__ */ React8.createElement(ChartBox, __spreadValues({}, props), /* @__PURE__ */ React8.createElement("div", { className: cn("mt-2 ml-2 font-bold text-2xl overflow-auto", props.chartClassName) }, sum));
165
166
  };
166
167
  var TableCard = (props) => {
167
168
  const { data = [], columnOptions = {}, chartClassName } = props;
168
- return /* @__PURE__ */ React9.createElement(ChartBox, __spreadValues({}, props), (data == null ? void 0 : data.length) > 0 ? /* @__PURE__ */ React9.createElement(JSONTable_default, { dataSource: data, columnOptions, className: cn("h-[256px]", chartClassName) }) : /* @__PURE__ */ React9.createElement("div", { className: cn("h-[256px] flex justify-center items-center text-gray-400", chartClassName) }, "No data"));
169
+ return /* @__PURE__ */ React8.createElement(ChartBox, __spreadValues({}, props), (data == null ? void 0 : data.length) > 0 ? /* @__PURE__ */ React8.createElement(JSONTable_default, { dataSource: data, columnOptions, className: cn("h-[256px]", chartClassName) }) : /* @__PURE__ */ React8.createElement("div", { className: cn("h-[256px] flex justify-center items-center text-gray-400", chartClassName) }, "No data"));
169
170
  };
170
- var SkeletonBox = ({ line, skClassName, className }) => {
171
- const lineCamp = [...new Array(line || 1).keys()];
172
- return /* @__PURE__ */ React9.createElement("div", { className: cn("flex items-center gap-4", className) }, lineCamp.map((_, index) => {
173
- return /* @__PURE__ */ React9.createElement(
174
- Skeleton,
175
- {
176
- key: index,
177
- classNames: {
178
- base: "transition-background !duration-700 before:transition-opacity before:!duration-700",
179
- content: "transition-opacity motion-reduce:transition-none !duration-700"
180
- },
181
- className: cn("w-full h-10", skClassName)
182
- }
183
- );
184
- }));
185
- };
186
-
187
- // components/JSONMetricsView/KPICard/index.tsx
188
171
  var KPICard = (props) => {
189
172
  const { metricTitle, metric, chartType = "area", data = [], categories = ["value"], index = "date", valueFormatter = (number) => `${number}`, curveType = "linear", loading, chartClassName } = props;
190
173
  if (loading) {
191
- return /* @__PURE__ */ React9.createElement(ChartBox, __spreadValues({}, props), /* @__PURE__ */ React9.createElement("div", { className: "mt-4 space-x-6 px-2 flex items-center" }, /* @__PURE__ */ React9.createElement("div", { className: "w-auto" }, /* @__PURE__ */ React9.createElement(Text, { className: "whitespace-nowrap" }, "Loading..."), /* @__PURE__ */ React9.createElement("div", { className: "font-bold text-3xl" }, "-")), /* @__PURE__ */ React9.createElement(SkeletonBox, { className: "flex-col w-full", skClassName: "h-[100px] overflow-hidden", line: 1 })));
174
+ return /* @__PURE__ */ React8.createElement(ChartBox, __spreadValues({}, props), /* @__PURE__ */ React8.createElement("div", { className: "mt-4 space-x-6 px-2 flex items-center" }, /* @__PURE__ */ React8.createElement("div", { className: "w-auto" }, /* @__PURE__ */ React8.createElement(Text, { className: "whitespace-nowrap" }, "Loading..."), /* @__PURE__ */ React8.createElement("div", { className: "font-bold text-3xl" }, "-")), /* @__PURE__ */ React8.createElement(SkeletonBox, { className: "flex-col w-full", skClassName: "h-[100px] overflow-hidden", line: 1 })));
192
175
  }
193
176
  const ChartComp = chartType === "area" ? AreaChart : LineChart;
194
- return /* @__PURE__ */ React9.createElement(ChartBox, __spreadValues({}, props), /* @__PURE__ */ React9.createElement("div", { className: "mt-4 space-x-6 px-2 flex items-center" }, /* @__PURE__ */ React9.createElement("div", { className: "w-auto" }, /* @__PURE__ */ React9.createElement(Text, { className: "whitespace-nowrap" }, metricTitle), /* @__PURE__ */ React9.createElement("div", { className: "font-bold text-3xl" }, metric != null ? metric : "-")), /* @__PURE__ */ React9.createElement(
177
+ return /* @__PURE__ */ React8.createElement(ChartBox, __spreadValues({}, props), /* @__PURE__ */ React8.createElement("div", { className: "mt-4 space-x-6 px-2 flex items-center" }, /* @__PURE__ */ React8.createElement("div", { className: "w-auto" }, /* @__PURE__ */ React8.createElement(Text, { className: "whitespace-nowrap" }, metricTitle), /* @__PURE__ */ React8.createElement("div", { className: "font-bold text-3xl" }, metric != null ? metric : "-")), /* @__PURE__ */ React8.createElement(
195
178
  ChartComp,
196
179
  {
197
180
  className: cn("h-[100px] overflow-hidden", chartClassName),
@@ -223,15 +206,15 @@ var components = {
223
206
  KPICard
224
207
  };
225
208
  var JSONMetricsView = ({ data }) => {
226
- return /* @__PURE__ */ React9.createElement(Grid, { numItems: 1, numItemsSm: 1, numItemsLg: 2, numItemsMd: 2, className: "gap-2" }, data.map((item, index) => {
209
+ return /* @__PURE__ */ React8.createElement(Grid, { numItems: 1, numItemsSm: 1, numItemsLg: 2, numItemsMd: 2, className: "gap-2" }, data.map((item, index) => {
227
210
  var _a;
228
211
  const Component = components[item.type];
229
- return /* @__PURE__ */ React9.createElement(Col, { key: index, numColSpanSm: 1, numColSpanMd: (_a = item.numColSpanMd) != null ? _a : 1 }, /* @__PURE__ */ React9.createElement(Component, __spreadValues({}, item)));
212
+ return /* @__PURE__ */ React8.createElement(Col, { key: index, numColSpanSm: 1, numColSpanMd: (_a = item.numColSpanMd) != null ? _a : 1 }, /* @__PURE__ */ React8.createElement(Component, __spreadValues({}, item)));
230
213
  }));
231
214
  };
232
215
  var MetricsView = ({ data }) => {
233
216
  const Comp = components[data.type];
234
- return /* @__PURE__ */ React9.createElement(Comp, __spreadValues({}, data));
217
+ return /* @__PURE__ */ React8.createElement(Comp, __spreadValues({}, data));
235
218
  };
236
219
 
237
220
  export { JSONMetricsView, MetricsView };
@@ -1 +1 @@
1
- {"version":3,"sources":["../components/JSONMetricsView/index.tsx","../components/JSONMetricsView/BarChartCard/index.tsx","../components/JSONMetricsView/ChartBox/index.tsx","../components/JSONMetricsView/LineChartCard/index.tsx","../components/JSONMetricsView/AreaChartCard/index.tsx","../components/JSONMetricsView/DonutChartCard/index.tsx","../components/JSONMetricsView/CountCard/index.tsx","../components/JSONMetricsView/TableCard/index.tsx","../components/JSONMetricsView/KPICard/index.tsx","../components/Common/SkeletonBox/index.tsx"],"names":["React","AreaChart","LineChart"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Col, Grid } from '@tremor/react';\nimport { BarChartCard } from './BarChartCard';\nimport { LineChartCard } from './LineChartCard';\nimport { AreaChartCard } from './AreaChartCard';\nimport { DonutChartCard } from './DonutChartCard';\nimport { CountCard } from './CountCard';\nimport { TableCard } from './TableCard';\nimport { KPICard } from './KPICard';\n\nexport type JSONMetricsViewType = AreaChartCard | LineChartCard | BarChartCard | DonutChartCard | CountCard | TableCard | KPICard;\n\nconst components = {\n AreaChartCard,\n LineChartCard,\n BarChartCard,\n DonutChartCard,\n CountCard,\n TableCard,\n KPICard,\n};\n\nconst JSONMetricsView = ({ data }: { data: JSONMetricsViewType[] }) => {\n return (\n <Grid numItems={1} numItemsSm={1} numItemsLg={2} numItemsMd={2} className=\"gap-2\">\n {data.map((item, index) => {\n const Component = components[item.type];\n return (\n <Col key={index} numColSpanSm={1} numColSpanMd={item.numColSpanMd ?? 1}>\n {/* @ts-ignore */}\n <Component {...item} />\n </Col>\n );\n })}\n </Grid>\n );\n};\n\nexport const MetricsView = ({ data }: { data: JSONMetricsViewType }) => {\n const Comp = components[data.type];\n // @ts-ignore\n return <Comp {...data} />;\n};\n\nexport { JSONMetricsView };\n","import React from 'react';\nimport { BarChart, ValueFormatter } from '@tremor/react';\nimport { ChartBox } from '../ChartBox';\nimport { cn } from '../../../lib/utils';\n\nexport type BarChartCard = ChartBox & {\n type?: 'BarChartCard';\n categories?: string[];\n index?: string;\n valueFormatter?: ValueFormatter;\n showLegend?: boolean;\n showGridLines?: boolean;\n stack?: boolean;\n showAnimation?: boolean;\n};\n\nexport const BarChartCard = (props: BarChartCard) => {\n const {\n data = [],\n categories = ['value'],\n index = 'date',\n valueFormatter = (number) => `${number}`,\n showLegend = false,\n showGridLines = false,\n stack = false,\n chartClassName,\n showAnimation = true,\n } = props;\n\n return (\n <ChartBox {...props}>\n <BarChart\n className={cn('h-72 mt-4', chartClassName)}\n data={data}\n index={index}\n categories={categories}\n colors={['indigo', 'cyan', 'teal', 'green', 'yellow', 'orange', 'red', 'slate', 'violet', 'rose', 'pink', 'purple', 'blue']}\n valueFormatter={valueFormatter}\n yAxisWidth={48}\n showLegend={showLegend}\n showGridLines={showGridLines}\n stack={stack}\n showAnimation={showAnimation}\n />\n </ChartBox>\n );\n};\n","import React from 'react';\nimport { cn } from '../../../lib/utils';\nimport { Card } from '@nextui-org/react';\n\nexport interface ChartBox {\n title?: React.ReactNode;\n description?: string;\n error?: string;\n data?: {\n [key: string]: any;\n }[];\n children?: React.ReactNode;\n gridH?: number; // grid units, not pixels\n numColSpanMd?: number;\n className?: string;\n headerClassName?: string;\n contentClassName?: string;\n chartClassName?: string;\n}\n\nexport const ChartBox = ({ title, description, error, children, className, headerClassName, contentClassName }: ChartBox) => {\n return (\n <Card className={cn('dark:border-gray-800 shadow-sm border', className)}>\n {(title || description) && (\n <div className={cn('p-4 h-[60px]', headerClassName)}>\n {title && <div>{title}</div>}\n {description && <div className=\"text-xs\">{description}</div>}\n </div>\n )}\n <div className={cn('px-2 pb-5', contentClassName)}>{error ? <div className=\"text-red-600\">{error}</div> : children}</div>\n </Card>\n );\n};\n","import React from 'react';\nimport { LineChart, ValueFormatter } from '@tremor/react';\nimport { ChartBox } from '../ChartBox';\nimport { cn } from '../../../lib/utils';\n\nexport type LineChartCard = ChartBox & {\n type?: 'LineChartCard';\n categories?: string[];\n index?: string;\n curveType?: 'linear' | 'step' | 'monotone';\n colors?: (\n | 'slate'\n | 'gray'\n | 'zinc'\n | 'neutral'\n | 'stone'\n | 'red'\n | 'orange'\n | 'amber'\n | 'yellow'\n | 'lime'\n | 'green'\n | 'emerald'\n | 'teal'\n | 'cyan'\n | 'sky'\n | 'blue'\n | 'indigo'\n | 'violet'\n | 'purple'\n | 'fuchsia'\n | 'pink'\n | 'rose'\n )[];\n showLegend?: boolean;\n showGridLines?: boolean;\n showXAxis?: boolean;\n showYAxis?: boolean;\n startEndOnly?: boolean;\n showTooltip?: boolean;\n showAnimation?: boolean;\n autoMinValue?: boolean;\n valueFormatter?: ValueFormatter;\n};\n\nexport const LineChartCard = (props: LineChartCard) => {\n const {\n data = [],\n categories = ['value'],\n index = 'date',\n curveType = 'linear',\n colors = ['indigo', 'cyan', 'teal', 'green', 'yellow', 'orange', 'red', 'slate', 'violet', 'rose', 'pink', 'purple', 'blue'],\n showLegend = false,\n showGridLines = false,\n chartClassName,\n showXAxis = true,\n showYAxis = true,\n startEndOnly = false,\n showTooltip = true,\n showAnimation = true,\n autoMinValue = true,\n valueFormatter = (number) => `${number}`,\n } = props;\n\n return (\n <ChartBox {...props}>\n <LineChart\n className={cn('h-72 mt-4', chartClassName)}\n data={data}\n index={index}\n categories={categories}\n colors={colors}\n valueFormatter={valueFormatter}\n showLegend={showLegend}\n showGridLines={showGridLines}\n curveType={curveType}\n showXAxis={showXAxis}\n showYAxis={showYAxis}\n startEndOnly={startEndOnly}\n showTooltip={showTooltip}\n showAnimation={showAnimation}\n autoMinValue={autoMinValue}\n />\n </ChartBox>\n );\n};\n","import React from 'react';\nimport { AreaChart, ValueFormatter } from '@tremor/react';\nimport { ChartBox } from '../ChartBox';\nimport { cn } from '../../../lib/utils';\n\nexport type AreaChartCard = ChartBox & {\n type?: 'AreaChartCard';\n categories?: string[];\n index?: string;\n curveType?: 'linear' | 'step' | 'monotone';\n colors?: (\n | 'slate'\n | 'gray'\n | 'zinc'\n | 'neutral'\n | 'stone'\n | 'red'\n | 'orange'\n | 'amber'\n | 'yellow'\n | 'lime'\n | 'green'\n | 'emerald'\n | 'teal'\n | 'cyan'\n | 'sky'\n | 'blue'\n | 'indigo'\n | 'violet'\n | 'purple'\n | 'fuchsia'\n | 'pink'\n | 'rose'\n )[];\n showLegend?: boolean;\n showGridLines?: boolean;\n stack?: boolean;\n showXAxis?: boolean;\n showYAxis?: boolean;\n startEndOnly?: boolean;\n showTooltip?: boolean;\n showAnimation?: boolean;\n autoMinValue?: boolean;\n valueFormatter?: ValueFormatter;\n customTooltip?: ({ payload, active, label }) => React.ReactNode;\n};\n\n\nexport const AreaChartCard = (props: AreaChartCard) => {\n const {\n data = [],\n categories = ['value'],\n index = 'date',\n curveType = 'linear',\n colors = ['indigo', 'cyan', 'teal', 'green', 'yellow', 'orange', 'red', 'slate', 'violet', 'rose', 'pink', 'purple', 'blue'],\n showLegend = false,\n showGridLines = false,\n stack = false,\n chartClassName,\n showXAxis = true,\n showYAxis = true,\n startEndOnly = false,\n showTooltip = true,\n showAnimation = true,\n autoMinValue = true,\n valueFormatter = (number) => `${number}`,\n customTooltip,\n } = props;\n\n return (\n <ChartBox {...props}>\n <AreaChart\n className={cn('h-72 mt-4', chartClassName)}\n data={data}\n index={index}\n categories={categories}\n colors={colors}\n valueFormatter={valueFormatter}\n showLegend={showLegend}\n showGridLines={showGridLines}\n stack={stack}\n curveType={curveType}\n showXAxis={showXAxis}\n showYAxis={showYAxis}\n startEndOnly={startEndOnly}\n showTooltip={showTooltip}\n showAnimation={showAnimation}\n autoMinValue={autoMinValue}\n customTooltip={customTooltip}\n />\n </ChartBox>\n );\n};\n\n","import React from 'react';\nimport { DonutChart, ValueFormatter } from '@tremor/react';\nimport { ChartBox } from '../ChartBox';\nimport { cn } from '../../../lib/utils';\n\nexport type DonutChartCard = ChartBox & {\n type?: 'DonutChartCard';\n categories?: string[];\n index?: string;\n valueFormatter?: ValueFormatter;\n showLabel?: boolean;\n variant?: 'donut' | 'pie';\n showAnimation?: boolean;\n};\n\nexport const DonutChartCard = (props: DonutChartCard) => {\n const { data = [], categories = ['value'], index = 'name', valueFormatter = (number) => `${number}`, showLabel = true, variant = 'donut', chartClassName, showAnimation = true } = props;\n const category = categories[0];\n return (\n <ChartBox {...props}>\n <DonutChart\n className={cn('h-72 mt-4', chartClassName)}\n data={data}\n index={index}\n category={category}\n colors={['indigo', 'cyan', 'teal', 'green', 'yellow', 'orange', 'red', 'slate', 'violet', 'rose', 'pink', 'purple', 'blue']}\n valueFormatter={valueFormatter}\n showLabel={showLabel}\n variant={variant}\n showAnimation={showAnimation}\n />\n </ChartBox>\n );\n};\n","import React from 'react';\nimport { ChartBox } from '../ChartBox';\nimport { cn } from '../../../lib/utils';\n\nexport type CountCard = ChartBox & {\n type?: 'CountCard';\n summedColumnIndex?: string;\n};\n\nexport const CountCard = (props: CountCard) => {\n if (!props.data?.length) {\n return (\n <ChartBox {...props}>\n <div className={cn(\"mt-2 ml-2 text-2xl overflow-auto\", props.chartClassName)}>\n <span className=\"text-gray-400\">No data</span>\n </div>\n </ChartBox>\n );\n }\n\n if (!props.summedColumnIndex) {\n return (\n <ChartBox {...props}>\n <div className={cn(\"mt-2 ml-2 text-2xl overflow-auto\", props.chartClassName)}>\n <span className=\"text-gray-400 text-sm\">\n set <span className=\"font-bold\">summedColumnIndex</span> to sum up values\n </span>\n </div>\n </ChartBox>\n );\n }\n\n const sum = props.data.reduce((acc, cur) => {\n const v = cur[props.summedColumnIndex];\n if (typeof v == 'number') {\n return acc + v;\n } else {\n return acc;\n }\n }, 0);\n\n return (\n <ChartBox {...props}>\n <div className={cn(\"mt-2 ml-2 font-bold text-2xl overflow-auto\", props.chartClassName)}>{sum}</div>\n </ChartBox>\n );\n};","import React from 'react';\nimport { ChartBox } from '../ChartBox';\nimport JSONTable from '../../JSONTable';\nimport { cn } from '../../../lib/utils';\n\nexport type TableCard = ChartBox & {\n type?: 'TableCard';\n columnOptions?: {\n [key: string]: {\n label: string;\n hidden: boolean;\n }\n }\n}\n\nexport const TableCard = (props: TableCard) => {\n const { data = [], columnOptions = {}, chartClassName } = props;\n return (\n <ChartBox {...props}>\n {data?.length > 0\n ? <JSONTable dataSource={data} columnOptions={columnOptions} className={cn(\"h-[256px]\", chartClassName)} />\n : <div className={cn(\"h-[256px] flex justify-center items-center text-gray-400\", chartClassName)}>No data</div>\n }\n </ChartBox>\n );\n};\n","import React from 'react';\nimport { AreaChart, LineChart, Text, ValueFormatter } from '@tremor/react';\nimport { ChartBox } from '../ChartBox';\nimport { SkeletonBox } from '../../Common/SkeletonBox';\nimport { cn } from '../../../lib/utils';\n\nexport type KPICard = ChartBox & {\n type?: 'KPICard';\n categories?: string[];\n index?: string;\n chartType?: 'area' | 'line';\n curveType?: 'linear' | 'step' | 'monotone';\n metricTitle?: string;\n metric?: string | number;\n valueFormatter?: ValueFormatter;\n loading?: boolean;\n};\n\nexport const KPICard = (props: KPICard) => {\n const { metricTitle, metric, chartType = 'area', data = [], categories = ['value'], index = 'date', valueFormatter = (number) => `${number}`, curveType = 'linear', loading, chartClassName } = props;\n\n if (loading) {\n return (\n <ChartBox {...props}>\n <div className=\"mt-4 space-x-6 px-2 flex items-center\">\n <div className=\"w-auto\">\n <Text className=\"whitespace-nowrap\">Loading...</Text>\n <div className=\"font-bold text-3xl\">-</div>\n </div>\n <SkeletonBox className=\"flex-col w-full\" skClassName=\"h-[100px] overflow-hidden\" line={1} />\n </div>\n </ChartBox>\n );\n }\n\n const ChartComp = chartType === 'area' ? AreaChart : LineChart;\n\n return (\n <ChartBox {...props}>\n <div className=\"mt-4 space-x-6 px-2 flex items-center\">\n <div className=\"w-auto\">\n <Text className=\"whitespace-nowrap\">{metricTitle}</Text>\n <div className=\"font-bold text-3xl\">{metric ?? '-'}</div>\n </div>\n <ChartComp\n className={cn('h-[100px] overflow-hidden', chartClassName)}\n data={data}\n index={index}\n categories={categories}\n colors={['indigo', 'cyan', 'teal', 'green', 'yellow', 'orange', 'red', 'slate', 'violet', 'rose', 'pink', 'purple', 'blue']}\n valueFormatter={valueFormatter}\n curveType={curveType}\n showXAxis={false}\n showGridLines={false}\n startEndOnly={true}\n showYAxis={false}\n showLegend={false}\n autoMinValue={true}\n showAnimation={true}\n />\n </div>\n </ChartBox>\n );\n};\n","\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
+ {"version":3,"sources":["../components/JSONMetricsView/index.tsx","../components/JSONMetricsView/BarChartCard/index.tsx","../components/JSONMetricsView/ChartBox/index.tsx","../components/JSONMetricsView/LineChartCard/index.tsx","../components/JSONMetricsView/AreaChartCard/index.tsx","../components/JSONMetricsView/DonutChartCard/index.tsx","../components/JSONMetricsView/CountCard/index.tsx","../components/JSONMetricsView/TableCard/index.tsx","../components/JSONMetricsView/KPICard/index.tsx"],"names":["React","AreaChart","LineChart"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,OAAOA,YAAW;AAClB,SAAS,KAAK,YAAY;;;ACD1B,OAAOA,YAAW;AAClB,SAAS,gBAAgC;;;ACDzC,OAAO,WAAW;AAElB,SAAS,YAAY;AAkBd,IAAM,WAAW,CAAC,EAAE,OAAO,aAAa,OAAO,UAAU,WAAW,iBAAiB,iBAAiB,MAAgB;AAC3H,SACE,oCAAC,QAAK,WAAW,GAAG,yCAAyC,SAAS,MAClE,SAAS,gBACT,oCAAC,SAAI,WAAW,GAAG,gBAAgB,eAAe,KAC/C,SAAS,oCAAC,aAAK,KAAM,GACrB,eAAe,oCAAC,SAAI,WAAU,aAAW,WAAY,CACxD,GAEF,oCAAC,SAAI,WAAW,GAAG,aAAa,gBAAgB,KAAI,QAAQ,oCAAC,SAAI,WAAU,kBAAgB,KAAM,IAAS,QAAS,CACrH;AAEJ;;;ADhBO,IAAM,eAAe,CAAC,UAAwB;AACnD,QAAM;AAAA,IACJ,OAAO,CAAC;AAAA,IACR,aAAa,CAAC,OAAO;AAAA,IACrB,QAAQ;AAAA,IACR,iBAAiB,CAAC,WAAW,GAAG,MAAM;AAAA,IACtC,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR;AAAA,IACA,gBAAgB;AAAA,EAClB,IAAI;AAEJ,SACE,gBAAAA,OAAA,cAAC,6BAAa,QACZ,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,aAAa,cAAc;AAAA,MACzC;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ,CAAC,UAAU,QAAQ,QAAQ,SAAS,UAAU,UAAU,OAAO,SAAS,UAAU,QAAQ,QAAQ,UAAU,MAAM;AAAA,MAC1H;AAAA,MACA,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,EACF,CACF;AAEJ;;;AE9CA,OAAOA,YAAW;AAClB,SAAS,iBAAiC;AA4CnC,IAAM,gBAAgB,CAAC,UAAyB;AACrD,QAAM;AAAA,IACJ,OAAO,CAAC;AAAA,IACR,aAAa,CAAC,OAAO;AAAA,IACrB,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,SAAS,CAAC,UAAU,QAAQ,QAAQ,SAAS,UAAU,UAAU,OAAO,SAAS,UAAU,QAAQ,QAAQ,UAAU,MAAM;AAAA,IAC3H,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB;AAAA,IACA,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,iBAAiB,CAAC,WAAW,GAAG,MAAM;AAAA,EACxC,IAAI;AAEJ,SACE,gBAAAA,OAAA,cAAC,6BAAa,QACZ,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,aAAa,cAAc;AAAA,MACzC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,EACF,CACF;AAEJ;;;ACrFA,OAAOA,YAAW;AAClB,SAAS,iBAAiC;AA+CnC,IAAM,gBAAgB,CAAC,UAAyB;AACrD,QAAM;AAAA,IACJ,OAAO,CAAC;AAAA,IACR,aAAa,CAAC,OAAO;AAAA,IACrB,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,SAAS,CAAC,UAAU,QAAQ,QAAQ,SAAS,UAAU,UAAU,OAAO,SAAS,UAAU,QAAQ,QAAQ,UAAU,MAAM;AAAA,IAC3H,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR;AAAA,IACA,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,iBAAiB,CAAC,WAAW,GAAG,MAAM;AAAA,IACtC;AAAA,EACF,IAAI;AAEJ,SACE,gBAAAA,OAAA,cAAC,6BAAa,QACZ,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,aAAa,cAAc;AAAA,MACzC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,EACF,CACF;AAEJ;;;AC5FA,OAAOA,YAAW;AAClB,SAAS,kBAAkC;AAcpC,IAAM,iBAAiB,CAAC,UAA0B;AACvD,QAAM,EAAE,OAAO,CAAC,GAAG,aAAa,CAAC,OAAO,GAAG,QAAQ,QAAQ,iBAAiB,CAAC,WAAW,GAAG,MAAM,IAAI,YAAY,MAAM,UAAU,SAAS,gBAAgB,gBAAgB,KAAK,IAAI;AACnL,QAAM,WAAW,WAAW,CAAC;AAC7B,SACE,gBAAAA,OAAA,cAAC,6BAAa,QACZ,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,aAAa,cAAc;AAAA,MACzC;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ,CAAC,UAAU,QAAQ,QAAQ,SAAS,UAAU,UAAU,OAAO,SAAS,UAAU,QAAQ,QAAQ,UAAU,MAAM;AAAA,MAC1H;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,EACF,CACF;AAEJ;;;ACjCA,OAAOA,YAAW;AASX,IAAM,YAAY,CAAC,UAAqB;AAT/C;AAUE,MAAI,GAAC,WAAM,SAAN,mBAAY,SAAQ;AACvB,WACE,gBAAAA,OAAA,cAAC,6BAAa,QACZ,gBAAAA,OAAA,cAAC,SAAI,WAAW,GAAG,oCAAoC,MAAM,cAAc,KACzE,gBAAAA,OAAA,cAAC,UAAK,WAAU,mBAAgB,SAAO,CACzC,CACF;AAAA,EAEJ;AAEA,MAAI,CAAC,MAAM,mBAAmB;AAC5B,WACE,gBAAAA,OAAA,cAAC,6BAAa,QACZ,gBAAAA,OAAA,cAAC,SAAI,WAAW,GAAG,oCAAoC,MAAM,cAAc,KACzE,gBAAAA,OAAA,cAAC,UAAK,WAAU,2BAAwB,QAClC,gBAAAA,OAAA,cAAC,UAAK,WAAU,eAAY,mBAAiB,GAAO,mBAC1D,CACF,CACF;AAAA,EAEJ;AAEA,QAAM,MAAM,MAAM,KAAK,OAAO,CAAC,KAAK,QAAQ;AAC1C,UAAM,IAAI,IAAI,MAAM,iBAAiB;AACrC,QAAI,OAAO,KAAK,UAAU;AACxB,aAAO,MAAM;AAAA,IACf,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF,GAAG,CAAC;AAEJ,SACE,gBAAAA,OAAA,cAAC,6BAAa,QACZ,gBAAAA,OAAA,cAAC,SAAI,WAAW,GAAG,8CAA8C,MAAM,cAAc,KAAI,GAAI,CAC/F;AAEJ;;;AC9CA,OAAOA,YAAW;AAeX,IAAM,YAAY,CAAC,UAAqB;AAC7C,QAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB,CAAC,GAAG,eAAe,IAAI;AAC1D,SACE,gBAAAA,OAAA,cAAC,6BAAa,SACX,6BAAM,UAAS,IACZ,gBAAAA,OAAA,cAAC,qBAAU,YAAY,MAAM,eAA8B,WAAW,GAAG,aAAa,cAAc,GAAG,IACvG,gBAAAA,OAAA,cAAC,SAAI,WAAW,GAAG,4DAA4D,cAAc,KAAG,SAAO,CAE7G;AAEJ;;;ACzBA,OAAOA,YAAW;AAClB,SAAS,aAAAC,YAAW,aAAAC,YAAW,YAA4B;AAiBpD,IAAM,UAAU,CAAC,UAAmB;AACzC,QAAM,EAAE,aAAa,QAAQ,YAAY,QAAQ,OAAO,CAAC,GAAG,aAAa,CAAC,OAAO,GAAG,QAAQ,QAAQ,iBAAiB,CAAC,WAAW,GAAG,MAAM,IAAI,YAAY,UAAU,SAAS,eAAe,IAAI;AAEhM,MAAI,SAAS;AACX,WACE,gBAAAF,OAAA,cAAC,6BAAa,QACZ,gBAAAA,OAAA,cAAC,SAAI,WAAU,2CACb,gBAAAA,OAAA,cAAC,SAAI,WAAU,YACb,gBAAAA,OAAA,cAAC,QAAK,WAAU,uBAAoB,YAAU,GAC9C,gBAAAA,OAAA,cAAC,SAAI,WAAU,wBAAqB,GAAC,CACvC,GACA,gBAAAA,OAAA,cAAC,eAAY,WAAU,mBAAkB,aAAY,6BAA4B,MAAM,GAAG,CAC5F,CACF;AAAA,EAEJ;AAEA,QAAM,YAAY,cAAc,SAASC,aAAYC;AAErD,SACE,gBAAAF,OAAA,cAAC,6BAAa,QACZ,gBAAAA,OAAA,cAAC,SAAI,WAAU,2CACb,gBAAAA,OAAA,cAAC,SAAI,WAAU,YACb,gBAAAA,OAAA,cAAC,QAAK,WAAU,uBAAqB,WAAY,GACjD,gBAAAA,OAAA,cAAC,SAAI,WAAU,wBAAsB,0BAAU,GAAI,CACrD,GACA,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,6BAA6B,cAAc;AAAA,MACzD;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ,CAAC,UAAU,QAAQ,QAAQ,SAAS,UAAU,UAAU,OAAO,SAAS,UAAU,QAAQ,QAAQ,UAAU,MAAM;AAAA,MAC1H;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MACX,eAAe;AAAA,MACf,cAAc;AAAA,MACd,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,eAAe;AAAA;AAAA,EACjB,CACF,CACF;AAEJ;;;ARnDA,IAAM,aAAa;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,kBAAkB,CAAC,EAAE,KAAK,MAAuC;AACrE,SACE,gBAAAA,OAAA,cAAC,QAAK,UAAU,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,WAAU,WACvE,KAAK,IAAI,CAAC,MAAM,UAAU;AAzBjC;AA0BQ,UAAM,YAAY,WAAW,KAAK,IAAI;AACtC,WACE,gBAAAA,OAAA,cAAC,OAAI,KAAK,OAAO,cAAc,GAAG,eAAc,UAAK,iBAAL,YAAqB,KAEnE,gBAAAA,OAAA,cAAC,8BAAc,KAAM,CACvB;AAAA,EAEJ,CAAC,CACH;AAEJ;AAEO,IAAM,cAAc,CAAC,EAAE,KAAK,MAAqC;AACtE,QAAM,OAAO,WAAW,KAAK,IAAI;AAEjC,SAAO,gBAAAA,OAAA,cAAC,yBAAS,KAAM;AACzB","sourcesContent":["import React from 'react';\nimport { Col, Grid } from '@tremor/react';\nimport { BarChartCard } from './BarChartCard';\nimport { LineChartCard } from './LineChartCard';\nimport { AreaChartCard } from './AreaChartCard';\nimport { DonutChartCard } from './DonutChartCard';\nimport { CountCard } from './CountCard';\nimport { TableCard } from './TableCard';\nimport { KPICard } from './KPICard';\n\nexport type JSONMetricsViewType = AreaChartCard | LineChartCard | BarChartCard | DonutChartCard | CountCard | TableCard | KPICard;\n\nconst components = {\n AreaChartCard,\n LineChartCard,\n BarChartCard,\n DonutChartCard,\n CountCard,\n TableCard,\n KPICard,\n};\n\nconst JSONMetricsView = ({ data }: { data: JSONMetricsViewType[] }) => {\n return (\n <Grid numItems={1} numItemsSm={1} numItemsLg={2} numItemsMd={2} className=\"gap-2\">\n {data.map((item, index) => {\n const Component = components[item.type];\n return (\n <Col key={index} numColSpanSm={1} numColSpanMd={item.numColSpanMd ?? 1}>\n {/* @ts-ignore */}\n <Component {...item} />\n </Col>\n );\n })}\n </Grid>\n );\n};\n\nexport const MetricsView = ({ data }: { data: JSONMetricsViewType }) => {\n const Comp = components[data.type];\n // @ts-ignore\n return <Comp {...data} />;\n};\n\nexport { JSONMetricsView };\n","import React from 'react';\nimport { BarChart, ValueFormatter } from '@tremor/react';\nimport { ChartBox } from '../ChartBox';\nimport { cn } from '../../../lib/utils';\n\nexport type BarChartCard = ChartBox & {\n type?: 'BarChartCard';\n categories?: string[];\n index?: string;\n valueFormatter?: ValueFormatter;\n showLegend?: boolean;\n showGridLines?: boolean;\n stack?: boolean;\n showAnimation?: boolean;\n};\n\nexport const BarChartCard = (props: BarChartCard) => {\n const {\n data = [],\n categories = ['value'],\n index = 'date',\n valueFormatter = (number) => `${number}`,\n showLegend = false,\n showGridLines = false,\n stack = false,\n chartClassName,\n showAnimation = true,\n } = props;\n\n return (\n <ChartBox {...props}>\n <BarChart\n className={cn('h-72 mt-4', chartClassName)}\n data={data}\n index={index}\n categories={categories}\n colors={['indigo', 'cyan', 'teal', 'green', 'yellow', 'orange', 'red', 'slate', 'violet', 'rose', 'pink', 'purple', 'blue']}\n valueFormatter={valueFormatter}\n yAxisWidth={48}\n showLegend={showLegend}\n showGridLines={showGridLines}\n stack={stack}\n showAnimation={showAnimation}\n />\n </ChartBox>\n );\n};\n","import React from 'react';\nimport { cn } from '../../../lib/utils';\nimport { Card } from '@nextui-org/react';\n\nexport interface ChartBox {\n title?: React.ReactNode;\n description?: string;\n error?: string;\n data?: {\n [key: string]: any;\n }[];\n children?: React.ReactNode;\n gridH?: number; // grid units, not pixels\n numColSpanMd?: number;\n className?: string;\n headerClassName?: string;\n contentClassName?: string;\n chartClassName?: string;\n}\n\nexport const ChartBox = ({ title, description, error, children, className, headerClassName, contentClassName }: ChartBox) => {\n return (\n <Card className={cn('dark:border-gray-800 shadow-sm border', className)}>\n {(title || description) && (\n <div className={cn('p-4 h-[60px]', headerClassName)}>\n {title && <div>{title}</div>}\n {description && <div className=\"text-xs\">{description}</div>}\n </div>\n )}\n <div className={cn('px-2 pb-5', contentClassName)}>{error ? <div className=\"text-red-600\">{error}</div> : children}</div>\n </Card>\n );\n};\n","import React from 'react';\nimport { LineChart, ValueFormatter } from '@tremor/react';\nimport { ChartBox } from '../ChartBox';\nimport { cn } from '../../../lib/utils';\n\nexport type LineChartCard = ChartBox & {\n type?: 'LineChartCard';\n categories?: string[];\n index?: string;\n curveType?: 'linear' | 'step' | 'monotone';\n colors?: (\n | 'slate'\n | 'gray'\n | 'zinc'\n | 'neutral'\n | 'stone'\n | 'red'\n | 'orange'\n | 'amber'\n | 'yellow'\n | 'lime'\n | 'green'\n | 'emerald'\n | 'teal'\n | 'cyan'\n | 'sky'\n | 'blue'\n | 'indigo'\n | 'violet'\n | 'purple'\n | 'fuchsia'\n | 'pink'\n | 'rose'\n )[];\n showLegend?: boolean;\n showGridLines?: boolean;\n showXAxis?: boolean;\n showYAxis?: boolean;\n startEndOnly?: boolean;\n showTooltip?: boolean;\n showAnimation?: boolean;\n autoMinValue?: boolean;\n valueFormatter?: ValueFormatter;\n};\n\nexport const LineChartCard = (props: LineChartCard) => {\n const {\n data = [],\n categories = ['value'],\n index = 'date',\n curveType = 'linear',\n colors = ['indigo', 'cyan', 'teal', 'green', 'yellow', 'orange', 'red', 'slate', 'violet', 'rose', 'pink', 'purple', 'blue'],\n showLegend = false,\n showGridLines = false,\n chartClassName,\n showXAxis = true,\n showYAxis = true,\n startEndOnly = false,\n showTooltip = true,\n showAnimation = true,\n autoMinValue = true,\n valueFormatter = (number) => `${number}`,\n } = props;\n\n return (\n <ChartBox {...props}>\n <LineChart\n className={cn('h-72 mt-4', chartClassName)}\n data={data}\n index={index}\n categories={categories}\n colors={colors}\n valueFormatter={valueFormatter}\n showLegend={showLegend}\n showGridLines={showGridLines}\n curveType={curveType}\n showXAxis={showXAxis}\n showYAxis={showYAxis}\n startEndOnly={startEndOnly}\n showTooltip={showTooltip}\n showAnimation={showAnimation}\n autoMinValue={autoMinValue}\n />\n </ChartBox>\n );\n};\n","import React from 'react';\nimport { AreaChart, ValueFormatter } from '@tremor/react';\nimport { ChartBox } from '../ChartBox';\nimport { cn } from '../../../lib/utils';\n\nexport type AreaChartCard = ChartBox & {\n type?: 'AreaChartCard';\n categories?: string[];\n index?: string;\n curveType?: 'linear' | 'step' | 'monotone';\n colors?: (\n | 'slate'\n | 'gray'\n | 'zinc'\n | 'neutral'\n | 'stone'\n | 'red'\n | 'orange'\n | 'amber'\n | 'yellow'\n | 'lime'\n | 'green'\n | 'emerald'\n | 'teal'\n | 'cyan'\n | 'sky'\n | 'blue'\n | 'indigo'\n | 'violet'\n | 'purple'\n | 'fuchsia'\n | 'pink'\n | 'rose'\n )[];\n showLegend?: boolean;\n showGridLines?: boolean;\n stack?: boolean;\n showXAxis?: boolean;\n showYAxis?: boolean;\n startEndOnly?: boolean;\n showTooltip?: boolean;\n showAnimation?: boolean;\n autoMinValue?: boolean;\n valueFormatter?: ValueFormatter;\n customTooltip?: ({ payload, active, label }) => React.ReactNode;\n};\n\n\nexport const AreaChartCard = (props: AreaChartCard) => {\n const {\n data = [],\n categories = ['value'],\n index = 'date',\n curveType = 'linear',\n colors = ['indigo', 'cyan', 'teal', 'green', 'yellow', 'orange', 'red', 'slate', 'violet', 'rose', 'pink', 'purple', 'blue'],\n showLegend = false,\n showGridLines = false,\n stack = false,\n chartClassName,\n showXAxis = true,\n showYAxis = true,\n startEndOnly = false,\n showTooltip = true,\n showAnimation = true,\n autoMinValue = true,\n valueFormatter = (number) => `${number}`,\n customTooltip,\n } = props;\n\n return (\n <ChartBox {...props}>\n <AreaChart\n className={cn('h-72 mt-4', chartClassName)}\n data={data}\n index={index}\n categories={categories}\n colors={colors}\n valueFormatter={valueFormatter}\n showLegend={showLegend}\n showGridLines={showGridLines}\n stack={stack}\n curveType={curveType}\n showXAxis={showXAxis}\n showYAxis={showYAxis}\n startEndOnly={startEndOnly}\n showTooltip={showTooltip}\n showAnimation={showAnimation}\n autoMinValue={autoMinValue}\n customTooltip={customTooltip}\n />\n </ChartBox>\n );\n};\n\n","import React from 'react';\nimport { DonutChart, ValueFormatter } from '@tremor/react';\nimport { ChartBox } from '../ChartBox';\nimport { cn } from '../../../lib/utils';\n\nexport type DonutChartCard = ChartBox & {\n type?: 'DonutChartCard';\n categories?: string[];\n index?: string;\n valueFormatter?: ValueFormatter;\n showLabel?: boolean;\n variant?: 'donut' | 'pie';\n showAnimation?: boolean;\n};\n\nexport const DonutChartCard = (props: DonutChartCard) => {\n const { data = [], categories = ['value'], index = 'name', valueFormatter = (number) => `${number}`, showLabel = true, variant = 'donut', chartClassName, showAnimation = true } = props;\n const category = categories[0];\n return (\n <ChartBox {...props}>\n <DonutChart\n className={cn('h-72 mt-4', chartClassName)}\n data={data}\n index={index}\n category={category}\n colors={['indigo', 'cyan', 'teal', 'green', 'yellow', 'orange', 'red', 'slate', 'violet', 'rose', 'pink', 'purple', 'blue']}\n valueFormatter={valueFormatter}\n showLabel={showLabel}\n variant={variant}\n showAnimation={showAnimation}\n />\n </ChartBox>\n );\n};\n","import React from 'react';\nimport { ChartBox } from '../ChartBox';\nimport { cn } from '../../../lib/utils';\n\nexport type CountCard = ChartBox & {\n type?: 'CountCard';\n summedColumnIndex?: string;\n};\n\nexport const CountCard = (props: CountCard) => {\n if (!props.data?.length) {\n return (\n <ChartBox {...props}>\n <div className={cn(\"mt-2 ml-2 text-2xl overflow-auto\", props.chartClassName)}>\n <span className=\"text-gray-400\">No data</span>\n </div>\n </ChartBox>\n );\n }\n\n if (!props.summedColumnIndex) {\n return (\n <ChartBox {...props}>\n <div className={cn(\"mt-2 ml-2 text-2xl overflow-auto\", props.chartClassName)}>\n <span className=\"text-gray-400 text-sm\">\n set <span className=\"font-bold\">summedColumnIndex</span> to sum up values\n </span>\n </div>\n </ChartBox>\n );\n }\n\n const sum = props.data.reduce((acc, cur) => {\n const v = cur[props.summedColumnIndex];\n if (typeof v == 'number') {\n return acc + v;\n } else {\n return acc;\n }\n }, 0);\n\n return (\n <ChartBox {...props}>\n <div className={cn(\"mt-2 ml-2 font-bold text-2xl overflow-auto\", props.chartClassName)}>{sum}</div>\n </ChartBox>\n );\n};","import React from 'react';\nimport { ChartBox } from '../ChartBox';\nimport JSONTable from '../../JSONTable';\nimport { cn } from '../../../lib/utils';\n\nexport type TableCard = ChartBox & {\n type?: 'TableCard';\n columnOptions?: {\n [key: string]: {\n label: string;\n hidden: boolean;\n }\n }\n}\n\nexport const TableCard = (props: TableCard) => {\n const { data = [], columnOptions = {}, chartClassName } = props;\n return (\n <ChartBox {...props}>\n {data?.length > 0\n ? <JSONTable dataSource={data} columnOptions={columnOptions} className={cn(\"h-[256px]\", chartClassName)} />\n : <div className={cn(\"h-[256px] flex justify-center items-center text-gray-400\", chartClassName)}>No data</div>\n }\n </ChartBox>\n );\n};\n","import React from 'react';\nimport { AreaChart, LineChart, Text, ValueFormatter } from '@tremor/react';\nimport { ChartBox } from '../ChartBox';\nimport { SkeletonBox } from '../../Common/SkeletonBox';\nimport { cn } from '../../../lib/utils';\n\nexport type KPICard = ChartBox & {\n type?: 'KPICard';\n categories?: string[];\n index?: string;\n chartType?: 'area' | 'line';\n curveType?: 'linear' | 'step' | 'monotone';\n metricTitle?: string;\n metric?: string | number;\n valueFormatter?: ValueFormatter;\n loading?: boolean;\n};\n\nexport const KPICard = (props: KPICard) => {\n const { metricTitle, metric, chartType = 'area', data = [], categories = ['value'], index = 'date', valueFormatter = (number) => `${number}`, curveType = 'linear', loading, chartClassName } = props;\n\n if (loading) {\n return (\n <ChartBox {...props}>\n <div className=\"mt-4 space-x-6 px-2 flex items-center\">\n <div className=\"w-auto\">\n <Text className=\"whitespace-nowrap\">Loading...</Text>\n <div className=\"font-bold text-3xl\">-</div>\n </div>\n <SkeletonBox className=\"flex-col w-full\" skClassName=\"h-[100px] overflow-hidden\" line={1} />\n </div>\n </ChartBox>\n );\n }\n\n const ChartComp = chartType === 'area' ? AreaChart : LineChart;\n\n return (\n <ChartBox {...props}>\n <div className=\"mt-4 space-x-6 px-2 flex items-center\">\n <div className=\"w-auto\">\n <Text className=\"whitespace-nowrap\">{metricTitle}</Text>\n <div className=\"font-bold text-3xl\">{metric ?? '-'}</div>\n </div>\n <ChartComp\n className={cn('h-[100px] overflow-hidden', chartClassName)}\n data={data}\n index={index}\n categories={categories}\n colors={['indigo', 'cyan', 'teal', 'green', 'yellow', 'orange', 'red', 'slate', 'violet', 'rose', 'pink', 'purple', 'blue']}\n valueFormatter={valueFormatter}\n curveType={curveType}\n showXAxis={false}\n showGridLines={false}\n startEndOnly={true}\n showYAxis={false}\n showLegend={false}\n autoMinValue={true}\n showAnimation={true}\n />\n </div>\n </ChartBox>\n );\n};\n"]}
@@ -1,7 +1,7 @@
1
1
  import { S as Store } from './root-766ae985.js';
2
2
  import React from 'react';
3
3
  import * as react_hot_toast from 'react-hot-toast';
4
- import { P as PromiseState } from './PromiseState-2a8c856c.js';
4
+ import { P as PromiseState } from './PromiseState-b0cc408e.js';
5
5
  import 'typed-emitter';
6
6
  import 'events';
7
7
 
@@ -26,10 +26,10 @@ declare class ConfirmStore implements Store {
26
26
  declare class ToastPlugin implements Store {
27
27
  sid: string;
28
28
  provider: () => React.JSX.Element;
29
- success: (message: react_hot_toast.Renderable | react_hot_toast.ValueFunction<react_hot_toast.Renderable, react_hot_toast.Toast>, options?: Partial<Pick<react_hot_toast.Toast, "style" | "id" | "className" | "icon" | "position" | "duration" | "ariaProps" | "iconTheme">>) => string;
30
- error: (message: react_hot_toast.Renderable | react_hot_toast.ValueFunction<react_hot_toast.Renderable, react_hot_toast.Toast>, options?: Partial<Pick<react_hot_toast.Toast, "style" | "id" | "className" | "icon" | "position" | "duration" | "ariaProps" | "iconTheme">>) => string;
31
- loading: (message: react_hot_toast.Renderable | react_hot_toast.ValueFunction<react_hot_toast.Renderable, react_hot_toast.Toast>, options?: Partial<Pick<react_hot_toast.Toast, "style" | "id" | "className" | "icon" | "position" | "duration" | "ariaProps" | "iconTheme">>) => string;
32
- custom: (message: react_hot_toast.Renderable | react_hot_toast.ValueFunction<react_hot_toast.Renderable, react_hot_toast.Toast>, options?: Partial<Pick<react_hot_toast.Toast, "style" | "id" | "className" | "icon" | "position" | "duration" | "ariaProps" | "iconTheme">>) => string;
29
+ success: (message: react_hot_toast.Renderable | react_hot_toast.ValueFunction<react_hot_toast.Renderable, react_hot_toast.Toast>, options?: Partial<Pick<react_hot_toast.Toast, "style" | "id" | "icon" | "duration" | "ariaProps" | "className" | "position" | "iconTheme">>) => string;
30
+ error: (message: react_hot_toast.Renderable | react_hot_toast.ValueFunction<react_hot_toast.Renderable, react_hot_toast.Toast>, options?: Partial<Pick<react_hot_toast.Toast, "style" | "id" | "icon" | "duration" | "ariaProps" | "className" | "position" | "iconTheme">>) => string;
31
+ loading: (message: react_hot_toast.Renderable | react_hot_toast.ValueFunction<react_hot_toast.Renderable, react_hot_toast.Toast>, options?: Partial<Pick<react_hot_toast.Toast, "style" | "id" | "icon" | "duration" | "ariaProps" | "className" | "position" | "iconTheme">>) => string;
32
+ custom: (message: react_hot_toast.Renderable | react_hot_toast.ValueFunction<react_hot_toast.Renderable, react_hot_toast.Toast>, options?: Partial<Pick<react_hot_toast.Toast, "style" | "id" | "icon" | "duration" | "ariaProps" | "className" | "position" | "iconTheme">>) => string;
33
33
  dismiss: (toastId?: string) => void;
34
34
  remove: (toastId?: string) => void;
35
35
  promise: <T>(promise: Promise<T>, msgs: {
package/dist/plugins.mjs CHANGED
@@ -1,7 +1,7 @@
1
- export { ToastPlugin } from './chunk-N4XCPX4L.mjs';
2
- import { DialogStore } from './chunk-WAYJJYKN.mjs';
3
- export { DialogStore } from './chunk-WAYJJYKN.mjs';
4
- import { useStore } from './chunk-SXQEYWUP.mjs';
1
+ export { ToastPlugin } from './chunk-4YCP5CJ4.mjs';
2
+ import { DialogStore } from './chunk-OZ3JSH5J.mjs';
3
+ export { DialogStore } from './chunk-OZ3JSH5J.mjs';
4
+ import { useStore } from './chunk-DZMNL4BZ.mjs';
5
5
  import './chunk-HRWHDF2F.mjs';
6
6
  import { cn } from './chunk-6UHBBDKI.mjs';
7
7
  import { __spreadValues } from './chunk-6F7H4PAA.mjs';
package/dist/ui.d.mts CHANGED
@@ -15,4 +15,13 @@ declare const Copy: (({ value }: IProps) => React.JSX.Element) & {
15
15
  displayName: string;
16
16
  };
17
17
 
18
- export { Copy, PanelCard };
18
+ interface SkeletonBox {
19
+ line?: number;
20
+ skClassName: string;
21
+ }
22
+ declare const SkeletonBox: ({ line, skClassName, className }: SkeletonBox & {
23
+ skClassName?: string;
24
+ className?: string;
25
+ }) => React.JSX.Element;
26
+
27
+ export { Copy, PanelCard, SkeletonBox };
package/dist/ui.mjs CHANGED
@@ -1,3 +1,4 @@
1
+ export { SkeletonBox } from './chunk-Y23EH2XR.mjs';
1
2
  import './chunk-U7JFOBSQ.mjs';
2
3
  import { cn } from './chunk-6UHBBDKI.mjs';
3
4
  import './chunk-6F7H4PAA.mjs';
@@ -9,7 +10,7 @@ import { observer, useLocalStore } from 'mobx-react-lite';
9
10
  import 'lucide-react';
10
11
 
11
12
  var PanelCard = ({ title, content, className }) => {
12
- return /* @__PURE__ */ React.createElement(Card, { className: cn("border-none shadow-none bg-[#F8FAFC] dark:bg-[#18181c] p-4", className), shadow: "sm" }, /* @__PURE__ */ React.createElement("p", { className: "text-[#6B7280] text-sm" }, title), /* @__PURE__ */ React.createElement("div", { className: cn("break-all text-[#374151] text-base font-semibold mt-2", className) }, content));
13
+ return /* @__PURE__ */ React.createElement(Card, { className: cn("flex flex-col justify-between border-none p-4 shadow-sm", className) }, /* @__PURE__ */ React.createElement("p", { className: "text-[#6B7280] dark:text-[#cecdcd] text-sm" }, title), /* @__PURE__ */ React.createElement("div", { className: cn("mt-2 break-all text-[#374151] dark:text-[#cecdcd] text-base font-semibold") }, content));
13
14
  };
14
15
  var Copy = observer(({ value }) => {
15
16
  const store = useLocalStore(() => ({
package/dist/ui.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../components/Common/PanelCard/index.tsx","../components/Common/Copy/index.tsx","../components/Common/CopyButton/index.tsx"],"names":["React","Copy"],"mappings":";;;;;;;AACA,SAAS,YAAY;AACrB,OAAO,WAAW;AAOX,IAAM,YAAY,CAAC,EAAE,OAAO,SAAS,UAAU,MAA0C;AAC9F,SACE,oCAAC,QAAK,WAAW,GAAG,8DAA8D,SAAS,GAAG,QAAO,QACnG,oCAAC,OAAE,WAAU,4BAA0B,KAAM,GAC7C,oCAAC,SAAI,WAAW,GAAG,yDAAyD,SAAS,KAAI,OAAQ,CACnG;AAEJ;;;ACfA,OAAOA,YAAW;AAClB,SAAS,WAAW,gBAAgB;AACpC,OAAO,UAAU;AACjB,SAAS,UAAU,qBAAqB;AAKjC,IAAM,OAAO,SAAS,CAAC,EAAE,MAAM,MAAc;AAClD,QAAM,QAAQ,cAAc,OAAO;AAAA,IACjC,QAAQ;AAAA,IACR,gBAAgB,KAAc;AAC5B,WAAK,YAAY;AAAA,IACnB;AAAA,EACF,EAAE;AAEF,SACE,gBAAAA,OAAA,cAAC,aACE,MAAM,SACL,gBAAAA,OAAA,cAAC,aAAU,WAAU,kBAAiB,IAEtC,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,SAAS,YAAY;AACnB,aAAK,KAAK;AACV,cAAM,SAAS;AACf,mBAAW,MAAM;AACf,gBAAM,SAAS;AAAA,QACjB,GAAG,GAAG;AAAA,MACR;AAAA;AAAA,EACF,CAEJ;AAEJ,CAAC;;;ACnCD,OAAOA,UAAS,WAAW,gBAAgB;AAC3C,OAAO,qBAAqB;AAC5B,SAAS,QAAAC,OAAM,iBAAiB","sourcesContent":["import { cn } from '../../../lib/utils';\nimport { Card } from '@nextui-org/react';\nimport React from 'react';\n\nexport interface PanelCard {\n title: string | JSX.Element;\n content?: string | JSX.Element;\n}\n\nexport const PanelCard = ({ title, content, className }: PanelCard & { className?: string }) => {\n return (\n <Card className={cn('border-none shadow-none bg-[#F8FAFC] dark:bg-[#18181c] p-4', className)} shadow=\"sm\">\n <p className=\"text-[#6B7280] text-sm\">{title}</p>\n <div className={cn('break-all text-[#374151] text-base font-semibold mt-2', className)}>{content}</div>\n </Card>\n );\n};\n","\"use client\";\nimport React from \"react\";\nimport { CheckIcon, CopyIcon } from \"@radix-ui/react-icons\";\nimport copy from \"copy-to-clipboard\";\nimport { observer, useLocalStore } from \"mobx-react-lite\";\n\ninterface IProps {\n value: string;\n}\nexport const Copy = observer(({ value }: IProps) => {\n const store = useLocalStore(() => ({\n copied: false,\n toggleIOTipOpen(val: boolean) {\n this.isTipOpen = val;\n },\n }));\n\n return (\n <div>\n {store.copied ? (\n <CheckIcon className=\"text-green-400\" />\n ) : (\n <CopyIcon\n className=\"text-primary-foreground cursor-pointer\"\n onClick={async () => {\n copy(value);\n store.copied = true;\n setTimeout(() => {\n store.copied = false;\n }, 900);\n }}\n />\n )}\n </div>\n );\n});\n","import React, { useEffect, useState } from \"react\";\nimport copyToClipboard from \"copy-to-clipboard\";\nimport { Copy, CopyCheck } from \"lucide-react\";\nimport { cn } from \"../../../lib/utils\";\n\nexport default function CopyButton({ className, value }: { className?: string; value: string }) {\n const [copied, setCopied] = useState(false);\n useEffect(() => {\n if (copied) {\n const timer = setTimeout(() => {\n setCopied(false);\n }, 3000);\n return () => clearTimeout(timer);\n }\n }, [copied]);\n return (\n <button\n className={cn(\"rounded-sm p-1 hover:bg-gray-300 dark:hover:bg-gray-600\", className)}\n onClick={() => {\n copyToClipboard(value);\n setCopied(true);\n }}>\n {copied ? <CopyCheck size={20} /> : <Copy size={20} />}\n </button>\n );\n}\n"]}
1
+ {"version":3,"sources":["../components/Common/PanelCard/index.tsx","../components/Common/Copy/index.tsx","../components/Common/CopyButton/index.tsx"],"names":["React","Copy"],"mappings":";;;;;;;;;;AACA,SAAS,YAAY;AACrB,OAAO,WAAW;AAOX,IAAM,YAAY,CAAC,EAAE,OAAO,SAAS,UAAU,MAA0C;AAC9F,SACE,oCAAC,QAAK,WAAW,GAAG,2DAA2D,SAAS,KACtF,oCAAC,OAAE,WAAU,gDAA8C,KAAM,GACjE,oCAAC,SAAI,WAAW,GAAG,2EAA2E,KAAI,OAAQ,CAC5G;AAEJ;;;ACfA,OAAOA,YAAW;AAClB,SAAS,WAAW,gBAAgB;AACpC,OAAO,UAAU;AACjB,SAAS,UAAU,qBAAqB;AAKjC,IAAM,OAAO,SAAS,CAAC,EAAE,MAAM,MAAc;AAClD,QAAM,QAAQ,cAAc,OAAO;AAAA,IACjC,QAAQ;AAAA,IACR,gBAAgB,KAAc;AAC5B,WAAK,YAAY;AAAA,IACnB;AAAA,EACF,EAAE;AAEF,SACE,gBAAAA,OAAA,cAAC,aACE,MAAM,SACL,gBAAAA,OAAA,cAAC,aAAU,WAAU,kBAAiB,IAEtC,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,SAAS,YAAY;AACnB,aAAK,KAAK;AACV,cAAM,SAAS;AACf,mBAAW,MAAM;AACf,gBAAM,SAAS;AAAA,QACjB,GAAG,GAAG;AAAA,MACR;AAAA;AAAA,EACF,CAEJ;AAEJ,CAAC;;;ACnCD,OAAOA,UAAS,WAAW,gBAAgB;AAC3C,OAAO,qBAAqB;AAC5B,SAAS,QAAAC,OAAM,iBAAiB","sourcesContent":["import { cn } from '../../../lib/utils';\nimport { Card } from '@nextui-org/react';\nimport React from 'react';\n\nexport interface PanelCard {\n title: string | JSX.Element;\n content?: string | JSX.Element;\n}\n\nexport const PanelCard = ({ title, content, className }: PanelCard & { className?: string }) => {\n return (\n <Card className={cn('flex flex-col justify-between border-none p-4 shadow-sm', className)}>\n <p className=\"text-[#6B7280] dark:text-[#cecdcd] text-sm\">{title}</p>\n <div className={cn('mt-2 break-all text-[#374151] dark:text-[#cecdcd] text-base font-semibold')}>{content}</div>\n </Card>\n );\n};\n","\"use client\";\nimport React from \"react\";\nimport { CheckIcon, CopyIcon } from \"@radix-ui/react-icons\";\nimport copy from \"copy-to-clipboard\";\nimport { observer, useLocalStore } from \"mobx-react-lite\";\n\ninterface IProps {\n value: string;\n}\nexport const Copy = observer(({ value }: IProps) => {\n const store = useLocalStore(() => ({\n copied: false,\n toggleIOTipOpen(val: boolean) {\n this.isTipOpen = val;\n },\n }));\n\n return (\n <div>\n {store.copied ? (\n <CheckIcon className=\"text-green-400\" />\n ) : (\n <CopyIcon\n className=\"text-primary-foreground cursor-pointer\"\n onClick={async () => {\n copy(value);\n store.copied = true;\n setTimeout(() => {\n store.copied = false;\n }, 900);\n }}\n />\n )}\n </div>\n );\n});\n","import React, { useEffect, useState } from \"react\";\nimport copyToClipboard from \"copy-to-clipboard\";\nimport { Copy, CopyCheck } from \"lucide-react\";\nimport { cn } from \"../../../lib/utils\";\n\nexport default function CopyButton({ className, value }: { className?: string; value: string }) {\n const [copied, setCopied] = useState(false);\n useEffect(() => {\n if (copied) {\n const timer = setTimeout(() => {\n setCopied(false);\n }, 3000);\n return () => clearTimeout(timer);\n }\n }, [copied]);\n return (\n <button\n className={cn(\"rounded-sm p-1 hover:bg-gray-300 dark:hover:bg-gray-600\", className)}\n onClick={() => {\n copyToClipboard(value);\n setCopied(true);\n }}>\n {copied ? <CopyCheck size={20} /> : <Copy size={20} />}\n </button>\n );\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dappworks/kit",
3
- "version": "0.4.68",
3
+ "version": "0.4.69",
4
4
  "description": "",
5
5
  "main": "./dist/index.mjs",
6
6
  "types": "./dist/index.d.mts",