@0xchain/table 0.0.1

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/README.md ADDED
@@ -0,0 +1,7 @@
1
+ # @0xchain/table
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Running unit tests
6
+
7
+ Run `nx test @0xchain/table` to execute the unit tests via [Vitest](https://vitest.dev/).
@@ -0,0 +1,79 @@
1
+ export interface ITokenListRequest {
2
+ /**
3
+ * Chain symbol
4
+ */
5
+ chain: string;
6
+ limit: number;
7
+ page: number;
8
+ /**
9
+ * Token search
10
+ */
11
+ text?: string;
12
+ [property: string]: any;
13
+ }
14
+ /**
15
+ * TokenBaseInfo
16
+ */
17
+ export interface ITokenBaseInfo {
18
+ /**
19
+ * Chain
20
+ */
21
+ chain: string;
22
+ /**
23
+ * Token Icon
24
+ */
25
+ iconUrl: string;
26
+ /**
27
+ * Is verified
28
+ */
29
+ identified: boolean;
30
+ /**
31
+ * Token address
32
+ */
33
+ tokenAddress: string;
34
+ /**
35
+ * Token name
36
+ */
37
+ tokenName: string;
38
+ /**
39
+ * Token symbol
40
+ */
41
+ tokenSymbol: string;
42
+ [property: string]: any;
43
+ }
44
+ /**
45
+ * @description Get verified token list
46
+ * @returns Token list
47
+ */
48
+ export declare const getVerifiedTokenList: (chain: string) => Promise<import('axios').AxiosResponse<any, any, {}>>;
49
+ /**
50
+ * Chain symbol
51
+ */
52
+ export declare const getChainSymbol: (chain: string) => Promise<import('axios').AxiosResponse<any, any, {}>>;
53
+ /**
54
+ * Token search
55
+ */
56
+ export declare const getTokenList: (chain: string, params: any) => Promise<import('axios').AxiosResponse<any, any, {}>>;
57
+ /**
58
+ * Chain
59
+ */
60
+ export declare const getChainList: () => Promise<import('axios').AxiosResponse<any, any, {}>>;
61
+ /**
62
+ * Is verified
63
+ */
64
+ export declare const getIsVerified: (chain: string, address: string) => Promise<import('axios').AxiosResponse<any, any, {}>>;
65
+ /**
66
+ * Token address
67
+ */
68
+ export declare const getTokenAddress: (chain: string, address: string) => Promise<import('axios').AxiosResponse<any, any, {}>>;
69
+ /**
70
+ * Token name
71
+ */
72
+ export declare const getTokenName: (chain: string, address: string) => Promise<import('axios').AxiosResponse<any, any, {}>>;
73
+ /**
74
+ * Token symbol
75
+ */
76
+ export declare const getTokenSymbol: (chain: string, address: string) => Promise<import('axios').AxiosResponse<any, any, {}>>;
77
+ export declare const getHotTokenList: (params: any) => Promise<any>;
78
+ export declare const searchToken: (search: string) => Promise<any>;
79
+ //# sourceMappingURL=commonApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commonApi.d.ts","sourceRoot":"","sources":["../../src/api/commonApi.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC;CACzB;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAAI,OAAO,MAAM,yDAEjD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,yDAE3C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,EAAE,QAAQ,GAAG,yDAEtD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,4DAExB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,EAAE,SAAS,MAAM,yDAE3D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,EAAE,SAAS,MAAM,yDAE7D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,EAAE,SAAS,MAAM,yDAE1D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,EAAE,SAAS,MAAM,yDAE5D,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,QAAQ,GAAG,KAAG,OAAO,CAAC,GAAG,CAExD,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,KAAG,OAAO,CAAC,GAAG,CAQvD,CAAA"}
@@ -0,0 +1,4 @@
1
+ export default function Address({ onChange }: {
2
+ onChange: (address: string) => void;
3
+ }): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=Address.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Address.d.ts","sourceRoot":"","sources":["../../src/filters/Address.tsx"],"names":[],"mappings":"AAQA,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAAC,QAAQ,EAAC,EAAE;IAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAAC,2CA+ChF"}
@@ -0,0 +1,5 @@
1
+ export default function Amount({ onChange, filterKey }: {
2
+ onChange: (from: string, to: string) => void;
3
+ filterKey: string;
4
+ }): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=Amount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Amount.d.ts","sourceRoot":"","sources":["../../src/filters/Amount.tsx"],"names":[],"mappings":"AAUA,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAAC,QAAQ,EAAE,SAAS,EAAC,EAAE;IAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAC,2CAuGtH"}
@@ -0,0 +1,7 @@
1
+ import * as React from "react";
2
+ interface DatePickerWithRangeProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
3
+ onChange: (start: number | string, end: number | string) => void;
4
+ }
5
+ export default function DatePickerWithRange({ className, onChange, ...props }: DatePickerWithRangeProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=TimeRange.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimeRange.d.ts","sourceRoot":"","sources":["../../src/filters/TimeRange.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAO9B,OAAO,iBAAiB,CAAA;AACxB,OAAO,oBAAoB,CAAA;AAC3B,OAAO,oBAAoB,CAAA;AAC3B,OAAO,iBAAiB,CAAA;AACxB,OAAO,iBAAiB,CAAA;AAexB,UAAU,wBAAyB,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IAC/F,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAA;CACjE;AAED,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,wBAAwB,2CAqG1B"}
@@ -0,0 +1,5 @@
1
+ import { ITokenBaseInfo } from '../api/commonApi';
2
+ export default function Token({ onChange }: {
3
+ onChange: (tokenList: ITokenBaseInfo[]) => void;
4
+ }): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=Token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Token.d.ts","sourceRoot":"","sources":["../../src/filters/Token.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAmB,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAQnE,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,IAAI,CAAA;CAAE,2CA2E9F"}
@@ -0,0 +1,5 @@
1
+ import { ITokenBaseInfo } from '../api/commonApi';
2
+ export default function TokenSearch({ onChange }: {
3
+ onChange: (tokenList: ITokenBaseInfo[]) => void;
4
+ }): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=TokenSearch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenSearch.d.ts","sourceRoot":"","sources":["../../src/filters/TokenSearch.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAe,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAO/D,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,IAAI,CAAA;CAAE,2CAwEpG"}
@@ -0,0 +1,37 @@
1
+ import { default as React } from 'react';
2
+ export interface ICustomTableColumn {
3
+ key: string;
4
+ label: string | React.ReactNode;
5
+ render?: (value: any, row: any, index: number) => React.ReactNode | React.ReactNode[];
6
+ width?: string;
7
+ align?: 'left' | 'center' | 'right';
8
+ filter?: 'timeRange' | 'address' | 'amount' | 'token' | 'tokenSearch';
9
+ sort?: boolean;
10
+ hidden?: boolean;
11
+ className?: (column: ICustomTableColumn, index: number, row?: any) => string;
12
+ filterProps?: {
13
+ params?: Record<string, any>;
14
+ onChange?: (value: any) => void;
15
+ };
16
+ }
17
+ export interface ICustomTableProps extends React.HTMLAttributes<HTMLTableElement> {
18
+ data: Array<any>;
19
+ columns: ICustomTableColumn[];
20
+ className?: string;
21
+ headerClassName?: string;
22
+ bodyClassName?: string;
23
+ rowClassName?: string;
24
+ tableClassName?: string;
25
+ showHeader?: boolean;
26
+ renderChildren?: (row: any, index: number) => React.ReactNode;
27
+ onFilterChange?: (filterValues: Record<string, any>) => void;
28
+ loading?: boolean;
29
+ sortKey?: string;
30
+ defaultSortKey?: string;
31
+ defaultOrder?: 'asc' | 'desc';
32
+ onSortChange?: (key: string, order: 'asc' | 'desc') => void;
33
+ emptyClassName?: string;
34
+ }
35
+ export declare const formatFilterValue: (filterValues: any) => any;
36
+ export default function CustomTable({ data, columns, headerClassName, bodyClassName, rowClassName, tableClassName, showHeader, renderChildren, onFilterChange, loading, onSortChange, defaultOrder, defaultSortKey, emptyClassName, ...props }: ICustomTableProps): import("react/jsx-runtime").JSX.Element;
37
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAMA,OAAO,KAA8B,MAAM,OAAO,CAAC;AASnD,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;IAChC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;IACtF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,aAAa,CAAC;IACtE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,MAAM,CAAC;IAC7E,WAAW,CAAC,EAAE;QACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC7B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;KACjC,CAAA;CACF;AACD,MAAM,WAAW,iBAAkB,SAAQ,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC;IAC/E,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACjB,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;IAC9D,cAAc,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,KAAK,IAAI,CAAC;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAWD,eAAO,MAAM,iBAAiB,GAAI,cAAc,GAAG,QAkClD,CAAA;AACD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAE,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,UAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,2CA+LxQ"}
package/dist/index.js ADDED
@@ -0,0 +1,414 @@
1
+ 'use client';
2
+ import { jsx as e, jsxs as o } from "react/jsx-runtime";
3
+ import { Table as ie, TableHeader as ce, TableRow as E, TableHead as de, TableBody as me, TableCell as K } from "@0xchain/ui/table";
4
+ import * as Z from "react";
5
+ import he, { useState as k, useEffect as z } from "react";
6
+ import { startOfDay as q, endOfDay as X } from "date-fns";
7
+ import { twMerge as v } from "tailwind-merge";
8
+ import { DatePicker as ue } from "antd";
9
+ import M from "dayjs";
10
+ import "dayjs/locale/en";
11
+ import "dayjs/locale/zh-cn";
12
+ import "dayjs/locale/zh-tw";
13
+ import "dayjs/locale/ja";
14
+ import "dayjs/locale/ko";
15
+ import fe from "antd/es/date-picker/locale/en_US";
16
+ import pe from "antd/es/date-picker/locale/zh_CN";
17
+ import Ae from "antd/es/date-picker/locale/zh_TW";
18
+ import be from "antd/es/date-picker/locale/ja_JP";
19
+ import ge from "antd/es/date-picker/locale/ko_KR";
20
+ import D from "@0xchain/image";
21
+ import { Popover as O, PopoverTrigger as U, PopoverContent as Q } from "@0xchain/ui/popover";
22
+ import { useLocale as xe, useTranslations as J } from "next-intl";
23
+ import { X as W, Search as V } from "lucide-react";
24
+ import * as Y from "@radix-ui/react-slider";
25
+ import $ from "@0xchain/number-like";
26
+ import S from "@0xchain/translation";
27
+ import _ from "@0xchain/request";
28
+ import { useParams as ee } from "next/navigation";
29
+ import { Checkbox as te } from "@0xchain/ui/checkbox";
30
+ import { useDebounceFn as ke } from "ahooks";
31
+ import ye from "@0xchain/empty";
32
+ import we from "@0xchain/loading";
33
+ const Ne = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAZCAYAAAArK+5dAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADWSURBVHgB7ZPhDcIgEIUP0wEcQTdwAxjBERzBDcSJdAPbDdwANznBQnIih6TQP02/hJDmwb274wqwaBDRuDVVd3TksLKbivSd1zRzn9PvQognzeSA7VG0gqPfe7sGksnF71dIk9IljJ1QPt5YonfV9HZIhQme1ONYHeR5Vep5A/tQ+xo9ZSCRn5hSZM5Awe+oVhEb9PA9RVMIU5Q0GGxfNVTgW6zC9yZz0EQ/jinRYliDVrBjmhvBkvEMzF7B+gZ/mb2CD7aHZ2zPiRps7bphOx4uJiyCNyogpaxjuzr+AAAAAElFTkSuQmCC";
34
+ function ve({
35
+ className: a,
36
+ onChange: i,
37
+ ...c
38
+ }) {
39
+ const m = xe(), [A, y] = Z.useState(!1), w = Z.useRef(null), [g, b] = Z.useState(null), d = {
40
+ en: fe,
41
+ "zh-hans": pe,
42
+ "zh-hant": Ae,
43
+ ja: be,
44
+ ko: ge
45
+ }, f = {
46
+ en: "en",
47
+ "zh-hans": "zh-cn",
48
+ "zh-hant": "zh-tw",
49
+ ja: "ja",
50
+ ko: "ko"
51
+ };
52
+ Z.useEffect(() => {
53
+ M.locale(f[m] ?? "en");
54
+ }, [m]);
55
+ const C = (l) => {
56
+ if (!l) {
57
+ i("", ""), N();
58
+ return;
59
+ }
60
+ const [h, p] = l, x = h ? q(h.toDate()) : void 0, T = p ? X(p.toDate()) : void 0;
61
+ i(x ? Math.floor(x.getTime() / 1e3) : "", T ? Math.floor(T.getTime() / 1e3) : ""), N();
62
+ }, N = () => {
63
+ y(!1);
64
+ }, R = (l) => {
65
+ l ? y(!0) : C(g);
66
+ }, B = (l) => {
67
+ if (!l) {
68
+ b(null);
69
+ return;
70
+ }
71
+ const [h, p] = l;
72
+ b([h, p]);
73
+ }, n = (l) => {
74
+ if (!l || !l[0] || !l[1]) {
75
+ b(null), i("", ""), N();
76
+ return;
77
+ }
78
+ const h = q(l[0].toDate()), p = X(l[1].toDate());
79
+ i(Math.floor(h.getTime() / 1e3), Math.floor(p.getTime() / 1e3)), b([l[0], l[1]]), N();
80
+ };
81
+ return /* @__PURE__ */ e("div", { className: v(a), ...c, children: /* @__PURE__ */ o(O, { open: A, onOpenChange: R, children: [
82
+ /* @__PURE__ */ e(U, { asChild: !0, children: /* @__PURE__ */ e("i", { className: "w-4 h-4 p-[2px] cursor-pointer flex items-center justify-center bg-[#000000] rounded-sm", children: /* @__PURE__ */ e(D, { src: Ne, width: 12, height: 12 }) }) }),
83
+ /* @__PURE__ */ e(Q, { className: "w-auto p-0", align: "center", side: "right", children: /* @__PURE__ */ e("div", { ref: w, className: "relative", children: /* @__PURE__ */ e(
84
+ ue.RangePicker,
85
+ {
86
+ open: !0,
87
+ size: "small",
88
+ locale: d[m],
89
+ allowClear: !1,
90
+ value: g ?? [M(), M()],
91
+ onCalendarChange: B,
92
+ onChange: n,
93
+ getPopupContainer: () => w.current,
94
+ style: { position: "absolute", opacity: 0, width: 0, height: 0, pointerEvents: "none" },
95
+ disabledDate: (l) => l && l > M().endOf("day")
96
+ }
97
+ ) }) })
98
+ ] }) });
99
+ }
100
+ const Ce = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADZSURBVHgB7ZTbDcIwDEVvUAfoCN2AjsAI3YBu0jABGYER2KAjABPABrBBcMARFkjNo/krR7IaWfZ1nDoB/gRQfmGt7enToAw3pdThu4BFQajAS7sSvh3ZwOsj2QVprMk6ofULNWHsmytZg0hcLOc4TCh4FEVqhMVrIT6idELqhnySbHk/ETfkHKlPbsnuLDBMiLuYFjm4u2E/bIW/E/4ecyABLXZa8/H5zjRKQEInFtywxU0MsUIcD2QSWyCb5RVInvcqMs7/ZHerzygNz74Wz0f0mM4pZLAInpppFh6wLb8LAAAAAElFTkSuQmCC";
101
+ function je({ onChange: a, filterKey: i }) {
102
+ const [c, m] = k(!1), A = J("common"), [y, w] = k(""), [g, b] = k(""), [d, f] = k([0.01, 1e10]), C = (p) => {
103
+ f(p), w(p[0].toString()), b(p[1].toString());
104
+ }, N = (p) => {
105
+ const x = p.target.value;
106
+ if (x === "" || /^\d*\.?\d{0,8}$/.test(x) && !x.startsWith(".")) {
107
+ w(x);
108
+ const T = parseFloat(x) || 0;
109
+ f([T, d[1]]);
110
+ }
111
+ }, R = (p) => {
112
+ const x = p.target.value;
113
+ if (x === "" || /^\d*\.?\d{0,8}$/.test(x) && !x.startsWith(".")) {
114
+ b(x);
115
+ const T = parseFloat(x);
116
+ f([d[0], T]);
117
+ }
118
+ }, B = () => {
119
+ a(y, g), m(!1);
120
+ }, n = () => {
121
+ m(!1);
122
+ }, l = (p) => {
123
+ p.target.value === "0" && w("0.01");
124
+ }, h = (p) => {
125
+ p.target.value === "0" && b("0.01");
126
+ };
127
+ return /* @__PURE__ */ o(O, { open: c, onOpenChange: m, children: [
128
+ /* @__PURE__ */ e(U, { asChild: !0, children: /* @__PURE__ */ e("div", { className: "w-[16px] h-[16px] flex items-center justify-center bg-[#000000] rounded-sm cursor-pointer", children: /* @__PURE__ */ e(D, { src: Ce, width: 12, height: 12, objectFit: "contain" }) }) }),
129
+ /* @__PURE__ */ e(Q, { className: "bg-module", children: /* @__PURE__ */ o("div", { className: "w-full h-full", children: [
130
+ /* @__PURE__ */ o("div", { className: "flex flex-row items-center justify-between h-9", children: [
131
+ /* @__PURE__ */ e("span", { className: "text-sm", children: /* @__PURE__ */ e(S, { value: "label", parentKey: "common.filter.amount" }) }),
132
+ /* @__PURE__ */ e("div", { className: "w-4 h-4 text-black text-sm cursor-pointer flex items-center justify-center", onClick: () => n(), children: /* @__PURE__ */ e(W, { className: "w-4 h-4" }) })
133
+ ] }),
134
+ /* @__PURE__ */ o("div", { className: "flex flex-row items-center justify-between gap-2 py-3", children: [
135
+ /* @__PURE__ */ o("fieldset", { className: "w-1/2 h-full", children: [
136
+ /* @__PURE__ */ e("label", { className: "w-full h-full text-sm", children: /* @__PURE__ */ e(S, { value: "form", parentKey: "common.filter.amount" }) }),
137
+ /* @__PURE__ */ e("input", { type: "text", inputMode: "decimal", pattern: "[0-9]*\\.?[0-9]{0,8}", onBlur: l, placeholder: A("filter.amount.min"), className: "w-full h-full bg-module text-sm border-1 border-gray-300 rounded p-2 my-2 focus-visible:outline-primary placeholder:text-gray-400", value: y, onChange: N })
138
+ ] }),
139
+ /* @__PURE__ */ o("fieldset", { className: "w-1/2 h-full", children: [
140
+ /* @__PURE__ */ e("label", { className: "w-full h-full text-sm", children: /* @__PURE__ */ e(S, { value: "to", parentKey: "common.filter.amount" }) }),
141
+ /* @__PURE__ */ e("input", { type: "text", inputMode: "decimal", pattern: "[0-9]*\\.?[0-9]{0,8}", onBlur: h, placeholder: A("filter.amount.max"), className: "w-full h-full bg-module text-sm border-1 border-gray-300 rounded p-2 my-2 focus-visible:outline-primary placeholder:text-gray-400", value: g, onChange: R })
142
+ ] })
143
+ ] }),
144
+ /* @__PURE__ */ o("div", { className: " w-full pb-4", children: [
145
+ /* @__PURE__ */ o(
146
+ Y.Root,
147
+ {
148
+ className: "w-full relative flex items-center justify-center h-1 flex-grow bg-background rounded-sm touch-pan-y select-none",
149
+ value: d,
150
+ onValueChange: C,
151
+ max: 1e10,
152
+ min: 0.01,
153
+ step: 1,
154
+ children: [
155
+ /* @__PURE__ */ e(Y.Track, { className: "h-1 rounded-full bg-primary", children: /* @__PURE__ */ e(Y.Range, { className: "h-1 absolute bg-primary rounded-full" }) }),
156
+ /* @__PURE__ */ e(Y.Thumb, { className: "block w-3 h-3 bg-primary rounded-full cursor-pointer touch-none", "aria-label": "Min value" }),
157
+ /* @__PURE__ */ e(Y.Thumb, { className: "block w-3 h-3 bg-primary rounded-full cursor-pointer touch-none", "aria-label": "Max value" })
158
+ ]
159
+ }
160
+ ),
161
+ /* @__PURE__ */ o("div", { className: "flex justify-between text-xs text-gray-500 mt-2", children: [
162
+ /* @__PURE__ */ e($, { addonBefore: i === "valueUSD" ? /* @__PURE__ */ e("span", { className: "text-subtitle", children: "$" }) : void 0, number: "0.01", minimumFractionDigits: 2, notation: "compact", maximumFractionDigits: 20 }),
163
+ /* @__PURE__ */ e($, { addonBefore: i === "valueUSD" ? /* @__PURE__ */ e("span", { className: "text-subtitle", children: "$" }) : void 0, number: "10000000000", notation: "compact", maximumFractionDigits: 2 })
164
+ ] })
165
+ ] }),
166
+ /* @__PURE__ */ o("div", { className: "flex justify-end items-center", children: [
167
+ /* @__PURE__ */ e("button", { className: "bg-module text-black text-sm px-3 py-1 border-1 border-stroke rounded-lg ml-3 cursor-pointer", onClick: n, children: A("button.cancel") }),
168
+ /* @__PURE__ */ e("button", { className: "bg-primary text-white text-sm px-3 py-1 rounded-lg ml-3 cursor-pointer", onClick: B, children: A("button.confirm") })
169
+ ] })
170
+ ] }) })
171
+ ] });
172
+ }
173
+ const H = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAFFSURBVHgB5VVRccMwDFV2A+AxCIOZwQyhDGYGC4OGQcegYzAIgZANgcsgY6DJd9Kquk4Te9ef9t3pkpOf/CTFigHuAojoyPZkAY+YyAYyD/8BbdDyRksIVWIU9MrZStY9mSUzvB7fPdmoxLYlAlYFvsvGF/hdsRAee98rn+PWSXWjbhGvC9ySgJc+Z3w57BWvZ9+wJBKYuMkE/7WOhUOSjFGVujmBlglTbi3jM5h8L04kokv5j/xs+fmVEpqmOWR8P3AOiX1OFx4SkQNcASIimT1BPcySiJT6AvWQNn3PMtTpclABFW8vkeS4jlAusF07J0Zls4P1Anri7ZoAq4Zql5uRhP+m+AOsRZx4FRgr63SGPLhx6gc8R9HfuMXTi2oOEyfhq4RYLPb7A0/vjkD2yZsbxa0XKkxKC3m4Fvibxso3cHP4BWMxfN1YKiXJAAAAAElFTkSuQmCC";
174
+ function Re({ onChange: a }) {
175
+ const [i, c] = k(!1), m = J("common"), [A, y] = k(""), w = (d) => {
176
+ const f = d.target.value;
177
+ (f === "" || /^[a-zA-Z0-9]*$/.test(f)) && y(f);
178
+ }, g = () => {
179
+ a(A), c(!1);
180
+ }, b = () => {
181
+ c(!1);
182
+ };
183
+ return /* @__PURE__ */ o(O, { open: i, onOpenChange: c, children: [
184
+ /* @__PURE__ */ e(U, { asChild: !0, children: /* @__PURE__ */ e("div", { className: "w-[16px] h-[16px] flex items-center justify-center bg-[#000000] rounded-sm cursor-pointer", children: /* @__PURE__ */ e(D, { src: H, width: 12, height: 12, objectFit: "contain" }) }) }),
185
+ /* @__PURE__ */ e(Q, { className: "bg-module", children: /* @__PURE__ */ o("div", { className: "w-full h-full", children: [
186
+ /* @__PURE__ */ o("fieldset", { className: "w-full h-full", children: [
187
+ /* @__PURE__ */ o("label", { className: "w-full h-full text-sm flex items-center justify-between", children: [
188
+ m("filter.address.label"),
189
+ /* @__PURE__ */ e("div", { className: "w-4 h-4 text-black text-sm cursor-pointer flex items-center justify-center", onClick: () => b(), children: /* @__PURE__ */ e(W, { className: "w-4 h-4" }) })
190
+ ] }),
191
+ /* @__PURE__ */ o("div", { className: "w-full relative text-sm ", children: [
192
+ /* @__PURE__ */ e(V, { className: "w-4 h-4 absolute left-2 top-1/2 -translate-y-1/2" }),
193
+ /* @__PURE__ */ e("input", { placeholder: m("filter.amount.label"), type: "text", pattern: "[a-zA-Z0-9]*", className: "pl-6 w-full h-full bg-module text-sm border-1 border-gray-300 rounded p-2 my-2 focus-visible:outline-primary placeholder:text-gray-400", value: A, onChange: w })
194
+ ] })
195
+ ] }),
196
+ /* @__PURE__ */ o("div", { className: "flex justify-end items-center mt-2", children: [
197
+ /* @__PURE__ */ e("button", { className: "bg-module text-black text-sm px-3 py-1 border-1 border-gray-300 rounded ml-3 cursor-pointer", onClick: b, children: m("button.cancel") }),
198
+ /* @__PURE__ */ e("button", { className: "bg-primary text-white text-sm px-3 py-1 rounded ml-3 cursor-pointer", onClick: g, children: m("button.confirm") })
199
+ ] })
200
+ ] }) })
201
+ ] });
202
+ }
203
+ const Be = (a) => _.get("/api/v2/tokens/hot-list", { params: { ...a, limit: 100, page: 1 } }), Se = (a) => _.get("/api/token/list/verified", {
204
+ params: {
205
+ search: a,
206
+ page: 1,
207
+ size: 100
208
+ }
209
+ });
210
+ function Te({ onChange: a }) {
211
+ const { chain: i } = ee(), c = J("common.filter.amount"), [m, A] = k(!1), [y, w] = k(""), [g, b] = k([]), [d, f] = k([]), C = () => {
212
+ A(!1);
213
+ }, N = () => {
214
+ a(d), A(!1);
215
+ }, R = (n) => {
216
+ d.some((l) => l.tokenAddress === n.tokenAddress) ? f(d.filter((l) => l.tokenAddress !== n.tokenAddress)) : f([...d, n]);
217
+ }, B = ke(async () => {
218
+ const n = await Be({
219
+ chain: i,
220
+ text: y,
221
+ limit: 100,
222
+ page: 1
223
+ });
224
+ b((n == null ? void 0 : n.data) || []);
225
+ }, { wait: 300 });
226
+ return z(() => {
227
+ B.run();
228
+ }, [i, y]), /* @__PURE__ */ o(O, { open: m, onOpenChange: A, children: [
229
+ /* @__PURE__ */ e(U, { asChild: !0, children: /* @__PURE__ */ e("div", { className: "w-[16px] h-[16px] flex items-center justify-center bg-[#000000] rounded-sm cursor-pointer", children: /* @__PURE__ */ e(D, { src: H, width: 12, height: 12, objectFit: "contain" }) }) }),
230
+ /* @__PURE__ */ o(Q, { className: "py-5 bg-module", children: [
231
+ /* @__PURE__ */ o("div", { className: "w-full h-full", children: [
232
+ /* @__PURE__ */ o("div", { className: "flex flex-row items-center justify-between h-9", children: [
233
+ /* @__PURE__ */ e("span", { className: "text-base text-title", children: /* @__PURE__ */ e(S, { value: "label", parentKey: "common.filter.token" }) }),
234
+ /* @__PURE__ */ e("div", { className: "w-4 h-4 text-black text-sm cursor-pointer flex items-center justify-center", onClick: () => C(), children: /* @__PURE__ */ e(W, { className: "w-4 h-4 text-title" }) })
235
+ ] }),
236
+ /* @__PURE__ */ o("div", { className: "w-full relative text-sm py-3", children: [
237
+ /* @__PURE__ */ e(V, { className: "w-4 h-4 absolute left-2 top-1/2 -translate-y-1/2" }),
238
+ /* @__PURE__ */ e("input", { type: "text", placeholder: c("label"), className: "pl-6 w-full h-full bg-module text-sm border-1 border-gray-300 rounded p-2 my-2 focus-visible:outline-primary placeholder:text-gray-400", value: y, onChange: (n) => w(n.target.value) })
239
+ ] })
240
+ ] }),
241
+ /* @__PURE__ */ e("ul", { className: "max-h-30 min-h-30 overflow-y-auto overflow-x-hidden w-full", children: g == null ? void 0 : g.map((n, l) => /* @__PURE__ */ o("li", { className: "flex h-10 flex-row items-center gap-3 hover:bg-background hover:rounded-sm p-2 cursor-pointer overflow-hidden", onClick: () => R(n), children: [
242
+ /* @__PURE__ */ e(D, { src: n.iconUrl, objectFit: "contain", alt: n.tokenSymbol, className: "rounded-full w-4 h-4 min-w-4 min-h-4 flex-shrink-0" }),
243
+ /* @__PURE__ */ o("div", { className: "text-sm text-title text-left truncate min-w-0 flex-1 overflow-hidden", children: [
244
+ /* @__PURE__ */ e("span", { className: "text-title", children: n.tokenSymbol }),
245
+ " ",
246
+ /* @__PURE__ */ e("span", { className: "text-subtitle text-xs", children: n.tokenName })
247
+ ] }),
248
+ /* @__PURE__ */ e("div", { className: "flex-shrink-0", children: /* @__PURE__ */ e(te, { className: v("w-4 h-4 cursor-pointer border-1 border-gray-300 rounded-sm", d.some((h) => h.tokenAddress === n.tokenAddress) ? "bg-primary" : "bg-module"), checked: d.some((h) => h.tokenAddress === n.tokenAddress) }) })
249
+ ] }, l)) }),
250
+ /* @__PURE__ */ o("div", { className: "flex justify-end items-center mt-2", children: [
251
+ /* @__PURE__ */ e("button", { className: "bg-module text-black text-sm px-3 py-1 border-1 border-gray-300 rounded ml-3 cursor-pointer", onClick: C, children: /* @__PURE__ */ e(S, { value: "button.cancel", parentKey: "common" }) }),
252
+ /* @__PURE__ */ e("button", { className: "bg-primary text-white text-sm px-3 py-1 rounded ml-3 cursor-pointer", onClick: N, children: /* @__PURE__ */ e(S, { value: "button.confirm", parentKey: "common" }) })
253
+ ] })
254
+ ] })
255
+ ] });
256
+ }
257
+ function De({ onChange: a }) {
258
+ const { chain: i = "" } = ee(), c = J("common.filter.amount"), [m, A] = k(!1), [y, w] = k(""), [g, b] = k([]), [d, f] = k([]), C = () => {
259
+ a([]), w(""), f([]), A(!1);
260
+ }, N = () => {
261
+ a(d), A(!1);
262
+ }, R = (n) => {
263
+ d.some((l) => l.tokenAddress === n.tokenAddress) ? f(d.filter((l) => l.tokenAddress !== n.tokenAddress)) : f([...d, n]);
264
+ }, B = async () => {
265
+ var l;
266
+ const n = await Se(y);
267
+ b(((l = n == null ? void 0 : n.data) == null ? void 0 : l.content) || []);
268
+ };
269
+ return z(() => {
270
+ B();
271
+ }, [i, y]), /* @__PURE__ */ o(O, { open: m, onOpenChange: A, children: [
272
+ /* @__PURE__ */ e(U, { asChild: !0, children: /* @__PURE__ */ e("div", { className: "w-[16px] h-[16px] flex items-center justify-center bg-[#000000] rounded-sm cursor-pointer", children: /* @__PURE__ */ e(D, { src: H, width: 12, height: 12, objectFit: "contain" }) }) }),
273
+ /* @__PURE__ */ o(Q, { className: "py-5 bg-module", children: [
274
+ /* @__PURE__ */ o("div", { className: "w-full h-full bg-module", children: [
275
+ /* @__PURE__ */ o("div", { className: "flex flex-row items-center justify-between h-9", children: [
276
+ /* @__PURE__ */ e("span", { className: "text-base text-title", children: /* @__PURE__ */ e(S, { value: "label", parentKey: "common.filter.token" }) }),
277
+ /* @__PURE__ */ e("div", { className: "w-4 h-4 text-black text-sm cursor-pointer flex items-center justify-center", onClick: () => C(), children: /* @__PURE__ */ e(W, { className: "w-4 h-4 text-title" }) })
278
+ ] }),
279
+ /* @__PURE__ */ o("div", { className: "w-full relative bg-module text-sm py-3", children: [
280
+ /* @__PURE__ */ e(V, { className: "w-4 h-4 absolute left-2 top-1/2 -translate-y-1/2" }),
281
+ /* @__PURE__ */ e("input", { type: "text", placeholder: c("label"), className: "pl-6 w-full h-full bg-module text-sm border-1 border-gray-300 rounded p-2 my-2 focus-visible:outline-primary placeholder:text-gray-400", value: y, onChange: (n) => w(n.target.value) })
282
+ ] })
283
+ ] }),
284
+ /* @__PURE__ */ e("ul", { className: "max-h-50 min-h-25 overflow-y-auto overflow-x-hidden w-full", children: g == null ? void 0 : g.map((n, l) => /* @__PURE__ */ o("li", { className: "flex h-10 flex-row items-center gap-3 hover:bg-background hover:rounded-sm p-2 cursor-pointer overflow-hidden", onClick: () => R(n), children: [
285
+ /* @__PURE__ */ e(D, { src: n.iconUrl, objectFit: "contain", alt: n.tokenName, className: "rounded-full w-4 h-4 min-w-4 min-h-4 flex-shrink-0" }),
286
+ /* @__PURE__ */ e("div", { className: "text-sm text-title text-left truncate min-w-0 flex-1 overflow-hidden", children: n.tokenName }),
287
+ /* @__PURE__ */ e("div", { className: "flex-shrink-0", children: /* @__PURE__ */ e(te, { className: v("w-4 h-4 cursor-pointer border-1 border-gray-300 rounded-sm", d.some((h) => h.tokenAddress === n.tokenAddress) ? "bg-primary" : "bg-white"), checked: d.some((h) => h.tokenAddress === n.tokenAddress) }) })
288
+ ] }, l)) }),
289
+ /* @__PURE__ */ o("div", { className: "flex justify-end items-center mt-2", children: [
290
+ /* @__PURE__ */ e("button", { className: "bg-module text-black text-sm px-3 py-1 border-1 border-gray-300 rounded ml-3 cursor-pointer", onClick: C, children: /* @__PURE__ */ e(S, { value: "button.cancel", parentKey: "common" }) }),
291
+ /* @__PURE__ */ e("button", { className: "bg-primary text-white text-sm px-3 py-1 rounded ml-3 cursor-pointer", onClick: N, children: /* @__PURE__ */ e(S, { value: "button.confirm", parentKey: "common" }) })
292
+ ] })
293
+ ] })
294
+ ] });
295
+ }
296
+ const Pe = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAAAhCAYAAABX5MJvAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAHtSURBVHgB7ZfBalNBFIb/M7cmaBGuT2BcCNZVHsG+QWNw3Qw00qyMT5DbJ9Buiujipnsl+gZ5A3EjLu8bNIIVzSVzOhNaKGnTe86EQhf5IARyD8M388/cMwHW3CEIK/Bs/6RhTG3kh2n6T/bz6P4BIoiWaPRP0gf/69/9CI2L35ybbf/68HAMJQaRbJb1wWWB+WAmyYMclERJbPVOd5jRv+ZRw69ODiVqibAPCPRuaQFhZ6v3tw8Fagmie9liDFdrMAiyuA2J5/t/OkRmV1CaJiSPRSwxnxmZgbSeCS+ksYgl5jOriGERaSwiiRBDmBn0pMbUR1VFIgmW7YNlNJ92p02sKkHkfiASBopy87S4qWYDAmq1MptOaxPv/BhKqJwdFkePJlgjQNRF83yUug284ZnuiAZKxkHPtgqsKvHp+POQEH1CJon7/cRau3RfyE4Hk3pDXiL9h/TG9i57TzC+IZ6iKg6RRNe233uTMSIoHW1X1Yh7R8nG+i/VeWdw5aYMqO6YH/MvHWNI1qL9yu112pWrEFDdJ17b9tA3kq+C0uJ85USob1YJIwxeVJRlkhiiJaxtTdjNls+Sabi3+/IYCqJu2137agzHh9c8KsIbEkqi/3ckMBmuxqKKYWWJEItz1DoX8RHxW20MaxY5AxD/nDkC92cTAAAAAElFTkSuQmCC", Fe = (a) => a == null ? "" : typeof a == "object" ? JSON.stringify(a) : a, ct = (a) => {
297
+ const i = {
298
+ filters: {}
299
+ };
300
+ return Object.keys(a).forEach((c) => {
301
+ c === "timestamp" ? (i.filters.startTime = a.timestamp.start, i.filters.endTime = a.timestamp.end) : c === "fromAddress" ? i.filters.fromAddress = a.fromAddress.address : c === "toAddress" ? i.filters.toAddress = a.toAddress.address : c === "valueUsd" ? (i.filters.minValueUsd = a.valueUsd.min, i.filters.maxValueUsd = a.valueUsd.max) : c === "amount" ? (i.filters.minAmount = a.amount.min, i.filters.maxAmount = a.amount.max) : c === "token" ? i.filters.tokenList = a.token.map((m) => m.tokenAddress) : c === "tokenSearch" ? i.filters.tokenList = a.tokenSearch.map((m) => m.tokenAddress) : c === "inputAmount" ? (i.filters.minInputAmount = a.inputAmount.min, i.filters.maxInputAmount = a.inputAmount.max) : c === "outputAmount" ? (i.filters.minOutputAmount = a.outputAmount.min, i.filters.maxOutputAmount = a.outputAmount.max) : c === "fee" && (i.filters.minFee = a.fee.min, i.filters.maxFee = a.fee.max);
302
+ }), i.filters;
303
+ };
304
+ function dt({ data: a, columns: i, headerClassName: c, bodyClassName: m, rowClassName: A, tableClassName: y, showHeader: w = !0, renderChildren: g, onFilterChange: b, loading: d, onSortChange: f, defaultOrder: C, defaultSortKey: N, emptyClassName: R, ...B }) {
305
+ const [n, l] = k(null), [h, p] = k({}), [x, T] = k(N || null), [L, re] = k(C || null), I = (t, r) => {
306
+ l((s) => ({
307
+ ...s,
308
+ [t]: r
309
+ }));
310
+ }, P = (t) => {
311
+ l((r) => {
312
+ const s = { ...r };
313
+ return delete s[t], s;
314
+ }), p((r) => ({
315
+ ...r,
316
+ [t]: (r[t] || 0) + 1
317
+ }));
318
+ }, ne = (t) => {
319
+ switch (t.filter) {
320
+ case "timeRange":
321
+ return /* @__PURE__ */ e(ve, { onChange: (r, s) => {
322
+ var u, j;
323
+ r && s ? (I(t.key, { start: r, end: s }), (j = (u = t.filterProps) == null ? void 0 : u.onChange) == null || j.call(u, { start: r, end: s })) : P(t.key);
324
+ } }, h[t.key]);
325
+ case "address":
326
+ return /* @__PURE__ */ e(Re, { onChange: (r) => {
327
+ var s, u;
328
+ r ? (I(t.key, { address: r }), (u = (s = t.filterProps) == null ? void 0 : s.onChange) == null || u.call(s, { address: r })) : P(t.key);
329
+ } }, h[t.key]);
330
+ case "amount":
331
+ return /* @__PURE__ */ e(je, { filterKey: t.key, onChange: (r, s) => {
332
+ var j, G;
333
+ const u = {};
334
+ r && (u.min = r), s && (u.max = s), Object.keys(u).length > 0 ? (I(t.key, u), (G = (j = t.filterProps) == null ? void 0 : j.onChange) == null || G.call(j, u)) : P(t.key);
335
+ } }, h[t.key]);
336
+ case "token":
337
+ return /* @__PURE__ */ e(Te, { onChange: (r) => {
338
+ var s, u;
339
+ r ? (I(t.key, r), (u = (s = t.filterProps) == null ? void 0 : s.onChange) == null || u.call(s, r)) : P(t.key);
340
+ } }, h[t.key]);
341
+ case "tokenSearch":
342
+ return /* @__PURE__ */ e(De, { onChange: (r) => {
343
+ var s, u;
344
+ r ? (I(t.key, r), (u = (s = t.filterProps) == null ? void 0 : s.onChange) == null || u.call(s, r)) : P(t.key);
345
+ } }, h[t.key]);
346
+ default:
347
+ return null;
348
+ }
349
+ }, se = (t) => t.min && !t.max ? `≥ ${t.min}` : !t.min && t.max ? `≤ ${t.max}` : `${t.min} - ${t.max}`, ae = (t, r) => {
350
+ if (!r) return null;
351
+ switch (t.filter) {
352
+ case "timeRange":
353
+ return `${M(r.start * 1e3).format("YYYY-MM-DD") || ""} - ${M(r.end * 1e3).format("YYYY-MM-DD") || ""}`;
354
+ case "address":
355
+ return r.address;
356
+ case "amount":
357
+ return se(r);
358
+ case "token":
359
+ return r.map((s) => s.tokenName).join(", ");
360
+ case "tokenSearch":
361
+ return r.map((s) => s.tokenName).join(", ");
362
+ default:
363
+ return null;
364
+ }
365
+ }, le = (t) => {
366
+ const r = L === "asc" ? "desc" : "asc";
367
+ T(t), re(r), f == null || f(t, r);
368
+ }, F = i.filter((t) => !t.hidden), oe = F.some((t) => t.filter);
369
+ return z(() => {
370
+ n !== null && (b == null || b(n));
371
+ }, [n]), /* @__PURE__ */ o("div", { className: "overflow-auto min-w-full relative", ...B, children: [
372
+ /* @__PURE__ */ e(we, { loading: d }),
373
+ oe && n && Object.keys(n).length > 0 && /* @__PURE__ */ e("div", { className: "flex flex-row gap-3 flex-nowrap overflow-x-auto scrollbar-hide pb-3", children: F.map((t) => {
374
+ if (!n) return null;
375
+ const r = n == null ? void 0 : n[t.key];
376
+ return !r || Array.isArray(r) && r.length === 0 ? null : /* @__PURE__ */ o("div", { className: "flex items-center flex-nowrap gap-2 bg-module px-3 py-1 rounded-full border-1 border-stroke max-w-full min-w-0 overflow-hidden", children: [
377
+ /* @__PURE__ */ o("div", { className: "text-sm text-subtitle shrink-0", children: [
378
+ t.label,
379
+ ":"
380
+ ] }),
381
+ /* @__PURE__ */ e("div", { className: "text-sm flex-1 min-w-0", children: /* @__PURE__ */ e("div", { className: "min-w-0 truncate", children: ae(t, r) }) }),
382
+ /* @__PURE__ */ e(
383
+ "button",
384
+ {
385
+ onClick: () => P(t.key),
386
+ className: "shrink-0 hover:bg-background rounded-full p-1",
387
+ children: /* @__PURE__ */ e(W, { className: "w-3 h-3 cursor-pointer" })
388
+ }
389
+ )
390
+ ] }, t.key);
391
+ }) }),
392
+ /* @__PURE__ */ o(ie, { className: v("", y), children: [
393
+ w && /* @__PURE__ */ e(ce, { className: v("border-b border-stroke", c), children: /* @__PURE__ */ e(E, { className: "border-b-0 hover:bg-transparent", children: F.map((t, r) => {
394
+ var s;
395
+ return /* @__PURE__ */ e(de, { className: v("text-left", "whitespace-nowrap"), style: { width: t.width }, children: /* @__PURE__ */ o("div", { className: v("flex items-center gap-1 min-w-fit w-full whitespace-nowrap", t.align === "center" && "justify-center", t.align === "right" && "justify-end", (s = t.className) == null ? void 0 : s.call(t, t, r)), children: [
396
+ t.label,
397
+ t.filter && ne(t),
398
+ t.sort && /* @__PURE__ */ e(D, { src: Pe, alt: "sort", className: v("w-4 h-4 cursor-pointer", x === t.key && "opacity-100", L === "desc" && "rotate-180"), onClick: () => le(t.key) })
399
+ ] }) }, r);
400
+ }) }) }),
401
+ /* @__PURE__ */ e(me, { className: v("[&_tr:last-child]:border-b-0", m), children: (a == null ? void 0 : a.length) > 0 ? a.map((t, r) => /* @__PURE__ */ o(he.Fragment, { children: [
402
+ /* @__PURE__ */ e(E, { className: v("border-r-0 border-l-0 border-t-0 border-b border-stroke hover:bg-background", A), children: F.map((s, u) => {
403
+ var j;
404
+ return /* @__PURE__ */ e(K, { className: v("text-left min-w-fit py-4", s.align === "center" && "text-center", s.align === "right" && "text-right", "whitespace-nowrap", (j = s.className) == null ? void 0 : j.call(s, s, r, a[r])), style: { width: s.width }, children: s.render ? s.render(t[s.key], t, r) : Fe(t[s.key]) }, u);
405
+ }) }, r),
406
+ g && /* @__PURE__ */ e(E, { className: "border-b-0", children: /* @__PURE__ */ e(K, { colSpan: F.length, className: "p-0", children: g(t, r) }) })
407
+ ] }, r)) : /* @__PURE__ */ e(E, { className: "hover:bg-transparent data-[state=selected]:bg-transparent", children: /* @__PURE__ */ e(K, { colSpan: F.length, className: "w-full text-center", children: /* @__PURE__ */ e(ye, { className: v("w-full h-38", R) }) }) }) })
408
+ ] })
409
+ ] });
410
+ }
411
+ export {
412
+ dt as default,
413
+ ct as formatFilterValue
414
+ };
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "@0xchain/table",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ "./package.json": "./package.json",
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "default": "./dist/index.js"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "!**/*.tsbuildinfo"
19
+ ],
20
+ "devDependencies": {
21
+ "rollup-plugin-preserve-use-client": "3.0.1"
22
+ },
23
+ "dependencies": {
24
+ "react": "19.1.1",
25
+ "react-dom": "19.1.1",
26
+ "tailwind-merge": "3.3.1",
27
+ "lucide-react": "0.539.0",
28
+ "dayjs": "1.11.19",
29
+ "next-intl": "4.6.1",
30
+ "next": "15.5.6",
31
+ "@0xchain/next-themes": "1.0.0",
32
+ "date-fns": "4.1.0",
33
+ "antd": "6.1.1",
34
+ "ahooks": "3.9.5",
35
+ "@radix-ui/react-slider": "1.3.6",
36
+ "@0xchain/ui": "0.0.1",
37
+ "@0xchain/loading": "0.0.1",
38
+ "@0xchain/i18n": "0.0.1",
39
+ "@0xchain/image": "0.0.1",
40
+ "@0xchain/empty": "0.0.1",
41
+ "@0xchain/translation": "0.0.1",
42
+ "@0xchain/iconfont": "0.0.1",
43
+ "@0xchain/number-like": "0.0.1",
44
+ "@0xchain/request": "0.0.1"
45
+ },
46
+ "publishConfig": {
47
+ "access": "public"
48
+ }
49
+ }