@syuttechnologies/layout 1.0.2 → 1.0.21

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 (53) hide show
  1. package/README.md +536 -0
  2. package/dist/components/ChangePasswordModal.d.ts.map +1 -1
  3. package/dist/components/ChangePasswordModal.js +22 -11
  4. package/dist/components/EnterpriseLayout.d.ts.map +1 -1
  5. package/dist/components/EnterpriseLayout.js +21 -6
  6. package/dist/components/ui/ActionMenu/ActionMenu.d.ts +52 -0
  7. package/dist/components/ui/ActionMenu/ActionMenu.d.ts.map +1 -0
  8. package/dist/components/ui/ActionMenu/ActionMenu.js +116 -0
  9. package/dist/components/ui/ActionMenu/index.d.ts +3 -0
  10. package/dist/components/ui/ActionMenu/index.d.ts.map +1 -0
  11. package/dist/components/ui/ActionMenu/index.js +2 -0
  12. package/dist/components/ui/ModuleHeader/ModuleHeader.d.ts +90 -0
  13. package/dist/components/ui/ModuleHeader/ModuleHeader.d.ts.map +1 -0
  14. package/dist/components/ui/ModuleHeader/ModuleHeader.js +433 -0
  15. package/dist/components/ui/ModuleHeader/index.d.ts +3 -0
  16. package/dist/components/ui/ModuleHeader/index.d.ts.map +1 -0
  17. package/dist/components/ui/ModuleHeader/index.js +1 -0
  18. package/dist/components/ui/SyutGrid/SyutGrid.d.ts +74 -0
  19. package/dist/components/ui/SyutGrid/SyutGrid.d.ts.map +1 -0
  20. package/dist/components/ui/SyutGrid/SyutGrid.js +306 -0
  21. package/dist/components/ui/SyutGrid/index.d.ts +3 -0
  22. package/dist/components/ui/SyutGrid/index.d.ts.map +1 -0
  23. package/dist/components/ui/SyutGrid/index.js +2 -0
  24. package/dist/components/ui/SyutSelect/SyutSelectUnified.d.ts +128 -0
  25. package/dist/components/ui/SyutSelect/SyutSelectUnified.d.ts.map +1 -0
  26. package/dist/components/ui/SyutSelect/SyutSelectUnified.js +679 -0
  27. package/dist/components/ui/SyutSelect/index.d.ts +3 -0
  28. package/dist/components/ui/SyutSelect/index.d.ts.map +1 -0
  29. package/dist/components/ui/SyutSelect/index.js +2 -0
  30. package/dist/icon-collection/icon-systems.d.ts +89 -0
  31. package/dist/icon-collection/icon-systems.d.ts.map +1 -0
  32. package/dist/icon-collection/icon-systems.js +70 -0
  33. package/dist/icon-collection/index.d.ts +4 -0
  34. package/dist/icon-collection/index.d.ts.map +1 -0
  35. package/dist/icon-collection/index.js +8 -0
  36. package/dist/index.d.ts +12 -1
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +19 -1
  39. package/package.json +9 -4
  40. package/src/components/ChangePasswordModal.tsx +26 -14
  41. package/src/components/EnterpriseLayout.tsx +23 -8
  42. package/src/components/ui/ActionMenu/ActionMenu.tsx +222 -0
  43. package/src/components/ui/ActionMenu/index.ts +2 -0
  44. package/src/components/ui/ModuleHeader/ModuleHeader.tsx +722 -0
  45. package/src/components/ui/ModuleHeader/index.ts +9 -0
  46. package/src/components/ui/SyutGrid/SyutGrid.tsx +483 -0
  47. package/src/components/ui/SyutGrid/index.ts +2 -0
  48. package/src/components/ui/SyutSelect/SyutSelectUnified.tsx +1115 -0
  49. package/src/components/ui/SyutSelect/index.ts +3 -0
  50. package/src/icon-collection/icon-systems.tsx +464 -0
  51. package/src/icon-collection/index.ts +13 -0
  52. package/src/index.ts +47 -1
  53. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,433 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useState, useRef, useEffect } from 'react';
3
+ import ReactDOM from 'react-dom';
4
+ import IconSystem from '../../../icon-collection/icon-systems';
5
+ // Inject styles
6
+ if (typeof document !== 'undefined') {
7
+ const styleId = 'module-header-styles';
8
+ if (!document.getElementById(styleId)) {
9
+ const style = document.createElement('style');
10
+ style.id = styleId;
11
+ style.textContent = `
12
+ .module-header {
13
+ position: sticky;
14
+ top: 0;
15
+ display: flex;
16
+ align-items: center;
17
+ justify-content: space-between;
18
+ padding: 0.875rem 1.5rem;
19
+ min-height: 2.75rem;
20
+ background: rgba(255, 255, 255, 0.95);
21
+ backdrop-filter: blur(12px);
22
+ border-radius: 0.75rem;
23
+ margin: 0.625rem 1.25rem;
24
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
25
+ border: 1px solid rgba(226, 232, 240, 0.5);
26
+ gap: 0.875rem;
27
+ flex-wrap: wrap;
28
+ flex-shrink: 0;
29
+ }
30
+
31
+ .module-header-content {
32
+ display: flex;
33
+ flex-direction: column;
34
+ gap: 0.125rem;
35
+ }
36
+
37
+ .module-title {
38
+ font-size: 1.1rem;
39
+ font-weight: 700;
40
+ background: linear-gradient(135deg, #2563eb, #0ea5e9);
41
+ -webkit-background-clip: text;
42
+ -webkit-text-fill-color: transparent;
43
+ background-clip: text;
44
+ margin: 0;
45
+ line-height: 1.2;
46
+ }
47
+
48
+ .module-description {
49
+ font-size: 0.75rem;
50
+ color: #64748b;
51
+ margin: 0;
52
+ }
53
+
54
+ .module-toolbar {
55
+ display: flex;
56
+ align-items: center;
57
+ gap: 0.5rem;
58
+ flex-wrap: wrap;
59
+ }
60
+
61
+ .toolbar-separator {
62
+ width: 1px;
63
+ height: 1.5rem;
64
+ background: rgba(226, 232, 240, 0.8);
65
+ margin: 0 0.25rem;
66
+ }
67
+
68
+ /* Desktop toolbar items - visible on larger screens */
69
+ .toolbar-desktop-items {
70
+ display: flex;
71
+ align-items: center;
72
+ gap: 0.5rem;
73
+ flex-wrap: wrap;
74
+ }
75
+
76
+ /* Mobile overflow menu - hidden on larger screens */
77
+ .toolbar-overflow-menu {
78
+ display: none;
79
+ position: relative;
80
+ }
81
+
82
+ /* Responsive: Show overflow menu on mobile, hide desktop items */
83
+ @media (max-width: 768px) {
84
+ .module-header {
85
+ padding: 0.75rem 1rem;
86
+ margin: 0.5rem 0.75rem;
87
+ gap: 0.5rem;
88
+ }
89
+
90
+ .module-title {
91
+ font-size: 1rem;
92
+ }
93
+
94
+ .module-description {
95
+ font-size: 0.7rem;
96
+ }
97
+
98
+ .search-input-wrapper {
99
+ min-width: 150px;
100
+ flex: 1;
101
+ }
102
+
103
+ .toolbar-desktop-items {
104
+ display: none !important;
105
+ }
106
+
107
+ .toolbar-overflow-menu {
108
+ display: block !important;
109
+ }
110
+ }
111
+
112
+ .search-input-wrapper {
113
+ display: flex;
114
+ align-items: center;
115
+ gap: 0.5rem;
116
+ padding: 0.5rem 0.75rem;
117
+ background: #f8fafc;
118
+ border: 1px solid rgba(226, 232, 240, 0.8);
119
+ border-radius: 0.5rem;
120
+ min-width: 200px;
121
+ transition: all 0.2s ease;
122
+ }
123
+
124
+ .search-input-wrapper:focus-within {
125
+ border-color: #2563eb;
126
+ box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);
127
+ }
128
+
129
+ .search-input-wrapper svg {
130
+ color: #64748b;
131
+ flex-shrink: 0;
132
+ }
133
+
134
+ .search-input {
135
+ flex: 1;
136
+ border: none;
137
+ background: transparent;
138
+ font-size: 0.85rem;
139
+ color: #1e293b;
140
+ outline: none;
141
+ }
142
+
143
+ .search-input::placeholder {
144
+ color: #94a3b8;
145
+ }
146
+
147
+ .view-mode-group {
148
+ display: inline-flex;
149
+ align-items: center;
150
+ background: #ffffff;
151
+ border: 1px solid rgba(226, 232, 240, 0.8);
152
+ border-radius: 0.375rem;
153
+ padding: 0.125rem;
154
+ gap: 0.125rem;
155
+ }
156
+
157
+ .view-mode-btn {
158
+ display: inline-flex;
159
+ align-items: center;
160
+ justify-content: center;
161
+ width: 2rem;
162
+ height: 2rem;
163
+ padding: 0;
164
+ border: none;
165
+ background: transparent;
166
+ border-radius: 0.375rem;
167
+ cursor: pointer;
168
+ transition: all 0.2s ease;
169
+ color: #64748b;
170
+ }
171
+
172
+ .view-mode-btn:hover {
173
+ background: #f8fafc;
174
+ color: #1e293b;
175
+ }
176
+
177
+ .view-mode-btn.active {
178
+ background: #2563eb;
179
+ color: white;
180
+ box-shadow: 0 1px 3px rgba(37, 99, 235, 0.3);
181
+ }
182
+
183
+ .view-mode-btn svg {
184
+ width: 16px;
185
+ height: 16px;
186
+ }
187
+
188
+ .btn-icon {
189
+ display: inline-flex;
190
+ align-items: center;
191
+ justify-content: center;
192
+ width: 2.25rem;
193
+ height: 2.25rem;
194
+ padding: 0;
195
+ border: 1px solid rgba(226, 232, 240, 0.8);
196
+ background: #ffffff;
197
+ border-radius: 0.5rem;
198
+ cursor: pointer;
199
+ transition: all 0.2s ease;
200
+ color: #64748b;
201
+ position: relative;
202
+ }
203
+
204
+ .btn-icon:hover {
205
+ background: #f8fafc;
206
+ border-color: #2563eb;
207
+ color: #2563eb;
208
+ }
209
+
210
+ .btn-icon.active {
211
+ background: linear-gradient(135deg, #2563eb, #0ea5e9);
212
+ color: white;
213
+ border-color: #2563eb;
214
+ }
215
+
216
+ .btn-icon svg {
217
+ width: 18px;
218
+ height: 18px;
219
+ }
220
+
221
+ .btn {
222
+ display: inline-flex;
223
+ align-items: center;
224
+ justify-content: center;
225
+ padding: 0.5rem 1rem;
226
+ border-radius: 0.5rem;
227
+ font-size: 0.85rem;
228
+ font-weight: 600;
229
+ cursor: pointer;
230
+ transition: all 0.2s ease;
231
+ border: none;
232
+ gap: 0.25rem;
233
+ }
234
+
235
+ .btn-primary {
236
+ background: linear-gradient(135deg, #2563eb, #0ea5e9);
237
+ color: white;
238
+ box-shadow: 0 2px 4px rgba(37, 99, 235, 0.3);
239
+ }
240
+
241
+ .btn-primary:hover {
242
+ background: linear-gradient(135deg, #1d4ed8, #0284c7);
243
+ transform: translateY(-1px);
244
+ box-shadow: 0 4px 8px rgba(37, 99, 235, 0.4);
245
+ }
246
+
247
+ .btn-secondary {
248
+ background: #ffffff;
249
+ color: #1e293b;
250
+ border: 1px solid rgba(226, 232, 240, 0.8);
251
+ }
252
+
253
+ .btn-secondary:hover {
254
+ background: #f8fafc;
255
+ border-color: #2563eb;
256
+ color: #2563eb;
257
+ }
258
+
259
+ .btn-danger {
260
+ background: linear-gradient(135deg, #dc2626, #ef4444);
261
+ color: white;
262
+ }
263
+
264
+ .btn-danger:hover {
265
+ background: linear-gradient(135deg, #b91c1c, #dc2626);
266
+ }
267
+
268
+ .filter-badge {
269
+ position: absolute;
270
+ top: -4px;
271
+ right: -4px;
272
+ background: #3B82F6;
273
+ color: white;
274
+ border-radius: 50%;
275
+ width: 16px;
276
+ height: 16px;
277
+ font-size: 10px;
278
+ display: flex;
279
+ align-items: center;
280
+ justify-content: center;
281
+ font-weight: 600;
282
+ }
283
+
284
+ /* Overflow menu trigger */
285
+ .action-menu-trigger {
286
+ display: inline-flex;
287
+ align-items: center;
288
+ justify-content: center;
289
+ width: 2.25rem;
290
+ height: 2.25rem;
291
+ padding: 0;
292
+ border: 1px solid rgba(226, 232, 240, 0.8);
293
+ background: #ffffff;
294
+ border-radius: 0.5rem;
295
+ cursor: pointer;
296
+ transition: all 0.2s ease;
297
+ color: #64748b;
298
+ }
299
+
300
+ .action-menu-trigger:hover,
301
+ .action-menu-trigger.active {
302
+ background: #f8fafc;
303
+ border-color: #2563eb;
304
+ color: #2563eb;
305
+ }
306
+
307
+ /* Overflow dropdown styles */
308
+ .overflow-menu-section-label {
309
+ padding: 0.5rem 0.875rem 0.25rem;
310
+ font-size: 0.7rem;
311
+ font-weight: 600;
312
+ color: #94a3b8;
313
+ text-transform: uppercase;
314
+ letter-spacing: 0.5px;
315
+ }
316
+
317
+ .overflow-menu-item {
318
+ display: flex;
319
+ align-items: center;
320
+ gap: 0.75rem;
321
+ width: 100%;
322
+ padding: 0.625rem 1rem;
323
+ border: none;
324
+ background: transparent;
325
+ color: #334155;
326
+ font-size: 0.875rem;
327
+ cursor: pointer;
328
+ text-align: left;
329
+ transition: background 0.15s ease;
330
+ }
331
+
332
+ .overflow-menu-item:hover {
333
+ background: #f1f5f9;
334
+ }
335
+
336
+ .overflow-menu-item.active {
337
+ background: #f1f5f9;
338
+ color: #3b82f6;
339
+ }
340
+
341
+ .overflow-menu-item.danger {
342
+ color: #ef4444;
343
+ }
344
+
345
+ .overflow-menu-item.danger:hover {
346
+ background: rgba(239, 68, 68, 0.1);
347
+ }
348
+
349
+ .overflow-menu-item:disabled {
350
+ opacity: 0.5;
351
+ cursor: not-allowed;
352
+ }
353
+ `;
354
+ document.head.appendChild(style);
355
+ }
356
+ }
357
+ // ============================================================================
358
+ // MODULE HEADER COMPONENT
359
+ // ============================================================================
360
+ const ModuleHeader = ({ title, description, searchConfig, viewModeConfig, filterConfig, customToolbarItems, actions = [], showActionSeparator = true, visible = true, className = '' }) => {
361
+ const [overflowMenuOpen, setOverflowMenuOpen] = useState(false);
362
+ const overflowMenuRef = useRef(null);
363
+ // Close overflow menu when clicking outside
364
+ useEffect(() => {
365
+ const handleClickOutside = (event) => {
366
+ const target = event.target;
367
+ const dropdownEl = document.querySelector('.module-header-overflow-dropdown');
368
+ if (overflowMenuRef.current &&
369
+ !overflowMenuRef.current.contains(target) &&
370
+ (!dropdownEl || !dropdownEl.contains(target))) {
371
+ setOverflowMenuOpen(false);
372
+ }
373
+ };
374
+ if (overflowMenuOpen) {
375
+ document.addEventListener('mousedown', handleClickOutside);
376
+ }
377
+ return () => {
378
+ document.removeEventListener('mousedown', handleClickOutside);
379
+ };
380
+ }, [overflowMenuOpen]);
381
+ if (!visible) {
382
+ return null;
383
+ }
384
+ const visibleActions = actions.filter(action => action.visible !== false);
385
+ // Get badge count from either activeCount or badgeCount
386
+ const filterBadgeCount = filterConfig?.activeCount || filterConfig?.badgeCount || 0;
387
+ return (_jsxs("div", { className: `module-header ${className}`, children: [_jsxs("div", { className: "module-header-content", children: [_jsx("h1", { className: "module-title", children: title }), description && _jsx("p", { className: "module-description", children: description })] }), _jsxs("div", { className: "module-toolbar", children: [searchConfig && (_jsxs("div", { className: "search-input-wrapper", children: [_jsx(IconSystem.search, { size: 16 }), _jsx("input", { type: "text", className: "search-input", placeholder: searchConfig.placeholder || 'Search...', value: searchConfig.value, onChange: (e) => searchConfig.onChange(e.target.value), disabled: searchConfig.disabled })] })), _jsxs("div", { className: "toolbar-desktop-items", children: [viewModeConfig && (_jsx("div", { className: "view-mode-group", children: viewModeConfig.modes.map((mode) => (_jsx("button", { className: `view-mode-btn ${viewModeConfig.currentMode === mode.id ? 'active' : ''}`, onClick: () => viewModeConfig.onChange(mode.id), disabled: mode.disabled, title: mode.tooltip || mode.label, style: mode.disabled ? { opacity: 0.3, cursor: 'not-allowed' } : {}, children: mode.icon }, mode.id))) })), filterConfig && (_jsxs("button", { className: `btn-icon ${filterConfig.isActive ? 'active' : ''}`, onClick: filterConfig.onClick, disabled: filterConfig.disabled, title: filterConfig.tooltip || 'Filters', style: { position: 'relative' }, children: [_jsx(IconSystem.filter, { size: 18 }), filterBadgeCount > 0 && (_jsx("span", { className: "filter-badge", children: filterBadgeCount }))] })), customToolbarItems, showActionSeparator && visibleActions.length > 0 && (_jsx("div", { className: "toolbar-separator" })), visibleActions.map((action) => {
388
+ const buttonClass = action.variant === 'primary'
389
+ ? 'btn btn-primary'
390
+ : action.variant === 'secondary'
391
+ ? 'btn btn-secondary'
392
+ : action.variant === 'danger'
393
+ ? 'btn btn-danger'
394
+ : 'btn-icon';
395
+ return (_jsxs("button", { className: buttonClass, onClick: action.onClick, disabled: action.disabled, title: action.tooltip || action.label, children: [action.icon, action.variant !== 'icon' && (_jsx("span", { style: { marginLeft: '0.5rem' }, children: action.label }))] }, action.id));
396
+ })] }), _jsxs("div", { ref: overflowMenuRef, className: "toolbar-overflow-menu", children: [_jsx("button", { onClick: () => setOverflowMenuOpen(!overflowMenuOpen), className: `action-menu-trigger ${overflowMenuOpen ? 'active' : ''}`, title: "More options", children: _jsx(IconSystem.moreVertical, { size: 18 }) }), overflowMenuOpen && ReactDOM.createPortal(_jsxs("div", { className: "module-header-overflow-dropdown", style: {
397
+ position: 'fixed',
398
+ top: overflowMenuRef.current ? overflowMenuRef.current.getBoundingClientRect().bottom + 4 : 0,
399
+ right: overflowMenuRef.current ? window.innerWidth - overflowMenuRef.current.getBoundingClientRect().right : 0,
400
+ minWidth: '200px',
401
+ maxHeight: overflowMenuRef.current ? `calc(100vh - ${overflowMenuRef.current.getBoundingClientRect().bottom + 20}px)` : '70vh',
402
+ overflowY: 'auto',
403
+ padding: '0.5rem 0',
404
+ zIndex: 999999,
405
+ background: 'white',
406
+ borderRadius: '0.5rem',
407
+ boxShadow: '0 10px 40px rgba(0, 0, 0, 0.2)',
408
+ border: '1px solid #e2e8f0',
409
+ }, children: [viewModeConfig && (_jsxs(_Fragment, { children: [_jsx("div", { className: "overflow-menu-section-label", children: "View" }), viewModeConfig.modes.map((mode) => (_jsxs("button", { className: `overflow-menu-item ${viewModeConfig.currentMode === mode.id ? 'active' : ''}`, onClick: () => {
410
+ viewModeConfig.onChange(mode.id);
411
+ setOverflowMenuOpen(false);
412
+ }, disabled: mode.disabled, children: [mode.icon, _jsx("span", { children: mode.label })] }, mode.id)))] })), filterConfig && (_jsxs("button", { className: `overflow-menu-item ${filterConfig.isActive ? 'active' : ''}`, onClick: () => {
413
+ filterConfig.onClick();
414
+ setOverflowMenuOpen(false);
415
+ }, disabled: filterConfig.disabled, children: [_jsx(IconSystem.filter, { size: 18 }), _jsx("span", { children: "Filters" }), filterBadgeCount > 0 && (_jsx("span", { style: {
416
+ marginLeft: 'auto',
417
+ backgroundColor: '#3B82F6',
418
+ color: 'white',
419
+ fontSize: '10px',
420
+ fontWeight: 600,
421
+ minWidth: '16px',
422
+ height: '16px',
423
+ borderRadius: '8px',
424
+ display: 'flex',
425
+ alignItems: 'center',
426
+ justifyContent: 'center',
427
+ padding: '0 4px',
428
+ }, children: filterBadgeCount }))] })), visibleActions.length > 0 && (viewModeConfig || filterConfig) && (_jsx("div", { style: { height: '1px', background: '#e2e8f0', margin: '0.5rem 0' } })), visibleActions.length > 0 && (_jsxs(_Fragment, { children: [_jsx("div", { className: "overflow-menu-section-label", children: "Actions" }), visibleActions.map((action) => (_jsxs("button", { className: `overflow-menu-item ${action.variant === 'danger' ? 'danger' : ''}`, onClick: () => {
429
+ action.onClick();
430
+ setOverflowMenuOpen(false);
431
+ }, disabled: action.disabled, children: [action.icon, _jsx("span", { children: action.label })] }, action.id)))] }))] }), document.body)] })] })] }));
432
+ };
433
+ export default ModuleHeader;
@@ -0,0 +1,3 @@
1
+ export { default as ModuleHeader } from './ModuleHeader';
2
+ export type { ModuleHeaderProps, ActionButton, ViewModeOption, SearchConfig, ViewModeConfig, FilterConfig } from './ModuleHeader';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/ModuleHeader/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,YAAY,EACV,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,cAAc,EACd,YAAY,EACb,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1 @@
1
+ export { default as ModuleHeader } from './ModuleHeader';
@@ -0,0 +1,74 @@
1
+ import { ReactNode } from 'react';
2
+ import { Row } from '@tanstack/react-table';
3
+ import { ActionMenuItem } from '../ActionMenu';
4
+ export interface SyutGridColumn<T> {
5
+ id?: string;
6
+ header?: string | ((column: any) => ReactNode);
7
+ accessorKey?: keyof T;
8
+ cell?: (info: {
9
+ row: Row<T>;
10
+ getValue: () => any;
11
+ }) => ReactNode;
12
+ size?: number;
13
+ enableSorting?: boolean;
14
+ enableFiltering?: boolean;
15
+ frozen?: 'left' | 'right';
16
+ key?: string;
17
+ width?: number;
18
+ sortable?: boolean;
19
+ visible?: boolean;
20
+ render?: (value: any, row: T) => ReactNode;
21
+ title?: string;
22
+ dataIndex?: string;
23
+ }
24
+ interface PaginationConfig {
25
+ enabled?: boolean;
26
+ pageSize?: number;
27
+ showPageSizeOptions?: boolean;
28
+ pageSizeOptions?: number[];
29
+ current?: number;
30
+ total?: number;
31
+ onChange?: (page: number, size: number) => void;
32
+ showSizeChanger?: boolean;
33
+ currentPage?: number;
34
+ totalPages?: number;
35
+ totalItems?: number;
36
+ onPageChange?: () => void;
37
+ }
38
+ export interface SyutGridProps<T extends {
39
+ id: string;
40
+ }> {
41
+ data?: T[];
42
+ columns: SyutGridColumn<T>[];
43
+ enableRowSelection?: boolean;
44
+ enablePagination?: boolean;
45
+ pageSizeOptions?: number[];
46
+ defaultPageSize?: number;
47
+ enableSorting?: boolean;
48
+ enableColumnFilters?: boolean;
49
+ rowActions?: ((row: T) => ActionMenuItem<T>[]) | ActionMenuItem<T>[];
50
+ emptyMessage?: string;
51
+ /** Callback when row selection changes. When using legacy selectedRows prop, receives string[]. Otherwise receives T[]. */
52
+ onSelectionChange?: (selectedRows: string[]) => void;
53
+ isLoading?: boolean;
54
+ className?: string;
55
+ frozenLeftColumns?: string[];
56
+ frozenRightColumns?: string[];
57
+ visibleColumns?: string[];
58
+ rowKey?: string;
59
+ selectable?: boolean;
60
+ selectedRows?: string[];
61
+ pagination?: PaginationConfig;
62
+ dataSource?: T[];
63
+ rowSelection?: {
64
+ selectedRowKeys?: string[];
65
+ onChange?: (selectedRowKeys: string[]) => void;
66
+ };
67
+ loading?: boolean;
68
+ emptyText?: string;
69
+ }
70
+ export declare function SyutGrid<T extends {
71
+ id: string;
72
+ }>({ data: dataProp, columns, enableRowSelection: enableRowSelectionProp, enablePagination: enablePaginationProp, pageSizeOptions: pageSizeOptionsProp, defaultPageSize: defaultPageSizeProp, enableSorting, enableColumnFilters, rowActions, emptyMessage: emptyMessageProp, onSelectionChange, isLoading: isLoadingProp, className, frozenLeftColumns, frozenRightColumns, visibleColumns, selectable, selectedRows: selectedRowsProp, pagination: paginationConfig, dataSource, rowSelection: rowSelectionConfig, loading, emptyText, }: SyutGridProps<T>): import("react/jsx-runtime").JSX.Element;
73
+ export default SyutGrid;
74
+ //# sourceMappingURL=SyutGrid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SyutGrid.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/SyutGrid/SyutGrid.tsx"],"names":[],"mappings":"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"}