@rakeyshgidwani/roger-ui-bank-theme-stan-design 0.1.4 → 0.1.5
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.
- package/CHANGELOG.md +1 -1
- package/dist/index.d.ts +131 -131
- package/dist/index.esm.js +148 -148
- package/dist/index.js +148 -148
- package/dist/styles.css +1 -1
- package/package.json +1 -1
- package/src/components/ui/accessibility-demo.tsx +271 -0
- package/src/components/ui/advanced-component-architecture-demo.tsx +916 -0
- package/src/components/ui/advanced-transition-system-demo.tsx +670 -0
- package/src/components/ui/advanced-transition-system.tsx +395 -0
- package/src/components/ui/animation/animated-container.tsx +166 -0
- package/src/components/ui/animation/index.ts +19 -0
- package/src/components/ui/animation/staggered-container.tsx +68 -0
- package/src/components/ui/animation-demo.tsx +250 -0
- package/src/components/ui/badge.tsx +33 -0
- package/src/components/ui/battery-conscious-animation-demo.tsx +568 -0
- package/src/components/ui/border-radius-shadow-demo.tsx +187 -0
- package/src/components/ui/button.tsx +36 -0
- package/src/components/ui/card.tsx +207 -0
- package/src/components/ui/checkbox.tsx +30 -0
- package/src/components/ui/color-preview.tsx +411 -0
- package/src/components/ui/data-display/chart.tsx +653 -0
- package/src/components/ui/data-display/data-grid-simple.tsx +76 -0
- package/src/components/ui/data-display/data-grid.tsx +680 -0
- package/src/components/ui/data-display/list.tsx +456 -0
- package/src/components/ui/data-display/table.tsx +482 -0
- package/src/components/ui/data-display/timeline.tsx +441 -0
- package/src/components/ui/data-display/tree.tsx +602 -0
- package/src/components/ui/data-display/types.ts +536 -0
- package/src/components/ui/enterprise-mobile-experience-demo.tsx +749 -0
- package/src/components/ui/enterprise-mobile-experience.tsx +464 -0
- package/src/components/ui/feedback/alert.tsx +157 -0
- package/src/components/ui/feedback/progress.tsx +292 -0
- package/src/components/ui/feedback/skeleton.tsx +185 -0
- package/src/components/ui/feedback/toast.tsx +280 -0
- package/src/components/ui/feedback/types.ts +125 -0
- package/src/components/ui/font-preview.tsx +288 -0
- package/src/components/ui/form-demo.tsx +553 -0
- package/src/components/ui/hardware-acceleration-demo.tsx +547 -0
- package/src/components/ui/input.tsx +35 -0
- package/src/components/ui/label.tsx +16 -0
- package/src/components/ui/layout-demo.tsx +367 -0
- package/src/components/ui/layouts/adaptive-layout.tsx +139 -0
- package/src/components/ui/layouts/desktop-layout.tsx +224 -0
- package/src/components/ui/layouts/index.ts +10 -0
- package/src/components/ui/layouts/mobile-layout.tsx +162 -0
- package/src/components/ui/layouts/tablet-layout.tsx +197 -0
- package/src/components/ui/mobile-form-validation.tsx +451 -0
- package/src/components/ui/mobile-input-demo.tsx +201 -0
- package/src/components/ui/mobile-input.tsx +281 -0
- package/src/components/ui/mobile-skeleton-loading-demo.tsx +638 -0
- package/src/components/ui/navigation/breadcrumb.tsx +158 -0
- package/src/components/ui/navigation/index.ts +36 -0
- package/src/components/ui/navigation/menu.tsx +374 -0
- package/src/components/ui/navigation/navigation-demo.tsx +324 -0
- package/src/components/ui/navigation/pagination.tsx +272 -0
- package/src/components/ui/navigation/sidebar.tsx +383 -0
- package/src/components/ui/navigation/stepper.tsx +303 -0
- package/src/components/ui/navigation/tabs.tsx +205 -0
- package/src/components/ui/navigation/types.ts +299 -0
- package/src/components/ui/overlay/backdrop.tsx +81 -0
- package/src/components/ui/overlay/focus-manager.tsx +143 -0
- package/src/components/ui/overlay/index.ts +36 -0
- package/src/components/ui/overlay/modal.tsx +270 -0
- package/src/components/ui/overlay/overlay-manager.tsx +110 -0
- package/src/components/ui/overlay/popover.tsx +462 -0
- package/src/components/ui/overlay/portal.tsx +79 -0
- package/src/components/ui/overlay/tooltip.tsx +303 -0
- package/src/components/ui/overlay/types.ts +196 -0
- package/src/components/ui/performance-demo.tsx +596 -0
- package/src/components/ui/semantic-input-system-demo.tsx +502 -0
- package/src/components/ui/semantic-input-system-demo.tsx.disabled +873 -0
- package/src/components/ui/tablet-layout.tsx +192 -0
- package/src/components/ui/theme-customizer.tsx +386 -0
- package/src/components/ui/theme-preview.tsx +310 -0
- package/src/components/ui/theme-switcher.tsx +264 -0
- package/src/components/ui/theme-toggle.tsx +38 -0
- package/src/components/ui/token-demo.tsx +195 -0
- package/src/components/ui/touch-demo.tsx +462 -0
- package/src/components/ui/touch-friendly-interface-demo.tsx +519 -0
- package/src/components/ui/touch-friendly-interface.tsx +296 -0
- package/src/hooks/index.ts +190 -0
- package/src/hooks/use-accessibility-support.ts +518 -0
- package/src/hooks/use-adaptive-layout.ts +289 -0
- package/src/hooks/use-advanced-patterns.ts +294 -0
- package/src/hooks/use-advanced-transition-system.ts +393 -0
- package/src/hooks/use-animation-profile.ts +288 -0
- package/src/hooks/use-battery-animations.ts +384 -0
- package/src/hooks/use-battery-conscious-loading.ts +475 -0
- package/src/hooks/use-battery-optimization.ts +330 -0
- package/src/hooks/use-battery-status.ts +299 -0
- package/src/hooks/use-component-performance.ts +344 -0
- package/src/hooks/use-device-loading-states.ts +459 -0
- package/src/hooks/use-device.tsx +110 -0
- package/src/hooks/use-enterprise-mobile-experience.ts +488 -0
- package/src/hooks/use-form-feedback.ts +403 -0
- package/src/hooks/use-form-performance.ts +513 -0
- package/src/hooks/use-frame-rate.ts +251 -0
- package/src/hooks/use-gestures.ts +338 -0
- package/src/hooks/use-hardware-acceleration.ts +341 -0
- package/src/hooks/use-input-accessibility.ts +455 -0
- package/src/hooks/use-input-performance.ts +506 -0
- package/src/hooks/use-layout-performance.ts +319 -0
- package/src/hooks/use-loading-accessibility.ts +535 -0
- package/src/hooks/use-loading-performance.ts +473 -0
- package/src/hooks/use-memory-usage.ts +287 -0
- package/src/hooks/use-mobile-form-layout.ts +464 -0
- package/src/hooks/use-mobile-form-validation.ts +518 -0
- package/src/hooks/use-mobile-keyboard-optimization.ts +472 -0
- package/src/hooks/use-mobile-layout.ts +302 -0
- package/src/hooks/use-mobile-optimization.ts +406 -0
- package/src/hooks/use-mobile-skeleton.ts +402 -0
- package/src/hooks/use-mobile-touch.ts +414 -0
- package/src/hooks/use-performance-throttling.ts +348 -0
- package/src/hooks/use-performance.ts +316 -0
- package/src/hooks/use-reusable-architecture.ts +414 -0
- package/src/hooks/use-semantic-input-types.ts +357 -0
- package/src/hooks/use-semantic-input.ts +565 -0
- package/src/hooks/use-tablet-layout.ts +384 -0
- package/src/hooks/use-touch-friendly-input.ts +524 -0
- package/src/hooks/use-touch-friendly-interface.ts +331 -0
- package/src/hooks/use-touch-optimization.ts +375 -0
- package/src/index.ts +279 -279
- package/src/lib/utils.ts +6 -0
- package/src/themes/README.md +272 -0
- package/src/themes/ThemeContext.tsx +31 -0
- package/src/themes/ThemeProvider.tsx +232 -0
- package/src/themes/accessibility/index.ts +27 -0
- package/src/themes/accessibility.ts +259 -0
- package/src/themes/aria-patterns.ts +420 -0
- package/src/themes/base-themes.ts +55 -0
- package/src/themes/colorManager.ts +380 -0
- package/src/themes/examples/dark-theme.ts +154 -0
- package/src/themes/examples/minimal-theme.ts +108 -0
- package/src/themes/focus-management.ts +701 -0
- package/src/themes/fontLoader.ts +201 -0
- package/src/themes/high-contrast.ts +621 -0
- package/src/themes/index.ts +19 -0
- package/src/themes/inheritance.ts +227 -0
- package/src/themes/keyboard-navigation.ts +550 -0
- package/src/themes/motion-reduction.ts +662 -0
- package/src/themes/navigation.ts +238 -0
- package/src/themes/screen-reader.ts +645 -0
- package/src/themes/systemThemeDetector.ts +182 -0
- package/src/themes/themeCSSUpdater.ts +262 -0
- package/src/themes/themePersistence.ts +238 -0
- package/src/themes/themes/default.ts +586 -0
- package/src/themes/themes/harvey.ts +554 -0
- package/src/themes/themes/stan-design.ts +683 -0
- package/src/themes/types.ts +460 -0
- package/src/themes/useSystemTheme.ts +48 -0
- package/src/themes/useTheme.ts +87 -0
- package/src/themes/validation.ts +462 -0
- package/src/tokens/index.ts +34 -0
- package/src/tokens/tokenExporter.ts +397 -0
- package/src/tokens/tokenGenerator.ts +276 -0
- package/src/tokens/tokenManager.ts +248 -0
- package/src/tokens/tokenValidator.ts +543 -0
- package/src/tokens/types.ts +78 -0
- package/src/utils/bundle-analyzer.ts +260 -0
- package/src/utils/bundle-splitting.ts +483 -0
- package/src/utils/lazy-loading.ts +441 -0
- package/src/utils/performance-monitor.ts +513 -0
- package/src/utils/tree-shaking.ts +274 -0
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
// Bundle analysis and optimization utilities
|
|
2
|
+
export interface BundleMetrics {
|
|
3
|
+
totalSize: number;
|
|
4
|
+
gzippedSize: number;
|
|
5
|
+
moduleCount: number;
|
|
6
|
+
chunkCount: number;
|
|
7
|
+
largestChunks: Array<{
|
|
8
|
+
name: string;
|
|
9
|
+
size: number;
|
|
10
|
+
gzippedSize: number;
|
|
11
|
+
modules: string[];
|
|
12
|
+
}>;
|
|
13
|
+
duplicateModules: string[];
|
|
14
|
+
unusedExports: string[];
|
|
15
|
+
optimizationScore: number;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface PerformanceMetrics {
|
|
19
|
+
buildTime: number;
|
|
20
|
+
themeSwitchTime: number;
|
|
21
|
+
componentRenderTime: number;
|
|
22
|
+
memoryUsage: number;
|
|
23
|
+
bundleLoadTime: number;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export class BundleAnalyzer {
|
|
27
|
+
private metrics: BundleMetrics;
|
|
28
|
+
private performanceMetrics: PerformanceMetrics;
|
|
29
|
+
|
|
30
|
+
constructor() {
|
|
31
|
+
this.metrics = {
|
|
32
|
+
totalSize: 0,
|
|
33
|
+
gzippedSize: 0,
|
|
34
|
+
moduleCount: 0,
|
|
35
|
+
chunkCount: 0,
|
|
36
|
+
largestChunks: [],
|
|
37
|
+
duplicateModules: [],
|
|
38
|
+
unusedExports: [],
|
|
39
|
+
optimizationScore: 0
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
this.performanceMetrics = {
|
|
43
|
+
buildTime: 0,
|
|
44
|
+
themeSwitchTime: 0,
|
|
45
|
+
componentRenderTime: 0,
|
|
46
|
+
memoryUsage: 0,
|
|
47
|
+
bundleLoadTime: 0
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Analyze bundle size from build output
|
|
52
|
+
analyzeBundleSize(buildOutput: string): BundleMetrics {
|
|
53
|
+
const lines = buildOutput.split('\n');
|
|
54
|
+
let totalSize = 0;
|
|
55
|
+
let gzippedSize = 0;
|
|
56
|
+
const chunks: Array<{ name: string; size: number; gzippedSize: number }> = [];
|
|
57
|
+
|
|
58
|
+
// Parse build output for size information
|
|
59
|
+
lines.forEach(line => {
|
|
60
|
+
if (line.includes('dist/assets/') && line.includes('kB')) {
|
|
61
|
+
// Updated regex to match Vite's output format more accurately
|
|
62
|
+
const match = line.match(/dist\/assets\/([^.]+)\.[^.]+\.([^.]+)\s+(\d+\.\d+)\s+kB\s+\│\s+gzip:\s+(\d+\.\d+)\s+kB/);
|
|
63
|
+
if (match) {
|
|
64
|
+
const [, name, ext, size, gzip] = match;
|
|
65
|
+
const sizeKB = parseFloat(size);
|
|
66
|
+
const gzipKB = parseFloat(gzip);
|
|
67
|
+
|
|
68
|
+
totalSize += sizeKB;
|
|
69
|
+
gzippedSize += gzipKB;
|
|
70
|
+
|
|
71
|
+
chunks.push({
|
|
72
|
+
name: `${name}.${ext}`,
|
|
73
|
+
size: sizeKB,
|
|
74
|
+
gzippedSize: gzipKB
|
|
75
|
+
});
|
|
76
|
+
} else {
|
|
77
|
+
// Fallback: try to parse just the size information
|
|
78
|
+
const sizeMatch = line.match(/(\d+\.\d+)\s+kB/);
|
|
79
|
+
if (sizeMatch) {
|
|
80
|
+
const sizeKB = parseFloat(sizeMatch[1]);
|
|
81
|
+
totalSize += sizeKB;
|
|
82
|
+
gzippedSize += sizeKB * 0.3; // Estimate gzip size as 30% of original
|
|
83
|
+
|
|
84
|
+
chunks.push({
|
|
85
|
+
name: 'unknown',
|
|
86
|
+
size: sizeKB,
|
|
87
|
+
gzippedSize: sizeKB * 0.3
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
// Sort chunks by size
|
|
95
|
+
chunks.sort((a, b) => b.size - a.size);
|
|
96
|
+
|
|
97
|
+
this.metrics = {
|
|
98
|
+
totalSize,
|
|
99
|
+
gzippedSize,
|
|
100
|
+
moduleCount: this.estimateModuleCount(totalSize),
|
|
101
|
+
chunkCount: chunks.length,
|
|
102
|
+
largestChunks: chunks.slice(0, 5).map(chunk => ({
|
|
103
|
+
...chunk,
|
|
104
|
+
modules: this.estimateModulesForChunk(chunk.name)
|
|
105
|
+
})),
|
|
106
|
+
duplicateModules: this.detectDuplicateModules(),
|
|
107
|
+
unusedExports: this.detectUnusedExports(),
|
|
108
|
+
optimizationScore: this.calculateOptimizationScore()
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
return this.metrics;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Estimate module count based on bundle size
|
|
115
|
+
private estimateModuleCount(bundleSizeKB: number): number {
|
|
116
|
+
// Rough estimation: average module size is ~2KB
|
|
117
|
+
return Math.round(bundleSizeKB / 2);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Estimate modules for a specific chunk
|
|
121
|
+
private estimateModulesForChunk(chunkName: string): string[] {
|
|
122
|
+
// This would be more accurate with actual webpack/vite analysis
|
|
123
|
+
// For now, provide reasonable estimates based on chunk names
|
|
124
|
+
if (chunkName.includes('index')) {
|
|
125
|
+
return ['main', 'themes', 'components', 'utils'];
|
|
126
|
+
} else if (chunkName.includes('vendor')) {
|
|
127
|
+
return ['react', 'react-dom', 'lodash'];
|
|
128
|
+
} else if (chunkName.includes('theme')) {
|
|
129
|
+
return ['theme-provider', 'theme-switcher', 'theme-customizer'];
|
|
130
|
+
}
|
|
131
|
+
return ['unknown'];
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Detect duplicate modules (simplified)
|
|
135
|
+
private detectDuplicateModules(): string[] {
|
|
136
|
+
// This would require actual bundle analysis
|
|
137
|
+
// For now, return common duplicates
|
|
138
|
+
return ['react', 'react-dom'];
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Detect unused exports (simplified)
|
|
142
|
+
private detectUnusedExports(): string[] {
|
|
143
|
+
// This would require actual tree-shaking analysis
|
|
144
|
+
// For now, return potential unused exports
|
|
145
|
+
return ['legacy-theme', 'deprecated-utils'];
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Calculate optimization score (0-100)
|
|
149
|
+
private calculateOptimizationScore(): number {
|
|
150
|
+
let score = 100;
|
|
151
|
+
|
|
152
|
+
// Penalize large bundle size
|
|
153
|
+
if (this.metrics.totalSize > 500) score -= 20;
|
|
154
|
+
if (this.metrics.totalSize > 1000) score -= 30;
|
|
155
|
+
|
|
156
|
+
// Penalize many chunks
|
|
157
|
+
if (this.metrics.chunkCount > 10) score -= 15;
|
|
158
|
+
|
|
159
|
+
// Penalize duplicate modules
|
|
160
|
+
score -= this.metrics.duplicateModules.length * 5;
|
|
161
|
+
|
|
162
|
+
// Penalize unused exports
|
|
163
|
+
score -= this.metrics.unusedExports.length * 3;
|
|
164
|
+
|
|
165
|
+
return Math.max(0, score);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// Get current metrics
|
|
169
|
+
getMetrics(): BundleMetrics {
|
|
170
|
+
return { ...this.metrics };
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// Get performance metrics
|
|
174
|
+
getPerformanceMetrics(): PerformanceMetrics {
|
|
175
|
+
return { ...this.performanceMetrics };
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// Measure build time
|
|
179
|
+
measureBuildTime(startTime: number): void {
|
|
180
|
+
this.performanceMetrics.buildTime = Date.now() - startTime;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Measure theme switch performance
|
|
184
|
+
measureThemeSwitch(callback: () => void): number {
|
|
185
|
+
const startTime = performance.now();
|
|
186
|
+
callback();
|
|
187
|
+
const endTime = performance.now();
|
|
188
|
+
const duration = endTime - startTime;
|
|
189
|
+
this.performanceMetrics.themeSwitchTime = duration;
|
|
190
|
+
return duration;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Measure component render performance
|
|
194
|
+
measureComponentRender(callback: () => void): number {
|
|
195
|
+
const startTime = performance.now();
|
|
196
|
+
callback();
|
|
197
|
+
const endTime = performance.now();
|
|
198
|
+
const duration = endTime - startTime;
|
|
199
|
+
this.performanceMetrics.componentRenderTime = duration;
|
|
200
|
+
return duration;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// Get memory usage (if available)
|
|
204
|
+
getMemoryUsage(): number {
|
|
205
|
+
if ('memory' in performance) {
|
|
206
|
+
const memory = (performance as any).memory;
|
|
207
|
+
this.performanceMetrics.memoryUsage = memory.usedJSHeapSize / 1024 / 1024; // MB
|
|
208
|
+
return this.performanceMetrics.memoryUsage;
|
|
209
|
+
}
|
|
210
|
+
return 0;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// Generate optimization recommendations
|
|
214
|
+
generateRecommendations(): string[] {
|
|
215
|
+
const recommendations: string[] = [];
|
|
216
|
+
|
|
217
|
+
if (this.metrics.totalSize > 500) {
|
|
218
|
+
recommendations.push('Bundle size is large. Consider code splitting and lazy loading.');
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
if (this.metrics.chunkCount > 10) {
|
|
222
|
+
recommendations.push('Too many chunks. Consider consolidating smaller chunks.');
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
if (this.metrics.duplicateModules.length > 0) {
|
|
226
|
+
recommendations.push('Duplicate modules detected. Check for multiple versions of the same package.');
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
if (this.metrics.unusedExports.length > 0) {
|
|
230
|
+
recommendations.push('Unused exports detected. Enable tree-shaking and remove dead code.');
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
if (this.performanceMetrics.themeSwitchTime > 100) {
|
|
234
|
+
recommendations.push('Theme switching is slow. Optimize theme application logic.');
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
if (this.performanceMetrics.componentRenderTime > 50) {
|
|
238
|
+
recommendations.push('Component rendering is slow. Consider memoization and optimization.');
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
if (recommendations.length === 0) {
|
|
242
|
+
recommendations.push('Bundle is well-optimized. No immediate actions required.');
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
return recommendations;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// Export metrics for external analysis
|
|
249
|
+
exportMetrics(): string {
|
|
250
|
+
return JSON.stringify({
|
|
251
|
+
bundle: this.metrics,
|
|
252
|
+
performance: this.performanceMetrics,
|
|
253
|
+
recommendations: this.generateRecommendations(),
|
|
254
|
+
timestamp: new Date().toISOString()
|
|
255
|
+
}, null, 2);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// Create and export default instance
|
|
260
|
+
export const bundleAnalyzer = new BundleAnalyzer();
|