@b3-crow/ui-kit 0.0.35 → 0.0.37-pr40.1

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 (256) hide show
  1. package/dist/components/backgrounds/DashboardBackground.d.ts +4 -0
  2. package/dist/components/backgrounds/DashboardBackground.d.ts.map +1 -0
  3. package/dist/components/backgrounds/DashboardBackground.js +20 -0
  4. package/dist/components/backgrounds/DashboardBackground.js.map +1 -0
  5. package/dist/components/buttons/AttachmentButton.d.ts +7 -0
  6. package/dist/components/buttons/AttachmentButton.d.ts.map +1 -0
  7. package/dist/components/buttons/AttachmentButton.js +8 -0
  8. package/dist/components/buttons/AttachmentButton.js.map +1 -0
  9. package/dist/components/buttons/CollapseToggleButton.d.ts +7 -0
  10. package/dist/components/buttons/CollapseToggleButton.d.ts.map +1 -0
  11. package/dist/components/buttons/CollapseToggleButton.js +7 -0
  12. package/dist/components/buttons/CollapseToggleButton.js.map +1 -0
  13. package/dist/components/cards/CTACard.d.ts +14 -0
  14. package/dist/components/cards/CTACard.d.ts.map +1 -0
  15. package/dist/components/cards/CTACard.js +11 -0
  16. package/dist/components/cards/CTACard.js.map +1 -0
  17. package/dist/components/cards/ListCard.d.ts +13 -0
  18. package/dist/components/cards/ListCard.d.ts.map +1 -0
  19. package/dist/components/cards/ListCard.js +9 -0
  20. package/dist/components/cards/ListCard.js.map +1 -0
  21. package/dist/components/cards/MetricsCard.d.ts +10 -0
  22. package/dist/components/cards/MetricsCard.d.ts.map +1 -0
  23. package/dist/components/cards/MetricsCard.js +27 -0
  24. package/dist/components/cards/MetricsCard.js.map +1 -0
  25. package/dist/components/cards/PatternCard.d.ts +15 -0
  26. package/dist/components/cards/PatternCard.d.ts.map +1 -0
  27. package/dist/components/cards/PatternCard.js +45 -0
  28. package/dist/components/cards/PatternCard.js.map +1 -0
  29. package/dist/components/cards/StatusCard.d.ts +17 -0
  30. package/dist/components/cards/StatusCard.d.ts.map +1 -0
  31. package/dist/components/cards/StatusCard.js +15 -0
  32. package/dist/components/cards/StatusCard.js.map +1 -0
  33. package/dist/components/cards/TipCard.d.ts +5 -0
  34. package/dist/components/cards/TipCard.d.ts.map +1 -0
  35. package/dist/components/cards/TipCard.js +10 -0
  36. package/dist/components/cards/TipCard.js.map +1 -0
  37. package/dist/components/chat/ChatHistorySection.d.ts +4 -0
  38. package/dist/components/chat/ChatHistorySection.d.ts.map +1 -0
  39. package/dist/components/chat/ChatHistorySection.js +121 -0
  40. package/dist/components/chat/ChatHistorySection.js.map +1 -0
  41. package/dist/components/chat/MessageBubble.d.ts +13 -0
  42. package/dist/components/chat/MessageBubble.d.ts.map +1 -0
  43. package/dist/components/chat/MessageBubble.js +19 -0
  44. package/dist/components/chat/MessageBubble.js.map +1 -0
  45. package/dist/components/display/CodeBlock.js +3 -3
  46. package/dist/components/display/CodeBlock.js.map +1 -1
  47. package/dist/components/display/ConfidenceBadge.d.ts +10 -0
  48. package/dist/components/display/ConfidenceBadge.d.ts.map +1 -0
  49. package/dist/components/display/ConfidenceBadge.js +17 -0
  50. package/dist/components/display/ConfidenceBadge.js.map +1 -0
  51. package/dist/components/display/IconBadge.d.ts +12 -0
  52. package/dist/components/display/IconBadge.d.ts.map +1 -0
  53. package/dist/components/display/IconBadge.js +26 -0
  54. package/dist/components/display/IconBadge.js.map +1 -0
  55. package/dist/components/display/SeverityBadge.d.ts +9 -0
  56. package/dist/components/display/SeverityBadge.d.ts.map +1 -0
  57. package/dist/components/display/SeverityBadge.js +13 -0
  58. package/dist/components/display/SeverityBadge.js.map +1 -0
  59. package/dist/components/display/SourceIcon.d.ts +7 -0
  60. package/dist/components/display/SourceIcon.d.ts.map +1 -0
  61. package/dist/components/display/SourceIcon.js +23 -0
  62. package/dist/components/display/SourceIcon.js.map +1 -0
  63. package/dist/components/display/StatusBadge.d.ts +14 -0
  64. package/dist/components/display/StatusBadge.d.ts.map +1 -0
  65. package/dist/components/display/StatusBadge.js +30 -0
  66. package/dist/components/display/StatusBadge.js.map +1 -0
  67. package/dist/components/display/StatusIndicator.d.ts +7 -0
  68. package/dist/components/display/StatusIndicator.d.ts.map +1 -0
  69. package/dist/components/display/StatusIndicator.js +26 -0
  70. package/dist/components/display/StatusIndicator.js.map +1 -0
  71. package/dist/components/display/Tag.d.ts +7 -0
  72. package/dist/components/display/Tag.d.ts.map +1 -0
  73. package/dist/components/display/Tag.js +12 -0
  74. package/dist/components/display/Tag.js.map +1 -0
  75. package/dist/components/display/Timeline.d.ts +15 -0
  76. package/dist/components/display/Timeline.d.ts.map +1 -0
  77. package/dist/components/display/Timeline.js +27 -0
  78. package/dist/components/display/Timeline.js.map +1 -0
  79. package/dist/components/feedback/BaseModal.d.ts +13 -0
  80. package/dist/components/feedback/BaseModal.d.ts.map +1 -0
  81. package/dist/components/feedback/BaseModal.js +41 -0
  82. package/dist/components/feedback/BaseModal.js.map +1 -0
  83. package/dist/components/feedback/GeneratingState.d.ts +12 -0
  84. package/dist/components/feedback/GeneratingState.d.ts.map +1 -0
  85. package/dist/components/feedback/GeneratingState.js +19 -0
  86. package/dist/components/feedback/GeneratingState.js.map +1 -0
  87. package/dist/components/feedback/SettingsModal.d.ts +4 -0
  88. package/dist/components/feedback/SettingsModal.d.ts.map +1 -0
  89. package/dist/components/feedback/SettingsModal.js +56 -0
  90. package/dist/components/feedback/SettingsModal.js.map +1 -0
  91. package/dist/components/index.d.ts +47 -0
  92. package/dist/components/index.d.ts.map +1 -1
  93. package/dist/components/index.js +48 -0
  94. package/dist/components/index.js.map +1 -1
  95. package/dist/components/inputs/DropdownMenu.d.ts +21 -0
  96. package/dist/components/inputs/DropdownMenu.d.ts.map +1 -0
  97. package/dist/components/inputs/DropdownMenu.js +31 -0
  98. package/dist/components/inputs/DropdownMenu.js.map +1 -0
  99. package/dist/components/inputs/FilterDropdown.d.ts +14 -0
  100. package/dist/components/inputs/FilterDropdown.d.ts.map +1 -0
  101. package/dist/components/inputs/FilterDropdown.js +112 -0
  102. package/dist/components/inputs/FilterDropdown.js.map +1 -0
  103. package/dist/components/inputs/MultiFilterBar.d.ts +22 -0
  104. package/dist/components/inputs/MultiFilterBar.d.ts.map +1 -0
  105. package/dist/components/inputs/MultiFilterBar.js +35 -0
  106. package/dist/components/inputs/MultiFilterBar.js.map +1 -0
  107. package/dist/components/inputs/SearchInput.d.ts +14 -0
  108. package/dist/components/inputs/SearchInput.d.ts.map +1 -0
  109. package/dist/components/inputs/SearchInput.js +38 -0
  110. package/dist/components/inputs/SearchInput.js.map +1 -0
  111. package/dist/components/inputs/SettingsDropup.d.ts +11 -0
  112. package/dist/components/inputs/SettingsDropup.d.ts.map +1 -0
  113. package/dist/components/inputs/SettingsDropup.js +96 -0
  114. package/dist/components/inputs/SettingsDropup.js.map +1 -0
  115. package/dist/components/inputs/SuggestionChip.d.ts +10 -0
  116. package/dist/components/inputs/SuggestionChip.d.ts.map +1 -0
  117. package/dist/components/inputs/SuggestionChip.js +12 -0
  118. package/dist/components/inputs/SuggestionChip.js.map +1 -0
  119. package/dist/components/inputs/ToggleFilterBar.d.ts +22 -0
  120. package/dist/components/inputs/ToggleFilterBar.d.ts.map +1 -0
  121. package/dist/components/inputs/ToggleFilterBar.js +34 -0
  122. package/dist/components/inputs/ToggleFilterBar.js.map +1 -0
  123. package/dist/components/inputs/ToggleSwitch.d.ts +8 -0
  124. package/dist/components/inputs/ToggleSwitch.d.ts.map +1 -0
  125. package/dist/components/inputs/ToggleSwitch.js +29 -0
  126. package/dist/components/inputs/ToggleSwitch.js.map +1 -0
  127. package/dist/components/layout/DetailPanel.d.ts +18 -0
  128. package/dist/components/layout/DetailPanel.d.ts.map +1 -0
  129. package/dist/components/layout/DetailPanel.js +10 -0
  130. package/dist/components/layout/DetailPanel.js.map +1 -0
  131. package/dist/components/layout/EvidenceList.d.ts +15 -0
  132. package/dist/components/layout/EvidenceList.d.ts.map +1 -0
  133. package/dist/components/layout/EvidenceList.js +23 -0
  134. package/dist/components/layout/EvidenceList.js.map +1 -0
  135. package/dist/components/layout/GlassPanel.d.ts +4 -0
  136. package/dist/components/layout/GlassPanel.d.ts.map +1 -0
  137. package/dist/components/layout/GlassPanel.js +11 -0
  138. package/dist/components/layout/GlassPanel.js.map +1 -0
  139. package/dist/components/layout/Header.d.ts +4 -0
  140. package/dist/components/layout/Header.d.ts.map +1 -0
  141. package/dist/components/layout/Header.js +127 -0
  142. package/dist/components/layout/Header.js.map +1 -0
  143. package/dist/components/layout/ListItem.d.ts +10 -0
  144. package/dist/components/layout/ListItem.d.ts.map +1 -0
  145. package/dist/components/layout/ListItem.js +14 -0
  146. package/dist/components/layout/ListItem.js.map +1 -0
  147. package/dist/components/layout/MetricsGrid.d.ts +8 -0
  148. package/dist/components/layout/MetricsGrid.d.ts.map +1 -0
  149. package/dist/components/layout/MetricsGrid.js +24 -0
  150. package/dist/components/layout/MetricsGrid.js.map +1 -0
  151. package/dist/components/layout/MobileSidebar.d.ts +4 -0
  152. package/dist/components/layout/MobileSidebar.d.ts.map +1 -0
  153. package/dist/components/layout/MobileSidebar.js +45 -0
  154. package/dist/components/layout/MobileSidebar.js.map +1 -0
  155. package/dist/components/layout/NavMenu.d.ts +10 -0
  156. package/dist/components/layout/NavMenu.d.ts.map +1 -0
  157. package/dist/components/layout/NavMenu.js +68 -0
  158. package/dist/components/layout/NavMenu.js.map +1 -0
  159. package/dist/components/layout/NavTooltip.d.ts +10 -0
  160. package/dist/components/layout/NavTooltip.d.ts.map +1 -0
  161. package/dist/components/layout/NavTooltip.js +36 -0
  162. package/dist/components/layout/NavTooltip.js.map +1 -0
  163. package/dist/components/layout/SectionHeader.d.ts +13 -0
  164. package/dist/components/layout/SectionHeader.d.ts.map +1 -0
  165. package/dist/components/layout/SectionHeader.js +22 -0
  166. package/dist/components/layout/SectionHeader.js.map +1 -0
  167. package/dist/components/layout/SidePanel.d.ts +12 -0
  168. package/dist/components/layout/SidePanel.d.ts.map +1 -0
  169. package/dist/components/layout/SidePanel.js +79 -0
  170. package/dist/components/layout/SidePanel.js.map +1 -0
  171. package/dist/components/layout/Sidebar.d.ts +4 -0
  172. package/dist/components/layout/Sidebar.d.ts.map +1 -0
  173. package/dist/components/layout/Sidebar.js +15 -0
  174. package/dist/components/layout/Sidebar.js.map +1 -0
  175. package/dist/components/layout/SidebarLogo.d.ts +9 -0
  176. package/dist/components/layout/SidebarLogo.d.ts.map +1 -0
  177. package/dist/components/layout/SidebarLogo.js +10 -0
  178. package/dist/components/layout/SidebarLogo.js.map +1 -0
  179. package/dist/components/providers/LenisProvider.d.ts +22 -0
  180. package/dist/components/providers/LenisProvider.d.ts.map +1 -0
  181. package/dist/components/providers/LenisProvider.js +45 -0
  182. package/dist/components/providers/LenisProvider.js.map +1 -0
  183. package/dist/components/tables/DataTable.d.ts +17 -0
  184. package/dist/components/tables/DataTable.d.ts.map +1 -0
  185. package/dist/components/tables/DataTable.js +24 -0
  186. package/dist/components/tables/DataTable.js.map +1 -0
  187. package/dist/index.d.ts +2 -0
  188. package/dist/index.d.ts.map +1 -1
  189. package/dist/index.js +4 -0
  190. package/dist/index.js.map +1 -1
  191. package/dist/lib/constants/accessibility.d.ts +24 -0
  192. package/dist/lib/constants/accessibility.d.ts.map +1 -0
  193. package/dist/lib/constants/accessibility.js +26 -0
  194. package/dist/lib/constants/accessibility.js.map +1 -0
  195. package/dist/lib/constants/animations.d.ts +73 -0
  196. package/dist/lib/constants/animations.d.ts.map +1 -0
  197. package/dist/lib/constants/animations.js +48 -0
  198. package/dist/lib/constants/animations.js.map +1 -0
  199. package/dist/lib/constants/colors.d.ts +55 -0
  200. package/dist/lib/constants/colors.d.ts.map +1 -0
  201. package/dist/lib/constants/colors.js +55 -0
  202. package/dist/lib/constants/colors.js.map +1 -0
  203. package/dist/lib/constants/gradients.d.ts +29 -0
  204. package/dist/lib/constants/gradients.d.ts.map +1 -0
  205. package/dist/lib/constants/gradients.js +29 -0
  206. package/dist/lib/constants/gradients.js.map +1 -0
  207. package/dist/lib/constants/icons.d.ts +4 -0
  208. package/dist/lib/constants/icons.d.ts.map +1 -0
  209. package/dist/lib/constants/icons.js +24 -0
  210. package/dist/lib/constants/icons.js.map +1 -0
  211. package/dist/lib/constants/navigation.d.ts +3 -0
  212. package/dist/lib/constants/navigation.d.ts.map +1 -0
  213. package/dist/lib/constants/navigation.js +40 -0
  214. package/dist/lib/constants/navigation.js.map +1 -0
  215. package/dist/lib/constants/sizing.d.ts +61 -0
  216. package/dist/lib/constants/sizing.d.ts.map +1 -0
  217. package/dist/lib/constants/sizing.js +49 -0
  218. package/dist/lib/constants/sizing.js.map +1 -0
  219. package/dist/lib/constants/styles.d.ts +44 -0
  220. package/dist/lib/constants/styles.d.ts.map +1 -0
  221. package/dist/lib/constants/styles.js +44 -0
  222. package/dist/lib/constants/styles.js.map +1 -0
  223. package/dist/lib/constants.d.ts +32 -0
  224. package/dist/lib/constants.d.ts.map +1 -0
  225. package/dist/lib/constants.js +105 -0
  226. package/dist/lib/constants.js.map +1 -0
  227. package/dist/lib/hooks/index.d.ts +4 -0
  228. package/dist/lib/hooks/index.d.ts.map +1 -0
  229. package/dist/lib/hooks/index.js +4 -0
  230. package/dist/lib/hooks/index.js.map +1 -0
  231. package/dist/lib/hooks/useEscapeKey.d.ts +6 -0
  232. package/dist/lib/hooks/useEscapeKey.d.ts.map +1 -0
  233. package/dist/lib/hooks/useEscapeKey.js +19 -0
  234. package/dist/lib/hooks/useEscapeKey.js.map +1 -0
  235. package/dist/lib/hooks/useLocalStorage.d.ts +6 -0
  236. package/dist/lib/hooks/useLocalStorage.d.ts.map +1 -0
  237. package/dist/lib/hooks/useLocalStorage.js +35 -0
  238. package/dist/lib/hooks/useLocalStorage.js.map +1 -0
  239. package/dist/lib/hooks/useModalAnimation.d.ts +9 -0
  240. package/dist/lib/hooks/useModalAnimation.d.ts.map +1 -0
  241. package/dist/lib/hooks/useModalAnimation.js +26 -0
  242. package/dist/lib/hooks/useModalAnimation.js.map +1 -0
  243. package/dist/lib/types.d.ts +94 -0
  244. package/dist/lib/types.d.ts.map +1 -0
  245. package/dist/lib/types.js +2 -0
  246. package/dist/lib/types.js.map +1 -0
  247. package/dist/lib/utils/accessibilityUtils.d.ts +9 -0
  248. package/dist/lib/utils/accessibilityUtils.d.ts.map +1 -0
  249. package/dist/lib/utils/accessibilityUtils.js +56 -0
  250. package/dist/lib/utils/accessibilityUtils.js.map +1 -0
  251. package/dist/lib/utils/pathUtils.d.ts +4 -0
  252. package/dist/lib/utils/pathUtils.d.ts.map +1 -0
  253. package/dist/lib/utils/pathUtils.js +16 -0
  254. package/dist/lib/utils/pathUtils.js.map +1 -0
  255. package/dist/styles.css +1 -1
  256. package/package.json +23 -14
@@ -0,0 +1,4 @@
1
+ import type { DashboardBackgroundProps } from '../../lib/types';
2
+ export type { DashboardBackgroundProps };
3
+ export declare function DashboardBackground({ variant, noiseTextureSrc, sidebarWidth, }: DashboardBackgroundProps): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=DashboardBackground.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardBackground.d.ts","sourceRoot":"","sources":["../../../src/components/backgrounds/DashboardBackground.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAEhE,YAAY,EAAE,wBAAwB,EAAE,CAAC;AAwDzC,wBAAgB,mBAAmB,CAAC,EAClC,OAAmB,EACnB,eAAe,EACf,YAAkB,GACnB,EAAE,wBAAwB,2CAW1B"}
@@ -0,0 +1,20 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ const gradientStyles = {
4
+ primary: 'radial-gradient(ellipse 80% 70% at 85% 50%, rgba(30, 16, 53, 0.8) 0%, rgba(10, 5, 21, 0.4) 50%, transparent 100%)',
5
+ vignette: (sidebarWidth) => `radial-gradient(ellipse 55% 90% at calc(50% + calc(${sidebarWidth}px / 2)) 50%, rgba(3, 0, 5, 0) 0%, rgba(3, 0, 5, 0.50) 100%)`,
6
+ purpleGlow: (sidebarWidth) => `radial-gradient(ellipse 60% 50% at calc(50% + calc(${sidebarWidth}px / 2)) 100%, rgba(133, 78, 210, 0.5) 0%, rgba(133, 78, 210, 0.3) 25%, rgba(133, 78, 210, 0.1) 50%, transparent 70%)`,
7
+ };
8
+ function MinimalBackground() {
9
+ return (_jsx("div", { className: "fixed inset-0 pointer-events-none z-0", children: _jsx("div", { className: "absolute inset-0 bg-[#030005]" }) }));
10
+ }
11
+ function DefaultBackground({ noiseTextureSrc, sidebarWidth, }) {
12
+ return (_jsxs("div", { className: "fixed inset-0 pointer-events-none z-0 overflow-hidden", style: { '--sidebar-width': `${sidebarWidth}px` }, children: [_jsx("div", { className: "absolute inset-0 bg-[#030005]" }), _jsx("div", { className: "absolute top-0 bottom-0 left-0 right-0 opacity-50", style: { background: gradientStyles.primary } }), noiseTextureSrc && (_jsx("img", { src: noiseTextureSrc, alt: "", role: "presentation", className: "absolute inset-0 w-full h-full opacity-[0.07] mix-blend-overlay object-cover" })), _jsx("div", { className: "absolute inset-0 opacity-40", style: { background: gradientStyles.vignette(sidebarWidth) } }), _jsx("div", { className: "absolute inset-x-0 bottom-0 h-[800px] pointer-events-none", style: { background: gradientStyles.purpleGlow(sidebarWidth) } })] }));
13
+ }
14
+ export function DashboardBackground({ variant = 'default', noiseTextureSrc, sidebarWidth = 280, }) {
15
+ if (variant === 'minimal') {
16
+ return _jsx(MinimalBackground, {});
17
+ }
18
+ return (_jsx(DefaultBackground, { noiseTextureSrc: noiseTextureSrc, sidebarWidth: sidebarWidth }));
19
+ }
20
+ //# sourceMappingURL=DashboardBackground.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardBackground.js","sourceRoot":"","sources":["../../../src/components/backgrounds/DashboardBackground.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAMb,MAAM,cAAc,GAAG;IACrB,OAAO,EACL,mHAAmH;IACrH,QAAQ,EAAE,CAAC,YAAoB,EAAE,EAAE,CACjC,sDAAsD,YAAY,8DAA8D;IAClI,UAAU,EAAE,CAAC,YAAoB,EAAE,EAAE,CACnC,sDAAsD,YAAY,uHAAuH;CAC5L,CAAC;AAEF,SAAS,iBAAiB;IACxB,OAAO,CACL,cAAK,SAAS,EAAC,uCAAuC,YACpD,cAAK,SAAS,EAAC,+BAA+B,GAAG,GAC7C,CACP,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,EACzB,eAAe,EACf,YAAY,GAIb;IACC,OAAO,CACL,eACE,SAAS,EAAC,uDAAuD,EACjE,KAAK,EAAE,EAAE,iBAAiB,EAAE,GAAG,YAAY,IAAI,EAAyB,aAExE,cAAK,SAAS,EAAC,+BAA+B,GAAG,EACjD,cACE,SAAS,EAAC,mDAAmD,EAC7D,KAAK,EAAE,EAAE,UAAU,EAAE,cAAc,CAAC,OAAO,EAAE,GAC7C,EACD,eAAe,IAAI,CAClB,cACE,GAAG,EAAE,eAAe,EACpB,GAAG,EAAC,EAAE,EACN,IAAI,EAAC,cAAc,EACnB,SAAS,EAAC,8EAA8E,GACxF,CACH,EACD,cACE,SAAS,EAAC,6BAA6B,EACvC,KAAK,EAAE,EAAE,UAAU,EAAE,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,GAC5D,EACF,cACE,SAAS,EAAC,2DAA2D,EACrE,KAAK,EAAE,EAAE,UAAU,EAAE,cAAc,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,GAC9D,IACE,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAClC,OAAO,GAAG,SAAS,EACnB,eAAe,EACf,YAAY,GAAG,GAAG,GACO;IACzB,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,KAAC,iBAAiB,KAAG,CAAC;IAC/B,CAAC;IAED,OAAO,CACL,KAAC,iBAAiB,IAChB,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,YAAY,GAC1B,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface AttachmentButtonProps {
2
+ onClick: () => void;
3
+ className?: string;
4
+ ariaLabel?: string;
5
+ }
6
+ export declare function AttachmentButton({ onClick, className, ariaLabel, }: AttachmentButtonProps): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=AttachmentButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AttachmentButton.d.ts","sourceRoot":"","sources":["../../../src/components/buttons/AttachmentButton.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,SAAc,EACd,SAAiC,GAClC,EAAE,qBAAqB,2CAkBvB"}
@@ -0,0 +1,8 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { Plus } from 'lucide-react';
4
+ import { cn } from '../../lib/utils';
5
+ export function AttachmentButton({ onClick, className = '', ariaLabel = 'Attach file or link', }) {
6
+ return (_jsx("button", { type: "button", onClick: onClick, className: cn('p-1 rounded-lg hover:bg-white/10 transition-colors', className), "aria-label": ariaLabel, children: _jsx(Plus, { size: 24, className: "text-gray-500 hover:text-gray-300 transition-colors", strokeWidth: 2 }) }));
7
+ }
8
+ //# sourceMappingURL=AttachmentButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AttachmentButton.js","sourceRoot":"","sources":["../../../src/components/buttons/AttachmentButton.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAQrC,MAAM,UAAU,gBAAgB,CAAC,EAC/B,OAAO,EACP,SAAS,GAAG,EAAE,EACd,SAAS,GAAG,qBAAqB,GACX;IACtB,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,EAAE,CACX,oDAAoD,EACpD,SAAS,CACV,gBACW,SAAS,YAErB,KAAC,IAAI,IACH,IAAI,EAAE,EAAE,EACR,SAAS,EAAC,qDAAqD,EAC/D,WAAW,EAAE,CAAC,GACd,GACK,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ interface CollapseToggleButtonProps {
2
+ isCollapsed: boolean;
3
+ onToggle: () => void;
4
+ }
5
+ export declare function CollapseToggleButton({ isCollapsed, onToggle }: CollapseToggleButtonProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=CollapseToggleButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollapseToggleButton.d.ts","sourceRoot":"","sources":["../../../src/components/buttons/CollapseToggleButton.tsx"],"names":[],"mappings":"AAMA,UAAU,yBAAyB;IACjC,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,oBAAoB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,yBAAyB,2CAgBxF"}
@@ -0,0 +1,7 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { PanelLeftClose, PanelLeftOpen } from 'lucide-react';
4
+ export function CollapseToggleButton({ isCollapsed, onToggle }) {
5
+ return (_jsx("button", { type: "button", onClick: onToggle, "aria-label": isCollapsed ? 'Expand sidebar' : 'Collapse sidebar', "aria-expanded": !isCollapsed, className: "w-6 h-6 flex items-center justify-center rounded-md border border-white/[0.08] transition-all duration-200", children: isCollapsed ? (_jsx(PanelLeftOpen, { size: 16, className: "text-gray-400", strokeWidth: 2 })) : (_jsx(PanelLeftClose, { size: 16, className: "text-gray-400", strokeWidth: 2 })) }));
6
+ }
7
+ //# sourceMappingURL=CollapseToggleButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollapseToggleButton.js","sourceRoot":"","sources":["../../../src/components/buttons/CollapseToggleButton.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAS7D,MAAM,UAAU,oBAAoB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAA6B;IACvF,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,QAAQ,gBACL,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,kBAAkB,mBAChD,CAAC,WAAW,EAC3B,SAAS,EAAC,4GAA4G,YAErH,WAAW,CAAC,CAAC,CAAC,CACb,KAAC,aAAa,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,eAAe,EAAC,WAAW,EAAE,CAAC,GAAI,CACtE,CAAC,CAAC,CAAC,CACF,KAAC,cAAc,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,eAAe,EAAC,WAAW,EAAE,CAAC,GAAI,CACvE,GACM,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface CTACardProps {
3
+ badge?: string;
4
+ title: string;
5
+ description: string;
6
+ suggestions?: string[];
7
+ onSuggestionClick?: (suggestion: string) => void;
8
+ actionButton: ReactNode;
9
+ className?: string;
10
+ badgeColor?: string;
11
+ gradient?: boolean;
12
+ }
13
+ export declare function CTACard({ badge, title, description, suggestions, onSuggestionClick, actionButton, className, badgeColor, gradient, }: CTACardProps): import("react/jsx-runtime").JSX.Element;
14
+ //# sourceMappingURL=CTACard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CTACard.d.ts","sourceRoot":"","sources":["../../../src/components/cards/CTACard.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,YAAY,EAAE,SAAS,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,OAAO,CAAC,EACtB,KAAK,EACL,KAAK,EACL,WAAW,EACX,WAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,SAAc,EACd,UAA8B,EAC9B,QAAe,GAChB,EAAE,YAAY,2CA8Cd"}
@@ -0,0 +1,11 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { GlassPanel } from '../layout/GlassPanel';
4
+ import { SuggestionChip } from '../inputs/SuggestionChip';
5
+ import { cn } from '../../lib/utils';
6
+ export function CTACard({ badge, title, description, suggestions = [], onSuggestionClick, actionButton, className = '', badgeColor = 'text-violet-400', gradient = true, }) {
7
+ return (_jsxs(GlassPanel, { variant: "heavy", className: cn('p-4 sm:p-6 relative overflow-hidden', className), children: [gradient && (_jsx("div", { className: "absolute inset-0 pointer-events-none", style: {
8
+ background: 'linear-gradient(to right, rgba(139, 92, 246, 0.03), transparent)',
9
+ } })), _jsxs("div", { className: "relative z-10 flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 sm:gap-6", children: [_jsxs("div", { className: "flex-1 min-w-0", children: [badge && (_jsx("div", { className: cn('text-[10px] sm:text-xs font-bold uppercase tracking-wider mb-1.5 sm:mb-2', badgeColor), children: badge })), _jsx("h3", { className: "text-base sm:text-lg font-semibold text-white mb-1.5 sm:mb-2", children: title }), _jsx("p", { className: "text-xs sm:text-sm text-gray-400 mb-3 sm:mb-4", children: description }), suggestions.length > 0 && (_jsxs("div", { className: "flex items-center gap-2 flex-wrap", children: [_jsx(SuggestionChip, { suggestions: suggestions, onSuggestionClick: onSuggestionClick }), _jsx("span", { className: "text-[10px] text-gray-600 hidden sm:inline ml-2", children: "View more options." })] }))] }), _jsx("div", { className: "flex-shrink-0 w-full sm:w-auto", children: actionButton })] })] }));
10
+ }
11
+ //# sourceMappingURL=CTACard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CTACard.js","sourceRoot":"","sources":["../../../src/components/cards/CTACard.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAcrC,MAAM,UAAU,OAAO,CAAC,EACtB,KAAK,EACL,KAAK,EACL,WAAW,EACX,WAAW,GAAG,EAAE,EAChB,iBAAiB,EACjB,YAAY,EACZ,SAAS,GAAG,EAAE,EACd,UAAU,GAAG,iBAAiB,EAC9B,QAAQ,GAAG,IAAI,GACF;IACb,OAAO,CACL,MAAC,UAAU,IAAC,OAAO,EAAC,OAAO,EAAC,SAAS,EAAE,EAAE,CAAC,qCAAqC,EAAE,SAAS,CAAC,aACxF,QAAQ,IAAI,CACX,cACE,SAAS,EAAC,sCAAsC,EAChD,KAAK,EAAE;oBACL,UAAU,EACR,kEAAkE;iBACrE,GACD,CACH,EAED,eAAK,SAAS,EAAC,2FAA2F,aACxG,eAAK,SAAS,EAAC,gBAAgB,aAC5B,KAAK,IAAI,CACR,cAAK,SAAS,EAAE,EAAE,CAAC,0EAA0E,EAAE,UAAU,CAAC,YACvG,KAAK,GACF,CACP,EACD,aAAI,SAAS,EAAC,8DAA8D,YACzE,KAAK,GACH,EACL,YAAG,SAAS,EAAC,+CAA+C,YACzD,WAAW,GACV,EAEH,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CACzB,eAAK,SAAS,EAAC,mCAAmC,aAChD,KAAC,cAAc,IACb,WAAW,EAAE,WAAW,EACxB,iBAAiB,EAAE,iBAAiB,GACpC,EACF,eAAM,SAAS,EAAC,iDAAiD,mCAE1D,IACH,CACP,IACG,EAEN,cAAK,SAAS,EAAC,gCAAgC,YAC5C,YAAY,GACT,IACF,IACK,CACd,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { SectionHeaderProps } from '../layout/SectionHeader';
3
+ export interface ListCardProps {
4
+ title: string;
5
+ viewAllHref?: string;
6
+ viewAllText?: string;
7
+ LinkComponent?: SectionHeaderProps['LinkComponent'];
8
+ children: ReactNode;
9
+ className?: string;
10
+ contentClassName?: string;
11
+ }
12
+ export declare function ListCard({ title, viewAllHref, viewAllText, LinkComponent, children, className, contentClassName, }: ListCardProps): import("react/jsx-runtime").JSX.Element;
13
+ //# sourceMappingURL=ListCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListCard.d.ts","sourceRoot":"","sources":["../../../src/components/cards/ListCard.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGlE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACpD,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,WAAW,EACX,WAAW,EACX,aAAa,EACb,QAAQ,EACR,SAAc,EACd,gBAAqB,GACtB,EAAE,aAAa,2CAsBf"}
@@ -0,0 +1,9 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { GlassPanel } from '../layout/GlassPanel';
4
+ import { SectionHeader } from '../layout/SectionHeader';
5
+ import { cn } from '../../lib/utils';
6
+ export function ListCard({ title, viewAllHref, viewAllText, LinkComponent, children, className = '', contentClassName = '', }) {
7
+ return (_jsxs(GlassPanel, { variant: "heavy", className: cn('overflow-hidden', className), children: [LinkComponent && viewAllHref ? (_jsx(SectionHeader, { title: title, viewAllHref: viewAllHref, viewAllText: viewAllText, LinkComponent: LinkComponent })) : (_jsx("div", { className: "px-3 sm:px-4 py-3 sm:py-4", children: _jsx("h3", { className: "text-sm font-semibold text-white", children: title }) })), _jsx("div", { className: cn('p-3 sm:p-4 space-y-1', contentClassName), children: children })] }));
8
+ }
9
+ //# sourceMappingURL=ListCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListCard.js","sourceRoot":"","sources":["../../../src/components/cards/ListCard.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAYrC,MAAM,UAAU,QAAQ,CAAC,EACvB,KAAK,EACL,WAAW,EACX,WAAW,EACX,aAAa,EACb,QAAQ,EACR,SAAS,GAAG,EAAE,EACd,gBAAgB,GAAG,EAAE,GACP;IACd,OAAO,CACL,MAAC,UAAU,IAAC,OAAO,EAAC,OAAO,EAAC,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,SAAS,CAAC,aACpE,aAAa,IAAI,WAAW,CAAC,CAAC,CAAC,CAC9B,KAAC,aAAa,IACZ,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,GAC5B,CACH,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAC,2BAA2B,YACxC,aAAI,SAAS,EAAC,kCAAkC,YAC7C,KAAK,GACH,GACD,CACP,EACD,cAAK,SAAS,EAAE,EAAE,CAAC,sBAAsB,EAAE,gBAAgB,CAAC,YACzD,QAAQ,GACL,IACK,CACd,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface MetricsCardProps {
2
+ title: string;
3
+ value: string;
4
+ change: string;
5
+ changeType: 'positive' | 'negative' | 'neutral' | 'info';
6
+ chartData?: readonly number[];
7
+ chartColor?: 'violet' | 'rose' | 'gray';
8
+ }
9
+ export declare function MetricsCard({ title, value, change, changeType, chartData, chartColor, }: MetricsCardProps): import("react/jsx-runtime").JSX.Element;
10
+ //# sourceMappingURL=MetricsCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetricsCard.d.ts","sourceRoot":"","sources":["../../../src/components/cards/MetricsCard.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;IACzD,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;CACzC;AAmCD,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,KAAK,EACL,MAAM,EACN,UAAU,EACV,SAA8B,EAC9B,UAAqB,GACtB,EAAE,gBAAgB,2CA4BlB"}
@@ -0,0 +1,27 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { StatusBadge } from '../display/StatusBadge';
4
+ import { GlassPanel } from '../layout/GlassPanel';
5
+ import { CHART_COLORS } from '../../lib/constants/gradients';
6
+ const DEFAULT_CHART_DATA = [25, 50, 35, 70, 100];
7
+ function MiniChart({ chartData, maxValue, barColor }) {
8
+ return (_jsx("div", { className: "flex items-end gap-[2px]", children: chartData.map((value, index) => {
9
+ const isLast = index === chartData.length - 1;
10
+ const height = Math.max((value / maxValue) * 20, 3);
11
+ return (_jsx("div", { style: {
12
+ width: '12px',
13
+ height: `${height}px`,
14
+ borderRadius: '2px 2px 0 0',
15
+ background: isLast ? barColor.bg : '#374151',
16
+ boxShadow: isLast ? barColor.shadow : 'none',
17
+ opacity: isLast ? 1 : 0.5,
18
+ } }, `bar-${index}-${value}`));
19
+ }) }));
20
+ }
21
+ export function MetricsCard({ title, value, change, changeType, chartData = DEFAULT_CHART_DATA, chartColor = 'violet', }) {
22
+ const safeChartData = chartData.length > 0 ? chartData : DEFAULT_CHART_DATA;
23
+ const maxValue = Math.max(...safeChartData);
24
+ const barColor = CHART_COLORS[chartColor];
25
+ return (_jsx(GlassPanel, { variant: "light", className: "relative overflow-hidden", children: _jsxs("div", { className: "p-4 sm:p-5 min-h-[100px] sm:min-h-[109px] flex flex-col", children: [_jsxs("div", { className: "flex items-start justify-between gap-2 mb-auto", children: [_jsx("span", { className: "text-[10px] sm:text-xs font-semibold uppercase tracking-wider text-gray-400", children: title }), _jsx(StatusBadge, { variant: changeType, children: change })] }), _jsxs("div", { className: "flex items-end justify-between mt-4", children: [_jsx("span", { className: "text-xl sm:text-2xl font-bold text-white", children: value }), _jsx(MiniChart, { chartData: safeChartData, maxValue: maxValue, barColor: barColor })] })] }) }));
26
+ }
27
+ //# sourceMappingURL=MetricsCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetricsCard.js","sourceRoot":"","sources":["../../../src/components/cards/MetricsCard.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAW7D,MAAM,kBAAkB,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAU,CAAC;AAQ1D,SAAS,SAAS,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAkB;IAClE,OAAO,CACL,cAAK,SAAS,EAAC,0BAA0B,YACtC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC9B,MAAM,MAAM,GAAG,KAAK,KAAK,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YAEpD,OAAO,CACL,cAEE,KAAK,EAAE;oBACL,KAAK,EAAE,MAAM;oBACb,MAAM,EAAE,GAAG,MAAM,IAAI;oBACrB,YAAY,EAAE,aAAa;oBAC3B,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;oBAC5C,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;oBAC5C,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;iBAC1B,IARI,OAAO,KAAK,IAAI,KAAK,EAAE,CAS5B,CACH,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAC1B,KAAK,EACL,KAAK,EACL,MAAM,EACN,UAAU,EACV,SAAS,GAAG,kBAAkB,EAC9B,UAAU,GAAG,QAAQ,GACJ;IACjB,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC;IAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IAE1C,OAAO,CACL,KAAC,UAAU,IAAC,OAAO,EAAC,OAAO,EAAC,SAAS,EAAC,0BAA0B,YAC9D,eAAK,SAAS,EAAC,yDAAyD,aACtE,eAAK,SAAS,EAAC,gDAAgD,aAC7D,eAAM,SAAS,EAAC,6EAA6E,YAC1F,KAAK,GACD,EACP,KAAC,WAAW,IAAC,OAAO,EAAE,UAAU,YAAG,MAAM,GAAe,IACpD,EAEN,eAAK,SAAS,EAAC,qCAAqC,aAClD,eAAM,SAAS,EAAC,0CAA0C,YACvD,KAAK,GACD,EACP,KAAC,SAAS,IACR,SAAS,EAAE,aAAa,EACxB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,GAClB,IACE,IACF,GACK,CACd,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { ConfidenceLevel, SeverityLevel } from '../../lib/types';
2
+ export interface PatternCardProps {
3
+ id?: string;
4
+ title: string;
5
+ severity: SeverityLevel;
6
+ affectedStores: string;
7
+ lastSeen: string;
8
+ confidence: ConfidenceLevel;
9
+ onViewDetails?: () => void;
10
+ onViewEvidence?: () => void;
11
+ onCreateAlert?: () => void;
12
+ className?: string;
13
+ }
14
+ export declare function PatternCard({ title, severity, affectedStores, lastSeen, confidence, onViewDetails, onViewEvidence, onCreateAlert, className, }: PatternCardProps): import("react/jsx-runtime").JSX.Element;
15
+ //# sourceMappingURL=PatternCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PatternCard.d.ts","sourceRoot":"","sources":["../../../src/components/cards/PatternCard.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAKtE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,aAAa,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,eAAe,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA8DD,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,UAAU,EACV,aAAa,EACb,cAAc,EACd,aAAa,EACb,SAAS,GACV,EAAE,gBAAgB,2CA4ElB"}
@@ -0,0 +1,45 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Bell, Clock, MapPin } from 'lucide-react';
4
+ import { cn } from '../../lib/utils';
5
+ import { CONFIDENCE_CONFIG, SEVERITY_CONFIG } from '../../lib/constants';
6
+ function DetailItem({ icon: Icon, label, value }) {
7
+ return (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Icon, { size: 16, color: "#6B7280" }), _jsxs("span", { className: "text-sm leading-5", style: { color: '#9CA3AF' }, children: [label, ": ", value] })] }));
8
+ }
9
+ function ActionButton({ onClick, isSecondary = false, showIcon = false, children, }) {
10
+ return (_jsx("button", { type: "button", onClick: onClick, className: cn('flex items-center justify-center rounded-lg text-xs font-medium transition-colors', isSecondary ? 'h-[30px] px-3.5 hover:bg-white/5' : 'h-[30px] px-3.5', !isSecondary && showIcon && 'gap-1.5 h-7 px-3'), style: !isSecondary
11
+ ? {
12
+ background: '#7C3AED',
13
+ boxShadow: '0px 0px 10px rgba(124, 58, 237, 0.30)',
14
+ outline: '1px #8B5CF6 solid',
15
+ outlineOffset: '-1px',
16
+ color: 'white',
17
+ }
18
+ : {
19
+ color: '#D1D5DB',
20
+ outline: '1px rgba(255, 255, 255, 0.10) solid',
21
+ outlineOffset: '-1px',
22
+ }, children: children }));
23
+ }
24
+ export function PatternCard({ title, severity, affectedStores, lastSeen, confidence, onViewDetails, onViewEvidence, onCreateAlert, className, }) {
25
+ const severityStyle = SEVERITY_CONFIG[severity];
26
+ const confidenceStyle = CONFIDENCE_CONFIG[confidence];
27
+ return (_jsx("div", { className: cn('relative overflow-hidden rounded-xl', className), style: {
28
+ background: 'rgba(10, 5, 20, 0.40)',
29
+ boxShadow: '0px 4px 6px -4px rgba(0, 0, 0, 0.10)',
30
+ outline: '1px rgba(255, 255, 255, 0.08) solid',
31
+ outlineOffset: '-1px',
32
+ backdropFilter: 'blur(8px)',
33
+ }, children: _jsxs("div", { className: "p-6", children: [_jsxs("div", { className: "flex items-start justify-between gap-4 mb-4", children: [_jsx("h3", { className: "text-base font-semibold leading-6 flex-1 text-white", children: title }), _jsx("span", { className: "shrink-0 px-2.5 py-1 rounded-lg text-[10px] font-bold uppercase tracking-wide", style: {
34
+ color: severityStyle.color,
35
+ background: severityStyle.bg,
36
+ outline: `1px ${severityStyle.border} solid`,
37
+ outlineOffset: '-1px',
38
+ }, children: severityStyle.label })] }), _jsxs("div", { className: "space-y-2 mb-4", children: [_jsx(DetailItem, { icon: MapPin, label: "Affected stores", value: affectedStores }), _jsx(DetailItem, { icon: Clock, label: "Last seen", value: lastSeen })] }), _jsxs("div", { className: "flex items-center gap-2 mb-6", children: [_jsx("span", { className: "text-xs font-medium", style: { color: '#6B7280' }, children: "Confidence:" }), _jsx("span", { className: "px-2.5 py-1 rounded-full text-[10px] font-medium", style: {
39
+ color: confidenceStyle.color,
40
+ background: confidenceStyle.bg,
41
+ outline: `1px ${confidenceStyle.border} solid`,
42
+ outlineOffset: '-1px',
43
+ }, children: confidenceStyle.label })] }), _jsxs("div", { className: "pt-4 flex items-center gap-3", style: { borderTop: '1px solid rgba(255, 255, 255, 0.05)' }, children: [_jsx(ActionButton, { onClick: onViewDetails, children: "View details" }), _jsx(ActionButton, { onClick: onViewEvidence, isSecondary: true, children: "View evidence" }), _jsx("div", { className: "flex-1" }), _jsxs(ActionButton, { onClick: onCreateAlert, isSecondary: true, showIcon: true, children: [_jsx(Bell, { size: 14, color: "#9CA3AF" }), "Create alert"] })] })] }) }));
44
+ }
45
+ //# sourceMappingURL=PatternCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PatternCard.js","sourceRoot":"","sources":["../../../src/components/cards/PatternCard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { ComponentType } from 'react';
2
+ export type StatusType = 'active' | 'inactive' | 'warning' | 'error';
3
+ export interface StatusCardProps {
4
+ icon: ComponentType<{
5
+ size?: number;
6
+ className?: string;
7
+ strokeWidth?: number;
8
+ }>;
9
+ name: string;
10
+ status?: StatusType;
11
+ statusText?: string;
12
+ lastUpdate?: string;
13
+ className?: string;
14
+ iconClassName?: string;
15
+ }
16
+ export declare function StatusCard({ icon: Icon, name, status, statusText, lastUpdate, className, iconClassName, }: StatusCardProps): import("react/jsx-runtime").JSX.Element;
17
+ //# sourceMappingURL=StatusCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusCard.d.ts","sourceRoot":"","sources":["../../../src/components/cards/StatusCard.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAI3C,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;AAErE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,aAAa,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjF,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AASD,wBAAgB,UAAU,CAAC,EACzB,IAAI,EAAE,IAAI,EACV,IAAI,EACJ,MAAiB,EACjB,UAAe,EACf,UAAe,EACf,SAAc,EACd,aAAkB,GACnB,EAAE,eAAe,2CA0CjB"}
@@ -0,0 +1,15 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { cn } from '../../lib/utils';
4
+ import { GlassPanel } from '../layout/GlassPanel';
5
+ const statusColors = {
6
+ active: { dot: 'bg-violet-500', text: 'text-gray-200' },
7
+ inactive: { dot: 'bg-gray-500', text: 'text-gray-500' },
8
+ warning: { dot: 'bg-yellow-500', text: 'text-yellow-500' },
9
+ error: { dot: 'bg-rose-500', text: 'text-rose-500' },
10
+ };
11
+ export function StatusCard({ icon: Icon, name, status = 'active', statusText = '', lastUpdate = '', className = '', iconClassName = '', }) {
12
+ const statusColor = statusColors[status];
13
+ return (_jsxs(GlassPanel, { variant: "heavy", className: cn('p-3 sm:p-4 flex items-center gap-3 sm:gap-4', className), children: [_jsx("div", { className: "w-7 h-7 sm:w-8 sm:h-8 rounded-lg flex items-center justify-center flex-shrink-0 bg-gray-800/50 border border-white/5", children: _jsx(Icon, { size: 14, className: cn('text-gray-400 sm:w-4 sm:h-4 transition-colors', iconClassName), strokeWidth: 2 }) }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsxs("div", { className: "flex items-center gap-2 mb-0.5 sm:mb-1", children: [_jsx("h4", { className: "text-xs sm:text-sm font-medium text-gray-200 truncate", children: name }), _jsx("div", { className: cn('w-1.5 h-1.5 rounded-full flex-shrink-0', statusColor.dot) })] }), statusText && (_jsx("p", { className: "text-[9px] sm:text-[10px] uppercase tracking-wider text-gray-500 truncate", children: statusText }))] }), lastUpdate && (_jsx("span", { className: "font-mono text-[10px] sm:text-xs text-gray-600 flex-shrink-0", children: lastUpdate }))] }));
14
+ }
15
+ //# sourceMappingURL=StatusCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusCard.js","sourceRoot":"","sources":["../../../src/components/cards/StatusCard.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAclD,MAAM,YAAY,GAAsD;IACtE,MAAM,EAAE,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,EAAE;IACvD,QAAQ,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE;IACvD,OAAO,EAAE,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,iBAAiB,EAAE;IAC1D,KAAK,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE;CACrD,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,EACzB,IAAI,EAAE,IAAI,EACV,IAAI,EACJ,MAAM,GAAG,QAAQ,EACjB,UAAU,GAAG,EAAE,EACf,UAAU,GAAG,EAAE,EACf,SAAS,GAAG,EAAE,EACd,aAAa,GAAG,EAAE,GACF;IAChB,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAEzC,OAAO,CACL,MAAC,UAAU,IACT,OAAO,EAAC,OAAO,EACf,SAAS,EAAE,EAAE,CAAC,6CAA6C,EAAE,SAAS,CAAC,aAEvE,cAAK,SAAS,EAAC,sHAAsH,YACnI,KAAC,IAAI,IACH,IAAI,EAAE,EAAE,EACR,SAAS,EAAE,EAAE,CAAC,+CAA+C,EAAE,aAAa,CAAC,EAC7E,WAAW,EAAE,CAAC,GACd,GACE,EAEN,eAAK,SAAS,EAAC,gBAAgB,aAC7B,eAAK,SAAS,EAAC,wCAAwC,aACrD,aAAI,SAAS,EAAC,uDAAuD,YAClE,IAAI,GACF,EACL,cACE,SAAS,EAAE,EAAE,CACX,wCAAwC,EACxC,WAAW,CAAC,GAAG,CAChB,GACD,IACE,EACL,UAAU,IAAI,CACb,YAAG,SAAS,EAAC,2EAA2E,YACrF,UAAU,GACT,CACL,IACG,EAEL,UAAU,IAAI,CACb,eAAM,SAAS,EAAC,8DAA8D,YAC3E,UAAU,GACN,CACR,IACU,CACd,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ export interface TipCardProps {
2
+ children: React.ReactNode;
3
+ }
4
+ export declare function TipCard({ children }: TipCardProps): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=TipCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TipCard.d.ts","sourceRoot":"","sources":["../../../src/components/cards/TipCard.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,YAAY,2CAajD"}
@@ -0,0 +1,10 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Lightbulb } from 'lucide-react';
4
+ export function TipCard({ children }) {
5
+ return (_jsxs("div", { className: "inline-flex items-start gap-3 px-4 py-3 rounded-xl", style: {
6
+ background: 'rgba(255, 255, 255, 0.02)',
7
+ border: '1px solid rgba(255, 255, 255, 0.06)',
8
+ }, children: [_jsx(Lightbulb, { size: 16, className: "text-gray-500 flex-shrink-0 mt-0.5" }), _jsx("p", { className: "text-xs text-gray-400 leading-relaxed", children: children })] }));
9
+ }
10
+ //# sourceMappingURL=TipCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TipCard.js","sourceRoot":"","sources":["../../../src/components/cards/TipCard.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAMzC,MAAM,UAAU,OAAO,CAAC,EAAE,QAAQ,EAAgB;IAChD,OAAO,CACL,eACE,SAAS,EAAC,oDAAoD,EAC9D,KAAK,EAAE;YACL,UAAU,EAAE,2BAA2B;YACvC,MAAM,EAAE,qCAAqC;SAC9C,aAED,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,oCAAoC,GAAG,EACtE,YAAG,SAAS,EAAC,uCAAuC,YAAE,QAAQ,GAAK,IAC/D,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ChatHistoryItem, ChatHistorySectionProps } from '../../lib/types';
2
+ export type { ChatHistoryItem, ChatHistorySectionProps };
3
+ export declare function ChatHistorySection({ items, activeItemId, isExpanded, isVisible, onItemClick, onToggleExpanded, onRename, onDelete, title, emptyMessage, }: ChatHistorySectionProps): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=ChatHistorySection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatHistorySection.d.ts","sourceRoot":"","sources":["../../../src/components/chat/ChatHistorySection.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAKhF,YAAY,EAAE,eAAe,EAAE,uBAAuB,EAAE,CAAC;AAsCzD,wBAAgB,kBAAkB,CAAC,EACjC,KAAU,EACV,YAAY,EACZ,UAAiB,EACjB,SAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,KAAsB,EACtB,YAAoD,GACrD,EAAE,uBAAuB,2CAkNzB"}
@@ -0,0 +1,121 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { ChevronDown, MoreHorizontal, Pencil, Trash2 } from 'lucide-react';
4
+ import { useEffect, useRef, useState } from 'react';
5
+ import { cn } from '../../lib/utils';
6
+ const useNewItemAnimation = (items) => {
7
+ const [newItemId, setNewItemId] = useState(null);
8
+ const [canAnimate, setCanAnimate] = useState(false);
9
+ const seenItemsRef = useRef(new Set());
10
+ useEffect(() => {
11
+ items.forEach(item => seenItemsRef.current.add(item.id));
12
+ const timer = setTimeout(() => setCanAnimate(true), 600);
13
+ return () => clearTimeout(timer);
14
+ }, []);
15
+ useEffect(() => {
16
+ if (!canAnimate) {
17
+ items.forEach(item => seenItemsRef.current.add(item.id));
18
+ return;
19
+ }
20
+ const seenItems = seenItemsRef.current;
21
+ const firstItem = items[0];
22
+ if (firstItem && !seenItems.has(firstItem.id)) {
23
+ seenItems.add(firstItem.id);
24
+ const timer = setTimeout(() => setNewItemId(firstItem.id), 0);
25
+ const resetTimer = setTimeout(() => setNewItemId(null), 350);
26
+ return () => {
27
+ clearTimeout(timer);
28
+ clearTimeout(resetTimer);
29
+ };
30
+ }
31
+ items.forEach(item => seenItems.add(item.id));
32
+ }, [items, canAnimate]);
33
+ return newItemId;
34
+ };
35
+ export function ChatHistorySection({ items = [], activeItemId, isExpanded = true, isVisible = true, onItemClick, onToggleExpanded, onRename, onDelete, title = 'Chat History', emptyMessage = 'No chats yet. Start a conversation!', }) {
36
+ const newItemId = useNewItemAnimation(items);
37
+ const [openMenuId, setOpenMenuId] = useState(null);
38
+ const [editingId, setEditingId] = useState(null);
39
+ const [editValue, setEditValue] = useState('');
40
+ const menuRef = useRef(null);
41
+ const inputRef = useRef(null);
42
+ useEffect(() => {
43
+ if (!openMenuId)
44
+ return;
45
+ const handleClickOutside = (e) => {
46
+ if (menuRef.current && !menuRef.current.contains(e.target)) {
47
+ setOpenMenuId(null);
48
+ }
49
+ };
50
+ document.addEventListener('mousedown', handleClickOutside);
51
+ return () => document.removeEventListener('mousedown', handleClickOutside);
52
+ }, [openMenuId]);
53
+ useEffect(() => {
54
+ if (editingId && inputRef.current) {
55
+ inputRef.current.focus();
56
+ inputRef.current.select();
57
+ }
58
+ }, [editingId]);
59
+ const closeMenu = () => setOpenMenuId(null);
60
+ const toggleMenu = (itemId) => {
61
+ setOpenMenuId(openMenuId === itemId ? null : itemId);
62
+ };
63
+ const handleMenuClick = (e, itemId) => {
64
+ e.stopPropagation();
65
+ toggleMenu(itemId);
66
+ };
67
+ const handleMenuKeyDown = (e, itemId) => {
68
+ if (e.key === 'Enter' || e.key === ' ') {
69
+ e.preventDefault();
70
+ e.stopPropagation();
71
+ toggleMenu(itemId);
72
+ }
73
+ };
74
+ const startRename = (item) => {
75
+ setEditingId(item.id);
76
+ setEditValue(item.title);
77
+ closeMenu();
78
+ };
79
+ const submitRename = () => {
80
+ if (editingId && editValue.trim()) {
81
+ onRename?.(editingId, editValue.trim());
82
+ }
83
+ setEditingId(null);
84
+ setEditValue('');
85
+ };
86
+ const handleRenameKeyDown = (e) => {
87
+ if (e.key === 'Enter') {
88
+ submitRename();
89
+ }
90
+ else if (e.key === 'Escape') {
91
+ setEditingId(null);
92
+ setEditValue('');
93
+ }
94
+ };
95
+ const deleteItem = (id) => {
96
+ closeMenu();
97
+ onDelete?.(id);
98
+ };
99
+ return (_jsxs("div", { className: cn('px-4 mt-4 transition-all duration-300 ease-in-out overflow-hidden', isVisible
100
+ ? 'opacity-100 animate-fadeInDown max-h-[500px]'
101
+ : 'opacity-0 max-h-0 pointer-events-none'), children: [_jsxs("button", { type: "button", onClick: onToggleExpanded, className: "flex items-center justify-between w-full group", "aria-label": `${title} section`, "aria-expanded": isExpanded, children: [_jsx("span", { className: "text-[13px] font-normal text-gray-400 leading-[21px]", children: title }), _jsx(ChevronDown, { size: 16, className: cn('text-gray-600 transition-transform duration-200', !isExpanded && '-rotate-90') })] }), _jsx("div", { className: "overflow-hidden transition-all duration-300 ease-in-out", style: {
102
+ maxHeight: isExpanded
103
+ ? `${Math.max(items.length * 42 + 16, 60)}px`
104
+ : '0px',
105
+ opacity: isExpanded ? 1 : 0,
106
+ }, children: _jsx("div", { className: "mt-2 flex flex-col gap-1", children: items.length === 0 ? (_jsx("p", { className: "text-xs italic py-2 text-gray-500", children: emptyMessage })) : (items.map(item => {
107
+ const isActive = item.id === activeItemId;
108
+ const isNew = item.id === newItemId;
109
+ const isEditing = editingId === item.id;
110
+ const isMenuOpen = openMenuId === item.id;
111
+ return (_jsxs("div", { className: "relative", ref: isMenuOpen ? menuRef : undefined, children: [_jsxs("div", { role: "button", tabIndex: isEditing ? -1 : 0, onClick: () => !isEditing && onItemClick?.(item.id), onKeyDown: e => {
112
+ if (!isEditing && (e.key === 'Enter' || e.key === ' ')) {
113
+ e.preventDefault();
114
+ onItemClick?.(item.id);
115
+ }
116
+ }, className: cn('group relative flex items-center justify-between w-full rounded-lg transition-all duration-200', 'h-[37px] hover:bg-white/5 cursor-pointer', isActive &&
117
+ 'bg-white/[0.08] shadow-[inset_0px_1px_0px_1px_rgba(255,255,255,0.05)] outline outline-1 outline-white/[0.05] -outline-offset-1', isNew &&
118
+ 'animate-[chatHistorySlideIn_0.3s_ease-out_forwards]'), children: [isEditing ? (_jsx("input", { ref: inputRef, type: "text", value: editValue, onChange: e => setEditValue(e.target.value), onBlur: submitRename, onKeyDown: handleRenameKeyDown, className: "text-[13px] font-bold bg-transparent border-none outline-none pl-3 pr-8 w-full text-gray-200 leading-[21px]", onClick: e => e.stopPropagation() })) : (_jsx("span", { className: "text-[13px] font-bold truncate pl-3 pr-8 text-left text-gray-200 leading-[21px] max-w-[198px]", children: item.title })), isActive && !isEditing && (_jsx("button", { type: "button", className: "absolute right-2 flex items-center justify-center w-[19px] h-[19px] cursor-pointer hover:bg-white/10 rounded", onClick: e => handleMenuClick(e, item.id), onKeyDown: e => handleMenuKeyDown(e, item.id), "aria-label": "Chat options", "aria-haspopup": "menu", "aria-expanded": isMenuOpen, children: _jsx(MoreHorizontal, { size: 14, className: "text-white" }) }))] }), isMenuOpen && (_jsxs("div", { role: "menu", className: "absolute right-0 top-full mt-1 z-50 min-w-[140px] rounded-lg overflow-hidden bg-[rgba(30,30,30,0.95)] border border-white/10 shadow-[0_4px_12px_rgba(0,0,0,0.5)]", children: [_jsxs("button", { type: "button", role: "menuitem", onClick: () => startRename(item), className: "flex items-center gap-2 w-full px-3 py-2 text-left hover:bg-white/10 transition-colors", children: [_jsx(Pencil, { size: 14, className: "text-gray-400" }), _jsx("span", { className: "text-[13px] text-gray-200", children: "Rename" })] }), _jsxs("button", { type: "button", role: "menuitem", onClick: () => deleteItem(item.id), className: "flex items-center gap-2 w-full px-3 py-2 text-left hover:bg-red-500/20 transition-colors", children: [_jsx(Trash2, { size: 14, className: "text-red-400" }), _jsx("span", { className: "text-[13px] text-red-400", children: "Delete" })] })] }))] }, item.id));
119
+ })) }) })] }));
120
+ }
121
+ //# sourceMappingURL=ChatHistorySection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatHistorySection.js","sourceRoot":"","sources":["../../../src/components/chat/ChatHistorySection.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export interface MessageBubbleProps {
2
+ content: string;
3
+ role: 'user' | 'assistant';
4
+ isCopied?: boolean;
5
+ onCopy?: (content: string) => void;
6
+ headerComponent?: React.ReactNode;
7
+ avatarSrc?: string;
8
+ avatarAlt?: string;
9
+ assistantLabel?: string;
10
+ className?: string;
11
+ }
12
+ export declare function MessageBubble({ content, role, isCopied, onCopy, headerComponent, avatarSrc, avatarAlt, assistantLabel, className, }: MessageBubbleProps): import("react/jsx-runtime").JSX.Element;
13
+ //# sourceMappingURL=MessageBubble.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageBubble.d.ts","sourceRoot":"","sources":["../../../src/components/chat/MessageBubble.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA4DD,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,IAAI,EACJ,QAAgB,EAChB,MAAM,EACN,eAAe,EACf,SAAS,EACT,SAAS,EACT,cAAc,EACd,SAAS,GACV,EAAE,kBAAkB,2CAgCpB"}
@@ -0,0 +1,19 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Check, Copy } from 'lucide-react';
4
+ import Image from 'next/image';
5
+ function CopyButton({ isCopied, onClick, }) {
6
+ return (_jsx("button", { type: "button", onClick: onClick, className: "absolute -bottom-3 right-2 opacity-0 group-hover:opacity-100 transition-opacity p-1.5 rounded-lg hover:bg-black/70 border border-white/10", style: { background: 'rgba(0, 0, 0, 0.5)' }, "aria-label": "Copy message", children: isCopied ? (_jsx(Check, { size: 12, className: "text-green-400" })) : (_jsx(Copy, { size: 12, className: "text-gray-400" })) }));
7
+ }
8
+ function AssistantHeader({ avatarSrc, avatarAlt, label, }) {
9
+ return (_jsxs("div", { className: "flex items-center gap-2 mb-3", children: [avatarSrc && (_jsx("div", { className: "w-6 h-6 rounded-full flex items-center justify-center ring-1 ring-purple-500/30", style: { background: 'rgba(0, 0, 0, 0.6)' }, children: _jsx(Image, { src: avatarSrc, alt: avatarAlt || 'Assistant', width: 16, height: 16, className: "rounded-full" }) })), label && (_jsx("span", { className: "text-[11px] font-semibold text-purple-400 uppercase tracking-wider", children: label }))] }));
10
+ }
11
+ export function MessageBubble({ content, role, isCopied = false, onCopy, headerComponent, avatarSrc, avatarAlt, assistantLabel, className, }) {
12
+ const isUserMessage = role === 'user';
13
+ const bubbleStyles = isUserMessage
14
+ ? 'bg-gradient-to-br from-purple-600/30 to-purple-800/30 border border-purple-500/20'
15
+ : 'bg-white/[0.05] border border-white/10';
16
+ return (_jsx("div", { className: `flex ${isUserMessage ? 'justify-end' : 'justify-start'} animate-fadeIn ${className || ''}`, children: _jsxs("div", { className: `group relative max-w-[85%] rounded-2xl px-4 py-3 ${bubbleStyles}`, children: [!isUserMessage &&
17
+ (headerComponent || (_jsx(AssistantHeader, { avatarSrc: avatarSrc, avatarAlt: avatarAlt, label: assistantLabel }))), _jsx("p", { className: "text-[14px] text-gray-200 leading-[1.8] whitespace-pre-wrap", children: content }), onCopy && (_jsx(CopyButton, { isCopied: isCopied, onClick: () => onCopy(content) }))] }) }));
18
+ }
19
+ //# sourceMappingURL=MessageBubble.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageBubble.js","sourceRoot":"","sources":["../../../src/components/chat/MessageBubble.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,MAAM,YAAY,CAAC;AAc/B,SAAS,UAAU,CAAC,EAClB,QAAQ,EACR,OAAO,GAIR;IACC,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,2IAA2I,EACrJ,KAAK,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAAE,gBAChC,cAAc,YAExB,QAAQ,CAAC,CAAC,CAAC,CACV,KAAC,KAAK,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,gBAAgB,GAAG,CAC/C,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,eAAe,GAAG,CAC7C,GACM,CACV,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,EACvB,SAAS,EACT,SAAS,EACT,KAAK,GAKN;IACC,OAAO,CACL,eAAK,SAAS,EAAC,8BAA8B,aAC1C,SAAS,IAAI,CACZ,cACE,SAAS,EAAC,iFAAiF,EAC3F,KAAK,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAAE,YAE3C,KAAC,KAAK,IACJ,GAAG,EAAE,SAAS,EACd,GAAG,EAAE,SAAS,IAAI,WAAW,EAC7B,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,EAAE,EACV,SAAS,EAAC,cAAc,GACxB,GACE,CACP,EACA,KAAK,IAAI,CACR,eAAM,SAAS,EAAC,oEAAoE,YACjF,KAAK,GACD,CACR,IACG,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAC5B,OAAO,EACP,IAAI,EACJ,QAAQ,GAAG,KAAK,EAChB,MAAM,EACN,eAAe,EACf,SAAS,EACT,SAAS,EACT,cAAc,EACd,SAAS,GACU;IACnB,MAAM,aAAa,GAAG,IAAI,KAAK,MAAM,CAAC;IACtC,MAAM,YAAY,GAAG,aAAa;QAChC,CAAC,CAAC,mFAAmF;QACrF,CAAC,CAAC,wCAAwC,CAAC;IAE7C,OAAO,CACL,cACE,SAAS,EAAE,QAAQ,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,mBAAmB,SAAS,IAAI,EAAE,EAAE,YAEtG,eACE,SAAS,EAAE,oDAAoD,YAAY,EAAE,aAE5E,CAAC,aAAa;oBACb,CAAC,eAAe,IAAI,CAClB,KAAC,eAAe,IACd,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,cAAc,GACrB,CACH,CAAC,EAEJ,YAAG,SAAS,EAAC,6DAA6D,YACvE,OAAO,GACN,EAEH,MAAM,IAAI,CACT,KAAC,UAAU,IAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAI,CACnE,IACG,GACF,CACP,CAAC;AACJ,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState, useEffect } from 'react';
3
- import { LuCopy, LuCheck } from 'react-icons/lu';
4
- import { motion, AnimatePresence } from 'framer-motion';
2
+ import { AnimatePresence, motion } from 'framer-motion';
3
+ import { useEffect, useState } from 'react';
4
+ import { LuCheck, LuCopy } from 'react-icons/lu';
5
5
  import { codeToHtml } from 'shiki';
6
6
  export function CodeBlock({ code, language = 'typescript', showCopy = true, className = '', onCopy, }) {
7
7
  const [isCopied, setIsCopied] = useState(false);