@dappworks/kit 0.4.73 → 0.4.74

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.
@@ -267,17 +267,17 @@ var JSONTable = observer((props) => {
267
267
  }
268
268
  );
269
269
  }
270
- 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-[12px] text-[#64748B] dark:text-gray-300" }, actionsHeadLabel), columns.map((item, index) => {
270
+ 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-xs text-[#64748B] dark:text-gray-300" }, actionsHeadLabel), columns.map((item, index) => {
271
271
  var _a;
272
- return /* @__PURE__ */ React2__default.createElement(TableHead, { className: cn("font-meidum text-[12px] 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(
272
+ return /* @__PURE__ */ React2__default.createElement(TableHead, { className: cn("font-meidum text-xs 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("span", null, item.label), !!store.sortableColumns[item.key] && /* @__PURE__ */ React2__default.createElement(
273
273
  Dropdown,
274
274
  {
275
275
  showArrow: true,
276
276
  backdrop: "opaque",
277
277
  placement: "bottom"
278
278
  },
279
- /* @__PURE__ */ React2__default.createElement(DropdownTrigger, null, /* @__PURE__ */ React2__default.createElement("div", { className: "cursor-pointer" }, store.sortableColumns[item.key] === "desc" && /* @__PURE__ */ React2__default.createElement(ChevronDown, { size: 14 }), store.sortableColumns[item.key] === "asc" && /* @__PURE__ */ React2__default.createElement(ChevronUp, { size: 14 }), store.sortableColumns[item.key] === "none" && /* @__PURE__ */ React2__default.createElement(ChevronsUpDown, { size: 14 }))),
280
- /* @__PURE__ */ React2__default.createElement(DropdownMenu, { selectionMode: "single", selectedKeys: [store.sortableColumns[item.key]] }, /* @__PURE__ */ React2__default.createElement(
279
+ /* @__PURE__ */ React2__default.createElement(DropdownTrigger, null, /* @__PURE__ */ React2__default.createElement("button", { className: "outline-none p-0" }, store.sortableColumns[item.key] === "desc" && /* @__PURE__ */ React2__default.createElement(ChevronDown, { size: 14 }), store.sortableColumns[item.key] === "asc" && /* @__PURE__ */ React2__default.createElement(ChevronUp, { size: 14 }), store.sortableColumns[item.key] === "none" && /* @__PURE__ */ React2__default.createElement(ChevronsUpDown, { size: 14 }))),
280
+ /* @__PURE__ */ React2__default.createElement(DropdownMenu, { variant: "flat", selectionMode: "single", selectedKeys: [store.sortableColumns[item.key]] }, /* @__PURE__ */ React2__default.createElement(
281
281
  DropdownItem,
282
282
  {
283
283
  key: "asc",
@@ -321,7 +321,7 @@ var JSONTable = observer((props) => {
321
321
  /* @__PURE__ */ React2__default.createElement("span", { className: "text-sm font-bold" }, "Sort none")
322
322
  ))
323
323
  )));
324
- }), actionsPlacement === "right" && /* @__PURE__ */ React2__default.createElement(TableHead, { className: "font-meidum text-[12px] text-[#64748B] dark:text-gray-300" }, actionsHeadLabel))), /* @__PURE__ */ React2__default.createElement(TableBody, null, data.map(
324
+ }), actionsPlacement === "right" && /* @__PURE__ */ React2__default.createElement(TableHead, { className: "font-meidum text-xs text-[#64748B] dark:text-gray-300" }, actionsHeadLabel))), /* @__PURE__ */ React2__default.createElement(TableBody, null, data.map(
325
325
  (item, index) => needExtendedTable ? /* @__PURE__ */ React2__default.createElement(CollapseBody, { key: item[rowKey] || index, item, columns, extendedTables, rowCss, actions, actionsPlacement }) : /* @__PURE__ */ React2__default.createElement(
326
326
  Body,
327
327
  {
@@ -405,7 +405,7 @@ function Body({
405
405
  return /* @__PURE__ */ React2__default.createElement(
406
406
  TableRow,
407
407
  {
408
- className: cn("text-[12px] hover:bg-[#f6f6f9] dark:hover:bg-[#19191c]", typeof rowCss === "function" ? rowCss(item) : rowCss),
408
+ className: cn("text-xs hover:bg-[#f6f6f9] dark:hover:bg-[#19191c]", typeof rowCss === "function" ? rowCss(item) : rowCss),
409
409
  onClick: () => {
410
410
  onRowClick == null ? void 0 : onRowClick(item);
411
411
  }
@@ -430,7 +430,7 @@ function CollapseBody({
430
430
  return /* @__PURE__ */ React2__default.createElement(React2__default.Fragment, null, /* @__PURE__ */ React2__default.createElement(
431
431
  TableRow,
432
432
  {
433
- className: cn("text-[12px] cursor-pointer hover:bg-[#f6f6f9] dark:hover:bg-[#19191c]", typeof rowCss === "function" ? rowCss(item) : rowCss),
433
+ className: cn("text-xs cursor-pointer hover:bg-[#f6f6f9] dark:hover:bg-[#19191c]", typeof rowCss === "function" ? rowCss(item) : rowCss),
434
434
  onClick: (e) => {
435
435
  const { nodeName } = e.target;
436
436
  if (nodeName === "TD" || nodeName === "svg") {
@@ -448,8 +448,8 @@ function CollapseBody({
448
448
  const exColumns = ex.columns;
449
449
  const exRow = item[ex.key];
450
450
  return /* @__PURE__ */ React2__default.createElement(Table, { className: "mt-[10px]", key: ex.key }, /* @__PURE__ */ React2__default.createElement(TableHeader, null, /* @__PURE__ */ React2__default.createElement(TableRow, { className: "bg-[#F4F4F5] dark:bg-[#3F3F45]" }, exColumns.map((exC) => {
451
- return /* @__PURE__ */ React2__default.createElement(TableHead, { key: exC.key, className: "text-[12px] text-[#64748B] dark:text-gray-300" }, exC.label);
452
- }))), /* @__PURE__ */ React2__default.createElement(TableBody, null, exRow.map((exItem) => /* @__PURE__ */ React2__default.createElement(TableRow, { className: "text-[12px] hover:bg-[#f6f6f9] dark:hover:bg-[#19191c]", key: exItem.key }, exColumns.map((exC) => {
451
+ return /* @__PURE__ */ React2__default.createElement(TableHead, { key: exC.key, className: "text-xs text-[#64748B] dark:text-gray-300" }, exC.label);
452
+ }))), /* @__PURE__ */ React2__default.createElement(TableBody, null, exRow.map((exItem) => /* @__PURE__ */ React2__default.createElement(TableRow, { className: "text-xs hover:bg-[#f6f6f9] dark:hover:bg-[#19191c]", key: exItem.key }, exColumns.map((exC) => {
453
453
  return /* @__PURE__ */ React2__default.createElement(TableCell, { key: exC.key, className: "max-w-[200px] overflow-auto" }, exC.render ? exC.render(__spreadProps(__spreadValues({}, exItem), {
454
454
  $parent: item
455
455
  })) : renderFieldValue(exItem[exC.key]));
@@ -483,7 +483,7 @@ function CardUI({
483
483
  },
484
484
  columns.map((column, i) => {
485
485
  const option = columnOptions == null ? void 0 : columnOptions[column.key];
486
- return /* @__PURE__ */ React2__default.createElement("div", { className: "w-full", key: column.key }, /* @__PURE__ */ React2__default.createElement("div", { className: cn("w-full", cardOptions == null ? void 0 : cardOptions.itemClassName) }, /* @__PURE__ */ React2__default.createElement("div", { className: cn("font-meidum text-[12px] text-[#64748B] dark:text-gray-300", option == null ? void 0 : option.labelClassName) }, column.label), /* @__PURE__ */ React2__default.createElement("div", { className: cn("text-[12px]", option == null ? void 0 : option.valueClassName) }, column.render ? column.render(item) : renderFieldValue(item[column.key]))), (cardOptions == null ? void 0 : cardOptions.showDivider) && i !== columns.length - 1 && /* @__PURE__ */ React2__default.createElement(Divider, { className: cn("my-2", cardOptions == null ? void 0 : cardOptions.dividerClassName) }));
486
+ return /* @__PURE__ */ React2__default.createElement("div", { className: "w-full", key: column.key }, /* @__PURE__ */ React2__default.createElement("div", { className: cn("w-full", cardOptions == null ? void 0 : cardOptions.itemClassName) }, /* @__PURE__ */ React2__default.createElement("div", { className: cn("font-meidum text-xs text-[#64748B] dark:text-gray-300", option == null ? void 0 : option.labelClassName) }, column.label), /* @__PURE__ */ React2__default.createElement("div", { className: cn("text-xs", option == null ? void 0 : option.valueClassName) }, column.render ? column.render(item) : renderFieldValue(item[column.key]))), (cardOptions == null ? void 0 : cardOptions.showDivider) && i !== columns.length - 1 && /* @__PURE__ */ React2__default.createElement(Divider, { className: cn("my-2", cardOptions == null ? void 0 : cardOptions.dividerClassName) }));
487
487
  }),
488
488
  /* @__PURE__ */ React2__default.createElement(Actions, { asCard: true, item, actions, actionsOptions })
489
489
  );
@@ -519,7 +519,7 @@ async function scrollIntoTop(tableBoxElementId) {
519
519
  }
520
520
  }
521
521
  function TableHeaderOfNoData({ className, columns }) {
522
- return /* @__PURE__ */ React2__default.createElement("div", { className: cn("flex items-center justify-between bg-[#F4F4F5] dark:bg-[#3F3F45] shadow-sm overflow-auto rounded-l-lg rounded-r-lg", className) }, columns.map((item) => /* @__PURE__ */ React2__default.createElement("div", { key: item.key, className: "p-2 text-left font-medium text-[12px] text-[#64748B] dark:text-gray-300 whitespace-nowrap" }, item.label)));
522
+ return /* @__PURE__ */ React2__default.createElement("div", { className: cn("flex items-center justify-between bg-[#F4F4F5] dark:bg-[#3F3F45] shadow-sm overflow-auto rounded-l-lg rounded-r-lg", className) }, columns.map((item) => /* @__PURE__ */ React2__default.createElement("div", { key: item.key, className: "p-2 text-left font-medium text-xs text-[#64748B] dark:text-gray-300 whitespace-nowrap" }, item.label)));
523
523
  }
524
524
  function DefaultNoData({ className, columns }) {
525
525
  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")));
@@ -537,4 +537,4 @@ function DefaultLoading({ className, columns, loadingOptions }) {
537
537
 
538
538
  export { JSONTable, TableHeaderOfLoading, TableHeaderOfNoData };
539
539
  //# sourceMappingURL=out.js.map
540
- //# sourceMappingURL=chunk-SUA5V6VE.mjs.map
540
+ //# sourceMappingURL=chunk-RH5VZB32.mjs.map
@@ -1 +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 { Button, ButtonProps, Card, Divider, Dropdown, DropdownItem, DropdownMenu, DropdownTrigger, Pagination as NextuiPagination, PaginationProps, Spinner, SpinnerProps } from '@nextui-org/react';\nimport { ChevronDown, ChevronRight, ChevronUp, ChevronsUpDown } from \"lucide-react\";\nimport JSONHighlight from \"../Common/JSONHighlight\";\nimport { SkeletonBox } from \"../Common/SkeletonBox\";\nimport { _ } from \"../../lib/lodash\";\nimport { cn } from \"../../lib/utils\";\nimport { DialogStore } from \"../../module/Dialog\";\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\ntype LoadingOptions = {\n className?: string;\n type?: 'skeleton' | 'spinner';\n skeleton?: {\n boxClassName?: string;\n skeletonClassName?: string;\n line?: number;\n };\n spinner?: {\n boxClassName?: string;\n spinnerProps?: SpinnerProps;\n text?: string;\n textClassName?: string;\n };\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 nextuiPaginationProps?: PaginationProps | {};\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 isLoading?: boolean;\n loadingOptions?: LoadingOptions;\n Loading?: ({ 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 nextuiPaginationProps = {},\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 isLoading = false,\n loadingOptions,\n Loading = DefaultLoading,\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 (isLoading) {\n return <Loading className={className} columns={columns} loadingOptions={loadingOptions} />;\n }\n\n if (data.length === 0) {\n return <NoData className={className} columns={columns} />;\n }\n\n if (asCard) {\n return (\n <CardUI\n className={className}\n rowKey={rowKey}\n data={data}\n columns={columns}\n columnOptions={columnOptions}\n actions={actions}\n actionsOptions={actionsOptions}\n cardOptions={cardOptions}\n pagination={pagination}\n nextuiPaginationProps={nextuiPaginationProps}\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-[12px] text-[#64748B] dark:text-gray-300\">{actionsHeadLabel}</TableHead>}\n {columns.map((item, index) => (\n <TableHead className={cn('font-meidum text-[12px] 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-[12px] 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 initialPage={1}\n total={Math.ceil(pagination.total / pagination.limit)}\n page={pagination.page}\n onChange={(currentPage) => {\n pagination.setData({\n page: currentPage,\n });\n scrollIntoTop(tableBoxElementId);\n }}\n {...nextuiPaginationProps}\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-[12px] 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-[12px] 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-[12px] 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-[12px] 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 CardUI<T>({\n className,\n data,\n columns,\n columnOptions,\n rowKey,\n actions,\n actionsOptions,\n cardOptions,\n pagination,\n nextuiPaginationProps,\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 nextuiPaginationProps: PaginationProps | {};\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-[12px] text-[#64748B] dark:text-gray-300', option?.labelClassName)}>{column.label}</div>\n <div className={cn('text-[12px]', 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 initialPage={1}\n total={Math.ceil(pagination.total / pagination.limit)}\n page={pagination.page}\n onChange={(currentPage) => {\n pagination.setData({\n page: currentPage,\n });\n scrollIntoTop(tableBoxElementId);\n }}\n {...nextuiPaginationProps}\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('flex items-center justify-between bg-[#F4F4F5] dark:bg-[#3F3F45] shadow-sm overflow-auto rounded-l-lg rounded-r-lg', className)}>\n {columns.map((item) => (\n <div key={item.key} className=\"p-2 text-left font-medium text-[12px] text-[#64748B] dark:text-gray-300 whitespace-nowrap\">\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\nexport function TableHeaderOfLoading<T>({ className, columns }: { className?: string; columns: Column<T>[] }) {\n return <TableHeaderOfNoData columns={columns} className={className} />;\n}\n\nfunction DefaultLoading<T>({ className, columns, loadingOptions }: { className?: string; columns: Column<T>[]; loadingOptions?: LoadingOptions }) {\n const type = loadingOptions?.type || 'skeleton';\n const skeletonOptions = loadingOptions?.skeleton;\n const spinnerOptions = loadingOptions?.spinner;\n const spinnerProps = spinnerOptions?.spinnerProps || {};\n return (\n <div className={cn('w-full shadow-sm', className)}>\n <TableHeaderOfLoading columns={columns} />\n {type === 'skeleton' ? (\n <SkeletonBox className={cn('mt-2 flex-col', skeletonOptions?.boxClassName)} skClassName={cn('h-[30px] rounded', skeletonOptions?.skeletonClassName)} line={skeletonOptions?.line || 5} />\n ) : (\n <div className={cn('w-full h-[100px] flex justify-center items-center', spinnerOptions?.boxClassName)}>\n <Spinner size=\"sm\" color=\"primary\" {...spinnerProps} />\n <div className={cn('ml-2 text-[#64748B] text-sm', spinnerOptions?.textClassName)}>{spinnerOptions?.text || 'Loading...'}</div>\n </div>\n )}\n </div>\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
+ {"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 { Button, ButtonProps, Card, Divider, Dropdown, DropdownItem, DropdownMenu, DropdownTrigger, Pagination as NextuiPagination, PaginationProps, Spinner, SpinnerProps } from '@nextui-org/react';\nimport { ChevronDown, ChevronRight, ChevronUp, ChevronsUpDown } from \"lucide-react\";\nimport JSONHighlight from \"../Common/JSONHighlight\";\nimport { SkeletonBox } from \"../Common/SkeletonBox\";\nimport { _ } from \"../../lib/lodash\";\nimport { cn } from \"../../lib/utils\";\nimport { DialogStore } from \"../../module/Dialog\";\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\ntype LoadingOptions = {\n className?: string;\n type?: 'skeleton' | 'spinner';\n skeleton?: {\n boxClassName?: string;\n skeletonClassName?: string;\n line?: number;\n };\n spinner?: {\n boxClassName?: string;\n spinnerProps?: SpinnerProps;\n text?: string;\n textClassName?: string;\n };\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 nextuiPaginationProps?: PaginationProps | {};\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 isLoading?: boolean;\n loadingOptions?: LoadingOptions;\n Loading?: ({ 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 nextuiPaginationProps = {},\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 isLoading = false,\n loadingOptions,\n Loading = DefaultLoading,\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 (isLoading) {\n return <Loading className={className} columns={columns} loadingOptions={loadingOptions} />;\n }\n\n if (data.length === 0) {\n return <NoData className={className} columns={columns} />;\n }\n\n if (asCard) {\n return (\n <CardUI\n className={className}\n rowKey={rowKey}\n data={data}\n columns={columns}\n columnOptions={columnOptions}\n actions={actions}\n actionsOptions={actionsOptions}\n cardOptions={cardOptions}\n pagination={pagination}\n nextuiPaginationProps={nextuiPaginationProps}\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-xs text-[#64748B] dark:text-gray-300\">{actionsHeadLabel}</TableHead>}\n {columns.map((item, index) => (\n <TableHead className={cn('font-meidum text-xs text-[#64748B] dark:text-gray-300', columnOptions?.[item.key]?.thClassName)} key={item.key}>\n <div className=\"flex items-center\">\n <span>{item.label}</span>\n {!!store.sortableColumns[item.key] && (\n <Dropdown\n showArrow\n backdrop=\"opaque\"\n placement=\"bottom\"\n >\n <DropdownTrigger>\n <button className=\"outline-none p-0\">\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 </button>\n </DropdownTrigger>\n <DropdownMenu variant=\"flat\" 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-xs 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 initialPage={1}\n total={Math.ceil(pagination.total / pagination.limit)}\n page={pagination.page}\n onChange={(currentPage) => {\n pagination.setData({\n page: currentPage,\n });\n scrollIntoTop(tableBoxElementId);\n }}\n {...nextuiPaginationProps}\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-xs 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-xs 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-xs 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-xs 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 CardUI<T>({\n className,\n data,\n columns,\n columnOptions,\n rowKey,\n actions,\n actionsOptions,\n cardOptions,\n pagination,\n nextuiPaginationProps,\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 nextuiPaginationProps: PaginationProps | {};\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-xs text-[#64748B] dark:text-gray-300', option?.labelClassName)}>{column.label}</div>\n <div className={cn('text-xs', 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 initialPage={1}\n total={Math.ceil(pagination.total / pagination.limit)}\n page={pagination.page}\n onChange={(currentPage) => {\n pagination.setData({\n page: currentPage,\n });\n scrollIntoTop(tableBoxElementId);\n }}\n {...nextuiPaginationProps}\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('flex items-center justify-between bg-[#F4F4F5] dark:bg-[#3F3F45] shadow-sm overflow-auto rounded-l-lg rounded-r-lg', className)}>\n {columns.map((item) => (\n <div key={item.key} className=\"p-2 text-left font-medium text-xs text-[#64748B] dark:text-gray-300 whitespace-nowrap\">\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\nexport function TableHeaderOfLoading<T>({ className, columns }: { className?: string; columns: Column<T>[] }) {\n return <TableHeaderOfNoData columns={columns} className={className} />;\n}\n\nfunction DefaultLoading<T>({ className, columns, loadingOptions }: { className?: string; columns: Column<T>[]; loadingOptions?: LoadingOptions }) {\n const type = loadingOptions?.type || 'skeleton';\n const skeletonOptions = loadingOptions?.skeleton;\n const spinnerOptions = loadingOptions?.spinner;\n const spinnerProps = spinnerOptions?.spinnerProps || {};\n return (\n <div className={cn('w-full shadow-sm', className)}>\n <TableHeaderOfLoading columns={columns} />\n {type === 'skeleton' ? (\n <SkeletonBox className={cn('mt-2 flex-col', skeletonOptions?.boxClassName)} skClassName={cn('h-[30px] rounded', skeletonOptions?.skeletonClassName)} line={skeletonOptions?.line || 5} />\n ) : (\n <div className={cn('w-full h-[100px] flex justify-center items-center', spinnerOptions?.boxClassName)}>\n <Spinner size=\"sm\" color=\"primary\" {...spinnerProps} />\n <div className={cn('ml-2 text-[#64748B] text-sm', spinnerOptions?.textClassName)}>{spinnerOptions?.text || 'Loading...'}</div>\n </div>\n )}\n </div>\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;"]}
package/dist/index.d.mts CHANGED
@@ -76,6 +76,18 @@ declare class BigNumberInputState {
76
76
  get isZero(): boolean;
77
77
  }
78
78
 
79
+ declare class StorageState<T> {
80
+ key: string;
81
+ value: T | any;
82
+ default: T | any;
83
+ constructor(args: Partial<StorageState<T>>);
84
+ static safeParse(val: any): any;
85
+ load(): any;
86
+ save(value?: T): void;
87
+ setValue(value?: T): void;
88
+ clear(): void;
89
+ }
90
+
79
91
  declare const AppProvider: (({ children }: {
80
92
  children?: React.ReactNode;
81
93
  }) => React.JSX.Element) & {
@@ -204,4 +216,4 @@ declare const helper: {
204
216
  };
205
217
  };
206
218
 
207
- export { AppProvider, BigNumberInputState, BigNumberState, EventMap, PromiseHook, RootStore, cache, helper, rootStore, useStore };
219
+ export { AppProvider, BigNumberInputState, BigNumberState, EventMap, PromiseHook, RootStore, StorageState, cache, helper, rootStore, useStore };
package/dist/index.mjs CHANGED
@@ -122,12 +122,11 @@ var BigNumberInputState = class {
122
122
  }
123
123
  setValue(value) {
124
124
  this.value = new BigNumber(value);
125
- this.format = helper.number.toPrecisionFloor(new BigNumber(this.value).dividedBy(10 ** this.decimals).toFixed());
125
+ this.format = helper.number.warpBigNumber(this.value.toFixed(), this.decimals, { format: "0.000", fallback: "" }).format;
126
126
  this.setLoading(false);
127
127
  }
128
128
  setFormat(val) {
129
129
  this.format = val;
130
- this.format = helper.number.toPrecisionFloor(this.format);
131
130
  this.value = new BigNumber(val).multipliedBy(10 ** this.decimals);
132
131
  }
133
132
  setLoading(val) {
@@ -140,6 +139,43 @@ var BigNumberInputState = class {
140
139
  return this.value.isZero() && this.format == "";
141
140
  }
142
141
  };
142
+ var StorageState = class _StorageState {
143
+ constructor(args) {
144
+ this.value = null;
145
+ this.default = null;
146
+ Object.assign(this, args);
147
+ makeAutoObservable(this);
148
+ this.load();
149
+ }
150
+ static safeParse(val) {
151
+ try {
152
+ return JSON.parse(val);
153
+ } catch (error) {
154
+ return val;
155
+ }
156
+ }
157
+ load() {
158
+ var _a;
159
+ const value = (_a = global == null ? void 0 : global.localStorage) == null ? void 0 : _a.getItem(this.key);
160
+ this.value = _StorageState.safeParse(value);
161
+ if (this.value == null) {
162
+ this.value = this.default;
163
+ }
164
+ return this.value;
165
+ }
166
+ save(value) {
167
+ if (value !== null || value !== void 0) {
168
+ this.value = value;
169
+ }
170
+ global == null ? void 0 : global.localStorage.setItem(this.key, JSON.stringify(value));
171
+ }
172
+ setValue(value) {
173
+ this.save(value);
174
+ }
175
+ clear() {
176
+ localStorage.removeItem(this.key);
177
+ }
178
+ };
143
179
  var AppProvider = observer(({ children }) => {
144
180
  const rootStore2 = RootStore.init();
145
181
  return /* @__PURE__ */ React.createElement(React.Fragment, null, rootStore2.providers.map((store) => {
@@ -232,6 +268,6 @@ var DexieCache = class {
232
268
  };
233
269
  var cache = new DexieCache();
234
270
 
235
- export { AppProvider, BigNumberInputState, PromiseHook, cache };
271
+ export { AppProvider, BigNumberInputState, PromiseHook, StorageState, cache };
236
272
  //# sourceMappingURL=out.js.map
237
273
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../store/standard/PromiseHook.ts","../store/standard/BigNumberInputState.ts","../module/AppProvider.tsx","../lib/dexie.ts"],"names":["makeAutoObservable","rootStore"],"mappings":"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","sourcesContent":["\n\nimport { makeAutoObservable, observable } from 'mobx';\n\nexport class KV {\n //@ts-ignore\n static datas = observable();\n}\n\nexport abstract class ContractBase {\n // chainId?: number;\n // address?: string;\n\n}\n\nexport type ContractClass<T extends ContractBase> = new (args: Partial<T>) => T\n\nexport type PromiseHookData<T, U> = { value: Awaited<U>; get: T; call: T, loading: boolean }\n\nexport class PromiseHook {\n static entities = observable([]);\n static Get<T extends ContractBase>(cls: ContractClass<T>): (args: { args: Partial<T>; id?: string, select?: { [key in keyof Partial<T>]: boolean }, unselect?: { [key in keyof Partial<T>]: boolean } }) => Promise<T & { refresh: () => Promise<void> }> {\n try {\n return async ({ args, select, id, unselect }) => {\n let instance: any\n //@ts-ignore\n if (!id || !this.entities[id]) {\n instance = new cls(args);\n\n instance.refresh = async () => {\n const hooks = Object.entries(instance)\n .filter((i) => {\n if (!this.isPromiseHook(instance[i[0]])) return false\n if (select && !select[i[0]]) return false\n if (unselect && unselect[i[0]]) return false\n return true\n }).map(i => {\n const hook = instance[i[0]]\n return hook\n })\n\n await Promise.all(hooks.map((i) => i.call()));\n }\n if (id) {\n //@ts-ignore\n this.entities[id] = instance\n }\n } else {\n instance = this.entities[id!]\n }\n\n\n await instance.refresh()\n return instance;\n };\n } catch (e) {\n throw e\n }\n }\n\n\n static isPromiseHook(target) {\n return target?._type == \"promiseHook\"\n }\n\n\n //ttl : ms\n static wrap<T extends (...args: any[]) => Promise<any>, U = ReturnType<T>>({ func, defaultValue }: { func: T; defaultValue?: Awaited<U>; }): PromiseHookData<T, U> {\n let context;\n const call = () => {\n context.loading = true;\n if (!context._call) {\n context._call = func()\n .then((i) => {\n context.value = i;\n context.loading = false;\n context._call = null\n return i\n })\n .catch((i) => {\n console.error(i, func);\n context.value = defaultValue\n context._call = null\n context.loading = false;\n throw i;\n });\n }\n\n\n return context._call\n };\n const get = async () => {\n if (!context.value) {\n\n return call();\n }\n return context.value;\n };\n\n if (!context) {\n context = observable({\n _type: 'promiseHook',\n _value: defaultValue,\n get value() {\n return context['_value'];\n },\n set value(val) {\n context['_value'] = val;\n },\n get,\n loading: false,\n call,\n defaultValue,\n toJSON() {\n return context.value\n },\n toString() {\n return context.value\n },\n });\n }\n\n return context;\n }\n\n}\n","import BigNumber from 'bignumber.js';\nimport { makeAutoObservable } from 'mobx';\nimport { helper } from '../../lib/helper';\nexport class BigNumberInputState {\n value = new BigNumber(0);\n format = '';\n loading = false;\n decimals = 18;\n formatter?: Function;\n constructor(args: Partial<BigNumberInputState>) {\n Object.assign(this, args);\n makeAutoObservable(this);\n }\n get noDecimasValue(): BigNumber {\n return new BigNumber(this.value).dividedBy(10 ** this.decimals);\n }\n setValue(value: any) {\n this.value = new BigNumber(value);\n this.format = helper.number.toPrecisionFloor(new BigNumber(this.value).dividedBy(10 ** this.decimals).toFixed());\n this.setLoading(false);\n }\n setFormat(val: any) {\n this.format = val;\n this.format = helper.number.toPrecisionFloor(this.format);\n this.value = new BigNumber(val).multipliedBy(10 ** this.decimals);\n }\n setLoading(val: boolean) {\n this.loading = val;\n }\n setDecimals(val: number) {\n this.decimals = val;\n }\n get isZero(): boolean {\n return this.value.isZero() && this.format == '';\n }\n}\n","import React from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { RootStore } from \"../store/root\";\n\nexport const AppProvider = observer(({ children }: { children?: React.ReactNode }) => {\n const rootStore = RootStore.init()\n return (\n <>\n {rootStore.providers.map((store) => {\n const Component: any = store.provider;\n return <Component rootStore={rootStore} key={store.sid} />;\n })}\n {children && children}\n </>\n )\n})","import DataLoader from \"dataloader\";\nimport { Dexie, type Table } from \"dexie\";\n\nexport class DexieStorage extends Dexie {\n kv: Table<{ key: string; value: { value: any; expiration: number } }>;\n\n constructor() {\n super(\"cache\");\n this.version(1).stores({\n kv: \"key, value\",\n });\n }\n}\nexport const dexie = new DexieStorage();\n\nexport class DexieCache {\n kv = dexie.kv;\n kv_get = new DataLoader(\n async (ids: string[]) => {\n const res = await this.kv.bulkGet(ids);\n return res.map((i) => i?.value);\n },\n { cache: false },\n );\n kv_set = new DataLoader(\n async (ids: { key: string; value: any; ttl: number }[]) => {\n const now = new Date();\n await this.kv.bulkPut(ids.map((i) => ({ key: i.key, value: { value: i.value, expiration: now.setTime(now.getTime() + i.ttl) } })));\n return ids;\n },\n { cache: false },\n );\n options = {\n ttl: 60 * 1000,\n prefix: \"\",\n };\n\n async get(_key) {\n const key = this.options.prefix + _key;\n console.time(\"get \" + key);\n const res = await this.kv_get.load(key);\n console.timeEnd(\"get \" + key);\n const data = res?.value;\n if (!data) return;\n return data?.value;\n }\n\n async getRaw(_key) {\n const key = this.options.prefix + _key;\n console.time(\"get \" + key);\n const res = await this.kv_get.load(key);\n console.timeEnd(\"get \" + key);\n const data = res?.value;\n if (!data) return;\n return data;\n }\n\n async set(_key, value, options?: { ttl?: number }) {\n const key = this.options.prefix + _key;\n this.kv_set.load({ key, value, ttl: options?.ttl || this.options.ttl });\n\n return this;\n }\n\n async delete(key) {\n // return this.dataloader.load(['del', key]);\n return;\n }\n\n async clear() {}\n\n async wrap<T extends (...args: any[]) => Promise<any>, U = ReturnType<T>>(key, fn: T, args?: { ttl?: number; alowStale?: boolean }): Promise<Awaited<U>> {\n let data = await this.kv_get.load(key);\n if (data?.expiration && new Date(data.expiration) <= new Date()) {\n // console.log(\"cache expired\", key)\n\n if (args?.alowStale) {\n fn()\n .then((value) => {\n this.kv_set.load({ key, value, ttl: args?.ttl || this.options.ttl });\n })\n .catch((err) => {\n console.error(err);\n });\n } else {\n //@ts-ignore\n data = null;\n }\n }\n if (!data) {\n // console.log(\"miss cache\", key)\n const value = await fn();\n this.kv_set.load({ key, value, ttl: args?.ttl || this.options.ttl });\n return value;\n }\n return data.value;\n }\n}\n\nexport const cache = new DexieCache();\n"]}
1
+ {"version":3,"sources":["../store/standard/PromiseHook.ts","../store/standard/BigNumberInputState.ts","../store/standard/StorageState.ts","../module/AppProvider.tsx","../lib/dexie.ts"],"names":["makeAutoObservable","rootStore"],"mappings":"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","sourcesContent":["\n\nimport { makeAutoObservable, observable } from 'mobx';\n\nexport class KV {\n //@ts-ignore\n static datas = observable();\n}\n\nexport abstract class ContractBase {\n // chainId?: number;\n // address?: string;\n\n}\n\nexport type ContractClass<T extends ContractBase> = new (args: Partial<T>) => T\n\nexport type PromiseHookData<T, U> = { value: Awaited<U>; get: T; call: T, loading: boolean }\n\nexport class PromiseHook {\n static entities = observable([]);\n static Get<T extends ContractBase>(cls: ContractClass<T>): (args: { args: Partial<T>; id?: string, select?: { [key in keyof Partial<T>]: boolean }, unselect?: { [key in keyof Partial<T>]: boolean } }) => Promise<T & { refresh: () => Promise<void> }> {\n try {\n return async ({ args, select, id, unselect }) => {\n let instance: any\n //@ts-ignore\n if (!id || !this.entities[id]) {\n instance = new cls(args);\n\n instance.refresh = async () => {\n const hooks = Object.entries(instance)\n .filter((i) => {\n if (!this.isPromiseHook(instance[i[0]])) return false\n if (select && !select[i[0]]) return false\n if (unselect && unselect[i[0]]) return false\n return true\n }).map(i => {\n const hook = instance[i[0]]\n return hook\n })\n\n await Promise.all(hooks.map((i) => i.call()));\n }\n if (id) {\n //@ts-ignore\n this.entities[id] = instance\n }\n } else {\n instance = this.entities[id!]\n }\n\n\n await instance.refresh()\n return instance;\n };\n } catch (e) {\n throw e\n }\n }\n\n\n static isPromiseHook(target) {\n return target?._type == \"promiseHook\"\n }\n\n\n //ttl : ms\n static wrap<T extends (...args: any[]) => Promise<any>, U = ReturnType<T>>({ func, defaultValue }: { func: T; defaultValue?: Awaited<U>; }): PromiseHookData<T, U> {\n let context;\n const call = () => {\n context.loading = true;\n if (!context._call) {\n context._call = func()\n .then((i) => {\n context.value = i;\n context.loading = false;\n context._call = null\n return i\n })\n .catch((i) => {\n console.error(i, func);\n context.value = defaultValue\n context._call = null\n context.loading = false;\n throw i;\n });\n }\n\n\n return context._call\n };\n const get = async () => {\n if (!context.value) {\n\n return call();\n }\n return context.value;\n };\n\n if (!context) {\n context = observable({\n _type: 'promiseHook',\n _value: defaultValue,\n get value() {\n return context['_value'];\n },\n set value(val) {\n context['_value'] = val;\n },\n get,\n loading: false,\n call,\n defaultValue,\n toJSON() {\n return context.value\n },\n toString() {\n return context.value\n },\n });\n }\n\n return context;\n }\n\n}\n","import BigNumber from 'bignumber.js';\nimport { makeAutoObservable } from 'mobx';\nimport { helper } from '../../lib/helper';\nexport class BigNumberInputState {\n value = new BigNumber(0);\n format = '';\n loading = false;\n decimals = 18;\n formatter?: Function;\n constructor(args: Partial<BigNumberInputState>) {\n Object.assign(this, args);\n makeAutoObservable(this);\n }\n get noDecimasValue(): BigNumber {\n return new BigNumber(this.value).dividedBy(10 ** this.decimals);\n }\n setValue(value: any) {\n this.value = new BigNumber(value);\n // this.format = helper.number.toPrecisionFloor(new BigNumber(this.value).dividedBy(10 ** this.decimals).toFixed());\n this.format = helper.number.warpBigNumber(this.value.toFixed(), this.decimals, { format: '0.000', fallback: '' }).format;\n this.setLoading(false);\n }\n setFormat(val: any) {\n this.format = val;\n // this.format = helper.number.toPrecisionFloor(this.format);\n // this.format = helper.number.warpBigNumber(this.value.toFixed(), this.decimals, { format: '0.000', fallback: '' }).format;\n this.value = new BigNumber(val).multipliedBy(10 ** this.decimals);\n }\n setLoading(val: boolean) {\n this.loading = val;\n }\n setDecimals(val: number) {\n this.decimals = val;\n }\n get isZero(): boolean {\n return this.value.isZero() && this.format == '';\n }\n}\n","import { makeAutoObservable } from 'mobx';\n\nexport class StorageState<T> {\n key: string;\n value: T | any = null;\n default: T | any = null;\n constructor(args: Partial<StorageState<T>>) {\n Object.assign(this, args);\n makeAutoObservable(this);\n this.load();\n }\n\n static safeParse(val: any) {\n try {\n return JSON.parse(val);\n } catch (error) {\n return val;\n }\n }\n\n load() {\n const value = global?.localStorage?.getItem(this.key);\n this.value = StorageState.safeParse(value);\n if (this.value == null) {\n this.value = this.default;\n }\n return this.value;\n }\n\n save(value?: T) {\n if (value !== null || value !== undefined) {\n this.value = value;\n }\n global?.localStorage.setItem(this.key, JSON.stringify(value));\n }\n\n setValue(value?: T) {\n this.save(value);\n }\n\n clear() {\n localStorage.removeItem(this.key);\n }\n}\n","import React from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { RootStore } from \"../store/root\";\n\nexport const AppProvider = observer(({ children }: { children?: React.ReactNode }) => {\n const rootStore = RootStore.init()\n return (\n <>\n {rootStore.providers.map((store) => {\n const Component: any = store.provider;\n return <Component rootStore={rootStore} key={store.sid} />;\n })}\n {children && children}\n </>\n )\n})","import DataLoader from \"dataloader\";\nimport { Dexie, type Table } from \"dexie\";\n\nexport class DexieStorage extends Dexie {\n kv: Table<{ key: string; value: { value: any; expiration: number } }>;\n\n constructor() {\n super(\"cache\");\n this.version(1).stores({\n kv: \"key, value\",\n });\n }\n}\nexport const dexie = new DexieStorage();\n\nexport class DexieCache {\n kv = dexie.kv;\n kv_get = new DataLoader(\n async (ids: string[]) => {\n const res = await this.kv.bulkGet(ids);\n return res.map((i) => i?.value);\n },\n { cache: false },\n );\n kv_set = new DataLoader(\n async (ids: { key: string; value: any; ttl: number }[]) => {\n const now = new Date();\n await this.kv.bulkPut(ids.map((i) => ({ key: i.key, value: { value: i.value, expiration: now.setTime(now.getTime() + i.ttl) } })));\n return ids;\n },\n { cache: false },\n );\n options = {\n ttl: 60 * 1000,\n prefix: \"\",\n };\n\n async get(_key) {\n const key = this.options.prefix + _key;\n console.time(\"get \" + key);\n const res = await this.kv_get.load(key);\n console.timeEnd(\"get \" + key);\n const data = res?.value;\n if (!data) return;\n return data?.value;\n }\n\n async getRaw(_key) {\n const key = this.options.prefix + _key;\n console.time(\"get \" + key);\n const res = await this.kv_get.load(key);\n console.timeEnd(\"get \" + key);\n const data = res?.value;\n if (!data) return;\n return data;\n }\n\n async set(_key, value, options?: { ttl?: number }) {\n const key = this.options.prefix + _key;\n this.kv_set.load({ key, value, ttl: options?.ttl || this.options.ttl });\n\n return this;\n }\n\n async delete(key) {\n // return this.dataloader.load(['del', key]);\n return;\n }\n\n async clear() {}\n\n async wrap<T extends (...args: any[]) => Promise<any>, U = ReturnType<T>>(key, fn: T, args?: { ttl?: number; alowStale?: boolean }): Promise<Awaited<U>> {\n let data = await this.kv_get.load(key);\n if (data?.expiration && new Date(data.expiration) <= new Date()) {\n // console.log(\"cache expired\", key)\n\n if (args?.alowStale) {\n fn()\n .then((value) => {\n this.kv_set.load({ key, value, ttl: args?.ttl || this.options.ttl });\n })\n .catch((err) => {\n console.error(err);\n });\n } else {\n //@ts-ignore\n data = null;\n }\n }\n if (!data) {\n // console.log(\"miss cache\", key)\n const value = await fn();\n this.kv_set.load({ key, value, ttl: args?.ttl || this.options.ttl });\n return value;\n }\n return data.value;\n }\n}\n\nexport const cache = new DexieCache();\n"]}
@@ -1,4 +1,4 @@
1
- export { JSONTable, TableHeaderOfLoading, TableHeaderOfNoData } from './chunk-SUA5V6VE.mjs';
1
+ export { JSONTable, TableHeaderOfLoading, TableHeaderOfNoData } from './chunk-RH5VZB32.mjs';
2
2
  import './chunk-ONVPCAMQ.mjs';
3
3
  import './chunk-OZ3JSH5J.mjs';
4
4
  import './chunk-DZMNL4BZ.mjs';
package/dist/metrics.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { JSONTable } from './chunk-SUA5V6VE.mjs';
1
+ import { JSONTable } from './chunk-RH5VZB32.mjs';
2
2
  import './chunk-ONVPCAMQ.mjs';
3
3
  import './chunk-OZ3JSH5J.mjs';
4
4
  import './chunk-DZMNL4BZ.mjs';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dappworks/kit",
3
- "version": "0.4.73",
3
+ "version": "0.4.74",
4
4
  "description": "",
5
5
  "main": "./dist/index.mjs",
6
6
  "types": "./dist/index.d.mts",
@@ -127,4 +127,4 @@
127
127
  "access": "public",
128
128
  "registry": "https://registry.npmjs.org/"
129
129
  }
130
- }
130
+ }