shadcn-glass-ui 2.3.1 → 2.3.2
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/package.json +21 -3
- package/dist/components/blocks/avatar-gallery/index.d.ts +0 -2
- package/dist/components/blocks/avatar-gallery/index.d.ts.map +0 -1
- package/dist/components/blocks/avatar-gallery/page.d.ts +0 -7
- package/dist/components/blocks/avatar-gallery/page.d.ts.map +0 -1
- package/dist/components/blocks/badges/index.d.ts +0 -2
- package/dist/components/blocks/badges/index.d.ts.map +0 -1
- package/dist/components/blocks/badges/page.d.ts +0 -7
- package/dist/components/blocks/badges/page.d.ts.map +0 -1
- package/dist/components/blocks/buttons/index.d.ts +0 -2
- package/dist/components/blocks/buttons/index.d.ts.map +0 -1
- package/dist/components/blocks/buttons/page.d.ts +0 -7
- package/dist/components/blocks/buttons/page.d.ts.map +0 -1
- package/dist/components/blocks/form-elements/index.d.ts +0 -2
- package/dist/components/blocks/form-elements/index.d.ts.map +0 -1
- package/dist/components/blocks/form-elements/page.d.ts +0 -7
- package/dist/components/blocks/form-elements/page.d.ts.map +0 -1
- package/dist/components/blocks/index.d.ts +0 -14
- package/dist/components/blocks/index.d.ts.map +0 -1
- package/dist/components/blocks/notifications/index.d.ts +0 -2
- package/dist/components/blocks/notifications/index.d.ts.map +0 -1
- package/dist/components/blocks/notifications/page.d.ts +0 -7
- package/dist/components/blocks/notifications/page.d.ts.map +0 -1
- package/dist/components/blocks/progress/index.d.ts +0 -2
- package/dist/components/blocks/progress/index.d.ts.map +0 -1
- package/dist/components/blocks/progress/page.d.ts +0 -7
- package/dist/components/blocks/progress/page.d.ts.map +0 -1
- package/dist/components/blocks/registry.d.ts +0 -16
- package/dist/components/blocks/registry.d.ts.map +0 -1
- package/dist/components/demos/AnimatedBackground.d.ts +0 -5
- package/dist/components/demos/AnimatedBackground.d.ts.map +0 -1
- package/dist/components/demos/ComponentShowcase.d.ts +0 -6
- package/dist/components/demos/ComponentShowcase.d.ts.map +0 -1
- package/dist/components/demos/DesktopShowcase.d.ts +0 -3
- package/dist/components/demos/DesktopShowcase.d.ts.map +0 -1
- package/dist/components/demos/GlassFixesDemo.d.ts +0 -6
- package/dist/components/demos/GlassFixesDemo.d.ts.map +0 -1
- package/dist/components/demos/MobileShowcase.d.ts +0 -3
- package/dist/components/demos/MobileShowcase.d.ts.map +0 -1
- package/dist/components/glass/atomic/expandable-header-glass.d.ts +0 -16
- package/dist/components/glass/atomic/expandable-header-glass.d.ts.map +0 -1
- package/dist/components/glass/atomic/icon-button-glass.d.ts +0 -18
- package/dist/components/glass/atomic/icon-button-glass.d.ts.map +0 -1
- package/dist/components/glass/atomic/index.d.ts +0 -14
- package/dist/components/glass/atomic/index.d.ts.map +0 -1
- package/dist/components/glass/atomic/insight-card-glass.d.ts +0 -22
- package/dist/components/glass/atomic/insight-card-glass.d.ts.map +0 -1
- package/dist/components/glass/atomic/search-box-glass.d.ts +0 -17
- package/dist/components/glass/atomic/search-box-glass.d.ts.map +0 -1
- package/dist/components/glass/atomic/sort-dropdown-glass.d.ts +0 -38
- package/dist/components/glass/atomic/sort-dropdown-glass.d.ts.map +0 -1
- package/dist/components/glass/atomic/stat-item-glass.d.ts +0 -22
- package/dist/components/glass/atomic/stat-item-glass.d.ts.map +0 -1
- package/dist/components/glass/atomic/theme-toggle-glass.d.ts +0 -11
- package/dist/components/glass/atomic/theme-toggle-glass.d.ts.map +0 -1
- package/dist/components/glass/composite/ai-card-glass.d.ts +0 -7
- package/dist/components/glass/composite/ai-card-glass.d.ts.map +0 -1
- package/dist/components/glass/composite/career-stats-header-glass.d.ts +0 -15
- package/dist/components/glass/composite/career-stats-header-glass.d.ts.map +0 -1
- package/dist/components/glass/composite/circular-metric-glass.d.ts +0 -24
- package/dist/components/glass/composite/circular-metric-glass.d.ts.map +0 -1
- package/dist/components/glass/composite/contribution-metrics-glass.d.ts +0 -15
- package/dist/components/glass/composite/contribution-metrics-glass.d.ts.map +0 -1
- package/dist/components/glass/composite/index.d.ts +0 -22
- package/dist/components/glass/composite/index.d.ts.map +0 -1
- package/dist/components/glass/composite/metric-card-glass.d.ts +0 -96
- package/dist/components/glass/composite/metric-card-glass.d.ts.map +0 -1
- package/dist/components/glass/composite/metrics-grid-glass.d.ts +0 -17
- package/dist/components/glass/composite/metrics-grid-glass.d.ts.map +0 -1
- package/dist/components/glass/composite/repository-card-glass.d.ts +0 -16
- package/dist/components/glass/composite/repository-card-glass.d.ts.map +0 -1
- package/dist/components/glass/composite/repository-header-glass.d.ts +0 -16
- package/dist/components/glass/composite/repository-header-glass.d.ts.map +0 -1
- package/dist/components/glass/composite/repository-metadata-glass.d.ts +0 -13
- package/dist/components/glass/composite/repository-metadata-glass.d.ts.map +0 -1
- package/dist/components/glass/composite/split-layout-glass/index.d.ts +0 -16
- package/dist/components/glass/composite/split-layout-glass/index.d.ts.map +0 -1
- package/dist/components/glass/composite/split-layout-glass/split-layout-accordion.d.ts +0 -66
- package/dist/components/glass/composite/split-layout-glass/split-layout-accordion.d.ts.map +0 -1
- package/dist/components/glass/composite/split-layout-glass/split-layout-context.d.ts +0 -122
- package/dist/components/glass/composite/split-layout-glass/split-layout-context.d.ts.map +0 -1
- package/dist/components/glass/composite/split-layout-glass/split-layout-glass.d.ts +0 -177
- package/dist/components/glass/composite/split-layout-glass/split-layout-glass.d.ts.map +0 -1
- package/dist/components/glass/composite/trust-score-display-glass.d.ts +0 -15
- package/dist/components/glass/composite/trust-score-display-glass.d.ts.map +0 -1
- package/dist/components/glass/composite/user-info-glass.d.ts +0 -15
- package/dist/components/glass/composite/user-info-glass.d.ts.map +0 -1
- package/dist/components/glass/composite/user-stats-line-glass.d.ts +0 -15
- package/dist/components/glass/composite/user-stats-line-glass.d.ts.map +0 -1
- package/dist/components/glass/composite/year-card-glass.d.ts +0 -53
- package/dist/components/glass/composite/year-card-glass.d.ts.map +0 -1
- package/dist/components/glass/index.d.ts +0 -18
- package/dist/components/glass/index.d.ts.map +0 -1
- package/dist/components/glass/primitives/form-field-wrapper.d.ts +0 -69
- package/dist/components/glass/primitives/form-field-wrapper.d.ts.map +0 -1
- package/dist/components/glass/primitives/index.d.ts +0 -12
- package/dist/components/glass/primitives/index.d.ts.map +0 -1
- package/dist/components/glass/primitives/interactive-card.d.ts +0 -91
- package/dist/components/glass/primitives/interactive-card.d.ts.map +0 -1
- package/dist/components/glass/primitives/style-utils.d.ts +0 -147
- package/dist/components/glass/primitives/style-utils.d.ts.map +0 -1
- package/dist/components/glass/primitives/touch-target.d.ts +0 -46
- package/dist/components/glass/primitives/touch-target.d.ts.map +0 -1
- package/dist/components/glass/sections/career-stats-glass.d.ts +0 -17
- package/dist/components/glass/sections/career-stats-glass.d.ts.map +0 -1
- package/dist/components/glass/sections/flags-section-glass.d.ts +0 -13
- package/dist/components/glass/sections/flags-section-glass.d.ts.map +0 -1
- package/dist/components/glass/sections/header-branding-glass.d.ts +0 -16
- package/dist/components/glass/sections/header-branding-glass.d.ts.map +0 -1
- package/dist/components/glass/sections/header-nav-glass.d.ts +0 -7
- package/dist/components/glass/sections/header-nav-glass.d.ts.map +0 -1
- package/dist/components/glass/sections/index.d.ts +0 -13
- package/dist/components/glass/sections/index.d.ts.map +0 -1
- package/dist/components/glass/sections/profile-header-glass.d.ts +0 -16
- package/dist/components/glass/sections/profile-header-glass.d.ts.map +0 -1
- package/dist/components/glass/sections/projects-list-glass.d.ts +0 -42
- package/dist/components/glass/sections/projects-list-glass.d.ts.map +0 -1
- package/dist/components/glass/sections/trust-score-card-glass.d.ts +0 -12
- package/dist/components/glass/sections/trust-score-card-glass.d.ts.map +0 -1
- package/dist/components/glass/specialized/base-progress-glass.d.ts +0 -8
- package/dist/components/glass/specialized/base-progress-glass.d.ts.map +0 -1
- package/dist/components/glass/specialized/flag-alert-glass.d.ts +0 -8
- package/dist/components/glass/specialized/flag-alert-glass.d.ts.map +0 -1
- package/dist/components/glass/specialized/index.d.ts +0 -21
- package/dist/components/glass/specialized/index.d.ts.map +0 -1
- package/dist/components/glass/specialized/language-bar-glass.d.ts +0 -24
- package/dist/components/glass/specialized/language-bar-glass.d.ts.map +0 -1
- package/dist/components/glass/specialized/profile-avatar-glass.d.ts +0 -26
- package/dist/components/glass/specialized/profile-avatar-glass.d.ts.map +0 -1
- package/dist/components/glass/specialized/progress-glass.d.ts +0 -9
- package/dist/components/glass/specialized/progress-glass.d.ts.map +0 -1
- package/dist/components/glass/specialized/rainbow-progress-glass.d.ts +0 -8
- package/dist/components/glass/specialized/rainbow-progress-glass.d.ts.map +0 -1
- package/dist/components/glass/specialized/segmented-control-glass.d.ts +0 -11
- package/dist/components/glass/specialized/segmented-control-glass.d.ts.map +0 -1
- package/dist/components/glass/specialized/sparkline-glass.d.ts +0 -34
- package/dist/components/glass/specialized/sparkline-glass.d.ts.map +0 -1
- package/dist/components/glass/specialized/status-indicator-glass.d.ts +0 -8
- package/dist/components/glass/specialized/status-indicator-glass.d.ts.map +0 -1
- package/dist/components/glass/ui/alert-glass.d.ts +0 -13
- package/dist/components/glass/ui/alert-glass.d.ts.map +0 -1
- package/dist/components/glass/ui/avatar-glass.d.ts +0 -58
- package/dist/components/glass/ui/avatar-glass.d.ts.map +0 -1
- package/dist/components/glass/ui/badge-glass.d.ts +0 -74
- package/dist/components/glass/ui/badge-glass.d.ts.map +0 -1
- package/dist/components/glass/ui/button-glass.d.ts +0 -110
- package/dist/components/glass/ui/button-glass.d.ts.map +0 -1
- package/dist/components/glass/ui/card-glass.d.ts +0 -115
- package/dist/components/glass/ui/card-glass.d.ts.map +0 -1
- package/dist/components/glass/ui/checkbox-glass.d.ts +0 -88
- package/dist/components/glass/ui/checkbox-glass.d.ts.map +0 -1
- package/dist/components/glass/ui/circular-progress-glass.d.ts +0 -36
- package/dist/components/glass/ui/circular-progress-glass.d.ts.map +0 -1
- package/dist/components/glass/ui/combobox-glass.d.ts +0 -61
- package/dist/components/glass/ui/combobox-glass.d.ts.map +0 -1
- package/dist/components/glass/ui/dropdown-glass.d.ts +0 -83
- package/dist/components/glass/ui/dropdown-glass.d.ts.map +0 -1
- package/dist/components/glass/ui/dropdown-menu-glass.d.ts +0 -83
- package/dist/components/glass/ui/dropdown-menu-glass.d.ts.map +0 -1
- package/dist/components/glass/ui/glass-card.d.ts +0 -78
- package/dist/components/glass/ui/glass-card.d.ts.map +0 -1
- package/dist/components/glass/ui/index.d.ts +0 -50
- package/dist/components/glass/ui/index.d.ts.map +0 -1
- package/dist/components/glass/ui/input-glass.d.ts +0 -98
- package/dist/components/glass/ui/input-glass.d.ts.map +0 -1
- package/dist/components/glass/ui/modal-glass.d.ts +0 -180
- package/dist/components/glass/ui/modal-glass.d.ts.map +0 -1
- package/dist/components/glass/ui/notification-glass.d.ts +0 -13
- package/dist/components/glass/ui/notification-glass.d.ts.map +0 -1
- package/dist/components/glass/ui/popover-glass.d.ts +0 -74
- package/dist/components/glass/ui/popover-glass.d.ts.map +0 -1
- package/dist/components/glass/ui/sidebar-glass/index.d.ts +0 -100
- package/dist/components/glass/ui/sidebar-glass/index.d.ts.map +0 -1
- package/dist/components/glass/ui/sidebar-glass/sidebar-context.d.ts +0 -96
- package/dist/components/glass/ui/sidebar-glass/sidebar-context.d.ts.map +0 -1
- package/dist/components/glass/ui/sidebar-glass/sidebar-glass.d.ts +0 -88
- package/dist/components/glass/ui/sidebar-glass/sidebar-glass.d.ts.map +0 -1
- package/dist/components/glass/ui/sidebar-glass/sidebar-menu.d.ts +0 -121
- package/dist/components/glass/ui/sidebar-glass/sidebar-menu.d.ts.map +0 -1
- package/dist/components/glass/ui/skeleton-glass.d.ts +0 -8
- package/dist/components/glass/ui/skeleton-glass.d.ts.map +0 -1
- package/dist/components/glass/ui/slider-glass.d.ts +0 -38
- package/dist/components/glass/ui/slider-glass.d.ts.map +0 -1
- package/dist/components/glass/ui/stepper-glass.d.ts +0 -63
- package/dist/components/glass/ui/stepper-glass.d.ts.map +0 -1
- package/dist/components/glass/ui/tabs-glass.d.ts +0 -150
- package/dist/components/glass/ui/tabs-glass.d.ts.map +0 -1
- package/dist/components/glass/ui/toggle-glass.d.ts +0 -27
- package/dist/components/glass/ui/toggle-glass.d.ts.map +0 -1
- package/dist/components/glass/ui/tooltip-glass.d.ts +0 -65
- package/dist/components/glass/ui/tooltip-glass.d.ts.map +0 -1
- package/dist/components/ui/alert.d.ts +0 -8
- package/dist/components/ui/alert.d.ts.map +0 -1
- package/dist/components/ui/avatar.d.ts +0 -7
- package/dist/components/ui/avatar.d.ts.map +0 -1
- package/dist/components/ui/badge.d.ts +0 -8
- package/dist/components/ui/badge.d.ts.map +0 -1
- package/dist/components/ui/button.d.ts +0 -8
- package/dist/components/ui/button.d.ts.map +0 -1
- package/dist/components/ui/card.d.ts +0 -10
- package/dist/components/ui/card.d.ts.map +0 -1
- package/dist/components/ui/chart.d.ts +0 -69
- package/dist/components/ui/chart.d.ts.map +0 -1
- package/dist/components/ui/checkbox.d.ts +0 -5
- package/dist/components/ui/checkbox.d.ts.map +0 -1
- package/dist/components/ui/collapsible.d.ts +0 -6
- package/dist/components/ui/collapsible.d.ts.map +0 -1
- package/dist/components/ui/command.d.ts +0 -19
- package/dist/components/ui/command.d.ts.map +0 -1
- package/dist/components/ui/dialog.d.ts +0 -16
- package/dist/components/ui/dialog.d.ts.map +0 -1
- package/dist/components/ui/dropdown-menu.d.ts +0 -26
- package/dist/components/ui/dropdown-menu.d.ts.map +0 -1
- package/dist/components/ui/input.d.ts +0 -4
- package/dist/components/ui/input.d.ts.map +0 -1
- package/dist/components/ui/popover.d.ts +0 -8
- package/dist/components/ui/popover.d.ts.map +0 -1
- package/dist/components/ui/progress.d.ts +0 -5
- package/dist/components/ui/progress.d.ts.map +0 -1
- package/dist/components/ui/scroll-area.d.ts +0 -6
- package/dist/components/ui/scroll-area.d.ts.map +0 -1
- package/dist/components/ui/separator.d.ts +0 -5
- package/dist/components/ui/separator.d.ts.map +0 -1
- package/dist/components/ui/skeleton.d.ts +0 -3
- package/dist/components/ui/skeleton.d.ts.map +0 -1
- package/dist/components/ui/slider.d.ts +0 -5
- package/dist/components/ui/slider.d.ts.map +0 -1
- package/dist/components/ui/sonner.d.ts +0 -4
- package/dist/components/ui/sonner.d.ts.map +0 -1
- package/dist/components/ui/switch.d.ts +0 -5
- package/dist/components/ui/switch.d.ts.map +0 -1
- package/dist/components/ui/tabs.d.ts +0 -8
- package/dist/components/ui/tabs.d.ts.map +0 -1
- package/dist/components/ui/tooltip.d.ts +0 -8
- package/dist/components/ui/tooltip.d.ts.map +0 -1
- package/dist/components.d.ts.map +0 -1
- package/dist/demo-screenshot-aurora.png +0 -0
- package/dist/demo-screenshot.png +0 -0
- package/dist/demo-screenshot.png.zip +0 -0
- package/dist/hooks.d.ts.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/lib/config.d.ts +0 -28
- package/dist/lib/config.d.ts.map +0 -1
- package/dist/lib/hooks/index.d.ts +0 -11
- package/dist/lib/hooks/index.d.ts.map +0 -1
- package/dist/lib/hooks/use-focus.d.ts +0 -61
- package/dist/lib/hooks/use-focus.d.ts.map +0 -1
- package/dist/lib/hooks/use-hover.d.ts +0 -54
- package/dist/lib/hooks/use-hover.d.ts.map +0 -1
- package/dist/lib/hooks/use-responsive.d.ts +0 -44
- package/dist/lib/hooks/use-responsive.d.ts.map +0 -1
- package/dist/lib/hooks/use-wallpaper-tint.d.ts +0 -57
- package/dist/lib/hooks/use-wallpaper-tint.d.ts.map +0 -1
- package/dist/lib/hooks.d.ts +0 -92
- package/dist/lib/hooks.d.ts.map +0 -1
- package/dist/lib/theme/tokens.d.ts +0 -441
- package/dist/lib/theme/tokens.d.ts.map +0 -1
- package/dist/lib/theme-context.d.ts +0 -115
- package/dist/lib/theme-context.d.ts.map +0 -1
- package/dist/lib/types.d.ts +0 -24
- package/dist/lib/types.d.ts.map +0 -1
- package/dist/lib/utils.d.ts +0 -8
- package/dist/lib/utils.d.ts.map +0 -1
- package/dist/lib/variants/alert-glass-variants.d.ts +0 -10
- package/dist/lib/variants/alert-glass-variants.d.ts.map +0 -1
- package/dist/lib/variants/alert-variants.d.ts +0 -8
- package/dist/lib/variants/alert-variants.d.ts.map +0 -1
- package/dist/lib/variants/avatar-glass-variants.d.ts +0 -12
- package/dist/lib/variants/avatar-glass-variants.d.ts.map +0 -1
- package/dist/lib/variants/badge-glass-variants.d.ts +0 -10
- package/dist/lib/variants/badge-glass-variants.d.ts.map +0 -1
- package/dist/lib/variants/badge-variants.d.ts +0 -8
- package/dist/lib/variants/badge-variants.d.ts.map +0 -1
- package/dist/lib/variants/button-glass-variants.d.ts +0 -29
- package/dist/lib/variants/button-glass-variants.d.ts.map +0 -1
- package/dist/lib/variants/button-variants.d.ts +0 -9
- package/dist/lib/variants/button-variants.d.ts.map +0 -1
- package/dist/lib/variants/dropdown-content-styles.d.ts +0 -102
- package/dist/lib/variants/dropdown-content-styles.d.ts.map +0 -1
- package/dist/lib/variants/dropdown-glass-variants.d.ts +0 -9
- package/dist/lib/variants/dropdown-glass-variants.d.ts.map +0 -1
- package/dist/lib/variants/glass-card-variants.d.ts +0 -13
- package/dist/lib/variants/glass-card-variants.d.ts.map +0 -1
- package/dist/lib/variants/index.d.ts +0 -26
- package/dist/lib/variants/index.d.ts.map +0 -1
- package/dist/lib/variants/input-glass-variants.d.ts +0 -9
- package/dist/lib/variants/input-glass-variants.d.ts.map +0 -1
- package/dist/lib/variants/insight-card-glass-variants.d.ts +0 -11
- package/dist/lib/variants/insight-card-glass-variants.d.ts.map +0 -1
- package/dist/lib/variants/modal-glass-variants.d.ts +0 -9
- package/dist/lib/variants/modal-glass-variants.d.ts.map +0 -1
- package/dist/lib/variants/notification-glass-variants.d.ts +0 -9
- package/dist/lib/variants/notification-glass-variants.d.ts.map +0 -1
- package/dist/lib/variants/progress-glass-variants.d.ts +0 -10
- package/dist/lib/variants/progress-glass-variants.d.ts.map +0 -1
- package/dist/lib/variants/skeleton-glass-variants.d.ts +0 -9
- package/dist/lib/variants/skeleton-glass-variants.d.ts.map +0 -1
- package/dist/lib/variants/sparkline-glass-variants.d.ts +0 -10
- package/dist/lib/variants/sparkline-glass-variants.d.ts.map +0 -1
- package/dist/lib/variants/stepper-glass-variants.d.ts +0 -40
- package/dist/lib/variants/stepper-glass-variants.d.ts.map +0 -1
- package/dist/lib/variants/toggle-glass-variants.d.ts +0 -26
- package/dist/lib/variants/toggle-glass-variants.d.ts.map +0 -1
- package/dist/lib/variants/tooltip-glass-variants.d.ts +0 -9
- package/dist/lib/variants/tooltip-glass-variants.d.ts.map +0 -1
- package/dist/theme-context-7NcW0KZL.cjs.map +0 -1
- package/dist/theme-context-DLS2uAgJ.mjs.map +0 -1
- package/dist/themes.d.ts.map +0 -1
- package/dist/trust-score-card-glass-BGqBcdyJ.mjs.map +0 -1
- package/dist/trust-score-card-glass-DtgFygh5.cjs.map +0 -1
- package/dist/use-focus-BFBcpBh1.cjs.map +0 -1
- package/dist/use-focus-C5kPAKr_.mjs.map +0 -1
- package/dist/use-wallpaper-tint-C0kYXNiN.mjs.map +0 -1
- package/dist/use-wallpaper-tint-DTTStm5f.cjs.map +0 -1
- package/dist/utils-B792GPM_.mjs.map +0 -1
- package/dist/utils-CiuCe_Aq.cjs.map +0 -1
- package/dist/utils.d.ts.map +0 -1
- package/docs/AI_IMPROVEMENTS_COMPLETE.md +0 -574
- package/docs/API_PATTERNS_COMPARISON.md +0 -419
- package/docs/COMPLIANCE_CHECKLIST.md +0 -307
- package/docs/COMPLIANCE_TESTING.md +0 -436
- package/docs/CSS_VARIABLES_AUDIT.md +0 -306
- package/docs/CSS_VARIABLES_REFACTORING_PLAN.md +0 -330
- package/docs/DROPDOWN_ARCHITECTURE.md +0 -290
- package/docs/METRIC_CARD_API_REDESIGN.md +0 -354
- package/docs/PRIMITIVE_MAPPING.md +0 -404
- package/docs/PUBLISHING.md +0 -593
- package/docs/REGISTRY_SUMMARY.md +0 -96
- package/docs/SECURITY.md +0 -117
- package/docs/api/README.md +0 -723
- package/docs/api/functions/ThemeProvider.md +0 -21
- package/docs/api/functions/cn.md +0 -27
- package/docs/api/functions/getNextTheme.md +0 -21
- package/docs/api/functions/getThemeConfig.md +0 -21
- package/docs/api/functions/useFocus.md +0 -53
- package/docs/api/functions/useHover.md +0 -47
- package/docs/api/functions/useResponsive.md +0 -31
- package/docs/api/functions/useTheme.md +0 -15
- package/docs/api/functions/useWallpaperTint.md +0 -36
- package/docs/api/globals.md +0 -139
- package/docs/api/interfaces/AlertGlassProps.md +0 -131
- package/docs/api/interfaces/AvatarGlassProps.md +0 -114
- package/docs/api/interfaces/BadgeGlassProps.md +0 -125
- package/docs/api/interfaces/ButtonGlassProps.md +0 -186
- package/docs/api/interfaces/CheckboxGlassProps.md +0 -125
- package/docs/api/interfaces/DropdownGlassProps.md +0 -123
- package/docs/api/interfaces/DropdownItem.md +0 -53
- package/docs/api/interfaces/GlassCardProps.md +0 -151
- package/docs/api/interfaces/InputGlassProps.md +0 -169
- package/docs/api/interfaces/NotificationGlassProps.md +0 -67
- package/docs/api/interfaces/ProgressGlassProps.md +0 -49
- package/docs/api/interfaces/SkeletonGlassProps.md +0 -41
- package/docs/api/interfaces/SliderGlassProps.md +0 -107
- package/docs/api/interfaces/TabItem.md +0 -25
- package/docs/api/interfaces/ThemeConfig.md +0 -25
- package/docs/api/interfaces/ThemeContextValue.md +0 -47
- package/docs/api/interfaces/ToggleGlassProps.md +0 -59
- package/docs/api/interfaces/TooltipGlassProps.md +0 -119
- package/docs/api/type-aliases/AlertType.md +0 -11
- package/docs/api/type-aliases/AlertVariant.md +0 -11
- package/docs/api/type-aliases/AvatarSize.md +0 -11
- package/docs/api/type-aliases/AvatarStatus.md +0 -13
- package/docs/api/type-aliases/BadgeSize.md +0 -11
- package/docs/api/type-aliases/BadgeVariant.md +0 -11
- package/docs/api/type-aliases/ButtonGlassSize.md +0 -11
- package/docs/api/type-aliases/ButtonGlassVariant.md +0 -11
- package/docs/api/type-aliases/DropdownAlign.md +0 -11
- package/docs/api/type-aliases/GlowType.md +0 -11
- package/docs/api/type-aliases/InputGlassSize.md +0 -11
- package/docs/api/type-aliases/IntensityType.md +0 -11
- package/docs/api/type-aliases/ModalSize.md +0 -11
- package/docs/api/type-aliases/NotificationType.md +0 -11
- package/docs/api/type-aliases/PaddingType.md +0 -11
- package/docs/api/type-aliases/ProgressGradient.md +0 -11
- package/docs/api/type-aliases/ProgressSize.md +0 -11
- package/docs/api/type-aliases/SkeletonVariant.md +0 -11
- package/docs/api/type-aliases/Theme.md +0 -11
- package/docs/api/type-aliases/ToggleGlassSize.md +0 -11
- package/docs/api/type-aliases/TooltipPosition.md +0 -11
- package/docs/api/variables/AICardGlass.md +0 -11
- package/docs/api/variables/AlertGlass.md +0 -11
- package/docs/api/variables/AvatarGlass.md +0 -11
- package/docs/api/variables/BadgeGlass.md +0 -11
- package/docs/api/variables/BaseProgressGlass.md +0 -11
- package/docs/api/variables/ButtonGlass.md +0 -11
- package/docs/api/variables/CareerStatsGlass.md +0 -11
- package/docs/api/variables/CareerStatsHeaderGlass.md +0 -11
- package/docs/api/variables/CheckboxGlass.md +0 -11
- package/docs/api/variables/CircularMetricGlass.md +0 -22
- package/docs/api/variables/CircularProgressGlass.md +0 -11
- package/docs/api/variables/ComboBoxGlass.md +0 -27
- package/docs/api/variables/ContributionMetricsGlass.md +0 -11
- package/docs/api/variables/DropdownGlass.md +0 -11
- package/docs/api/variables/ExpandableHeaderGlass.md +0 -11
- package/docs/api/variables/FlagAlertGlass.md +0 -11
- package/docs/api/variables/FlagsSectionGlass.md +0 -11
- package/docs/api/variables/FormFieldWrapper.md +0 -44
- package/docs/api/variables/GlassCard.md +0 -11
- package/docs/api/variables/HeaderBrandingGlass.md +0 -11
- package/docs/api/variables/HeaderNavGlass.md +0 -11
- package/docs/api/variables/IconButtonGlass.md +0 -11
- package/docs/api/variables/InputGlass.md +0 -11
- package/docs/api/variables/InteractiveCard.md +0 -45
- package/docs/api/variables/LanguageBarGlass.md +0 -11
- package/docs/api/variables/MetricCardGlass.md +0 -11
- package/docs/api/variables/MetricsGridGlass.md +0 -11
- package/docs/api/variables/ModalGlass.md +0 -73
- package/docs/api/variables/NotificationGlass.md +0 -11
- package/docs/api/variables/PopoverGlass.md +0 -11
- package/docs/api/variables/ProfileAvatarGlass.md +0 -11
- package/docs/api/variables/ProfileHeaderGlass.md +0 -11
- package/docs/api/variables/ProgressGlass.md +0 -11
- package/docs/api/variables/ProjectsListGlass.md +0 -11
- package/docs/api/variables/RainbowProgressGlass.md +0 -11
- package/docs/api/variables/RepositoryCardGlass.md +0 -11
- package/docs/api/variables/RepositoryHeaderGlass.md +0 -11
- package/docs/api/variables/RepositoryMetadataGlass.md +0 -11
- package/docs/api/variables/SearchBoxGlass.md +0 -11
- package/docs/api/variables/SegmentedControlGlass.md +0 -11
- package/docs/api/variables/SkeletonGlass.md +0 -11
- package/docs/api/variables/SliderGlass.md +0 -11
- package/docs/api/variables/SortDropdownGlass.md +0 -11
- package/docs/api/variables/StatItemGlass.md +0 -11
- package/docs/api/variables/StatusIndicatorGlass.md +0 -11
- package/docs/api/variables/THEMES.md +0 -11
- package/docs/api/variables/THEME_CONFIG.md +0 -11
- package/docs/api/variables/TabsGlass.md +0 -52
- package/docs/api/variables/ThemeToggleGlass.md +0 -11
- package/docs/api/variables/ToggleGlass.md +0 -11
- package/docs/api/variables/TooltipGlass.md +0 -11
- package/docs/api/variables/TouchTarget.md +0 -35
- package/docs/api/variables/TrustScoreCardGlass.md +0 -11
- package/docs/api/variables/TrustScoreDisplayGlass.md +0 -11
- package/docs/api/variables/UserInfoGlass.md +0 -11
- package/docs/api/variables/UserStatsLineGlass.md +0 -11
- package/docs/api/variables/YearCardGlass.md +0 -11
- package/docs/api/variables/alertVariants.md +0 -21
- package/docs/api/variables/avatarSizes.md +0 -21
- package/docs/api/variables/badgeVariants.md +0 -21
- package/docs/api/variables/buttonGlassVariants.md +0 -21
- package/docs/api/variables/cardIntensity.md +0 -21
- package/docs/api/variables/dropdownAlign.md +0 -21
- package/docs/api/variables/inputVariants.md +0 -21
- package/docs/api/variables/modalSizes.md +0 -21
- package/docs/api/variables/notificationVariants.md +0 -21
- package/docs/api/variables/progressSizes.md +0 -21
- package/docs/api/variables/shadcnAlertVariants.md +0 -21
- package/docs/api/variables/shadcnBadgeVariants.md +0 -21
- package/docs/api/variables/shadcnButtonVariants.md +0 -21
- package/docs/api/variables/skeletonVariants.md +0 -21
- package/docs/api/variables/statusSizes.md +0 -21
- package/docs/api/variables/toggleSizes.md +0 -21
- package/docs/api/variables/tooltipPositions.md +0 -21
- package/docs/design-system/UI_DESIGN.md +0 -628
- package/docs/technical/DEPENDENCIES.md +0 -291
- package/docs/visual-testing-guide.md +0 -362
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"trust-score-card-glass-BGqBcdyJ.mjs","names":["transforms: string[]","cardStyles: CSSProperties","iconMap: Record<AlertVariant, typeof Info>","variantStyles: Record<AlertVariant, AlertStyleVars>","effectiveVariant: AlertVariant","statusVars: Record<AvatarStatus, { bg: string; glow: string }>","avatarStyles: React.CSSProperties","AvatarGlassSimple: React.FC<AvatarGlassSimpleProps>","variantStyles: Record<BadgeVariant, BadgeStyleVars>","baseStyles: Record<ButtonGlassVariant, CSSProperties>","checkboxStyles: React.CSSProperties","gradients: Record<CircularProgressGradient, { from: string; to: string; glowVar: string }>","variants: Record<GlassVariant, string>","blurMap: Record<IntensityType, string>","bgVarMap: Record<IntensityType, string>","borderVarMap: Record<IntensityType, string>","glowVarMap: Record<string, string>","cardStyles: CSSProperties","configs: Record<NotificationType, { color: string; glow: string; iconBg: string }>","variantToType: Record<string, NotificationType>","effectiveType: NotificationType","containerStyles: CSSProperties","iconContainerStyles: CSSProperties","popoverStyles: React.CSSProperties","arrowStyles: React.CSSProperties","skeletonStyles: CSSProperties","trackStyles: CSSProperties","rangeStyles: CSSProperties","thumbStyles: CSSProperties","knobStyles: CSSProperties","TooltipGlassProvider: React.FC<TooltipGlassProviderProps>","tooltipStyles: React.CSSProperties","TooltipGlassSimple: React.FC<TooltipGlassSimpleProps>","textStyles: CSSProperties","chevronStyles: CSSProperties","iconStyles: CSSProperties","gradientStyles: CSSProperties | undefined","subtleStyles: CSSProperties | undefined","iconStyles: CSSProperties","insightVariantConfig: Record<\n InsightVariant,\n {\n defaultEmoji: string;\n glowVar: string | null;\n borderVar: string;\n }\n>","borderStyle: CSSProperties","glowStyle: CSSProperties","containerStyles: CSSProperties","inputStyles: CSSProperties","buttonStyles: CSSProperties","fieldLabels: Record<SortField, string>","textStyles: CSSProperties","iconStyles: CSSProperties","themes: ThemeName[]","themeConfig: Record<ThemeName, { label: string; icon: typeof Sun }>","buttonStyles: CSSProperties","iconStyles: CSSProperties","sizeClasses: Record<StatusSize, string>","statusSymbols: Record<StatusType, string>","statusVarMap: Record<StatusType, { bg: string; glow: string }>","indicatorStyles: CSSProperties","flagVarMap: Record<\n FlagType,\n { bg: string; border: string; text: string; statusType: StatusType }\n>","alertStyles: CSSProperties","defaultLangColors: Record<string, string>","barStyles: CSSProperties","segmentStyles: CSSProperties","profileSizeClasses: Record<ProfileAvatarSize, string>","statusVars: Record<AvatarStatus, { bg: string; glow: string }>","avatarStyles: CSSProperties","gradients: Record<ProgressGradient, { colorVar: string; glowVar: string }>","trackStyles: CSSProperties","fillStyles: CSSProperties","sizeClasses: Record<RainbowProgressSize, string>","trackStyles: CSSProperties","fillStyles: CSSProperties","containerStyles: CSSProperties","buttonStyles: CSSProperties","defaultFeatures: readonly string[]","titleStyles: CSSProperties","accentStyles: CSSProperties","statsStyles: CSSProperties","colorMap: Record<\n CircularMetricColor,\n { gradient: CircularProgressGradient; textVar: string }\n>","cardStyles: CSSProperties","mutedStyles: CSSProperties","primaryStyles: CSSProperties","variantStyles: Record<MetricVariant, VariantStyle>","variantToGradient: Record<MetricVariant, ProgressGradient>","colorToVariant: Record<MetricColor, MetricVariant>","trendColors: Record<TrendDirection, string>","TrendIcons: Record<TrendDirection, typeof TrendingUp>","actualVariant: MetricVariant","valueStyles: CSSProperties","direction: TrendDirection","expandedStyles: CSSProperties","metricCardStyles: CSSProperties","titleStyles: CSSProperties","starStyles: CSSProperties","mutedStyles: CSSProperties","mutedStyles: CSSProperties","secondaryStyles: CSSProperties","titleStyles: CSSProperties","accentStyles: CSSProperties","mutedStyles: CSSProperties","titleStyles: CSSProperties","metaStyles: CSSProperties","linkStyles: CSSProperties","expandedStyles: CSSProperties","metricCardStyles: CSSProperties","titleStyles: CSSProperties","themes: ThemeName[]","themeConfig: Record<ThemeName, { label: string; icon: typeof Sun }>","headerStyles: CSSProperties","iconBtnStyles: CSSProperties","themeBtnStyles: CSSProperties","emptyContainerStyles: CSSProperties"],"sources":["../src/lib/variants/alert-glass-variants.ts","../src/components/glass/primitives/style-utils.ts","../src/components/glass/primitives/touch-target.tsx","../src/components/glass/primitives/form-field-wrapper.tsx","../src/components/glass/primitives/interactive-card.tsx","../src/components/glass/ui/alert-glass.tsx","../src/lib/variants/avatar-glass-variants.ts","../src/components/glass/ui/avatar-glass.tsx","../src/lib/variants/badge-glass-variants.ts","../src/components/glass/ui/badge-glass.tsx","../src/lib/variants/button-glass-variants.ts","../src/components/glass/ui/button-glass.tsx","../src/components/glass/ui/checkbox-glass.tsx","../src/components/glass/ui/circular-progress-glass.tsx","../src/components/ui/popover.tsx","../src/components/ui/command.tsx","../src/lib/variants/input-glass-variants.ts","../src/lib/variants/dropdown-content-styles.ts","../src/components/glass/ui/combobox-glass.tsx","../src/components/glass/ui/dropdown-menu-glass.tsx","../src/components/glass/ui/dropdown-glass.tsx","../src/lib/variants/glass-card-variants.ts","../src/components/glass/ui/glass-card.tsx","../src/components/glass/ui/input-glass.tsx","../src/lib/variants/modal-glass-variants.ts","../src/components/glass/ui/modal-glass.tsx","../src/lib/variants/notification-glass-variants.ts","../src/components/glass/ui/notification-glass.tsx","../src/components/glass/ui/popover-glass.tsx","../src/lib/variants/skeleton-glass-variants.ts","../src/components/glass/ui/skeleton-glass.tsx","../src/components/glass/ui/slider-glass.tsx","../src/components/glass/ui/tabs-glass.tsx","../src/lib/variants/toggle-glass-variants.ts","../src/components/glass/ui/toggle-glass.tsx","../src/components/glass/ui/tooltip-glass.tsx","../src/components/glass/atomic/expandable-header-glass.tsx","../src/components/glass/atomic/icon-button-glass.tsx","../src/lib/variants/insight-card-glass-variants.ts","../src/components/glass/atomic/insight-card-glass.tsx","../src/components/glass/atomic/search-box-glass.tsx","../src/components/glass/atomic/sort-dropdown-glass.tsx","../src/components/glass/atomic/stat-item-glass.tsx","../src/components/glass/atomic/theme-toggle-glass.tsx","../src/components/glass/specialized/base-progress-glass.tsx","../src/components/glass/specialized/status-indicator-glass.tsx","../src/components/glass/specialized/flag-alert-glass.tsx","../src/components/glass/specialized/language-bar-glass.tsx","../src/components/glass/specialized/profile-avatar-glass.tsx","../src/lib/variants/progress-glass-variants.ts","../src/components/glass/specialized/progress-glass.tsx","../src/components/glass/specialized/rainbow-progress-glass.tsx","../src/components/glass/specialized/segmented-control-glass.tsx","../src/lib/variants/sparkline-glass-variants.ts","../src/components/glass/specialized/sparkline-glass.tsx","../src/components/glass/composite/ai-card-glass.tsx","../src/components/glass/composite/career-stats-header-glass.tsx","../src/components/glass/composite/circular-metric-glass.tsx","../src/components/glass/composite/contribution-metrics-glass.tsx","../src/components/glass/composite/metric-card-glass.tsx","../src/components/glass/composite/metrics-grid-glass.tsx","../src/components/glass/composite/repository-card-glass.tsx","../src/components/glass/composite/repository-header-glass.tsx","../src/components/glass/composite/repository-metadata-glass.tsx","../src/components/glass/composite/trust-score-display-glass.tsx","../src/components/glass/composite/user-info-glass.tsx","../src/components/glass/composite/user-stats-line-glass.tsx","../src/components/glass/composite/year-card-glass.tsx","../src/components/glass/sections/career-stats-glass.tsx","../src/components/glass/sections/flags-section-glass.tsx","../src/components/glass/sections/header-branding-glass.tsx","../src/components/glass/sections/header-nav-glass.tsx","../src/components/glass/sections/profile-header-glass.tsx","../src/components/glass/sections/projects-list-glass.tsx","../src/components/glass/sections/trust-score-card-glass.tsx"],"sourcesContent":["/**\n * AlertGlass CVA Variants\n * Extracted for Fast Refresh compatibility\n */\n\nimport { cva } from 'class-variance-authority';\n\n// shadcn/ui compatible\nexport type AlertVariant =\n // shadcn/ui compatible variants\n | 'default'\n | 'destructive'\n // Glass UI extended variants\n | 'success'\n | 'warning'\n // Backward compatibility aliases\n | 'info' // alias for 'default'\n | 'error'; // alias for 'destructive'\n\n// Deprecated: use AlertVariant instead\nexport type AlertType = AlertVariant;\n\nexport const alertVariants = cva(\n 'flex items-start gap-2 md:gap-3 p-3 md:p-4 rounded-xl transition-all duration-300 backdrop-blur-sm min-w-96 max-w-2xl',\n {\n variants: {\n variant: {\n default: '',\n destructive: '',\n success: '',\n warning: '',\n info: '', // alias for default\n error: '', // alias for destructive\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n","/**\n * Style Utilities for Glass Components\n *\n * Centralized style constants and helper functions to reduce code duplication\n * and ensure consistency across all glass components.\n */\n\nimport type { CSSProperties } from 'react';\n\n// ============================================\n// ICON SIZES\n// ============================================\n\n/**\n * Standard icon size constants used across all glass components.\n * Provides consistent sizing with responsive variants.\n *\n * @example\n * ```tsx\n * <Icon className={ICON_SIZES.md} />\n * ```\n */\nexport const ICON_SIZES = {\n xs: 'w-2.5 h-2.5 md:w-3 md:h-3',\n sm: 'w-3 h-3 md:w-3.5 md:h-3.5',\n md: 'w-3.5 h-3.5 md:w-4 md:h-4', // Most common - default\n lg: 'w-4 h-4 md:w-5 md:h-5',\n xl: 'w-5 h-5 md:w-6 md:h-6',\n} as const;\n\n/**\n * Type representing available icon sizes\n */\nexport type IconSize = keyof typeof ICON_SIZES;\n\n// ============================================\n// GLASS SURFACE STYLES\n// ============================================\n\n/**\n * Options for generating glass surface styles\n */\nexport interface GlassSurfaceOptions {\n /** CSS variable for background, e.g. 'var(--card-bg)' */\n bg: string;\n /** CSS variable for border color */\n border: string;\n /** Blur intensity level */\n blur?: 'sm' | 'md' | 'lg' | 'xl';\n /** CSS variable for glow/shadow effect */\n shadow?: string;\n}\n\n/**\n * Generate consistent glass surface styles with backdrop blur.\n *\n * Applies glassmorphism effect with configurable blur, background,\n * border, and optional glow shadow.\n *\n * @param options - Surface styling options\n * @returns React CSSProperties object\n *\n * @example\n * ```tsx\n * const styles = getGlassSurfaceStyles({\n * bg: 'var(--card-bg)',\n * border: 'var(--card-border)',\n * blur: 'md',\n * shadow: 'var(--glow-primary)'\n * });\n * ```\n */\nexport function getGlassSurfaceStyles(\n options: GlassSurfaceOptions\n): CSSProperties {\n const blurValue = options.blur ?? 'md';\n return {\n background: options.bg,\n border: `1px solid ${options.border}`,\n backdropFilter: `blur(var(--blur-${blurValue}))`,\n WebkitBackdropFilter: `blur(var(--blur-${blurValue}))`,\n boxShadow: options.shadow ?? 'none',\n };\n}\n\n// ============================================\n// HOVER TRANSFORM STYLES\n// ============================================\n\n/**\n * Options for hover transform effects\n */\nexport interface HoverTransformOptions {\n /** Enable vertical lift effect (translateY) */\n lift?: boolean;\n /** Scale factor on hover (e.g., 1.02) */\n scale?: number;\n}\n\n/**\n * Generate hover transform styles with smooth transitions.\n *\n * Provides consistent hover animations across interactive elements.\n * Supports lift (translateY) and scale effects.\n *\n * @param isHovered - Current hover state\n * @param options - Transform options\n * @returns React CSSProperties object\n *\n * @example\n * ```tsx\n * const styles = getHoverTransformStyles(isHovered, {\n * lift: true,\n * scale: 1.02\n * });\n * ```\n */\nexport function getHoverTransformStyles(\n isHovered: boolean,\n options?: HoverTransformOptions\n): CSSProperties {\n const { lift = true, scale } = options ?? {};\n\n const transforms: string[] = [];\n\n if (lift) {\n transforms.push(isHovered ? 'translateY(-2px)' : 'translateY(0)');\n }\n\n if (scale && isHovered) {\n transforms.push(`scale(${scale})`);\n }\n\n return {\n transform: transforms.join(' ') || 'none',\n transition: 'transform var(--transition-base)',\n };\n}\n\n// ============================================\n// FORM FIELD BORDER COLOR\n// ============================================\n\n/**\n * Options for determining form field border color\n */\nexport interface StateBorderColorOptions {\n /** Error message (highest priority) */\n error?: string;\n /** Success message */\n success?: string;\n /** Focus state */\n isFocused?: boolean;\n /** Default border color when no state is active */\n defaultColor?: string;\n}\n\n/**\n * Determine border color based on form field state.\n *\n * Priority order: error > success > focus > default\n *\n * @param options - State and color options\n * @returns CSS variable string for border color\n *\n * @example\n * ```tsx\n * const borderColor = getStateBorderColor({\n * error: 'Username is required',\n * isFocused: true,\n * defaultColor: 'var(--input-border)'\n * });\n * // Returns: 'var(--alert-danger-text)' due to error priority\n * ```\n */\nexport function getStateBorderColor(\n options: StateBorderColorOptions\n): string {\n if (options.error) return 'var(--alert-danger-text)';\n if (options.success) return 'var(--alert-success-text)';\n if (options.isFocused) return 'var(--input-focus-border)';\n return options.defaultColor ?? 'var(--input-border)';\n}\n\n// ============================================\n// BLUR VALUES\n// ============================================\n\n/**\n * Standard blur values from design system (UI_DESIGN.md)\n *\n * - sm: 8px (subtle effects, close to surface)\n * - md: 16px (standard glassmorphism)\n * - lg: 24px (prominent glass layers)\n * - xl: 32px (heavy blur for modals/overlays)\n */\nexport const BLUR_VALUES = {\n sm: 'var(--blur-sm)', // 8px\n md: 'var(--blur-md)', // 16px\n lg: 'var(--blur-lg)', // 24px\n xl: 'var(--blur-xl)', // 32px\n} as const;\n\n/**\n * Type representing available blur levels\n */\nexport type BlurLevel = keyof typeof BLUR_VALUES;\n\n// ============================================\n// TRANSITION DURATIONS\n// ============================================\n\n/**\n * Standard transition duration constants\n *\n * Matches design system animation tokens\n */\nexport const TRANSITIONS = {\n fast: 'var(--transition-fast)', // 150ms\n base: 'var(--transition-base)', // 200ms\n slow: 'var(--transition-slow)', // 300ms\n} as const;\n\n/**\n * Type representing available transition speeds\n */\nexport type TransitionSpeed = keyof typeof TRANSITIONS;\n","/**\n * TouchTarget Component\n *\n * Ensures minimum touch target size compliance with Apple Human Interface Guidelines.\n * Wraps interactive elements to guarantee accessibility on touch devices.\n *\n * Apple HIG recommends minimum 44×44pt (44×44px) touch targets.\n * Material Design recommends 48×48dp for better accessibility.\n *\n * @see https://developer.apple.com/design/human-interface-guidelines/layout\n */\n\nimport { forwardRef, type ReactNode, type HTMLAttributes } from 'react';\nimport { cn } from '@/lib/utils';\n\n/**\n * Props for the TouchTarget component\n */\nexport interface TouchTargetProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Child element(s) to wrap with touch target\n */\n children: ReactNode;\n\n /**\n * Minimum touch target size in pixels\n * @default 44 - Apple HIG minimum\n */\n minSize?: 44 | 48;\n\n /**\n * Center content within touch target\n * @default true\n */\n center?: boolean;\n}\n\n/**\n * TouchTarget wrapper component\n *\n * Ensures interactive elements meet accessibility standards for touch devices.\n * Automatically applies minimum dimensions and optional centering.\n *\n * @example\n * ```tsx\n * // Basic usage with default 44px minimum\n * <TouchTarget>\n * <button className=\"w-8 h-8\">×</button>\n * </TouchTarget>\n *\n * // Material Design 48px minimum\n * <TouchTarget minSize={48}>\n * <Checkbox />\n * </TouchTarget>\n *\n * // Custom alignment\n * <TouchTarget center={false} className=\"justify-start\">\n * <IconButton />\n * </TouchTarget>\n * ```\n */\nexport const TouchTarget = forwardRef<HTMLDivElement, TouchTargetProps>(\n ({ children, minSize = 44, center = true, className, ...props }, ref) => {\n // Map minSize to Tailwind classes\n // 44px = 11 × 4px (min-h-11, min-w-11)\n // 48px = 12 × 4px (min-h-12, min-w-12)\n const sizeClass = minSize === 44 ? 'min-h-11 min-w-11' : 'min-h-12 min-w-12';\n\n return (\n <div\n ref={ref}\n className={cn(\n sizeClass,\n center && 'flex items-center justify-center',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nTouchTarget.displayName = 'TouchTarget';\n","/**\n * FormFieldWrapper Component\n *\n * Unified wrapper for form controls with label, validation states, and messages.\n * Eliminates code duplication across InputGlass, SliderGlass, ComboBoxGlass, etc.\n *\n * Handles:\n * - Label with optional required indicator\n * - Error messages (highest priority, red)\n * - Success messages (green, shown if no error)\n * - Consistent spacing and typography\n */\n\nimport { forwardRef, type ReactNode, type HTMLAttributes } from 'react';\nimport { cn } from '@/lib/utils';\n\n/**\n * Props for the FormFieldWrapper component\n */\nexport interface FormFieldWrapperProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Label text displayed above the field\n */\n label?: string;\n\n /**\n * Error message - takes priority over success\n * Displays in red below the field\n */\n error?: string;\n\n /**\n * Success message - displays in green if no error\n * Displays below the field\n */\n success?: string;\n\n /**\n * ID to link label with input via htmlFor\n * Should match the input's id attribute\n */\n htmlFor?: string;\n\n /**\n * Shows red asterisk (*) next to label\n * @default false\n */\n required?: boolean;\n\n /**\n * The form control element(s) to wrap\n */\n children: ReactNode;\n}\n\n/**\n * FormFieldWrapper component\n *\n * Provides consistent structure for form fields with labels and validation messages.\n * Used by InputGlass, SliderGlass, and other form components.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <FormFieldWrapper label=\"Email\" htmlFor=\"email-input\">\n * <input id=\"email-input\" type=\"email\" />\n * </FormFieldWrapper>\n *\n * // With validation\n * <FormFieldWrapper\n * label=\"Username\"\n * error=\"Username is required\"\n * required\n * htmlFor=\"username\"\n * >\n * <input id=\"username\" />\n * </FormFieldWrapper>\n *\n * // Success state\n * <FormFieldWrapper\n * label=\"Password\"\n * success=\"Strong password\"\n * htmlFor=\"password\"\n * >\n * <input id=\"password\" type=\"password\" />\n * </FormFieldWrapper>\n * ```\n */\nexport const FormFieldWrapper = forwardRef<HTMLDivElement, FormFieldWrapperProps>(\n (\n {\n label,\n error,\n success,\n htmlFor,\n required,\n className,\n children,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cn('flex flex-col gap-1 md:gap-1.5', className)}\n {...props}\n >\n {label && (\n <label\n htmlFor={htmlFor}\n className=\"text-xs md:text-sm font-medium\"\n style={{ color: 'var(--text-secondary)' }}\n >\n {label}\n {required && (\n <span className=\"text-[var(--alert-danger-text)] ml-1\" aria-label=\"required\">\n *\n </span>\n )}\n </label>\n )}\n\n {children}\n\n {error && (\n <p\n className=\"text-xs\"\n style={{ color: 'var(--alert-danger-text)' }}\n role=\"alert\"\n aria-live=\"polite\"\n >\n {error}\n </p>\n )}\n\n {success && !error && (\n <p\n className=\"text-xs\"\n style={{ color: 'var(--alert-success-text)' }}\n aria-live=\"polite\"\n >\n {success}\n </p>\n )}\n </div>\n );\n }\n);\n\nFormFieldWrapper.displayName = 'FormFieldWrapper';\n","/**\n * InteractiveCard Component\n *\n * Unified wrapper for card components with hover animations and glass effects.\n * Eliminates hover state duplication in MetricCardGlass, YearCardGlass,\n * AICardGlass, RepositoryCardGlass, and other card components.\n *\n * Features:\n * - Hover lift animation (translateY -2px)\n * - Optional glow effects\n * - Glass surface with backdrop blur\n * - Configurable backgrounds and borders\n */\n\nimport { forwardRef, type HTMLAttributes, type CSSProperties } from 'react';\nimport { cn } from '@/lib/utils';\nimport { useHover } from '@/lib/hooks/use-hover';\n\n/**\n * Props for the InteractiveCard component\n */\nexport interface InteractiveCardProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Enable hover lift effect (translateY -2px)\n * @default true\n */\n hoverLift?: boolean;\n\n /**\n * CSS variable for hover glow effect\n * @example 'var(--glow-primary)'\n */\n hoverGlow?: string;\n\n /**\n * CSS variable for hover background\n * @example 'var(--card-hover-bg)'\n */\n hoverBg?: string;\n\n /**\n * CSS variable for base background\n * @default 'var(--card-bg)'\n */\n baseBg?: string;\n\n /**\n * CSS variable for border color\n * @default 'var(--card-border)'\n */\n borderColor?: string;\n\n /**\n * CSS variable for hover border color\n */\n hoverBorderColor?: string;\n\n /**\n * Blur level for glass effect\n * @default 'sm'\n */\n blur?: 'sm' | 'md' | 'lg' | 'xl';\n\n /**\n * Disable all hover interactions\n * @default false\n */\n disabled?: boolean;\n\n /**\n * Border radius class\n * @default 'rounded-2xl'\n */\n rounded?: 'rounded-xl' | 'rounded-2xl' | 'rounded-3xl';\n\n /**\n * Transition speed\n * @default 'var(--transition-slow)'\n */\n transition?: string;\n}\n\n/**\n * InteractiveCard component\n *\n * Provides consistent hover animations and glass effects for card components.\n * Replaces ~80 lines of duplicated hover state management across 4+ components.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <InteractiveCard>\n * <h3>Card Title</h3>\n * <p>Card content</p>\n * </InteractiveCard>\n *\n * // With hover effects\n * <InteractiveCard\n * hoverLift\n * hoverGlow=\"var(--glow-primary)\"\n * hoverBg=\"var(--card-hover-bg)\"\n * hoverBorderColor=\"var(--card-hover-border)\"\n * >\n * <MetricContent />\n * </InteractiveCard>\n *\n * // Custom blur and rounding\n * <InteractiveCard\n * blur=\"md\"\n * rounded=\"rounded-3xl\"\n * baseBg=\"var(--metric-success-bg)\"\n * >\n * <StatusCard />\n * </InteractiveCard>\n * ```\n */\nexport const InteractiveCard = forwardRef<HTMLDivElement, InteractiveCardProps>(\n (\n {\n hoverLift = true,\n hoverGlow,\n hoverBg,\n baseBg = 'var(--card-bg)',\n borderColor = 'var(--card-border)',\n hoverBorderColor,\n blur = 'sm',\n disabled = false,\n rounded = 'rounded-2xl',\n transition = 'var(--transition-slow)',\n className,\n style,\n children,\n ...props\n },\n ref\n ) => {\n const { isHovered, hoverProps } = useHover({ includeFocus: !disabled });\n\n const cardStyles: CSSProperties = {\n // Background\n background: isHovered && hoverBg ? hoverBg : baseBg,\n\n // Border\n border: `1px solid ${isHovered && hoverBorderColor ? hoverBorderColor : borderColor}`,\n\n // Glassmorphism\n backdropFilter: `blur(var(--blur-${blur}))`,\n WebkitBackdropFilter: `blur(var(--blur-${blur}))`,\n\n // Hover transform\n transform: hoverLift && isHovered && !disabled ? 'translateY(-2px)' : 'translateY(0)',\n\n // Glow effect\n boxShadow: isHovered && hoverGlow && !disabled ? hoverGlow : 'none',\n\n // Transition\n transition: `all ${transition}`,\n\n // User styles override\n ...style,\n };\n\n return (\n <div\n ref={ref}\n className={cn(rounded, className)}\n style={cardStyles}\n {...(disabled ? {} : hoverProps)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nInteractiveCard.displayName = 'InteractiveCard';\n","/**\n * AlertGlass Component\n *\n * Glass-themed alert with:\n * - Theme-aware styling via CSS variables (glass/light/aurora)\n * - shadcn/ui compatible variants (default, destructive)\n * - Extended Glass UI variants (success, warning)\n * - Compound component API for flexible composition\n * - Dismissible option\n * - Backdrop blur effect\n *\n * @example Compound API (recommended)\n * ```tsx\n * <AlertGlass variant=\"default\">\n * <AlertGlassTitle>Heads up!</AlertGlassTitle>\n * <AlertGlassDescription>\n * You can add components to your app using the cli.\n * </AlertGlassDescription>\n * </AlertGlass>\n * ```\n *\n * @example With dismiss button\n * ```tsx\n * <AlertGlass variant=\"destructive\" dismissible onDismiss={() => setShow(false)}>\n * <AlertGlassTitle>Error</AlertGlassTitle>\n * <AlertGlassDescription>\n * Your session has expired.\n * </AlertGlassDescription>\n * </AlertGlass>\n * ```\n */\n\n'use client';\n\nimport { forwardRef, type CSSProperties } from 'react';\nimport { type VariantProps } from 'class-variance-authority';\nimport { Info, CheckCircle, AlertTriangle, AlertCircle, X } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { alertVariants } from '@/lib/variants/alert-glass-variants';\nimport { ICON_SIZES } from '@/components/glass/primitives';\nimport '@/glass-theme.css';\n\nimport type { AlertVariant } from '@/lib/variants/alert-glass-variants';\n\n// ========================================\n// ICON MAP\n// ========================================\n\nconst iconMap: Record<AlertVariant, typeof Info> = {\n default: Info,\n destructive: AlertCircle,\n success: CheckCircle,\n warning: AlertTriangle,\n // Aliases\n info: Info,\n error: AlertCircle,\n};\n\n// ========================================\n// CSS VARIABLE HELPERS\n// ========================================\n\ntype AlertStyleVars = { bg: string; border: string; text: string };\n\nconst variantStyles: Record<AlertVariant, AlertStyleVars> = {\n // shadcn/ui compatible variants\n default: {\n bg: 'var(--alert-default-bg)',\n border: 'var(--alert-default-border)',\n text: 'var(--alert-default-text)',\n },\n destructive: {\n bg: 'var(--alert-destructive-bg)',\n border: 'var(--alert-destructive-border)',\n text: 'var(--alert-destructive-text)',\n },\n // Glass UI extended variants\n success: {\n bg: 'var(--alert-success-bg)',\n border: 'var(--alert-success-border)',\n text: 'var(--alert-success-text)',\n },\n warning: {\n bg: 'var(--alert-warning-bg)',\n border: 'var(--alert-warning-border)',\n text: 'var(--alert-warning-text)',\n },\n // Backward compatibility aliases\n info: {\n bg: 'var(--alert-default-bg)',\n border: 'var(--alert-default-border)',\n text: 'var(--alert-default-text)',\n },\n error: {\n bg: 'var(--alert-destructive-bg)',\n border: 'var(--alert-destructive-border)',\n text: 'var(--alert-destructive-text)',\n },\n};\n\nconst getAlertStyles = (variant: AlertVariant): CSSProperties => {\n const config = variantStyles[variant];\n return {\n background: config.bg,\n border: `1px solid ${config.border}`,\n color: config.text,\n };\n};\n\n// ========================================\n// COMPOUND COMPONENT: ROOT\n// ========================================\n\nexport interface AlertGlassProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'style'>, VariantProps<typeof alertVariants> {\n dismissible?: boolean;\n onDismiss?: () => void;\n}\n\nconst AlertGlassRoot = forwardRef<HTMLDivElement, AlertGlassProps>(\n ({ className, variant = 'default', dismissible, onDismiss, children, ...props }, ref) => {\n const effectiveVariant: AlertVariant = variant ?? 'default';\n const Icon = iconMap[effectiveVariant];\n const config = variantStyles[effectiveVariant];\n\n return (\n <div\n ref={ref}\n data-slot=\"alert\"\n className={cn(alertVariants({ variant: effectiveVariant }), className)}\n style={getAlertStyles(effectiveVariant)}\n role=\"alert\"\n {...props}\n >\n <Icon\n className=\"w-4 h-4 md:w-5 md:h-5 shrink-0 mt-0.5\"\n style={{ color: config.text }}\n aria-hidden=\"true\"\n />\n <div className=\"flex-1\">{children}</div>\n {dismissible && (\n <button\n onClick={onDismiss}\n className=\"p-0.5 md:p-1 rounded transition-colors duration-200 hover:bg-black/5 shrink-0\"\n aria-label=\"Dismiss alert\"\n >\n <X className={ICON_SIZES.md} style={{ color: config.text }} />\n </button>\n )}\n </div>\n );\n }\n);\n\nAlertGlassRoot.displayName = 'AlertGlass';\n\n// ========================================\n// COMPOUND COMPONENT: TITLE\n// ========================================\n\nexport type AlertGlassTitleProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst AlertGlassTitle = forwardRef<HTMLDivElement, AlertGlassTitleProps>(\n ({ className, style, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-slot=\"alert-title\"\n className={cn('font-medium text-xs md:text-sm mb-0.5 md:mb-1', className)}\n style={{ color: 'inherit', ...style }}\n {...props}\n />\n );\n }\n);\n\nAlertGlassTitle.displayName = 'AlertGlassTitle';\n\n// ========================================\n// COMPOUND COMPONENT: DESCRIPTION\n// ========================================\n\nexport type AlertGlassDescriptionProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst AlertGlassDescription = forwardRef<HTMLDivElement, AlertGlassDescriptionProps>(\n ({ className, style, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-slot=\"alert-description\"\n className={cn('text-xs md:text-sm opacity-80', className)}\n style={{ color: 'inherit', ...style }}\n {...props}\n />\n );\n }\n);\n\nAlertGlassDescription.displayName = 'AlertGlassDescription';\n\n// ========================================\n// EXPORTS\n// ========================================\n\n// Compound API (shadcn/ui pattern)\nexport const AlertGlass = AlertGlassRoot;\nexport { AlertGlassTitle, AlertGlassDescription };\n","/**\n * AvatarGlass CVA Variants\n * Extracted for Fast Refresh compatibility\n */\n\nimport { cva } from 'class-variance-authority';\n\nexport type AvatarSize = 'sm' | 'md' | 'lg' | 'xl';\n\nexport const avatarSizes = cva(\n 'rounded-full flex items-center justify-center font-semibold transition-all duration-300',\n {\n variants: {\n size: {\n sm: 'w-7 h-7 md:w-8 md:h-8 text-[10px] md:text-xs',\n md: 'w-9 h-9 md:w-10 md:h-10 text-xs md:text-sm',\n lg: 'w-10 h-10 md:w-12 md:h-12 text-sm md:text-base',\n xl: 'w-14 h-14 md:w-16 md:h-16 text-base md:text-lg',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\nexport const statusSizes = cva('absolute -bottom-0.5 -right-0.5 rounded-full', {\n variants: {\n size: {\n sm: 'w-2 h-2 md:w-2.5 md:h-2.5',\n md: 'w-2.5 h-2.5 md:w-3 md:h-3',\n lg: 'w-3 h-3 md:w-3.5 md:h-3.5',\n xl: 'w-3.5 h-3.5 md:w-4 md:h-4',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n});\n","/**\n * AvatarGlass Component\n *\n * Glass-themed avatar with:\n * - Theme-aware styling (glass/light/aurora)\n * - Glow effect on hover\n * - Optional glow-pulse animation\n * - Status indicator with glow\n * - Size variants\n * - Built on Radix UI primitives\n *\n * @example Compound API (recommended)\n * ```tsx\n * <AvatarGlass size=\"default\">\n * <AvatarGlassImage src=\"/avatar.jpg\" alt=\"User\" />\n * <AvatarGlassFallback>JD</AvatarGlassFallback>\n * </AvatarGlass>\n * ```\n *\n * @example With status indicator\n * ```tsx\n * <AvatarGlass size=\"lg\" status=\"online\">\n * <AvatarGlassImage src=\"/avatar.jpg\" alt=\"User\" />\n * <AvatarGlassFallback>JD</AvatarGlassFallback>\n * </AvatarGlass>\n * ```\n *\n * @example With glow animation\n * ```tsx\n * <AvatarGlass size=\"xl\" glowing>\n * <AvatarGlassImage src=\"/avatar.jpg\" alt=\"User\" />\n * <AvatarGlassFallback>JD</AvatarGlassFallback>\n * </AvatarGlass>\n * ```\n */\n\n'use client';\n\nimport * as React from 'react';\nimport * as AvatarPrimitive from '@radix-ui/react-avatar';\nimport { cn } from '@/lib/utils';\nimport { useHover } from '@/lib/hooks/use-hover';\nimport { avatarSizes, statusSizes } from '@/lib/variants/avatar-glass-variants';\nimport '@/glass-theme.css';\n\n// ========================================\n// TYPES\n// ========================================\n\nexport type AvatarStatus = 'online' | 'offline' | 'busy' | 'away';\nexport type AvatarSize = 'sm' | 'md' | 'lg' | 'xl';\n\n// ========================================\n// HELPERS\n// ========================================\n\nconst getStatusVars = (statusType: AvatarStatus): { bg: string; glow: string } => {\n const statusVars: Record<AvatarStatus, { bg: string; glow: string }> = {\n online: { bg: 'var(--status-online)', glow: 'var(--status-online-glow)' },\n offline: { bg: 'var(--status-offline)', glow: 'none' },\n busy: { bg: 'var(--status-busy)', glow: 'var(--status-busy-glow)' },\n away: { bg: 'var(--status-away)', glow: 'var(--status-away-glow)' },\n };\n return statusVars[statusType];\n};\n\n// ========================================\n// CONTEXT\n// ========================================\n\ninterface AvatarGlassContextValue {\n size: AvatarSize;\n status?: AvatarStatus;\n glowing?: boolean;\n}\n\nconst AvatarGlassContext = React.createContext<AvatarGlassContextValue>({\n size: 'md',\n});\n\n// ========================================\n// COMPOUND COMPONENT: ROOT\n// ========================================\n\ninterface AvatarGlassRootProps extends React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root> {\n size?: AvatarSize;\n status?: AvatarStatus;\n glowing?: boolean;\n}\n\nconst AvatarGlassRoot = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n AvatarGlassRootProps\n>(({ className, size = 'md', status, glowing = false, children, ...props }, ref) => {\n const { isHovered, hoverProps } = useHover();\n\n const avatarStyles: React.CSSProperties = {\n background: 'var(--avatar-bg)',\n border: '3px solid var(--avatar-border)',\n boxShadow: isHovered ? 'var(--avatar-hover-glow)' : 'var(--avatar-shadow)',\n color: 'var(--text-inverse)',\n };\n\n return (\n <AvatarGlassContext.Provider value={{ size, status, glowing }}>\n <div\n data-slot=\"avatar\"\n className={cn('relative inline-flex', className)}\n onMouseEnter={hoverProps.onMouseEnter}\n onMouseLeave={hoverProps.onMouseLeave}\n >\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n avatarSizes({ size }),\n glowing && 'animate-[glow-pulse_2s_ease-in-out_infinite]'\n )}\n style={avatarStyles}\n {...props}\n >\n {children}\n </AvatarPrimitive.Root>\n\n {/* Status indicator */}\n {status && (\n <span\n data-slot=\"avatar-status\"\n className={cn(statusSizes({ size }))}\n style={{\n background: getStatusVars(status).bg,\n boxShadow: getStatusVars(status).glow,\n }}\n role=\"status\"\n aria-label={`Status: ${status}`}\n />\n )}\n </div>\n </AvatarGlassContext.Provider>\n );\n});\n\nAvatarGlassRoot.displayName = 'AvatarGlass';\n\n// ========================================\n// COMPOUND COMPONENT: IMAGE\n// ========================================\n\ntype AvatarGlassImageProps = React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>;\n\nconst AvatarGlassImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n AvatarGlassImageProps\n>(({ className, ...props }, ref) => {\n return (\n <AvatarPrimitive.Image\n ref={ref}\n data-slot=\"avatar-image\"\n className={cn('aspect-square h-full w-full object-cover', className)}\n {...props}\n />\n );\n});\n\nAvatarGlassImage.displayName = 'AvatarGlassImage';\n\n// ========================================\n// COMPOUND COMPONENT: FALLBACK\n// ========================================\n\ntype AvatarGlassFallbackProps = React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>;\n\nconst AvatarGlassFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n AvatarGlassFallbackProps\n>(({ className, ...props }, ref) => {\n return (\n <AvatarPrimitive.Fallback\n ref={ref}\n data-slot=\"avatar-fallback\"\n className={cn(\n 'flex h-full w-full items-center justify-center font-semibold uppercase',\n className\n )}\n {...props}\n />\n );\n});\n\nAvatarGlassFallback.displayName = 'AvatarGlassFallback';\n\n// ========================================\n// HELPER FUNCTION (for simple use cases)\n// ========================================\n\nconst getInitials = (name: string): string => {\n if (!name || name.trim().length === 0) return '?';\n return name\n .split(' ')\n .map((part) => part[0])\n .join('')\n .toUpperCase()\n .slice(0, 2);\n};\n\n// ========================================\n// SIMPLE WRAPPER (backward compatibility)\n// ========================================\n\ninterface AvatarGlassSimpleProps {\n name: string;\n size?: AvatarSize;\n status?: AvatarStatus;\n glowing?: boolean;\n className?: string;\n}\n\nconst AvatarGlassSimple: React.FC<AvatarGlassSimpleProps> = ({\n name,\n size = 'md',\n status,\n glowing,\n className,\n}) => {\n return (\n <AvatarGlassRoot size={size} status={status} glowing={glowing} className={className}>\n <AvatarGlassFallback>{getInitials(name)}</AvatarGlassFallback>\n </AvatarGlassRoot>\n );\n};\n\n// ========================================\n// EXPORTS\n// ========================================\n\n// Compound API (shadcn/ui pattern)\nexport const AvatarGlass = AvatarGlassRoot;\nexport { AvatarGlassImage, AvatarGlassFallback };\n\n// Simple wrapper (backward compatibility)\nexport { AvatarGlassSimple };\n","/**\n * BadgeGlass CVA Variants\n * Extracted for Fast Refresh compatibility\n */\n\nimport { cva } from 'class-variance-authority';\n\nexport type BadgeVariant =\n // shadcn/ui compatible variants\n | 'default'\n | 'secondary'\n | 'destructive'\n | 'outline'\n // Glass UI extended variants\n | 'success'\n | 'warning'\n | 'info';\nexport type BadgeSize = 'sm' | 'md' | 'lg';\n\nexport const badgeVariants = cva(\n 'inline-flex items-center gap-1 md:gap-1.5 rounded-full font-medium',\n {\n variants: {\n size: {\n sm: 'px-1 py-0.5 md:px-1.5 text-[9px] md:text-[10px]',\n md: 'px-2 py-0.5 md:px-2.5 text-[10px] md:text-xs',\n lg: 'px-2.5 py-0.5 md:px-3 md:py-1 text-xs md:text-sm',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n","/**\n * BadgeGlass Component\n *\n * Glass-themed badge with:\n * - Theme-aware styling via CSS variables (glass/light/aurora)\n * - shadcn/ui compatible variants (default, secondary, destructive, outline)\n * - Extended Glass UI variants (success, warning, info)\n * - Size options\n * - Optional animated dot\n */\n\nimport { forwardRef, type ReactNode, type CSSProperties } from 'react';\nimport { type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/lib/utils';\nimport { badgeVariants, type BadgeVariant } from '@/lib/variants/badge-glass-variants';\nimport '@/glass-theme.css';\n\n// ========================================\n// CSS VARIABLE HELPERS\n// ========================================\n\ntype BadgeStyleVars = { bg: string; text: string; border: string };\n\nconst variantStyles: Record<BadgeVariant, BadgeStyleVars> = {\n // shadcn/ui compatible variants\n default: {\n bg: 'var(--badge-default-bg)',\n text: 'var(--badge-default-text)',\n border: 'var(--badge-default-border)',\n },\n secondary: {\n bg: 'var(--badge-secondary-bg)',\n text: 'var(--badge-secondary-text)',\n border: 'var(--badge-secondary-border)',\n },\n destructive: {\n bg: 'var(--badge-destructive-bg)',\n text: 'var(--badge-destructive-text)',\n border: 'var(--badge-destructive-border)',\n },\n outline: {\n bg: 'var(--badge-outline-bg)',\n text: 'var(--badge-outline-text)',\n border: 'var(--badge-outline-border)',\n },\n // Glass UI extended variants\n success: {\n bg: 'var(--badge-success-bg)',\n text: 'var(--badge-success-text)',\n border: 'var(--badge-success-border)',\n },\n warning: {\n bg: 'var(--badge-warning-bg)',\n text: 'var(--badge-warning-text)',\n border: 'var(--badge-warning-border)',\n },\n info: {\n bg: 'var(--badge-info-bg)',\n text: 'var(--badge-info-text)',\n border: 'var(--badge-info-border)',\n },\n};\n\nconst getBadgeStyles = (variant: BadgeVariant): CSSProperties => {\n const v = variantStyles[variant] || variantStyles.default;\n return {\n background: v.bg,\n color: v.text,\n border: `1px solid ${v.border}`,\n };\n};\n\n// ========================================\n// PROPS INTERFACE\n// ========================================\n\n/**\n * Props for the BadgeGlass component\n *\n * A glass-themed badge with semantic variants and optional animated status dot.\n * Features shadcn/ui compatible variants plus extended Glass UI variants.\n *\n * @accessibility\n * - **Keyboard Navigation:** Badges are non-interactive by default (display-only)\n * - **Focus Management:** N/A - badges do not receive focus unless wrapped in interactive elements\n * - **Screen Readers:** Semantic `<span>` element, content announced naturally\n * - **Status Indicators:** Use `aria-label` to provide context for status badges (e.g., \"Status: Active\")\n * - **Animated Dot:** Pulse animation respects `prefers-reduced-motion` settings\n * - **Touch Targets:** N/A for display badges, ensure 44x44px if wrapping in button/link (WCAG 2.5.5)\n * - **Color Contrast:** All variant text meets WCAG AA contrast ratio 4.5:1 against badge background\n * - **Motion:** Dot pulse animation can be disabled for users with motion sensitivity\n *\n * @example\n * ```tsx\n * // Basic badge with variant\n * <BadgeGlass variant=\"default\">New</BadgeGlass>\n *\n * // Status badge with aria-label for screen readers\n * <BadgeGlass variant=\"success\" aria-label=\"Status: Active\">\n * Active\n * </BadgeGlass>\n *\n * // Different variants (shadcn/ui compatible)\n * <BadgeGlass variant=\"default\">Default</BadgeGlass>\n * <BadgeGlass variant=\"secondary\">Secondary</BadgeGlass>\n * <BadgeGlass variant=\"destructive\">Error</BadgeGlass>\n * <BadgeGlass variant=\"outline\">Outline</BadgeGlass>\n *\n * // Extended Glass UI variants\n * <BadgeGlass variant=\"success\">Success</BadgeGlass>\n * <BadgeGlass variant=\"warning\">Warning</BadgeGlass>\n * <BadgeGlass variant=\"info\">Info</BadgeGlass>\n *\n * // With animated status dot\n * <BadgeGlass variant=\"success\" dot aria-label=\"Status: Online\">\n * Online\n * </BadgeGlass>\n * <BadgeGlass variant=\"destructive\" dot aria-label=\"Status: Offline\">\n * Offline\n * </BadgeGlass>\n *\n * // Size variants\n * <BadgeGlass size=\"sm\">Small</BadgeGlass>\n * <BadgeGlass size=\"default\">Medium</BadgeGlass>\n * <BadgeGlass size=\"lg\">Large</BadgeGlass>\n *\n * // Inside interactive elements (ensure accessible labels)\n * <button aria-label=\"Filter by active status\">\n * Filter: <BadgeGlass variant=\"success\">Active</BadgeGlass>\n * </button>\n *\n * // Count badge with semantic meaning\n * <div>\n * <span>Notifications</span>\n * <BadgeGlass variant=\"destructive\" aria-label=\"3 unread notifications\">\n * 3\n * </BadgeGlass>\n * </div>\n * ```\n */\nexport interface BadgeGlassProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'style'>, VariantProps<typeof badgeVariants> {\n readonly children: ReactNode;\n readonly variant?: BadgeVariant;\n readonly dot?: boolean;\n}\n\n// ========================================\n// COMPONENT\n// ========================================\n\nexport const BadgeGlass = forwardRef<HTMLSpanElement, BadgeGlassProps>(\n ({ children, className, variant = 'default', size = 'md', dot, ...props }, ref) => {\n const v = variantStyles[variant];\n\n return (\n <span\n ref={ref}\n data-slot=\"badge\"\n className={cn(badgeVariants({ size }), className)}\n style={getBadgeStyles(variant)}\n {...props}\n >\n {dot && (\n <span\n className=\"w-1 h-1 md:w-1.5 md:h-1.5 rounded-full animate-pulse\"\n style={{ background: v.text }}\n />\n )}\n {children}\n </span>\n );\n }\n);\n\nBadgeGlass.displayName = 'BadgeGlass';\n","/**\n * ButtonGlass CVA Variants\n * Extracted for Fast Refresh compatibility\n */\n\nimport { cva } from 'class-variance-authority';\n\n/**\n * ButtonGlass variant types (shadcn/ui compatible)\n * - default: Primary action (was 'primary')\n * - secondary: Secondary action\n * - ghost: Minimal visual presence\n * - destructive: Dangerous/delete actions\n * - outline: Border with transparent background (shadcn/ui standard)\n * - success: Positive feedback (glass-ui extension)\n * - link: Text-only button (was 'text', shadcn/ui standard name)\n */\nexport type ButtonGlassVariant =\n | 'default'\n | 'secondary'\n | 'ghost'\n | 'destructive'\n | 'outline'\n | 'success'\n | 'link';\n\n/**\n * ButtonGlass size types (shadcn/ui compatible)\n * - default: Standard size (was 'md')\n * - sm: Small\n * - lg: Large\n * - xl: Extra large (glass-ui extension)\n * - icon: Square icon button\n */\nexport type ButtonGlassSize = 'default' | 'sm' | 'lg' | 'xl' | 'icon';\n\nexport const buttonGlassVariants = cva(\n 'relative overflow-hidden font-medium inline-flex items-center justify-center transition-all duration-300 ease-out cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed',\n {\n variants: {\n variant: {\n default: '',\n secondary: '',\n ghost: '',\n destructive: '',\n outline: '',\n success: '',\n link: '',\n },\n size: {\n // All sizes include min-h for touch target compliance (Apple HIG: 44px minimum)\n // Border radius per UI_DESIGN.md: sm/default=8px, lg=12px\n sm: 'px-3 py-1.5 text-sm gap-1.5 min-h-[44px] rounded-xl', // 8px radius\n default: 'px-4 py-2.5 text-sm gap-2 min-h-[44px] rounded-xl', // 8px radius\n lg: 'px-6 py-3 text-base gap-2.5 min-h-[48px] rounded-xl', // 12px radius\n xl: 'px-8 py-4 text-lg gap-3 min-h-[56px] rounded-xl', // 16px radius (beyond spec)\n icon: 'p-2.5 min-h-[44px] min-w-[44px] rounded-xl', // 8px radius\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n","/**\n * ButtonGlass Component\n *\n * Glass-themed button with:\n * - Theme-aware styling via CSS variables (glass/light/aurora)\n * - Glow effects on hover\n * - Ripple effect on click (JS)\n * - Shine animation for primary variant (JS)\n * - Loading state with spinner\n * - Icon support (left/right position)\n */\n\nimport {\n forwardRef,\n useState,\n useCallback,\n useEffect,\n useRef,\n type MouseEvent,\n type CSSProperties,\n} from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { type VariantProps } from 'class-variance-authority';\nimport { RefreshCw, type LucideIcon } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { useHover } from '@/lib/hooks/use-hover';\nimport { useFocus } from '@/lib/hooks/use-focus';\nimport { buttonGlassVariants, type ButtonGlassVariant } from '@/lib/variants/button-glass-variants';\nimport { ICON_SIZES } from '@/components/glass/primitives';\nimport '@/glass-theme.css';\n\n// ========================================\n// CSS VARIABLE STYLE MAPS\n// ========================================\n\nconst getVariantStyles = (\n variant: ButtonGlassVariant,\n isHovered: boolean,\n isFocusVisible: boolean\n): CSSProperties => {\n const baseStyles: Record<ButtonGlassVariant, CSSProperties> = {\n default: {\n background: isHovered ? 'var(--btn-primary-hover-bg)' : 'var(--btn-primary-bg)',\n color: 'var(--btn-primary-text)',\n border: 'none',\n boxShadow: isFocusVisible\n ? 'var(--focus-glow)'\n : isHovered\n ? 'var(--btn-primary-glow)'\n : 'var(--btn-primary-shadow)',\n },\n secondary: {\n background: isHovered ? 'var(--btn-secondary-hover-bg)' : 'var(--btn-secondary-bg)',\n color: 'var(--btn-secondary-text)',\n border: '1px solid var(--btn-secondary-border)',\n boxShadow: isFocusVisible\n ? 'var(--focus-glow)'\n : isHovered\n ? 'var(--btn-secondary-glow)'\n : 'none',\n },\n ghost: {\n background: isHovered ? 'var(--btn-ghost-hover-bg)' : 'var(--btn-ghost-bg)',\n color: 'var(--btn-ghost-text)',\n border: 'none',\n boxShadow: isFocusVisible ? 'var(--focus-glow)' : 'none',\n },\n destructive: {\n background: 'var(--btn-destructive-bg)',\n color: 'var(--btn-destructive-text)',\n border: 'none',\n boxShadow: isFocusVisible\n ? 'var(--focus-glow)'\n : isHovered\n ? 'var(--btn-destructive-glow)'\n : 'var(--btn-destructive-shadow)',\n },\n outline: {\n background: isHovered ? 'var(--btn-outline-hover-bg)' : 'transparent',\n color: 'var(--btn-outline-text)',\n border: '1px solid var(--btn-outline-border)',\n boxShadow: isFocusVisible\n ? 'var(--focus-glow)'\n : isHovered\n ? 'var(--btn-outline-glow)'\n : 'none',\n },\n success: {\n background: 'var(--btn-success-bg)',\n color: 'var(--btn-success-text)',\n border: 'none',\n boxShadow: isFocusVisible\n ? 'var(--focus-glow)'\n : isHovered\n ? 'var(--btn-success-glow)'\n : 'var(--btn-success-shadow)',\n },\n link: {\n background: 'transparent',\n color: 'var(--btn-link-text)',\n border: 'none',\n boxShadow: isFocusVisible ? 'var(--focus-glow)' : 'none',\n textDecoration: isHovered ? 'underline' : 'none',\n },\n };\n\n return baseStyles[variant];\n};\n\n// ========================================\n// PROPS INTERFACE\n// ========================================\n\n/**\n * Props for the ButtonGlass component\n *\n * A glass-themed button with ripple effects, loading states, and icon support.\n * Features theme-aware styling and hover animations.\n *\n * **shadcn/ui compatible variants:**\n * - `default` - Primary action button with glow effects\n * - `secondary` - Secondary action with border\n * - `ghost` - Minimal visual presence\n * - `destructive` - Dangerous/delete actions (red)\n * - `outline` - Border with transparent background\n * - `link` - Text-only button with underline on hover\n * - `success` - Positive feedback (glass-ui extension)\n *\n * @accessibility\n * - **Keyboard Navigation:** Fully keyboard accessible with native `<button>` element\n * - **Focus Management:** Visible focus ring using `--focus-glow` CSS variable (WCAG 2.4.7)\n * - **Screen Readers:** Semantic `<button>` element, disabled state announced automatically\n * - **Loading State:** When loading=true, button is disabled and loading spinner is visible\n * - **Touch Targets:** Minimum 44x44px touch target (WCAG 2.5.5) via size variants\n * - **Color Contrast:** All variants meet WCAG AA contrast ratio 4.5:1 minimum\n * - **Motion:** Respects `prefers-reduced-motion` for ripple/shine animations\n *\n * @example\n * ```tsx\n * // Basic button (default variant)\n * <ButtonGlass>Click me</ButtonGlass>\n * <ButtonGlass variant=\"default\">Primary action</ButtonGlass>\n *\n * // With icon and aria-label for icon-only buttons\n * <ButtonGlass icon={Check} iconPosition=\"left\">Save</ButtonGlass>\n * <ButtonGlass icon={X} size=\"icon\" aria-label=\"Close dialog\" />\n *\n * // Loading state (automatically disables and shows spinner)\n * <ButtonGlass loading aria-live=\"polite\">Processing...</ButtonGlass>\n *\n * // Different variants (shadcn/ui compatible)\n * <ButtonGlass variant=\"secondary\">Secondary</ButtonGlass>\n * <ButtonGlass variant=\"ghost\">Cancel</ButtonGlass>\n * <ButtonGlass variant=\"outline\">Outline</ButtonGlass>\n * <ButtonGlass variant=\"destructive\">Delete</ButtonGlass>\n * <ButtonGlass variant=\"link\">Learn more</ButtonGlass>\n * <ButtonGlass variant=\"success\">Confirm</ButtonGlass>\n *\n * // As a link (asChild pattern) - maintains semantic HTML\n * <ButtonGlass asChild>\n * <a href=\"/dashboard\">Go to Dashboard</a>\n * </ButtonGlass>\n *\n * // With Next.js Link\n * <ButtonGlass asChild variant=\"ghost\">\n * <Link href=\"/settings\">Settings</Link>\n * </ButtonGlass>\n *\n * // Form submit button\n * <ButtonGlass type=\"submit\">\n * Submit Form\n * </ButtonGlass>\n * ```\n */\nexport interface ButtonGlassProps\n extends\n Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'style'>,\n VariantProps<typeof buttonGlassVariants> {\n /**\n * Render as child element instead of button (polymorphic rendering).\n * Useful for rendering buttons as links or other interactive elements.\n *\n * **Note:** When using `asChild`, decorative effects (ripple, shine, glow)\n * are disabled to maintain compatibility with Radix UI Slot.\n * Only styles and event handlers are passed to the child element.\n *\n * @default false\n * @example\n * ```tsx\n * <ButtonGlass asChild>\n * <a href=\"/about\">About Us</a>\n * </ButtonGlass>\n * ```\n */\n readonly asChild?: boolean;\n\n /**\n * Visual style variant of the button (shadcn/ui compatible)\n * @default \"default\"\n */\n readonly variant?: ButtonGlassVariant;\n\n /**\n * Show loading spinner and disable interactions\n * @default false\n */\n readonly loading?: boolean;\n\n /**\n * Icon component from lucide-react to display\n * @example icon={Check}\n */\n readonly icon?: LucideIcon;\n\n /**\n * Position of the icon relative to button text\n * @default \"left\"\n */\n readonly iconPosition?: 'left' | 'right';\n\n /**\n * Size variant of the button (shadcn/ui compatible)\n * @default \"default\"\n */\n readonly size?: 'default' | 'sm' | 'lg' | 'xl' | 'icon';\n}\n\n// ========================================\n// COMPONENT\n// ========================================\n\nexport const ButtonGlass = forwardRef<HTMLButtonElement, ButtonGlassProps>(\n (\n {\n asChild = false,\n className,\n variant = 'default',\n size = 'default',\n children,\n loading = false,\n disabled,\n icon: Icon,\n iconPosition = 'left',\n onClick,\n ...props\n },\n ref\n ) => {\n const { isHovered, hoverProps } = useHover();\n const { isFocusVisible, focusProps } = useFocus({ focusVisible: true });\n const [ripple, setRipple] = useState<{ x: number; y: number } | null>(null);\n\n const isDisabled = disabled || loading;\n const rippleTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n // Cleanup ripple timeout on unmount\n useEffect(() => {\n return () => {\n if (rippleTimeoutRef.current) {\n clearTimeout(rippleTimeoutRef.current);\n }\n };\n }, []);\n\n // Ripple effect handler\n const handleClick = useCallback(\n (e: MouseEvent<HTMLButtonElement>) => {\n if (isDisabled) return;\n\n // Create ripple effect\n const rect = e.currentTarget.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n setRipple({ x, y });\n\n // Clear previous timeout if exists\n if (rippleTimeoutRef.current) {\n clearTimeout(rippleTimeoutRef.current);\n }\n\n rippleTimeoutRef.current = setTimeout(() => {\n setRipple(null);\n rippleTimeoutRef.current = null;\n }, 600);\n\n onClick?.(e);\n },\n [isDisabled, onClick]\n );\n\n // Polymorphic component - render as Slot when asChild is true\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n ref={ref}\n data-slot=\"button\"\n className={cn(\n buttonGlassVariants({ variant, size }),\n isHovered && !isDisabled && 'scale-[1.02]',\n className\n )}\n style={{\n ...getVariantStyles(variant, isHovered && !isDisabled, isFocusVisible && !isDisabled),\n outline: 'none',\n }}\n type={asChild ? undefined : 'button'}\n disabled={isDisabled}\n onClick={handleClick}\n onMouseEnter={hoverProps.onMouseEnter}\n onMouseLeave={hoverProps.onMouseLeave}\n onFocus={focusProps.onFocus}\n onBlur={focusProps.onBlur}\n {...props}\n >\n {/* When asChild is true, only render children (Slot expects a single child) */}\n {asChild ? (\n children\n ) : (\n <>\n {/* Shine effect on hover for default variant */}\n {isHovered && variant === 'default' && !isDisabled && (\n <div\n className=\"absolute inset-0 overflow-hidden pointer-events-none\"\n style={{ borderRadius: 'inherit' }}\n >\n <div\n className=\"absolute top-0 h-full w-1/3 bg-linear-to-r from-transparent via-white/20 to-transparent\"\n style={{ animation: 'btn-shine 1.5s ease-in-out infinite' }}\n />\n </div>\n )}\n\n {/* Ripple effect */}\n {ripple && (\n <span\n className=\"absolute rounded-full bg-white/30 pointer-events-none\"\n style={{\n left: ripple.x,\n top: ripple.y,\n width: 10,\n height: 10,\n transform: 'translate(-50%, -50%)',\n animation: 'ripple 0.6s ease-out',\n }}\n />\n )}\n\n {/* Pulsing glow on hover */}\n {isHovered && variant === 'default' && !isDisabled && (\n <div\n className=\"absolute inset-0 rounded-xl animate-glow-pulse pointer-events-none\"\n style={{\n background: 'var(--btn-glow-radial)',\n }}\n />\n )}\n\n {/* Loading spinner */}\n {loading && <RefreshCw className={cn(ICON_SIZES.md, 'animate-spin')} />}\n\n {/* Icon left */}\n {!loading && Icon && iconPosition === 'left' && <Icon className={ICON_SIZES.md} />}\n\n {/* Content */}\n {!loading && children}\n\n {/* Icon right */}\n {!loading && Icon && iconPosition === 'right' && <Icon className={ICON_SIZES.md} />}\n </>\n )}\n </Comp>\n );\n }\n);\n\nButtonGlass.displayName = 'ButtonGlass';\n","/**\n * CheckboxGlass Component\n *\n * Glass-themed checkbox built on Radix UI primitives with:\n * - 100% shadcn/ui type compatibility\n * - Theme-aware styling (glass/light/aurora)\n * - Glow effect on hover/focus\n * - Optional label\n *\n * @since v2.2.6 - Migrated to Radix UI primitives for full type compatibility\n */\n\nimport * as React from 'react';\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport { Check, Minus } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport '@/glass-theme.css';\n\n// ========================================\n// TYPES\n// ========================================\n\n/**\n * Checked state type compatible with shadcn/ui (Radix UI)\n */\nexport type CheckedState = boolean | 'indeterminate';\n\n/**\n * Props for the CheckboxGlass component\n *\n * Extends Radix UI Checkbox.Root props for 100% shadcn/ui compatibility.\n * All Radix props are supported including: checked, defaultChecked, onCheckedChange,\n * disabled, required, name, value, etc.\n *\n * **Type Compatibility (v2.3.1+):**\n * - Extends `React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>`\n * - No more `as unknown as` type assertions needed\n * - Full IntelliSense for all Radix props\n *\n * @accessibility\n * - **Keyboard Navigation:** Space to toggle (WCAG 2.1.1)\n * - **Focus Management:** Visible focus ring using `--focus-glow` CSS variable (WCAG 2.4.7)\n * - **Screen Readers:** Radix UI handles ARIA attributes automatically\n * - **Touch Targets:** 44x44px minimum touch area per Apple HIG (WCAG 2.5.5)\n * - **Color Contrast:** Check mark and backgrounds meet WCAG AA contrast ratio 4.5:1\n *\n * @example\n * ```tsx\n * // shadcn/ui compatible API\n * <CheckboxGlass\n * checked={isChecked}\n * onCheckedChange={(checked) => setIsChecked(checked === true)}\n * />\n *\n * // Indeterminate state (tri-state checkbox)\n * <CheckboxGlass\n * checked={allSelected ? true : someSelected ? 'indeterminate' : false}\n * onCheckedChange={(checked) => {\n * if (checked === true) selectAll();\n * else deselectAll();\n * }}\n * label=\"Select all\"\n * />\n *\n * // Legacy API (still supported)\n * <CheckboxGlass checked={agreed} onChange={setAgreed} label=\"I agree to terms\" />\n * ```\n *\n * @since v2.3.0 - Added shadcn/ui compatible `onCheckedChange` and `indeterminate` support\n * @since v2.2.6 - Migrated to Radix UI primitives for full type compatibility\n */\nexport interface CheckboxGlassProps extends Omit<\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>,\n 'onChange'\n> {\n /**\n * @deprecated Use `onCheckedChange` instead. Will be removed in v4.0.\n * Legacy callback for backwards compatibility.\n */\n readonly onChange?: (checked: boolean) => void;\n /** Optional label text (Glass UI extension) */\n readonly label?: string;\n}\n\n// ========================================\n// COMPONENT\n// ========================================\n\nexport const CheckboxGlass = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n CheckboxGlassProps\n>(({ className, label, onChange, onCheckedChange, disabled, checked, ...props }, ref) => {\n // Wrapper for legacy onChange callback\n const handleCheckedChange = React.useCallback(\n (newChecked: CheckedState) => {\n onCheckedChange?.(newChecked);\n // Legacy support (deprecated)\n if (onChange && typeof newChecked === 'boolean') {\n onChange(newChecked);\n }\n },\n [onCheckedChange, onChange]\n );\n\n // Determine visual states\n const isIndeterminate = checked === 'indeterminate';\n const isChecked = checked === true;\n const showIndicator = isChecked || isIndeterminate;\n\n // Inline styles for CSS variables (matches original implementation)\n const checkboxStyles: React.CSSProperties = {\n background: showIndicator ? 'var(--checkbox-checked-bg)' : 'var(--checkbox-bg)',\n borderColor: showIndicator ? 'var(--checkbox-checked-bg)' : 'var(--checkbox-border)',\n };\n\n return (\n <label\n className={cn(\n 'inline-flex items-center gap-2 md:gap-2.5',\n disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer',\n className\n )}\n >\n {/* Touch area wrapper - 44px minimum for Apple HIG compliance */}\n <span className=\"inline-flex items-center justify-center min-w-11 min-h-11\">\n <CheckboxPrimitive.Root\n ref={ref}\n data-slot=\"checkbox\"\n checked={checked}\n onCheckedChange={handleCheckedChange}\n disabled={disabled}\n className={cn(\n 'peer relative w-6 h-6 md:w-5 md:h-5 shrink-0',\n 'rounded-md border-2 transition-all duration-300',\n 'flex items-center justify-center',\n // Focus state\n 'focus-visible:outline-none focus-visible:shadow-(--focus-glow)',\n // Hover state\n 'hover:shadow-(--checkbox-glow)',\n // Disabled state\n 'disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:shadow-none'\n )}\n style={checkboxStyles}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"flex items-center justify-center text-current\"\n >\n {isIndeterminate ? (\n <Minus\n className=\"w-3.5 h-3.5 md:w-3 md:h-3\"\n style={{ color: 'var(--text-inverse)' }}\n />\n ) : (\n <Check\n className=\"w-3.5 h-3.5 md:w-3 md:h-3\"\n style={{ color: 'var(--text-inverse)' }}\n />\n )}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n </span>\n {label && (\n <span className=\"text-xs md:text-sm\" style={{ color: 'var(--text-secondary)' }}>\n {label}\n </span>\n )}\n </label>\n );\n});\n\nCheckboxGlass.displayName = 'CheckboxGlass';\n\n/**\n * Checkbox - shadcn/ui compatible alias for CheckboxGlass\n *\n * @example\n * ```tsx\n * import { Checkbox } from 'shadcn-glass-ui'\n *\n * <Checkbox\n * checked={isChecked}\n * onCheckedChange={(checked) => setIsChecked(checked === true)}\n * />\n * ```\n *\n * @since v2.3.0\n */\nexport const Checkbox = CheckboxGlass;\n","/**\n * CircularProgressGlass Component\n *\n * SVG-based circular progress indicator with:\n * - Determinate and indeterminate variants\n * - Configurable size and thickness\n * - Glow effect with SVG filters\n * - Theme-aware styling\n * - Optional label in center\n * - Gradient colors support\n */\n\nimport { forwardRef, useMemo, useId } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/lib/utils';\nimport '@/glass-theme.css';\n\n// ========================================\n// VARIANTS\n// ========================================\n\nconst circularProgressVariants = cva('relative inline-flex items-center justify-center p-4', {\n variants: {\n size: {\n sm: 'w-20 h-20',\n md: 'w-28 h-28',\n lg: 'w-36 h-36',\n xl: 'w-44 h-44',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n});\n\n// ========================================\n// TYPES\n// ========================================\n\nexport type CircularProgressGradient = 'violet' | 'blue' | 'cyan' | 'amber' | 'emerald' | 'rose';\n\nexport interface CircularProgressGlassProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, 'children'>,\n VariantProps<typeof circularProgressVariants> {\n /** Progress value (0-100) for determinate variant */\n readonly value?: number;\n /** Variant type */\n readonly variant?: 'determinate' | 'indeterminate';\n /** Stroke width in pixels */\n readonly thickness?: number;\n /** Background track width in pixels */\n readonly trackWidth?: number;\n /** Progress color gradient */\n readonly color?: CircularProgressGradient;\n /** Track color (background circle) */\n readonly trackColor?: string;\n /** Show percentage label in center */\n readonly showLabel?: boolean;\n /** Custom label text (overrides percentage) */\n readonly label?: string;\n /** Custom color for the center label text */\n readonly labelColor?: string;\n /** Show glow effect */\n readonly showGlow?: boolean;\n /** Glow intensity */\n readonly glowIntensity?: 'low' | 'medium' | 'high';\n /** Stroke linecap style */\n readonly strokeLinecap?: 'round' | 'butt' | 'square';\n /** Animation duration in seconds */\n readonly animationDuration?: number;\n}\n\n// ========================================\n// HELPERS\n// ========================================\n\nconst getGradientColors = (gradient: CircularProgressGradient) => {\n const gradients: Record<CircularProgressGradient, { from: string; to: string; glowVar: string }> =\n {\n violet: { from: '#8b5cf6', to: '#a855f7', glowVar: '--progress-glow-violet' },\n blue: { from: '#3b82f6', to: '#60a5fa', glowVar: '--progress-glow-blue' },\n cyan: { from: '#06b6d4', to: '#22d3ee', glowVar: '--progress-glow-cyan' },\n amber: { from: '#f59e0b', to: '#fbbf24', glowVar: '--progress-glow-amber' },\n emerald: { from: '#10b981', to: '#34d399', glowVar: '--progress-glow-emerald' },\n rose: { from: '#f43f5e', to: '#fb7185', glowVar: '--progress-glow-rose' },\n };\n return gradients[gradient];\n};\n\nconst getGlowStdDeviation = (intensity: 'low' | 'medium' | 'high'): number => {\n const intensities = { low: 2, medium: 4, high: 6 };\n return intensities[intensity];\n};\n\n// ========================================\n// COMPONENT\n// ========================================\n\nexport const CircularProgressGlass = forwardRef<HTMLDivElement, CircularProgressGlassProps>(\n (\n {\n className,\n size = 'md',\n value = 0,\n variant = 'determinate',\n thickness = 8,\n trackWidth = 8,\n color = 'violet',\n trackColor = 'oklch(100% 0 0 / 0.1)',\n showLabel = true,\n label,\n labelColor,\n showGlow = true,\n glowIntensity = 'medium',\n strokeLinecap = 'round',\n animationDuration = 1,\n ...props\n },\n ref\n ) => {\n const clampedValue = Math.min(100, Math.max(0, value));\n const gradientColors = getGradientColors(color);\n\n // SVG dimensions\n const sizeMap = { sm: 64, md: 96, lg: 128, xl: 160 };\n const svgSize = sizeMap[size || 'md'];\n const radius = (svgSize - Math.max(thickness, trackWidth)) / 2;\n const circumference = 2 * Math.PI * radius;\n const center = svgSize / 2;\n\n // Calculate stroke dash offset for determinate progress\n const dashOffset = useMemo(() => {\n if (variant === 'indeterminate') return circumference * 0.75;\n return circumference * ((100 - clampedValue) / 100);\n }, [variant, clampedValue, circumference]);\n\n // Generate unique IDs for SVG elements (using useId for stable IDs)\n const uniqueId = useId();\n const gradientId = `circular-gradient-${uniqueId}`;\n const glowId = `circular-glow-${uniqueId}`;\n\n return (\n <div\n ref={ref}\n data-slot=\"circular-progress\"\n className={cn(circularProgressVariants({ size }), className)}\n {...props}\n >\n <svg\n width={svgSize}\n height={svgSize}\n className=\"transform -rotate-90 overflow-visible\"\n aria-hidden=\"true\"\n style={{ overflow: 'visible' }}\n >\n <defs>\n {/* Gradient definition */}\n <linearGradient id={gradientId} x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"100%\">\n <stop offset=\"0%\" stopColor={gradientColors.from} />\n <stop offset=\"100%\" stopColor={gradientColors.to} />\n </linearGradient>\n\n {/* Glow filter */}\n {showGlow && (\n <filter id={glowId}>\n <feGaussianBlur\n stdDeviation={getGlowStdDeviation(glowIntensity)}\n result=\"coloredBlur\"\n />\n <feMerge>\n <feMergeNode in=\"coloredBlur\" />\n <feMergeNode in=\"SourceGraphic\" />\n </feMerge>\n </filter>\n )}\n </defs>\n\n {/* Background track */}\n <circle\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n stroke={trackColor}\n strokeWidth={trackWidth}\n />\n\n {/* Progress circle */}\n <circle\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n stroke={`url(#${gradientId})`}\n strokeWidth={thickness}\n strokeLinecap={strokeLinecap}\n strokeDasharray={circumference}\n strokeDashoffset={dashOffset}\n filter={showGlow ? `url(#${glowId})` : undefined}\n className={cn(\n 'transition-all',\n variant === 'indeterminate' && 'animate-circular-progress-spin'\n )}\n style={{\n transitionDuration: `${animationDuration}s`,\n transitionTimingFunction: 'cubic-bezier(0.4, 0, 0.2, 1)',\n }}\n />\n </svg>\n\n {/* Center label */}\n {showLabel && (\n <div className=\"absolute inset-0 flex items-center justify-center\">\n <span\n className=\"text-sm font-semibold tabular-nums\"\n style={{ color: labelColor || gradientColors.to }}\n >\n {label || (variant === 'determinate' ? `${clampedValue}%` : '')}\n </span>\n </div>\n )}\n\n {/* Accessibility */}\n <div\n role=\"progressbar\"\n aria-valuenow={variant === 'determinate' ? clampedValue : undefined}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={\n label || (variant === 'determinate' ? `Progress: ${clampedValue}%` : 'Loading progress')\n }\n aria-valuetext={label || (variant === 'determinate' ? `${clampedValue}%` : 'Loading...')}\n className=\"sr-only\"\n >\n {label || (variant === 'determinate' ? `${clampedValue}%` : 'Loading...')}\n </div>\n </div>\n );\n }\n);\n\nCircularProgressGlass.displayName = 'CircularProgressGlass';\n","\"use client\"\n\nimport * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Popover({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Command as CommandPrimitive } from \"cmdk\"\nimport { SearchIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"@/components/ui/dialog\"\n\nfunction Command({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n \"bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandDialog({\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof Dialog> & {\n title?: string\n description?: string\n className?: string\n showCloseButton?: boolean\n}) {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent\n className={cn(\"overflow-hidden p-0\", className)}\n showCloseButton={showCloseButton}\n >\n <Command className=\"[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div\n data-slot=\"command-input-wrapper\"\n className=\"flex h-9 items-center gap-2 border-b border-border px-3\"\n >\n <SearchIcon className=\"size-4 shrink-0 opacity-60 text-muted-foreground\" />\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn(\n \"placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm font-medium outline-hidden disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n </div>\n )\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn(\n \"max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandEmpty({\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty\n data-slot=\"command-empty\"\n className=\"py-6 text-center text-sm\"\n {...props}\n />\n )\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n \"text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn(\"bg-border -mx-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction CommandItem({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n \"data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n","/**\n * InputGlass CVA Variants\n * Extracted for Fast Refresh compatibility\n */\n\nimport { cva } from 'class-variance-authority';\n\nexport type InputGlassSize = 'sm' | 'md' | 'lg';\n\nexport const inputVariants = cva(\n 'w-full transition-all duration-300 outline-none backdrop-blur-sm disabled:opacity-50 disabled:cursor-not-allowed',\n {\n variants: {\n size: {\n // All sizes use text-base (16px) minimum to prevent iOS auto-zoom on focus\n // Border radius: 8px per UI_DESIGN.md (rounded-md)\n // Touch targets: 44-48px minimum (Apple HIG)\n sm: 'px-3 py-2 text-base rounded-md min-h-[44px]', // UI_DESIGN: 8px radius, 44px mobile\n md: 'px-4 py-2.5 text-base rounded-md min-h-[44px]', // UI_DESIGN: 8px radius\n lg: 'px-5 py-3 text-base md:text-lg rounded-md min-h-[48px]', // UI_DESIGN: 8px radius\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n","/**\n * Dropdown Content Styles\n *\n * Unified styling utilities for all dropdown-style components:\n * - DropdownGlass\n * - ComboBoxGlass\n * - SelectGlass\n * - SortDropdownGlass\n *\n * Eliminates ~50 lines of duplicated dropdown styling code.\n */\n\nimport type { CSSProperties } from 'react';\nimport { cn } from '@/lib/utils';\nimport { ICON_SIZES } from '@/components/glass/primitives/style-utils';\n\n// ============================================\n// DROPDOWN CONTENT STYLES\n// ============================================\n\n/**\n * Generate consistent dropdown content styles with glassmorphism.\n *\n * Provides standard glass surface with backdrop blur for all dropdown menus.\n *\n * @returns React CSSProperties object\n *\n * @example\n * ```tsx\n * <div style={getDropdownContentStyles()}>\n * <DropdownItem />\n * </div>\n * ```\n */\nexport function getDropdownContentStyles(): CSSProperties {\n return {\n background: 'var(--dropdown-bg)',\n border: '1px solid var(--dropdown-border)',\n boxShadow: 'var(--dropdown-glow)',\n backdropFilter: 'blur(var(--blur-md))',\n WebkitBackdropFilter: 'blur(var(--blur-md))',\n };\n}\n\n// ============================================\n// DROPDOWN CONTENT CLASSES\n// ============================================\n\n/**\n * Standard Tailwind classes for dropdown content containers.\n *\n * Includes sizing, border radius, z-index, and Radix UI animations.\n *\n * @example\n * ```tsx\n * <DropdownMenuContent className={dropdownContentClasses}>\n * ...\n * </DropdownMenuContent>\n * ```\n */\nexport const dropdownContentClasses = cn(\n // Sizing\n 'min-w-40 md:min-w-[200px]',\n\n // Shape\n 'rounded-2xl overflow-hidden',\n\n // Layering\n 'z-[50002]',\n\n // Animations (Radix UI data attributes)\n 'animate-in fade-in-0 zoom-in-95',\n 'data-[side=bottom]:slide-in-from-top-2',\n 'data-[side=top]:slide-in-from-bottom-2'\n);\n\n// ============================================\n// DROPDOWN ITEM CLASSES\n// ============================================\n\n/**\n * Options for dropdown item styling\n */\nexport interface DropdownItemClassesOptions {\n /** Apply danger/destructive styling */\n danger?: boolean;\n /** Item is currently selected */\n selected?: boolean;\n /** Item is highlighted (keyboard navigation) */\n highlighted?: boolean;\n}\n\n/**\n * Generate classes for dropdown menu items.\n *\n * Supports different states: normal, highlighted, selected, danger.\n *\n * @param options - Styling options\n * @returns className string\n *\n * @example\n * ```tsx\n * // Normal item\n * <div className={getDropdownItemClasses()}>Edit</div>\n *\n * // Danger item\n * <div className={getDropdownItemClasses({ danger: true })}>Delete</div>\n *\n * // Selected item\n * <div className={getDropdownItemClasses({ selected: true })}>Active</div>\n * ```\n */\nexport function getDropdownItemClasses(options?: DropdownItemClassesOptions): string {\n const { danger, selected, highlighted } = options ?? {};\n\n return cn(\n // Base layout - matching ComboBoxGlass exactly\n 'w-full px-3 py-2.5',\n 'text-sm text-left',\n 'flex items-center gap-2',\n\n // Shape - rounded-lg matching ComboBoxGlass (эталон)\n 'rounded-lg',\n\n // Interaction\n 'outline-none cursor-pointer select-none',\n 'transition-colors duration-150',\n\n // Hover/highlight state (data-[selected] for cmdk, data-[highlighted] for Radix)\n highlighted && 'bg-(--dropdown-item-hover)',\n 'data-[highlighted]:bg-(--dropdown-item-hover)',\n 'data-[selected=true]:bg-(--dropdown-item-hover)',\n\n // Selected state\n selected && 'bg-(--select-item-selected-bg) text-(--select-item-selected-text)',\n\n // Danger state\n danger\n ? 'text-(--alert-danger-text) data-[highlighted]:text-(--alert-danger-text)'\n : 'text-(--dropdown-item-text)'\n );\n}\n\n// ============================================\n// DROPDOWN ICON CLASSES\n// ============================================\n\n/**\n * Options for dropdown icon styling\n */\nexport interface DropdownIconClassesOptions {\n /** Apply danger/destructive styling */\n danger?: boolean;\n}\n\n/**\n * Generate classes for icons within dropdown items.\n *\n * @param options - Styling options\n * @returns className string\n *\n * @example\n * ```tsx\n * <Edit className={getDropdownIconClasses()} />\n * <Trash className={getDropdownIconClasses({ danger: true })} />\n * ```\n */\nexport function getDropdownIconClasses(options?: DropdownIconClassesOptions): string {\n return cn(\n // Size\n ICON_SIZES.md,\n\n // Behavior\n 'transition-colors duration-200 ease-out shrink-0',\n\n // Color\n options?.danger\n ? 'text-[var(--alert-danger-text)]'\n : 'text-[var(--dropdown-icon)] group-data-[highlighted]:text-[var(--dropdown-icon-hover)]'\n );\n}\n\n// ============================================\n// DROPDOWN SEPARATOR CLASSES\n// ============================================\n\n/**\n * Standard classes for dropdown separators.\n *\n * @example\n * ```tsx\n * <DropdownMenuSeparator className={dropdownSeparatorClasses} />\n * ```\n */\nexport const dropdownSeparatorClasses = cn('h-px my-1', 'bg-[var(--dropdown-border)]');\n\n// ============================================\n// DROPDOWN LABEL CLASSES\n// ============================================\n\n/**\n * Standard classes for dropdown section labels.\n *\n * @example\n * ```tsx\n * <DropdownMenuLabel className={dropdownLabelClasses}>\n * Actions\n * </DropdownMenuLabel>\n * ```\n */\nexport const dropdownLabelClasses = cn(\n 'px-3 py-1.5 md:px-4 md:py-2',\n 'text-xs font-medium',\n 'text-[var(--text-muted)]'\n);\n","/**\n * ComboBoxGlass Component\n *\n * Glass-themed combobox (searchable select) with:\n * - Keyboard navigation support\n * - Search/filter functionality\n * - Custom rendering options\n * - Async data loading support\n * - Glass styling with theme support\n * - Accessibility features\n * - Form field wrapper support (label, error, success)\n * - Size variants (sm, md, lg, xl)\n * - Optional searchable mode\n * - Icon support for trigger and options\n */\n\n'use client';\n\nimport { useState, useMemo, useCallback, forwardRef, useId } from 'react';\nimport { CheckIcon, ChevronsUpDownIcon, type LucideIcon } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { ButtonGlass } from './button-glass';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '@/components/ui/command';\nimport { FormFieldWrapper } from '../primitives/form-field-wrapper';\nimport { inputVariants, type InputGlassSize } from '@/lib/variants/input-glass-variants';\nimport {\n getDropdownContentStyles,\n dropdownContentClasses,\n getDropdownItemClasses,\n} from '@/lib/variants/dropdown-content-styles';\nimport { ICON_SIZES } from '../primitives/style-utils';\nimport '@/glass-theme.css';\n\n// ========================================\n// TYPES\n// ========================================\n\nexport type GlassVariant = 'glass' | 'frosted' | 'fluted' | 'crystal';\n\nexport interface ComboBoxOption<T = string> {\n readonly value: T;\n readonly label: string;\n readonly disabled?: boolean;\n /** Optional icon component for the option */\n readonly icon?: LucideIcon;\n}\n\nexport interface ComboBoxGlassProps<T = string> {\n /** Available options */\n readonly options: readonly ComboBoxOption<T>[];\n /** Currently selected value */\n readonly value?: T;\n /** Callback when value changes */\n readonly onValueChange?: (value: T | undefined) => void;\n /** Placeholder text for trigger button */\n readonly placeholder?: string;\n /** Text shown when no results found */\n readonly emptyText?: string;\n /** Placeholder for search input */\n readonly searchPlaceholder?: string;\n /** Glass variant style */\n readonly glassVariant?: GlassVariant;\n /** Disabled state */\n readonly disabled?: boolean;\n /** Custom className for container */\n readonly className?: string;\n /** Custom className for popover content */\n readonly popoverClassName?: string;\n /** Allow clearing selection */\n readonly clearable?: boolean;\n /** Popover side */\n readonly side?: 'top' | 'right' | 'bottom' | 'left';\n /** Popover alignment */\n readonly align?: 'start' | 'center' | 'end';\n\n // ========================================\n // NEW PROPS (Week 3 Enhancement)\n // ========================================\n\n /** Label text displayed above the field */\n readonly label?: string;\n /** Error message - displays in red below the field */\n readonly error?: string;\n /** Success message - displays in green if no error */\n readonly success?: string;\n /** Shows required asterisk (*) next to label */\n readonly required?: boolean;\n /** Size variant (affects trigger button height and padding) */\n readonly size?: InputGlassSize;\n /** Enable/disable search functionality */\n readonly searchable?: boolean;\n /** Optional icon for trigger button (displayed before text) */\n readonly icon?: LucideIcon;\n}\n\n// ========================================\n// COMPONENT\n// ========================================\n\nfunction ComboBoxGlassInner<T = string>(\n {\n options,\n value,\n onValueChange,\n placeholder = 'Select option...',\n emptyText = 'No results found.',\n searchPlaceholder = 'Search...',\n glassVariant = 'glass',\n disabled = false,\n className,\n popoverClassName,\n clearable = false,\n side = 'bottom',\n align = 'start',\n // NEW PROPS\n label,\n error,\n success,\n required = false,\n size = 'md',\n searchable = true,\n icon: TriggerIcon,\n }: ComboBoxGlassProps<T>,\n ref: React.ForwardedRef<HTMLButtonElement>\n) {\n const [open, setOpen] = useState(false);\n const [search, setSearch] = useState('');\n const fieldId = useId();\n\n // Find selected option\n const selectedOption = useMemo(\n () => options.find((opt) => opt.value === value),\n [options, value]\n );\n\n // Filter options based on search\n const filteredOptions = useMemo(() => {\n if (!search) return options;\n const searchLower = search.toLowerCase();\n return options.filter((opt) => opt.label.toLowerCase().includes(searchLower));\n }, [options, search]);\n\n // Handle option selection\n const handleSelect = useCallback(\n (optionValue: T) => {\n if (clearable && value === optionValue) {\n onValueChange?.(undefined);\n } else {\n onValueChange?.(optionValue);\n }\n setOpen(false);\n setSearch('');\n },\n [value, onValueChange, clearable]\n );\n\n // Get glass variant class\n const getGlassClass = () => {\n const variants: Record<GlassVariant, string> = {\n glass: 'glass',\n frosted: 'frosted',\n fluted: 'fluted',\n crystal: 'crystal',\n };\n return variants[glassVariant];\n };\n\n // Render content\n const comboboxContent = (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <ButtonGlass\n ref={ref}\n variant=\"secondary\"\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-label={selectedOption?.label || placeholder}\n aria-describedby={error ? `${fieldId}-error` : success ? `${fieldId}-success` : undefined}\n disabled={disabled}\n className={cn(\n 'w-full justify-between',\n // Apply size variant via inputVariants\n inputVariants({ size }),\n !selectedOption && 'text-muted-foreground',\n className\n )}\n >\n <span className=\"flex items-center gap-2 truncate\">\n {TriggerIcon && <TriggerIcon className={ICON_SIZES.md} />}\n {selectedOption ? selectedOption.label : placeholder}\n </span>\n <ChevronsUpDownIcon className={cn(ICON_SIZES.md, 'shrink-0 opacity-50')} />\n </ButtonGlass>\n </PopoverTrigger>\n <PopoverContent\n side={side}\n align={align}\n className={cn(\n dropdownContentClasses,\n 'w-[--radix-popover-trigger-width] p-0 border-0',\n getGlassClass(),\n popoverClassName\n )}\n style={getDropdownContentStyles()}\n >\n <Command\n shouldFilter={false}\n className={cn(\n 'bg-transparent',\n // Hide default border, use subtle divider instead\n '[&_[data-slot=command-input-wrapper]]:border-b-0',\n // Fix search icon - use glass theme color with better visibility\n '[&_[data-slot=command-input-wrapper]_svg]:text-[var(--text-muted)]',\n '[&_[data-slot=command-input-wrapper]_svg]:opacity-80'\n )}\n >\n {searchable && (\n <CommandInput\n placeholder={searchPlaceholder}\n value={search}\n onValueChange={setSearch}\n className=\"text-[var(--text-primary)] placeholder:text-[var(--text-muted)] h-10 font-medium\"\n />\n )}\n <CommandList className=\"p-1.5 scrollbar-hide\">\n <CommandEmpty className=\"text-[var(--text-muted)] py-4\">{emptyText}</CommandEmpty>\n <CommandGroup className=\"text-[var(--text-primary)] p-0\">\n {filteredOptions.map((option) => {\n const OptionIcon = option.icon;\n const isSelected = value === option.value;\n\n return (\n <CommandItem\n key={String(option.value)}\n value={String(option.value)}\n disabled={option.disabled}\n onSelect={() => handleSelect(option.value)}\n className={cn(\n getDropdownItemClasses({ selected: isSelected }),\n option.disabled && 'cursor-not-allowed opacity-50'\n )}\n >\n <CheckIcon\n className={cn(\n ICON_SIZES.md,\n 'shrink-0',\n isSelected ? 'opacity-100 text-[var(--text-accent)]' : 'opacity-0'\n )}\n />\n {OptionIcon && (\n <OptionIcon\n className={cn(ICON_SIZES.md, 'shrink-0 text-[var(--dropdown-icon)]')}\n />\n )}\n <span className=\"truncate\">{option.label}</span>\n </CommandItem>\n );\n })}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n );\n\n // Wrap with FormFieldWrapper if label/error/success provided\n if (label || error || success) {\n return (\n <FormFieldWrapper\n label={label}\n error={error}\n success={success}\n required={required}\n htmlFor={fieldId}\n >\n {comboboxContent}\n </FormFieldWrapper>\n );\n }\n\n return comboboxContent;\n}\n\n// Export with generic type support\nexport const ComboBoxGlass = forwardRef(ComboBoxGlassInner) as <T = string>(\n props: ComboBoxGlassProps<T> & { ref?: React.ForwardedRef<HTMLButtonElement> }\n) => ReturnType<typeof ComboBoxGlassInner>;\n\n// Add display name for debugging\nComboBoxGlassInner.displayName = 'ComboBoxGlass';\n","/**\n * DropdownMenuGlass - Compound Component\n *\n * Glass-themed dropdown menu following shadcn/ui compound component pattern.\n * Built on Radix UI primitives with unified glass styling.\n *\n * @example Basic usage\n * ```tsx\n * <DropdownMenuGlass>\n * <DropdownMenuGlassTrigger asChild>\n * <Button>Open Menu</Button>\n * </DropdownMenuGlassTrigger>\n * <DropdownMenuGlassContent>\n * <DropdownMenuGlassItem onSelect={() => console.log('Edit')}>\n * <Edit className=\"mr-2 h-4 w-4\" />\n * Edit\n * </DropdownMenuGlassItem>\n * <DropdownMenuGlassSeparator />\n * <DropdownMenuGlassItem variant=\"destructive\">\n * <Trash className=\"mr-2 h-4 w-4\" />\n * Delete\n * </DropdownMenuGlassItem>\n * </DropdownMenuGlassContent>\n * </DropdownMenuGlass>\n * ```\n *\n * @example With labels and groups\n * ```tsx\n * <DropdownMenuGlass>\n * <DropdownMenuGlassTrigger asChild>\n * <Button variant=\"outline\">Options</Button>\n * </DropdownMenuGlassTrigger>\n * <DropdownMenuGlassContent>\n * <DropdownMenuGlassLabel>Actions</DropdownMenuGlassLabel>\n * <DropdownMenuGlassGroup>\n * <DropdownMenuGlassItem>Copy</DropdownMenuGlassItem>\n * <DropdownMenuGlassItem>Paste</DropdownMenuGlassItem>\n * </DropdownMenuGlassGroup>\n * <DropdownMenuGlassSeparator />\n * <DropdownMenuGlassLabel>Danger Zone</DropdownMenuGlassLabel>\n * <DropdownMenuGlassItem variant=\"destructive\">Delete</DropdownMenuGlassItem>\n * </DropdownMenuGlassContent>\n * </DropdownMenuGlass>\n * ```\n *\n * @see https://www.radix-ui.com/primitives/docs/components/dropdown-menu\n */\n\n'use client';\n\nimport * as React from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport {\n getDropdownContentStyles,\n dropdownContentClasses,\n getDropdownItemClasses,\n dropdownSeparatorClasses,\n dropdownLabelClasses,\n} from '@/lib/variants/dropdown-content-styles';\nimport '@/glass-theme.css';\n\n// ========================================\n// ROOT\n// ========================================\n\n// Note: DropdownMenuPrimitive.Root is a context provider and doesn't render DOM,\n// so data-slot is applied to Content instead. This matches shadcn/ui pattern.\nconst DropdownMenuGlassRoot = (\n props: React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Root>\n) => <DropdownMenuPrimitive.Root {...props} />;\nDropdownMenuGlassRoot.displayName = 'DropdownMenuGlass';\n\nconst DropdownMenuGlass = DropdownMenuGlassRoot;\n\n// ========================================\n// TRIGGER\n// ========================================\n\nconst DropdownMenuGlassTrigger = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Trigger>\n>((props, ref) => (\n <DropdownMenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" ref={ref} {...props} />\n));\nDropdownMenuGlassTrigger.displayName = 'DropdownMenuGlassTrigger';\n\n// ========================================\n// GROUP\n// ========================================\n\nconst DropdownMenuGlassGroup = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Group>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Group>\n>((props, ref) => (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" ref={ref} {...props} />\n));\nDropdownMenuGlassGroup.displayName = 'DropdownMenuGlassGroup';\n\n// ========================================\n// PORTAL\n// ========================================\n\nconst DropdownMenuGlassPortal = DropdownMenuPrimitive.Portal;\n\n// ========================================\n// SUB\n// ========================================\n\n// Note: DropdownMenuPrimitive.Sub is a context provider and doesn't render DOM,\n// so data-slot is applied to SubContent instead. This matches shadcn/ui pattern.\nconst DropdownMenuGlassSub = (\n props: React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Sub>\n) => <DropdownMenuPrimitive.Sub {...props} />;\nDropdownMenuGlassSub.displayName = 'DropdownMenuGlassSub';\n\n// ========================================\n// RADIO GROUP\n// ========================================\n\nconst DropdownMenuGlassRadioGroup = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.RadioGroup>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioGroup>\n>((props, ref) => (\n <DropdownMenuPrimitive.RadioGroup data-slot=\"dropdown-menu-radio-group\" ref={ref} {...props} />\n));\nDropdownMenuGlassRadioGroup.displayName = 'DropdownMenuGlassRadioGroup';\n\n// ========================================\n// SUB TRIGGER\n// ========================================\n\nconst DropdownMenuGlassSubTrigger = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n data-slot=\"dropdown-menu-sub-trigger\"\n className={cn(\n getDropdownItemClasses(),\n 'data-[state=open]:bg-[var(--dropdown-item-hover)]',\n inset && 'pl-8',\n className\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto h-4 w-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n));\nDropdownMenuGlassSubTrigger.displayName = 'DropdownMenuGlassSubTrigger';\n\n// ========================================\n// SUB CONTENT\n// ========================================\n\nconst DropdownMenuGlassSubContent = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(dropdownContentClasses, 'p-1.5', className)}\n style={getDropdownContentStyles()}\n {...props}\n />\n));\nDropdownMenuGlassSubContent.displayName = 'DropdownMenuGlassSubContent';\n\n// ========================================\n// CONTENT\n// ========================================\n\nconst DropdownMenuGlassContent = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 8, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(dropdownContentClasses, 'p-1.5', className)}\n style={getDropdownContentStyles()}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuGlassContent.displayName = 'DropdownMenuGlassContent';\n\n// ========================================\n// ITEM\n// ========================================\n\nexport interface DropdownMenuGlassItemProps extends React.ComponentPropsWithoutRef<\n typeof DropdownMenuPrimitive.Item\n> {\n inset?: boolean;\n variant?: 'default' | 'destructive';\n}\n\nconst DropdownMenuGlassItem = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Item>,\n DropdownMenuGlassItemProps\n>(({ className, inset, variant = 'default', ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n data-slot=\"dropdown-menu-item\"\n className={cn(\n getDropdownItemClasses({ danger: variant === 'destructive' }),\n inset && 'pl-8',\n className\n )}\n {...props}\n />\n));\nDropdownMenuGlassItem.displayName = 'DropdownMenuGlassItem';\n\n// ========================================\n// CHECKBOX ITEM\n// ========================================\n\nconst DropdownMenuGlassCheckboxItem = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(getDropdownItemClasses(), 'pl-8 pr-2', className)}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n));\nDropdownMenuGlassCheckboxItem.displayName = 'DropdownMenuGlassCheckboxItem';\n\n// ========================================\n// RADIO ITEM\n// ========================================\n\nconst DropdownMenuGlassRadioItem = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(getDropdownItemClasses(), 'pl-8 pr-2', className)}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n));\nDropdownMenuGlassRadioItem.displayName = 'DropdownMenuGlassRadioItem';\n\n// ========================================\n// LABEL\n// ========================================\n\nconst DropdownMenuGlassLabel = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n data-slot=\"dropdown-menu-label\"\n className={cn(dropdownLabelClasses, inset && 'pl-8', className)}\n {...props}\n />\n));\nDropdownMenuGlassLabel.displayName = 'DropdownMenuGlassLabel';\n\n// ========================================\n// SEPARATOR\n// ========================================\n\nconst DropdownMenuGlassSeparator = React.forwardRef<\n React.ComponentRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n data-slot=\"dropdown-menu-separator\"\n className={cn(dropdownSeparatorClasses, '-mx-1 my-1', className)}\n {...props}\n />\n));\nDropdownMenuGlassSeparator.displayName = 'DropdownMenuGlassSeparator';\n\n// ========================================\n// SHORTCUT\n// ========================================\n\nconst DropdownMenuGlassShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn('ml-auto text-xs tracking-widest text-(--text-muted)', className)}\n {...props}\n />\n );\n};\nDropdownMenuGlassShortcut.displayName = 'DropdownMenuGlassShortcut';\n\n// ========================================\n// EXPORTS\n// ========================================\n\nexport {\n DropdownMenuGlass,\n DropdownMenuGlassTrigger,\n DropdownMenuGlassContent,\n DropdownMenuGlassItem,\n DropdownMenuGlassCheckboxItem,\n DropdownMenuGlassRadioItem,\n DropdownMenuGlassLabel,\n DropdownMenuGlassSeparator,\n DropdownMenuGlassShortcut,\n DropdownMenuGlassGroup,\n DropdownMenuGlassPortal,\n DropdownMenuGlassSub,\n DropdownMenuGlassSubContent,\n DropdownMenuGlassSubTrigger,\n DropdownMenuGlassRadioGroup,\n};\n","/**\n * DropdownGlass Component\n *\n * Glass-themed dropdown menu with two APIs:\n *\n * 1. **Simple API** (items prop) - Quick setup for basic menus\n * 2. **Compound API** (DropdownMenuGlass.*) - Full shadcn/ui pattern for complex menus\n *\n * @example Simple API (recommended for basic dropdowns)\n * ```tsx\n * import { DropdownGlass } from '@/components/glass/ui/dropdown-glass';\n *\n * <DropdownGlass\n * trigger={<button><MoreVertical /></button>}\n * items={[\n * { label: 'Edit', icon: Edit, onClick: handleEdit },\n * { divider: true },\n * { label: 'Delete', icon: Trash, onClick: handleDelete, danger: true }\n * ]}\n * />\n * ```\n *\n * @example Compound API (for complex dropdowns)\n * ```tsx\n * import {\n * DropdownMenuGlass,\n * DropdownMenuGlassTrigger,\n * DropdownMenuGlassContent,\n * DropdownMenuGlassItem,\n * DropdownMenuGlassSeparator,\n * } from '@/components/glass/ui/dropdown-menu-glass';\n *\n * <DropdownMenuGlass>\n * <DropdownMenuGlassTrigger asChild>\n * <Button>Open Menu</Button>\n * </DropdownMenuGlassTrigger>\n * <DropdownMenuGlassContent>\n * <DropdownMenuGlassItem>Edit</DropdownMenuGlassItem>\n * <DropdownMenuGlassSeparator />\n * <DropdownMenuGlassItem variant=\"destructive\">Delete</DropdownMenuGlassItem>\n * </DropdownMenuGlassContent>\n * </DropdownMenuGlass>\n * ```\n *\n * @see ./dropdown-menu-glass.tsx for compound component exports\n */\n\n'use client';\n\nimport * as React from 'react';\nimport type { LucideIcon } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { ICON_SIZES } from '@/components/glass/primitives';\nimport {\n DropdownMenuGlass,\n DropdownMenuGlassTrigger,\n DropdownMenuGlassContent,\n DropdownMenuGlassItem,\n DropdownMenuGlassSeparator,\n} from './dropdown-menu-glass';\nimport '@/glass-theme.css';\n\n// ========================================\n// TYPES\n// ========================================\n\nexport interface DropdownItem {\n readonly label?: string;\n readonly icon?: LucideIcon;\n readonly onClick?: () => void;\n readonly danger?: boolean;\n readonly divider?: boolean;\n}\n\n// ========================================\n// PROPS INTERFACE\n// ========================================\n\n/**\n * Props for the DropdownGlass component (Simple API)\n *\n * @accessibility\n * - **Keyboard Navigation:** Arrow keys navigate, Enter/Space activates, Escape closes\n * - **Focus Management:** Focus trapped within menu when open\n * - **Screen Readers:** Uses role=\"menu\" and role=\"menuitem\"\n * - **Touch Targets:** All items meet minimum 44x44px\n */\nexport interface DropdownGlassProps {\n /** Trigger element (button, etc.) */\n readonly trigger: React.ReactNode;\n /** Menu items array */\n readonly items: readonly DropdownItem[];\n /** Dropdown alignment */\n readonly align?: 'left' | 'right';\n /** Additional className */\n readonly className?: string;\n}\n\n// ========================================\n// COMPONENT\n// ========================================\n\n/**\n * DropdownGlass - Simple API wrapper\n *\n * For complex dropdowns with checkboxes, radio groups, sub-menus, etc.,\n * use the compound components from dropdown-menu-glass.tsx directly.\n */\nexport const DropdownGlass = React.forwardRef<HTMLDivElement, DropdownGlassProps>(\n ({ trigger, items, align = 'left', className }, ref) => {\n return (\n <div ref={ref} data-slot=\"dropdown\" className={cn('relative inline-block', className)}>\n <DropdownMenuGlass>\n <DropdownMenuGlassTrigger asChild>{trigger}</DropdownMenuGlassTrigger>\n\n <DropdownMenuGlassContent align={align === 'left' ? 'start' : 'end'}>\n {items.map((item, idx) =>\n item.divider ? (\n <DropdownMenuGlassSeparator key={`divider-${idx}`} />\n ) : (\n <DropdownMenuGlassItem\n key={`item-${idx}`}\n variant={item.danger ? 'destructive' : 'default'}\n onSelect={item.onClick}\n >\n {item.icon && (\n <item.icon\n className={cn(\n ICON_SIZES.md,\n 'shrink-0',\n item.danger\n ? 'text-(--alert-danger-text)'\n : 'text-(--dropdown-icon) group-data-highlighted:text-(--dropdown-icon-hover)'\n )}\n />\n )}\n <span className=\"font-medium\">{item.label}</span>\n </DropdownMenuGlassItem>\n )\n )}\n </DropdownMenuGlassContent>\n </DropdownMenuGlass>\n </div>\n );\n }\n);\n\nDropdownGlass.displayName = 'DropdownGlass';\n\n// ========================================\n// RE-EXPORTS (for convenience)\n// ========================================\n\nexport {\n DropdownMenuGlass,\n DropdownMenuGlassTrigger,\n DropdownMenuGlassContent,\n DropdownMenuGlassItem,\n DropdownMenuGlassSeparator,\n} from './dropdown-menu-glass';\n","/**\n * GlassCard CVA Variants\n * Extracted for Fast Refresh compatibility\n */\n\nimport { cva } from 'class-variance-authority';\n\nexport type GlowType = 'blue' | 'violet' | 'cyan' | null;\nexport type IntensityType = 'subtle' | 'medium' | 'strong';\n\nexport type PaddingType = 'none' | 'compact' | 'default' | 'featured';\n\nexport const cardIntensity = cva('border transition-all duration-300 text-[var(--text-primary)]', {\n variants: {\n intensity: {\n subtle: '',\n medium: '',\n strong: '',\n },\n hover: {\n true: 'hover-glow cursor-pointer',\n false: '',\n },\n // Padding variants per UI_DESIGN.md (24-32px for glass cards)\n // Border radius per UI_DESIGN.md: compact=12px, default=16px, featured=20px\n padding: {\n none: '',\n compact: 'p-4 md:p-5 rounded-lg', // 16px → 20px padding, 12px radius\n default: 'p-6 rounded-xl', // 24px padding, 16px radius\n featured: 'p-8 rounded-[20px]', // 32px padding, 20px radius (custom)\n },\n },\n defaultVariants: {\n intensity: 'medium',\n hover: true,\n padding: 'default',\n },\n});\n","/**\n * GlassCard Component\n *\n * Glass-themed container with:\n * - Theme-aware styling (glass/light/aurora)\n * - Configurable blur intensity\n * - Optional glow effects\n * - Hover animations\n */\n\nimport { forwardRef, type ReactNode, type CSSProperties } from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/lib/utils';\nimport { useHover } from '@/lib/hooks/use-hover';\nimport { cardIntensity } from '@/lib/variants/glass-card-variants';\nimport '@/glass-theme.css';\n\nimport type { GlowType, IntensityType, PaddingType } from '@/lib/variants/glass-card-variants';\n\n// ========================================\n// BLUR MAP\n// ========================================\n// Per UI_DESIGN.md design tokens:\n// - subtle: 8px (--glass-blur-sm) - light glass effect\n// - medium: 16px (--glass-blur-md) - standard cards (was 12px - breaking change)\n// - strong: 24px (--glass-blur-lg) - featured cards (was 16px - breaking change)\n\nconst blurMap: Record<IntensityType, string> = {\n subtle: 'var(--blur-sm)', // 8px\n medium: 'var(--blur-md)', // 16px (BREAKING: was 12px)\n strong: 'var(--blur-lg)', // 24px (BREAKING: was 16px)\n};\n\n// ========================================\n// PROPS INTERFACE\n// ========================================\n\n/**\n * Props for the GlassCard component\n *\n * A glass-themed container with configurable blur, glow effects, and hover animations.\n * Features polymorphic rendering via `asChild` for semantic HTML flexibility.\n *\n * @accessibility\n * - **Keyboard Navigation:** When used with `asChild` as a link/button, inherits native keyboard support (Enter/Space activation)\n * - **Focus Management:** Focus ring applied to child element when using `asChild` pattern with interactive elements\n * - **Screen Readers:** Semantic HTML preserved via `asChild` - use appropriate elements (`<a>`, `<button>`, `<article>`)\n * - **Hover State:** Hover effects are purely visual and do not affect functionality (progressive enhancement)\n * - **Touch Targets:** When interactive, ensure child element meets minimum 44x44px touch target (WCAG 2.5.5)\n * - **Color Contrast:** Card border and background meet WCAG AA contrast requirements, content contrast is consumer's responsibility\n * - **Motion:** Hover scale animation respects `prefers-reduced-motion` settings via CSS transitions\n *\n * @example\n * ```tsx\n * // Basic card\n * <GlassCard intensity=\"medium\">Content</GlassCard>\n *\n * // As a clickable link with accessible name\n * <GlassCard asChild intensity=\"medium\">\n * <a href=\"/details\" aria-label=\"View product details\">\n * <h3>Product Title</h3>\n * <p>Description</p>\n * </a>\n * </GlassCard>\n *\n * // Different intensity levels\n * <GlassCard intensity=\"subtle\">Subtle blur</GlassCard>\n * <GlassCard intensity=\"medium\">Standard blur</GlassCard>\n * <GlassCard intensity=\"strong\">Heavy blur</GlassCard>\n *\n * // With glow effects\n * <GlassCard glow=\"blue\">Blue glow card</GlassCard>\n * <GlassCard glow=\"violet\">Violet glow card</GlassCard>\n * <GlassCard glow=\"cyan\">Cyan glow card</GlassCard>\n *\n * // As a button (interactive) with role\n * <GlassCard asChild hover intensity=\"medium\">\n * <button onClick={handleClick} aria-label=\"Open settings\">\n * <Settings className=\"w-6 h-6\" />\n * <span>Settings</span>\n * </button>\n * </GlassCard>\n *\n * // Article card with semantic HTML\n * <GlassCard asChild intensity=\"medium\" padding=\"lg\">\n * <article>\n * <header><h2>Article Title</h2></header>\n * <p>Article content...</p>\n * <footer>Published: Jan 1, 2025</footer>\n * </article>\n * </GlassCard>\n * ```\n */\nexport interface GlassCardProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'style'>, VariantProps<typeof cardIntensity> {\n /**\n * Render as child element instead of div (polymorphic rendering).\n * Useful for making cards clickable links or custom interactive elements.\n * @default false\n * @example\n * ```tsx\n * <GlassCard asChild>\n * <a href=\"/article\">Article Content</a>\n * </GlassCard>\n * ```\n */\n readonly asChild?: boolean;\n\n readonly children: ReactNode;\n readonly glow?: GlowType;\n readonly padding?: PaddingType;\n}\n\n// ========================================\n// COMPONENT\n// ========================================\n\n// CSS variable maps for intensity\nconst bgVarMap: Record<IntensityType, string> = {\n subtle: 'var(--card-subtle-bg)',\n medium: 'var(--card-medium-bg)',\n strong: 'var(--card-strong-bg)',\n};\n\nconst borderVarMap: Record<IntensityType, string> = {\n subtle: 'var(--card-subtle-border)',\n medium: 'var(--card-medium-border)',\n strong: 'var(--card-strong-border)',\n};\n\nconst glowVarMap: Record<string, string> = {\n blue: 'var(--glow-blue)',\n violet: 'var(--glow-violet)',\n purple: 'var(--glow-violet)',\n cyan: 'var(--glow-cyan)',\n};\n\nexport const GlassCard = forwardRef<HTMLDivElement, GlassCardProps>(\n (\n {\n asChild = false,\n children,\n className,\n intensity = 'medium',\n glow = null,\n hover = true,\n padding = 'default',\n ...props\n },\n ref\n ) => {\n const { isHovered, hoverProps } = useHover();\n const intensityVal = intensity ?? 'medium';\n\n const cardStyles: CSSProperties = {\n background: isHovered && hover ? 'var(--card-hover-bg)' : bgVarMap[intensityVal],\n borderColor: isHovered && hover ? 'var(--card-hover-border)' : borderVarMap[intensityVal],\n backdropFilter: `blur(${blurMap[intensityVal]})`,\n WebkitBackdropFilter: `blur(${blurMap[intensityVal]})`,\n boxShadow: glow\n ? glowVarMap[glow]\n : isHovered && hover\n ? 'var(--card-hover-glow)'\n : 'var(--glow-neutral)',\n };\n\n // Polymorphic component - render as Slot when asChild is true\n const Comp = asChild ? Slot : 'div';\n\n return (\n <Comp\n ref={ref}\n data-slot=\"card\"\n className={cn(cardIntensity({ intensity, hover, padding }), className)}\n style={cardStyles}\n onMouseEnter={hoverProps.onMouseEnter}\n onMouseLeave={hoverProps.onMouseLeave}\n {...props}\n >\n {children}\n </Comp>\n );\n }\n);\n\nGlassCard.displayName = 'GlassCard';\n","/**\n * InputGlass Component\n *\n * Glass-themed input with:\n * - Theme-aware styling via CSS variables (glass/light/aurora)\n * - Focus glow effects\n * - Error/success states\n * - Icon support (left/right position)\n * - Backdrop blur effect\n */\n\nimport {\n forwardRef,\n useCallback,\n type InputHTMLAttributes,\n type CSSProperties,\n type FocusEvent,\n} from 'react';\nimport { type VariantProps } from 'class-variance-authority';\nimport { type LucideIcon } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { useFocus } from '@/lib/hooks/use-focus';\nimport { inputVariants } from '@/lib/variants/input-glass-variants';\nimport { ICON_SIZES, FormFieldWrapper } from '@/components/glass/primitives';\nimport '@/glass-theme.css';\n\n// ========================================\n// CSS VARIABLE HELPERS\n// ========================================\n\nconst getInputStyles = (isFocused: boolean, error?: string, success?: string): CSSProperties => {\n // Determine border color based on state\n let borderColor = 'var(--input-border)';\n if (error) {\n borderColor = 'var(--alert-danger-text)';\n } else if (success) {\n borderColor = 'var(--alert-success-text)';\n } else if (isFocused) {\n borderColor = 'var(--input-focus-border)';\n }\n\n return {\n background: 'var(--input-bg)',\n border: `1px solid ${borderColor}`,\n color: 'var(--input-text)',\n boxShadow: isFocused ? 'var(--focus-glow)' : 'none',\n };\n};\n\n// ========================================\n// PROPS INTERFACE\n// ========================================\n\n/**\n * Props for the InputGlass component\n *\n * A glass-themed input field with labels, validation states, and icon support.\n * Features focus glow effects and theme-aware styling.\n *\n * @accessibility\n * - **Keyboard Navigation:** Full keyboard support with native `<input>` element, standard tab navigation\n * - **Focus Management:** Visible focus ring using `--focus-glow` CSS variable (WCAG 2.4.7)\n * - **Screen Readers:** Semantic `<label>` elements properly associated via `htmlFor`, error/success messages announced with `aria-describedby`\n * - **Error State:** Red border and error message displayed below input, programmatically associated for screen readers\n * - **Success State:** Green border and success message displayed below input, programmatically associated for screen readers\n * - **Touch Targets:** Minimum 44x44px touch target on mobile devices (WCAG 2.5.5)\n * - **Color Contrast:** All text meets WCAG AA contrast ratio 4.5:1 minimum against backgrounds\n * - **Motion:** Icon color transitions respect `prefers-reduced-motion` settings\n *\n * @example\n * ```tsx\n * // Basic input with label\n * <InputGlass label=\"Email\" placeholder=\"you@example.com\" />\n *\n * // With aria-describedby for additional context\n * <InputGlass\n * label=\"Username\"\n * placeholder=\"Enter username\"\n * aria-describedby=\"username-help\"\n * />\n * <span id=\"username-help\">Must be 3-20 characters</span>\n *\n * // With validation states (automatically announced to screen readers)\n * <InputGlass label=\"Username\" error=\"Username is required\" />\n * <InputGlass label=\"Password\" success=\"Strong password\" type=\"password\" />\n *\n * // With icon and accessible label\n * <InputGlass\n * icon={Search}\n * placeholder=\"Search...\"\n * aria-label=\"Search products\"\n * />\n * <InputGlass icon={Mail} iconPosition=\"right\" type=\"email\" />\n *\n * // Disabled state (automatically announced)\n * <InputGlass label=\"Email\" disabled value=\"locked@example.com\" />\n *\n * // Form integration with accessible error handling\n * <form onSubmit={handleSubmit}>\n * <InputGlass\n * label=\"Email\"\n * type=\"email\"\n * required\n * error={errors.email}\n * aria-invalid={!!errors.email}\n * />\n * <InputGlass\n * label=\"Password\"\n * type=\"password\"\n * icon={Lock}\n * error={errors.password}\n * />\n * <ButtonGlass type=\"submit\">Sign In</ButtonGlass>\n * </form>\n * ```\n */\nexport interface InputGlassProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'>, VariantProps<typeof inputVariants> {\n /**\n * Label text displayed above the input field\n */\n readonly label?: string;\n\n /**\n * Error message to display below the input (red styling)\n */\n readonly error?: string;\n\n /**\n * Success message to display below the input (green styling)\n */\n readonly success?: string;\n\n /**\n * Icon component from lucide-react to display\n * @example icon={Search}\n */\n readonly icon?: LucideIcon;\n\n /**\n * Position of the icon relative to input text\n * @default \"left\"\n */\n readonly iconPosition?: 'left' | 'right';\n\n /**\n * @deprecated Use `size` prop instead. Will be removed in v4.0\n * @default \"md\"\n */\n readonly inputSize?: 'sm' | 'md' | 'lg';\n\n // Note: size prop comes from VariantProps<typeof inputVariants>\n}\n\n// ========================================\n// COMPONENT\n// ========================================\n\nexport const InputGlass = forwardRef<HTMLInputElement, InputGlassProps>(\n (\n {\n className,\n size,\n inputSize,\n label,\n error,\n success,\n icon: Icon,\n iconPosition = 'left',\n disabled,\n onFocus,\n onBlur,\n ...props\n },\n ref\n ) => {\n // Determine size value with fallback to deprecated inputSize prop\n const sizeValue = size ?? inputSize ?? 'md';\n\n // Deprecation warning in development mode\n if (process.env.NODE_ENV !== 'production' && inputSize !== undefined) {\n console.warn(\n '[InputGlass] The `inputSize` prop is deprecated and will be removed in v4.0. Use `size` instead.'\n );\n }\n\n const { isFocused, focusProps } = useFocus();\n\n // Wrap focus handlers to call both internal and external callbacks\n const handleFocus = useCallback(\n (e: FocusEvent<HTMLInputElement>) => {\n focusProps.onFocus(e);\n onFocus?.(e);\n },\n [focusProps, onFocus]\n );\n\n const handleBlur = useCallback(\n (e: FocusEvent<HTMLInputElement>) => {\n focusProps.onBlur(e);\n onBlur?.(e);\n },\n [focusProps, onBlur]\n );\n\n const hasIcon = Boolean(Icon);\n const paddingLeft = hasIcon && iconPosition === 'left' ? 'pl-10' : '';\n const paddingRight = hasIcon && iconPosition === 'right' ? 'pr-10' : '';\n\n return (\n <FormFieldWrapper\n label={label}\n error={error}\n success={success}\n htmlFor={props.id}\n className={className}\n >\n <div className=\"relative\">\n {Icon && iconPosition === 'left' && (\n <Icon\n className={cn(\n 'absolute left-2.5 md:left-3 top-1/2 -translate-y-1/2 transition-colors duration-300 z-10',\n ICON_SIZES.md\n )}\n style={{\n color: isFocused ? 'var(--text-accent)' : 'var(--text-muted)',\n }}\n />\n )}\n <input\n ref={ref}\n data-slot=\"input\"\n className={cn(inputVariants({ size: sizeValue }), paddingLeft, paddingRight)}\n style={getInputStyles(isFocused, error, success)}\n disabled={disabled}\n onFocus={handleFocus}\n onBlur={handleBlur}\n {...props}\n />\n {Icon && iconPosition === 'right' && (\n <Icon\n className={cn(\n 'absolute right-2.5 md:right-3 top-1/2 -translate-y-1/2 transition-colors duration-300 z-10',\n ICON_SIZES.md\n )}\n style={{\n color: isFocused ? 'var(--text-accent)' : 'var(--text-muted)',\n }}\n />\n )}\n </div>\n </FormFieldWrapper>\n );\n }\n);\n\nInputGlass.displayName = 'InputGlass';\n","/**\n * ModalGlass CVA Variants\n * Extracted for Fast Refresh compatibility\n */\n\nimport { cva } from 'class-variance-authority';\n\nexport type ModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\n// Modal body padding: 24px per UI_DESIGN.md\n// Border radius: 20px per UI_DESIGN.md (using rounded-2xl/24px as closest token)\n// Max widths: 480/640/800px per UI_DESIGN.md\n// Mobile: max-w-[calc(100%-2rem)] for edge padding (shadcn/ui pattern)\nexport const modalSizes = cva(\n 'relative w-full max-w-[calc(100%-2rem)] rounded-2xl p-6 transition-all duration-300',\n {\n variants: {\n size: {\n sm: 'sm:max-w-[480px]', // UI_DESIGN.md: 480px (was 384px)\n md: 'sm:max-w-[640px]', // UI_DESIGN.md: 640px (was 448px)\n lg: 'sm:max-w-[800px]', // UI_DESIGN.md: 800px (was 512px)\n xl: 'sm:max-w-xl',\n full: 'sm:max-w-4xl',\n },\n },\n defaultVariants: {\n size: 'sm',\n },\n }\n);\n","/* eslint-disable react-refresh/only-export-components */\n/**\n * ModalGlass Component (Radix UI Dialog-based)\n *\n * Glass-themed modal/dialog with full shadcn/ui Dialog API compatibility.\n * Built on @radix-ui/react-dialog for accessibility and state management.\n *\n * @example Uncontrolled with Trigger (shadcn/ui pattern)\n * ```tsx\n * <ModalGlass.Root>\n * <ModalGlass.Trigger asChild>\n * <ButtonGlass>Open Dialog</ButtonGlass>\n * </ModalGlass.Trigger>\n * <ModalGlass.Content>\n * <ModalGlass.Header>\n * <ModalGlass.Title>Dialog Title</ModalGlass.Title>\n * <ModalGlass.Description>Dialog description</ModalGlass.Description>\n * </ModalGlass.Header>\n * <ModalGlass.Body>Content here</ModalGlass.Body>\n * <ModalGlass.Footer>\n * <ModalGlass.Close asChild>\n * <ButtonGlass variant=\"ghost\">Cancel</ButtonGlass>\n * </ModalGlass.Close>\n * <ButtonGlass>Confirm</ButtonGlass>\n * </ModalGlass.Footer>\n * </ModalGlass.Content>\n * </ModalGlass.Root>\n * ```\n *\n * @example Controlled mode (programmatic)\n * ```tsx\n * <ModalGlass.Root open={open} onOpenChange={setOpen}>\n * <ModalGlass.Content>\n * <ModalGlass.Header>\n * <ModalGlass.Title>Confirm Action</ModalGlass.Title>\n * </ModalGlass.Header>\n * <ModalGlass.Body>Are you sure?</ModalGlass.Body>\n * <ModalGlass.Footer>\n * <ButtonGlass onClick={() => setOpen(false)}>Cancel</ButtonGlass>\n * </ModalGlass.Footer>\n * </ModalGlass.Content>\n * </ModalGlass.Root>\n * ```\n *\n * @accessibility\n * - Built on Radix UI Dialog with full WCAG 2.1 AA compliance\n * - Keyboard: Escape to close, Tab for focus trap\n * - Screen Readers: role=\"dialog\", aria-modal, aria-labelledby, aria-describedby\n * - Focus Management: Auto-focus on open, return focus on close\n *\n * @since v2.0.0 - Migrated to Radix UI Dialog, added Trigger and Portal\n */\n\nimport * as React from 'react';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { modalSizes, type ModalSize } from '@/lib/variants/modal-glass-variants';\nimport { ICON_SIZES } from '@/components/glass/primitives';\nimport '@/glass-theme.css';\n\n// ========================================\n// CONTEXT FOR SIZE (optional enhancement)\n// ========================================\n\ninterface ModalContextValue {\n size: ModalSize;\n}\n\nconst ModalContext = React.createContext<ModalContextValue>({ size: 'sm' });\n\nconst useModalContext = () => React.useContext(ModalContext);\n\n// ========================================\n// COMPOUND COMPONENT: ROOT\n// ========================================\n\ninterface ModalRootProps extends React.ComponentProps<typeof DialogPrimitive.Root> {\n /** Size variant for the modal */\n size?: ModalSize;\n}\n\n/**\n * ModalGlass.Root - Dialog root component\n *\n * Supports both controlled (open/onOpenChange) and uncontrolled (with Trigger) modes.\n */\nfunction ModalRoot({ size = 'sm', children, ...props }: ModalRootProps) {\n return (\n <ModalContext.Provider value={{ size }}>\n <DialogPrimitive.Root data-slot=\"dialog\" {...props}>\n {children}\n </DialogPrimitive.Root>\n </ModalContext.Provider>\n );\n}\n\n// ========================================\n// COMPOUND COMPONENT: TRIGGER\n// ========================================\n\n/**\n * ModalGlass.Trigger - Opens the modal when clicked\n *\n * Use `asChild` to render as the child element instead of a button.\n */\nfunction ModalTrigger({ ...props }: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\n// ========================================\n// COMPOUND COMPONENT: PORTAL\n// ========================================\n\n/**\n * ModalGlass.Portal - Renders children into a portal\n */\nfunction ModalPortal({ ...props }: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n}\n\n// ========================================\n// COMPOUND COMPONENT: OVERLAY\n// ========================================\n\n/**\n * ModalGlass.Overlay - Backdrop with glass blur effect\n */\nconst ModalOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n data-slot=\"dialog-overlay\"\n className={cn(\n 'fixed inset-0 z-50',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className\n )}\n style={{\n background: 'var(--modal-overlay)',\n backdropFilter: 'blur(var(--blur-sm))',\n WebkitBackdropFilter: 'blur(var(--blur-sm))',\n }}\n {...props}\n />\n));\nModalOverlay.displayName = 'ModalOverlay';\n\n// ========================================\n// COMPOUND COMPONENT: CONTENT\n// ========================================\n\ninterface ModalContentProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {\n /** Show close button in top-right corner */\n showCloseButton?: boolean;\n /** Override size from Root */\n size?: ModalSize;\n}\n\n/**\n * ModalGlass.Content - Main modal container with glass styling\n *\n * Automatically renders Portal and Overlay.\n */\nconst ModalContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n ModalContentProps\n>(({ className, children, showCloseButton = true, size: sizeProp, ...props }, ref) => {\n const { size: contextSize } = useModalContext();\n const size = sizeProp ?? contextSize;\n\n return (\n <ModalPortal>\n <ModalOverlay />\n <DialogPrimitive.Content\n ref={ref}\n data-slot=\"dialog-content\"\n className={cn(\n modalSizes({ size }),\n 'fixed top-[50%] left-[50%] z-50',\n 'translate-x-[-50%] translate-y-[-50%]',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n 'data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%]',\n 'data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]',\n 'duration-200',\n className\n )}\n style={{\n background: 'var(--modal-bg)',\n border: '1px solid var(--modal-border)',\n boxShadow: 'var(--modal-glow)',\n backdropFilter: 'blur(var(--blur-lg))',\n WebkitBackdropFilter: 'blur(var(--blur-lg))',\n }}\n {...props}\n >\n {/* Glow effect layer */}\n <div\n className=\"absolute inset-0 rounded-3xl pointer-events-none\"\n style={{ background: 'var(--modal-glow-effect)' }}\n aria-hidden=\"true\"\n />\n {/* Content */}\n <div className=\"relative\">{children}</div>\n {/* Close button */}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className={cn(\n 'absolute top-4 right-4',\n 'p-1.5 md:p-2 rounded-xl',\n 'transition-all duration-300',\n 'ring-offset-background',\n 'focus:outline-none focus:ring-2 focus:ring-(--semantic-primary) focus:ring-offset-2',\n 'hover:opacity-100 opacity-70',\n 'disabled:pointer-events-none'\n )}\n style={{\n background: 'var(--modal-close-btn-bg)',\n border: 'var(--modal-close-btn-border)',\n color: 'var(--text-muted)',\n }}\n >\n <X className={ICON_SIZES.md} />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </ModalPortal>\n );\n});\nModalContent.displayName = 'ModalContent';\n\n// ========================================\n// COMPOUND COMPONENT: HEADER\n// ========================================\n\n/**\n * ModalGlass.Header - Header section with flex layout\n */\nfunction ModalHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn('flex flex-col gap-2 text-center sm:text-left mb-4', className)}\n {...props}\n />\n );\n}\n\n// ========================================\n// COMPOUND COMPONENT: BODY\n// ========================================\n\n/**\n * ModalGlass.Body - Main content area\n *\n * Note: shadcn/ui Dialog doesn't have DialogBody, but we keep it for convenience.\n */\nfunction ModalBody({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"dialog-body\"\n className={cn('relative', className)}\n style={{ color: 'var(--text-secondary)' }}\n {...props}\n />\n );\n}\n\n// ========================================\n// COMPOUND COMPONENT: FOOTER\n// ========================================\n\n/**\n * ModalGlass.Footer - Footer section with flex layout for actions\n */\nfunction ModalFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end mt-4', className)}\n {...props}\n />\n );\n}\n\n// ========================================\n// COMPOUND COMPONENT: TITLE\n// ========================================\n\n/**\n * ModalGlass.Title - Modal title with proper accessibility\n */\nconst ModalTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n data-slot=\"dialog-title\"\n className={cn('text-lg md:text-xl font-semibold leading-none tracking-tight', className)}\n style={{ color: 'var(--text-primary)' }}\n {...props}\n />\n));\nModalTitle.displayName = 'ModalTitle';\n\n// ========================================\n// COMPOUND COMPONENT: DESCRIPTION\n// ========================================\n\n/**\n * ModalGlass.Description - Modal description text\n */\nconst ModalDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n data-slot=\"dialog-description\"\n className={cn('text-sm', className)}\n style={{ color: 'var(--text-muted)' }}\n {...props}\n />\n));\nModalDescription.displayName = 'ModalDescription';\n\n// ========================================\n// COMPOUND COMPONENT: CLOSE\n// ========================================\n\n/**\n * ModalGlass.Close - Closes the modal when clicked\n *\n * Use `asChild` to render as the child element.\n *\n * @example\n * ```tsx\n * <ModalGlass.Close asChild>\n * <ButtonGlass variant=\"ghost\">Cancel</ButtonGlass>\n * </ModalGlass.Close>\n * ```\n */\nfunction ModalClose({ ...props }: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\n}\n\n// ========================================\n// EXPORT COMPOUND COMPONENT\n// ========================================\n\n/**\n * ModalGlass - Glass-themed Dialog with shadcn/ui API compatibility\n *\n * Built on @radix-ui/react-dialog for full accessibility support.\n *\n * @example Uncontrolled (with Trigger)\n * ```tsx\n * <ModalGlass.Root>\n * <ModalGlass.Trigger asChild>\n * <ButtonGlass>Open</ButtonGlass>\n * </ModalGlass.Trigger>\n * <ModalGlass.Content>\n * <ModalGlass.Header>\n * <ModalGlass.Title>Title</ModalGlass.Title>\n * </ModalGlass.Header>\n * <ModalGlass.Body>Content</ModalGlass.Body>\n * <ModalGlass.Footer>\n * <ModalGlass.Close asChild>\n * <ButtonGlass>Close</ButtonGlass>\n * </ModalGlass.Close>\n * </ModalGlass.Footer>\n * </ModalGlass.Content>\n * </ModalGlass.Root>\n * ```\n *\n * @example Controlled\n * ```tsx\n * <ModalGlass.Root open={open} onOpenChange={setOpen}>\n * <ModalGlass.Content showCloseButton={false}>\n * <ModalGlass.Header>\n * <ModalGlass.Title>Confirm</ModalGlass.Title>\n * </ModalGlass.Header>\n * <ModalGlass.Footer>\n * <ButtonGlass onClick={() => setOpen(false)}>OK</ButtonGlass>\n * </ModalGlass.Footer>\n * </ModalGlass.Content>\n * </ModalGlass.Root>\n * ```\n */\nexport const ModalGlass = {\n Root: ModalRoot,\n Trigger: ModalTrigger,\n Portal: ModalPortal,\n Overlay: ModalOverlay,\n Content: ModalContent,\n Header: ModalHeader,\n Body: ModalBody,\n Footer: ModalFooter,\n Title: ModalTitle,\n Description: ModalDescription,\n Close: ModalClose,\n};\n\n// Named exports for direct imports\nexport {\n ModalRoot,\n ModalTrigger,\n ModalPortal,\n ModalOverlay,\n ModalContent,\n ModalHeader,\n ModalBody,\n ModalFooter,\n ModalTitle,\n ModalDescription,\n ModalClose,\n};\n\nexport type { ModalRootProps, ModalContentProps };\n","/**\n * NotificationGlass CVA Variants\n * Extracted for Fast Refresh compatibility\n */\n\nimport { cva } from 'class-variance-authority';\n\nexport type NotificationType = 'info' | 'success' | 'warning' | 'error';\n\nexport const notificationVariants = cva(\n 'flex items-start gap-3 md:gap-4 p-4 md:p-5 rounded-2xl min-w-[280px] md:min-w-[320px] max-w-[360px] md:max-w-[420px] transition-all duration-300',\n {\n variants: {\n type: {\n info: '',\n success: '',\n warning: '',\n error: '',\n },\n },\n defaultVariants: {\n type: 'info',\n },\n }\n);\n","/**\n * NotificationGlass Component\n *\n * Glass-themed toast notification with:\n * - Theme-aware styling (glass/light/aurora)\n * - Type variants (info/success/warning/error)\n * - Glow effect on hover\n * - Dismissible\n */\n\nimport { forwardRef, type CSSProperties } from 'react';\nimport { type VariantProps } from 'class-variance-authority';\nimport { Info, CheckCircle, AlertTriangle, AlertCircle, X } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { useHover } from '@/lib/hooks/use-hover';\nimport { notificationVariants } from '@/lib/variants/notification-glass-variants';\nimport { ICON_SIZES } from '@/components/glass/primitives';\nimport '@/glass-theme.css';\n\nimport type { NotificationType } from '@/lib/variants/notification-glass-variants';\n\n// ========================================\n// CONSTANTS\n// ========================================\n\nconst NOTIFICATION_ICONS = {\n info: Info,\n success: CheckCircle,\n warning: AlertTriangle,\n error: AlertCircle,\n} as const;\n\n// ========================================\n// PROPS INTERFACE\n// ========================================\n\nexport interface NotificationGlassProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, 'title' | 'style'>,\n VariantProps<typeof notificationVariants> {\n readonly title: string;\n readonly message: string;\n /** Notification variant (shadcn/ui compatible) */\n readonly variant?: 'default' | 'destructive' | 'success' | 'warning';\n /** @deprecated Use variant prop instead. Will be removed in next major version. */\n readonly type?: NotificationType;\n readonly onClose: () => void;\n}\n\n// ========================================\n// COMPONENT\n// ========================================\n\n// Type-specific CSS variable mapping\nconst getTypeVars = (\n notifType: NotificationType\n): { color: string; glow: string; iconBg: string } => {\n const configs: Record<NotificationType, { color: string; glow: string; iconBg: string }> = {\n info: {\n color: 'var(--notification-info-color)',\n glow: 'var(--notification-info-glow)',\n iconBg: 'var(--notification-info-icon-bg)',\n },\n success: {\n color: 'var(--notification-success-color)',\n glow: 'var(--notification-success-glow)',\n iconBg: 'var(--notification-success-icon-bg)',\n },\n warning: {\n color: 'var(--notification-warning-color)',\n glow: 'var(--notification-warning-glow)',\n iconBg: 'var(--notification-warning-icon-bg)',\n },\n error: {\n color: 'var(--notification-error-color)',\n glow: 'var(--notification-error-glow)',\n iconBg: 'var(--notification-error-icon-bg)',\n },\n };\n return configs[notifType];\n};\n\nexport const NotificationGlass = forwardRef<HTMLDivElement, NotificationGlassProps>(\n ({ variant: variantProp, type: typeProp, title, message, onClose, className, ...props }, ref) => {\n // Backward compatibility: support deprecated 'type' prop\n const variant = variantProp ?? typeProp ?? 'default';\n\n // Show deprecation warning in development\n if (process.env.NODE_ENV === 'development' && typeProp) {\n console.warn(\n 'NotificationGlass: The \"type\" prop is deprecated. Use \"variant\" instead. Example: <NotificationGlass variant=\"destructive\" />'\n );\n }\n\n // Map variant to internal notification type\n const variantToType: Record<string, NotificationType> = {\n default: 'info',\n destructive: 'error',\n success: 'success',\n warning: 'warning',\n // Backward compatibility aliases\n info: 'info',\n error: 'error',\n };\n\n const effectiveType: NotificationType = variantToType[variant] || 'info';\n\n const { isHovered, hoverProps } = useHover();\n const Icon = NOTIFICATION_ICONS[effectiveType];\n const config = getTypeVars(effectiveType);\n\n const containerStyles: CSSProperties = {\n background: 'var(--notification-bg)',\n border: '1px solid var(--notification-border)',\n boxShadow: isHovered ? config.glow : 'var(--notification-shadow)',\n transform: isHovered ? 'translateY(-2px)' : 'translateY(0)',\n };\n\n const iconContainerStyles: CSSProperties = {\n background: config.iconBg,\n boxShadow: isHovered ? config.glow : 'none',\n };\n\n return (\n <div\n ref={ref}\n data-slot=\"notification\"\n className={cn(notificationVariants({ type: effectiveType }), className)}\n style={containerStyles}\n role=\"alert\"\n aria-live=\"polite\"\n onMouseEnter={hoverProps.onMouseEnter}\n onMouseLeave={hoverProps.onMouseLeave}\n {...props}\n >\n {/* Icon with glow */}\n <div\n className=\"w-8 h-8 md:w-10 md:h-10 rounded-xl flex items-center justify-center shrink-0\"\n style={iconContainerStyles}\n >\n <Icon className=\"w-4 h-4 md:w-5 md:h-5\" style={{ color: config.color }} />\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <p\n className=\"font-semibold text-xs md:text-sm mb-0.5 md:mb-1\"\n style={{ color: 'var(--text-primary)' }}\n >\n {title}\n </p>\n <p className=\"text-xs md:text-sm\" style={{ color: 'var(--text-secondary)' }}>\n {message}\n </p>\n </div>\n\n {/* Close button */}\n <button\n onClick={onClose}\n className=\"p-1 md:p-1.5 rounded-lg shrink-0\"\n style={{ color: 'var(--text-muted)' }}\n type=\"button\"\n aria-label=\"Close notification\"\n >\n <X className={ICON_SIZES.md} />\n </button>\n </div>\n );\n }\n);\n\nNotificationGlass.displayName = 'NotificationGlass';\n","/**\n * PopoverGlass Component\n *\n * Floating glass-themed container for tooltips, dropdowns, and overlays with:\n * - Theme-aware styling (glass/light/aurora)\n * - Smooth animations with fade-in effect\n * - Arrow pointer with glass styling\n * - ESC key and click-outside to close\n * - Focus trap for accessibility\n * - All position/alignment options (top/right/bottom/left × start/center/end)\n *\n * @example Compound API (recommended)\n * ```tsx\n * <PopoverGlass>\n * <PopoverGlassTrigger asChild>\n * <ButtonGlass>Open</ButtonGlass>\n * </PopoverGlassTrigger>\n * <PopoverGlassContent side=\"top\">\n * <div className=\"p-4\">\n * <h3 style={{ color: 'var(--text-primary)' }}>Title</h3>\n * <p style={{ color: 'var(--text-secondary)' }}>Content</p>\n * </div>\n * </PopoverGlassContent>\n * </PopoverGlass>\n * ```\n *\n * @example Legacy API (backward compatible)\n * ```tsx\n * <PopoverGlassLegacy\n * trigger={<ButtonGlass>Open</ButtonGlass>}\n * side=\"top\"\n * >\n * <div className=\"p-4\">Content</div>\n * </PopoverGlassLegacy>\n * ```\n */\n\n'use client';\n\nimport * as React from 'react';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport { cn } from '@/lib/utils';\nimport '@/glass-theme.css';\n\n// ========================================\n// COMPOUND COMPONENT: ROOT\n// ========================================\n\n// Note: PopoverPrimitive.Root is a context provider and doesn't render DOM,\n// so data-slot is applied to Content instead. This matches shadcn/ui pattern.\nconst PopoverGlassRoot = (props: React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Root>) => (\n <PopoverPrimitive.Root {...props} />\n);\nPopoverGlassRoot.displayName = 'PopoverGlass';\n\n// ========================================\n// COMPOUND COMPONENT: TRIGGER\n// ========================================\n\nconst PopoverGlassTrigger = React.forwardRef<\n React.ComponentRef<typeof PopoverPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Trigger>\n>((props, ref) => <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" ref={ref} {...props} />);\nPopoverGlassTrigger.displayName = 'PopoverGlassTrigger';\n\n// ========================================\n// COMPOUND COMPONENT: ANCHOR\n// ========================================\n\nconst PopoverGlassAnchor = React.forwardRef<\n React.ComponentRef<typeof PopoverPrimitive.Anchor>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Anchor>\n>((props, ref) => <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" ref={ref} {...props} />);\nPopoverGlassAnchor.displayName = 'PopoverGlassAnchor';\n\n// ========================================\n// COMPOUND COMPONENT: CONTENT\n// ========================================\n\ninterface PopoverGlassContentProps extends React.ComponentPropsWithoutRef<\n typeof PopoverPrimitive.Content\n> {\n /** Whether to show the arrow pointer */\n showArrow?: boolean;\n}\n\nconst PopoverGlassContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n PopoverGlassContentProps\n>(({ className, align = 'center', sideOffset = 8, showArrow = true, children, ...props }, ref) => {\n // Popover content styles with CSS variables\n const popoverStyles: React.CSSProperties = {\n background: 'var(--popover-bg)',\n border: '1px solid var(--popover-border)',\n boxShadow: 'var(--popover-shadow)',\n backdropFilter: 'blur(var(--blur-md))',\n WebkitBackdropFilter: 'blur(var(--blur-md))',\n };\n\n // Arrow styles\n const arrowStyles: React.CSSProperties = {\n fill: 'var(--popover-arrow-bg)',\n };\n\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'z-50003 rounded-2xl',\n 'animate-in fade-in-0 zoom-in-95 duration-200',\n 'data-[side=bottom]:slide-in-from-top-2',\n 'data-[side=top]:slide-in-from-bottom-2',\n 'data-[side=right]:slide-in-from-left-2',\n 'data-[side=left]:slide-in-from-right-2',\n 'outline-none',\n className\n )}\n style={popoverStyles}\n {...props}\n >\n {children}\n\n {showArrow && (\n <PopoverPrimitive.Arrow\n className=\"fill-current\"\n style={arrowStyles}\n width={16}\n height={8}\n />\n )}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n );\n});\n\nPopoverGlassContent.displayName = 'PopoverGlassContent';\n\n// ========================================\n// LEGACY API (backward compatible)\n// ========================================\n\nexport interface PopoverGlassLegacyProps {\n /** The trigger element that opens the popover */\n readonly trigger: React.ReactNode;\n /** The content to display inside the popover */\n readonly children: React.ReactNode;\n /** The preferred side of the trigger to render against */\n readonly side?: 'top' | 'right' | 'bottom' | 'left';\n /** The preferred alignment against the trigger */\n readonly align?: 'start' | 'center' | 'end';\n /** The distance in pixels from the trigger */\n readonly sideOffset?: number;\n /** Controlled open state */\n readonly open?: boolean;\n /** Callback when open state changes */\n readonly onOpenChange?: (open: boolean) => void;\n /** Whether to show the arrow pointer */\n readonly showArrow?: boolean;\n /** Additional class name for the content wrapper */\n readonly className?: string;\n}\n\nconst PopoverGlassLegacy = React.forwardRef<HTMLDivElement, PopoverGlassLegacyProps>(\n (\n {\n trigger,\n children,\n side = 'bottom',\n align = 'center',\n sideOffset = 8,\n open,\n onOpenChange,\n showArrow = true,\n className,\n },\n ref\n ) => {\n return (\n <PopoverGlassRoot open={open} onOpenChange={onOpenChange}>\n <PopoverGlassTrigger asChild>{trigger}</PopoverGlassTrigger>\n <PopoverGlassContent\n ref={ref}\n side={side}\n align={align}\n sideOffset={sideOffset}\n showArrow={showArrow}\n className={className}\n >\n {children}\n </PopoverGlassContent>\n </PopoverGlassRoot>\n );\n }\n);\n\nPopoverGlassLegacy.displayName = 'PopoverGlassLegacy';\n\n// ========================================\n// EXPORTS\n// ========================================\n\n// Compound API (shadcn/ui pattern)\nexport const PopoverGlass = PopoverGlassRoot;\nexport { PopoverGlassTrigger, PopoverGlassContent, PopoverGlassAnchor };\n\n// Legacy API (backward compatible)\nexport { PopoverGlassLegacy };\n\n// For backward compatibility, also export as default\nexport { PopoverGlassLegacy as default };\n","/**\n * SkeletonGlass CVA Variants\n * Extracted for Fast Refresh compatibility\n */\n\nimport { cva } from 'class-variance-authority';\n\nexport type SkeletonVariant = 'text' | 'title' | 'avatar' | 'thumbnail' | 'card';\n\nexport const skeletonVariants = cva('overflow-hidden', {\n variants: {\n variant: {\n text: 'h-3 md:h-4 rounded',\n title: 'h-5 md:h-6 rounded',\n avatar: 'w-10 h-10 md:w-12 md:h-12 rounded-full',\n thumbnail: 'w-full h-24 md:h-32 rounded-xl',\n card: 'w-full h-36 md:h-48 rounded-2xl',\n },\n },\n defaultVariants: {\n variant: 'text',\n },\n});\n","/**\n * SkeletonGlass Component\n *\n * Glass-themed loading skeleton with:\n * - Theme-aware styling (glass/light/aurora)\n * - Shimmer animation\n * - Variant presets (text, title, avatar, thumbnail, card)\n */\n\nimport { forwardRef, type CSSProperties } from 'react';\nimport { type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/lib/utils';\nimport { skeletonVariants } from '@/lib/variants/skeleton-glass-variants';\nimport '@/glass-theme.css';\n\n// ========================================\n// PROPS INTERFACE\n// ========================================\n\nexport interface SkeletonGlassProps\n extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof skeletonVariants> {\n readonly width?: string | number;\n readonly height?: string | number;\n}\n\n// ========================================\n// COMPONENT\n// ========================================\n\nexport const SkeletonGlass = forwardRef<HTMLDivElement, SkeletonGlassProps>(\n ({ className, variant = 'text', width, height, style, ...props }, ref) => {\n const skeletonStyles: CSSProperties = {\n width,\n height,\n background:\n 'linear-gradient(90deg, var(--skeleton-bg) 25%, var(--skeleton-shine) 50%, var(--skeleton-bg) 75%)',\n backgroundSize: '200% 100%',\n animation: 'skeleton-loading 1.5s infinite',\n ...style,\n };\n\n return (\n <div\n ref={ref}\n data-slot=\"skeleton\"\n className={cn(skeletonVariants({ variant }), className)}\n style={skeletonStyles}\n aria-hidden=\"true\"\n {...props}\n />\n );\n }\n);\n\nSkeletonGlass.displayName = 'SkeletonGlass';\n","/**\n * SliderGlass Component\n *\n * Glass-themed range slider built on Radix UI with shadcn/ui compatible API:\n * - Theme-aware styling (glass/light/aurora)\n * - Glow effect on hover/drag\n * - Gradient fill (glass theme)\n * - Range slider support (multiple thumbs)\n * - Optional label and value display\n *\n * **shadcn/ui compatible props:**\n * - `value` / `defaultValue` - Array of values (supports range)\n * - `onValueChange` - Callback when values change\n * - `onValueCommit` - Callback when interaction ends\n *\n * @example\n * ```tsx\n * // Single value (controlled)\n * <SliderGlass value={[50]} onValueChange={setValue} />\n *\n * // Range slider\n * <SliderGlass defaultValue={[25, 75]} />\n *\n * // With label and value display\n * <SliderGlass value={[50]} onValueChange={setValue} label=\"Volume\" showValue />\n * ```\n */\n\nimport { forwardRef, type CSSProperties, type ComponentPropsWithoutRef } from 'react';\nimport * as SliderPrimitive from '@radix-ui/react-slider';\nimport { cn } from '@/lib/utils';\nimport { FormFieldWrapper } from '@/components/glass/primitives';\nimport '@/glass-theme.css';\n\n// ========================================\n// PROPS INTERFACE\n// ========================================\n\nexport interface SliderGlassProps extends Omit<\n ComponentPropsWithoutRef<typeof SliderPrimitive.Root>,\n 'value' | 'defaultValue' | 'onValueChange'\n> {\n /**\n * Controlled value (shadcn/ui compatible - array for range support)\n */\n readonly value?: number[];\n /**\n * Default value for uncontrolled usage (array for range support)\n */\n readonly defaultValue?: number[];\n /**\n * Callback when value changes (shadcn/ui compatible)\n */\n readonly onValueChange?: (value: number[]) => void;\n /**\n * Callback when interaction ends (mouse up / touch end)\n */\n readonly onValueCommit?: (value: number[]) => void;\n /**\n * Show current value(s) next to label\n */\n readonly showValue?: boolean;\n /**\n * Optional label text\n */\n readonly label?: string;\n /**\n * Error message to display\n */\n readonly error?: string;\n /**\n * Success message to display\n */\n readonly success?: string;\n}\n\n// ========================================\n// COMPONENT\n// ========================================\n\nexport const SliderGlass = forwardRef<\n React.ComponentRef<typeof SliderPrimitive.Root>,\n SliderGlassProps\n>(\n (\n {\n className,\n value,\n defaultValue,\n onValueChange,\n onValueCommit,\n min = 0,\n max = 100,\n step = 1,\n showValue,\n label,\n error,\n success,\n disabled,\n orientation = 'horizontal',\n ...props\n },\n ref\n ) => {\n // Determine current values for rendering thumbs and display\n const currentValue = value ?? defaultValue ?? [min];\n\n // Format value display\n const formatValueDisplay = (values: number[]) => {\n if (values.length === 1) {\n return `${values[0]}`;\n }\n return `${values[0]} - ${values[values.length - 1]}`;\n };\n\n // Track styles via CSS variables\n const trackStyles: CSSProperties = {\n background: 'var(--slider-track)',\n };\n\n // Range (fill) styles via CSS variables\n const rangeStyles: CSSProperties = {\n background: 'var(--slider-fill)',\n };\n\n // Thumb styles via CSS variables\n const thumbStyles: CSSProperties = {\n background: 'var(--slider-thumb)',\n border: '2px solid var(--slider-thumb-border)',\n };\n\n // Custom label with value display - only used when showValue is true\n const customLabel =\n (label && showValue) || (!label && showValue) ? (\n <div className=\"flex justify-between mb-1.5 md:mb-2\">\n {label && (\n <label\n className=\"text-xs md:text-sm font-medium\"\n style={{ color: 'var(--text-secondary)' }}\n >\n {label}\n </label>\n )}\n <span\n className=\"text-xs md:text-sm font-medium tabular-nums\"\n style={{ color: 'var(--text-secondary)' }}\n >\n {formatValueDisplay(currentValue)}\n </span>\n </div>\n ) : undefined;\n\n return (\n <FormFieldWrapper\n label={showValue ? undefined : label}\n error={error}\n success={success}\n className={cn('w-full', className)}\n >\n {customLabel}\n <SliderPrimitive.Root\n ref={ref}\n data-slot=\"slider\"\n value={value}\n defaultValue={defaultValue}\n onValueChange={onValueChange}\n onValueCommit={onValueCommit}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n orientation={orientation}\n className={cn(\n 'relative flex touch-none select-none',\n orientation === 'horizontal'\n ? 'w-full h-8 md:h-6 items-center'\n : 'flex-col h-full w-8 md:w-6 justify-center',\n disabled && 'opacity-50 cursor-not-allowed',\n 'group'\n )}\n {...props}\n >\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className={cn(\n 'relative grow rounded-full',\n orientation === 'horizontal' ? 'h-2.5 md:h-2 w-full' : 'w-2.5 md:w-2 h-full'\n )}\n style={trackStyles}\n >\n <SliderPrimitive.Range\n data-slot=\"slider-range\"\n className={cn(\n 'absolute rounded-full transition-shadow duration-150',\n orientation === 'horizontal' ? 'h-full' : 'w-full',\n 'group-hover:shadow-(--slider-fill-glow)',\n 'group-active:shadow-(--slider-fill-glow)'\n )}\n style={rangeStyles}\n />\n </SliderPrimitive.Track>\n {currentValue.map((_, index) => (\n <SliderPrimitive.Thumb\n key={index}\n data-slot=\"slider-thumb\"\n className={cn(\n 'block rounded-full shadow-md transition-all duration-150',\n 'w-6 h-6 md:w-5 md:h-5',\n 'hover:scale-105',\n 'focus-visible:outline-none focus-visible:shadow-(--focus-glow)',\n 'active:scale-110',\n disabled && 'pointer-events-none'\n )}\n style={thumbStyles}\n aria-label={\n label\n ? currentValue.length > 1\n ? `${label} thumb ${index + 1}`\n : label\n : `Slider thumb ${index + 1}`\n }\n />\n ))}\n </SliderPrimitive.Root>\n </FormFieldWrapper>\n );\n }\n);\n\nSliderGlass.displayName = 'SliderGlass';\n","/* eslint-disable react-refresh/only-export-components */\n/**\n * TabsGlass Component (Radix UI based)\n *\n * Glass-themed tab navigation built on Radix UI primitives with:\n * - 100% shadcn/ui type compatibility\n * - Theme-aware styling (glass/light/aurora)\n * - Active tab indicator\n * - Full keyboard navigation (Arrow keys, Home, End)\n * - Support for orientation, dir, activationMode\n *\n * @since v2.2.6 - Migrated to Radix UI primitives for full type compatibility\n */\n\nimport * as React from 'react';\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\nimport { cn } from '@/lib/utils';\nimport '@/glass-theme.css';\n\n// ========================================\n// TYPES\n// ========================================\n\n/**\n * Legacy TabItem interface for backwards compatibility\n */\nexport interface TabItem {\n readonly id: string;\n readonly label: string;\n}\n\n/**\n * Props for TabsGlass Root component\n *\n * Extends Radix UI Tabs.Root props for 100% shadcn/ui compatibility.\n * All Radix props are supported including: value, defaultValue, onValueChange,\n * orientation, dir, activationMode.\n *\n * **Type Compatibility (v2.3.1+):**\n * - Extends `React.ComponentPropsWithoutRef<typeof TabsPrimitive.Root>`\n * - No more `as unknown as` type assertions needed\n * - Full IntelliSense for all Radix props\n *\n * **New props from Radix:**\n * - `orientation`: 'horizontal' | 'vertical' - Tab layout direction\n * - `dir`: 'ltr' | 'rtl' - Text direction for RTL support\n * - `activationMode`: 'automatic' | 'manual' - Tab activation behavior\n *\n * @accessibility\n * - **Keyboard Navigation:** Arrow keys navigate between tabs (respects orientation)\n * - **Focus Management:** Visible focus ring using CSS variables\n * - **Screen Readers:** Radix UI handles all ARIA attributes automatically\n * - **RTL Support:** Full RTL support via `dir` prop\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Tabs defaultValue=\"tab1\">\n * <TabsList>\n * <TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n * <TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"tab1\">Content 1</TabsContent>\n * <TabsContent value=\"tab2\">Content 2</TabsContent>\n * </Tabs>\n *\n * // Vertical tabs\n * <Tabs defaultValue=\"tab1\" orientation=\"vertical\">\n * <TabsList>\n * <TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n * <TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"tab1\">Content 1</TabsContent>\n * </Tabs>\n *\n * // Manual activation (click required, not focus)\n * <Tabs defaultValue=\"tab1\" activationMode=\"manual\">\n * ...\n * </Tabs>\n * ```\n *\n * @since v2.3.0 - Added shadcn/ui compatible separate exports\n * @since v2.2.6 - Migrated to Radix UI primitives\n */\nexport type TabsRootProps = React.ComponentPropsWithoutRef<typeof TabsPrimitive.Root>;\n\n/**\n * Props for TabsList component\n */\nexport type TabsListProps = React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>;\n\n/**\n * Props for TabsTrigger component\n */\nexport type TabsTriggerProps = React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>;\n\n/**\n * Props for TabsContent component\n */\nexport type TabsContentProps = React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>;\n\n// ========================================\n// COMPONENTS\n// ========================================\n\n/**\n * TabsRoot - Root container for tabs\n */\nfunction TabsRoot({ className, ...props }: TabsRootProps) {\n return (\n <TabsPrimitive.Root data-slot=\"tabs\" className={cn('tabs-glass-root', className)} {...props} />\n );\n}\n\n/**\n * TabsList - Container for tab triggers\n */\nconst TabsList = React.forwardRef<React.ElementRef<typeof TabsPrimitive.List>, TabsListProps>(\n ({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n data-slot=\"tabs-list\"\n className={cn(\n 'inline-flex gap-0.5 md:gap-1 p-0.5 md:p-1 rounded-xl',\n 'bg-(--tab-container-bg) border border-(--tab-container-border)',\n className\n )}\n {...props}\n />\n )\n);\n\nTabsList.displayName = 'TabsList';\n\n/**\n * TabsTrigger - Individual tab button\n */\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n TabsTriggerProps\n>(({ className, children, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n data-slot=\"tabs-trigger\"\n className={cn(\n 'relative px-2.5 py-1.5 md:px-4 md:py-2 rounded-lg',\n 'text-xs md:text-sm font-medium',\n 'transition-[background-color,color,opacity,box-shadow] duration-300',\n // Inactive state\n 'bg-(--tab-bg) text-(--text-secondary)',\n // Active state\n 'data-[state=active]:bg-(--tab-active-bg) data-[state=active]:text-(--tab-active-text)',\n // Focus state\n 'focus-visible:outline-none focus-visible:shadow-(--focus-glow)',\n // Disabled state\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n // Indicator (using ::after pseudo-element)\n 'after:absolute after:bottom-0 after:left-1/2 after:-translate-x-1/2',\n 'after:w-6 md:after:w-8 after:h-0.5 after:rounded-full',\n 'after:bg-(--tab-indicator)',\n 'after:opacity-0 data-[state=active]:after:opacity-100',\n 'after:transition-opacity after:duration-300',\n className\n )}\n {...props}\n >\n {children}\n </TabsPrimitive.Trigger>\n));\n\nTabsTrigger.displayName = 'TabsTrigger';\n\n/**\n * TabsContent - Content panel for a tab\n */\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n TabsContentProps\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n data-slot=\"tabs-content\"\n className={cn(\n 'animate-in fade-in-0 duration-200 outline-none',\n 'focus-visible:outline-none',\n className\n )}\n {...props}\n />\n));\n\nTabsContent.displayName = 'TabsContent';\n\n// ========================================\n// COMPOUND COMPONENT EXPORT\n// ========================================\n\n/**\n * TabsGlass - Compound Component API\n *\n * @example\n * ```tsx\n * // Compound API (TabsGlass.Root pattern)\n * <TabsGlass.Root value={activeTab} onValueChange={setActiveTab}>\n * <TabsGlass.List>\n * <TabsGlass.Trigger value=\"tab1\">Overview</TabsGlass.Trigger>\n * <TabsGlass.Trigger value=\"tab2\">Analytics</TabsGlass.Trigger>\n * </TabsGlass.List>\n * <TabsGlass.Content value=\"tab1\">\n * <p>Overview content</p>\n * </TabsGlass.Content>\n * <TabsGlass.Content value=\"tab2\">\n * <p>Analytics content</p>\n * </TabsGlass.Content>\n * </TabsGlass.Root>\n *\n * // shadcn/ui compatible API (separate imports)\n * import { Tabs, TabsList, TabsTrigger, TabsContent } from 'shadcn-glass-ui'\n * <Tabs defaultValue=\"tab1\">\n * <TabsList>\n * <TabsTrigger value=\"tab1\">Overview</TabsTrigger>\n * <TabsTrigger value=\"tab2\">Analytics</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"tab1\">Overview content</TabsContent>\n * <TabsContent value=\"tab2\">Analytics content</TabsContent>\n * </Tabs>\n * ```\n *\n * @since v1.0.0 - Legacy API removed (tabs/activeTab/onChange props)\n * @since v2.3.0 - Added shadcn/ui compatible separate exports\n * @since v2.2.6 - Migrated to Radix UI primitives\n */\nexport const TabsGlass = {\n Root: TabsRoot,\n List: TabsList,\n Trigger: TabsTrigger,\n Content: TabsContent,\n};\n\n// ========================================\n// SHADCN/UI COMPATIBLE EXPORTS\n// ========================================\n\n/**\n * Tabs - shadcn/ui compatible alias for TabsGlass.Root\n */\nexport const Tabs = TabsRoot;\n\nexport { TabsList, TabsTrigger, TabsContent };\n","/**\n * ToggleGlass CVA Variants\n * Extracted for Fast Refresh compatibility\n *\n * shadcn/ui compatible:\n * - sizes: default (was 'md'), sm, lg\n * - variants: default, outline\n */\n\nimport { cva } from 'class-variance-authority';\n\n/**\n * Toggle size types (shadcn/ui compatible)\n * - default: Standard size (was 'md')\n * - sm: Small\n * - lg: Large\n */\nexport type ToggleGlassSize = 'default' | 'sm' | 'lg';\n\n/**\n * Toggle variant types (shadcn/ui compatible)\n * - default: Filled toggle with glass effect\n * - outline: Border only toggle\n */\nexport type ToggleGlassVariant = 'default' | 'outline';\n\nexport const toggleSizes = cva('relative rounded-full transition-all duration-300', {\n variants: {\n size: {\n sm: 'w-8 h-4',\n default: 'w-11 h-6',\n lg: 'w-14 h-7',\n },\n variant: {\n default: '',\n outline: 'border-2',\n },\n },\n defaultVariants: {\n size: 'default',\n variant: 'default',\n },\n});\n","/**\n * ToggleGlass Component\n *\n * Glass-themed toggle switch with shadcn/ui compatible API:\n * - Theme-aware styling (glass/light/aurora)\n * - Glow effect when active\n * - Size variants (default, sm, lg)\n * - Variant styles (default, outline)\n * - Optional label\n *\n * **shadcn/ui compatible props:**\n * - `pressed` / `defaultPressed` - Control pressed state\n * - `onPressedChange` - Callback when state changes\n * - `variant` - 'default' | 'outline'\n * - `size` - 'default' | 'sm' | 'lg'\n *\n * @example\n * ```tsx\n * // Controlled\n * <ToggleGlass pressed={isOn} onPressedChange={setIsOn} />\n *\n * // Uncontrolled\n * <ToggleGlass defaultPressed={true} />\n *\n * // With variant\n * <ToggleGlass variant=\"outline\" pressed={isOn} onPressedChange={setIsOn} />\n * ```\n */\n\nimport { forwardRef, useState, type CSSProperties } from 'react';\nimport { type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/lib/utils';\nimport { useFocus } from '@/lib/hooks/use-focus';\nimport { toggleSizes, type ToggleGlassVariant } from '@/lib/variants/toggle-glass-variants';\nimport '@/glass-theme.css';\n\n// ========================================\n// SIZE CONFIG\n// ========================================\n\nconst sizesConfig = {\n sm: { track: 'w-8 h-4', knob: 'w-3 h-3', translate: 'translate-x-4' },\n default: { track: 'w-11 h-6', knob: 'w-5 h-5', translate: 'translate-x-5' },\n lg: { track: 'w-14 h-7', knob: 'w-6 h-6', translate: 'translate-x-7' },\n} as const;\n\n// ========================================\n// PROPS INTERFACE\n// ========================================\n\nexport interface ToggleGlassProps\n extends\n Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange' | 'defaultValue'>,\n VariantProps<typeof toggleSizes> {\n /**\n * Controlled pressed state (shadcn/ui compatible)\n */\n readonly pressed?: boolean;\n /**\n * Default pressed state for uncontrolled usage\n */\n readonly defaultPressed?: boolean;\n /**\n * Callback when pressed state changes (shadcn/ui compatible)\n */\n readonly onPressedChange?: (pressed: boolean) => void;\n /**\n * Visual variant (shadcn/ui compatible)\n * @default \"default\"\n */\n readonly variant?: ToggleGlassVariant;\n /**\n * Optional label text\n */\n readonly label?: string;\n}\n\n// ========================================\n// COMPONENT\n// ========================================\n\nexport const ToggleGlass = forwardRef<HTMLButtonElement, ToggleGlassProps>(\n (\n {\n className,\n size = 'default',\n variant = 'default',\n pressed: controlledPressed,\n defaultPressed = false,\n onPressedChange,\n disabled,\n label,\n ...props\n },\n ref\n ) => {\n // Support both controlled and uncontrolled modes\n const [uncontrolledPressed, setUncontrolledPressed] = useState(defaultPressed);\n const isControlled = controlledPressed !== undefined;\n const isPressed = isControlled ? controlledPressed : uncontrolledPressed;\n\n const { isFocusVisible, focusProps } = useFocus({ focusVisible: true });\n const s = sizesConfig[size ?? 'default'];\n\n const handleToggle = () => {\n if (disabled) return;\n const newValue = !isPressed;\n if (!isControlled) {\n setUncontrolledPressed(newValue);\n }\n onPressedChange?.(newValue);\n };\n\n const getTrackStyles = (): CSSProperties => {\n if (variant === 'outline') {\n return {\n background: isPressed ? 'var(--toggle-outline-active-bg)' : 'transparent',\n borderColor: isPressed\n ? 'var(--toggle-outline-active-border)'\n : 'var(--toggle-outline-border)',\n boxShadow: isFocusVisible && !disabled ? 'var(--focus-glow)' : 'none',\n };\n }\n return {\n background: isPressed ? 'var(--toggle-active-bg)' : 'var(--toggle-bg)',\n boxShadow:\n isFocusVisible && !disabled\n ? 'var(--focus-glow)'\n : isPressed\n ? 'var(--toggle-glow)'\n : 'none',\n };\n };\n\n const knobStyles: CSSProperties = {\n background: 'var(--toggle-knob)',\n };\n\n // Touch area wrapper ensures 44px minimum touch target (Apple HIG)\n const toggle = (\n <span className=\"inline-flex items-center justify-center min-h-11\">\n <button\n ref={ref}\n data-slot=\"toggle\"\n type=\"button\"\n role=\"switch\"\n aria-pressed={isPressed}\n aria-label={label || 'Toggle switch'}\n disabled={disabled}\n className={cn(\n toggleSizes({ size, variant }),\n disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer',\n !label && className\n )}\n style={getTrackStyles()}\n onClick={handleToggle}\n onFocus={focusProps.onFocus}\n onBlur={focusProps.onBlur}\n {...props}\n >\n <div\n className={cn(\n 'absolute top-0.5 left-0.5 rounded-full shadow-md transition-all duration-300',\n s.knob,\n isPressed && s.translate\n )}\n style={knobStyles}\n />\n </button>\n </span>\n );\n\n if (label) {\n return (\n <label\n className={cn(\n 'inline-flex items-center gap-2 md:gap-2.5',\n disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer',\n className\n )}\n >\n {toggle}\n <span className=\"text-xs md:text-sm\" style={{ color: 'var(--text-secondary)' }}>\n {label}\n </span>\n </label>\n );\n }\n\n return toggle;\n }\n);\n\nToggleGlass.displayName = 'ToggleGlass';\n","/**\n * TooltipGlass Component\n *\n * Glass-themed tooltip with:\n * - Unified dark design (consistent UX across themes)\n * - Position variants (top/bottom/left/right)\n * - Smooth animation\n * - Built on Radix UI primitives\n *\n * @example Compound API (recommended)\n * ```tsx\n * <TooltipGlassProvider>\n * <TooltipGlass>\n * <TooltipGlassTrigger asChild>\n * <Button>Hover</Button>\n * </TooltipGlassTrigger>\n * <TooltipGlassContent>\n * <p>Add to library</p>\n * </TooltipGlassContent>\n * </TooltipGlass>\n * </TooltipGlassProvider>\n * ```\n *\n * @example Simple wrapper\n * ```tsx\n * <TooltipGlassProvider>\n * <TooltipGlassSimple content=\"Click to edit\">\n * <button>Edit</button>\n * </TooltipGlassSimple>\n * </TooltipGlassProvider>\n * ```\n */\n\n'use client';\n\nimport * as React from 'react';\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip';\nimport { cn } from '@/lib/utils';\nimport '@/glass-theme.css';\n\n// ========================================\n// COMPOUND COMPONENT: PROVIDER\n// ========================================\n\ntype TooltipGlassProviderProps = React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Provider>;\n\n/**\n * TooltipGlassProvider - Context provider for all tooltips\n * Must wrap TooltipGlass components at the app level.\n */\nconst TooltipGlassProvider: React.FC<TooltipGlassProviderProps> = ({\n delayDuration = 0,\n ...props\n}) => {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n );\n};\n\nTooltipGlassProvider.displayName = 'TooltipGlassProvider';\n\n// ========================================\n// COMPOUND COMPONENT: ROOT\n// ========================================\n\n/**\n * TooltipGlassRoot - Individual tooltip instance\n * Wraps Radix TooltipPrimitive.Root with auto-included Provider (shadcn/ui pattern)\n */\nfunction TooltipGlassRoot({\n ...props\n}: React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipGlassProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipGlassProvider>\n );\n}\n\n// ========================================\n// COMPOUND COMPONENT: TRIGGER\n// ========================================\n\n/**\n * TooltipGlassTrigger - Element that triggers the tooltip\n * Supports asChild pattern for custom trigger elements.\n */\nconst TooltipGlassTrigger = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Trigger>\n>(({ ...props }, ref) => (\n <TooltipPrimitive.Trigger ref={ref} data-slot=\"tooltip-trigger\" {...props} />\n));\n\nTooltipGlassTrigger.displayName = 'TooltipGlassTrigger';\n\n// ========================================\n// COMPOUND COMPONENT: CONTENT\n// ========================================\n\ntype TooltipGlassContentProps = React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>;\n\n/**\n * TooltipGlassContent - Tooltip content with glass styling\n * Rendered in a portal for proper z-index handling.\n */\nconst TooltipGlassContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n TooltipGlassContentProps\n>(({ className, sideOffset = 0, children, ...props }, ref) => {\n const tooltipStyles: React.CSSProperties = {\n background: 'var(--tooltip-bg)',\n color: 'var(--tooltip-text)',\n border: '1px solid var(--tooltip-border)',\n boxShadow: 'var(--tooltip-shadow)',\n backdropFilter: 'blur(var(--blur-xl))',\n WebkitBackdropFilter: 'blur(var(--blur-xl))',\n };\n\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n data-slot=\"tooltip-content\"\n className={cn(\n 'z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance',\n 'animate-in fade-in-0 zoom-in-95',\n 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n 'data-[side=bottom]:slide-in-from-top-2',\n 'data-[side=left]:slide-in-from-right-2',\n 'data-[side=right]:slide-in-from-left-2',\n 'data-[side=top]:slide-in-from-bottom-2',\n className\n )}\n style={tooltipStyles}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow\n className=\"z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-xs\"\n style={{\n fill: 'var(--tooltip-bg)',\n background: 'var(--tooltip-bg)',\n }}\n />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n});\n\nTooltipGlassContent.displayName = 'TooltipGlassContent';\n\n// ========================================\n// SIMPLE WRAPPER (convenience)\n// ========================================\n\ninterface TooltipGlassSimpleProps {\n content: string;\n children: React.ReactNode;\n side?: 'top' | 'right' | 'bottom' | 'left';\n className?: string;\n}\n\nconst TooltipGlassSimple: React.FC<TooltipGlassSimpleProps> = ({\n content,\n children,\n side = 'top',\n className,\n}) => {\n return (\n <TooltipGlassRoot>\n <TooltipGlassTrigger asChild>{children}</TooltipGlassTrigger>\n <TooltipGlassContent side={side} className={className}>\n {content}\n </TooltipGlassContent>\n </TooltipGlassRoot>\n );\n};\n\n// ========================================\n// EXPORTS\n// ========================================\n\n// Compound API (shadcn/ui pattern)\nexport const TooltipGlass = TooltipGlassRoot;\nexport { TooltipGlassProvider, TooltipGlassTrigger, TooltipGlassContent, TooltipGlassSimple };\n","// ========================================\n// EXPANDABLE HEADER GLASS - ATOMIC COMPONENT\n// Collapsible section header with icon and chevron\n// Level 2: Atomic (extracted from FlagsSectionGlass)\n// ========================================\n\nimport {\n forwardRef,\n type ButtonHTMLAttributes,\n type ReactNode,\n type CSSProperties,\n} from 'react';\nimport { ChevronUp, ChevronDown, type LucideIcon } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport '@/glass-theme.css';\n\nexport interface ExpandableHeaderGlassProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'title'> {\n /** Header title */\n readonly title: ReactNode;\n /** Leading icon component */\n readonly icon?: LucideIcon;\n /** Icon color (CSS variable or color value) */\n readonly iconColor?: string;\n /** Expanded state */\n readonly expanded: boolean;\n /** Toggle callback */\n readonly onToggle?: () => void;\n}\n\nexport const ExpandableHeaderGlass = forwardRef<\n HTMLButtonElement,\n ExpandableHeaderGlassProps\n>(\n (\n {\n title,\n icon: Icon,\n iconColor = 'var(--text-accent)',\n expanded,\n onToggle,\n className,\n ...props\n },\n ref\n ) => {\n const textStyles: CSSProperties = {\n color: 'var(--text-primary)',\n };\n\n const chevronStyles: CSSProperties = {\n color: 'var(--text-muted)',\n };\n\n const iconStyles: CSSProperties = {\n color: iconColor,\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={onToggle}\n aria-expanded={expanded}\n className={cn(\n 'w-full p-4 flex items-center justify-between rounded-2xl transition-colors hover:bg-white/5',\n className\n )}\n style={textStyles}\n {...props}\n >\n <div className=\"flex items-center gap-2\">\n {Icon && <Icon className=\"w-5 h-5\" style={iconStyles} />}\n <span className=\"font-medium\">{title}</span>\n </div>\n {expanded ? (\n <ChevronUp className=\"w-5 h-5\" style={chevronStyles} />\n ) : (\n <ChevronDown className=\"w-5 h-5\" style={chevronStyles} />\n )}\n </button>\n );\n }\n);\n\nExpandableHeaderGlass.displayName = 'ExpandableHeaderGlass';\n","// ========================================\n// ICON BUTTON GLASS - ATOMIC COMPONENT\n// Glassmorphism icon button with responsive touch targets\n// Level 2: Atomic (extracted from HeaderNavGlass)\n// ========================================\n\nimport { forwardRef, type ButtonHTMLAttributes, type CSSProperties } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { type LucideIcon } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport '@/glass-theme.css';\n\nconst iconButtonVariants = cva(\n 'rounded-xl flex items-center justify-center transition-all duration-300 hover:scale-105 focus:outline-none focus:ring-2 focus:ring-offset-2',\n {\n variants: {\n size: {\n sm: 'w-8 h-8',\n md: 'w-10 h-10',\n lg: 'w-12 h-12',\n // Touch target: 44px minimum for mobile (WCAG 2.1 AA)\n touch: 'w-11 h-11 md:w-10 md:h-10',\n },\n variant: {\n gradient: '',\n subtle: '',\n ghost: 'bg-transparent hover:bg-white/10',\n },\n },\n defaultVariants: {\n size: 'md',\n variant: 'gradient',\n },\n }\n);\n\nexport interface IconButtonGlassProps\n extends ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof iconButtonVariants> {\n /** Lucide icon component */\n readonly icon: LucideIcon;\n /** Icon size in pixels (default: 20) */\n readonly iconSize?: number;\n /** Accessible label for screen readers */\n readonly 'aria-label': string;\n}\n\nexport const IconButtonGlass = forwardRef<HTMLButtonElement, IconButtonGlassProps>(\n (\n {\n icon: Icon,\n iconSize = 20,\n size,\n variant,\n className,\n 'aria-label': ariaLabel,\n ...props\n },\n ref\n ) => {\n const gradientStyles: CSSProperties | undefined =\n variant === 'gradient'\n ? {\n background:\n 'linear-gradient(135deg, var(--icon-btn-from), var(--icon-btn-to))',\n boxShadow: 'var(--icon-btn-shadow)',\n }\n : undefined;\n\n const subtleStyles: CSSProperties | undefined =\n variant === 'subtle'\n ? {\n background: 'var(--card-subtle-bg)',\n border: '1px solid var(--card-subtle-border)',\n }\n : undefined;\n\n const iconStyles: CSSProperties = {\n color: 'var(--icon-btn-text)',\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label={ariaLabel}\n className={cn(iconButtonVariants({ size, variant }), className)}\n style={gradientStyles ?? subtleStyles}\n {...props}\n >\n <Icon size={iconSize} style={iconStyles} />\n </button>\n );\n }\n);\n\nIconButtonGlass.displayName = 'IconButtonGlass';\n","import { cva } from 'class-variance-authority';\n\nexport type InsightVariant =\n | 'default'\n | 'tip'\n | 'highlight'\n | 'warning'\n | 'stat'\n | 'growth'\n | 'decline';\n\nexport const insightVariantConfig: Record<\n InsightVariant,\n {\n defaultEmoji: string;\n glowVar: string | null;\n borderVar: string;\n }\n> = {\n default: { defaultEmoji: '💡', glowVar: '--glow-primary', borderVar: '--glass-border' },\n tip: { defaultEmoji: '💡', glowVar: '--glow-secondary', borderVar: '--alert-default-border' },\n highlight: { defaultEmoji: '✨', glowVar: '--glow-success', borderVar: '--alert-success-border' },\n warning: { defaultEmoji: '⚠️', glowVar: '--glow-warning', borderVar: '--alert-warning-border' },\n stat: { defaultEmoji: '📊', glowVar: null, borderVar: '--glass-border' },\n growth: { defaultEmoji: '📈', glowVar: '--glow-success', borderVar: '--alert-success-border' },\n decline: { defaultEmoji: '📉', glowVar: '--glow-error', borderVar: '--alert-destructive-border' },\n};\n\nexport const insightCardVariants = cva('relative rounded-lg transition-all duration-200', {\n variants: {\n inline: {\n true: 'inline-flex items-center gap-1.5',\n false: 'p-3 bg-[var(--glass-bg-subtle)] border',\n },\n clickable: {\n true: 'cursor-pointer hover:bg-[var(--glass-bg)]',\n false: '',\n },\n },\n defaultVariants: {\n inline: false,\n clickable: false,\n },\n});\n","import { forwardRef, type CSSProperties, type KeyboardEvent } from 'react';\nimport { type VariantProps } from 'class-variance-authority';\nimport { ChevronRight } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport {\n insightCardVariants,\n insightVariantConfig,\n type InsightVariant,\n} from '@/lib/variants/insight-card-glass-variants';\nimport '@/glass-theme.css';\n\nexport interface InsightCardGlassProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, 'style'>,\n VariantProps<typeof insightCardVariants> {\n /** Emoji icon for the insight */\n readonly emoji?: string;\n /** Main insight text */\n readonly text: string;\n /** Additional details */\n readonly detail?: string;\n /** Insight type variant */\n readonly variant?: InsightVariant;\n /** Inline display mode */\n readonly inline?: boolean;\n /** Click handler (makes the insight clickable) */\n readonly onClick?: () => void;\n /** Show arrow indicator */\n readonly showArrow?: boolean;\n /** Fade-in animation */\n readonly animated?: boolean;\n}\n\nexport const InsightCardGlass = forwardRef<HTMLDivElement, InsightCardGlassProps>(\n (\n {\n emoji,\n text,\n detail,\n variant = 'default',\n inline = false,\n onClick,\n showArrow = false,\n animated = false,\n className,\n ...props\n },\n ref\n ) => {\n const config = insightVariantConfig[variant];\n const displayEmoji = emoji ?? config.defaultEmoji;\n const isClickable = !!onClick;\n\n const handleClick = () => onClick?.();\n\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n if (isClickable && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n onClick?.();\n }\n };\n\n const borderStyle: CSSProperties = !inline\n ? {\n borderColor: `var(${config.borderVar})`,\n }\n : {};\n\n const glowStyle: CSSProperties =\n isClickable && config.glowVar\n ? ({\n '--hover-glow': `var(${config.glowVar})`,\n } as CSSProperties)\n : {};\n\n // Inline variant\n if (inline) {\n return (\n <span\n ref={ref as React.Ref<HTMLSpanElement>}\n className={cn(\n 'inline-flex items-center gap-1.5 text-sm text-[var(--text-secondary)]',\n className\n )}\n {...props}\n >\n <span aria-hidden=\"true\">{displayEmoji}</span>\n <span>{text}</span>\n {detail && <span className=\"text-[var(--text-muted)]\">({detail})</span>}\n </span>\n );\n }\n\n // Card variant\n return (\n <div\n ref={ref}\n role={isClickable ? 'button' : undefined}\n tabIndex={isClickable ? 0 : undefined}\n onClick={isClickable ? handleClick : undefined}\n onKeyDown={isClickable ? handleKeyDown : undefined}\n className={cn(\n insightCardVariants({ inline, clickable: isClickable }),\n isClickable && config.glowVar && 'hover:shadow-[0_0_12px_var(--hover-glow)]',\n animated && 'animate-insight-fade-in',\n className\n )}\n style={{ ...borderStyle, ...glowStyle }}\n {...props}\n >\n <div className=\"flex items-start gap-2\">\n <span className=\"text-lg flex-shrink-0\" aria-hidden=\"true\">\n {displayEmoji}\n </span>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm text-[var(--text-primary)]\">{text}</p>\n {detail && <p className=\"text-xs text-[var(--text-muted)] mt-0.5\">{detail}</p>}\n </div>\n {showArrow && (\n <ChevronRight\n className=\"w-4 h-4 text-[var(--text-muted)] flex-shrink-0\"\n aria-hidden=\"true\"\n />\n )}\n </div>\n </div>\n );\n }\n);\n\nInsightCardGlass.displayName = 'InsightCardGlass';\n","// ========================================\n// SEARCH BOX GLASS - ATOMIC COMPONENT\n// Search input with submit button\n// Level 2: Atomic (extracted from HeaderNavGlass)\n// ========================================\n\nimport {\n forwardRef,\n useState,\n type InputHTMLAttributes,\n type CSSProperties,\n} from 'react';\nimport { Search } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport '@/glass-theme.css';\n\nexport interface SearchBoxGlassProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'onSubmit' | 'onChange'> {\n /** Callback when search is submitted (Enter key or button click) */\n readonly onSubmit?: (value: string) => void;\n /** Initial search value */\n readonly defaultValue?: string;\n /** Controlled value */\n readonly value?: string;\n /** Controlled change handler */\n readonly onChange?: (value: string) => void;\n /** Compact variant for mobile (icon only button) */\n readonly variant?: 'default' | 'compact';\n /** Input width class (default: w-48) */\n readonly inputWidth?: string;\n}\n\nexport const SearchBoxGlass = forwardRef<HTMLInputElement, SearchBoxGlassProps>(\n (\n {\n onSubmit,\n defaultValue = '',\n value: controlledValue,\n onChange: controlledOnChange,\n variant = 'default',\n inputWidth = 'w-32 sm:w-40 md:w-48',\n placeholder = 'Search username...',\n className,\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = useState(defaultValue);\n const [isFocused, setIsFocused] = useState(false);\n\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : internalValue;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n if (isControlled) {\n controlledOnChange?.(newValue);\n } else {\n setInternalValue(newValue);\n }\n };\n\n const handleSubmit = () => {\n onSubmit?.(value);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n handleSubmit();\n }\n };\n\n const containerStyles: CSSProperties = {\n boxShadow: isFocused ? 'var(--focus-glow)' : 'none',\n };\n\n const inputStyles: CSSProperties = {\n background: 'var(--search-bg)',\n color: 'var(--text-primary)',\n border: '1px solid var(--search-border)',\n borderRight: 'none',\n borderTopLeftRadius: '0.75rem',\n borderBottomLeftRadius: '0.75rem',\n };\n\n const buttonStyles: CSSProperties = {\n background: 'var(--search-btn-bg)',\n color: 'var(--search-btn-text)',\n borderTopRightRadius: '0.75rem',\n borderBottomRightRadius: '0.75rem',\n };\n\n return (\n <div\n className={cn('flex w-fit rounded-xl overflow-hidden', className)}\n style={containerStyles}\n >\n <input\n ref={ref}\n type=\"text\"\n value={value}\n onChange={handleChange}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n aria-label={placeholder}\n className={cn('px-4 py-2 text-sm outline-none transition-all', inputWidth)}\n style={inputStyles}\n {...props}\n />\n <button\n onClick={handleSubmit}\n type=\"button\"\n className={cn(\n 'px-5 py-2 text-sm font-medium flex items-center gap-2 hover:scale-[1.02] transition-transform',\n variant === 'compact' && 'px-3'\n )}\n style={buttonStyles}\n aria-label=\"Search\"\n >\n <Search className=\"w-4 h-4\" />\n {variant === 'default' && <span className=\"hidden sm:inline\">Search</span>}\n </button>\n </div>\n );\n }\n);\n\nSearchBoxGlass.displayName = 'SearchBoxGlass';\n","/**\n * SortDropdownGlass Component\n *\n * Atomic component for sorting controls built on DropdownMenuGlass primitives.\n *\n * Features:\n * - Theme-aware glass styling (unified with DropdownMenuGlass)\n * - Responsive design (compact/full mode)\n * - Sort field selection (commits, stars, name, contribution)\n * - Sort order toggle (asc/desc)\n * - Built on shadcn/ui compound component pattern\n *\n * @example\n * ```tsx\n * <SortDropdownGlass\n * sortBy=\"commits\"\n * sortOrder=\"desc\"\n * onSortChange={(field, order) => console.log(field, order)}\n * />\n * ```\n */\n\n'use client';\n\nimport * as React from 'react';\nimport { ChevronDown, ArrowUp, ArrowDown, Check } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport {\n DropdownMenuGlass,\n DropdownMenuGlassTrigger,\n DropdownMenuGlassContent,\n DropdownMenuGlassItem,\n} from '@/components/glass/ui/dropdown-menu-glass';\nimport { ICON_SIZES } from '../primitives/style-utils';\nimport '@/glass-theme.css';\n\n// ========================================\n// TYPES\n// ========================================\n\nexport type SortField = 'commits' | 'stars' | 'name' | 'contribution';\nexport type SortOrder = 'asc' | 'desc';\n\n// ========================================\n// FIELD LABELS\n// ========================================\n\nconst fieldLabels: Record<SortField, string> = {\n commits: 'Commits',\n stars: 'Stars',\n name: 'Name',\n contribution: 'Contribution',\n};\n\n// ========================================\n// PROPS INTERFACE\n// ========================================\n\nexport interface SortDropdownGlassProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'onChange'\n> {\n /** Current sort field */\n readonly sortBy: SortField;\n /** Current sort order */\n readonly sortOrder: SortOrder;\n /** Callback when sort changes */\n readonly onSortChange: (field: SortField, order: SortOrder) => void;\n /** Available sort options (default: all) */\n readonly options?: readonly SortField[];\n /** Compact mode for mobile */\n readonly compact?: boolean;\n}\n\n// ========================================\n// COMPONENT\n// ========================================\n\nexport const SortDropdownGlass = React.forwardRef<HTMLDivElement, SortDropdownGlassProps>(\n (\n {\n sortBy,\n sortOrder,\n onSortChange,\n options = ['commits', 'stars', 'name', 'contribution'],\n compact = false,\n className,\n ...props\n },\n ref\n ) => {\n const handleFieldSelect = React.useCallback(\n (field: SortField) => {\n if (field === sortBy) {\n // Toggle order if same field\n onSortChange(field, sortOrder === 'asc' ? 'desc' : 'asc');\n } else {\n // New field, default to desc\n onSortChange(field, 'desc');\n }\n },\n [sortBy, sortOrder, onSortChange]\n );\n\n const SortIcon = sortOrder === 'asc' ? ArrowUp : ArrowDown;\n\n return (\n <div ref={ref} className={cn('relative inline-block', className)} {...props}>\n <DropdownMenuGlass>\n <DropdownMenuGlassTrigger asChild>\n <button\n type=\"button\"\n className={cn(\n // Layout\n 'flex items-center gap-1.5 px-3 py-1.5 rounded-xl text-xs font-medium',\n 'sm:gap-2 sm:px-4 sm:py-2 sm:text-sm',\n // Glass surface\n 'bg-(--dropdown-bg) border border-(--dropdown-border)',\n 'backdrop-blur-md',\n // Transitions\n 'transition-all duration-200',\n // Hover\n 'hover:opacity-90 hover:shadow-(--dropdown-glow)',\n // Focus\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2',\n 'focus-visible:ring-(--text-accent)',\n // Text color\n 'text-(--dropdown-item-text)'\n )}\n aria-haspopup=\"menu\"\n >\n {compact ? (\n <>\n <span>Sort</span>\n <SortIcon className={cn(ICON_SIZES.sm, 'text-(--text-accent)')} />\n </>\n ) : (\n <>\n <span className=\"hidden sm:inline text-(--text-muted)\">Sort:</span>\n <span>{fieldLabels[sortBy]}</span>\n <SortIcon className={cn(ICON_SIZES.sm, 'text-(--text-accent)')} />\n <ChevronDown\n className={cn(\n ICON_SIZES.sm,\n 'text-(--text-muted)',\n 'transition-transform duration-200',\n 'group-data-[state=open]:rotate-180'\n )}\n />\n </>\n )}\n </button>\n </DropdownMenuGlassTrigger>\n\n <DropdownMenuGlassContent align=\"start\" aria-label=\"Sort options\">\n {options.map((field) => {\n const isSelected = field === sortBy;\n return (\n <DropdownMenuGlassItem\n key={field}\n onSelect={() => handleFieldSelect(field)}\n className={cn('justify-between', isSelected && 'bg-(--select-item-selected-bg)')}\n >\n <span className=\"font-medium\">{fieldLabels[field]}</span>\n {isSelected && (\n <div className=\"flex items-center gap-1 text-(--text-accent)\">\n {sortOrder === 'asc' ? (\n <ArrowUp className={ICON_SIZES.sm} />\n ) : (\n <ArrowDown className={ICON_SIZES.sm} />\n )}\n <Check className={ICON_SIZES.sm} />\n </div>\n )}\n </DropdownMenuGlassItem>\n );\n })}\n </DropdownMenuGlassContent>\n </DropdownMenuGlass>\n </div>\n );\n }\n);\n\nSortDropdownGlass.displayName = 'SortDropdownGlass';\n","// ========================================\n// STAT ITEM GLASS - ATOMIC COMPONENT\n// Compact stat display with icon and label\n// Level 2: Atomic (extracted from ProfileHeaderGlass)\n// ========================================\n\nimport { forwardRef, type HTMLAttributes, type CSSProperties } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { type LucideIcon } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport '@/glass-theme.css';\n\nconst statItemVariants = cva('flex items-center gap-1', {\n variants: {\n size: {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n },\n layout: {\n horizontal: 'flex-row',\n vertical: 'flex-col items-start gap-0.5',\n },\n },\n defaultVariants: {\n size: 'md',\n layout: 'horizontal',\n },\n});\n\nexport interface StatItemGlassProps\n extends HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof statItemVariants> {\n /** Lucide icon component */\n readonly icon: LucideIcon;\n /** Stat value (number or formatted string) */\n readonly value: number | string;\n /** Stat label */\n readonly label: string;\n /** Icon size in pixels */\n readonly iconSize?: number;\n /** Abbreviated format for mobile (1.2k instead of 1234) */\n readonly abbreviated?: boolean;\n}\n\nexport const StatItemGlass = forwardRef<HTMLSpanElement, StatItemGlassProps>(\n (\n {\n icon: Icon,\n value,\n label,\n iconSize = 16,\n abbreviated = false,\n size,\n layout,\n className,\n ...props\n },\n ref\n ) => {\n const textStyles: CSSProperties = {\n color: 'var(--text-secondary)',\n };\n\n const iconStyles: CSSProperties = {\n color: 'var(--text-accent)',\n };\n\n const formatValue = (val: number | string): string => {\n if (!abbreviated || typeof val !== 'number') return String(val);\n\n if (val >= 1000000) return `${(val / 1000000).toFixed(1)}M`;\n if (val >= 1000) return `${(val / 1000).toFixed(1)}k`;\n return String(val);\n };\n\n return (\n <span\n ref={ref}\n className={cn(statItemVariants({ size, layout }), className)}\n style={textStyles}\n {...props}\n >\n <Icon size={iconSize} style={iconStyles} />\n <span className=\"font-medium\">\n {formatValue(value)} {label}\n </span>\n </span>\n );\n }\n);\n\nStatItemGlass.displayName = 'StatItemGlass';\n","// ========================================\n// THEME TOGGLE GLASS - ATOMIC COMPONENT\n// Theme switcher button with cycle animation\n// Level 2: Atomic (extracted from HeaderNavGlass)\n// ========================================\n\nimport { forwardRef, type ButtonHTMLAttributes, type CSSProperties } from 'react';\nimport { Sun, Moon, Palette } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { useTheme, type ThemeName } from '@/lib/theme-context';\nimport '@/glass-theme.css';\n\nconst themes: ThemeName[] = ['light', 'aurora', 'glass'];\n\nconst themeConfig: Record<ThemeName, { label: string; icon: typeof Sun }> = {\n light: { label: 'Light', icon: Sun },\n aurora: { label: 'Aurora', icon: Moon },\n glass: { label: 'Glass', icon: Palette },\n};\n\nexport interface ThemeToggleGlassProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Custom theme toggle handler (overrides default cycleTheme) */\n readonly onToggle?: () => void;\n /** Icon size in pixels (default: 20) */\n readonly iconSize?: number;\n /** Show icon only (hide label on mobile) */\n readonly iconOnly?: boolean;\n}\n\nexport const ThemeToggleGlass = forwardRef<HTMLButtonElement, ThemeToggleGlassProps>(\n ({ onToggle, iconSize = 20, iconOnly = false, className, ...props }, ref) => {\n const { theme, cycleTheme } = useTheme();\n\n const nextTheme = themes[(themes.indexOf(theme) + 1) % themes.length];\n const NextIcon = themeConfig[nextTheme].icon;\n const nextLabel = themeConfig[nextTheme].label;\n\n const buttonStyles: CSSProperties = {\n background: 'var(--card-subtle-bg)',\n border: '1px solid var(--card-subtle-border)',\n };\n\n const iconStyles: CSSProperties = {\n color: 'var(--text-secondary)',\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={onToggle ?? cycleTheme}\n aria-label={`Switch to ${nextLabel} theme`}\n className={cn(\n 'p-2.5 rounded-xl transition-all duration-300 hover:scale-105 focus:outline-none focus:ring-2 focus:ring-offset-2',\n iconOnly && 'md:px-4 md:gap-2',\n className\n )}\n style={buttonStyles}\n {...props}\n >\n <div className=\"flex items-center gap-2\">\n <NextIcon size={iconSize} style={iconStyles} />\n {!iconOnly && (\n <span className=\"hidden md:inline text-sm font-medium\" style={iconStyles}>\n {nextLabel}\n </span>\n )}\n </div>\n </button>\n );\n }\n);\n\nThemeToggleGlass.displayName = 'ThemeToggleGlass';\n","/**\n * BaseProgressGlass Component\n *\n * Base progress bar component used as foundation for:\n * - ProgressGlass (standard progress bar)\n * - RainbowProgressGlass (gradient progress bar)\n *\n * Features:\n * - Theme-aware styling\n * - Percentage calculation\n * - Accessible (ARIA progressbar)\n * - Customizable through children render prop\n */\n\nimport { forwardRef, type ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\nimport '@/glass-theme.css';\n\n// ========================================\n// PROPS INTERFACE\n// ========================================\n\nexport interface BaseProgressGlassProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n readonly value?: number;\n readonly max?: number;\n readonly children?: ReactNode | ((percentage: number) => ReactNode);\n}\n\n// ========================================\n// COMPONENT\n// ========================================\n\nexport const BaseProgressGlass = forwardRef<HTMLDivElement, BaseProgressGlassProps>(\n ({ value = 0, max = 100, className, children, ...props }, ref) => {\n const percentage = Math.min(100, Math.max(0, (value / max) * 100));\n\n return (\n <div\n ref={ref}\n className={cn(\n 'relative h-2 w-full overflow-hidden rounded-full',\n 'bg-white/5 backdrop-blur-sm',\n className\n )}\n role=\"progressbar\"\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuetext={`${Math.round(percentage)}%`}\n {...props}\n >\n {typeof children === 'function'\n ? children(percentage)\n : children || (\n <div\n className=\"h-full transition-all duration-300 ease-out\"\n style={{\n width: `${percentage}%`,\n background: 'var(--progress-bar-bg, linear-gradient(90deg, #a855f7, #ec4899))',\n }}\n />\n )}\n </div>\n );\n }\n);\n\nBaseProgressGlass.displayName = 'BaseProgressGlass';\n","// ========================================\n// STATUS INDICATOR GLASS COMPONENT\n// Status dots with glow effect\n// ========================================\n\nimport { forwardRef, type CSSProperties } from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport \"@/glass-theme.css\";\n\nexport type StatusType = \"green\" | \"yellow\" | \"red\";\nexport type StatusSize = \"normal\" | \"large\";\n\nexport interface StatusIndicatorGlassProps extends React.HTMLAttributes<HTMLDivElement> {\n readonly type?: StatusType;\n readonly size?: StatusSize;\n}\n\nconst sizeClasses: Record<StatusSize, string> = {\n normal: \"w-2 h-2 md:w-2.5 md:h-2.5\",\n large: \"w-3.5 h-3.5 md:w-4 md:h-4\",\n};\n\nconst statusSymbols: Record<StatusType, string> = {\n green: \"✓\",\n yellow: \"!\",\n red: \"✕\",\n};\n\n// CSS variable maps for status colors (using semantic naming)\nconst statusVarMap: Record<StatusType, { bg: string; glow: string }> = {\n green: { bg: \"var(--status-online)\", glow: \"var(--status-online-glow)\" },\n yellow: { bg: \"var(--status-away)\", glow: \"var(--status-away-glow)\" },\n red: { bg: \"var(--status-busy)\", glow: \"var(--status-busy-glow)\" },\n};\n\nexport const StatusIndicatorGlass = forwardRef<HTMLDivElement, StatusIndicatorGlassProps>(\n ({ type = \"green\", size = \"normal\", className, ...props }, ref) => {\n const colors = statusVarMap[type];\n\n const indicatorStyles: CSSProperties = {\n backgroundColor: colors.bg,\n boxShadow: colors.glow,\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"rounded-full flex items-center justify-center\",\n sizeClasses[size],\n className\n )}\n style={indicatorStyles}\n role=\"status\"\n aria-label={`Status: ${type}`}\n {...props}\n >\n {size === \"large\" && (\n <span className=\"text-white text-[8px] md:text-[10px] font-bold\">\n {statusSymbols[type]}\n </span>\n )}\n </div>\n );\n }\n);\n\nStatusIndicatorGlass.displayName = \"StatusIndicatorGlass\";\n","// ========================================\n// FLAG ALERT GLASS COMPONENT\n// Individual warning/danger flag alert\n// ========================================\n\nimport { forwardRef, useState, type CSSProperties } from 'react';\nimport { cn } from '@/lib/utils';\nimport { StatusIndicatorGlass, type StatusType } from './status-indicator-glass';\nimport '@/glass-theme.css';\n\nexport type FlagType = 'warning' | 'danger';\n\nexport interface FlagAlertGlassProps extends React.HTMLAttributes<HTMLDivElement> {\n readonly type?: FlagType;\n readonly title: string;\n readonly description?: string;\n}\n\n// CSS variable maps for flag types\nconst flagVarMap: Record<\n FlagType,\n { bg: string; border: string; text: string; statusType: StatusType }\n> = {\n danger: {\n bg: 'var(--alert-danger-bg)',\n border: 'var(--alert-danger-border)',\n text: 'var(--alert-danger-text)',\n statusType: 'red',\n },\n warning: {\n bg: 'var(--alert-warning-bg)',\n border: 'var(--alert-warning-border)',\n text: 'var(--alert-warning-text)',\n statusType: 'yellow',\n },\n};\n\nexport const FlagAlertGlass = forwardRef<HTMLDivElement, FlagAlertGlassProps>(\n ({ type = 'warning', title, description, className, ...props }, ref) => {\n const [isHovered, setIsHovered] = useState(false);\n const config = flagVarMap[type];\n\n const alertStyles: CSSProperties = {\n background: config.bg,\n borderColor: config.border,\n transform: isHovered ? 'translateX(4px)' : 'translateX(0)',\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n 'p-2.5 md:p-3 rounded-xl border transition-all duration-300 max-w-md',\n className\n )}\n style={alertStyles}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n role=\"alert\"\n {...props}\n >\n <div\n className=\"flex items-center gap-1.5 md:gap-2 font-medium text-xs md:text-sm\"\n style={{ color: config.text }}\n >\n <StatusIndicatorGlass type={config.statusType} />\n {title}\n </div>\n {description && (\n <p className=\"text-(length:--font-size-2xs) md:text-xs mt-0.5 md:mt-1 ml-4 md:ml-5 text-(--text-muted)\">\n {description}\n </p>\n )}\n </div>\n );\n }\n);\n\nFlagAlertGlass.displayName = 'FlagAlertGlass';\n","// ========================================\n// LANGUAGE BAR GLASS COMPONENT\n// Language/skill proficiency bar with legend\n// ========================================\n\nimport { forwardRef, useState, type CSSProperties } from 'react';\nimport { cn } from '@/lib/utils';\nimport '@/glass-theme.css';\n\nexport interface LanguageData {\n readonly name: string;\n readonly percent: number;\n /**\n * Custom color for the language segment.\n * Accepts any valid CSS color value:\n * - OKLCH (recommended): `oklch(66.6% 0.159 303)`\n * - Hex: `#3b82f6`\n * - RGB: `rgb(59, 130, 246)`\n * - HSL: `hsl(221, 83%, 53%)`\n *\n * **Note:** CSS variables like `var(--oklch-blue-500)` may not work if they're\n * tree-shaken out in production builds. Use direct color values instead.\n *\n * If not provided, falls back to default language colors defined in `defaultLangColors`.\n */\n readonly color?: string;\n}\n\nexport interface LanguageBarGlassProps extends React.HTMLAttributes<HTMLDivElement> {\n readonly languages: readonly LanguageData[];\n readonly showLegend?: boolean;\n}\n\n// CSS variable names for language colors (defined in themes)\nconst defaultLangColors: Record<string, string> = {\n TypeScript: 'var(--language-typescript)',\n JavaScript: 'var(--language-javascript)',\n Python: 'var(--language-python)',\n HTML: 'var(--language-html)',\n CSS: 'var(--language-css)',\n Java: 'var(--language-java)',\n Go: 'var(--language-go)',\n Rust: 'var(--language-rust)',\n Ruby: 'var(--language-ruby)',\n PHP: 'var(--language-php)',\n};\n\nexport const LanguageBarGlass = forwardRef<HTMLDivElement, LanguageBarGlassProps>(\n ({ languages = [], showLegend = true, className, ...props }, ref) => {\n const [hoveredLang, setHoveredLang] = useState<number | null>(null);\n\n const barStyles: CSSProperties = {\n boxShadow: 'var(--rainbow-glow)',\n };\n\n // Early return if no languages provided\n if (!languages || languages.length === 0) {\n return null;\n }\n\n return (\n <div ref={ref} className={cn('w-full', className)} {...props}>\n {/* Progress bar */}\n <div\n className=\"flex h-2 md:h-2.5 rounded-full overflow-hidden\"\n style={barStyles}\n role=\"group\"\n aria-label=\"Language distribution\"\n >\n {languages.map((lang, i) => {\n const bgColor = lang.color ?? defaultLangColors[lang.name] ?? 'var(--oklch-slate-400)';\n const segmentStyles: CSSProperties = {\n width: `${lang.percent}%`,\n backgroundColor: bgColor,\n opacity: hoveredLang !== null && hoveredLang !== i ? 0.5 : 1,\n transition: 'all 0.3s',\n };\n\n return (\n <div\n key={`bar-${lang.name}-${i}`}\n style={segmentStyles}\n role=\"progressbar\"\n aria-label={`${lang.name}: ${lang.percent}%`}\n aria-valuenow={lang.percent}\n aria-valuemin={0}\n aria-valuemax={100}\n onMouseEnter={() => setHoveredLang(i)}\n onMouseLeave={() => setHoveredLang(null)}\n />\n );\n })}\n </div>\n\n {/* Legend */}\n {showLegend && (\n <div className=\"flex items-center gap-3 md:gap-4 mt-1.5 md:mt-2 text-(length:--font-size-2xs) md:text-xs flex-wrap text-(--text-secondary)\">\n {languages.map((lang, i) => {\n const bgColor =\n lang.color ?? defaultLangColors[lang.name] ?? 'var(--oklch-slate-400)';\n\n return (\n <span\n key={`legend-${lang.name}-${i}`}\n className=\"flex items-center gap-1 md:gap-1.5 cursor-pointer\"\n onMouseEnter={() => setHoveredLang(i)}\n onMouseLeave={() => setHoveredLang(null)}\n >\n <span\n className=\"w-2 h-2 md:w-2.5 md:h-2.5 rounded-full\"\n style={{ backgroundColor: bgColor }}\n />\n {lang.name} {lang.percent}%\n </span>\n );\n })}\n </div>\n )}\n </div>\n );\n }\n);\n\nLanguageBarGlass.displayName = 'LanguageBarGlass';\n","// ========================================\n// PROFILE AVATAR GLASS - SPECIALIZED COMPONENT\n// Large profile avatar wrapper with custom sizing\n// Level 4: Specialized (wrapper over AvatarGlass)\n// ========================================\n\nimport { forwardRef, type CSSProperties } from 'react';\nimport { type AvatarStatus } from '@/components/glass/ui/avatar-glass';\nimport { statusSizes } from '@/lib/variants/avatar-glass-variants';\nimport { cn } from '@/lib/utils';\nimport { useHover } from '@/lib/hooks/use-hover';\n\nexport type ProfileAvatarSize = 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface ProfileAvatarGlassProps extends React.HTMLAttributes<HTMLDivElement> {\n /** User initials to display */\n readonly initials: string;\n /** Size variant (profile-specific sizing - larger than AvatarGlass) */\n readonly size?: ProfileAvatarSize;\n /** Optional status indicator */\n readonly status?: AvatarStatus;\n /** Enable pulsing glow animation */\n readonly glowing?: boolean;\n}\n\n/**\n * Profile-specific size classes (larger than standard AvatarGlass)\n */\nconst profileSizeClasses: Record<ProfileAvatarSize, string> = {\n sm: 'w-9 h-9 md:w-10 md:h-10 text-xs md:text-sm',\n md: 'w-12 h-12 md:w-14 md:h-14 text-base md:text-lg',\n lg: 'w-14 h-14 md:w-16 md:h-16 text-lg md:text-xl',\n xl: 'w-18 h-18 md:w-20 md:h-20 text-xl md:text-2xl',\n};\n\n/**\n * Get CSS variables for status indicator colors\n */\nconst getStatusVars = (statusType: AvatarStatus): { bg: string; glow: string } => {\n const statusVars: Record<AvatarStatus, { bg: string; glow: string }> = {\n online: { bg: 'var(--status-online)', glow: 'var(--status-online-glow)' },\n offline: { bg: 'var(--status-offline)', glow: 'none' },\n busy: { bg: 'var(--status-busy)', glow: 'var(--status-busy-glow)' },\n away: { bg: 'var(--status-away)', glow: 'var(--status-away-glow)' },\n };\n return statusVars[statusType];\n};\n\n/**\n * ProfileAvatarGlass - Large profile avatar with bold styling\n *\n * Built on top of the same CSS variables as AvatarGlass but with\n * profile-specific sizing and bold font weight.\n *\n * @example\n * ```tsx\n * <ProfileAvatarGlass initials=\"JD\" size=\"lg\" glowing />\n * <ProfileAvatarGlass initials=\"AS\" status=\"online\" />\n * ```\n */\nexport const ProfileAvatarGlass = forwardRef<HTMLDivElement, ProfileAvatarGlassProps>(\n ({ initials, size = 'lg', status, glowing = true, className, ...props }, ref) => {\n const { isHovered, hoverProps } = useHover();\n\n const avatarStyles: CSSProperties = {\n background: 'var(--avatar-bg)',\n border: '3px solid var(--avatar-border)',\n boxShadow: isHovered ? 'var(--avatar-hover-glow)' : 'var(--avatar-shadow)',\n color: 'var(--text-inverse)',\n };\n\n return (\n <div\n ref={ref}\n className={cn('relative inline-flex', className)}\n onMouseEnter={hoverProps.onMouseEnter}\n onMouseLeave={hoverProps.onMouseLeave}\n {...props}\n >\n {/* Avatar circle */}\n <div\n className={cn(\n 'rounded-full flex items-center justify-center font-bold transition-all duration-300',\n profileSizeClasses[size],\n glowing && 'animate-[glow-pulse_2s_ease-in-out_infinite]'\n )}\n style={avatarStyles}\n role=\"img\"\n aria-label={`Profile avatar with initials ${initials}`}\n >\n {initials}\n </div>\n\n {/* Status indicator */}\n {status && (\n <span\n className={cn(statusSizes({ size }), 'absolute -bottom-0.5 -right-0.5')}\n style={{\n background: getStatusVars(status).bg,\n boxShadow: getStatusVars(status).glow,\n }}\n role=\"status\"\n aria-label={`Status: ${status}`}\n />\n )}\n </div>\n );\n }\n);\n\nProfileAvatarGlass.displayName = 'ProfileAvatarGlass';\n","/**\n * ProgressGlass CVA Variants\n * Extracted for Fast Refresh compatibility\n */\n\nimport { cva } from 'class-variance-authority';\n\nexport type ProgressSize = 'sm' | 'md' | 'lg' | 'xl';\nexport type ProgressGradient = 'violet' | 'blue' | 'cyan' | 'amber' | 'emerald' | 'rose';\n\nexport const progressSizes = cva('rounded-full overflow-hidden', {\n variants: {\n size: {\n sm: 'h-1.5 md:h-1',\n md: 'h-2.5 md:h-2',\n lg: 'h-3.5 md:h-3',\n xl: 'h-5 md:h-4',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n});\n","/**\n * ProgressGlass Component\n *\n * Glass-themed progress bar with:\n * - Theme-aware styling (glass/light/aurora)\n * - Gradient fill with glow\n * - Size variants\n * - Optional label\n */\n\nimport { forwardRef, type CSSProperties } from 'react';\nimport { type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/lib/utils';\nimport { progressSizes, type ProgressGradient } from '@/lib/variants/progress-glass-variants';\nimport '@/glass-theme.css';\n\n// ========================================\n// PROPS INTERFACE\n// ========================================\n\nexport interface ProgressGlassProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'style'>, VariantProps<typeof progressSizes> {\n readonly value: number;\n readonly gradient?: ProgressGradient;\n readonly showLabel?: boolean;\n}\n\n// ========================================\n// COMPONENT\n// ========================================\n\n// Map gradient to existing metric color variables\nconst getGradientColor = (\n gradient: ProgressGradient = 'violet'\n): { colorVar: string; glowVar: string } => {\n const gradients: Record<ProgressGradient, { colorVar: string; glowVar: string }> = {\n violet: { colorVar: '--metric-default-text', glowVar: '--progress-glow-violet' }, // Uses blue metric color\n blue: { colorVar: '--metric-default-text', glowVar: '--progress-glow-blue' },\n cyan: { colorVar: '--metric-secondary-text', glowVar: '--progress-glow-cyan' },\n amber: { colorVar: '--metric-warning-text', glowVar: '--progress-glow-amber' },\n emerald: { colorVar: '--metric-success-text', glowVar: '--progress-glow-emerald' },\n rose: { colorVar: '--metric-destructive-text', glowVar: '--progress-glow-rose' },\n };\n return gradients[gradient] || gradients.violet;\n};\n\nexport const ProgressGlass = forwardRef<HTMLDivElement, ProgressGlassProps>(\n ({ className, size = 'md', value = 0, gradient = 'violet', showLabel, ...props }, ref) => {\n const clampedValue = Math.min(100, Math.max(0, value));\n const { colorVar, glowVar } = getGradientColor(gradient);\n\n const trackStyles: CSSProperties = {\n background: 'var(--progress-bg)',\n };\n\n const fillStyles: CSSProperties = {\n width: `${clampedValue}%`,\n background: `var(${colorVar})`,\n boxShadow: `var(${glowVar})`,\n };\n\n return (\n <div ref={ref} data-slot=\"progress\" className={cn('w-full', className)} {...props}>\n {showLabel && (\n <div className=\"flex justify-between mb-1 md:mb-1.5\">\n <span className=\"text-(length:--font-size-2xs) md:text-xs text-(--text-muted)\">\n Progress\n </span>\n <span className=\"text-(length:--font-size-2xs) md:text-xs font-medium text-(--text-secondary)\">\n {clampedValue}%\n </span>\n </div>\n )}\n <div className={cn(progressSizes({ size }))} style={trackStyles}>\n <div\n data-slot=\"progress-indicator\"\n className=\"h-full rounded-full transition-all duration-700 ease-out\"\n style={fillStyles}\n role=\"progressbar\"\n aria-valuenow={clampedValue}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={`Progress: ${clampedValue}%`}\n />\n </div>\n </div>\n );\n }\n);\n\nProgressGlass.displayName = 'ProgressGlass';\n","// ========================================\n// RAINBOW PROGRESS GLASS COMPONENT\n// Animated rainbow gradient progress bar\n// ========================================\n\nimport { forwardRef, type CSSProperties } from 'react';\nimport { cn } from '@/lib/utils';\nimport '@/glass-theme.css';\n\nexport type RainbowProgressSize = 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface RainbowProgressGlassProps extends React.HTMLAttributes<HTMLDivElement> {\n readonly value: number;\n readonly size?: RainbowProgressSize;\n readonly showGlow?: boolean;\n}\n\nconst sizeClasses: Record<RainbowProgressSize, string> = {\n sm: 'h-2.5 md:h-2',\n md: 'h-3.5 md:h-3',\n lg: 'h-[1.125rem] md:h-4',\n xl: 'h-6 md:h-5',\n};\n\nexport const RainbowProgressGlass = forwardRef<HTMLDivElement, RainbowProgressGlassProps>(\n ({ value, size = 'lg', showGlow = true, className, ...props }, ref) => {\n const clampedValue = Math.min(100, Math.max(0, value));\n\n const trackStyles: CSSProperties = {\n background: 'var(--progress-bg)',\n };\n\n const fillStyles: CSSProperties = {\n width: `${clampedValue}%`,\n background: 'var(--rainbow-gradient)',\n boxShadow: showGlow ? 'var(--rainbow-glow)' : 'none',\n animation: showGlow ? 'var(--rainbow-animation)' : 'none',\n };\n\n return (\n <div\n ref={ref}\n className={cn('rounded-full overflow-hidden', sizeClasses[size], className)}\n style={trackStyles}\n role=\"progressbar\"\n aria-valuenow={clampedValue}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={`Rainbow progress: ${clampedValue}%`}\n {...props}\n >\n <div className=\"h-full rounded-full transition-all duration-1000\" style={fillStyles} />\n </div>\n );\n }\n);\n\nRainbowProgressGlass.displayName = 'RainbowProgressGlass';\n","// ========================================\n// SEGMENTED CONTROL GLASS COMPONENT\n// ========================================\n\nimport { forwardRef, type CSSProperties } from 'react';\nimport { cn } from '@/lib/utils';\nimport '@/glass-theme.css';\n\nexport interface SegmentOption {\n readonly value: string;\n readonly label: string;\n}\n\nexport interface SegmentedControlGlassProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'onChange'\n> {\n readonly options: readonly SegmentOption[];\n readonly value: string;\n readonly onChange?: (value: string) => void;\n}\n\nexport const SegmentedControlGlass = forwardRef<HTMLDivElement, SegmentedControlGlassProps>(\n ({ options = [], value, onChange, className, ...props }, ref) => {\n const containerStyles: CSSProperties = {\n border: '1px solid var(--segmented-container-border)',\n background: 'var(--segmented-container-bg)',\n };\n\n // Early return if no options provided\n if (!options || options.length === 0) {\n return null;\n }\n\n return (\n <div\n ref={ref}\n className={cn('inline-flex rounded-xl overflow-hidden', className)}\n style={containerStyles}\n role=\"tablist\"\n {...props}\n >\n {options.map((opt) => {\n const isActive = value === opt.value;\n const buttonStyles: CSSProperties = {\n background: isActive ? 'var(--segmented-active-bg)' : 'transparent',\n color: isActive ? 'var(--segmented-active-text)' : 'var(--segmented-inactive-text)',\n };\n\n return (\n <button\n key={opt.value}\n onClick={() => onChange?.(opt.value)}\n className=\"px-3 py-1.5 md:px-4 md:py-2 text-xs md:text-sm font-medium transition-all duration-300\"\n style={buttonStyles}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n >\n {opt.label}\n </button>\n );\n })}\n </div>\n );\n }\n);\n\nSegmentedControlGlass.displayName = 'SegmentedControlGlass';\n","import { cva } from 'class-variance-authority';\n\nexport type SparklineHeight = 'sm' | 'md' | 'lg';\nexport type SparklineGap = 'none' | 'sm' | 'md';\n\nexport const sparklineContainerVariants = cva('flex items-end', {\n variants: {\n height: {\n sm: 'h-4', // 16px\n md: 'h-6', // 24px\n lg: 'h-8', // 32px\n },\n gap: {\n none: 'gap-0',\n sm: 'gap-px', // 1px\n md: 'gap-0.5', // 2px\n },\n },\n defaultVariants: {\n height: 'md',\n gap: 'sm',\n },\n});\n\nexport const sparklineBarVariants = cva('flex-1 rounded-sm transition-all duration-300', {\n variants: {\n animated: {\n true: 'animate-sparkline-grow',\n false: '',\n },\n },\n defaultVariants: {\n animated: false,\n },\n});\n","// ========================================\n// SPARKLINE GLASS COMPONENT\n// Recharts-based sparkline following shadcn/ui Charts pattern\n// ========================================\n\nimport { forwardRef, useMemo } from 'react';\nimport { Bar, BarChart, Cell, ResponsiveContainer, Tooltip } from 'recharts';\nimport { type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/lib/utils';\nimport { sparklineContainerVariants } from '@/lib/variants/sparkline-glass-variants';\nimport { type ChartConfig } from '@/components/ui/chart';\nimport '@/glass-theme.css';\n\n// ========================================\n// SPARKLINE CONFIG TYPE\n// ========================================\n\nexport type SparklineConfig = ChartConfig;\n\n// ========================================\n// DEFAULT CONFIG\n// ========================================\n\nconst defaultSparklineConfig = {\n value: {\n label: 'Value',\n // Use existing chart-1 color with fallback to primary accent\n color: 'var(--sparkline-bar-fill, hsl(var(--chart-1-base)))',\n },\n max: {\n label: 'Maximum',\n // Use existing success color with fallback\n color: 'var(--sparkline-bar-max, var(--alert-success-text))',\n },\n} satisfies SparklineConfig;\n\n// ========================================\n// SPARKLINE PROPS\n// ========================================\n\nexport interface SparklineGlassProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, 'style'>,\n VariantProps<typeof sparklineContainerVariants> {\n /** Array of numeric values to display */\n readonly data: readonly number[];\n /** Labels for each bar (shown in tooltip) */\n readonly labels?: readonly string[];\n /** Show labels below bars */\n readonly showLabels?: boolean;\n /** Highlight the maximum value with different color */\n readonly highlightMax?: boolean;\n /** Color for regular bars (CSS variable or color) */\n readonly barColor?: string;\n /** Color for maximum bar */\n readonly maxBarColor?: string;\n /** Tooltips for each bar */\n readonly tooltips?: readonly string[];\n /** Enable animation */\n readonly animated?: boolean;\n /** Minimum bar height as percentage */\n readonly minBarHeightPercent?: number;\n /** Chart configuration (shadcn/ui pattern) */\n readonly config?: SparklineConfig;\n /** Value formatter for tooltip */\n readonly valueFormatter?: (value: number, index: number) => string;\n /** Callback when bar is clicked */\n readonly onBarClick?: (value: number, index: number) => void;\n /** Show tooltip on hover */\n readonly showTooltip?: boolean;\n}\n\n// ========================================\n// HEIGHT MAP\n// ========================================\n\nconst heightMap = {\n sm: 16,\n md: 24,\n lg: 32,\n} as const;\n\n// ========================================\n// CUSTOM TOOLTIP\n// ========================================\n\ninterface SparklineTooltipProps {\n active?: boolean;\n payload?: Array<{\n value: number;\n payload: { index: number; label?: string; value: number };\n }>;\n valueFormatter?: (value: number, index: number) => string;\n}\n\nconst SparklineTooltip = ({ active, payload, valueFormatter }: SparklineTooltipProps) => {\n if (!active || !payload?.length) {\n return null;\n }\n\n const data = payload[0];\n const value = data.value;\n const index = data.payload.index;\n const label = data.payload.label;\n\n const displayValue = valueFormatter ? valueFormatter(value, index) : value.toLocaleString();\n\n return (\n <div className=\"rounded-md border border-[var(--glass-border)] bg-[var(--glass-bg)] px-2 py-1 text-xs shadow-lg backdrop-blur-md\">\n {label && <div className=\"font-medium text-[var(--text-primary)]\">{label}</div>}\n <div className=\"text-[var(--text-secondary)]\">{displayValue}</div>\n </div>\n );\n};\n\n// ========================================\n// SPARKLINE COMPONENT\n// ========================================\n\nexport const SparklineGlass = forwardRef<HTMLDivElement, SparklineGlassProps>(\n (\n {\n data,\n labels,\n showLabels = false,\n highlightMax = false,\n barColor,\n maxBarColor,\n tooltips,\n height = 'md',\n gap = 'sm',\n animated = false,\n minBarHeightPercent = 4,\n config = defaultSparklineConfig,\n valueFormatter,\n onBarClick,\n showTooltip = true,\n className,\n ...props\n },\n ref\n ) => {\n // Transform data for Recharts\n const chartData = useMemo(() => {\n const maxValue = Math.max(...data, 0);\n const maxIndex = data.indexOf(maxValue);\n\n return data.map((value, index) => ({\n index,\n value,\n label: labels?.[index] || tooltips?.[index],\n isMax: highlightMax && index === maxIndex && value > 0,\n // Ensure minimum bar height\n displayValue:\n maxValue > 0\n ? Math.max(value, maxValue * (minBarHeightPercent / 100))\n : minBarHeightPercent,\n }));\n }, [data, labels, tooltips, highlightMax, minBarHeightPercent]);\n\n const { maxValue, maxIndex } = useMemo(() => {\n const max = Math.max(...data, 0);\n return { maxValue: max, maxIndex: data.indexOf(max) };\n }, [data]);\n\n const ariaLabel = useMemo(() => {\n if (data.length === 0) return 'Empty sparkline chart';\n return `Sparkline chart with ${data.length} data points, maximum value ${maxValue}${\n labels ? ` at ${labels[maxIndex] || `position ${maxIndex + 1}`}` : ''\n }`;\n }, [data.length, maxValue, maxIndex, labels]);\n\n // Resolve colors\n const resolvedBarColor = barColor || config.value?.color || 'var(--sparkline-bar-fill)';\n const resolvedMaxColor = maxBarColor || config.max?.color || 'var(--sparkline-bar-max)';\n\n // Gap map for bar spacing\n const gapMap = { none: 0, sm: 1, md: 2 };\n const barGap = gapMap[gap || 'sm'];\n\n const chartHeight = heightMap[height || 'md'];\n\n const handleClick = (dataPoint: (typeof chartData)[0]) => {\n if (onBarClick) {\n onBarClick(dataPoint.value, dataPoint.index);\n }\n };\n\n return (\n <div\n ref={ref}\n role=\"img\"\n aria-label={ariaLabel}\n className={cn('flex flex-col', className)}\n {...props}\n >\n {/* Chart Container - following shadcn/ui pattern */}\n <div\n className={cn(sparklineContainerVariants({ height, gap }))}\n data-chart=\"sparkline\"\n style={\n {\n '--color-value': resolvedBarColor,\n '--color-max': resolvedMaxColor,\n } as React.CSSProperties\n }\n >\n <ResponsiveContainer width=\"100%\" height={chartHeight}>\n <BarChart\n data={chartData}\n margin={{ top: 0, right: 0, bottom: 0, left: 0 }}\n barGap={barGap}\n >\n {showTooltip && (\n <Tooltip\n content={<SparklineTooltip valueFormatter={valueFormatter} />}\n cursor={false}\n isAnimationActive={false}\n />\n )}\n <Bar\n dataKey=\"displayValue\"\n radius={[2, 2, 0, 0]}\n isAnimationActive={animated}\n animationDuration={500}\n animationEasing=\"ease-out\"\n onClick={(_, index) => handleClick(chartData[index])}\n style={{ cursor: onBarClick ? 'pointer' : 'default' }}\n >\n {chartData.map((entry, index) => (\n <Cell\n key={`cell-${index}`}\n fill={entry.isMax ? resolvedMaxColor : resolvedBarColor}\n className=\"transition-colors duration-200 hover:opacity-80\"\n />\n ))}\n </Bar>\n </BarChart>\n </ResponsiveContainer>\n </div>\n\n {/* Labels */}\n {showLabels && labels && labels.length > 0 && (\n <div className=\"flex mt-1\" aria-hidden=\"true\">\n {labels.map((label, index) => (\n <span\n key={index}\n className={cn(\n 'flex-1 text-center leading-none truncate text-xs',\n 'text-(--text-muted)'\n )}\n >\n {label}\n </span>\n ))}\n </div>\n )}\n </div>\n );\n }\n);\n\nSparklineGlass.displayName = 'SparklineGlass';\n","// ========================================\n// AI CARD GLASS COMPONENT\n// AI summary card with feature list\n// ========================================\n\nimport { forwardRef } from 'react';\nimport { Sparkles, Check, Zap, Clock } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { ButtonGlass } from '../ui/button-glass';\nimport { InteractiveCard } from '../primitives';\nimport '@/glass-theme.css';\n\nexport interface AICardGlassProps extends React.HTMLAttributes<HTMLDivElement> {\n readonly onGenerate?: () => void;\n readonly features?: readonly string[];\n readonly estimatedTime?: string;\n}\n\nconst defaultFeatures: readonly string[] = [\n 'Code quality assessment',\n 'Architecture patterns',\n 'Best practices',\n];\n\nexport const AICardGlass = forwardRef<HTMLDivElement, AICardGlassProps>(\n (\n { onGenerate, features = defaultFeatures, estimatedTime = '~30 seconds', className, ...props },\n ref\n ) => {\n return (\n <InteractiveCard\n ref={ref}\n baseBg=\"var(--ai-card-bg)\"\n borderColor=\"var(--ai-card-border)\"\n hoverGlow=\"var(--ai-card-hover-glow)\"\n hoverLift\n blur=\"sm\"\n rounded=\"rounded-xl\"\n className={cn('w-full sm:w-56 md:w-64 p-3 md:p-4', className)}\n {...props}\n >\n <div\n className=\"flex items-center gap-1.5 md:gap-2 font-semibold text-xs md:text-sm mb-1.5 md:mb-2\"\n style={{ color: 'var(--text-accent)' }}\n >\n <Sparkles className=\"w-3.5 h-3.5 md:w-4 md:h-4\" />\n AI Summary\n </div>\n <p className=\"text-(length:--font-size-2xs) md:text-xs mb-1.5 md:mb-2 text-(--text-secondary)\">\n Get comprehensive analysis:\n </p>\n <ul className=\"text-(length:--font-size-2xs) md:text-xs space-y-0.5 md:space-y-1 mb-2 md:mb-3\">\n {features.map((feature, i) => (\n <li\n key={`feature-${i}`}\n className=\"flex items-center gap-1\"\n style={{ color: 'var(--text-muted)' }}\n >\n <Check\n className=\"w-2.5 h-2.5 md:w-3 md:h-3\"\n style={{ color: 'var(--status-online)' }}\n />\n {feature}\n </li>\n ))}\n </ul>\n <ButtonGlass variant=\"default\" size=\"sm\" icon={Zap} onClick={onGenerate} className=\"w-full\">\n Generate Report\n </ButtonGlass>\n <p className=\"text-(length:--font-size-2xs) md:text-xs mt-1.5 md:mt-2 text-center flex items-center justify-center gap-1 text-(--text-muted)\">\n <Clock className=\"w-2.5 h-2.5 md:w-3 md:h-3\" />\n {estimatedTime}\n </p>\n </InteractiveCard>\n );\n }\n);\n\nAICardGlass.displayName = 'AICardGlass';\n","// ========================================\n// CAREER STATS HEADER GLASS - COMPOSITE COMPONENT\n// Career statistics header with total counts\n// Level 3: Composite (extracted from CareerStatsGlass)\n// ========================================\n\nimport { forwardRef, type HTMLAttributes, type CSSProperties } from 'react';\nimport { TrendingUp, Code, GitPullRequest, FolderGit2 } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport '@/glass-theme.css';\n\nexport interface CareerStatsHeaderGlassProps extends HTMLAttributes<HTMLDivElement> {\n /** Total commits count */\n readonly totalCommits: number;\n /** Total pull requests count */\n readonly totalPRs: number;\n /** Total repositories count */\n readonly totalRepos: number;\n /** Header title */\n readonly title?: string;\n /** Stats wrap on mobile */\n readonly wrapStats?: boolean;\n}\n\nexport const CareerStatsHeaderGlass = forwardRef<\n HTMLDivElement,\n CareerStatsHeaderGlassProps\n>(\n (\n {\n totalCommits,\n totalPRs,\n totalRepos,\n title = 'Career Stats',\n wrapStats = true,\n className,\n ...props\n },\n ref\n ) => {\n const titleStyles: CSSProperties = {\n color: 'var(--text-primary)',\n };\n\n const accentStyles: CSSProperties = {\n color: 'var(--text-accent)',\n };\n\n const statsStyles: CSSProperties = {\n color: 'var(--text-secondary)',\n };\n\n return (\n <div ref={ref} className={cn('mb-4', className)} {...props}>\n <h3\n className=\"font-semibold flex items-center gap-2 mb-1\"\n style={titleStyles}\n >\n <TrendingUp className=\"w-5 h-5\" style={accentStyles} />\n {title}\n </h3>\n <p\n className={cn(\n 'text-sm flex items-center gap-2',\n wrapStats && 'flex-wrap'\n )}\n style={statsStyles}\n >\n <span className=\"flex items-center gap-1\">\n <Code className=\"w-4 h-4\" />\n {totalCommits.toLocaleString()} commits\n </span>\n <span>·</span>\n <span className=\"flex items-center gap-1\">\n <GitPullRequest className=\"w-4 h-4\" />\n {totalPRs} PRs\n </span>\n <span>·</span>\n <span className=\"flex items-center gap-1\">\n <FolderGit2 className=\"w-4 h-4\" />\n {totalRepos} repos\n </span>\n </p>\n </div>\n );\n }\n);\n\nCareerStatsHeaderGlass.displayName = 'CareerStatsHeaderGlass';\n","// ========================================\n// CIRCULAR METRIC GLASS COMPONENT\n// Compact circular metric display for mobile\n// ========================================\n\nimport { forwardRef } from 'react';\nimport { cn } from '@/lib/utils';\nimport {\n CircularProgressGlass,\n type CircularProgressGradient,\n} from '../ui/circular-progress-glass';\nimport '@/glass-theme.css';\n\n// ========================================\n// TYPES\n// ========================================\n\nexport type CircularMetricColor = 'emerald' | 'amber' | 'blue' | 'red';\n\nexport interface CircularMetricGlassProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Metric label (e.g., \"Reg\", \"Imp\") */\n readonly label: string;\n /** Metric value (0-100) */\n readonly value: number;\n /** Metric color */\n readonly color?: CircularMetricColor;\n /** Size variant */\n readonly size?: 'sm' | 'md';\n}\n\n// ========================================\n// HELPERS\n// ========================================\n\n// Map CircularMetricColor to CircularProgressGlass gradient and CSS variable\nconst colorMap: Record<\n CircularMetricColor,\n { gradient: CircularProgressGradient; textVar: string }\n> = {\n emerald: { gradient: 'emerald', textVar: 'var(--metric-success-text)' },\n amber: { gradient: 'amber', textVar: 'var(--metric-warning-text)' },\n blue: { gradient: 'blue', textVar: 'var(--metric-default-text)' },\n red: { gradient: 'rose', textVar: 'var(--metric-destructive-text)' },\n};\n\n// ========================================\n// COMPONENT\n// ========================================\n\n/**\n * CircularMetricGlass - Compact circular progress metric display\n *\n * Designed for mobile layouts where rectangular MetricCardGlass is too wide.\n * Shows a circular progress indicator with percentage inside and label below.\n *\n * @example\n * ```tsx\n * <CircularMetricGlass label=\"Reg\" value={84} color=\"emerald\" />\n * ```\n */\nexport const CircularMetricGlass = forwardRef<HTMLDivElement, CircularMetricGlassProps>(\n ({ label, value, color = 'blue', size = 'sm', className, ...props }, ref) => {\n const { gradient, textVar } = colorMap[color];\n\n return (\n <div ref={ref} className={cn('flex flex-col items-center gap-1', className)} {...props}>\n <CircularProgressGlass\n value={value}\n size={size}\n color={gradient}\n labelColor={textVar}\n thickness={size === 'sm' ? 6 : 8}\n showGlow\n glowIntensity=\"medium\"\n />\n <span className=\"text-xs font-medium\" style={{ color: textVar }}>\n {label}\n </span>\n </div>\n );\n }\n);\n\nCircularMetricGlass.displayName = 'CircularMetricGlass';\n","// ========================================\n// CONTRIBUTION METRICS GLASS - COMPOSITE COMPONENT\n// Repository contribution metrics grid\n// Level 3: Composite (extracted from RepositoryCardGlass)\n// ========================================\n\nimport { forwardRef, type HTMLAttributes, type CSSProperties } from 'react';\nimport { cn } from '@/lib/utils';\nimport '@/glass-theme.css';\n\nexport interface ContributionMetricsGlassProps extends HTMLAttributes<HTMLDivElement> {\n /** User's commit count */\n readonly userCommits: number;\n /** User's contribution percentage */\n readonly userContribution: number;\n /** Total project commits (calculated if not provided) */\n readonly totalProjectCommits?: number;\n /** Estimated lines of code */\n readonly estimatedLines?: number;\n /** Grid layout (1 or 2 columns) */\n readonly columns?: 1 | 2;\n}\n\nexport const ContributionMetricsGlass = forwardRef<\n HTMLDivElement,\n ContributionMetricsGlassProps\n>(\n (\n {\n userCommits,\n userContribution,\n totalProjectCommits: providedTotal,\n estimatedLines: providedLines,\n columns = 2,\n className,\n ...props\n },\n ref\n ) => {\n // Calculate total project commits from contribution percentage\n const totalProjectCommits =\n providedTotal ??\n (userContribution > 0\n ? Math.round(userCommits / (userContribution / 100))\n : userCommits);\n\n const estimatedLines = providedLines ?? Math.round(userCommits * 12);\n\n const cardStyles: CSSProperties = {\n background: 'var(--card-bg)',\n borderColor: 'var(--card-border)',\n };\n\n const mutedStyles: CSSProperties = {\n color: 'var(--text-muted)',\n };\n\n const primaryStyles: CSSProperties = {\n color: 'var(--text-primary)',\n };\n\n const columnClasses = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 sm:grid-cols-2',\n };\n\n return (\n <div\n ref={ref}\n className={cn('grid gap-2', columnClasses[columns], className)}\n {...props}\n >\n <div className=\"p-2.5 rounded-lg border\" style={cardStyles}>\n <div className=\"text-xs\" style={mutedStyles}>\n Your Contribution\n </div>\n <div className=\"font-semibold\" style={primaryStyles}>\n {userCommits.toLocaleString()} commits\n </div>\n <div className=\"text-xs\" style={mutedStyles}>\n {userContribution}%\n </div>\n </div>\n <div className=\"p-2.5 rounded-lg border\" style={cardStyles}>\n <div className=\"text-xs\" style={mutedStyles}>\n Full Project\n </div>\n <div className=\"font-semibold\" style={primaryStyles}>\n {totalProjectCommits.toLocaleString()} commits\n </div>\n <div className=\"text-xs\" style={mutedStyles}>\n ~{estimatedLines.toLocaleString()} lines\n </div>\n </div>\n </div>\n );\n }\n);\n\nContributionMetricsGlass.displayName = 'ContributionMetricsGlass';\n","// ========================================\n// METRIC CARD GLASS COMPONENT\n// Metric display card with progress, sparkline, and trend\n// Domain-specific composite component following shadcn/ui patterns\n// ========================================\n\nimport { forwardRef, type CSSProperties, type ReactNode } from 'react';\nimport { TrendingUp, TrendingDown, Minus } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { ProgressGlass } from '../specialized/progress-glass';\nimport { SparklineGlass } from '../specialized/sparkline-glass';\nimport { InteractiveCard } from '../primitives';\nimport '@/glass-theme.css';\n\nimport type { ProgressGradient } from '@/lib/variants/progress-glass-variants';\n\n// ========================================\n// TYPES\n// ========================================\n\n/**\n * Metric variant system (following AlertGlass, BadgeGlass pattern)\n * - default: Blue (primary metric)\n * - secondary: Gray (neutral metric)\n * - success: Green (positive metric)\n * - warning: Yellow (caution metric)\n * - destructive: Red (negative metric)\n */\nexport type MetricVariant =\n | 'default' // shadcn/ui base (blue)\n | 'secondary' // shadcn/ui base (gray)\n | 'success' // Glass UI extension (green)\n | 'warning' // Glass UI extension (yellow)\n | 'destructive'; // shadcn/ui base (red)\n\n/** @deprecated Use MetricVariant instead */\nexport type MetricColor = 'emerald' | 'amber' | 'blue' | 'red';\n\nexport type TrendDirection = 'up' | 'down' | 'neutral';\n\n/**\n * Detailed change object with trend information\n */\nexport interface MetricChange {\n /** Change value (e.g., 12.5 for +12.5%) */\n readonly value: number;\n /** Trend direction (auto-detected from value if not provided) */\n readonly direction?: TrendDirection;\n /** Optional period label (e.g., \"vs last month\") */\n readonly period?: string;\n}\n\n/** @deprecated Use MetricChange instead */\nexport interface MetricTrend {\n readonly value: number;\n readonly direction: TrendDirection;\n readonly label?: string;\n}\n\n/**\n * MetricCardGlass Props\n *\n * Follows shadcn/ui Card pattern with Glass UI extensions.\n * Compatible with AlertGlass, BadgeGlass, ButtonGlass variant system.\n *\n * @example Simple usage (shadcn/ui style)\n * ```tsx\n * <MetricCardGlass\n * title=\"Total Revenue\"\n * value=\"$45,231\"\n * change=\"+12.5%\"\n * variant=\"success\"\n * icon={<DollarSign />}\n * />\n * ```\n *\n * @example With progress and sparkline (Glass UI extensions)\n * ```tsx\n * <MetricCardGlass\n * title=\"Completion Rate\"\n * value=\"85%\"\n * description=\"Project milestones\"\n * change={{ value: 5.2, direction: 'up', period: 'vs last month' }}\n * variant=\"success\"\n * progress={85}\n * sparklineData={[70, 75, 78, 80, 82, 84, 85]}\n * showProgress\n * showSparkline\n * />\n * ```\n */\nexport interface MetricCardGlassProps extends React.HTMLAttributes<HTMLDivElement> {\n // ========================================\n // CORE PROPS (shadcn/ui compatible)\n // ========================================\n\n /** Metric title (shadcn/ui Card: title) */\n readonly title: string;\n\n /** Display value (shadcn/ui Card: value) */\n readonly value: string | number;\n\n /** Optional description/subtitle (shadcn/ui Card: description) */\n readonly description?: string;\n\n /** Change indicator (shadcn/ui: change). Can be string \"+12.5%\" or detailed object */\n readonly change?: string | number | MetricChange;\n\n /** Semantic variant (follows AlertGlass, BadgeGlass pattern) */\n readonly variant?: MetricVariant;\n\n /** Icon to display */\n readonly icon?: ReactNode;\n\n // ========================================\n // GLASS UI EXTENSIONS\n // ========================================\n\n /** Data for sparkline visualization */\n readonly sparklineData?: readonly number[];\n\n /** Show sparkline chart */\n readonly showSparkline?: boolean;\n\n /** Show progress bar (requires progress prop) */\n readonly showProgress?: boolean;\n\n /** Progress percentage (0-100, separate from display value) */\n readonly progress?: number;\n\n // ========================================\n // DEPRECATED (backward compatibility)\n // ========================================\n\n /** @deprecated Use `title` instead. Will be removed in v2.0 */\n readonly label?: string;\n\n /** @deprecated Use `variant` instead. Mapping: emerald→success, amber→warning, blue→default, red→destructive. Will be removed in v2.0 */\n readonly color?: MetricColor;\n\n /** @deprecated Format value before passing. Use `value` prop directly. Will be removed in v2.0 */\n readonly valueFormatter?: (value: number) => string;\n\n /** @deprecated Use `description` instead. Will be removed in v2.0 */\n readonly valueSuffix?: string;\n\n /** @deprecated Use `change` instead. Will be removed in v2.0 */\n readonly trend?: MetricTrend;\n}\n\n// ========================================\n// VARIANT SYSTEM (following AlertGlass, BadgeGlass pattern)\n// ========================================\n\ntype VariantStyle = { bg: string; text: string; border: string; glow: string };\n\n// New variant-based system (shadcn/ui compatible)\nconst variantStyles: Record<MetricVariant, VariantStyle> = {\n default: {\n bg: 'var(--metric-default-bg)',\n text: 'var(--metric-default-text)',\n border: 'var(--metric-default-border)',\n glow: 'var(--metric-default-glow)',\n },\n secondary: {\n bg: 'var(--metric-secondary-bg)',\n text: 'var(--metric-secondary-text)',\n border: 'var(--metric-secondary-border)',\n glow: 'var(--metric-secondary-glow)',\n },\n success: {\n bg: 'var(--metric-success-bg)',\n text: 'var(--metric-success-text)',\n border: 'var(--metric-success-border)',\n glow: 'var(--metric-success-glow)',\n },\n warning: {\n bg: 'var(--metric-warning-bg)',\n text: 'var(--metric-warning-text)',\n border: 'var(--metric-warning-border)',\n glow: 'var(--metric-warning-glow)',\n },\n destructive: {\n bg: 'var(--metric-destructive-bg)',\n text: 'var(--metric-destructive-text)',\n border: 'var(--metric-destructive-border)',\n glow: 'var(--metric-destructive-glow)',\n },\n};\n\n// Map MetricVariant to ProgressGradient\nconst variantToGradient: Record<MetricVariant, ProgressGradient> = {\n default: 'blue',\n secondary: 'cyan',\n success: 'emerald',\n warning: 'amber',\n destructive: 'rose',\n};\n\n// ========================================\n// DEPRECATED: Old color system (backward compatibility)\n// ========================================\n\n/** @deprecated Use variantStyles instead */\nconst colorToVariant: Record<MetricColor, MetricVariant> = {\n emerald: 'success',\n amber: 'warning',\n blue: 'default',\n red: 'destructive',\n};\n\n// Trend direction colors - using existing alert CSS variables\nconst trendColors: Record<TrendDirection, string> = {\n up: 'text-[var(--alert-success-text)]',\n down: 'text-[var(--alert-destructive-text)]',\n neutral: 'text-[var(--text-muted)]',\n};\n\n// Trend icons\nconst TrendIcons: Record<TrendDirection, typeof TrendingUp> = {\n up: TrendingUp,\n down: TrendingDown,\n neutral: Minus,\n};\n\n// ========================================\n// COMPONENT\n// ========================================\n\nexport const MetricCardGlass = forwardRef<HTMLDivElement, MetricCardGlassProps>(\n (\n {\n // New API\n title,\n value,\n description,\n change,\n variant,\n progress,\n // Deprecated API (backward compatibility)\n label,\n color,\n valueFormatter,\n valueSuffix,\n trend,\n // Common props\n icon,\n sparklineData,\n showSparkline = true,\n showProgress = true,\n className,\n ...props\n },\n ref\n ) => {\n // ========================================\n // BACKWARD COMPATIBILITY LAYER\n // ========================================\n\n // Support old `label` prop\n const actualTitle = title || label;\n if (!actualTitle) {\n console.warn('[MetricCardGlass] Missing required prop: `title` (or deprecated `label`)');\n }\n if (label && !title) {\n console.warn(\n '[MetricCardGlass] Deprecated prop `label` used. Please use `title` instead. Will be removed in v2.0'\n );\n }\n\n // Support old `color` prop → `variant`\n const actualVariant: MetricVariant = variant || (color ? colorToVariant[color] : 'default');\n if (color && !variant) {\n console.warn(\n `[MetricCardGlass] Deprecated prop \\`color=\"${color}\"\\` used. Please use \\`variant=\"${colorToVariant[color]}\"\\` instead. Will be removed in v2.0`\n );\n }\n\n // Support old `valueSuffix` → `description`\n const actualDescription = description || valueSuffix;\n if (valueSuffix && !description) {\n console.warn(\n '[MetricCardGlass] Deprecated prop `valueSuffix` used. Please use `description` instead. Will be removed in v2.0'\n );\n }\n\n // Support old `trend` → `change`\n const actualChange =\n change ||\n (trend\n ? {\n value: trend.value,\n direction: trend.direction,\n period: trend.label,\n }\n : undefined);\n if (trend && !change) {\n console.warn(\n '[MetricCardGlass] Deprecated prop `trend` used. Please use `change` instead. Will be removed in v2.0'\n );\n }\n\n // Support old `valueFormatter`\n const displayValue =\n typeof value === 'number' && valueFormatter ? valueFormatter(value) : String(value);\n if (valueFormatter) {\n console.warn(\n '[MetricCardGlass] Deprecated prop `valueFormatter` used. Please format value before passing. Will be removed in v2.0'\n );\n }\n\n // Get actual progress value (use prop or infer from value if it's 0-100)\n const actualProgress =\n progress ?? (typeof value === 'number' && value >= 0 && value <= 100 ? value : undefined);\n\n // ========================================\n // COMPONENT LOGIC\n // ========================================\n\n const variantVars = variantStyles[actualVariant];\n const hasSparkline = showSparkline && sparklineData && sparklineData.length > 0;\n\n const valueStyles: CSSProperties = {\n color: variantVars.text,\n textShadow: variantVars.glow,\n };\n\n // Parse and render change indicator\n const renderChange = () => {\n if (!actualChange) return null;\n\n // Handle simple string or number\n if (typeof actualChange === 'string' || typeof actualChange === 'number') {\n const changeStr = String(actualChange);\n const isPositive =\n changeStr.startsWith('+') || (!changeStr.startsWith('-') && parseFloat(changeStr) > 0);\n const isNegative = changeStr.startsWith('-') || parseFloat(changeStr) < 0;\n const direction: TrendDirection = isPositive ? 'up' : isNegative ? 'down' : 'neutral';\n const TrendIcon = TrendIcons[direction];\n\n return (\n <div className={cn('flex items-center gap-1 text-xs', trendColors[direction])}>\n <TrendIcon className=\"w-3 h-3\" aria-hidden=\"true\" />\n <span className=\"font-medium\">{changeStr}</span>\n </div>\n );\n }\n\n // Handle detailed MetricChange object\n const changeValue = actualChange.value;\n const direction =\n actualChange.direction || (changeValue > 0 ? 'up' : changeValue < 0 ? 'down' : 'neutral');\n const TrendIcon = TrendIcons[direction];\n const displayChange = direction === 'down' ? `-${Math.abs(changeValue)}` : `+${changeValue}`;\n\n return (\n <div className={cn('flex items-center gap-1 text-xs', trendColors[direction])}>\n <TrendIcon className=\"w-3 h-3\" aria-hidden=\"true\" />\n <span className=\"font-medium\">{displayChange}%</span>\n {actualChange.period && (\n <span className=\"text-[var(--text-muted)] ml-0.5\">{actualChange.period}</span>\n )}\n </div>\n );\n };\n\n return (\n <InteractiveCard\n ref={ref}\n baseBg={variantVars.bg}\n borderColor={variantVars.border}\n hoverGlow={variantVars.glow}\n hoverLift\n blur=\"sm\"\n rounded=\"rounded-xl\"\n className={cn('p-3 md:p-4', className)}\n {...props}\n >\n {/* Header with icon and change indicator */}\n <div className=\"flex items-start justify-between mb-2\">\n <div className=\"flex items-center gap-2\">\n {icon && (\n <div className=\"text-(--text-muted)\" aria-hidden=\"true\">\n {icon}\n </div>\n )}\n <span className=\"text-(length:--font-size-2xs) sm:text-xs md:text-sm font-medium truncate text-(--text-secondary)\">\n {actualTitle}\n </span>\n </div>\n {renderChange()}\n </div>\n\n {/* Value display */}\n <div className=\"flex flex-col items-center mb-2 md:mb-3 gap-1\">\n <span\n className=\"font-bold text-lg sm:text-xl md:text-2xl whitespace-nowrap\"\n style={valueStyles}\n >\n {displayValue}\n </span>\n {actualDescription && (\n <span className=\"text-(length:--font-size-2xs) text-(--text-muted)\">\n {actualDescription}\n </span>\n )}\n </div>\n\n {/* Progress and Sparkline */}\n {hasSparkline ? (\n <div className=\"space-y-2\">\n {showProgress && actualProgress !== undefined && (\n <ProgressGlass\n value={actualProgress}\n gradient={variantToGradient[actualVariant]}\n size=\"sm\"\n />\n )}\n <SparklineGlass\n data={sparklineData}\n height=\"sm\"\n gap=\"sm\"\n className=\"w-full\"\n barColor={variantVars.text}\n highlightMax\n aria-label={`${actualTitle} trend`}\n />\n </div>\n ) : showProgress && actualProgress !== undefined ? (\n <ProgressGlass\n value={actualProgress}\n gradient={variantToGradient[actualVariant]}\n size=\"sm\"\n />\n ) : null}\n </InteractiveCard>\n );\n }\n);\n\nMetricCardGlass.displayName = 'MetricCardGlass';\n","// ========================================\n// METRICS GRID GLASS - COMPOSITE COMPONENT\n// Responsive grid of metric cards\n// Level 3: Composite (extracted from TrustScoreCardGlass)\n// ========================================\n\nimport { forwardRef, type HTMLAttributes } from 'react';\nimport { cn } from '@/lib/utils';\nimport { MetricCardGlass, type MetricVariant } from './metric-card-glass';\nimport '@/glass-theme.css';\n\nexport interface MetricData {\n readonly title: string;\n readonly value: string | number;\n readonly variant: MetricVariant;\n}\n\nexport interface MetricsGridGlassProps extends HTMLAttributes<HTMLDivElement> {\n /** Array of metrics to display */\n readonly metrics: readonly MetricData[];\n /** Number of columns on desktop (1-6) */\n readonly columns?: 1 | 2 | 3 | 4 | 5 | 6;\n /** Gap size */\n readonly gap?: 'sm' | 'md' | 'lg';\n}\n\nexport const MetricsGridGlass = forwardRef<HTMLDivElement, MetricsGridGlassProps>(\n ({ metrics, columns = 4, gap = 'md', className, ...props }, ref) => {\n const gapClasses = {\n sm: 'gap-2',\n md: 'gap-4',\n lg: 'gap-6',\n };\n\n const columnClasses = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 md:grid-cols-3',\n 4: 'grid-cols-2 sm:grid-cols-3 md:grid-cols-4',\n 5: 'grid-cols-2 sm:grid-cols-3 md:grid-cols-5',\n 6: 'grid-cols-2 sm:grid-cols-3 md:grid-cols-6',\n };\n\n if (metrics.length === 0) {\n return null;\n }\n\n return (\n <div\n ref={ref}\n className={cn('grid', columnClasses[columns], gapClasses[gap], className)}\n {...props}\n >\n {metrics.map((metric) => (\n <MetricCardGlass\n key={metric.title}\n title={metric.title}\n value={metric.value}\n variant={metric.variant}\n />\n ))}\n </div>\n );\n }\n);\n\nMetricsGridGlass.displayName = 'MetricsGridGlass';\n","// ========================================\n// REPOSITORY CARD GLASS COMPONENT\n// Expandable repository card with metrics\n// ========================================\n\nimport { forwardRef, type CSSProperties } from 'react';\nimport { ChevronDown, ChevronUp, Star, ExternalLink, Sparkles, AlertTriangle } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { StatusIndicatorGlass } from '../specialized/status-indicator-glass';\nimport { ButtonGlass } from '../ui/button-glass';\nimport { InteractiveCard } from '../primitives';\nimport '@/glass-theme.css';\n\nexport type RepositoryFlagType = 'green' | 'yellow' | 'red';\n\nexport interface RepositoryCardGlassProps extends React.HTMLAttributes<HTMLDivElement> {\n readonly name: string;\n readonly languages: string;\n readonly commits: number;\n readonly contribution: number;\n readonly stars?: number;\n readonly flagType?: RepositoryFlagType;\n readonly issues?: readonly string[];\n readonly expanded?: boolean;\n readonly onToggle?: () => void;\n readonly onGitHubClick?: () => void;\n readonly onAIAnalysisClick?: () => void;\n}\n\nexport const RepositoryCardGlass = forwardRef<HTMLDivElement, RepositoryCardGlassProps>(\n (\n {\n name,\n languages,\n commits,\n contribution,\n stars = 0,\n flagType = 'green',\n issues = [],\n expanded = false,\n onToggle,\n onGitHubClick,\n onAIAnalysisClick,\n className,\n ...props\n },\n ref\n ) => {\n // Calculate total project commits from contribution percentage\n const totalProjectCommits =\n contribution > 0 ? Math.round(commits / (contribution / 100)) : commits;\n const estimatedLines = Math.round(commits * 12);\n\n const expandedStyles: CSSProperties = {\n background: 'var(--expanded-bg)',\n borderColor: 'var(--card-border)',\n };\n\n const metricCardStyles: CSSProperties = {\n background: 'var(--card-bg)',\n borderColor: 'var(--card-border)',\n };\n\n return (\n <InteractiveCard\n ref={ref}\n baseBg=\"var(--card-bg)\"\n hoverBg=\"var(--card-hover-bg)\"\n borderColor=\"var(--card-border)\"\n hoverLift={false}\n blur=\"sm\"\n rounded=\"rounded-xl\"\n className={cn('overflow-hidden', className)}\n {...props}\n >\n {/* Main Card Content */}\n <div\n className=\"p-3 md:p-3.5 cursor-pointer\"\n onClick={onToggle}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onToggle?.();\n }\n }}\n aria-expanded={expanded}\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2.5\">\n <span className=\"font-medium text-sm\" style={{ color: 'var(--text-primary)' }}>\n {name}\n </span>\n <StatusIndicatorGlass type={flagType} />\n </div>\n <div className=\"flex items-center gap-2\">\n {stars > 0 && (\n <span\n className=\"flex items-center gap-1 text-xs\"\n style={{ color: 'var(--status-away)' }}\n >\n <Star className=\"w-3 h-3\" />\n {stars}\n </span>\n )}\n {expanded ? (\n <ChevronUp className=\"w-4 h-4\" style={{ color: 'var(--text-muted)' }} />\n ) : (\n <ChevronDown className=\"w-4 h-4\" style={{ color: 'var(--text-muted)' }} />\n )}\n </div>\n </div>\n <div className=\"text-xs mt-1.5\" style={{ color: 'var(--text-muted)' }}>\n {languages}\n </div>\n <div className=\"text-xs mt-0.5\" style={{ color: 'var(--text-secondary)' }}>\n {commits} commits · {contribution}%\n </div>\n </div>\n\n {/* Expanded Section */}\n {expanded && (\n <div className=\"border-t p-3.5 space-y-3\" style={expandedStyles}>\n {/* Issues Alert */}\n {issues.length > 0 && (\n <div\n className=\"p-3 rounded-xl border\"\n style={{\n background: 'var(--alert-danger-bg)',\n borderColor: 'var(--alert-danger-border)',\n }}\n >\n <div\n className=\"text-xs font-semibold flex items-center gap-1.5 mb-1.5\"\n style={{ color: 'var(--alert-danger-text)' }}\n >\n <AlertTriangle className=\"w-3.5 h-3.5\" />\n Issues\n </div>\n {issues.map((issue, index) => (\n <div\n key={index}\n className=\"text-xs opacity-70\"\n style={{ color: 'var(--alert-danger-text)' }}\n >\n • {issue}\n </div>\n ))}\n </div>\n )}\n\n {/* Contribution Metrics */}\n <div className=\"grid grid-cols-2 gap-2\">\n <div className=\"p-2.5 rounded-lg border\" style={metricCardStyles}>\n <div className=\"text-xs\" style={{ color: 'var(--text-muted)' }}>\n Your Contribution\n </div>\n <div className=\"font-semibold\" style={{ color: 'var(--text-primary)' }}>\n {commits} commits\n </div>\n <div className=\"text-xs\" style={{ color: 'var(--text-muted)' }}>\n {contribution}%\n </div>\n </div>\n <div className=\"p-2.5 rounded-lg border\" style={metricCardStyles}>\n <div className=\"text-xs\" style={{ color: 'var(--text-muted)' }}>\n Full Project\n </div>\n <div className=\"font-semibold\" style={{ color: 'var(--text-primary)' }}>\n {totalProjectCommits} commits\n </div>\n <div className=\"text-xs\" style={{ color: 'var(--text-muted)' }}>\n ~{estimatedLines} lines\n </div>\n </div>\n </div>\n\n {/* Action Buttons */}\n <div className=\"flex flex-col sm:flex-row gap-2\">\n <ButtonGlass\n variant=\"secondary\"\n size=\"sm\"\n icon={ExternalLink}\n onClick={(e) => {\n e.stopPropagation();\n onGitHubClick?.();\n }}\n className=\"flex-1\"\n >\n GitHub\n </ButtonGlass>\n <ButtonGlass\n variant=\"default\"\n size=\"sm\"\n icon={Sparkles}\n onClick={(e) => {\n e.stopPropagation();\n onAIAnalysisClick?.();\n }}\n className=\"flex-1\"\n >\n AI Analysis\n </ButtonGlass>\n </div>\n </div>\n )}\n </InteractiveCard>\n );\n }\n);\n\nRepositoryCardGlass.displayName = 'RepositoryCardGlass';\n","// ========================================\n// REPOSITORY HEADER GLASS - COMPOSITE COMPONENT\n// Repository name with status indicator and stars\n// Level 3: Composite (extracted from RepositoryCardGlass)\n// ========================================\n\nimport { forwardRef, type HTMLAttributes, type CSSProperties } from 'react';\nimport { Star, ChevronDown, ChevronUp } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { StatusIndicatorGlass } from '../specialized/status-indicator-glass';\nimport '@/glass-theme.css';\n\nexport type RepositoryFlagType = 'green' | 'yellow' | 'red';\n\nexport interface RepositoryHeaderGlassProps extends HTMLAttributes<HTMLDivElement> {\n /** Repository name */\n readonly name: string;\n /** Flag/status type */\n readonly flagType?: RepositoryFlagType;\n /** Star count */\n readonly stars?: number;\n /** Is expanded state */\n readonly expanded?: boolean;\n /** Abbreviated star count for mobile (1.2k instead of 1234) */\n readonly abbreviatedStars?: boolean;\n}\n\nexport const RepositoryHeaderGlass = forwardRef<\n HTMLDivElement,\n RepositoryHeaderGlassProps\n>(\n (\n {\n name,\n flagType = 'green',\n stars = 0,\n expanded = false,\n abbreviatedStars = false,\n className,\n ...props\n },\n ref\n ) => {\n const titleStyles: CSSProperties = {\n color: 'var(--text-primary)',\n };\n\n const starStyles: CSSProperties = {\n color: 'var(--status-away)',\n };\n\n const mutedStyles: CSSProperties = {\n color: 'var(--text-muted)',\n };\n\n const formatStars = (count: number): string => {\n if (!abbreviatedStars) return String(count);\n if (count >= 1000000) return `${(count / 1000000).toFixed(1)}M`;\n if (count >= 1000) return `${(count / 1000).toFixed(1)}k`;\n return String(count);\n };\n\n return (\n <div\n ref={ref}\n className={cn('flex items-center justify-between', className)}\n {...props}\n >\n <div className=\"flex items-center gap-2.5\">\n <span className=\"font-medium text-sm\" style={titleStyles}>\n {name}\n </span>\n <StatusIndicatorGlass type={flagType} />\n </div>\n <div className=\"flex items-center gap-2\">\n {stars > 0 && (\n <span className=\"flex items-center gap-1 text-xs\" style={starStyles}>\n <Star className=\"w-3 h-3\" />\n {formatStars(stars)}\n </span>\n )}\n {expanded ? (\n <ChevronUp className=\"w-4 h-4\" style={mutedStyles} />\n ) : (\n <ChevronDown className=\"w-4 h-4\" style={mutedStyles} />\n )}\n </div>\n </div>\n );\n }\n);\n\nRepositoryHeaderGlass.displayName = 'RepositoryHeaderGlass';\n","// ========================================\n// REPOSITORY METADATA GLASS - COMPOSITE COMPONENT\n// Repository languages, commits, and contribution info\n// Level 3: Composite (extracted from RepositoryCardGlass)\n// ========================================\n\nimport { forwardRef, type HTMLAttributes, type CSSProperties } from 'react';\nimport { cn } from '@/lib/utils';\nimport '@/glass-theme.css';\n\nexport interface RepositoryMetadataGlassProps extends HTMLAttributes<HTMLDivElement> {\n /** Programming languages used */\n readonly languages: string;\n /** Number of commits */\n readonly commits: number;\n /** Contribution percentage */\n readonly contribution: number;\n /** Stacked layout for mobile */\n readonly stacked?: boolean;\n}\n\nexport const RepositoryMetadataGlass = forwardRef<\n HTMLDivElement,\n RepositoryMetadataGlassProps\n>(\n (\n {\n languages,\n commits,\n contribution,\n stacked = false,\n className,\n ...props\n },\n ref\n ) => {\n const mutedStyles: CSSProperties = {\n color: 'var(--text-muted)',\n };\n\n const secondaryStyles: CSSProperties = {\n color: 'var(--text-secondary)',\n };\n\n return (\n <div\n ref={ref}\n className={cn(stacked ? 'space-y-0.5' : 'space-y-1', className)}\n {...props}\n >\n <div className=\"text-xs\" style={mutedStyles}>\n {languages}\n </div>\n <div className=\"text-xs\" style={secondaryStyles}>\n {commits.toLocaleString()} commits · {contribution}%\n </div>\n </div>\n );\n }\n);\n\nRepositoryMetadataGlass.displayName = 'RepositoryMetadataGlass';\n","// ========================================\n// TRUST SCORE DISPLAY GLASS - COMPOSITE COMPONENT\n// Large animated trust score number with title\n// Level 3: Composite (extracted from TrustScoreCardGlass)\n// ========================================\n\nimport { forwardRef, type HTMLAttributes, type CSSProperties } from 'react';\nimport { Target } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport '@/glass-theme.css';\n\nexport interface TrustScoreDisplayGlassProps extends HTMLAttributes<HTMLDivElement> {\n /** Score value (0-100) */\n readonly score: number;\n /** Maximum score (default: 100) */\n readonly maxScore?: number;\n /** Title text */\n readonly title?: string;\n /** Show icon */\n readonly showIcon?: boolean;\n /** Size variant */\n readonly size?: 'sm' | 'md' | 'lg';\n}\n\nexport const TrustScoreDisplayGlass = forwardRef<HTMLDivElement, TrustScoreDisplayGlassProps>(\n (\n {\n score,\n maxScore = 100,\n title = 'Overall Trust Score',\n showIcon = true,\n size = 'md',\n className,\n ...props\n },\n ref\n ) => {\n const titleStyles: CSSProperties = {\n color: 'var(--text-primary)',\n };\n\n const accentStyles: CSSProperties = {\n color: 'var(--text-accent)',\n };\n\n const mutedStyles: CSSProperties = {\n color: 'var(--text-muted)',\n };\n\n const sizeClasses = {\n sm: { title: 'text-base', score: 'text-2xl', max: 'text-lg', icon: 'w-4 h-4' },\n md: { title: 'text-lg', score: 'text-4xl', max: 'text-xl', icon: 'w-5 h-5' },\n lg: { title: 'text-xl', score: 'text-5xl', max: 'text-2xl', icon: 'w-6 h-6' },\n };\n\n const sizes = sizeClasses[size];\n\n return (\n <div ref={ref} className={cn('flex items-center justify-between', className)} {...props}>\n <h2\n className={cn('font-semibold flex items-center gap-2', sizes.title)}\n style={titleStyles}\n >\n {showIcon && <Target className={sizes.icon} style={accentStyles} />}\n {title}\n </h2>\n <div className=\"flex items-center gap-2 animate-[score-pulse_2s_ease-in-out_infinite]\">\n <span\n className={cn(sizes.score, 'font-bold bg-clip-text text-transparent')}\n style={{ backgroundImage: 'var(--score-gradient)' }}\n >\n {score}\n </span>\n <span className={sizes.max} style={mutedStyles}>\n / {maxScore}\n </span>\n </div>\n </div>\n );\n }\n);\n\nTrustScoreDisplayGlass.displayName = 'TrustScoreDisplayGlass';\n","// ========================================\n// USER INFO GLASS - COMPOSITE COMPONENT\n// User name, username, and join date display\n// Level 3: Composite (extracted from ProfileHeaderGlass)\n// ========================================\n\nimport { forwardRef, type HTMLAttributes, type CSSProperties } from 'react';\nimport { Calendar, ExternalLink } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport '@/glass-theme.css';\n\nexport interface UserInfoGlassProps extends HTMLAttributes<HTMLDivElement> {\n /** Full name */\n readonly name: string;\n /** Username (without @) */\n readonly username: string;\n /** Join date string (e.g., \"Jan 2023\") */\n readonly joinDate: string;\n /** Username link URL (default: #) */\n readonly profileUrl?: string;\n /** Layout orientation */\n readonly layout?: 'vertical' | 'horizontal';\n}\n\nexport const UserInfoGlass = forwardRef<HTMLDivElement, UserInfoGlassProps>(\n (\n {\n name,\n username,\n joinDate,\n profileUrl = '#',\n layout = 'vertical',\n className,\n ...props\n },\n ref\n ) => {\n const titleStyles: CSSProperties = {\n color: 'var(--text-primary)',\n };\n\n const metaStyles: CSSProperties = {\n color: 'var(--text-secondary)',\n };\n\n const linkStyles: CSSProperties = {\n color: 'var(--text-accent)',\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n layout === 'vertical' ? 'space-y-1' : 'flex items-center gap-4',\n className\n )}\n {...props}\n >\n <h1\n className={cn(\n 'font-bold',\n layout === 'vertical' ? 'text-lg md:text-xl' : 'text-xl'\n )}\n style={titleStyles}\n >\n {name}\n </h1>\n <div\n className={cn(\n 'flex items-center gap-2 text-sm flex-wrap',\n layout === 'vertical' && 'mt-0.5'\n )}\n style={metaStyles}\n >\n <a\n href={profileUrl}\n className=\"flex items-center gap-1 hover:underline\"\n style={linkStyles}\n aria-label={`View ${username}'s profile`}\n >\n @{username} <ExternalLink className=\"w-3 h-3\" />\n </a>\n <span>·</span>\n <span className=\"flex items-center gap-1\">\n <Calendar className=\"w-3 h-3\" /> Joined {joinDate}\n </span>\n </div>\n </div>\n );\n }\n);\n\nUserInfoGlass.displayName = 'UserInfoGlass';\n","// ========================================\n// USER STATS LINE GLASS - COMPOSITE COMPONENT\n// User statistics line (repos, followers, following)\n// Level 3: Composite (extracted from ProfileHeaderGlass)\n// ========================================\n\nimport { forwardRef, type HTMLAttributes } from 'react';\nimport { FolderGit2, Users, User } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { StatItemGlass } from '../atomic/stat-item-glass';\nimport '@/glass-theme.css';\n\nexport interface UserStatsLineGlassProps extends HTMLAttributes<HTMLDivElement> {\n /** Number of repositories */\n readonly repos: number;\n /** Number of followers */\n readonly followers: number;\n /** Number of following */\n readonly following: number;\n /** Wrap stats on mobile */\n readonly wrap?: boolean;\n /** Abbreviated numbers for mobile (1.2k instead of 1234) */\n readonly abbreviated?: boolean;\n}\n\nexport const UserStatsLineGlass = forwardRef<HTMLDivElement, UserStatsLineGlassProps>(\n (\n {\n repos,\n followers,\n following,\n wrap = true,\n abbreviated = false,\n className,\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex items-center gap-4 text-sm',\n wrap && 'flex-wrap',\n className\n )}\n {...props}\n >\n <StatItemGlass\n icon={FolderGit2}\n value={repos}\n label=\"repos\"\n abbreviated={abbreviated}\n />\n <StatItemGlass\n icon={Users}\n value={followers}\n label=\"followers\"\n abbreviated={abbreviated}\n />\n <StatItemGlass\n icon={User}\n value={following}\n label=\"following\"\n abbreviated={abbreviated}\n />\n </div>\n );\n }\n);\n\nUserStatsLineGlass.displayName = 'UserStatsLineGlass';\n","// ========================================\n// YEAR CARD GLASS COMPONENT\n// Year card for career timeline / analytics\n// Domain-specific composite component following shadcn/ui patterns\n// ========================================\n\nimport { forwardRef, type CSSProperties, type ReactNode } from 'react';\nimport { ChevronDown, ChevronUp } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { BadgeGlass } from '../ui/badge-glass';\nimport { ProgressGlass } from '../specialized/progress-glass';\nimport { SparklineGlass } from '../specialized/sparkline-glass';\nimport { ButtonGlass } from '../ui/button-glass';\nimport { InteractiveCard } from '../primitives';\nimport { InsightCardGlass } from '../atomic/insight-card-glass';\nimport type { ProgressGradient } from '@/lib/variants/progress-glass-variants';\nimport '@/glass-theme.css';\n\n// ========================================\n// TYPES\n// ========================================\n\nexport interface YearCardGlassInsight {\n readonly variant?: 'default' | 'tip' | 'highlight' | 'warning' | 'stat' | 'growth' | 'decline';\n readonly emoji?: string;\n readonly text: string;\n readonly detail?: string;\n}\n\nexport interface YearCardGlassStat {\n readonly label: string;\n readonly value: string | number;\n readonly icon?: ReactNode;\n}\n\nexport interface YearCardGlassProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Year to display (string or number) */\n readonly year: string | number;\n /** Emoji for the badge */\n readonly emoji: string;\n /** Label for the badge (e.g., \"Peak Year\") */\n readonly label: string;\n /** Primary metric value (e.g., \"629 commits\") */\n readonly commits: string;\n /** Progress percentage (0-100) */\n readonly progress: number;\n /** Whether the card is expanded to show details */\n readonly isExpanded?: boolean;\n /** Progress bar gradient color */\n readonly gradient?: ProgressGradient;\n /** Number of PRs (shown in expanded view) */\n readonly prs?: number;\n /** Number of repos (shown in expanded view) */\n readonly repos?: number;\n /** Callback when \"Show repos\" button is clicked */\n readonly onShowYear?: () => void;\n /** Monthly activity data for sparkline */\n readonly sparklineData?: readonly number[];\n /** Labels for sparkline (e.g., month names) */\n readonly sparklineLabels?: readonly string[];\n /** Insights to display in expanded view */\n readonly insights?: readonly YearCardGlassInsight[];\n /** Custom stats for expanded view (replaces default commits/prs/repos grid) */\n readonly stats?: readonly YearCardGlassStat[];\n /** Custom action button text */\n readonly actionLabel?: string;\n /** Show sparkline in collapsed view */\n readonly showSparklineCollapsed?: boolean;\n /** Custom value formatter for commits display */\n readonly valueFormatter?: (commits: string) => string;\n /** Additional content for expanded section */\n readonly children?: ReactNode;\n}\n\n// ========================================\n// COMPONENT\n// ========================================\n\nexport const YearCardGlass = forwardRef<HTMLDivElement, YearCardGlassProps>(\n (\n {\n year,\n emoji,\n label,\n commits,\n progress,\n isExpanded = false,\n gradient = 'blue',\n prs = 0,\n repos = 0,\n onShowYear,\n sparklineData,\n sparklineLabels,\n insights,\n stats,\n actionLabel,\n showSparklineCollapsed = true,\n valueFormatter,\n children,\n className,\n onClick,\n ...props\n },\n ref\n ) => {\n const expandedStyles: CSSProperties = {\n background: 'var(--expanded-bg)',\n borderColor: 'var(--expanded-border)',\n };\n\n const metricCardStyles: CSSProperties = {\n background: 'var(--card-bg)',\n borderColor: 'var(--card-border)',\n };\n\n // Format commits display\n const displayCommits = valueFormatter ? valueFormatter(commits) : commits;\n\n // Default stats if none provided\n const displayStats = stats || [\n { label: 'Commits', value: commits },\n { label: 'PRs', value: prs },\n { label: 'Repos', value: repos },\n ];\n\n // Default action label\n const buttonLabel = actionLabel || `Show repos from ${year}`;\n\n return (\n <InteractiveCard\n ref={ref}\n baseBg=\"var(--year-card-bg)\"\n hoverBg=\"var(--card-hover-bg)\"\n borderColor=\"var(--year-card-border)\"\n hoverGlow=\"var(--year-card-hover-glow)\"\n hoverLift\n rounded=\"rounded-xl\"\n className={cn('w-full max-w-2xl p-2.5 md:p-3 cursor-pointer', className)}\n onClick={onClick}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick?.(e as unknown as React.MouseEvent<HTMLDivElement>);\n }\n }}\n aria-expanded={isExpanded}\n aria-label={`${year} year: ${label}, ${commits} commits. ${isExpanded ? 'Collapse' : 'Expand'} details`}\n {...props}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between mb-1.5 md:mb-2\">\n <div className=\"flex items-center gap-1.5 md:gap-2\">\n <span\n className=\"font-semibold text-sm md:text-base\"\n style={{ color: 'var(--text-primary)' }}\n >\n {year}\n </span>\n <BadgeGlass>\n {emoji} {label}\n </BadgeGlass>\n </div>\n <span\n className=\"text-xs md:text-sm flex items-center gap-0.5 md:gap-1\"\n style={{ color: 'var(--text-secondary)' }}\n >\n {displayCommits}\n {isExpanded ? (\n <ChevronUp className=\"w-3.5 h-3.5 md:w-4 md:h-4\" aria-hidden=\"true\" />\n ) : (\n <ChevronDown className=\"w-3.5 h-3.5 md:w-4 md:h-4\" aria-hidden=\"true\" />\n )}\n </span>\n </div>\n\n {/* Progress + Sparkline (collapsed view) */}\n <div className=\"flex items-center gap-2\">\n <div className=\"flex-1\">\n <ProgressGlass value={progress} gradient={gradient} size=\"sm\" />\n </div>\n {showSparklineCollapsed && sparklineData && sparklineData.length > 0 && (\n <SparklineGlass\n data={sparklineData}\n labels={sparklineLabels}\n height=\"sm\"\n gap=\"sm\"\n className=\"w-16 md:w-20\"\n aria-label={`Activity trend for ${year}`}\n />\n )}\n </div>\n\n {/* Expanded Section */}\n {isExpanded && (\n <div className=\"mt-3 pt-3 border-t space-y-3\" style={expandedStyles}>\n {/* Stats Grid */}\n <div\n className=\"grid gap-2 md:gap-3\"\n style={{ gridTemplateColumns: `repeat(${Math.min(displayStats.length, 4)}, 1fr)` }}\n >\n {displayStats.map((stat, index) => (\n <div\n key={index}\n className=\"p-2 md:p-2.5 rounded-lg border text-center\"\n style={metricCardStyles}\n >\n {stat.icon && (\n <div className=\"mb-1 flex justify-center text-[var(--text-muted)]\">\n {stat.icon}\n </div>\n )}\n <div\n className=\"text-base md:text-xl font-bold\"\n style={{ color: 'var(--text-primary)' }}\n >\n {stat.value}\n </div>\n <div className=\"text-(length:--font-size-2xs) md:text-xs text-(--text-muted)\">\n {stat.label}\n </div>\n </div>\n ))}\n </div>\n\n {/* Expanded Sparkline with labels (if not shown in collapsed) */}\n {!showSparklineCollapsed && sparklineData && sparklineData.length > 0 && (\n <SparklineGlass\n data={sparklineData}\n labels={sparklineLabels}\n showLabels={!!sparklineLabels}\n height=\"md\"\n gap=\"sm\"\n highlightMax\n className=\"w-full\"\n aria-label={`Monthly activity for ${year}`}\n />\n )}\n\n {/* Insights */}\n {insights && insights.length > 0 && (\n <div className=\"space-y-2\">\n {insights.map((insight, index) => (\n <InsightCardGlass\n key={index}\n variant={insight.variant}\n emoji={insight.emoji}\n text={insight.text}\n detail={insight.detail}\n inline={false}\n />\n ))}\n </div>\n )}\n\n {/* Custom children content */}\n {children}\n\n {/* Show Year Button */}\n {onShowYear && (\n <ButtonGlass\n variant=\"default\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n onShowYear();\n }}\n className=\"w-full\"\n >\n {buttonLabel}\n </ButtonGlass>\n )}\n </div>\n )}\n </InteractiveCard>\n );\n }\n);\n\nYearCardGlass.displayName = 'YearCardGlass';\n","// ========================================\n// CAREER STATS GLASS COMPONENT\n// Career statistics with expandable year cards\n// ========================================\n\nimport { forwardRef, useState } from \"react\";\nimport { TrendingUp, Code, GitPullRequest, FolderGit2 } from \"lucide-react\";\nimport { cn } from \"@/lib/utils\";\nimport { GlassCard } from \"../ui/glass-card\";\nimport { YearCardGlass } from \"../composite/year-card-glass\";\nimport \"@/glass-theme.css\";\n\nexport interface YearData {\n readonly year: string | number;\n readonly emoji: string;\n readonly label: string;\n readonly commits: string;\n readonly progress: number;\n readonly prs?: number;\n readonly repos?: number;\n}\n\nexport interface CareerStatsGlassProps extends React.HTMLAttributes<HTMLDivElement> {\n readonly totalCommits?: number;\n readonly totalPRs?: number;\n readonly totalRepos?: number;\n readonly years?: readonly YearData[];\n}\n\nexport const CareerStatsGlass = forwardRef<HTMLDivElement, CareerStatsGlassProps>(\n (\n {\n totalCommits = 2242,\n totalPRs = 47,\n totalRepos = 11,\n years = [],\n className,\n ...props\n },\n ref\n ) => {\n const [expandedYear, setExpandedYear] = useState<string | number | null>(null);\n\n const handleYearClick = (year: string | number): void => {\n setExpandedYear(expandedYear === year ? null : year);\n };\n\n return (\n <GlassCard\n ref={ref}\n className={cn(\"p-4 md:p-5 lg:p-6\", className)}\n intensity=\"medium\"\n hover={false}\n {...props}\n >\n <h3\n className=\"font-semibold flex items-center gap-2 md:gap-2.5 lg:gap-3 mb-1 text-base md:text-lg lg:text-xl\"\n style={{ color: \"var(--text-primary)\" }}\n >\n <TrendingUp className=\"w-4 h-4 md:w-5 md:h-5 lg:w-6 lg:h-6\" style={{ color: \"var(--text-accent)\" }} />\n Career Stats\n </h3>\n <p\n className=\"text-xs md:text-sm lg:text-base mb-3 md:mb-4 flex items-center gap-2 md:gap-2.5 lg:gap-3 flex-wrap\"\n style={{ color: \"var(--text-secondary)\" }}\n >\n <span className=\"flex items-center gap-1 md:gap-1.5\">\n <Code className=\"w-3.5 h-3.5 md:w-4 md:h-4 lg:w-5 lg:h-5\" />\n {totalCommits.toLocaleString()} commits\n </span>\n <span>·</span>\n <span className=\"flex items-center gap-1 md:gap-1.5\">\n <GitPullRequest className=\"w-3.5 h-3.5 md:w-4 md:h-4 lg:w-5 lg:h-5\" />\n {totalPRs} PRs\n </span>\n <span>·</span>\n <span className=\"flex items-center gap-1 md:gap-1.5\">\n <FolderGit2 className=\"w-3.5 h-3.5 md:w-4 md:h-4 lg:w-5 lg:h-5\" />\n {totalRepos} repos\n </span>\n </p>\n <div className=\"space-y-2 md:space-y-2.5 lg:space-y-3\">\n {years.map((y) => (\n <YearCardGlass\n key={y.year}\n year={y.year}\n emoji={y.emoji}\n label={y.label}\n commits={y.commits}\n progress={y.progress}\n prs={y.prs}\n repos={y.repos}\n isExpanded={expandedYear === y.year}\n onClick={() => handleYearClick(y.year)}\n onShowYear={() => {\n // This can be used to filter repos by year\n // Example: onYearFilter?.(y.year)\n }}\n />\n ))}\n </div>\n </GlassCard>\n );\n }\n);\n\nCareerStatsGlass.displayName = \"CareerStatsGlass\";\n","// ========================================\n// FLAGS SECTION GLASS COMPONENT\n// Expandable flags/warnings section\n// ========================================\n\nimport { forwardRef } from 'react';\nimport { AlertTriangle, ChevronUp, ChevronDown } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { GlassCard } from '../ui/glass-card';\nimport { FlagAlertGlass, type FlagType } from '../specialized/flag-alert-glass';\nimport '@/glass-theme.css';\n\nexport interface FlagData {\n readonly type: FlagType;\n readonly title: string;\n readonly description?: string;\n}\n\nexport interface FlagsSectionGlassProps extends React.HTMLAttributes<HTMLDivElement> {\n readonly flags?: readonly FlagData[];\n readonly expanded?: boolean;\n readonly onToggle?: () => void;\n}\n\nexport const FlagsSectionGlass = forwardRef<HTMLDivElement, FlagsSectionGlassProps>(\n ({ flags = [], expanded = false, onToggle, className, ...props }, ref) => {\n return (\n <GlassCard\n ref={ref}\n className={cn('w-full max-w-2xl', className)}\n intensity=\"medium\"\n hover={false}\n {...props}\n >\n <button\n onClick={onToggle}\n className=\"w-full p-3 md:p-4 flex items-center justify-between rounded-2xl\"\n style={{ color: 'var(--text-primary)' }}\n type=\"button\"\n aria-expanded={expanded}\n >\n <div className=\"flex items-center gap-1.5 md:gap-2\">\n <AlertTriangle\n className=\"w-4 h-4 md:w-5 md:h-5\"\n style={{ color: 'var(--status-away)' }}\n />\n <span className=\"font-medium text-sm md:text-base\">{flags.length} flags detected</span>\n </div>\n {expanded ? (\n <ChevronUp className=\"w-4 h-4 md:w-5 md:h-5\" style={{ color: 'var(--text-muted)' }} />\n ) : (\n <ChevronDown className=\"w-4 h-4 md:w-5 md:h-5\" style={{ color: 'var(--text-muted)' }} />\n )}\n </button>\n {expanded && (\n <div className=\"px-3 pb-3 md:px-4 md:pb-4 space-y-1.5 md:space-y-2\">\n {flags.map((flag, i) => (\n <FlagAlertGlass\n key={`flag-${i}`}\n type={flag.type}\n title={flag.title}\n description={flag.description}\n />\n ))}\n </div>\n )}\n </GlassCard>\n );\n }\n);\n\nFlagsSectionGlass.displayName = 'FlagsSectionGlass';\n","// ========================================\n// HEADER BRANDING GLASS - SECTION COMPONENT\n// Header branding with logo and subtitle\n// Level 4: Section (extracted from HeaderNavGlass)\n// ========================================\n\nimport { forwardRef, type HTMLAttributes, type CSSProperties } from 'react';\nimport { type LucideIcon } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { IconButtonGlass } from '../atomic/icon-button-glass';\nimport '@/glass-theme.css';\n\nexport interface HeaderBrandingGlassProps extends HTMLAttributes<HTMLDivElement> {\n /** Logo icon component */\n readonly logoIcon: LucideIcon;\n /** Main title */\n readonly title: string;\n /** Subtitle (hidden on mobile) */\n readonly subtitle?: string;\n /** Logo click handler */\n readonly onLogoClick?: () => void;\n /** Logo aria label */\n readonly logoAriaLabel?: string;\n}\n\nexport const HeaderBrandingGlass = forwardRef<HTMLDivElement, HeaderBrandingGlassProps>(\n (\n {\n logoIcon,\n title,\n subtitle,\n onLogoClick,\n logoAriaLabel = 'Home',\n className,\n ...props\n },\n ref\n ) => {\n const titleStyles: CSSProperties = {\n color: 'var(--text-primary)',\n };\n\n return (\n <div\n ref={ref}\n className={cn('flex items-center gap-4', className)}\n {...props}\n >\n <IconButtonGlass\n icon={logoIcon}\n aria-label={logoAriaLabel}\n onClick={onLogoClick}\n variant=\"gradient\"\n size=\"md\"\n />\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:gap-2\">\n <span className=\"font-semibold text-base md:text-lg\" style={titleStyles}>\n {title}\n </span>\n {subtitle && (\n <span\n className=\"hidden md:inline text-sm\"\n style={{ color: 'var(--text-secondary)' }}\n >\n · {subtitle}\n </span>\n )}\n </div>\n </div>\n );\n }\n);\n\nHeaderBrandingGlass.displayName = 'HeaderBrandingGlass';\n","// ========================================\n// HEADER NAV GLASS COMPONENT\n// Navigation header with search and theme toggle\n// ========================================\n\nimport { forwardRef, type CSSProperties } from \"react\";\nimport { Github, Sun, Moon, Palette } from \"lucide-react\";\nimport { cn } from \"@/lib/utils\";\nimport { useTheme, type ThemeName } from \"@/lib/theme-context\";\nimport { ButtonGlass } from \"../ui/button-glass\";\nimport { SearchBoxGlass } from \"../atomic/search-box-glass\";\nimport \"@/glass-theme.css\";\n\nconst themes: ThemeName[] = [\"light\", \"aurora\", \"glass\"];\n\nconst themeConfig: Record<ThemeName, { label: string; icon: typeof Sun }> = {\n light: { label: \"Light\", icon: Sun },\n aurora: { label: \"Aurora\", icon: Moon },\n glass: { label: \"Glass\", icon: Palette },\n};\n\nexport interface HeaderNavGlassProps extends React.HTMLAttributes<HTMLElement> {\n readonly username?: string;\n readonly onSearch?: (value: string) => void;\n readonly onThemeToggle?: () => void;\n}\n\nexport const HeaderNavGlass = forwardRef<HTMLElement, HeaderNavGlassProps>(\n ({ username = \"Yhooi2\", onSearch, onThemeToggle, className, ...props }, ref) => {\n const { theme, cycleTheme } = useTheme();\n\n const nextTheme = themes[(themes.indexOf(theme) + 1) % themes.length];\n const NextIcon = themeConfig[nextTheme].icon;\n\n const headerStyles: CSSProperties = {\n background: \"var(--header-bg)\",\n borderColor: \"var(--header-border)\",\n backdropFilter: \"blur(var(--blur-md))\",\n WebkitBackdropFilter: \"blur(var(--blur-md))\",\n };\n\n const iconBtnStyles: CSSProperties = {\n background: \"linear-gradient(135deg, var(--icon-btn-from), var(--icon-btn-to))\",\n boxShadow: \"var(--icon-btn-shadow)\",\n };\n\n const themeBtnStyles: CSSProperties = {\n background: \"var(--card-subtle-bg)\",\n border: \"1px solid var(--card-subtle-border)\",\n };\n\n return (\n <header\n ref={ref}\n className={cn(\"border rounded-xl py-2 px-3 md:py-3 md:px-4 transition-all duration-300\", className)}\n style={headerStyles}\n {...props}\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2 md:gap-4\">\n <button\n className=\"w-8 h-8 md:w-10 md:h-10 rounded-xl flex items-center justify-center transition-all duration-300 hover:scale-105\"\n style={iconBtnStyles}\n type=\"button\"\n aria-label=\"GitHub\"\n >\n <Github className=\"w-4 h-4 md:w-5 md:h-5\" style={{ color: \"var(--icon-btn-text)\" }} />\n </button>\n <span className=\"font-semibold text-base md:text-lg\" style={{ color: \"var(--text-primary)\" }}>\n User Analytics\n </span>\n <SearchBoxGlass\n className=\"ml-2 md:ml-4\"\n defaultValue={username}\n onSubmit={onSearch}\n inputWidth=\"w-28 sm:w-36 md:w-48\"\n placeholder=\"Search username...\"\n />\n </div>\n <div className=\"flex items-center gap-2 md:gap-3\">\n <button\n onClick={onThemeToggle ?? cycleTheme}\n className=\"p-2 md:p-2.5 rounded-xl transition-all duration-300 hover:scale-105\"\n style={themeBtnStyles}\n type=\"button\"\n aria-label={`Switch to ${themeConfig[nextTheme].label} theme`}\n >\n <NextIcon className=\"w-4 h-4 md:w-5 md:h-5\" style={{ color: \"var(--text-secondary)\" }} />\n </button>\n <ButtonGlass variant=\"secondary\" icon={Github} className=\"hidden md:inline-flex\">\n Sign in with GitHub\n </ButtonGlass>\n </div>\n </div>\n </header>\n );\n }\n);\n\nHeaderNavGlass.displayName = \"HeaderNavGlass\";\n","// ========================================\n// PROFILE HEADER GLASS COMPONENT\n// User profile header with avatar, stats, languages\n// ========================================\n\nimport { forwardRef } from \"react\";\nimport { Calendar, ExternalLink, FolderGit2, Users, User } from \"lucide-react\";\nimport { cn } from \"@/lib/utils\";\nimport { GlassCard } from \"../ui/glass-card\";\nimport { ProfileAvatarGlass } from \"../specialized/profile-avatar-glass\";\nimport { LanguageBarGlass, type LanguageData } from \"../specialized/language-bar-glass\";\nimport { AICardGlass } from \"../composite/ai-card-glass\";\nimport \"@/glass-theme.css\";\n\nexport interface ProfileStats {\n readonly repos?: number;\n readonly followers?: number;\n readonly following?: number;\n}\n\nexport interface ProfileHeaderGlassProps extends React.HTMLAttributes<HTMLDivElement> {\n readonly name?: string;\n readonly username?: string;\n readonly joinDate?: string;\n readonly stats?: ProfileStats;\n readonly languages?: readonly LanguageData[];\n readonly onAIGenerate?: () => void;\n}\n\nexport const ProfileHeaderGlass = forwardRef<HTMLDivElement, ProfileHeaderGlassProps>(\n (\n {\n name = \"Artem Safronov\",\n username = \"Yhooi2\",\n joinDate = \"Jan 2023\",\n stats = {},\n languages = [],\n onAIGenerate,\n className,\n ...props\n },\n ref\n ) => {\n const s = { repos: 11, followers: 1, following: 5, ...stats };\n\n const getInitials = (fullName: string): string => {\n return fullName\n .split(\" \")\n .map((n) => n[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2);\n };\n\n return (\n <GlassCard\n ref={ref}\n className={cn(\"p-5\", className)}\n intensity=\"strong\"\n glow=\"violet\"\n hover={false}\n {...props}\n >\n <div className=\"flex flex-col md:flex-row gap-3 md:gap-6\">\n <div className=\"flex-1\">\n <div className=\"flex gap-4\">\n <ProfileAvatarGlass\n initials={getInitials(name)}\n size=\"lg\"\n status=\"online\"\n />\n <div>\n <h1 className=\"text-lg md:text-xl font-bold\" style={{ color: \"var(--text-primary)\" }}>\n {name}\n </h1>\n <div\n className=\"flex items-center gap-2 text-sm mt-0.5\"\n style={{ color: \"var(--text-secondary)\" }}\n >\n <a\n href=\"#\"\n className=\"flex items-center gap-1 hover:underline\"\n style={{ color: \"var(--text-accent)\" }}\n >\n @{username} <ExternalLink className=\"w-3 h-3\" />\n </a>\n <span>·</span>\n <span className=\"flex items-center gap-1\">\n <Calendar className=\"w-3 h-3\" /> Joined {joinDate}\n </span>\n </div>\n <div\n className=\"flex items-center gap-3 md:gap-4 mt-2 text-sm flex-wrap\"\n style={{ color: \"var(--text-secondary)\" }}\n >\n <span className=\"flex items-center gap-1\">\n <FolderGit2\n className=\"w-4 h-4\"\n style={{ color: \"var(--text-accent)\" }}\n />\n {s.repos} repos\n </span>\n <span className=\"flex items-center gap-1\">\n <Users className=\"w-4 h-4\" style={{ color: \"var(--text-accent)\" }} />\n {s.followers} followers\n </span>\n <span className=\"flex items-center gap-1\">\n <User className=\"w-4 h-4\" style={{ color: \"var(--text-accent)\" }} />\n {s.following} following\n </span>\n </div>\n </div>\n </div>\n {languages.length > 0 && (\n <div className=\"mt-4\">\n <LanguageBarGlass languages={languages} />\n </div>\n )}\n </div>\n <AICardGlass onGenerate={onAIGenerate} />\n </div>\n </GlassCard>\n );\n }\n);\n\nProfileHeaderGlass.displayName = \"ProfileHeaderGlass\";\n","// ========================================\n// PROJECTS LIST GLASS COMPONENT\n// List of repository cards with filtering, sorting, and ownership controls\n// ========================================\n\nimport { forwardRef, useState, useMemo, type CSSProperties } from \"react\";\nimport { FolderGit2, AlertTriangle } from \"lucide-react\";\nimport { cn } from \"@/lib/utils\";\nimport { GlassCard } from \"../ui/glass-card\";\nimport { BadgeGlass } from \"../ui/badge-glass\";\nimport { RepositoryCardGlass, type RepositoryFlagType } from \"../composite/repository-card-glass\";\nimport { SegmentedControlGlass } from \"../specialized/segmented-control-glass\";\nimport { SortDropdownGlass, type SortField, type SortOrder } from \"../atomic\";\nimport \"@/glass-theme.css\";\n\n// ========================================\n// TYPES\n// ========================================\n\nexport type OwnershipFilter = 'your' | 'contrib' | 'all';\n\n// Re-export for convenience\nexport type { SortField, SortOrder } from \"../atomic\";\n\nexport interface Repository {\n readonly name: string;\n readonly languages: string;\n readonly commits: number;\n readonly contribution: number;\n readonly stars?: number;\n readonly flagType?: RepositoryFlagType;\n readonly issues?: readonly string[];\n readonly createdYear?: number;\n /** Ownership type for Your/Contrib filtering */\n readonly ownership?: 'your' | 'contrib';\n}\n\nexport interface ProjectsListGlassProps extends React.HTMLAttributes<HTMLDivElement> {\n /** List of repositories to display */\n readonly repositories: readonly Repository[];\n /** Show only flagged (non-green) repositories */\n readonly showFlaggedOnly?: boolean;\n /** Filter by creation year */\n readonly selectedYear?: number | null;\n /** Callback to clear all filters */\n readonly onClearFilters?: () => void;\n /** Custom title (overrides auto-generated) */\n readonly title?: string;\n\n // ======== NEW: Ownership Filter ========\n /** Current ownership filter */\n readonly ownershipFilter?: OwnershipFilter;\n /** Callback when ownership filter changes */\n readonly onOwnershipChange?: (filter: OwnershipFilter) => void;\n\n // ======== NEW: Sorting ========\n /** Current sort field */\n readonly sortBy?: SortField;\n /** Current sort order */\n readonly sortOrder?: SortOrder;\n /** Callback when sort changes */\n readonly onSortChange?: (field: SortField, order: SortOrder) => void;\n\n // ======== NEW: Controls ========\n /** Show header controls (sort dropdown, ownership filter). Default: true when callbacks provided */\n readonly showControls?: boolean;\n}\n\n// ========================================\n// OWNERSHIP FILTER OPTIONS\n// ========================================\n\nconst ownershipOptions = [\n { value: 'your' as const, label: 'Your' },\n { value: 'contrib' as const, label: 'Contrib' },\n];\n\n// ========================================\n// COMPONENT\n// ========================================\n\nexport const ProjectsListGlass = forwardRef<HTMLDivElement, ProjectsListGlassProps>(\n (\n {\n repositories,\n showFlaggedOnly = false,\n selectedYear = null,\n onClearFilters,\n title,\n // New props\n ownershipFilter,\n onOwnershipChange,\n sortBy = 'commits',\n sortOrder = 'desc',\n onSortChange,\n showControls,\n className,\n ...props\n },\n ref\n ) => {\n const [expandedIndex, setExpandedIndex] = useState<number | null>(null);\n\n // Determine if controls should be shown\n const shouldShowControls = showControls ?? (onOwnershipChange !== undefined || onSortChange !== undefined);\n\n // Filter repositories\n const filteredRepos = useMemo(() => {\n return repositories.filter((repo) => {\n // Flag filter\n if (showFlaggedOnly && repo.flagType === \"green\") return false;\n // Year filter\n if (selectedYear && repo.createdYear !== selectedYear) return false;\n // Ownership filter\n if (ownershipFilter && ownershipFilter !== 'all' && repo.ownership !== ownershipFilter) return false;\n return true;\n });\n }, [repositories, showFlaggedOnly, selectedYear, ownershipFilter]);\n\n // Sort repositories\n const sortedRepos = useMemo(() => {\n if (!onSortChange) return filteredRepos;\n\n return [...filteredRepos].sort((a, b) => {\n const multiplier = sortOrder === 'asc' ? 1 : -1;\n switch (sortBy) {\n case 'commits':\n return (a.commits - b.commits) * multiplier;\n case 'stars':\n return ((a.stars ?? 0) - (b.stars ?? 0)) * multiplier;\n case 'name':\n return a.name.localeCompare(b.name) * multiplier;\n case 'contribution':\n return (a.contribution - b.contribution) * multiplier;\n default:\n return 0;\n }\n });\n }, [filteredRepos, sortBy, sortOrder, onSortChange]);\n\n // Generate title based on filters\n const displayTitle = title ?? (\n showFlaggedOnly\n ? \"Flagged\"\n : selectedYear\n ? `${selectedYear}`\n : \"All\"\n ) + \" Projects\";\n\n const emptyContainerStyles: CSSProperties = {\n background: \"var(--card-bg)\",\n };\n\n // Handle ownership change with type safety\n const handleOwnershipChange = (value: string): void => {\n if (onOwnershipChange && (value === 'your' || value === 'contrib')) {\n onOwnershipChange(value);\n }\n };\n\n return (\n <GlassCard\n ref={ref}\n intensity=\"medium\"\n className={cn(\"p-3 sm:p-4\", className)}\n {...props}\n >\n {/* Header */}\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 mb-4\">\n {/* Left: Title + Badge */}\n <div className=\"flex items-center gap-2\">\n {showFlaggedOnly ? (\n <AlertTriangle className=\"w-4 h-4\" style={{ color: \"var(--status-away)\" }} />\n ) : (\n <FolderGit2 className=\"w-4 h-4\" style={{ color: \"var(--text-accent)\" }} />\n )}\n <h3\n className=\"font-semibold text-sm sm:text-base\"\n style={{ color: \"var(--text-primary)\" }}\n >\n {displayTitle}\n </h3>\n <BadgeGlass variant=\"info\">{sortedRepos.length} repos</BadgeGlass>\n </div>\n\n {/* Right: Controls */}\n {shouldShowControls && (\n <div className=\"flex items-center gap-2 flex-wrap\">\n {onSortChange && (\n <SortDropdownGlass\n sortBy={sortBy}\n sortOrder={sortOrder}\n onSortChange={onSortChange}\n />\n )}\n {onOwnershipChange && ownershipFilter && (\n <SegmentedControlGlass\n options={ownershipOptions}\n value={ownershipFilter}\n onChange={handleOwnershipChange}\n />\n )}\n </div>\n )}\n </div>\n\n {/* Content */}\n {sortedRepos.length === 0 ? (\n // Empty State\n <div className=\"text-center py-10\">\n <div\n className=\"w-16 h-16 mx-auto mb-3 rounded-2xl flex items-center justify-center\"\n style={emptyContainerStyles}\n >\n <FolderGit2 className=\"w-8 h-8\" style={{ color: \"var(--text-muted)\" }} />\n </div>\n <p\n className=\"text-sm\"\n style={{ color: \"var(--text-muted)\" }}\n >\n No repositories found\n </p>\n {onClearFilters && (\n <button\n onClick={onClearFilters}\n className=\"mt-2 text-sm underline transition-colors hover:opacity-80\"\n style={{ color: \"var(--text-accent)\" }}\n >\n Clear filters\n </button>\n )}\n </div>\n ) : (\n // Repository List\n <div className=\"space-y-2\">\n {sortedRepos.map((repo, index) => (\n <RepositoryCardGlass\n key={repo.name}\n name={repo.name}\n languages={repo.languages}\n commits={repo.commits}\n contribution={repo.contribution}\n stars={repo.stars}\n flagType={repo.flagType}\n issues={repo.issues}\n expanded={expandedIndex === index}\n onToggle={() => setExpandedIndex(expandedIndex === index ? null : index)}\n />\n ))}\n </div>\n )}\n </GlassCard>\n );\n }\n);\n\nProjectsListGlass.displayName = \"ProjectsListGlass\";\n","// ========================================\n// TRUST SCORE CARD GLASS COMPONENT\n// Overall trust score display with metrics\n// ========================================\n\nimport { forwardRef } from 'react';\nimport { Target } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { GlassCard } from '../ui/glass-card';\nimport { RainbowProgressGlass } from '../specialized/rainbow-progress-glass';\nimport { MetricCardGlass, type MetricVariant } from '../composite/metric-card-glass';\nimport '@/glass-theme.css';\n\nexport interface MetricData {\n readonly title: string;\n readonly value: string | number;\n readonly variant: MetricVariant;\n}\n\nexport interface TrustScoreCardGlassProps extends React.HTMLAttributes<HTMLDivElement> {\n readonly score?: number;\n readonly metrics?: readonly MetricData[];\n}\n\nexport const TrustScoreCardGlass = forwardRef<HTMLDivElement, TrustScoreCardGlassProps>(\n ({ score = 72, metrics = [], className, ...props }, ref) => {\n return (\n <GlassCard\n ref={ref}\n className={cn('p-4 md:p-5', className)}\n intensity=\"strong\"\n glow=\"cyan\"\n hover={false}\n {...props}\n >\n <div className=\"flex items-center justify-between mb-3 md:mb-4\">\n <h2\n className=\"font-semibold flex items-center gap-1.5 md:gap-2 text-base md:text-lg\"\n style={{ color: 'var(--text-primary)' }}\n >\n <Target className=\"w-4 h-4 md:w-5 md:h-5\" style={{ color: 'var(--text-accent)' }} />\n Overall Trust Score\n </h2>\n <div className=\"flex items-center gap-1.5 md:gap-2 animate-[score-pulse_2s_ease-in-out_infinite]\">\n <span\n className=\"text-3xl md:text-4xl font-bold bg-clip-text text-transparent\"\n style={{ backgroundImage: 'var(--score-gradient)' }}\n >\n {score}\n </span>\n <span className=\"text-lg md:text-xl\" style={{ color: 'var(--text-muted)' }}>\n / 100\n </span>\n </div>\n </div>\n <RainbowProgressGlass value={score} size=\"lg\" showGlow />\n {metrics.length > 0 && (\n <div className=\"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-3 md:gap-4 mt-4 md:mt-5\">\n {metrics.map((m) => (\n <MetricCardGlass key={m.title} title={m.title} value={m.value} variant={m.variant} />\n ))}\n </div>\n )}\n </GlassCard>\n );\n }\n);\n\nTrustScoreCardGlass.displayName = 'TrustScoreCardGlass';\n"],"mappings":"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"}
|