@dappworks/kit 0.5.27 → 0.5.29
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/aiem.mjs +4 -4
- package/dist/{chunk-2N4HH4ZF.mjs → chunk-2BZKMJZX.mjs} +1 -1
- package/dist/chunk-2BZKMJZX.mjs.map +1 -0
- package/dist/{chunk-KSX6MNJE.mjs → chunk-2L5EKCYR.mjs} +6 -6
- package/dist/chunk-2L5EKCYR.mjs.map +1 -0
- package/dist/{chunk-K7LFG5BA.mjs → chunk-2PD23V7H.mjs} +1 -1
- package/dist/{chunk-K7LFG5BA.mjs.map → chunk-2PD23V7H.mjs.map} +1 -1
- package/dist/{chunk-IMOLRP7I.mjs → chunk-7EL2RQI7.mjs} +1 -1
- package/dist/chunk-7EL2RQI7.mjs.map +1 -0
- package/dist/{chunk-R4N52NI2.mjs → chunk-7WJMHFRA.mjs} +2 -2
- package/dist/chunk-7WJMHFRA.mjs.map +1 -0
- package/dist/{chunk-DCSRCD7W.mjs → chunk-BAXWSAXB.mjs} +1 -1
- package/dist/{chunk-DCSRCD7W.mjs.map → chunk-BAXWSAXB.mjs.map} +1 -1
- package/dist/{chunk-SNGWN2DW.mjs → chunk-BQSQ4L7R.mjs} +2 -2
- package/dist/chunk-BQSQ4L7R.mjs.map +1 -0
- package/dist/{chunk-DVNRHEKS.mjs → chunk-FWK5VZHE.mjs} +3 -3
- package/dist/chunk-FWK5VZHE.mjs.map +1 -0
- package/dist/{chunk-KMJSNJHU.mjs → chunk-HGVIPVWE.mjs} +535 -55
- package/dist/chunk-HGVIPVWE.mjs.map +1 -0
- package/dist/{chunk-B7RV4C5E.mjs → chunk-I2RSE63R.mjs} +3 -3
- package/dist/chunk-I2RSE63R.mjs.map +1 -0
- package/dist/{chunk-YG4RDLYA.mjs → chunk-R66SHRQE.mjs} +2 -2
- package/dist/chunk-R66SHRQE.mjs.map +1 -0
- package/dist/{chunk-XSGTWROT.mjs → chunk-SA53R6TL.mjs} +1 -1
- package/dist/chunk-SA53R6TL.mjs.map +1 -0
- package/dist/{chunk-6AX24IFY.mjs → chunk-SQ7DRKMK.mjs} +2 -2
- package/dist/chunk-SQ7DRKMK.mjs.map +1 -0
- package/dist/{chunk-ONVPCAMQ.mjs → chunk-Z3LJE5QF.mjs} +1 -1
- package/dist/chunk-Z3LJE5QF.mjs.map +1 -0
- package/dist/dev.mjs +3 -3
- package/dist/dev.mjs.map +1 -1
- package/dist/experimental.mjs +4 -4
- package/dist/experimental.mjs.map +1 -1
- package/dist/form.mjs +5 -5
- package/dist/form.mjs.map +1 -1
- package/dist/index.mjs +11 -11
- package/dist/inspector.mjs.map +1 -1
- package/dist/jsoncomponent.mjs.map +1 -1
- package/dist/jsontable.mjs +5 -5
- package/dist/metrics.mjs +5 -5
- package/dist/metrics.mjs.map +1 -1
- package/dist/plugins.mjs +8 -8
- package/dist/plugins.mjs.map +1 -1
- package/dist/ui.mjs +2 -2
- package/dist/ui.mjs.map +1 -1
- package/dist/utils.d.mts +100 -19
- package/dist/utils.mjs +3 -3
- package/dist/wallet.mjs +12 -12
- package/dist/wallet.mjs.map +1 -1
- package/package.json +173 -173
- package/dist/chunk-2N4HH4ZF.mjs.map +0 -1
- package/dist/chunk-6AX24IFY.mjs.map +0 -1
- package/dist/chunk-B7RV4C5E.mjs.map +0 -1
- package/dist/chunk-DVNRHEKS.mjs.map +0 -1
- package/dist/chunk-IMOLRP7I.mjs.map +0 -1
- package/dist/chunk-KMJSNJHU.mjs.map +0 -1
- package/dist/chunk-KSX6MNJE.mjs.map +0 -1
- package/dist/chunk-ONVPCAMQ.mjs.map +0 -1
- package/dist/chunk-R4N52NI2.mjs.map +0 -1
- package/dist/chunk-SNGWN2DW.mjs.map +0 -1
- package/dist/chunk-XSGTWROT.mjs.map +0 -1
- package/dist/chunk-YG4RDLYA.mjs.map +0 -1
package/dist/aiem.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { AIem, Cache, Fields } from './chunk-
|
|
2
|
-
import './chunk-
|
|
3
|
-
import './chunk-
|
|
4
|
-
import './chunk-
|
|
1
|
+
export { AIem, Cache, Fields } from './chunk-SQ7DRKMK.mjs';
|
|
2
|
+
import './chunk-2BZKMJZX.mjs';
|
|
3
|
+
import './chunk-7WJMHFRA.mjs';
|
|
4
|
+
import './chunk-2PD23V7H.mjs';
|
|
5
5
|
import './chunk-VIK2VI34.mjs';
|
|
6
6
|
//# sourceMappingURL=out.js.map
|
|
7
7
|
//# sourceMappingURL=aiem.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../lib/dexie.ts"],"names":[],"mappings":";AAAA,OAAO,gBAAgB;AACvB,SAAS,aAAyB;AAE3B,IAAM,eAAN,cAA2B,MAAM;AAAA,EAGtC,cAAc;AACZ,UAAM,OAAO;AACb,SAAK,QAAQ,CAAC,EAAE,OAAO;AAAA,MACrB,IAAI;AAAA,IACN,CAAC;AAAA,EACH;AACF;AACO,IAAM,QAAQ,IAAI,aAAa;AAE/B,IAAM,aAAN,MAAiB;AAAA,EAAjB;AACL,cAAK,MAAM;AACX,kBAAS,IAAI;AAAA,MACX,OAAO,QAAkB;AACvB,cAAM,MAAM,MAAM,KAAK,GAAG,QAAQ,GAAG;AACrC,eAAO,IAAI,IAAI,CAAC,MAAM,uBAAG,KAAK;AAAA,MAChC;AAAA,MACA,EAAE,OAAO,MAAM;AAAA,IACjB;AACA,kBAAS,IAAI;AAAA,MACX,OAAO,QAAoD;AACzD,cAAM,MAAM,oBAAI,KAAK;AACrB,cAAM,KAAK,GAAG,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,OAAO,EAAE,OAAO,EAAE,OAAO,YAAY,IAAI,QAAQ,IAAI,QAAQ,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;AACjI,eAAO;AAAA,MACT;AAAA,MACA,EAAE,OAAO,MAAM;AAAA,IACjB;AACA,mBAAU;AAAA,MACR,KAAK,KAAK;AAAA,MACV,QAAQ;AAAA,IACV;AAAA;AAAA,EAEA,MAAM,IAAI,MAAM;AACd,UAAM,MAAM,KAAK,QAAQ,SAAS;AAClC,YAAQ,KAAK,SAAS,GAAG;AACzB,UAAM,MAAM,MAAM,KAAK,OAAO,KAAK,GAAG;AACtC,YAAQ,QAAQ,SAAS,GAAG;AAC5B,UAAM,OAAO,2BAAK;AAClB,QAAI,CAAC;AAAM;AACX,WAAO,6BAAM;AAAA,EACf;AAAA,EAEA,MAAM,OAAO,MAAM;AACjB,UAAM,MAAM,KAAK,QAAQ,SAAS;AAClC,YAAQ,KAAK,SAAS,GAAG;AACzB,UAAM,MAAM,MAAM,KAAK,OAAO,KAAK,GAAG;AACtC,YAAQ,QAAQ,SAAS,GAAG;AAC5B,UAAM,OAAO,2BAAK;AAClB,QAAI,CAAC;AAAM;AACX,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,IAAI,MAAM,OAAO,SAA4B;AACjD,UAAM,MAAM,KAAK,QAAQ,SAAS;AAClC,SAAK,OAAO,KAAK,EAAE,KAAK,OAAO,MAAK,mCAAS,QAAO,KAAK,QAAQ,IAAI,CAAC;AAEtE,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,KAAK;AAEhB;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ;AAAA,EAAC;AAAA,EAEf,MAAM,KAAoE,KAAK,IAAO,MAAmE;AACvJ,QAAI,OAAO,MAAM,KAAK,OAAO,KAAK,GAAG;AACrC,SAAI,6BAAM,eAAc,IAAI,KAAK,KAAK,UAAU,KAAK,oBAAI,KAAK,GAAG;AAG/D,UAAI,6BAAM,WAAW;AACnB,WAAG,EACA,KAAK,CAAC,UAAU;AACf,eAAK,OAAO,KAAK,EAAE,KAAK,OAAO,MAAK,6BAAM,QAAO,KAAK,QAAQ,IAAI,CAAC;AAAA,QACrE,CAAC,EACA,MAAM,CAAC,QAAQ;AACd,kBAAQ,MAAM,GAAG;AAAA,QACnB,CAAC;AAAA,MACL,OAAO;AAEL,eAAO;AAAA,MACT;AAAA,IACF;AACA,QAAI,CAAC,MAAM;AAET,YAAM,QAAQ,MAAM,GAAG;AACvB,WAAK,OAAO,KAAK,EAAE,KAAK,OAAO,MAAK,6BAAM,QAAO,KAAK,QAAQ,IAAI,CAAC;AACnE,aAAO;AAAA,IACT;AACA,WAAO,KAAK;AAAA,EACd;AACF;AAEO,IAAM,QAAQ,IAAI,WAAW","sourcesContent":["import DataLoader from \"dataloader\";\r\nimport { Dexie, type Table } from \"dexie\";\r\n\r\nexport class DexieStorage extends Dexie {\r\n kv: Table<{ key: string; value: { value: any; expiration: number } }>;\r\n\r\n constructor() {\r\n super(\"cache\");\r\n this.version(1).stores({\r\n kv: \"key, value\",\r\n });\r\n }\r\n}\r\nexport const dexie = new DexieStorage();\r\n\r\nexport class DexieCache {\r\n kv = dexie.kv;\r\n kv_get = new DataLoader(\r\n async (ids: string[]) => {\r\n const res = await this.kv.bulkGet(ids);\r\n return res.map((i) => i?.value);\r\n },\r\n { cache: false },\r\n );\r\n kv_set = new DataLoader(\r\n async (ids: { key: string; value: any; ttl: number }[]) => {\r\n const now = new Date();\r\n await this.kv.bulkPut(ids.map((i) => ({ key: i.key, value: { value: i.value, expiration: now.setTime(now.getTime() + i.ttl) } })));\r\n return ids;\r\n },\r\n { cache: false },\r\n );\r\n options = {\r\n ttl: 60 * 1000,\r\n prefix: \"\",\r\n };\r\n\r\n async get(_key) {\r\n const key = this.options.prefix + _key;\r\n console.time(\"get \" + key);\r\n const res = await this.kv_get.load(key);\r\n console.timeEnd(\"get \" + key);\r\n const data = res?.value;\r\n if (!data) return;\r\n return data?.value;\r\n }\r\n\r\n async getRaw(_key) {\r\n const key = this.options.prefix + _key;\r\n console.time(\"get \" + key);\r\n const res = await this.kv_get.load(key);\r\n console.timeEnd(\"get \" + key);\r\n const data = res?.value;\r\n if (!data) return;\r\n return data;\r\n }\r\n\r\n async set(_key, value, options?: { ttl?: number }) {\r\n const key = this.options.prefix + _key;\r\n this.kv_set.load({ key, value, ttl: options?.ttl || this.options.ttl });\r\n\r\n return this;\r\n }\r\n\r\n async delete(key) {\r\n // return this.dataloader.load(['del', key]);\r\n return;\r\n }\r\n\r\n async clear() {}\r\n\r\n async wrap<T extends (...args: any[]) => Promise<any>, U = ReturnType<T>>(key, fn: T, args?: { ttl?: number; alowStale?: boolean }): Promise<Awaited<U>> {\r\n let data = await this.kv_get.load(key);\r\n if (data?.expiration && new Date(data.expiration) <= new Date()) {\r\n // console.log(\"cache expired\", key)\r\n\r\n if (args?.alowStale) {\r\n fn()\r\n .then((value) => {\r\n this.kv_set.load({ key, value, ttl: args?.ttl || this.options.ttl });\r\n })\r\n .catch((err) => {\r\n console.error(err);\r\n });\r\n } else {\r\n //@ts-ignore\r\n data = null;\r\n }\r\n }\r\n if (!data) {\r\n // console.log(\"miss cache\", key)\r\n const value = await fn();\r\n this.kv_set.load({ key, value, ttl: args?.ttl || this.options.ttl });\r\n return value;\r\n }\r\n return data.value;\r\n }\r\n}\r\n\r\nexport const cache = new DexieCache();\r\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { PaginationState } from './chunk-
|
|
2
|
-
import { SkeletonBox } from './chunk-
|
|
3
|
-
import { _ } from './chunk-
|
|
4
|
-
import { cn } from './chunk-
|
|
1
|
+
import { PaginationState } from './chunk-Z3LJE5QF.mjs';
|
|
2
|
+
import { SkeletonBox } from './chunk-BQSQ4L7R.mjs';
|
|
3
|
+
import { _ } from './chunk-2PD23V7H.mjs';
|
|
4
|
+
import { cn } from './chunk-BAXWSAXB.mjs';
|
|
5
5
|
import { __objRest, __spreadValues, __spreadProps } from './chunk-VIK2VI34.mjs';
|
|
6
6
|
import * as React2 from 'react';
|
|
7
7
|
import React2__default, { useRef, useEffect, useState, useMemo } from 'react';
|
|
@@ -384,7 +384,7 @@ function sortData({
|
|
|
384
384
|
return type === "desc" ? "" : v;
|
|
385
385
|
}
|
|
386
386
|
if (typeof v === "string") {
|
|
387
|
-
const _v = Number(v.replace("%", "").replace("$", "").replace(
|
|
387
|
+
const _v = Number(v.replace("%", "").replace("$", "").replace(/,/g, ""));
|
|
388
388
|
if (isNaN(_v)) {
|
|
389
389
|
return v.toLowerCase();
|
|
390
390
|
} else {
|
|
@@ -1028,4 +1028,4 @@ function groupByColSpan(arr, colSpan) {
|
|
|
1028
1028
|
|
|
1029
1029
|
export { JSONTable };
|
|
1030
1030
|
//# sourceMappingURL=out.js.map
|
|
1031
|
-
//# sourceMappingURL=chunk-
|
|
1031
|
+
//# sourceMappingURL=chunk-2L5EKCYR.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../components/JSONTable/index.tsx","../components/ui/dropdown-menu.tsx"],"names":["React","ChevronRight","sortableColumnsDefaultValue","columns","collapsedTables","keys","showCollapsedTables","_a","_b","_","sortedData"],"mappings":"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","sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from \"react\";\r\nimport { Card, Divider, Pagination as NextuiPagination, PaginationProps, Spinner, SpinnerProps } from \"@nextui-org/react\";\r\nimport { ChevronDown, ChevronLeft, ChevronRight, ChevronUp, ChevronsUpDown } from \"lucide-react\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { PaginationState } from \"../../store/standard/PaginationState\";\r\nimport { SkeletonBox } from \"../Common/SkeletonBox\";\r\nimport { _ } from \"../../lib/lodash\";\r\nimport { cn } from \"../../lib/utils\";\r\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from \"../ui/dropdown-menu\";\r\nimport { VList } from \"virtua\";\r\n\r\nexport type TableClassNames = {\r\n table?: string;\r\n thead?: string;\r\n tr?: string;\r\n th?: string;\r\n tbody?: string;\r\n td?: string;\r\n};\r\n\r\nexport type HeaderKeys<T extends Record<string, any>> = Array<keyof T | \"$actions\">;\r\n\r\nexport type ColumnConfig<T> = {\r\n label?: React.ReactNode;\r\n width?: number;\r\n hidden?: boolean;\r\n sortable?: boolean;\r\n sortKey?: string;\r\n order?: number;\r\n render?: (item: T) => any;\r\n};\r\n\r\nexport type ColumnOptions<T> = {\r\n [key in keyof T]?: ColumnConfig<T>;\r\n} & {\r\n $actions?: ColumnConfig<T>;\r\n};\r\n\r\ntype Column<T> = {\r\n key: string;\r\n label: React.ReactNode;\r\n width: number;\r\n render?: (item: T) => any;\r\n};\r\n\r\ntype CollapsedTable<U> = {\r\n key: string;\r\n columns: Column<U>[];\r\n};\r\n\r\nexport type CardOptions = {\r\n cardContainerClassName?: string;\r\n cardClassName?: string;\r\n itemClassName?: string;\r\n labelClassName?: string;\r\n valueClassName?: string;\r\n showDivider?: boolean;\r\n dividerClassName?: string;\r\n virtualizedOptions?: {\r\n colSpan?: number;\r\n cardContainerClassName?: string;\r\n };\r\n};\r\n\r\nexport type LoadingOptions = {\r\n type?: \"skeleton\" | \"spinner\";\r\n skeleton?: {\r\n boxClassName?: string;\r\n skeletonClassName?: string;\r\n line?: number;\r\n };\r\n spinner?: {\r\n boxClassName?: string;\r\n spinnerProps?: SpinnerProps;\r\n text?: string;\r\n textClassName?: string;\r\n };\r\n};\r\n\r\nexport type SortingUIOptions = {\r\n showDropdown?: boolean;\r\n dropdownTriggerBtnClassName?: string;\r\n dropdownContentClassName?: string;\r\n dropdownItemClassName?: string;\r\n titles?: {\r\n asc?: string;\r\n desc?: string;\r\n none?: string;\r\n };\r\n};\r\n\r\nexport type CollapsedTableConfig<T> = {\r\n classNames?: TableClassNames;\r\n options: {\r\n key: keyof T;\r\n headerKeys: string[];\r\n columnOptions: ColumnOptions<any>;\r\n }[];\r\n collapsedHandlerPosition?: \"left\" | \"right\";\r\n collapsedHandlerBoxCss?: string;\r\n openedIcon?: React.ReactNode;\r\n closedIcon?: React.ReactNode;\r\n onRowClick?: (item: any) => void;\r\n rowCss?: string | ((item: any) => string | undefined);\r\n emptyContent?: React.ReactNode;\r\n};\r\n\r\nexport type VirtualizedOptions = {\r\n isVirtualized?: boolean;\r\n vListHeight?: number;\r\n classNames?: {\r\n header?: string;\r\n headerCell?: string;\r\n row?: string;\r\n rowCell?: string;\r\n };\r\n cardOptions?: {\r\n colSpan?: number;\r\n cardContainerClassName?: string;\r\n };\r\n fetchData?: () => Promise<void>;\r\n};\r\n\r\nexport interface JSONTableProps<T extends Record<string, any>> {\r\n className?: string;\r\n classNames?: TableClassNames;\r\n rowKey?: string;\r\n dataSource: T[];\r\n headerKeys?: HeaderKeys<T>;\r\n columnOptions?: ColumnOptions<T>;\r\n isServerPaging?: boolean;\r\n pagination?: PaginationState;\r\n nextuiPaginationProps?: Partial<PaginationProps>;\r\n showPagination?: boolean;\r\n onRowClick?: (item: T) => void;\r\n rowCss?: string | ((item: T) => string | undefined);\r\n asCard?: boolean;\r\n cardOptions?: CardOptions;\r\n autoScrollToTop?: boolean;\r\n emptyContent?: React.ReactNode;\r\n isLoading?: boolean;\r\n loadingOptions?: LoadingOptions;\r\n loadingContent?: React.ReactNode;\r\n columnSlot?: ((props: { row: T }) => React.ReactNode) | React.ReactNode;\r\n isHeaderSticky?: boolean;\r\n sortingUIOptions?: SortingUIOptions;\r\n collapsedTableConfig?: CollapsedTableConfig<T>;\r\n virtualizedOptions?: VirtualizedOptions;\r\n}\r\n\r\nexport const JSONTable = <T extends Record<string, any>>(props: JSONTableProps<T>) => {\r\n const {\r\n className,\r\n classNames,\r\n dataSource = [],\r\n columnOptions,\r\n headerKeys,\r\n isServerPaging,\r\n pagination,\r\n nextuiPaginationProps,\r\n showPagination = true,\r\n rowKey,\r\n onRowClick,\r\n rowCss,\r\n columnSlot,\r\n asCard = false,\r\n cardOptions,\r\n autoScrollToTop = false,\r\n emptyContent,\r\n isLoading = false,\r\n loadingOptions,\r\n loadingContent,\r\n isHeaderSticky = false,\r\n sortingUIOptions,\r\n collapsedTableConfig,\r\n virtualizedOptions,\r\n } = props;\r\n const [sortableColumnsMap, setSortableColumnsMap] = useState<{ [k: string]: \"asc\" | \"desc\" | \"none\" }>({});\r\n const [sortedData, setSortedData] = useState<T[]>(dataSource);\r\n\r\n const { columns, sortableColumnsDefaultValue, showCollapsedTables, collapsedTables } = useMemo(() => {\r\n const firstData = dataSource[0];\r\n\r\n const allKeys = firstData ? Object.keys(firstData) : [];\r\n const keys = headerKeys ? headerKeys : columnOptions ? allKeys.filter((key) => !columnOptions[key]?.hidden) : allKeys;\r\n if (!keys.includes(\"$actions\") && columnOptions && columnOptions[\"$actions\"]) {\r\n keys.push(\"$actions\");\r\n }\r\n\r\n const sortableColumnsDefaultValue: { [k: string]: \"asc\" | \"desc\" | \"none\" } = {};\r\n\r\n let columns: Column<T>[] = keys.map((key: string) => {\r\n const sortable = columnOptions?.[key]?.sortable;\r\n if (sortable) {\r\n sortableColumnsDefaultValue[key] = \"none\";\r\n }\r\n return {\r\n key,\r\n label: columnOptions?.[key]?.label ?? (key === \"$actions\" ? \"\" : key),\r\n width: columnOptions?.[key]?.width ?? 60,\r\n render: columnOptions?.[key]?.render,\r\n };\r\n });\r\n\r\n if (!headerKeys && columnOptions) {\r\n columns.sort((a, b) => {\r\n const aOrder = columnOptions[a.key]?.order ?? 0;\r\n const bOrder = columnOptions[b.key]?.order ?? 0;\r\n return bOrder - aOrder;\r\n });\r\n }\r\n\r\n let collapsedTables: CollapsedTable<any>[] = [];\r\n if (firstData && collapsedTableConfig?.options) {\r\n const collapsedTableOptions = collapsedTableConfig.options;\r\n collapsedTables = collapsedTableOptions\r\n .filter((item) => {\r\n return Array.isArray(firstData[item.key]);\r\n })\r\n .map((item) => {\r\n const index = columns.findIndex((c) => c.key === item.key);\r\n if (index > -1) {\r\n columns.splice(index, 1);\r\n }\r\n const keys = item.headerKeys || [];\r\n if (!keys.includes(\"$actions\") && item.columnOptions && item.columnOptions[\"$actions\"]) {\r\n keys.push(\"$actions\");\r\n }\r\n return {\r\n key: item.key as string,\r\n columns: keys.map((k) => {\r\n const option = item.columnOptions[k];\r\n return {\r\n key: k,\r\n label: option?.label ?? k,\r\n width: option?.width ?? 60,\r\n render: option?.render,\r\n };\r\n }),\r\n };\r\n });\r\n }\r\n\r\n const showCollapsedTables = collapsedTables.length > 0;\r\n if (showCollapsedTables && !virtualizedOptions?.isVirtualized) {\r\n const collapsedHandlerPosition = collapsedTableConfig?.collapsedHandlerPosition || \"right\";\r\n if (collapsedHandlerPosition === \"right\") {\r\n columns.push({\r\n key: \"$collapsedHandler\",\r\n label: \"\",\r\n width: 60,\r\n });\r\n } else {\r\n columns = [\r\n {\r\n key: \"$collapsedHandler\",\r\n label: \"\",\r\n width: 60,\r\n },\r\n ...columns,\r\n ];\r\n }\r\n }\r\n\r\n return {\r\n columns,\r\n sortableColumnsDefaultValue,\r\n showCollapsedTables,\r\n collapsedTables,\r\n };\r\n }, [dataSource, columnOptions]);\r\n\r\n useEffect(() => {\r\n setSortableColumnsMap(sortableColumnsDefaultValue);\r\n }, [sortableColumnsDefaultValue]);\r\n\r\n useEffect(() => {\r\n setSortedData(dataSource);\r\n }, [dataSource]);\r\n\r\n if (asCard) {\r\n if (virtualizedOptions?.isVirtualized) {\r\n return (\r\n <VirtualizedCardUI\r\n className={className}\r\n rowKey={rowKey}\r\n sortedData={sortedData}\r\n columns={columns}\r\n cardOptions={cardOptions}\r\n onRowClick={onRowClick}\r\n autoScrollToTop={autoScrollToTop}\r\n emptyContent={emptyContent}\r\n isLoading={isLoading}\r\n loadingOptions={loadingOptions}\r\n loadingContent={loadingContent}\r\n virtualizedOptions={virtualizedOptions}\r\n columnSlot={columnSlot}\r\n />\r\n );\r\n } else {\r\n return (\r\n <CardUI\r\n className={className}\r\n rowKey={rowKey}\r\n sortedData={sortedData}\r\n columns={columns}\r\n cardOptions={cardOptions}\r\n onRowClick={onRowClick}\r\n autoScrollToTop={autoScrollToTop}\r\n emptyContent={emptyContent}\r\n columnSlot={columnSlot}\r\n showPagination={showPagination}\r\n pagination={pagination}\r\n nextuiPaginationProps={nextuiPaginationProps}\r\n />\r\n );\r\n }\r\n } else {\r\n if (virtualizedOptions?.isVirtualized) {\r\n return (\r\n <VirtualizedListUI\r\n className={className}\r\n rowKey={rowKey}\r\n sortedData={sortedData}\r\n dataSource={dataSource}\r\n columns={columns}\r\n columnOptions={columnOptions}\r\n sortableColumnsMap={sortableColumnsMap}\r\n sortingUIOptions={sortingUIOptions}\r\n setSortableColumnsMap={setSortableColumnsMap}\r\n setSortedData={setSortedData}\r\n onRowClick={onRowClick}\r\n emptyContent={emptyContent}\r\n isLoading={isLoading}\r\n loadingOptions={loadingOptions}\r\n loadingContent={loadingContent}\r\n virtualizedOptions={virtualizedOptions}\r\n />\r\n );\r\n } else {\r\n return (\r\n <TableUI\r\n className={className}\r\n classNames={classNames}\r\n isHeaderSticky={isHeaderSticky}\r\n sortedData={sortedData}\r\n dataSource={dataSource}\r\n columns={columns}\r\n columnOptions={columnOptions}\r\n sortableColumnsMap={sortableColumnsMap}\r\n sortingUIOptions={sortingUIOptions}\r\n setSortableColumnsMap={setSortableColumnsMap}\r\n setSortedData={setSortedData}\r\n isLoading={isLoading}\r\n loadingContent={loadingContent}\r\n loadingOptions={loadingOptions}\r\n emptyContent={emptyContent}\r\n rowCss={rowCss}\r\n onRowClick={onRowClick}\r\n showCollapsedTables={showCollapsedTables}\r\n collapsedTableConfig={collapsedTableConfig}\r\n collapsedTables={collapsedTables}\r\n rowKey={rowKey}\r\n isServerPaging={isServerPaging}\r\n showPagination={showPagination}\r\n pagination={pagination}\r\n nextuiPaginationProps={nextuiPaginationProps}\r\n autoScrollToTop={autoScrollToTop}\r\n columnSlot={columnSlot}\r\n />\r\n );\r\n }\r\n }\r\n};\r\n\r\nfunction renderFieldValue(v: any) {\r\n if (typeof v == \"string\" || typeof v == \"number\") {\r\n return v;\r\n }\r\n if (v == null) {\r\n return null;\r\n }\r\n return JSON.stringify(v);\r\n}\r\n\r\nfunction sortData<T>({\r\n sortKey,\r\n key,\r\n type,\r\n sortableColumnsMap,\r\n dataSource,\r\n}: {\r\n sortKey: string | undefined;\r\n key: string;\r\n type: \"asc\" | \"desc\" | \"none\";\r\n sortableColumnsMap: {\r\n [k: string]: \"asc\" | \"desc\" | \"none\";\r\n };\r\n dataSource: T[];\r\n}) {\r\n const sortableColumns: { [k: string]: \"asc\" | \"desc\" | \"none\" } = {};\r\n Object.keys(sortableColumnsMap).map((k) => {\r\n sortableColumns[k] = k === key ? type : \"none\";\r\n });\r\n let sortedData = dataSource;\r\n if (type !== \"none\") {\r\n const result = _.orderBy(\r\n dataSource,\r\n (o) => {\r\n const v = _.get(o, sortKey || key);\r\n if (v == null) {\r\n return type === \"desc\" ? \"\" : v;\r\n }\r\n if (typeof v === \"string\") {\r\n const _v = Number(v.replace(\"%\", \"\").replace(\"$\", \"\").replace(/,/g, \"\"));\r\n if (isNaN(_v)) {\r\n return v.toLowerCase();\r\n } else {\r\n return _v;\r\n }\r\n }\r\n return v;\r\n },\r\n type,\r\n );\r\n sortedData = result;\r\n }\r\n return {\r\n sortableColumns,\r\n sortedData,\r\n };\r\n}\r\n\r\nfunction SortingComponent<T>({\r\n sortingUIOptions,\r\n columnOptions,\r\n sortableColumnsMap,\r\n item,\r\n onSort,\r\n}: {\r\n sortingUIOptions: SortingUIOptions;\r\n columnOptions?: ColumnOptions<T>;\r\n sortableColumnsMap: { [k: string]: \"asc\" | \"desc\" | \"none\" };\r\n item: Column<T>;\r\n onSort: (e: { type: \"asc\" | \"desc\" | \"none\"; key: string; sortKey: string }) => void;\r\n}) {\r\n if (sortingUIOptions?.showDropdown) {\r\n return (\r\n <DropdownMenu>\r\n <DropdownMenuTrigger>\r\n <button className={cn(\"outline-none p-1\", sortingUIOptions?.dropdownTriggerBtnClassName)}>\r\n {sortableColumnsMap[item.key] === \"desc\" && <ChevronDown size={14} />}\r\n {sortableColumnsMap[item.key] === \"asc\" && <ChevronUp size={14} />}\r\n {sortableColumnsMap[item.key] === \"none\" && <ChevronsUpDown size={14} />}\r\n </button>\r\n </DropdownMenuTrigger>\r\n <DropdownMenuContent className={cn(\"p-2 space-y-1 min-w-[4rem]\", sortingUIOptions?.dropdownContentClassName)} collisionPadding={10} sideOffset={5}>\r\n <DropdownMenuItem\r\n className={cn(\"text-xs font-bold cursor-pointer\", sortingUIOptions?.dropdownItemClassName)}\r\n onClick={() => {\r\n onSort({\r\n type: \"asc\",\r\n key: item.key,\r\n sortKey: columnOptions?.[item.key]?.sortKey,\r\n });\r\n }}\r\n >\r\n {sortingUIOptions?.titles?.asc || \"ASC\"}\r\n </DropdownMenuItem>\r\n <DropdownMenuItem\r\n className={cn(\"text-xs font-bold cursor-pointer\", sortingUIOptions?.dropdownItemClassName)}\r\n onClick={() => {\r\n onSort({\r\n type: \"desc\",\r\n key: item.key,\r\n sortKey: columnOptions?.[item.key]?.sortKey,\r\n });\r\n }}\r\n >\r\n {sortingUIOptions?.titles?.desc || \"DESC\"}\r\n </DropdownMenuItem>\r\n <DropdownMenuItem\r\n className={cn(\"text-xs font-bold cursor-pointer\", sortingUIOptions?.dropdownItemClassName)}\r\n onClick={() => {\r\n onSort({\r\n type: \"none\",\r\n key: item.key,\r\n sortKey: columnOptions?.[item.key]?.sortKey,\r\n });\r\n }}\r\n >\r\n {sortingUIOptions?.titles?.none || \"NONE\"}\r\n </DropdownMenuItem>\r\n </DropdownMenuContent>\r\n </DropdownMenu>\r\n );\r\n }\r\n\r\n return (\r\n <button className={cn(\"outline-none p-1\", sortingUIOptions?.dropdownTriggerBtnClassName)}>\r\n {sortableColumnsMap[item.key] === \"none\" && (\r\n <ChevronsUpDown\r\n size={14}\r\n onClick={() => {\r\n onSort({\r\n type: \"desc\",\r\n key: item.key,\r\n sortKey: columnOptions?.[item.key]?.sortKey,\r\n });\r\n }}\r\n />\r\n )}\r\n {sortableColumnsMap[item.key] === \"desc\" && (\r\n <ChevronDown\r\n size={14}\r\n onClick={() => {\r\n onSort({\r\n type: \"asc\",\r\n key: item.key,\r\n sortKey: columnOptions?.[item.key]?.sortKey,\r\n });\r\n }}\r\n />\r\n )}\r\n {sortableColumnsMap[item.key] === \"asc\" && (\r\n <ChevronUp\r\n size={14}\r\n onClick={() => {\r\n onSort({\r\n type: \"none\",\r\n key: item.key,\r\n sortKey: columnOptions?.[item.key]?.sortKey,\r\n });\r\n }}\r\n />\r\n )}\r\n </button>\r\n );\r\n}\r\n\r\nconst CardUI = observer(\r\n <T,>({\r\n className,\r\n sortedData,\r\n columns,\r\n rowKey,\r\n cardOptions,\r\n onRowClick,\r\n emptyContent,\r\n columnSlot,\r\n isServerPaging,\r\n showPagination,\r\n pagination,\r\n nextuiPaginationProps,\r\n autoScrollToTop,\r\n }: {\r\n className?: string;\r\n sortedData: T[];\r\n columns: Column<T>[];\r\n rowKey?: string;\r\n cardOptions?: CardOptions;\r\n onRowClick?: (item: T) => void;\r\n autoScrollToTop?: boolean;\r\n emptyContent?: React.ReactNode;\r\n columnSlot?: ((props: { row: T }) => React.ReactNode) | React.ReactNode;\r\n isServerPaging?: boolean;\r\n showPagination: boolean;\r\n pagination?: PaginationState;\r\n nextuiPaginationProps?: PaginationProps | {};\r\n }) => {\r\n const cardBoxRef = useRef<HTMLDivElement>(null);\r\n pagination = pagination\r\n ? pagination\r\n : useRef(\r\n new PaginationState({\r\n page: 1,\r\n limit: 10,\r\n }),\r\n ).current;\r\n\r\n useEffect(() => {\r\n if (!isServerPaging && pagination) {\r\n pagination.setData({\r\n total: sortedData.length,\r\n });\r\n }\r\n }, [sortedData]);\r\n\r\n const data = isServerPaging || !showPagination ? sortedData : sortedData.slice(pagination.offset, pagination.offset + pagination.limit);\r\n\r\n return (\r\n <div className={className} ref={cardBoxRef}>\r\n {sortedData.length > 0 ? (\r\n <>\r\n <div className={cardOptions?.cardContainerClassName}>\r\n {data.map((item, index) => {\r\n return (\r\n <Card\r\n key={rowKey ? item[rowKey] || index : index}\r\n className={cn(\"mb-2 w-full shadow-sm p-4 rounded-lg\", cardOptions?.cardClassName)}\r\n isPressable={!!onRowClick}\r\n onPress={() => {\r\n onRowClick?.(item);\r\n }}\r\n >\r\n {columns.map((column, i) => {\r\n return (\r\n <div className=\"w-full\" key={column.key}>\r\n <div className={cn(\"w-full\", cardOptions?.itemClassName)}>\r\n <div className={cn(\"font-meidum text-xs text-foreground-400\", cardOptions?.labelClassName)}>{column.label}</div>\r\n <div className={cn(\"text-xs\", cardOptions?.valueClassName)}>{column.render ? column.render(item) : renderFieldValue(item[column.key])}</div>\r\n </div>\r\n {cardOptions?.showDivider && i !== columns.length - 1 && <Divider className={cn(\"my-2\", cardOptions?.dividerClassName)} />}\r\n </div>\r\n );\r\n })}\r\n {typeof columnSlot === \"function\" ? columnSlot({ row: item }) : columnSlot}\r\n </Card>\r\n );\r\n })}\r\n </div>\r\n {showPagination && pagination.total > pagination.limit && (\r\n <div className=\"flex justify-center\">\r\n <NextuiPagination\r\n className=\"mt-2\"\r\n showControls\r\n showShadow\r\n size=\"sm\"\r\n radius=\"sm\"\r\n color=\"primary\"\r\n initialPage={1}\r\n total={Math.ceil(pagination.total / pagination.limit)}\r\n page={pagination.page}\r\n onChange={(currentPage) => {\r\n pagination.setData({\r\n page: currentPage,\r\n });\r\n if (autoScrollToTop && cardBoxRef.current) {\r\n scrollIntoTop(cardBoxRef.current);\r\n }\r\n }}\r\n {...nextuiPaginationProps}\r\n />\r\n </div>\r\n )}\r\n </>\r\n ) : (\r\n (emptyContent ?? <DefaultEmptyContent />)\r\n )}\r\n </div>\r\n );\r\n },\r\n);\r\n\r\nfunction VirtualizedCardUI<T>({\r\n className,\r\n sortedData,\r\n columns,\r\n rowKey,\r\n cardOptions,\r\n onRowClick,\r\n emptyContent,\r\n isLoading,\r\n loadingOptions,\r\n loadingContent,\r\n virtualizedOptions,\r\n columnSlot,\r\n}: {\r\n className?: string;\r\n sortedData: T[];\r\n columns: Column<T>[];\r\n rowKey?: string;\r\n cardOptions?: CardOptions;\r\n onRowClick?: (item: T) => void;\r\n autoScrollToTop?: boolean;\r\n emptyContent?: React.ReactNode;\r\n isLoading?: boolean;\r\n loadingOptions?: LoadingOptions;\r\n loadingContent?: React.ReactNode;\r\n virtualizedOptions?: VirtualizedOptions;\r\n columnSlot?: ((props: { row: T }) => React.ReactNode) | React.ReactNode;\r\n}) {\r\n const colSpan = virtualizedOptions?.cardOptions?.colSpan || cardOptions?.virtualizedOptions?.colSpan || 1;\r\n const fetchedCountRef = useRef(-1);\r\n const elements = useMemo(() => {\r\n const MyCard = ({ item }) => {\r\n return (\r\n <Card\r\n className={cn(\"mb-2 w-full shadow-sm p-4 rounded-lg\", cardOptions?.cardClassName)}\r\n isPressable={!!onRowClick}\r\n onPress={() => {\r\n onRowClick?.(item);\r\n }}\r\n >\r\n {columns.map((column, i) => {\r\n return (\r\n <div className=\"w-full\" key={column.key}>\r\n <div className={cn(\"w-full\", cardOptions?.itemClassName)}>\r\n <div className={cn(\"font-meidum text-xs text-foreground-400\", cardOptions?.labelClassName)}>{column.label}</div>\r\n <div className={cn(\"text-xs\", cardOptions?.valueClassName)}>{column.render ? column.render(item) : renderFieldValue(item[column.key])}</div>\r\n </div>\r\n {cardOptions?.showDivider && i !== columns.length - 1 && <Divider className={cn(\"my-2\", cardOptions?.dividerClassName)} />}\r\n </div>\r\n );\r\n })}\r\n {typeof columnSlot === \"function\" ? columnSlot({ row: item }) : columnSlot}\r\n </Card>\r\n );\r\n };\r\n if (colSpan === 1) {\r\n return sortedData.map((item, index) => {\r\n return <MyCard key={rowKey ? item[rowKey] || index : index} item={item} />;\r\n });\r\n } else {\r\n const groupData = groupByColSpan(sortedData, colSpan);\r\n return groupData.map((group, gIndex) => {\r\n return (\r\n <div\r\n className={cn(\"flex items-center justify-between space-x-1\", virtualizedOptions?.cardOptions?.cardContainerClassName || cardOptions?.virtualizedOptions?.cardContainerClassName)}\r\n key={gIndex}\r\n >\r\n {group.map((item, index) => {\r\n return <MyCard key={rowKey ? item[rowKey] || index : index} item={item} />;\r\n })}\r\n </div>\r\n );\r\n });\r\n }\r\n }, [sortedData]);\r\n return (\r\n <div className={className}>\r\n {sortedData.length > 0 ? (\r\n <VList\r\n style={{ height: virtualizedOptions?.vListHeight || 400 }}\r\n onRangeChange={async (_, endIndex) => {\r\n const count = sortedData.length / colSpan;\r\n if (endIndex + 1 >= count && fetchedCountRef.current < count) {\r\n fetchedCountRef.current = count;\r\n if (virtualizedOptions?.fetchData) {\r\n await virtualizedOptions.fetchData();\r\n }\r\n }\r\n }}\r\n >\r\n {elements}\r\n {isLoading ? loadingContent || DefaultLoading({ loadingOptions }) : null}\r\n </VList>\r\n ) : (\r\n (emptyContent ?? <DefaultEmptyContent />)\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nfunction VirtualizedListUI<T>({\r\n className,\r\n sortedData,\r\n dataSource,\r\n columns,\r\n columnOptions,\r\n sortableColumnsMap,\r\n sortingUIOptions,\r\n setSortableColumnsMap,\r\n setSortedData,\r\n rowKey,\r\n onRowClick,\r\n rowCss,\r\n emptyContent,\r\n isLoading,\r\n loadingOptions,\r\n loadingContent,\r\n virtualizedOptions,\r\n}: {\r\n className: string;\r\n sortedData: T[];\r\n dataSource: T[];\r\n columns: Column<T>[];\r\n columnOptions: ColumnOptions<T>;\r\n sortableColumnsMap: { [k: string]: \"asc\" | \"desc\" | \"none\" };\r\n sortingUIOptions: SortingUIOptions;\r\n setSortableColumnsMap: (\r\n value: React.SetStateAction<{\r\n [k: string]: \"asc\" | \"desc\" | \"none\";\r\n }>,\r\n ) => void;\r\n setSortedData: (value: React.SetStateAction<T[]>) => void;\r\n rowKey?: string;\r\n onRowClick?: (item: T) => void;\r\n rowCss?: string | ((item: T) => string | undefined);\r\n emptyContent?: React.ReactNode;\r\n isLoading?: boolean;\r\n loadingOptions?: LoadingOptions;\r\n loadingContent?: React.ReactNode;\r\n virtualizedOptions?: VirtualizedOptions;\r\n}) {\r\n const fetchedCountRef = useRef(-1);\r\n const elements = useMemo(\r\n () =>\r\n sortedData.map((item, index) => {\r\n return (\r\n <div\r\n key={rowKey ? item[rowKey] || index : index}\r\n className={cn(\"w-full flex items-center space-x-1\", virtualizedOptions?.classNames?.row, typeof rowCss === \"function\" ? rowCss(item) : rowCss)}\r\n onClick={() => {\r\n onRowClick?.(item);\r\n }}\r\n >\r\n {columns.map((column) => {\r\n return (\r\n <div\r\n key={column.key}\r\n className={cn(\"w-full flex-grow py-2 px-4 text-xs whitespace-nowrap overflow-auto\", virtualizedOptions?.classNames?.rowCell)}\r\n style={{\r\n minWidth: column.width,\r\n }}\r\n >\r\n {column.render ? column.render(item) : renderFieldValue(item[column.key])}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n }),\r\n [sortedData],\r\n );\r\n\r\n return (\r\n <div className={cn(\"w-full overflow-x-auto\", className)}>\r\n <div className=\"inline-block min-w-fit w-full\">\r\n <div className={cn(\"w-full flex items-center rounded-lg bg-default-100 space-x-1 mb-2\", virtualizedOptions?.classNames?.header)}>\r\n {columns.map((column) => {\r\n return (\r\n <div\r\n key={column.key}\r\n className={cn(\"w-full flex-grow py-2 px-4 flex items-center text-xs font-semibold whitespace-nowrap overflow-auto\", virtualizedOptions?.classNames?.headerCell)}\r\n style={{\r\n minWidth: column.width,\r\n }}\r\n >\r\n <span>{column.label}</span>\r\n {!!sortableColumnsMap[column.key] && (\r\n <SortingComponent\r\n sortingUIOptions={sortingUIOptions}\r\n columnOptions={columnOptions}\r\n sortableColumnsMap={sortableColumnsMap}\r\n item={column}\r\n onSort={({ type, key, sortKey }) => {\r\n const { sortableColumns, sortedData } = sortData({\r\n type,\r\n key,\r\n sortKey,\r\n sortableColumnsMap,\r\n dataSource,\r\n });\r\n setSortableColumnsMap(sortableColumns);\r\n setSortedData(sortedData);\r\n }}\r\n />\r\n )}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n {sortedData.length > 0 ? (\r\n <VList\r\n style={{ height: virtualizedOptions?.vListHeight || 200 }}\r\n onRangeChange={async (_, endIndex) => {\r\n const count = sortedData.length;\r\n if (endIndex + 1 >= count && fetchedCountRef.current < count) {\r\n fetchedCountRef.current = count;\r\n if (virtualizedOptions?.fetchData) {\r\n await virtualizedOptions.fetchData();\r\n }\r\n }\r\n }}\r\n >\r\n {elements}\r\n {isLoading ? loadingContent || DefaultLoading({ loadingOptions }) : null}\r\n </VList>\r\n ) : (\r\n (emptyContent ?? <DefaultEmptyContent />)\r\n )}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nconst TableUI = observer(\r\n <T,>({\r\n className,\r\n classNames = {},\r\n isHeaderSticky,\r\n sortedData,\r\n dataSource,\r\n columns,\r\n columnOptions,\r\n sortableColumnsMap,\r\n sortingUIOptions,\r\n setSortableColumnsMap,\r\n setSortedData,\r\n isLoading,\r\n loadingContent,\r\n loadingOptions,\r\n emptyContent,\r\n rowCss,\r\n onRowClick,\r\n showCollapsedTables,\r\n collapsedTableConfig,\r\n collapsedTables,\r\n rowKey,\r\n isServerPaging,\r\n showPagination,\r\n pagination,\r\n nextuiPaginationProps = {},\r\n autoScrollToTop,\r\n columnSlot,\r\n }: {\r\n className: string;\r\n classNames?: TableClassNames;\r\n isHeaderSticky: boolean;\r\n sortedData: T[];\r\n dataSource: T[];\r\n columns: Column<T>[];\r\n columnOptions?: ColumnOptions<T>;\r\n sortableColumnsMap: { [k: string]: \"asc\" | \"desc\" | \"none\" };\r\n sortingUIOptions: SortingUIOptions;\r\n setSortableColumnsMap: (value: React.SetStateAction<{ [k: string]: \"asc\" | \"desc\" | \"none\" }>) => void;\r\n setSortedData: (value: React.SetStateAction<T[]>) => void;\r\n isLoading: boolean;\r\n loadingContent?: React.ReactNode;\r\n loadingOptions?: LoadingOptions;\r\n emptyContent?: React.ReactNode;\r\n rowCss?: string | ((item: T) => string | undefined);\r\n onRowClick?: (item: T) => void;\r\n showCollapsedTables: boolean;\r\n collapsedTableConfig?: CollapsedTableConfig<T>;\r\n collapsedTables: CollapsedTable<any>[];\r\n rowKey?: string;\r\n isServerPaging?: boolean;\r\n showPagination: boolean;\r\n pagination?: PaginationState;\r\n nextuiPaginationProps?: PaginationProps | {};\r\n autoScrollToTop: boolean;\r\n columnSlot?: ((props: { row: T }) => React.ReactNode) | React.ReactNode;\r\n }) => {\r\n const tableBoxRef = useRef<HTMLDivElement>(null);\r\n pagination = pagination\r\n ? pagination\r\n : useRef(\r\n new PaginationState({\r\n page: 1,\r\n limit: 10,\r\n }),\r\n ).current;\r\n\r\n useEffect(() => {\r\n if (!isServerPaging) {\r\n pagination.setData({\r\n total: dataSource.length,\r\n });\r\n }\r\n }, [dataSource]);\r\n\r\n const data = isServerPaging || !showPagination ? sortedData : sortedData.slice(pagination.offset, pagination.offset + pagination.limit);\r\n\r\n return (\r\n <>\r\n <div className={cn(\"relative w-full\", className)} ref={tableBoxRef}>\r\n <table className={cn(\"w-full h-auto table-auto\", classNames.table)}>\r\n <thead className={cn(classNames.thead, { \"sticky top-0 z-30 [&>tr]:first:shadow-small [&>tr]:first:rounded-lg\": isHeaderSticky })}>\r\n <tr className={classNames.tr}>\r\n {columns.map((item) => (\r\n <th\r\n key={item.key}\r\n className={cn(\"px-3 h-10 text-xs font-semibold whitespace-nowrap bg-default-100 first:rounded-l-lg last:rounded-r-lg outline-none\", classNames.th)}\r\n style={{\r\n minWidth: item.width,\r\n }}\r\n >\r\n <div className=\"flex items-center\">\r\n <span>{item.label}</span>\r\n {!!sortableColumnsMap[item.key] && (\r\n <SortingComponent\r\n sortingUIOptions={sortingUIOptions}\r\n columnOptions={columnOptions}\r\n sortableColumnsMap={sortableColumnsMap}\r\n item={item}\r\n onSort={({ type, key, sortKey }) => {\r\n const { sortableColumns, sortedData } = sortData({\r\n type,\r\n key,\r\n sortKey,\r\n sortableColumnsMap,\r\n dataSource,\r\n });\r\n setSortableColumnsMap(sortableColumns);\r\n setSortedData(sortedData);\r\n }}\r\n />\r\n )}\r\n </div>\r\n </th>\r\n ))}\r\n </tr>\r\n <tr aria-hidden=\"true\" className=\"w-px h-px block ml-[0.25rem] mt-[0.25rem]\"></tr>\r\n </thead>\r\n {isLoading ? (\r\n <tbody className={classNames.tbody}>\r\n <tr className={classNames.tr}>\r\n <td className={classNames.td} colSpan={columns.length}>\r\n {loadingContent || DefaultLoading({ loadingOptions })}\r\n </td>\r\n </tr>\r\n </tbody>\r\n ) : data.length > 0 ? (\r\n <tbody className={classNames.tbody}>\r\n {showCollapsedTables\r\n ? data.map((item) => {\r\n return (\r\n <CollapseBodyRow\r\n classNames={classNames}\r\n item={item}\r\n columns={columns}\r\n rowCss={rowCss}\r\n onRowClick={onRowClick}\r\n collapsedTableConfig={collapsedTableConfig}\r\n collapsedTables={collapsedTables}\r\n />\r\n );\r\n })\r\n : data.map((item, index) => {\r\n return (\r\n <>\r\n <tr\r\n key={rowKey ? item[rowKey] || index : index}\r\n className={cn(classNames.tr, typeof rowCss === \"function\" ? rowCss(item) : rowCss)}\r\n onClick={() => {\r\n onRowClick?.(item);\r\n }}\r\n >\r\n {columns.map((column) => {\r\n return (\r\n <td\r\n key={column.key}\r\n className={cn(\"py-2 px-3 text-xs\", classNames.td)}\r\n style={{\r\n minWidth: column.width,\r\n }}\r\n >\r\n {column.render ? column.render(item) : renderFieldValue(item[column.key])}\r\n </td>\r\n );\r\n })}\r\n </tr>\r\n {columnSlot && (\r\n <tr>\r\n <td colSpan={columns.length}>{typeof columnSlot === \"function\" ? columnSlot({ row: item }) : columnSlot}</td>\r\n </tr>\r\n )}\r\n </>\r\n );\r\n })}\r\n </tbody>\r\n ) : (\r\n <tbody className={classNames.tbody}>\r\n <tr className={classNames.tr}>\r\n <td className={classNames.td} colSpan={columns.length}>\r\n {emptyContent ?? <DefaultEmptyContent />}\r\n </td>\r\n </tr>\r\n </tbody>\r\n )}\r\n </table>\r\n </div>\r\n {showPagination && pagination.total > pagination.limit && (\r\n <div className=\"flex justify-center\">\r\n <NextuiPagination\r\n className=\"mt-2\"\r\n showControls\r\n showShadow\r\n size=\"sm\"\r\n radius=\"sm\"\r\n color=\"primary\"\r\n initialPage={1}\r\n total={Math.ceil(pagination.total / pagination.limit)}\r\n page={pagination.page}\r\n onChange={(currentPage) => {\r\n pagination.setData({\r\n page: currentPage,\r\n });\r\n if (autoScrollToTop && tableBoxRef.current) {\r\n scrollIntoTop(tableBoxRef.current);\r\n }\r\n }}\r\n {...nextuiPaginationProps}\r\n />\r\n </div>\r\n )}\r\n </>\r\n );\r\n },\r\n);\r\n\r\nfunction DefaultLoading({ loadingOptions }: { loadingOptions?: LoadingOptions }) {\r\n const type = loadingOptions?.type || \"skeleton\";\r\n const skeletonOptions = loadingOptions?.skeleton;\r\n const spinnerOptions = loadingOptions?.spinner;\r\n const spinnerProps = spinnerOptions?.spinnerProps || {};\r\n\r\n if (type === \"skeleton\") {\r\n return <SkeletonBox className={cn(\"mt-2 flex-col\", skeletonOptions?.boxClassName)} skClassName={cn(\"h-[30px] rounded\", skeletonOptions?.skeletonClassName)} line={skeletonOptions?.line || 5} />;\r\n }\r\n\r\n return (\r\n <div className={cn(\"w-full h-[60px] flex justify-center items-center\", spinnerOptions?.boxClassName)}>\r\n <Spinner size=\"sm\" color=\"primary\" {...spinnerProps} />\r\n <div className={cn(\"ml-2 text-[#64748B] text-sm\", spinnerOptions?.textClassName)}>{spinnerOptions?.text || \"Loading...\"}</div>\r\n </div>\r\n );\r\n}\r\n\r\nfunction DefaultEmptyContent() {\r\n return <div className=\"w-full h-[60px] flex justify-center items-center text-xs text-[#64748B] dark:text-[#cacaca]\">No Data</div>;\r\n}\r\n\r\nfunction scrollIntoTop(target: HTMLElement) {\r\n if (target) {\r\n const { top } = target.getBoundingClientRect();\r\n window.scrollTo({\r\n top: top + window.scrollY - 100,\r\n behavior: \"smooth\",\r\n });\r\n }\r\n}\r\n\r\nfunction CollapseBodyRow<T>({\r\n classNames,\r\n item,\r\n columns,\r\n rowCss,\r\n onRowClick,\r\n collapsedTableConfig,\r\n collapsedTables,\r\n}: {\r\n classNames?: TableClassNames;\r\n item: T;\r\n columns: Column<T>[];\r\n rowCss?: string | ((item: T) => string | undefined);\r\n onRowClick?: (item: T) => void;\r\n collapsedTableConfig?: {\r\n classNames?: TableClassNames;\r\n collapsedHandlerPosition?: \"left\" | \"right\";\r\n collapsedHandlerBoxCss?: string;\r\n openedIcon?: React.ReactNode;\r\n closedIcon?: React.ReactNode;\r\n onRowClick?: (item: any) => void;\r\n rowCss?: string | ((item: any) => string | undefined);\r\n emptyContent?: React.ReactNode;\r\n };\r\n collapsedTables: CollapsedTable<any>[];\r\n}) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const collapsedHandlerPosition = collapsedTableConfig?.collapsedHandlerPosition || \"right\";\r\n\r\n const { OpenedIcon, ClosedIcon } = useMemo(() => {\r\n const defaultOpenedIcon = <ChevronDown size={18} />;\r\n const defaultClosedIcon = collapsedHandlerPosition === \"left\" ? <ChevronRight size={18} /> : <ChevronLeft size={18} />;\r\n return {\r\n OpenedIcon: collapsedTableConfig?.openedIcon || defaultOpenedIcon,\r\n ClosedIcon: collapsedTableConfig?.closedIcon || defaultClosedIcon,\r\n };\r\n }, []);\r\n\r\n return (\r\n <>\r\n <tr\r\n className={cn(\"text-xs cursor-pointer\", classNames?.tr, typeof rowCss === \"function\" ? rowCss(item) : rowCss)}\r\n onClick={(e: any) => {\r\n onRowClick?.(item);\r\n }}\r\n >\r\n {columns.map((column) => {\r\n if (column.key === \"$collapsedHandler\") {\r\n return (\r\n <td\r\n className={classNames?.td}\r\n style={{\r\n minWidth: column.width,\r\n }}\r\n >\r\n <div\r\n className={cn(\"w-6 h-6 flex items-center justify-center rounded-sm hover:bg-[#f3f3f4] dark:hover:bg-[#1e1e1e]\", collapsedTableConfig?.collapsedHandlerBoxCss)}\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n setIsOpen((v) => !v);\r\n }}\r\n >\r\n {isOpen ? OpenedIcon : ClosedIcon}\r\n </div>\r\n </td>\r\n );\r\n }\r\n return (\r\n <td\r\n key={column.key}\r\n className={cn(\"py-2 px-3 text-xs\", classNames?.td)}\r\n style={{\r\n minWidth: column.width,\r\n }}\r\n >\r\n {column.render ? column.render(item) : renderFieldValue(item[column.key])}\r\n </td>\r\n );\r\n })}\r\n </tr>\r\n <tr className={cn(classNames?.tr, isOpen ? \"table-row\" : \"hidden\")}>\r\n <td colSpan={columns.length} className={cn(\"py-2 px-3 text-xs\", classNames?.td)}>\r\n {collapsedTables.map((ex) => {\r\n const exColumns = ex.columns;\r\n const exData = item[ex.key] || [];\r\n return (\r\n <table className={cn(\"w-full h-auto table-auto\", collapsedTableConfig?.classNames?.table)} key={ex.key}>\r\n <thead className={collapsedTableConfig?.classNames?.thead}>\r\n <tr className={collapsedTableConfig?.classNames?.tr}>\r\n {exColumns?.map((exC) => {\r\n return (\r\n <th\r\n key={exC.key}\r\n className={cn(\"px-3 h-10 text-xs text-left font-semibold bg-default-100 first:rounded-l-lg last:rounded-r-lg outline-none\", collapsedTableConfig?.classNames?.th)}\r\n style={{\r\n minWidth: exC.width,\r\n }}\r\n >\r\n {exC.label}\r\n </th>\r\n );\r\n })}\r\n </tr>\r\n <tr aria-hidden=\"true\" className=\"w-px h-px block ml-[0.25rem] mt-[0.25rem]\"></tr>\r\n </thead>\r\n {exData.length > 0 ? (\r\n <tbody className={collapsedTableConfig?.classNames?.tbody}>\r\n {exData.map((exItem) => (\r\n <tr\r\n key={exItem.key}\r\n className={cn(\r\n \"text-xs\",\r\n collapsedTableConfig?.classNames?.tr,\r\n typeof collapsedTableConfig?.rowCss === \"function\"\r\n ? collapsedTableConfig?.rowCss({\r\n ...exItem,\r\n $parent: item,\r\n })\r\n : collapsedTableConfig?.rowCss,\r\n )}\r\n onClick={(e: any) => {\r\n collapsedTableConfig?.onRowClick?.({\r\n ...exItem,\r\n $parent: item,\r\n });\r\n }}\r\n >\r\n {exColumns?.map((exC) => {\r\n return (\r\n <td\r\n key={exC.key}\r\n className={cn(\"py-2 px-3 text-xs\", collapsedTableConfig?.classNames?.td)}\r\n style={{\r\n minWidth: exC.width,\r\n }}\r\n >\r\n {exC.render\r\n ? exC.render({\r\n ...exItem,\r\n $parent: item,\r\n })\r\n : renderFieldValue(exItem[exC.key])}\r\n </td>\r\n );\r\n })}\r\n </tr>\r\n ))}\r\n </tbody>\r\n ) : (\r\n <tbody className={collapsedTableConfig?.classNames?.tbody}>\r\n <tr className={collapsedTableConfig?.classNames?.tr}>\r\n <td className={collapsedTableConfig?.classNames?.td} colSpan={columns.length}>\r\n {collapsedTableConfig?.emptyContent ?? <DefaultEmptyContent />}\r\n </td>\r\n </tr>\r\n </tbody>\r\n )}\r\n </table>\r\n );\r\n })}\r\n </td>\r\n </tr>\r\n </>\r\n );\r\n}\r\n\r\nfunction groupByColSpan(arr: any[], colSpan: number) {\r\n const result = [];\r\n for (let i = 0; i < arr.length; i += colSpan) {\r\n result.push(arr.slice(i, i + colSpan));\r\n }\r\n return result;\r\n}\r\n","\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\r\nimport { Check, ChevronRight, Circle } from \"lucide-react\"\r\n\r\nimport { cn } from \"../../lib/utils\";\r\n\r\nconst DropdownMenu = DropdownMenuPrimitive.Root\r\n\r\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\r\n\r\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\r\n\r\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal\r\n\r\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\r\n\r\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\r\n\r\nconst DropdownMenuArrow = DropdownMenuPrimitive.Arrow\r\n\r\nconst DropdownMenuSubTrigger = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\r\n inset?: boolean\r\n }\r\n>(({ className, inset, children, ...props }, ref) => (\r\n <DropdownMenuPrimitive.SubTrigger\r\n ref={ref}\r\n className={cn(\r\n \"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent\",\r\n inset && \"pl-8\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <ChevronRight className=\"ml-auto h-4 w-4\" />\r\n </DropdownMenuPrimitive.SubTrigger>\r\n))\r\nDropdownMenuSubTrigger.displayName =\r\n DropdownMenuPrimitive.SubTrigger.displayName\r\n\r\nconst DropdownMenuSubContent = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\r\n>(({ className, ...props }, ref) => (\r\n <DropdownMenuPrimitive.SubContent\r\n ref={ref}\r\n className={cn(\r\n \"z-50 min-w-[8rem] overflow-hidden rounded-md bg-white dark:bg-[#18181B] border dark:border-none p-1 text-popover-foreground shadow-md animate-in data-[side=bottom]:slide-in-from-top-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 data-[side=top]:slide-in-from-bottom-1\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nDropdownMenuSubContent.displayName =\r\n DropdownMenuPrimitive.SubContent.displayName\r\n\r\nconst DropdownMenuContent = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\r\n>(({ className, sideOffset = 4, ...props }, ref) => (\r\n <DropdownMenuPrimitive.Portal>\r\n <DropdownMenuPrimitive.Content\r\n ref={ref}\r\n sideOffset={sideOffset}\r\n className={cn(\r\n \"z-50 min-w-[8rem] overflow-hidden rounded-lg bg-white dark:bg-[#18181B] border dark:border-[#3e3e3e] p-1 text-popover-foreground shadow-md animate-in data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </DropdownMenuPrimitive.Portal>\r\n))\r\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\r\n\r\nconst DropdownMenuItem = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\r\n inset?: boolean\r\n }\r\n>(({ className, inset, ...props }, ref) => (\r\n <DropdownMenuPrimitive.Item\r\n ref={ref}\r\n className={cn(\r\n \"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\r\n inset && \"pl-8\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName\r\n\r\nconst DropdownMenuCheckboxItem = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\r\n>(({ className, children, checked, ...props }, ref) => (\r\n <DropdownMenuPrimitive.CheckboxItem\r\n ref={ref}\r\n className={cn(\r\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\r\n className\r\n )}\r\n checked={checked}\r\n {...props}\r\n >\r\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\r\n <DropdownMenuPrimitive.ItemIndicator>\r\n <Check className=\"h-4 w-4\" />\r\n </DropdownMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </DropdownMenuPrimitive.CheckboxItem>\r\n))\r\nDropdownMenuCheckboxItem.displayName =\r\n DropdownMenuPrimitive.CheckboxItem.displayName\r\n\r\nconst DropdownMenuRadioItem = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\r\n>(({ className, children, ...props }, ref) => (\r\n <DropdownMenuPrimitive.RadioItem\r\n ref={ref}\r\n className={cn(\r\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\r\n <DropdownMenuPrimitive.ItemIndicator>\r\n <Circle className=\"h-2 w-2 fill-current\" />\r\n </DropdownMenuPrimitive.ItemIndicator>\r\n </span>\r\n {children}\r\n </DropdownMenuPrimitive.RadioItem>\r\n))\r\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\r\n\r\nconst DropdownMenuLabel = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\r\n inset?: boolean\r\n }\r\n>(({ className, inset, ...props }, ref) => (\r\n <DropdownMenuPrimitive.Label\r\n ref={ref}\r\n className={cn(\r\n \"px-2 py-1.5 text-sm font-semibold\",\r\n inset && \"pl-8\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\r\n\r\nconst DropdownMenuSeparator = React.forwardRef<\r\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\r\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\r\n>(({ className, ...props }, ref) => (\r\n <DropdownMenuPrimitive.Separator\r\n ref={ref}\r\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\r\n {...props}\r\n />\r\n))\r\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\r\n\r\nconst DropdownMenuShortcut = ({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLSpanElement>) => {\r\n return (\r\n <span\r\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\"\r\n\r\nexport {\r\n DropdownMenu,\r\n DropdownMenuTrigger,\r\n DropdownMenuContent,\r\n DropdownMenuItem,\r\n DropdownMenuCheckboxItem,\r\n DropdownMenuRadioItem,\r\n DropdownMenuLabel,\r\n DropdownMenuSeparator,\r\n DropdownMenuShortcut,\r\n DropdownMenuGroup,\r\n DropdownMenuPortal,\r\n DropdownMenuSub,\r\n DropdownMenuSubContent,\r\n DropdownMenuSubTrigger,\r\n DropdownMenuRadioGroup,\r\n DropdownMenuArrow,\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../lib/lodash.ts"],"names":[],"mappings":";AAAA,SAAS,UAAU,UAAU,MAAM,aAAa,QAAQ,OAAO,OAAO,WAAW,WAAW,SAAS,KAAK,KAAK,QAAQ,OAAO,SAAS,UAAU,SAAS,KAAK,WAAW;AAEnK,IAAM,IAAI;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF","sourcesContent":["import { throttle, debounce, each, flattenDeep, omitBy, isNil, keyBy, mergeWith, cloneDeep, groupBy, get, set, remove, merge, isEqual, uniqWith, orderBy, map, zip } from \"lodash-es\";\n\nexport const _ = {\n throttle,\n debounce,\n each,\n flattenDeep,\n omitBy,\n isNil,\n keyBy,\n mergeWith,\n cloneDeep,\n groupBy,\n get,\n set,\n remove,\n merge,\n isEqual,\n uniqWith,\n orderBy,\n map,\n zip,\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../lib/lodash.ts"],"names":[],"mappings":";AAAA,SAAS,UAAU,UAAU,MAAM,aAAa,QAAQ,OAAO,OAAO,WAAW,WAAW,SAAS,KAAK,KAAK,QAAQ,OAAO,SAAS,UAAU,SAAS,KAAK,WAAW;AAEnK,IAAM,IAAI;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF","sourcesContent":["import { throttle, debounce, each, flattenDeep, omitBy, isNil, keyBy, mergeWith, cloneDeep, groupBy, get, set, remove, merge, isEqual, uniqWith, orderBy, map, zip } from \"lodash-es\";\r\n\r\nexport const _ = {\r\n throttle,\r\n debounce,\r\n each,\r\n flattenDeep,\r\n omitBy,\r\n isNil,\r\n keyBy,\r\n mergeWith,\r\n cloneDeep,\r\n groupBy,\r\n get,\r\n set,\r\n remove,\r\n merge,\r\n isEqual,\r\n uniqWith,\r\n orderBy,\r\n map,\r\n zip,\r\n};\r\n"]}
|
|
@@ -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\";\r\nimport toast, { Toaster } from \"react-hot-toast\";\r\nimport { type Store } from \"../../store/standard/base\";\r\n\r\nexport class ToastPlugin implements Store {\r\n sid = \"ToastPlugin\";\r\n provider = () => (\r\n <Toaster\r\n toastOptions={{\r\n className: '!bg-[#fff] !text-[#000] dark:!bg-[#131218] dark:!text-[#fff] !rounded-md !shadow-md',\r\n }}\r\n />\r\n );\r\n\r\n success = toast.success;\r\n error = toast.error;\r\n loading = toast.loading;\r\n custom = toast.custom;\r\n dismiss = toast.dismiss;\r\n remove = toast.remove;\r\n promise = toast.promise;\r\n}\r\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _ } from './chunk-
|
|
1
|
+
import { _ } from './chunk-2PD23V7H.mjs';
|
|
2
2
|
import BN, { BigNumber } from 'bignumber.js';
|
|
3
3
|
import JSONFormat from 'json-format';
|
|
4
4
|
import copy from 'copy-to-clipboard';
|
|
@@ -317,4 +317,4 @@ var helper = {
|
|
|
317
317
|
|
|
318
318
|
export { helper };
|
|
319
319
|
//# sourceMappingURL=out.js.map
|
|
320
|
-
//# sourceMappingURL=chunk-
|
|
320
|
+
//# sourceMappingURL=chunk-7WJMHFRA.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../lib/helper.ts"],"names":[],"mappings":"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","sourcesContent":["import BN, { BigNumber } from \"bignumber.js\";\r\nimport JSONFormat from \"json-format\";\r\nimport { _ } from \"./lodash\";\r\nimport copy from \"copy-to-clipboard\";\r\nimport numeral from \"numeral\";\r\nimport { from } from \"@iotexproject/iotex-address-ts\";\r\n\r\nconst valMap = {\r\n undefined: \"\",\r\n null: \"\",\r\n false: false,\r\n};\r\n\r\nexport const helper = {\r\n env: {\r\n isIopayMobile: () => navigator.userAgent && (navigator.userAgent.includes(\"IoPayAndroid\") || navigator.userAgent.includes(\"IoPayiOs\")),\r\n isBrowser: () => typeof window === \"object\",\r\n onBrowser(func) {\r\n if (this.isBrowser()) {\r\n func();\r\n }\r\n },\r\n },\r\n promise: {\r\n async sleep(ms) {\r\n return new Promise((resolve) => setTimeout(resolve, ms));\r\n },\r\n async runAsync<T, U = Error>(promise: Promise<T>): Promise<[U | null, T | null]> {\r\n return promise.then<[null, T]>((data: T) => [null, data]).catch<[U, null]>((err) => [err, null]);\r\n },\r\n },\r\n object: {\r\n crawlObject(object, options) {\r\n const newObj = JSON.parse(JSON.stringify(object));\r\n return helper.object.crawl(newObj, options);\r\n },\r\n crawl(object, options) {\r\n Object.keys(object).forEach((i) => {\r\n if (typeof object[i] === \"object\") {\r\n helper.object.crawl(object[i], options);\r\n } else {\r\n const handler = options[typeof object[i]];\r\n if (handler) {\r\n object[i] = handler(object[i]);\r\n }\r\n }\r\n });\r\n return object;\r\n },\r\n },\r\n json: {\r\n isJsonString(str: string) {\r\n if (!str || typeof str !== \"string\") return false;\r\n if (!str?.includes(\"{\")) return false;\r\n try {\r\n JSON.parse(str);\r\n } catch (e) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n safeParse(val: any) {\r\n try {\r\n return JSON.parse(val);\r\n } catch (error) {\r\n return val;\r\n }\r\n },\r\n },\r\n deepAssign(target, ...sources) {\r\n sources.forEach((source) => {\r\n Object.keys(source).forEach((key) => {\r\n let descriptor = Object.getOwnPropertyDescriptor(source, key);\r\n if (descriptor && descriptor?.get) {\r\n return Object.defineProperty(target, key, descriptor);\r\n }\r\n const targetValue = target[key];\r\n let sourceValue = source[key];\r\n if (helper.isObject(targetValue) && helper.isObject(sourceValue)) {\r\n try {\r\n target[key] = helper.deepAssign(targetValue, sourceValue);\r\n } catch (e) {\r\n target[key] = Object.assign(targetValue, sourceValue);\r\n }\r\n } else {\r\n target[key] = sourceValue;\r\n }\r\n });\r\n });\r\n return target;\r\n },\r\n isObject(value) {\r\n return value != null && typeof value === \"object\";\r\n },\r\n deepMerge(obj, newObj) {\r\n const newVal = _.mergeWith(obj, newObj, (...args) => {\r\n const [objValue, srcValue] = args;\r\n if (typeof srcValue === \"object\") {\r\n return helper.deepMerge(objValue, srcValue);\r\n }\r\n return srcValue || valMap[srcValue];\r\n });\r\n return newVal;\r\n },\r\n img: {\r\n parse(src: string | undefined) {\r\n if (!src) return \"/img-404.svg\";\r\n if (src?.startsWith(\"ipfs\")) {\r\n return \"https://ipfs.io/ipfs/\" + src.split(\"://\")[1];\r\n }\r\n return src;\r\n },\r\n },\r\n string: {\r\n copy(str: string) {\r\n copy(str);\r\n },\r\n fristUpper(str: string) {\r\n return str.charAt(0).toUpperCase() + str.slice(1);\r\n },\r\n firstUpperCase(str: string) {\r\n return str.replace(/^\\S/, (s) => s.toUpperCase());\r\n },\r\n toFixString(str, length) {\r\n if (str && str.length > length) {\r\n return str.substr(0, length) + \"...\";\r\n } else {\r\n return str;\r\n }\r\n },\r\n truncate(fullStr = \"\", strLen, separator) {\r\n if (fullStr.length <= strLen) return fullStr;\r\n\r\n separator = separator || \"...\";\r\n\r\n var sepLen = separator.length,\r\n charsToShow = strLen - sepLen,\r\n frontChars = Math.ceil(charsToShow / 2),\r\n backChars = Math.floor(charsToShow / 2);\r\n\r\n return fullStr.substr(0, frontChars) + separator + fullStr.substr(fullStr.length - backChars);\r\n },\r\n validAbi(abi: string): { abi: any[]; address: string } {\r\n try {\r\n JSON.parse(abi);\r\n const _abi = helper.json.safeParse(abi);\r\n if (!_abi) {\r\n return { abi: [], address: \"\" };\r\n }\r\n if (Array.isArray(_abi)) {\r\n return { abi: _abi, address: \"\" };\r\n } else if (_abi.abi && _abi.address) {\r\n return { abi: _abi.abi, address: _abi.address };\r\n } else if (_abi.abi && !_abi.addresses) {\r\n return { abi: _abi.abi, address: \"\" };\r\n }\r\n return { abi: [], address: \"\" };\r\n } catch (error) {\r\n return { abi: [], address: \"\" };\r\n }\r\n },\r\n random(count: number) {\r\n const chars = \"abcdefghijklmnopqrstuvwxyz\";\r\n let result = \"\";\r\n for (let i = 0; i < count; i++) {\r\n result += chars.charAt(Math.floor(Math.random() * chars.length));\r\n }\r\n return result;\r\n },\r\n },\r\n download: {\r\n downloadByBlob(name: string, blob: Blob) {\r\n const a = document.createElement(\"a\");\r\n const href = window.URL.createObjectURL(blob);\r\n a.href = href;\r\n a.download = name;\r\n a.click();\r\n },\r\n downloadJSON(name: string, jsonObj: object) {\r\n try {\r\n const jsonStr: string = JSONFormat(jsonObj);\r\n const blob = new Blob([jsonStr], { type: \"application/json\" });\r\n this.downloadByBlob(name + \".json\", blob);\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n },\r\n },\r\n number: {\r\n countNonZeroNumbers: (str: string) => {\r\n let index = 0;\r\n const length = str.length;\r\n for (; index < length && (str[index] === \"0\" || str[index] === \".\"); index += 1);\r\n return length - index - Number(str.includes(\".\"));\r\n },\r\n numberWithCommas(num: number) {\r\n return num.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n },\r\n getBN: (value: number | string | BN) => {\r\n return value instanceof BN ? value : typeof value === \"string\" ? new BN(Number(value)) : new BN(value);\r\n },\r\n toPrecisionFloor: (str: number | string, options?: { decimals?: number; format?: string; toLocalString?: boolean }) => {\r\n const { decimals = 6, format = \"\", toLocalString = false } = options || {};\r\n if (!str || isNaN(Number(str))) return \"\";\r\n\r\n if (helper.number.countNonZeroNumbers(String(str)) <= decimals) return String(str);\r\n const numStr = new BN(str).toFixed();\r\n let result = \"\";\r\n let index = 0;\r\n const numLength = numStr.length;\r\n\r\n for (; numStr[index] === \"0\" && index < numLength; index += 1);\r\n\r\n if (index === numLength) return \"0\";\r\n\r\n if (numStr[index] === \".\") {\r\n // number < 0\r\n result = \"0\";\r\n for (; (numStr[index] === \"0\" || numStr[index] === \".\") && index < numLength; index += 1) {\r\n result = result + numStr[index];\r\n }\r\n }\r\n let resultNumLength = 0;\r\n for (; index < numLength && (resultNumLength < decimals || !result.includes(\".\")); index += 1) {\r\n result = result + numStr[index];\r\n\r\n if (numStr[index] !== \".\") resultNumLength += 1;\r\n }\r\n if (format) {\r\n return numeral(Number(result)).format(format);\r\n }\r\n\r\n if (toLocalString) {\r\n return helper.number.numberWithCommas(Number(new BN(result).toFixed()));\r\n }\r\n\r\n return new BN(result).toFixed();\r\n },\r\n\r\n //format: '0,0'\r\n warpBigNumber(value: string, decimals = 18, options?: { format?: string; fallback?: string; min?: number }) {\r\n const { format = \"0.0\", fallback = \"0.000\", min } = options || {};\r\n if (!value) {\r\n return {\r\n value: \"...\",\r\n format: \"...\",\r\n originFormat: \"...\",\r\n decimals: \"0\",\r\n // isZero: true,\r\n };\r\n }\r\n const BigNumberResponse = { value: new BigNumber(value), decimals };\r\n return {\r\n value: BigNumberResponse.value.toFixed(0),\r\n originFormat: BigNumberResponse.value.div(10 ** decimals).toFixed(),\r\n format: helper.number.numberFormat(BigNumberResponse.value.div(10 ** decimals).toFixed(), format, { fallback, min }),\r\n decimals: String(BigNumberResponse.decimals),\r\n // isZero: BigNumberResponse.value.isZero(),\r\n };\r\n },\r\n //http://numeraljs.com/ format params does not need to deal with decimal places\r\n //format: '$0,0' '0a' '0,0' '0,0$'\r\n numberFormat(str: string | number, format: string = \"0,0\", options: { min?: number; fallback?: string } = {}): string {\r\n const { fallback = \"0.00\" } = options || {};\r\n\r\n if (!str || isNaN(Number(str))) return fallback;\r\n const numStr = new BigNumber(str).toFixed();\r\n const countNonZeroNumbers = (_str: string) => {\r\n const decimalPointIndex = _str.indexOf(\".\");\r\n if (decimalPointIndex === -1) {\r\n return 0;\r\n }\r\n const decimalPart = _str.substring(decimalPointIndex + 1);\r\n let trailingZerosCount = 0;\r\n for (let i = 0; i < decimalPart.length; i++) {\r\n if (decimalPart[i] === \"0\") {\r\n trailingZerosCount++;\r\n } else {\r\n break;\r\n }\r\n }\r\n return trailingZerosCount;\r\n };\r\n\r\n const fractionDigits = countNonZeroNumbers(format);\r\n const numberFractionDigits = countNonZeroNumbers(numStr);\r\n if (options?.min) {\r\n if (new BigNumber(numStr).isLessThan(new BigNumber(options?.min || 0))) {\r\n return `< ${numeral(options?.min).format(format)}`;\r\n }\r\n }\r\n const fullStr = new BigNumber(numStr).toFixed();\r\n let preStr = numeral(fullStr.split(\".\")[0]).format(format.split(\".\")[0]);\r\n const fractionStr = fullStr.split(\".\")?.[1]?.slice(0, fractionDigits + numberFractionDigits);\r\n\r\n if (numberFractionDigits >= fractionDigits) {\r\n return (preStr + \".\" + fractionStr).replace(/\\.?0+$/, \"\");\r\n }\r\n\r\n if (fractionStr?.[fractionDigits - 1] == \"9\") {\r\n return (preStr + \".\" + fractionStr.slice(0, fractionDigits - 1) + \"9\").replace(/\\.?0+$/, \"\");\r\n }\r\n\r\n const resultStr = numeral(new BigNumber(numStr).toString()).format(format);\r\n return resultStr.replace(/\\.?0+$/, \"\");\r\n },\r\n },\r\n address: {\r\n convertAddress: (addressMode: \"io\" | \"0x\", address: string = \"\"): string => {\r\n try {\r\n if (addressMode == \"0x\" && helper.address.validateIoAddress(address)) {\r\n return from(address).stringEth();\r\n }\r\n if (addressMode == \"io\" && helper.address.validateEthAddress(address)) {\r\n return from(address).string();\r\n }\r\n } catch (error) { }\r\n return address;\r\n },\r\n validateEthAddress: (address: string) => /^0x[a-fA-F0-9]{40}$/.test(address),\r\n validateIoAddress: (address: string) => /^io[a-zA-Z0-9]{39}$/.test(address),\r\n validateAddress: (address: string) => helper.address.validateEthAddress(address) || helper.address.validateIoAddress(address),\r\n },\r\n};\r\n"]}
|