shadcn-glass-ui 2.2.3 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (370) hide show
  1. package/CHANGELOG.md +57 -1
  2. package/dist/cli/commands/info.d.ts +15 -0
  3. package/dist/cli/commands/info.d.ts.map +1 -0
  4. package/dist/cli/commands/list.d.ts +23 -0
  5. package/dist/cli/commands/list.d.ts.map +1 -0
  6. package/dist/cli/index.cjs +1 -1
  7. package/dist/cli/index.d.ts.map +1 -0
  8. package/dist/cli/{index.js → index.mjs} +1 -1
  9. package/dist/cli/index.mjs.map +1 -0
  10. package/dist/cli/utils/format.d.ts +76 -0
  11. package/dist/cli/utils/format.d.ts.map +1 -0
  12. package/dist/cli/utils/fuzzy-search.d.ts +73 -0
  13. package/dist/cli/utils/fuzzy-search.d.ts.map +1 -0
  14. package/dist/cli/utils/load-exports.d.ts +141 -0
  15. package/dist/cli/utils/load-exports.d.ts.map +1 -0
  16. package/dist/components/blocks/avatar-gallery/index.d.ts +2 -0
  17. package/dist/components/blocks/avatar-gallery/index.d.ts.map +1 -0
  18. package/dist/components/blocks/avatar-gallery/page.d.ts +7 -0
  19. package/dist/components/blocks/avatar-gallery/page.d.ts.map +1 -0
  20. package/dist/components/blocks/badges/index.d.ts +2 -0
  21. package/dist/components/blocks/badges/index.d.ts.map +1 -0
  22. package/dist/components/blocks/badges/page.d.ts +7 -0
  23. package/dist/components/blocks/badges/page.d.ts.map +1 -0
  24. package/dist/components/blocks/buttons/index.d.ts +2 -0
  25. package/dist/components/blocks/buttons/index.d.ts.map +1 -0
  26. package/dist/components/blocks/buttons/page.d.ts +7 -0
  27. package/dist/components/blocks/buttons/page.d.ts.map +1 -0
  28. package/dist/components/blocks/form-elements/index.d.ts +2 -0
  29. package/dist/components/blocks/form-elements/index.d.ts.map +1 -0
  30. package/dist/components/blocks/form-elements/page.d.ts +7 -0
  31. package/dist/components/blocks/form-elements/page.d.ts.map +1 -0
  32. package/dist/components/blocks/index.d.ts +14 -0
  33. package/dist/components/blocks/index.d.ts.map +1 -0
  34. package/dist/components/blocks/notifications/index.d.ts +2 -0
  35. package/dist/components/blocks/notifications/index.d.ts.map +1 -0
  36. package/dist/components/blocks/notifications/page.d.ts +7 -0
  37. package/dist/components/blocks/notifications/page.d.ts.map +1 -0
  38. package/dist/components/blocks/progress/index.d.ts +2 -0
  39. package/dist/components/blocks/progress/index.d.ts.map +1 -0
  40. package/dist/components/blocks/progress/page.d.ts +7 -0
  41. package/dist/components/blocks/progress/page.d.ts.map +1 -0
  42. package/dist/components/blocks/registry.d.ts +16 -0
  43. package/dist/components/blocks/registry.d.ts.map +1 -0
  44. package/dist/components/demos/AnimatedBackground.d.ts +5 -0
  45. package/dist/components/demos/AnimatedBackground.d.ts.map +1 -0
  46. package/dist/components/demos/ComponentShowcase.d.ts +6 -0
  47. package/dist/components/demos/ComponentShowcase.d.ts.map +1 -0
  48. package/dist/components/demos/DesktopShowcase.d.ts +3 -0
  49. package/dist/components/demos/DesktopShowcase.d.ts.map +1 -0
  50. package/dist/components/demos/GlassFixesDemo.d.ts +6 -0
  51. package/dist/components/demos/GlassFixesDemo.d.ts.map +1 -0
  52. package/dist/components/demos/MobileShowcase.d.ts +3 -0
  53. package/dist/components/demos/MobileShowcase.d.ts.map +1 -0
  54. package/dist/components/glass/atomic/expandable-header-glass.d.ts +16 -0
  55. package/dist/components/glass/atomic/expandable-header-glass.d.ts.map +1 -0
  56. package/dist/components/glass/atomic/icon-button-glass.d.ts +18 -0
  57. package/dist/components/glass/atomic/icon-button-glass.d.ts.map +1 -0
  58. package/dist/components/glass/atomic/index.d.ts +14 -0
  59. package/dist/components/glass/atomic/index.d.ts.map +1 -0
  60. package/dist/components/glass/atomic/insight-card-glass.d.ts +22 -0
  61. package/dist/components/glass/atomic/insight-card-glass.d.ts.map +1 -0
  62. package/dist/components/glass/atomic/search-box-glass.d.ts +17 -0
  63. package/dist/components/glass/atomic/search-box-glass.d.ts.map +1 -0
  64. package/dist/components/glass/atomic/sort-dropdown-glass.d.ts +38 -0
  65. package/dist/components/glass/atomic/sort-dropdown-glass.d.ts.map +1 -0
  66. package/dist/components/glass/atomic/stat-item-glass.d.ts +22 -0
  67. package/dist/components/glass/atomic/stat-item-glass.d.ts.map +1 -0
  68. package/dist/components/glass/atomic/theme-toggle-glass.d.ts +11 -0
  69. package/dist/components/glass/atomic/theme-toggle-glass.d.ts.map +1 -0
  70. package/dist/components/glass/composite/ai-card-glass.d.ts +7 -0
  71. package/dist/components/glass/composite/ai-card-glass.d.ts.map +1 -0
  72. package/dist/components/glass/composite/career-stats-header-glass.d.ts +15 -0
  73. package/dist/components/glass/composite/career-stats-header-glass.d.ts.map +1 -0
  74. package/dist/components/glass/composite/circular-metric-glass.d.ts +24 -0
  75. package/dist/components/glass/composite/circular-metric-glass.d.ts.map +1 -0
  76. package/dist/components/glass/composite/contribution-metrics-glass.d.ts +15 -0
  77. package/dist/components/glass/composite/contribution-metrics-glass.d.ts.map +1 -0
  78. package/dist/components/glass/composite/index.d.ts +22 -0
  79. package/dist/components/glass/composite/index.d.ts.map +1 -0
  80. package/dist/components/glass/composite/metric-card-glass.d.ts +96 -0
  81. package/dist/components/glass/composite/metric-card-glass.d.ts.map +1 -0
  82. package/dist/components/glass/composite/metrics-grid-glass.d.ts +17 -0
  83. package/dist/components/glass/composite/metrics-grid-glass.d.ts.map +1 -0
  84. package/dist/components/glass/composite/repository-card-glass.d.ts +16 -0
  85. package/dist/components/glass/composite/repository-card-glass.d.ts.map +1 -0
  86. package/dist/components/glass/composite/repository-header-glass.d.ts +16 -0
  87. package/dist/components/glass/composite/repository-header-glass.d.ts.map +1 -0
  88. package/dist/components/glass/composite/repository-metadata-glass.d.ts +13 -0
  89. package/dist/components/glass/composite/repository-metadata-glass.d.ts.map +1 -0
  90. package/dist/components/glass/composite/split-layout-glass/index.d.ts +16 -0
  91. package/dist/components/glass/composite/split-layout-glass/index.d.ts.map +1 -0
  92. package/dist/components/glass/composite/split-layout-glass/split-layout-accordion.d.ts +66 -0
  93. package/dist/components/glass/composite/split-layout-glass/split-layout-accordion.d.ts.map +1 -0
  94. package/dist/components/glass/composite/split-layout-glass/split-layout-context.d.ts +122 -0
  95. package/dist/components/glass/composite/split-layout-glass/split-layout-context.d.ts.map +1 -0
  96. package/dist/components/glass/composite/split-layout-glass/split-layout-glass.d.ts +177 -0
  97. package/dist/components/glass/composite/split-layout-glass/split-layout-glass.d.ts.map +1 -0
  98. package/dist/components/glass/composite/trust-score-display-glass.d.ts +15 -0
  99. package/dist/components/glass/composite/trust-score-display-glass.d.ts.map +1 -0
  100. package/dist/components/glass/composite/user-info-glass.d.ts +15 -0
  101. package/dist/components/glass/composite/user-info-glass.d.ts.map +1 -0
  102. package/dist/components/glass/composite/user-stats-line-glass.d.ts +15 -0
  103. package/dist/components/glass/composite/user-stats-line-glass.d.ts.map +1 -0
  104. package/dist/components/glass/composite/year-card-glass.d.ts +53 -0
  105. package/dist/components/glass/composite/year-card-glass.d.ts.map +1 -0
  106. package/dist/components/glass/index.d.ts +16 -0
  107. package/dist/components/glass/index.d.ts.map +1 -0
  108. package/dist/components/glass/primitives/form-field-wrapper.d.ts +69 -0
  109. package/dist/components/glass/primitives/form-field-wrapper.d.ts.map +1 -0
  110. package/dist/components/glass/primitives/index.d.ts +12 -0
  111. package/dist/components/glass/primitives/index.d.ts.map +1 -0
  112. package/dist/components/glass/primitives/interactive-card.d.ts +91 -0
  113. package/dist/components/glass/primitives/interactive-card.d.ts.map +1 -0
  114. package/dist/components/glass/primitives/style-utils.d.ts +147 -0
  115. package/dist/components/glass/primitives/style-utils.d.ts.map +1 -0
  116. package/dist/components/glass/primitives/touch-target.d.ts +46 -0
  117. package/dist/components/glass/primitives/touch-target.d.ts.map +1 -0
  118. package/dist/components/glass/sections/career-stats-glass.d.ts +17 -0
  119. package/dist/components/glass/sections/career-stats-glass.d.ts.map +1 -0
  120. package/dist/components/glass/sections/flags-section-glass.d.ts +13 -0
  121. package/dist/components/glass/sections/flags-section-glass.d.ts.map +1 -0
  122. package/dist/components/glass/sections/header-branding-glass.d.ts +16 -0
  123. package/dist/components/glass/sections/header-branding-glass.d.ts.map +1 -0
  124. package/dist/components/glass/sections/header-nav-glass.d.ts +7 -0
  125. package/dist/components/glass/sections/header-nav-glass.d.ts.map +1 -0
  126. package/dist/components/glass/sections/index.d.ts +13 -0
  127. package/dist/components/glass/sections/index.d.ts.map +1 -0
  128. package/dist/components/glass/sections/profile-header-glass.d.ts +16 -0
  129. package/dist/components/glass/sections/profile-header-glass.d.ts.map +1 -0
  130. package/dist/components/glass/sections/projects-list-glass.d.ts +42 -0
  131. package/dist/components/glass/sections/projects-list-glass.d.ts.map +1 -0
  132. package/dist/components/glass/sections/trust-score-card-glass.d.ts +12 -0
  133. package/dist/components/glass/sections/trust-score-card-glass.d.ts.map +1 -0
  134. package/dist/components/glass/specialized/base-progress-glass.d.ts +8 -0
  135. package/dist/components/glass/specialized/base-progress-glass.d.ts.map +1 -0
  136. package/dist/components/glass/specialized/flag-alert-glass.d.ts +8 -0
  137. package/dist/components/glass/specialized/flag-alert-glass.d.ts.map +1 -0
  138. package/dist/components/glass/specialized/index.d.ts +21 -0
  139. package/dist/components/glass/specialized/index.d.ts.map +1 -0
  140. package/dist/components/glass/specialized/language-bar-glass.d.ts +24 -0
  141. package/dist/components/glass/specialized/language-bar-glass.d.ts.map +1 -0
  142. package/dist/components/glass/specialized/profile-avatar-glass.d.ts +26 -0
  143. package/dist/components/glass/specialized/profile-avatar-glass.d.ts.map +1 -0
  144. package/dist/components/glass/specialized/progress-glass.d.ts +9 -0
  145. package/dist/components/glass/specialized/progress-glass.d.ts.map +1 -0
  146. package/dist/components/glass/specialized/rainbow-progress-glass.d.ts +8 -0
  147. package/dist/components/glass/specialized/rainbow-progress-glass.d.ts.map +1 -0
  148. package/dist/components/glass/specialized/segmented-control-glass.d.ts +11 -0
  149. package/dist/components/glass/specialized/segmented-control-glass.d.ts.map +1 -0
  150. package/dist/components/glass/specialized/sparkline-glass.d.ts +34 -0
  151. package/dist/components/glass/specialized/sparkline-glass.d.ts.map +1 -0
  152. package/dist/components/glass/specialized/status-indicator-glass.d.ts +8 -0
  153. package/dist/components/glass/specialized/status-indicator-glass.d.ts.map +1 -0
  154. package/dist/components/glass/ui/alert-glass.d.ts +13 -0
  155. package/dist/components/glass/ui/alert-glass.d.ts.map +1 -0
  156. package/dist/components/glass/ui/avatar-glass.d.ts +58 -0
  157. package/dist/components/glass/ui/avatar-glass.d.ts.map +1 -0
  158. package/dist/components/glass/ui/badge-glass.d.ts +74 -0
  159. package/dist/components/glass/ui/badge-glass.d.ts.map +1 -0
  160. package/dist/components/glass/ui/button-glass.d.ts +110 -0
  161. package/dist/components/glass/ui/button-glass.d.ts.map +1 -0
  162. package/dist/components/glass/ui/card-glass.d.ts +115 -0
  163. package/dist/components/glass/ui/card-glass.d.ts.map +1 -0
  164. package/dist/components/glass/ui/checkbox-glass.d.ts +113 -0
  165. package/dist/components/glass/ui/checkbox-glass.d.ts.map +1 -0
  166. package/dist/components/glass/ui/circular-progress-glass.d.ts +36 -0
  167. package/dist/components/glass/ui/circular-progress-glass.d.ts.map +1 -0
  168. package/dist/components/glass/ui/combobox-glass.d.ts +61 -0
  169. package/dist/components/glass/ui/combobox-glass.d.ts.map +1 -0
  170. package/dist/components/glass/ui/dropdown-glass.d.ts +83 -0
  171. package/dist/components/glass/ui/dropdown-glass.d.ts.map +1 -0
  172. package/dist/components/glass/ui/dropdown-menu-glass.d.ts +77 -0
  173. package/dist/components/glass/ui/dropdown-menu-glass.d.ts.map +1 -0
  174. package/dist/components/glass/ui/glass-card.d.ts +78 -0
  175. package/dist/components/glass/ui/glass-card.d.ts.map +1 -0
  176. package/dist/components/glass/ui/index.d.ts +44 -0
  177. package/dist/components/glass/ui/index.d.ts.map +1 -0
  178. package/dist/components/glass/ui/input-glass.d.ts +98 -0
  179. package/dist/components/glass/ui/input-glass.d.ts.map +1 -0
  180. package/dist/components/glass/ui/modal-glass.d.ts +180 -0
  181. package/dist/components/glass/ui/modal-glass.d.ts.map +1 -0
  182. package/dist/components/glass/ui/notification-glass.d.ts +13 -0
  183. package/dist/components/glass/ui/notification-glass.d.ts.map +1 -0
  184. package/dist/components/glass/ui/popover-glass.d.ts +71 -0
  185. package/dist/components/glass/ui/popover-glass.d.ts.map +1 -0
  186. package/dist/components/glass/ui/sidebar-glass/index.d.ts +100 -0
  187. package/dist/components/glass/ui/sidebar-glass/index.d.ts.map +1 -0
  188. package/dist/components/glass/ui/sidebar-glass/sidebar-context.d.ts +96 -0
  189. package/dist/components/glass/ui/sidebar-glass/sidebar-context.d.ts.map +1 -0
  190. package/dist/components/glass/ui/sidebar-glass/sidebar-glass.d.ts +88 -0
  191. package/dist/components/glass/ui/sidebar-glass/sidebar-glass.d.ts.map +1 -0
  192. package/dist/components/glass/ui/sidebar-glass/sidebar-menu.d.ts +121 -0
  193. package/dist/components/glass/ui/sidebar-glass/sidebar-menu.d.ts.map +1 -0
  194. package/dist/components/glass/ui/skeleton-glass.d.ts +8 -0
  195. package/dist/components/glass/ui/skeleton-glass.d.ts.map +1 -0
  196. package/dist/components/glass/ui/slider-glass.d.ts +38 -0
  197. package/dist/components/glass/ui/slider-glass.d.ts.map +1 -0
  198. package/dist/components/glass/ui/stepper-glass.d.ts +63 -0
  199. package/dist/components/glass/ui/stepper-glass.d.ts.map +1 -0
  200. package/dist/components/glass/ui/tabs-glass.d.ts +199 -0
  201. package/dist/components/glass/ui/tabs-glass.d.ts.map +1 -0
  202. package/dist/components/glass/ui/toggle-glass.d.ts +27 -0
  203. package/dist/components/glass/ui/toggle-glass.d.ts.map +1 -0
  204. package/dist/components/glass/ui/tooltip-glass.d.ts +65 -0
  205. package/dist/components/glass/ui/tooltip-glass.d.ts.map +1 -0
  206. package/dist/components/ui/alert.d.ts +8 -0
  207. package/dist/components/ui/alert.d.ts.map +1 -0
  208. package/dist/components/ui/avatar.d.ts +7 -0
  209. package/dist/components/ui/avatar.d.ts.map +1 -0
  210. package/dist/components/ui/badge.d.ts +8 -0
  211. package/dist/components/ui/badge.d.ts.map +1 -0
  212. package/dist/components/ui/button.d.ts +8 -0
  213. package/dist/components/ui/button.d.ts.map +1 -0
  214. package/dist/components/ui/card.d.ts +10 -0
  215. package/dist/components/ui/card.d.ts.map +1 -0
  216. package/dist/components/ui/chart.d.ts +69 -0
  217. package/dist/components/ui/chart.d.ts.map +1 -0
  218. package/dist/components/ui/checkbox.d.ts +5 -0
  219. package/dist/components/ui/checkbox.d.ts.map +1 -0
  220. package/dist/components/ui/collapsible.d.ts +6 -0
  221. package/dist/components/ui/collapsible.d.ts.map +1 -0
  222. package/dist/components/ui/command.d.ts +19 -0
  223. package/dist/components/ui/command.d.ts.map +1 -0
  224. package/dist/components/ui/dialog.d.ts +16 -0
  225. package/dist/components/ui/dialog.d.ts.map +1 -0
  226. package/dist/components/ui/dropdown-menu.d.ts +26 -0
  227. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  228. package/dist/components/ui/input.d.ts +4 -0
  229. package/dist/components/ui/input.d.ts.map +1 -0
  230. package/dist/components/ui/popover.d.ts +8 -0
  231. package/dist/components/ui/popover.d.ts.map +1 -0
  232. package/dist/components/ui/progress.d.ts +5 -0
  233. package/dist/components/ui/progress.d.ts.map +1 -0
  234. package/dist/components/ui/scroll-area.d.ts +6 -0
  235. package/dist/components/ui/scroll-area.d.ts.map +1 -0
  236. package/dist/components/ui/separator.d.ts +5 -0
  237. package/dist/components/ui/separator.d.ts.map +1 -0
  238. package/dist/components/ui/skeleton.d.ts +3 -0
  239. package/dist/components/ui/skeleton.d.ts.map +1 -0
  240. package/dist/components/ui/slider.d.ts +5 -0
  241. package/dist/components/ui/slider.d.ts.map +1 -0
  242. package/dist/components/ui/sonner.d.ts +4 -0
  243. package/dist/components/ui/sonner.d.ts.map +1 -0
  244. package/dist/components/ui/switch.d.ts +5 -0
  245. package/dist/components/ui/switch.d.ts.map +1 -0
  246. package/dist/components/ui/tabs.d.ts +8 -0
  247. package/dist/components/ui/tabs.d.ts.map +1 -0
  248. package/dist/components/ui/tooltip.d.ts +8 -0
  249. package/dist/components/ui/tooltip.d.ts.map +1 -0
  250. package/dist/components.cjs +4 -4
  251. package/dist/components.d.ts +56 -1932
  252. package/dist/components.d.ts.map +1 -0
  253. package/dist/components.mjs +5 -0
  254. package/dist/hooks.cjs +2 -2
  255. package/dist/hooks.d.ts +5 -225
  256. package/dist/hooks.d.ts.map +1 -0
  257. package/dist/{hooks.js → hooks.mjs} +2 -2
  258. package/dist/index.cjs +48 -1109
  259. package/dist/index.cjs.map +1 -1
  260. package/dist/index.d.ts +83 -1
  261. package/dist/index.d.ts.map +1 -0
  262. package/dist/{index.js → index.mjs} +29 -1115
  263. package/dist/index.mjs.map +1 -0
  264. package/dist/lib/config.d.ts +28 -0
  265. package/dist/lib/config.d.ts.map +1 -0
  266. package/dist/lib/hooks/index.d.ts +11 -0
  267. package/dist/lib/hooks/index.d.ts.map +1 -0
  268. package/dist/lib/hooks/use-focus.d.ts +61 -0
  269. package/dist/lib/hooks/use-focus.d.ts.map +1 -0
  270. package/dist/lib/hooks/use-hover.d.ts +54 -0
  271. package/dist/lib/hooks/use-hover.d.ts.map +1 -0
  272. package/dist/lib/hooks/use-responsive.d.ts +44 -0
  273. package/dist/lib/hooks/use-responsive.d.ts.map +1 -0
  274. package/dist/lib/hooks/use-wallpaper-tint.d.ts +57 -0
  275. package/dist/lib/hooks/use-wallpaper-tint.d.ts.map +1 -0
  276. package/dist/lib/hooks.d.ts +92 -0
  277. package/dist/lib/hooks.d.ts.map +1 -0
  278. package/dist/lib/theme/tokens.d.ts +441 -0
  279. package/dist/lib/theme/tokens.d.ts.map +1 -0
  280. package/dist/lib/theme-context.d.ts +115 -0
  281. package/dist/lib/theme-context.d.ts.map +1 -0
  282. package/dist/lib/types.d.ts +24 -0
  283. package/dist/lib/types.d.ts.map +1 -0
  284. package/dist/lib/utils.d.ts +8 -0
  285. package/dist/lib/utils.d.ts.map +1 -0
  286. package/dist/lib/variants/alert-glass-variants.d.ts +10 -0
  287. package/dist/lib/variants/alert-glass-variants.d.ts.map +1 -0
  288. package/dist/lib/variants/alert-variants.d.ts +8 -0
  289. package/dist/lib/variants/alert-variants.d.ts.map +1 -0
  290. package/dist/lib/variants/avatar-glass-variants.d.ts +12 -0
  291. package/dist/lib/variants/avatar-glass-variants.d.ts.map +1 -0
  292. package/dist/lib/variants/badge-glass-variants.d.ts +10 -0
  293. package/dist/lib/variants/badge-glass-variants.d.ts.map +1 -0
  294. package/dist/lib/variants/badge-variants.d.ts +8 -0
  295. package/dist/lib/variants/badge-variants.d.ts.map +1 -0
  296. package/dist/lib/variants/button-glass-variants.d.ts +29 -0
  297. package/dist/lib/variants/button-glass-variants.d.ts.map +1 -0
  298. package/dist/lib/variants/button-variants.d.ts +9 -0
  299. package/dist/lib/variants/button-variants.d.ts.map +1 -0
  300. package/dist/lib/variants/dropdown-content-styles.d.ts +102 -0
  301. package/dist/lib/variants/dropdown-content-styles.d.ts.map +1 -0
  302. package/dist/lib/variants/dropdown-glass-variants.d.ts +9 -0
  303. package/dist/lib/variants/dropdown-glass-variants.d.ts.map +1 -0
  304. package/dist/lib/variants/glass-card-variants.d.ts +13 -0
  305. package/dist/lib/variants/glass-card-variants.d.ts.map +1 -0
  306. package/dist/lib/variants/index.d.ts +26 -0
  307. package/dist/lib/variants/index.d.ts.map +1 -0
  308. package/dist/lib/variants/input-glass-variants.d.ts +9 -0
  309. package/dist/lib/variants/input-glass-variants.d.ts.map +1 -0
  310. package/dist/lib/variants/insight-card-glass-variants.d.ts +11 -0
  311. package/dist/lib/variants/insight-card-glass-variants.d.ts.map +1 -0
  312. package/dist/lib/variants/modal-glass-variants.d.ts +9 -0
  313. package/dist/lib/variants/modal-glass-variants.d.ts.map +1 -0
  314. package/dist/lib/variants/notification-glass-variants.d.ts +9 -0
  315. package/dist/lib/variants/notification-glass-variants.d.ts.map +1 -0
  316. package/dist/lib/variants/progress-glass-variants.d.ts +10 -0
  317. package/dist/lib/variants/progress-glass-variants.d.ts.map +1 -0
  318. package/dist/lib/variants/skeleton-glass-variants.d.ts +9 -0
  319. package/dist/lib/variants/skeleton-glass-variants.d.ts.map +1 -0
  320. package/dist/lib/variants/sparkline-glass-variants.d.ts +10 -0
  321. package/dist/lib/variants/sparkline-glass-variants.d.ts.map +1 -0
  322. package/dist/lib/variants/stepper-glass-variants.d.ts +40 -0
  323. package/dist/lib/variants/stepper-glass-variants.d.ts.map +1 -0
  324. package/dist/lib/variants/toggle-glass-variants.d.ts +26 -0
  325. package/dist/lib/variants/toggle-glass-variants.d.ts.map +1 -0
  326. package/dist/lib/variants/tooltip-glass-variants.d.ts +9 -0
  327. package/dist/lib/variants/tooltip-glass-variants.d.ts.map +1 -0
  328. package/dist/r/checkbox-glass.json +3 -2
  329. package/dist/r/tabs-glass.json +4 -2
  330. package/dist/{theme-context-_T5r1KG4.js → theme-context-DLS2uAgJ.mjs} +1 -1
  331. package/dist/theme-context-DLS2uAgJ.mjs.map +1 -0
  332. package/dist/{theme-context-BEA8K_rq.cjs → theme-context-DmTETrFi.cjs} +2 -2
  333. package/dist/{theme-context-BEA8K_rq.cjs.map → theme-context-DmTETrFi.cjs.map} +1 -1
  334. package/dist/themes.cjs +1 -1
  335. package/dist/themes.d.ts +2 -124
  336. package/dist/themes.d.ts.map +1 -0
  337. package/dist/{themes.js → themes.mjs} +1 -1
  338. package/dist/trust-score-card-glass-3VBi9soW.cjs +4893 -0
  339. package/dist/trust-score-card-glass-3VBi9soW.cjs.map +1 -0
  340. package/dist/trust-score-card-glass-EfMB5l5J.mjs +4226 -0
  341. package/dist/trust-score-card-glass-EfMB5l5J.mjs.map +1 -0
  342. package/dist/{use-focus-CX0TJJIj.js → use-focus-C5kPAKr_.mjs} +1 -1
  343. package/dist/use-focus-C5kPAKr_.mjs.map +1 -0
  344. package/dist/{use-focus-CdoUzFQ8.cjs → use-focus-CswOSq71.cjs} +2 -2
  345. package/dist/{use-focus-CdoUzFQ8.cjs.map → use-focus-CswOSq71.cjs.map} +1 -1
  346. package/dist/{use-wallpaper-tint-DUgmytlY.js → use-wallpaper-tint-C0kYXNiN.mjs} +1 -1
  347. package/dist/use-wallpaper-tint-C0kYXNiN.mjs.map +1 -0
  348. package/dist/{use-wallpaper-tint-Rq5UgY9L.cjs → use-wallpaper-tint-WtRWtupA.cjs} +2 -2
  349. package/dist/{use-wallpaper-tint-Rq5UgY9L.cjs.map → use-wallpaper-tint-WtRWtupA.cjs.map} +1 -1
  350. package/dist/{utils-CcyeqpKQ.js → utils-B792GPM_.mjs} +1 -1
  351. package/dist/utils-B792GPM_.mjs.map +1 -0
  352. package/dist/{utils-NLnOCttr.cjs → utils-DX6rdBol.cjs} +2 -2
  353. package/dist/{utils-NLnOCttr.cjs.map → utils-DX6rdBol.cjs.map} +1 -1
  354. package/dist/utils.cjs +1 -1
  355. package/dist/utils.d.ts +2 -10
  356. package/dist/utils.d.ts.map +1 -0
  357. package/dist/utils.mjs +2 -0
  358. package/package.json +8 -8
  359. package/dist/cli/index.js.map +0 -1
  360. package/dist/components.js +0 -5
  361. package/dist/index.js.map +0 -1
  362. package/dist/theme-context-_T5r1KG4.js.map +0 -1
  363. package/dist/trust-score-card-glass-DTS1RdIt.cjs +0 -28660
  364. package/dist/trust-score-card-glass-DTS1RdIt.cjs.map +0 -1
  365. package/dist/trust-score-card-glass-Dg4_b_g_.js +0 -27660
  366. package/dist/trust-score-card-glass-Dg4_b_g_.js.map +0 -1
  367. package/dist/use-focus-CX0TJJIj.js.map +0 -1
  368. package/dist/use-wallpaper-tint-DUgmytlY.js.map +0 -1
  369. package/dist/utils-CcyeqpKQ.js.map +0 -1
  370. package/dist/utils.js +0 -2
@@ -0,0 +1,4893 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __copyProps = (to, from, except, desc) => {
8
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
9
+ key = keys[i];
10
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
11
+ get: ((k) => from[k]).bind(null, key),
12
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
13
+ });
14
+ }
15
+ return to;
16
+ };
17
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
18
+ value: mod,
19
+ enumerable: true
20
+ }) : target, mod));
21
+ const require_utils = require("./utils-DX6rdBol.cjs");
22
+ const require_use_focus = require("./use-focus-CswOSq71.cjs");
23
+ const require_theme_context = require("./theme-context-DmTETrFi.cjs");
24
+ let react = require("react");
25
+ react = __toESM(react);
26
+ let lucide_react = require("lucide-react");
27
+ let class_variance_authority = require("class-variance-authority");
28
+ let react_jsx_runtime = require("react/jsx-runtime");
29
+ let __radix_ui_react_avatar = require("@radix-ui/react-avatar");
30
+ __radix_ui_react_avatar = __toESM(__radix_ui_react_avatar);
31
+ let __radix_ui_react_slot = require("@radix-ui/react-slot");
32
+ let __radix_ui_react_popover = require("@radix-ui/react-popover");
33
+ __radix_ui_react_popover = __toESM(__radix_ui_react_popover);
34
+ let cmdk = require("cmdk");
35
+ let __radix_ui_react_dialog = require("@radix-ui/react-dialog");
36
+ __radix_ui_react_dialog = __toESM(__radix_ui_react_dialog);
37
+ let __radix_ui_react_dropdown_menu = require("@radix-ui/react-dropdown-menu");
38
+ __radix_ui_react_dropdown_menu = __toESM(__radix_ui_react_dropdown_menu);
39
+ let __radix_ui_react_slider = require("@radix-ui/react-slider");
40
+ __radix_ui_react_slider = __toESM(__radix_ui_react_slider);
41
+ let __radix_ui_react_tooltip = require("@radix-ui/react-tooltip");
42
+ __radix_ui_react_tooltip = __toESM(__radix_ui_react_tooltip);
43
+ let recharts = require("recharts");
44
+ const alertVariants = (0, class_variance_authority.cva)("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", {
45
+ variants: { variant: {
46
+ default: "",
47
+ destructive: "",
48
+ success: "",
49
+ warning: "",
50
+ info: "",
51
+ error: ""
52
+ } },
53
+ defaultVariants: { variant: "default" }
54
+ });
55
+ const ICON_SIZES = {
56
+ xs: "w-2.5 h-2.5 md:w-3 md:h-3",
57
+ sm: "w-3 h-3 md:w-3.5 md:h-3.5",
58
+ md: "w-3.5 h-3.5 md:w-4 md:h-4",
59
+ lg: "w-4 h-4 md:w-5 md:h-5",
60
+ xl: "w-5 h-5 md:w-6 md:h-6"
61
+ };
62
+ const TouchTarget = (0, react.forwardRef)(({ children, minSize = 44, center = true, className, ...props }, ref) => {
63
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
64
+ ref,
65
+ className: require_utils.cn(minSize === 44 ? "min-h-11 min-w-11" : "min-h-12 min-w-12", center && "flex items-center justify-center", className),
66
+ ...props,
67
+ children
68
+ });
69
+ });
70
+ TouchTarget.displayName = "TouchTarget";
71
+ const FormFieldWrapper = (0, react.forwardRef)(({ label, error, success, htmlFor, required, className, children, ...props }, ref) => {
72
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
73
+ ref,
74
+ className: require_utils.cn("flex flex-col gap-1 md:gap-1.5", className),
75
+ ...props,
76
+ children: [
77
+ label && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
78
+ htmlFor,
79
+ className: "text-xs md:text-sm font-medium",
80
+ style: { color: "var(--text-secondary)" },
81
+ children: [label, required && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
82
+ className: "text-[var(--alert-danger-text)] ml-1",
83
+ "aria-label": "required",
84
+ children: "*"
85
+ })]
86
+ }),
87
+ children,
88
+ error && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
89
+ className: "text-xs",
90
+ style: { color: "var(--alert-danger-text)" },
91
+ role: "alert",
92
+ "aria-live": "polite",
93
+ children: error
94
+ }),
95
+ success && !error && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
96
+ className: "text-xs",
97
+ style: { color: "var(--alert-success-text)" },
98
+ "aria-live": "polite",
99
+ children: success
100
+ })
101
+ ]
102
+ });
103
+ });
104
+ FormFieldWrapper.displayName = "FormFieldWrapper";
105
+ const InteractiveCard = (0, react.forwardRef)(({ hoverLift = true, hoverGlow, hoverBg, baseBg = "var(--card-bg)", borderColor = "var(--card-border)", hoverBorderColor, blur = "sm", disabled = false, rounded = "rounded-2xl", transition = "var(--transition-slow)", className, style, children, ...props }, ref) => {
106
+ const { isHovered, hoverProps } = require_use_focus.useHover({ includeFocus: !disabled });
107
+ const cardStyles = {
108
+ background: isHovered && hoverBg ? hoverBg : baseBg,
109
+ border: `1px solid ${isHovered && hoverBorderColor ? hoverBorderColor : borderColor}`,
110
+ backdropFilter: `blur(var(--blur-${blur}))`,
111
+ WebkitBackdropFilter: `blur(var(--blur-${blur}))`,
112
+ transform: hoverLift && isHovered && !disabled ? "translateY(-2px)" : "translateY(0)",
113
+ boxShadow: isHovered && hoverGlow && !disabled ? hoverGlow : "none",
114
+ transition: `all ${transition}`,
115
+ ...style
116
+ };
117
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
118
+ ref,
119
+ className: require_utils.cn(rounded, className),
120
+ style: cardStyles,
121
+ ...disabled ? {} : hoverProps,
122
+ ...props,
123
+ children
124
+ });
125
+ });
126
+ InteractiveCard.displayName = "InteractiveCard";
127
+ var iconMap = {
128
+ default: lucide_react.Info,
129
+ destructive: lucide_react.AlertCircle,
130
+ success: lucide_react.CheckCircle,
131
+ warning: lucide_react.AlertTriangle,
132
+ info: lucide_react.Info,
133
+ error: lucide_react.AlertCircle
134
+ };
135
+ var variantStyles$2 = {
136
+ default: {
137
+ bg: "var(--alert-default-bg)",
138
+ border: "var(--alert-default-border)",
139
+ text: "var(--alert-default-text)"
140
+ },
141
+ destructive: {
142
+ bg: "var(--alert-destructive-bg)",
143
+ border: "var(--alert-destructive-border)",
144
+ text: "var(--alert-destructive-text)"
145
+ },
146
+ success: {
147
+ bg: "var(--alert-success-bg)",
148
+ border: "var(--alert-success-border)",
149
+ text: "var(--alert-success-text)"
150
+ },
151
+ warning: {
152
+ bg: "var(--alert-warning-bg)",
153
+ border: "var(--alert-warning-border)",
154
+ text: "var(--alert-warning-text)"
155
+ },
156
+ info: {
157
+ bg: "var(--alert-default-bg)",
158
+ border: "var(--alert-default-border)",
159
+ text: "var(--alert-default-text)"
160
+ },
161
+ error: {
162
+ bg: "var(--alert-destructive-bg)",
163
+ border: "var(--alert-destructive-border)",
164
+ text: "var(--alert-destructive-text)"
165
+ }
166
+ };
167
+ var getAlertStyles = (variant) => {
168
+ const config = variantStyles$2[variant];
169
+ return {
170
+ background: config.bg,
171
+ border: `1px solid ${config.border}`,
172
+ color: config.text
173
+ };
174
+ };
175
+ var AlertGlassRoot = (0, react.forwardRef)(({ className, variant = "default", dismissible, onDismiss, children, ...props }, ref) => {
176
+ const effectiveVariant = variant ?? "default";
177
+ const Icon = iconMap[effectiveVariant];
178
+ const config = variantStyles$2[effectiveVariant];
179
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
180
+ ref,
181
+ "data-slot": "alert",
182
+ className: require_utils.cn(alertVariants({ variant: effectiveVariant }), className),
183
+ style: getAlertStyles(effectiveVariant),
184
+ role: "alert",
185
+ ...props,
186
+ children: [
187
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Icon, {
188
+ className: "w-4 h-4 md:w-5 md:h-5 shrink-0 mt-0.5",
189
+ style: { color: config.text },
190
+ "aria-hidden": "true"
191
+ }),
192
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
193
+ className: "flex-1",
194
+ children
195
+ }),
196
+ dismissible && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
197
+ onClick: onDismiss,
198
+ className: "p-0.5 md:p-1 rounded transition-colors duration-200 hover:bg-black/5 shrink-0",
199
+ "aria-label": "Dismiss alert",
200
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.X, {
201
+ className: ICON_SIZES.md,
202
+ style: { color: config.text }
203
+ })
204
+ })
205
+ ]
206
+ });
207
+ });
208
+ AlertGlassRoot.displayName = "AlertGlass";
209
+ var AlertGlassTitle = (0, react.forwardRef)(({ className, style, ...props }, ref) => {
210
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
211
+ ref,
212
+ "data-slot": "alert-title",
213
+ className: require_utils.cn("font-medium text-xs md:text-sm mb-0.5 md:mb-1", className),
214
+ style: {
215
+ color: "inherit",
216
+ ...style
217
+ },
218
+ ...props
219
+ });
220
+ });
221
+ AlertGlassTitle.displayName = "AlertGlassTitle";
222
+ var AlertGlassDescription = (0, react.forwardRef)(({ className, style, ...props }, ref) => {
223
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
224
+ ref,
225
+ "data-slot": "alert-description",
226
+ className: require_utils.cn("text-xs md:text-sm opacity-80", className),
227
+ style: {
228
+ color: "inherit",
229
+ ...style
230
+ },
231
+ ...props
232
+ });
233
+ });
234
+ AlertGlassDescription.displayName = "AlertGlassDescription";
235
+ const AlertGlass = AlertGlassRoot;
236
+ const avatarSizes = (0, class_variance_authority.cva)("rounded-full flex items-center justify-center font-semibold transition-all duration-300", {
237
+ variants: { size: {
238
+ sm: "w-7 h-7 md:w-8 md:h-8 text-[10px] md:text-xs",
239
+ md: "w-9 h-9 md:w-10 md:h-10 text-xs md:text-sm",
240
+ lg: "w-10 h-10 md:w-12 md:h-12 text-sm md:text-base",
241
+ xl: "w-14 h-14 md:w-16 md:h-16 text-base md:text-lg"
242
+ } },
243
+ defaultVariants: { size: "md" }
244
+ });
245
+ const statusSizes = (0, class_variance_authority.cva)("absolute -bottom-0.5 -right-0.5 rounded-full", {
246
+ variants: { size: {
247
+ sm: "w-2 h-2 md:w-2.5 md:h-2.5",
248
+ md: "w-2.5 h-2.5 md:w-3 md:h-3",
249
+ lg: "w-3 h-3 md:w-3.5 md:h-3.5",
250
+ xl: "w-3.5 h-3.5 md:w-4 md:h-4"
251
+ } },
252
+ defaultVariants: { size: "md" }
253
+ });
254
+ var getStatusVars$1 = (statusType) => {
255
+ return {
256
+ online: {
257
+ bg: "var(--status-online)",
258
+ glow: "var(--status-online-glow)"
259
+ },
260
+ offline: {
261
+ bg: "var(--status-offline)",
262
+ glow: "none"
263
+ },
264
+ busy: {
265
+ bg: "var(--status-busy)",
266
+ glow: "var(--status-busy-glow)"
267
+ },
268
+ away: {
269
+ bg: "var(--status-away)",
270
+ glow: "var(--status-away-glow)"
271
+ }
272
+ }[statusType];
273
+ };
274
+ var AvatarGlassContext = react.createContext({ size: "md" });
275
+ var AvatarGlassRoot = react.forwardRef(({ className, size = "md", status, glowing = false, children, ...props }, ref) => {
276
+ const { isHovered, hoverProps } = require_use_focus.useHover();
277
+ const avatarStyles = {
278
+ background: "var(--avatar-bg)",
279
+ border: "3px solid var(--avatar-border)",
280
+ boxShadow: isHovered ? "var(--avatar-hover-glow)" : "var(--avatar-shadow)",
281
+ color: "var(--text-inverse)"
282
+ };
283
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AvatarGlassContext.Provider, {
284
+ value: {
285
+ size,
286
+ status,
287
+ glowing
288
+ },
289
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
290
+ className: require_utils.cn("relative inline-flex", className),
291
+ onMouseEnter: hoverProps.onMouseEnter,
292
+ onMouseLeave: hoverProps.onMouseLeave,
293
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_avatar.Root, {
294
+ ref,
295
+ className: require_utils.cn(avatarSizes({ size }), glowing && "animate-[glow-pulse_2s_ease-in-out_infinite]"),
296
+ style: avatarStyles,
297
+ ...props,
298
+ children
299
+ }), status && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
300
+ className: require_utils.cn(statusSizes({ size })),
301
+ style: {
302
+ background: getStatusVars$1(status).bg,
303
+ boxShadow: getStatusVars$1(status).glow
304
+ },
305
+ role: "status",
306
+ "aria-label": `Status: ${status}`
307
+ })]
308
+ })
309
+ });
310
+ });
311
+ AvatarGlassRoot.displayName = "AvatarGlass";
312
+ var AvatarGlassImage = react.forwardRef(({ className, ...props }, ref) => {
313
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_avatar.Image, {
314
+ ref,
315
+ className: require_utils.cn("aspect-square h-full w-full object-cover", className),
316
+ ...props
317
+ });
318
+ });
319
+ AvatarGlassImage.displayName = "AvatarGlassImage";
320
+ var AvatarGlassFallback = react.forwardRef(({ className, ...props }, ref) => {
321
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_avatar.Fallback, {
322
+ ref,
323
+ className: require_utils.cn("flex h-full w-full items-center justify-center font-semibold uppercase", className),
324
+ ...props
325
+ });
326
+ });
327
+ AvatarGlassFallback.displayName = "AvatarGlassFallback";
328
+ var getInitials = (name) => {
329
+ if (!name || name.trim().length === 0) return "?";
330
+ return name.split(" ").map((part) => part[0]).join("").toUpperCase().slice(0, 2);
331
+ };
332
+ var AvatarGlassSimple = ({ name, size = "md", status, glowing, className }) => {
333
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AvatarGlassRoot, {
334
+ size,
335
+ status,
336
+ glowing,
337
+ className,
338
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AvatarGlassFallback, { children: getInitials(name) })
339
+ });
340
+ };
341
+ const AvatarGlass = AvatarGlassRoot;
342
+ const badgeVariants = (0, class_variance_authority.cva)("inline-flex items-center gap-1 md:gap-1.5 rounded-full font-medium", {
343
+ variants: { size: {
344
+ sm: "px-1 py-0.5 md:px-1.5 text-[9px] md:text-[10px]",
345
+ md: "px-2 py-0.5 md:px-2.5 text-[10px] md:text-xs",
346
+ lg: "px-2.5 py-0.5 md:px-3 md:py-1 text-xs md:text-sm"
347
+ } },
348
+ defaultVariants: { size: "md" }
349
+ });
350
+ var variantStyles$1 = {
351
+ default: {
352
+ bg: "var(--badge-default-bg)",
353
+ text: "var(--badge-default-text)",
354
+ border: "var(--badge-default-border)"
355
+ },
356
+ secondary: {
357
+ bg: "var(--badge-secondary-bg)",
358
+ text: "var(--badge-secondary-text)",
359
+ border: "var(--badge-secondary-border)"
360
+ },
361
+ destructive: {
362
+ bg: "var(--badge-destructive-bg)",
363
+ text: "var(--badge-destructive-text)",
364
+ border: "var(--badge-destructive-border)"
365
+ },
366
+ outline: {
367
+ bg: "var(--badge-outline-bg)",
368
+ text: "var(--badge-outline-text)",
369
+ border: "var(--badge-outline-border)"
370
+ },
371
+ success: {
372
+ bg: "var(--badge-success-bg)",
373
+ text: "var(--badge-success-text)",
374
+ border: "var(--badge-success-border)"
375
+ },
376
+ warning: {
377
+ bg: "var(--badge-warning-bg)",
378
+ text: "var(--badge-warning-text)",
379
+ border: "var(--badge-warning-border)"
380
+ },
381
+ info: {
382
+ bg: "var(--badge-info-bg)",
383
+ text: "var(--badge-info-text)",
384
+ border: "var(--badge-info-border)"
385
+ }
386
+ };
387
+ var getBadgeStyles = (variant) => {
388
+ const v = variantStyles$1[variant] || variantStyles$1.default;
389
+ return {
390
+ background: v.bg,
391
+ color: v.text,
392
+ border: `1px solid ${v.border}`
393
+ };
394
+ };
395
+ const BadgeGlass = (0, react.forwardRef)(({ children, className, variant = "default", size = "md", dot, ...props }, ref) => {
396
+ const v = variantStyles$1[variant];
397
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
398
+ ref,
399
+ "data-slot": "badge",
400
+ className: require_utils.cn(badgeVariants({ size }), className),
401
+ style: getBadgeStyles(variant),
402
+ ...props,
403
+ children: [dot && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
404
+ className: "w-1 h-1 md:w-1.5 md:h-1.5 rounded-full animate-pulse",
405
+ style: { background: v.text }
406
+ }), children]
407
+ });
408
+ });
409
+ BadgeGlass.displayName = "BadgeGlass";
410
+ const buttonGlassVariants = (0, class_variance_authority.cva)("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", {
411
+ variants: {
412
+ variant: {
413
+ default: "",
414
+ secondary: "",
415
+ ghost: "",
416
+ destructive: "",
417
+ outline: "",
418
+ success: "",
419
+ link: ""
420
+ },
421
+ size: {
422
+ sm: "px-3 py-1.5 text-sm gap-1.5 min-h-[44px] rounded-xl",
423
+ default: "px-4 py-2.5 text-sm gap-2 min-h-[44px] rounded-xl",
424
+ lg: "px-6 py-3 text-base gap-2.5 min-h-[48px] rounded-xl",
425
+ xl: "px-8 py-4 text-lg gap-3 min-h-[56px] rounded-xl",
426
+ icon: "p-2.5 min-h-[44px] min-w-[44px] rounded-xl"
427
+ }
428
+ },
429
+ defaultVariants: {
430
+ variant: "default",
431
+ size: "default"
432
+ }
433
+ });
434
+ var getVariantStyles = (variant, isHovered, isFocusVisible) => {
435
+ return {
436
+ default: {
437
+ background: isHovered ? "var(--btn-primary-hover-bg)" : "var(--btn-primary-bg)",
438
+ color: "var(--btn-primary-text)",
439
+ border: "none",
440
+ boxShadow: isFocusVisible ? "var(--focus-glow)" : isHovered ? "var(--btn-primary-glow)" : "var(--btn-primary-shadow)"
441
+ },
442
+ secondary: {
443
+ background: isHovered ? "var(--btn-secondary-hover-bg)" : "var(--btn-secondary-bg)",
444
+ color: "var(--btn-secondary-text)",
445
+ border: "1px solid var(--btn-secondary-border)",
446
+ boxShadow: isFocusVisible ? "var(--focus-glow)" : isHovered ? "var(--btn-secondary-glow)" : "none"
447
+ },
448
+ ghost: {
449
+ background: isHovered ? "var(--btn-ghost-hover-bg)" : "var(--btn-ghost-bg)",
450
+ color: "var(--btn-ghost-text)",
451
+ border: "none",
452
+ boxShadow: isFocusVisible ? "var(--focus-glow)" : "none"
453
+ },
454
+ destructive: {
455
+ background: "var(--btn-destructive-bg)",
456
+ color: "var(--btn-destructive-text)",
457
+ border: "none",
458
+ boxShadow: isFocusVisible ? "var(--focus-glow)" : isHovered ? "var(--btn-destructive-glow)" : "var(--btn-destructive-shadow)"
459
+ },
460
+ outline: {
461
+ background: isHovered ? "var(--btn-outline-hover-bg)" : "transparent",
462
+ color: "var(--btn-outline-text)",
463
+ border: "1px solid var(--btn-outline-border)",
464
+ boxShadow: isFocusVisible ? "var(--focus-glow)" : isHovered ? "var(--btn-outline-glow)" : "none"
465
+ },
466
+ success: {
467
+ background: "var(--btn-success-bg)",
468
+ color: "var(--btn-success-text)",
469
+ border: "none",
470
+ boxShadow: isFocusVisible ? "var(--focus-glow)" : isHovered ? "var(--btn-success-glow)" : "var(--btn-success-shadow)"
471
+ },
472
+ link: {
473
+ background: "transparent",
474
+ color: "var(--btn-link-text)",
475
+ border: "none",
476
+ boxShadow: isFocusVisible ? "var(--focus-glow)" : "none",
477
+ textDecoration: isHovered ? "underline" : "none"
478
+ }
479
+ }[variant];
480
+ };
481
+ const ButtonGlass = (0, react.forwardRef)(({ asChild = false, className, variant = "default", size = "default", children, loading = false, disabled, icon: Icon, iconPosition = "left", onClick, ...props }, ref) => {
482
+ const { isHovered, hoverProps } = require_use_focus.useHover();
483
+ const { isFocusVisible, focusProps } = require_use_focus.useFocus({ focusVisible: true });
484
+ const [ripple, setRipple] = (0, react.useState)(null);
485
+ const isDisabled = disabled || loading;
486
+ const rippleTimeoutRef = (0, react.useRef)(null);
487
+ (0, react.useEffect)(() => {
488
+ return () => {
489
+ if (rippleTimeoutRef.current) clearTimeout(rippleTimeoutRef.current);
490
+ };
491
+ }, []);
492
+ const handleClick = (0, react.useCallback)((e) => {
493
+ if (isDisabled) return;
494
+ const rect = e.currentTarget.getBoundingClientRect();
495
+ setRipple({
496
+ x: e.clientX - rect.left,
497
+ y: e.clientY - rect.top
498
+ });
499
+ if (rippleTimeoutRef.current) clearTimeout(rippleTimeoutRef.current);
500
+ rippleTimeoutRef.current = setTimeout(() => {
501
+ setRipple(null);
502
+ rippleTimeoutRef.current = null;
503
+ }, 600);
504
+ onClick?.(e);
505
+ }, [isDisabled, onClick]);
506
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(asChild ? __radix_ui_react_slot.Slot : "button", {
507
+ ref,
508
+ "data-slot": "button",
509
+ className: require_utils.cn(buttonGlassVariants({
510
+ variant,
511
+ size
512
+ }), isHovered && !isDisabled && "scale-[1.02]", className),
513
+ style: {
514
+ ...getVariantStyles(variant, isHovered && !isDisabled, isFocusVisible && !isDisabled),
515
+ outline: "none"
516
+ },
517
+ type: asChild ? void 0 : "button",
518
+ disabled: isDisabled,
519
+ onClick: handleClick,
520
+ onMouseEnter: hoverProps.onMouseEnter,
521
+ onMouseLeave: hoverProps.onMouseLeave,
522
+ onFocus: focusProps.onFocus,
523
+ onBlur: focusProps.onBlur,
524
+ ...props,
525
+ children: asChild ? children : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
526
+ isHovered && variant === "default" && !isDisabled && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
527
+ className: "absolute inset-0 overflow-hidden pointer-events-none",
528
+ style: { borderRadius: "inherit" },
529
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
530
+ className: "absolute top-0 h-full w-1/3 bg-linear-to-r from-transparent via-white/20 to-transparent",
531
+ style: { animation: "btn-shine 1.5s ease-in-out infinite" }
532
+ })
533
+ }),
534
+ ripple && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
535
+ className: "absolute rounded-full bg-white/30 pointer-events-none",
536
+ style: {
537
+ left: ripple.x,
538
+ top: ripple.y,
539
+ width: 10,
540
+ height: 10,
541
+ transform: "translate(-50%, -50%)",
542
+ animation: "ripple 0.6s ease-out"
543
+ }
544
+ }),
545
+ isHovered && variant === "default" && !isDisabled && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
546
+ className: "absolute inset-0 rounded-xl animate-glow-pulse pointer-events-none",
547
+ style: { background: "var(--btn-glow-radial)" }
548
+ }),
549
+ loading && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.RefreshCw, { className: require_utils.cn(ICON_SIZES.md, "animate-spin") }),
550
+ !loading && Icon && iconPosition === "left" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Icon, { className: ICON_SIZES.md }),
551
+ !loading && children,
552
+ !loading && Icon && iconPosition === "right" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Icon, { className: ICON_SIZES.md })
553
+ ] })
554
+ });
555
+ });
556
+ ButtonGlass.displayName = "ButtonGlass";
557
+ const CheckboxGlass = (0, react.forwardRef)(({ className, checked: controlledChecked, defaultChecked, onCheckedChange, onChange, label, disabled, ...props }, ref) => {
558
+ const { isHovered, hoverProps } = require_use_focus.useHover();
559
+ const { isFocusVisible, focusProps } = require_use_focus.useFocus({ focusVisible: true });
560
+ const [uncontrolledChecked, setUncontrolledChecked] = react.useState(defaultChecked ?? false);
561
+ const isControlled = controlledChecked !== void 0;
562
+ const checked = isControlled ? controlledChecked : uncontrolledChecked;
563
+ const isChecked = checked === true;
564
+ const isIndeterminate = checked === "indeterminate";
565
+ const showIndicator = isChecked || isIndeterminate;
566
+ const handleChange = (newChecked) => {
567
+ if (disabled) return;
568
+ if (!isControlled) setUncontrolledChecked(newChecked);
569
+ onCheckedChange?.(newChecked);
570
+ if (onChange && typeof newChecked === "boolean") onChange(newChecked);
571
+ };
572
+ const toggleChecked = () => {
573
+ if (isIndeterminate) handleChange(true);
574
+ else handleChange(!isChecked);
575
+ };
576
+ const checkboxStyles = {
577
+ background: showIndicator ? "var(--checkbox-checked-bg)" : "var(--checkbox-bg)",
578
+ border: `2px solid ${showIndicator ? "var(--checkbox-checked-bg)" : "var(--checkbox-border)"}`,
579
+ boxShadow: isFocusVisible && !disabled ? "var(--focus-glow)" : isHovered && !disabled ? "var(--checkbox-glow)" : "none"
580
+ };
581
+ const ariaChecked = isIndeterminate ? "mixed" : isChecked;
582
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
583
+ className: require_utils.cn("inline-flex items-center gap-2 md:gap-2.5", disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer", className),
584
+ onMouseEnter: hoverProps.onMouseEnter,
585
+ onMouseLeave: hoverProps.onMouseLeave,
586
+ children: [
587
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
588
+ ref,
589
+ type: "checkbox",
590
+ checked: isChecked,
591
+ onChange: (e) => handleChange(e.target.checked),
592
+ disabled,
593
+ className: "sr-only",
594
+ ...props
595
+ }),
596
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
597
+ className: "inline-flex items-center justify-center min-w-11 min-h-11",
598
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
599
+ onClick: toggleChecked,
600
+ onFocus: focusProps.onFocus,
601
+ onBlur: focusProps.onBlur,
602
+ className: "relative w-6 h-6 md:w-5 md:h-5 rounded-md flex items-center justify-center transition-all duration-300",
603
+ style: checkboxStyles,
604
+ role: "checkbox",
605
+ "aria-checked": ariaChecked,
606
+ "aria-label": label || "Checkbox",
607
+ tabIndex: disabled ? -1 : 0,
608
+ onKeyDown: (e) => {
609
+ if (!disabled && (e.key === "Enter" || e.key === " ")) {
610
+ e.preventDefault();
611
+ toggleChecked();
612
+ }
613
+ },
614
+ children: [isChecked && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Check, {
615
+ className: "w-3.5 h-3.5 md:w-3 md:h-3",
616
+ style: { color: "var(--text-inverse)" }
617
+ }), isIndeterminate && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Minus, {
618
+ className: "w-3.5 h-3.5 md:w-3 md:h-3",
619
+ style: { color: "var(--text-inverse)" }
620
+ })]
621
+ })
622
+ }),
623
+ label && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
624
+ className: "text-xs md:text-sm",
625
+ style: { color: "var(--text-secondary)" },
626
+ children: label
627
+ })
628
+ ]
629
+ });
630
+ });
631
+ CheckboxGlass.displayName = "CheckboxGlass";
632
+ const Checkbox = CheckboxGlass;
633
+ var circularProgressVariants = (0, class_variance_authority.cva)("relative inline-flex items-center justify-center p-4", {
634
+ variants: { size: {
635
+ sm: "w-20 h-20",
636
+ md: "w-28 h-28",
637
+ lg: "w-36 h-36",
638
+ xl: "w-44 h-44"
639
+ } },
640
+ defaultVariants: { size: "md" }
641
+ });
642
+ var getGradientColors = (gradient) => {
643
+ return {
644
+ violet: {
645
+ from: "#8b5cf6",
646
+ to: "#a855f7",
647
+ glowVar: "--progress-glow-violet"
648
+ },
649
+ blue: {
650
+ from: "#3b82f6",
651
+ to: "#60a5fa",
652
+ glowVar: "--progress-glow-blue"
653
+ },
654
+ cyan: {
655
+ from: "#06b6d4",
656
+ to: "#22d3ee",
657
+ glowVar: "--progress-glow-cyan"
658
+ },
659
+ amber: {
660
+ from: "#f59e0b",
661
+ to: "#fbbf24",
662
+ glowVar: "--progress-glow-amber"
663
+ },
664
+ emerald: {
665
+ from: "#10b981",
666
+ to: "#34d399",
667
+ glowVar: "--progress-glow-emerald"
668
+ },
669
+ rose: {
670
+ from: "#f43f5e",
671
+ to: "#fb7185",
672
+ glowVar: "--progress-glow-rose"
673
+ }
674
+ }[gradient];
675
+ };
676
+ var getGlowStdDeviation = (intensity) => {
677
+ return {
678
+ low: 2,
679
+ medium: 4,
680
+ high: 6
681
+ }[intensity];
682
+ };
683
+ const CircularProgressGlass = (0, react.forwardRef)(({ className, size = "md", value = 0, variant = "determinate", thickness = 8, trackWidth = 8, color = "violet", trackColor = "oklch(100% 0 0 / 0.1)", showLabel = true, label, labelColor, showGlow = true, glowIntensity = "medium", strokeLinecap = "round", animationDuration = 1, ...props }, ref) => {
684
+ const clampedValue = Math.min(100, Math.max(0, value));
685
+ const gradientColors = getGradientColors(color);
686
+ const svgSize = {
687
+ sm: 64,
688
+ md: 96,
689
+ lg: 128,
690
+ xl: 160
691
+ }[size || "md"];
692
+ const radius = (svgSize - Math.max(thickness, trackWidth)) / 2;
693
+ const circumference = 2 * Math.PI * radius;
694
+ const center = svgSize / 2;
695
+ const dashOffset = (0, react.useMemo)(() => {
696
+ if (variant === "indeterminate") return circumference * .75;
697
+ return circumference * ((100 - clampedValue) / 100);
698
+ }, [
699
+ variant,
700
+ clampedValue,
701
+ circumference
702
+ ]);
703
+ const uniqueId = (0, react.useId)();
704
+ const gradientId = `circular-gradient-${uniqueId}`;
705
+ const glowId = `circular-glow-${uniqueId}`;
706
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
707
+ ref,
708
+ className: require_utils.cn(circularProgressVariants({ size }), className),
709
+ ...props,
710
+ children: [
711
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
712
+ width: svgSize,
713
+ height: svgSize,
714
+ className: "transform -rotate-90 overflow-visible",
715
+ "aria-hidden": "true",
716
+ style: { overflow: "visible" },
717
+ children: [
718
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("defs", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("linearGradient", {
719
+ id: gradientId,
720
+ x1: "0%",
721
+ y1: "0%",
722
+ x2: "100%",
723
+ y2: "100%",
724
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("stop", {
725
+ offset: "0%",
726
+ stopColor: gradientColors.from
727
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("stop", {
728
+ offset: "100%",
729
+ stopColor: gradientColors.to
730
+ })]
731
+ }), showGlow && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("filter", {
732
+ id: glowId,
733
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("feGaussianBlur", {
734
+ stdDeviation: getGlowStdDeviation(glowIntensity),
735
+ result: "coloredBlur"
736
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("feMerge", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("feMergeNode", { in: "coloredBlur" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("feMergeNode", { in: "SourceGraphic" })] })]
737
+ })] }),
738
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
739
+ cx: center,
740
+ cy: center,
741
+ r: radius,
742
+ fill: "none",
743
+ stroke: trackColor,
744
+ strokeWidth: trackWidth
745
+ }),
746
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
747
+ cx: center,
748
+ cy: center,
749
+ r: radius,
750
+ fill: "none",
751
+ stroke: `url(#${gradientId})`,
752
+ strokeWidth: thickness,
753
+ strokeLinecap,
754
+ strokeDasharray: circumference,
755
+ strokeDashoffset: dashOffset,
756
+ filter: showGlow ? `url(#${glowId})` : void 0,
757
+ className: require_utils.cn("transition-all", variant === "indeterminate" && "animate-circular-progress-spin"),
758
+ style: {
759
+ transitionDuration: `${animationDuration}s`,
760
+ transitionTimingFunction: "cubic-bezier(0.4, 0, 0.2, 1)"
761
+ }
762
+ })
763
+ ]
764
+ }),
765
+ showLabel && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
766
+ className: "absolute inset-0 flex items-center justify-center",
767
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
768
+ className: "text-sm font-semibold tabular-nums",
769
+ style: { color: labelColor || gradientColors.to },
770
+ children: label || (variant === "determinate" ? `${clampedValue}%` : "")
771
+ })
772
+ }),
773
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
774
+ role: "progressbar",
775
+ "aria-valuenow": variant === "determinate" ? clampedValue : void 0,
776
+ "aria-valuemin": 0,
777
+ "aria-valuemax": 100,
778
+ "aria-label": label || (variant === "determinate" ? `Progress: ${clampedValue}%` : "Loading progress"),
779
+ "aria-valuetext": label || (variant === "determinate" ? `${clampedValue}%` : "Loading..."),
780
+ className: "sr-only",
781
+ children: label || (variant === "determinate" ? `${clampedValue}%` : "Loading...")
782
+ })
783
+ ]
784
+ });
785
+ });
786
+ CircularProgressGlass.displayName = "CircularProgressGlass";
787
+ function Popover({ ...props }) {
788
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_popover.Root, {
789
+ "data-slot": "popover",
790
+ ...props
791
+ });
792
+ }
793
+ function PopoverTrigger({ ...props }) {
794
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_popover.Trigger, {
795
+ "data-slot": "popover-trigger",
796
+ ...props
797
+ });
798
+ }
799
+ function PopoverContent({ className, align = "center", sideOffset = 4, ...props }) {
800
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_popover.Portal, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_popover.Content, {
801
+ "data-slot": "popover-content",
802
+ align,
803
+ sideOffset,
804
+ className: require_utils.cn("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", className),
805
+ ...props
806
+ }) });
807
+ }
808
+ function Command({ className, ...props }) {
809
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(cmdk.Command, {
810
+ "data-slot": "command",
811
+ className: require_utils.cn("bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md", className),
812
+ ...props
813
+ });
814
+ }
815
+ function CommandInput({ className, ...props }) {
816
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
817
+ "data-slot": "command-input-wrapper",
818
+ className: "flex h-9 items-center gap-2 border-b border-border px-3",
819
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.SearchIcon, { className: "size-4 shrink-0 opacity-60 text-muted-foreground" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(cmdk.Command.Input, {
820
+ "data-slot": "command-input",
821
+ className: require_utils.cn("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", className),
822
+ ...props
823
+ })]
824
+ });
825
+ }
826
+ function CommandList({ className, ...props }) {
827
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(cmdk.Command.List, {
828
+ "data-slot": "command-list",
829
+ className: require_utils.cn("max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto", className),
830
+ ...props
831
+ });
832
+ }
833
+ function CommandEmpty({ ...props }) {
834
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(cmdk.Command.Empty, {
835
+ "data-slot": "command-empty",
836
+ className: "py-6 text-center text-sm",
837
+ ...props
838
+ });
839
+ }
840
+ function CommandGroup({ className, ...props }) {
841
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(cmdk.Command.Group, {
842
+ "data-slot": "command-group",
843
+ className: require_utils.cn("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", className),
844
+ ...props
845
+ });
846
+ }
847
+ function CommandItem({ className, ...props }) {
848
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(cmdk.Command.Item, {
849
+ "data-slot": "command-item",
850
+ className: require_utils.cn("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", className),
851
+ ...props
852
+ });
853
+ }
854
+ const inputVariants = (0, class_variance_authority.cva)("w-full transition-all duration-300 outline-none backdrop-blur-sm disabled:opacity-50 disabled:cursor-not-allowed", {
855
+ variants: { size: {
856
+ sm: "px-3 py-2 text-base rounded-md min-h-[44px]",
857
+ md: "px-4 py-2.5 text-base rounded-md min-h-[44px]",
858
+ lg: "px-5 py-3 text-base md:text-lg rounded-md min-h-[48px]"
859
+ } },
860
+ defaultVariants: { size: "md" }
861
+ });
862
+ function getDropdownContentStyles() {
863
+ return {
864
+ background: "var(--dropdown-bg)",
865
+ border: "1px solid var(--dropdown-border)",
866
+ boxShadow: "var(--dropdown-glow)",
867
+ backdropFilter: "blur(var(--blur-md))",
868
+ WebkitBackdropFilter: "blur(var(--blur-md))"
869
+ };
870
+ }
871
+ const dropdownContentClasses = require_utils.cn("min-w-40 md:min-w-[200px]", "rounded-2xl overflow-hidden", "z-[50002]", "animate-in fade-in-0 zoom-in-95", "data-[side=bottom]:slide-in-from-top-2", "data-[side=top]:slide-in-from-bottom-2");
872
+ function getDropdownItemClasses(options) {
873
+ const { danger, selected, highlighted } = options ?? {};
874
+ return require_utils.cn("w-full px-3 py-2.5", "text-sm text-left", "flex items-center gap-2", "rounded-lg", "outline-none cursor-pointer select-none", "transition-colors duration-150", highlighted && "bg-(--dropdown-item-hover)", "data-[highlighted]:bg-(--dropdown-item-hover)", "data-[selected=true]:bg-(--dropdown-item-hover)", selected && "bg-(--select-item-selected-bg) text-(--select-item-selected-text)", danger ? "text-(--alert-danger-text) data-[highlighted]:text-(--alert-danger-text)" : "text-(--dropdown-item-text)");
875
+ }
876
+ const dropdownSeparatorClasses = require_utils.cn("h-px my-1", "bg-[var(--dropdown-border)]");
877
+ const dropdownLabelClasses = require_utils.cn("px-3 py-1.5 md:px-4 md:py-2", "text-xs font-medium", "text-[var(--text-muted)]");
878
+ function ComboBoxGlassInner({ options, value, onValueChange, placeholder = "Select option...", emptyText = "No results found.", searchPlaceholder = "Search...", glassVariant = "glass", disabled = false, className, popoverClassName, clearable = false, side = "bottom", align = "start", label, error, success, required = false, size = "md", searchable = true, icon: TriggerIcon }, ref) {
879
+ const [open, setOpen] = (0, react.useState)(false);
880
+ const [search, setSearch] = (0, react.useState)("");
881
+ const fieldId = (0, react.useId)();
882
+ const selectedOption = (0, react.useMemo)(() => options.find((opt) => opt.value === value), [options, value]);
883
+ const filteredOptions = (0, react.useMemo)(() => {
884
+ if (!search) return options;
885
+ const searchLower = search.toLowerCase();
886
+ return options.filter((opt) => opt.label.toLowerCase().includes(searchLower));
887
+ }, [options, search]);
888
+ const handleSelect = (0, react.useCallback)((optionValue) => {
889
+ if (clearable && value === optionValue) onValueChange?.(void 0);
890
+ else onValueChange?.(optionValue);
891
+ setOpen(false);
892
+ setSearch("");
893
+ }, [
894
+ value,
895
+ onValueChange,
896
+ clearable
897
+ ]);
898
+ const getGlassClass = () => {
899
+ return {
900
+ glass: "glass",
901
+ frosted: "frosted",
902
+ fluted: "fluted",
903
+ crystal: "crystal"
904
+ }[glassVariant];
905
+ };
906
+ const comboboxContent = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(Popover, {
907
+ open,
908
+ onOpenChange: setOpen,
909
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(PopoverTrigger, {
910
+ asChild: true,
911
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(ButtonGlass, {
912
+ ref,
913
+ variant: "secondary",
914
+ role: "combobox",
915
+ "aria-expanded": open,
916
+ "aria-haspopup": "listbox",
917
+ "aria-label": selectedOption?.label || placeholder,
918
+ "aria-describedby": error ? `${fieldId}-error` : success ? `${fieldId}-success` : void 0,
919
+ disabled,
920
+ className: require_utils.cn("w-full justify-between", inputVariants({ size }), !selectedOption && "text-muted-foreground", className),
921
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
922
+ className: "flex items-center gap-2 truncate",
923
+ children: [TriggerIcon && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TriggerIcon, { className: ICON_SIZES.md }), selectedOption ? selectedOption.label : placeholder]
924
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ChevronsUpDownIcon, { className: require_utils.cn(ICON_SIZES.md, "shrink-0 opacity-50") })]
925
+ })
926
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PopoverContent, {
927
+ side,
928
+ align,
929
+ className: require_utils.cn(dropdownContentClasses, "w-[--radix-popover-trigger-width] p-0 border-0", getGlassClass(), popoverClassName),
930
+ style: getDropdownContentStyles(),
931
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(Command, {
932
+ shouldFilter: false,
933
+ className: require_utils.cn("bg-transparent", "[&_[data-slot=command-input-wrapper]]:border-b-0", "[&_[data-slot=command-input-wrapper]_svg]:text-[var(--text-muted)]", "[&_[data-slot=command-input-wrapper]_svg]:opacity-80"),
934
+ children: [searchable && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CommandInput, {
935
+ placeholder: searchPlaceholder,
936
+ value: search,
937
+ onValueChange: setSearch,
938
+ className: "text-[var(--text-primary)] placeholder:text-[var(--text-muted)] h-10 font-medium"
939
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(CommandList, {
940
+ className: "p-1.5 scrollbar-hide",
941
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(CommandEmpty, {
942
+ className: "text-[var(--text-muted)] py-4",
943
+ children: emptyText
944
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CommandGroup, {
945
+ className: "text-[var(--text-primary)] p-0",
946
+ children: filteredOptions.map((option) => {
947
+ const OptionIcon = option.icon;
948
+ const isSelected = value === option.value;
949
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(CommandItem, {
950
+ value: String(option.value),
951
+ disabled: option.disabled,
952
+ onSelect: () => handleSelect(option.value),
953
+ className: require_utils.cn(getDropdownItemClasses({ selected: isSelected }), option.disabled && "cursor-not-allowed opacity-50"),
954
+ children: [
955
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.CheckIcon, { className: require_utils.cn(ICON_SIZES.md, "shrink-0", isSelected ? "opacity-100 text-[var(--text-accent)]" : "opacity-0") }),
956
+ OptionIcon && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(OptionIcon, { className: require_utils.cn(ICON_SIZES.md, "shrink-0 text-[var(--dropdown-icon)]") }),
957
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
958
+ className: "truncate",
959
+ children: option.label
960
+ })
961
+ ]
962
+ }, String(option.value));
963
+ })
964
+ })]
965
+ })]
966
+ })
967
+ })]
968
+ });
969
+ if (label || error || success) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FormFieldWrapper, {
970
+ label,
971
+ error,
972
+ success,
973
+ required,
974
+ htmlFor: fieldId,
975
+ children: comboboxContent
976
+ });
977
+ return comboboxContent;
978
+ }
979
+ const ComboBoxGlass = (0, react.forwardRef)(ComboBoxGlassInner);
980
+ ComboBoxGlassInner.displayName = "ComboBoxGlass";
981
+ var DropdownMenuGlass = __radix_ui_react_dropdown_menu.Root;
982
+ var DropdownMenuGlassTrigger = __radix_ui_react_dropdown_menu.Trigger;
983
+ var DropdownMenuGlassGroup = __radix_ui_react_dropdown_menu.Group;
984
+ var DropdownMenuGlassPortal = __radix_ui_react_dropdown_menu.Portal;
985
+ var DropdownMenuGlassSub = __radix_ui_react_dropdown_menu.Sub;
986
+ var DropdownMenuGlassRadioGroup = __radix_ui_react_dropdown_menu.RadioGroup;
987
+ var DropdownMenuGlassSubTrigger = react.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(__radix_ui_react_dropdown_menu.SubTrigger, {
988
+ ref,
989
+ className: require_utils.cn(getDropdownItemClasses(), "data-[state=open]:bg-[var(--dropdown-item-hover)]", inset && "pl-8", className),
990
+ ...props,
991
+ children: [children, /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ChevronRightIcon, { className: "ml-auto h-4 w-4" })]
992
+ }));
993
+ DropdownMenuGlassSubTrigger.displayName = "DropdownMenuGlassSubTrigger";
994
+ var DropdownMenuGlassSubContent = react.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_dropdown_menu.SubContent, {
995
+ ref,
996
+ className: require_utils.cn(dropdownContentClasses, "p-1.5", className),
997
+ style: getDropdownContentStyles(),
998
+ ...props
999
+ }));
1000
+ DropdownMenuGlassSubContent.displayName = "DropdownMenuGlassSubContent";
1001
+ var DropdownMenuGlassContent = react.forwardRef(({ className, sideOffset = 8, ...props }, ref) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_dropdown_menu.Portal, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_dropdown_menu.Content, {
1002
+ ref,
1003
+ sideOffset,
1004
+ className: require_utils.cn(dropdownContentClasses, "p-1.5", className),
1005
+ style: getDropdownContentStyles(),
1006
+ ...props
1007
+ }) }));
1008
+ DropdownMenuGlassContent.displayName = "DropdownMenuGlassContent";
1009
+ var DropdownMenuGlassItem = react.forwardRef(({ className, inset, variant = "default", ...props }, ref) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_dropdown_menu.Item, {
1010
+ ref,
1011
+ className: require_utils.cn(getDropdownItemClasses({ danger: variant === "destructive" }), inset && "pl-8", className),
1012
+ ...props
1013
+ }));
1014
+ DropdownMenuGlassItem.displayName = "DropdownMenuGlassItem";
1015
+ var DropdownMenuGlassCheckboxItem = react.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(__radix_ui_react_dropdown_menu.CheckboxItem, {
1016
+ ref,
1017
+ className: require_utils.cn(getDropdownItemClasses(), "pl-8 pr-2", className),
1018
+ checked,
1019
+ ...props,
1020
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1021
+ className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center",
1022
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_dropdown_menu.ItemIndicator, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.CheckIcon, { className: "h-4 w-4" }) })
1023
+ }), children]
1024
+ }));
1025
+ DropdownMenuGlassCheckboxItem.displayName = "DropdownMenuGlassCheckboxItem";
1026
+ var DropdownMenuGlassRadioItem = react.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(__radix_ui_react_dropdown_menu.RadioItem, {
1027
+ ref,
1028
+ className: require_utils.cn(getDropdownItemClasses(), "pl-8 pr-2", className),
1029
+ ...props,
1030
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1031
+ className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center",
1032
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_dropdown_menu.ItemIndicator, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.CircleIcon, { className: "h-2 w-2 fill-current" }) })
1033
+ }), children]
1034
+ }));
1035
+ DropdownMenuGlassRadioItem.displayName = "DropdownMenuGlassRadioItem";
1036
+ var DropdownMenuGlassLabel = react.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_dropdown_menu.Label, {
1037
+ ref,
1038
+ className: require_utils.cn(dropdownLabelClasses, inset && "pl-8", className),
1039
+ ...props
1040
+ }));
1041
+ DropdownMenuGlassLabel.displayName = "DropdownMenuGlassLabel";
1042
+ var DropdownMenuGlassSeparator = react.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_dropdown_menu.Separator, {
1043
+ ref,
1044
+ className: require_utils.cn(dropdownSeparatorClasses, "-mx-1 my-1", className),
1045
+ ...props
1046
+ }));
1047
+ DropdownMenuGlassSeparator.displayName = "DropdownMenuGlassSeparator";
1048
+ var DropdownMenuGlassShortcut = ({ className, ...props }) => {
1049
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1050
+ className: require_utils.cn("ml-auto text-xs tracking-widest text-(--text-muted)", className),
1051
+ ...props
1052
+ });
1053
+ };
1054
+ DropdownMenuGlassShortcut.displayName = "DropdownMenuGlassShortcut";
1055
+ const DropdownGlass = react.forwardRef(({ trigger, items, align = "left", className }, ref) => {
1056
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1057
+ ref,
1058
+ className: require_utils.cn("relative inline-block", className),
1059
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(DropdownMenuGlass, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(DropdownMenuGlassTrigger, {
1060
+ asChild: true,
1061
+ children: trigger
1062
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DropdownMenuGlassContent, {
1063
+ align: align === "left" ? "start" : "end",
1064
+ children: items.map((item, idx) => item.divider ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DropdownMenuGlassSeparator, {}, `divider-${idx}`) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(DropdownMenuGlassItem, {
1065
+ variant: item.danger ? "destructive" : "default",
1066
+ onSelect: item.onClick,
1067
+ children: [item.icon && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(item.icon, { className: require_utils.cn(ICON_SIZES.md, "shrink-0", item.danger ? "text-(--alert-danger-text)" : "text-(--dropdown-icon) group-data-highlighted:text-(--dropdown-icon-hover)") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1068
+ className: "font-medium",
1069
+ children: item.label
1070
+ })]
1071
+ }, `item-${idx}`))
1072
+ })] })
1073
+ });
1074
+ });
1075
+ DropdownGlass.displayName = "DropdownGlass";
1076
+ const cardIntensity = (0, class_variance_authority.cva)("border transition-all duration-300 text-[var(--text-primary)]", {
1077
+ variants: {
1078
+ intensity: {
1079
+ subtle: "",
1080
+ medium: "",
1081
+ strong: ""
1082
+ },
1083
+ hover: {
1084
+ true: "hover-glow cursor-pointer",
1085
+ false: ""
1086
+ },
1087
+ padding: {
1088
+ none: "",
1089
+ compact: "p-4 md:p-5 rounded-lg",
1090
+ default: "p-6 rounded-xl",
1091
+ featured: "p-8 rounded-[20px]"
1092
+ }
1093
+ },
1094
+ defaultVariants: {
1095
+ intensity: "medium",
1096
+ hover: true,
1097
+ padding: "default"
1098
+ }
1099
+ });
1100
+ var blurMap = {
1101
+ subtle: "var(--blur-sm)",
1102
+ medium: "var(--blur-md)",
1103
+ strong: "var(--blur-lg)"
1104
+ };
1105
+ var bgVarMap = {
1106
+ subtle: "var(--card-subtle-bg)",
1107
+ medium: "var(--card-medium-bg)",
1108
+ strong: "var(--card-strong-bg)"
1109
+ };
1110
+ var borderVarMap = {
1111
+ subtle: "var(--card-subtle-border)",
1112
+ medium: "var(--card-medium-border)",
1113
+ strong: "var(--card-strong-border)"
1114
+ };
1115
+ var glowVarMap = {
1116
+ blue: "var(--glow-blue)",
1117
+ violet: "var(--glow-violet)",
1118
+ purple: "var(--glow-violet)",
1119
+ cyan: "var(--glow-cyan)"
1120
+ };
1121
+ const GlassCard = (0, react.forwardRef)(({ asChild = false, children, className, intensity = "medium", glow = null, hover = true, padding = "default", ...props }, ref) => {
1122
+ const { isHovered, hoverProps } = require_use_focus.useHover();
1123
+ const intensityVal = intensity ?? "medium";
1124
+ const cardStyles = {
1125
+ background: isHovered && hover ? "var(--card-hover-bg)" : bgVarMap[intensityVal],
1126
+ borderColor: isHovered && hover ? "var(--card-hover-border)" : borderVarMap[intensityVal],
1127
+ backdropFilter: `blur(${blurMap[intensityVal]})`,
1128
+ WebkitBackdropFilter: `blur(${blurMap[intensityVal]})`,
1129
+ boxShadow: glow ? glowVarMap[glow] : isHovered && hover ? "var(--card-hover-glow)" : "var(--glow-neutral)"
1130
+ };
1131
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(asChild ? __radix_ui_react_slot.Slot : "div", {
1132
+ ref,
1133
+ className: require_utils.cn(cardIntensity({
1134
+ intensity,
1135
+ hover,
1136
+ padding
1137
+ }), className),
1138
+ style: cardStyles,
1139
+ onMouseEnter: hoverProps.onMouseEnter,
1140
+ onMouseLeave: hoverProps.onMouseLeave,
1141
+ ...props,
1142
+ children
1143
+ });
1144
+ });
1145
+ GlassCard.displayName = "GlassCard";
1146
+ var getInputStyles = (isFocused, error, success) => {
1147
+ let borderColor = "var(--input-border)";
1148
+ if (error) borderColor = "var(--alert-danger-text)";
1149
+ else if (success) borderColor = "var(--alert-success-text)";
1150
+ else if (isFocused) borderColor = "var(--input-focus-border)";
1151
+ return {
1152
+ background: "var(--input-bg)",
1153
+ border: `1px solid ${borderColor}`,
1154
+ color: "var(--input-text)",
1155
+ boxShadow: isFocused ? "var(--focus-glow)" : "none"
1156
+ };
1157
+ };
1158
+ const InputGlass = (0, react.forwardRef)(({ className, size, inputSize, label, error, success, icon: Icon, iconPosition = "left", disabled, onFocus, onBlur, ...props }, ref) => {
1159
+ const sizeValue = size ?? inputSize ?? "md";
1160
+ if (process.env.NODE_ENV !== "production" && inputSize !== void 0) console.warn("[InputGlass] The `inputSize` prop is deprecated and will be removed in v4.0. Use `size` instead.");
1161
+ const { isFocused, focusProps } = require_use_focus.useFocus();
1162
+ const handleFocus = (0, react.useCallback)((e) => {
1163
+ focusProps.onFocus(e);
1164
+ onFocus?.(e);
1165
+ }, [focusProps, onFocus]);
1166
+ const handleBlur = (0, react.useCallback)((e) => {
1167
+ focusProps.onBlur(e);
1168
+ onBlur?.(e);
1169
+ }, [focusProps, onBlur]);
1170
+ const hasIcon = Boolean(Icon);
1171
+ const paddingLeft = hasIcon && iconPosition === "left" ? "pl-10" : "";
1172
+ const paddingRight = hasIcon && iconPosition === "right" ? "pr-10" : "";
1173
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FormFieldWrapper, {
1174
+ label,
1175
+ error,
1176
+ success,
1177
+ htmlFor: props.id,
1178
+ className,
1179
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1180
+ className: "relative",
1181
+ children: [
1182
+ Icon && iconPosition === "left" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Icon, {
1183
+ className: require_utils.cn("absolute left-2.5 md:left-3 top-1/2 -translate-y-1/2 transition-colors duration-300 z-10", ICON_SIZES.md),
1184
+ style: { color: isFocused ? "var(--text-accent)" : "var(--text-muted)" }
1185
+ }),
1186
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
1187
+ ref,
1188
+ "data-slot": "input",
1189
+ className: require_utils.cn(inputVariants({ size: sizeValue }), paddingLeft, paddingRight),
1190
+ style: getInputStyles(isFocused, error, success),
1191
+ disabled,
1192
+ onFocus: handleFocus,
1193
+ onBlur: handleBlur,
1194
+ ...props
1195
+ }),
1196
+ Icon && iconPosition === "right" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Icon, {
1197
+ className: require_utils.cn("absolute right-2.5 md:right-3 top-1/2 -translate-y-1/2 transition-colors duration-300 z-10", ICON_SIZES.md),
1198
+ style: { color: isFocused ? "var(--text-accent)" : "var(--text-muted)" }
1199
+ })
1200
+ ]
1201
+ })
1202
+ });
1203
+ });
1204
+ InputGlass.displayName = "InputGlass";
1205
+ const modalSizes = (0, class_variance_authority.cva)("relative w-full max-w-[calc(100%-2rem)] rounded-2xl p-6 transition-all duration-300", {
1206
+ variants: { size: {
1207
+ sm: "sm:max-w-[480px]",
1208
+ md: "sm:max-w-[640px]",
1209
+ lg: "sm:max-w-[800px]",
1210
+ xl: "sm:max-w-xl",
1211
+ full: "sm:max-w-4xl"
1212
+ } },
1213
+ defaultVariants: { size: "sm" }
1214
+ });
1215
+ var ModalContext = react.createContext({ size: "sm" });
1216
+ var useModalContext = () => react.useContext(ModalContext);
1217
+ function ModalRoot({ size = "sm", children, ...props }) {
1218
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ModalContext.Provider, {
1219
+ value: { size },
1220
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_dialog.Root, {
1221
+ "data-slot": "dialog",
1222
+ ...props,
1223
+ children
1224
+ })
1225
+ });
1226
+ }
1227
+ function ModalTrigger({ ...props }) {
1228
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_dialog.Trigger, {
1229
+ "data-slot": "dialog-trigger",
1230
+ ...props
1231
+ });
1232
+ }
1233
+ function ModalPortal({ ...props }) {
1234
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_dialog.Portal, {
1235
+ "data-slot": "dialog-portal",
1236
+ ...props
1237
+ });
1238
+ }
1239
+ var ModalOverlay = react.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_dialog.Overlay, {
1240
+ ref,
1241
+ "data-slot": "dialog-overlay",
1242
+ className: require_utils.cn("fixed inset-0 z-50", "data-[state=open]:animate-in data-[state=closed]:animate-out", "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0", className),
1243
+ style: {
1244
+ background: "var(--modal-overlay)",
1245
+ backdropFilter: "blur(var(--blur-sm))",
1246
+ WebkitBackdropFilter: "blur(var(--blur-sm))"
1247
+ },
1248
+ ...props
1249
+ }));
1250
+ ModalOverlay.displayName = "ModalOverlay";
1251
+ var ModalContent = react.forwardRef(({ className, children, showCloseButton = true, size: sizeProp, ...props }, ref) => {
1252
+ const { size: contextSize } = useModalContext();
1253
+ const size = sizeProp ?? contextSize;
1254
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(ModalPortal, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ModalOverlay, {}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(__radix_ui_react_dialog.Content, {
1255
+ ref,
1256
+ "data-slot": "dialog-content",
1257
+ className: require_utils.cn(modalSizes({ size }), "fixed top-[50%] left-[50%] z-50", "translate-x-[-50%] translate-y-[-50%]", "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-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%]", "data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]", "duration-200", className),
1258
+ style: {
1259
+ background: "var(--modal-bg)",
1260
+ border: "1px solid var(--modal-border)",
1261
+ boxShadow: "var(--modal-glow)",
1262
+ backdropFilter: "blur(var(--blur-lg))",
1263
+ WebkitBackdropFilter: "blur(var(--blur-lg))"
1264
+ },
1265
+ ...props,
1266
+ children: [
1267
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1268
+ className: "absolute inset-0 rounded-3xl pointer-events-none",
1269
+ style: { background: "var(--modal-glow-effect)" },
1270
+ "aria-hidden": "true"
1271
+ }),
1272
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1273
+ className: "relative",
1274
+ children
1275
+ }),
1276
+ showCloseButton && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(__radix_ui_react_dialog.Close, {
1277
+ "data-slot": "dialog-close",
1278
+ className: require_utils.cn("absolute top-4 right-4", "p-1.5 md:p-2 rounded-xl", "transition-all duration-300", "ring-offset-background", "focus:outline-none focus:ring-2 focus:ring-(--semantic-primary) focus:ring-offset-2", "hover:opacity-100 opacity-70", "disabled:pointer-events-none"),
1279
+ style: {
1280
+ background: "var(--modal-close-btn-bg)",
1281
+ border: "var(--modal-close-btn-border)",
1282
+ color: "var(--text-muted)"
1283
+ },
1284
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.X, { className: ICON_SIZES.md }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1285
+ className: "sr-only",
1286
+ children: "Close"
1287
+ })]
1288
+ })
1289
+ ]
1290
+ })] });
1291
+ });
1292
+ ModalContent.displayName = "ModalContent";
1293
+ function ModalHeader({ className, ...props }) {
1294
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1295
+ "data-slot": "dialog-header",
1296
+ className: require_utils.cn("flex flex-col gap-2 text-center sm:text-left mb-4", className),
1297
+ ...props
1298
+ });
1299
+ }
1300
+ function ModalBody({ className, ...props }) {
1301
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1302
+ "data-slot": "dialog-body",
1303
+ className: require_utils.cn("relative", className),
1304
+ style: { color: "var(--text-secondary)" },
1305
+ ...props
1306
+ });
1307
+ }
1308
+ function ModalFooter({ className, ...props }) {
1309
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1310
+ "data-slot": "dialog-footer",
1311
+ className: require_utils.cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end mt-4", className),
1312
+ ...props
1313
+ });
1314
+ }
1315
+ var ModalTitle = react.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_dialog.Title, {
1316
+ ref,
1317
+ "data-slot": "dialog-title",
1318
+ className: require_utils.cn("text-lg md:text-xl font-semibold leading-none tracking-tight", className),
1319
+ style: { color: "var(--text-primary)" },
1320
+ ...props
1321
+ }));
1322
+ ModalTitle.displayName = "ModalTitle";
1323
+ var ModalDescription = react.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_dialog.Description, {
1324
+ ref,
1325
+ "data-slot": "dialog-description",
1326
+ className: require_utils.cn("text-sm", className),
1327
+ style: { color: "var(--text-muted)" },
1328
+ ...props
1329
+ }));
1330
+ ModalDescription.displayName = "ModalDescription";
1331
+ function ModalClose({ ...props }) {
1332
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_dialog.Close, {
1333
+ "data-slot": "dialog-close",
1334
+ ...props
1335
+ });
1336
+ }
1337
+ const ModalGlass = {
1338
+ Root: ModalRoot,
1339
+ Trigger: ModalTrigger,
1340
+ Portal: ModalPortal,
1341
+ Overlay: ModalOverlay,
1342
+ Content: ModalContent,
1343
+ Header: ModalHeader,
1344
+ Body: ModalBody,
1345
+ Footer: ModalFooter,
1346
+ Title: ModalTitle,
1347
+ Description: ModalDescription,
1348
+ Close: ModalClose
1349
+ };
1350
+ const notificationVariants = (0, class_variance_authority.cva)("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", {
1351
+ variants: { type: {
1352
+ info: "",
1353
+ success: "",
1354
+ warning: "",
1355
+ error: ""
1356
+ } },
1357
+ defaultVariants: { type: "info" }
1358
+ });
1359
+ var NOTIFICATION_ICONS = {
1360
+ info: lucide_react.Info,
1361
+ success: lucide_react.CheckCircle,
1362
+ warning: lucide_react.AlertTriangle,
1363
+ error: lucide_react.AlertCircle
1364
+ };
1365
+ var getTypeVars = (notifType) => {
1366
+ return {
1367
+ info: {
1368
+ color: "var(--notification-info-color)",
1369
+ glow: "var(--notification-info-glow)",
1370
+ iconBg: "var(--notification-info-icon-bg)"
1371
+ },
1372
+ success: {
1373
+ color: "var(--notification-success-color)",
1374
+ glow: "var(--notification-success-glow)",
1375
+ iconBg: "var(--notification-success-icon-bg)"
1376
+ },
1377
+ warning: {
1378
+ color: "var(--notification-warning-color)",
1379
+ glow: "var(--notification-warning-glow)",
1380
+ iconBg: "var(--notification-warning-icon-bg)"
1381
+ },
1382
+ error: {
1383
+ color: "var(--notification-error-color)",
1384
+ glow: "var(--notification-error-glow)",
1385
+ iconBg: "var(--notification-error-icon-bg)"
1386
+ }
1387
+ }[notifType];
1388
+ };
1389
+ const NotificationGlass = (0, react.forwardRef)(({ variant: variantProp, type: typeProp, title, message, onClose, className, ...props }, ref) => {
1390
+ const variant = variantProp ?? typeProp ?? "default";
1391
+ if (process.env.NODE_ENV === "development" && typeProp) console.warn("NotificationGlass: The \"type\" prop is deprecated. Use \"variant\" instead. Example: <NotificationGlass variant=\"destructive\" />");
1392
+ const effectiveType = {
1393
+ default: "info",
1394
+ destructive: "error",
1395
+ success: "success",
1396
+ warning: "warning",
1397
+ info: "info",
1398
+ error: "error"
1399
+ }[variant] || "info";
1400
+ const { isHovered, hoverProps } = require_use_focus.useHover();
1401
+ const Icon = NOTIFICATION_ICONS[effectiveType];
1402
+ const config = getTypeVars(effectiveType);
1403
+ const containerStyles = {
1404
+ background: "var(--notification-bg)",
1405
+ border: "1px solid var(--notification-border)",
1406
+ boxShadow: isHovered ? config.glow : "var(--notification-shadow)",
1407
+ transform: isHovered ? "translateY(-2px)" : "translateY(0)"
1408
+ };
1409
+ const iconContainerStyles = {
1410
+ background: config.iconBg,
1411
+ boxShadow: isHovered ? config.glow : "none"
1412
+ };
1413
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1414
+ ref,
1415
+ className: require_utils.cn(notificationVariants({ type: effectiveType }), className),
1416
+ style: containerStyles,
1417
+ role: "alert",
1418
+ "aria-live": "polite",
1419
+ onMouseEnter: hoverProps.onMouseEnter,
1420
+ onMouseLeave: hoverProps.onMouseLeave,
1421
+ ...props,
1422
+ children: [
1423
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1424
+ className: "w-8 h-8 md:w-10 md:h-10 rounded-xl flex items-center justify-center shrink-0",
1425
+ style: iconContainerStyles,
1426
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Icon, {
1427
+ className: "w-4 h-4 md:w-5 md:h-5",
1428
+ style: { color: config.color }
1429
+ })
1430
+ }),
1431
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1432
+ className: "flex-1 min-w-0",
1433
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1434
+ className: "font-semibold text-xs md:text-sm mb-0.5 md:mb-1",
1435
+ style: { color: "var(--text-primary)" },
1436
+ children: title
1437
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
1438
+ className: "text-xs md:text-sm",
1439
+ style: { color: "var(--text-secondary)" },
1440
+ children: message
1441
+ })]
1442
+ }),
1443
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
1444
+ onClick: onClose,
1445
+ className: "p-1 md:p-1.5 rounded-lg shrink-0",
1446
+ style: { color: "var(--text-muted)" },
1447
+ type: "button",
1448
+ "aria-label": "Close notification",
1449
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.X, { className: ICON_SIZES.md })
1450
+ })
1451
+ ]
1452
+ });
1453
+ });
1454
+ NotificationGlass.displayName = "NotificationGlass";
1455
+ var PopoverGlassRoot = __radix_ui_react_popover.Root;
1456
+ var PopoverGlassTrigger = __radix_ui_react_popover.Trigger;
1457
+ var PopoverGlassAnchor = __radix_ui_react_popover.Anchor;
1458
+ var PopoverGlassContent = react.forwardRef(({ className, align = "center", sideOffset = 8, showArrow = true, children, ...props }, ref) => {
1459
+ const popoverStyles = {
1460
+ background: "var(--popover-bg)",
1461
+ border: "1px solid var(--popover-border)",
1462
+ boxShadow: "var(--popover-shadow)",
1463
+ backdropFilter: "blur(var(--blur-md))",
1464
+ WebkitBackdropFilter: "blur(var(--blur-md))"
1465
+ };
1466
+ const arrowStyles = { fill: "var(--popover-arrow-bg)" };
1467
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_popover.Portal, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(__radix_ui_react_popover.Content, {
1468
+ ref,
1469
+ align,
1470
+ sideOffset,
1471
+ className: require_utils.cn("z-50003 rounded-2xl", "animate-in fade-in-0 zoom-in-95 duration-200", "data-[side=bottom]:slide-in-from-top-2", "data-[side=top]:slide-in-from-bottom-2", "data-[side=right]:slide-in-from-left-2", "data-[side=left]:slide-in-from-right-2", "outline-none", className),
1472
+ style: popoverStyles,
1473
+ ...props,
1474
+ children: [children, showArrow && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_popover.Arrow, {
1475
+ className: "fill-current",
1476
+ style: arrowStyles,
1477
+ width: 16,
1478
+ height: 8
1479
+ })]
1480
+ }) });
1481
+ });
1482
+ PopoverGlassContent.displayName = "PopoverGlassContent";
1483
+ var PopoverGlassLegacy = react.forwardRef(({ trigger, children, side = "bottom", align = "center", sideOffset = 8, open, onOpenChange, showArrow = true, className }, ref) => {
1484
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(PopoverGlassRoot, {
1485
+ open,
1486
+ onOpenChange,
1487
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(PopoverGlassTrigger, {
1488
+ asChild: true,
1489
+ children: trigger
1490
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PopoverGlassContent, {
1491
+ ref,
1492
+ side,
1493
+ align,
1494
+ sideOffset,
1495
+ showArrow,
1496
+ className,
1497
+ children
1498
+ })]
1499
+ });
1500
+ });
1501
+ PopoverGlassLegacy.displayName = "PopoverGlassLegacy";
1502
+ const PopoverGlass = PopoverGlassRoot;
1503
+ const skeletonVariants = (0, class_variance_authority.cva)("overflow-hidden", {
1504
+ variants: { variant: {
1505
+ text: "h-3 md:h-4 rounded",
1506
+ title: "h-5 md:h-6 rounded",
1507
+ avatar: "w-10 h-10 md:w-12 md:h-12 rounded-full",
1508
+ thumbnail: "w-full h-24 md:h-32 rounded-xl",
1509
+ card: "w-full h-36 md:h-48 rounded-2xl"
1510
+ } },
1511
+ defaultVariants: { variant: "text" }
1512
+ });
1513
+ const SkeletonGlass = (0, react.forwardRef)(({ className, variant = "text", width, height, style, ...props }, ref) => {
1514
+ const skeletonStyles = {
1515
+ width,
1516
+ height,
1517
+ background: "linear-gradient(90deg, var(--skeleton-bg) 25%, var(--skeleton-shine) 50%, var(--skeleton-bg) 75%)",
1518
+ backgroundSize: "200% 100%",
1519
+ animation: "skeleton-loading 1.5s infinite",
1520
+ ...style
1521
+ };
1522
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1523
+ ref,
1524
+ className: require_utils.cn(skeletonVariants({ variant }), className),
1525
+ style: skeletonStyles,
1526
+ "aria-hidden": "true",
1527
+ ...props
1528
+ });
1529
+ });
1530
+ SkeletonGlass.displayName = "SkeletonGlass";
1531
+ const SliderGlass = (0, react.forwardRef)(({ className, value, defaultValue, onValueChange, onValueCommit, min = 0, max = 100, step = 1, showValue, label, error, success, disabled, orientation = "horizontal", ...props }, ref) => {
1532
+ const currentValue = value ?? defaultValue ?? [min];
1533
+ const formatValueDisplay = (values) => {
1534
+ if (values.length === 1) return `${values[0]}`;
1535
+ return `${values[0]} - ${values[values.length - 1]}`;
1536
+ };
1537
+ const trackStyles = { background: "var(--slider-track)" };
1538
+ const rangeStyles = { background: "var(--slider-fill)" };
1539
+ const thumbStyles = {
1540
+ background: "var(--slider-thumb)",
1541
+ border: "2px solid var(--slider-thumb-border)"
1542
+ };
1543
+ const customLabel = label && showValue || !label && showValue ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1544
+ className: "flex justify-between mb-1.5 md:mb-2",
1545
+ children: [label && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
1546
+ className: "text-xs md:text-sm font-medium",
1547
+ style: { color: "var(--text-secondary)" },
1548
+ children: label
1549
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1550
+ className: "text-xs md:text-sm font-medium tabular-nums",
1551
+ style: { color: "var(--text-secondary)" },
1552
+ children: formatValueDisplay(currentValue)
1553
+ })]
1554
+ }) : void 0;
1555
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(FormFieldWrapper, {
1556
+ label: showValue ? void 0 : label,
1557
+ error,
1558
+ success,
1559
+ className: require_utils.cn("w-full", className),
1560
+ children: [customLabel, /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(__radix_ui_react_slider.Root, {
1561
+ ref,
1562
+ value,
1563
+ defaultValue,
1564
+ onValueChange,
1565
+ onValueCommit,
1566
+ min,
1567
+ max,
1568
+ step,
1569
+ disabled,
1570
+ orientation,
1571
+ className: require_utils.cn("relative flex touch-none select-none", orientation === "horizontal" ? "w-full h-8 md:h-6 items-center" : "flex-col h-full w-8 md:w-6 justify-center", disabled && "opacity-50 cursor-not-allowed", "group"),
1572
+ ...props,
1573
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_slider.Track, {
1574
+ className: require_utils.cn("relative grow rounded-full", orientation === "horizontal" ? "h-2.5 md:h-2 w-full" : "w-2.5 md:w-2 h-full"),
1575
+ style: trackStyles,
1576
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_slider.Range, {
1577
+ className: require_utils.cn("absolute rounded-full transition-shadow duration-150", orientation === "horizontal" ? "h-full" : "w-full", "group-hover:shadow-(--slider-fill-glow)", "group-active:shadow-(--slider-fill-glow)"),
1578
+ style: rangeStyles
1579
+ })
1580
+ }), currentValue.map((_, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_slider.Thumb, {
1581
+ className: require_utils.cn("block rounded-full shadow-md transition-all duration-150", "w-6 h-6 md:w-5 md:h-5", "hover:scale-105", "focus-visible:outline-none focus-visible:shadow-(--focus-glow)", "active:scale-110", disabled && "pointer-events-none"),
1582
+ style: thumbStyles,
1583
+ "aria-label": label ? currentValue.length > 1 ? `${label} thumb ${index + 1}` : label : `Slider thumb ${index + 1}`
1584
+ }, index))]
1585
+ })]
1586
+ });
1587
+ });
1588
+ SliderGlass.displayName = "SliderGlass";
1589
+ var TabsContext = (0, react.createContext)(null);
1590
+ var useTabsContext = () => {
1591
+ const context = (0, react.useContext)(TabsContext);
1592
+ if (!context) throw new Error("Tabs compound components must be used within TabsGlass.Root");
1593
+ return context;
1594
+ };
1595
+ var TabsRoot = ({ value: controlledValue, defaultValue, onValueChange, children, className }) => {
1596
+ const [uncontrolledValue, setUncontrolledValue] = (0, react.useState)(defaultValue ?? "");
1597
+ const isControlled = controlledValue !== void 0;
1598
+ const value = isControlled ? controlledValue : uncontrolledValue;
1599
+ const handleValueChange = (newValue) => {
1600
+ if (!isControlled) setUncontrolledValue(newValue);
1601
+ onValueChange?.(newValue);
1602
+ };
1603
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TabsContext.Provider, {
1604
+ value: {
1605
+ value,
1606
+ onValueChange: handleValueChange
1607
+ },
1608
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1609
+ className: require_utils.cn("tabs-glass-root", className),
1610
+ children
1611
+ })
1612
+ });
1613
+ };
1614
+ var TabsList = (0, react.forwardRef)(({ children, className, ...props }, ref) => {
1615
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1616
+ ref,
1617
+ className: require_utils.cn("inline-flex gap-0.5 md:gap-1 p-0.5 md:p-1 rounded-xl", className),
1618
+ style: {
1619
+ background: "var(--tab-container-bg)",
1620
+ border: "1px solid var(--tab-container-border)"
1621
+ },
1622
+ role: "tablist",
1623
+ ...props,
1624
+ children
1625
+ });
1626
+ });
1627
+ TabsList.displayName = "TabsList";
1628
+ var TabsTrigger = (0, react.forwardRef)(({ value, children, className, disabled }, ref) => {
1629
+ const { value: activeValue, onValueChange } = useTabsContext();
1630
+ const { isFocusVisible, focusProps } = require_use_focus.useFocus({ focusVisible: true });
1631
+ const isActive = activeValue === value;
1632
+ const tabStyles = {
1633
+ background: isActive ? "var(--tab-active-bg)" : "var(--tab-bg)",
1634
+ color: isActive ? "var(--tab-active-text)" : "var(--text-secondary)",
1635
+ boxShadow: isFocusVisible && !disabled ? "var(--focus-glow)" : "none"
1636
+ };
1637
+ const handleKeyDown = (e) => {
1638
+ if (disabled) return;
1639
+ const tablist = e.currentTarget.closest("[role=\"tablist\"]");
1640
+ if (!tablist) return;
1641
+ const tabs = Array.from(tablist.querySelectorAll("[role=\"tab\"]:not([disabled])"));
1642
+ const currentIndex = tabs.indexOf(e.currentTarget);
1643
+ let nextIndex = currentIndex;
1644
+ switch (e.key) {
1645
+ case "ArrowRight":
1646
+ e.preventDefault();
1647
+ nextIndex = currentIndex + 1 >= tabs.length ? 0 : currentIndex + 1;
1648
+ break;
1649
+ case "ArrowLeft":
1650
+ e.preventDefault();
1651
+ nextIndex = currentIndex - 1 < 0 ? tabs.length - 1 : currentIndex - 1;
1652
+ break;
1653
+ case "Home":
1654
+ e.preventDefault();
1655
+ nextIndex = 0;
1656
+ break;
1657
+ case "End":
1658
+ e.preventDefault();
1659
+ nextIndex = tabs.length - 1;
1660
+ break;
1661
+ default: return;
1662
+ }
1663
+ const nextTab = tabs[nextIndex];
1664
+ if (nextTab) {
1665
+ nextTab.focus();
1666
+ const nextValue = nextTab.getAttribute("data-value");
1667
+ if (nextValue && onValueChange) onValueChange(nextValue);
1668
+ }
1669
+ };
1670
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
1671
+ ref,
1672
+ type: "button",
1673
+ role: "tab",
1674
+ "aria-selected": isActive,
1675
+ disabled,
1676
+ "data-value": value,
1677
+ className: require_utils.cn("relative px-2.5 py-1.5 md:px-4 md:py-2 rounded-lg text-xs md:text-sm font-medium transition-[background-color,color,opacity] duration-300", disabled && "opacity-50 cursor-not-allowed", className),
1678
+ style: tabStyles,
1679
+ onClick: () => !disabled && onValueChange?.(value),
1680
+ onKeyDown: handleKeyDown,
1681
+ onFocus: focusProps.onFocus,
1682
+ onBlur: focusProps.onBlur,
1683
+ children: [children, isActive && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1684
+ className: "absolute bottom-0 left-1/2 -translate-x-1/2 w-6 md:w-8 h-0.5 rounded-full",
1685
+ style: { background: "var(--tab-indicator)" }
1686
+ })]
1687
+ });
1688
+ });
1689
+ TabsTrigger.displayName = "TabsTrigger";
1690
+ var TabsContent = ({ value, children, className }) => {
1691
+ const { value: activeValue } = useTabsContext();
1692
+ const isActive = activeValue === value;
1693
+ if (!isActive) return null;
1694
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1695
+ role: "tabpanel",
1696
+ "aria-hidden": !isActive,
1697
+ className: require_utils.cn("animate-in fade-in-0 duration-200", className),
1698
+ children
1699
+ });
1700
+ };
1701
+ const TabsGlass = {
1702
+ Root: TabsRoot,
1703
+ List: TabsList,
1704
+ Trigger: TabsTrigger,
1705
+ Content: TabsContent
1706
+ };
1707
+ const Tabs = TabsRoot;
1708
+ const toggleSizes = (0, class_variance_authority.cva)("relative rounded-full transition-all duration-300", {
1709
+ variants: {
1710
+ size: {
1711
+ sm: "w-8 h-4",
1712
+ default: "w-11 h-6",
1713
+ lg: "w-14 h-7"
1714
+ },
1715
+ variant: {
1716
+ default: "",
1717
+ outline: "border-2"
1718
+ }
1719
+ },
1720
+ defaultVariants: {
1721
+ size: "default",
1722
+ variant: "default"
1723
+ }
1724
+ });
1725
+ var sizesConfig = {
1726
+ sm: {
1727
+ track: "w-8 h-4",
1728
+ knob: "w-3 h-3",
1729
+ translate: "translate-x-4"
1730
+ },
1731
+ default: {
1732
+ track: "w-11 h-6",
1733
+ knob: "w-5 h-5",
1734
+ translate: "translate-x-5"
1735
+ },
1736
+ lg: {
1737
+ track: "w-14 h-7",
1738
+ knob: "w-6 h-6",
1739
+ translate: "translate-x-7"
1740
+ }
1741
+ };
1742
+ const ToggleGlass = (0, react.forwardRef)(({ className, size = "default", variant = "default", pressed: controlledPressed, defaultPressed = false, onPressedChange, disabled, label, ...props }, ref) => {
1743
+ const [uncontrolledPressed, setUncontrolledPressed] = (0, react.useState)(defaultPressed);
1744
+ const isControlled = controlledPressed !== void 0;
1745
+ const isPressed = isControlled ? controlledPressed : uncontrolledPressed;
1746
+ const { isFocusVisible, focusProps } = require_use_focus.useFocus({ focusVisible: true });
1747
+ const s = sizesConfig[size ?? "default"];
1748
+ const handleToggle = () => {
1749
+ if (disabled) return;
1750
+ const newValue = !isPressed;
1751
+ if (!isControlled) setUncontrolledPressed(newValue);
1752
+ onPressedChange?.(newValue);
1753
+ };
1754
+ const getTrackStyles = () => {
1755
+ if (variant === "outline") return {
1756
+ background: isPressed ? "var(--toggle-outline-active-bg)" : "transparent",
1757
+ borderColor: isPressed ? "var(--toggle-outline-active-border)" : "var(--toggle-outline-border)",
1758
+ boxShadow: isFocusVisible && !disabled ? "var(--focus-glow)" : "none"
1759
+ };
1760
+ return {
1761
+ background: isPressed ? "var(--toggle-active-bg)" : "var(--toggle-bg)",
1762
+ boxShadow: isFocusVisible && !disabled ? "var(--focus-glow)" : isPressed ? "var(--toggle-glow)" : "none"
1763
+ };
1764
+ };
1765
+ const knobStyles = { background: "var(--toggle-knob)" };
1766
+ const toggle = /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1767
+ className: "inline-flex items-center justify-center min-h-11",
1768
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
1769
+ ref,
1770
+ type: "button",
1771
+ role: "switch",
1772
+ "aria-pressed": isPressed,
1773
+ "aria-label": label || "Toggle switch",
1774
+ disabled,
1775
+ className: require_utils.cn(toggleSizes({
1776
+ size,
1777
+ variant
1778
+ }), disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer", !label && className),
1779
+ style: getTrackStyles(),
1780
+ onClick: handleToggle,
1781
+ onFocus: focusProps.onFocus,
1782
+ onBlur: focusProps.onBlur,
1783
+ ...props,
1784
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1785
+ className: require_utils.cn("absolute top-0.5 left-0.5 rounded-full shadow-md transition-all duration-300", s.knob, isPressed && s.translate),
1786
+ style: knobStyles
1787
+ })
1788
+ })
1789
+ });
1790
+ if (label) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
1791
+ className: require_utils.cn("inline-flex items-center gap-2 md:gap-2.5", disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer", className),
1792
+ children: [toggle, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1793
+ className: "text-xs md:text-sm",
1794
+ style: { color: "var(--text-secondary)" },
1795
+ children: label
1796
+ })]
1797
+ });
1798
+ return toggle;
1799
+ });
1800
+ ToggleGlass.displayName = "ToggleGlass";
1801
+ var TooltipGlassProvider = ({ delayDuration = 0, ...props }) => {
1802
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_tooltip.Provider, {
1803
+ "data-slot": "tooltip-provider",
1804
+ delayDuration,
1805
+ ...props
1806
+ });
1807
+ };
1808
+ TooltipGlassProvider.displayName = "TooltipGlassProvider";
1809
+ function TooltipGlassRoot({ ...props }) {
1810
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TooltipGlassProvider, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_tooltip.Root, {
1811
+ "data-slot": "tooltip",
1812
+ ...props
1813
+ }) });
1814
+ }
1815
+ var TooltipGlassTrigger = react.forwardRef(({ ...props }, ref) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_tooltip.Trigger, {
1816
+ ref,
1817
+ "data-slot": "tooltip-trigger",
1818
+ ...props
1819
+ }));
1820
+ TooltipGlassTrigger.displayName = "TooltipGlassTrigger";
1821
+ var TooltipGlassContent = react.forwardRef(({ className, sideOffset = 0, children, ...props }, ref) => {
1822
+ const tooltipStyles = {
1823
+ background: "var(--tooltip-bg)",
1824
+ color: "var(--tooltip-text)",
1825
+ border: "1px solid var(--tooltip-border)",
1826
+ boxShadow: "var(--tooltip-shadow)",
1827
+ backdropFilter: "blur(var(--blur-xl))",
1828
+ WebkitBackdropFilter: "blur(var(--blur-xl))"
1829
+ };
1830
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_tooltip.Portal, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(__radix_ui_react_tooltip.Content, {
1831
+ ref,
1832
+ sideOffset,
1833
+ "data-slot": "tooltip-content",
1834
+ className: require_utils.cn("z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance", "animate-in fade-in-0 zoom-in-95", "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-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", className),
1835
+ style: tooltipStyles,
1836
+ ...props,
1837
+ children: [children, /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_tooltip.Arrow, {
1838
+ className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-xs",
1839
+ style: {
1840
+ fill: "var(--tooltip-bg)",
1841
+ background: "var(--tooltip-bg)"
1842
+ }
1843
+ })]
1844
+ }) });
1845
+ });
1846
+ TooltipGlassContent.displayName = "TooltipGlassContent";
1847
+ var TooltipGlassSimple = ({ content, children, side = "top", className }) => {
1848
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(TooltipGlassRoot, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(TooltipGlassTrigger, {
1849
+ asChild: true,
1850
+ children
1851
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TooltipGlassContent, {
1852
+ side,
1853
+ className,
1854
+ children: content
1855
+ })] });
1856
+ };
1857
+ const TooltipGlass = TooltipGlassRoot;
1858
+ const ExpandableHeaderGlass = (0, react.forwardRef)(({ title, icon: Icon, iconColor = "var(--text-accent)", expanded, onToggle, className, ...props }, ref) => {
1859
+ const textStyles = { color: "var(--text-primary)" };
1860
+ const chevronStyles = { color: "var(--text-muted)" };
1861
+ const iconStyles = { color: iconColor };
1862
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
1863
+ ref,
1864
+ type: "button",
1865
+ onClick: onToggle,
1866
+ "aria-expanded": expanded,
1867
+ className: require_utils.cn("w-full p-4 flex items-center justify-between rounded-2xl transition-colors hover:bg-white/5", className),
1868
+ style: textStyles,
1869
+ ...props,
1870
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1871
+ className: "flex items-center gap-2",
1872
+ children: [Icon && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Icon, {
1873
+ className: "w-5 h-5",
1874
+ style: iconStyles
1875
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1876
+ className: "font-medium",
1877
+ children: title
1878
+ })]
1879
+ }), expanded ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ChevronUp, {
1880
+ className: "w-5 h-5",
1881
+ style: chevronStyles
1882
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ChevronDown, {
1883
+ className: "w-5 h-5",
1884
+ style: chevronStyles
1885
+ })]
1886
+ });
1887
+ });
1888
+ ExpandableHeaderGlass.displayName = "ExpandableHeaderGlass";
1889
+ var iconButtonVariants = (0, class_variance_authority.cva)("rounded-xl flex items-center justify-center transition-all duration-300 hover:scale-105 focus:outline-none focus:ring-2 focus:ring-offset-2", {
1890
+ variants: {
1891
+ size: {
1892
+ sm: "w-8 h-8",
1893
+ md: "w-10 h-10",
1894
+ lg: "w-12 h-12",
1895
+ touch: "w-11 h-11 md:w-10 md:h-10"
1896
+ },
1897
+ variant: {
1898
+ gradient: "",
1899
+ subtle: "",
1900
+ ghost: "bg-transparent hover:bg-white/10"
1901
+ }
1902
+ },
1903
+ defaultVariants: {
1904
+ size: "md",
1905
+ variant: "gradient"
1906
+ }
1907
+ });
1908
+ const IconButtonGlass = (0, react.forwardRef)(({ icon: Icon, iconSize = 20, size, variant, className, "aria-label": ariaLabel, ...props }, ref) => {
1909
+ const gradientStyles = variant === "gradient" ? {
1910
+ background: "linear-gradient(135deg, var(--icon-btn-from), var(--icon-btn-to))",
1911
+ boxShadow: "var(--icon-btn-shadow)"
1912
+ } : void 0;
1913
+ const subtleStyles = variant === "subtle" ? {
1914
+ background: "var(--card-subtle-bg)",
1915
+ border: "1px solid var(--card-subtle-border)"
1916
+ } : void 0;
1917
+ const iconStyles = { color: "var(--icon-btn-text)" };
1918
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
1919
+ ref,
1920
+ type: "button",
1921
+ "aria-label": ariaLabel,
1922
+ className: require_utils.cn(iconButtonVariants({
1923
+ size,
1924
+ variant
1925
+ }), className),
1926
+ style: gradientStyles ?? subtleStyles,
1927
+ ...props,
1928
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Icon, {
1929
+ size: iconSize,
1930
+ style: iconStyles
1931
+ })
1932
+ });
1933
+ });
1934
+ IconButtonGlass.displayName = "IconButtonGlass";
1935
+ const insightVariantConfig = {
1936
+ default: {
1937
+ defaultEmoji: "💡",
1938
+ glowVar: "--glow-primary",
1939
+ borderVar: "--glass-border"
1940
+ },
1941
+ tip: {
1942
+ defaultEmoji: "💡",
1943
+ glowVar: "--glow-secondary",
1944
+ borderVar: "--alert-default-border"
1945
+ },
1946
+ highlight: {
1947
+ defaultEmoji: "✨",
1948
+ glowVar: "--glow-success",
1949
+ borderVar: "--alert-success-border"
1950
+ },
1951
+ warning: {
1952
+ defaultEmoji: "⚠️",
1953
+ glowVar: "--glow-warning",
1954
+ borderVar: "--alert-warning-border"
1955
+ },
1956
+ stat: {
1957
+ defaultEmoji: "📊",
1958
+ glowVar: null,
1959
+ borderVar: "--glass-border"
1960
+ },
1961
+ growth: {
1962
+ defaultEmoji: "📈",
1963
+ glowVar: "--glow-success",
1964
+ borderVar: "--alert-success-border"
1965
+ },
1966
+ decline: {
1967
+ defaultEmoji: "📉",
1968
+ glowVar: "--glow-error",
1969
+ borderVar: "--alert-destructive-border"
1970
+ }
1971
+ };
1972
+ const insightCardVariants = (0, class_variance_authority.cva)("relative rounded-lg transition-all duration-200", {
1973
+ variants: {
1974
+ inline: {
1975
+ true: "inline-flex items-center gap-1.5",
1976
+ false: "p-3 bg-[var(--glass-bg-subtle)] border"
1977
+ },
1978
+ clickable: {
1979
+ true: "cursor-pointer hover:bg-[var(--glass-bg)]",
1980
+ false: ""
1981
+ }
1982
+ },
1983
+ defaultVariants: {
1984
+ inline: false,
1985
+ clickable: false
1986
+ }
1987
+ });
1988
+ const InsightCardGlass = (0, react.forwardRef)(({ emoji, text, detail, variant = "default", inline = false, onClick, showArrow = false, animated = false, className, ...props }, ref) => {
1989
+ const config = insightVariantConfig[variant];
1990
+ const displayEmoji = emoji ?? config.defaultEmoji;
1991
+ const isClickable = !!onClick;
1992
+ const handleClick = () => onClick?.();
1993
+ const handleKeyDown = (e) => {
1994
+ if (isClickable && (e.key === "Enter" || e.key === " ")) {
1995
+ e.preventDefault();
1996
+ onClick?.();
1997
+ }
1998
+ };
1999
+ const borderStyle = !inline ? { borderColor: `var(${config.borderVar})` } : {};
2000
+ const glowStyle = isClickable && config.glowVar ? { "--hover-glow": `var(${config.glowVar})` } : {};
2001
+ if (inline) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
2002
+ ref,
2003
+ className: require_utils.cn("inline-flex items-center gap-1.5 text-sm text-[var(--text-secondary)]", className),
2004
+ ...props,
2005
+ children: [
2006
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2007
+ "aria-hidden": "true",
2008
+ children: displayEmoji
2009
+ }),
2010
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: text }),
2011
+ detail && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
2012
+ className: "text-[var(--text-muted)]",
2013
+ children: [
2014
+ "(",
2015
+ detail,
2016
+ ")"
2017
+ ]
2018
+ })
2019
+ ]
2020
+ });
2021
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2022
+ ref,
2023
+ role: isClickable ? "button" : void 0,
2024
+ tabIndex: isClickable ? 0 : void 0,
2025
+ onClick: isClickable ? handleClick : void 0,
2026
+ onKeyDown: isClickable ? handleKeyDown : void 0,
2027
+ className: require_utils.cn(insightCardVariants({
2028
+ inline,
2029
+ clickable: isClickable
2030
+ }), isClickable && config.glowVar && "hover:shadow-[0_0_12px_var(--hover-glow)]", animated && "animate-insight-fade-in", className),
2031
+ style: {
2032
+ ...borderStyle,
2033
+ ...glowStyle
2034
+ },
2035
+ ...props,
2036
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2037
+ className: "flex items-start gap-2",
2038
+ children: [
2039
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2040
+ className: "text-lg flex-shrink-0",
2041
+ "aria-hidden": "true",
2042
+ children: displayEmoji
2043
+ }),
2044
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2045
+ className: "flex-1 min-w-0",
2046
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
2047
+ className: "text-sm text-[var(--text-primary)]",
2048
+ children: text
2049
+ }), detail && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
2050
+ className: "text-xs text-[var(--text-muted)] mt-0.5",
2051
+ children: detail
2052
+ })]
2053
+ }),
2054
+ showArrow && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ChevronRight, {
2055
+ className: "w-4 h-4 text-[var(--text-muted)] flex-shrink-0",
2056
+ "aria-hidden": "true"
2057
+ })
2058
+ ]
2059
+ })
2060
+ });
2061
+ });
2062
+ InsightCardGlass.displayName = "InsightCardGlass";
2063
+ const SearchBoxGlass = (0, react.forwardRef)(({ onSubmit, defaultValue = "", value: controlledValue, onChange: controlledOnChange, variant = "default", inputWidth = "w-32 sm:w-40 md:w-48", placeholder = "Search username...", className, ...props }, ref) => {
2064
+ const [internalValue, setInternalValue] = (0, react.useState)(defaultValue);
2065
+ const [isFocused, setIsFocused] = (0, react.useState)(false);
2066
+ const isControlled = controlledValue !== void 0;
2067
+ const value = isControlled ? controlledValue : internalValue;
2068
+ const handleChange = (e) => {
2069
+ const newValue = e.target.value;
2070
+ if (isControlled) controlledOnChange?.(newValue);
2071
+ else setInternalValue(newValue);
2072
+ };
2073
+ const handleSubmit = () => {
2074
+ onSubmit?.(value);
2075
+ };
2076
+ const handleKeyDown = (e) => {
2077
+ if (e.key === "Enter") handleSubmit();
2078
+ };
2079
+ const containerStyles = { boxShadow: isFocused ? "var(--focus-glow)" : "none" };
2080
+ const inputStyles = {
2081
+ background: "var(--search-bg)",
2082
+ color: "var(--text-primary)",
2083
+ border: "1px solid var(--search-border)",
2084
+ borderRight: "none",
2085
+ borderTopLeftRadius: "0.75rem",
2086
+ borderBottomLeftRadius: "0.75rem"
2087
+ };
2088
+ const buttonStyles = {
2089
+ background: "var(--search-btn-bg)",
2090
+ color: "var(--search-btn-text)",
2091
+ borderTopRightRadius: "0.75rem",
2092
+ borderBottomRightRadius: "0.75rem"
2093
+ };
2094
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2095
+ className: require_utils.cn("flex w-fit rounded-xl overflow-hidden", className),
2096
+ style: containerStyles,
2097
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
2098
+ ref,
2099
+ type: "text",
2100
+ value,
2101
+ onChange: handleChange,
2102
+ onFocus: () => setIsFocused(true),
2103
+ onBlur: () => setIsFocused(false),
2104
+ onKeyDown: handleKeyDown,
2105
+ placeholder,
2106
+ "aria-label": placeholder,
2107
+ className: require_utils.cn("px-4 py-2 text-sm outline-none transition-all", inputWidth),
2108
+ style: inputStyles,
2109
+ ...props
2110
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
2111
+ onClick: handleSubmit,
2112
+ type: "button",
2113
+ className: require_utils.cn("px-5 py-2 text-sm font-medium flex items-center gap-2 hover:scale-[1.02] transition-transform", variant === "compact" && "px-3"),
2114
+ style: buttonStyles,
2115
+ "aria-label": "Search",
2116
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Search, { className: "w-4 h-4" }), variant === "default" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2117
+ className: "hidden sm:inline",
2118
+ children: "Search"
2119
+ })]
2120
+ })]
2121
+ });
2122
+ });
2123
+ SearchBoxGlass.displayName = "SearchBoxGlass";
2124
+ var fieldLabels = {
2125
+ commits: "Commits",
2126
+ stars: "Stars",
2127
+ name: "Name",
2128
+ contribution: "Contribution"
2129
+ };
2130
+ const SortDropdownGlass = react.forwardRef(({ sortBy, sortOrder, onSortChange, options = [
2131
+ "commits",
2132
+ "stars",
2133
+ "name",
2134
+ "contribution"
2135
+ ], compact = false, className, ...props }, ref) => {
2136
+ const handleFieldSelect = react.useCallback((field) => {
2137
+ if (field === sortBy) onSortChange(field, sortOrder === "asc" ? "desc" : "asc");
2138
+ else onSortChange(field, "desc");
2139
+ }, [
2140
+ sortBy,
2141
+ sortOrder,
2142
+ onSortChange
2143
+ ]);
2144
+ const SortIcon = sortOrder === "asc" ? lucide_react.ArrowUp : lucide_react.ArrowDown;
2145
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2146
+ ref,
2147
+ className: require_utils.cn("relative inline-block", className),
2148
+ ...props,
2149
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(DropdownMenuGlass, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(DropdownMenuGlassTrigger, {
2150
+ asChild: true,
2151
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
2152
+ type: "button",
2153
+ className: require_utils.cn("flex items-center gap-1.5 px-3 py-1.5 rounded-xl text-xs font-medium", "sm:gap-2 sm:px-4 sm:py-2 sm:text-sm", "bg-(--dropdown-bg) border border-(--dropdown-border)", "backdrop-blur-md", "transition-all duration-200", "hover:opacity-90 hover:shadow-(--dropdown-glow)", "focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2", "focus-visible:ring-(--text-accent)", "text-(--dropdown-item-text)"),
2154
+ "aria-haspopup": "menu",
2155
+ children: compact ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "Sort" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SortIcon, { className: require_utils.cn(ICON_SIZES.sm, "text-(--text-accent)") })] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
2156
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2157
+ className: "hidden sm:inline text-(--text-muted)",
2158
+ children: "Sort:"
2159
+ }),
2160
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: fieldLabels[sortBy] }),
2161
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SortIcon, { className: require_utils.cn(ICON_SIZES.sm, "text-(--text-accent)") }),
2162
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ChevronDown, { className: require_utils.cn(ICON_SIZES.sm, "text-(--text-muted)", "transition-transform duration-200", "group-data-[state=open]:rotate-180") })
2163
+ ] })
2164
+ })
2165
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DropdownMenuGlassContent, {
2166
+ align: "start",
2167
+ "aria-label": "Sort options",
2168
+ children: options.map((field) => {
2169
+ const isSelected = field === sortBy;
2170
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(DropdownMenuGlassItem, {
2171
+ onSelect: () => handleFieldSelect(field),
2172
+ className: require_utils.cn("justify-between", isSelected && "bg-(--select-item-selected-bg)"),
2173
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2174
+ className: "font-medium",
2175
+ children: fieldLabels[field]
2176
+ }), isSelected && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2177
+ className: "flex items-center gap-1 text-(--text-accent)",
2178
+ children: [sortOrder === "asc" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ArrowUp, { className: ICON_SIZES.sm }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ArrowDown, { className: ICON_SIZES.sm }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Check, { className: ICON_SIZES.sm })]
2179
+ })]
2180
+ }, field);
2181
+ })
2182
+ })] })
2183
+ });
2184
+ });
2185
+ SortDropdownGlass.displayName = "SortDropdownGlass";
2186
+ var statItemVariants = (0, class_variance_authority.cva)("flex items-center gap-1", {
2187
+ variants: {
2188
+ size: {
2189
+ sm: "text-xs",
2190
+ md: "text-sm",
2191
+ lg: "text-base"
2192
+ },
2193
+ layout: {
2194
+ horizontal: "flex-row",
2195
+ vertical: "flex-col items-start gap-0.5"
2196
+ }
2197
+ },
2198
+ defaultVariants: {
2199
+ size: "md",
2200
+ layout: "horizontal"
2201
+ }
2202
+ });
2203
+ const StatItemGlass = (0, react.forwardRef)(({ icon: Icon, value, label, iconSize = 16, abbreviated = false, size, layout, className, ...props }, ref) => {
2204
+ const textStyles = { color: "var(--text-secondary)" };
2205
+ const iconStyles = { color: "var(--text-accent)" };
2206
+ const formatValue = (val) => {
2207
+ if (!abbreviated || typeof val !== "number") return String(val);
2208
+ if (val >= 1e6) return `${(val / 1e6).toFixed(1)}M`;
2209
+ if (val >= 1e3) return `${(val / 1e3).toFixed(1)}k`;
2210
+ return String(val);
2211
+ };
2212
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
2213
+ ref,
2214
+ className: require_utils.cn(statItemVariants({
2215
+ size,
2216
+ layout
2217
+ }), className),
2218
+ style: textStyles,
2219
+ ...props,
2220
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Icon, {
2221
+ size: iconSize,
2222
+ style: iconStyles
2223
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
2224
+ className: "font-medium",
2225
+ children: [
2226
+ formatValue(value),
2227
+ " ",
2228
+ label
2229
+ ]
2230
+ })]
2231
+ });
2232
+ });
2233
+ StatItemGlass.displayName = "StatItemGlass";
2234
+ var themes$1 = [
2235
+ "light",
2236
+ "aurora",
2237
+ "glass"
2238
+ ];
2239
+ var themeConfig$1 = {
2240
+ light: {
2241
+ label: "Light",
2242
+ icon: lucide_react.Sun
2243
+ },
2244
+ aurora: {
2245
+ label: "Aurora",
2246
+ icon: lucide_react.Moon
2247
+ },
2248
+ glass: {
2249
+ label: "Glass",
2250
+ icon: lucide_react.Palette
2251
+ }
2252
+ };
2253
+ const ThemeToggleGlass = (0, react.forwardRef)(({ onToggle, iconSize = 20, iconOnly = false, className, ...props }, ref) => {
2254
+ const { theme, cycleTheme } = require_theme_context.useTheme();
2255
+ const nextTheme = themes$1[(themes$1.indexOf(theme) + 1) % themes$1.length];
2256
+ const NextIcon = themeConfig$1[nextTheme].icon;
2257
+ const nextLabel = themeConfig$1[nextTheme].label;
2258
+ const buttonStyles = {
2259
+ background: "var(--card-subtle-bg)",
2260
+ border: "1px solid var(--card-subtle-border)"
2261
+ };
2262
+ const iconStyles = { color: "var(--text-secondary)" };
2263
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
2264
+ ref,
2265
+ type: "button",
2266
+ onClick: onToggle ?? cycleTheme,
2267
+ "aria-label": `Switch to ${nextLabel} theme`,
2268
+ className: require_utils.cn("p-2.5 rounded-xl transition-all duration-300 hover:scale-105 focus:outline-none focus:ring-2 focus:ring-offset-2", iconOnly && "md:px-4 md:gap-2", className),
2269
+ style: buttonStyles,
2270
+ ...props,
2271
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2272
+ className: "flex items-center gap-2",
2273
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(NextIcon, {
2274
+ size: iconSize,
2275
+ style: iconStyles
2276
+ }), !iconOnly && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2277
+ className: "hidden md:inline text-sm font-medium",
2278
+ style: iconStyles,
2279
+ children: nextLabel
2280
+ })]
2281
+ })
2282
+ });
2283
+ });
2284
+ ThemeToggleGlass.displayName = "ThemeToggleGlass";
2285
+ const BaseProgressGlass = (0, react.forwardRef)(({ value = 0, max = 100, className, children, ...props }, ref) => {
2286
+ const percentage = Math.min(100, Math.max(0, value / max * 100));
2287
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2288
+ ref,
2289
+ className: require_utils.cn("relative h-2 w-full overflow-hidden rounded-full", "bg-white/5 backdrop-blur-sm", className),
2290
+ role: "progressbar",
2291
+ "aria-valuenow": value,
2292
+ "aria-valuemin": 0,
2293
+ "aria-valuemax": max,
2294
+ "aria-valuetext": `${Math.round(percentage)}%`,
2295
+ ...props,
2296
+ children: typeof children === "function" ? children(percentage) : children || /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2297
+ className: "h-full transition-all duration-300 ease-out",
2298
+ style: {
2299
+ width: `${percentage}%`,
2300
+ background: "var(--progress-bar-bg, linear-gradient(90deg, #a855f7, #ec4899))"
2301
+ }
2302
+ })
2303
+ });
2304
+ });
2305
+ BaseProgressGlass.displayName = "BaseProgressGlass";
2306
+ var sizeClasses$1 = {
2307
+ normal: "w-2 h-2 md:w-2.5 md:h-2.5",
2308
+ large: "w-3.5 h-3.5 md:w-4 md:h-4"
2309
+ };
2310
+ var statusSymbols = {
2311
+ green: "✓",
2312
+ yellow: "!",
2313
+ red: "✕"
2314
+ };
2315
+ var statusVarMap = {
2316
+ green: {
2317
+ bg: "var(--status-online)",
2318
+ glow: "var(--status-online-glow)"
2319
+ },
2320
+ yellow: {
2321
+ bg: "var(--status-away)",
2322
+ glow: "var(--status-away-glow)"
2323
+ },
2324
+ red: {
2325
+ bg: "var(--status-busy)",
2326
+ glow: "var(--status-busy-glow)"
2327
+ }
2328
+ };
2329
+ const StatusIndicatorGlass = (0, react.forwardRef)(({ type = "green", size = "normal", className, ...props }, ref) => {
2330
+ const colors = statusVarMap[type];
2331
+ const indicatorStyles = {
2332
+ backgroundColor: colors.bg,
2333
+ boxShadow: colors.glow
2334
+ };
2335
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2336
+ ref,
2337
+ className: require_utils.cn("rounded-full flex items-center justify-center", sizeClasses$1[size], className),
2338
+ style: indicatorStyles,
2339
+ role: "status",
2340
+ "aria-label": `Status: ${type}`,
2341
+ ...props,
2342
+ children: size === "large" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2343
+ className: "text-white text-[8px] md:text-[10px] font-bold",
2344
+ children: statusSymbols[type]
2345
+ })
2346
+ });
2347
+ });
2348
+ StatusIndicatorGlass.displayName = "StatusIndicatorGlass";
2349
+ var flagVarMap = {
2350
+ danger: {
2351
+ bg: "var(--alert-danger-bg)",
2352
+ border: "var(--alert-danger-border)",
2353
+ text: "var(--alert-danger-text)",
2354
+ statusType: "red"
2355
+ },
2356
+ warning: {
2357
+ bg: "var(--alert-warning-bg)",
2358
+ border: "var(--alert-warning-border)",
2359
+ text: "var(--alert-warning-text)",
2360
+ statusType: "yellow"
2361
+ }
2362
+ };
2363
+ const FlagAlertGlass = (0, react.forwardRef)(({ type = "warning", title, description, className, ...props }, ref) => {
2364
+ const [isHovered, setIsHovered] = (0, react.useState)(false);
2365
+ const config = flagVarMap[type];
2366
+ const alertStyles = {
2367
+ background: config.bg,
2368
+ borderColor: config.border,
2369
+ transform: isHovered ? "translateX(4px)" : "translateX(0)"
2370
+ };
2371
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2372
+ ref,
2373
+ className: require_utils.cn("p-2.5 md:p-3 rounded-xl border transition-all duration-300", className),
2374
+ style: alertStyles,
2375
+ onMouseEnter: () => setIsHovered(true),
2376
+ onMouseLeave: () => setIsHovered(false),
2377
+ role: "alert",
2378
+ ...props,
2379
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2380
+ className: "flex items-center gap-1.5 md:gap-2 font-medium text-xs md:text-sm",
2381
+ style: { color: config.text },
2382
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(StatusIndicatorGlass, { type: config.statusType }), title]
2383
+ }), description && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
2384
+ className: "text-(length:--font-size-2xs) md:text-xs mt-0.5 md:mt-1 ml-4 md:ml-5 text-(--text-muted)",
2385
+ children: description
2386
+ })]
2387
+ });
2388
+ });
2389
+ FlagAlertGlass.displayName = "FlagAlertGlass";
2390
+ var defaultLangColors = {
2391
+ TypeScript: "var(--language-typescript)",
2392
+ JavaScript: "var(--language-javascript)",
2393
+ Python: "var(--language-python)",
2394
+ HTML: "var(--language-html)",
2395
+ CSS: "var(--language-css)",
2396
+ Java: "var(--language-java)",
2397
+ Go: "var(--language-go)",
2398
+ Rust: "var(--language-rust)",
2399
+ Ruby: "var(--language-ruby)",
2400
+ PHP: "var(--language-php)"
2401
+ };
2402
+ const LanguageBarGlass = (0, react.forwardRef)(({ languages = [], showLegend = true, className, ...props }, ref) => {
2403
+ const [hoveredLang, setHoveredLang] = (0, react.useState)(null);
2404
+ const barStyles = { boxShadow: "var(--rainbow-glow)" };
2405
+ if (!languages || languages.length === 0) return null;
2406
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2407
+ ref,
2408
+ className: require_utils.cn("w-full", className),
2409
+ ...props,
2410
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2411
+ className: "flex h-2 md:h-2.5 rounded-full overflow-hidden",
2412
+ style: barStyles,
2413
+ role: "group",
2414
+ "aria-label": "Language distribution",
2415
+ children: languages.map((lang, i) => {
2416
+ const bgColor = lang.color ?? defaultLangColors[lang.name] ?? "var(--oklch-slate-400)";
2417
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2418
+ style: {
2419
+ width: `${lang.percent}%`,
2420
+ backgroundColor: bgColor,
2421
+ opacity: hoveredLang !== null && hoveredLang !== i ? .5 : 1,
2422
+ transition: "all 0.3s"
2423
+ },
2424
+ role: "progressbar",
2425
+ "aria-label": `${lang.name}: ${lang.percent}%`,
2426
+ "aria-valuenow": lang.percent,
2427
+ "aria-valuemin": 0,
2428
+ "aria-valuemax": 100,
2429
+ onMouseEnter: () => setHoveredLang(i),
2430
+ onMouseLeave: () => setHoveredLang(null)
2431
+ }, `bar-${lang.name}-${i}`);
2432
+ })
2433
+ }), showLegend && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2434
+ 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)",
2435
+ children: languages.map((lang, i) => {
2436
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
2437
+ className: "flex items-center gap-1 md:gap-1.5 cursor-pointer",
2438
+ onMouseEnter: () => setHoveredLang(i),
2439
+ onMouseLeave: () => setHoveredLang(null),
2440
+ children: [
2441
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2442
+ className: "w-2 h-2 md:w-2.5 md:h-2.5 rounded-full",
2443
+ style: { backgroundColor: lang.color ?? defaultLangColors[lang.name] ?? "var(--oklch-slate-400)" }
2444
+ }),
2445
+ lang.name,
2446
+ " ",
2447
+ lang.percent,
2448
+ "%"
2449
+ ]
2450
+ }, `legend-${lang.name}-${i}`);
2451
+ })
2452
+ })]
2453
+ });
2454
+ });
2455
+ LanguageBarGlass.displayName = "LanguageBarGlass";
2456
+ var profileSizeClasses = {
2457
+ sm: "w-9 h-9 md:w-10 md:h-10 text-xs md:text-sm",
2458
+ md: "w-12 h-12 md:w-14 md:h-14 text-base md:text-lg",
2459
+ lg: "w-14 h-14 md:w-16 md:h-16 text-lg md:text-xl",
2460
+ xl: "w-18 h-18 md:w-20 md:h-20 text-xl md:text-2xl"
2461
+ };
2462
+ var getStatusVars = (statusType) => {
2463
+ return {
2464
+ online: {
2465
+ bg: "var(--status-online)",
2466
+ glow: "var(--status-online-glow)"
2467
+ },
2468
+ offline: {
2469
+ bg: "var(--status-offline)",
2470
+ glow: "none"
2471
+ },
2472
+ busy: {
2473
+ bg: "var(--status-busy)",
2474
+ glow: "var(--status-busy-glow)"
2475
+ },
2476
+ away: {
2477
+ bg: "var(--status-away)",
2478
+ glow: "var(--status-away-glow)"
2479
+ }
2480
+ }[statusType];
2481
+ };
2482
+ const ProfileAvatarGlass = (0, react.forwardRef)(({ initials, size = "lg", status, glowing = true, className, ...props }, ref) => {
2483
+ const { isHovered, hoverProps } = require_use_focus.useHover();
2484
+ const avatarStyles = {
2485
+ background: "var(--avatar-bg)",
2486
+ border: "3px solid var(--avatar-border)",
2487
+ boxShadow: isHovered ? "var(--avatar-hover-glow)" : "var(--avatar-shadow)",
2488
+ color: "var(--text-inverse)"
2489
+ };
2490
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2491
+ ref,
2492
+ className: require_utils.cn("relative inline-flex", className),
2493
+ onMouseEnter: hoverProps.onMouseEnter,
2494
+ onMouseLeave: hoverProps.onMouseLeave,
2495
+ ...props,
2496
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2497
+ className: require_utils.cn("rounded-full flex items-center justify-center font-bold transition-all duration-300", profileSizeClasses[size], glowing && "animate-[glow-pulse_2s_ease-in-out_infinite]"),
2498
+ style: avatarStyles,
2499
+ role: "img",
2500
+ "aria-label": `Profile avatar with initials ${initials}`,
2501
+ children: initials
2502
+ }), status && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2503
+ className: require_utils.cn(statusSizes({ size }), "absolute -bottom-0.5 -right-0.5"),
2504
+ style: {
2505
+ background: getStatusVars(status).bg,
2506
+ boxShadow: getStatusVars(status).glow
2507
+ },
2508
+ role: "status",
2509
+ "aria-label": `Status: ${status}`
2510
+ })]
2511
+ });
2512
+ });
2513
+ ProfileAvatarGlass.displayName = "ProfileAvatarGlass";
2514
+ const progressSizes = (0, class_variance_authority.cva)("rounded-full overflow-hidden", {
2515
+ variants: { size: {
2516
+ sm: "h-1.5 md:h-1",
2517
+ md: "h-2.5 md:h-2",
2518
+ lg: "h-3.5 md:h-3",
2519
+ xl: "h-5 md:h-4"
2520
+ } },
2521
+ defaultVariants: { size: "md" }
2522
+ });
2523
+ var getGradientColor = (gradient = "violet") => {
2524
+ const gradients = {
2525
+ violet: {
2526
+ colorVar: "--metric-default-text",
2527
+ glowVar: "--progress-glow-violet"
2528
+ },
2529
+ blue: {
2530
+ colorVar: "--metric-default-text",
2531
+ glowVar: "--progress-glow-blue"
2532
+ },
2533
+ cyan: {
2534
+ colorVar: "--metric-secondary-text",
2535
+ glowVar: "--progress-glow-cyan"
2536
+ },
2537
+ amber: {
2538
+ colorVar: "--metric-warning-text",
2539
+ glowVar: "--progress-glow-amber"
2540
+ },
2541
+ emerald: {
2542
+ colorVar: "--metric-success-text",
2543
+ glowVar: "--progress-glow-emerald"
2544
+ },
2545
+ rose: {
2546
+ colorVar: "--metric-destructive-text",
2547
+ glowVar: "--progress-glow-rose"
2548
+ }
2549
+ };
2550
+ return gradients[gradient] || gradients.violet;
2551
+ };
2552
+ const ProgressGlass = (0, react.forwardRef)(({ className, size = "md", value = 0, gradient = "violet", showLabel, ...props }, ref) => {
2553
+ const clampedValue = Math.min(100, Math.max(0, value));
2554
+ const { colorVar, glowVar } = getGradientColor(gradient);
2555
+ const trackStyles = { background: "var(--progress-bg)" };
2556
+ const fillStyles = {
2557
+ width: `${clampedValue}%`,
2558
+ background: `var(${colorVar})`,
2559
+ boxShadow: `var(${glowVar})`
2560
+ };
2561
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2562
+ ref,
2563
+ className: require_utils.cn("w-full", className),
2564
+ ...props,
2565
+ children: [showLabel && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2566
+ className: "flex justify-between mb-1 md:mb-1.5",
2567
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2568
+ className: "text-(length:--font-size-2xs) md:text-xs text-(--text-muted)",
2569
+ children: "Progress"
2570
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
2571
+ className: "text-(length:--font-size-2xs) md:text-xs font-medium text-(--text-secondary)",
2572
+ children: [clampedValue, "%"]
2573
+ })]
2574
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2575
+ className: require_utils.cn(progressSizes({ size })),
2576
+ style: trackStyles,
2577
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2578
+ className: "h-full rounded-full transition-all duration-700 ease-out",
2579
+ style: fillStyles,
2580
+ role: "progressbar",
2581
+ "aria-valuenow": clampedValue,
2582
+ "aria-valuemin": 0,
2583
+ "aria-valuemax": 100,
2584
+ "aria-label": `Progress: ${clampedValue}%`
2585
+ })
2586
+ })]
2587
+ });
2588
+ });
2589
+ ProgressGlass.displayName = "ProgressGlass";
2590
+ var sizeClasses = {
2591
+ sm: "h-2.5 md:h-2",
2592
+ md: "h-3.5 md:h-3",
2593
+ lg: "h-[1.125rem] md:h-4",
2594
+ xl: "h-6 md:h-5"
2595
+ };
2596
+ const RainbowProgressGlass = (0, react.forwardRef)(({ value, size = "lg", showGlow = true, className, ...props }, ref) => {
2597
+ const clampedValue = Math.min(100, Math.max(0, value));
2598
+ const trackStyles = { background: "var(--progress-bg)" };
2599
+ const fillStyles = {
2600
+ width: `${clampedValue}%`,
2601
+ background: "var(--rainbow-gradient)",
2602
+ boxShadow: showGlow ? "var(--rainbow-glow)" : "none",
2603
+ animation: showGlow ? "var(--rainbow-animation)" : "none"
2604
+ };
2605
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2606
+ ref,
2607
+ className: require_utils.cn("rounded-full overflow-hidden", sizeClasses[size], className),
2608
+ style: trackStyles,
2609
+ role: "progressbar",
2610
+ "aria-valuenow": clampedValue,
2611
+ "aria-valuemin": 0,
2612
+ "aria-valuemax": 100,
2613
+ "aria-label": `Rainbow progress: ${clampedValue}%`,
2614
+ ...props,
2615
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2616
+ className: "h-full rounded-full transition-all duration-1000",
2617
+ style: fillStyles
2618
+ })
2619
+ });
2620
+ });
2621
+ RainbowProgressGlass.displayName = "RainbowProgressGlass";
2622
+ const SegmentedControlGlass = (0, react.forwardRef)(({ options = [], value, onChange, className, ...props }, ref) => {
2623
+ const containerStyles = {
2624
+ border: "1px solid var(--segmented-container-border)",
2625
+ background: "var(--segmented-container-bg)"
2626
+ };
2627
+ if (!options || options.length === 0) return null;
2628
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2629
+ ref,
2630
+ className: require_utils.cn("inline-flex rounded-xl overflow-hidden", className),
2631
+ style: containerStyles,
2632
+ role: "tablist",
2633
+ ...props,
2634
+ children: options.map((opt) => {
2635
+ const isActive = value === opt.value;
2636
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
2637
+ onClick: () => onChange?.(opt.value),
2638
+ className: "px-3 py-1.5 md:px-4 md:py-2 text-xs md:text-sm font-medium transition-all duration-300",
2639
+ style: {
2640
+ background: isActive ? "var(--segmented-active-bg)" : "transparent",
2641
+ color: isActive ? "var(--segmented-active-text)" : "var(--segmented-inactive-text)"
2642
+ },
2643
+ type: "button",
2644
+ role: "tab",
2645
+ "aria-selected": isActive,
2646
+ children: opt.label
2647
+ }, opt.value);
2648
+ })
2649
+ });
2650
+ });
2651
+ SegmentedControlGlass.displayName = "SegmentedControlGlass";
2652
+ const sparklineContainerVariants = (0, class_variance_authority.cva)("flex items-end", {
2653
+ variants: {
2654
+ height: {
2655
+ sm: "h-4",
2656
+ md: "h-6",
2657
+ lg: "h-8"
2658
+ },
2659
+ gap: {
2660
+ none: "gap-0",
2661
+ sm: "gap-px",
2662
+ md: "gap-0.5"
2663
+ }
2664
+ },
2665
+ defaultVariants: {
2666
+ height: "md",
2667
+ gap: "sm"
2668
+ }
2669
+ });
2670
+ const sparklineBarVariants = (0, class_variance_authority.cva)("flex-1 rounded-sm transition-all duration-300", {
2671
+ variants: { animated: {
2672
+ true: "animate-sparkline-grow",
2673
+ false: ""
2674
+ } },
2675
+ defaultVariants: { animated: false }
2676
+ });
2677
+ var defaultSparklineConfig = {
2678
+ value: {
2679
+ label: "Value",
2680
+ color: "var(--sparkline-bar-fill, hsl(var(--chart-1-base)))"
2681
+ },
2682
+ max: {
2683
+ label: "Maximum",
2684
+ color: "var(--sparkline-bar-max, var(--alert-success-text))"
2685
+ }
2686
+ };
2687
+ var heightMap = {
2688
+ sm: 16,
2689
+ md: 24,
2690
+ lg: 32
2691
+ };
2692
+ var SparklineTooltip = ({ active, payload, valueFormatter }) => {
2693
+ if (!active || !payload?.length) return null;
2694
+ const data = payload[0];
2695
+ const value = data.value;
2696
+ const index = data.payload.index;
2697
+ const label = data.payload.label;
2698
+ const displayValue = valueFormatter ? valueFormatter(value, index) : value.toLocaleString();
2699
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2700
+ className: "rounded-md border border-[var(--glass-border)] bg-[var(--glass-bg)] px-2 py-1 text-xs shadow-lg backdrop-blur-md",
2701
+ children: [label && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2702
+ className: "font-medium text-[var(--text-primary)]",
2703
+ children: label
2704
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2705
+ className: "text-[var(--text-secondary)]",
2706
+ children: displayValue
2707
+ })]
2708
+ });
2709
+ };
2710
+ const SparklineGlass = (0, react.forwardRef)(({ data, labels, showLabels = false, highlightMax = false, barColor, maxBarColor, tooltips, height = "md", gap = "sm", animated = false, minBarHeightPercent = 4, config = defaultSparklineConfig, valueFormatter, onBarClick, showTooltip = true, className, ...props }, ref) => {
2711
+ const chartData = (0, react.useMemo)(() => {
2712
+ const maxValue$1 = Math.max(...data, 0);
2713
+ const maxIndex$1 = data.indexOf(maxValue$1);
2714
+ return data.map((value, index) => ({
2715
+ index,
2716
+ value,
2717
+ label: labels?.[index] || tooltips?.[index],
2718
+ isMax: highlightMax && index === maxIndex$1 && value > 0,
2719
+ displayValue: maxValue$1 > 0 ? Math.max(value, maxValue$1 * (minBarHeightPercent / 100)) : minBarHeightPercent
2720
+ }));
2721
+ }, [
2722
+ data,
2723
+ labels,
2724
+ tooltips,
2725
+ highlightMax,
2726
+ minBarHeightPercent
2727
+ ]);
2728
+ const { maxValue, maxIndex } = (0, react.useMemo)(() => {
2729
+ const max = Math.max(...data, 0);
2730
+ return {
2731
+ maxValue: max,
2732
+ maxIndex: data.indexOf(max)
2733
+ };
2734
+ }, [data]);
2735
+ const ariaLabel = (0, react.useMemo)(() => {
2736
+ if (data.length === 0) return "Empty sparkline chart";
2737
+ return `Sparkline chart with ${data.length} data points, maximum value ${maxValue}${labels ? ` at ${labels[maxIndex] || `position ${maxIndex + 1}`}` : ""}`;
2738
+ }, [
2739
+ data.length,
2740
+ maxValue,
2741
+ maxIndex,
2742
+ labels
2743
+ ]);
2744
+ const resolvedBarColor = barColor || config.value?.color || "var(--sparkline-bar-fill)";
2745
+ const resolvedMaxColor = maxBarColor || config.max?.color || "var(--sparkline-bar-max)";
2746
+ const barGap = {
2747
+ none: 0,
2748
+ sm: 1,
2749
+ md: 2
2750
+ }[gap || "sm"];
2751
+ const chartHeight = heightMap[height || "md"];
2752
+ const handleClick = (dataPoint) => {
2753
+ if (onBarClick) onBarClick(dataPoint.value, dataPoint.index);
2754
+ };
2755
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2756
+ ref,
2757
+ role: "img",
2758
+ "aria-label": ariaLabel,
2759
+ className: require_utils.cn("flex flex-col", className),
2760
+ ...props,
2761
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2762
+ className: require_utils.cn(sparklineContainerVariants({
2763
+ height,
2764
+ gap
2765
+ })),
2766
+ "data-chart": "sparkline",
2767
+ style: {
2768
+ "--color-value": resolvedBarColor,
2769
+ "--color-max": resolvedMaxColor
2770
+ },
2771
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.ResponsiveContainer, {
2772
+ width: "100%",
2773
+ height: chartHeight,
2774
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(recharts.BarChart, {
2775
+ data: chartData,
2776
+ margin: {
2777
+ top: 0,
2778
+ right: 0,
2779
+ bottom: 0,
2780
+ left: 0
2781
+ },
2782
+ barGap,
2783
+ children: [showTooltip && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Tooltip, {
2784
+ content: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SparklineTooltip, { valueFormatter }),
2785
+ cursor: false,
2786
+ isAnimationActive: false
2787
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Bar, {
2788
+ dataKey: "displayValue",
2789
+ radius: [
2790
+ 2,
2791
+ 2,
2792
+ 0,
2793
+ 0
2794
+ ],
2795
+ isAnimationActive: animated,
2796
+ animationDuration: 500,
2797
+ animationEasing: "ease-out",
2798
+ onClick: (_, index) => handleClick(chartData[index]),
2799
+ style: { cursor: onBarClick ? "pointer" : "default" },
2800
+ children: chartData.map((entry, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(recharts.Cell, {
2801
+ fill: entry.isMax ? resolvedMaxColor : resolvedBarColor,
2802
+ className: "transition-colors duration-200 hover:opacity-80"
2803
+ }, `cell-${index}`))
2804
+ })]
2805
+ })
2806
+ })
2807
+ }), showLabels && labels && labels.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2808
+ className: "flex mt-1",
2809
+ "aria-hidden": "true",
2810
+ children: labels.map((label, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2811
+ className: require_utils.cn("flex-1 text-center leading-none truncate text-xs", "text-(--text-muted)"),
2812
+ children: label
2813
+ }, index))
2814
+ })]
2815
+ });
2816
+ });
2817
+ SparklineGlass.displayName = "SparklineGlass";
2818
+ var defaultFeatures = [
2819
+ "Code quality assessment",
2820
+ "Architecture patterns",
2821
+ "Best practices"
2822
+ ];
2823
+ const AICardGlass = (0, react.forwardRef)(({ onGenerate, features = defaultFeatures, estimatedTime = "~30 seconds", className, ...props }, ref) => {
2824
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(InteractiveCard, {
2825
+ ref,
2826
+ baseBg: "var(--ai-card-bg)",
2827
+ borderColor: "var(--ai-card-border)",
2828
+ hoverGlow: "var(--ai-card-hover-glow)",
2829
+ hoverLift: true,
2830
+ blur: "sm",
2831
+ rounded: "rounded-xl",
2832
+ className: require_utils.cn("w-full sm:w-56 md:w-64 p-3 md:p-4", className),
2833
+ ...props,
2834
+ children: [
2835
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2836
+ className: "flex items-center gap-1.5 md:gap-2 font-semibold text-xs md:text-sm mb-1.5 md:mb-2",
2837
+ style: { color: "var(--text-accent)" },
2838
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Sparkles, { className: "w-3.5 h-3.5 md:w-4 md:h-4" }), "AI Summary"]
2839
+ }),
2840
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
2841
+ className: "text-(length:--font-size-2xs) md:text-xs mb-1.5 md:mb-2 text-(--text-secondary)",
2842
+ children: "Get comprehensive analysis:"
2843
+ }),
2844
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
2845
+ className: "text-(length:--font-size-2xs) md:text-xs space-y-0.5 md:space-y-1 mb-2 md:mb-3",
2846
+ children: features.map((feature, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", {
2847
+ className: "flex items-center gap-1",
2848
+ style: { color: "var(--text-muted)" },
2849
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Check, {
2850
+ className: "w-2.5 h-2.5 md:w-3 md:h-3",
2851
+ style: { color: "var(--status-online)" }
2852
+ }), feature]
2853
+ }, `feature-${i}`))
2854
+ }),
2855
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ButtonGlass, {
2856
+ variant: "default",
2857
+ size: "sm",
2858
+ icon: lucide_react.Zap,
2859
+ onClick: onGenerate,
2860
+ className: "w-full",
2861
+ children: "Generate Report"
2862
+ }),
2863
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
2864
+ 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)",
2865
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Clock, { className: "w-2.5 h-2.5 md:w-3 md:h-3" }), estimatedTime]
2866
+ })
2867
+ ]
2868
+ });
2869
+ });
2870
+ AICardGlass.displayName = "AICardGlass";
2871
+ const CareerStatsHeaderGlass = (0, react.forwardRef)(({ totalCommits, totalPRs, totalRepos, title = "Career Stats", wrapStats = true, className, ...props }, ref) => {
2872
+ const titleStyles = { color: "var(--text-primary)" };
2873
+ const accentStyles = { color: "var(--text-accent)" };
2874
+ const statsStyles = { color: "var(--text-secondary)" };
2875
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2876
+ ref,
2877
+ className: require_utils.cn("mb-4", className),
2878
+ ...props,
2879
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("h3", {
2880
+ className: "font-semibold flex items-center gap-2 mb-1",
2881
+ style: titleStyles,
2882
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.TrendingUp, {
2883
+ className: "w-5 h-5",
2884
+ style: accentStyles
2885
+ }), title]
2886
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
2887
+ className: require_utils.cn("text-sm flex items-center gap-2", wrapStats && "flex-wrap"),
2888
+ style: statsStyles,
2889
+ children: [
2890
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
2891
+ className: "flex items-center gap-1",
2892
+ children: [
2893
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Code, { className: "w-4 h-4" }),
2894
+ totalCommits.toLocaleString(),
2895
+ " commits"
2896
+ ]
2897
+ }),
2898
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "·" }),
2899
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
2900
+ className: "flex items-center gap-1",
2901
+ children: [
2902
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.GitPullRequest, { className: "w-4 h-4" }),
2903
+ totalPRs,
2904
+ " PRs"
2905
+ ]
2906
+ }),
2907
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "·" }),
2908
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
2909
+ className: "flex items-center gap-1",
2910
+ children: [
2911
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.FolderGit2, { className: "w-4 h-4" }),
2912
+ totalRepos,
2913
+ " repos"
2914
+ ]
2915
+ })
2916
+ ]
2917
+ })]
2918
+ });
2919
+ });
2920
+ CareerStatsHeaderGlass.displayName = "CareerStatsHeaderGlass";
2921
+ var colorMap = {
2922
+ emerald: {
2923
+ gradient: "emerald",
2924
+ textVar: "var(--metric-success-text)"
2925
+ },
2926
+ amber: {
2927
+ gradient: "amber",
2928
+ textVar: "var(--metric-warning-text)"
2929
+ },
2930
+ blue: {
2931
+ gradient: "blue",
2932
+ textVar: "var(--metric-default-text)"
2933
+ },
2934
+ red: {
2935
+ gradient: "rose",
2936
+ textVar: "var(--metric-destructive-text)"
2937
+ }
2938
+ };
2939
+ const CircularMetricGlass = (0, react.forwardRef)(({ label, value, color = "blue", size = "sm", className, ...props }, ref) => {
2940
+ const { gradient, textVar } = colorMap[color];
2941
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2942
+ ref,
2943
+ className: require_utils.cn("flex flex-col items-center gap-1", className),
2944
+ ...props,
2945
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(CircularProgressGlass, {
2946
+ value,
2947
+ size,
2948
+ color: gradient,
2949
+ labelColor: textVar,
2950
+ thickness: size === "sm" ? 6 : 8,
2951
+ showGlow: true,
2952
+ glowIntensity: "medium"
2953
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
2954
+ className: "text-xs font-medium",
2955
+ style: { color: textVar },
2956
+ children: label
2957
+ })]
2958
+ });
2959
+ });
2960
+ CircularMetricGlass.displayName = "CircularMetricGlass";
2961
+ const ContributionMetricsGlass = (0, react.forwardRef)(({ userCommits, userContribution, totalProjectCommits: providedTotal, estimatedLines: providedLines, columns = 2, className, ...props }, ref) => {
2962
+ const totalProjectCommits = providedTotal ?? (userContribution > 0 ? Math.round(userCommits / (userContribution / 100)) : userCommits);
2963
+ const estimatedLines = providedLines ?? Math.round(userCommits * 12);
2964
+ const cardStyles = {
2965
+ background: "var(--card-bg)",
2966
+ borderColor: "var(--card-border)"
2967
+ };
2968
+ const mutedStyles = { color: "var(--text-muted)" };
2969
+ const primaryStyles = { color: "var(--text-primary)" };
2970
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2971
+ ref,
2972
+ className: require_utils.cn("grid gap-2", {
2973
+ 1: "grid-cols-1",
2974
+ 2: "grid-cols-1 sm:grid-cols-2"
2975
+ }[columns], className),
2976
+ ...props,
2977
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2978
+ className: "p-2.5 rounded-lg border",
2979
+ style: cardStyles,
2980
+ children: [
2981
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2982
+ className: "text-xs",
2983
+ style: mutedStyles,
2984
+ children: "Your Contribution"
2985
+ }),
2986
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2987
+ className: "font-semibold",
2988
+ style: primaryStyles,
2989
+ children: [userCommits.toLocaleString(), " commits"]
2990
+ }),
2991
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2992
+ className: "text-xs",
2993
+ style: mutedStyles,
2994
+ children: [userContribution, "%"]
2995
+ })
2996
+ ]
2997
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2998
+ className: "p-2.5 rounded-lg border",
2999
+ style: cardStyles,
3000
+ children: [
3001
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3002
+ className: "text-xs",
3003
+ style: mutedStyles,
3004
+ children: "Full Project"
3005
+ }),
3006
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3007
+ className: "font-semibold",
3008
+ style: primaryStyles,
3009
+ children: [totalProjectCommits.toLocaleString(), " commits"]
3010
+ }),
3011
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3012
+ className: "text-xs",
3013
+ style: mutedStyles,
3014
+ children: [
3015
+ "~",
3016
+ estimatedLines.toLocaleString(),
3017
+ " lines"
3018
+ ]
3019
+ })
3020
+ ]
3021
+ })]
3022
+ });
3023
+ });
3024
+ ContributionMetricsGlass.displayName = "ContributionMetricsGlass";
3025
+ var variantStyles = {
3026
+ default: {
3027
+ bg: "var(--metric-default-bg)",
3028
+ text: "var(--metric-default-text)",
3029
+ border: "var(--metric-default-border)",
3030
+ glow: "var(--metric-default-glow)"
3031
+ },
3032
+ secondary: {
3033
+ bg: "var(--metric-secondary-bg)",
3034
+ text: "var(--metric-secondary-text)",
3035
+ border: "var(--metric-secondary-border)",
3036
+ glow: "var(--metric-secondary-glow)"
3037
+ },
3038
+ success: {
3039
+ bg: "var(--metric-success-bg)",
3040
+ text: "var(--metric-success-text)",
3041
+ border: "var(--metric-success-border)",
3042
+ glow: "var(--metric-success-glow)"
3043
+ },
3044
+ warning: {
3045
+ bg: "var(--metric-warning-bg)",
3046
+ text: "var(--metric-warning-text)",
3047
+ border: "var(--metric-warning-border)",
3048
+ glow: "var(--metric-warning-glow)"
3049
+ },
3050
+ destructive: {
3051
+ bg: "var(--metric-destructive-bg)",
3052
+ text: "var(--metric-destructive-text)",
3053
+ border: "var(--metric-destructive-border)",
3054
+ glow: "var(--metric-destructive-glow)"
3055
+ }
3056
+ };
3057
+ var variantToGradient = {
3058
+ default: "blue",
3059
+ secondary: "cyan",
3060
+ success: "emerald",
3061
+ warning: "amber",
3062
+ destructive: "rose"
3063
+ };
3064
+ var colorToVariant = {
3065
+ emerald: "success",
3066
+ amber: "warning",
3067
+ blue: "default",
3068
+ red: "destructive"
3069
+ };
3070
+ var trendColors = {
3071
+ up: "text-[var(--alert-success-text)]",
3072
+ down: "text-[var(--alert-destructive-text)]",
3073
+ neutral: "text-[var(--text-muted)]"
3074
+ };
3075
+ var TrendIcons = {
3076
+ up: lucide_react.TrendingUp,
3077
+ down: lucide_react.TrendingDown,
3078
+ neutral: lucide_react.Minus
3079
+ };
3080
+ const MetricCardGlass = (0, react.forwardRef)(({ title, value, description, change, variant, progress, label, color, valueFormatter, valueSuffix, trend, icon, sparklineData, showSparkline = true, showProgress = true, className, ...props }, ref) => {
3081
+ const actualTitle = title || label;
3082
+ if (!actualTitle) console.warn("[MetricCardGlass] Missing required prop: `title` (or deprecated `label`)");
3083
+ if (label && !title) console.warn("[MetricCardGlass] Deprecated prop `label` used. Please use `title` instead. Will be removed in v2.0");
3084
+ const actualVariant = variant || (color ? colorToVariant[color] : "default");
3085
+ if (color && !variant) console.warn(`[MetricCardGlass] Deprecated prop \`color="${color}"\` used. Please use \`variant="${colorToVariant[color]}"\` instead. Will be removed in v2.0`);
3086
+ const actualDescription = description || valueSuffix;
3087
+ if (valueSuffix && !description) console.warn("[MetricCardGlass] Deprecated prop `valueSuffix` used. Please use `description` instead. Will be removed in v2.0");
3088
+ const actualChange = change || (trend ? {
3089
+ value: trend.value,
3090
+ direction: trend.direction,
3091
+ period: trend.label
3092
+ } : void 0);
3093
+ if (trend && !change) console.warn("[MetricCardGlass] Deprecated prop `trend` used. Please use `change` instead. Will be removed in v2.0");
3094
+ const displayValue = typeof value === "number" && valueFormatter ? valueFormatter(value) : String(value);
3095
+ if (valueFormatter) console.warn("[MetricCardGlass] Deprecated prop `valueFormatter` used. Please format value before passing. Will be removed in v2.0");
3096
+ const actualProgress = progress ?? (typeof value === "number" && value >= 0 && value <= 100 ? value : void 0);
3097
+ const variantVars = variantStyles[actualVariant];
3098
+ const hasSparkline = showSparkline && sparklineData && sparklineData.length > 0;
3099
+ const valueStyles = {
3100
+ color: variantVars.text,
3101
+ textShadow: variantVars.glow
3102
+ };
3103
+ const renderChange = () => {
3104
+ if (!actualChange) return null;
3105
+ if (typeof actualChange === "string" || typeof actualChange === "number") {
3106
+ const changeStr = String(actualChange);
3107
+ const isPositive = changeStr.startsWith("+") || !changeStr.startsWith("-") && parseFloat(changeStr) > 0;
3108
+ const isNegative = changeStr.startsWith("-") || parseFloat(changeStr) < 0;
3109
+ const direction$1 = isPositive ? "up" : isNegative ? "down" : "neutral";
3110
+ const TrendIcon$1 = TrendIcons[direction$1];
3111
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3112
+ className: require_utils.cn("flex items-center gap-1 text-xs", trendColors[direction$1]),
3113
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(TrendIcon$1, {
3114
+ className: "w-3 h-3",
3115
+ "aria-hidden": "true"
3116
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
3117
+ className: "font-medium",
3118
+ children: changeStr
3119
+ })]
3120
+ });
3121
+ }
3122
+ const changeValue = actualChange.value;
3123
+ const direction = actualChange.direction || (changeValue > 0 ? "up" : changeValue < 0 ? "down" : "neutral");
3124
+ const TrendIcon = TrendIcons[direction];
3125
+ const displayChange = direction === "down" ? `-${Math.abs(changeValue)}` : `+${changeValue}`;
3126
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3127
+ className: require_utils.cn("flex items-center gap-1 text-xs", trendColors[direction]),
3128
+ children: [
3129
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TrendIcon, {
3130
+ className: "w-3 h-3",
3131
+ "aria-hidden": "true"
3132
+ }),
3133
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
3134
+ className: "font-medium",
3135
+ children: [displayChange, "%"]
3136
+ }),
3137
+ actualChange.period && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
3138
+ className: "text-[var(--text-muted)] ml-0.5",
3139
+ children: actualChange.period
3140
+ })
3141
+ ]
3142
+ });
3143
+ };
3144
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(InteractiveCard, {
3145
+ ref,
3146
+ baseBg: variantVars.bg,
3147
+ borderColor: variantVars.border,
3148
+ hoverGlow: variantVars.glow,
3149
+ hoverLift: true,
3150
+ blur: "sm",
3151
+ rounded: "rounded-xl",
3152
+ className: require_utils.cn("p-3 md:p-4", className),
3153
+ ...props,
3154
+ children: [
3155
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3156
+ className: "flex items-start justify-between mb-2",
3157
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3158
+ className: "flex items-center gap-2",
3159
+ children: [icon && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3160
+ className: "text-(--text-muted)",
3161
+ "aria-hidden": "true",
3162
+ children: icon
3163
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
3164
+ className: "text-(length:--font-size-2xs) sm:text-xs md:text-sm font-medium truncate text-(--text-secondary)",
3165
+ children: actualTitle
3166
+ })]
3167
+ }), renderChange()]
3168
+ }),
3169
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3170
+ className: "flex flex-col items-center mb-2 md:mb-3 gap-1",
3171
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
3172
+ className: "font-bold text-lg sm:text-xl md:text-2xl whitespace-nowrap",
3173
+ style: valueStyles,
3174
+ children: displayValue
3175
+ }), actualDescription && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
3176
+ className: "text-(length:--font-size-2xs) text-(--text-muted)",
3177
+ children: actualDescription
3178
+ })]
3179
+ }),
3180
+ hasSparkline ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3181
+ className: "space-y-2",
3182
+ children: [showProgress && actualProgress !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProgressGlass, {
3183
+ value: actualProgress,
3184
+ gradient: variantToGradient[actualVariant],
3185
+ size: "sm"
3186
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SparklineGlass, {
3187
+ data: sparklineData,
3188
+ height: "sm",
3189
+ gap: "sm",
3190
+ className: "w-full",
3191
+ barColor: variantVars.text,
3192
+ highlightMax: true,
3193
+ "aria-label": `${actualTitle} trend`
3194
+ })]
3195
+ }) : showProgress && actualProgress !== void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProgressGlass, {
3196
+ value: actualProgress,
3197
+ gradient: variantToGradient[actualVariant],
3198
+ size: "sm"
3199
+ }) : null
3200
+ ]
3201
+ });
3202
+ });
3203
+ MetricCardGlass.displayName = "MetricCardGlass";
3204
+ const MetricsGridGlass = (0, react.forwardRef)(({ metrics, columns = 4, gap = "md", className, ...props }, ref) => {
3205
+ const gapClasses = {
3206
+ sm: "gap-2",
3207
+ md: "gap-4",
3208
+ lg: "gap-6"
3209
+ };
3210
+ const columnClasses = {
3211
+ 1: "grid-cols-1",
3212
+ 2: "grid-cols-1 sm:grid-cols-2",
3213
+ 3: "grid-cols-1 sm:grid-cols-2 md:grid-cols-3",
3214
+ 4: "grid-cols-2 sm:grid-cols-3 md:grid-cols-4",
3215
+ 5: "grid-cols-2 sm:grid-cols-3 md:grid-cols-5",
3216
+ 6: "grid-cols-2 sm:grid-cols-3 md:grid-cols-6"
3217
+ };
3218
+ if (metrics.length === 0) return null;
3219
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3220
+ ref,
3221
+ className: require_utils.cn("grid", columnClasses[columns], gapClasses[gap], className),
3222
+ ...props,
3223
+ children: metrics.map((metric) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MetricCardGlass, {
3224
+ title: metric.title,
3225
+ value: metric.value,
3226
+ variant: metric.variant
3227
+ }, metric.title))
3228
+ });
3229
+ });
3230
+ MetricsGridGlass.displayName = "MetricsGridGlass";
3231
+ const RepositoryCardGlass = (0, react.forwardRef)(({ name, languages, commits, contribution, stars = 0, flagType = "green", issues = [], expanded = false, onToggle, onGitHubClick, onAIAnalysisClick, className, ...props }, ref) => {
3232
+ const totalProjectCommits = contribution > 0 ? Math.round(commits / (contribution / 100)) : commits;
3233
+ const estimatedLines = Math.round(commits * 12);
3234
+ const expandedStyles = {
3235
+ background: "var(--expanded-bg)",
3236
+ borderColor: "var(--card-border)"
3237
+ };
3238
+ const metricCardStyles = {
3239
+ background: "var(--card-bg)",
3240
+ borderColor: "var(--card-border)"
3241
+ };
3242
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(InteractiveCard, {
3243
+ ref,
3244
+ baseBg: "var(--card-bg)",
3245
+ hoverBg: "var(--card-hover-bg)",
3246
+ borderColor: "var(--card-border)",
3247
+ hoverLift: false,
3248
+ blur: "sm",
3249
+ rounded: "rounded-xl",
3250
+ className: require_utils.cn("overflow-hidden", className),
3251
+ ...props,
3252
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3253
+ className: "p-3 md:p-3.5 cursor-pointer",
3254
+ onClick: onToggle,
3255
+ role: "button",
3256
+ tabIndex: 0,
3257
+ onKeyDown: (e) => {
3258
+ if (e.key === "Enter" || e.key === " ") {
3259
+ e.preventDefault();
3260
+ onToggle?.();
3261
+ }
3262
+ },
3263
+ "aria-expanded": expanded,
3264
+ children: [
3265
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3266
+ className: "flex items-center justify-between",
3267
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3268
+ className: "flex items-center gap-2.5",
3269
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
3270
+ className: "font-medium text-sm",
3271
+ style: { color: "var(--text-primary)" },
3272
+ children: name
3273
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(StatusIndicatorGlass, { type: flagType })]
3274
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3275
+ className: "flex items-center gap-2",
3276
+ children: [stars > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
3277
+ className: "flex items-center gap-1 text-xs",
3278
+ style: { color: "var(--status-away)" },
3279
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Star, { className: "w-3 h-3" }), stars]
3280
+ }), expanded ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ChevronUp, {
3281
+ className: "w-4 h-4",
3282
+ style: { color: "var(--text-muted)" }
3283
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ChevronDown, {
3284
+ className: "w-4 h-4",
3285
+ style: { color: "var(--text-muted)" }
3286
+ })]
3287
+ })]
3288
+ }),
3289
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3290
+ className: "text-xs mt-1.5",
3291
+ style: { color: "var(--text-muted)" },
3292
+ children: languages
3293
+ }),
3294
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3295
+ className: "text-xs mt-0.5",
3296
+ style: { color: "var(--text-secondary)" },
3297
+ children: [
3298
+ commits,
3299
+ " commits · ",
3300
+ contribution,
3301
+ "%"
3302
+ ]
3303
+ })
3304
+ ]
3305
+ }), expanded && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3306
+ className: "border-t p-3.5 space-y-3",
3307
+ style: expandedStyles,
3308
+ children: [
3309
+ issues.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3310
+ className: "p-3 rounded-xl border",
3311
+ style: {
3312
+ background: "var(--alert-danger-bg)",
3313
+ borderColor: "var(--alert-danger-border)"
3314
+ },
3315
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3316
+ className: "text-xs font-semibold flex items-center gap-1.5 mb-1.5",
3317
+ style: { color: "var(--alert-danger-text)" },
3318
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.AlertTriangle, { className: "w-3.5 h-3.5" }), "Issues"]
3319
+ }), issues.map((issue, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3320
+ className: "text-xs opacity-70",
3321
+ style: { color: "var(--alert-danger-text)" },
3322
+ children: ["• ", issue]
3323
+ }, index))]
3324
+ }),
3325
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3326
+ className: "grid grid-cols-2 gap-2",
3327
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3328
+ className: "p-2.5 rounded-lg border",
3329
+ style: metricCardStyles,
3330
+ children: [
3331
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3332
+ className: "text-xs",
3333
+ style: { color: "var(--text-muted)" },
3334
+ children: "Your Contribution"
3335
+ }),
3336
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3337
+ className: "font-semibold",
3338
+ style: { color: "var(--text-primary)" },
3339
+ children: [commits, " commits"]
3340
+ }),
3341
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3342
+ className: "text-xs",
3343
+ style: { color: "var(--text-muted)" },
3344
+ children: [contribution, "%"]
3345
+ })
3346
+ ]
3347
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3348
+ className: "p-2.5 rounded-lg border",
3349
+ style: metricCardStyles,
3350
+ children: [
3351
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3352
+ className: "text-xs",
3353
+ style: { color: "var(--text-muted)" },
3354
+ children: "Full Project"
3355
+ }),
3356
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3357
+ className: "font-semibold",
3358
+ style: { color: "var(--text-primary)" },
3359
+ children: [totalProjectCommits, " commits"]
3360
+ }),
3361
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3362
+ className: "text-xs",
3363
+ style: { color: "var(--text-muted)" },
3364
+ children: [
3365
+ "~",
3366
+ estimatedLines,
3367
+ " lines"
3368
+ ]
3369
+ })
3370
+ ]
3371
+ })]
3372
+ }),
3373
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3374
+ className: "flex flex-col sm:flex-row gap-2",
3375
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ButtonGlass, {
3376
+ variant: "secondary",
3377
+ size: "sm",
3378
+ icon: lucide_react.ExternalLink,
3379
+ onClick: (e) => {
3380
+ e.stopPropagation();
3381
+ onGitHubClick?.();
3382
+ },
3383
+ className: "flex-1",
3384
+ children: "GitHub"
3385
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ButtonGlass, {
3386
+ variant: "default",
3387
+ size: "sm",
3388
+ icon: lucide_react.Sparkles,
3389
+ onClick: (e) => {
3390
+ e.stopPropagation();
3391
+ onAIAnalysisClick?.();
3392
+ },
3393
+ className: "flex-1",
3394
+ children: "AI Analysis"
3395
+ })]
3396
+ })
3397
+ ]
3398
+ })]
3399
+ });
3400
+ });
3401
+ RepositoryCardGlass.displayName = "RepositoryCardGlass";
3402
+ const RepositoryHeaderGlass = (0, react.forwardRef)(({ name, flagType = "green", stars = 0, expanded = false, abbreviatedStars = false, className, ...props }, ref) => {
3403
+ const titleStyles = { color: "var(--text-primary)" };
3404
+ const starStyles = { color: "var(--status-away)" };
3405
+ const mutedStyles = { color: "var(--text-muted)" };
3406
+ const formatStars = (count) => {
3407
+ if (!abbreviatedStars) return String(count);
3408
+ if (count >= 1e6) return `${(count / 1e6).toFixed(1)}M`;
3409
+ if (count >= 1e3) return `${(count / 1e3).toFixed(1)}k`;
3410
+ return String(count);
3411
+ };
3412
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3413
+ ref,
3414
+ className: require_utils.cn("flex items-center justify-between", className),
3415
+ ...props,
3416
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3417
+ className: "flex items-center gap-2.5",
3418
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
3419
+ className: "font-medium text-sm",
3420
+ style: titleStyles,
3421
+ children: name
3422
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(StatusIndicatorGlass, { type: flagType })]
3423
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3424
+ className: "flex items-center gap-2",
3425
+ children: [stars > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
3426
+ className: "flex items-center gap-1 text-xs",
3427
+ style: starStyles,
3428
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Star, { className: "w-3 h-3" }), formatStars(stars)]
3429
+ }), expanded ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ChevronUp, {
3430
+ className: "w-4 h-4",
3431
+ style: mutedStyles
3432
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ChevronDown, {
3433
+ className: "w-4 h-4",
3434
+ style: mutedStyles
3435
+ })]
3436
+ })]
3437
+ });
3438
+ });
3439
+ RepositoryHeaderGlass.displayName = "RepositoryHeaderGlass";
3440
+ const RepositoryMetadataGlass = (0, react.forwardRef)(({ languages, commits, contribution, stacked = false, className, ...props }, ref) => {
3441
+ const mutedStyles = { color: "var(--text-muted)" };
3442
+ const secondaryStyles = { color: "var(--text-secondary)" };
3443
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3444
+ ref,
3445
+ className: require_utils.cn(stacked ? "space-y-0.5" : "space-y-1", className),
3446
+ ...props,
3447
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3448
+ className: "text-xs",
3449
+ style: mutedStyles,
3450
+ children: languages
3451
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3452
+ className: "text-xs",
3453
+ style: secondaryStyles,
3454
+ children: [
3455
+ commits.toLocaleString(),
3456
+ " commits · ",
3457
+ contribution,
3458
+ "%"
3459
+ ]
3460
+ })]
3461
+ });
3462
+ });
3463
+ RepositoryMetadataGlass.displayName = "RepositoryMetadataGlass";
3464
+ const TrustScoreDisplayGlass = (0, react.forwardRef)(({ score, maxScore = 100, title = "Overall Trust Score", showIcon = true, size = "md", className, ...props }, ref) => {
3465
+ const titleStyles = { color: "var(--text-primary)" };
3466
+ const accentStyles = { color: "var(--text-accent)" };
3467
+ const mutedStyles = { color: "var(--text-muted)" };
3468
+ const sizes = {
3469
+ sm: {
3470
+ title: "text-base",
3471
+ score: "text-2xl",
3472
+ max: "text-lg",
3473
+ icon: "w-4 h-4"
3474
+ },
3475
+ md: {
3476
+ title: "text-lg",
3477
+ score: "text-4xl",
3478
+ max: "text-xl",
3479
+ icon: "w-5 h-5"
3480
+ },
3481
+ lg: {
3482
+ title: "text-xl",
3483
+ score: "text-5xl",
3484
+ max: "text-2xl",
3485
+ icon: "w-6 h-6"
3486
+ }
3487
+ }[size];
3488
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3489
+ ref,
3490
+ className: require_utils.cn("flex items-center justify-between", className),
3491
+ ...props,
3492
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("h2", {
3493
+ className: require_utils.cn("font-semibold flex items-center gap-2", sizes.title),
3494
+ style: titleStyles,
3495
+ children: [showIcon && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Target, {
3496
+ className: sizes.icon,
3497
+ style: accentStyles
3498
+ }), title]
3499
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3500
+ className: "flex items-center gap-2 animate-[score-pulse_2s_ease-in-out_infinite]",
3501
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
3502
+ className: require_utils.cn(sizes.score, "font-bold bg-clip-text text-transparent"),
3503
+ style: { backgroundImage: "var(--score-gradient)" },
3504
+ children: score
3505
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
3506
+ className: sizes.max,
3507
+ style: mutedStyles,
3508
+ children: ["/ ", maxScore]
3509
+ })]
3510
+ })]
3511
+ });
3512
+ });
3513
+ TrustScoreDisplayGlass.displayName = "TrustScoreDisplayGlass";
3514
+ const UserInfoGlass = (0, react.forwardRef)(({ name, username, joinDate, profileUrl = "#", layout = "vertical", className, ...props }, ref) => {
3515
+ const titleStyles = { color: "var(--text-primary)" };
3516
+ const metaStyles = { color: "var(--text-secondary)" };
3517
+ const linkStyles = { color: "var(--text-accent)" };
3518
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3519
+ ref,
3520
+ className: require_utils.cn(layout === "vertical" ? "space-y-1" : "flex items-center gap-4", className),
3521
+ ...props,
3522
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h1", {
3523
+ className: require_utils.cn("font-bold", layout === "vertical" ? "text-lg md:text-xl" : "text-xl"),
3524
+ style: titleStyles,
3525
+ children: name
3526
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3527
+ className: require_utils.cn("flex items-center gap-2 text-sm flex-wrap", layout === "vertical" && "mt-0.5"),
3528
+ style: metaStyles,
3529
+ children: [
3530
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("a", {
3531
+ href: profileUrl,
3532
+ className: "flex items-center gap-1 hover:underline",
3533
+ style: linkStyles,
3534
+ "aria-label": `View ${username}'s profile`,
3535
+ children: [
3536
+ "@",
3537
+ username,
3538
+ " ",
3539
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ExternalLink, { className: "w-3 h-3" })
3540
+ ]
3541
+ }),
3542
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "·" }),
3543
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
3544
+ className: "flex items-center gap-1",
3545
+ children: [
3546
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Calendar, { className: "w-3 h-3" }),
3547
+ " Joined ",
3548
+ joinDate
3549
+ ]
3550
+ })
3551
+ ]
3552
+ })]
3553
+ });
3554
+ });
3555
+ UserInfoGlass.displayName = "UserInfoGlass";
3556
+ const UserStatsLineGlass = (0, react.forwardRef)(({ repos, followers, following, wrap = true, abbreviated = false, className, ...props }, ref) => {
3557
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3558
+ ref,
3559
+ className: require_utils.cn("flex items-center gap-4 text-sm", wrap && "flex-wrap", className),
3560
+ ...props,
3561
+ children: [
3562
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(StatItemGlass, {
3563
+ icon: lucide_react.FolderGit2,
3564
+ value: repos,
3565
+ label: "repos",
3566
+ abbreviated
3567
+ }),
3568
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(StatItemGlass, {
3569
+ icon: lucide_react.Users,
3570
+ value: followers,
3571
+ label: "followers",
3572
+ abbreviated
3573
+ }),
3574
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(StatItemGlass, {
3575
+ icon: lucide_react.User,
3576
+ value: following,
3577
+ label: "following",
3578
+ abbreviated
3579
+ })
3580
+ ]
3581
+ });
3582
+ });
3583
+ UserStatsLineGlass.displayName = "UserStatsLineGlass";
3584
+ const YearCardGlass = (0, react.forwardRef)(({ year, emoji, label, commits, progress, isExpanded = false, gradient = "blue", prs = 0, repos = 0, onShowYear, sparklineData, sparklineLabels, insights, stats, actionLabel, showSparklineCollapsed = true, valueFormatter, children, className, onClick, ...props }, ref) => {
3585
+ const expandedStyles = {
3586
+ background: "var(--expanded-bg)",
3587
+ borderColor: "var(--expanded-border)"
3588
+ };
3589
+ const metricCardStyles = {
3590
+ background: "var(--card-bg)",
3591
+ borderColor: "var(--card-border)"
3592
+ };
3593
+ const displayCommits = valueFormatter ? valueFormatter(commits) : commits;
3594
+ const displayStats = stats || [
3595
+ {
3596
+ label: "Commits",
3597
+ value: commits
3598
+ },
3599
+ {
3600
+ label: "PRs",
3601
+ value: prs
3602
+ },
3603
+ {
3604
+ label: "Repos",
3605
+ value: repos
3606
+ }
3607
+ ];
3608
+ const buttonLabel = actionLabel || `Show repos from ${year}`;
3609
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(InteractiveCard, {
3610
+ ref,
3611
+ baseBg: "var(--year-card-bg)",
3612
+ hoverBg: "var(--card-hover-bg)",
3613
+ borderColor: "var(--year-card-border)",
3614
+ hoverGlow: "var(--year-card-hover-glow)",
3615
+ hoverLift: true,
3616
+ rounded: "rounded-xl",
3617
+ className: require_utils.cn("w-full max-w-2xl p-2.5 md:p-3 cursor-pointer", className),
3618
+ onClick,
3619
+ role: "button",
3620
+ tabIndex: 0,
3621
+ onKeyDown: (e) => {
3622
+ if (e.key === "Enter" || e.key === " ") {
3623
+ e.preventDefault();
3624
+ onClick?.(e);
3625
+ }
3626
+ },
3627
+ "aria-expanded": isExpanded,
3628
+ "aria-label": `${year} year: ${label}, ${commits} commits. ${isExpanded ? "Collapse" : "Expand"} details`,
3629
+ ...props,
3630
+ children: [
3631
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3632
+ className: "flex items-center justify-between mb-1.5 md:mb-2",
3633
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3634
+ className: "flex items-center gap-1.5 md:gap-2",
3635
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
3636
+ className: "font-semibold text-sm md:text-base",
3637
+ style: { color: "var(--text-primary)" },
3638
+ children: year
3639
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(BadgeGlass, { children: [
3640
+ emoji,
3641
+ " ",
3642
+ label
3643
+ ] })]
3644
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
3645
+ className: "text-xs md:text-sm flex items-center gap-0.5 md:gap-1",
3646
+ style: { color: "var(--text-secondary)" },
3647
+ children: [displayCommits, isExpanded ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ChevronUp, {
3648
+ className: "w-3.5 h-3.5 md:w-4 md:h-4",
3649
+ "aria-hidden": "true"
3650
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ChevronDown, {
3651
+ className: "w-3.5 h-3.5 md:w-4 md:h-4",
3652
+ "aria-hidden": "true"
3653
+ })]
3654
+ })]
3655
+ }),
3656
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3657
+ className: "flex items-center gap-2",
3658
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3659
+ className: "flex-1",
3660
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProgressGlass, {
3661
+ value: progress,
3662
+ gradient,
3663
+ size: "sm"
3664
+ })
3665
+ }), showSparklineCollapsed && sparklineData && sparklineData.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SparklineGlass, {
3666
+ data: sparklineData,
3667
+ labels: sparklineLabels,
3668
+ height: "sm",
3669
+ gap: "sm",
3670
+ className: "w-16 md:w-20",
3671
+ "aria-label": `Activity trend for ${year}`
3672
+ })]
3673
+ }),
3674
+ isExpanded && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3675
+ className: "mt-3 pt-3 border-t space-y-3",
3676
+ style: expandedStyles,
3677
+ children: [
3678
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3679
+ className: "grid gap-2 md:gap-3",
3680
+ style: { gridTemplateColumns: `repeat(${Math.min(displayStats.length, 4)}, 1fr)` },
3681
+ children: displayStats.map((stat, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3682
+ className: "p-2 md:p-2.5 rounded-lg border text-center",
3683
+ style: metricCardStyles,
3684
+ children: [
3685
+ stat.icon && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3686
+ className: "mb-1 flex justify-center text-[var(--text-muted)]",
3687
+ children: stat.icon
3688
+ }),
3689
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3690
+ className: "text-base md:text-xl font-bold",
3691
+ style: { color: "var(--text-primary)" },
3692
+ children: stat.value
3693
+ }),
3694
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3695
+ className: "text-(length:--font-size-2xs) md:text-xs text-(--text-muted)",
3696
+ children: stat.label
3697
+ })
3698
+ ]
3699
+ }, index))
3700
+ }),
3701
+ !showSparklineCollapsed && sparklineData && sparklineData.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SparklineGlass, {
3702
+ data: sparklineData,
3703
+ labels: sparklineLabels,
3704
+ showLabels: !!sparklineLabels,
3705
+ height: "md",
3706
+ gap: "sm",
3707
+ highlightMax: true,
3708
+ className: "w-full",
3709
+ "aria-label": `Monthly activity for ${year}`
3710
+ }),
3711
+ insights && insights.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3712
+ className: "space-y-2",
3713
+ children: insights.map((insight, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(InsightCardGlass, {
3714
+ variant: insight.variant,
3715
+ emoji: insight.emoji,
3716
+ text: insight.text,
3717
+ detail: insight.detail,
3718
+ inline: false
3719
+ }, index))
3720
+ }),
3721
+ children,
3722
+ onShowYear && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ButtonGlass, {
3723
+ variant: "default",
3724
+ size: "sm",
3725
+ onClick: (e) => {
3726
+ e.stopPropagation();
3727
+ onShowYear();
3728
+ },
3729
+ className: "w-full",
3730
+ children: buttonLabel
3731
+ })
3732
+ ]
3733
+ })
3734
+ ]
3735
+ });
3736
+ });
3737
+ YearCardGlass.displayName = "YearCardGlass";
3738
+ const CareerStatsGlass = (0, react.forwardRef)(({ totalCommits = 2242, totalPRs = 47, totalRepos = 11, years = [], className, ...props }, ref) => {
3739
+ const [expandedYear, setExpandedYear] = (0, react.useState)(null);
3740
+ const handleYearClick = (year) => {
3741
+ setExpandedYear(expandedYear === year ? null : year);
3742
+ };
3743
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(GlassCard, {
3744
+ ref,
3745
+ className: require_utils.cn("p-4 md:p-5 lg:p-6", className),
3746
+ intensity: "medium",
3747
+ hover: false,
3748
+ ...props,
3749
+ children: [
3750
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("h3", {
3751
+ 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",
3752
+ style: { color: "var(--text-primary)" },
3753
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.TrendingUp, {
3754
+ className: "w-4 h-4 md:w-5 md:h-5 lg:w-6 lg:h-6",
3755
+ style: { color: "var(--text-accent)" }
3756
+ }), "Career Stats"]
3757
+ }),
3758
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
3759
+ 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",
3760
+ style: { color: "var(--text-secondary)" },
3761
+ children: [
3762
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
3763
+ className: "flex items-center gap-1 md:gap-1.5",
3764
+ children: [
3765
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Code, { className: "w-3.5 h-3.5 md:w-4 md:h-4 lg:w-5 lg:h-5" }),
3766
+ totalCommits.toLocaleString(),
3767
+ " commits"
3768
+ ]
3769
+ }),
3770
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "·" }),
3771
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
3772
+ className: "flex items-center gap-1 md:gap-1.5",
3773
+ children: [
3774
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.GitPullRequest, { className: "w-3.5 h-3.5 md:w-4 md:h-4 lg:w-5 lg:h-5" }),
3775
+ totalPRs,
3776
+ " PRs"
3777
+ ]
3778
+ }),
3779
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "·" }),
3780
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
3781
+ className: "flex items-center gap-1 md:gap-1.5",
3782
+ children: [
3783
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.FolderGit2, { className: "w-3.5 h-3.5 md:w-4 md:h-4 lg:w-5 lg:h-5" }),
3784
+ totalRepos,
3785
+ " repos"
3786
+ ]
3787
+ })
3788
+ ]
3789
+ }),
3790
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3791
+ className: "space-y-2 md:space-y-2.5 lg:space-y-3",
3792
+ children: years.map((y) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(YearCardGlass, {
3793
+ year: y.year,
3794
+ emoji: y.emoji,
3795
+ label: y.label,
3796
+ commits: y.commits,
3797
+ progress: y.progress,
3798
+ prs: y.prs,
3799
+ repos: y.repos,
3800
+ isExpanded: expandedYear === y.year,
3801
+ onClick: () => handleYearClick(y.year),
3802
+ onShowYear: () => {}
3803
+ }, y.year))
3804
+ })
3805
+ ]
3806
+ });
3807
+ });
3808
+ CareerStatsGlass.displayName = "CareerStatsGlass";
3809
+ const FlagsSectionGlass = (0, react.forwardRef)(({ flags = [], expanded = false, onToggle, className, ...props }, ref) => {
3810
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(GlassCard, {
3811
+ ref,
3812
+ className: require_utils.cn("w-full max-w-2xl", className),
3813
+ intensity: "medium",
3814
+ hover: false,
3815
+ ...props,
3816
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
3817
+ onClick: onToggle,
3818
+ className: "w-full p-3 md:p-4 flex items-center justify-between rounded-2xl",
3819
+ style: { color: "var(--text-primary)" },
3820
+ type: "button",
3821
+ "aria-expanded": expanded,
3822
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3823
+ className: "flex items-center gap-1.5 md:gap-2",
3824
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.AlertTriangle, {
3825
+ className: "w-4 h-4 md:w-5 md:h-5",
3826
+ style: { color: "var(--status-away)" }
3827
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
3828
+ className: "font-medium text-sm md:text-base",
3829
+ children: [flags.length, " flags detected"]
3830
+ })]
3831
+ }), expanded ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ChevronUp, {
3832
+ className: "w-4 h-4 md:w-5 md:h-5",
3833
+ style: { color: "var(--text-muted)" }
3834
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ChevronDown, {
3835
+ className: "w-4 h-4 md:w-5 md:h-5",
3836
+ style: { color: "var(--text-muted)" }
3837
+ })]
3838
+ }), expanded && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3839
+ className: "px-3 pb-3 md:px-4 md:pb-4 space-y-1.5 md:space-y-2",
3840
+ children: flags.map((flag, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FlagAlertGlass, {
3841
+ type: flag.type,
3842
+ title: flag.title,
3843
+ description: flag.description
3844
+ }, `flag-${i}`))
3845
+ })]
3846
+ });
3847
+ });
3848
+ FlagsSectionGlass.displayName = "FlagsSectionGlass";
3849
+ const HeaderBrandingGlass = (0, react.forwardRef)(({ logoIcon, title, subtitle, onLogoClick, logoAriaLabel = "Home", className, ...props }, ref) => {
3850
+ const titleStyles = { color: "var(--text-primary)" };
3851
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3852
+ ref,
3853
+ className: require_utils.cn("flex items-center gap-4", className),
3854
+ ...props,
3855
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconButtonGlass, {
3856
+ icon: logoIcon,
3857
+ "aria-label": logoAriaLabel,
3858
+ onClick: onLogoClick,
3859
+ variant: "gradient",
3860
+ size: "md"
3861
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3862
+ className: "flex flex-col sm:flex-row sm:items-center sm:gap-2",
3863
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
3864
+ className: "font-semibold text-base md:text-lg",
3865
+ style: titleStyles,
3866
+ children: title
3867
+ }), subtitle && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
3868
+ className: "hidden md:inline text-sm",
3869
+ style: { color: "var(--text-secondary)" },
3870
+ children: ["· ", subtitle]
3871
+ })]
3872
+ })]
3873
+ });
3874
+ });
3875
+ HeaderBrandingGlass.displayName = "HeaderBrandingGlass";
3876
+ var themes = [
3877
+ "light",
3878
+ "aurora",
3879
+ "glass"
3880
+ ];
3881
+ var themeConfig = {
3882
+ light: {
3883
+ label: "Light",
3884
+ icon: lucide_react.Sun
3885
+ },
3886
+ aurora: {
3887
+ label: "Aurora",
3888
+ icon: lucide_react.Moon
3889
+ },
3890
+ glass: {
3891
+ label: "Glass",
3892
+ icon: lucide_react.Palette
3893
+ }
3894
+ };
3895
+ const HeaderNavGlass = (0, react.forwardRef)(({ username = "Yhooi2", onSearch, onThemeToggle, className, ...props }, ref) => {
3896
+ const { theme, cycleTheme } = require_theme_context.useTheme();
3897
+ const nextTheme = themes[(themes.indexOf(theme) + 1) % themes.length];
3898
+ const NextIcon = themeConfig[nextTheme].icon;
3899
+ const headerStyles = {
3900
+ background: "var(--header-bg)",
3901
+ borderColor: "var(--header-border)",
3902
+ backdropFilter: "blur(var(--blur-md))",
3903
+ WebkitBackdropFilter: "blur(var(--blur-md))"
3904
+ };
3905
+ const iconBtnStyles = {
3906
+ background: "linear-gradient(135deg, var(--icon-btn-from), var(--icon-btn-to))",
3907
+ boxShadow: "var(--icon-btn-shadow)"
3908
+ };
3909
+ const themeBtnStyles = {
3910
+ background: "var(--card-subtle-bg)",
3911
+ border: "1px solid var(--card-subtle-border)"
3912
+ };
3913
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("header", {
3914
+ ref,
3915
+ className: require_utils.cn("border rounded-xl py-2 px-3 md:py-3 md:px-4 transition-all duration-300", className),
3916
+ style: headerStyles,
3917
+ ...props,
3918
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3919
+ className: "flex items-center justify-between",
3920
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3921
+ className: "flex items-center gap-2 md:gap-4",
3922
+ children: [
3923
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
3924
+ 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",
3925
+ style: iconBtnStyles,
3926
+ type: "button",
3927
+ "aria-label": "GitHub",
3928
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Github, {
3929
+ className: "w-4 h-4 md:w-5 md:h-5",
3930
+ style: { color: "var(--icon-btn-text)" }
3931
+ })
3932
+ }),
3933
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
3934
+ className: "font-semibold text-base md:text-lg",
3935
+ style: { color: "var(--text-primary)" },
3936
+ children: "User Analytics"
3937
+ }),
3938
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SearchBoxGlass, {
3939
+ className: "ml-2 md:ml-4",
3940
+ defaultValue: username,
3941
+ onSubmit: onSearch,
3942
+ inputWidth: "w-28 sm:w-36 md:w-48",
3943
+ placeholder: "Search username..."
3944
+ })
3945
+ ]
3946
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3947
+ className: "flex items-center gap-2 md:gap-3",
3948
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
3949
+ onClick: onThemeToggle ?? cycleTheme,
3950
+ className: "p-2 md:p-2.5 rounded-xl transition-all duration-300 hover:scale-105",
3951
+ style: themeBtnStyles,
3952
+ type: "button",
3953
+ "aria-label": `Switch to ${themeConfig[nextTheme].label} theme`,
3954
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(NextIcon, {
3955
+ className: "w-4 h-4 md:w-5 md:h-5",
3956
+ style: { color: "var(--text-secondary)" }
3957
+ })
3958
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ButtonGlass, {
3959
+ variant: "secondary",
3960
+ icon: lucide_react.Github,
3961
+ className: "hidden md:inline-flex",
3962
+ children: "Sign in with GitHub"
3963
+ })]
3964
+ })]
3965
+ })
3966
+ });
3967
+ });
3968
+ HeaderNavGlass.displayName = "HeaderNavGlass";
3969
+ const ProfileHeaderGlass = (0, react.forwardRef)(({ name = "Artem Safronov", username = "Yhooi2", joinDate = "Jan 2023", stats = {}, languages = [], onAIGenerate, className, ...props }, ref) => {
3970
+ const s = {
3971
+ repos: 11,
3972
+ followers: 1,
3973
+ following: 5,
3974
+ ...stats
3975
+ };
3976
+ const getInitials$1 = (fullName) => {
3977
+ return fullName.split(" ").map((n) => n[0]).join("").toUpperCase().slice(0, 2);
3978
+ };
3979
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(GlassCard, {
3980
+ ref,
3981
+ className: require_utils.cn("p-5", className),
3982
+ intensity: "strong",
3983
+ glow: "violet",
3984
+ hover: false,
3985
+ ...props,
3986
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3987
+ className: "flex flex-col md:flex-row gap-3 md:gap-6",
3988
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3989
+ className: "flex-1",
3990
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
3991
+ className: "flex gap-4",
3992
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProfileAvatarGlass, {
3993
+ initials: getInitials$1(name),
3994
+ size: "lg",
3995
+ status: "online"
3996
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [
3997
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h1", {
3998
+ className: "text-lg md:text-xl font-bold",
3999
+ style: { color: "var(--text-primary)" },
4000
+ children: name
4001
+ }),
4002
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4003
+ className: "flex items-center gap-2 text-sm mt-0.5",
4004
+ style: { color: "var(--text-secondary)" },
4005
+ children: [
4006
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("a", {
4007
+ href: "#",
4008
+ className: "flex items-center gap-1 hover:underline",
4009
+ style: { color: "var(--text-accent)" },
4010
+ children: [
4011
+ "@",
4012
+ username,
4013
+ " ",
4014
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ExternalLink, { className: "w-3 h-3" })
4015
+ ]
4016
+ }),
4017
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "·" }),
4018
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4019
+ className: "flex items-center gap-1",
4020
+ children: [
4021
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Calendar, { className: "w-3 h-3" }),
4022
+ " Joined ",
4023
+ joinDate
4024
+ ]
4025
+ })
4026
+ ]
4027
+ }),
4028
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4029
+ className: "flex items-center gap-3 md:gap-4 mt-2 text-sm flex-wrap",
4030
+ style: { color: "var(--text-secondary)" },
4031
+ children: [
4032
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4033
+ className: "flex items-center gap-1",
4034
+ children: [
4035
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.FolderGit2, {
4036
+ className: "w-4 h-4",
4037
+ style: { color: "var(--text-accent)" }
4038
+ }),
4039
+ s.repos,
4040
+ " repos"
4041
+ ]
4042
+ }),
4043
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4044
+ className: "flex items-center gap-1",
4045
+ children: [
4046
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Users, {
4047
+ className: "w-4 h-4",
4048
+ style: { color: "var(--text-accent)" }
4049
+ }),
4050
+ s.followers,
4051
+ " followers"
4052
+ ]
4053
+ }),
4054
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
4055
+ className: "flex items-center gap-1",
4056
+ children: [
4057
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.User, {
4058
+ className: "w-4 h-4",
4059
+ style: { color: "var(--text-accent)" }
4060
+ }),
4061
+ s.following,
4062
+ " following"
4063
+ ]
4064
+ })
4065
+ ]
4066
+ })
4067
+ ] })]
4068
+ }), languages.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
4069
+ className: "mt-4",
4070
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(LanguageBarGlass, { languages })
4071
+ })]
4072
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AICardGlass, { onGenerate: onAIGenerate })]
4073
+ })
4074
+ });
4075
+ });
4076
+ ProfileHeaderGlass.displayName = "ProfileHeaderGlass";
4077
+ var ownershipOptions = [{
4078
+ value: "your",
4079
+ label: "Your"
4080
+ }, {
4081
+ value: "contrib",
4082
+ label: "Contrib"
4083
+ }];
4084
+ const ProjectsListGlass = (0, react.forwardRef)(({ repositories, showFlaggedOnly = false, selectedYear = null, onClearFilters, title, ownershipFilter, onOwnershipChange, sortBy = "commits", sortOrder = "desc", onSortChange, showControls, className, ...props }, ref) => {
4085
+ const [expandedIndex, setExpandedIndex] = (0, react.useState)(null);
4086
+ const shouldShowControls = showControls ?? (onOwnershipChange !== void 0 || onSortChange !== void 0);
4087
+ const filteredRepos = (0, react.useMemo)(() => {
4088
+ return repositories.filter((repo) => {
4089
+ if (showFlaggedOnly && repo.flagType === "green") return false;
4090
+ if (selectedYear && repo.createdYear !== selectedYear) return false;
4091
+ if (ownershipFilter && ownershipFilter !== "all" && repo.ownership !== ownershipFilter) return false;
4092
+ return true;
4093
+ });
4094
+ }, [
4095
+ repositories,
4096
+ showFlaggedOnly,
4097
+ selectedYear,
4098
+ ownershipFilter
4099
+ ]);
4100
+ const sortedRepos = (0, react.useMemo)(() => {
4101
+ if (!onSortChange) return filteredRepos;
4102
+ return [...filteredRepos].sort((a, b) => {
4103
+ const multiplier = sortOrder === "asc" ? 1 : -1;
4104
+ switch (sortBy) {
4105
+ case "commits": return (a.commits - b.commits) * multiplier;
4106
+ case "stars": return ((a.stars ?? 0) - (b.stars ?? 0)) * multiplier;
4107
+ case "name": return a.name.localeCompare(b.name) * multiplier;
4108
+ case "contribution": return (a.contribution - b.contribution) * multiplier;
4109
+ default: return 0;
4110
+ }
4111
+ });
4112
+ }, [
4113
+ filteredRepos,
4114
+ sortBy,
4115
+ sortOrder,
4116
+ onSortChange
4117
+ ]);
4118
+ const displayTitle = title ?? (showFlaggedOnly ? "Flagged" : selectedYear ? `${selectedYear}` : "All") + " Projects";
4119
+ const emptyContainerStyles = { background: "var(--card-bg)" };
4120
+ const handleOwnershipChange = (value) => {
4121
+ if (onOwnershipChange && (value === "your" || value === "contrib")) onOwnershipChange(value);
4122
+ };
4123
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(GlassCard, {
4124
+ ref,
4125
+ intensity: "medium",
4126
+ className: require_utils.cn("p-3 sm:p-4", className),
4127
+ ...props,
4128
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4129
+ className: "flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 mb-4",
4130
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4131
+ className: "flex items-center gap-2",
4132
+ children: [
4133
+ showFlaggedOnly ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.AlertTriangle, {
4134
+ className: "w-4 h-4",
4135
+ style: { color: "var(--status-away)" }
4136
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.FolderGit2, {
4137
+ className: "w-4 h-4",
4138
+ style: { color: "var(--text-accent)" }
4139
+ }),
4140
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
4141
+ className: "font-semibold text-sm sm:text-base",
4142
+ style: { color: "var(--text-primary)" },
4143
+ children: displayTitle
4144
+ }),
4145
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(BadgeGlass, {
4146
+ variant: "info",
4147
+ children: [sortedRepos.length, " repos"]
4148
+ })
4149
+ ]
4150
+ }), shouldShowControls && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4151
+ className: "flex items-center gap-2 flex-wrap",
4152
+ children: [onSortChange && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SortDropdownGlass, {
4153
+ sortBy,
4154
+ sortOrder,
4155
+ onSortChange
4156
+ }), onOwnershipChange && ownershipFilter && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SegmentedControlGlass, {
4157
+ options: ownershipOptions,
4158
+ value: ownershipFilter,
4159
+ onChange: handleOwnershipChange
4160
+ })]
4161
+ })]
4162
+ }), sortedRepos.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4163
+ className: "text-center py-10",
4164
+ children: [
4165
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
4166
+ className: "w-16 h-16 mx-auto mb-3 rounded-2xl flex items-center justify-center",
4167
+ style: emptyContainerStyles,
4168
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.FolderGit2, {
4169
+ className: "w-8 h-8",
4170
+ style: { color: "var(--text-muted)" }
4171
+ })
4172
+ }),
4173
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
4174
+ className: "text-sm",
4175
+ style: { color: "var(--text-muted)" },
4176
+ children: "No repositories found"
4177
+ }),
4178
+ onClearFilters && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
4179
+ onClick: onClearFilters,
4180
+ className: "mt-2 text-sm underline transition-colors hover:opacity-80",
4181
+ style: { color: "var(--text-accent)" },
4182
+ children: "Clear filters"
4183
+ })
4184
+ ]
4185
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
4186
+ className: "space-y-2",
4187
+ children: sortedRepos.map((repo, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RepositoryCardGlass, {
4188
+ name: repo.name,
4189
+ languages: repo.languages,
4190
+ commits: repo.commits,
4191
+ contribution: repo.contribution,
4192
+ stars: repo.stars,
4193
+ flagType: repo.flagType,
4194
+ issues: repo.issues,
4195
+ expanded: expandedIndex === index,
4196
+ onToggle: () => setExpandedIndex(expandedIndex === index ? null : index)
4197
+ }, repo.name))
4198
+ })]
4199
+ });
4200
+ });
4201
+ ProjectsListGlass.displayName = "ProjectsListGlass";
4202
+ const TrustScoreCardGlass = (0, react.forwardRef)(({ score = 72, metrics = [], className, ...props }, ref) => {
4203
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(GlassCard, {
4204
+ ref,
4205
+ className: require_utils.cn("p-4 md:p-5", className),
4206
+ intensity: "strong",
4207
+ glow: "cyan",
4208
+ hover: false,
4209
+ ...props,
4210
+ children: [
4211
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4212
+ className: "flex items-center justify-between mb-3 md:mb-4",
4213
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("h2", {
4214
+ className: "font-semibold flex items-center gap-1.5 md:gap-2 text-base md:text-lg",
4215
+ style: { color: "var(--text-primary)" },
4216
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Target, {
4217
+ className: "w-4 h-4 md:w-5 md:h-5",
4218
+ style: { color: "var(--text-accent)" }
4219
+ }), "Overall Trust Score"]
4220
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4221
+ className: "flex items-center gap-1.5 md:gap-2 animate-[score-pulse_2s_ease-in-out_infinite]",
4222
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4223
+ className: "text-3xl md:text-4xl font-bold bg-clip-text text-transparent",
4224
+ style: { backgroundImage: "var(--score-gradient)" },
4225
+ children: score
4226
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
4227
+ className: "text-lg md:text-xl",
4228
+ style: { color: "var(--text-muted)" },
4229
+ children: "/ 100"
4230
+ })]
4231
+ })]
4232
+ }),
4233
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RainbowProgressGlass, {
4234
+ value: score,
4235
+ size: "lg",
4236
+ showGlow: true
4237
+ }),
4238
+ metrics.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
4239
+ className: "grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-3 md:gap-4 mt-4 md:mt-5",
4240
+ children: metrics.map((m) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MetricCardGlass, {
4241
+ title: m.title,
4242
+ value: m.value,
4243
+ variant: m.variant
4244
+ }, m.title))
4245
+ })
4246
+ ]
4247
+ });
4248
+ });
4249
+ TrustScoreCardGlass.displayName = "TrustScoreCardGlass";
4250
+ Object.defineProperty(exports, "AICardGlass", {
4251
+ enumerable: true,
4252
+ get: function() {
4253
+ return AICardGlass;
4254
+ }
4255
+ });
4256
+ Object.defineProperty(exports, "AlertGlass", {
4257
+ enumerable: true,
4258
+ get: function() {
4259
+ return AlertGlass;
4260
+ }
4261
+ });
4262
+ Object.defineProperty(exports, "AlertGlassDescription", {
4263
+ enumerable: true,
4264
+ get: function() {
4265
+ return AlertGlassDescription;
4266
+ }
4267
+ });
4268
+ Object.defineProperty(exports, "AlertGlassTitle", {
4269
+ enumerable: true,
4270
+ get: function() {
4271
+ return AlertGlassTitle;
4272
+ }
4273
+ });
4274
+ Object.defineProperty(exports, "AvatarGlass", {
4275
+ enumerable: true,
4276
+ get: function() {
4277
+ return AvatarGlass;
4278
+ }
4279
+ });
4280
+ Object.defineProperty(exports, "AvatarGlassFallback", {
4281
+ enumerable: true,
4282
+ get: function() {
4283
+ return AvatarGlassFallback;
4284
+ }
4285
+ });
4286
+ Object.defineProperty(exports, "AvatarGlassImage", {
4287
+ enumerable: true,
4288
+ get: function() {
4289
+ return AvatarGlassImage;
4290
+ }
4291
+ });
4292
+ Object.defineProperty(exports, "AvatarGlassSimple", {
4293
+ enumerable: true,
4294
+ get: function() {
4295
+ return AvatarGlassSimple;
4296
+ }
4297
+ });
4298
+ Object.defineProperty(exports, "BadgeGlass", {
4299
+ enumerable: true,
4300
+ get: function() {
4301
+ return BadgeGlass;
4302
+ }
4303
+ });
4304
+ Object.defineProperty(exports, "BaseProgressGlass", {
4305
+ enumerable: true,
4306
+ get: function() {
4307
+ return BaseProgressGlass;
4308
+ }
4309
+ });
4310
+ Object.defineProperty(exports, "ButtonGlass", {
4311
+ enumerable: true,
4312
+ get: function() {
4313
+ return ButtonGlass;
4314
+ }
4315
+ });
4316
+ Object.defineProperty(exports, "CareerStatsGlass", {
4317
+ enumerable: true,
4318
+ get: function() {
4319
+ return CareerStatsGlass;
4320
+ }
4321
+ });
4322
+ Object.defineProperty(exports, "CareerStatsHeaderGlass", {
4323
+ enumerable: true,
4324
+ get: function() {
4325
+ return CareerStatsHeaderGlass;
4326
+ }
4327
+ });
4328
+ Object.defineProperty(exports, "Checkbox", {
4329
+ enumerable: true,
4330
+ get: function() {
4331
+ return Checkbox;
4332
+ }
4333
+ });
4334
+ Object.defineProperty(exports, "CheckboxGlass", {
4335
+ enumerable: true,
4336
+ get: function() {
4337
+ return CheckboxGlass;
4338
+ }
4339
+ });
4340
+ Object.defineProperty(exports, "CircularMetricGlass", {
4341
+ enumerable: true,
4342
+ get: function() {
4343
+ return CircularMetricGlass;
4344
+ }
4345
+ });
4346
+ Object.defineProperty(exports, "CircularProgressGlass", {
4347
+ enumerable: true,
4348
+ get: function() {
4349
+ return CircularProgressGlass;
4350
+ }
4351
+ });
4352
+ Object.defineProperty(exports, "ComboBoxGlass", {
4353
+ enumerable: true,
4354
+ get: function() {
4355
+ return ComboBoxGlass;
4356
+ }
4357
+ });
4358
+ Object.defineProperty(exports, "ContributionMetricsGlass", {
4359
+ enumerable: true,
4360
+ get: function() {
4361
+ return ContributionMetricsGlass;
4362
+ }
4363
+ });
4364
+ Object.defineProperty(exports, "DropdownGlass", {
4365
+ enumerable: true,
4366
+ get: function() {
4367
+ return DropdownGlass;
4368
+ }
4369
+ });
4370
+ Object.defineProperty(exports, "DropdownMenuGlass", {
4371
+ enumerable: true,
4372
+ get: function() {
4373
+ return DropdownMenuGlass;
4374
+ }
4375
+ });
4376
+ Object.defineProperty(exports, "DropdownMenuGlassCheckboxItem", {
4377
+ enumerable: true,
4378
+ get: function() {
4379
+ return DropdownMenuGlassCheckboxItem;
4380
+ }
4381
+ });
4382
+ Object.defineProperty(exports, "DropdownMenuGlassContent", {
4383
+ enumerable: true,
4384
+ get: function() {
4385
+ return DropdownMenuGlassContent;
4386
+ }
4387
+ });
4388
+ Object.defineProperty(exports, "DropdownMenuGlassGroup", {
4389
+ enumerable: true,
4390
+ get: function() {
4391
+ return DropdownMenuGlassGroup;
4392
+ }
4393
+ });
4394
+ Object.defineProperty(exports, "DropdownMenuGlassItem", {
4395
+ enumerable: true,
4396
+ get: function() {
4397
+ return DropdownMenuGlassItem;
4398
+ }
4399
+ });
4400
+ Object.defineProperty(exports, "DropdownMenuGlassLabel", {
4401
+ enumerable: true,
4402
+ get: function() {
4403
+ return DropdownMenuGlassLabel;
4404
+ }
4405
+ });
4406
+ Object.defineProperty(exports, "DropdownMenuGlassPortal", {
4407
+ enumerable: true,
4408
+ get: function() {
4409
+ return DropdownMenuGlassPortal;
4410
+ }
4411
+ });
4412
+ Object.defineProperty(exports, "DropdownMenuGlassRadioGroup", {
4413
+ enumerable: true,
4414
+ get: function() {
4415
+ return DropdownMenuGlassRadioGroup;
4416
+ }
4417
+ });
4418
+ Object.defineProperty(exports, "DropdownMenuGlassRadioItem", {
4419
+ enumerable: true,
4420
+ get: function() {
4421
+ return DropdownMenuGlassRadioItem;
4422
+ }
4423
+ });
4424
+ Object.defineProperty(exports, "DropdownMenuGlassSeparator", {
4425
+ enumerable: true,
4426
+ get: function() {
4427
+ return DropdownMenuGlassSeparator;
4428
+ }
4429
+ });
4430
+ Object.defineProperty(exports, "DropdownMenuGlassShortcut", {
4431
+ enumerable: true,
4432
+ get: function() {
4433
+ return DropdownMenuGlassShortcut;
4434
+ }
4435
+ });
4436
+ Object.defineProperty(exports, "DropdownMenuGlassSub", {
4437
+ enumerable: true,
4438
+ get: function() {
4439
+ return DropdownMenuGlassSub;
4440
+ }
4441
+ });
4442
+ Object.defineProperty(exports, "DropdownMenuGlassSubContent", {
4443
+ enumerable: true,
4444
+ get: function() {
4445
+ return DropdownMenuGlassSubContent;
4446
+ }
4447
+ });
4448
+ Object.defineProperty(exports, "DropdownMenuGlassSubTrigger", {
4449
+ enumerable: true,
4450
+ get: function() {
4451
+ return DropdownMenuGlassSubTrigger;
4452
+ }
4453
+ });
4454
+ Object.defineProperty(exports, "DropdownMenuGlassTrigger", {
4455
+ enumerable: true,
4456
+ get: function() {
4457
+ return DropdownMenuGlassTrigger;
4458
+ }
4459
+ });
4460
+ Object.defineProperty(exports, "ExpandableHeaderGlass", {
4461
+ enumerable: true,
4462
+ get: function() {
4463
+ return ExpandableHeaderGlass;
4464
+ }
4465
+ });
4466
+ Object.defineProperty(exports, "FlagAlertGlass", {
4467
+ enumerable: true,
4468
+ get: function() {
4469
+ return FlagAlertGlass;
4470
+ }
4471
+ });
4472
+ Object.defineProperty(exports, "FlagsSectionGlass", {
4473
+ enumerable: true,
4474
+ get: function() {
4475
+ return FlagsSectionGlass;
4476
+ }
4477
+ });
4478
+ Object.defineProperty(exports, "FormFieldWrapper", {
4479
+ enumerable: true,
4480
+ get: function() {
4481
+ return FormFieldWrapper;
4482
+ }
4483
+ });
4484
+ Object.defineProperty(exports, "GlassCard", {
4485
+ enumerable: true,
4486
+ get: function() {
4487
+ return GlassCard;
4488
+ }
4489
+ });
4490
+ Object.defineProperty(exports, "HeaderBrandingGlass", {
4491
+ enumerable: true,
4492
+ get: function() {
4493
+ return HeaderBrandingGlass;
4494
+ }
4495
+ });
4496
+ Object.defineProperty(exports, "HeaderNavGlass", {
4497
+ enumerable: true,
4498
+ get: function() {
4499
+ return HeaderNavGlass;
4500
+ }
4501
+ });
4502
+ Object.defineProperty(exports, "IconButtonGlass", {
4503
+ enumerable: true,
4504
+ get: function() {
4505
+ return IconButtonGlass;
4506
+ }
4507
+ });
4508
+ Object.defineProperty(exports, "InputGlass", {
4509
+ enumerable: true,
4510
+ get: function() {
4511
+ return InputGlass;
4512
+ }
4513
+ });
4514
+ Object.defineProperty(exports, "InsightCardGlass", {
4515
+ enumerable: true,
4516
+ get: function() {
4517
+ return InsightCardGlass;
4518
+ }
4519
+ });
4520
+ Object.defineProperty(exports, "InteractiveCard", {
4521
+ enumerable: true,
4522
+ get: function() {
4523
+ return InteractiveCard;
4524
+ }
4525
+ });
4526
+ Object.defineProperty(exports, "LanguageBarGlass", {
4527
+ enumerable: true,
4528
+ get: function() {
4529
+ return LanguageBarGlass;
4530
+ }
4531
+ });
4532
+ Object.defineProperty(exports, "MetricCardGlass", {
4533
+ enumerable: true,
4534
+ get: function() {
4535
+ return MetricCardGlass;
4536
+ }
4537
+ });
4538
+ Object.defineProperty(exports, "MetricsGridGlass", {
4539
+ enumerable: true,
4540
+ get: function() {
4541
+ return MetricsGridGlass;
4542
+ }
4543
+ });
4544
+ Object.defineProperty(exports, "ModalGlass", {
4545
+ enumerable: true,
4546
+ get: function() {
4547
+ return ModalGlass;
4548
+ }
4549
+ });
4550
+ Object.defineProperty(exports, "NotificationGlass", {
4551
+ enumerable: true,
4552
+ get: function() {
4553
+ return NotificationGlass;
4554
+ }
4555
+ });
4556
+ Object.defineProperty(exports, "PopoverGlass", {
4557
+ enumerable: true,
4558
+ get: function() {
4559
+ return PopoverGlass;
4560
+ }
4561
+ });
4562
+ Object.defineProperty(exports, "PopoverGlassAnchor", {
4563
+ enumerable: true,
4564
+ get: function() {
4565
+ return PopoverGlassAnchor;
4566
+ }
4567
+ });
4568
+ Object.defineProperty(exports, "PopoverGlassContent", {
4569
+ enumerable: true,
4570
+ get: function() {
4571
+ return PopoverGlassContent;
4572
+ }
4573
+ });
4574
+ Object.defineProperty(exports, "PopoverGlassLegacy", {
4575
+ enumerable: true,
4576
+ get: function() {
4577
+ return PopoverGlassLegacy;
4578
+ }
4579
+ });
4580
+ Object.defineProperty(exports, "PopoverGlassTrigger", {
4581
+ enumerable: true,
4582
+ get: function() {
4583
+ return PopoverGlassTrigger;
4584
+ }
4585
+ });
4586
+ Object.defineProperty(exports, "ProfileAvatarGlass", {
4587
+ enumerable: true,
4588
+ get: function() {
4589
+ return ProfileAvatarGlass;
4590
+ }
4591
+ });
4592
+ Object.defineProperty(exports, "ProfileHeaderGlass", {
4593
+ enumerable: true,
4594
+ get: function() {
4595
+ return ProfileHeaderGlass;
4596
+ }
4597
+ });
4598
+ Object.defineProperty(exports, "ProgressGlass", {
4599
+ enumerable: true,
4600
+ get: function() {
4601
+ return ProgressGlass;
4602
+ }
4603
+ });
4604
+ Object.defineProperty(exports, "ProjectsListGlass", {
4605
+ enumerable: true,
4606
+ get: function() {
4607
+ return ProjectsListGlass;
4608
+ }
4609
+ });
4610
+ Object.defineProperty(exports, "RainbowProgressGlass", {
4611
+ enumerable: true,
4612
+ get: function() {
4613
+ return RainbowProgressGlass;
4614
+ }
4615
+ });
4616
+ Object.defineProperty(exports, "RepositoryCardGlass", {
4617
+ enumerable: true,
4618
+ get: function() {
4619
+ return RepositoryCardGlass;
4620
+ }
4621
+ });
4622
+ Object.defineProperty(exports, "RepositoryHeaderGlass", {
4623
+ enumerable: true,
4624
+ get: function() {
4625
+ return RepositoryHeaderGlass;
4626
+ }
4627
+ });
4628
+ Object.defineProperty(exports, "RepositoryMetadataGlass", {
4629
+ enumerable: true,
4630
+ get: function() {
4631
+ return RepositoryMetadataGlass;
4632
+ }
4633
+ });
4634
+ Object.defineProperty(exports, "SearchBoxGlass", {
4635
+ enumerable: true,
4636
+ get: function() {
4637
+ return SearchBoxGlass;
4638
+ }
4639
+ });
4640
+ Object.defineProperty(exports, "SegmentedControlGlass", {
4641
+ enumerable: true,
4642
+ get: function() {
4643
+ return SegmentedControlGlass;
4644
+ }
4645
+ });
4646
+ Object.defineProperty(exports, "SkeletonGlass", {
4647
+ enumerable: true,
4648
+ get: function() {
4649
+ return SkeletonGlass;
4650
+ }
4651
+ });
4652
+ Object.defineProperty(exports, "SliderGlass", {
4653
+ enumerable: true,
4654
+ get: function() {
4655
+ return SliderGlass;
4656
+ }
4657
+ });
4658
+ Object.defineProperty(exports, "SortDropdownGlass", {
4659
+ enumerable: true,
4660
+ get: function() {
4661
+ return SortDropdownGlass;
4662
+ }
4663
+ });
4664
+ Object.defineProperty(exports, "SparklineGlass", {
4665
+ enumerable: true,
4666
+ get: function() {
4667
+ return SparklineGlass;
4668
+ }
4669
+ });
4670
+ Object.defineProperty(exports, "StatItemGlass", {
4671
+ enumerable: true,
4672
+ get: function() {
4673
+ return StatItemGlass;
4674
+ }
4675
+ });
4676
+ Object.defineProperty(exports, "StatusIndicatorGlass", {
4677
+ enumerable: true,
4678
+ get: function() {
4679
+ return StatusIndicatorGlass;
4680
+ }
4681
+ });
4682
+ Object.defineProperty(exports, "Tabs", {
4683
+ enumerable: true,
4684
+ get: function() {
4685
+ return Tabs;
4686
+ }
4687
+ });
4688
+ Object.defineProperty(exports, "TabsContent", {
4689
+ enumerable: true,
4690
+ get: function() {
4691
+ return TabsContent;
4692
+ }
4693
+ });
4694
+ Object.defineProperty(exports, "TabsGlass", {
4695
+ enumerable: true,
4696
+ get: function() {
4697
+ return TabsGlass;
4698
+ }
4699
+ });
4700
+ Object.defineProperty(exports, "TabsList", {
4701
+ enumerable: true,
4702
+ get: function() {
4703
+ return TabsList;
4704
+ }
4705
+ });
4706
+ Object.defineProperty(exports, "TabsTrigger", {
4707
+ enumerable: true,
4708
+ get: function() {
4709
+ return TabsTrigger;
4710
+ }
4711
+ });
4712
+ Object.defineProperty(exports, "ThemeToggleGlass", {
4713
+ enumerable: true,
4714
+ get: function() {
4715
+ return ThemeToggleGlass;
4716
+ }
4717
+ });
4718
+ Object.defineProperty(exports, "ToggleGlass", {
4719
+ enumerable: true,
4720
+ get: function() {
4721
+ return ToggleGlass;
4722
+ }
4723
+ });
4724
+ Object.defineProperty(exports, "TooltipGlass", {
4725
+ enumerable: true,
4726
+ get: function() {
4727
+ return TooltipGlass;
4728
+ }
4729
+ });
4730
+ Object.defineProperty(exports, "TooltipGlassContent", {
4731
+ enumerable: true,
4732
+ get: function() {
4733
+ return TooltipGlassContent;
4734
+ }
4735
+ });
4736
+ Object.defineProperty(exports, "TooltipGlassProvider", {
4737
+ enumerable: true,
4738
+ get: function() {
4739
+ return TooltipGlassProvider;
4740
+ }
4741
+ });
4742
+ Object.defineProperty(exports, "TooltipGlassSimple", {
4743
+ enumerable: true,
4744
+ get: function() {
4745
+ return TooltipGlassSimple;
4746
+ }
4747
+ });
4748
+ Object.defineProperty(exports, "TooltipGlassTrigger", {
4749
+ enumerable: true,
4750
+ get: function() {
4751
+ return TooltipGlassTrigger;
4752
+ }
4753
+ });
4754
+ Object.defineProperty(exports, "TouchTarget", {
4755
+ enumerable: true,
4756
+ get: function() {
4757
+ return TouchTarget;
4758
+ }
4759
+ });
4760
+ Object.defineProperty(exports, "TrustScoreCardGlass", {
4761
+ enumerable: true,
4762
+ get: function() {
4763
+ return TrustScoreCardGlass;
4764
+ }
4765
+ });
4766
+ Object.defineProperty(exports, "TrustScoreDisplayGlass", {
4767
+ enumerable: true,
4768
+ get: function() {
4769
+ return TrustScoreDisplayGlass;
4770
+ }
4771
+ });
4772
+ Object.defineProperty(exports, "UserInfoGlass", {
4773
+ enumerable: true,
4774
+ get: function() {
4775
+ return UserInfoGlass;
4776
+ }
4777
+ });
4778
+ Object.defineProperty(exports, "UserStatsLineGlass", {
4779
+ enumerable: true,
4780
+ get: function() {
4781
+ return UserStatsLineGlass;
4782
+ }
4783
+ });
4784
+ Object.defineProperty(exports, "YearCardGlass", {
4785
+ enumerable: true,
4786
+ get: function() {
4787
+ return YearCardGlass;
4788
+ }
4789
+ });
4790
+ Object.defineProperty(exports, "__toESM", {
4791
+ enumerable: true,
4792
+ get: function() {
4793
+ return __toESM;
4794
+ }
4795
+ });
4796
+ Object.defineProperty(exports, "alertVariants", {
4797
+ enumerable: true,
4798
+ get: function() {
4799
+ return alertVariants;
4800
+ }
4801
+ });
4802
+ Object.defineProperty(exports, "avatarSizes", {
4803
+ enumerable: true,
4804
+ get: function() {
4805
+ return avatarSizes;
4806
+ }
4807
+ });
4808
+ Object.defineProperty(exports, "badgeVariants", {
4809
+ enumerable: true,
4810
+ get: function() {
4811
+ return badgeVariants;
4812
+ }
4813
+ });
4814
+ Object.defineProperty(exports, "buttonGlassVariants", {
4815
+ enumerable: true,
4816
+ get: function() {
4817
+ return buttonGlassVariants;
4818
+ }
4819
+ });
4820
+ Object.defineProperty(exports, "cardIntensity", {
4821
+ enumerable: true,
4822
+ get: function() {
4823
+ return cardIntensity;
4824
+ }
4825
+ });
4826
+ Object.defineProperty(exports, "inputVariants", {
4827
+ enumerable: true,
4828
+ get: function() {
4829
+ return inputVariants;
4830
+ }
4831
+ });
4832
+ Object.defineProperty(exports, "insightCardVariants", {
4833
+ enumerable: true,
4834
+ get: function() {
4835
+ return insightCardVariants;
4836
+ }
4837
+ });
4838
+ Object.defineProperty(exports, "insightVariantConfig", {
4839
+ enumerable: true,
4840
+ get: function() {
4841
+ return insightVariantConfig;
4842
+ }
4843
+ });
4844
+ Object.defineProperty(exports, "modalSizes", {
4845
+ enumerable: true,
4846
+ get: function() {
4847
+ return modalSizes;
4848
+ }
4849
+ });
4850
+ Object.defineProperty(exports, "notificationVariants", {
4851
+ enumerable: true,
4852
+ get: function() {
4853
+ return notificationVariants;
4854
+ }
4855
+ });
4856
+ Object.defineProperty(exports, "progressSizes", {
4857
+ enumerable: true,
4858
+ get: function() {
4859
+ return progressSizes;
4860
+ }
4861
+ });
4862
+ Object.defineProperty(exports, "skeletonVariants", {
4863
+ enumerable: true,
4864
+ get: function() {
4865
+ return skeletonVariants;
4866
+ }
4867
+ });
4868
+ Object.defineProperty(exports, "sparklineBarVariants", {
4869
+ enumerable: true,
4870
+ get: function() {
4871
+ return sparklineBarVariants;
4872
+ }
4873
+ });
4874
+ Object.defineProperty(exports, "sparklineContainerVariants", {
4875
+ enumerable: true,
4876
+ get: function() {
4877
+ return sparklineContainerVariants;
4878
+ }
4879
+ });
4880
+ Object.defineProperty(exports, "statusSizes", {
4881
+ enumerable: true,
4882
+ get: function() {
4883
+ return statusSizes;
4884
+ }
4885
+ });
4886
+ Object.defineProperty(exports, "toggleSizes", {
4887
+ enumerable: true,
4888
+ get: function() {
4889
+ return toggleSizes;
4890
+ }
4891
+ });
4892
+
4893
+ //# sourceMappingURL=trust-score-card-glass-3VBi9soW.cjs.map