@lgsm/modules 1.6.20-beta.2 → 1.6.20-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +61 -1
- package/dist/assets/main.css +1 -1
- package/dist/components/ui/alert-dialog.d.ts +14 -0
- package/dist/components/ui/badge.d.ts +9 -0
- package/dist/components/ui/button.d.ts +10 -0
- package/dist/components/ui/calendar.d.ts +8 -0
- package/dist/components/ui/card.d.ts +11 -0
- package/dist/components/ui/checkbox.d.ts +4 -0
- package/dist/components/ui/command.d.ts +18 -0
- package/dist/components/ui/dialog.d.ts +21 -0
- package/dist/components/ui/dropdown-menu.d.ts +27 -0
- package/dist/components/ui/input.d.ts +3 -0
- package/dist/components/ui/label.d.ts +4 -0
- package/dist/components/ui/popover.d.ts +7 -0
- package/dist/components/ui/select.d.ts +13 -0
- package/dist/components/ui/separator.d.ts +4 -0
- package/dist/components/ui/skeleton.d.ts +2 -0
- package/dist/components/ui/sonner.d.ts +4 -0
- package/dist/components/ui/switch.d.ts +4 -0
- package/dist/components/ui/table.d.ts +10 -0
- package/dist/components/ui/textarea.d.ts +3 -0
- package/dist/components/ui/tooltip.d.ts +7 -0
- package/dist/lib/utils.d.ts +2 -0
- package/dist/main.d.ts +7 -0
- package/dist/main.js +28841 -3848
- package/dist/shared-ui/DataTable/components/customFilterControl.d.ts +8 -0
- package/dist/shared-ui/DataTable/components/dataTable.d.ts +3 -0
- package/dist/shared-ui/DataTable/components/dataTableBody.d.ts +7 -0
- package/dist/shared-ui/DataTable/components/dataTablePagination.d.ts +2 -0
- package/dist/shared-ui/DataTable/components/dataTableToolbar.d.ts +2 -0
- package/dist/shared-ui/DataTable/components/detailTableCard.d.ts +2 -0
- package/dist/shared-ui/DataTable/components/dropdownCell.d.ts +13 -0
- package/dist/shared-ui/DataTable/components/editableCell.d.ts +2 -0
- package/dist/shared-ui/DataTable/components/errorWrapper.d.ts +2 -0
- package/dist/shared-ui/DataTable/components/filterPanel.d.ts +2 -0
- package/dist/shared-ui/DataTable/components/memoRow.d.ts +16 -0
- package/dist/shared-ui/DataTable/components/multiSelectCell.d.ts +11 -0
- package/dist/shared-ui/DataTable/components/pageInput.d.ts +2 -0
- package/dist/shared-ui/DataTable/components/saveConfirmDialog.d.ts +2 -0
- package/dist/shared-ui/DataTable/components/serverTable.d.ts +34 -0
- package/dist/shared-ui/DataTable/components/sortableHeader.d.ts +7 -0
- package/dist/shared-ui/DataTable/components/uploadAssetImage.d.ts +2 -0
- package/dist/shared-ui/DataTable/hooks/hooks.d.ts +79 -0
- package/dist/shared-ui/DataTable/hooks/useColumnDefinitions.d.ts +6 -0
- package/dist/shared-ui/DataTable/hooks/useEditing.d.ts +21 -0
- package/dist/shared-ui/DataTable/hooks/useFilterPanel.d.ts +13 -0
- package/dist/shared-ui/DataTable/hooks/usePageInput.d.ts +6 -0
- package/dist/shared-ui/DataTable/hooks/useRowIdentity.d.ts +5 -0
- package/dist/shared-ui/DataTable/hooks/useSelection.d.ts +6 -0
- package/dist/shared-ui/DataTable/hooks/useTableData.d.ts +9 -0
- package/dist/shared-ui/DataTable/hooks/useTableStatus.d.ts +17 -0
- package/dist/shared-ui/DataTable/index.d.ts +25 -0
- package/dist/shared-ui/DataTable/types/button.d.ts +12 -0
- package/dist/shared-ui/DataTable/types/column/actionColumn.d.ts +4 -0
- package/dist/shared-ui/DataTable/types/column/baseColumn.d.ts +7 -0
- package/dist/shared-ui/DataTable/types/column/columnConfig.d.ts +13 -0
- package/dist/shared-ui/DataTable/types/column/columnDefinitions.d.ts +35 -0
- package/dist/shared-ui/DataTable/types/column/columnLayout.d.ts +5 -0
- package/dist/shared-ui/DataTable/types/column/columnType.d.ts +1 -0
- package/dist/shared-ui/DataTable/types/column/editableCell.d.ts +4 -0
- package/dist/shared-ui/DataTable/types/column/editableColumn.d.ts +5 -0
- package/dist/shared-ui/DataTable/types/column/optionColumn.d.ts +9 -0
- package/dist/shared-ui/DataTable/types/column/renderColumn.d.ts +6 -0
- package/dist/shared-ui/DataTable/types/column/treeColumn.d.ts +3 -0
- package/dist/shared-ui/DataTable/types/column/validateColumn.d.ts +4 -0
- package/dist/shared-ui/DataTable/types/column/visibilityColumn.d.ts +6 -0
- package/dist/shared-ui/DataTable/types/filtering.d.ts +43 -0
- package/dist/shared-ui/DataTable/types/hooks/useEditingProps.d.ts +8 -0
- package/dist/shared-ui/DataTable/types/hooks/useFilterPanel.d.ts +7 -0
- package/dist/shared-ui/DataTable/types/pagination.d.ts +5 -0
- package/dist/shared-ui/DataTable/types/sorting.d.ts +5 -0
- package/dist/shared-ui/DataTable/types/table/baseDataTable.d.ts +5 -0
- package/dist/shared-ui/DataTable/types/table/crudOptions.d.ts +12 -0
- package/dist/shared-ui/DataTable/types/table/dataTable.d.ts +46 -0
- package/dist/shared-ui/DataTable/types/table/dataTableBodyProps.d.ts +23 -0
- package/dist/shared-ui/DataTable/types/table/dataTablePaginationProps.d.ts +13 -0
- package/dist/shared-ui/DataTable/types/table/dataTableToolbarProps.d.ts +46 -0
- package/dist/shared-ui/DataTable/types/table/errorWrapper.d.ts +4 -0
- package/dist/shared-ui/DataTable/types/table/importExportOptions.d.ts +12 -0
- package/dist/shared-ui/DataTable/types/table/saveConfirmDialog.d.ts +11 -0
- package/dist/shared-ui/DataTable/types/table/serverSideConfig.d.ts +38 -0
- package/dist/shared-ui/DataTable/types/table/statusConfig.d.ts +15 -0
- package/dist/shared-ui/DataTable/types/table/tableMeta.d.ts +3 -0
- package/dist/shared-ui/DataTable/types/table/tablePermissions.d.ts +6 -0
- package/dist/shared-ui/DataTable/types/table/treeOptions.d.ts +7 -0
- package/dist/shared-ui/DataTable/types/table-panel/detailTableCard.d.ts +12 -0
- package/dist/shared-ui/DataTable/utils/column.d.ts +11 -0
- package/dist/shared-ui/DataTable/utils/compare.d.ts +2 -0
- package/dist/shared-ui/DataTable/utils/filter.d.ts +2 -0
- package/dist/shared-ui/DataTable/utils/image.d.ts +4 -0
- package/dist/shared-ui/DataTable/utils/index.d.ts +6 -0
- package/dist/shared-ui/DataTable/utils/row.d.ts +2 -0
- package/dist/shared-ui/DataTable/utils/search.d.ts +4 -0
- package/dist/shared-ui/DataTable/utils/status.d.ts +18 -0
- package/dist/shared-ui/DataTable/utils/tree.d.ts +3 -0
- package/dist/utils/date.d.ts +1 -0
- package/dist/utils/excel.d.ts +1 -0
- package/package.json +15 -1
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { StatusConfig } from './statusConfig';
|
|
2
|
+
import { BaseDataTable } from './baseDataTable';
|
|
3
|
+
import { CRUDOptions } from './crudOptions';
|
|
4
|
+
import { TreeOptions } from './treeOptions';
|
|
5
|
+
import { ImportExportOptions } from './importExportOptions';
|
|
6
|
+
import { ServerSideConfig } from './serverSideConfig';
|
|
7
|
+
import { ColumnDef } from '@tanstack/react-table';
|
|
8
|
+
import { TablePermissions } from './tablePermissions';
|
|
9
|
+
export interface DataTable<TData = any> extends Partial<BaseDataTable>, CRUDOptions, TreeOptions, ImportExportOptions {
|
|
10
|
+
data: TData[];
|
|
11
|
+
/** Access flags supplied by the consuming app. Omission makes the table read-only. */
|
|
12
|
+
permissions?: TablePermissions;
|
|
13
|
+
/** Raw TanStack ColumnDef[] to bypass ColumnConfig conversion */
|
|
14
|
+
columnDefs?: ColumnDef<TData>[];
|
|
15
|
+
/** Server-side pagination, sorting, and totalCount configuration */
|
|
16
|
+
serverSide?: ServerSideConfig;
|
|
17
|
+
/** Loading state flag (renders skeleton rows) */
|
|
18
|
+
loading?: boolean;
|
|
19
|
+
/** Custom header action buttons slot (e.g. Add Request, Export) rendered next to title */
|
|
20
|
+
headerActions?: React.ReactNode;
|
|
21
|
+
/** Custom filter components slot rendered above the table */
|
|
22
|
+
filters?: React.ReactNode;
|
|
23
|
+
title?: string;
|
|
24
|
+
getRowId?: (row: any) => string | undefined;
|
|
25
|
+
onRowClick?: (row: any) => void;
|
|
26
|
+
activeRowId?: string;
|
|
27
|
+
showStatusColumn?: boolean;
|
|
28
|
+
showPagination?: boolean;
|
|
29
|
+
showStatusFilter?: boolean;
|
|
30
|
+
nonSortableKeys?: string[];
|
|
31
|
+
searchPlaceholder?: string;
|
|
32
|
+
searchKeys?: string[];
|
|
33
|
+
searchPriorityKey?: string;
|
|
34
|
+
onImageUpload?: (row: any, file: File) => Promise<string>;
|
|
35
|
+
statusKey?: string;
|
|
36
|
+
statusConfig?: StatusConfig;
|
|
37
|
+
rowsPerPageOptions?: number[];
|
|
38
|
+
defaultRowsPerPage?: number;
|
|
39
|
+
defaultMinWidth?: string;
|
|
40
|
+
customFilters?: any[];
|
|
41
|
+
onAdd?: () => void;
|
|
42
|
+
filterSwitchKey?: string;
|
|
43
|
+
onSelectionChange?: (ids: string[]) => void;
|
|
44
|
+
onQueryChange?: (query: string) => void;
|
|
45
|
+
onDeleteMulti?: (selectedIds: string[]) => void;
|
|
46
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Table as TanStackTable } from '@tanstack/react-table';
|
|
2
|
+
import { ColumnConfig } from '../column/columnConfig';
|
|
3
|
+
import { TablePermissions } from './tablePermissions';
|
|
4
|
+
export interface DataTableBodyProps {
|
|
5
|
+
permissions?: TablePermissions;
|
|
6
|
+
table: TanStackTable<any>;
|
|
7
|
+
columnsCount: number;
|
|
8
|
+
columnConfig?: ColumnConfig[];
|
|
9
|
+
loading?: boolean;
|
|
10
|
+
newRowIds: Set<string>;
|
|
11
|
+
editingRows: Set<string>;
|
|
12
|
+
editedRows: Set<string>;
|
|
13
|
+
rowsToDisable: Set<string>;
|
|
14
|
+
rowsToEnable: Set<string>;
|
|
15
|
+
rowsToDelete: Set<string>;
|
|
16
|
+
selectedRows: Set<string>;
|
|
17
|
+
errors: Map<string, Map<string, string>>;
|
|
18
|
+
getRowId: (row: any) => string;
|
|
19
|
+
onRowClick?: (row: any) => void;
|
|
20
|
+
activeRowId?: string;
|
|
21
|
+
statusKey: string;
|
|
22
|
+
defaultMinWidth?: string;
|
|
23
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface DataTablePaginationProps {
|
|
2
|
+
pageIndex: number;
|
|
3
|
+
pageSize: number;
|
|
4
|
+
pageCount: number;
|
|
5
|
+
totalRows: number;
|
|
6
|
+
canPreviousPage: boolean;
|
|
7
|
+
canNextPage: boolean;
|
|
8
|
+
setPageSize: (size: number) => void;
|
|
9
|
+
previousPage: () => void;
|
|
10
|
+
nextPage: () => void;
|
|
11
|
+
setPageIndex: (index: number) => void;
|
|
12
|
+
rowsPerPageOptions?: number[];
|
|
13
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { StatusConfig } from './statusConfig';
|
|
2
|
+
import { ImportOption } from './importExportOptions';
|
|
3
|
+
export interface DataTableToolbarProps {
|
|
4
|
+
globalFilter: string;
|
|
5
|
+
setQuery: (q: string) => void;
|
|
6
|
+
searchPlaceholder: string;
|
|
7
|
+
hasFilters: boolean;
|
|
8
|
+
showFilterPanel: boolean;
|
|
9
|
+
setShowFilterPanel: React.Dispatch<React.SetStateAction<boolean>>;
|
|
10
|
+
showStatusFilter?: boolean;
|
|
11
|
+
setStatusFilter?: (v: string) => void;
|
|
12
|
+
switchKey?: string;
|
|
13
|
+
displayFilter?: "all" | "yes" | "no";
|
|
14
|
+
setDisplayFilter?: (v: "all" | "yes" | "no") => void;
|
|
15
|
+
setPagination?: React.Dispatch<React.SetStateAction<any>>;
|
|
16
|
+
customFilters?: any[];
|
|
17
|
+
activeFilters?: Record<string, any>;
|
|
18
|
+
setActiveFilters?: React.Dispatch<React.SetStateAction<Record<string, any>>>;
|
|
19
|
+
onResetFilters?: () => void;
|
|
20
|
+
hasActiveCustomFilters?: boolean;
|
|
21
|
+
exportAction?: (selectedIds?: any) => void;
|
|
22
|
+
enableExport?: boolean;
|
|
23
|
+
handleExport: () => void;
|
|
24
|
+
importAction?: (() => void) | ImportOption[];
|
|
25
|
+
importOptions?: ImportOption[];
|
|
26
|
+
canPerformGlobalAction: (actionKey: string, statusConfig?: StatusConfig) => boolean;
|
|
27
|
+
statusConfig?: StatusConfig;
|
|
28
|
+
statusFilter: string;
|
|
29
|
+
onAdd?: () => void;
|
|
30
|
+
addNewRow: () => void;
|
|
31
|
+
handleEdit?: (id: Set<string>) => void;
|
|
32
|
+
markDisabled: () => void;
|
|
33
|
+
markEnabled: () => void;
|
|
34
|
+
markDeleted: () => void;
|
|
35
|
+
onDeleteMulti?: (selectedIds: string[]) => void;
|
|
36
|
+
selectedRow: Set<string>;
|
|
37
|
+
selectedRowCount: number;
|
|
38
|
+
noneEligibleForDisable: boolean;
|
|
39
|
+
noneEligibleForEnable: boolean;
|
|
40
|
+
canDeleteSelection: boolean;
|
|
41
|
+
saving: boolean;
|
|
42
|
+
hasEditableRows?: boolean;
|
|
43
|
+
hasChanges: () => boolean;
|
|
44
|
+
hasValidationErrors: () => boolean;
|
|
45
|
+
setShowSaveDialog: (show: boolean) => void;
|
|
46
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface ImportOption {
|
|
2
|
+
label: string;
|
|
3
|
+
onClick: () => void;
|
|
4
|
+
icon?: React.ReactNode;
|
|
5
|
+
}
|
|
6
|
+
export interface ImportExportOptions {
|
|
7
|
+
exportAction?: (selectedIds?: any) => void;
|
|
8
|
+
importAction?: (() => void) | ImportOption[];
|
|
9
|
+
importOptions?: ImportOption[];
|
|
10
|
+
enableExport?: boolean;
|
|
11
|
+
exportFileName?: string;
|
|
12
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface SaveConfirmDialogProps {
|
|
2
|
+
open: boolean;
|
|
3
|
+
onOpenChange: (open: boolean) => void;
|
|
4
|
+
onConfirm: () => void;
|
|
5
|
+
saving: boolean;
|
|
6
|
+
newRowCount: number;
|
|
7
|
+
editedRowCount: number;
|
|
8
|
+
disableCount: number;
|
|
9
|
+
enableCount: number;
|
|
10
|
+
deleteCount: number;
|
|
11
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export interface ServerFetchParams {
|
|
2
|
+
page: number;
|
|
3
|
+
size: number;
|
|
4
|
+
sortBy: string;
|
|
5
|
+
desc: boolean;
|
|
6
|
+
filter: Record<string, any>;
|
|
7
|
+
}
|
|
8
|
+
export interface ServerTableConfig {
|
|
9
|
+
fetchParams: ServerFetchParams;
|
|
10
|
+
onFetchParamsChange: (params: ServerFetchParams) => void;
|
|
11
|
+
totalCount: number;
|
|
12
|
+
loading?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface ServerSideConfig {
|
|
15
|
+
/** Total count of items matching filter from the backend API */
|
|
16
|
+
totalCount: number;
|
|
17
|
+
/** Whether the query is currently loading */
|
|
18
|
+
loading?: boolean;
|
|
19
|
+
/** Controlled 0-based page index */
|
|
20
|
+
pageIndex: number;
|
|
21
|
+
/** Controlled page size */
|
|
22
|
+
pageSize: number;
|
|
23
|
+
/** Handler when page index or size changes */
|
|
24
|
+
onPaginationChange: (pagination: {
|
|
25
|
+
pageIndex: number;
|
|
26
|
+
pageSize: number;
|
|
27
|
+
}) => void;
|
|
28
|
+
/** Controlled sorting state */
|
|
29
|
+
sorting?: {
|
|
30
|
+
id: string;
|
|
31
|
+
desc: boolean;
|
|
32
|
+
}[];
|
|
33
|
+
/** Handler when sorting changes */
|
|
34
|
+
onSortingChange?: (sorting: {
|
|
35
|
+
id: string;
|
|
36
|
+
desc: boolean;
|
|
37
|
+
}[]) => void;
|
|
38
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ButtonSet } from '../button';
|
|
2
|
+
export type StatusConfig<T extends string | boolean = string | boolean> = {
|
|
3
|
+
key: string;
|
|
4
|
+
mapping: Record<string, {
|
|
5
|
+
label: string;
|
|
6
|
+
value: T;
|
|
7
|
+
style?: string;
|
|
8
|
+
color?: string;
|
|
9
|
+
}>;
|
|
10
|
+
buttonRules: Record<string, Record<string, ButtonSet>>;
|
|
11
|
+
normalize?: (value: any) => string;
|
|
12
|
+
switchOnValue?: T;
|
|
13
|
+
switchOffValue?: T;
|
|
14
|
+
defaultStatus?: string;
|
|
15
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ColumnConfig } from '../column/columnConfig';
|
|
2
|
+
export interface DetailTableCardProps {
|
|
3
|
+
title: string;
|
|
4
|
+
highlight?: string;
|
|
5
|
+
onClose: () => void;
|
|
6
|
+
columns: ColumnConfig[];
|
|
7
|
+
data: any[];
|
|
8
|
+
loading?: boolean;
|
|
9
|
+
icon?: React.ReactNode;
|
|
10
|
+
closeLabel?: string;
|
|
11
|
+
searchPlaceholder?: string;
|
|
12
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ColumnConfig } from '../types/column/columnConfig';
|
|
2
|
+
export declare function getDropdownOption(value: any, options?: {
|
|
3
|
+
label: string;
|
|
4
|
+
value: string | number;
|
|
5
|
+
}[]): {
|
|
6
|
+
label: string;
|
|
7
|
+
value: string | number;
|
|
8
|
+
} | undefined;
|
|
9
|
+
export declare const getDefaultMinWidth: (type: ColumnConfig["type"], defaultWidth?: string) => string;
|
|
10
|
+
export declare const isColumnVisible: (col: ColumnConfig, isEditing: boolean, isAdding: boolean) => boolean;
|
|
11
|
+
export declare const isEmptyByType: (val: any, col: ColumnConfig) => boolean;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { FilterFn } from '@tanstack/react-table';
|
|
2
|
+
import { ColumnConfig } from '../types/column/columnConfig';
|
|
3
|
+
export declare function getSearchPriority(value: unknown, query: string): number;
|
|
4
|
+
export declare function createGlobalFilter(columns: ColumnConfig[], searchKeys?: string[]): FilterFn<any>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { StatusConfig } from '../types/table/statusConfig';
|
|
2
|
+
export declare function normalizeRowStatus(row: any, statusConfig: StatusConfig): string;
|
|
3
|
+
export declare function getStatusOptions(statusConfig?: StatusConfig): [string, {
|
|
4
|
+
label: string;
|
|
5
|
+
value: string | boolean;
|
|
6
|
+
style?: string;
|
|
7
|
+
color?: string;
|
|
8
|
+
}][];
|
|
9
|
+
export declare function canPerformAction(row: any, actionKey: string, statusConfig?: StatusConfig, permissions?: {
|
|
10
|
+
canCreate?: boolean;
|
|
11
|
+
canModify?: boolean;
|
|
12
|
+
canDelete?: boolean;
|
|
13
|
+
}): boolean;
|
|
14
|
+
export declare function canPerformGlobalAction(actionKey: string, statusFilter?: string, statusConfig?: StatusConfig, permissions?: {
|
|
15
|
+
canCreate?: boolean;
|
|
16
|
+
canModify?: boolean;
|
|
17
|
+
canDelete?: boolean;
|
|
18
|
+
}): boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function formatDate(value?: string | null): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function exportToExcel(data: any[], filenamePrefix: string, sheetName?: string): boolean;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lgsm/modules",
|
|
3
|
-
"version": "1.6.20-beta.
|
|
3
|
+
"version": "1.6.20-beta.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "vite build",
|
|
@@ -69,18 +69,32 @@
|
|
|
69
69
|
"vitest": "3.0.7"
|
|
70
70
|
},
|
|
71
71
|
"dependencies": {
|
|
72
|
+
"@radix-ui/react-alert-dialog": "^1.1.15",
|
|
73
|
+
"@radix-ui/react-checkbox": "^1.3.3",
|
|
72
74
|
"@radix-ui/react-dialog": "^1.1.15",
|
|
73
75
|
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
76
|
+
"@radix-ui/react-popover": "^1.1.15",
|
|
77
|
+
"@radix-ui/react-select": "^2.2.6",
|
|
78
|
+
"@radix-ui/react-separator": "^1.1.7",
|
|
74
79
|
"@radix-ui/react-slot": "^1.2.3",
|
|
80
|
+
"@radix-ui/react-switch": "^1.2.6",
|
|
81
|
+
"@radix-ui/react-tooltip": "^1.2.8",
|
|
75
82
|
"@tailwindcss/vite": "^4.1.13",
|
|
83
|
+
"@tanstack/react-table": "^8.21.3",
|
|
76
84
|
"axios": "^1.12.2",
|
|
77
85
|
"class-variance-authority": "^0.7.1",
|
|
86
|
+
"cmdk": "^1.1.1",
|
|
87
|
+
"file-saver": "^2.0.5",
|
|
78
88
|
"jwt-decode": "^4.0.0",
|
|
79
89
|
"lucide-react": "^0.544.0",
|
|
80
90
|
"next-themes": "^0.4.6",
|
|
91
|
+
"radix-ui": "^1.4.3",
|
|
92
|
+
"react-day-picker": "^9.13.2",
|
|
93
|
+
"react-icons": "^5.5.0",
|
|
81
94
|
"sonner": "^2.0.7",
|
|
82
95
|
"tailwind-merge": "^3.3.1",
|
|
83
96
|
"tailwindcss-animate": "^1.0.7",
|
|
97
|
+
"xlsx-js-style": "^1.2.0",
|
|
84
98
|
"zustand": "^5.0.8"
|
|
85
99
|
}
|
|
86
100
|
}
|