@b3-crow/ui-kit 0.0.33 → 0.0.34-pr30.3

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 (114) hide show
  1. package/dist/components/dashboard/ChatHistorySection.d.ts +4 -0
  2. package/dist/components/dashboard/ChatHistorySection.d.ts.map +1 -0
  3. package/dist/components/dashboard/ChatHistorySection.js +119 -0
  4. package/dist/components/dashboard/ChatHistorySection.js.map +1 -0
  5. package/dist/components/dashboard/DashboardBackground.d.ts +4 -0
  6. package/dist/components/dashboard/DashboardBackground.d.ts.map +1 -0
  7. package/dist/components/dashboard/DashboardBackground.js +12 -0
  8. package/dist/components/dashboard/DashboardBackground.js.map +1 -0
  9. package/dist/components/dashboard/FilterDropdown.d.ts +14 -0
  10. package/dist/components/dashboard/FilterDropdown.d.ts.map +1 -0
  11. package/dist/components/dashboard/FilterDropdown.js +114 -0
  12. package/dist/components/dashboard/FilterDropdown.js.map +1 -0
  13. package/dist/components/dashboard/GlassPanel.d.ts +13 -0
  14. package/dist/components/dashboard/GlassPanel.d.ts.map +1 -0
  15. package/dist/components/dashboard/GlassPanel.js +20 -0
  16. package/dist/components/dashboard/GlassPanel.js.map +1 -0
  17. package/dist/components/dashboard/Header.d.ts +4 -0
  18. package/dist/components/dashboard/Header.d.ts.map +1 -0
  19. package/dist/components/dashboard/Header.js +123 -0
  20. package/dist/components/dashboard/Header.js.map +1 -0
  21. package/dist/components/dashboard/IconBadge.d.ts +22 -0
  22. package/dist/components/dashboard/IconBadge.d.ts.map +1 -0
  23. package/dist/components/dashboard/IconBadge.js +44 -0
  24. package/dist/components/dashboard/IconBadge.js.map +1 -0
  25. package/dist/components/dashboard/ListItem.d.ts +22 -0
  26. package/dist/components/dashboard/ListItem.d.ts.map +1 -0
  27. package/dist/components/dashboard/ListItem.js +25 -0
  28. package/dist/components/dashboard/ListItem.js.map +1 -0
  29. package/dist/components/dashboard/MetricsCard.d.ts +10 -0
  30. package/dist/components/dashboard/MetricsCard.d.ts.map +1 -0
  31. package/dist/components/dashboard/MetricsCard.js +41 -0
  32. package/dist/components/dashboard/MetricsCard.js.map +1 -0
  33. package/dist/components/dashboard/MobileSidebar.d.ts +4 -0
  34. package/dist/components/dashboard/MobileSidebar.d.ts.map +1 -0
  35. package/dist/components/dashboard/MobileSidebar.js +57 -0
  36. package/dist/components/dashboard/MobileSidebar.js.map +1 -0
  37. package/dist/components/dashboard/NavMenu.d.ts +8 -0
  38. package/dist/components/dashboard/NavMenu.d.ts.map +1 -0
  39. package/dist/components/dashboard/NavMenu.js +66 -0
  40. package/dist/components/dashboard/NavMenu.js.map +1 -0
  41. package/dist/components/dashboard/PatternCard.d.ts +15 -0
  42. package/dist/components/dashboard/PatternCard.d.ts.map +1 -0
  43. package/dist/components/dashboard/PatternCard.js +36 -0
  44. package/dist/components/dashboard/PatternCard.js.map +1 -0
  45. package/dist/components/dashboard/SearchInput.d.ts +30 -0
  46. package/dist/components/dashboard/SearchInput.d.ts.map +1 -0
  47. package/dist/components/dashboard/SearchInput.js +52 -0
  48. package/dist/components/dashboard/SearchInput.js.map +1 -0
  49. package/dist/components/dashboard/SectionHeader.d.ts +13 -0
  50. package/dist/components/dashboard/SectionHeader.d.ts.map +1 -0
  51. package/dist/components/dashboard/SectionHeader.js +19 -0
  52. package/dist/components/dashboard/SectionHeader.js.map +1 -0
  53. package/dist/components/dashboard/SettingsDropup.d.ts +9 -0
  54. package/dist/components/dashboard/SettingsDropup.d.ts.map +1 -0
  55. package/dist/components/dashboard/SettingsDropup.js +98 -0
  56. package/dist/components/dashboard/SettingsDropup.js.map +1 -0
  57. package/dist/components/dashboard/SettingsModal.d.ts +4 -0
  58. package/dist/components/dashboard/SettingsModal.d.ts.map +1 -0
  59. package/dist/components/dashboard/SettingsModal.js +56 -0
  60. package/dist/components/dashboard/SettingsModal.js.map +1 -0
  61. package/dist/components/dashboard/SidePanel.d.ts +12 -0
  62. package/dist/components/dashboard/SidePanel.d.ts.map +1 -0
  63. package/dist/components/dashboard/SidePanel.js +79 -0
  64. package/dist/components/dashboard/SidePanel.js.map +1 -0
  65. package/dist/components/dashboard/Sidebar.d.ts +4 -0
  66. package/dist/components/dashboard/Sidebar.d.ts.map +1 -0
  67. package/dist/components/dashboard/Sidebar.js +28 -0
  68. package/dist/components/dashboard/Sidebar.js.map +1 -0
  69. package/dist/components/dashboard/SidebarLogo.d.ts +7 -0
  70. package/dist/components/dashboard/SidebarLogo.d.ts.map +1 -0
  71. package/dist/components/dashboard/SidebarLogo.js +6 -0
  72. package/dist/components/dashboard/SidebarLogo.js.map +1 -0
  73. package/dist/components/dashboard/SourceIcon.d.ts +15 -0
  74. package/dist/components/dashboard/SourceIcon.d.ts.map +1 -0
  75. package/dist/components/dashboard/SourceIcon.js +28 -0
  76. package/dist/components/dashboard/SourceIcon.js.map +1 -0
  77. package/dist/components/dashboard/StatusBadge.d.ts +26 -0
  78. package/dist/components/dashboard/StatusBadge.d.ts.map +1 -0
  79. package/dist/components/dashboard/StatusBadge.js +42 -0
  80. package/dist/components/dashboard/StatusBadge.js.map +1 -0
  81. package/dist/components/dashboard/StatusIndicator.d.ts +16 -0
  82. package/dist/components/dashboard/StatusIndicator.d.ts.map +1 -0
  83. package/dist/components/dashboard/StatusIndicator.js +35 -0
  84. package/dist/components/dashboard/StatusIndicator.js.map +1 -0
  85. package/dist/components/dashboard/Tag.d.ts +16 -0
  86. package/dist/components/dashboard/Tag.d.ts.map +1 -0
  87. package/dist/components/dashboard/Tag.js +18 -0
  88. package/dist/components/dashboard/Tag.js.map +1 -0
  89. package/dist/components/dashboard/TipCard.d.ts +12 -0
  90. package/dist/components/dashboard/TipCard.d.ts.map +1 -0
  91. package/dist/components/dashboard/TipCard.js +17 -0
  92. package/dist/components/dashboard/TipCard.js.map +1 -0
  93. package/dist/components/dashboard/ToggleSwitch.d.ts +17 -0
  94. package/dist/components/dashboard/ToggleSwitch.d.ts.map +1 -0
  95. package/dist/components/dashboard/ToggleSwitch.js +27 -0
  96. package/dist/components/dashboard/ToggleSwitch.js.map +1 -0
  97. package/dist/components/dashboard/constants.d.ts +28 -0
  98. package/dist/components/dashboard/constants.d.ts.map +1 -0
  99. package/dist/components/dashboard/constants.js +104 -0
  100. package/dist/components/dashboard/constants.js.map +1 -0
  101. package/dist/components/dashboard/index.d.ts +27 -0
  102. package/dist/components/dashboard/index.d.ts.map +1 -0
  103. package/dist/components/dashboard/index.js +27 -0
  104. package/dist/components/dashboard/index.js.map +1 -0
  105. package/dist/components/dashboard/types.d.ts +115 -0
  106. package/dist/components/dashboard/types.d.ts.map +1 -0
  107. package/dist/components/dashboard/types.js +2 -0
  108. package/dist/components/dashboard/types.js.map +1 -0
  109. package/dist/components/index.d.ts +1 -0
  110. package/dist/components/index.d.ts.map +1 -1
  111. package/dist/components/index.js +1 -0
  112. package/dist/components/index.js.map +1 -1
  113. package/dist/styles.css +1 -1
  114. package/package.json +20 -13
@@ -0,0 +1,22 @@
1
+ export interface ListItemProps {
2
+ children: React.ReactNode;
3
+ onClick?: () => void;
4
+ ariaLabel?: string;
5
+ showChevron?: boolean;
6
+ highlighted?: boolean;
7
+ className?: string;
8
+ }
9
+ /**
10
+ * A clickable list item component with optional highlighting
11
+ * Shows a chevron icon on hover and supports highlighted state
12
+ * @param {ListItemProps} props - Component props
13
+ * @param {React.ReactNode} props.children - Item content
14
+ * @param {() => void} [props.onClick] - Click handler
15
+ * @param {string} [props.ariaLabel] - Accessibility label
16
+ * @param {boolean} [props.showChevron=false] - Whether to show chevron indicator
17
+ * @param {boolean} [props.highlighted=false] - Whether item is highlighted
18
+ * @param {string} [props.className] - Additional CSS classes
19
+ * @returns {JSX.Element} The list item component
20
+ */
21
+ export declare function ListItem({ children, onClick, ariaLabel, showChevron, highlighted, className, }: ListItemProps): import("react/jsx-runtime").JSX.Element;
22
+ //# sourceMappingURL=ListItem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListItem.d.ts","sourceRoot":"","sources":["../../../src/components/dashboard/ListItem.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,EACR,OAAO,EACP,SAAS,EACT,WAAmB,EACnB,WAAmB,EACnB,SAAS,GACV,EAAE,aAAa,2CAoBf"}
@@ -0,0 +1,25 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { ChevronRight } from 'lucide-react';
4
+ import { cn } from '../../lib/utils';
5
+ /**
6
+ * A clickable list item component with optional highlighting
7
+ * Shows a chevron icon on hover and supports highlighted state
8
+ * @param {ListItemProps} props - Component props
9
+ * @param {React.ReactNode} props.children - Item content
10
+ * @param {() => void} [props.onClick] - Click handler
11
+ * @param {string} [props.ariaLabel] - Accessibility label
12
+ * @param {boolean} [props.showChevron=false] - Whether to show chevron indicator
13
+ * @param {boolean} [props.highlighted=false] - Whether item is highlighted
14
+ * @param {string} [props.className] - Additional CSS classes
15
+ * @returns {JSX.Element} The list item component
16
+ */
17
+ export function ListItem({ children, onClick, ariaLabel, showChevron = false, highlighted = false, className, }) {
18
+ return (_jsx("button", { type: "button", onClick: onClick, "aria-label": ariaLabel, className: cn('w-full px-2.5 sm:px-3 py-2.5 sm:py-3 rounded-lg text-left transition-all group', highlighted
19
+ ? 'border-l-2 border-l-violet-500 bg-violet-500/[0.02] pl-3 sm:pl-3.5'
20
+ : 'hover:bg-white/[0.02]', className), children: _jsxs("div", { className: "flex items-start justify-between", children: [_jsx("div", { className: "flex-1 min-w-0", children: children }), showChevron && _jsx(ChevronIndicator, {})] }) }));
21
+ }
22
+ function ChevronIndicator() {
23
+ return (_jsx("div", { className: "ml-2 opacity-0 group-hover:opacity-100 transition-opacity mt-1 flex-shrink-0", children: _jsx(ChevronRight, { size: 12, className: "text-gray-600 sm:w-3.5 sm:h-3.5", strokeWidth: 2 }) }));
24
+ }
25
+ //# sourceMappingURL=ListItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListItem.js","sourceRoot":"","sources":["../../../src/components/dashboard/ListItem.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAWrC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,QAAQ,CAAC,EACvB,QAAQ,EACR,OAAO,EACP,SAAS,EACT,WAAW,GAAG,KAAK,EACnB,WAAW,GAAG,KAAK,EACnB,SAAS,GACK;IACd,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,gBACJ,SAAS,EACrB,SAAS,EAAE,EAAE,CACX,gFAAgF,EAChF,WAAW;YACT,CAAC,CAAC,oEAAoE;YACtE,CAAC,CAAC,uBAAuB,EAC3B,SAAS,CACV,YAED,eAAK,SAAS,EAAC,kCAAkC,aAC/C,cAAK,SAAS,EAAC,gBAAgB,YAAE,QAAQ,GAAO,EAC/C,WAAW,IAAI,KAAC,gBAAgB,KAAG,IAChC,GACC,CACV,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,CACL,cAAK,SAAS,EAAC,8EAA8E,YAC3F,KAAC,YAAY,IACX,IAAI,EAAE,EAAE,EACR,SAAS,EAAC,iCAAiC,EAC3C,WAAW,EAAE,CAAC,GACd,GACE,CACP,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/dashboard/MetricsCard.tsx"],"names":[],"mappings":"AAKA,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;AAmBD,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,KAAK,EACL,MAAM,EACN,UAAU,EACV,SAA8B,EAC9B,UAAqB,GACtB,EAAE,gBAAgB,2CA8BlB"}
@@ -0,0 +1,41 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { GlassPanel } from './GlassPanel';
4
+ import { StatusBadge } from './StatusBadge';
5
+ const chartColors = {
6
+ violet: {
7
+ bg: '#8B5CF6',
8
+ shadow: '0px 0px 8px rgba(124, 58, 237, 0.50)',
9
+ },
10
+ rose: {
11
+ bg: '#F43F5E',
12
+ shadow: '0px 0px 8px rgba(244, 63, 94, 0.50)',
13
+ },
14
+ gray: {
15
+ bg: '#6B7280',
16
+ shadow: 'none',
17
+ },
18
+ };
19
+ const DEFAULT_CHART_DATA = [25, 50, 35, 70, 100];
20
+ export function MetricsCard({ title, value, change, changeType, chartData = DEFAULT_CHART_DATA, chartColor = 'violet', }) {
21
+ // Safeguard for empty chartData
22
+ const safeChartData = chartData.length > 0 ? chartData : DEFAULT_CHART_DATA;
23
+ const maxValue = Math.max(...safeChartData);
24
+ const barColor = chartColors[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
+ function MiniChart({ chartData, maxValue, barColor }) {
28
+ return (_jsx("div", { className: "flex items-end gap-[2px]", children: chartData.map((val, index) => {
29
+ const isLast = index === chartData.length - 1;
30
+ const height = Math.max((val / maxValue) * 20, 3);
31
+ return (_jsx("div", { style: {
32
+ width: '12px',
33
+ height: `${height}px`,
34
+ borderRadius: '2px 2px 0 0',
35
+ background: isLast ? barColor.bg : '#374151',
36
+ boxShadow: isLast ? barColor.shadow : 'none',
37
+ opacity: isLast ? 1 : 0.5,
38
+ } }, `bar-${index}-${val}`));
39
+ }) }));
40
+ }
41
+ //# sourceMappingURL=MetricsCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetricsCard.js","sourceRoot":"","sources":["../../../src/components/dashboard/MetricsCard.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAW5C,MAAM,WAAW,GAAG;IAClB,MAAM,EAAE;QACN,EAAE,EAAE,SAAS;QACb,MAAM,EAAE,sCAAsC;KAC/C;IACD,IAAI,EAAE;QACJ,EAAE,EAAE,SAAS;QACb,MAAM,EAAE,qCAAqC;KAC9C;IACD,IAAI,EAAE;QACJ,EAAE,EAAE,SAAS;QACb,MAAM,EAAE,MAAM;KACf;CACF,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAU,CAAC;AAE1D,MAAM,UAAU,WAAW,CAAC,EAC1B,KAAK,EACL,KAAK,EACL,MAAM,EACN,UAAU,EACV,SAAS,GAAG,kBAAkB,EAC9B,UAAU,GAAG,QAAQ,GACJ;IACjB,gCAAgC;IAChC,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,WAAW,CAAC,UAAU,CAAC,CAAC;IAEzC,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,EAEP,KAAC,SAAS,IACR,SAAS,EAAE,aAAa,EACxB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,GAClB,IACE,IACF,GACK,CACd,CAAC;AACJ,CAAC;AAQD,SAAS,SAAS,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAkB;IAClE,OAAO,CACL,cAAK,SAAS,EAAC,0BAA0B,YACtC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YAC5B,MAAM,MAAM,GAAG,KAAK,KAAK,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YAElD,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,GAAG,EAAE,CAS1B,CACH,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { MobileSidebarProps } from './types';
2
+ export type { MobileSidebarProps };
3
+ export declare function MobileSidebar({ isOpen, onClose, navItems, activeHref, onNavigate, showSettings, logoSrc, userName, userEmail, onLogout, onNotificationsChange, initialNotifications, chatHistory, activeChatId, chatHistoryExpanded, onChatClick, onChatHistoryToggle, onChatRename, onChatDelete, }: MobileSidebarProps): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=MobileSidebar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MobileSidebar.d.ts","sourceRoot":"","sources":["../../../src/components/dashboard/MobileSidebar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAW,MAAM,SAAS,CAAC;AAS3D,YAAY,EAAE,kBAAkB,EAAE,CAAC;AAiBnC,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,OAAO,EACP,QAA0B,EAC1B,UAAgB,EAChB,UAAU,EACV,YAAmB,EACnB,OAAwB,EACxB,QAAiB,EACjB,SAA8B,EAC9B,QAAQ,EACR,qBAAqB,EACrB,oBAA2B,EAC3B,WAAW,EACX,YAAY,EACZ,mBAA0B,EAC1B,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,YAAY,GACb,EAAE,kBAAkB,2CAmHpB"}
@@ -0,0 +1,57 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { AnimatePresence, motion } from 'framer-motion';
4
+ import { X } from 'lucide-react';
5
+ import { useEffect } from 'react';
6
+ import { ChatHistorySection } from './ChatHistorySection';
7
+ import { NavMenu } from './NavMenu';
8
+ import { SettingsDropup } from './SettingsDropup';
9
+ import { SidebarLogo } from './SidebarLogo';
10
+ const defaultNavItems = [
11
+ { icon: 'grid_view', label: 'Overview', href: '/' },
12
+ { icon: 'chat_bubble', label: 'Ask CROW', href: '/ask-crow' },
13
+ {
14
+ icon: 'timeline',
15
+ label: 'Analysis',
16
+ href: '#',
17
+ submenu: [
18
+ { icon: '', label: 'Interactions', href: '/analysis/interactions' },
19
+ { icon: '', label: 'Patterns', href: '/analysis/patterns' },
20
+ ],
21
+ },
22
+ { icon: 'group', label: 'Team', href: '/team' },
23
+ ];
24
+ export function MobileSidebar({ isOpen, onClose, navItems = defaultNavItems, activeHref = '/', onNavigate, showSettings = true, logoSrc = '/favicon.png', userName = 'User', userEmail = 'user@example.com', onLogout, onNotificationsChange, initialNotifications = true, chatHistory, activeChatId, chatHistoryExpanded = true, onChatClick, onChatHistoryToggle, onChatRename, onChatDelete, }) {
25
+ // Show chat history when on Ask CROW page
26
+ const normalizedHref = activeHref?.replace(/\/$/, '') || '';
27
+ const showChatHistory = normalizedHref === '/ask-crow';
28
+ // Lock body scroll and handle Escape key when sidebar is open
29
+ useEffect(() => {
30
+ if (!isOpen) {
31
+ document.body.style.overflow = '';
32
+ return;
33
+ }
34
+ document.body.style.overflow = 'hidden';
35
+ const handleEscapeKey = (e) => {
36
+ if (e.key === 'Escape') {
37
+ onClose();
38
+ }
39
+ };
40
+ document.addEventListener('keydown', handleEscapeKey);
41
+ return () => {
42
+ document.removeEventListener('keydown', handleEscapeKey);
43
+ document.body.style.overflow = '';
44
+ };
45
+ }, [isOpen, onClose]);
46
+ // Handle navigation - close sidebar after navigating
47
+ const handleNavigate = (href) => {
48
+ onNavigate?.(href);
49
+ onClose();
50
+ };
51
+ return (_jsx(AnimatePresence, { children: isOpen && (_jsxs(_Fragment, { children: [_jsx(motion.div, { initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, transition: { duration: 0.2 }, className: "fixed inset-0 bg-black/60 z-[100] md:hidden", onClick: onClose, "aria-hidden": "true" }), _jsxs(motion.aside, { initial: { x: '-100%' }, animate: { x: 0 }, exit: { x: '-100%' }, transition: { type: 'spring', damping: 25, stiffness: 300 }, className: "fixed left-0 top-0 h-full w-[280px] bg-black border-r border-white/[0.08] z-[101] md:hidden", role: "dialog", "aria-modal": "true", "aria-label": "Navigation menu", children: [_jsx("div", { className: "absolute inset-0 w-[279px] h-full pointer-events-none", style: {
52
+ background: 'linear-gradient(180deg, rgba(255, 255, 255, 0.02) 0%, rgba(255, 255, 255, 0) 100%)',
53
+ } }), _jsx("div", { className: "absolute left-0 top-0 w-[279px] h-32 opacity-50 pointer-events-none", style: {
54
+ background: 'linear-gradient(180deg, #100B1A 0%, rgba(16, 11, 26, 0) 100%)',
55
+ } }), _jsx("button", { type: "button", onClick: onClose, className: "absolute top-4 right-4 w-8 h-8 flex items-center justify-center rounded-lg z-10 transition-colors hover:bg-white/[0.06]", "aria-label": "Close menu", children: _jsx(X, { size: 20, color: "#9CA3AF", strokeWidth: 2 }) }), _jsxs("div", { className: "flex flex-col h-full", children: [_jsx(SidebarLogo, { logoSrc: logoSrc }), _jsx(NavMenu, { items: navItems, activeHref: activeHref, onNavigate: handleNavigate }), _jsx(ChatHistorySection, { items: chatHistory, activeItemId: activeChatId, isExpanded: chatHistoryExpanded, isVisible: showChatHistory, onItemClick: onChatClick, onToggleExpanded: onChatHistoryToggle, onRename: onChatRename, onDelete: onChatDelete }), showSettings && (_jsx(SettingsDropup, { userName: userName, userEmail: userEmail, initialNotifications: initialNotifications, onNotificationsChange: onNotificationsChange, onLogout: onLogout }))] })] })] })) }));
56
+ }
57
+ //# sourceMappingURL=MobileSidebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MobileSidebar.js","sourceRoot":"","sources":["../../../src/components/dashboard/MobileSidebar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { NavItem } from './types';
2
+ export interface NavMenuProps {
3
+ items: NavItem[];
4
+ activeHref: string;
5
+ onNavigate?: (href: string) => void;
6
+ }
7
+ export declare function NavMenu({ items, activeHref, onNavigate }: NavMenuProps): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=NavMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavMenu.d.ts","sourceRoot":"","sources":["../../../src/components/dashboard/NavMenu.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAWvC,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAWD,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,YAAY,2CAmKtE"}
@@ -0,0 +1,66 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { ChevronDown, LayoutGrid, MessageSquare, TrendingUp, Users, } from 'lucide-react';
4
+ import { useState } from 'react';
5
+ import { cn } from '../../lib/utils';
6
+ const iconComponents = {
7
+ grid_view: LayoutGrid,
8
+ chat_bubble: MessageSquare,
9
+ timeline: TrendingUp,
10
+ group: Users,
11
+ };
12
+ export function NavMenu({ items, activeHref, onNavigate }) {
13
+ const [expandedMenus, setExpandedMenus] = useState([]);
14
+ const normalizePath = (path) => path.replace(/\/$/, '') || '/';
15
+ const isActive = (href) => {
16
+ const normalizedActive = normalizePath(activeHref);
17
+ const normalizedHref = normalizePath(href);
18
+ return normalizedActive === normalizedHref;
19
+ };
20
+ const isSubmenuActive = (subItems) => subItems?.some(item => isActive(item.href));
21
+ const isExpanded = (label) => expandedMenus.includes(label);
22
+ const toggleMenu = (label) => {
23
+ setExpandedMenus(prev => prev.includes(label) ? prev.filter(l => l !== label) : [...prev, label]);
24
+ };
25
+ const handleNavigate = (href, e) => {
26
+ if (onNavigate) {
27
+ e.preventDefault();
28
+ onNavigate(href);
29
+ }
30
+ };
31
+ const handleKeyDown = (label, e) => {
32
+ if (e.key === 'Enter' || e.key === ' ') {
33
+ e.preventDefault();
34
+ toggleMenu(label);
35
+ }
36
+ };
37
+ const renderIcon = (iconName, active) => {
38
+ const IconComponent = iconComponents[iconName];
39
+ if (!IconComponent)
40
+ return null;
41
+ return (_jsx(IconComponent, { size: 15, className: cn('transition-colors', active ? 'text-violet-300' : 'text-gray-500'), strokeWidth: 2 }));
42
+ };
43
+ return (_jsx("nav", { className: "w-[247px] ml-4 mt-[99.5px] flex flex-col gap-1", children: items.map(item => {
44
+ const itemIsActive = item.submenu
45
+ ? isSubmenuActive(item.submenu)
46
+ : isActive(item.href);
47
+ const expanded = item.submenu && isExpanded(item.label);
48
+ const submenuHeight = item.submenu ? item.submenu.length * 35.5 : 0;
49
+ return item.submenu ? (_jsxs("div", { children: [_jsxs("button", { type: "button", onClick: () => toggleMenu(item.label), onKeyDown: e => handleKeyDown(item.label, e), "aria-label": `${item.label} menu`, "aria-expanded": expanded, className: cn('w-[247px] h-[41px] relative rounded-lg border-none cursor-pointer', 'flex items-center pl-3 gap-3 transition-colors duration-150', expanded
50
+ ? 'bg-white/[0.03]'
51
+ : 'bg-transparent hover:bg-white/[0.04]'), children: [_jsx("div", { className: "w-5 h-6 flex items-center justify-center shrink-0", children: renderIcon(item.icon, !!itemIsActive) }), _jsx("span", { className: cn('text-sm font-normal leading-[21px] flex-1 text-left font-[Sora,sans-serif]', itemIsActive ? 'text-white' : 'text-gray-400'), children: item.label }), _jsx("div", { className: "w-[18px] h-[22px] flex items-center justify-center mr-3", children: _jsx(ChevronDown, { size: 12, className: cn('text-gray-600 transition-transform duration-200', expanded && 'rotate-180'), strokeWidth: 2 }) })] }), _jsx("div", { className: "ml-11 overflow-hidden transition-all duration-250", style: {
52
+ maxHeight: expanded ? submenuHeight : 0,
53
+ opacity: expanded ? 1 : 0,
54
+ }, children: item.submenu.map(subitem => {
55
+ const subActive = isActive(subitem.href);
56
+ return (_jsx("a", { href: subitem.href, onClick: e => handleNavigate(subitem.href, e), className: cn('w-[203px] h-[35.5px] rounded-lg flex items-center pl-3', 'no-underline cursor-pointer transition-colors duration-150', subActive
57
+ ? 'bg-violet-500/10'
58
+ : 'bg-transparent hover:bg-white/[0.04]'), children: _jsx("span", { className: cn('text-[13px] leading-[19.5px] font-[Sora,sans-serif] transition-colors duration-150', subActive
59
+ ? 'text-violet-300 font-medium'
60
+ : 'text-gray-500 font-normal'), children: subitem.label }) }, subitem.label));
61
+ }) })] }, item.label)) : (_jsxs("a", { href: item.href, onClick: e => handleNavigate(item.href, e), className: cn('w-[247px] h-[41px] rounded-lg flex items-center pl-3 gap-3', 'no-underline cursor-pointer transition-all duration-150', itemIsActive
62
+ ? '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'
63
+ : 'bg-transparent hover:bg-white/[0.04]'), children: [_jsx("div", { className: "w-5 h-6 flex items-center justify-center shrink-0", children: renderIcon(item.icon, !!itemIsActive) }), _jsx("span", { className: cn('text-sm font-normal leading-[21px] font-[Sora,sans-serif]', itemIsActive ? 'text-white' : 'text-gray-400'), children: item.label })] }, item.label));
64
+ }) }));
65
+ }
66
+ //# sourceMappingURL=NavMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavMenu.js","sourceRoot":"","sources":["../../../src/components/dashboard/NavMenu.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { SeverityLevel, ConfidenceLevel } from './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/dashboard/PatternCard.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE9D,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;AAED,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,UAAU,EACV,aAAa,EACb,cAAc,EACd,aAAa,EACb,SAAS,GACV,EAAE,gBAAgB,2CAgHlB"}
@@ -0,0 +1,36 @@
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 { SEVERITY_CONFIG, CONFIDENCE_CONFIG } from './constants';
6
+ export function PatternCard({ title, severity, affectedStores, lastSeen, confidence, onViewDetails, onViewEvidence, onCreateAlert, className, }) {
7
+ const severityStyle = SEVERITY_CONFIG[severity];
8
+ const confidenceStyle = CONFIDENCE_CONFIG[confidence];
9
+ return (_jsx("div", { className: cn('relative overflow-hidden rounded-xl', className), style: {
10
+ background: 'rgba(10, 5, 20, 0.40)',
11
+ boxShadow: '0px 4px 6px -4px rgba(0, 0, 0, 0.10)',
12
+ outline: '1px rgba(255, 255, 255, 0.08) solid',
13
+ outlineOffset: '-1px',
14
+ backdropFilter: 'blur(8px)',
15
+ }, 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", style: { color: 'white' }, children: title }), _jsx("span", { className: "shrink-0 px-2.5 py-1 rounded-lg text-[10px] font-bold uppercase tracking-wide", style: {
16
+ color: severityStyle.color,
17
+ background: severityStyle.bg,
18
+ outline: `1px ${severityStyle.border} solid`,
19
+ outlineOffset: '-1px',
20
+ }, children: severityStyle.label })] }), _jsxs("div", { className: "space-y-2 mb-4", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(MapPin, { size: 16, color: "#6B7280" }), _jsxs("span", { className: "text-sm leading-5", style: { color: '#9CA3AF' }, children: ["Affected stores: ", affectedStores] })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Clock, { size: 16, color: "#6B7280" }), _jsxs("span", { className: "text-sm leading-5", style: { color: '#9CA3AF' }, children: ["Last seen: ", 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: {
21
+ color: confidenceStyle.color,
22
+ background: confidenceStyle.bg,
23
+ outline: `1px ${confidenceStyle.border} solid`,
24
+ outlineOffset: '-1px',
25
+ }, 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("button", { type: "button", onClick: onViewDetails, className: "h-[30px] px-3.5 flex items-center justify-center rounded-lg text-xs font-medium text-white transition-colors", style: {
26
+ background: '#7C3AED',
27
+ boxShadow: '0px 0px 10px rgba(124, 58, 237, 0.30)',
28
+ outline: '1px #8B5CF6 solid',
29
+ outlineOffset: '-1px',
30
+ }, children: "View details" }), _jsx("button", { type: "button", onClick: onViewEvidence, className: "h-[30px] px-3.5 flex items-center justify-center rounded-lg text-xs font-medium transition-colors hover:bg-white/5", style: {
31
+ color: '#D1D5DB',
32
+ outline: '1px rgba(255, 255, 255, 0.10) solid',
33
+ outlineOffset: '-1px',
34
+ }, children: "View evidence" }), _jsx("div", { className: "flex-1" }), _jsxs("button", { type: "button", onClick: onCreateAlert, className: "h-7 px-3 flex items-center gap-1.5 rounded-lg text-xs font-medium transition-colors hover:bg-white/5", style: { color: '#9CA3AF' }, children: [_jsx(Bell, { size: 14, color: "#9CA3AF" }), "Create alert"] })] })] }) }));
35
+ }
36
+ //# sourceMappingURL=PatternCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PatternCard.js","sourceRoot":"","sources":["../../../src/components/dashboard/PatternCard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export interface SearchInputProps {
2
+ placeholder?: string;
3
+ value?: string;
4
+ defaultValue?: string;
5
+ onChange?: (value: string) => void;
6
+ onSubmit?: (value: string) => void;
7
+ showMicButton?: boolean;
8
+ disabled?: boolean;
9
+ className?: string;
10
+ helperText?: string;
11
+ variant?: 'default' | 'transparent';
12
+ }
13
+ /**
14
+ * A search input component with optional microphone and submit button
15
+ * Supports controlled and uncontrolled input patterns
16
+ * @param {SearchInputProps} props - Component props
17
+ * @param {string} [props.placeholder='Search...'] - Input placeholder text
18
+ * @param {string} [props.value] - Controlled value for the input
19
+ * @param {string} [props.defaultValue=''] - Default value for uncontrolled input
20
+ * @param {(value: string) => void} [props.onChange] - Change event handler
21
+ * @param {(value: string) => void} [props.onSubmit] - Submit handler (Enter or button click)
22
+ * @param {boolean} [props.showMicButton=true] - Whether to show microphone button
23
+ * @param {boolean} [props.disabled=false] - Whether input is disabled
24
+ * @param {string} [props.className] - Additional CSS classes
25
+ * @param {string} [props.helperText] - Helper text displayed below input
26
+ * @param {'default' | 'transparent'} [props.variant='default'] - Visual variant
27
+ * @returns {JSX.Element} The search input component
28
+ */
29
+ export declare function SearchInput({ placeholder, value: controlledValue, defaultValue, onChange, onSubmit, showMicButton, disabled, className, helperText, variant, }: SearchInputProps): import("react/jsx-runtime").JSX.Element;
30
+ //# sourceMappingURL=SearchInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchInput.d.ts","sourceRoot":"","sources":["../../../src/components/dashboard/SearchInput.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;CACrC;AAQD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CAAC,EAC1B,WAAyB,EACzB,KAAK,EAAE,eAAe,EACtB,YAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,aAAoB,EACpB,QAAgB,EAChB,SAAS,EACT,UAAU,EACV,OAAmB,GACpB,EAAE,gBAAgB,2CAkElB"}
@@ -0,0 +1,52 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { ArrowRight, Mic, Search } from 'lucide-react';
4
+ import { useState } from 'react';
5
+ import { cn } from '../../lib/utils';
6
+ /**
7
+ * A search input component with optional microphone and submit button
8
+ * Supports controlled and uncontrolled input patterns
9
+ * @param {SearchInputProps} props - Component props
10
+ * @param {string} [props.placeholder='Search...'] - Input placeholder text
11
+ * @param {string} [props.value] - Controlled value for the input
12
+ * @param {string} [props.defaultValue=''] - Default value for uncontrolled input
13
+ * @param {(value: string) => void} [props.onChange] - Change event handler
14
+ * @param {(value: string) => void} [props.onSubmit] - Submit handler (Enter or button click)
15
+ * @param {boolean} [props.showMicButton=true] - Whether to show microphone button
16
+ * @param {boolean} [props.disabled=false] - Whether input is disabled
17
+ * @param {string} [props.className] - Additional CSS classes
18
+ * @param {string} [props.helperText] - Helper text displayed below input
19
+ * @param {'default' | 'transparent'} [props.variant='default'] - Visual variant
20
+ * @returns {JSX.Element} The search input component
21
+ */
22
+ export function SearchInput({ placeholder = 'Search...', value: controlledValue, defaultValue = '', onChange, onSubmit, showMicButton = true, disabled = false, className, helperText, variant = 'default', }) {
23
+ const [internalValue, setInternalValue] = useState(defaultValue);
24
+ const value = controlledValue ?? internalValue;
25
+ const handleChange = (e) => {
26
+ const newValue = e.target.value;
27
+ if (controlledValue === undefined) {
28
+ setInternalValue(newValue);
29
+ }
30
+ onChange?.(newValue);
31
+ };
32
+ const handleSubmit = () => {
33
+ if (onSubmit && value.trim() && !disabled) {
34
+ onSubmit(value);
35
+ }
36
+ };
37
+ const handleKeyDown = (e) => {
38
+ if (e.key === 'Enter') {
39
+ handleSubmit();
40
+ }
41
+ };
42
+ return (_jsxs("div", { className: cn('w-full', className), children: [_jsxs("div", { className: cn('relative flex items-center rounded-full overflow-hidden h-12 sm:h-[54px]', 'border border-white/10 shadow-[0px_4px_6px_-4px_rgba(0,0,0,0.10)]', variant === 'transparent'
43
+ ? 'bg-[rgba(14,10,21,0.6)]'
44
+ : 'bg-[#0E0A15]', disabled && 'opacity-50 cursor-not-allowed'), children: [_jsx(SearchIcon, {}), _jsx("input", { type: "text", placeholder: placeholder, value: value, onChange: handleChange, onKeyDown: handleKeyDown, disabled: disabled, className: cn('w-full h-full pl-[53px] bg-transparent', 'text-white text-sm placeholder:text-gray-500', 'focus:outline-none', 'disabled:cursor-not-allowed', showMicButton ? 'pr-24' : 'pr-14') }), _jsx(ActionButtons, { showMicButton: showMicButton, disabled: disabled, onSubmit: handleSubmit })] }), helperText && (_jsx("p", { className: "text-[10px] text-gray-600 mt-2 sm:mt-3 text-center", children: helperText }))] }));
45
+ }
46
+ function SearchIcon() {
47
+ return (_jsx("div", { className: "absolute left-4 flex items-center justify-center", children: _jsx(Search, { size: 24, className: "text-gray-500", strokeWidth: 2 }) }));
48
+ }
49
+ function ActionButtons({ showMicButton, disabled, onSubmit, }) {
50
+ return (_jsxs("div", { className: "absolute right-2 sm:right-3 flex items-center gap-1 sm:gap-2", children: [showMicButton && (_jsx("button", { type: "button", disabled: disabled, className: cn('w-9 h-9 flex items-center justify-center rounded-full', 'hover:bg-white/5 transition-colors', 'disabled:cursor-not-allowed'), "aria-label": "Voice input", children: _jsx(Mic, { size: 20, className: "text-gray-500", strokeWidth: 2 }) })), _jsx("button", { type: "button", onClick: onSubmit, disabled: disabled, className: cn('w-9 h-9 flex items-center justify-center rounded-full', 'bg-violet-600 shadow-[0px_0px_10px_rgba(124,58,237,0.30)]', 'transition-colors', 'disabled:cursor-not-allowed disabled:opacity-50'), "aria-label": "Submit", children: _jsx(ArrowRight, { size: 18, className: "text-white", strokeWidth: 2 }) })] }));
51
+ }
52
+ //# sourceMappingURL=SearchInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchInput.js","sourceRoot":"","sources":["../../../src/components/dashboard/SearchInput.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAqBrC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,WAAW,GAAG,WAAW,EACzB,KAAK,EAAE,eAAe,EACtB,YAAY,GAAG,EAAE,EACjB,QAAQ,EACR,QAAQ,EACR,aAAa,GAAG,IAAI,EACpB,QAAQ,GAAG,KAAK,EAChB,SAAS,EACT,UAAU,EACV,OAAO,GAAG,SAAS,GACF;IACjB,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,eAAe,IAAI,aAAa,CAAC;IAE/C,MAAM,YAAY,GAAG,CAAC,CAAsC,EAAE,EAAE;QAC9D,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAChC,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YAClC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;QACD,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,IAAI,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1C,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,CAAwC,EAAE,EAAE;QACjE,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;YACtB,YAAY,EAAE,CAAC;QACjB,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,aACrC,eACE,SAAS,EAAE,EAAE,CACX,0EAA0E,EAC1E,mEAAmE,EACnE,OAAO,KAAK,aAAa;oBACvB,CAAC,CAAC,yBAAyB;oBAC3B,CAAC,CAAC,cAAc,EAClB,QAAQ,IAAI,+BAA+B,CAC5C,aAED,KAAC,UAAU,KAAG,EACd,gBACE,IAAI,EAAC,MAAM,EACX,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAE,aAAa,EACxB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,EAAE,CACX,wCAAwC,EACxC,8CAA8C,EAC9C,oBAAoB,EACpB,6BAA6B,EAC7B,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAClC,GACD,EACF,KAAC,aAAa,IACZ,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,YAAY,GACtB,IACE,EAEL,UAAU,IAAI,CACb,YAAG,SAAS,EAAC,oDAAoD,YAC9D,UAAU,GACT,CACL,IACG,CACP,CAAC;AACJ,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,CACL,cAAK,SAAS,EAAC,kDAAkD,YAC/D,KAAC,MAAM,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,eAAe,EAAC,WAAW,EAAE,CAAC,GAAI,GAC1D,CACP,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,EACrB,aAAa,EACb,QAAQ,EACR,QAAQ,GACW;IACnB,OAAO,CACL,eAAK,SAAS,EAAC,8DAA8D,aAC1E,aAAa,IAAI,CAChB,iBACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,EAAE,CACX,uDAAuD,EACvD,oCAAoC,EACpC,6BAA6B,CAC9B,gBACU,aAAa,YAExB,KAAC,GAAG,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,eAAe,EAAC,WAAW,EAAE,CAAC,GAAI,GACpD,CACV,EAED,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,QAAQ,EACjB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,EAAE,CACX,uDAAuD,EACvD,2DAA2D,EAC3D,mBAAmB,EACnB,iDAAiD,CAClD,gBACU,QAAQ,YAEnB,KAAC,UAAU,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,YAAY,EAAC,WAAW,EAAE,CAAC,GAAI,GACxD,IACL,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ export interface SectionHeaderProps {
2
+ title: string;
3
+ viewAllHref?: string;
4
+ viewAllText?: string;
5
+ onViewAllClick?: () => void;
6
+ LinkComponent?: React.ComponentType<{
7
+ href: string;
8
+ className?: string;
9
+ children: React.ReactNode;
10
+ }>;
11
+ }
12
+ export declare function SectionHeader({ title, viewAllHref, viewAllText, onViewAllClick, LinkComponent, }: SectionHeaderProps): import("react/jsx-runtime").JSX.Element;
13
+ //# sourceMappingURL=SectionHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SectionHeader.d.ts","sourceRoot":"","sources":["../../../src/components/dashboard/SectionHeader.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QAClC,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;KAC3B,CAAC,CAAC;CACJ;AASD,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,WAAW,EACX,WAAwB,EACxB,cAAc,EACd,aAAa,GACd,EAAE,kBAAkB,2CAiBpB"}
@@ -0,0 +1,19 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { ArrowRight } from 'lucide-react';
4
+ export function SectionHeader({ title, viewAllHref, viewAllText = 'View all', onViewAllClick, LinkComponent, }) {
5
+ const showViewAll = viewAllHref || onViewAllClick;
6
+ return (_jsxs("div", { className: "px-4 sm:px-6 py-3 sm:py-4 flex items-center justify-between bg-white/[0.01] border-b border-white/[0.06]", children: [_jsx("h3", { className: "text-xs sm:text-sm font-semibold text-white", children: title }), showViewAll && (_jsx(ViewAllLink, { href: viewAllHref, text: viewAllText, onClick: onViewAllClick, LinkComponent: LinkComponent }))] }));
7
+ }
8
+ function ViewAllLink({ href, text, onClick, LinkComponent }) {
9
+ const content = (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-[10px] sm:text-xs text-violet-400", children: text }), _jsx(ArrowRight, { size: 12, className: "text-violet-400 sm:w-3.5 sm:h-3.5", strokeWidth: 2 })] }));
10
+ const className = 'flex items-center gap-1 hover:opacity-80 transition-opacity';
11
+ if (LinkComponent && href) {
12
+ return (_jsx(LinkComponent, { href: href, className: className, children: content }));
13
+ }
14
+ if (href) {
15
+ return (_jsx("a", { href: href, className: className, children: content }));
16
+ }
17
+ return (_jsx("button", { type: "button", onClick: onClick, className: className, children: content }));
18
+ }
19
+ //# sourceMappingURL=SectionHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SectionHeader.js","sourceRoot":"","sources":["../../../src/components/dashboard/SectionHeader.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAqB1C,MAAM,UAAU,aAAa,CAAC,EAC5B,KAAK,EACL,WAAW,EACX,WAAW,GAAG,UAAU,EACxB,cAAc,EACd,aAAa,GACM;IACnB,MAAM,WAAW,GAAG,WAAW,IAAI,cAAc,CAAC;IAElD,OAAO,CACL,eAAK,SAAS,EAAC,0GAA0G,aACvH,aAAI,SAAS,EAAC,6CAA6C,YAAE,KAAK,GAAM,EAEvE,WAAW,IAAI,CACd,KAAC,WAAW,IACV,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,cAAc,EACvB,aAAa,EAAE,aAAa,GAC5B,CACH,IACG,CACP,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAoB;IAC3E,MAAM,OAAO,GAAG,CACd,8BACE,eAAM,SAAS,EAAC,wCAAwC,YAAE,IAAI,GAAQ,EACtE,KAAC,UAAU,IACT,IAAI,EAAE,EAAE,EACR,SAAS,EAAC,mCAAmC,EAC7C,WAAW,EAAE,CAAC,GACd,IACD,CACJ,CAAC;IAEF,MAAM,SAAS,GACb,6DAA6D,CAAC;IAEhE,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;QAC1B,OAAO,CACL,KAAC,aAAa,IAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,YAC5C,OAAO,GACM,CACjB,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CACL,YAAG,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,YAChC,OAAO,GACN,CACL,CAAC;IACJ,CAAC;IAED,OAAO,CACL,iBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,YACzD,OAAO,GACD,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface SettingsDropupProps {
2
+ userName?: string;
3
+ userEmail?: string;
4
+ initialNotifications?: boolean;
5
+ onNotificationsChange?: (enabled: boolean) => void;
6
+ onLogout?: () => void;
7
+ }
8
+ export declare function SettingsDropup({ userName, userEmail, initialNotifications, onNotificationsChange, onLogout, }: SettingsDropupProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=SettingsDropup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsDropup.d.ts","sourceRoot":"","sources":["../../../src/components/dashboard/SettingsDropup.tsx"],"names":[],"mappings":"AAOA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qBAAqB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,wBAAgB,cAAc,CAAC,EAC7B,QAAiB,EACjB,SAA8B,EAC9B,oBAA2B,EAC3B,qBAAqB,EACrB,QAAQ,GACT,EAAE,mBAAmB,2CA0NrB"}