shadcn-glass-ui 2.2.3 → 2.2.4

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