@lgsm/modules 1.6.20-beta.3 → 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.
Files changed (98) hide show
  1. package/README.md +61 -1
  2. package/dist/assets/main.css +1 -1
  3. package/dist/components/ui/alert-dialog.d.ts +14 -0
  4. package/dist/components/ui/badge.d.ts +9 -0
  5. package/dist/components/ui/button.d.ts +10 -0
  6. package/dist/components/ui/calendar.d.ts +8 -0
  7. package/dist/components/ui/card.d.ts +11 -0
  8. package/dist/components/ui/checkbox.d.ts +4 -0
  9. package/dist/components/ui/command.d.ts +18 -0
  10. package/dist/components/ui/dialog.d.ts +21 -0
  11. package/dist/components/ui/dropdown-menu.d.ts +27 -0
  12. package/dist/components/ui/input.d.ts +3 -0
  13. package/dist/components/ui/label.d.ts +4 -0
  14. package/dist/components/ui/popover.d.ts +7 -0
  15. package/dist/components/ui/select.d.ts +13 -0
  16. package/dist/components/ui/separator.d.ts +4 -0
  17. package/dist/components/ui/skeleton.d.ts +2 -0
  18. package/dist/components/ui/sonner.d.ts +4 -0
  19. package/dist/components/ui/switch.d.ts +4 -0
  20. package/dist/components/ui/table.d.ts +10 -0
  21. package/dist/components/ui/textarea.d.ts +3 -0
  22. package/dist/components/ui/tooltip.d.ts +7 -0
  23. package/dist/lib/utils.d.ts +2 -0
  24. package/dist/main.d.ts +7 -0
  25. package/dist/main.js +28841 -3858
  26. package/dist/shared-ui/DataTable/components/customFilterControl.d.ts +8 -0
  27. package/dist/shared-ui/DataTable/components/dataTable.d.ts +3 -0
  28. package/dist/shared-ui/DataTable/components/dataTableBody.d.ts +7 -0
  29. package/dist/shared-ui/DataTable/components/dataTablePagination.d.ts +2 -0
  30. package/dist/shared-ui/DataTable/components/dataTableToolbar.d.ts +2 -0
  31. package/dist/shared-ui/DataTable/components/detailTableCard.d.ts +2 -0
  32. package/dist/shared-ui/DataTable/components/dropdownCell.d.ts +13 -0
  33. package/dist/shared-ui/DataTable/components/editableCell.d.ts +2 -0
  34. package/dist/shared-ui/DataTable/components/errorWrapper.d.ts +2 -0
  35. package/dist/shared-ui/DataTable/components/filterPanel.d.ts +2 -0
  36. package/dist/shared-ui/DataTable/components/memoRow.d.ts +16 -0
  37. package/dist/shared-ui/DataTable/components/multiSelectCell.d.ts +11 -0
  38. package/dist/shared-ui/DataTable/components/pageInput.d.ts +2 -0
  39. package/dist/shared-ui/DataTable/components/saveConfirmDialog.d.ts +2 -0
  40. package/dist/shared-ui/DataTable/components/serverTable.d.ts +34 -0
  41. package/dist/shared-ui/DataTable/components/sortableHeader.d.ts +7 -0
  42. package/dist/shared-ui/DataTable/components/uploadAssetImage.d.ts +2 -0
  43. package/dist/shared-ui/DataTable/hooks/hooks.d.ts +79 -0
  44. package/dist/shared-ui/DataTable/hooks/useColumnDefinitions.d.ts +6 -0
  45. package/dist/shared-ui/DataTable/hooks/useEditing.d.ts +21 -0
  46. package/dist/shared-ui/DataTable/hooks/useFilterPanel.d.ts +13 -0
  47. package/dist/shared-ui/DataTable/hooks/usePageInput.d.ts +6 -0
  48. package/dist/shared-ui/DataTable/hooks/useRowIdentity.d.ts +5 -0
  49. package/dist/shared-ui/DataTable/hooks/useSelection.d.ts +6 -0
  50. package/dist/shared-ui/DataTable/hooks/useTableData.d.ts +9 -0
  51. package/dist/shared-ui/DataTable/hooks/useTableStatus.d.ts +17 -0
  52. package/dist/shared-ui/DataTable/index.d.ts +25 -0
  53. package/dist/shared-ui/DataTable/types/button.d.ts +12 -0
  54. package/dist/shared-ui/DataTable/types/column/actionColumn.d.ts +4 -0
  55. package/dist/shared-ui/DataTable/types/column/baseColumn.d.ts +7 -0
  56. package/dist/shared-ui/DataTable/types/column/columnConfig.d.ts +13 -0
  57. package/dist/shared-ui/DataTable/types/column/columnDefinitions.d.ts +35 -0
  58. package/dist/shared-ui/DataTable/types/column/columnLayout.d.ts +5 -0
  59. package/dist/shared-ui/DataTable/types/column/columnType.d.ts +1 -0
  60. package/dist/shared-ui/DataTable/types/column/editableCell.d.ts +4 -0
  61. package/dist/shared-ui/DataTable/types/column/editableColumn.d.ts +5 -0
  62. package/dist/shared-ui/DataTable/types/column/optionColumn.d.ts +9 -0
  63. package/dist/shared-ui/DataTable/types/column/renderColumn.d.ts +6 -0
  64. package/dist/shared-ui/DataTable/types/column/treeColumn.d.ts +3 -0
  65. package/dist/shared-ui/DataTable/types/column/validateColumn.d.ts +4 -0
  66. package/dist/shared-ui/DataTable/types/column/visibilityColumn.d.ts +6 -0
  67. package/dist/shared-ui/DataTable/types/filtering.d.ts +43 -0
  68. package/dist/shared-ui/DataTable/types/hooks/useEditingProps.d.ts +8 -0
  69. package/dist/shared-ui/DataTable/types/hooks/useFilterPanel.d.ts +7 -0
  70. package/dist/shared-ui/DataTable/types/pagination.d.ts +5 -0
  71. package/dist/shared-ui/DataTable/types/sorting.d.ts +5 -0
  72. package/dist/shared-ui/DataTable/types/table/baseDataTable.d.ts +5 -0
  73. package/dist/shared-ui/DataTable/types/table/crudOptions.d.ts +12 -0
  74. package/dist/shared-ui/DataTable/types/table/dataTable.d.ts +46 -0
  75. package/dist/shared-ui/DataTable/types/table/dataTableBodyProps.d.ts +23 -0
  76. package/dist/shared-ui/DataTable/types/table/dataTablePaginationProps.d.ts +13 -0
  77. package/dist/shared-ui/DataTable/types/table/dataTableToolbarProps.d.ts +46 -0
  78. package/dist/shared-ui/DataTable/types/table/errorWrapper.d.ts +4 -0
  79. package/dist/shared-ui/DataTable/types/table/importExportOptions.d.ts +12 -0
  80. package/dist/shared-ui/DataTable/types/table/saveConfirmDialog.d.ts +11 -0
  81. package/dist/shared-ui/DataTable/types/table/serverSideConfig.d.ts +38 -0
  82. package/dist/shared-ui/DataTable/types/table/statusConfig.d.ts +15 -0
  83. package/dist/shared-ui/DataTable/types/table/tableMeta.d.ts +3 -0
  84. package/dist/shared-ui/DataTable/types/table/tablePermissions.d.ts +6 -0
  85. package/dist/shared-ui/DataTable/types/table/treeOptions.d.ts +7 -0
  86. package/dist/shared-ui/DataTable/types/table-panel/detailTableCard.d.ts +12 -0
  87. package/dist/shared-ui/DataTable/utils/column.d.ts +11 -0
  88. package/dist/shared-ui/DataTable/utils/compare.d.ts +2 -0
  89. package/dist/shared-ui/DataTable/utils/filter.d.ts +2 -0
  90. package/dist/shared-ui/DataTable/utils/image.d.ts +4 -0
  91. package/dist/shared-ui/DataTable/utils/index.d.ts +6 -0
  92. package/dist/shared-ui/DataTable/utils/row.d.ts +2 -0
  93. package/dist/shared-ui/DataTable/utils/search.d.ts +4 -0
  94. package/dist/shared-ui/DataTable/utils/status.d.ts +18 -0
  95. package/dist/shared-ui/DataTable/utils/tree.d.ts +3 -0
  96. package/dist/utils/date.d.ts +1 -0
  97. package/dist/utils/excel.d.ts +1 -0
  98. 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,4 @@
1
+ export interface ErrorWrapperProps {
2
+ error: string | null;
3
+ children: React.ReactNode;
4
+ }
@@ -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,3 @@
1
+ export type TableMeta = {
2
+ updateData: (rowId: string, columnId: string, value: any) => void;
3
+ };
@@ -0,0 +1,6 @@
1
+ export interface TablePermissions {
2
+ canCreate: boolean;
3
+ canModify: boolean;
4
+ canDelete: boolean;
5
+ }
6
+ export declare const READ_ONLY_TABLE_PERMISSIONS: TablePermissions;
@@ -0,0 +1,7 @@
1
+ import { ExpandedState } from '@tanstack/react-table';
2
+ export interface TreeOptions {
3
+ enableExpand?: boolean;
4
+ subRowsKey?: string;
5
+ onExpandedChange?: (expanded: ExpandedState) => void;
6
+ defaultExpanded?: ExpandedState;
7
+ }
@@ -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,2 @@
1
+ export declare const META_KEYS: Set<string>;
2
+ export declare function CompareChanges(valueA: any, valueB: any): boolean;
@@ -0,0 +1,2 @@
1
+ import { FilterRowsByStatusOptions } from '../types/filtering';
2
+ export declare function filterRowsByStatus(rows: any[], options: FilterRowsByStatusOptions): any[];
@@ -0,0 +1,4 @@
1
+ export interface UploadImageProps {
2
+ value?: string;
3
+ onFileSelected: (file: File) => void;
4
+ }
@@ -0,0 +1,6 @@
1
+ export * from './compare';
2
+ export * from './tree';
3
+ export * from './row';
4
+ export * from './column';
5
+ export * from './filter';
6
+ export * from './status';
@@ -0,0 +1,2 @@
1
+ export declare const ensureRowKey: (row: any) => string;
2
+ export declare function normalizeTableData(rows: any[], statusKey: string, subRowsKey: string): any[];
@@ -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,3 @@
1
+ import { Row } from '@tanstack/react-table';
2
+ export declare function getRowDescendants(row: Row<any>): string[];
3
+ export declare function flattenTree(data: any[], subRowsKey: string): any[];
@@ -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",
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
  }