@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,3 @@
1
+ // Unified Select Component (combines single/multi select with variants)
2
+ export { SyutSelectUnified, default } from './SyutSelectUnified';
3
+ export type { SyutSelectUnifiedProps, SelectOption } from './SyutSelectUnified';
@@ -0,0 +1,464 @@
1
+ /**
2
+ * ============================================================================
3
+ * ENTERPRISE PROFESSIONAL ICON SYSTEM v3.1 (FIXED)
4
+ * ============================================================================
5
+ *
6
+ * Professional outline icons for enterprise applications
7
+ * Simple, clean, monochrome design similar to industry standards
8
+ *
9
+ * Features:
10
+ * - Outline style (no fills)
11
+ * - Consistent stroke width
12
+ * - Monochrome (inherits color)
13
+ * - Professional appearance
14
+ * - Optimized for 16-20px sizes
15
+ *
16
+ * Usage:
17
+ * import { IconSystem } from '@syuttechnologies/layout';
18
+ * <IconSystem.add size={18} />
19
+ * <IconSystem.edit size={16} color="var(--primary)" />
20
+ *
21
+ * ============================================================================
22
+ */
23
+
24
+ import React from 'react';
25
+
26
+ export interface IconProps {
27
+ size?: number;
28
+ color?: string;
29
+ strokeWidth?: number;
30
+ className?: string;
31
+ style?: React.CSSProperties;
32
+ onClick?: (event: React.MouseEvent<SVGSVGElement>) => void;
33
+ }
34
+
35
+ const IconSystem = {
36
+
37
+ // ========== NAVIGATION ICONS ==========
38
+
39
+ home: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
40
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
41
+ <path d="m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" />
42
+ <polyline points="9 22 9 12 15 12 15 22" />
43
+ </svg>
44
+ ),
45
+
46
+ menu: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
47
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
48
+ <line x1="3" y1="12" x2="21" y2="12" />
49
+ <line x1="3" y1="6" x2="21" y2="6" />
50
+ <line x1="3" y1="18" x2="21" y2="18" />
51
+ </svg>
52
+ ),
53
+
54
+ dashboard: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
55
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
56
+ <rect x="3" y="3" width="7" height="7" />
57
+ <rect x="14" y="3" width="7" height="7" />
58
+ <rect x="14" y="14" width="7" height="7" />
59
+ <rect x="3" y="14" width="7" height="7" />
60
+ </svg>
61
+ ),
62
+
63
+ list: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
64
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
65
+ <line x1="8" y1="6" x2="21" y2="6" />
66
+ <line x1="8" y1="12" x2="21" y2="12" />
67
+ <line x1="8" y1="18" x2="21" y2="18" />
68
+ <line x1="3" y1="6" x2="3.01" y2="6" />
69
+ <line x1="3" y1="12" x2="3.01" y2="12" />
70
+ <line x1="3" y1="18" x2="3.01" y2="18" />
71
+ </svg>
72
+ ),
73
+
74
+ grid: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
75
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
76
+ <rect x="3" y="3" width="7" height="7" />
77
+ <rect x="14" y="3" width="7" height="7" />
78
+ <rect x="14" y="14" width="7" height="7" />
79
+ <rect x="3" y="14" width="7" height="7" />
80
+ </svg>
81
+ ),
82
+
83
+ // ========== PRIMARY ACTIONS ==========
84
+
85
+ add: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
86
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
87
+ <line x1="12" y1="5" x2="12" y2="19" />
88
+ <line x1="5" y1="12" x2="19" y2="12" />
89
+ </svg>
90
+ ),
91
+
92
+ edit: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
93
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
94
+ <path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7" />
95
+ <path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z" />
96
+ </svg>
97
+ ),
98
+
99
+ trash: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
100
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
101
+ <polyline points="3 6 5 6 21 6" />
102
+ <path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" />
103
+ <line x1="10" y1="11" x2="10" y2="17" />
104
+ <line x1="14" y1="11" x2="14" y2="17" />
105
+ </svg>
106
+ ),
107
+
108
+ save: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
109
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
110
+ <path d="M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z" />
111
+ <polyline points="17 21 17 13 7 13 7 21" />
112
+ <polyline points="7 3 7 8 15 8" />
113
+ </svg>
114
+ ),
115
+
116
+ cancel: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
117
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
118
+ <circle cx="12" cy="12" r="10" />
119
+ <line x1="15" y1="9" x2="9" y2="15" />
120
+ <line x1="9" y1="9" x2="15" y2="15" />
121
+ </svg>
122
+ ),
123
+
124
+ x: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
125
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
126
+ <line x1="18" y1="6" x2="6" y2="18" />
127
+ <line x1="6" y1="6" x2="18" y2="18" />
128
+ </svg>
129
+ ),
130
+
131
+ // ========== SEARCH & FILTER ==========
132
+
133
+ search: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
134
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
135
+ <circle cx="11" cy="11" r="8" />
136
+ <path d="m21 21-4.35-4.35" />
137
+ </svg>
138
+ ),
139
+
140
+ filter: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
141
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
142
+ <polygon points="22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3" />
143
+ </svg>
144
+ ),
145
+
146
+ refresh: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
147
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
148
+ <polyline points="23 4 23 10 17 10" />
149
+ <polyline points="1 20 1 14 7 14" />
150
+ <path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15" />
151
+ </svg>
152
+ ),
153
+
154
+ // ========== DATA OPERATIONS ==========
155
+
156
+ exportIcon: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
157
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
158
+ <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" />
159
+ <polyline points="7 10 12 15 17 10" />
160
+ <line x1="12" y1="15" x2="12" y2="3" />
161
+ </svg>
162
+ ),
163
+
164
+ importIcon: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
165
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
166
+ <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" />
167
+ <polyline points="17 8 12 3 7 8" />
168
+ <line x1="12" y1="3" x2="12" y2="15" />
169
+ </svg>
170
+ ),
171
+
172
+ download: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
173
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
174
+ <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" />
175
+ <polyline points="7 10 12 15 17 10" />
176
+ <line x1="12" y1="15" x2="12" y2="3" />
177
+ </svg>
178
+ ),
179
+
180
+ upload: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
181
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
182
+ <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" />
183
+ <polyline points="17 8 12 3 7 8" />
184
+ <line x1="12" y1="3" x2="12" y2="15" />
185
+ </svg>
186
+ ),
187
+
188
+ print: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
189
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
190
+ <polyline points="6 9 6 2 18 2 18 9" />
191
+ <path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2" />
192
+ <rect x="6" y="14" width="12" height="8" />
193
+ </svg>
194
+ ),
195
+
196
+ // ========== FILE OPERATIONS ==========
197
+
198
+ file: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
199
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
200
+ <path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z" />
201
+ <polyline points="13 2 13 9 20 9" />
202
+ </svg>
203
+ ),
204
+
205
+ folder: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
206
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
207
+ <path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z" />
208
+ </svg>
209
+ ),
210
+
211
+ copy: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
212
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
213
+ <rect x="9" y="9" width="13" height="13" rx="2" ry="2" />
214
+ <path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" />
215
+ </svg>
216
+ ),
217
+
218
+ // ========== NAVIGATION ARROWS ==========
219
+
220
+ chevronLeft: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
221
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
222
+ <polyline points="15 18 9 12 15 6" />
223
+ </svg>
224
+ ),
225
+
226
+ chevronRight: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
227
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
228
+ <polyline points="9 18 15 12 9 6" />
229
+ </svg>
230
+ ),
231
+
232
+ chevronUp: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
233
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
234
+ <polyline points="18 15 12 9 6 15" />
235
+ </svg>
236
+ ),
237
+
238
+ chevronDown: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
239
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
240
+ <polyline points="6 9 12 15 18 9" />
241
+ </svg>
242
+ ),
243
+
244
+ arrowLeft: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
245
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
246
+ <line x1="19" y1="12" x2="5" y2="12" />
247
+ <polyline points="12 19 5 12 12 5" />
248
+ </svg>
249
+ ),
250
+
251
+ arrowRight: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
252
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
253
+ <line x1="5" y1="12" x2="19" y2="12" />
254
+ <polyline points="12 5 19 12 12 19" />
255
+ </svg>
256
+ ),
257
+
258
+ // ========== STATUS ICONS ==========
259
+
260
+ check: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
261
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
262
+ <polyline points="20 6 9 17 4 12" />
263
+ </svg>
264
+ ),
265
+
266
+ checkCircle: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
267
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
268
+ <path d="M22 11.08V12a10 10 0 1 1-5.93-9.14" />
269
+ <polyline points="22 4 12 14.01 9 11.01" />
270
+ </svg>
271
+ ),
272
+
273
+ xCircle: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
274
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
275
+ <circle cx="12" cy="12" r="10" />
276
+ <line x1="15" y1="9" x2="9" y2="15" />
277
+ <line x1="9" y1="9" x2="15" y2="15" />
278
+ </svg>
279
+ ),
280
+
281
+ alert: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
282
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
283
+ <path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z" />
284
+ <line x1="12" y1="9" x2="12" y2="13" />
285
+ <line x1="12" y1="17" x2="12.01" y2="17" />
286
+ </svg>
287
+ ),
288
+
289
+ warning: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
290
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
291
+ <path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z" />
292
+ <line x1="12" y1="9" x2="12" y2="13" />
293
+ <line x1="12" y1="17" x2="12.01" y2="17" />
294
+ </svg>
295
+ ),
296
+
297
+ info: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
298
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
299
+ <circle cx="12" cy="12" r="10" />
300
+ <line x1="12" y1="16" x2="12" y2="12" />
301
+ <line x1="12" y1="8" x2="12.01" y2="8" />
302
+ </svg>
303
+ ),
304
+
305
+ // ========== VIEW & VISIBILITY ==========
306
+
307
+ eye: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
308
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
309
+ <path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z" />
310
+ <circle cx="12" cy="12" r="3" />
311
+ </svg>
312
+ ),
313
+
314
+ eyeOff: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
315
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
316
+ <path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24" />
317
+ <line x1="1" y1="1" x2="23" y2="23" />
318
+ </svg>
319
+ ),
320
+
321
+ // ========== USER & PEOPLE ==========
322
+
323
+ user: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
324
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
325
+ <path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" />
326
+ <circle cx="12" cy="7" r="4" />
327
+ </svg>
328
+ ),
329
+
330
+ users: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
331
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
332
+ <path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2" />
333
+ <circle cx="9" cy="7" r="4" />
334
+ <path d="M23 21v-2a4 4 0 0 0-3-3.87" />
335
+ <path d="M16 3.13a4 4 0 0 1 0 7.75" />
336
+ </svg>
337
+ ),
338
+
339
+ settings: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
340
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
341
+ <circle cx="12" cy="12" r="3" />
342
+ <path d="M12 1v6m0 6v6m-7-7h6m6 0h6m-6-7L9.879 5.121M5.121 9.879 8 12.828M12 21l7.071-7.071M15.172 8l4.95-4.95" />
343
+ <path d="M19.071 19.071 15.172 16m-7.071 0-4.95 4.95M8.828 8 3.88 3.05" />
344
+ </svg>
345
+ ),
346
+
347
+ moreVertical: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
348
+ <svg width={size} height={size} viewBox="0 0 24 24" fill={color} stroke="none" strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
349
+ <circle cx="12" cy="12" r="2" />
350
+ <circle cx="12" cy="5" r="2" />
351
+ <circle cx="12" cy="19" r="2" />
352
+ </svg>
353
+ ),
354
+
355
+ moreHorizontal: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
356
+ <svg width={size} height={size} viewBox="0 0 24 24" fill={color} stroke="none" strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
357
+ <circle cx="12" cy="12" r="2" />
358
+ <circle cx="19" cy="12" r="2" />
359
+ <circle cx="5" cy="12" r="2" />
360
+ </svg>
361
+ ),
362
+
363
+ // ========== COMMUNICATION ==========
364
+
365
+ mail: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
366
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
367
+ <path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z" />
368
+ <polyline points="22,6 12,13 2,6" />
369
+ </svg>
370
+ ),
371
+
372
+ message: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
373
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
374
+ <path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z" />
375
+ </svg>
376
+ ),
377
+
378
+ bell: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
379
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
380
+ <path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9" />
381
+ <path d="M13.73 21a2 2 0 0 1-3.46 0" />
382
+ </svg>
383
+ ),
384
+
385
+ // ========== SECURITY ==========
386
+
387
+ lock: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
388
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
389
+ <rect x="3" y="11" width="18" height="11" rx="2" ry="2" />
390
+ <path d="M7 11V7a5 5 0 0 1 10 0v4" />
391
+ </svg>
392
+ ),
393
+
394
+ unlock: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
395
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
396
+ <rect x="3" y="11" width="18" height="11" rx="2" ry="2" />
397
+ <path d="M7 11V7a5 5 0 0 1 9.9-1" />
398
+ </svg>
399
+ ),
400
+
401
+ calendar: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
402
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
403
+ <rect x="3" y="4" width="18" height="18" rx="2" ry="2" />
404
+ <line x1="16" y1="2" x2="16" y2="6" />
405
+ <line x1="8" y1="2" x2="8" y2="6" />
406
+ <line x1="3" y1="10" x2="21" y2="10" />
407
+ </svg>
408
+ ),
409
+
410
+ clock: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
411
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
412
+ <circle cx="12" cy="12" r="10" />
413
+ <polyline points="12 6 12 12 16 14" />
414
+ </svg>
415
+ ),
416
+
417
+ // ========== BUSINESS & ANALYTICS ==========
418
+
419
+ chart: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
420
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
421
+ <line x1="18" y1="20" x2="18" y2="10" />
422
+ <line x1="12" y1="20" x2="12" y2="4" />
423
+ <line x1="6" y1="20" x2="6" y2="14" />
424
+ </svg>
425
+ ),
426
+
427
+ trendingUp: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
428
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
429
+ <polyline points="23 6 13.5 15.5 8.5 10.5 1 18" />
430
+ <polyline points="17 6 23 6 23 12" />
431
+ </svg>
432
+ ),
433
+
434
+ trendingDown: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
435
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
436
+ <polyline points="23 18 13.5 8.5 8.5 13.5 1 6" />
437
+ <polyline points="17 18 23 18 23 12" />
438
+ </svg>
439
+ ),
440
+
441
+ dollarSign: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
442
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
443
+ <line x1="12" y1="1" x2="12" y2="23" />
444
+ <path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6" />
445
+ </svg>
446
+ ),
447
+
448
+ tag: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
449
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
450
+ <path d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z" />
451
+ <line x1="7" y1="7" x2="7.01" y2="7" />
452
+ </svg>
453
+ ),
454
+
455
+ link: ({ size = 18, color = 'currentColor', strokeWidth = 2, ...props }: IconProps) => (
456
+ <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke={color} strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round" {...props}>
457
+ <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" />
458
+ <path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" />
459
+ </svg>
460
+ ),
461
+
462
+ };
463
+
464
+ export default IconSystem;
@@ -0,0 +1,13 @@
1
+ // ============================================================================
2
+ // ICON SYSTEM BARREL EXPORTS
3
+ // ============================================================================
4
+ // Centralized export point for the icon system
5
+
6
+ // Default export (recommended usage)
7
+ export { default } from './icon-systems';
8
+
9
+ // Named export (alternative usage)
10
+ export { default as IconSystem } from './icon-systems';
11
+
12
+ // Export types
13
+ export type { IconProps } from './icon-systems';
package/src/index.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @prima/layout - Enterprise React Layout Library
2
+ * @syuttechnologies/layout - Enterprise React Layout Library
3
3
  *
4
4
  * A comprehensive layout system for React applications featuring:
5
5
  * - Enterprise-grade sidebar navigation with multi-level menus
@@ -8,6 +8,10 @@
8
8
  * - Notification system
9
9
  * - Responsive design
10
10
  * - Change password modal
11
+ * - Data Grid Component (SyutGrid)
12
+ * - Select Component (SyutSelect)
13
+ * - Icon System
14
+ * - Action Menu
11
15
  */
12
16
 
13
17
  // Main Layout Component
@@ -51,3 +55,45 @@ export {
51
55
  type NotificationPayload,
52
56
  type Notification,
53
57
  } from './services/notificationService';
58
+
59
+ // ============================================================================
60
+ // UI COMPONENTS
61
+ // ============================================================================
62
+
63
+ // Icon System
64
+ export { default as IconSystem } from './icon-collection/icon-systems';
65
+ export type { IconProps } from './icon-collection/icon-systems';
66
+
67
+ // Action Menu Component
68
+ export {
69
+ ActionMenu,
70
+ type ActionMenuProps,
71
+ type ActionMenuItem,
72
+ type ProcessedActionMenuItem,
73
+ } from './components/ui/ActionMenu';
74
+
75
+ // SyutGrid - Data Grid Component
76
+ export {
77
+ SyutGrid,
78
+ type SyutGridProps,
79
+ type SyutGridColumn,
80
+ } from './components/ui/SyutGrid';
81
+
82
+ // SyutSelect - Unified Select Component
83
+ export {
84
+ SyutSelectUnified,
85
+ SyutSelectUnified as SyutSelect, // Alias for convenience
86
+ type SyutSelectUnifiedProps,
87
+ type SelectOption,
88
+ } from './components/ui/SyutSelect';
89
+
90
+ // ModuleHeader - Reusable Header Component for Master Screens
91
+ export {
92
+ ModuleHeader,
93
+ type ModuleHeaderProps,
94
+ type ActionButton,
95
+ type ViewModeOption,
96
+ type SearchConfig,
97
+ type ViewModeConfig,
98
+ type FilterConfig,
99
+ } from './components/ui/ModuleHeader';