@dappworks/kit 0.4.70 → 0.4.72

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.
@@ -5,7 +5,7 @@ import { _ } from './chunk-MGU3KYGC.mjs';
5
5
  import { cn } from './chunk-6UHBBDKI.mjs';
6
6
  import { __objRest, __spreadValues, __spreadProps } from './chunk-6F7H4PAA.mjs';
7
7
  import * as React2 from 'react';
8
- import React2__default, { useEffect, useMemo, useState } from 'react';
8
+ import React2__default, { useRef, useEffect, useState } from 'react';
9
9
  import { observer, useLocalObservable } from 'mobx-react-lite';
10
10
  import { Dropdown, DropdownTrigger, DropdownMenu, DropdownItem, Pagination, Card, Divider, Button } from '@nextui-org/react';
11
11
  import { ChevronDown, ChevronUp, ChevronsUpDown, ChevronRight } from 'lucide-react';
@@ -104,6 +104,7 @@ var v4_default = v4;
104
104
  // components/JSONTable/index.tsx
105
105
  var JSONTable = observer((props) => {
106
106
  const {
107
+ className,
107
108
  dataSource,
108
109
  columnOptions,
109
110
  headerKeys,
@@ -126,7 +127,8 @@ var JSONTable = observer((props) => {
126
127
  showDivider: true,
127
128
  dividerClassName: ""
128
129
  },
129
- autoScrollToTop = false
130
+ autoScrollToTop = false,
131
+ NoData = DefaultNoData
130
132
  } = props;
131
133
  const actionsHeadLabel = (actionsOptions == null ? void 0 : actionsOptions.headLabel) || "";
132
134
  const actionsPlacement = actions ? (actionsOptions == null ? void 0 : actionsOptions.placement) || "right" : void 0;
@@ -139,12 +141,10 @@ var JSONTable = observer((props) => {
139
141
  Object.assign(store, data2);
140
142
  }
141
143
  }));
144
+ const tableBoxElementId = useRef(autoScrollToTop ? `table-box-${v4_default().slice(0, 8)}` : void 0).current;
142
145
  useEffect(() => {
143
146
  const firstData = dataSource[0];
144
- if (!firstData) {
145
- return;
146
- }
147
- const allKeys = Object.keys(firstData);
147
+ const allKeys = firstData ? Object.keys(firstData) : [];
148
148
  const keys = headerKeys ? headerKeys : columnOptions ? allKeys.filter((key) => {
149
149
  var _a;
150
150
  return !((_a = columnOptions[key]) == null ? void 0 : _a.hidden);
@@ -170,7 +170,7 @@ var JSONTable = observer((props) => {
170
170
  return bOrder - aOrder;
171
171
  });
172
172
  }
173
- const extendedTables2 = extendedTableOptions.filter((item) => {
173
+ const extendedTables2 = firstData ? extendedTableOptions.filter((item) => {
174
174
  return Array.isArray(firstData[item.key]);
175
175
  }).map((item) => {
176
176
  const index = columns2.findIndex((c) => c.key === item.key);
@@ -189,7 +189,7 @@ var JSONTable = observer((props) => {
189
189
  };
190
190
  })
191
191
  };
192
- });
192
+ }) : [];
193
193
  store.setData({
194
194
  sortableColumns,
195
195
  columns: columns2,
@@ -238,14 +238,14 @@ var JSONTable = observer((props) => {
238
238
  const { columns, extendedTables, sortedData } = store;
239
239
  const needExtendedTable = !!extendedTables.length;
240
240
  const data = isServerPaging ? sortedData : sortedData.slice(pagination.offset, pagination.offset + pagination.limit);
241
- const tableBoxElementId = useMemo(() => {
242
- return autoScrollToTop ? `table-card-${v4_default().slice(0, 8)}` : void 0;
243
- }, []);
241
+ if (data.length === 0) {
242
+ return /* @__PURE__ */ React2__default.createElement(NoData, { className, columns });
243
+ }
244
244
  if (asCard) {
245
245
  return /* @__PURE__ */ React2__default.createElement(
246
246
  CardOnMobile,
247
247
  {
248
- className: props.className,
248
+ className,
249
249
  data,
250
250
  columns,
251
251
  columnOptions,
@@ -258,7 +258,7 @@ var JSONTable = observer((props) => {
258
258
  }
259
259
  );
260
260
  }
261
- return /* @__PURE__ */ React2__default.createElement(React2__default.Fragment, null, /* @__PURE__ */ React2__default.createElement("div", { className: cn("relative w-full overflow-auto h-[400px]", props.className), id: tableBoxElementId }, /* @__PURE__ */ React2__default.createElement(Table, null, /* @__PURE__ */ React2__default.createElement(TableHeader, { className: "sticky top-0" }, /* @__PURE__ */ React2__default.createElement(TableRow, { className: "bg-[#F4F4F5] dark:bg-[#3F3F45] shadow-sm" }, needExtendedTable && /* @__PURE__ */ React2__default.createElement(TableHead, null), actionsPlacement === "left" && /* @__PURE__ */ React2__default.createElement(TableHead, { className: "font-meidum text-[0.8125rem] text-[#64748B] dark:text-gray-300" }, actionsHeadLabel), columns.map((item, index) => {
261
+ return /* @__PURE__ */ React2__default.createElement(React2__default.Fragment, null, /* @__PURE__ */ React2__default.createElement("div", { className: cn("relative w-full overflow-auto h-[400px]", className), id: tableBoxElementId }, /* @__PURE__ */ React2__default.createElement(Table, null, /* @__PURE__ */ React2__default.createElement(TableHeader, { className: "sticky top-0" }, /* @__PURE__ */ React2__default.createElement(TableRow, { className: "bg-[#F4F4F5] dark:bg-[#3F3F45] shadow-sm" }, needExtendedTable && /* @__PURE__ */ React2__default.createElement(TableHead, null), actionsPlacement === "left" && /* @__PURE__ */ React2__default.createElement(TableHead, { className: "font-meidum text-[0.8125rem] text-[#64748B] dark:text-gray-300" }, actionsHeadLabel), columns.map((item, index) => {
262
262
  var _a;
263
263
  return /* @__PURE__ */ React2__default.createElement(TableHead, { className: cn("font-meidum text-[0.8125rem] text-[#64748B] dark:text-gray-300", (_a = columnOptions == null ? void 0 : columnOptions[item.key]) == null ? void 0 : _a.thClassName), key: item.key }, /* @__PURE__ */ React2__default.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ React2__default.createElement("div", { className: "text-xs" }, item.label), !!store.sortableColumns[item.key] && /* @__PURE__ */ React2__default.createElement(
264
264
  Dropdown,
@@ -447,20 +447,6 @@ function CollapseBody({
447
447
  })))));
448
448
  }))));
449
449
  }
450
- async function scrollIntoTop(tableBoxElementId) {
451
- await new Promise((resolve) => setTimeout(resolve, 500));
452
- if (tableBoxElementId) {
453
- const el = document.getElementById(tableBoxElementId);
454
- if (el) {
455
- const { top } = el.getBoundingClientRect();
456
- window.scrollTo({
457
- top: top + window.scrollY - 100,
458
- behavior: "smooth"
459
- });
460
- }
461
- }
462
- }
463
- var JSONTable_default = JSONTable;
464
450
  function CardOnMobile({
465
451
  className,
466
452
  data,
@@ -509,7 +495,26 @@ function CardOnMobile({
509
495
  }
510
496
  )));
511
497
  }
498
+ async function scrollIntoTop(tableBoxElementId) {
499
+ await new Promise((resolve) => setTimeout(resolve, 500));
500
+ if (tableBoxElementId) {
501
+ const el = document.getElementById(tableBoxElementId);
502
+ if (el) {
503
+ const { top } = el.getBoundingClientRect();
504
+ window.scrollTo({
505
+ top: top + window.scrollY - 100,
506
+ behavior: "smooth"
507
+ });
508
+ }
509
+ }
510
+ }
511
+ function TableHeaderOfNoData({ className, columns }) {
512
+ return /* @__PURE__ */ React2__default.createElement("div", { className: cn("w-full flex items-center justify-around bg-[#F4F4F5] dark:bg-[#3F3F45] shadow-sm overflow-auto", className) }, columns.map((item) => /* @__PURE__ */ React2__default.createElement("div", { key: item.key, className: "p-2 text-left font-medium text-[0.8125rem] text-[#64748B] dark:text-gray-300" }, item.label)));
513
+ }
514
+ function DefaultNoData({ className, columns }) {
515
+ return /* @__PURE__ */ React2__default.createElement(Card, { className: cn("w-full shadow-sm border dark:border-[#3e3e3e] rounded-lg", className) }, /* @__PURE__ */ React2__default.createElement(TableHeaderOfNoData, { columns }), /* @__PURE__ */ React2__default.createElement("div", { className: "w-full h-[100px] flex flex-col justify-center items-center" }, /* @__PURE__ */ React2__default.createElement("div", { className: "text-[#64748B] text-sm" }, "No Data")));
516
+ }
512
517
 
513
- export { JSONTable, JSONTable_default };
518
+ export { JSONTable, TableHeaderOfNoData };
514
519
  //# sourceMappingURL=out.js.map
515
- //# sourceMappingURL=chunk-YOCDMBRI.mjs.map
520
+ //# sourceMappingURL=chunk-TU7RMZL4.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../components/JSONTable/index.tsx","../components/ui/table.tsx","../../../node_modules/uuid/dist/esm-node/rng.js","../../../node_modules/uuid/dist/esm-node/regex.js","../../../node_modules/uuid/dist/esm-node/validate.js","../../../node_modules/uuid/dist/esm-node/stringify.js","../../../node_modules/uuid/dist/esm-node/v4.js"],"names":["React","data","columns","extendedTables","keys","sortedData","_a"],"mappings":"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","sourcesContent":["\"use client\";\n\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { observer, useLocalObservable } from \"mobx-react-lite\";\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from \"../ui/table\";\nimport JSONHighlight from \"../Common/JSONHighlight\";\nimport { Button, ButtonProps, Card, Divider, Dropdown, DropdownItem, DropdownMenu, DropdownTrigger, Pagination as NextuiPagination } from '@nextui-org/react';\nimport { ChevronDown, ChevronRight, ChevronUp, ChevronsUpDown } from \"lucide-react\";\nimport { _ } from \"../../lib/lodash\";\nimport { DialogStore } from \"../../module/Dialog\";\nimport { cn } from \"../../lib/utils\";\nimport { PaginationState } from \"../../store/standard/PaginationState\";\nimport { v4 as uuid } from 'uuid';\n\nexport type ActionButtonType = {\n props?: ButtonProps;\n children: React.ReactNode;\n};\n\nexport type ActionsOptions = {\n headLabel?: string;\n placement?: 'left' | 'right';\n className?: string;\n};\n\nexport type HeaderKeys<T extends Record<string, any>> = Array<keyof T>;\n\nexport type ColumnOptions<T extends Record<string, any>> = {\n [key in keyof T]?: {\n label?: React.ReactNode;\n hidden?: boolean;\n sortable?: boolean;\n sortKey?: string;\n order?: number;\n render?: (item: T) => any;\n thClassName?: string;\n tdClassName?: string;\n labelClassName?: string;\n valueClassName?: string;\n };\n};\n\nexport type Column<T extends Record<string, any>> = {\n key: string;\n label: React.ReactNode;\n render?: (item: T) => any;\n};\n\nexport type ExtendedTable<U> = {\n key: string;\n columns: Column<U>[];\n};\n\nexport type ActionsType<T> = (item: T) => ActionButtonType[] | React.ReactNode;\n\nexport type CardOptions = {\n boxClassName?: string;\n cardClassName?: string;\n itemClassName?: string;\n showDivider?: boolean;\n dividerClassName?: string;\n};\n\nexport interface JSONTableProps<T extends Record<string, any>> {\n className?: string;\n dataSource: T[];\n columnOptions?: ColumnOptions<T>;\n headerKeys?: HeaderKeys<T>;\n isServerPaging?: boolean;\n extendedTableOptions?: {\n key: keyof T;\n columnOptions: ColumnOptions<any>;\n }[];\n rowKey?: string;\n pagination?: PaginationState;\n onRowClick?: (item: T) => void;\n rowCss?: string | ((item: T) => string | undefined);\n actions?: ActionsType<T>;\n actionsOptions?: ActionsOptions;\n asCard?: boolean;\n cardOptions?: CardOptions;\n autoScrollToTop?: boolean;\n NoData?: ({ className, columns }: { className?: string; columns: Column<T>[] }) => React.ReactNode;\n}\n\nexport const JSONTable = observer(<T extends Record<string, any>>(props: JSONTableProps<T>) => {\n const {\n className,\n dataSource,\n columnOptions,\n headerKeys,\n isServerPaging,\n pagination = new PaginationState({\n page: 1,\n limit: 8,\n }),\n extendedTableOptions = [],\n rowKey = 'id',\n onRowClick,\n rowCss,\n actions,\n actionsOptions,\n asCard = false,\n cardOptions = {\n boxClassName: '',\n cardClassName: '',\n itemClassName: '',\n showDivider: true,\n dividerClassName: '',\n },\n autoScrollToTop = false,\n NoData = DefaultNoData,\n } = props;\n\n const actionsHeadLabel = actionsOptions?.headLabel || '';\n const actionsPlacement = actions ? actionsOptions?.placement || 'right' : undefined;\n\n const store = useLocalObservable<{\n columns: Column<T>[],\n sortableColumns: { [k: string]: 'asc' | 'desc' | 'none' };\n sortedData: T[];\n extendedTables: ExtendedTable<any>[];\n setData: (data: Partial<typeof store>) => void;\n }>(() => ({\n columns: [],\n sortableColumns: {},\n sortedData: [],\n extendedTables: [],\n setData(data: Partial<typeof store>) {\n Object.assign(store, data);\n },\n }));\n\n const tableBoxElementId = useRef(autoScrollToTop ? `table-box-${uuid().slice(0, 8)}` : undefined).current;\n\n useEffect(() => {\n const firstData = dataSource[0];\n\n const allKeys = firstData ? Object.keys(firstData) : [];\n const keys = headerKeys ? headerKeys : columnOptions ? allKeys.filter((key) => !columnOptions[key]?.hidden) : allKeys;\n\n const sortableColumns: { [k: string]: 'asc' | 'desc' | 'none' } = {};\n\n const columns: Column<T>[] = keys\n .map((key: string) => {\n const sortable = columnOptions?.[key]?.sortable;\n if (sortable) {\n sortableColumns[key] = 'none';\n }\n return {\n key,\n label: columnOptions?.[key]?.label || key,\n render: columnOptions?.[key]?.render,\n };\n })\n\n if (!headerKeys && columnOptions) {\n columns.sort((a, b) => {\n const aOrder = columnOptions[a.key]?.order || 0;\n const bOrder = columnOptions[b.key]?.order || 0;\n return bOrder - aOrder;\n });\n }\n\n const extendedTables = firstData ? extendedTableOptions\n .filter((item) => {\n return Array.isArray(firstData[item.key])\n })\n .map((item) => {\n const index = columns.findIndex((c) => c.key === item.key);\n if (index > -1) {\n columns.splice(index, 1);\n }\n\n const keys = Object.keys(item.columnOptions);\n return {\n key: item.key as string,\n columns: keys.map((k) => {\n const option = item.columnOptions[k];\n return {\n key: k,\n label: option?.label || k,\n render: option?.render,\n };\n }),\n };\n }) : [];\n\n store.setData({\n sortableColumns,\n columns,\n extendedTables,\n sortedData: dataSource,\n });\n\n if (!isServerPaging) {\n pagination.setData({\n total: dataSource.length,\n });\n }\n }, [dataSource, columnOptions]);\n\n const onSort = ({ sortKey, key, type }: { sortKey: string; key: string; type: 'asc' | 'desc' | 'none' }) => {\n const sortableColumns: { [k: string]: 'asc' | 'desc' | 'none' } = {};\n Object.keys(store.sortableColumns).map((k) => {\n sortableColumns[k] = k === key ? type : 'none';\n });\n\n let sortedData = dataSource;\n if (type !== 'none') {\n const result = _.orderBy(\n dataSource,\n (o) => {\n const v = _.get(o, sortKey || key);\n if (v == null) {\n return type === 'desc' ? '' : v;\n }\n if (typeof v === 'string') {\n const _v = Number(v);\n if (isNaN(_v)) {\n return v.toLowerCase();\n } else {\n return _v;\n }\n }\n return v;\n },\n type,\n );\n sortedData = result;\n }\n\n store.setData({\n sortableColumns,\n sortedData,\n });\n };\n\n const { columns, extendedTables, sortedData } = store;\n const needExtendedTable = !!extendedTables.length;\n const data = isServerPaging ? sortedData : sortedData.slice(pagination.offset, pagination.offset + pagination.limit);\n\n if (data.length === 0) {\n return <NoData className={className} columns={columns} />;\n }\n\n if (asCard) {\n return (\n <CardOnMobile\n className={className}\n data={data}\n columns={columns}\n columnOptions={columnOptions}\n actions={actions}\n actionsOptions={actionsOptions}\n cardOptions={cardOptions}\n pagination={pagination}\n onRowClick={onRowClick}\n tableBoxElementId={tableBoxElementId}\n />\n );\n }\n\n return (\n <>\n <div className={cn('relative w-full overflow-auto h-[400px]', className)} id={tableBoxElementId}>\n <Table>\n <TableHeader className=\"sticky top-0\">\n <TableRow className=\"bg-[#F4F4F5] dark:bg-[#3F3F45] shadow-sm\">\n {needExtendedTable && <TableHead></TableHead>}\n {actionsPlacement === 'left' && <TableHead className=\"font-meidum text-[0.8125rem] text-[#64748B] dark:text-gray-300\">{actionsHeadLabel}</TableHead>}\n {columns.map((item, index) => (\n <TableHead className={cn('font-meidum text-[0.8125rem] text-[#64748B] dark:text-gray-300', columnOptions?.[item.key]?.thClassName)} key={item.key}>\n <div className=\"flex items-center\">\n <div className=\"text-xs\">{item.label}</div>\n {!!store.sortableColumns[item.key] && (\n <Dropdown\n showArrow\n backdrop=\"opaque\"\n placement=\"bottom\"\n >\n <DropdownTrigger>\n <div className=\"cursor-pointer\">\n {store.sortableColumns[item.key] === 'desc' && <ChevronDown size={14} />}\n {store.sortableColumns[item.key] === 'asc' && <ChevronUp size={14} />}\n {store.sortableColumns[item.key] === 'none' && <ChevronsUpDown size={14} />}\n </div>\n </DropdownTrigger>\n <DropdownMenu selectionMode=\"single\" selectedKeys={[store.sortableColumns[item.key]]}>\n <DropdownItem\n key=\"asc\"\n onClick={() => {\n onSort({\n type: 'asc',\n key: item.key,\n sortKey: columnOptions?.[item.key]?.sortKey,\n });\n }}\n >\n <span className=\"text-sm font-bold\">Sort ascending</span>\n </DropdownItem>\n <DropdownItem\n key=\"desc\"\n onClick={() => {\n onSort({\n type: 'desc',\n key: item.key,\n sortKey: columnOptions?.[item.key]?.sortKey,\n });\n }}\n >\n <span className=\"text-sm font-bold\">Sort descending</span>\n </DropdownItem>\n <DropdownItem\n key=\"none\"\n onClick={() => {\n onSort({\n type: 'none',\n key: item.key,\n sortKey: columnOptions?.[item.key]?.sortKey,\n });\n }}\n >\n <span className=\"text-sm font-bold\">Sort none</span>\n </DropdownItem>\n </DropdownMenu>\n </Dropdown>\n )}\n </div>\n </TableHead>\n ))}\n {actionsPlacement === 'right' && <TableHead className=\"font-meidum text-[0.8125rem] text-[#64748B] dark:text-gray-300\">{actionsHeadLabel}</TableHead>}\n </TableRow>\n </TableHeader>\n <TableBody>\n {data.map((item, index) =>\n needExtendedTable ? (\n <CollapseBody key={item[rowKey] || index} item={item} columns={columns} extendedTables={extendedTables} rowCss={rowCss} actions={actions} actionsPlacement={actionsPlacement} />\n ) : (\n <Body\n key={item[rowKey] || index}\n item={item}\n columns={columns}\n columnOptions={columnOptions}\n onRowClick={onRowClick}\n rowCss={rowCss}\n actions={actions}\n actionsPlacement={actionsPlacement}\n />\n ),\n )}\n </TableBody>\n </Table>\n </div>\n {pagination.total > pagination.limit && (\n <div className=\"flex justify-center h-[30px] mt-4\">\n <NextuiPagination\n showControls\n size=\"sm\"\n radius=\"sm\"\n total={Math.ceil(pagination.total / pagination.limit)}\n page={pagination.page}\n initialPage={1}\n onChange={(currentPage) => {\n pagination.setData({\n page: currentPage,\n });\n scrollIntoTop(tableBoxElementId);\n }}\n />\n </div>\n )}\n </>\n );\n});\n\nfunction ActionButton({ props, children }: ActionButtonType) {\n return <Button {...props}>{children}</Button>;\n}\n\nfunction renderFieldValue(v: any) {\n if (typeof v == 'string' || typeof v == 'number') {\n return v;\n }\n if (v == null) {\n return null;\n }\n return (\n <p\n className=\"cursor-pointer\"\n onClick={(e) => {\n e.stopPropagation();\n DialogStore.show({\n content: <JSONHighlight className=\"w-full lg:w-[900px]\" jsonStr={JSON.stringify(v, null, 2)} />,\n });\n }}\n >\n {JSON.stringify(v).slice(0, 50) + '...'}\n </p>\n );\n}\n\nfunction Actions<T>({ actions, actionsOptions, item, asCard }: { item: T; actions?: ActionsType<T>; actionsOptions?: ActionsOptions; asCard?: boolean }) {\n if (!actions) {\n return null;\n }\n\n const Com = actions(item);\n if (Array.isArray(Com)) {\n if (asCard) {\n return (\n <div className={cn('w-full flex items-center space-x-2', actionsOptions?.className)}>\n {Com.map((btn, index) => (\n <ActionButton key={index} props={btn.props} children={btn.children} />\n ))}\n </div>\n );\n }\n return (\n <TableCell className=\"max-w-[200px] overflow-auto space-x-2\">\n {Com.map((btn, index) => (\n <ActionButton key={index} props={btn.props} children={btn.children} />\n ))}\n </TableCell>\n );\n }\n\n if (asCard) {\n return <div className={cn('w-full flex items-center space-x-2', actionsOptions?.className)}>{Com}</div>;\n }\n return <TableCell className=\"max-w-[200px] overflow-auto space-x-2\">{Com}</TableCell>;\n}\n\nfunction Body<T>({\n item,\n columns,\n columnOptions,\n onRowClick,\n rowCss,\n actions,\n actionsPlacement,\n}: {\n item: T;\n columns: Column<T>[];\n columnOptions?: ColumnOptions<T>;\n onRowClick?: (item: T) => void;\n rowCss?: string | ((item: T) => string | undefined);\n actions?: ActionsType<T>;\n actionsPlacement?: 'left' | 'right';\n}) {\n return (\n <TableRow\n className={cn('text-[0.8125rem] hover:bg-[#f6f6f9] dark:hover:bg-[#19191c]', typeof rowCss === 'function' ? rowCss(item) : rowCss)}\n onClick={() => {\n onRowClick?.(item);\n }}\n >\n {actionsPlacement === 'left' && <Actions item={item} actions={actions} />}\n {columns.map((column) => {\n return (\n <TableCell key={column.key} className={cn('max-w-[200px] overflow-auto', columnOptions?.[column.key]?.tdClassName)}>\n {column.render\n ? column.render(item)\n : renderFieldValue(item[column.key])}\n </TableCell>\n );\n })}\n {actionsPlacement === 'right' && <Actions item={item} actions={actions} />}\n </TableRow>\n );\n}\n\nfunction CollapseBody<T>({ item,\n columns,\n extendedTables,\n rowCss,\n actions,\n actionsPlacement }: {\n item: T;\n columns: Column<T>[];\n extendedTables: ExtendedTable<any>[];\n rowCss?: string | ((item: T) => string | undefined);\n actions?: ActionsType<T>;\n actionsPlacement?: 'left' | 'right';\n }) {\n const [isOpen, setIsOpen] = useState(false);\n return (\n <>\n <TableRow\n className={cn('text-[0.8125rem] cursor-pointer hover:bg-[#f6f6f9] dark:hover:bg-[#19191c]', typeof rowCss === 'function' ? rowCss(item) : rowCss)}\n onClick={(e: any) => {\n const { nodeName } = e.target;\n if (nodeName === 'TD' || nodeName === 'svg') {\n setIsOpen((v) => !v);\n }\n }}\n >\n <TableCell className=\"w-10\">{isOpen ? <ChevronDown size={18} /> : <ChevronRight size={18} />}</TableCell>\n {actionsPlacement === 'left' && <Actions item={item} actions={actions} />}\n {columns.map((column) => {\n return (\n <TableCell key={column.key} className=\"max-w-[200px] overflow-auto\">\n {column.render\n ? column.render(item)\n : renderFieldValue(item[column.key])}\n </TableCell>\n );\n })}\n {actionsPlacement === 'right' && <Actions item={item} actions={actions} />}\n </TableRow>\n <TableRow className={cn(isOpen ? 'table-row' : 'hidden')}>\n <TableCell></TableCell>\n <TableCell colSpan={columns.length}>\n {extendedTables.map((ex) => {\n const exColumns = ex.columns;\n const exRow = item[ex.key];\n return (\n <Table className=\"mt-[10px]\" key={ex.key}>\n <TableHeader>\n <TableRow className=\"bg-[#F4F4F5] dark:bg-[#3F3F45]\">\n {exColumns.map((exC) => {\n return (\n <TableHead key={exC.key} className=\"text-[0.8125rem] text-[#64748B] dark:text-gray-300\">\n {exC.label}\n </TableHead>\n );\n })}\n </TableRow>\n </TableHeader>\n <TableBody>\n {exRow.map((exItem) => (\n <TableRow className=\"text-[0.8125rem] hover:bg-[#f6f6f9] dark:hover:bg-[#19191c]\" key={exItem.key}>\n {exColumns.map((exC) => {\n return (\n <TableCell key={exC.key} className=\"max-w-[200px] overflow-auto\">\n {exC.render\n ? exC.render({\n ...exItem,\n $parent: item,\n })\n : renderFieldValue(exItem[exC.key])}\n </TableCell>\n );\n })}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n );\n })}\n </TableCell>\n </TableRow>\n </>\n );\n}\n\nfunction CardOnMobile<T>({\n className,\n data,\n columns,\n columnOptions,\n rowKey,\n actions,\n actionsOptions,\n cardOptions,\n pagination,\n onRowClick,\n tableBoxElementId,\n}: {\n className?: string;\n data: T[];\n columns: Column<T>[];\n columnOptions?: ColumnOptions<T>;\n rowKey?: string;\n actions?: ActionsType<T>;\n actionsOptions?: ActionsOptions;\n cardOptions?: CardOptions;\n pagination: PaginationState;\n onRowClick?: (item: T) => void;\n tableBoxElementId?: string;\n}) {\n return (\n <div className={className} id={tableBoxElementId}>\n <div className={cn('space-y-2', cardOptions?.boxClassName)}>\n {data.map((item, index) => {\n return (\n <Card\n key={item[rowKey] || index}\n className={cn('w-full shadow-none p-4', cardOptions?.cardClassName)}\n isPressable={!!onRowClick}\n onPress={() => {\n onRowClick?.(item);\n }}\n >\n {columns.map((column, i) => {\n const option = columnOptions?.[column.key];\n return (\n <div className=\"w-full\" key={column.key}>\n <div className={cn('w-full', cardOptions?.itemClassName)}>\n <div className={cn('font-meidum text-[0.8125rem] text-[#64748B] dark:text-gray-300', option?.labelClassName)}>{column.label}</div>\n <div className={cn('text-[0.8125rem]', option?.valueClassName)}>{column.render ? column.render(item) : renderFieldValue(item[column.key])}</div>\n </div>\n {cardOptions?.showDivider && i !== columns.length - 1 && <Divider className={cn('my-2', cardOptions?.dividerClassName)} />}\n </div>\n );\n })}\n <Actions asCard item={item} actions={actions} actionsOptions={actionsOptions} />\n </Card>\n );\n })}\n </div>\n {pagination.total > pagination.limit && (\n <div className=\"flex justify-center h-[30px] mt-4\">\n <NextuiPagination\n showControls\n size=\"sm\"\n radius=\"sm\"\n total={Math.ceil(pagination.total / pagination.limit)}\n page={pagination.page}\n initialPage={1}\n onChange={(currentPage) => {\n pagination.setData({\n page: currentPage,\n });\n scrollIntoTop(tableBoxElementId);\n }}\n />\n </div>\n )}\n </div>\n );\n}\n\nasync function scrollIntoTop(tableBoxElementId?: string) {\n await new Promise((resolve) => setTimeout(resolve, 500));\n if (tableBoxElementId) {\n const el = document.getElementById(tableBoxElementId);\n if (el) {\n const { top } = el.getBoundingClientRect();\n window.scrollTo({\n top: top + window.scrollY - 100,\n behavior: 'smooth',\n });\n }\n }\n}\n\nexport function TableHeaderOfNoData<T>({ className, columns }: { className?: string; columns: Column<T>[] }) {\n return (\n <div className={cn('w-full flex items-center justify-around bg-[#F4F4F5] dark:bg-[#3F3F45] shadow-sm overflow-auto', className)}>\n {columns.map((item) => (\n <div key={item.key} className=\"p-2 text-left font-medium text-[0.8125rem] text-[#64748B] dark:text-gray-300\">\n {item.label}\n </div>\n ))}\n </div>\n );\n}\n\nfunction DefaultNoData<T>({ className, columns }: { className?: string; columns: Column<T>[] }) {\n return (\n <Card className={cn('w-full shadow-sm border dark:border-[#3e3e3e] rounded-lg', className)}>\n <TableHeaderOfNoData columns={columns} />\n <div className=\"w-full h-[100px] flex flex-col justify-center items-center\">\n <div className=\"text-[#64748B] text-sm\">No Data</div>\n </div>\n </Card>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nconst Table = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement>>(({ className, ...props }, ref) => (\n <table ref={ref} className={cn('w-full caption-bottom text-sm', className)} {...props} />\n));\nTable.displayName = 'Table';\n\nconst TableHeader = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn('', className)} {...props} />\n));\nTableHeader.displayName = 'TableHeader';\n\nconst TableBody = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn('[&_tr:last-child]:border-0', className)} {...props} />\n));\nTableBody.displayName = 'TableBody';\n\nconst TableFooter = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(({ className, ...props }, ref) => (\n <tfoot ref={ref} className={cn('bg-primary font-medium text-primary-foreground', className)} {...props} />\n));\nTableFooter.displayName = 'TableFooter';\n\nconst TableRow = React.forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTMLTableRowElement>>(({ className, ...props }, ref) => (\n <tr ref={ref} className={cn('', className)} {...props} />\n));\nTableRow.displayName = 'TableRow';\n\nconst TableHead = React.forwardRef<HTMLTableCellElement, React.ThHTMLAttributes<HTMLTableCellElement>>(({ className, ...props }, ref) => (\n <th ref={ref} className={cn('h-8 px-2 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0', className)} {...props} />\n));\nTableHead.displayName = 'TableHead';\n\nconst TableCell = React.forwardRef<HTMLTableCellElement, React.TdHTMLAttributes<HTMLTableCellElement>>(({ className, ...props }, ref) => (\n <td ref={ref} className={cn('p-2 align-middle [&:has([role=checkbox])]:pr-0', className)} {...props} />\n));\nTableCell.displayName = 'TableCell';\n\nconst TableCaption = React.forwardRef<HTMLTableCaptionElement, React.HTMLAttributes<HTMLTableCaptionElement>>(({ className, ...props }, ref) => (\n <caption ref={ref} className={cn('mt-4 text-sm text-muted-foreground', className)} {...props} />\n));\nTableCaption.displayName = 'TableCaption';\n\nexport { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption };\n","import crypto from 'crypto';\nconst rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate\n\nlet poolPtr = rnds8Pool.length;\nexport default function rng() {\n if (poolPtr > rnds8Pool.length - 16) {\n crypto.randomFillSync(rnds8Pool);\n poolPtr = 0;\n }\n\n return rnds8Pool.slice(poolPtr, poolPtr += 16);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;"]}
@@ -1,9 +1,49 @@
1
1
  import { _ } from './chunk-MGU3KYGC.mjs';
2
- import BN from 'bignumber.js';
2
+ import BN, { BigNumber } from 'bignumber.js';
3
3
  import JSONFormat from 'json-format';
4
4
  import copy from 'copy-to-clipboard';
5
5
  import numeral from 'numeral';
6
+ import { from } from '@iotexproject/iotex-address-ts';
7
+ import { makeAutoObservable } from 'mobx';
6
8
 
9
+ var BigNumberState = class {
10
+ constructor(args) {
11
+ this.value = new BN(0);
12
+ this.loading = false;
13
+ this.decimals = 18;
14
+ this.fixed = 6;
15
+ Object.assign(this, args);
16
+ makeAutoObservable(this, {
17
+ getFormat: false
18
+ });
19
+ }
20
+ get format() {
21
+ if (this.loading)
22
+ return "...";
23
+ return this.getFormat();
24
+ }
25
+ getFormat({ decimals = this.decimals, fixed = this.fixed } = {}) {
26
+ if (this.loading)
27
+ return "...";
28
+ if (this.formatter)
29
+ return this.formatter(this);
30
+ return helper.number.toPrecisionFloor(new BN(this.value).dividedBy(10 ** decimals).toFixed(), {
31
+ decimals: fixed
32
+ });
33
+ }
34
+ setDecimals(decimals) {
35
+ this.decimals = decimals;
36
+ }
37
+ setValue(value) {
38
+ this.value = value;
39
+ this.setLoading(false);
40
+ }
41
+ setLoading(val) {
42
+ this.loading = val;
43
+ }
44
+ };
45
+
46
+ // lib/helper.ts
7
47
  var valMap = {
8
48
  undefined: "",
9
49
  null: "",
@@ -229,10 +269,90 @@ var helper = {
229
269
  return helper.number.numberWithCommas(Number(new BN(result).toFixed()));
230
270
  }
231
271
  return new BN(result).toFixed();
272
+ },
273
+ //format: '0,0'
274
+ warpBigNumber(value, decimals = 18, options) {
275
+ const { format = "0.0", fallback = "0.000", min } = options || {};
276
+ if (!value) {
277
+ return {
278
+ value: "...",
279
+ format: "...",
280
+ decimals: "0",
281
+ isZero: true
282
+ };
283
+ }
284
+ const BigNumberResponse = new BigNumberState({ value: new BigNumber(value), decimals });
285
+ return {
286
+ value: BigNumberResponse.value.toFixed(0),
287
+ originFormat: BigNumberResponse.value.div(10 ** decimals).toFixed(),
288
+ format: helper.number.numberFormat(BigNumberResponse.value.div(10 ** decimals).toFixed(), format, { fallback, min }),
289
+ decimals: String(BigNumberResponse.decimals),
290
+ isZero: BigNumberResponse.value.isZero()
291
+ };
292
+ },
293
+ //http://numeraljs.com/ format params does not need to deal with decimal places
294
+ //format: '$0,0' '0a' '0,0' '0,0$'
295
+ numberFormat(str, format = "0,0", options = {}) {
296
+ var _a, _b;
297
+ const { fallback = "0.00" } = options || {};
298
+ if (!str || isNaN(Number(str)))
299
+ return fallback;
300
+ const numStr = new BigNumber(str).toFixed();
301
+ const countNonZeroNumbers = (_str) => {
302
+ const decimalPointIndex = _str.indexOf(".");
303
+ if (decimalPointIndex === -1) {
304
+ return 0;
305
+ }
306
+ const decimalPart = _str.substring(decimalPointIndex + 1);
307
+ let trailingZerosCount = 0;
308
+ for (let i = 0; i < decimalPart.length; i++) {
309
+ if (decimalPart[i] === "0") {
310
+ trailingZerosCount++;
311
+ } else {
312
+ break;
313
+ }
314
+ }
315
+ return trailingZerosCount;
316
+ };
317
+ const fractionDigits = countNonZeroNumbers(format);
318
+ const numberFractionDigits = countNonZeroNumbers(numStr);
319
+ if (options == null ? void 0 : options.min) {
320
+ if (new BigNumber(numStr).isLessThan(new BigNumber((options == null ? void 0 : options.min) || 0))) {
321
+ return `< ${numeral(options == null ? void 0 : options.min).format(format)}`;
322
+ }
323
+ }
324
+ const fullStr = new BigNumber(numStr).toFixed();
325
+ let preStr = numeral(fullStr.split(".")[0]).format(format.split(".")[0]);
326
+ const fractionStr = (_b = (_a = fullStr.split(".")) == null ? void 0 : _a[1]) == null ? void 0 : _b.slice(0, fractionDigits + numberFractionDigits);
327
+ if (numberFractionDigits >= fractionDigits) {
328
+ return (preStr + "." + fractionStr).replace(/\.?0+$/, "");
329
+ }
330
+ if ((fractionStr == null ? void 0 : fractionStr[fractionDigits - 1]) == "9") {
331
+ return (preStr + "." + fractionStr.slice(0, fractionDigits - 1) + "9").replace(/\.?0+$/, "");
332
+ }
333
+ const resultStr = numeral(new BigNumber(numStr).toString()).format(format);
334
+ return resultStr.replace(/\.?0+$/, "");
232
335
  }
336
+ },
337
+ address: {
338
+ convertAddress: (addressMode, address = "") => {
339
+ try {
340
+ if (addressMode == "0x" && helper.address.validateIoAddress(address)) {
341
+ return from(address).stringEth();
342
+ }
343
+ if (addressMode == "io" && helper.address.validateEthAddress(address)) {
344
+ return from(address).string();
345
+ }
346
+ } catch (error) {
347
+ }
348
+ return address;
349
+ },
350
+ validateEthAddress: (address) => /^0x[a-fA-F0-9]{40}$/.test(address),
351
+ validateIoAddress: (address) => /^io[a-zA-Z0-9]{39}$/.test(address),
352
+ validateAddress: (address) => helper.address.validateEthAddress(address) || helper.address.validateIoAddress(address)
233
353
  }
234
354
  };
235
355
 
236
- export { helper };
356
+ export { BigNumberState, helper };
237
357
  //# sourceMappingURL=out.js.map
238
- //# sourceMappingURL=chunk-66N3D7MI.mjs.map
358
+ //# sourceMappingURL=chunk-XAIZMT2F.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../lib/helper.ts","../store/standard/BigNumberState.ts"],"names":["BigNumber"],"mappings":"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","sourcesContent":["import BN, { BigNumber } from \"bignumber.js\";\nimport JSONFormat from \"json-format\";\nimport { _ } from \"./lodash\";\nimport copy from \"copy-to-clipboard\";\nimport numeral from \"numeral\";\nimport { from } from \"@iotexproject/iotex-address-ts\";\nimport { BigNumberState } from \"../store/standard/BigNumberState\";\n\nconst valMap = {\n undefined: \"\",\n null: \"\",\n false: false,\n};\n\nexport const helper = {\n env: {\n isIopayMobile: () => navigator.userAgent && (navigator.userAgent.includes(\"IoPayAndroid\") || navigator.userAgent.includes(\"IoPayiOs\")),\n isBrowser: () => typeof window === \"object\",\n onBrowser(func) {\n if (this.isBrowser()) {\n func();\n }\n },\n },\n promise: {\n async sleep(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n },\n async runAsync<T, U = Error>(promise: Promise<T>): Promise<[U | null, T | null]> {\n return promise.then<[null, T]>((data: T) => [null, data]).catch<[U, null]>((err) => [err, null]);\n },\n },\n object: {\n crawlObject(object, options) {\n const newObj = JSON.parse(JSON.stringify(object));\n return helper.object.crawl(newObj, options);\n },\n crawl(object, options) {\n Object.keys(object).forEach((i) => {\n if (typeof object[i] === \"object\") {\n helper.object.crawl(object[i], options);\n } else {\n const handler = options[typeof object[i]];\n if (handler) {\n object[i] = handler(object[i]);\n }\n }\n });\n return object;\n },\n },\n json: {\n isJsonString(str: string) {\n if (!str || typeof str !== \"string\") return false;\n if (!str?.includes(\"{\")) return false;\n try {\n JSON.parse(str);\n } catch (e) {\n return false;\n }\n return true;\n },\n safeParse(val: any) {\n try {\n return JSON.parse(val);\n } catch (error) {\n return val;\n }\n },\n },\n deepAssign(target, ...sources) {\n sources.forEach((source) => {\n Object.keys(source).forEach((key) => {\n let descriptor = Object.getOwnPropertyDescriptor(source, key);\n if (descriptor && descriptor?.get) {\n return Object.defineProperty(target, key, descriptor);\n }\n const targetValue = target[key];\n let sourceValue = source[key];\n if (helper.isObject(targetValue) && helper.isObject(sourceValue)) {\n try {\n target[key] = helper.deepAssign(targetValue, sourceValue);\n } catch (e) {\n target[key] = Object.assign(targetValue, sourceValue);\n }\n } else {\n target[key] = sourceValue;\n }\n });\n });\n return target;\n },\n isObject(value) {\n return value != null && typeof value === \"object\";\n },\n deepMerge(obj, newObj) {\n const newVal = _.mergeWith(obj, newObj, (...args) => {\n const [objValue, srcValue] = args;\n if (typeof srcValue === \"object\") {\n return helper.deepMerge(objValue, srcValue);\n }\n return srcValue || valMap[srcValue];\n });\n return newVal;\n },\n img: {\n parse(src: string | undefined) {\n if (!src) return \"/img-404.svg\";\n if (src?.startsWith(\"ipfs\")) {\n return \"https://ipfs.io/ipfs/\" + src.split(\"://\")[1];\n }\n return src;\n },\n },\n string: {\n copy(str: string) {\n copy(str);\n },\n fristUpper(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n },\n firstUpperCase(str: string) {\n return str.replace(/^\\S/, (s) => s.toUpperCase());\n },\n toFixString(str, length) {\n if (str && str.length > length) {\n return str.substr(0, length) + \"...\";\n } else {\n return str;\n }\n },\n truncate(fullStr = \"\", strLen, separator) {\n if (fullStr.length <= strLen) return fullStr;\n\n separator = separator || \"...\";\n\n var sepLen = separator.length,\n charsToShow = strLen - sepLen,\n frontChars = Math.ceil(charsToShow / 2),\n backChars = Math.floor(charsToShow / 2);\n\n return fullStr.substr(0, frontChars) + separator + fullStr.substr(fullStr.length - backChars);\n },\n validAbi(abi: string): { abi: any[]; address: string } {\n try {\n JSON.parse(abi);\n const _abi = helper.json.safeParse(abi);\n if (!_abi) {\n return { abi: [], address: \"\" };\n }\n if (Array.isArray(_abi)) {\n return { abi: _abi, address: \"\" };\n } else if (_abi.abi && _abi.address) {\n return { abi: _abi.abi, address: _abi.address };\n } else if (_abi.abi && !_abi.addresses) {\n return { abi: _abi.abi, address: \"\" };\n }\n return { abi: [], address: \"\" };\n } catch (error) {\n return { abi: [], address: \"\" };\n }\n },\n random(count: number) {\n const chars = \"abcdefghijklmnopqrstuvwxyz\";\n let result = \"\";\n for (let i = 0; i < count; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n return result;\n },\n },\n download: {\n downloadByBlob(name: string, blob: Blob) {\n const a = document.createElement(\"a\");\n const href = window.URL.createObjectURL(blob);\n a.href = href;\n a.download = name;\n a.click();\n },\n downloadJSON(name: string, jsonObj: object) {\n try {\n const jsonStr: string = JSONFormat(jsonObj);\n const blob = new Blob([jsonStr], { type: \"application/json\" });\n this.downloadByBlob(name + \".json\", blob);\n } catch (error) {\n console.error(error);\n }\n },\n },\n number: {\n countNonZeroNumbers: (str: string) => {\n let index = 0;\n const length = str.length;\n for (; index < length && (str[index] === \"0\" || str[index] === \".\"); index += 1);\n return length - index - Number(str.includes(\".\"));\n },\n numberWithCommas(num: number) {\n return num.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n },\n getBN: (value: number | string | BN) => {\n return value instanceof BN ? value : typeof value === \"string\" ? new BN(Number(value)) : new BN(value);\n },\n toPrecisionFloor: (str: number | string, options?: { decimals?: number; format?: string; toLocalString?: boolean }) => {\n const { decimals = 6, format = \"\", toLocalString = false } = options || {};\n if (!str || isNaN(Number(str))) return \"\";\n\n if (helper.number.countNonZeroNumbers(String(str)) <= decimals) return String(str);\n const numStr = new BN(str).toFixed();\n let result = \"\";\n let index = 0;\n const numLength = numStr.length;\n\n for (; numStr[index] === \"0\" && index < numLength; index += 1);\n\n if (index === numLength) return \"0\";\n\n if (numStr[index] === \".\") {\n // number < 0\n result = \"0\";\n for (; (numStr[index] === \"0\" || numStr[index] === \".\") && index < numLength; index += 1) {\n result = result + numStr[index];\n }\n }\n let resultNumLength = 0;\n for (; index < numLength && (resultNumLength < decimals || !result.includes(\".\")); index += 1) {\n result = result + numStr[index];\n\n if (numStr[index] !== \".\") resultNumLength += 1;\n }\n if (format) {\n return numeral(Number(result)).format(format);\n }\n\n if (toLocalString) {\n return helper.number.numberWithCommas(Number(new BN(result).toFixed()));\n }\n\n return new BN(result).toFixed();\n },\n\n //format: '0,0'\n warpBigNumber(value: string, decimals = 18, options?: { format?: string; fallback?: string; min?: number }) {\n const { format = \"0.0\", fallback = \"0.000\", min } = options || {};\n if (!value) {\n return {\n value: \"...\",\n format: \"...\",\n decimals: \"0\",\n isZero: true,\n };\n }\n const BigNumberResponse = new BigNumberState({ value: new BigNumber(value), decimals });\n return {\n value: BigNumberResponse.value.toFixed(0),\n originFormat: BigNumberResponse.value.div(10 ** decimals).toFixed(),\n format: helper.number.numberFormat(BigNumberResponse.value.div(10 ** decimals).toFixed(), format, { fallback, min }),\n decimals: String(BigNumberResponse.decimals),\n isZero: BigNumberResponse.value.isZero(),\n };\n },\n //http://numeraljs.com/ format params does not need to deal with decimal places\n //format: '$0,0' '0a' '0,0' '0,0$'\n numberFormat(str: string | number, format: string = \"0,0\", options: { min?: number; fallback?: string } = {}): string {\n const { fallback = \"0.00\" } = options || {};\n\n if (!str || isNaN(Number(str))) return fallback;\n const numStr = new BigNumber(str).toFixed();\n const countNonZeroNumbers = (_str: string) => {\n const decimalPointIndex = _str.indexOf(\".\");\n if (decimalPointIndex === -1) {\n return 0;\n }\n const decimalPart = _str.substring(decimalPointIndex + 1);\n let trailingZerosCount = 0;\n for (let i = 0; i < decimalPart.length; i++) {\n if (decimalPart[i] === \"0\") {\n trailingZerosCount++;\n } else {\n break;\n }\n }\n return trailingZerosCount;\n };\n\n const fractionDigits = countNonZeroNumbers(format);\n const numberFractionDigits = countNonZeroNumbers(numStr);\n if (options?.min) {\n if (new BigNumber(numStr).isLessThan(new BigNumber(options?.min || 0))) {\n return `< ${numeral(options?.min).format(format)}`;\n }\n }\n const fullStr = new BigNumber(numStr).toFixed();\n let preStr = numeral(fullStr.split(\".\")[0]).format(format.split(\".\")[0]);\n const fractionStr = fullStr.split(\".\")?.[1]?.slice(0, fractionDigits + numberFractionDigits);\n\n if (numberFractionDigits >= fractionDigits) {\n return (preStr + \".\" + fractionStr).replace(/\\.?0+$/, \"\");\n }\n\n if (fractionStr?.[fractionDigits - 1] == \"9\") {\n return (preStr + \".\" + fractionStr.slice(0, fractionDigits - 1) + \"9\").replace(/\\.?0+$/, \"\");\n }\n\n const resultStr = numeral(new BigNumber(numStr).toString()).format(format);\n return resultStr.replace(/\\.?0+$/, \"\");\n },\n },\n address: {\n convertAddress: (addressMode: \"io\" | \"0x\", address: string = \"\"): string => {\n try {\n if (addressMode == \"0x\" && helper.address.validateIoAddress(address)) {\n return from(address).stringEth();\n }\n if (addressMode == \"io\" && helper.address.validateEthAddress(address)) {\n return from(address).string();\n }\n } catch (error) {}\n return address;\n },\n validateEthAddress: (address: string) => /^0x[a-fA-F0-9]{40}$/.test(address),\n validateIoAddress: (address: string) => /^io[a-zA-Z0-9]{39}$/.test(address),\n validateAddress: (address: string) => helper.address.validateEthAddress(address) || helper.address.validateIoAddress(address),\n },\n};\n","import BigNumber from \"bignumber.js\";\nimport { makeAutoObservable } from \"mobx\";\nimport { helper } from \"../../lib/helper\";\n\nexport class BigNumberState {\n value = new BigNumber(0);\n loading = false;\n decimals = 18;\n fixed = 6;\n formatter?: Function;\n constructor(args: Partial<BigNumberState>) {\n Object.assign(this, args);\n makeAutoObservable(this, {\n getFormat: false,\n });\n }\n get format() {\n if (this.loading) return \"...\";\n return this.getFormat();\n }\n\n getFormat({ decimals = this.decimals, fixed = this.fixed }: { decimals?: number; fixed?: number } = {}) {\n if (this.loading) return \"...\";\n if (this.formatter) return this.formatter(this);\n return helper.number.toPrecisionFloor(new BigNumber(this.value).dividedBy(10 ** decimals).toFixed(), {\n decimals: fixed,\n });\n }\n\n setDecimals(decimals: number) {\n this.decimals = decimals;\n }\n\n setValue(value: BigNumber) {\n this.value = value;\n this.setLoading(false);\n }\n\n setLoading(val) {\n this.loading = val;\n }\n}\n"]}
package/dist/dev.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { helper } from './chunk-66N3D7MI.mjs';
1
+ import { helper } from './chunk-XAIZMT2F.mjs';
2
2
  import { _ } from './chunk-MGU3KYGC.mjs';
3
3
  import { cn } from './chunk-6UHBBDKI.mjs';
4
4
  import { __objRest, __spreadProps, __spreadValues } from './chunk-6F7H4PAA.mjs';
package/dist/form.d.mts CHANGED
@@ -1,8 +1,9 @@
1
1
  import React, { LegacyRef, Ref, Dispatch, SetStateAction } from 'react';
2
2
  import { ButtonProps, TabsProps, SlotsToClasses, ModalSlots } from '@nextui-org/react';
3
- import { UiSchema, RJSFSchema } from '@rjsf/utils';
3
+ import { UiSchema, RJSFSchema, WidgetProps } from '@rjsf/utils';
4
4
  import * as _rjsf_validator_ajv8_lib_validator from '@rjsf/validator-ajv8/lib/validator';
5
5
  import Form, { IChangeEvent } from '@rjsf/core';
6
+ import { EditorProps } from '@monaco-editor/react';
6
7
  import { S as Store, R as RootStore } from './root-766ae985.js';
7
8
  import EventEmitter from 'events';
8
9
  import 'typed-emitter';
@@ -122,6 +123,89 @@ type JSONFormProps<T = FormDataType> = {
122
123
  };
123
124
  declare const JSONForm: <T extends FormDataType>(props: JSONFormProps<T>) => React.JSX.Element;
124
125
 
126
+ type Options$4 = {
127
+ className?: string;
128
+ size: 'sm' | 'md' | 'lg';
129
+ color: 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'danger';
130
+ };
131
+ interface CheckboxWidgetProps extends WidgetProps {
132
+ options: Options$4;
133
+ }
134
+ interface CheckboxWidgetUIOptions {
135
+ "ui:widget": (props: CheckboxWidgetProps) => JSX.Element;
136
+ "ui:options": Options$4;
137
+ }
138
+ declare function CheckboxWidget({ onChange, options, label, value, disabled, schema, }: CheckboxWidgetProps): React.JSX.Element;
139
+
140
+ type Options$3 = {
141
+ editorHeight?: string;
142
+ readOnly?: boolean;
143
+ language?: string;
144
+ languageSelectorOptions?: {
145
+ label: string;
146
+ value: string;
147
+ }[];
148
+ onChangeLanguage?: (v: string) => void;
149
+ onRun?: (v: string) => void;
150
+ onMount?: EditorProps['onMount'];
151
+ jsonStrSpace?: number;
152
+ };
153
+ interface EditorWidgetProps extends WidgetProps {
154
+ options: Options$3;
155
+ }
156
+ type EditorWidgetUIOptions = {
157
+ "ui:widget": (props: EditorWidgetProps) => JSX.Element;
158
+ "ui:options": Options$3;
159
+ };
160
+ declare const EditorWidget: ({ label, options, value, required, schema, disabled, onChange }: EditorWidgetProps) => React.JSX.Element;
161
+
162
+ type Options$2 = {
163
+ className?: string;
164
+ labelPlacement?: "inside" | "outside" | "outside-left";
165
+ size: "sm" | "md" | "lg";
166
+ placeholder?: string;
167
+ };
168
+ interface InputWidgetProps extends WidgetProps {
169
+ options: Options$2;
170
+ }
171
+ interface InputWidgetUIOptions {
172
+ "ui:widget": (props: InputWidgetProps) => JSX.Element;
173
+ "ui:options": Options$2;
174
+ }
175
+ declare function InputWidget(props: InputWidgetProps): React.JSX.Element;
176
+
177
+ type Options$1 = {
178
+ className?: string;
179
+ labelPlacement?: "top" | "left";
180
+ size: "sm" | "md" | "lg";
181
+ placeholder?: string;
182
+ };
183
+ interface SelectWidgetProps extends WidgetProps {
184
+ options: Options$1;
185
+ }
186
+ interface SelectWidgetUIOptions {
187
+ "ui:widget": (props: SelectWidgetProps) => JSX.Element;
188
+ "ui:options": Options$1;
189
+ }
190
+ declare function SelectWidget(props: SelectWidgetProps): React.JSX.Element;
191
+
192
+ type Options = {
193
+ className?: string;
194
+ labelPlacement?: 'inside' | 'outside' | 'outside-left';
195
+ size: 'sm' | 'md' | 'lg';
196
+ minRows?: number;
197
+ maxRows?: number;
198
+ placeholder?: string;
199
+ };
200
+ interface TextareaWidgetProps extends WidgetProps {
201
+ options: Options;
202
+ }
203
+ interface TextareaWidgetUIOptions {
204
+ 'ui:widget': (props: TextareaWidgetProps) => JSX.Element;
205
+ 'ui:options': Options;
206
+ }
207
+ declare function TextareaWidget(props: TextareaWidgetProps): React.JSX.Element;
208
+
125
209
  interface Props {
126
210
  formState: JSONSchemaFormState<any>;
127
211
  children?: any;
@@ -130,7 +214,7 @@ declare const JSONSchemaForm: (({ children, formState }: Props) => React.JSX.Ele
130
214
  displayName: string;
131
215
  };
132
216
 
133
- declare class FormPlugin<T extends FormDataType> implements Store {
217
+ declare class ComplexFormModalStore<T extends FormDataType> implements Store {
134
218
  sid: string;
135
219
  provider: () => React.JSX.Element;
136
220
  isOpen: boolean;
@@ -153,11 +237,11 @@ declare class FormPlugin<T extends FormDataType> implements Store {
153
237
  batchSubmitButtonProps?: ButtonProps & {
154
238
  onBatchSubmit?: (formData: T, setLoading: Dispatch<SetStateAction<boolean>>) => void;
155
239
  };
156
- constructor(args?: Partial<FormPlugin<T>>);
157
- setData(v: Partial<FormPlugin<T>>): void;
240
+ constructor(args?: Partial<ComplexFormModalStore<T>>);
241
+ setData(v: Partial<ComplexFormModalStore<T>>): void;
158
242
  close(): void;
159
243
  }
160
- declare function getComplexFormData<T extends FormDataType>(v: Partial<FormPlugin<T>>): Promise<T>;
244
+ declare function getComplexFormData<T extends FormDataType>(v: Partial<ComplexFormModalStore<T>>): Promise<T>;
161
245
 
162
246
  declare class FormModalStore<T = {
163
247
  [key: string]: any;
@@ -244,4 +328,4 @@ declare class JSONViewPlugin implements Store {
244
328
  static JSONView: (props: JSONViewType) => React.JSX.Element;
245
329
  }
246
330
 
247
- export { FieldLayoutType, FormConfigType, FormDataOfKey, FormDataType, FormKey, FormLayoutType, FormModalStore, FormPlugin, JSONDataType, JSONForm, JSONFormProps, JSONSchemaForm, JSONViewPlugin, JSONViewType, LayoutConfigType, LayoutType, getComplexFormData, getFormData, getFormState, getSimpleFormData };
331
+ export { CheckboxWidget, CheckboxWidgetProps, CheckboxWidgetUIOptions, ComplexFormModalStore, EditorWidget, EditorWidgetProps, EditorWidgetUIOptions, FieldLayoutType, FormConfigType, FormDataOfKey, FormDataType, FormKey, FormLayoutType, FormModalStore, InputWidget, InputWidgetProps, InputWidgetUIOptions, JSONDataType, JSONForm, JSONFormProps, JSONSchemaForm, JSONViewPlugin, JSONViewType, LayoutConfigType, LayoutType, SelectWidget, SelectWidgetProps, SelectWidgetUIOptions, TextareaWidget, TextareaWidgetProps, TextareaWidgetUIOptions, getComplexFormData, getFormData, getFormState, getSimpleFormData };