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

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 (306) 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 +0 -1
  89. package/dist/components/ui/navigation/index.js +0 -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 +0 -2
  109. package/dist/components/ui/overlay/index.js +0 -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 +157 -281
  223. package/dist/index.js +157 -281
  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/index.esm.js +1 -1
  256. package/dist/themes/index.js +1 -1
  257. package/dist/themes/inheritance.esm.js +35 -27
  258. package/dist/themes/inheritance.js +35 -27
  259. package/dist/themes/keyboard-navigation.esm.js +152 -123
  260. package/dist/themes/keyboard-navigation.js +152 -123
  261. package/dist/themes/motion-reduction.esm.js +193 -133
  262. package/dist/themes/motion-reduction.js +193 -133
  263. package/dist/themes/navigation.esm.js +146 -146
  264. package/dist/themes/navigation.js +146 -146
  265. package/dist/themes/screen-reader.esm.js +159 -94
  266. package/dist/themes/screen-reader.js +159 -94
  267. package/dist/themes/systemThemeDetector.esm.js +42 -34
  268. package/dist/themes/systemThemeDetector.js +42 -34
  269. package/dist/themes/themeCSSUpdater.esm.js +21 -9
  270. package/dist/themes/themeCSSUpdater.js +21 -9
  271. package/dist/themes/themePersistence.esm.js +68 -47
  272. package/dist/themes/themePersistence.js +68 -47
  273. package/dist/themes/themes/stan-design.esm.js +633 -468
  274. package/dist/themes/themes/stan-design.js +633 -468
  275. package/dist/themes/types.esm.js +301 -287
  276. package/dist/themes/types.js +301 -287
  277. package/dist/themes/useSystemTheme.esm.js +4 -4
  278. package/dist/themes/useSystemTheme.js +4 -4
  279. package/dist/themes/useTheme.esm.js +4 -4
  280. package/dist/themes/useTheme.js +4 -4
  281. package/dist/themes/validation.esm.js +128 -77
  282. package/dist/themes/validation.js +128 -77
  283. package/dist/tokens/index.esm.js +1 -2
  284. package/dist/tokens/index.js +1 -2
  285. package/dist/tokens/tokenExporter.esm.js +87 -61
  286. package/dist/tokens/tokenExporter.js +87 -61
  287. package/dist/tokens/tokenGenerator.esm.js +86 -77
  288. package/dist/tokens/tokenGenerator.js +86 -77
  289. package/dist/tokens/tokenManager.esm.js +64 -51
  290. package/dist/tokens/tokenManager.js +64 -51
  291. package/dist/tokens/tokenValidator.esm.js +193 -147
  292. package/dist/tokens/tokenValidator.js +193 -147
  293. package/dist/tokens/types.esm.js +49 -35
  294. package/dist/tokens/types.js +49 -35
  295. package/dist/utils/bundle-analyzer.esm.js +83 -65
  296. package/dist/utils/bundle-analyzer.js +83 -65
  297. package/dist/utils/bundle-splitting.esm.js +142 -117
  298. package/dist/utils/bundle-splitting.js +142 -117
  299. package/dist/utils/lazy-loading.esm.js +132 -106
  300. package/dist/utils/lazy-loading.js +132 -106
  301. package/dist/utils/performance-monitor.esm.js +170 -129
  302. package/dist/utils/performance-monitor.js +170 -129
  303. package/dist/utils/tree-shaking.esm.js +69 -61
  304. package/dist/utils/tree-shaking.js +69 -61
  305. package/package.json +1 -1
  306. package/src/index.ts +146 -146
@@ -9,19 +9,19 @@ import { ChevronLeftIcon, ChevronRightIcon } from '@heroicons/react/24/outline';
9
9
  import { PaginationProps, PaginationItem } from './types';
10
10
 
11
11
  // Simple icon components
12
- const ChevronDoubleLeftIcon}> = ({ className = '' }) => (
12
+ const ChevronDoubleLeftIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
13
13
  <svg className={className} fill="none" viewBox="0 0 24 24" stroke="currentColor">
14
14
  <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M11 19l-7-7 7-7m8 14l-7-7 7-7" />
15
15
  </svg>
16
16
  );
17
17
 
18
- const ChevronDoubleRightIcon}> = ({ className = '' }) => (
18
+ const ChevronDoubleRightIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
19
19
  <svg className={className} fill="none" viewBox="0 0 24 24" stroke="currentColor">
20
20
  <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M13 5l7 7-7 7m-8-14l7 7-7 7" />
21
21
  </svg>
22
22
  );
23
23
 
24
- export const Pagination= ({
24
+ export const Pagination: React.FC<PaginationProps> = ({
25
25
  currentPage = 1,
26
26
  totalPages = 1,
27
27
  totalItems,
@@ -41,29 +41,29 @@ export const Pagination= ({
41
41
  disabled = false,
42
42
  loading = false,
43
43
  className = '',
44
- 'data-testid'= 'pagination',
44
+ 'data-testid': testId = 'pagination',
45
45
  }) => {
46
46
  // Memoize pagination items to avoid unnecessary recalculations
47
- const paginationItems = useMemo(()] => {
48
- const items] = [];
47
+ const paginationItems = useMemo((): PaginationItem[] => {
48
+ const items: PaginationItem[] = [];
49
49
 
50
50
  if (showFirstLast) {
51
51
  items.push({
52
- type,
53
- page,
54
- disabled=== 1 || disabled,
55
- label,
56
- onClick) => onPageChange(1),
52
+ type: 'first',
53
+ page: 1,
54
+ disabled: currentPage === 1 || disabled,
55
+ label: 'First',
56
+ onClick: () => onPageChange(1),
57
57
  });
58
58
  }
59
59
 
60
60
  if (showPrevNext) {
61
61
  items.push({
62
- type,
63
- page,
64
- disabled=== 1 || disabled,
65
- label,
66
- onClick) => onPageChange(currentPage - 1),
62
+ type: 'previous',
63
+ page: currentPage - 1,
64
+ disabled: currentPage === 1 || disabled,
65
+ label: 'Previous',
66
+ onClick: () => onPageChange(currentPage - 1),
67
67
  });
68
68
  }
69
69
 
@@ -73,18 +73,18 @@ export const Pagination= ({
73
73
  pageNumbers.forEach((pageNum) => {
74
74
  if (pageNum === 'ellipsis') {
75
75
  items.push({
76
- type,
77
- label,
78
- disabled,
76
+ type: 'ellipsis',
77
+ label: '...',
78
+ disabled: true,
79
79
  });
80
80
  } else {
81
81
  items.push({
82
- type,
83
- page,
84
- active=== currentPage,
85
- disabled,
86
- label),
87
- onClick) => onPageChange(pageNum as number),
82
+ type: 'page',
83
+ page: pageNum as number,
84
+ active: pageNum === currentPage,
85
+ disabled: disabled,
86
+ label: pageNum.toString(),
87
+ onClick: () => onPageChange(pageNum as number),
88
88
  });
89
89
  }
90
90
  });
@@ -92,21 +92,21 @@ export const Pagination= ({
92
92
 
93
93
  if (showPrevNext) {
94
94
  items.push({
95
- type,
96
- page,
97
- disabled=== totalPages || disabled,
98
- label,
99
- onClick) => onPageChange(currentPage + 1),
95
+ type: 'next',
96
+ page: currentPage + 1,
97
+ disabled: currentPage === totalPages || disabled,
98
+ label: 'Next',
99
+ onClick: () => onPageChange(currentPage + 1),
100
100
  });
101
101
  }
102
102
 
103
103
  if (showFirstLast) {
104
104
  items.push({
105
- type,
106
- page,
107
- disabled=== totalPages || disabled,
108
- label,
109
- onClick) => onPageChange(totalPages),
105
+ type: 'last',
106
+ page: totalPages,
107
+ disabled: currentPage === totalPages || disabled,
108
+ label: 'Last',
109
+ onClick: () => onPageChange(totalPages),
110
110
  });
111
111
  }
112
112
 
@@ -115,16 +115,16 @@ export const Pagination= ({
115
115
 
116
116
 
117
117
 
118
- function generatePageNumbers(current, total, max))[] {
118
+ function generatePageNumbers(current: number, total: number, max: number): (number | 'ellipsis')[] {
119
119
  if (total <= max) {
120
- return Array.from({ length}, (_, i) => i + 1);
120
+ return Array.from({ length: total }, (_, i) => i + 1);
121
121
  }
122
122
 
123
123
  const half = Math.floor(max / 2);
124
124
  const start = Math.max(1, current - half);
125
125
  const end = Math.min(total, start + max - 1);
126
126
 
127
- const numbers)[] = [];
127
+ const numbers: (number | 'ellipsis')[] = [];
128
128
 
129
129
  if (start > 1) {
130
130
  numbers.push(1);
@@ -145,17 +145,23 @@ export const Pagination= ({
145
145
 
146
146
  const getSizeClasses = () => {
147
147
  switch (size) {
148
- case 'sm';
149
- case 'lg';
150
- default;
148
+ case 'sm':
149
+ return 'pagination__button--sm';
150
+ case 'lg':
151
+ return 'pagination__button--lg';
152
+ default: // md
153
+ return 'pagination__button--md';
151
154
  }
152
155
  };
153
156
 
154
157
  const getVariantClasses = () => {
155
158
  switch (variant) {
156
- case 'outlined';
157
- case 'minimal';
158
- default;
159
+ case 'outlined':
160
+ return 'pagination__button--outlined';
161
+ case 'minimal':
162
+ return 'pagination__button--minimal';
163
+ default: // default
164
+ return 'pagination__button--default';
159
165
  }
160
166
  };
161
167
 
@@ -163,7 +169,7 @@ export const Pagination= ({
163
169
  return 'pagination pagination--stan-design';
164
170
  };
165
171
 
166
- const getButtonClasses = (item) => {
172
+ const getButtonClasses = (item: PaginationItem) => {
167
173
  let classes = `pagination__button ${getSizeClasses()} ${getVariantClasses()}`;
168
174
 
169
175
  if (item.disabled) {
@@ -177,7 +183,7 @@ export const Pagination= ({
177
183
  return classes;
178
184
  };
179
185
 
180
- const handleItemsPerPageChange = (event) => {
186
+ const handleItemsPerPageChange = (event: React.ChangeEvent<HTMLSelectElement>) => {
181
187
  const newItemsPerPage = parseInt(event.target.value, 10);
182
188
  if (onItemsPerPageChange) {
183
189
  onItemsPerPageChange(newItemsPerPage);
@@ -195,7 +201,10 @@ export const Pagination= ({
195
201
  {showItemsPerPage && (
196
202
  <div className="pagination__items-per-page">
197
203
  <label htmlFor="items-per-page" className="pagination__label">
198
- Items per page="items-per-page"
204
+ Items per page:
205
+ </label>
206
+ <select
207
+ id="items-per-page"
199
208
  value={itemsPerPage}
200
209
  onChange={handleItemsPerPageChange}
201
210
  disabled={disabled || loading}
@@ -212,7 +221,7 @@ export const Pagination= ({
212
221
 
213
222
  {showTotal && totalItems !== undefined && (
214
223
  <div className="pagination__total">
215
- {totalLabel}="pagination__total-count">{totalItems.toLocaleString()}</span>
224
+ {totalLabel}: <span className="pagination__total-count">{totalItems.toLocaleString()}</span>
216
225
  </div>
217
226
  )}
218
227
  </div>
@@ -232,7 +241,10 @@ export const Pagination= ({
232
241
  );
233
242
  }
234
243
 
235
- const icon = item.type === 'first' ? <ChevronDoubleLeftIcon className="pagination__button-icon" /> === 'previous' ? <ChevronLeftIcon className="pagination__button-icon" /> === 'next' ? <ChevronRightIcon className="pagination__button-icon" /> === 'last' ? <ChevronDoubleRightIcon className="pagination__button-icon" /> ;
244
+ const icon = item.type === 'first' ? <ChevronDoubleLeftIcon className="pagination__button-icon" /> :
245
+ item.type === 'previous' ? <ChevronLeftIcon className="pagination__button-icon" /> :
246
+ item.type === 'next' ? <ChevronRightIcon className="pagination__button-icon" /> :
247
+ item.type === 'last' ? <ChevronDoubleRightIcon className="pagination__button-icon" /> : null;
236
248
 
237
249
  return (
238
250
  <button
@@ -241,7 +253,7 @@ export const Pagination= ({
241
253
  disabled={item.disabled}
242
254
  className={getButtonClasses(item)}
243
255
  aria-label={item.label}
244
- aria-current={item.active ? 'page' }
256
+ aria-current={item.active ? 'page' : undefined}
245
257
  >
246
258
  {icon || item.label}
247
259
  </button>
@@ -9,19 +9,19 @@ import { ChevronLeftIcon, ChevronRightIcon } from '@heroicons/react/24/outline';
9
9
  import { PaginationProps, PaginationItem } from './types';
10
10
 
11
11
  // Simple icon components
12
- const ChevronDoubleLeftIcon}> = ({ className = '' }) => (
12
+ const ChevronDoubleLeftIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
13
13
  <svg className={className} fill="none" viewBox="0 0 24 24" stroke="currentColor">
14
14
  <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M11 19l-7-7 7-7m8 14l-7-7 7-7" />
15
15
  </svg>
16
16
  );
17
17
 
18
- const ChevronDoubleRightIcon}> = ({ className = '' }) => (
18
+ const ChevronDoubleRightIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
19
19
  <svg className={className} fill="none" viewBox="0 0 24 24" stroke="currentColor">
20
20
  <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M13 5l7 7-7 7m-8-14l7 7-7 7" />
21
21
  </svg>
22
22
  );
23
23
 
24
- export const Pagination= ({
24
+ export const Pagination: React.FC<PaginationProps> = ({
25
25
  currentPage = 1,
26
26
  totalPages = 1,
27
27
  totalItems,
@@ -41,29 +41,29 @@ export const Pagination= ({
41
41
  disabled = false,
42
42
  loading = false,
43
43
  className = '',
44
- 'data-testid'= 'pagination',
44
+ 'data-testid': testId = 'pagination',
45
45
  }) => {
46
46
  // Memoize pagination items to avoid unnecessary recalculations
47
- const paginationItems = useMemo(()] => {
48
- const items] = [];
47
+ const paginationItems = useMemo((): PaginationItem[] => {
48
+ const items: PaginationItem[] = [];
49
49
 
50
50
  if (showFirstLast) {
51
51
  items.push({
52
- type,
53
- page,
54
- disabled=== 1 || disabled,
55
- label,
56
- onClick) => onPageChange(1),
52
+ type: 'first',
53
+ page: 1,
54
+ disabled: currentPage === 1 || disabled,
55
+ label: 'First',
56
+ onClick: () => onPageChange(1),
57
57
  });
58
58
  }
59
59
 
60
60
  if (showPrevNext) {
61
61
  items.push({
62
- type,
63
- page,
64
- disabled=== 1 || disabled,
65
- label,
66
- onClick) => onPageChange(currentPage - 1),
62
+ type: 'previous',
63
+ page: currentPage - 1,
64
+ disabled: currentPage === 1 || disabled,
65
+ label: 'Previous',
66
+ onClick: () => onPageChange(currentPage - 1),
67
67
  });
68
68
  }
69
69
 
@@ -73,18 +73,18 @@ export const Pagination= ({
73
73
  pageNumbers.forEach((pageNum) => {
74
74
  if (pageNum === 'ellipsis') {
75
75
  items.push({
76
- type,
77
- label,
78
- disabled,
76
+ type: 'ellipsis',
77
+ label: '...',
78
+ disabled: true,
79
79
  });
80
80
  } else {
81
81
  items.push({
82
- type,
83
- page,
84
- active=== currentPage,
85
- disabled,
86
- label),
87
- onClick) => onPageChange(pageNum as number),
82
+ type: 'page',
83
+ page: pageNum as number,
84
+ active: pageNum === currentPage,
85
+ disabled: disabled,
86
+ label: pageNum.toString(),
87
+ onClick: () => onPageChange(pageNum as number),
88
88
  });
89
89
  }
90
90
  });
@@ -92,21 +92,21 @@ export const Pagination= ({
92
92
 
93
93
  if (showPrevNext) {
94
94
  items.push({
95
- type,
96
- page,
97
- disabled=== totalPages || disabled,
98
- label,
99
- onClick) => onPageChange(currentPage + 1),
95
+ type: 'next',
96
+ page: currentPage + 1,
97
+ disabled: currentPage === totalPages || disabled,
98
+ label: 'Next',
99
+ onClick: () => onPageChange(currentPage + 1),
100
100
  });
101
101
  }
102
102
 
103
103
  if (showFirstLast) {
104
104
  items.push({
105
- type,
106
- page,
107
- disabled=== totalPages || disabled,
108
- label,
109
- onClick) => onPageChange(totalPages),
105
+ type: 'last',
106
+ page: totalPages,
107
+ disabled: currentPage === totalPages || disabled,
108
+ label: 'Last',
109
+ onClick: () => onPageChange(totalPages),
110
110
  });
111
111
  }
112
112
 
@@ -115,16 +115,16 @@ export const Pagination= ({
115
115
 
116
116
 
117
117
 
118
- function generatePageNumbers(current, total, max))[] {
118
+ function generatePageNumbers(current: number, total: number, max: number): (number | 'ellipsis')[] {
119
119
  if (total <= max) {
120
- return Array.from({ length}, (_, i) => i + 1);
120
+ return Array.from({ length: total }, (_, i) => i + 1);
121
121
  }
122
122
 
123
123
  const half = Math.floor(max / 2);
124
124
  const start = Math.max(1, current - half);
125
125
  const end = Math.min(total, start + max - 1);
126
126
 
127
- const numbers)[] = [];
127
+ const numbers: (number | 'ellipsis')[] = [];
128
128
 
129
129
  if (start > 1) {
130
130
  numbers.push(1);
@@ -145,17 +145,23 @@ export const Pagination= ({
145
145
 
146
146
  const getSizeClasses = () => {
147
147
  switch (size) {
148
- case 'sm';
149
- case 'lg';
150
- default;
148
+ case 'sm':
149
+ return 'pagination__button--sm';
150
+ case 'lg':
151
+ return 'pagination__button--lg';
152
+ default: // md
153
+ return 'pagination__button--md';
151
154
  }
152
155
  };
153
156
 
154
157
  const getVariantClasses = () => {
155
158
  switch (variant) {
156
- case 'outlined';
157
- case 'minimal';
158
- default;
159
+ case 'outlined':
160
+ return 'pagination__button--outlined';
161
+ case 'minimal':
162
+ return 'pagination__button--minimal';
163
+ default: // default
164
+ return 'pagination__button--default';
159
165
  }
160
166
  };
161
167
 
@@ -163,7 +169,7 @@ export const Pagination= ({
163
169
  return 'pagination pagination--stan-design';
164
170
  };
165
171
 
166
- const getButtonClasses = (item) => {
172
+ const getButtonClasses = (item: PaginationItem) => {
167
173
  let classes = `pagination__button ${getSizeClasses()} ${getVariantClasses()}`;
168
174
 
169
175
  if (item.disabled) {
@@ -177,7 +183,7 @@ export const Pagination= ({
177
183
  return classes;
178
184
  };
179
185
 
180
- const handleItemsPerPageChange = (event) => {
186
+ const handleItemsPerPageChange = (event: React.ChangeEvent<HTMLSelectElement>) => {
181
187
  const newItemsPerPage = parseInt(event.target.value, 10);
182
188
  if (onItemsPerPageChange) {
183
189
  onItemsPerPageChange(newItemsPerPage);
@@ -195,7 +201,10 @@ export const Pagination= ({
195
201
  {showItemsPerPage && (
196
202
  <div className="pagination__items-per-page">
197
203
  <label htmlFor="items-per-page" className="pagination__label">
198
- Items per page="items-per-page"
204
+ Items per page:
205
+ </label>
206
+ <select
207
+ id="items-per-page"
199
208
  value={itemsPerPage}
200
209
  onChange={handleItemsPerPageChange}
201
210
  disabled={disabled || loading}
@@ -212,7 +221,7 @@ export const Pagination= ({
212
221
 
213
222
  {showTotal && totalItems !== undefined && (
214
223
  <div className="pagination__total">
215
- {totalLabel}="pagination__total-count">{totalItems.toLocaleString()}</span>
224
+ {totalLabel}: <span className="pagination__total-count">{totalItems.toLocaleString()}</span>
216
225
  </div>
217
226
  )}
218
227
  </div>
@@ -232,7 +241,10 @@ export const Pagination= ({
232
241
  );
233
242
  }
234
243
 
235
- const icon = item.type === 'first' ? <ChevronDoubleLeftIcon className="pagination__button-icon" /> === 'previous' ? <ChevronLeftIcon className="pagination__button-icon" /> === 'next' ? <ChevronRightIcon className="pagination__button-icon" /> === 'last' ? <ChevronDoubleRightIcon className="pagination__button-icon" /> ;
244
+ const icon = item.type === 'first' ? <ChevronDoubleLeftIcon className="pagination__button-icon" /> :
245
+ item.type === 'previous' ? <ChevronLeftIcon className="pagination__button-icon" /> :
246
+ item.type === 'next' ? <ChevronRightIcon className="pagination__button-icon" /> :
247
+ item.type === 'last' ? <ChevronDoubleRightIcon className="pagination__button-icon" /> : null;
236
248
 
237
249
  return (
238
250
  <button
@@ -241,7 +253,7 @@ export const Pagination= ({
241
253
  disabled={item.disabled}
242
254
  className={getButtonClasses(item)}
243
255
  aria-label={item.label}
244
- aria-current={item.active ? 'page' }
256
+ aria-current={item.active ? 'page' : undefined}
245
257
  >
246
258
  {icon || item.label}
247
259
  </button>