@rakeyshgidwani/roger-ui-bank-theme-stan-design 0.2.9 → 0.2.10

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 (304) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/dist/components/ui/accessibility-demo.esm.js +30 -24
  3. package/dist/components/ui/accessibility-demo.js +30 -24
  4. package/dist/components/ui/advanced-component-architecture-demo.esm.js +235 -179
  5. package/dist/components/ui/advanced-component-architecture-demo.js +235 -179
  6. package/dist/components/ui/advanced-transition-system-demo.esm.js +110 -64
  7. package/dist/components/ui/advanced-transition-system-demo.js +110 -64
  8. package/dist/components/ui/advanced-transition-system.esm.js +166 -122
  9. package/dist/components/ui/advanced-transition-system.js +166 -122
  10. package/dist/components/ui/animation/animated-container.esm.js +52 -29
  11. package/dist/components/ui/animation/animated-container.js +52 -29
  12. package/dist/components/ui/animation/staggered-container.esm.js +18 -9
  13. package/dist/components/ui/animation/staggered-container.js +18 -9
  14. package/dist/components/ui/animation-demo.esm.js +67 -35
  15. package/dist/components/ui/animation-demo.js +67 -35
  16. package/dist/components/ui/badge.esm.js +9 -6
  17. package/dist/components/ui/badge.js +9 -6
  18. package/dist/components/ui/battery-conscious-animation-demo.esm.js +122 -87
  19. package/dist/components/ui/battery-conscious-animation-demo.js +122 -87
  20. package/dist/components/ui/border-radius-shadow-demo.esm.js +23 -12
  21. package/dist/components/ui/border-radius-shadow-demo.js +23 -12
  22. package/dist/components/ui/button.esm.js +8 -2
  23. package/dist/components/ui/button.js +8 -2
  24. package/dist/components/ui/card.esm.js +33 -8
  25. package/dist/components/ui/card.js +33 -8
  26. package/dist/components/ui/checkbox.esm.js +3 -3
  27. package/dist/components/ui/checkbox.js +3 -3
  28. package/dist/components/ui/color-preview.esm.js +68 -45
  29. package/dist/components/ui/color-preview.js +68 -45
  30. package/dist/components/ui/data-display/chart.esm.js +112 -84
  31. package/dist/components/ui/data-display/chart.js +112 -84
  32. package/dist/components/ui/data-display/data-grid-simple.esm.js +1 -1
  33. package/dist/components/ui/data-display/data-grid-simple.js +1 -1
  34. package/dist/components/ui/data-display/data-grid.esm.js +80 -67
  35. package/dist/components/ui/data-display/data-grid.js +80 -67
  36. package/dist/components/ui/data-display/list.esm.js +53 -45
  37. package/dist/components/ui/data-display/list.js +53 -45
  38. package/dist/components/ui/data-display/table.esm.js +62 -54
  39. package/dist/components/ui/data-display/table.js +62 -54
  40. package/dist/components/ui/data-display/timeline.esm.js +39 -34
  41. package/dist/components/ui/data-display/timeline.js +39 -34
  42. package/dist/components/ui/data-display/tree.esm.js +116 -84
  43. package/dist/components/ui/data-display/tree.js +116 -84
  44. package/dist/components/ui/data-display/types.esm.js +389 -364
  45. package/dist/components/ui/data-display/types.js +389 -364
  46. package/dist/components/ui/enterprise-mobile-experience-demo.esm.js +120 -70
  47. package/dist/components/ui/enterprise-mobile-experience-demo.js +120 -70
  48. package/dist/components/ui/enterprise-mobile-experience.esm.js +124 -73
  49. package/dist/components/ui/enterprise-mobile-experience.js +124 -73
  50. package/dist/components/ui/feedback/alert.esm.js +22 -15
  51. package/dist/components/ui/feedback/alert.js +22 -15
  52. package/dist/components/ui/feedback/progress.esm.js +47 -24
  53. package/dist/components/ui/feedback/progress.js +47 -24
  54. package/dist/components/ui/feedback/skeleton.esm.js +39 -29
  55. package/dist/components/ui/feedback/skeleton.js +39 -29
  56. package/dist/components/ui/feedback/toast.esm.js +62 -38
  57. package/dist/components/ui/feedback/toast.js +62 -38
  58. package/dist/components/ui/feedback/types.esm.js +83 -83
  59. package/dist/components/ui/feedback/types.js +83 -83
  60. package/dist/components/ui/font-preview.esm.js +41 -39
  61. package/dist/components/ui/font-preview.js +41 -39
  62. package/dist/components/ui/form-demo.esm.js +150 -113
  63. package/dist/components/ui/form-demo.js +150 -113
  64. package/dist/components/ui/hardware-acceleration-demo.esm.js +137 -87
  65. package/dist/components/ui/hardware-acceleration-demo.js +137 -87
  66. package/dist/components/ui/input.esm.js +4 -1
  67. package/dist/components/ui/input.js +4 -1
  68. package/dist/components/ui/layout-demo.esm.js +81 -56
  69. package/dist/components/ui/layout-demo.js +81 -56
  70. package/dist/components/ui/layouts/adaptive-layout.esm.js +27 -8
  71. package/dist/components/ui/layouts/adaptive-layout.js +27 -8
  72. package/dist/components/ui/layouts/desktop-layout.esm.js +39 -19
  73. package/dist/components/ui/layouts/desktop-layout.js +39 -19
  74. package/dist/components/ui/layouts/mobile-layout.esm.js +19 -9
  75. package/dist/components/ui/layouts/mobile-layout.js +19 -9
  76. package/dist/components/ui/layouts/tablet-layout.esm.js +28 -14
  77. package/dist/components/ui/layouts/tablet-layout.js +28 -14
  78. package/dist/components/ui/mobile-form-validation.esm.js +120 -87
  79. package/dist/components/ui/mobile-form-validation.js +120 -87
  80. package/dist/components/ui/mobile-input-demo.esm.js +19 -13
  81. package/dist/components/ui/mobile-input-demo.js +19 -13
  82. package/dist/components/ui/mobile-input.esm.js +185 -120
  83. package/dist/components/ui/mobile-input.js +185 -120
  84. package/dist/components/ui/mobile-skeleton-loading-demo.esm.js +128 -111
  85. package/dist/components/ui/mobile-skeleton-loading-demo.js +128 -111
  86. package/dist/components/ui/navigation/breadcrumb.esm.js +17 -14
  87. package/dist/components/ui/navigation/breadcrumb.js +17 -14
  88. package/dist/components/ui/navigation/index.esm.js +23 -1
  89. package/dist/components/ui/navigation/index.js +23 -1
  90. package/dist/components/ui/navigation/menu.esm.js +49 -35
  91. package/dist/components/ui/navigation/menu.js +49 -35
  92. package/dist/components/ui/navigation/navigation-demo.esm.js +81 -74
  93. package/dist/components/ui/navigation/navigation-demo.js +81 -74
  94. package/dist/components/ui/navigation/pagination.esm.js +62 -50
  95. package/dist/components/ui/navigation/pagination.js +62 -50
  96. package/dist/components/ui/navigation/sidebar.esm.js +56 -42
  97. package/dist/components/ui/navigation/sidebar.js +56 -42
  98. package/dist/components/ui/navigation/stepper.esm.js +34 -23
  99. package/dist/components/ui/navigation/stepper.js +34 -23
  100. package/dist/components/ui/navigation/tabs.esm.js +32 -21
  101. package/dist/components/ui/navigation/tabs.js +32 -21
  102. package/dist/components/ui/navigation/types.esm.js +196 -195
  103. package/dist/components/ui/navigation/types.js +196 -195
  104. package/dist/components/ui/overlay/backdrop.esm.js +17 -16
  105. package/dist/components/ui/overlay/backdrop.js +17 -16
  106. package/dist/components/ui/overlay/focus-manager.esm.js +21 -19
  107. package/dist/components/ui/overlay/focus-manager.js +21 -19
  108. package/dist/components/ui/overlay/index.esm.js +22 -2
  109. package/dist/components/ui/overlay/index.js +22 -2
  110. package/dist/components/ui/overlay/modal.esm.js +38 -34
  111. package/dist/components/ui/overlay/modal.js +38 -34
  112. package/dist/components/ui/overlay/overlay-manager.esm.js +25 -20
  113. package/dist/components/ui/overlay/overlay-manager.js +25 -20
  114. package/dist/components/ui/overlay/popover.esm.js +74 -58
  115. package/dist/components/ui/overlay/popover.js +74 -58
  116. package/dist/components/ui/overlay/portal.esm.js +7 -7
  117. package/dist/components/ui/overlay/portal.js +7 -7
  118. package/dist/components/ui/overlay/tooltip.esm.js +54 -39
  119. package/dist/components/ui/overlay/tooltip.js +54 -39
  120. package/dist/components/ui/overlay/types.esm.js +132 -131
  121. package/dist/components/ui/overlay/types.js +132 -131
  122. package/dist/components/ui/performance-demo.esm.js +135 -88
  123. package/dist/components/ui/performance-demo.js +135 -88
  124. package/dist/components/ui/semantic-input-system-demo.esm.js +117 -80
  125. package/dist/components/ui/semantic-input-system-demo.js +117 -80
  126. package/dist/components/ui/theme-customizer.esm.js +84 -52
  127. package/dist/components/ui/theme-customizer.js +84 -52
  128. package/dist/components/ui/theme-preview.esm.js +95 -43
  129. package/dist/components/ui/theme-preview.js +95 -43
  130. package/dist/components/ui/theme-switcher.esm.js +70 -44
  131. package/dist/components/ui/theme-switcher.js +70 -44
  132. package/dist/components/ui/theme-toggle.esm.js +3 -3
  133. package/dist/components/ui/theme-toggle.js +3 -3
  134. package/dist/components/ui/token-demo.esm.js +33 -21
  135. package/dist/components/ui/token-demo.js +33 -21
  136. package/dist/components/ui/touch-demo.esm.js +102 -73
  137. package/dist/components/ui/touch-demo.js +102 -73
  138. package/dist/components/ui/touch-friendly-interface-demo.esm.js +102 -64
  139. package/dist/components/ui/touch-friendly-interface-demo.js +102 -64
  140. package/dist/components/ui/touch-friendly-interface.esm.js +85 -61
  141. package/dist/components/ui/touch-friendly-interface.js +85 -61
  142. package/dist/hooks/use-accessibility-support.esm.js +115 -85
  143. package/dist/hooks/use-accessibility-support.js +115 -85
  144. package/dist/hooks/use-adaptive-layout.esm.js +56 -33
  145. package/dist/hooks/use-adaptive-layout.js +56 -33
  146. package/dist/hooks/use-advanced-patterns.esm.js +57 -42
  147. package/dist/hooks/use-advanced-patterns.js +57 -42
  148. package/dist/hooks/use-advanced-transition-system.esm.js +112 -71
  149. package/dist/hooks/use-advanced-transition-system.js +112 -71
  150. package/dist/hooks/use-animation-profile.esm.js +63 -34
  151. package/dist/hooks/use-animation-profile.js +63 -34
  152. package/dist/hooks/use-battery-animations.esm.js +80 -55
  153. package/dist/hooks/use-battery-animations.js +80 -55
  154. package/dist/hooks/use-battery-conscious-loading.esm.js +166 -123
  155. package/dist/hooks/use-battery-conscious-loading.js +166 -123
  156. package/dist/hooks/use-battery-optimization.esm.js +78 -55
  157. package/dist/hooks/use-battery-optimization.js +78 -55
  158. package/dist/hooks/use-battery-status.esm.js +73 -51
  159. package/dist/hooks/use-battery-status.js +73 -51
  160. package/dist/hooks/use-component-performance.esm.js +62 -47
  161. package/dist/hooks/use-component-performance.js +62 -47
  162. package/dist/hooks/use-device-loading-states.esm.js +152 -109
  163. package/dist/hooks/use-device-loading-states.js +152 -109
  164. package/dist/hooks/use-device.esm.js +25 -14
  165. package/dist/hooks/use-device.js +25 -14
  166. package/dist/hooks/use-enterprise-mobile-experience.esm.js +137 -88
  167. package/dist/hooks/use-enterprise-mobile-experience.js +137 -88
  168. package/dist/hooks/use-form-feedback.esm.js +124 -81
  169. package/dist/hooks/use-form-feedback.js +124 -81
  170. package/dist/hooks/use-form-performance.esm.js +127 -92
  171. package/dist/hooks/use-form-performance.js +127 -92
  172. package/dist/hooks/use-frame-rate.esm.js +56 -37
  173. package/dist/hooks/use-frame-rate.js +56 -37
  174. package/dist/hooks/use-gestures.esm.js +96 -72
  175. package/dist/hooks/use-gestures.js +96 -72
  176. package/dist/hooks/use-hardware-acceleration.esm.js +65 -37
  177. package/dist/hooks/use-hardware-acceleration.js +65 -37
  178. package/dist/hooks/use-input-accessibility.esm.js +157 -119
  179. package/dist/hooks/use-input-accessibility.js +157 -119
  180. package/dist/hooks/use-input-performance.esm.js +139 -104
  181. package/dist/hooks/use-input-performance.js +139 -104
  182. package/dist/hooks/use-layout-performance.esm.js +50 -29
  183. package/dist/hooks/use-layout-performance.js +50 -29
  184. package/dist/hooks/use-loading-accessibility.esm.js +209 -169
  185. package/dist/hooks/use-loading-accessibility.js +209 -169
  186. package/dist/hooks/use-loading-performance.esm.js +117 -93
  187. package/dist/hooks/use-loading-performance.js +117 -93
  188. package/dist/hooks/use-memory-usage.esm.js +57 -38
  189. package/dist/hooks/use-memory-usage.js +57 -38
  190. package/dist/hooks/use-mobile-form-layout.esm.js +111 -74
  191. package/dist/hooks/use-mobile-form-layout.js +111 -74
  192. package/dist/hooks/use-mobile-form-validation.esm.js +211 -144
  193. package/dist/hooks/use-mobile-form-validation.js +211 -144
  194. package/dist/hooks/use-mobile-keyboard-optimization.esm.js +154 -113
  195. package/dist/hooks/use-mobile-keyboard-optimization.js +154 -113
  196. package/dist/hooks/use-mobile-layout.esm.js +73 -51
  197. package/dist/hooks/use-mobile-layout.js +73 -51
  198. package/dist/hooks/use-mobile-optimization.esm.js +72 -44
  199. package/dist/hooks/use-mobile-optimization.js +72 -44
  200. package/dist/hooks/use-mobile-skeleton.esm.js +97 -64
  201. package/dist/hooks/use-mobile-skeleton.js +97 -64
  202. package/dist/hooks/use-mobile-touch.esm.js +128 -93
  203. package/dist/hooks/use-mobile-touch.js +128 -93
  204. package/dist/hooks/use-performance-throttling.esm.js +72 -48
  205. package/dist/hooks/use-performance-throttling.js +72 -48
  206. package/dist/hooks/use-performance.esm.js +90 -52
  207. package/dist/hooks/use-performance.js +90 -52
  208. package/dist/hooks/use-reusable-architecture.esm.js +94 -65
  209. package/dist/hooks/use-reusable-architecture.js +94 -65
  210. package/dist/hooks/use-semantic-input-types.esm.js +166 -124
  211. package/dist/hooks/use-semantic-input-types.js +166 -124
  212. package/dist/hooks/use-semantic-input.esm.js +178 -126
  213. package/dist/hooks/use-semantic-input.js +178 -126
  214. package/dist/hooks/use-tablet-layout.esm.js +67 -38
  215. package/dist/hooks/use-tablet-layout.js +67 -38
  216. package/dist/hooks/use-touch-friendly-input.esm.js +193 -149
  217. package/dist/hooks/use-touch-friendly-input.js +193 -149
  218. package/dist/hooks/use-touch-friendly-interface.esm.js +99 -67
  219. package/dist/hooks/use-touch-friendly-interface.js +99 -67
  220. package/dist/hooks/use-touch-optimization.esm.js +99 -72
  221. package/dist/hooks/use-touch-optimization.js +99 -72
  222. package/dist/index.esm.js +289 -280
  223. package/dist/index.js +289 -280
  224. package/dist/lib/utils.esm.js +1 -1
  225. package/dist/lib/utils.js +1 -1
  226. package/dist/plugins/theme-css-generator.esm.js +104 -55
  227. package/dist/plugins/theme-css-generator.js +104 -55
  228. package/dist/provider.esm.js +4 -4
  229. package/dist/provider.js +4 -4
  230. package/dist/styles.css +1 -1
  231. package/dist/theme.esm.js +633 -468
  232. package/dist/theme.js +633 -468
  233. package/dist/themes/ThemeContext.esm.js +15 -15
  234. package/dist/themes/ThemeContext.js +15 -15
  235. package/dist/themes/ThemeProvider.esm.js +25 -22
  236. package/dist/themes/ThemeProvider.js +25 -22
  237. package/dist/themes/accessibility.esm.js +147 -108
  238. package/dist/themes/accessibility.js +147 -108
  239. package/dist/themes/aria-patterns.esm.js +198 -162
  240. package/dist/themes/aria-patterns.js +198 -162
  241. package/dist/themes/base-themes.esm.js +14 -11
  242. package/dist/themes/base-themes.js +14 -11
  243. package/dist/themes/colorManager.esm.js +101 -83
  244. package/dist/themes/colorManager.js +101 -83
  245. package/dist/themes/examples/dark-theme.esm.js +133 -103
  246. package/dist/themes/examples/dark-theme.js +133 -103
  247. package/dist/themes/examples/minimal-theme.esm.js +83 -61
  248. package/dist/themes/examples/minimal-theme.js +83 -61
  249. package/dist/themes/focus-management.esm.js +202 -143
  250. package/dist/themes/focus-management.js +202 -143
  251. package/dist/themes/fontLoader.esm.js +28 -19
  252. package/dist/themes/fontLoader.js +28 -19
  253. package/dist/themes/high-contrast.esm.js +152 -104
  254. package/dist/themes/high-contrast.js +152 -104
  255. package/dist/themes/inheritance.esm.js +35 -27
  256. package/dist/themes/inheritance.js +35 -27
  257. package/dist/themes/keyboard-navigation.esm.js +152 -123
  258. package/dist/themes/keyboard-navigation.js +152 -123
  259. package/dist/themes/motion-reduction.esm.js +193 -133
  260. package/dist/themes/motion-reduction.js +193 -133
  261. package/dist/themes/navigation.esm.js +146 -146
  262. package/dist/themes/navigation.js +146 -146
  263. package/dist/themes/screen-reader.esm.js +159 -94
  264. package/dist/themes/screen-reader.js +159 -94
  265. package/dist/themes/systemThemeDetector.esm.js +42 -34
  266. package/dist/themes/systemThemeDetector.js +42 -34
  267. package/dist/themes/themeCSSUpdater.esm.js +21 -9
  268. package/dist/themes/themeCSSUpdater.js +21 -9
  269. package/dist/themes/themePersistence.esm.js +68 -47
  270. package/dist/themes/themePersistence.js +68 -47
  271. package/dist/themes/themes/stan-design.esm.js +633 -468
  272. package/dist/themes/themes/stan-design.js +633 -468
  273. package/dist/themes/types.esm.js +301 -287
  274. package/dist/themes/types.js +301 -287
  275. package/dist/themes/useSystemTheme.esm.js +4 -4
  276. package/dist/themes/useSystemTheme.js +4 -4
  277. package/dist/themes/useTheme.esm.js +4 -4
  278. package/dist/themes/useTheme.js +4 -4
  279. package/dist/themes/validation.esm.js +128 -77
  280. package/dist/themes/validation.js +128 -77
  281. package/dist/tokens/index.esm.js +15 -4
  282. package/dist/tokens/index.js +15 -4
  283. package/dist/tokens/tokenExporter.esm.js +87 -61
  284. package/dist/tokens/tokenExporter.js +87 -61
  285. package/dist/tokens/tokenGenerator.esm.js +86 -77
  286. package/dist/tokens/tokenGenerator.js +86 -77
  287. package/dist/tokens/tokenManager.esm.js +64 -51
  288. package/dist/tokens/tokenManager.js +64 -51
  289. package/dist/tokens/tokenValidator.esm.js +193 -147
  290. package/dist/tokens/tokenValidator.js +193 -147
  291. package/dist/tokens/types.esm.js +49 -35
  292. package/dist/tokens/types.js +49 -35
  293. package/dist/utils/bundle-analyzer.esm.js +83 -65
  294. package/dist/utils/bundle-analyzer.js +83 -65
  295. package/dist/utils/bundle-splitting.esm.js +142 -117
  296. package/dist/utils/bundle-splitting.js +142 -117
  297. package/dist/utils/lazy-loading.esm.js +132 -106
  298. package/dist/utils/lazy-loading.js +132 -106
  299. package/dist/utils/performance-monitor.esm.js +170 -129
  300. package/dist/utils/performance-monitor.js +170 -129
  301. package/dist/utils/tree-shaking.esm.js +69 -61
  302. package/dist/utils/tree-shaking.js +69 -61
  303. package/package.json +1 -1
  304. package/src/index.ts +146 -146
@@ -7,50 +7,53 @@ import {
7
7
  } from './types';
8
8
 
9
9
  // Simple icon components
10
- const ChevronUpIcon}> = ({ className = '' }) => (
10
+ const ChevronUpIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
11
11
  <svg className={`data-grid__icon ${className}`} fill="none" viewBox="0 0 24 24" stroke="currentColor">
12
12
  <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M5 15l7-7 7 7" />
13
13
  </svg>
14
14
  );
15
15
 
16
- const ChevronDownIcon}> = ({ className = '' }) => (
16
+ const ChevronDownIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
17
17
  <svg className={`data-grid__icon ${className}`} fill="none" viewBox="0 0 24 24" stroke="currentColor">
18
18
  <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 9l-7 7-7-7" />
19
19
  </svg>
20
20
  );
21
21
 
22
- const SearchIcon}> = ({ className = '' }) => (
22
+ const SearchIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
23
23
  <svg className={`data-grid__icon ${className}`} fill="none" viewBox="0 0 24 24" stroke="currentColor">
24
24
  <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" />
25
25
  </svg>
26
26
  );
27
27
 
28
- const FilterIcon}> = ({ className = '' }) => (
28
+ const FilterIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
29
29
  <svg className={`data-grid__icon ${className}`} fill="none" viewBox="0 0 24 24" stroke="currentColor">
30
30
  <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.207A1 1 0 013 6.5V4z" />
31
31
  </svg>
32
32
  );
33
33
 
34
- const MenuIcon}> = ({ className = '' }) => (
34
+ const MenuIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
35
35
  <svg className={`data-grid__icon ${className}`} fill="none" viewBox="0 0 24 24" stroke="currentColor">
36
36
  <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M4 6h16M4 12h16M4 18h16" />
37
37
  </svg>
38
38
  );
39
39
 
40
- // const DragIcon}> = ({ className = '' }) => (
40
+ // const DragIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
41
41
  // <svg className={className} fill="none" viewBox="0 0 24 24" stroke="currentColor">
42
42
  // <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M8 9l3 3-3 3m5 0h3M8 9l3 3-3 3m5 0h3" />
43
43
  // </svg>
44
- // ); // TODO}> = ({ className = '' }) => (
44
+ // ); // TODO: Implement drag functionality
45
+
46
+ const GroupIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
45
47
  <svg className={`data-grid__icon ${className}`} fill="none" viewBox="0 0 24 24" stroke="currentColor">
46
48
  <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z" />
47
49
  </svg>
48
50
  );
49
51
 
50
52
  // Resizable Column Header Component
51
- const DataGridColumn= ({
53
+ const DataGridColumn: React.FC<DataGridColumnProps> = ({
52
54
  column,
53
- // index, // TODO,
55
+ // index, // TODO: Use for column ordering
56
+ onSort,
54
57
  onResize,
55
58
  sortConfig,
56
59
  // theme,
@@ -66,7 +69,7 @@ const DataGridColumn= ({
66
69
  const [startWidth, setStartWidth] = useState(0);
67
70
  const headerRef = useRef<HTMLTableHeaderCellElement>(null);
68
71
 
69
- const handleMouseDown = useCallback((e) => {
72
+ const handleMouseDown = useCallback((e: React.MouseEvent) => {
70
73
  if (!resizable) return;
71
74
 
72
75
  e.preventDefault();
@@ -75,7 +78,7 @@ const DataGridColumn= ({
75
78
  setStartWidth(headerRef.current?.offsetWidth || 0);
76
79
  }, [resizable]);
77
80
 
78
- const handleMouseMove = useCallback((e) => {
81
+ const handleMouseMove = useCallback((e: MouseEvent) => {
79
82
  if (!isResizing) return;
80
83
 
81
84
  const diff = e.clientX - startX;
@@ -105,9 +108,9 @@ const DataGridColumn= ({
105
108
  return (
106
109
  <th
107
110
  ref={headerRef}
108
- className={`data-grid__header data-grid__header--${size} data-grid__header--${column.align || 'left'} ${isSorted ? 'data-grid__header--sorted' }`}
111
+ className={`data-grid__header data-grid__header--${size} data-grid__header--${column.align || 'left'} ${isSorted ? 'data-grid__header--sorted' : ''}`}
109
112
  style={{
110
- width,
113
+ width: column.width,
111
114
  }}
112
115
  onClick={onSort}
113
116
  >
@@ -116,14 +119,15 @@ const DataGridColumn= ({
116
119
  {column.sortable && isSorted && (
117
120
  sortConfig?.direction === 'asc' ? (
118
121
  <ChevronUpIcon className="data-grid__sort-icon" />
119
- ) ="data-grid__sort-icon" />
122
+ ) : (
123
+ <ChevronDownIcon className="data-grid__sort-icon" />
120
124
  )
121
125
  )}
122
126
  </div>
123
127
 
124
128
  {resizable && (
125
129
  <div
126
- className={`data-grid__resize-handle ${isResizing ? 'data-grid__resize-handle--active' }`}
130
+ className={`data-grid__resize-handle ${isResizing ? 'data-grid__resize-handle--active' : ''}`}
127
131
  onMouseDown={handleMouseDown}
128
132
  />
129
133
  )}
@@ -132,24 +136,25 @@ const DataGridColumn= ({
132
136
  };
133
137
 
134
138
  // Column Management Panel
135
- const ColumnPanel];
136
- groups?];
137
- onGroupChange?]) => void;
138
- onColumnToggle?, visible) => void;
139
- theme;
140
- size;
141
- onClose) => void;
139
+ const ColumnPanel: React.FC<{
140
+ columns: SortableColumn[];
141
+ groups?: string[];
142
+ onGroupChange?: (groups: string[]) => void;
143
+ onColumnToggle?: (columnKey: string, visible: boolean) => void;
144
+ theme: 'stan-design' | 'enterprise' | 'harvey';
145
+ size: 'sm' | 'md' | 'lg';
146
+ onClose: () => void;
142
147
  }> = ({ columns, groups = [], onGroupChange, onColumnToggle, size, onClose }) => {
143
148
  // const { getTheme } = useTheme();
144
149
  // const themeConfig = getTheme(theme);
145
150
  // const colors = themeConfig?.colors || getDefaultColors();
146
151
 
147
- const handleGroupToggle = (columnKey) => {
152
+ const handleGroupToggle = (columnKey: string) => {
148
153
  if (!onGroupChange) return;
149
154
 
150
155
  const newGroups = groups.includes(columnKey)
151
156
  ? groups.filter(g => g !== columnKey)
152
- , columnKey];
157
+ : [...groups, columnKey];
153
158
 
154
159
  onGroupChange(newGroups);
155
160
  };
@@ -216,18 +221,19 @@ const ColumnPanel];
216
221
  };
217
222
 
218
223
  // Advanced Search and Filter Bar
219
- const DataGridToolbar;
220
- searchValue?;
221
- onSearchChange?) => void;
222
- filterable?;
223
- filters?];
224
- onFiltersChange?]) => void;
225
- groupable?;
226
- groups?];
227
- onGroupChange?]) => void;
228
- columns];
229
- theme;
230
- size;
224
+ const DataGridToolbar: React.FC<{
225
+ searchable?: boolean;
226
+ searchValue?: string;
227
+ onSearchChange?: (value: string) => void;
228
+ filterable?: boolean;
229
+ filters?: FilterConfig[];
230
+ onFiltersChange?: (filters: FilterConfig[]) => void;
231
+ groupable?: boolean;
232
+ groups?: string[];
233
+ onGroupChange?: (groups: string[]) => void;
234
+ columns: SortableColumn[];
235
+ theme: 'stan-design' | 'enterprise' | 'harvey';
236
+ size: 'sm' | 'md' | 'lg';
231
237
  }> = ({
232
238
  searchable,
233
239
  searchValue,
@@ -253,17 +259,18 @@ const DataGridToolbar;
253
259
  const addFilter = () => {
254
260
  if (!filterColumn || !filterValue || !onFiltersChange) return;
255
261
 
256
- const newFilter= {
257
- key,
258
- value,
259
- operator};
262
+ const newFilter: FilterConfig = {
263
+ key: filterColumn,
264
+ value: filterValue,
265
+ operator: 'contains'
266
+ };
260
267
 
261
268
  onFiltersChange([...filters, newFilter]);
262
269
  setFilterColumn('');
263
270
  setFilterValue('');
264
271
  };
265
272
 
266
- const removeFilter = (index) => {
273
+ const removeFilter = (index: number) => {
267
274
  if (!onFiltersChange) return;
268
275
  const newFilters = filters.filter((_, i) => i !== index);
269
276
  onFiltersChange(newFilters);
@@ -292,7 +299,7 @@ const DataGridToolbar;
292
299
  {filterable && (
293
300
  <button
294
301
  className={`data-grid__toolbar-button data-grid__toolbar-button--${size}`}
295
- onClick={() => {/* TODO}}
302
+ onClick={() => {/* TODO: Open filter dialog */}}
296
303
  >
297
304
  <FilterIcon className="data-grid__toolbar-icon" />
298
305
  <span>Filter ({filters.length})</span>
@@ -302,7 +309,7 @@ const DataGridToolbar;
302
309
  {groupable && (
303
310
  <button
304
311
  className={`data-grid__toolbar-button data-grid__toolbar-button--${size}`}
305
- onClick={() => {/* TODO}}
312
+ onClick={() => {/* TODO: Open group dialog */}}
306
313
  >
307
314
  <GroupIcon className="data-grid__toolbar-icon" />
308
315
  <span>Group ({groups.length})</span>
@@ -336,12 +343,14 @@ const DataGridToolbar;
336
343
  {filters.length > 0 && (
337
344
  <div className="data-grid__active-filters">
338
345
  <span className={`data-grid__active-filters-label data-grid__active-filters-label--${size}`}>
339
- Active Filters, index) => (
346
+ Active Filters:
347
+ </span>
348
+ {filters.map((filter, index) => (
340
349
  <div
341
350
  key={index}
342
351
  className={`data-grid__filter-tag data-grid__filter-tag--${size}`}
343
352
  >
344
- <span>{filter.key})}</span>
353
+ <span>{filter.key}: {String(filter.value)}</span>
345
354
  <button
346
355
  onClick={() => removeFilter(index)}
347
356
  className="data-grid__filter-tag-remove"
@@ -380,7 +389,7 @@ const DataGridToolbar;
380
389
  <button
381
390
  onClick={addFilter}
382
391
  disabled={!filterColumn || !filterValue}
383
- className={`data-grid__filter-add-button data-grid__filter-add-button--${size} ${(!filterColumn || !filterValue) ? 'data-grid__filter-add-button--disabled' }`}
392
+ className={`data-grid__filter-add-button data-grid__filter-add-button--${size} ${(!filterColumn || !filterValue) ? 'data-grid__filter-add-button--disabled' : ''}`}
384
393
  >
385
394
  Add Filter
386
395
  </button>
@@ -391,24 +400,28 @@ const DataGridToolbar;
391
400
  };
392
401
 
393
402
  // Main DataGrid Component
394
- export const DataGrid= ({
403
+ export const DataGrid: React.FC<DataGridProps> = ({
395
404
  columns,
396
405
  data,
397
406
  sortable = true,
398
407
  filterable = true,
399
408
  groupable = true,
400
409
  resizable = true,
401
- // reorderable = false, // TODO,
410
+ // reorderable = false, // TODO: Implement column reordering
411
+ onSort,
402
412
  onFiltersChange,
403
413
  onGroupChange,
404
414
  onColumnResize,
405
- // onColumnReorder, // TODO,
415
+ // onColumnReorder, // TODO: Implement column reordering
416
+ sortConfig,
406
417
  filters = [],
407
418
  groups = [],
408
419
  columnWidths = {},
409
- // columnOrder = [], // TODO,
420
+ // columnOrder = [], // TODO: Implement column ordering
421
+ pagination,
410
422
  onPageChange,
411
- // onPageSizeChange, // TODO= true,
423
+ // onPageSizeChange, // TODO: Implement page size change
424
+ searchable = true,
412
425
  searchValue,
413
426
  onSearchChange,
414
427
  rowKey = 'id',
@@ -439,12 +452,12 @@ export const DataGrid= ({
439
452
  const enhancedColumns = useMemo(() => {
440
453
  return columns.map(column => ({
441
454
  ...column,
442
- width] || column.width || 150
455
+ width: columnWidths[column.key] || column.width || 150
443
456
  }));
444
457
  }, [columns, columnWidths]);
445
458
 
446
459
  // Get row key function
447
- const getRowKey = (row, any>, index)=> {
460
+ const getRowKey = (row: Record<string, any>, index: number): string => {
448
461
  if (typeof rowKey === 'function') {
449
462
  return rowKey(row);
450
463
  }
@@ -452,22 +465,22 @@ export const DataGrid= ({
452
465
  };
453
466
 
454
467
  // Handle column resize
455
- const handleColumnResize = useCallback((columnKey, newWidth) => {
468
+ const handleColumnResize = useCallback((columnKey: string, newWidth: number) => {
456
469
  onColumnResize?.(columnKey, newWidth);
457
470
  }, [onColumnResize]);
458
471
 
459
472
  // Handle sorting
460
- const handleSort = useCallback((column) => {
473
+ const handleSort = useCallback((column: SortableColumn) => {
461
474
  if (!sortable || !onSort || !column.sortable) return;
462
475
 
463
- const newDirection = sortConfig?.key === column.key && sortConfig.direction === 'asc' ? 'desc' ;
464
- onSort({ key, direction});
476
+ const newDirection = sortConfig?.key === column.key && sortConfig.direction === 'asc' ? 'desc' : 'asc';
477
+ onSort({ key: column.key, direction: newDirection });
465
478
  }, [sortable, onSort, sortConfig]);
466
479
 
467
480
  // Handle row selection
468
- const handleRowSelect = useCallback((row, any>, checked) => {
469
- const key = typeof rowKey === 'function' ? rowKey(row) ] || `row-0`;
470
- let newSelectedKeys];
481
+ const handleRowSelect = useCallback((row: Record<string, any>, checked: boolean) => {
482
+ const key = typeof rowKey === 'function' ? rowKey(row) : row[rowKey] || `row-0`;
483
+ let newSelectedKeys: string[];
471
484
 
472
485
  if (checked) {
473
486
  newSelectedKeys = [...internalSelectedKeys, key];
@@ -480,13 +493,13 @@ export const DataGrid= ({
480
493
  }, [internalSelectedKeys, onSelectionChange, rowKey]);
481
494
 
482
495
  // Handle select all
483
- const handleSelectAll = useCallback((checked) => {
496
+ const handleSelectAll = useCallback((checked: boolean) => {
484
497
  const newSelectedKeys = checked ? data.map((row, index) => {
485
498
  if (typeof rowKey === 'function') {
486
499
  return rowKey(row);
487
500
  }
488
501
  return row[rowKey] || `row-${index}`;
489
- }) ];
502
+ }) : [];
490
503
  setInternalSelectedKeys(newSelectedKeys);
491
504
  onSelectionChange?.(newSelectedKeys);
492
505
  }, [data, onSelectionChange, rowKey]);
@@ -514,7 +527,7 @@ export const DataGrid= ({
514
527
  <div className={`data-grid__container ${className || ''}`}>
515
528
  <div className="data-grid__error">
516
529
  <div className={`data-grid__error-text data-grid__error-text--${size}`}>
517
- Error}
530
+ Error: {error}
518
531
  </div>
519
532
  </div>
520
533
  </div>
@@ -602,7 +615,7 @@ export const DataGrid= ({
602
615
  return (
603
616
  <tr
604
617
  key={key}
605
- className={`data-grid__row data-grid__row--${size} ${isSelected ? 'data-grid__row--selected' } ${variant === 'striped' && index % 2 === 1 ? 'data-grid__row--striped' }`}
618
+ className={`data-grid__row data-grid__row--${size} ${isSelected ? 'data-grid__row--selected' : ''} ${variant === 'striped' && index % 2 === 1 ? 'data-grid__row--striped' : ''}`}
606
619
  >
607
620
  {selectable && (
608
621
  <td className={`data-grid__select-cell data-grid__select-cell--${size}`}>
@@ -619,7 +632,7 @@ export const DataGrid= ({
619
632
  <td
620
633
  key={column.key}
621
634
  className={`data-grid__cell data-grid__cell--${size} data-grid__cell--${column.align || 'left'}`}
622
- style={{ width}}
635
+ style={{ width: column.width }}
623
636
  >
624
637
  {String(row[column.key] || '')}
625
638
  </td>
@@ -641,7 +654,7 @@ export const DataGrid= ({
641
654
  <button
642
655
  onClick={() => onPageChange?.(pagination.currentPage - 1)}
643
656
  disabled={pagination.currentPage === 1}
644
- className={`data-grid__pagination-button data-grid__pagination-button--${size} ${pagination.currentPage === 1 ? 'data-grid__pagination-button--disabled' }`}
657
+ className={`data-grid__pagination-button data-grid__pagination-button--${size} ${pagination.currentPage === 1 ? 'data-grid__pagination-button--disabled' : ''}`}
645
658
  >
646
659
  Previous
647
660
  </button>
@@ -653,7 +666,7 @@ export const DataGrid= ({
653
666
  <button
654
667
  onClick={() => onPageChange?.(pagination.currentPage + 1)}
655
668
  disabled={pagination.currentPage >= Math.ceil(pagination.totalItems / pagination.pageSize)}
656
- className={`data-grid__pagination-button data-grid__pagination-button--${size} ${pagination.currentPage >= Math.ceil(pagination.totalItems / pagination.pageSize) ? 'data-grid__pagination-button--disabled' }`}
669
+ className={`data-grid__pagination-button data-grid__pagination-button--${size} ${pagination.currentPage >= Math.ceil(pagination.totalItems / pagination.pageSize) ? 'data-grid__pagination-button--disabled' : ''}`}
657
670
  >
658
671
  Next
659
672
  </button>
@@ -7,7 +7,7 @@ import {
7
7
  } from './types';
8
8
 
9
9
  // Simple icon components (inline SVG)
10
- const ChevronRightIcon}> = ({ className = '' }) => (
10
+ const ChevronRightIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
11
11
  <svg
12
12
  className={`list__icon ${className}`}
13
13
  fill="none"
@@ -18,7 +18,7 @@ const ChevronRightIcon}> = ({ className = '' }) => (
18
18
  </svg>
19
19
  );
20
20
 
21
- const SearchIcon}> = ({ className = '' }) => (
21
+ const SearchIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
22
22
  <svg
23
23
  className={`list__icon ${className}`}
24
24
  fill="none"
@@ -29,7 +29,7 @@ const SearchIcon}> = ({ className = '' }) => (
29
29
  </svg>
30
30
  );
31
31
 
32
- const FilterIcon}> = ({ className = '' }) => (
32
+ const FilterIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
33
33
  <svg
34
34
  className={`list__icon ${className}`}
35
35
  fill="none"
@@ -40,7 +40,7 @@ const FilterIcon}> = ({ className = '' }) => (
40
40
  </svg>
41
41
  );
42
42
 
43
- const DotsIcon}> = ({ className = '' }) => (
43
+ const DotsIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
44
44
  <svg
45
45
  className={`list__icon ${className}`}
46
46
  fill="none"
@@ -51,7 +51,7 @@ const DotsIcon}> = ({ className = '' }) => (
51
51
  </svg>
52
52
  );
53
53
 
54
- const CheckIcon}> = ({ className = '' }) => (
54
+ const CheckIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
55
55
  <svg
56
56
  className={`list__icon ${className}`}
57
57
  fill="none"
@@ -63,14 +63,15 @@ const CheckIcon}> = ({ className = '' }) => (
63
63
  );
64
64
 
65
65
  // List Search and Filter Bar
66
- const ListSearchFilterBar;
67
- searchValue;
68
- onSearchChange) => void;
69
- filterable;
70
- filters];
71
- onFiltersChange?]) => void;
72
- theme;
73
- size;
66
+ const ListSearchFilterBar: React.FC<{
67
+ searchable: boolean;
68
+ searchValue: string;
69
+ onSearchChange: (value: string) => void;
70
+ filterable: boolean;
71
+ filters: ListFilter[];
72
+ onFiltersChange?: (filters: ListFilter[]) => void;
73
+ theme: string;
74
+ size: 'sm' | 'md' | 'lg';
74
75
  }> = ({
75
76
  searchable,
76
77
  searchValue,
@@ -84,9 +85,10 @@ const ListSearchFilterBar;
84
85
  // const colors = themeConfig?.colors || getDefaultColors();
85
86
 
86
87
  // const sizeClasses = {
87
- // sm,
88
- // md,
89
- // lg};
88
+ // sm: 'h-8 text-sm px-3',
89
+ // md: 'h-10 text-base px-4',
90
+ // lg: 'h-12 text-lg px-5'
91
+ // };
90
92
 
91
93
  if (!searchable && !filterable) return null;
92
94
 
@@ -123,10 +125,11 @@ const ListSearchFilterBar;
123
125
  };
124
126
 
125
127
  // List Item Action Component
126
- const ListItemActions];
127
- item;
128
- theme;
129
- size;
128
+ const ListItemActions: React.FC<{
129
+ actions: ListAction[];
130
+ item: ListItem;
131
+ theme: string;
132
+ size: 'sm' | 'md' | 'lg';
130
133
  }> = ({ actions, item, size }) => {
131
134
  // const { getTheme } = useTheme();
132
135
  // const themeConfig = getTheme(theme);
@@ -135,9 +138,10 @@ const ListItemActions];
135
138
  const [showMenu, setShowMenu] = useState(false);
136
139
 
137
140
  // const sizeClasses = {
138
- // sm,
139
- // md,
140
- // lg};
141
+ // sm: 'p-1',
142
+ // md: 'p-1.5',
143
+ // lg: 'p-2'
144
+ // };
141
145
 
142
146
  if (actions.length === 0) return null;
143
147
 
@@ -150,7 +154,7 @@ const ListItemActions];
150
154
  e.stopPropagation();
151
155
  action.onClick(item);
152
156
  }}
153
- className={`list__action-button list__action-button--${size} ${action.variant === 'danger' ? 'list__action-button--danger' }`}
157
+ className={`list__action-button list__action-button--${size} ${action.variant === 'danger' ? 'list__action-button--danger' : ''}`}
154
158
  title={action.label}
155
159
  >
156
160
  {action.icon || <DotsIcon className="list__action-icon" />}
@@ -189,7 +193,7 @@ const ListItemActions];
189
193
  action.onClick(item);
190
194
  setShowMenu(false);
191
195
  }}
192
- className={`list__action-menu-item ${action.variant === 'danger' ? 'list__action-menu-item--danger' }`}
196
+ className={`list__action-menu-item ${action.variant === 'danger' ? 'list__action-menu-item--danger' : ''}`}
193
197
  >
194
198
  {action.icon && <span className="list__action-menu-icon">{action.icon}</span>}
195
199
  {action.label}
@@ -203,17 +207,18 @@ const ListItemActions];
203
207
  };
204
208
 
205
209
  // Individual List Item Component
206
- const ListItemComponent;
207
- index;
208
- selectable;
209
- selected;
210
- onSelectionChange?) => void;
211
- onClick?, index) => void;
212
- actions];
213
- showDivider;
214
- theme;
215
- size;
216
- variant;
210
+ const ListItemComponent: React.FC<{
211
+ item: ListItem;
212
+ index: number;
213
+ selectable: boolean;
214
+ selected: boolean;
215
+ onSelectionChange?: (selected: boolean) => void;
216
+ onClick?: (item: ListItem, index: number) => void;
217
+ actions: ListAction[];
218
+ showDivider: boolean;
219
+ theme: string;
220
+ size: 'sm' | 'md' | 'lg';
221
+ variant: 'default' | 'bordered' | 'striped';
217
222
  }> = ({
218
223
  item,
219
224
  index,
@@ -232,8 +237,8 @@ const ListItemComponent;
232
237
 
233
238
  return (
234
239
  <div
235
- className={`list__item list__item--${size} list__item--${variant} ${isClickable ? 'list__item--clickable' } ${index % 2 === 1 && variant === 'striped' ? 'list__item--striped' }`}
236
- onClick={isClickable ? () => onClick(item, index) }
240
+ className={`list__item list__item--${size} list__item--${variant} ${isClickable ? 'list__item--clickable' : ''} ${index % 2 === 1 && variant === 'striped' ? 'list__item--striped' : ''}`}
241
+ onClick={isClickable ? () => onClick(item, index) : undefined}
237
242
  >
238
243
  {/* Selection Checkbox */}
239
244
  {selectable && (
@@ -243,7 +248,7 @@ const ListItemComponent;
243
248
  >
244
249
  <button
245
250
  onClick={() => onSelectionChange?.(!selected)}
246
- className={`list__item-checkbox ${selected ? 'list__item-checkbox--selected' }`}
251
+ className={`list__item-checkbox ${selected ? 'list__item-checkbox--selected' : ''}`}
247
252
  >
248
253
  {selected && <CheckIcon className="list__item-checkbox-icon" />}
249
254
  </button>
@@ -259,7 +264,8 @@ const ListItemComponent;
259
264
  alt={item.title}
260
265
  className="list__item-avatar-image"
261
266
  />
262
- ) ="list__item-avatar-placeholder">
267
+ ) : (
268
+ <div className="list__item-avatar-placeholder">
263
269
  {item.avatar}
264
270
  </div>
265
271
  )}
@@ -334,7 +340,7 @@ const ListItemComponent;
334
340
  };
335
341
 
336
342
  // Main List Component
337
- export const List= ({
343
+ export const List: React.FC<ListProps> = ({
338
344
  items,
339
345
  selectable = false,
340
346
  selectedKeys = [],
@@ -346,7 +352,8 @@ export const List= ({
346
352
  onSearchChange,
347
353
  filterable = false,
348
354
  filters = [],
349
- // onFiltersChange, // TODO= false,
355
+ // onFiltersChange, // TODO: Implement filter functionality
356
+ loading = false,
350
357
  error = null,
351
358
  emptyMessage = 'No items found',
352
359
  showDividers = true,
@@ -371,12 +378,12 @@ export const List= ({
371
378
  );
372
379
  }, [items, searchable, searchValue]);
373
380
 
374
- const handleSelectionChange = useCallback((itemKey, selected) => {
381
+ const handleSelectionChange = useCallback((itemKey: string, selected: boolean) => {
375
382
  if (!onSelectionChange) return;
376
383
 
377
384
  const newSelectedKeys = selected
378
385
  ? [...selectedKeys, itemKey]
379
- => key !== itemKey);
386
+ : selectedKeys.filter(key => key !== itemKey);
380
387
 
381
388
  onSelectionChange(newSelectedKeys);
382
389
  }, [selectedKeys, onSelectionChange]);
@@ -417,7 +424,8 @@ export const List= ({
417
424
  <div className="list__empty">
418
425
  {emptyMessage}
419
426
  </div>
420
- ) , index) => {
427
+ ) : (
428
+ filteredItems.map((item, index) => {
421
429
  const itemKey = item.key || item.id || index.toString();
422
430
  const isSelected = selectedKeys.includes(itemKey);
423
431
  const shouldShowDivider = showDividers && index < filteredItems.length - 1;