@dappworks/kit 0.4.80 → 0.4.81

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.
@@ -21,7 +21,6 @@ var JSONTable = observer((props) => {
21
21
  limit: 8
22
22
  }),
23
23
  nextuiPaginationProps = {},
24
- extendedTableOptions = [],
25
24
  rowKey = "id",
26
25
  onRowClick,
27
26
  rowCss,
@@ -38,7 +37,9 @@ var JSONTable = observer((props) => {
38
37
  isLoading = false,
39
38
  loadingOptions,
40
39
  loadingContent,
41
- isHeaderSticky = false
40
+ isHeaderSticky = false,
41
+ sortingUIOptions,
42
+ extendedTableOptions = []
42
43
  } = props;
43
44
  const tableBoxRef = useRef(null);
44
45
  const { columns, sortableColumnsDefaultValue } = useMemo(() => {
@@ -48,7 +49,7 @@ var JSONTable = observer((props) => {
48
49
  var _a;
49
50
  return !((_a = columnOptions[key]) == null ? void 0 : _a.hidden);
50
51
  }) : allKeys;
51
- if (!keys.includes("$actions") && columnOptions["$actions"]) {
52
+ if (!keys.includes("$actions") && columnOptions && columnOptions["$actions"]) {
52
53
  keys.push("$actions");
53
54
  }
54
55
  const sortableColumnsDefaultValue2 = {};
@@ -142,73 +143,76 @@ var JSONTable = observer((props) => {
142
143
  classNames,
143
144
  ref: tableBoxRef
144
145
  },
145
- /* @__PURE__ */ React.createElement(TableHeader, { columns }, columns.map((item) => /* @__PURE__ */ React.createElement(TableColumn, { key: item.key }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ React.createElement("span", null, item.label), !!sortableColumnsMap[item.key] && /* @__PURE__ */ React.createElement(
146
- Dropdown,
147
- {
148
- showArrow: true,
149
- backdrop: "opaque",
150
- placement: "bottom",
151
- classNames: {
152
- content: "min-w-[100px] rounded-lg shadow-md border dark:border-[#3e3e3e]"
153
- }
154
- },
155
- /* @__PURE__ */ React.createElement(DropdownTrigger, null, /* @__PURE__ */ React.createElement("button", { className: "outline-none p-0" }, sortableColumnsMap[item.key] === "desc" && /* @__PURE__ */ React.createElement(ChevronDown, { size: 14 }), sortableColumnsMap[item.key] === "asc" && /* @__PURE__ */ React.createElement(ChevronUp, { size: 14 }), sortableColumnsMap[item.key] === "none" && /* @__PURE__ */ React.createElement(ChevronsUpDown, { size: 14 }))),
156
- /* @__PURE__ */ React.createElement(DropdownMenu, { variant: "flat", selectionMode: "single", selectedKeys: [sortableColumnsMap[item.key]] }, /* @__PURE__ */ React.createElement(
157
- DropdownItem,
158
- {
159
- key: "asc",
160
- onClick: () => {
161
- var _a;
162
- const { sortableColumns, sortedData: sortedData2 } = sortData({
163
- type: "asc",
164
- key: item.key,
165
- sortKey: (_a = columnOptions == null ? void 0 : columnOptions[item.key]) == null ? void 0 : _a.sortKey,
166
- sortableColumnsMap,
167
- dataSource
168
- });
169
- setSortableColumnsMap(sortableColumns);
170
- setSortedData(sortedData2);
171
- }
172
- },
173
- /* @__PURE__ */ React.createElement("span", { className: "text-xs font-bold" }, "Sort ascending")
174
- ), /* @__PURE__ */ React.createElement(
175
- DropdownItem,
176
- {
177
- key: "desc",
178
- onClick: () => {
179
- var _a;
180
- const { sortableColumns, sortedData: sortedData2 } = sortData({
181
- type: "desc",
182
- key: item.key,
183
- sortKey: (_a = columnOptions == null ? void 0 : columnOptions[item.key]) == null ? void 0 : _a.sortKey,
184
- sortableColumnsMap,
185
- dataSource
186
- });
187
- setSortableColumnsMap(sortableColumns);
188
- setSortedData(sortedData2);
189
- }
190
- },
191
- /* @__PURE__ */ React.createElement("span", { className: "text-xs font-bold" }, "Sort descending")
192
- ), /* @__PURE__ */ React.createElement(
193
- DropdownItem,
146
+ /* @__PURE__ */ React.createElement(TableHeader, { columns }, columns.map((item) => {
147
+ var _a, _b, _c;
148
+ return /* @__PURE__ */ React.createElement(TableColumn, { key: item.key }, /* @__PURE__ */ React.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ React.createElement("span", null, item.label), !!sortableColumnsMap[item.key] && /* @__PURE__ */ React.createElement(
149
+ Dropdown,
194
150
  {
195
- key: "none",
196
- onClick: () => {
197
- var _a;
198
- const { sortableColumns, sortedData: sortedData2 } = sortData({
199
- type: "none",
200
- key: item.key,
201
- sortKey: (_a = columnOptions == null ? void 0 : columnOptions[item.key]) == null ? void 0 : _a.sortKey,
202
- sortableColumnsMap,
203
- dataSource
204
- });
205
- setSortableColumnsMap(sortableColumns);
206
- setSortedData(sortedData2);
207
- }
151
+ showArrow: true,
152
+ backdrop: "opaque",
153
+ placement: "bottom",
154
+ classNames: __spreadValues({
155
+ content: "min-w-[80px] rounded-lg shadow-md border dark:border-[#3e3e3e]"
156
+ }, sortingUIOptions == null ? void 0 : sortingUIOptions.dropdownClassNames)
208
157
  },
209
- /* @__PURE__ */ React.createElement("span", { className: "text-xs font-bold" }, "Sort none")
210
- ))
211
- ))))),
158
+ /* @__PURE__ */ React.createElement(DropdownTrigger, null, /* @__PURE__ */ React.createElement("button", { className: "outline-none p-0" }, sortableColumnsMap[item.key] === "desc" && /* @__PURE__ */ React.createElement(ChevronDown, { size: 14 }), sortableColumnsMap[item.key] === "asc" && /* @__PURE__ */ React.createElement(ChevronUp, { size: 14 }), sortableColumnsMap[item.key] === "none" && /* @__PURE__ */ React.createElement(ChevronsUpDown, { size: 14 }))),
159
+ /* @__PURE__ */ React.createElement(DropdownMenu, { variant: "flat", selectionMode: "single", selectedKeys: [sortableColumnsMap[item.key]] }, /* @__PURE__ */ React.createElement(
160
+ DropdownItem,
161
+ {
162
+ key: "asc",
163
+ onClick: () => {
164
+ var _a2;
165
+ const { sortableColumns, sortedData: sortedData2 } = sortData({
166
+ type: "asc",
167
+ key: item.key,
168
+ sortKey: (_a2 = columnOptions == null ? void 0 : columnOptions[item.key]) == null ? void 0 : _a2.sortKey,
169
+ sortableColumnsMap,
170
+ dataSource
171
+ });
172
+ setSortableColumnsMap(sortableColumns);
173
+ setSortedData(sortedData2);
174
+ }
175
+ },
176
+ /* @__PURE__ */ React.createElement("span", { className: cn("text-xs font-bold", sortingUIOptions == null ? void 0 : sortingUIOptions.titleClassName) }, ((_a = sortingUIOptions == null ? void 0 : sortingUIOptions.titles) == null ? void 0 : _a.asc) || "ASC")
177
+ ), /* @__PURE__ */ React.createElement(
178
+ DropdownItem,
179
+ {
180
+ key: "desc",
181
+ onClick: () => {
182
+ var _a2;
183
+ const { sortableColumns, sortedData: sortedData2 } = sortData({
184
+ type: "desc",
185
+ key: item.key,
186
+ sortKey: (_a2 = columnOptions == null ? void 0 : columnOptions[item.key]) == null ? void 0 : _a2.sortKey,
187
+ sortableColumnsMap,
188
+ dataSource
189
+ });
190
+ setSortableColumnsMap(sortableColumns);
191
+ setSortedData(sortedData2);
192
+ }
193
+ },
194
+ /* @__PURE__ */ React.createElement("span", { className: cn("text-xs font-bold", sortingUIOptions == null ? void 0 : sortingUIOptions.titleClassName) }, ((_b = sortingUIOptions == null ? void 0 : sortingUIOptions.titles) == null ? void 0 : _b.desc) || "DESC")
195
+ ), /* @__PURE__ */ React.createElement(
196
+ DropdownItem,
197
+ {
198
+ key: "none",
199
+ onClick: () => {
200
+ var _a2;
201
+ const { sortableColumns, sortedData: sortedData2 } = sortData({
202
+ type: "none",
203
+ key: item.key,
204
+ sortKey: (_a2 = columnOptions == null ? void 0 : columnOptions[item.key]) == null ? void 0 : _a2.sortKey,
205
+ sortableColumnsMap,
206
+ dataSource
207
+ });
208
+ setSortableColumnsMap(sortableColumns);
209
+ setSortedData(sortedData2);
210
+ }
211
+ },
212
+ /* @__PURE__ */ React.createElement("span", { className: cn("text-xs font-bold", sortingUIOptions == null ? void 0 : sortingUIOptions.titleClassName) }, ((_c = sortingUIOptions == null ? void 0 : sortingUIOptions.titles) == null ? void 0 : _c.none) || "NONE")
213
+ ))
214
+ )));
215
+ })),
212
216
  isLoading ? /* @__PURE__ */ React.createElement(TableBody, { emptyContent: loadingContent || DefaultLoading({ loadingOptions }) }, []) : data.length > 0 ? /* @__PURE__ */ React.createElement(TableBody, null, data.map((item, index) => {
213
217
  return /* @__PURE__ */ React.createElement(
214
218
  TableRow,
@@ -373,4 +377,4 @@ function scrollIntoTop(target) {
373
377
 
374
378
  export { JSONTable };
375
379
  //# sourceMappingURL=out.js.map
376
- //# sourceMappingURL=chunk-EVEBKBW3.mjs.map
380
+ //# sourceMappingURL=chunk-QBF55FA7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../components/JSONTable/index.tsx"],"names":["sortableColumnsDefaultValue","columns","keys","_a","sortedData"],"mappings":"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","sourcesContent":["\"use client\";\n\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport {\n Card,\n Divider,\n Dropdown,\n DropdownItem,\n DropdownMenu,\n DropdownTrigger,\n Pagination as NextuiPagination,\n PaginationProps,\n PopoverSlots,\n SlotsToClasses,\n Spinner,\n SpinnerProps,\n Table,\n TableBody,\n TableCell,\n TableColumn,\n TableHeader,\n TableRow,\n TableSlots,\n} from '@nextui-org/react';\nimport { ChevronDown, ChevronUp, ChevronsUpDown } from \"lucide-react\";\nimport { observer } from \"mobx-react-lite\";\nimport { PaginationState } from \"../../store/standard/PaginationState\";\nimport { SkeletonBox } from \"../Common/SkeletonBox\";\nimport { _ } from \"../../lib/lodash\";\nimport { cn } from \"../../lib/utils\";\n\nexport type HeaderKeys<T extends Record<string, any>> = Array<keyof T | '$actions'>;\n\nexport type ColumnOptions<T> = {\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 labelClassName?: string;\n valueClassName?: string;\n };\n} & {\n $actions?: {\n label?: React.ReactNode;\n hidden?: boolean;\n sortable?: boolean;\n sortKey?: string;\n order?: number;\n render?: (item: T) => any;\n labelClassName?: string;\n valueClassName?: string;\n };\n};\n\nexport type Column<T> = {\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 CardOptions = {\n boxClassName?: string;\n cardClassName?: string;\n itemClassName?: string;\n showDivider?: boolean;\n dividerClassName?: string;\n};\n\ntype LoadingOptions = {\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 classNames?: SlotsToClasses<TableSlots>;\n rowKey?: keyof T;\n dataSource: T[];\n headerKeys?: HeaderKeys<T>;\n columnOptions?: ColumnOptions<T>;\n isServerPaging?: boolean;\n pagination?: PaginationState;\n nextuiPaginationProps?: PaginationProps | {};\n onRowClick?: (item: T) => void;\n rowCss?: string | ((item: T) => string | undefined);\n asCard?: boolean;\n cardOptions?: CardOptions;\n autoScrollToTop?: boolean;\n emptyContent?: React.ReactNode;\n isLoading?: boolean;\n loadingOptions?: LoadingOptions;\n loadingContent?: React.ReactNode;\n isHeaderSticky?: boolean;\n sortingUIOptions?: {\n dropdownClassNames?: SlotsToClasses<PopoverSlots>;\n titleClassName?: string;\n titles?: {\n asc?: string;\n desc?: string;\n none?: string;\n };\n };\n extendedTableOptions?: {\n key: keyof T;\n columnOptions: ColumnOptions<any>;\n }[];\n}\n\nexport const JSONTable = observer(<T extends Record<string, any>>(props: JSONTableProps<T>) => {\n const {\n className,\n classNames = {},\n dataSource,\n columnOptions,\n headerKeys,\n isServerPaging,\n pagination = new PaginationState({\n page: 1,\n limit: 8,\n }),\n nextuiPaginationProps = {},\n rowKey = 'id',\n onRowClick,\n rowCss,\n asCard = false,\n cardOptions = {\n boxClassName: '',\n cardClassName: '',\n itemClassName: '',\n showDivider: true,\n dividerClassName: '',\n },\n autoScrollToTop = false,\n emptyContent = 'No Data',\n isLoading = false,\n loadingOptions,\n loadingContent,\n isHeaderSticky = false,\n sortingUIOptions,\n extendedTableOptions = [],\n } = props;\n\n const tableBoxRef = useRef<HTMLElement>(null);\n\n const { columns, sortableColumnsDefaultValue } = useMemo(() => {\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 if (!keys.includes('$actions') && columnOptions && columnOptions['$actions']) {\n keys.push('$actions');\n }\n\n const sortableColumnsDefaultValue: { [k: string]: 'asc' | 'desc' | 'none' } = {};\n\n // @ts-ignore\n const columns: Column<T>[] = keys.map((key: string) => {\n const sortable = columnOptions?.[key]?.sortable;\n if (sortable) {\n sortableColumnsDefaultValue[key] = 'none';\n }\n return {\n key,\n label: columnOptions?.[key]?.label || (key === '$actions' ? '' : 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\n ? 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 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\n return {\n columns,\n extendedTables,\n sortableColumnsDefaultValue,\n };\n }, [dataSource, columnOptions]);\n\n const [sortableColumnsMap, setSortableColumnsMap] = useState<{ [k: string]: 'asc' | 'desc' | 'none' }>({});\n const [sortedData, setSortedData] = useState<T[]>(dataSource);\n\n useEffect(() => {\n setSortableColumnsMap(sortableColumnsDefaultValue);\n }, [sortableColumnsDefaultValue]);\n\n useEffect(() => {\n setSortedData(dataSource);\n if (!isServerPaging) {\n pagination.setData({\n total: dataSource.length,\n });\n }\n }, [dataSource]);\n\n const data = isServerPaging ? sortedData : sortedData.slice(pagination.offset, pagination.offset + pagination.limit);\n\n if (asCard) {\n return (\n <CardUI\n className={className}\n rowKey={rowKey}\n data={data}\n columns={columns}\n columnOptions={columnOptions}\n cardOptions={cardOptions}\n pagination={pagination}\n nextuiPaginationProps={nextuiPaginationProps}\n onRowClick={onRowClick}\n autoScrollToTop={autoScrollToTop}\n emptyContent={emptyContent}\n isLoading={isLoading}\n loadingOptions={loadingOptions}\n loadingContent={loadingContent}\n />\n );\n }\n\n return (\n <>\n <Table\n removeWrapper\n isHeaderSticky={isHeaderSticky}\n className={cn('relative w-full overflow-auto h-[400px]', className)}\n classNames={classNames}\n ref={tableBoxRef}\n >\n <TableHeader columns={columns}>\n {columns.map((item) => (\n <TableColumn key={item.key}>\n <div className=\"flex items-center\">\n <span>{item.label}</span>\n {!!sortableColumnsMap[item.key] && (\n <Dropdown\n showArrow\n backdrop=\"opaque\"\n placement=\"bottom\"\n classNames={{\n content: 'min-w-[80px] rounded-lg shadow-md border dark:border-[#3e3e3e]',\n ...sortingUIOptions?.dropdownClassNames\n }}\n >\n <DropdownTrigger>\n <button className=\"outline-none p-0\">\n {sortableColumnsMap[item.key] === 'desc' && <ChevronDown size={14} />}\n {sortableColumnsMap[item.key] === 'asc' && <ChevronUp size={14} />}\n {sortableColumnsMap[item.key] === 'none' && <ChevronsUpDown size={14} />}\n </button>\n </DropdownTrigger>\n <DropdownMenu variant=\"flat\" selectionMode=\"single\" selectedKeys={[sortableColumnsMap[item.key]]}>\n <DropdownItem\n key=\"asc\"\n onClick={() => {\n const { sortableColumns, sortedData } = sortData({\n type: 'asc',\n key: item.key,\n sortKey: columnOptions?.[item.key]?.sortKey,\n sortableColumnsMap,\n dataSource,\n });\n setSortableColumnsMap(sortableColumns);\n setSortedData(sortedData);\n }}\n >\n <span className={cn('text-xs font-bold', sortingUIOptions?.titleClassName)}>{sortingUIOptions?.titles?.asc || 'ASC'}</span>\n </DropdownItem>\n <DropdownItem\n key=\"desc\"\n onClick={() => {\n const { sortableColumns, sortedData } = sortData({\n type: 'desc',\n key: item.key,\n sortKey: columnOptions?.[item.key]?.sortKey,\n sortableColumnsMap,\n dataSource,\n });\n setSortableColumnsMap(sortableColumns);\n setSortedData(sortedData);\n }}\n >\n <span className={cn('text-xs font-bold', sortingUIOptions?.titleClassName)}>{sortingUIOptions?.titles?.desc || 'DESC'}</span>\n </DropdownItem>\n <DropdownItem\n key=\"none\"\n onClick={() => {\n const { sortableColumns, sortedData } = sortData({\n type: 'none',\n key: item.key,\n sortKey: columnOptions?.[item.key]?.sortKey,\n sortableColumnsMap,\n dataSource,\n });\n setSortableColumnsMap(sortableColumns);\n setSortedData(sortedData);\n }}\n >\n <span className={cn('text-xs font-bold', sortingUIOptions?.titleClassName)}>{sortingUIOptions?.titles?.none || 'NONE'}</span>\n </DropdownItem>\n </DropdownMenu>\n </Dropdown>\n )}\n </div>\n </TableColumn>\n ))}\n </TableHeader>\n {isLoading ? (\n <TableBody emptyContent={loadingContent || DefaultLoading({ loadingOptions })}>{[]}</TableBody>\n ) : data.length > 0 ? (\n <TableBody>\n {data.map((item, index) => {\n return (\n <TableRow\n key={item[rowKey] || index}\n className={cn('', typeof rowCss === 'function' ? rowCss(item) : rowCss)}\n onClick={() => {\n onRowClick?.(item);\n }}\n >\n {columns.map((column) => {\n return <TableCell key={column.key}>{column.render ? column.render(item) : renderFieldValue(item[column.key])}</TableCell>;\n })}\n </TableRow>\n );\n })}\n </TableBody>\n ) : (\n <TableBody emptyContent={emptyContent}>{[]}</TableBody>\n )}\n </Table>\n {pagination.total > pagination.limit && (\n <div className=\"flex justify-center\">\n <NextuiPagination\n className=\"mt-2\"\n showControls\n showShadow\n size=\"sm\"\n radius=\"sm\"\n color=\"primary\"\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 if (autoScrollToTop && tableBoxRef.current) {\n scrollIntoTop(tableBoxRef.current);\n }\n }}\n {...nextuiPaginationProps}\n />\n </div>\n )}\n </>\n );\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 JSON.stringify(v);\n}\n\nfunction sortData<T>({\n sortKey,\n key,\n type,\n sortableColumnsMap,\n dataSource,\n}: {\n sortKey: string | undefined;\n key: string;\n type: 'asc' | 'desc' | 'none';\n sortableColumnsMap: {\n [k: string]: 'asc' | 'desc' | 'none';\n };\n dataSource: T[];\n}) {\n const sortableColumns: { [k: string]: 'asc' | 'desc' | 'none' } = {};\n Object.keys(sortableColumnsMap).map((k) => {\n sortableColumns[k] = k === key ? type : 'none';\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 return {\n sortableColumns,\n sortedData,\n };\n}\n\nfunction CardUI<T>({\n className,\n data,\n columns,\n columnOptions,\n rowKey,\n cardOptions,\n pagination,\n nextuiPaginationProps,\n onRowClick,\n autoScrollToTop,\n emptyContent,\n isLoading,\n loadingOptions,\n loadingContent,\n}: {\n className?: string;\n data: T[];\n columns: Column<T>[];\n columnOptions?: ColumnOptions<T>;\n rowKey: string | number | symbol;\n cardOptions?: CardOptions;\n pagination: PaginationState;\n nextuiPaginationProps: PaginationProps | {};\n onRowClick?: (item: T) => void;\n autoScrollToTop?: boolean;\n emptyContent?: React.ReactNode;\n isLoading?: boolean;\n loadingOptions?: LoadingOptions;\n loadingContent?: React.ReactNode;\n}) {\n const cardBoxRef = useRef<HTMLDivElement>(null);\n return (\n <div className={className} ref={cardBoxRef}>\n <div className={cn('space-y-2', cardOptions?.boxClassName)}>\n {isLoading ? (\n loadingContent ? (\n <Card className={cn('w-full h-40 flex flex-col justify-center items-center p-4 shadow-sm text-foreground-400', cardOptions?.cardClassName)}>{loadingContent}</Card>\n ) : (\n <DefaultLoading loadingOptions={loadingOptions} />\n )\n ) : data.length > 0 ? (\n data.map((item, index) => {\n return (\n <Card\n key={item[rowKey] || index}\n className={cn('w-full shadow-sm 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-foreground-400', 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 </Card>\n );\n })\n ) : (\n <Card className={cn('w-full h-40 flex flex-col justify-center items-center p-4 shadow-sm text-foreground-400', cardOptions?.cardClassName)}>{emptyContent}</Card>\n )}\n </div>\n {pagination.total > pagination.limit && (\n <div className=\"flex justify-center\">\n <NextuiPagination\n className='mt-2'\n showControls\n showShadow\n size=\"sm\"\n radius=\"sm\"\n color=\"primary\"\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 if (autoScrollToTop && cardBoxRef.current) {\n scrollIntoTop(cardBoxRef.current);\n }\n }}\n {...nextuiPaginationProps}\n />\n </div>\n )}\n </div>\n );\n}\n\nfunction DefaultLoading({ loadingOptions }: { loadingOptions?: LoadingOptions }) {\n const type = loadingOptions?.type || 'skeleton';\n const skeletonOptions = loadingOptions?.skeleton;\n const spinnerOptions = loadingOptions?.spinner;\n const spinnerProps = spinnerOptions?.spinnerProps || {};\n\n if (type === 'skeleton') {\n return <SkeletonBox className={cn('mt-2 flex-col', skeletonOptions?.boxClassName)} skClassName={cn('h-[30px] rounded', skeletonOptions?.skeletonClassName)} line={skeletonOptions?.line || 5} />;\n }\n\n return (\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}\n\nfunction scrollIntoTop(target: HTMLElement) {\n if (target) {\n const { top } = target.getBoundingClientRect();\n window.scrollTo({\n top: top + window.scrollY - 100,\n behavior: 'smooth',\n });\n }\n}\n\nfunction CollapseBody<T>({\n data,\n rowKey,\n columns,\n extendedTables,\n rowCss,\n}: {\n data: T[];\n rowKey: string | number | symbol;\n columns: Column<T>[];\n extendedTables: ExtendedTable<any>[];\n rowCss?: string | ((item: T) => string | undefined);\n}) {\n return (\n <TableBody>\n {data.map((item, index) => {\n return <CollapseBodyRow key={item[rowKey] || index} item={item} columns={columns} extendedTables={extendedTables} rowCss={rowCss} />;\n })}\n </TableBody>\n );\n}\n\nfunction CollapseBodyRow<T>({ item, columns, extendedTables, rowCss }: { item: T; columns: Column<T>[]; extendedTables: ExtendedTable<any>[]; rowCss?: string | ((item: T) => string | undefined) }) {\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 {columns.map((column) => {\n return (\n <TableCell key={column.key} className=\"max-w-[200px] overflow-auto\">\n {column.render ? column.render(item) : renderFieldValue(item[column.key])}\n </TableCell>\n );\n })}\n </TableRow>\n <TableRow className={cn(isOpen ? 'table-row' : 'hidden')}>\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 {exColumns.map((exC) => {\n return (\n <TableColumn key={exC.key} className=\"text-xs text-[#64748B] dark:text-gray-300\">\n {exC.label}\n </TableColumn>\n );\n })}\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"]}
package/dist/form.mjs CHANGED
@@ -32,7 +32,7 @@ function CheckboxWidget({
32
32
  classNames: {
33
33
  base: cn(
34
34
  "m-0 flex items-center justify-start w-full",
35
- "cursor-pointer rounded-lg gap-2 p-2.5 bg-content2 border-1 border-transparent",
35
+ "cursor-pointer rounded-lg gap-2 p-3 bg-content2 border-1 border-transparent",
36
36
  value ? `border-${color}` : ""
37
37
  )
38
38
  },
@@ -104,7 +104,7 @@ function SelectWidget(props) {
104
104
  required && /* @__PURE__ */ React6.createElement("span", { className: "ml-[2px] font-bold text-red-600" }, "*")
105
105
  ),
106
106
  description && /* @__PURE__ */ React6.createElement("div", { className: "my-1 text-xs text-[#A1A1A9] dark:text-[#717179]" }, description),
107
- /* @__PURE__ */ React6.createElement("select", { className: "w-full p-3 text-sm rounded-md bg-[#F4F4F5] dark:bg-[#27272A]", defaultValue: value, disabled, onChange: (event) => onChange(event.target.value) }, /* @__PURE__ */ React6.createElement("option", { value: "", disabled: true, selected: true }, placeholderText), selectOptions.map((item) => {
107
+ /* @__PURE__ */ React6.createElement("select", { className: "w-full py-3.5 px-2 text-sm rounded-md bg-[#F4F4F5] dark:bg-[#27272A]", defaultValue: value, disabled, onChange: (event) => onChange(event.target.value) }, /* @__PURE__ */ React6.createElement("option", { value: "", disabled: true, selected: true }, placeholderText), selectOptions.map((item) => {
108
108
  return /* @__PURE__ */ React6.createElement("option", { key: item.value, value: item.value }, item.label);
109
109
  }))
110
110
  ));
package/dist/form.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../components/JSONForm/index.tsx","../components/JSONForm/Layouts/gridLayout.tsx","../components/JSONForm/Layouts/format.tsx","../components/JSONFormWidgets/CheckboxWidget/index.tsx","../components/JSONFormWidgets/InputWidget/index.tsx","../components/JSONFormWidgets/SelectWidget/index.tsx","../components/JSONFormWidgets/EditorWidget/index.tsx","../store/standard/JSONSchemaState.ts","../components/JSONSchemaForm/index.tsx","../components/ui/grid/col.tsx","../components/ui/grid/styles.tsx","../components/ui/grid/grid.tsx","../components/JSONForm/Layouts/listLayout.tsx","../components/JSONForm/Layouts/simpleLayout.tsx","../components/JSONForm/Layouts/tabLayout.tsx","../components/JSONFormWidgets/TextareaWidget/index.tsx","../module/ComplexFormModal/Provider.tsx","../module/ComplexFormModal/index.tsx","../module/FormModal/index.tsx","../module/FormModal/Provider.tsx","../module/JSONView/index.tsx"],"names":["React","useState","Button","_a","formData","SubmitButton","numColSpan","useEffect","ChevronDown","ChevronUp","observer","useMemo","EventEmitter","makeAutoObservable","Modal","ModalBody","ModalContent","ModalHeader","Draggable","Provider_default","getFormState"],"mappings":"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","sourcesContent":["import React, { Dispatch, SetStateAction } from \"react\";\nimport { ButtonProps, TabsProps } from \"@nextui-org/react\";\nimport { UiSchema } from \"@rjsf/utils\";\nimport { JSONSchemaFormState } from \"../../store/standard/JSONSchemaState\";\nimport { GridLayout } from \"./Layouts/gridLayout\";\nimport { ListLayout } from \"./Layouts/listLayout\";\nimport { SimpleLayout } from \"./Layouts/simpleLayout\";\nimport { TabLayout } from \"./Layouts/tabLayout\";\n\nexport type LayoutType = 'TabLayout' | 'GridLayout' | 'ListLayout' | 'SimpleLayout';\n\nexport type FieldLayoutType<T, F extends keyof T> = Array<keyof NonNullable<T[F]>> | Array<Array<keyof NonNullable<T[F]>> | keyof NonNullable<T[F]>>;\n\nexport type FormLayoutType<T, L> = L extends 'TabLayout' | 'ListLayout' | 'SimpleLayout'\n ? {\n [F in keyof T]?: {\n title?: string;\n titleBoxCss?: string;\n fieldLayout?: FieldLayoutType<T, F>;\n submitButtonProps?: ButtonProps & { onAfterSubmit?: (formKey: FormKey<T>, data: FormDataOfKey<T>, setLoading: Dispatch<SetStateAction<boolean>>) => void };\n };\n }\n : L extends 'GridLayout'\n ? {\n [F in keyof T]?: {\n title?: string;\n titleBoxCss?: string;\n fieldLayout?: FieldLayoutType<T, F>;\n colSpan?: number;\n cardCss?: string;\n submitButtonProps?: ButtonProps & { onAfterSubmit?: (formKey: FormKey<T>, data: FormDataOfKey<T>, setLoading: Dispatch<SetStateAction<boolean>>) => void };\n };\n }\n : never;\n\nexport type LayoutConfigType<T, L> = L extends 'TabLayout'\n ? { $type: 'TabLayout'; $tabsProps?: TabsProps } & FormLayoutType<T, L>\n : L extends 'GridLayout'\n ? { $type: 'GridLayout'; $gridColumn?: number; } & FormLayoutType<T, L>\n : L extends 'ListLayout'\n ? { $type: 'ListLayout' } & FormLayoutType<T, L>\n : L extends 'SimpleLayout'\n ? { $type: 'SimpleLayout' } & FormLayoutType<T, L>\n : never;\n\nexport type FormDataType = {\n [key: string]: {\n [key: string]: string | number | boolean;\n };\n};\n\nexport type FormConfigType<T> = {\n [F in keyof T]?: {\n [X in keyof T[F]]?: {\n title?: string;\n description?: string;\n required?: boolean;\n selectOptions?: { label: string; value: string }[];\n } & UiSchema;\n };\n};\n\nexport type FormKey<T = FormDataType> = keyof T;\n\nexport type FormDataOfKey<T = FormDataType> = T[FormKey<T>];\n\nexport type JSONFormProps<T = FormDataType> = {\n className?: string;\n formData: T;\n formConfig?: FormConfigType<T>;\n layoutConfig?: LayoutConfigType<T, LayoutType>;\n children?: any;\n onBatchSubmit?: (data: T, setLoading: Dispatch<SetStateAction<boolean>>) => void;\n onSet?: (v: FormDataOfKey<T>, form: JSONSchemaFormState<FormDataOfKey<T>, UiSchema>) => FormDataOfKey<T>;\n onChange?: (data: Partial<T>) => void;\n onReady?: (formStates: { [F in keyof T]?: JSONSchemaFormState<FormDataOfKey<T>, UiSchema> }) => void;\n batchSubmitButtonProps?: ButtonProps & { onBatchSubmit?: (formData: T, setLoading: Dispatch<SetStateAction<boolean>>) => void };\n};\n\nconst components = {\n GridLayout,\n TabLayout,\n ListLayout,\n SimpleLayout,\n};\n\nexport const JSONForm = <T extends FormDataType>(props: JSONFormProps<T>) => {\n const type = props.layoutConfig?.$type || 'SimpleLayout';\n const Component = components[type];\n return (\n <div className={props.className}>\n {\n // @ts-ignore\n <Component {...props} />\n }\n </div>\n );\n};\n","import React, { useEffect } from \"react\";\nimport { Card } from \"@nextui-org/react\";\nimport { FormDataType, JSONFormProps, LayoutConfigType } from \"..\";\nimport { BatchSubmitButton, SubmitButton, getFormState } from \"./format\";\nimport { JSONSchemaForm } from \"../../../components/JSONSchemaForm\";\nimport { Grid, Col } from '../../../components/ui/grid';\nimport { cn } from '../../../lib/utils';\n\nexport const GridLayout = <T extends FormDataType>(props: JSONFormProps<T>) => {\n const { layoutConfig, onBatchSubmit, batchSubmitButtonProps, onReady } = props;\n const { $type, $gridColumn, ...formLayout } = layoutConfig as LayoutConfigType<T, 'GridLayout'>;\n const formStates = getFormState(props, formLayout);\n\n useEffect(() => {\n if (formStates && onReady) {\n onReady(formStates);\n }\n }, [formStates]);\n\n return (\n <>\n <Grid numItems={$gridColumn ?? 1} className=\"gap-2\">\n {Object.keys(formStates).map((key) => {\n const layout = formLayout[key];\n return (\n <Col numColSpan={layout?.colSpan ?? 1} key={key} id={`form-${key}`}>\n <Card className={cn(\"h-full m-0 p-4 shadow-sm border dark:border-[#3e3e3e]\", layout?.cardCss)}>\n <div className={cn('mb-2 font-bold text-center', layout?.titleBoxCss)}>{layout?.title || key}</div>\n <JSONSchemaForm formState={formStates[key]}>\n {layout?.submitButtonProps && <SubmitButton formKey={key} formState={formStates[key]} buttonProps={layout.submitButtonProps} />}\n </JSONSchemaForm>\n </Card>\n </Col>\n );\n })}\n </Grid>\n {(onBatchSubmit || batchSubmitButtonProps?.onBatchSubmit) && (\n <div className=\"w-full flex\">\n <BatchSubmitButton formStates={formStates} onSubmit={onBatchSubmit} buttonProps={batchSubmitButtonProps} />\n </div>\n )}\n </>\n );\n};","import React, { useState } from \"react\";\nimport { Button } from \"@nextui-org/react\";\nimport { UiSchema } from \"@rjsf/utils\";\nimport { FormDataOfKey, JSONFormProps } from \"..\";\nimport { CheckboxWidget } from \"../../../components/JSONFormWidgets/CheckboxWidget\";\nimport { InputWidget } from \"../../../components/JSONFormWidgets/InputWidget\";\nimport { SelectWidget } from \"../../../components/JSONFormWidgets/SelectWidget\";\nimport { EditorWidget } from '../../../components/JSONFormWidgets/EditorWidget';\nimport {\n JSONSchemaFormState,\n JSONValue,\n} from \"../../../store/standard/JSONSchemaState\";\nimport { helper } from \"../../../lib/helper\";\nimport { cn } from \"../../../lib/utils\";\n\nexport const getFormState = <T,>(\n props: JSONFormProps<T>,\n formLayout: { [x: string]: { fieldLayout?: any[] } } = {},\n) => {\n const { formData, formConfig, onSet, onChange } = props;\n\n const formStates: {\n [F in keyof T]?: JSONSchemaFormState<FormDataOfKey<T>, UiSchema>;\n } = {};\n\n Object.keys(formData).forEach((key) => {\n const metadata = formData[key];\n const formConfigData = formConfig?.[key] || {};\n const value = {};\n const required = [];\n const properties = Object.entries(metadata).reduce((p, c: any) => {\n const [k, v] = c;\n const type = typeof v;\n p[k] = {\n type,\n };\n if (!formConfigData[k]) {\n formConfigData[k] = {};\n }\n const uiOptions = formConfigData[k]['ui:options'] || {};\n if (type === \"string\" || type === \"number\") {\n if (formConfigData[k]?.selectOptions) {\n formConfigData[k][\"ui:widget\"] = SelectWidget;\n p[k].selectOptions = formConfigData[k].selectOptions;\n formConfigData[k]['ui:options'] = {\n size: 'sm',\n ...uiOptions,\n };\n } else {\n if (!formConfigData[k][\"ui:widget\"]) {\n formConfigData[k][\"ui:widget\"] = InputWidget;\n formConfigData[k][\"ui:options\"] = {\n labelPlacement: \"inside\",\n size: \"sm\",\n ...uiOptions,\n };\n if (type === \"number\") {\n p[k].inputType = \"number\";\n }\n if (helper.json.isJsonString(v)) {\n formConfigData[k]['ui:widget'] = EditorWidget;\n formConfigData[k][\"ui:options\"] = {\n jsonStrSpace: 2,\n ...uiOptions,\n };\n }\n }\n }\n }\n if (type === \"boolean\") {\n formConfigData[k][\"ui:widget\"] = CheckboxWidget;\n formConfigData[k][\"ui:options\"] = {\n size: \"sm\",\n ...uiOptions,\n };\n }\n if (formConfigData[k]?.inputType) {\n p[k].inputType = formConfigData[k].inputType;\n }\n if (formConfigData[k]?.title) {\n p[k].title = formConfigData[k].title || k;\n }\n if (formConfigData[k]?.description) {\n p[k].description = formConfigData[k].description;\n }\n // if (formConfigData[k]?.selectOptions) {\n // p[k].enum = formConfigData[k].selectOptions.map((i) => i.value);\n // p[k].enumNames = formConfigData[k].selectOptions.map((i) => i.label);\n // }\n if (formConfigData[k]?.required) {\n //@ts-ignore\n required.push(k);\n }\n value[k] = v;\n return p;\n }, {});\n const schema = {\n type: \"object\",\n properties,\n required,\n };\n const form = new JSONSchemaFormState({\n //@ts-ignore\n schema,\n uiSchema: {\n \"ui:submitButtonOptions\": {\n norender: true,\n },\n ...formConfigData,\n layout: formLayout[key]?.fieldLayout,\n },\n // afterSubmit: async (e) => {\n // onSubmit?.(key as FormKey<T>, e.formData as FormDataOfKey<T>);\n // },\n afterChange: (e, id) => {\n const { formData } = e;\n if (formData) {\n const field = id.replace('root_', '');\n const data = {\n [key]: {\n [field]: formData[field],\n }\n };\n //@ts-ignore\n onChange?.(data);\n }\n },\n value: new JSONValue({\n default: value,\n //@ts-ignore\n onSet: (v) => {\n if (onSet) {\n return onSet(v as FormDataOfKey<T>, form);\n }\n return v;\n },\n }),\n });\n\n formStates[key] = form;\n });\n\n return formStates;\n};\n\nexport const BatchSubmitButton = ({ formStates, onSubmit, buttonProps }) => {\n const { className, onClick, children, isLoading, onBatchSubmit, ...rest } = buttonProps || {};\n const [loading, setLoading] = useState(false);\n return (\n <Button\n className={cn('mt-4 ml-auto', className)}\n size=\"sm\"\n color=\"primary\"\n isLoading={loading}\n onClick={(e) => {\n const formData = {};\n const formKeys = Object.keys(formStates);\n for (const key of formKeys) {\n const form = formStates[key];\n const current = form.formRef.current;\n if (current) {\n current.submit();\n const data = current.state.formData;\n const required = current.state.schema.required;\n for (const i of required) {\n if (!data[i]) {\n return;\n }\n }\n const errors = current.state.errors;\n if (errors.length > 0) {\n return;\n }\n formData[key] = data;\n } else {\n console.error('formRef.current is null');\n return;\n }\n }\n onSubmit?.(formData, setLoading);\n onBatchSubmit?.(formData, setLoading);\n }}\n {...rest}\n >\n {children || 'Submit'}\n </Button>\n );\n};\n\nexport const SubmitButton = ({ formKey, formState, buttonProps }) => {\n const { className, onClick, children, isLoading, onAfterSubmit, ...rest } = buttonProps || {};\n const [loading, setLoading] = useState(false);\n return (\n <div className=\"w-full flex\">\n <Button\n className={cn('mt-4 ml-auto', className)}\n type=\"submit\"\n color=\"primary\"\n size=\"sm\"\n isLoading={loading}\n onClick={(e) => {\n let formData = {};\n const current = formState.formRef.current;\n if (current) {\n current.submit();\n formData = current.state.formData;\n const required = current.state.schema.required;\n for (const i of required) {\n if (!formData[i]) {\n return;\n }\n }\n const errors = current.state.errors;\n if (errors.length > 0) {\n return;\n }\n }\n onAfterSubmit?.(formKey, formData, setLoading);\n }}\n {...rest}\n >\n {children || 'Submit'}\n </Button>\n </div>\n );\n};\n","import React from \"react\";\nimport { Checkbox } from \"@nextui-org/react\";\nimport { WidgetProps } from \"@rjsf/utils\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"../../../lib/utils\";\n\ntype Options = {\n className?: string;\n size: 'sm' | 'md' | 'lg';\n color: 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'danger';\n};\n\nexport interface CheckboxWidgetProps extends WidgetProps {\n options: Options;\n}\n\nexport interface CheckboxWidgetUIOptions {\n \"ui:widget\": (props: CheckboxWidgetProps) => JSX.Element;\n \"ui:options\": Options;\n}\n\nexport function CheckboxWidget({\n onChange,\n options,\n label,\n value,\n disabled,\n schema,\n}: CheckboxWidgetProps) {\n const { size = 'sm', color = 'primary' } = options;\n const { description } = schema;\n\n return (\n <>\n <Checkbox\n classNames={{\n base: cn(\n 'm-0 flex items-center justify-start w-full',\n 'cursor-pointer rounded-lg gap-2 p-2.5 bg-content2 border-1 border-transparent',\n value ? `border-${color}` : '',\n ),\n }}\n defaultSelected={value}\n isDisabled={disabled}\n icon={<Check className=\"bg-white dark:bg-black\" />}\n color={color}\n size={size}\n onChange={(e: any) => {\n const checked = e.target.checked;\n onChange(checked);\n }}\n >\n {label}\n </Checkbox>\n {description && <div className=\"mt-1 text-xs text-[#A1A1A9] dark:text-[#717179]\">{description}</div>}\n </>\n );\n}\n\n","import React from \"react\";\nimport { Input } from \"@nextui-org/react\";\nimport { WidgetProps } from \"@rjsf/utils\";\nimport { cn } from \"../../../lib/utils\";\n\ntype Options = {\n className?: string;\n labelPlacement?: \"inside\" | \"outside\" | \"outside-left\";\n size: \"sm\" | \"md\" | \"lg\";\n placeholder?: string;\n};\n\nexport interface InputWidgetProps extends WidgetProps {\n options: Options;\n}\n\nexport interface InputWidgetUIOptions {\n \"ui:widget\": (props: InputWidgetProps) => JSX.Element;\n \"ui:options\": Options;\n}\n\nexport function InputWidget(props: InputWidgetProps) {\n const {\n onChange,\n options,\n label,\n value,\n required,\n disabled,\n schema,\n } = props;\n const { className, labelPlacement = \"inside\", size = \"sm\" } = options;\n const placeholder = props.placeholder || options.placeholder;\n return (\n <Input\n className={cn(\"w-full\", className)}\n label={label}\n placeholder={placeholder}\n value={value}\n defaultValue=\"\"\n isRequired={required}\n isDisabled={disabled}\n size={size}\n labelPlacement={labelPlacement}\n description={schema.description || \"\"}\n type={schema.inputType || \"text\"}\n onChange={(e) => onChange(e.target.value)}\n />\n );\n}\n\n","import React from \"react\";\nimport { WidgetProps } from \"@rjsf/utils\";\nimport { cn } from \"../../../lib/utils\";\n\ntype Options = {\n className?: string;\n labelPlacement?: \"top\" | \"left\";\n size: \"sm\" | \"md\" | \"lg\";\n placeholder?: string;\n};\n\nexport interface SelectWidgetProps extends WidgetProps {\n options: Options;\n}\n\nexport interface SelectWidgetUIOptions {\n \"ui:widget\": (props: SelectWidgetProps) => JSX.Element;\n \"ui:options\": Options;\n}\n\nexport function SelectWidget(props: SelectWidgetProps) {\n const { onChange, options, label, value, required, disabled, schema } = props;\n const { className, labelPlacement = 'top', placeholder = 'Select an option' } = options;\n const { selectOptions = [], description } = schema;\n const labelText = label?.trim();\n const placeholderText = props.placeholder || placeholder;\n\n return (\n <div className={cn(\"\", className)}>\n <div\n className={cn(\"flex flex-col\", {\n \"flex-row items-center\": labelPlacement === \"left\",\n })}\n >\n {labelText && (\n <label\n className={cn(\"flex items-center text-sm whitespace-nowrap\", {\n \"mb-2\": labelPlacement === \"top\",\n \"mr-2\": labelPlacement === \"left\",\n })}\n >\n {labelText}\n {required && <span className=\"ml-[2px] font-bold text-red-600\">*</span>}\n </label>\n )}\n {description && <div className=\"my-1 text-xs text-[#A1A1A9] dark:text-[#717179]\">{description}</div>}\n <select className=\"w-full p-3 text-sm rounded-md bg-[#F4F4F5] dark:bg-[#27272A]\" defaultValue={value} disabled={disabled} onChange={(event) => onChange(event.target.value)}>\n <option value=\"\" disabled selected>\n {placeholderText}\n </option>\n {selectOptions.map((item) => {\n return (\n <option key={item.value} value={item.value}>\n {item.label}\n </option>\n );\n })}\n </select>\n </div>\n </div>\n );\n}\n\n","import React, { useState } from \"react\";\nimport MonacoEditor, { EditorProps } from \"@monaco-editor/react\";\nimport { WidgetProps } from \"@rjsf/utils\";\nimport { Button } from \"@nextui-org/react\";\nimport { cn } from \"../../../lib/utils\";\nimport { helper } from \"../../../lib/helper\";\n\ntype Options = {\n editorHeight?: string;\n readOnly?: boolean;\n language?: string;\n languageSelectorOptions?: { label: string; value: string }[];\n onChangeLanguage?: (v: string) => void;\n onRun?: (v: string) => void;\n onMount?: EditorProps['onMount'];\n jsonStrSpace?: number; // Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.\n};\n\nexport interface EditorWidgetProps extends WidgetProps {\n options: Options;\n}\n\nexport type EditorWidgetUIOptions = {\n \"ui:widget\": (props: EditorWidgetProps) => JSX.Element;\n \"ui:options\": Options;\n};\n\nexport const EditorWidget = ({ label, options = {}, value, required, schema, disabled, onChange }: EditorWidgetProps) => {\n const { editorHeight = '200px', readOnly = false, language = 'json', jsonStrSpace, languageSelectorOptions = [], onChangeLanguage, onRun, onMount } = options;\n const [selectedLanguage, setSelectedLanguage] = useState('');\n const [runLoading, setRunLoading] = useState(false);\n const showLanguageSelector = languageSelectorOptions.length > 0;\n\n return (\n <div className='flex flex-col relative'>\n <div className={cn('flex justify-between items-center', { 'mb-[10px]': label.trim() || showLanguageSelector })}>\n {label && (\n <label\n className=\"mr-2 flex items-center text-sm\"\n >\n {label}\n {required && <span className=\"font-bold text-red-600\">*</span>}\n </label>\n )}\n {showLanguageSelector && (\n <select\n className=\"w-full p-3 text-sm rounded-md bg-[#F4F4F5] dark:bg-[#27272A]\"\n value={selectedLanguage}\n onChange={(event) => {\n const v = event.target.value;\n setSelectedLanguage(v);\n onChangeLanguage && onChangeLanguage(v);\n }}\n >\n {languageSelectorOptions.map((item) => {\n return <option key={item.value} value={item.value}>{item.label}</option>\n })}\n </select>\n )}\n </div>\n {schema.description && <div className='mb-2 text-xs text-[#A1A1A9]'>{schema.description}</div>}\n <div className=\"rounded-lg overflow-hidden relative\">\n <MonacoEditor\n options={{ readOnly: readOnly || disabled, minimap: { enabled: false } }}\n height={editorHeight}\n theme=\"vs-dark\"\n language={selectedLanguage ? selectedLanguage : language}\n value={value}\n onChange={(v) => onChange(v)}\n onMount={(editor, monaco) => {\n onMount && onMount(editor, monaco);\n if (language === 'json' && jsonStrSpace && value) {\n const json = helper.json.safeParse(value);\n editor.setValue(JSON.stringify(json, null, jsonStrSpace));\n }\n }}\n />\n </div>\n {onRun && (\n <Button\n className=\"absolute bottom-2 right-4\"\n size=\"sm\"\n isLoading={runLoading}\n onClick={async () => {\n setRunLoading(true);\n await onRun(value);\n setRunLoading(false);\n }}\n >\n Run\n </Button>\n )}\n </div>\n );\n};\n\n","import { createRef, LegacyRef, Ref } from \"react\";\nimport Form, { IChangeEvent } from \"@rjsf/core\";\nimport { RJSFSchema, UiSchema } from \"@rjsf/utils\";\nimport validator from \"@rjsf/validator-ajv8\";\nimport { action, computed, makeObservable, observable, toJS } from \"mobx\";\n\nimport { helper } from \"../../lib/helper\";\n\nexport class JSONSchemaFormState<T, U = UiSchema> {\n formRef: LegacyRef<Form<any, RJSFSchema, any>> & Ref<Form<any, RJSFSchema, any>>;\n value: JSONValue<T> = new JSONValue();\n schema: RJSFSchema;\n uiSchema: U;\n reactive: boolean = true;\n readonly = false;\n liveValidate = false;\n validator = validator\n\n get formData() {\n return this.value.get();\n }\n set formData(value: T) {\n this.value.set(value);\n }\n get dynamicData() {\n return this.getDymaicData();\n }\n getDymaicData = () => {\n return { ready: true };\n };\n onChange = (e: IChangeEvent<T>, id: string) => {\n this.value.set(e.formData);\n if (this.afterChange) {\n this.afterChange(e, id);\n }\n };\n onSubmit = (e: IChangeEvent<T>) => {\n if (this.afterSubmit) {\n this.afterSubmit(e);\n }\n };\n afterSubmit: (e: IChangeEvent<T>) => void;\n afterChange: (e: IChangeEvent<T>, id: string) => void;\n reset({ force = false } = {}) {\n if (force) {\n this.value.value = this.value.default;\n } else {\n this.value.reset();\n }\n return this;\n }\n customValidate = (formData: T, errors: any) => errors;\n\n constructor(args: Partial<JSONSchemaFormState<T, U>> = {}) {\n const formRef = createRef();\n Object.assign(this, args, { formRef });\n if (this.reactive) {\n //@ts-ignore\n makeObservable(this, {\n formData: computed,\n });\n }\n }\n}\n\nexport abstract class JSONSchemaValue<T> {\n value?: T = null as T;\n default?: T = null as T;\n constructor(args: Partial<JSONSchemaValue<T>> = {}) {\n if (!args.value && args.default) {\n args.value = args.default;\n }\n Object.assign(this, args);\n makeObservable(this, {\n value: observable,\n set: action,\n });\n }\n set(value: Partial<T>, { onSet = true } = {}) {\n value = this.onSet(value);\n const newVal = helper.deepMerge(this.value, value);\n this.value = toJS(newVal);\n return this.value;\n }\n onSet(value: Partial<T>) {\n return value;\n }\n get() {\n return this.getFormat(this.value);\n }\n getFormat(value: T) {\n return value;\n }\n reset() {\n this.set(this.default);\n }\n}\n\nexport class JSONValue<T> extends JSONSchemaValue<T> {\n constructor(args: Partial<JSONValue<T>> = {}) {\n super(args);\n }\n}\n","\"use client\";\n\nimport React, { useState } from \"react\";\nimport { Button } from \"@nextui-org/react\";\nimport Form from \"@rjsf/core\";\nimport {\n type ErrorListProps,\n type FieldTemplateProps,\n type ObjectFieldTemplateProps,\n type SubmitButtonProps,\n} from \"@rjsf/utils\";\nimport * as Utils from \"@rjsf/utils\"\nimport { ChevronDown, ChevronUp } from \"lucide-react\";\nimport { observer } from \"mobx-react-lite\";\nimport { cn } from \"../../lib/utils\";\nimport { JSONSchemaFormState } from \"../../store/standard/JSONSchemaState\";\n\nfunction FieldTemplate(props: FieldTemplateProps) {\n const { id, classNames, label, help, required, description, errors, children, schema, uiSchema } = props;\n\n if (uiSchema && uiSchema['ui:widget'] === 'hidden') { return null; }\n\n // const hideLabel = schema.type === 'object' || schema.type === 'boolean';\n\n const isDate = uiSchema && uiSchema['ui:widget'] === 'date';\n const isDateTime = uiSchema && uiSchema['ui:widget'] === 'date-time';\n const isTime = uiSchema && uiSchema['ui:widget'] === 'time';\n const showLabel = isDate || isDateTime || isTime;\n\n return (\n <div className={cn(classNames)}>\n {showLabel && (\n <label htmlFor={id} className={cn('flex items-center h-8')}>\n <span className=\"text-sm\">{label}</span>\n {required && <span className=\"font-bold text-red-600\">*</span>}\n </label>\n )}\n\n {/* {description} */}\n {/* {children} */}\n {/* {help} */}\n\n {children}\n </div>\n );\n}\n\nconst renderLayout = (layout: any[], fields: { [k: string]: React.ReactElement }, n = 1) => {\n n++;\n return layout.map((item, index) => {\n if (Array.isArray(item)) {\n const even = (n & 1) === 0;\n return (\n <div key={index} className={cn('w-full flex justify-between items-center space-x-2', even ? 'flex-row items-end' : 'flex-col')}>\n {renderLayout(item, fields, n)}\n </div>\n );\n } else {\n return (\n <div className=\"w-full\" key={index}>\n {fields[item]}\n </div>\n );\n }\n });\n};\n\nconst ObjectFieldTemplate = ({ title, idSchema: { $id }, properties, uiSchema: { layout } }: ObjectFieldTemplateProps) => {\n const [opened, setOpened] = useState(false);\n const fields = Object.fromEntries(properties.map((item) => [item.name, item.content]));\n return (\n <div className=\"w-full space-y-2.5\">\n {$id === 'root' ? (\n layout ? (\n renderLayout(layout, fields)\n ) : (\n properties.map((element) => {\n return (\n <div key={element.content.key}>\n {element.content}\n </div>\n );\n })\n )\n ) : (\n <>\n <div\n className=\"mt-5 mb-[10px] flex justify-between items-center cursor-pointer border-t-[1px solid #E5E5EA] py-[5px] hover:bg-[#F2F2F7] dark:hover:bg-gray-900\"\n onClick={() => setOpened((o) => !o)}\n >\n <div className=\"text-gray-900 dark:text-gray-100 font-bold text-base\">{title}</div>\n {opened ? <ChevronUp /> : <ChevronDown />}\n </div>\n <div className={cn('mt-2 space-y-2.5', opened ? 'block' : 'hidden')}>\n {layout\n ? renderLayout(layout, fields)\n : properties.map((element) => {\n return (\n <div key={element.content.key}>\n {element.content}\n </div>\n );\n })}\n </div>\n </>\n )}\n </div>\n );\n};\n\nconst ErrorListTemplate = ({ errors }: ErrorListProps) => {\n return (\n <div>\n <div className=\"font-bold\">Errors</div>\n <div className=\"mt-[10px]\">\n {errors.map((error) => (\n <div className=\"mb-[10px]\" color=\"red\" key={error.property}>\n {error.stack}\n </div>\n ))}\n </div>\n </div>\n );\n};\n\nconst SubmitButton = ({ uiSchema }: SubmitButtonProps) => {\n const { submitText, norender, props: submitButtonProps = {} } = Utils.getSubmitButtonOptions(uiSchema);\n if (norender) {\n return null;\n }\n return (\n <div className=\"flex justify-end mt-4\">\n <Button type=\"submit\" color='primary' size='sm'>{submitText}</Button>\n </div>\n );\n};\n\ninterface Props {\n formState: JSONSchemaFormState<any>;\n children?: any;\n}\n\nexport const JSONSchemaForm = observer(({ children, formState }: Props) => {\n if (!formState?.dynamicData?.ready) return <></>;\n return (\n <Form\n showErrorList=\"bottom\"\n templates={{\n ObjectFieldTemplate,\n FieldTemplate,\n ErrorListTemplate,\n ButtonTemplates: { SubmitButton },\n }}\n formData={formState.formData}\n readonly={formState.readonly}\n uiSchema={formState.uiSchema}\n schema={formState.schema}\n onChange={formState.onChange}\n onSubmit={formState.onSubmit}\n validator={formState.validator}\n customValidate={formState.customValidate}\n ref={formState.formRef}\n >\n {children && children}\n </Form>\n );\n});\n","import React from 'react';\nimport { colSpan, colSpanLg, colSpanMd, colSpanSm, GridClassesMapping } from './styles';\nimport { cn } from '../../../lib/utils';\n\nexport interface ColProps extends React.HTMLAttributes<HTMLDivElement> {\n numColSpan?: number;\n numColSpanSm?: number;\n numColSpanMd?: number;\n numColSpanLg?: number;\n}\n\nconst Col = React.forwardRef<HTMLDivElement, ColProps>((props, ref) => {\n const { numColSpan = 1, numColSpanSm, numColSpanMd, numColSpanLg, children, className, ...other } = props;\n const getColSpan = (numColSpan: number | undefined, colSpanMapping: GridClassesMapping): string => {\n if (!numColSpan) return '';\n if (!Object.keys(colSpanMapping).includes(String(numColSpan))) return '';\n return colSpanMapping[numColSpan];\n };\n\n const getColSpanClassNames = () => {\n const spanBase = getColSpan(numColSpan, colSpan);\n const spanSm = getColSpan(numColSpanSm, colSpanSm);\n const spanMd = getColSpan(numColSpanMd, colSpanMd);\n const spanLg = getColSpan(numColSpanLg, colSpanLg);\n return cn(spanBase, spanSm, spanMd, spanLg);\n };\n\n return (\n <div ref={ref} className={cn(getColSpanClassNames(), className)} {...other}>\n {children}\n </div>\n );\n});\n\nCol.displayName = 'Col';\n\nexport default Col;\n","export type GridClassesMapping = {\n [key: string]: string;\n};\n\nexport const gridCols: GridClassesMapping = {\n 0: 'grid-cols-none',\n 1: 'grid-cols-1',\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n 4: 'grid-cols-4',\n 5: 'grid-cols-5',\n 6: 'grid-cols-6',\n 7: 'grid-cols-7',\n 8: 'grid-cols-8',\n 9: 'grid-cols-9',\n 10: 'grid-cols-10',\n 11: 'grid-cols-11',\n 12: 'grid-cols-12',\n};\n\nexport const gridColsSm: GridClassesMapping = {\n 0: 'sm:grid-cols-none',\n 1: 'sm:grid-cols-1',\n 2: 'sm:grid-cols-2',\n 3: 'sm:grid-cols-3',\n 4: 'sm:grid-cols-4',\n 5: 'sm:grid-cols-5',\n 6: 'sm:grid-cols-6',\n 7: 'sm:grid-cols-7',\n 8: 'sm:grid-cols-8',\n 9: 'sm:grid-cols-9',\n 10: 'sm:grid-cols-10',\n 11: 'sm:grid-cols-11',\n 12: 'sm:grid-cols-12',\n};\n\nexport const gridColsMd: GridClassesMapping = {\n 0: 'md:grid-cols-none',\n 1: 'md:grid-cols-1',\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-3',\n 4: 'md:grid-cols-4',\n 5: 'md:grid-cols-5',\n 6: 'md:grid-cols-6',\n 7: 'md:grid-cols-7',\n 8: 'md:grid-cols-8',\n 9: 'md:grid-cols-9',\n 10: 'md:grid-cols-10',\n 11: 'md:grid-cols-11',\n 12: 'md:grid-cols-12',\n};\n\nexport const gridColsLg: GridClassesMapping = {\n 0: 'lg:grid-cols-none',\n 1: 'lg:grid-cols-1',\n 2: 'lg:grid-cols-2',\n 3: 'lg:grid-cols-3',\n 4: 'lg:grid-cols-4',\n 5: 'lg:grid-cols-5',\n 6: 'lg:grid-cols-6',\n 7: 'lg:grid-cols-7',\n 8: 'lg:grid-cols-8',\n 9: 'lg:grid-cols-9',\n 10: 'lg:grid-cols-10',\n 11: 'lg:grid-cols-11',\n 12: 'lg:grid-cols-12',\n};\n\nexport const colSpan: GridClassesMapping = {\n 1: 'col-span-1',\n 2: 'col-span-2',\n 3: 'col-span-3',\n 4: 'col-span-4',\n 5: 'col-span-5',\n 6: 'col-span-6',\n 7: 'col-span-7',\n 8: 'col-span-8',\n 9: 'col-span-9',\n 10: 'col-span-10',\n 11: 'col-span-11',\n 12: 'col-span-12',\n 13: 'col-span-13',\n};\n\nexport const colSpanSm: GridClassesMapping = {\n 1: 'sm:col-span-1',\n 2: 'sm:col-span-2',\n 3: 'sm:col-span-3',\n 4: 'sm:col-span-4',\n 5: 'sm:col-span-5',\n 6: 'sm:col-span-6',\n 7: 'sm:col-span-7',\n 8: 'sm:col-span-8',\n 9: 'sm:col-span-9',\n 10: 'sm:col-span-10',\n 11: 'sm:col-span-11',\n 12: 'sm:col-span-12',\n 13: 'sm:col-span-13',\n};\n\nexport const colSpanMd: GridClassesMapping = {\n 1: 'md:col-span-1',\n 2: 'md:col-span-2',\n 3: 'md:col-span-3',\n 4: 'md:col-span-4',\n 5: 'md:col-span-5',\n 6: 'md:col-span-6',\n 7: 'md:col-span-7',\n 8: 'md:col-span-8',\n 9: 'md:col-span-9',\n 10: 'md:col-span-10',\n 11: 'md:col-span-11',\n 12: 'md:col-span-12',\n 13: 'md:col-span-13',\n};\n\nexport const colSpanLg: GridClassesMapping = {\n 1: 'lg:col-span-1',\n 2: 'lg:col-span-2',\n 3: 'lg:col-span-3',\n 4: 'lg:col-span-4',\n 5: 'lg:col-span-5',\n 6: 'lg:col-span-6',\n 7: 'lg:col-span-7',\n 8: 'lg:col-span-8',\n 9: 'lg:col-span-9',\n 10: 'lg:col-span-10',\n 11: 'lg:col-span-11',\n 12: 'lg:col-span-12',\n 13: 'lg:col-span-13',\n};\n","import React from 'react';\nimport { GridClassesMapping, gridCols, gridColsLg, gridColsMd, gridColsSm } from './styles';\nimport { cn } from '../../../lib/utils';\n\nconst getGridCols = (numCols: number | undefined, gridColsMapping: GridClassesMapping): string => {\n if (!numCols) return '';\n if (!Object.keys(gridColsMapping).includes(String(numCols))) return '';\n return gridColsMapping[numCols];\n};\n\nexport interface GridProps extends React.HTMLAttributes<HTMLDivElement> {\n numItems?: number;\n numItemsSm?: number;\n numItemsMd?: number;\n numItemsLg?: number;\n children: React.ReactNode;\n}\n\nconst Grid = React.forwardRef<HTMLDivElement, GridProps>((props, ref) => {\n const { numItems = 1, numItemsSm, numItemsMd, numItemsLg, children, className, ...other } = props;\n\n const colsBase = getGridCols(numItems, gridCols);\n const colsSm = getGridCols(numItemsSm, gridColsSm);\n const colsMd = getGridCols(numItemsMd, gridColsMd);\n const colsLg = getGridCols(numItemsLg, gridColsLg);\n\n const colClassNames = cn(colsBase, colsSm, colsMd, colsLg);\n\n return (\n <div ref={ref} className={cn('grid', colClassNames, className)} {...other}>\n {children}\n </div>\n );\n});\n\nGrid.displayName = 'Grid';\n\nexport default Grid;\n","import React, { useEffect, useState } from \"react\";\nimport { UiSchema } from \"@rjsf/utils\";\nimport { ChevronDown, ChevronUp } from \"lucide-react\";\nimport { FormDataType, JSONFormProps, LayoutConfigType } from \"..\";\nimport { JSONSchemaForm } from \"../../../components/JSONSchemaForm\";\nimport { cn } from \"../../../lib/utils\";\nimport { JSONSchemaFormState } from \"../../../store/standard/JSONSchemaState\";\nimport { BatchSubmitButton, SubmitButton, getFormState } from \"./format\";\n\nconst CollapsibleBox = ({ formKey, title, titleBoxCss, formState, submitButtonProps }: { formKey: string; title: string; titleBoxCss?: string; formState: JSONSchemaFormState<{ [key: string]: any }, UiSchema>; submitButtonProps: any }) => {\n const [opened, setOpened] = useState(true);\n return (\n <div id={`form-${formKey}`}>\n <div\n className=\"mt-5 mb-[10px] flex justify-between items-center cursor-pointer border-t-[1px solid #E5E5EA] py-[5px] hover:bg-[#F2F2F7] dark:hover:bg-gray-900\"\n onClick={() => setOpened((o) => !o)}\n >\n <div className={cn('text-gray-900 dark:text-gray-100 font-bold text-base', titleBoxCss)}>{title}</div>\n {opened ? <ChevronUp /> : <ChevronDown />}\n </div>\n <div className={cn('mt-2', opened ? 'block' : 'hidden')}>\n <JSONSchemaForm formState={formState}>{submitButtonProps && <SubmitButton formKey={formKey} formState={formState} buttonProps={submitButtonProps} />}</JSONSchemaForm>\n </div>\n </div>\n );\n};\n\nexport const ListLayout = <T extends FormDataType>(props: JSONFormProps<T>) => {\n const { layoutConfig = {}, onBatchSubmit, batchSubmitButtonProps, onReady } = props;\n const { $type, ...formLayout } = layoutConfig as LayoutConfigType<T, 'ListLayout'>;\n const formStates = getFormState(props, formLayout);\n\n useEffect(() => {\n if (formStates && onReady) {\n onReady(formStates);\n }\n }, [formStates]);\n\n return (\n <>\n {Object.keys(formStates).map((key) => {\n const layout = formLayout[key];\n const formState = formStates[key];\n return <CollapsibleBox key={key} formKey={key} title={layout?.title || key} titleBoxCss={layout?.titleBoxCss} formState={formState} submitButtonProps={layout?.submitButtonProps} />;\n })}\n {(onBatchSubmit || batchSubmitButtonProps?.onBatchSubmit) && (\n <div className=\"w-full flex\">\n <BatchSubmitButton formStates={formStates} onSubmit={onBatchSubmit} buttonProps={batchSubmitButtonProps} />\n </div>\n )}\n </>\n );\n};","import React, { useEffect } from 'react';\nimport { FormDataType, JSONFormProps, LayoutConfigType } from '..';\nimport { JSONSchemaForm } from '../../../components/JSONSchemaForm';\nimport { BatchSubmitButton, SubmitButton, getFormState } from './format';\n\nexport const SimpleLayout = <T extends FormDataType>(props: JSONFormProps<T>) => {\n const { layoutConfig = {}, onBatchSubmit, batchSubmitButtonProps, onReady } = props;\n const { $type, ...formLayout } = layoutConfig as LayoutConfigType<T, 'SimpleLayout'>;\n const formStates = getFormState(props, formLayout);\n\n useEffect(() => {\n if (formStates && onReady) {\n onReady(formStates);\n }\n }, [formStates]);\n\n return (\n <>\n <div className=\"space-y-2\">\n {Object.keys(formStates).map((key) => {\n const layout = formLayout[key];\n return (\n <div key={key} id={`form-${key}`}>\n <JSONSchemaForm formState={formStates[key]}>{layout?.submitButtonProps && <SubmitButton formKey={key} formState={formStates[key]} buttonProps={layout.submitButtonProps} />}</JSONSchemaForm>\n </div>\n );\n })}\n </div>\n {(onBatchSubmit || batchSubmitButtonProps?.onBatchSubmit) && (\n <div className=\"w-full flex\">\n <BatchSubmitButton formStates={formStates} onSubmit={onBatchSubmit} buttonProps={batchSubmitButtonProps} />\n </div>\n )}\n </>\n );\n};\n","import React, { useEffect, useMemo, useState } from \"react\";\nimport { Tab, Tabs } from \"@nextui-org/react\";\nimport { FormDataType, JSONFormProps, LayoutConfigType } from \"..\";\nimport { JSONSchemaForm } from \"../../../components/JSONSchemaForm\";\nimport { BatchSubmitButton, SubmitButton, getFormState } from \"./format\";\nimport { cn } from \"../../../lib/utils\";\n\nexport const TabLayout = <T extends FormDataType>(props: JSONFormProps<T>) => {\n const { layoutConfig = {}, onBatchSubmit, batchSubmitButtonProps, onReady } = props;\n const {\n $type,\n $tabsProps = {\n color: 'default',\n },\n ...formLayout\n } = layoutConfig as LayoutConfigType<T, 'TabLayout'>;\n const formStates = useMemo(() => getFormState(props, formLayout), [props.formData, props.formConfig, props.layoutConfig]);\n const formKeys = Object.keys(formStates);\n const [selectedTab, setSelectedTab] = useState(formKeys[0] || '');\n\n useEffect(() => {\n if (formStates && onReady) {\n onReady(formStates);\n }\n }, [formStates]);\n\n return (\n <>\n <Tabs\n {...$tabsProps}\n selectedKey={selectedTab}\n onSelectionChange={(key: string) => {\n setSelectedTab(key);\n }}\n >\n {formKeys.map((key) => {\n const layout = formLayout[key];\n return <Tab id={`form-${key}-tab-menu`} key={key} title={<div className={layout?.titleBoxCss}>{layout?.title || key}</div>} />;\n })}\n </Tabs>\n {formKeys.map((key) => {\n const layout = formLayout[key];\n return (\n <div\n key={key}\n id={`form-${key}-tab-content`}\n className={cn('mt-4', selectedTab === key ? '' : 'hidden')}\n >\n <JSONSchemaForm formState={formStates[key]}>\n {layout?.submitButtonProps && <SubmitButton formKey={key} formState={formStates[key]} buttonProps={layout.submitButtonProps} />}\n </JSONSchemaForm>\n </div>\n );\n })}\n {(onBatchSubmit || batchSubmitButtonProps?.onBatchSubmit) && (\n <div className=\"w-full flex\">\n <BatchSubmitButton formStates={formStates} onSubmit={onBatchSubmit} buttonProps={batchSubmitButtonProps} />\n </div>\n )}\n </>\n );\n};\n","import React from 'react';\nimport { Textarea } from '@nextui-org/react';\nimport { WidgetProps } from '@rjsf/utils';\nimport { cn } from \"../../../lib/utils\";\n\ntype Options = {\n className?: string;\n labelPlacement?: 'inside' | 'outside' | 'outside-left';\n size: 'sm' | 'md' | 'lg',\n minRows?: number;\n maxRows?: number;\n placeholder?: string;\n};\n\nexport interface TextareaWidgetProps extends WidgetProps {\n options: Options;\n}\n\nexport interface TextareaWidgetUIOptions {\n 'ui:widget': (props: TextareaWidgetProps) => JSX.Element;\n 'ui:options': Options;\n}\n\nexport function TextareaWidget(props: TextareaWidgetProps) {\n const { onChange, options, label, value, required, disabled, schema } = props;\n const { className, labelPlacement = 'inside', size = 'md', minRows = 2, maxRows = 8 } = options;\n const placeholder = props.placeholder || options.placeholder;\n return (\n <Textarea\n className={cn('w-full', className)}\n label={label}\n placeholder={placeholder}\n value={value}\n isRequired={required}\n isDisabled={disabled}\n minRows={minRows}\n maxRows={maxRows}\n size={size}\n labelPlacement={labelPlacement}\n description={schema.description || ''}\n onChange={e => onChange(e.target.value)}\n />\n );\n}\n","import { Modal, ModalBody, ModalContent, ModalHeader } from '@nextui-org/react';\nimport { observer, useLocalObservable } from \"mobx-react-lite\";\nimport { useStore } from \"../../store/index\";\nimport Draggable from \"react-draggable\";\nimport { JSONForm } from \"../../components/JSONForm\";\nimport { useEffect, useMemo } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { ComplexFormModalStore } from \".\";\nimport React from \"react\";\n\nconst JSONViewModal = observer(() => {\n const rootStore = useStore();\n const complexFormModal = rootStore.get(ComplexFormModalStore);\n const { formData, isOpen } = complexFormModal;\n const store = useLocalObservable(() => ({\n isMobile: false,\n }));\n\n useEffect(() => {\n const handleResize = () => {\n store.isMobile = window.innerWidth < 991;\n };\n handleResize();\n window.addEventListener('resize', handleResize);\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n }, []);\n\n const isMobile = store.isMobile;\n\n const ModalMemo = useMemo(() => {\n if (!formData) {\n return null;\n }\n\n const layoutConfig = { ...complexFormModal.layoutConfig };\n if (isMobile && layoutConfig.$type === 'GridLayout') {\n layoutConfig.$gridColumn = 1;\n Object.keys(layoutConfig).forEach((key) => {\n if (typeof layoutConfig[key] === 'object') {\n // @ts-ignore\n layoutConfig[key].colSpan = 1;\n }\n });\n }\n\n return (\n <Modal\n className={complexFormModal.className}\n classNames={complexFormModal.classNames}\n scrollBehavior={complexFormModal.scrollBehavior}\n isDismissable={complexFormModal.isDismissable}\n isOpen={isOpen}\n size={complexFormModal.modalSize}\n onOpenChange={(open: boolean) => {\n if (!open) {\n complexFormModal.event.emit('abort');\n }\n }}\n >\n <div className=\"z-50 fixed top-0 left-0 w-screen h-screen\">\n <Draggable handle=\".draggable-handle\">\n <ModalContent>\n {complexFormModal.title && <ModalHeader className=\"flex flex-col gap-1 draggable-handle cursor-move\">{complexFormModal.title}</ModalHeader>}\n <ModalBody className={cn('max-h-[90vh] overflow-auto')}>\n <JSONForm\n formData={formData}\n formConfig={complexFormModal.formConfig}\n layoutConfig={layoutConfig}\n onBatchSubmit={complexFormModal.onBatchSubmit\n ? complexFormModal.onBatchSubmit\n : (data) => {\n complexFormModal.event.emit('batchSubmit', data);\n }\n }\n onSet={complexFormModal.onSet}\n onChange={complexFormModal.onChange}\n onReady={complexFormModal.onReady}\n batchSubmitButtonProps={complexFormModal.batchSubmitButtonProps}\n />\n </ModalBody>\n </ModalContent>\n </Draggable>\n </div>\n </Modal>\n );\n }, [isOpen, formData, isMobile]);\n\n return ModalMemo;\n});\n\nexport default JSONViewModal;\n","import { Store } from \"../../store/standard/base\";\nimport Provider from \"./Provider\";\nimport { FormConfigType, FormDataOfKey, FormDataType, LayoutConfigType, LayoutType } from \"../../components/JSONForm\";\nimport EventEmitter from \"events\";\nimport { JSONSchemaFormState } from \"../../store/standard/JSONSchemaState\";\nimport { UiSchema } from \"@rjsf/utils\";\nimport { makeAutoObservable } from \"mobx\";\nimport { RootStore } from \"../../store\";\nimport React, { Dispatch, SetStateAction } from \"react\";\nimport { ButtonProps, SlotsToClasses, ModalSlots } from \"@nextui-org/react\";\n\nexport class ComplexFormModalStore<T extends FormDataType> implements Store {\n sid = 'ComplexFormModalStore';\n provider = () => <Provider />;\n\n isOpen = false;\n title = '';\n formData?: T;\n formConfig?: FormConfigType<T>;\n layoutConfig?: LayoutConfigType<T, LayoutType>;\n className = '';\n classNames?: SlotsToClasses<ModalSlots>;\n modalSize: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full' | 'xs' | '3xl' | '4xl' | '5xl' = 'md';\n scrollBehavior?: 'normal' | 'inside' | 'outside' = 'normal';\n isDismissable = true;\n event = new EventEmitter();\n onBatchSubmit?: (data: T, setLoading?: Dispatch<SetStateAction<boolean>>) => void;\n onSet?: (v: FormDataOfKey<T>, form: JSONSchemaFormState<FormDataOfKey<T>, UiSchema>) => FormDataOfKey<T>;\n onChange?: (data: Partial<T>) => void;\n onReady?: (formStates: { [F in keyof T]?: JSONSchemaFormState<FormDataOfKey<T>, UiSchema> }) => void;\n batchSubmitButtonProps?: ButtonProps & { onBatchSubmit?: (formData: T, setLoading: Dispatch<SetStateAction<boolean>>) => void };\n\n constructor(args?: Partial<ComplexFormModalStore<T>>) {\n Object.assign(this, args);\n makeAutoObservable(this);\n }\n\n setData(v: Partial<ComplexFormModalStore<T>>) {\n Object.assign(this, v);\n }\n\n close() {\n this.isOpen = false;\n this.title = '';\n this.formData = undefined;\n this.formConfig = undefined;\n this.layoutConfig = undefined;\n this.className = '';\n this.classNames = undefined;\n this.modalSize = 'md';\n this.scrollBehavior = 'normal';\n this.isDismissable = true;\n this.onBatchSubmit = undefined;\n this.onSet = undefined;\n this.onChange = undefined;\n this.onReady = undefined;\n this.event.removeAllListeners();\n }\n}\n\nexport async function getComplexFormData<T extends FormDataType>(v: Partial<ComplexFormModalStore<T>>) {\n return new Promise<T>((resolve, reject) => {\n const complexFormModal = RootStore.Get(ComplexFormModalStore);\n // @ts-ignore\n complexFormModal.setData({\n ...v,\n isOpen: true,\n });\n complexFormModal.event.on('batchSubmit', (formData: T) => {\n if (complexFormModal.onBatchSubmit) {\n complexFormModal.onBatchSubmit(formData);\n } else {\n complexFormModal.close();\n resolve(formData);\n }\n });\n complexFormModal.event.on('abort', () => {\n complexFormModal.close();\n reject('abort');\n });\n });\n}\n","import EventEmitter from \"events\";\nimport React from \"react\";\nimport { UiSchema } from \"@rjsf/utils\";\nimport { makeAutoObservable } from \"mobx\";\nimport { Store } from \"../../store/standard/base\";\nimport {\n JSONSchemaFormState,\n JSONValue,\n} from \"../../store/standard/JSONSchemaState\";\nimport Provider from \"./Provider\";\nimport { SelectWidget } from \"../../components/JSONFormWidgets/SelectWidget\";\nimport { InputWidget } from \"../../components/JSONFormWidgets/InputWidget\";\nimport { CheckboxWidget } from \"../../components/JSONFormWidgets/CheckboxWidget\";\nimport { RootStore } from \"../../store\";\nimport { SlotsToClasses, ModalSlots } from \"@nextui-org/react\";\n\nexport class FormModalStore<T = { [key: string]: any }> implements Store {\n sid = 'FormModalStore';\n provider = () => <Provider />;\n\n isOpen = false;\n title = '';\n form: JSONSchemaFormState<T> = null;\n className: string = '';\n classNames?: SlotsToClasses<ModalSlots>;\n modalSize: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full' | 'xs' | '3xl' | '4xl' | '5xl' = 'md';\n scrollBehavior?: 'normal' | 'inside' | 'outside' = 'normal';\n closeOnOverlayClick = false;\n event = new EventEmitter();\n onAfterSubmit?: (data: T) => void;\n\n constructor(args?: Partial<FormModalStore>) {\n Object.assign(this, args);\n makeAutoObservable(this);\n }\n\n setData(v: Partial<FormModalStore>) {\n Object.assign(this, v);\n }\n\n close() {\n this.isOpen = false;\n this.title = '';\n this.form = null;\n this.className = '';\n this.classNames = undefined;\n this.modalSize = 'md';\n this.scrollBehavior = 'normal';\n this.closeOnOverlayClick = false;\n this.onAfterSubmit = undefined;\n this.event.removeAllListeners();\n }\n}\n\nexport async function getFormData<T = { [key: string]: any }>(v: Partial<FormModalStore>) {\n return new Promise<T>((resolve, reject) => {\n const formModal = RootStore.Get(FormModalStore);\n formModal.setData({\n ...v,\n isOpen: true,\n });\n formModal.event.on('afterSubmit', (formData: T) => {\n if (formModal.onAfterSubmit) {\n formModal.onAfterSubmit(formData);\n } else {\n formModal.close();\n resolve(formData);\n }\n });\n formModal.event.on('abort', () => {\n formModal.close();\n reject('abort');\n });\n });\n}\n\nexport function getFormState<T>(\n {\n data,\n metadata = {},\n onSet = (v: T, form) => v,\n onSubmit,\n }: {\n data: T;\n metadata?: { [key: string]: any } & Partial<JSONSchemaFormState<any>>;\n onSet?: (v: T, form: JSONSchemaFormState<T, UiSchema>) => T;\n onSubmit?: (data: T) => void;\n }\n): JSONSchemaFormState<T, UiSchema> {\n const value = {};\n const required = [];\n const props = Object.entries(data).reduce((p, c) => {\n const [k, v] = c;\n const type = typeof v;\n p[k] = {\n type\n };\n if (!metadata[k]) {\n metadata[k] = {};\n }\n if (type === 'string' || type === 'number') {\n if (metadata[k]?.selectOptions) {\n metadata[k]['ui:widget'] = SelectWidget;\n p[k].selectOptions = metadata[k].selectOptions;\n } else {\n if (!metadata[k]['ui:widget']) {\n metadata[k]['ui:widget'] = InputWidget;\n metadata[k]['ui:options'] = {\n // labelPlacement: 'outside-left',\n size: 'sm',\n };\n if (type === 'number') {\n p[k].inputType = 'number';\n }\n }\n }\n }\n if (type === 'boolean') {\n metadata[k]['ui:widget'] = CheckboxWidget;\n metadata[k]['ui:options'] = {\n size: 'sm',\n }\n }\n if (metadata[k]?.inputType) {\n p[k].inputType = metadata[k].inputType;\n delete metadata[k].inputType;\n }\n if (metadata[k]?.title) {\n p[k].title = metadata[k].title || v;\n delete metadata[k].title;\n }\n if (metadata[k]?.description) {\n p[k].description = metadata[k].description;\n delete metadata[k].description;\n }\n // if (metadata[k]?.enum) {\n // p[k].enum = metadata[k].enum;\n // delete metadata[k].enum;\n // }\n // if (metadata[k]?.enumNames) {\n // p[k].enumNames = metadata[k].enumNames;\n // delete metadata[k].enumNames;\n // }\n if (metadata[k]?.required) {\n required.push(k);\n delete metadata[k].required;\n }\n value[k] = v;\n return p;\n }, {});\n const schema = {\n type: 'object',\n properties: props,\n required,\n };\n const form = new JSONSchemaFormState({\n //@ts-ignore\n schema,\n uiSchema: {\n 'ui:submitButtonOptions': {\n norender: false,\n submitText: 'Submit',\n },\n ...metadata,\n },\n afterSubmit(e) {\n if (onSubmit) {\n onSubmit(e.formData as T);\n } else {\n const formModal = RootStore.Get(FormModalStore);\n formModal.event.emit('afterSubmit', e.formData);\n }\n },\n value: new JSONValue({\n default: value,\n //@ts-ignore\n onSet: (v: T) => onSet(v, form),\n }),\n });\n return form;\n}\n\nexport async function getSimpleFormData<T>(\n data: T,\n metadata: { [key: string]: any } & Partial<JSONSchemaFormState<any>> = {},\n config: Partial<FormModalStore>,\n onSet = (v: T, form: JSONSchemaFormState<T, UiSchema>) => {\n return v;\n },\n) {\n const form = getFormState({ data, metadata, onSet });\n return getFormData<T>({\n ...config,\n //@ts-ignore\n form\n });\n}\n","import { Modal, ModalBody, ModalContent, ModalHeader } from '@nextui-org/react';\nimport { observer } from \"mobx-react-lite\";\nimport { JSONSchemaForm } from \"../../components/JSONSchemaForm\";\nimport { useStore } from \"../../store/index\";\nimport Draggable from \"react-draggable\";\nimport { FormModalStore } from \".\";\nimport React from 'react';\n\nconst JSONFormModal = observer(() => {\n const rootStore = useStore();\n const formModal = rootStore.get(FormModalStore);\n const { form, closeOnOverlayClick } = formModal;\n if (!form) {\n return null;\n }\n return (\n <Modal\n className={formModal.className}\n classNames={formModal.classNames}\n scrollBehavior={formModal.scrollBehavior}\n isOpen={formModal.isOpen}\n size={formModal.modalSize}\n isDismissable={!closeOnOverlayClick}\n onOpenChange={(open: boolean) => {\n if (!open) {\n formModal.event.emit('abort');\n }\n }}\n >\n <div className=\"z-50 fixed top-0 left-0 w-screen h-screen flex items-center justify-center\">\n <Draggable handle=\".draggable-handle\">\n <ModalContent>\n {formModal.title && <ModalHeader className=\"flex flex-col gap-1 draggable-handle cursor-move\">{formModal.title}</ModalHeader>}\n <ModalBody className='max-h-[90vh] overflow-auto'>\n <JSONSchemaForm formState={form} />\n </ModalBody>\n </ModalContent>\n </Draggable>\n </div>\n </Modal>\n );\n});\n\nexport default JSONFormModal;\n\n","import React from \"react\";\nimport { _ } from \"../../lib/lodash\";\nimport { RootStore } from \"../../store\";\nimport { Store } from \"../../store/standard/base\";\n\nexport type JSONViewType = {\n className?: string;\n children?: any;\n data?: Record<string, JSONDataType>;\n datas?: Record<string, Record<string, JSONDataType> | JSONDataType[]>;\n uiConfig?: {\n type: string;\n className?: Record<string, string>;\n slots?: Record<string, any>;\n [key: string]: any;\n };\n uiConfigs?: Record<string, JSONViewType[\"uiConfig\"]>;\n};\n\nexport type JSONDataType = {\n title?: string;\n icon?: any;\n render?: any;\n className?: string;\n type?: \"divider\" | \"checkbox\" | \"label\" | \"radio\";\n shortcut?: string;\n disabled?: boolean;\n children?: Record<string, JSONDataType>;\n value?: any;\n link?: any;\n events?: Record<string, any>;\n onChange?: (args: { e: any; v: any }) => void;\n onClick?: (args: { e: any; v: any }) => void;\n};\n\nexport class JSONViewPlugin implements Store {\n sid = \"JSONViewPlugin\";\n autoObservable?: boolean = false;\n\n JSONView = {\n Test: {\n name: \"Test\",\n render: () => <div>Test</div>,\n },\n };\n\n onNewStore({\n rootStore,\n store,\n }: {\n rootStore: RootStore<any>;\n store: Store;\n }): void {\n this.crawl(store);\n }\n\n crawl(store: Store) {\n if (store?.JSONView) {\n this.JSONView = { ...this.JSONView, ...store.JSONView };\n }\n }\n\n static JSONView = (props: JSONViewType) => {\n const jsonviewplugin = RootStore.Get(JSONViewPlugin);\n\n return (\n <>\n {/* @ts-ignore */}\n {Object.keys(props.uiConfigs).map((key) => {\n /* @ts-ignore */\n const config = props.uiConfigs[key] as any;\n const data = _.get(props.datas, key);\n const Component = jsonviewplugin.JSONView[config.type].render;\n const rootStore = RootStore.init();\n Object.values(data).forEach((i) => {\n /* @ts-ignore */\n if (i.events) {\n /* @ts-ignore */\n Object.entries(i.events).forEach(([k, v]) => {\n // @ts-ignore \n i[k] = (args) =>\n rootStore.events.emit(v as any, { ...args, action: k });\n });\n }\n });\n\n return <Component key={key} data={data} uiConfig={config} />;\n })}\n </>\n );\n };\n}\n"]}
1
+ {"version":3,"sources":["../components/JSONForm/index.tsx","../components/JSONForm/Layouts/gridLayout.tsx","../components/JSONForm/Layouts/format.tsx","../components/JSONFormWidgets/CheckboxWidget/index.tsx","../components/JSONFormWidgets/InputWidget/index.tsx","../components/JSONFormWidgets/SelectWidget/index.tsx","../components/JSONFormWidgets/EditorWidget/index.tsx","../store/standard/JSONSchemaState.ts","../components/JSONSchemaForm/index.tsx","../components/ui/grid/col.tsx","../components/ui/grid/styles.tsx","../components/ui/grid/grid.tsx","../components/JSONForm/Layouts/listLayout.tsx","../components/JSONForm/Layouts/simpleLayout.tsx","../components/JSONForm/Layouts/tabLayout.tsx","../components/JSONFormWidgets/TextareaWidget/index.tsx","../module/ComplexFormModal/Provider.tsx","../module/ComplexFormModal/index.tsx","../module/FormModal/index.tsx","../module/FormModal/Provider.tsx","../module/JSONView/index.tsx"],"names":["React","useState","Button","_a","formData","SubmitButton","numColSpan","useEffect","ChevronDown","ChevronUp","observer","useMemo","EventEmitter","makeAutoObservable","Modal","ModalBody","ModalContent","ModalHeader","Draggable","Provider_default","getFormState"],"mappings":"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","sourcesContent":["import React, { Dispatch, SetStateAction } from \"react\";\nimport { ButtonProps, TabsProps } from \"@nextui-org/react\";\nimport { UiSchema } from \"@rjsf/utils\";\nimport { JSONSchemaFormState } from \"../../store/standard/JSONSchemaState\";\nimport { GridLayout } from \"./Layouts/gridLayout\";\nimport { ListLayout } from \"./Layouts/listLayout\";\nimport { SimpleLayout } from \"./Layouts/simpleLayout\";\nimport { TabLayout } from \"./Layouts/tabLayout\";\n\nexport type LayoutType = 'TabLayout' | 'GridLayout' | 'ListLayout' | 'SimpleLayout';\n\nexport type FieldLayoutType<T, F extends keyof T> = Array<keyof NonNullable<T[F]>> | Array<Array<keyof NonNullable<T[F]>> | keyof NonNullable<T[F]>>;\n\nexport type FormLayoutType<T, L> = L extends 'TabLayout' | 'ListLayout' | 'SimpleLayout'\n ? {\n [F in keyof T]?: {\n title?: string;\n titleBoxCss?: string;\n fieldLayout?: FieldLayoutType<T, F>;\n submitButtonProps?: ButtonProps & { onAfterSubmit?: (formKey: FormKey<T>, data: FormDataOfKey<T>, setLoading: Dispatch<SetStateAction<boolean>>) => void };\n };\n }\n : L extends 'GridLayout'\n ? {\n [F in keyof T]?: {\n title?: string;\n titleBoxCss?: string;\n fieldLayout?: FieldLayoutType<T, F>;\n colSpan?: number;\n cardCss?: string;\n submitButtonProps?: ButtonProps & { onAfterSubmit?: (formKey: FormKey<T>, data: FormDataOfKey<T>, setLoading: Dispatch<SetStateAction<boolean>>) => void };\n };\n }\n : never;\n\nexport type LayoutConfigType<T, L> = L extends 'TabLayout'\n ? { $type: 'TabLayout'; $tabsProps?: TabsProps } & FormLayoutType<T, L>\n : L extends 'GridLayout'\n ? { $type: 'GridLayout'; $gridColumn?: number; } & FormLayoutType<T, L>\n : L extends 'ListLayout'\n ? { $type: 'ListLayout' } & FormLayoutType<T, L>\n : L extends 'SimpleLayout'\n ? { $type: 'SimpleLayout' } & FormLayoutType<T, L>\n : never;\n\nexport type FormDataType = {\n [key: string]: {\n [key: string]: string | number | boolean;\n };\n};\n\nexport type FormConfigType<T> = {\n [F in keyof T]?: {\n [X in keyof T[F]]?: {\n title?: string;\n description?: string;\n required?: boolean;\n selectOptions?: { label: string; value: string }[];\n } & UiSchema;\n };\n};\n\nexport type FormKey<T = FormDataType> = keyof T;\n\nexport type FormDataOfKey<T = FormDataType> = T[FormKey<T>];\n\nexport type JSONFormProps<T = FormDataType> = {\n className?: string;\n formData: T;\n formConfig?: FormConfigType<T>;\n layoutConfig?: LayoutConfigType<T, LayoutType>;\n children?: any;\n onBatchSubmit?: (data: T, setLoading: Dispatch<SetStateAction<boolean>>) => void;\n onSet?: (v: FormDataOfKey<T>, form: JSONSchemaFormState<FormDataOfKey<T>, UiSchema>) => FormDataOfKey<T>;\n onChange?: (data: Partial<T>) => void;\n onReady?: (formStates: { [F in keyof T]?: JSONSchemaFormState<FormDataOfKey<T>, UiSchema> }) => void;\n batchSubmitButtonProps?: ButtonProps & { onBatchSubmit?: (formData: T, setLoading: Dispatch<SetStateAction<boolean>>) => void };\n};\n\nconst components = {\n GridLayout,\n TabLayout,\n ListLayout,\n SimpleLayout,\n};\n\nexport const JSONForm = <T extends FormDataType>(props: JSONFormProps<T>) => {\n const type = props.layoutConfig?.$type || 'SimpleLayout';\n const Component = components[type];\n return (\n <div className={props.className}>\n {\n // @ts-ignore\n <Component {...props} />\n }\n </div>\n );\n};\n","import React, { useEffect } from \"react\";\nimport { Card } from \"@nextui-org/react\";\nimport { FormDataType, JSONFormProps, LayoutConfigType } from \"..\";\nimport { BatchSubmitButton, SubmitButton, getFormState } from \"./format\";\nimport { JSONSchemaForm } from \"../../../components/JSONSchemaForm\";\nimport { Grid, Col } from '../../../components/ui/grid';\nimport { cn } from '../../../lib/utils';\n\nexport const GridLayout = <T extends FormDataType>(props: JSONFormProps<T>) => {\n const { layoutConfig, onBatchSubmit, batchSubmitButtonProps, onReady } = props;\n const { $type, $gridColumn, ...formLayout } = layoutConfig as LayoutConfigType<T, 'GridLayout'>;\n const formStates = getFormState(props, formLayout);\n\n useEffect(() => {\n if (formStates && onReady) {\n onReady(formStates);\n }\n }, [formStates]);\n\n return (\n <>\n <Grid numItems={$gridColumn ?? 1} className=\"gap-2\">\n {Object.keys(formStates).map((key) => {\n const layout = formLayout[key];\n return (\n <Col numColSpan={layout?.colSpan ?? 1} key={key} id={`form-${key}`}>\n <Card className={cn(\"h-full m-0 p-4 shadow-sm border dark:border-[#3e3e3e]\", layout?.cardCss)}>\n <div className={cn('mb-2 font-bold text-center', layout?.titleBoxCss)}>{layout?.title || key}</div>\n <JSONSchemaForm formState={formStates[key]}>\n {layout?.submitButtonProps && <SubmitButton formKey={key} formState={formStates[key]} buttonProps={layout.submitButtonProps} />}\n </JSONSchemaForm>\n </Card>\n </Col>\n );\n })}\n </Grid>\n {(onBatchSubmit || batchSubmitButtonProps?.onBatchSubmit) && (\n <div className=\"w-full flex\">\n <BatchSubmitButton formStates={formStates} onSubmit={onBatchSubmit} buttonProps={batchSubmitButtonProps} />\n </div>\n )}\n </>\n );\n};","import React, { useState } from \"react\";\nimport { Button } from \"@nextui-org/react\";\nimport { UiSchema } from \"@rjsf/utils\";\nimport { FormDataOfKey, JSONFormProps } from \"..\";\nimport { CheckboxWidget } from \"../../../components/JSONFormWidgets/CheckboxWidget\";\nimport { InputWidget } from \"../../../components/JSONFormWidgets/InputWidget\";\nimport { SelectWidget } from \"../../../components/JSONFormWidgets/SelectWidget\";\nimport { EditorWidget } from '../../../components/JSONFormWidgets/EditorWidget';\nimport {\n JSONSchemaFormState,\n JSONValue,\n} from \"../../../store/standard/JSONSchemaState\";\nimport { helper } from \"../../../lib/helper\";\nimport { cn } from \"../../../lib/utils\";\n\nexport const getFormState = <T,>(\n props: JSONFormProps<T>,\n formLayout: { [x: string]: { fieldLayout?: any[] } } = {},\n) => {\n const { formData, formConfig, onSet, onChange } = props;\n\n const formStates: {\n [F in keyof T]?: JSONSchemaFormState<FormDataOfKey<T>, UiSchema>;\n } = {};\n\n Object.keys(formData).forEach((key) => {\n const metadata = formData[key];\n const formConfigData = formConfig?.[key] || {};\n const value = {};\n const required = [];\n const properties = Object.entries(metadata).reduce((p, c: any) => {\n const [k, v] = c;\n const type = typeof v;\n p[k] = {\n type,\n };\n if (!formConfigData[k]) {\n formConfigData[k] = {};\n }\n const uiOptions = formConfigData[k]['ui:options'] || {};\n if (type === \"string\" || type === \"number\") {\n if (formConfigData[k]?.selectOptions) {\n formConfigData[k][\"ui:widget\"] = SelectWidget;\n p[k].selectOptions = formConfigData[k].selectOptions;\n formConfigData[k]['ui:options'] = {\n size: 'sm',\n ...uiOptions,\n };\n } else {\n if (!formConfigData[k][\"ui:widget\"]) {\n formConfigData[k][\"ui:widget\"] = InputWidget;\n formConfigData[k][\"ui:options\"] = {\n labelPlacement: \"inside\",\n size: \"sm\",\n ...uiOptions,\n };\n if (type === \"number\") {\n p[k].inputType = \"number\";\n }\n if (helper.json.isJsonString(v)) {\n formConfigData[k]['ui:widget'] = EditorWidget;\n formConfigData[k][\"ui:options\"] = {\n jsonStrSpace: 2,\n ...uiOptions,\n };\n }\n }\n }\n }\n if (type === \"boolean\") {\n formConfigData[k][\"ui:widget\"] = CheckboxWidget;\n formConfigData[k][\"ui:options\"] = {\n size: \"sm\",\n ...uiOptions,\n };\n }\n if (formConfigData[k]?.inputType) {\n p[k].inputType = formConfigData[k].inputType;\n }\n if (formConfigData[k]?.title) {\n p[k].title = formConfigData[k].title || k;\n }\n if (formConfigData[k]?.description) {\n p[k].description = formConfigData[k].description;\n }\n // if (formConfigData[k]?.selectOptions) {\n // p[k].enum = formConfigData[k].selectOptions.map((i) => i.value);\n // p[k].enumNames = formConfigData[k].selectOptions.map((i) => i.label);\n // }\n if (formConfigData[k]?.required) {\n //@ts-ignore\n required.push(k);\n }\n value[k] = v;\n return p;\n }, {});\n const schema = {\n type: \"object\",\n properties,\n required,\n };\n const form = new JSONSchemaFormState({\n //@ts-ignore\n schema,\n uiSchema: {\n \"ui:submitButtonOptions\": {\n norender: true,\n },\n ...formConfigData,\n layout: formLayout[key]?.fieldLayout,\n },\n // afterSubmit: async (e) => {\n // onSubmit?.(key as FormKey<T>, e.formData as FormDataOfKey<T>);\n // },\n afterChange: (e, id) => {\n const { formData } = e;\n if (formData) {\n const field = id.replace('root_', '');\n const data = {\n [key]: {\n [field]: formData[field],\n }\n };\n //@ts-ignore\n onChange?.(data);\n }\n },\n value: new JSONValue({\n default: value,\n //@ts-ignore\n onSet: (v) => {\n if (onSet) {\n return onSet(v as FormDataOfKey<T>, form);\n }\n return v;\n },\n }),\n });\n\n formStates[key] = form;\n });\n\n return formStates;\n};\n\nexport const BatchSubmitButton = ({ formStates, onSubmit, buttonProps }) => {\n const { className, onClick, children, isLoading, onBatchSubmit, ...rest } = buttonProps || {};\n const [loading, setLoading] = useState(false);\n return (\n <Button\n className={cn('mt-4 ml-auto', className)}\n size=\"sm\"\n color=\"primary\"\n isLoading={loading}\n onClick={(e) => {\n const formData = {};\n const formKeys = Object.keys(formStates);\n for (const key of formKeys) {\n const form = formStates[key];\n const current = form.formRef.current;\n if (current) {\n current.submit();\n const data = current.state.formData;\n const required = current.state.schema.required;\n for (const i of required) {\n if (!data[i]) {\n return;\n }\n }\n const errors = current.state.errors;\n if (errors.length > 0) {\n return;\n }\n formData[key] = data;\n } else {\n console.error('formRef.current is null');\n return;\n }\n }\n onSubmit?.(formData, setLoading);\n onBatchSubmit?.(formData, setLoading);\n }}\n {...rest}\n >\n {children || 'Submit'}\n </Button>\n );\n};\n\nexport const SubmitButton = ({ formKey, formState, buttonProps }) => {\n const { className, onClick, children, isLoading, onAfterSubmit, ...rest } = buttonProps || {};\n const [loading, setLoading] = useState(false);\n return (\n <div className=\"w-full flex\">\n <Button\n className={cn('mt-4 ml-auto', className)}\n type=\"submit\"\n color=\"primary\"\n size=\"sm\"\n isLoading={loading}\n onClick={(e) => {\n let formData = {};\n const current = formState.formRef.current;\n if (current) {\n current.submit();\n formData = current.state.formData;\n const required = current.state.schema.required;\n for (const i of required) {\n if (!formData[i]) {\n return;\n }\n }\n const errors = current.state.errors;\n if (errors.length > 0) {\n return;\n }\n }\n onAfterSubmit?.(formKey, formData, setLoading);\n }}\n {...rest}\n >\n {children || 'Submit'}\n </Button>\n </div>\n );\n};\n","import React from \"react\";\nimport { Checkbox } from \"@nextui-org/react\";\nimport { WidgetProps } from \"@rjsf/utils\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"../../../lib/utils\";\n\ntype Options = {\n className?: string;\n size: 'sm' | 'md' | 'lg';\n color: 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'danger';\n};\n\nexport interface CheckboxWidgetProps extends WidgetProps {\n options: Options;\n}\n\nexport interface CheckboxWidgetUIOptions {\n \"ui:widget\": (props: CheckboxWidgetProps) => JSX.Element;\n \"ui:options\": Options;\n}\n\nexport function CheckboxWidget({\n onChange,\n options,\n label,\n value,\n disabled,\n schema,\n}: CheckboxWidgetProps) {\n const { size = 'sm', color = 'primary' } = options;\n const { description } = schema;\n\n return (\n <>\n <Checkbox\n classNames={{\n base: cn(\n 'm-0 flex items-center justify-start w-full',\n 'cursor-pointer rounded-lg gap-2 p-3 bg-content2 border-1 border-transparent',\n value ? `border-${color}` : '',\n ),\n }}\n defaultSelected={value}\n isDisabled={disabled}\n icon={<Check className=\"bg-white dark:bg-black\" />}\n color={color}\n size={size}\n onChange={(e: any) => {\n const checked = e.target.checked;\n onChange(checked);\n }}\n >\n {label}\n </Checkbox>\n {description && <div className=\"mt-1 text-xs text-[#A1A1A9] dark:text-[#717179]\">{description}</div>}\n </>\n );\n}\n\n","import React from \"react\";\nimport { Input } from \"@nextui-org/react\";\nimport { WidgetProps } from \"@rjsf/utils\";\nimport { cn } from \"../../../lib/utils\";\n\ntype Options = {\n className?: string;\n labelPlacement?: \"inside\" | \"outside\" | \"outside-left\";\n size: \"sm\" | \"md\" | \"lg\";\n placeholder?: string;\n};\n\nexport interface InputWidgetProps extends WidgetProps {\n options: Options;\n}\n\nexport interface InputWidgetUIOptions {\n \"ui:widget\": (props: InputWidgetProps) => JSX.Element;\n \"ui:options\": Options;\n}\n\nexport function InputWidget(props: InputWidgetProps) {\n const {\n onChange,\n options,\n label,\n value,\n required,\n disabled,\n schema,\n } = props;\n const { className, labelPlacement = \"inside\", size = \"sm\" } = options;\n const placeholder = props.placeholder || options.placeholder;\n return (\n <Input\n className={cn(\"w-full\", className)}\n label={label}\n placeholder={placeholder}\n value={value}\n defaultValue=\"\"\n isRequired={required}\n isDisabled={disabled}\n size={size}\n labelPlacement={labelPlacement}\n description={schema.description || \"\"}\n type={schema.inputType || \"text\"}\n onChange={(e) => onChange(e.target.value)}\n />\n );\n}\n\n","import React from \"react\";\nimport { WidgetProps } from \"@rjsf/utils\";\nimport { cn } from \"../../../lib/utils\";\n\ntype Options = {\n className?: string;\n labelPlacement?: \"top\" | \"left\";\n size: \"sm\" | \"md\" | \"lg\";\n placeholder?: string;\n};\n\nexport interface SelectWidgetProps extends WidgetProps {\n options: Options;\n}\n\nexport interface SelectWidgetUIOptions {\n \"ui:widget\": (props: SelectWidgetProps) => JSX.Element;\n \"ui:options\": Options;\n}\n\nexport function SelectWidget(props: SelectWidgetProps) {\n const { onChange, options, label, value, required, disabled, schema } = props;\n const { className, labelPlacement = 'top', placeholder = 'Select an option' } = options;\n const { selectOptions = [], description } = schema;\n const labelText = label?.trim();\n const placeholderText = props.placeholder || placeholder;\n\n return (\n <div className={cn(\"\", className)}>\n <div\n className={cn(\"flex flex-col\", {\n \"flex-row items-center\": labelPlacement === \"left\",\n })}\n >\n {labelText && (\n <label\n className={cn(\"flex items-center text-sm whitespace-nowrap\", {\n \"mb-2\": labelPlacement === \"top\",\n \"mr-2\": labelPlacement === \"left\",\n })}\n >\n {labelText}\n {required && <span className=\"ml-[2px] font-bold text-red-600\">*</span>}\n </label>\n )}\n {description && <div className=\"my-1 text-xs text-[#A1A1A9] dark:text-[#717179]\">{description}</div>}\n <select className=\"w-full py-3.5 px-2 text-sm rounded-md bg-[#F4F4F5] dark:bg-[#27272A]\" defaultValue={value} disabled={disabled} onChange={(event) => onChange(event.target.value)}>\n <option value=\"\" disabled selected>\n {placeholderText}\n </option>\n {selectOptions.map((item) => {\n return (\n <option key={item.value} value={item.value}>\n {item.label}\n </option>\n );\n })}\n </select>\n </div>\n </div>\n );\n}\n\n","import React, { useState } from \"react\";\nimport MonacoEditor, { EditorProps } from \"@monaco-editor/react\";\nimport { WidgetProps } from \"@rjsf/utils\";\nimport { Button } from \"@nextui-org/react\";\nimport { cn } from \"../../../lib/utils\";\nimport { helper } from \"../../../lib/helper\";\n\ntype Options = {\n editorHeight?: string;\n readOnly?: boolean;\n language?: string;\n languageSelectorOptions?: { label: string; value: string }[];\n onChangeLanguage?: (v: string) => void;\n onRun?: (v: string) => void;\n onMount?: EditorProps['onMount'];\n jsonStrSpace?: number; // Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.\n};\n\nexport interface EditorWidgetProps extends WidgetProps {\n options: Options;\n}\n\nexport type EditorWidgetUIOptions = {\n \"ui:widget\": (props: EditorWidgetProps) => JSX.Element;\n \"ui:options\": Options;\n};\n\nexport const EditorWidget = ({ label, options = {}, value, required, schema, disabled, onChange }: EditorWidgetProps) => {\n const { editorHeight = '200px', readOnly = false, language = 'json', jsonStrSpace, languageSelectorOptions = [], onChangeLanguage, onRun, onMount } = options;\n const [selectedLanguage, setSelectedLanguage] = useState('');\n const [runLoading, setRunLoading] = useState(false);\n const showLanguageSelector = languageSelectorOptions.length > 0;\n\n return (\n <div className='flex flex-col relative'>\n <div className={cn('flex justify-between items-center', { 'mb-[10px]': label.trim() || showLanguageSelector })}>\n {label && (\n <label\n className=\"mr-2 flex items-center text-sm\"\n >\n {label}\n {required && <span className=\"font-bold text-red-600\">*</span>}\n </label>\n )}\n {showLanguageSelector && (\n <select\n className=\"w-full p-3 text-sm rounded-md bg-[#F4F4F5] dark:bg-[#27272A]\"\n value={selectedLanguage}\n onChange={(event) => {\n const v = event.target.value;\n setSelectedLanguage(v);\n onChangeLanguage && onChangeLanguage(v);\n }}\n >\n {languageSelectorOptions.map((item) => {\n return <option key={item.value} value={item.value}>{item.label}</option>\n })}\n </select>\n )}\n </div>\n {schema.description && <div className='mb-2 text-xs text-[#A1A1A9]'>{schema.description}</div>}\n <div className=\"rounded-lg overflow-hidden relative\">\n <MonacoEditor\n options={{ readOnly: readOnly || disabled, minimap: { enabled: false } }}\n height={editorHeight}\n theme=\"vs-dark\"\n language={selectedLanguage ? selectedLanguage : language}\n value={value}\n onChange={(v) => onChange(v)}\n onMount={(editor, monaco) => {\n onMount && onMount(editor, monaco);\n if (language === 'json' && jsonStrSpace && value) {\n const json = helper.json.safeParse(value);\n editor.setValue(JSON.stringify(json, null, jsonStrSpace));\n }\n }}\n />\n </div>\n {onRun && (\n <Button\n className=\"absolute bottom-2 right-4\"\n size=\"sm\"\n isLoading={runLoading}\n onClick={async () => {\n setRunLoading(true);\n await onRun(value);\n setRunLoading(false);\n }}\n >\n Run\n </Button>\n )}\n </div>\n );\n};\n\n","import { createRef, LegacyRef, Ref } from \"react\";\nimport Form, { IChangeEvent } from \"@rjsf/core\";\nimport { RJSFSchema, UiSchema } from \"@rjsf/utils\";\nimport validator from \"@rjsf/validator-ajv8\";\nimport { action, computed, makeObservable, observable, toJS } from \"mobx\";\n\nimport { helper } from \"../../lib/helper\";\n\nexport class JSONSchemaFormState<T, U = UiSchema> {\n formRef: LegacyRef<Form<any, RJSFSchema, any>> & Ref<Form<any, RJSFSchema, any>>;\n value: JSONValue<T> = new JSONValue();\n schema: RJSFSchema;\n uiSchema: U;\n reactive: boolean = true;\n readonly = false;\n liveValidate = false;\n validator = validator\n\n get formData() {\n return this.value.get();\n }\n set formData(value: T) {\n this.value.set(value);\n }\n get dynamicData() {\n return this.getDymaicData();\n }\n getDymaicData = () => {\n return { ready: true };\n };\n onChange = (e: IChangeEvent<T>, id: string) => {\n this.value.set(e.formData);\n if (this.afterChange) {\n this.afterChange(e, id);\n }\n };\n onSubmit = (e: IChangeEvent<T>) => {\n if (this.afterSubmit) {\n this.afterSubmit(e);\n }\n };\n afterSubmit: (e: IChangeEvent<T>) => void;\n afterChange: (e: IChangeEvent<T>, id: string) => void;\n reset({ force = false } = {}) {\n if (force) {\n this.value.value = this.value.default;\n } else {\n this.value.reset();\n }\n return this;\n }\n customValidate = (formData: T, errors: any) => errors;\n\n constructor(args: Partial<JSONSchemaFormState<T, U>> = {}) {\n const formRef = createRef();\n Object.assign(this, args, { formRef });\n if (this.reactive) {\n //@ts-ignore\n makeObservable(this, {\n formData: computed,\n });\n }\n }\n}\n\nexport abstract class JSONSchemaValue<T> {\n value?: T = null as T;\n default?: T = null as T;\n constructor(args: Partial<JSONSchemaValue<T>> = {}) {\n if (!args.value && args.default) {\n args.value = args.default;\n }\n Object.assign(this, args);\n makeObservable(this, {\n value: observable,\n set: action,\n });\n }\n set(value: Partial<T>, { onSet = true } = {}) {\n value = this.onSet(value);\n const newVal = helper.deepMerge(this.value, value);\n this.value = toJS(newVal);\n return this.value;\n }\n onSet(value: Partial<T>) {\n return value;\n }\n get() {\n return this.getFormat(this.value);\n }\n getFormat(value: T) {\n return value;\n }\n reset() {\n this.set(this.default);\n }\n}\n\nexport class JSONValue<T> extends JSONSchemaValue<T> {\n constructor(args: Partial<JSONValue<T>> = {}) {\n super(args);\n }\n}\n","\"use client\";\n\nimport React, { useState } from \"react\";\nimport { Button } from \"@nextui-org/react\";\nimport Form from \"@rjsf/core\";\nimport {\n type ErrorListProps,\n type FieldTemplateProps,\n type ObjectFieldTemplateProps,\n type SubmitButtonProps,\n} from \"@rjsf/utils\";\nimport * as Utils from \"@rjsf/utils\"\nimport { ChevronDown, ChevronUp } from \"lucide-react\";\nimport { observer } from \"mobx-react-lite\";\nimport { cn } from \"../../lib/utils\";\nimport { JSONSchemaFormState } from \"../../store/standard/JSONSchemaState\";\n\nfunction FieldTemplate(props: FieldTemplateProps) {\n const { id, classNames, label, help, required, description, errors, children, schema, uiSchema } = props;\n\n if (uiSchema && uiSchema['ui:widget'] === 'hidden') { return null; }\n\n // const hideLabel = schema.type === 'object' || schema.type === 'boolean';\n\n const isDate = uiSchema && uiSchema['ui:widget'] === 'date';\n const isDateTime = uiSchema && uiSchema['ui:widget'] === 'date-time';\n const isTime = uiSchema && uiSchema['ui:widget'] === 'time';\n const showLabel = isDate || isDateTime || isTime;\n\n return (\n <div className={cn(classNames)}>\n {showLabel && (\n <label htmlFor={id} className={cn('flex items-center h-8')}>\n <span className=\"text-sm\">{label}</span>\n {required && <span className=\"font-bold text-red-600\">*</span>}\n </label>\n )}\n\n {/* {description} */}\n {/* {children} */}\n {/* {help} */}\n\n {children}\n </div>\n );\n}\n\nconst renderLayout = (layout: any[], fields: { [k: string]: React.ReactElement }, n = 1) => {\n n++;\n return layout.map((item, index) => {\n if (Array.isArray(item)) {\n const even = (n & 1) === 0;\n return (\n <div key={index} className={cn('w-full flex justify-between items-center space-x-2', even ? 'flex-row items-end' : 'flex-col')}>\n {renderLayout(item, fields, n)}\n </div>\n );\n } else {\n return (\n <div className=\"w-full\" key={index}>\n {fields[item]}\n </div>\n );\n }\n });\n};\n\nconst ObjectFieldTemplate = ({ title, idSchema: { $id }, properties, uiSchema: { layout } }: ObjectFieldTemplateProps) => {\n const [opened, setOpened] = useState(false);\n const fields = Object.fromEntries(properties.map((item) => [item.name, item.content]));\n return (\n <div className=\"w-full space-y-2.5\">\n {$id === 'root' ? (\n layout ? (\n renderLayout(layout, fields)\n ) : (\n properties.map((element) => {\n return (\n <div key={element.content.key}>\n {element.content}\n </div>\n );\n })\n )\n ) : (\n <>\n <div\n className=\"mt-5 mb-[10px] flex justify-between items-center cursor-pointer border-t-[1px solid #E5E5EA] py-[5px] hover:bg-[#F2F2F7] dark:hover:bg-gray-900\"\n onClick={() => setOpened((o) => !o)}\n >\n <div className=\"text-gray-900 dark:text-gray-100 font-bold text-base\">{title}</div>\n {opened ? <ChevronUp /> : <ChevronDown />}\n </div>\n <div className={cn('mt-2 space-y-2.5', opened ? 'block' : 'hidden')}>\n {layout\n ? renderLayout(layout, fields)\n : properties.map((element) => {\n return (\n <div key={element.content.key}>\n {element.content}\n </div>\n );\n })}\n </div>\n </>\n )}\n </div>\n );\n};\n\nconst ErrorListTemplate = ({ errors }: ErrorListProps) => {\n return (\n <div>\n <div className=\"font-bold\">Errors</div>\n <div className=\"mt-[10px]\">\n {errors.map((error) => (\n <div className=\"mb-[10px]\" color=\"red\" key={error.property}>\n {error.stack}\n </div>\n ))}\n </div>\n </div>\n );\n};\n\nconst SubmitButton = ({ uiSchema }: SubmitButtonProps) => {\n const { submitText, norender, props: submitButtonProps = {} } = Utils.getSubmitButtonOptions(uiSchema);\n if (norender) {\n return null;\n }\n return (\n <div className=\"flex justify-end mt-4\">\n <Button type=\"submit\" color='primary' size='sm'>{submitText}</Button>\n </div>\n );\n};\n\ninterface Props {\n formState: JSONSchemaFormState<any>;\n children?: any;\n}\n\nexport const JSONSchemaForm = observer(({ children, formState }: Props) => {\n if (!formState?.dynamicData?.ready) return <></>;\n return (\n <Form\n showErrorList=\"bottom\"\n templates={{\n ObjectFieldTemplate,\n FieldTemplate,\n ErrorListTemplate,\n ButtonTemplates: { SubmitButton },\n }}\n formData={formState.formData}\n readonly={formState.readonly}\n uiSchema={formState.uiSchema}\n schema={formState.schema}\n onChange={formState.onChange}\n onSubmit={formState.onSubmit}\n validator={formState.validator}\n customValidate={formState.customValidate}\n ref={formState.formRef}\n >\n {children && children}\n </Form>\n );\n});\n","import React from 'react';\nimport { colSpan, colSpanLg, colSpanMd, colSpanSm, GridClassesMapping } from './styles';\nimport { cn } from '../../../lib/utils';\n\nexport interface ColProps extends React.HTMLAttributes<HTMLDivElement> {\n numColSpan?: number;\n numColSpanSm?: number;\n numColSpanMd?: number;\n numColSpanLg?: number;\n}\n\nconst Col = React.forwardRef<HTMLDivElement, ColProps>((props, ref) => {\n const { numColSpan = 1, numColSpanSm, numColSpanMd, numColSpanLg, children, className, ...other } = props;\n const getColSpan = (numColSpan: number | undefined, colSpanMapping: GridClassesMapping): string => {\n if (!numColSpan) return '';\n if (!Object.keys(colSpanMapping).includes(String(numColSpan))) return '';\n return colSpanMapping[numColSpan];\n };\n\n const getColSpanClassNames = () => {\n const spanBase = getColSpan(numColSpan, colSpan);\n const spanSm = getColSpan(numColSpanSm, colSpanSm);\n const spanMd = getColSpan(numColSpanMd, colSpanMd);\n const spanLg = getColSpan(numColSpanLg, colSpanLg);\n return cn(spanBase, spanSm, spanMd, spanLg);\n };\n\n return (\n <div ref={ref} className={cn(getColSpanClassNames(), className)} {...other}>\n {children}\n </div>\n );\n});\n\nCol.displayName = 'Col';\n\nexport default Col;\n","export type GridClassesMapping = {\n [key: string]: string;\n};\n\nexport const gridCols: GridClassesMapping = {\n 0: 'grid-cols-none',\n 1: 'grid-cols-1',\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n 4: 'grid-cols-4',\n 5: 'grid-cols-5',\n 6: 'grid-cols-6',\n 7: 'grid-cols-7',\n 8: 'grid-cols-8',\n 9: 'grid-cols-9',\n 10: 'grid-cols-10',\n 11: 'grid-cols-11',\n 12: 'grid-cols-12',\n};\n\nexport const gridColsSm: GridClassesMapping = {\n 0: 'sm:grid-cols-none',\n 1: 'sm:grid-cols-1',\n 2: 'sm:grid-cols-2',\n 3: 'sm:grid-cols-3',\n 4: 'sm:grid-cols-4',\n 5: 'sm:grid-cols-5',\n 6: 'sm:grid-cols-6',\n 7: 'sm:grid-cols-7',\n 8: 'sm:grid-cols-8',\n 9: 'sm:grid-cols-9',\n 10: 'sm:grid-cols-10',\n 11: 'sm:grid-cols-11',\n 12: 'sm:grid-cols-12',\n};\n\nexport const gridColsMd: GridClassesMapping = {\n 0: 'md:grid-cols-none',\n 1: 'md:grid-cols-1',\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-3',\n 4: 'md:grid-cols-4',\n 5: 'md:grid-cols-5',\n 6: 'md:grid-cols-6',\n 7: 'md:grid-cols-7',\n 8: 'md:grid-cols-8',\n 9: 'md:grid-cols-9',\n 10: 'md:grid-cols-10',\n 11: 'md:grid-cols-11',\n 12: 'md:grid-cols-12',\n};\n\nexport const gridColsLg: GridClassesMapping = {\n 0: 'lg:grid-cols-none',\n 1: 'lg:grid-cols-1',\n 2: 'lg:grid-cols-2',\n 3: 'lg:grid-cols-3',\n 4: 'lg:grid-cols-4',\n 5: 'lg:grid-cols-5',\n 6: 'lg:grid-cols-6',\n 7: 'lg:grid-cols-7',\n 8: 'lg:grid-cols-8',\n 9: 'lg:grid-cols-9',\n 10: 'lg:grid-cols-10',\n 11: 'lg:grid-cols-11',\n 12: 'lg:grid-cols-12',\n};\n\nexport const colSpan: GridClassesMapping = {\n 1: 'col-span-1',\n 2: 'col-span-2',\n 3: 'col-span-3',\n 4: 'col-span-4',\n 5: 'col-span-5',\n 6: 'col-span-6',\n 7: 'col-span-7',\n 8: 'col-span-8',\n 9: 'col-span-9',\n 10: 'col-span-10',\n 11: 'col-span-11',\n 12: 'col-span-12',\n 13: 'col-span-13',\n};\n\nexport const colSpanSm: GridClassesMapping = {\n 1: 'sm:col-span-1',\n 2: 'sm:col-span-2',\n 3: 'sm:col-span-3',\n 4: 'sm:col-span-4',\n 5: 'sm:col-span-5',\n 6: 'sm:col-span-6',\n 7: 'sm:col-span-7',\n 8: 'sm:col-span-8',\n 9: 'sm:col-span-9',\n 10: 'sm:col-span-10',\n 11: 'sm:col-span-11',\n 12: 'sm:col-span-12',\n 13: 'sm:col-span-13',\n};\n\nexport const colSpanMd: GridClassesMapping = {\n 1: 'md:col-span-1',\n 2: 'md:col-span-2',\n 3: 'md:col-span-3',\n 4: 'md:col-span-4',\n 5: 'md:col-span-5',\n 6: 'md:col-span-6',\n 7: 'md:col-span-7',\n 8: 'md:col-span-8',\n 9: 'md:col-span-9',\n 10: 'md:col-span-10',\n 11: 'md:col-span-11',\n 12: 'md:col-span-12',\n 13: 'md:col-span-13',\n};\n\nexport const colSpanLg: GridClassesMapping = {\n 1: 'lg:col-span-1',\n 2: 'lg:col-span-2',\n 3: 'lg:col-span-3',\n 4: 'lg:col-span-4',\n 5: 'lg:col-span-5',\n 6: 'lg:col-span-6',\n 7: 'lg:col-span-7',\n 8: 'lg:col-span-8',\n 9: 'lg:col-span-9',\n 10: 'lg:col-span-10',\n 11: 'lg:col-span-11',\n 12: 'lg:col-span-12',\n 13: 'lg:col-span-13',\n};\n","import React from 'react';\nimport { GridClassesMapping, gridCols, gridColsLg, gridColsMd, gridColsSm } from './styles';\nimport { cn } from '../../../lib/utils';\n\nconst getGridCols = (numCols: number | undefined, gridColsMapping: GridClassesMapping): string => {\n if (!numCols) return '';\n if (!Object.keys(gridColsMapping).includes(String(numCols))) return '';\n return gridColsMapping[numCols];\n};\n\nexport interface GridProps extends React.HTMLAttributes<HTMLDivElement> {\n numItems?: number;\n numItemsSm?: number;\n numItemsMd?: number;\n numItemsLg?: number;\n children: React.ReactNode;\n}\n\nconst Grid = React.forwardRef<HTMLDivElement, GridProps>((props, ref) => {\n const { numItems = 1, numItemsSm, numItemsMd, numItemsLg, children, className, ...other } = props;\n\n const colsBase = getGridCols(numItems, gridCols);\n const colsSm = getGridCols(numItemsSm, gridColsSm);\n const colsMd = getGridCols(numItemsMd, gridColsMd);\n const colsLg = getGridCols(numItemsLg, gridColsLg);\n\n const colClassNames = cn(colsBase, colsSm, colsMd, colsLg);\n\n return (\n <div ref={ref} className={cn('grid', colClassNames, className)} {...other}>\n {children}\n </div>\n );\n});\n\nGrid.displayName = 'Grid';\n\nexport default Grid;\n","import React, { useEffect, useState } from \"react\";\nimport { UiSchema } from \"@rjsf/utils\";\nimport { ChevronDown, ChevronUp } from \"lucide-react\";\nimport { FormDataType, JSONFormProps, LayoutConfigType } from \"..\";\nimport { JSONSchemaForm } from \"../../../components/JSONSchemaForm\";\nimport { cn } from \"../../../lib/utils\";\nimport { JSONSchemaFormState } from \"../../../store/standard/JSONSchemaState\";\nimport { BatchSubmitButton, SubmitButton, getFormState } from \"./format\";\n\nconst CollapsibleBox = ({ formKey, title, titleBoxCss, formState, submitButtonProps }: { formKey: string; title: string; titleBoxCss?: string; formState: JSONSchemaFormState<{ [key: string]: any }, UiSchema>; submitButtonProps: any }) => {\n const [opened, setOpened] = useState(true);\n return (\n <div id={`form-${formKey}`}>\n <div\n className=\"mt-5 mb-[10px] flex justify-between items-center cursor-pointer border-t-[1px solid #E5E5EA] py-[5px] hover:bg-[#F2F2F7] dark:hover:bg-gray-900\"\n onClick={() => setOpened((o) => !o)}\n >\n <div className={cn('text-gray-900 dark:text-gray-100 font-bold text-base', titleBoxCss)}>{title}</div>\n {opened ? <ChevronUp /> : <ChevronDown />}\n </div>\n <div className={cn('mt-2', opened ? 'block' : 'hidden')}>\n <JSONSchemaForm formState={formState}>{submitButtonProps && <SubmitButton formKey={formKey} formState={formState} buttonProps={submitButtonProps} />}</JSONSchemaForm>\n </div>\n </div>\n );\n};\n\nexport const ListLayout = <T extends FormDataType>(props: JSONFormProps<T>) => {\n const { layoutConfig = {}, onBatchSubmit, batchSubmitButtonProps, onReady } = props;\n const { $type, ...formLayout } = layoutConfig as LayoutConfigType<T, 'ListLayout'>;\n const formStates = getFormState(props, formLayout);\n\n useEffect(() => {\n if (formStates && onReady) {\n onReady(formStates);\n }\n }, [formStates]);\n\n return (\n <>\n {Object.keys(formStates).map((key) => {\n const layout = formLayout[key];\n const formState = formStates[key];\n return <CollapsibleBox key={key} formKey={key} title={layout?.title || key} titleBoxCss={layout?.titleBoxCss} formState={formState} submitButtonProps={layout?.submitButtonProps} />;\n })}\n {(onBatchSubmit || batchSubmitButtonProps?.onBatchSubmit) && (\n <div className=\"w-full flex\">\n <BatchSubmitButton formStates={formStates} onSubmit={onBatchSubmit} buttonProps={batchSubmitButtonProps} />\n </div>\n )}\n </>\n );\n};","import React, { useEffect } from 'react';\nimport { FormDataType, JSONFormProps, LayoutConfigType } from '..';\nimport { JSONSchemaForm } from '../../../components/JSONSchemaForm';\nimport { BatchSubmitButton, SubmitButton, getFormState } from './format';\n\nexport const SimpleLayout = <T extends FormDataType>(props: JSONFormProps<T>) => {\n const { layoutConfig = {}, onBatchSubmit, batchSubmitButtonProps, onReady } = props;\n const { $type, ...formLayout } = layoutConfig as LayoutConfigType<T, 'SimpleLayout'>;\n const formStates = getFormState(props, formLayout);\n\n useEffect(() => {\n if (formStates && onReady) {\n onReady(formStates);\n }\n }, [formStates]);\n\n return (\n <>\n <div className=\"space-y-2\">\n {Object.keys(formStates).map((key) => {\n const layout = formLayout[key];\n return (\n <div key={key} id={`form-${key}`}>\n <JSONSchemaForm formState={formStates[key]}>{layout?.submitButtonProps && <SubmitButton formKey={key} formState={formStates[key]} buttonProps={layout.submitButtonProps} />}</JSONSchemaForm>\n </div>\n );\n })}\n </div>\n {(onBatchSubmit || batchSubmitButtonProps?.onBatchSubmit) && (\n <div className=\"w-full flex\">\n <BatchSubmitButton formStates={formStates} onSubmit={onBatchSubmit} buttonProps={batchSubmitButtonProps} />\n </div>\n )}\n </>\n );\n};\n","import React, { useEffect, useMemo, useState } from \"react\";\nimport { Tab, Tabs } from \"@nextui-org/react\";\nimport { FormDataType, JSONFormProps, LayoutConfigType } from \"..\";\nimport { JSONSchemaForm } from \"../../../components/JSONSchemaForm\";\nimport { BatchSubmitButton, SubmitButton, getFormState } from \"./format\";\nimport { cn } from \"../../../lib/utils\";\n\nexport const TabLayout = <T extends FormDataType>(props: JSONFormProps<T>) => {\n const { layoutConfig = {}, onBatchSubmit, batchSubmitButtonProps, onReady } = props;\n const {\n $type,\n $tabsProps = {\n color: 'default',\n },\n ...formLayout\n } = layoutConfig as LayoutConfigType<T, 'TabLayout'>;\n const formStates = useMemo(() => getFormState(props, formLayout), [props.formData, props.formConfig, props.layoutConfig]);\n const formKeys = Object.keys(formStates);\n const [selectedTab, setSelectedTab] = useState(formKeys[0] || '');\n\n useEffect(() => {\n if (formStates && onReady) {\n onReady(formStates);\n }\n }, [formStates]);\n\n return (\n <>\n <Tabs\n {...$tabsProps}\n selectedKey={selectedTab}\n onSelectionChange={(key: string) => {\n setSelectedTab(key);\n }}\n >\n {formKeys.map((key) => {\n const layout = formLayout[key];\n return <Tab id={`form-${key}-tab-menu`} key={key} title={<div className={layout?.titleBoxCss}>{layout?.title || key}</div>} />;\n })}\n </Tabs>\n {formKeys.map((key) => {\n const layout = formLayout[key];\n return (\n <div\n key={key}\n id={`form-${key}-tab-content`}\n className={cn('mt-4', selectedTab === key ? '' : 'hidden')}\n >\n <JSONSchemaForm formState={formStates[key]}>\n {layout?.submitButtonProps && <SubmitButton formKey={key} formState={formStates[key]} buttonProps={layout.submitButtonProps} />}\n </JSONSchemaForm>\n </div>\n );\n })}\n {(onBatchSubmit || batchSubmitButtonProps?.onBatchSubmit) && (\n <div className=\"w-full flex\">\n <BatchSubmitButton formStates={formStates} onSubmit={onBatchSubmit} buttonProps={batchSubmitButtonProps} />\n </div>\n )}\n </>\n );\n};\n","import React from 'react';\nimport { Textarea } from '@nextui-org/react';\nimport { WidgetProps } from '@rjsf/utils';\nimport { cn } from \"../../../lib/utils\";\n\ntype Options = {\n className?: string;\n labelPlacement?: 'inside' | 'outside' | 'outside-left';\n size: 'sm' | 'md' | 'lg',\n minRows?: number;\n maxRows?: number;\n placeholder?: string;\n};\n\nexport interface TextareaWidgetProps extends WidgetProps {\n options: Options;\n}\n\nexport interface TextareaWidgetUIOptions {\n 'ui:widget': (props: TextareaWidgetProps) => JSX.Element;\n 'ui:options': Options;\n}\n\nexport function TextareaWidget(props: TextareaWidgetProps) {\n const { onChange, options, label, value, required, disabled, schema } = props;\n const { className, labelPlacement = 'inside', size = 'md', minRows = 2, maxRows = 8 } = options;\n const placeholder = props.placeholder || options.placeholder;\n return (\n <Textarea\n className={cn('w-full', className)}\n label={label}\n placeholder={placeholder}\n value={value}\n isRequired={required}\n isDisabled={disabled}\n minRows={minRows}\n maxRows={maxRows}\n size={size}\n labelPlacement={labelPlacement}\n description={schema.description || ''}\n onChange={e => onChange(e.target.value)}\n />\n );\n}\n","import { Modal, ModalBody, ModalContent, ModalHeader } from '@nextui-org/react';\nimport { observer, useLocalObservable } from \"mobx-react-lite\";\nimport { useStore } from \"../../store/index\";\nimport Draggable from \"react-draggable\";\nimport { JSONForm } from \"../../components/JSONForm\";\nimport { useEffect, useMemo } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { ComplexFormModalStore } from \".\";\nimport React from \"react\";\n\nconst JSONViewModal = observer(() => {\n const rootStore = useStore();\n const complexFormModal = rootStore.get(ComplexFormModalStore);\n const { formData, isOpen } = complexFormModal;\n const store = useLocalObservable(() => ({\n isMobile: false,\n }));\n\n useEffect(() => {\n const handleResize = () => {\n store.isMobile = window.innerWidth < 991;\n };\n handleResize();\n window.addEventListener('resize', handleResize);\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n }, []);\n\n const isMobile = store.isMobile;\n\n const ModalMemo = useMemo(() => {\n if (!formData) {\n return null;\n }\n\n const layoutConfig = { ...complexFormModal.layoutConfig };\n if (isMobile && layoutConfig.$type === 'GridLayout') {\n layoutConfig.$gridColumn = 1;\n Object.keys(layoutConfig).forEach((key) => {\n if (typeof layoutConfig[key] === 'object') {\n // @ts-ignore\n layoutConfig[key].colSpan = 1;\n }\n });\n }\n\n return (\n <Modal\n className={complexFormModal.className}\n classNames={complexFormModal.classNames}\n scrollBehavior={complexFormModal.scrollBehavior}\n isDismissable={complexFormModal.isDismissable}\n isOpen={isOpen}\n size={complexFormModal.modalSize}\n onOpenChange={(open: boolean) => {\n if (!open) {\n complexFormModal.event.emit('abort');\n }\n }}\n >\n <div className=\"z-50 fixed top-0 left-0 w-screen h-screen\">\n <Draggable handle=\".draggable-handle\">\n <ModalContent>\n {complexFormModal.title && <ModalHeader className=\"flex flex-col gap-1 draggable-handle cursor-move\">{complexFormModal.title}</ModalHeader>}\n <ModalBody className={cn('max-h-[90vh] overflow-auto')}>\n <JSONForm\n formData={formData}\n formConfig={complexFormModal.formConfig}\n layoutConfig={layoutConfig}\n onBatchSubmit={complexFormModal.onBatchSubmit\n ? complexFormModal.onBatchSubmit\n : (data) => {\n complexFormModal.event.emit('batchSubmit', data);\n }\n }\n onSet={complexFormModal.onSet}\n onChange={complexFormModal.onChange}\n onReady={complexFormModal.onReady}\n batchSubmitButtonProps={complexFormModal.batchSubmitButtonProps}\n />\n </ModalBody>\n </ModalContent>\n </Draggable>\n </div>\n </Modal>\n );\n }, [isOpen, formData, isMobile]);\n\n return ModalMemo;\n});\n\nexport default JSONViewModal;\n","import { Store } from \"../../store/standard/base\";\nimport Provider from \"./Provider\";\nimport { FormConfigType, FormDataOfKey, FormDataType, LayoutConfigType, LayoutType } from \"../../components/JSONForm\";\nimport EventEmitter from \"events\";\nimport { JSONSchemaFormState } from \"../../store/standard/JSONSchemaState\";\nimport { UiSchema } from \"@rjsf/utils\";\nimport { makeAutoObservable } from \"mobx\";\nimport { RootStore } from \"../../store\";\nimport React, { Dispatch, SetStateAction } from \"react\";\nimport { ButtonProps, SlotsToClasses, ModalSlots } from \"@nextui-org/react\";\n\nexport class ComplexFormModalStore<T extends FormDataType> implements Store {\n sid = 'ComplexFormModalStore';\n provider = () => <Provider />;\n\n isOpen = false;\n title = '';\n formData?: T;\n formConfig?: FormConfigType<T>;\n layoutConfig?: LayoutConfigType<T, LayoutType>;\n className = '';\n classNames?: SlotsToClasses<ModalSlots>;\n modalSize: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full' | 'xs' | '3xl' | '4xl' | '5xl' = 'md';\n scrollBehavior?: 'normal' | 'inside' | 'outside' = 'normal';\n isDismissable = true;\n event = new EventEmitter();\n onBatchSubmit?: (data: T, setLoading?: Dispatch<SetStateAction<boolean>>) => void;\n onSet?: (v: FormDataOfKey<T>, form: JSONSchemaFormState<FormDataOfKey<T>, UiSchema>) => FormDataOfKey<T>;\n onChange?: (data: Partial<T>) => void;\n onReady?: (formStates: { [F in keyof T]?: JSONSchemaFormState<FormDataOfKey<T>, UiSchema> }) => void;\n batchSubmitButtonProps?: ButtonProps & { onBatchSubmit?: (formData: T, setLoading: Dispatch<SetStateAction<boolean>>) => void };\n\n constructor(args?: Partial<ComplexFormModalStore<T>>) {\n Object.assign(this, args);\n makeAutoObservable(this);\n }\n\n setData(v: Partial<ComplexFormModalStore<T>>) {\n Object.assign(this, v);\n }\n\n close() {\n this.isOpen = false;\n this.title = '';\n this.formData = undefined;\n this.formConfig = undefined;\n this.layoutConfig = undefined;\n this.className = '';\n this.classNames = undefined;\n this.modalSize = 'md';\n this.scrollBehavior = 'normal';\n this.isDismissable = true;\n this.onBatchSubmit = undefined;\n this.onSet = undefined;\n this.onChange = undefined;\n this.onReady = undefined;\n this.event.removeAllListeners();\n }\n}\n\nexport async function getComplexFormData<T extends FormDataType>(v: Partial<ComplexFormModalStore<T>>) {\n return new Promise<T>((resolve, reject) => {\n const complexFormModal = RootStore.Get(ComplexFormModalStore);\n // @ts-ignore\n complexFormModal.setData({\n ...v,\n isOpen: true,\n });\n complexFormModal.event.on('batchSubmit', (formData: T) => {\n if (complexFormModal.onBatchSubmit) {\n complexFormModal.onBatchSubmit(formData);\n } else {\n complexFormModal.close();\n resolve(formData);\n }\n });\n complexFormModal.event.on('abort', () => {\n complexFormModal.close();\n reject('abort');\n });\n });\n}\n","import EventEmitter from \"events\";\nimport React from \"react\";\nimport { UiSchema } from \"@rjsf/utils\";\nimport { makeAutoObservable } from \"mobx\";\nimport { Store } from \"../../store/standard/base\";\nimport {\n JSONSchemaFormState,\n JSONValue,\n} from \"../../store/standard/JSONSchemaState\";\nimport Provider from \"./Provider\";\nimport { SelectWidget } from \"../../components/JSONFormWidgets/SelectWidget\";\nimport { InputWidget } from \"../../components/JSONFormWidgets/InputWidget\";\nimport { CheckboxWidget } from \"../../components/JSONFormWidgets/CheckboxWidget\";\nimport { RootStore } from \"../../store\";\nimport { SlotsToClasses, ModalSlots } from \"@nextui-org/react\";\n\nexport class FormModalStore<T = { [key: string]: any }> implements Store {\n sid = 'FormModalStore';\n provider = () => <Provider />;\n\n isOpen = false;\n title = '';\n form: JSONSchemaFormState<T> = null;\n className: string = '';\n classNames?: SlotsToClasses<ModalSlots>;\n modalSize: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full' | 'xs' | '3xl' | '4xl' | '5xl' = 'md';\n scrollBehavior?: 'normal' | 'inside' | 'outside' = 'normal';\n closeOnOverlayClick = false;\n event = new EventEmitter();\n onAfterSubmit?: (data: T) => void;\n\n constructor(args?: Partial<FormModalStore>) {\n Object.assign(this, args);\n makeAutoObservable(this);\n }\n\n setData(v: Partial<FormModalStore>) {\n Object.assign(this, v);\n }\n\n close() {\n this.isOpen = false;\n this.title = '';\n this.form = null;\n this.className = '';\n this.classNames = undefined;\n this.modalSize = 'md';\n this.scrollBehavior = 'normal';\n this.closeOnOverlayClick = false;\n this.onAfterSubmit = undefined;\n this.event.removeAllListeners();\n }\n}\n\nexport async function getFormData<T = { [key: string]: any }>(v: Partial<FormModalStore>) {\n return new Promise<T>((resolve, reject) => {\n const formModal = RootStore.Get(FormModalStore);\n formModal.setData({\n ...v,\n isOpen: true,\n });\n formModal.event.on('afterSubmit', (formData: T) => {\n if (formModal.onAfterSubmit) {\n formModal.onAfterSubmit(formData);\n } else {\n formModal.close();\n resolve(formData);\n }\n });\n formModal.event.on('abort', () => {\n formModal.close();\n reject('abort');\n });\n });\n}\n\nexport function getFormState<T>(\n {\n data,\n metadata = {},\n onSet = (v: T, form) => v,\n onSubmit,\n }: {\n data: T;\n metadata?: { [key: string]: any } & Partial<JSONSchemaFormState<any>>;\n onSet?: (v: T, form: JSONSchemaFormState<T, UiSchema>) => T;\n onSubmit?: (data: T) => void;\n }\n): JSONSchemaFormState<T, UiSchema> {\n const value = {};\n const required = [];\n const props = Object.entries(data).reduce((p, c) => {\n const [k, v] = c;\n const type = typeof v;\n p[k] = {\n type\n };\n if (!metadata[k]) {\n metadata[k] = {};\n }\n if (type === 'string' || type === 'number') {\n if (metadata[k]?.selectOptions) {\n metadata[k]['ui:widget'] = SelectWidget;\n p[k].selectOptions = metadata[k].selectOptions;\n } else {\n if (!metadata[k]['ui:widget']) {\n metadata[k]['ui:widget'] = InputWidget;\n metadata[k]['ui:options'] = {\n // labelPlacement: 'outside-left',\n size: 'sm',\n };\n if (type === 'number') {\n p[k].inputType = 'number';\n }\n }\n }\n }\n if (type === 'boolean') {\n metadata[k]['ui:widget'] = CheckboxWidget;\n metadata[k]['ui:options'] = {\n size: 'sm',\n }\n }\n if (metadata[k]?.inputType) {\n p[k].inputType = metadata[k].inputType;\n delete metadata[k].inputType;\n }\n if (metadata[k]?.title) {\n p[k].title = metadata[k].title || v;\n delete metadata[k].title;\n }\n if (metadata[k]?.description) {\n p[k].description = metadata[k].description;\n delete metadata[k].description;\n }\n // if (metadata[k]?.enum) {\n // p[k].enum = metadata[k].enum;\n // delete metadata[k].enum;\n // }\n // if (metadata[k]?.enumNames) {\n // p[k].enumNames = metadata[k].enumNames;\n // delete metadata[k].enumNames;\n // }\n if (metadata[k]?.required) {\n required.push(k);\n delete metadata[k].required;\n }\n value[k] = v;\n return p;\n }, {});\n const schema = {\n type: 'object',\n properties: props,\n required,\n };\n const form = new JSONSchemaFormState({\n //@ts-ignore\n schema,\n uiSchema: {\n 'ui:submitButtonOptions': {\n norender: false,\n submitText: 'Submit',\n },\n ...metadata,\n },\n afterSubmit(e) {\n if (onSubmit) {\n onSubmit(e.formData as T);\n } else {\n const formModal = RootStore.Get(FormModalStore);\n formModal.event.emit('afterSubmit', e.formData);\n }\n },\n value: new JSONValue({\n default: value,\n //@ts-ignore\n onSet: (v: T) => onSet(v, form),\n }),\n });\n return form;\n}\n\nexport async function getSimpleFormData<T>(\n data: T,\n metadata: { [key: string]: any } & Partial<JSONSchemaFormState<any>> = {},\n config: Partial<FormModalStore>,\n onSet = (v: T, form: JSONSchemaFormState<T, UiSchema>) => {\n return v;\n },\n) {\n const form = getFormState({ data, metadata, onSet });\n return getFormData<T>({\n ...config,\n //@ts-ignore\n form\n });\n}\n","import { Modal, ModalBody, ModalContent, ModalHeader } from '@nextui-org/react';\nimport { observer } from \"mobx-react-lite\";\nimport { JSONSchemaForm } from \"../../components/JSONSchemaForm\";\nimport { useStore } from \"../../store/index\";\nimport Draggable from \"react-draggable\";\nimport { FormModalStore } from \".\";\nimport React from 'react';\n\nconst JSONFormModal = observer(() => {\n const rootStore = useStore();\n const formModal = rootStore.get(FormModalStore);\n const { form, closeOnOverlayClick } = formModal;\n if (!form) {\n return null;\n }\n return (\n <Modal\n className={formModal.className}\n classNames={formModal.classNames}\n scrollBehavior={formModal.scrollBehavior}\n isOpen={formModal.isOpen}\n size={formModal.modalSize}\n isDismissable={!closeOnOverlayClick}\n onOpenChange={(open: boolean) => {\n if (!open) {\n formModal.event.emit('abort');\n }\n }}\n >\n <div className=\"z-50 fixed top-0 left-0 w-screen h-screen flex items-center justify-center\">\n <Draggable handle=\".draggable-handle\">\n <ModalContent>\n {formModal.title && <ModalHeader className=\"flex flex-col gap-1 draggable-handle cursor-move\">{formModal.title}</ModalHeader>}\n <ModalBody className='max-h-[90vh] overflow-auto'>\n <JSONSchemaForm formState={form} />\n </ModalBody>\n </ModalContent>\n </Draggable>\n </div>\n </Modal>\n );\n});\n\nexport default JSONFormModal;\n\n","import React from \"react\";\nimport { _ } from \"../../lib/lodash\";\nimport { RootStore } from \"../../store\";\nimport { Store } from \"../../store/standard/base\";\n\nexport type JSONViewType = {\n className?: string;\n children?: any;\n data?: Record<string, JSONDataType>;\n datas?: Record<string, Record<string, JSONDataType> | JSONDataType[]>;\n uiConfig?: {\n type: string;\n className?: Record<string, string>;\n slots?: Record<string, any>;\n [key: string]: any;\n };\n uiConfigs?: Record<string, JSONViewType[\"uiConfig\"]>;\n};\n\nexport type JSONDataType = {\n title?: string;\n icon?: any;\n render?: any;\n className?: string;\n type?: \"divider\" | \"checkbox\" | \"label\" | \"radio\";\n shortcut?: string;\n disabled?: boolean;\n children?: Record<string, JSONDataType>;\n value?: any;\n link?: any;\n events?: Record<string, any>;\n onChange?: (args: { e: any; v: any }) => void;\n onClick?: (args: { e: any; v: any }) => void;\n};\n\nexport class JSONViewPlugin implements Store {\n sid = \"JSONViewPlugin\";\n autoObservable?: boolean = false;\n\n JSONView = {\n Test: {\n name: \"Test\",\n render: () => <div>Test</div>,\n },\n };\n\n onNewStore({\n rootStore,\n store,\n }: {\n rootStore: RootStore<any>;\n store: Store;\n }): void {\n this.crawl(store);\n }\n\n crawl(store: Store) {\n if (store?.JSONView) {\n this.JSONView = { ...this.JSONView, ...store.JSONView };\n }\n }\n\n static JSONView = (props: JSONViewType) => {\n const jsonviewplugin = RootStore.Get(JSONViewPlugin);\n\n return (\n <>\n {/* @ts-ignore */}\n {Object.keys(props.uiConfigs).map((key) => {\n /* @ts-ignore */\n const config = props.uiConfigs[key] as any;\n const data = _.get(props.datas, key);\n const Component = jsonviewplugin.JSONView[config.type].render;\n const rootStore = RootStore.init();\n Object.values(data).forEach((i) => {\n /* @ts-ignore */\n if (i.events) {\n /* @ts-ignore */\n Object.entries(i.events).forEach(([k, v]) => {\n // @ts-ignore \n i[k] = (args) =>\n rootStore.events.emit(v as any, { ...args, action: k });\n });\n }\n });\n\n return <Component key={key} data={data} uiConfig={config} />;\n })}\n </>\n );\n };\n}\n"]}
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
- import { SlotsToClasses, TableSlots, PaginationProps, SpinnerProps } from '@nextui-org/react';
2
+ import { SlotsToClasses, TableSlots, PaginationProps, PopoverSlots, SpinnerProps } from '@nextui-org/react';
3
3
  import { P as PaginationState } from './PaginationState-c19e621a.js';
4
4
 
5
5
  type HeaderKeys<T extends Record<string, any>> = Array<keyof T | '$actions'>;
6
- type ColumnOptions<T extends Record<string, any>> = {
6
+ type ColumnOptions<T> = {
7
7
  [key in keyof T]?: {
8
8
  label?: React.ReactNode;
9
9
  hidden?: boolean;
@@ -26,7 +26,7 @@ type ColumnOptions<T extends Record<string, any>> = {
26
26
  valueClassName?: string;
27
27
  };
28
28
  };
29
- type Column<T extends Record<string, any>> = {
29
+ type Column<T> = {
30
30
  key: string;
31
31
  label: React.ReactNode;
32
32
  render?: (item: T) => any;
@@ -76,6 +76,15 @@ interface JSONTableProps<T extends Record<string, any>> {
76
76
  loadingOptions?: LoadingOptions;
77
77
  loadingContent?: React.ReactNode;
78
78
  isHeaderSticky?: boolean;
79
+ sortingUIOptions?: {
80
+ dropdownClassNames?: SlotsToClasses<PopoverSlots>;
81
+ titleClassName?: string;
82
+ titles?: {
83
+ asc?: string;
84
+ desc?: string;
85
+ none?: string;
86
+ };
87
+ };
79
88
  extendedTableOptions?: {
80
89
  key: keyof T;
81
90
  columnOptions: ColumnOptions<any>;
@@ -1,4 +1,4 @@
1
- export { JSONTable } from './chunk-EVEBKBW3.mjs';
1
+ export { JSONTable } from './chunk-QBF55FA7.mjs';
2
2
  import './chunk-ONVPCAMQ.mjs';
3
3
  import './chunk-Y23EH2XR.mjs';
4
4
  import './chunk-MGU3KYGC.mjs';
package/dist/metrics.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { JSONTable } from './chunk-EVEBKBW3.mjs';
1
+ import { JSONTable } from './chunk-QBF55FA7.mjs';
2
2
  import './chunk-ONVPCAMQ.mjs';
3
3
  import { SkeletonBox } from './chunk-Y23EH2XR.mjs';
4
4
  import './chunk-MGU3KYGC.mjs';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dappworks/kit",
3
- "version": "0.4.80",
3
+ "version": "0.4.81",
4
4
  "description": "",
5
5
  "main": "./dist/index.mjs",
6
6
  "types": "./dist/index.d.mts",
@@ -126,4 +126,4 @@
126
126
  "access": "public",
127
127
  "registry": "https://registry.npmjs.org/"
128
128
  }
129
- }
129
+ }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../components/JSONTable/index.tsx"],"names":["sortableColumnsDefaultValue","columns","keys","sortedData"],"mappings":"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","sourcesContent":["\"use client\";\n\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport {\n Card,\n Divider,\n Dropdown,\n DropdownItem,\n DropdownMenu,\n DropdownTrigger,\n Pagination as NextuiPagination,\n PaginationProps,\n SlotsToClasses,\n Spinner,\n SpinnerProps,\n Table,\n TableBody,\n TableCell,\n TableColumn,\n TableHeader,\n TableRow,\n TableSlots,\n} from '@nextui-org/react';\nimport { ChevronDown, ChevronUp, ChevronsUpDown } from \"lucide-react\";\nimport { observer } from \"mobx-react-lite\";\nimport { PaginationState } from \"../../store/standard/PaginationState\";\nimport { SkeletonBox } from \"../Common/SkeletonBox\";\nimport { _ } from \"../../lib/lodash\";\nimport { cn } from \"../../lib/utils\";\n\nexport type HeaderKeys<T extends Record<string, any>> = Array<keyof T | '$actions'>;\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 labelClassName?: string;\n valueClassName?: string;\n };\n} & {\n $actions?: {\n label?: React.ReactNode;\n hidden?: boolean;\n sortable?: boolean;\n sortKey?: string;\n order?: number;\n render?: (item: T) => any;\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 CardOptions = {\n boxClassName?: string;\n cardClassName?: string;\n itemClassName?: string;\n showDivider?: boolean;\n dividerClassName?: string;\n};\n\ntype LoadingOptions = {\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 classNames?: SlotsToClasses<TableSlots>;\n rowKey?: keyof T;\n dataSource: T[];\n headerKeys?: HeaderKeys<T>;\n columnOptions?: ColumnOptions<T>;\n isServerPaging?: boolean;\n pagination?: PaginationState;\n nextuiPaginationProps?: PaginationProps | {};\n onRowClick?: (item: T) => void;\n rowCss?: string | ((item: T) => string | undefined);\n asCard?: boolean;\n cardOptions?: CardOptions;\n autoScrollToTop?: boolean;\n emptyContent?: React.ReactNode;\n isLoading?: boolean;\n loadingOptions?: LoadingOptions;\n loadingContent?: React.ReactNode;\n isHeaderSticky?: boolean;\n extendedTableOptions?: {\n key: keyof T;\n columnOptions: ColumnOptions<any>;\n }[];\n}\n\nexport const JSONTable = observer(<T extends Record<string, any>>(props: JSONTableProps<T>) => {\n const {\n className,\n classNames = {},\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 asCard = false,\n cardOptions = {\n boxClassName: '',\n cardClassName: '',\n itemClassName: '',\n showDivider: true,\n dividerClassName: '',\n },\n autoScrollToTop = false,\n emptyContent = 'No Data',\n isLoading = false,\n loadingOptions,\n loadingContent,\n isHeaderSticky = false,\n } = props;\n\n const tableBoxRef = useRef<HTMLElement>(null);\n\n const { columns, sortableColumnsDefaultValue } = useMemo(() => {\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 if (!keys.includes('$actions') && columnOptions['$actions']) {\n keys.push('$actions');\n }\n\n const sortableColumnsDefaultValue: { [k: string]: 'asc' | 'desc' | 'none' } = {};\n\n const columns: Column<T>[] = keys.map((key: string) => {\n const sortable = columnOptions?.[key]?.sortable;\n if (sortable) {\n sortableColumnsDefaultValue[key] = 'none';\n }\n return {\n key,\n label: columnOptions?.[key]?.label || (key === '$actions' ? '' : 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\n ? 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 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\n return {\n columns,\n extendedTables,\n sortableColumnsDefaultValue,\n };\n }, [dataSource, columnOptions]);\n\n const [sortableColumnsMap, setSortableColumnsMap] = useState<{ [k: string]: 'asc' | 'desc' | 'none' }>({});\n const [sortedData, setSortedData] = useState<T[]>(dataSource);\n\n useEffect(() => {\n setSortableColumnsMap(sortableColumnsDefaultValue);\n }, [sortableColumnsDefaultValue]);\n\n useEffect(() => {\n setSortedData(dataSource);\n if (!isServerPaging) {\n pagination.setData({\n total: dataSource.length,\n });\n }\n }, [dataSource]);\n\n const data = isServerPaging ? sortedData : sortedData.slice(pagination.offset, pagination.offset + pagination.limit);\n\n if (asCard) {\n return (\n <CardUI\n className={className}\n rowKey={rowKey}\n data={data}\n columns={columns}\n columnOptions={columnOptions}\n cardOptions={cardOptions}\n pagination={pagination}\n nextuiPaginationProps={nextuiPaginationProps}\n onRowClick={onRowClick}\n autoScrollToTop={autoScrollToTop}\n emptyContent={emptyContent}\n isLoading={isLoading}\n loadingOptions={loadingOptions}\n loadingContent={loadingContent}\n />\n );\n }\n\n return (\n <>\n <Table\n removeWrapper\n isHeaderSticky={isHeaderSticky}\n className={cn('relative w-full overflow-auto h-[400px]', className)}\n classNames={classNames}\n ref={tableBoxRef}\n >\n <TableHeader columns={columns}>\n {columns.map((item) => (\n <TableColumn key={item.key}>\n <div className=\"flex items-center\">\n <span>{item.label}</span>\n {!!sortableColumnsMap[item.key] && (\n <Dropdown\n showArrow\n backdrop=\"opaque\"\n placement=\"bottom\"\n classNames={{\n content: 'min-w-[100px] rounded-lg shadow-md border dark:border-[#3e3e3e]',\n }}\n >\n <DropdownTrigger>\n <button className=\"outline-none p-0\">\n {sortableColumnsMap[item.key] === 'desc' && <ChevronDown size={14} />}\n {sortableColumnsMap[item.key] === 'asc' && <ChevronUp size={14} />}\n {sortableColumnsMap[item.key] === 'none' && <ChevronsUpDown size={14} />}\n </button>\n </DropdownTrigger>\n <DropdownMenu variant=\"flat\" selectionMode=\"single\" selectedKeys={[sortableColumnsMap[item.key]]}>\n <DropdownItem\n key=\"asc\"\n onClick={() => {\n const { sortableColumns, sortedData } = sortData({\n type: 'asc',\n key: item.key,\n sortKey: columnOptions?.[item.key]?.sortKey,\n sortableColumnsMap,\n dataSource,\n });\n setSortableColumnsMap(sortableColumns);\n setSortedData(sortedData);\n }}\n >\n <span className=\"text-xs font-bold\">Sort ascending</span>\n </DropdownItem>\n <DropdownItem\n key=\"desc\"\n onClick={() => {\n const { sortableColumns, sortedData } = sortData({\n type: 'desc',\n key: item.key,\n sortKey: columnOptions?.[item.key]?.sortKey,\n sortableColumnsMap,\n dataSource,\n });\n setSortableColumnsMap(sortableColumns);\n setSortedData(sortedData);\n }}\n >\n <span className=\"text-xs font-bold\">Sort descending</span>\n </DropdownItem>\n <DropdownItem\n key=\"none\"\n onClick={() => {\n const { sortableColumns, sortedData } = sortData({\n type: 'none',\n key: item.key,\n sortKey: columnOptions?.[item.key]?.sortKey,\n sortableColumnsMap,\n dataSource,\n });\n setSortableColumnsMap(sortableColumns);\n setSortedData(sortedData);\n }}\n >\n <span className=\"text-xs font-bold\">Sort none</span>\n </DropdownItem>\n </DropdownMenu>\n </Dropdown>\n )}\n </div>\n </TableColumn>\n ))}\n </TableHeader>\n {isLoading ? (\n <TableBody emptyContent={loadingContent || DefaultLoading({ loadingOptions })}>{[]}</TableBody>\n ) : data.length > 0 ? (\n <TableBody>\n {data.map((item, index) => {\n return (\n <TableRow\n key={item[rowKey] || index}\n className={cn('', typeof rowCss === 'function' ? rowCss(item) : rowCss)}\n onClick={() => {\n onRowClick?.(item);\n }}\n >\n {columns.map((column) => {\n return <TableCell key={column.key}>{column.render ? column.render(item) : renderFieldValue(item[column.key])}</TableCell>;\n })}\n </TableRow>\n );\n })}\n </TableBody>\n ) : (\n <TableBody emptyContent={emptyContent}>{[]}</TableBody>\n )}\n </Table>\n {pagination.total > pagination.limit && (\n <div className=\"flex justify-center\">\n <NextuiPagination\n className=\"mt-2\"\n showControls\n showShadow\n size=\"sm\"\n radius=\"sm\"\n color=\"primary\"\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 if (autoScrollToTop && tableBoxRef.current) {\n scrollIntoTop(tableBoxRef.current);\n }\n }}\n {...nextuiPaginationProps}\n />\n </div>\n )}\n </>\n );\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 JSON.stringify(v);\n}\n\nfunction sortData<T>({\n sortKey,\n key,\n type,\n sortableColumnsMap,\n dataSource,\n}: {\n sortKey: string;\n key: string;\n type: 'asc' | 'desc' | 'none';\n sortableColumnsMap: {\n [k: string]: 'asc' | 'desc' | 'none';\n };\n dataSource: T[];\n}) {\n const sortableColumns: { [k: string]: 'asc' | 'desc' | 'none' } = {};\n Object.keys(sortableColumnsMap).map((k) => {\n sortableColumns[k] = k === key ? type : 'none';\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 return {\n sortableColumns,\n sortedData,\n };\n}\n\nfunction CardUI<T>({\n className,\n data,\n columns,\n columnOptions,\n rowKey,\n cardOptions,\n pagination,\n nextuiPaginationProps,\n onRowClick,\n autoScrollToTop,\n emptyContent,\n isLoading,\n loadingOptions,\n loadingContent,\n}: {\n className?: string;\n data: T[];\n columns: Column<T>[];\n columnOptions?: ColumnOptions<T>;\n rowKey: string | number | symbol;\n cardOptions?: CardOptions;\n pagination: PaginationState;\n nextuiPaginationProps: PaginationProps | {};\n onRowClick?: (item: T) => void;\n autoScrollToTop?: boolean;\n emptyContent?: React.ReactNode;\n isLoading?: boolean;\n loadingOptions?: LoadingOptions;\n loadingContent?: React.ReactNode;\n}) {\n const cardBoxRef = useRef<HTMLDivElement>(null);\n return (\n <div className={className} ref={cardBoxRef}>\n <div className={cn('space-y-2', cardOptions?.boxClassName)}>\n {isLoading ? (\n loadingContent ? (\n <Card className={cn('w-full h-40 flex flex-col justify-center items-center p-4 shadow-sm text-foreground-400', cardOptions?.cardClassName)}>{loadingContent}</Card>\n ) : (\n <DefaultLoading loadingOptions={loadingOptions} />\n )\n ) : data.length > 0 ? (\n data.map((item, index) => {\n return (\n <Card\n key={item[rowKey] || index}\n className={cn('w-full shadow-sm 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-foreground-400', 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 </Card>\n );\n })\n ) : (\n <Card className={cn('w-full h-40 flex flex-col justify-center items-center p-4 shadow-sm text-foreground-400', cardOptions?.cardClassName)}>{emptyContent}</Card>\n )}\n </div>\n {pagination.total > pagination.limit && (\n <div className=\"flex justify-center\">\n <NextuiPagination\n className='mt-2'\n showControls\n showShadow\n size=\"sm\"\n radius=\"sm\"\n color=\"primary\"\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 if (autoScrollToTop && cardBoxRef.current) {\n scrollIntoTop(cardBoxRef.current);\n }\n }}\n {...nextuiPaginationProps}\n />\n </div>\n )}\n </div>\n );\n}\n\nfunction DefaultLoading({ loadingOptions }: { loadingOptions?: LoadingOptions }) {\n const type = loadingOptions?.type || 'skeleton';\n const skeletonOptions = loadingOptions?.skeleton;\n const spinnerOptions = loadingOptions?.spinner;\n const spinnerProps = spinnerOptions?.spinnerProps || {};\n\n if (type === 'skeleton') {\n return <SkeletonBox className={cn('mt-2 flex-col', skeletonOptions?.boxClassName)} skClassName={cn('h-[30px] rounded', skeletonOptions?.skeletonClassName)} line={skeletonOptions?.line || 5} />;\n }\n\n return (\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}\n\nfunction scrollIntoTop(target: HTMLElement) {\n if (target) {\n const { top } = target.getBoundingClientRect();\n window.scrollTo({\n top: top + window.scrollY - 100,\n behavior: 'smooth',\n });\n }\n}\n\nfunction CollapseBody<T>({\n data,\n rowKey,\n columns,\n extendedTables,\n rowCss,\n}: {\n data: T[];\n rowKey: string | number | symbol;\n columns: Column<T>[];\n extendedTables: ExtendedTable<any>[];\n rowCss?: string | ((item: T) => string | undefined);\n}) {\n return (\n <TableBody>\n {data.map((item, index) => {\n return <CollapseBodyRow key={item[rowKey] || index} item={item} columns={columns} extendedTables={extendedTables} rowCss={rowCss} />;\n })}\n </TableBody>\n );\n}\n\nfunction CollapseBodyRow<T>({ item, columns, extendedTables, rowCss }: { item: T; columns: Column<T>[]; extendedTables: ExtendedTable<any>[]; rowCss?: string | ((item: T) => string | undefined) }) {\n const [isOpen, setIsOpen] = useState(false);\n const rows = [\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 {columns.map((column) => {\n return (\n <TableCell key={column.key} className=\"max-w-[200px] overflow-auto\">\n {column.render ? column.render(item) : renderFieldValue(item[column.key])}\n </TableCell>\n );\n })}\n </TableRow>,\n <TableRow className={cn(isOpen ? 'table-row' : 'hidden')}>\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 {exColumns.map((exC) => {\n return (\n <TableColumn key={exC.key} className=\"text-xs text-[#64748B] dark:text-gray-300\">\n {exC.label}\n </TableColumn>\n );\n })}\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 return rows.map((row) => row);\n}\n"]}