@rakeyshgidwani/roger-ui-bank-theme-stan-design 0.2.10 → 0.2.16
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/components/ui/accessibility-demo.esm.js +80 -258
- package/dist/components/ui/accessibility-demo.js +80 -258
- package/dist/components/ui/advanced-component-architecture-demo.esm.js +256 -916
- package/dist/components/ui/advanced-component-architecture-demo.js +256 -916
- package/dist/components/ui/advanced-transition-system-demo.esm.js +59 -670
- package/dist/components/ui/advanced-transition-system-demo.js +59 -670
- package/dist/components/ui/advanced-transition-system.esm.js +194 -378
- package/dist/components/ui/advanced-transition-system.js +194 -378
- package/dist/components/ui/animation/animated-container.esm.js +98 -159
- package/dist/components/ui/animation/animated-container.js +98 -159
- package/dist/components/ui/animation/index.esm.js +3 -18
- package/dist/components/ui/animation/index.js +3 -18
- package/dist/components/ui/animation/staggered-container.esm.js +37 -68
- package/dist/components/ui/animation/staggered-container.js +37 -68
- package/dist/components/ui/animation-demo.esm.js +30 -250
- package/dist/components/ui/animation-demo.js +30 -250
- package/dist/components/ui/badge.esm.js +15 -28
- package/dist/components/ui/badge.js +15 -28
- package/dist/components/ui/battery-conscious-animation-demo.esm.js +136 -565
- package/dist/components/ui/battery-conscious-animation-demo.js +136 -565
- package/dist/components/ui/border-radius-shadow-demo.esm.js +3 -184
- package/dist/components/ui/border-radius-shadow-demo.js +3 -184
- package/dist/components/ui/button.esm.js +14 -33
- package/dist/components/ui/button.js +14 -33
- package/dist/components/ui/card.esm.js +74 -188
- package/dist/components/ui/card.js +74 -188
- package/dist/components/ui/checkbox.esm.js +11 -30
- package/dist/components/ui/checkbox.js +11 -30
- package/dist/components/ui/color-preview.esm.js +50 -405
- package/dist/components/ui/color-preview.js +50 -405
- package/dist/components/ui/data-display/chart.esm.js +210 -632
- package/dist/components/ui/data-display/chart.js +210 -632
- package/dist/components/ui/data-display/data-grid-simple.esm.js +16 -74
- package/dist/components/ui/data-display/data-grid-simple.js +16 -74
- package/dist/components/ui/data-display/data-grid.esm.js +173 -661
- package/dist/components/ui/data-display/data-grid.js +173 -661
- package/dist/components/ui/data-display/list.esm.js +88 -446
- package/dist/components/ui/data-display/list.js +88 -446
- package/dist/components/ui/data-display/table.esm.js +109 -468
- package/dist/components/ui/data-display/table.js +109 -468
- package/dist/components/ui/data-display/timeline.esm.js +92 -431
- package/dist/components/ui/data-display/timeline.js +92 -431
- package/dist/components/ui/data-display/tree.esm.js +211 -585
- package/dist/components/ui/data-display/tree.js +211 -585
- package/dist/components/ui/data-display/types.esm.js +1 -530
- package/dist/components/ui/data-display/types.js +1 -530
- package/dist/components/ui/enterprise-mobile-experience-demo.esm.js +76 -749
- package/dist/components/ui/enterprise-mobile-experience-demo.js +76 -749
- package/dist/components/ui/enterprise-mobile-experience.esm.js +152 -460
- package/dist/components/ui/enterprise-mobile-experience.js +152 -460
- package/dist/components/ui/feedback/alert.esm.js +40 -148
- package/dist/components/ui/feedback/alert.js +40 -148
- package/dist/components/ui/feedback/progress.esm.js +74 -278
- package/dist/components/ui/feedback/progress.js +74 -278
- package/dist/components/ui/feedback/skeleton.esm.js +64 -173
- package/dist/components/ui/feedback/skeleton.js +64 -173
- package/dist/components/ui/feedback/toast.esm.js +86 -225
- package/dist/components/ui/feedback/toast.js +86 -225
- package/dist/components/ui/feedback/types.esm.js +1 -125
- package/dist/components/ui/feedback/types.js +1 -125
- package/dist/components/ui/font-preview.esm.js +56 -283
- package/dist/components/ui/font-preview.js +56 -283
- package/dist/components/ui/form-demo.esm.js +191 -553
- package/dist/components/ui/form-demo.js +191 -553
- package/dist/components/ui/hardware-acceleration-demo.esm.js +103 -544
- package/dist/components/ui/hardware-acceleration-demo.js +103 -544
- package/dist/components/ui/input.esm.js +13 -32
- package/dist/components/ui/input.js +13 -32
- package/dist/components/ui/label.esm.js +6 -16
- package/dist/components/ui/label.js +6 -16
- package/dist/components/ui/layout-demo.esm.js +76 -367
- package/dist/components/ui/layout-demo.js +76 -367
- package/dist/components/ui/layouts/adaptive-layout.esm.js +60 -139
- package/dist/components/ui/layouts/adaptive-layout.js +60 -139
- package/dist/components/ui/layouts/desktop-layout.esm.js +39 -224
- package/dist/components/ui/layouts/desktop-layout.js +39 -224
- package/dist/components/ui/layouts/index.esm.js +4 -10
- package/dist/components/ui/layouts/index.js +4 -10
- package/dist/components/ui/layouts/mobile-layout.esm.js +49 -162
- package/dist/components/ui/layouts/mobile-layout.js +49 -162
- package/dist/components/ui/layouts/tablet-layout.esm.js +53 -197
- package/dist/components/ui/layouts/tablet-layout.js +53 -197
- package/dist/components/ui/mobile-form-validation.esm.js +185 -420
- package/dist/components/ui/mobile-form-validation.js +185 -420
- package/dist/components/ui/mobile-input-demo.esm.js +11 -198
- package/dist/components/ui/mobile-input-demo.js +11 -198
- package/dist/components/ui/mobile-input.esm.js +187 -270
- package/dist/components/ui/mobile-input.js +187 -270
- package/dist/components/ui/mobile-skeleton-loading-demo.esm.js +144 -638
- package/dist/components/ui/mobile-skeleton-loading-demo.js +144 -638
- package/dist/components/ui/navigation/breadcrumb.esm.js +51 -154
- package/dist/components/ui/navigation/breadcrumb.js +51 -154
- package/dist/components/ui/navigation/index.esm.js +0 -26
- package/dist/components/ui/navigation/index.js +0 -26
- package/dist/components/ui/navigation/menu.esm.js +178 -365
- package/dist/components/ui/navigation/menu.js +178 -365
- package/dist/components/ui/navigation/navigation-demo.esm.js +130 -315
- package/dist/components/ui/navigation/navigation-demo.js +130 -315
- package/dist/components/ui/navigation/pagination.esm.js +142 -264
- package/dist/components/ui/navigation/pagination.js +142 -264
- package/dist/components/ui/navigation/sidebar.esm.js +156 -368
- package/dist/components/ui/navigation/sidebar.js +156 -368
- package/dist/components/ui/navigation/stepper.esm.js +131 -295
- package/dist/components/ui/navigation/stepper.js +131 -295
- package/dist/components/ui/navigation/tabs.esm.js +89 -198
- package/dist/components/ui/navigation/tabs.js +89 -198
- package/dist/components/ui/navigation/types.esm.js +1 -295
- package/dist/components/ui/navigation/types.js +1 -295
- package/dist/components/ui/overlay/backdrop.esm.js +39 -78
- package/dist/components/ui/overlay/backdrop.js +39 -78
- package/dist/components/ui/overlay/focus-manager.esm.js +96 -140
- package/dist/components/ui/overlay/focus-manager.js +96 -140
- package/dist/components/ui/overlay/index.esm.js +0 -27
- package/dist/components/ui/overlay/index.js +0 -27
- package/dist/components/ui/overlay/modal.esm.js +94 -249
- package/dist/components/ui/overlay/modal.js +94 -249
- package/dist/components/ui/overlay/overlay-manager.esm.js +60 -100
- package/dist/components/ui/overlay/overlay-manager.js +60 -100
- package/dist/components/ui/overlay/popover.esm.js +258 -438
- package/dist/components/ui/overlay/popover.js +258 -438
- package/dist/components/ui/overlay/portal.esm.js +45 -74
- package/dist/components/ui/overlay/portal.js +45 -74
- package/dist/components/ui/overlay/tooltip.esm.js +202 -288
- package/dist/components/ui/overlay/tooltip.js +202 -288
- package/dist/components/ui/overlay/types.esm.js +1 -196
- package/dist/components/ui/overlay/types.js +1 -196
- package/dist/components/ui/performance-demo.esm.js +110 -596
- package/dist/components/ui/performance-demo.js +110 -596
- package/dist/components/ui/semantic-input-system-demo.esm.js +87 -501
- package/dist/components/ui/semantic-input-system-demo.js +87 -501
- package/dist/components/ui/theme-customizer.esm.js +123 -371
- package/dist/components/ui/theme-customizer.js +123 -371
- package/dist/components/ui/theme-preview.esm.js +44 -306
- package/dist/components/ui/theme-preview.js +44 -306
- package/dist/components/ui/theme-switcher.esm.js +79 -258
- package/dist/components/ui/theme-switcher.js +79 -258
- package/dist/components/ui/theme-toggle.esm.js +22 -35
- package/dist/components/ui/theme-toggle.js +22 -35
- package/dist/components/ui/token-demo.esm.js +42 -189
- package/dist/components/ui/token-demo.js +42 -189
- package/dist/components/ui/touch-demo.esm.js +96 -462
- package/dist/components/ui/touch-demo.js +96 -462
- package/dist/components/ui/touch-friendly-interface-demo.esm.js +63 -519
- package/dist/components/ui/touch-friendly-interface-demo.js +63 -519
- package/dist/components/ui/touch-friendly-interface.esm.js +103 -281
- package/dist/components/ui/touch-friendly-interface.js +103 -281
- package/dist/hooks/index.esm.js +23 -181
- package/dist/hooks/index.js +23 -181
- package/dist/hooks/use-accessibility-support.esm.js +377 -518
- package/dist/hooks/use-accessibility-support.js +377 -518
- package/dist/hooks/use-adaptive-layout.esm.js +212 -287
- package/dist/hooks/use-adaptive-layout.js +212 -287
- package/dist/hooks/use-advanced-patterns.esm.js +185 -293
- package/dist/hooks/use-advanced-patterns.js +185 -293
- package/dist/hooks/use-advanced-transition-system.esm.js +286 -392
- package/dist/hooks/use-advanced-transition-system.js +286 -392
- package/dist/hooks/use-animation-profile.esm.js +221 -283
- package/dist/hooks/use-animation-profile.js +221 -283
- package/dist/hooks/use-battery-animations.esm.js +310 -384
- package/dist/hooks/use-battery-animations.js +310 -384
- package/dist/hooks/use-battery-conscious-loading.esm.js +374 -468
- package/dist/hooks/use-battery-conscious-loading.js +374 -468
- package/dist/hooks/use-battery-optimization.esm.js +267 -329
- package/dist/hooks/use-battery-optimization.js +267 -329
- package/dist/hooks/use-battery-status.esm.js +213 -293
- package/dist/hooks/use-battery-status.js +213 -293
- package/dist/hooks/use-component-performance.esm.js +235 -341
- package/dist/hooks/use-component-performance.js +235 -341
- package/dist/hooks/use-device-loading-states.esm.js +356 -457
- package/dist/hooks/use-device-loading-states.js +356 -457
- package/dist/hooks/use-device.esm.js +77 -102
- package/dist/hooks/use-device.js +77 -102
- package/dist/hooks/use-enterprise-mobile-experience.esm.js +349 -487
- package/dist/hooks/use-enterprise-mobile-experience.js +349 -487
- package/dist/hooks/use-form-feedback.esm.js +313 -398
- package/dist/hooks/use-form-feedback.js +313 -398
- package/dist/hooks/use-form-performance.esm.js +407 -500
- package/dist/hooks/use-form-performance.js +407 -500
- package/dist/hooks/use-frame-rate.esm.js +178 -251
- package/dist/hooks/use-frame-rate.js +178 -251
- package/dist/hooks/use-gestures.esm.js +230 -332
- package/dist/hooks/use-gestures.js +230 -332
- package/dist/hooks/use-hardware-acceleration.esm.js +246 -339
- package/dist/hooks/use-hardware-acceleration.js +246 -339
- package/dist/hooks/use-input-accessibility.esm.js +350 -454
- package/dist/hooks/use-input-accessibility.js +350 -454
- package/dist/hooks/use-input-performance.esm.js +419 -502
- package/dist/hooks/use-input-performance.js +419 -502
- package/dist/hooks/use-layout-performance.esm.js +233 -319
- package/dist/hooks/use-layout-performance.js +233 -319
- package/dist/hooks/use-loading-accessibility.esm.js +421 -531
- package/dist/hooks/use-loading-accessibility.js +421 -531
- package/dist/hooks/use-loading-performance.esm.js +398 -469
- package/dist/hooks/use-loading-performance.js +398 -469
- package/dist/hooks/use-memory-usage.esm.js +211 -287
- package/dist/hooks/use-memory-usage.js +211 -287
- package/dist/hooks/use-mobile-form-layout.esm.js +365 -458
- package/dist/hooks/use-mobile-form-layout.js +365 -458
- package/dist/hooks/use-mobile-form-validation.esm.js +384 -497
- package/dist/hooks/use-mobile-form-validation.js +384 -497
- package/dist/hooks/use-mobile-keyboard-optimization.esm.js +354 -468
- package/dist/hooks/use-mobile-keyboard-optimization.js +354 -468
- package/dist/hooks/use-mobile-layout.esm.js +207 -294
- package/dist/hooks/use-mobile-layout.js +207 -294
- package/dist/hooks/use-mobile-optimization.esm.js +308 -404
- package/dist/hooks/use-mobile-optimization.js +308 -404
- package/dist/hooks/use-mobile-skeleton.esm.js +300 -402
- package/dist/hooks/use-mobile-skeleton.js +300 -402
- package/dist/hooks/use-mobile-touch.esm.js +314 -412
- package/dist/hooks/use-mobile-touch.js +314 -412
- package/dist/hooks/use-performance-throttling.esm.js +276 -344
- package/dist/hooks/use-performance-throttling.js +276 -344
- package/dist/hooks/use-performance.esm.js +216 -313
- package/dist/hooks/use-performance.js +216 -313
- package/dist/hooks/use-reusable-architecture.esm.js +255 -408
- package/dist/hooks/use-reusable-architecture.js +255 -408
- package/dist/hooks/use-semantic-input-types.esm.js +290 -356
- package/dist/hooks/use-semantic-input-types.js +290 -356
- package/dist/hooks/use-semantic-input.esm.js +446 -549
- package/dist/hooks/use-semantic-input.js +446 -549
- package/dist/hooks/use-tablet-layout.esm.js +279 -384
- package/dist/hooks/use-tablet-layout.js +279 -384
- package/dist/hooks/use-touch-friendly-input.esm.js +401 -519
- package/dist/hooks/use-touch-friendly-input.js +401 -519
- package/dist/hooks/use-touch-friendly-interface.esm.js +242 -331
- package/dist/hooks/use-touch-friendly-interface.js +242 -331
- package/dist/hooks/use-touch-optimization.esm.js +288 -370
- package/dist/hooks/use-touch-optimization.js +288 -370
- package/dist/index.esm.js +150 -294
- package/dist/index.js +150 -294
- package/dist/lib/utils.esm.js +4 -5
- package/dist/lib/utils.js +4 -5
- package/dist/plugins/theme-css-generator.esm.js +292 -346
- package/dist/plugins/theme-css-generator.js +292 -346
- package/dist/provider.esm.js +3 -19
- package/dist/provider.js +3 -19
- package/dist/styles/layers/validation.esm.js +275 -0
- package/dist/styles/layers/validation.js +275 -0
- package/dist/styles.css +1 -1
- package/dist/theme.esm.js +654 -658
- package/dist/theme.js +654 -658
- package/dist/themes/ThemeContext.esm.js +1 -27
- package/dist/themes/ThemeContext.js +1 -27
- package/dist/themes/ThemeProvider.esm.js +191 -223
- package/dist/themes/ThemeProvider.js +191 -223
- package/dist/themes/accessibility/index.esm.js +0 -4
- package/dist/themes/accessibility/index.js +0 -4
- package/dist/themes/accessibility.esm.js +175 -240
- package/dist/themes/accessibility.js +175 -240
- package/dist/themes/aria-patterns.esm.js +345 -401
- package/dist/themes/aria-patterns.js +345 -401
- package/dist/themes/base-themes.esm.js +15 -24
- package/dist/themes/base-themes.js +15 -24
- package/dist/themes/colorManager.esm.js +293 -357
- package/dist/themes/colorManager.js +293 -357
- package/dist/themes/examples/dark-theme.esm.js +129 -133
- package/dist/themes/examples/dark-theme.js +129 -133
- package/dist/themes/examples/minimal-theme.esm.js +80 -85
- package/dist/themes/examples/minimal-theme.js +80 -85
- package/dist/themes/focus-management.esm.js +541 -677
- package/dist/themes/focus-management.js +541 -677
- package/dist/themes/fontLoader.esm.js +151 -180
- package/dist/themes/fontLoader.js +151 -180
- package/dist/themes/high-contrast.esm.js +394 -558
- package/dist/themes/high-contrast.js +394 -558
- package/dist/themes/index.esm.js +1 -9
- package/dist/themes/index.js +1 -9
- package/dist/themes/inheritance.esm.js +145 -180
- package/dist/themes/inheritance.js +145 -180
- package/dist/themes/keyboard-navigation.esm.js +418 -510
- package/dist/themes/keyboard-navigation.js +418 -510
- package/dist/themes/motion-reduction.esm.js +434 -591
- package/dist/themes/motion-reduction.js +434 -591
- package/dist/themes/navigation.esm.js +1 -234
- package/dist/themes/navigation.js +1 -234
- package/dist/themes/screen-reader.esm.js +515 -616
- package/dist/themes/screen-reader.js +515 -616
- package/dist/themes/systemThemeDetector.esm.js +135 -164
- package/dist/themes/systemThemeDetector.js +135 -164
- package/dist/themes/themeCSSUpdater.esm.js +217 -252
- package/dist/themes/themeCSSUpdater.js +217 -252
- package/dist/themes/themePersistence.esm.js +181 -212
- package/dist/themes/themePersistence.js +181 -212
- package/dist/themes/themes/default.esm.js +584 -0
- package/dist/themes/themes/default.js +584 -0
- package/dist/themes/themes/harvey.esm.js +551 -0
- package/dist/themes/themes/harvey.js +551 -0
- package/dist/themes/themes/stan-design.esm.js +654 -658
- package/dist/themes/themes/stan-design.js +654 -658
- package/dist/themes/types.esm.js +1 -458
- package/dist/themes/types.js +1 -458
- package/dist/themes/useSystemTheme.esm.js +34 -42
- package/dist/themes/useSystemTheme.js +34 -42
- package/dist/themes/useTheme.esm.js +23 -28
- package/dist/themes/useTheme.js +23 -28
- package/dist/themes/validation.esm.js +380 -433
- package/dist/themes/validation.js +380 -433
- package/dist/tokens/index.esm.js +2 -25
- package/dist/tokens/index.js +2 -25
- package/dist/tokens/tokenExporter.esm.js +309 -373
- package/dist/tokens/tokenExporter.js +309 -373
- package/dist/tokens/tokenGenerator.esm.js +241 -273
- package/dist/tokens/tokenGenerator.js +241 -273
- package/dist/tokens/tokenManager.esm.js +187 -241
- package/dist/tokens/tokenManager.js +187 -241
- package/dist/tokens/tokenValidator.esm.js +402 -522
- package/dist/tokens/tokenValidator.js +402 -522
- package/dist/tokens/types.esm.js +1 -78
- package/dist/tokens/types.js +1 -78
- package/dist/types.esm.js +3 -0
- package/dist/types.js +3 -0
- package/dist/utils/bundle-analyzer.esm.js +188 -246
- package/dist/utils/bundle-analyzer.js +188 -246
- package/dist/utils/bundle-splitting.esm.js +330 -458
- package/dist/utils/bundle-splitting.js +330 -458
- package/dist/utils/lazy-loading.esm.js +311 -417
- package/dist/utils/lazy-loading.js +311 -417
- package/dist/utils/performance-monitor.esm.js +369 -490
- package/dist/utils/performance-monitor.js +369 -490
- package/dist/utils/tree-shaking.esm.js +194 -264
- package/dist/utils/tree-shaking.js +194 -264
- package/package.json +18 -2
- package/src/index.ts +150 -149
- package/src/provider.tsx +3 -3
- package/src/theme.ts +1 -1
- package/{dist/theme.d.ts → src/themes/themes/default.ts} +77 -169
- package/src/themes/themes/harvey.ts +554 -0
- package/{dist/themes/types.d.ts → src/types.ts} +7 -1
- package/dist/components/ui/accessibility-demo.d.ts +0 -259
- package/dist/components/ui/advanced-component-architecture-demo.d.ts +0 -718
- package/dist/components/ui/advanced-transition-system-demo.d.ts +0 -660
- package/dist/components/ui/advanced-transition-system.d.ts +0 -391
- package/dist/components/ui/animation/animated-container.d.ts +0 -162
- package/dist/components/ui/animation/index.d.ts +0 -9
- package/dist/components/ui/animation/staggered-container.d.ts +0 -64
- package/dist/components/ui/animation-demo.d.ts +0 -238
- package/dist/components/ui/badge.d.ts +0 -28
- package/dist/components/ui/battery-conscious-animation-demo.d.ts +0 -561
- package/dist/components/ui/border-radius-shadow-demo.d.ts +0 -183
- package/dist/components/ui/button.d.ts +0 -33
- package/dist/components/ui/card.d.ts +0 -205
- package/dist/components/ui/checkbox.d.ts +0 -26
- package/dist/components/ui/color-preview.d.ts +0 -402
- package/dist/components/ui/data-display/chart.d.ts +0 -646
- package/dist/components/ui/data-display/data-grid-simple.d.ts +0 -73
- package/dist/components/ui/data-display/data-grid.d.ts +0 -670
- package/dist/components/ui/data-display/list.d.ts +0 -448
- package/dist/components/ui/data-display/table.d.ts +0 -472
- package/dist/components/ui/data-display/timeline.d.ts +0 -433
- package/dist/components/ui/data-display/tree.d.ts +0 -594
- package/dist/components/ui/data-display/types.d.ts +0 -534
- package/dist/components/ui/enterprise-mobile-experience-demo.d.ts +0 -735
- package/dist/components/ui/enterprise-mobile-experience.d.ts +0 -461
- package/dist/components/ui/feedback/alert.d.ts +0 -154
- package/dist/components/ui/feedback/progress.d.ts +0 -288
- package/dist/components/ui/feedback/skeleton.d.ts +0 -182
- package/dist/components/ui/feedback/toast.d.ts +0 -277
- package/dist/components/ui/feedback/types.d.ts +0 -123
- package/dist/components/ui/font-preview.d.ts +0 -282
- package/dist/components/ui/form-demo.d.ts +0 -544
- package/dist/components/ui/hardware-acceleration-demo.d.ts +0 -540
- package/dist/components/ui/input.d.ts +0 -33
- package/dist/components/ui/label.d.ts +0 -13
- package/dist/components/ui/layout-demo.d.ts +0 -352
- package/dist/components/ui/layouts/adaptive-layout.d.ts +0 -132
- package/dist/components/ui/layouts/desktop-layout.d.ts +0 -219
- package/dist/components/ui/layouts/index.d.ts +0 -5
- package/dist/components/ui/layouts/mobile-layout.d.ts +0 -158
- package/dist/components/ui/layouts/tablet-layout.d.ts +0 -192
- package/dist/components/ui/mobile-form-validation.d.ts +0 -439
- package/dist/components/ui/mobile-input-demo.d.ts +0 -197
- package/dist/components/ui/mobile-input.d.ts +0 -273
- package/dist/components/ui/mobile-skeleton-loading-demo.d.ts +0 -628
- package/dist/components/ui/navigation/breadcrumb.d.ts +0 -149
- package/dist/components/ui/navigation/index.d.ts +0 -25
- package/dist/components/ui/navigation/menu.d.ts +0 -366
- package/dist/components/ui/navigation/navigation-demo.d.ts +0 -169
- package/dist/components/ui/navigation/pagination.d.ts +0 -261
- package/dist/components/ui/navigation/sidebar.d.ts +0 -375
- package/dist/components/ui/navigation/stepper.d.ts +0 -294
- package/dist/components/ui/navigation/tabs.d.ts +0 -196
- package/dist/components/ui/navigation/types.d.ts +0 -293
- package/dist/components/ui/overlay/backdrop.d.ts +0 -79
- package/dist/components/ui/overlay/focus-manager.d.ts +0 -141
- package/dist/components/ui/overlay/index.d.ts +0 -27
- package/dist/components/ui/overlay/modal.d.ts +0 -262
- package/dist/components/ui/overlay/overlay-manager.d.ts +0 -107
- package/dist/components/ui/overlay/popover.d.ts +0 -450
- package/dist/components/ui/overlay/portal.d.ts +0 -75
- package/dist/components/ui/overlay/tooltip.d.ts +0 -298
- package/dist/components/ui/overlay/types.d.ts +0 -194
- package/dist/components/ui/performance-demo.d.ts +0 -583
- package/dist/components/ui/semantic-input-system-demo.d.ts +0 -490
- package/dist/components/ui/theme-customizer.d.ts +0 -378
- package/dist/components/ui/theme-preview.d.ts +0 -305
- package/dist/components/ui/theme-switcher.d.ts +0 -259
- package/dist/components/ui/theme-toggle.d.ts +0 -34
- package/dist/components/ui/token-demo.d.ts +0 -188
- package/dist/components/ui/touch-demo.d.ts +0 -455
- package/dist/components/ui/touch-friendly-interface-demo.d.ts +0 -512
- package/dist/components/ui/touch-friendly-interface.d.ts +0 -292
- package/dist/hooks/index.d.ts +0 -161
- package/dist/hooks/use-accessibility-support.d.ts +0 -516
- package/dist/hooks/use-adaptive-layout.d.ts +0 -287
- package/dist/hooks/use-advanced-patterns.d.ts +0 -292
- package/dist/hooks/use-advanced-transition-system.d.ts +0 -390
- package/dist/hooks/use-animation-profile.d.ts +0 -285
- package/dist/hooks/use-battery-animations.d.ts +0 -382
- package/dist/hooks/use-battery-conscious-loading.d.ts +0 -473
- package/dist/hooks/use-battery-optimization.d.ts +0 -328
- package/dist/hooks/use-battery-status.d.ts +0 -297
- package/dist/hooks/use-component-performance.d.ts +0 -342
- package/dist/hooks/use-device-loading-states.d.ts +0 -456
- package/dist/hooks/use-device.d.ts +0 -104
- package/dist/hooks/use-enterprise-mobile-experience.d.ts +0 -486
- package/dist/hooks/use-form-feedback.d.ts +0 -401
- package/dist/hooks/use-form-performance.d.ts +0 -511
- package/dist/hooks/use-frame-rate.d.ts +0 -249
- package/dist/hooks/use-gestures.d.ts +0 -336
- package/dist/hooks/use-hardware-acceleration.d.ts +0 -339
- package/dist/hooks/use-input-accessibility.d.ts +0 -451
- package/dist/hooks/use-input-performance.d.ts +0 -503
- package/dist/hooks/use-layout-performance.d.ts +0 -317
- package/dist/hooks/use-loading-accessibility.d.ts +0 -532
- package/dist/hooks/use-loading-performance.d.ts +0 -471
- package/dist/hooks/use-memory-usage.d.ts +0 -285
- package/dist/hooks/use-mobile-form-layout.d.ts +0 -462
- package/dist/hooks/use-mobile-form-validation.d.ts +0 -516
- package/dist/hooks/use-mobile-keyboard-optimization.d.ts +0 -469
- package/dist/hooks/use-mobile-layout.d.ts +0 -300
- package/dist/hooks/use-mobile-optimization.d.ts +0 -404
- package/dist/hooks/use-mobile-skeleton.d.ts +0 -399
- package/dist/hooks/use-mobile-touch.d.ts +0 -412
- package/dist/hooks/use-performance-throttling.d.ts +0 -346
- package/dist/hooks/use-performance.d.ts +0 -314
- package/dist/hooks/use-reusable-architecture.d.ts +0 -412
- package/dist/hooks/use-semantic-input-types.d.ts +0 -354
- package/dist/hooks/use-semantic-input.d.ts +0 -563
- package/dist/hooks/use-tablet-layout.d.ts +0 -382
- package/dist/hooks/use-touch-friendly-input.d.ts +0 -520
- package/dist/hooks/use-touch-friendly-interface.d.ts +0 -329
- package/dist/hooks/use-touch-optimization.d.ts +0 -373
- package/dist/index.d.ts +0 -149
- package/dist/lib/utils.d.ts +0 -3
- package/dist/plugins/theme-css-generator.d.ts +0 -345
- package/dist/provider.d.ts +0 -17
- package/dist/themes/ThemeContext.d.ts +0 -27
- package/dist/themes/ThemeProvider.d.ts +0 -222
- package/dist/themes/accessibility/index.d.ts +0 -7
- package/dist/themes/accessibility.d.ts +0 -259
- package/dist/themes/aria-patterns.d.ts +0 -418
- package/dist/themes/base-themes.d.ts +0 -34
- package/dist/themes/colorManager.d.ts +0 -327
- package/dist/themes/examples/dark-theme.d.ts +0 -139
- package/dist/themes/examples/minimal-theme.d.ts +0 -93
- package/dist/themes/focus-management.d.ts +0 -699
- package/dist/themes/fontLoader.d.ts +0 -163
- package/dist/themes/high-contrast.d.ts +0 -619
- package/dist/themes/index.d.ts +0 -11
- package/dist/themes/inheritance.d.ts +0 -160
- package/dist/themes/keyboard-navigation.d.ts +0 -550
- package/dist/themes/motion-reduction.d.ts +0 -660
- package/dist/themes/navigation.d.ts +0 -232
- package/dist/themes/screen-reader.d.ts +0 -645
- package/dist/themes/systemThemeDetector.d.ts +0 -148
- package/dist/themes/themeCSSUpdater.d.ts +0 -229
- package/dist/themes/themePersistence.d.ts +0 -192
- package/dist/themes/themes/stan-design.d.ts +0 -678
- package/dist/themes/useSystemTheme.d.ts +0 -43
- package/dist/themes/useTheme.d.ts +0 -20
- package/dist/themes/validation.d.ts +0 -406
- package/dist/tokens/index.d.ts +0 -25
- package/dist/tokens/tokenExporter.d.ts +0 -336
- package/dist/tokens/tokenGenerator.d.ts +0 -250
- package/dist/tokens/tokenManager.d.ts +0 -194
- package/dist/tokens/tokenValidator.d.ts +0 -488
- package/dist/tokens/types.d.ts +0 -78
- package/dist/utils/bundle-analyzer.d.ts +0 -260
- package/dist/utils/bundle-splitting.d.ts +0 -483
- package/dist/utils/lazy-loading.d.ts +0 -437
- package/dist/utils/performance-monitor.d.ts +0 -513
- package/dist/utils/tree-shaking.d.ts +0 -274
|
@@ -1,462 +1,96 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
export const TouchDemo
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
case 'excellent': return 'text-green-600'
|
|
96
|
-
|
|
97
|
-
case 'fair': return 'text-yellow-600'
|
|
98
|
-
case 'poor': return 'text-red-600'
|
|
99
|
-
default: return 'text-gray-600'
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
const getBatteryImpactColor = (impact: string) => {
|
|
104
|
-
switch (impact) {
|
|
105
|
-
case 'low': return 'text-green-600'
|
|
106
|
-
case 'medium': return 'text-yellow-600'
|
|
107
|
-
case 'high': return 'text-red-600'
|
|
108
|
-
default: return 'text-gray-600'
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
return (
|
|
113
|
-
<div className="space-y-6">
|
|
114
|
-
{/* Tab Navigation */}
|
|
115
|
-
<div className="flex flex-wrap gap-2">
|
|
116
|
-
{[
|
|
117
|
-
{ id: 'overview', label: 'Overview', icon: '📱' },
|
|
118
|
-
{ id: 'gestures', label: 'Gesture Recognition', icon: '👆' },
|
|
119
|
-
{ id: 'optimization', label: 'Touch Optimization', icon: '⚡' },
|
|
120
|
-
{ id: 'mobile', label: 'Mobile Touch', icon: '📱' }
|
|
121
|
-
].map((tab) => (
|
|
122
|
-
<Button
|
|
123
|
-
key={tab.id}
|
|
124
|
-
variant={activeTab === tab.id ? 'default' : 'outline'}
|
|
125
|
-
size="sm"
|
|
126
|
-
onClick={() => setActiveTab(tab.id as any)}
|
|
127
|
-
className="touch-button"
|
|
128
|
-
>
|
|
129
|
-
{tab.icon} {tab.label}
|
|
130
|
-
</Button>
|
|
131
|
-
))}
|
|
132
|
-
</div>
|
|
133
|
-
|
|
134
|
-
{/* Overview Tab */}
|
|
135
|
-
{activeTab === 'overview' && (
|
|
136
|
-
<div className="space-y-4">
|
|
137
|
-
<Card className="touch-card">
|
|
138
|
-
<CardHeader>
|
|
139
|
-
<CardTitle className="flex items-center gap-2">
|
|
140
|
-
🎯 Touch Optimization & Gesture Support
|
|
141
|
-
<Badge variant="outline">Story 5 Implementation</Badge>
|
|
142
|
-
</CardTitle>
|
|
143
|
-
<CardDescription>
|
|
144
|
-
Comprehensive touch optimization system with gesture recognition, performance monitoring, and mobile-first interactions
|
|
145
|
-
</CardDescription>
|
|
146
|
-
</CardHeader>
|
|
147
|
-
<CardContent className="space-y-4">
|
|
148
|
-
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
149
|
-
<div className="space-y-2">
|
|
150
|
-
<h4 className="font-semibold">Device Information</h4>
|
|
151
|
-
<div className="text-sm space-y-1">
|
|
152
|
-
<p>Screen Size: <Badge variant="secondary">{device.screenSize}</Badge></p>
|
|
153
|
-
<p>Touch Device: <Badge variant="secondary">{device.touchDevice ? 'Yes' : 'No'}</Badge></p>
|
|
154
|
-
<p>Orientation: <Badge variant="secondary">{device.orientation}</Badge></p>
|
|
155
|
-
</div>
|
|
156
|
-
</div>
|
|
157
|
-
<div className="space-y-2">
|
|
158
|
-
<h4 className="font-semibold">Touch Capabilities</h4>
|
|
159
|
-
<div className="text-sm space-y-1">
|
|
160
|
-
<p>Max Touch Points: <Badge variant="secondary">{mobileTouchState.deviceCapabilities.maxTouchPoints}</Badge></p>
|
|
161
|
-
<p>Haptic Support: <Badge variant="secondary">{mobileTouchState.deviceCapabilities.supportsHaptics ? 'Yes' : 'No'}</Badge></p>
|
|
162
|
-
<p>Audio Support: <Badge variant="secondary">{mobileTouchState.deviceCapabilities.supportsAudio ? 'Yes' : 'No'}</Badge></p>
|
|
163
|
-
</div>
|
|
164
|
-
</div>
|
|
165
|
-
</div>
|
|
166
|
-
|
|
167
|
-
<div className="grid grid-cols-1 md:grid-cols-3 gap-4">
|
|
168
|
-
<div className="text-center p-4 bg-gray-50 rounded-lg">
|
|
169
|
-
<div className="text-2xl mb-2">👆</div>
|
|
170
|
-
<h4 className="font-semibold">Gesture Recognition</h4>
|
|
171
|
-
<p className="text-sm text-gray-600">Swipe, pinch, tap, and long press detection</p>
|
|
172
|
-
</div>
|
|
173
|
-
<div className="text-center p-4 bg-gray-50 rounded-lg">
|
|
174
|
-
<div className="text-2xl mb-2">⚡</div>
|
|
175
|
-
<h4 className="font-semibold">Performance Optimization</h4>
|
|
176
|
-
<p className="text-sm text-gray-600">Touch event optimization and battery awareness</p>
|
|
177
|
-
</div>
|
|
178
|
-
<div className="text-center p-4 bg-gray-50 rounded-lg">
|
|
179
|
-
<div className="text-2xl mb-2">📱</div>
|
|
180
|
-
<h4 className="font-semibold">Mobile Touch</h4>
|
|
181
|
-
<p className="text-sm text-gray-600">Touch feedback, haptics, and gesture hints</p>
|
|
182
|
-
</div>
|
|
183
|
-
</div>
|
|
184
|
-
</CardContent>
|
|
185
|
-
</Card>
|
|
186
|
-
</div>
|
|
187
|
-
)}
|
|
188
|
-
|
|
189
|
-
{/* Gesture Recognition Tab */}
|
|
190
|
-
{activeTab === 'gestures' && (
|
|
191
|
-
<div className="space-y-4">
|
|
192
|
-
<Card className="touch-card">
|
|
193
|
-
<CardHeader>
|
|
194
|
-
<CardTitle className="flex items-center gap-2">
|
|
195
|
-
👆 Gesture Recognition
|
|
196
|
-
<Badge variant={isGestureActive ? 'default' : 'secondary'}>
|
|
197
|
-
{isGestureActive ? 'Active' : 'Inactive'}
|
|
198
|
-
</Badge>
|
|
199
|
-
</CardTitle>
|
|
200
|
-
<CardDescription>
|
|
201
|
-
Test gesture recognition on the interactive area below. Try swiping, pinching, tapping, and long pressing.
|
|
202
|
-
</CardDescription>
|
|
203
|
-
</CardHeader>
|
|
204
|
-
<CardContent className="space-y-4">
|
|
205
|
-
<div className="flex gap-2">
|
|
206
|
-
<Button onClick={resetGestureState} variant="outline" size="sm">
|
|
207
|
-
Reset Gestures
|
|
208
|
-
</Button>
|
|
209
|
-
<Button onClick={clearGestureHistory} variant="outline" size="sm">
|
|
210
|
-
Clear History
|
|
211
|
-
</Button>
|
|
212
|
-
</div>
|
|
213
|
-
|
|
214
|
-
<div className="grid grid-cols-1 lg:grid-cols-2 gap-4">
|
|
215
|
-
{/* Interactive Gesture Area */}
|
|
216
|
-
<div
|
|
217
|
-
ref={gestureElementRef}
|
|
218
|
-
className="min-h-[300px] border-2 border-dashed border-gray-300 rounded-lg p-4 flex items-center justify-center bg-gray-50 touch-target"
|
|
219
|
-
style={{ touchAction: 'manipulation' }}
|
|
220
|
-
>
|
|
221
|
-
<div className="text-center">
|
|
222
|
-
<div className="text-4xl mb-2">👆</div>
|
|
223
|
-
<p className="font-medium">Gesture Test Area</p>
|
|
224
|
-
<p className="text-sm text-gray-600">
|
|
225
|
-
{currentGestureType !== 'none' ? `Current: ${currentGestureType}` : 'Touch to start'}
|
|
226
|
-
</p>
|
|
227
|
-
<p className="text-xs text-gray-500 mt-2">
|
|
228
|
-
Swipe, pinch, tap, or long press here
|
|
229
|
-
</p>
|
|
230
|
-
</div>
|
|
231
|
-
</div>
|
|
232
|
-
|
|
233
|
-
{/* Gesture History */}
|
|
234
|
-
<div className="space-y-2">
|
|
235
|
-
<h4 className="font-semibold">Gesture History</h4>
|
|
236
|
-
<div className="max-h-[300px] overflow-y-auto space-y-2">
|
|
237
|
-
{gestureHistory.length === 0 ? (
|
|
238
|
-
<p className="text-gray-500 text-sm">No gestures detected yet</p>
|
|
239
|
-
) : (
|
|
240
|
-
gestureHistory.map((gesture, index) => (
|
|
241
|
-
<div key={index} className="p-2 bg-gray-50 rounded text-sm">
|
|
242
|
-
<div className="flex justify-between items-start">
|
|
243
|
-
<span className="font-medium">{gesture.type}</span>
|
|
244
|
-
<span className="text-xs text-gray-500">
|
|
245
|
-
{gesture.timestamp.toLocaleTimeString()}
|
|
246
|
-
</span>
|
|
247
|
-
</div>
|
|
248
|
-
<p className="text-gray-600">{gesture.details}</p>
|
|
249
|
-
</div>
|
|
250
|
-
))
|
|
251
|
-
)}
|
|
252
|
-
</div>
|
|
253
|
-
</div>
|
|
254
|
-
</div>
|
|
255
|
-
</CardContent>
|
|
256
|
-
</Card>
|
|
257
|
-
</div>
|
|
258
|
-
)}
|
|
259
|
-
|
|
260
|
-
{/* Touch Optimization Tab */}
|
|
261
|
-
{activeTab === 'optimization' && (
|
|
262
|
-
<div className="space-y-4">
|
|
263
|
-
<Card className="touch-card">
|
|
264
|
-
<CardHeader>
|
|
265
|
-
<CardTitle className="flex items-center gap-2">
|
|
266
|
-
⚡ Touch Optimization
|
|
267
|
-
<Badge variant={optimizationState.isOptimized ? 'default' : 'secondary'}>
|
|
268
|
-
{optimizationState.isOptimized ? 'Optimized' : 'Not Optimized'}
|
|
269
|
-
</Badge>
|
|
270
|
-
</CardTitle>
|
|
271
|
-
<CardDescription>
|
|
272
|
-
Monitor touch performance and apply optimizations for better user experience.
|
|
273
|
-
</CardDescription>
|
|
274
|
-
</CardHeader>
|
|
275
|
-
<CardContent className="space-y-4">
|
|
276
|
-
<div className="flex gap-2">
|
|
277
|
-
<Button onClick={applyOptimizations} variant="default" size="sm">
|
|
278
|
-
Apply Optimizations
|
|
279
|
-
</Button>
|
|
280
|
-
<Button onClick={resetOptimizations} variant="outline" size="sm">
|
|
281
|
-
Reset Optimizations
|
|
282
|
-
</Button>
|
|
283
|
-
</div>
|
|
284
|
-
|
|
285
|
-
<div className="grid grid-cols-1 lg:grid-cols-2 gap-4">
|
|
286
|
-
{/* Optimization Status */}
|
|
287
|
-
<div className="space-y-3">
|
|
288
|
-
<h4 className="font-semibold">Optimization Status</h4>
|
|
289
|
-
<div className="space-y-2 text-sm">
|
|
290
|
-
<div className="flex justify-between">
|
|
291
|
-
<span>Touch Action:</span>
|
|
292
|
-
<Badge variant="outline">{optimizationState.currentTouchAction}</Badge>
|
|
293
|
-
</div>
|
|
294
|
-
<div className="flex justify-between">
|
|
295
|
-
<span>Passive Listeners:</span>
|
|
296
|
-
<Badge variant={optimizationState.passiveListenersEnabled ? 'default' : 'secondary'}>
|
|
297
|
-
{optimizationState.passiveListenersEnabled ? 'Enabled' : 'Disabled'}
|
|
298
|
-
</Badge>
|
|
299
|
-
</div>
|
|
300
|
-
<div className="flex justify-between">
|
|
301
|
-
<span>Battery Optimization:</span>
|
|
302
|
-
<Badge variant={optimizationState.batteryOptimizationEnabled ? 'default' : 'secondary'}>
|
|
303
|
-
{optimizationState.batteryOptimizationEnabled ? 'Enabled' : 'Disabled'}
|
|
304
|
-
</Badge>
|
|
305
|
-
</div>
|
|
306
|
-
<div className="flex justify-between">
|
|
307
|
-
<span>Throttling:</span>
|
|
308
|
-
<Badge variant={optimizationState.throttlingEnabled ? 'default' : 'secondary'}>
|
|
309
|
-
{optimizationState.throttlingEnabled ? 'Enabled' : 'Disabled'}
|
|
310
|
-
</Badge>
|
|
311
|
-
</div>
|
|
312
|
-
</div>
|
|
313
|
-
</div>
|
|
314
|
-
|
|
315
|
-
{/* Performance Metrics */}
|
|
316
|
-
<div className="space-y-3">
|
|
317
|
-
<h4 className="font-semibold">Performance Metrics</h4>
|
|
318
|
-
<div className="space-y-2 text-sm">
|
|
319
|
-
<div className="flex justify-between">
|
|
320
|
-
<span>Touch Events:</span>
|
|
321
|
-
<span>{performanceMetrics.touchEventCount}</span>
|
|
322
|
-
</div>
|
|
323
|
-
<div className="flex justify-between">
|
|
324
|
-
<span>Avg Duration:</span>
|
|
325
|
-
<span>{performanceMetrics.averageTouchDuration.toFixed(1)}ms</span>
|
|
326
|
-
</div>
|
|
327
|
-
<div className="flex justify-between">
|
|
328
|
-
<span>Latency:</span>
|
|
329
|
-
<span>{performanceMetrics.touchEventLatency.toFixed(1)}ms</span>
|
|
330
|
-
</div>
|
|
331
|
-
<div className="flex justify-between">
|
|
332
|
-
<span>Performance:</span>
|
|
333
|
-
<span className={getPerformanceScoreColor(performanceMetrics.performanceScore)}>
|
|
334
|
-
{performanceMetrics.performanceScore}
|
|
335
|
-
</span>
|
|
336
|
-
</div>
|
|
337
|
-
<div className="flex justify-between">
|
|
338
|
-
<span>Battery Impact:</span>
|
|
339
|
-
<span className={getBatteryImpactColor(performanceMetrics.batteryImpact)}>
|
|
340
|
-
{performanceMetrics.batteryImpact}
|
|
341
|
-
</span>
|
|
342
|
-
</div>
|
|
343
|
-
</div>
|
|
344
|
-
</div>
|
|
345
|
-
</div>
|
|
346
|
-
|
|
347
|
-
{/* Test Area */}
|
|
348
|
-
<div
|
|
349
|
-
ref={optimizationElementRef}
|
|
350
|
-
className="min-h-[200px] border-2 border-dashed border-gray-300 rounded-lg p-4 flex items-center justify-center bg-gray-50 touch-target"
|
|
351
|
-
style={{ touchAction: optimizationState.currentTouchAction }}
|
|
352
|
-
>
|
|
353
|
-
<div className="text-center">
|
|
354
|
-
<div className="text-2xl mb-2">⚡</div>
|
|
355
|
-
<p className="font-medium">Optimization Test Area</p>
|
|
356
|
-
<p className="text-sm text-gray-600">
|
|
357
|
-
Touch here to test optimizations
|
|
358
|
-
</p>
|
|
359
|
-
</div>
|
|
360
|
-
</div>
|
|
361
|
-
</CardContent>
|
|
362
|
-
</Card>
|
|
363
|
-
</div>
|
|
364
|
-
)}
|
|
365
|
-
|
|
366
|
-
{/* Mobile Touch Tab */}
|
|
367
|
-
{activeTab === 'mobile' && (
|
|
368
|
-
<div className="space-y-4">
|
|
369
|
-
<Card className="touch-card">
|
|
370
|
-
<CardHeader>
|
|
371
|
-
<CardTitle className="flex items-center gap-2">
|
|
372
|
-
📱 Mobile Touch Behaviors
|
|
373
|
-
<Badge variant={mobileTouchState.isActive ? 'default' : 'secondary'}>
|
|
374
|
-
{mobileTouchState.isActive ? 'Active' : 'Inactive'}
|
|
375
|
-
</Badge>
|
|
376
|
-
</CardTitle>
|
|
377
|
-
<CardDescription>
|
|
378
|
-
Experience mobile touch feedback, haptics, and gesture hints.
|
|
379
|
-
</CardDescription>
|
|
380
|
-
</CardHeader>
|
|
381
|
-
<CardContent className="space-y-4">
|
|
382
|
-
<div className="flex gap-2">
|
|
383
|
-
<Button onClick={clearAllGestureHints} variant="outline" size="sm">
|
|
384
|
-
Clear Hints
|
|
385
|
-
</Button>
|
|
386
|
-
</div>
|
|
387
|
-
|
|
388
|
-
<div className="grid grid-cols-1 lg:grid-cols-2 gap-4">
|
|
389
|
-
{/* Touch Feedback Status */}
|
|
390
|
-
<div className="space-y-3">
|
|
391
|
-
<h4 className="font-semibold">Touch Feedback Status</h4>
|
|
392
|
-
<div className="space-y-2 text-sm">
|
|
393
|
-
<div className="flex justify-between">
|
|
394
|
-
<span>Touch Count:</span>
|
|
395
|
-
<Badge variant="outline">{mobileTouchState.touchCount}</Badge>
|
|
396
|
-
</div>
|
|
397
|
-
<div className="flex justify-between">
|
|
398
|
-
<span>Feedback Type:</span>
|
|
399
|
-
<Badge variant="outline">{mobileTouchState.currentFeedback.feedbackType}</Badge>
|
|
400
|
-
</div>
|
|
401
|
-
<div className="flex justify-between">
|
|
402
|
-
<span>Intensity:</span>
|
|
403
|
-
<Badge variant="outline">{mobileTouchState.currentFeedback.feedbackIntensity}</Badge>
|
|
404
|
-
</div>
|
|
405
|
-
<div className="flex justify-between">
|
|
406
|
-
<span>Active Hints:</span>
|
|
407
|
-
<Badge variant="outline">{mobileTouchState.activeGestureHints.length}</Badge>
|
|
408
|
-
</div>
|
|
409
|
-
</div>
|
|
410
|
-
{touchFeedback && (
|
|
411
|
-
<div className="p-2 bg-blue-50 border border-blue-200 rounded text-sm">
|
|
412
|
-
{touchFeedback}
|
|
413
|
-
</div>
|
|
414
|
-
)}
|
|
415
|
-
</div>
|
|
416
|
-
|
|
417
|
-
{/* Active Gesture Hints */}
|
|
418
|
-
<div className="space-y-3">
|
|
419
|
-
<h4 className="font-semibold">Active Gesture Hints</h4>
|
|
420
|
-
<div className="max-h-[200px] overflow-y-auto space-y-2">
|
|
421
|
-
{mobileTouchState.activeGestureHints.length === 0 ? (
|
|
422
|
-
<p className="text-gray-500 text-sm">No active hints</p>
|
|
423
|
-
) : (
|
|
424
|
-
mobileTouchState.activeGestureHints.map((hint: any, index: number) => (
|
|
425
|
-
<div key={index} className="p-2 bg-yellow-50 border border-yellow-200 rounded text-sm">
|
|
426
|
-
<div className="flex justify-between items-start">
|
|
427
|
-
<span className="font-medium">{hint.type}</span>
|
|
428
|
-
<span className="text-xs text-gray-500">
|
|
429
|
-
{new Date(hint.timeout).toLocaleTimeString()}
|
|
430
|
-
</span>
|
|
431
|
-
</div>
|
|
432
|
-
<p className="text-gray-600">{hint.message}</p>
|
|
433
|
-
</div>
|
|
434
|
-
))
|
|
435
|
-
)}
|
|
436
|
-
</div>
|
|
437
|
-
</div>
|
|
438
|
-
</div>
|
|
439
|
-
|
|
440
|
-
{/* Mobile Touch Test Area */}
|
|
441
|
-
<div
|
|
442
|
-
ref={mobileTouchElementRef}
|
|
443
|
-
className={`min-h-[300px] border-2 border-dashed border-gray-300 rounded-lg p-4 flex items-center justify-center bg-gray-50 touch-target ${getTouchFeedbackClasses()}`}
|
|
444
|
-
>
|
|
445
|
-
<div className="text-center">
|
|
446
|
-
<div className="text-4xl mb-2">📱</div>
|
|
447
|
-
<p className="font-medium">Mobile Touch Test Area</p>
|
|
448
|
-
<p className="text-sm text-gray-600">
|
|
449
|
-
{mobileTouchState.isActive ? 'Touch active' : 'Touch to start'}
|
|
450
|
-
</p>
|
|
451
|
-
<p className="text-xs text-gray-500 mt-2">
|
|
452
|
-
Experience haptic feedback and touch sounds
|
|
453
|
-
</p>
|
|
454
|
-
</div>
|
|
455
|
-
</div>
|
|
456
|
-
</CardContent>
|
|
457
|
-
</Card>
|
|
458
|
-
</div>
|
|
459
|
-
)}
|
|
460
|
-
</div>
|
|
461
|
-
)
|
|
462
|
-
}
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useRef } from 'react';
|
|
3
|
+
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from './card';
|
|
4
|
+
import { Button } from './button';
|
|
5
|
+
import { Badge } from './badge';
|
|
6
|
+
import { useGestures, useTouchOptimization, useMobileTouch } from '../../hooks';
|
|
7
|
+
import { useDevice } from '../../hooks/use-device';
|
|
8
|
+
export const TouchDemo = () => {
|
|
9
|
+
const [activeTab, setActiveTab] = useState('overview');
|
|
10
|
+
const [gestureHistory, setGestureHistory] = useState([]);
|
|
11
|
+
const [touchFeedback, setTouchFeedback] = useState('');
|
|
12
|
+
const gestureElementRef = useRef(null);
|
|
13
|
+
const optimizationElementRef = useRef(null);
|
|
14
|
+
const mobileTouchElementRef = useRef(null);
|
|
15
|
+
const device = useDevice();
|
|
16
|
+
// Gesture recognition hook
|
|
17
|
+
const { isGestureActive, currentGestureType, resetGestureState } = useGestures(gestureElementRef, {
|
|
18
|
+
onSwipe: (gesture) => {
|
|
19
|
+
const gestureInfo = {
|
|
20
|
+
type: 'Swipe',
|
|
21
|
+
details: `${gesture.direction} - ${gesture.distance.toFixed(0)}px, ${gesture.velocity.toFixed(1)}px/ms`,
|
|
22
|
+
timestamp: new Date()
|
|
23
|
+
};
|
|
24
|
+
setGestureHistory(prev => [gestureInfo, ...prev.slice(0, 9)]);
|
|
25
|
+
},
|
|
26
|
+
onPinch: (gesture) => {
|
|
27
|
+
const gestureInfo = {
|
|
28
|
+
type: 'Pinch',
|
|
29
|
+
details: `Scale: ${gesture.scale.toFixed(2)}, Distance: ${gesture.distance.toFixed(0)}px`,
|
|
30
|
+
timestamp: new Date()
|
|
31
|
+
};
|
|
32
|
+
setGestureHistory(prev => [gestureInfo, ...prev.slice(0, 9)]);
|
|
33
|
+
},
|
|
34
|
+
onTap: (position) => {
|
|
35
|
+
const gestureInfo = {
|
|
36
|
+
type: 'Tap',
|
|
37
|
+
details: `Position: (${position.x}, ${position.y})`,
|
|
38
|
+
timestamp: new Date()
|
|
39
|
+
};
|
|
40
|
+
setGestureHistory(prev => [gestureInfo, ...prev.slice(0, 9)]);
|
|
41
|
+
},
|
|
42
|
+
onLongPress: (position) => {
|
|
43
|
+
const gestureInfo = {
|
|
44
|
+
type: 'Long Press',
|
|
45
|
+
details: `Position: (${position.x}, ${position.y})`,
|
|
46
|
+
timestamp: new Date()
|
|
47
|
+
};
|
|
48
|
+
setGestureHistory(prev => [gestureInfo, ...prev.slice(0, 9)]);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
// Touch optimization hook
|
|
52
|
+
const { optimizationState, performanceMetrics, applyOptimizations, resetOptimizations } = useTouchOptimization(optimizationElementRef, {
|
|
53
|
+
onTouchPerformanceWarning: (metrics) => {
|
|
54
|
+
console.warn('Touch performance warning:', metrics);
|
|
55
|
+
},
|
|
56
|
+
onBatteryOptimization: (enabled) => {
|
|
57
|
+
console.log('Battery optimization:', enabled ? 'enabled' : 'disabled');
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
// Mobile touch hook
|
|
61
|
+
const { mobileTouchState, clearAllGestureHints, getTouchFeedbackClasses } = useMobileTouch(mobileTouchElementRef, {
|
|
62
|
+
onTouchFeedback: (state) => {
|
|
63
|
+
setTouchFeedback(`${state.feedbackType} feedback - ${state.feedbackIntensity} intensity`);
|
|
64
|
+
},
|
|
65
|
+
onGestureHint: (hint) => {
|
|
66
|
+
console.log('Gesture hint:', hint);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
const clearGestureHistory = () => {
|
|
70
|
+
setGestureHistory([]);
|
|
71
|
+
resetGestureState();
|
|
72
|
+
};
|
|
73
|
+
const getPerformanceScoreColor = (score) => {
|
|
74
|
+
switch (score) {
|
|
75
|
+
case 'excellent': return 'text-green-600';
|
|
76
|
+
case 'good': return 'text-blue-600';
|
|
77
|
+
case 'fair': return 'text-yellow-600';
|
|
78
|
+
case 'poor': return 'text-red-600';
|
|
79
|
+
default: return 'text-gray-600';
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
const getBatteryImpactColor = (impact) => {
|
|
83
|
+
switch (impact) {
|
|
84
|
+
case 'low': return 'text-green-600';
|
|
85
|
+
case 'medium': return 'text-yellow-600';
|
|
86
|
+
case 'high': return 'text-red-600';
|
|
87
|
+
default: return 'text-gray-600';
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
return (_jsxs("div", { className: "space-y-6", children: [_jsx("div", { className: "flex flex-wrap gap-2", children: [
|
|
91
|
+
{ id: 'overview', label: 'Overview', icon: '📱' },
|
|
92
|
+
{ id: 'gestures', label: 'Gesture Recognition', icon: '👆' },
|
|
93
|
+
{ id: 'optimization', label: 'Touch Optimization', icon: '⚡' },
|
|
94
|
+
{ id: 'mobile', label: 'Mobile Touch', icon: '📱' }
|
|
95
|
+
].map((tab) => (_jsxs(Button, { variant: activeTab === tab.id ? 'default' : 'outline', size: "sm", onClick: () => setActiveTab(tab.id), className: "touch-button", children: [tab.icon, " ", tab.label] }, tab.id))) }), activeTab === 'overview' && (_jsx("div", { className: "space-y-4", children: _jsxs(Card, { className: "touch-card", children: [_jsxs(CardHeader, { children: [_jsxs(CardTitle, { className: "flex items-center gap-2", children: ["\uD83C\uDFAF Touch Optimization & Gesture Support", _jsx(Badge, { variant: "outline", children: "Story 5 Implementation" })] }), _jsx(CardDescription, { children: "Comprehensive touch optimization system with gesture recognition, performance monitoring, and mobile-first interactions" })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4", children: [_jsxs("div", { className: "space-y-2", children: [_jsx("h4", { className: "font-semibold", children: "Device Information" }), _jsxs("div", { className: "text-sm space-y-1", children: [_jsxs("p", { children: ["Screen Size: ", _jsx(Badge, { variant: "secondary", children: device.screenSize })] }), _jsxs("p", { children: ["Touch Device: ", _jsx(Badge, { variant: "secondary", children: device.touchDevice ? 'Yes' : 'No' })] }), _jsxs("p", { children: ["Orientation: ", _jsx(Badge, { variant: "secondary", children: device.orientation })] })] })] }), _jsxs("div", { className: "space-y-2", children: [_jsx("h4", { className: "font-semibold", children: "Touch Capabilities" }), _jsxs("div", { className: "text-sm space-y-1", children: [_jsxs("p", { children: ["Max Touch Points: ", _jsx(Badge, { variant: "secondary", children: mobileTouchState.deviceCapabilities.maxTouchPoints })] }), _jsxs("p", { children: ["Haptic Support: ", _jsx(Badge, { variant: "secondary", children: mobileTouchState.deviceCapabilities.supportsHaptics ? 'Yes' : 'No' })] }), _jsxs("p", { children: ["Audio Support: ", _jsx(Badge, { variant: "secondary", children: mobileTouchState.deviceCapabilities.supportsAudio ? 'Yes' : 'No' })] })] })] })] }), _jsxs("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-4", children: [_jsxs("div", { className: "text-center p-4 bg-gray-50 rounded-lg", children: [_jsx("div", { className: "text-2xl mb-2", children: "\uD83D\uDC46" }), _jsx("h4", { className: "font-semibold", children: "Gesture Recognition" }), _jsx("p", { className: "text-sm text-gray-600", children: "Swipe, pinch, tap, and long press detection" })] }), _jsxs("div", { className: "text-center p-4 bg-gray-50 rounded-lg", children: [_jsx("div", { className: "text-2xl mb-2", children: "\u26A1" }), _jsx("h4", { className: "font-semibold", children: "Performance Optimization" }), _jsx("p", { className: "text-sm text-gray-600", children: "Touch event optimization and battery awareness" })] }), _jsxs("div", { className: "text-center p-4 bg-gray-50 rounded-lg", children: [_jsx("div", { className: "text-2xl mb-2", children: "\uD83D\uDCF1" }), _jsx("h4", { className: "font-semibold", children: "Mobile Touch" }), _jsx("p", { className: "text-sm text-gray-600", children: "Touch feedback, haptics, and gesture hints" })] })] })] })] }) })), activeTab === 'gestures' && (_jsx("div", { className: "space-y-4", children: _jsxs(Card, { className: "touch-card", children: [_jsxs(CardHeader, { children: [_jsxs(CardTitle, { className: "flex items-center gap-2", children: ["\uD83D\uDC46 Gesture Recognition", _jsx(Badge, { variant: isGestureActive ? 'default' : 'secondary', children: isGestureActive ? 'Active' : 'Inactive' })] }), _jsx(CardDescription, { children: "Test gesture recognition on the interactive area below. Try swiping, pinching, tapping, and long pressing." })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsxs("div", { className: "flex gap-2", children: [_jsx(Button, { onClick: resetGestureState, variant: "outline", size: "sm", children: "Reset Gestures" }), _jsx(Button, { onClick: clearGestureHistory, variant: "outline", size: "sm", children: "Clear History" })] }), _jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-4", children: [_jsx("div", { ref: gestureElementRef, className: "min-h-[300px] border-2 border-dashed border-gray-300 rounded-lg p-4 flex items-center justify-center bg-gray-50 touch-target", style: { touchAction: 'manipulation' }, children: _jsxs("div", { className: "text-center", children: [_jsx("div", { className: "text-4xl mb-2", children: "\uD83D\uDC46" }), _jsx("p", { className: "font-medium", children: "Gesture Test Area" }), _jsx("p", { className: "text-sm text-gray-600", children: currentGestureType !== 'none' ? `Current: ${currentGestureType}` : 'Touch to start' }), _jsx("p", { className: "text-xs text-gray-500 mt-2", children: "Swipe, pinch, tap, or long press here" })] }) }), _jsxs("div", { className: "space-y-2", children: [_jsx("h4", { className: "font-semibold", children: "Gesture History" }), _jsx("div", { className: "max-h-[300px] overflow-y-auto space-y-2", children: gestureHistory.length === 0 ? (_jsx("p", { className: "text-gray-500 text-sm", children: "No gestures detected yet" })) : (gestureHistory.map((gesture, index) => (_jsxs("div", { className: "p-2 bg-gray-50 rounded text-sm", children: [_jsxs("div", { className: "flex justify-between items-start", children: [_jsx("span", { className: "font-medium", children: gesture.type }), _jsx("span", { className: "text-xs text-gray-500", children: gesture.timestamp.toLocaleTimeString() })] }), _jsx("p", { className: "text-gray-600", children: gesture.details })] }, index)))) })] })] })] })] }) })), activeTab === 'optimization' && (_jsx("div", { className: "space-y-4", children: _jsxs(Card, { className: "touch-card", children: [_jsxs(CardHeader, { children: [_jsxs(CardTitle, { className: "flex items-center gap-2", children: ["\u26A1 Touch Optimization", _jsx(Badge, { variant: optimizationState.isOptimized ? 'default' : 'secondary', children: optimizationState.isOptimized ? 'Optimized' : 'Not Optimized' })] }), _jsx(CardDescription, { children: "Monitor touch performance and apply optimizations for better user experience." })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsxs("div", { className: "flex gap-2", children: [_jsx(Button, { onClick: applyOptimizations, variant: "default", size: "sm", children: "Apply Optimizations" }), _jsx(Button, { onClick: resetOptimizations, variant: "outline", size: "sm", children: "Reset Optimizations" })] }), _jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-4", children: [_jsxs("div", { className: "space-y-3", children: [_jsx("h4", { className: "font-semibold", children: "Optimization Status" }), _jsxs("div", { className: "space-y-2 text-sm", children: [_jsxs("div", { className: "flex justify-between", children: [_jsx("span", { children: "Touch Action:" }), _jsx(Badge, { variant: "outline", children: optimizationState.currentTouchAction })] }), _jsxs("div", { className: "flex justify-between", children: [_jsx("span", { children: "Passive Listeners:" }), _jsx(Badge, { variant: optimizationState.passiveListenersEnabled ? 'default' : 'secondary', children: optimizationState.passiveListenersEnabled ? 'Enabled' : 'Disabled' })] }), _jsxs("div", { className: "flex justify-between", children: [_jsx("span", { children: "Battery Optimization:" }), _jsx(Badge, { variant: optimizationState.batteryOptimizationEnabled ? 'default' : 'secondary', children: optimizationState.batteryOptimizationEnabled ? 'Enabled' : 'Disabled' })] }), _jsxs("div", { className: "flex justify-between", children: [_jsx("span", { children: "Throttling:" }), _jsx(Badge, { variant: optimizationState.throttlingEnabled ? 'default' : 'secondary', children: optimizationState.throttlingEnabled ? 'Enabled' : 'Disabled' })] })] })] }), _jsxs("div", { className: "space-y-3", children: [_jsx("h4", { className: "font-semibold", children: "Performance Metrics" }), _jsxs("div", { className: "space-y-2 text-sm", children: [_jsxs("div", { className: "flex justify-between", children: [_jsx("span", { children: "Touch Events:" }), _jsx("span", { children: performanceMetrics.touchEventCount })] }), _jsxs("div", { className: "flex justify-between", children: [_jsx("span", { children: "Avg Duration:" }), _jsxs("span", { children: [performanceMetrics.averageTouchDuration.toFixed(1), "ms"] })] }), _jsxs("div", { className: "flex justify-between", children: [_jsx("span", { children: "Latency:" }), _jsxs("span", { children: [performanceMetrics.touchEventLatency.toFixed(1), "ms"] })] }), _jsxs("div", { className: "flex justify-between", children: [_jsx("span", { children: "Performance:" }), _jsx("span", { className: getPerformanceScoreColor(performanceMetrics.performanceScore), children: performanceMetrics.performanceScore })] }), _jsxs("div", { className: "flex justify-between", children: [_jsx("span", { children: "Battery Impact:" }), _jsx("span", { className: getBatteryImpactColor(performanceMetrics.batteryImpact), children: performanceMetrics.batteryImpact })] })] })] })] }), _jsx("div", { ref: optimizationElementRef, className: "min-h-[200px] border-2 border-dashed border-gray-300 rounded-lg p-4 flex items-center justify-center bg-gray-50 touch-target", style: { touchAction: optimizationState.currentTouchAction }, children: _jsxs("div", { className: "text-center", children: [_jsx("div", { className: "text-2xl mb-2", children: "\u26A1" }), _jsx("p", { className: "font-medium", children: "Optimization Test Area" }), _jsx("p", { className: "text-sm text-gray-600", children: "Touch here to test optimizations" })] }) })] })] }) })), activeTab === 'mobile' && (_jsx("div", { className: "space-y-4", children: _jsxs(Card, { className: "touch-card", children: [_jsxs(CardHeader, { children: [_jsxs(CardTitle, { className: "flex items-center gap-2", children: ["\uD83D\uDCF1 Mobile Touch Behaviors", _jsx(Badge, { variant: mobileTouchState.isActive ? 'default' : 'secondary', children: mobileTouchState.isActive ? 'Active' : 'Inactive' })] }), _jsx(CardDescription, { children: "Experience mobile touch feedback, haptics, and gesture hints." })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsx("div", { className: "flex gap-2", children: _jsx(Button, { onClick: clearAllGestureHints, variant: "outline", size: "sm", children: "Clear Hints" }) }), _jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-4", children: [_jsxs("div", { className: "space-y-3", children: [_jsx("h4", { className: "font-semibold", children: "Touch Feedback Status" }), _jsxs("div", { className: "space-y-2 text-sm", children: [_jsxs("div", { className: "flex justify-between", children: [_jsx("span", { children: "Touch Count:" }), _jsx(Badge, { variant: "outline", children: mobileTouchState.touchCount })] }), _jsxs("div", { className: "flex justify-between", children: [_jsx("span", { children: "Feedback Type:" }), _jsx(Badge, { variant: "outline", children: mobileTouchState.currentFeedback.feedbackType })] }), _jsxs("div", { className: "flex justify-between", children: [_jsx("span", { children: "Intensity:" }), _jsx(Badge, { variant: "outline", children: mobileTouchState.currentFeedback.feedbackIntensity })] }), _jsxs("div", { className: "flex justify-between", children: [_jsx("span", { children: "Active Hints:" }), _jsx(Badge, { variant: "outline", children: mobileTouchState.activeGestureHints.length })] })] }), touchFeedback && (_jsx("div", { className: "p-2 bg-blue-50 border border-blue-200 rounded text-sm", children: touchFeedback }))] }), _jsxs("div", { className: "space-y-3", children: [_jsx("h4", { className: "font-semibold", children: "Active Gesture Hints" }), _jsx("div", { className: "max-h-[200px] overflow-y-auto space-y-2", children: mobileTouchState.activeGestureHints.length === 0 ? (_jsx("p", { className: "text-gray-500 text-sm", children: "No active hints" })) : (mobileTouchState.activeGestureHints.map((hint, index) => (_jsxs("div", { className: "p-2 bg-yellow-50 border border-yellow-200 rounded text-sm", children: [_jsxs("div", { className: "flex justify-between items-start", children: [_jsx("span", { className: "font-medium", children: hint.type }), _jsx("span", { className: "text-xs text-gray-500", children: new Date(hint.timeout).toLocaleTimeString() })] }), _jsx("p", { className: "text-gray-600", children: hint.message })] }, index)))) })] })] }), _jsx("div", { ref: mobileTouchElementRef, className: `min-h-[300px] border-2 border-dashed border-gray-300 rounded-lg p-4 flex items-center justify-center bg-gray-50 touch-target ${getTouchFeedbackClasses()}`, children: _jsxs("div", { className: "text-center", children: [_jsx("div", { className: "text-4xl mb-2", children: "\uD83D\uDCF1" }), _jsx("p", { className: "font-medium", children: "Mobile Touch Test Area" }), _jsx("p", { className: "text-sm text-gray-600", children: mobileTouchState.isActive ? 'Touch active' : 'Touch to start' }), _jsx("p", { className: "text-xs text-gray-500 mt-2", children: "Experience haptic feedback and touch sounds" })] }) })] })] }) }))] }));
|
|
96
|
+
};
|