@b3-crow/ui-kit 0.0.35 → 0.0.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/backgrounds/DashboardBackground.d.ts +4 -0
- package/dist/components/backgrounds/DashboardBackground.d.ts.map +1 -0
- package/dist/components/backgrounds/DashboardBackground.js +20 -0
- package/dist/components/backgrounds/DashboardBackground.js.map +1 -0
- package/dist/components/buttons/CollapseToggleButton.d.ts +7 -0
- package/dist/components/buttons/CollapseToggleButton.d.ts.map +1 -0
- package/dist/components/buttons/CollapseToggleButton.js +7 -0
- package/dist/components/buttons/CollapseToggleButton.js.map +1 -0
- package/dist/components/cards/MetricsCard.d.ts +10 -0
- package/dist/components/cards/MetricsCard.d.ts.map +1 -0
- package/dist/components/cards/MetricsCard.js +27 -0
- package/dist/components/cards/MetricsCard.js.map +1 -0
- package/dist/components/cards/PatternCard.d.ts +15 -0
- package/dist/components/cards/PatternCard.d.ts.map +1 -0
- package/dist/components/cards/PatternCard.js +45 -0
- package/dist/components/cards/PatternCard.js.map +1 -0
- package/dist/components/cards/TipCard.d.ts +5 -0
- package/dist/components/cards/TipCard.d.ts.map +1 -0
- package/dist/components/cards/TipCard.js +10 -0
- package/dist/components/cards/TipCard.js.map +1 -0
- package/dist/components/chat/ChatHistorySection.d.ts +4 -0
- package/dist/components/chat/ChatHistorySection.d.ts.map +1 -0
- package/dist/components/chat/ChatHistorySection.js +121 -0
- package/dist/components/chat/ChatHistorySection.js.map +1 -0
- package/dist/components/chat/MessageBubble.d.ts +13 -0
- package/dist/components/chat/MessageBubble.d.ts.map +1 -0
- package/dist/components/chat/MessageBubble.js +19 -0
- package/dist/components/chat/MessageBubble.js.map +1 -0
- package/dist/components/display/CodeBlock.js +3 -3
- package/dist/components/display/CodeBlock.js.map +1 -1
- package/dist/components/display/IconBadge.d.ts +12 -0
- package/dist/components/display/IconBadge.d.ts.map +1 -0
- package/dist/components/display/IconBadge.js +26 -0
- package/dist/components/display/IconBadge.js.map +1 -0
- package/dist/components/display/SourceIcon.d.ts +7 -0
- package/dist/components/display/SourceIcon.d.ts.map +1 -0
- package/dist/components/display/SourceIcon.js +23 -0
- package/dist/components/display/SourceIcon.js.map +1 -0
- package/dist/components/display/StatusBadge.d.ts +14 -0
- package/dist/components/display/StatusBadge.d.ts.map +1 -0
- package/dist/components/display/StatusBadge.js +30 -0
- package/dist/components/display/StatusBadge.js.map +1 -0
- package/dist/components/display/StatusIndicator.d.ts +7 -0
- package/dist/components/display/StatusIndicator.d.ts.map +1 -0
- package/dist/components/display/StatusIndicator.js +26 -0
- package/dist/components/display/StatusIndicator.js.map +1 -0
- package/dist/components/display/Tag.d.ts +7 -0
- package/dist/components/display/Tag.d.ts.map +1 -0
- package/dist/components/display/Tag.js +12 -0
- package/dist/components/display/Tag.js.map +1 -0
- package/dist/components/feedback/GeneratingState.d.ts +12 -0
- package/dist/components/feedback/GeneratingState.d.ts.map +1 -0
- package/dist/components/feedback/GeneratingState.js +19 -0
- package/dist/components/feedback/GeneratingState.js.map +1 -0
- package/dist/components/feedback/SettingsModal.d.ts +4 -0
- package/dist/components/feedback/SettingsModal.d.ts.map +1 -0
- package/dist/components/feedback/SettingsModal.js +56 -0
- package/dist/components/feedback/SettingsModal.js.map +1 -0
- package/dist/components/index.d.ts +32 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +33 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/inputs/FilterDropdown.d.ts +14 -0
- package/dist/components/inputs/FilterDropdown.d.ts.map +1 -0
- package/dist/components/inputs/FilterDropdown.js +112 -0
- package/dist/components/inputs/FilterDropdown.js.map +1 -0
- package/dist/components/inputs/SearchInput.d.ts +14 -0
- package/dist/components/inputs/SearchInput.d.ts.map +1 -0
- package/dist/components/inputs/SearchInput.js +38 -0
- package/dist/components/inputs/SearchInput.js.map +1 -0
- package/dist/components/inputs/SettingsDropup.d.ts +10 -0
- package/dist/components/inputs/SettingsDropup.d.ts.map +1 -0
- package/dist/components/inputs/SettingsDropup.js +94 -0
- package/dist/components/inputs/SettingsDropup.js.map +1 -0
- package/dist/components/inputs/SuggestionChip.d.ts +10 -0
- package/dist/components/inputs/SuggestionChip.d.ts.map +1 -0
- package/dist/components/inputs/SuggestionChip.js +12 -0
- package/dist/components/inputs/SuggestionChip.js.map +1 -0
- package/dist/components/inputs/ToggleSwitch.d.ts +8 -0
- package/dist/components/inputs/ToggleSwitch.d.ts.map +1 -0
- package/dist/components/inputs/ToggleSwitch.js +29 -0
- package/dist/components/inputs/ToggleSwitch.js.map +1 -0
- package/dist/components/layout/GlassPanel.d.ts +4 -0
- package/dist/components/layout/GlassPanel.d.ts.map +1 -0
- package/dist/components/layout/GlassPanel.js +11 -0
- package/dist/components/layout/GlassPanel.js.map +1 -0
- package/dist/components/layout/Header.d.ts +4 -0
- package/dist/components/layout/Header.d.ts.map +1 -0
- package/dist/components/layout/Header.js +127 -0
- package/dist/components/layout/Header.js.map +1 -0
- package/dist/components/layout/ListItem.d.ts +10 -0
- package/dist/components/layout/ListItem.d.ts.map +1 -0
- package/dist/components/layout/ListItem.js +14 -0
- package/dist/components/layout/ListItem.js.map +1 -0
- package/dist/components/layout/MobileSidebar.d.ts +4 -0
- package/dist/components/layout/MobileSidebar.d.ts.map +1 -0
- package/dist/components/layout/MobileSidebar.js +45 -0
- package/dist/components/layout/MobileSidebar.js.map +1 -0
- package/dist/components/layout/NavMenu.d.ts +10 -0
- package/dist/components/layout/NavMenu.d.ts.map +1 -0
- package/dist/components/layout/NavMenu.js +68 -0
- package/dist/components/layout/NavMenu.js.map +1 -0
- package/dist/components/layout/NavTooltip.d.ts +10 -0
- package/dist/components/layout/NavTooltip.d.ts.map +1 -0
- package/dist/components/layout/NavTooltip.js +36 -0
- package/dist/components/layout/NavTooltip.js.map +1 -0
- package/dist/components/layout/SectionHeader.d.ts +13 -0
- package/dist/components/layout/SectionHeader.d.ts.map +1 -0
- package/dist/components/layout/SectionHeader.js +22 -0
- package/dist/components/layout/SectionHeader.js.map +1 -0
- package/dist/components/layout/SidePanel.d.ts +12 -0
- package/dist/components/layout/SidePanel.d.ts.map +1 -0
- package/dist/components/layout/SidePanel.js +79 -0
- package/dist/components/layout/SidePanel.js.map +1 -0
- package/dist/components/layout/Sidebar.d.ts +4 -0
- package/dist/components/layout/Sidebar.d.ts.map +1 -0
- package/dist/components/layout/Sidebar.js +15 -0
- package/dist/components/layout/Sidebar.js.map +1 -0
- package/dist/components/layout/SidebarLogo.d.ts +9 -0
- package/dist/components/layout/SidebarLogo.d.ts.map +1 -0
- package/dist/components/layout/SidebarLogo.js +10 -0
- package/dist/components/layout/SidebarLogo.js.map +1 -0
- package/dist/components/providers/LenisProvider.d.ts +22 -0
- package/dist/components/providers/LenisProvider.d.ts.map +1 -0
- package/dist/components/providers/LenisProvider.js +45 -0
- package/dist/components/providers/LenisProvider.js.map +1 -0
- package/dist/lib/constants/accessibility.d.ts +24 -0
- package/dist/lib/constants/accessibility.d.ts.map +1 -0
- package/dist/lib/constants/accessibility.js +26 -0
- package/dist/lib/constants/accessibility.js.map +1 -0
- package/dist/lib/constants/animations.d.ts +73 -0
- package/dist/lib/constants/animations.d.ts.map +1 -0
- package/dist/lib/constants/animations.js +48 -0
- package/dist/lib/constants/animations.js.map +1 -0
- package/dist/lib/constants/colors.d.ts +55 -0
- package/dist/lib/constants/colors.d.ts.map +1 -0
- package/dist/lib/constants/colors.js +55 -0
- package/dist/lib/constants/colors.js.map +1 -0
- package/dist/lib/constants/gradients.d.ts +29 -0
- package/dist/lib/constants/gradients.d.ts.map +1 -0
- package/dist/lib/constants/gradients.js +29 -0
- package/dist/lib/constants/gradients.js.map +1 -0
- package/dist/lib/constants/icons.d.ts +4 -0
- package/dist/lib/constants/icons.d.ts.map +1 -0
- package/dist/lib/constants/icons.js +23 -0
- package/dist/lib/constants/icons.js.map +1 -0
- package/dist/lib/constants/navigation.d.ts +3 -0
- package/dist/lib/constants/navigation.d.ts.map +1 -0
- package/dist/lib/constants/navigation.js +35 -0
- package/dist/lib/constants/navigation.js.map +1 -0
- package/dist/lib/constants/sizing.d.ts +61 -0
- package/dist/lib/constants/sizing.d.ts.map +1 -0
- package/dist/lib/constants/sizing.js +49 -0
- package/dist/lib/constants/sizing.js.map +1 -0
- package/dist/lib/constants/styles.d.ts +44 -0
- package/dist/lib/constants/styles.d.ts.map +1 -0
- package/dist/lib/constants/styles.js +44 -0
- package/dist/lib/constants/styles.js.map +1 -0
- package/dist/lib/constants.d.ts +32 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +105 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/types.d.ts +94 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +2 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/utils/accessibilityUtils.d.ts +9 -0
- package/dist/lib/utils/accessibilityUtils.d.ts.map +1 -0
- package/dist/lib/utils/accessibilityUtils.js +56 -0
- package/dist/lib/utils/accessibilityUtils.js.map +1 -0
- package/dist/lib/utils/pathUtils.d.ts +4 -0
- package/dist/lib/utils/pathUtils.d.ts.map +1 -0
- package/dist/lib/utils/pathUtils.js +16 -0
- package/dist/lib/utils/pathUtils.js.map +1 -0
- package/dist/styles.css +1 -1
- package/package.json +23 -14
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { Bell, BellOff, ChevronUp, LogOut, Settings, User } from 'lucide-react';
|
|
4
|
+
import { useEffect, useRef, useState } from 'react';
|
|
5
|
+
import { cn } from '../../lib/utils';
|
|
6
|
+
import { ToggleSwitch } from '../inputs/ToggleSwitch';
|
|
7
|
+
export function SettingsDropup({ userName = 'User', userEmail = 'user@example.com', initialNotifications = true, onNotificationsChange, onLogout, isCollapsed = false, }) {
|
|
8
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
9
|
+
const [notifications, setNotifications] = useState(initialNotifications);
|
|
10
|
+
const [focusedIndex, setFocusedIndex] = useState(-1);
|
|
11
|
+
const ref = useRef(null);
|
|
12
|
+
const triggerRef = useRef(null);
|
|
13
|
+
const notificationsItemRef = useRef(null);
|
|
14
|
+
const logoutItemRef = useRef(null);
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
const handleClickOutside = (event) => {
|
|
17
|
+
if (ref.current && !ref.current.contains(event.target)) {
|
|
18
|
+
setIsOpen(false);
|
|
19
|
+
setFocusedIndex(-1);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
document.addEventListener('mousedown', handleClickOutside);
|
|
23
|
+
return () => document.removeEventListener('mousedown', handleClickOutside);
|
|
24
|
+
}, []);
|
|
25
|
+
const focusableItemCount = 1 + (onLogout ? 1 : 0);
|
|
26
|
+
const handleSettingsKeyDown = (e) => {
|
|
27
|
+
if (!isOpen) {
|
|
28
|
+
if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {
|
|
29
|
+
e.preventDefault();
|
|
30
|
+
setIsOpen(true);
|
|
31
|
+
setFocusedIndex(0);
|
|
32
|
+
}
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
switch (e.key) {
|
|
36
|
+
case 'Escape':
|
|
37
|
+
e.preventDefault();
|
|
38
|
+
setIsOpen(false);
|
|
39
|
+
triggerRef.current?.focus();
|
|
40
|
+
break;
|
|
41
|
+
case 'ArrowDown':
|
|
42
|
+
e.preventDefault();
|
|
43
|
+
setFocusedIndex(prev => (prev < focusableItemCount - 1 ? prev + 1 : 0));
|
|
44
|
+
break;
|
|
45
|
+
case 'ArrowUp':
|
|
46
|
+
e.preventDefault();
|
|
47
|
+
setFocusedIndex(prev => (prev > 0 ? prev - 1 : focusableItemCount - 1));
|
|
48
|
+
break;
|
|
49
|
+
case 'Home':
|
|
50
|
+
e.preventDefault();
|
|
51
|
+
setFocusedIndex(0);
|
|
52
|
+
break;
|
|
53
|
+
case 'End':
|
|
54
|
+
e.preventDefault();
|
|
55
|
+
setFocusedIndex(focusableItemCount - 1);
|
|
56
|
+
break;
|
|
57
|
+
case 'Tab':
|
|
58
|
+
setIsOpen(false);
|
|
59
|
+
setFocusedIndex(-1);
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
useEffect(() => {
|
|
64
|
+
if (isOpen && focusedIndex >= 0) {
|
|
65
|
+
if (focusedIndex === 0) {
|
|
66
|
+
notificationsItemRef.current?.focus();
|
|
67
|
+
}
|
|
68
|
+
else if (focusedIndex === 1 && onLogout) {
|
|
69
|
+
logoutItemRef.current?.focus();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}, [focusedIndex, isOpen, onLogout]);
|
|
73
|
+
const handleNotificationsToggle = () => {
|
|
74
|
+
const newValue = !notifications;
|
|
75
|
+
setNotifications(newValue);
|
|
76
|
+
onNotificationsChange?.(newValue);
|
|
77
|
+
};
|
|
78
|
+
return (_jsxs("div", { ref: ref, className: cn('absolute bottom-6 transition-all duration-300', isCollapsed ? 'w-[56px] left-3' : 'w-[247px] left-4'), children: [_jsxs("div", { role: "menu", className: cn('absolute bottom-[52px] w-[247px]', 'bg-[rgba(10,5,20,0.98)] backdrop-blur-[20px] rounded-xl', 'border border-white/[0.08] shadow-[0px_-8px_32px_rgba(0,0,0,0.4)]', 'overflow-hidden z-50 transition-all duration-200 ease-[cubic-bezier(0.16,1,0.3,1)]', isCollapsed ? 'left-[-95px]' : 'left-0', isOpen
|
|
79
|
+
? 'opacity-100 translate-y-0 scale-100 pointer-events-auto'
|
|
80
|
+
: 'opacity-0 translate-y-2 scale-[0.96] pointer-events-none'), children: [_jsxs("div", { className: "p-3 px-3 border-b border-white/[0.06] flex items-center gap-2.5", children: [_jsx("div", { className: "w-9 h-9 rounded-full bg-violet-500/20 flex items-center justify-center border border-violet-500/30 shrink-0", children: _jsx(User, { size: 18, className: "text-violet-400", strokeWidth: 1.5 }) }), _jsxs("div", { className: "overflow-hidden", children: [_jsx("div", { className: "text-white text-[13px] font-medium font-[Sora,sans-serif] truncate", children: userName }), _jsx("div", { className: "text-gray-500 text-[11px] font-[Sora,sans-serif] truncate", children: userEmail })] })] }), _jsx("div", { className: "p-1.5", children: _jsxs("div", { ref: notificationsItemRef, role: "menuitem", tabIndex: focusedIndex === 0 && isOpen ? 0 : -1, onClick: handleNotificationsToggle, onKeyDown: e => {
|
|
81
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
82
|
+
e.preventDefault();
|
|
83
|
+
handleNotificationsToggle();
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
handleSettingsKeyDown(e);
|
|
87
|
+
}
|
|
88
|
+
}, className: cn('w-full py-2.5 px-2 flex items-center justify-between rounded-lg transition-colors cursor-pointer', focusedIndex === 0 && isOpen
|
|
89
|
+
? 'bg-white/[0.06]'
|
|
90
|
+
: 'hover:bg-white/[0.04]'), children: [_jsxs("div", { className: "flex items-center gap-2.5", children: [notifications ? (_jsx(Bell, { size: 15, className: "text-emerald-500", strokeWidth: 2 })) : (_jsx(BellOff, { size: 15, className: "text-gray-500", strokeWidth: 2 })), _jsx("span", { className: "text-gray-300 text-[13px] font-[Sora,sans-serif]", children: "Notifications" })] }), _jsx(ToggleSwitch, { enabled: notifications, size: "sm", "aria-label": "Toggle notifications" })] }) }), onLogout && (_jsx("div", { className: "p-1.5 border-t border-white/[0.06]", children: _jsxs("button", { ref: logoutItemRef, type: "button", role: "menuitem", tabIndex: focusedIndex === 1 && isOpen ? 0 : -1, onClick: onLogout, onKeyDown: handleSettingsKeyDown, className: cn('w-full py-2.5 px-2 flex items-center gap-2.5 bg-transparent border-none rounded-lg cursor-pointer transition-colors', focusedIndex === 1 && isOpen
|
|
91
|
+
? 'bg-red-500/10'
|
|
92
|
+
: 'hover:bg-red-500/10'), children: [_jsx(LogOut, { size: 15, className: "text-red-500", strokeWidth: 2 }), _jsx("span", { className: "text-red-500 text-[13px] font-[Sora,sans-serif]", children: "Sign out" })] }) }))] }), _jsx("div", { className: cn('border-t border-white/[0.08] transition-all duration-300', isCollapsed ? 'pt-2' : 'pt-3'), children: _jsxs("button", { ref: triggerRef, type: "button", onClick: () => setIsOpen(!isOpen), onKeyDown: handleSettingsKeyDown, "aria-label": "Open settings", "aria-expanded": isOpen, "aria-haspopup": "menu", className: cn('h-[41px] rounded-lg border-none cursor-pointer transition-all duration-300', 'flex items-center gap-3', isCollapsed ? 'w-[56px] justify-center pl-0' : 'w-[247px] pl-3', isOpen ? 'bg-white/[0.06]' : 'bg-transparent hover:bg-white/[0.04]'), children: [_jsx("div", { className: "w-5 h-6 flex items-center justify-center", children: _jsx(Settings, { size: 15, className: cn(isOpen ? 'text-violet-400' : 'text-gray-500'), strokeWidth: 2 }) }), !isCollapsed && (_jsxs(_Fragment, { children: [_jsx("span", { className: cn('text-sm font-normal leading-[21px] font-[Sora,sans-serif] flex-1 text-left transition-opacity duration-200', isOpen ? 'text-white' : 'text-gray-400'), children: "Settings" }), _jsx("div", { className: "w-[18px] h-[22px] flex items-center justify-center mr-3", children: _jsx(ChevronUp, { size: 12, className: cn('transition-transform duration-200', isOpen ? 'text-violet-400 rotate-180' : 'text-gray-600'), strokeWidth: 2 }) })] }))] }) })] }));
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=SettingsDropup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingsDropup.js","sourceRoot":"","sources":["../../../src/components/inputs/SettingsDropup.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface SuggestionChipProps {
|
|
2
|
+
suggestions: string[];
|
|
3
|
+
onSuggestionClick?: (suggestion: string) => void;
|
|
4
|
+
className?: string;
|
|
5
|
+
buttonSize?: string;
|
|
6
|
+
textSize?: string;
|
|
7
|
+
ariaLabelPrefix?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function SuggestionChip({ suggestions, onSuggestionClick, className, buttonSize, textSize, ariaLabelPrefix, }: SuggestionChipProps): import("react/jsx-runtime").JSX.Element | null;
|
|
10
|
+
//# sourceMappingURL=SuggestionChip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SuggestionChip.d.ts","sourceRoot":"","sources":["../../../src/components/inputs/SuggestionChip.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAoCD,wBAAgB,cAAc,CAAC,EAC7B,WAAW,EACX,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,QAAQ,EACR,eAA8B,GAC/B,EAAE,mBAAmB,kDAmBrB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { cn } from '../../lib/utils';
|
|
4
|
+
function Chip({ text, onClick, buttonSize, textSize, ariaLabel, }) {
|
|
5
|
+
return (_jsx("button", { type: "button", onClick: onClick, "aria-label": ariaLabel, className: cn(buttonSize || 'h-7 sm:h-[30px] px-2.5 sm:px-3', 'rounded-lg', 'bg-white/[0.03] border border-white/5', 'hover:bg-white/[0.05] transition-colors'), children: _jsx("span", { className: cn(textSize || 'text-[10px] sm:text-xs', 'text-gray-300'), children: text }) }));
|
|
6
|
+
}
|
|
7
|
+
export function SuggestionChip({ suggestions, onSuggestionClick, className, buttonSize, textSize, ariaLabelPrefix = 'Suggestion', }) {
|
|
8
|
+
if (suggestions.length === 0)
|
|
9
|
+
return null;
|
|
10
|
+
return (_jsx("div", { className: cn('flex items-center gap-1.5 sm:gap-2 flex-wrap', className), children: suggestions.map(suggestion => (_jsx(Chip, { text: suggestion, onClick: () => onSuggestionClick?.(suggestion), buttonSize: buttonSize, textSize: textSize, ariaLabel: `${ariaLabelPrefix}: ${suggestion}` }, suggestion))) }));
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=SuggestionChip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SuggestionChip.js","sourceRoot":"","sources":["../../../src/components/inputs/SuggestionChip.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAWrC,SAAS,IAAI,CAAC,EACZ,IAAI,EACJ,OAAO,EACP,UAAU,EACV,QAAQ,EACR,SAAS,GAOV;IACC,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,gBACJ,SAAS,EACrB,SAAS,EAAE,EAAE,CACX,UAAU,IAAI,gCAAgC,EAC9C,YAAY,EACZ,uCAAuC,EACvC,yCAAyC,CAC1C,YAED,eACE,SAAS,EAAE,EAAE,CAAC,QAAQ,IAAI,wBAAwB,EAAE,eAAe,CAAC,YAEnE,IAAI,GACA,GACA,CACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAC7B,WAAW,EACX,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,QAAQ,EACR,eAAe,GAAG,YAAY,GACV;IACpB,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE1C,OAAO,CACL,cACE,SAAS,EAAE,EAAE,CAAC,8CAA8C,EAAE,SAAS,CAAC,YAEvE,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAC7B,KAAC,IAAI,IAEH,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAC,UAAU,CAAC,EAC9C,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,GAAG,eAAe,KAAK,UAAU,EAAE,IALzC,UAAU,CAMf,CACH,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface ToggleSwitchProps {
|
|
2
|
+
enabled: boolean;
|
|
3
|
+
size?: 'sm' | 'default';
|
|
4
|
+
onChange?: (newState: boolean) => void;
|
|
5
|
+
'aria-label'?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function ToggleSwitch({ enabled, size, onChange, 'aria-label': ariaLabel, }: ToggleSwitchProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
//# sourceMappingURL=ToggleSwitch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToggleSwitch.d.ts","sourceRoot":"","sources":["../../../src/components/inputs/ToggleSwitch.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAeD,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,IAAgB,EAChB,QAAQ,EACR,YAAY,EAAE,SAAS,GACxB,EAAE,iBAAiB,2CAuCnB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { cn } from '../../lib/utils';
|
|
4
|
+
const sizeStyles = {
|
|
5
|
+
sm: {
|
|
6
|
+
container: 'w-9 h-5 rounded-[10px] p-0.5',
|
|
7
|
+
thumb: 'w-4 h-4',
|
|
8
|
+
translateX: 'translate-x-4',
|
|
9
|
+
},
|
|
10
|
+
default: {
|
|
11
|
+
container: 'w-11 h-6 rounded-xl p-0.5',
|
|
12
|
+
thumb: 'w-5 h-5',
|
|
13
|
+
translateX: 'translate-x-5',
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
export function ToggleSwitch({ enabled, size = 'default', onChange, 'aria-label': ariaLabel, }) {
|
|
17
|
+
const styles = sizeStyles[size];
|
|
18
|
+
const handleToggle = () => {
|
|
19
|
+
onChange?.(!enabled);
|
|
20
|
+
};
|
|
21
|
+
const handleKeyDown = (e) => {
|
|
22
|
+
if ((e.key === 'Enter' || e.key === ' ') && onChange) {
|
|
23
|
+
e.preventDefault();
|
|
24
|
+
handleToggle();
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
return (_jsx("span", { role: "switch", "aria-checked": enabled, "aria-label": ariaLabel, onClick: handleToggle, onKeyDown: onChange ? handleKeyDown : undefined, tabIndex: onChange ? 0 : undefined, className: cn('inline-block relative transition-colors duration-200', styles.container, enabled ? 'bg-emerald-500/30' : 'bg-gray-500/30', onChange && 'cursor-pointer'), children: _jsx("div", { className: cn('rounded-full transition-all duration-200', styles.thumb, enabled ? 'bg-emerald-500' : 'bg-gray-600', enabled && styles.translateX) }) }));
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=ToggleSwitch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToggleSwitch.js","sourceRoot":"","sources":["../../../src/components/inputs/ToggleSwitch.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AASrC,MAAM,UAAU,GAAG;IACjB,EAAE,EAAE;QACF,SAAS,EAAE,8BAA8B;QACzC,KAAK,EAAE,SAAS;QAChB,UAAU,EAAE,eAAe;KAC5B;IACD,OAAO,EAAE;QACP,SAAS,EAAE,2BAA2B;QACtC,KAAK,EAAE,SAAS;QAChB,UAAU,EAAE,eAAe;KAC5B;CACO,CAAC;AAEX,MAAM,UAAU,YAAY,CAAC,EAC3B,OAAO,EACP,IAAI,GAAG,SAAS,EAChB,QAAQ,EACR,YAAY,EAAE,SAAS,GACL;IAClB,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAEhC,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,CAAsB,EAAE,EAAE;QAC/C,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC;YACrD,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,YAAY,EAAE,CAAC;QACjB,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,eACE,IAAI,EAAC,QAAQ,kBACC,OAAO,gBACT,SAAS,EACrB,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,EAC/C,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAClC,SAAS,EAAE,EAAE,CACX,sDAAsD,EACtD,MAAM,CAAC,SAAS,EAChB,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,gBAAgB,EAChD,QAAQ,IAAI,gBAAgB,CAC7B,YAED,cACE,SAAS,EAAE,EAAE,CACX,0CAA0C,EAC1C,MAAM,CAAC,KAAK,EACZ,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,EAC1C,OAAO,IAAI,MAAM,CAAC,UAAU,CAC7B,GACD,GACG,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GlassPanel.d.ts","sourceRoot":"","sources":["../../../src/components/layout/GlassPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGvD,YAAY,EAAE,eAAe,EAAE,CAAC;AAOhC,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,OAAiB,EACjB,SAAc,GACf,EAAE,eAAe,2CAQjB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { cn } from '../../lib/utils';
|
|
4
|
+
const variantClasses = {
|
|
5
|
+
light: 'bg-white/[0.02] border-white/[0.06] backdrop-blur-sm',
|
|
6
|
+
heavy: 'bg-white/[0.02] border-white/[0.08] backdrop-blur-md',
|
|
7
|
+
};
|
|
8
|
+
export function GlassPanel({ children, variant = 'light', className = '', }) {
|
|
9
|
+
return (_jsx("div", { className: cn('rounded-xl border', variantClasses[variant], className), children: children }));
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=GlassPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GlassPanel.js","sourceRoot":"","sources":["../../../src/components/layout/GlassPanel.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAIrC,MAAM,cAAc,GAAG;IACrB,KAAK,EAAE,sDAAsD;IAC7D,KAAK,EAAE,sDAAsD;CACrD,CAAC;AAEX,MAAM,UAAU,UAAU,CAAC,EACzB,QAAQ,EACR,OAAO,GAAG,OAAO,EACjB,SAAS,GAAG,EAAE,GACE;IAChB,OAAO,CACL,cACE,SAAS,EAAE,EAAE,CAAC,mBAAmB,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,YAErE,QAAQ,GACL,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { DateRangeOption, HeaderProps } from '../../lib/types';
|
|
2
|
+
export type { DateRangeOption, HeaderProps };
|
|
3
|
+
export declare function Header({ orgName, dateRange, onDateRangeChange, dateRangeOptions, userInitials, showNotification, onNotificationClick, onAvatarClick, minimal, onMenuClick, logoSrc, }: HeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
//# sourceMappingURL=Header.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../src/components/layout/Header.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAKpE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC;AA8G7C,wBAAgB,MAAM,CAAC,EACrB,OAA6B,EAC7B,SAAyB,EACzB,iBAAiB,EACjB,gBAA0C,EAC1C,YAAmB,EACnB,gBAAuB,EACvB,mBAAmB,EACnB,aAAa,EACb,OAAe,EACf,WAAW,EACX,OAAO,GACR,EAAE,WAAW,2CAoEb"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Bell, Calendar, Check, ChevronDown, Menu } from 'lucide-react';
|
|
4
|
+
import React, { useEffect, useRef, useState } from 'react';
|
|
5
|
+
import { cn } from '../../lib/utils';
|
|
6
|
+
const DropdownOption = React.forwardRef(({ option, isSelected, isFocused, handleSelect, index }, ref) => (_jsxs("button", { ref: ref, type: "button", role: "option", id: `option-${index}`, "aria-selected": isSelected, onClick: () => handleSelect(option), className: cn('w-full px-3 py-2.5 flex items-center justify-between rounded-lg transition-all', isSelected && 'bg-violet-500/15', isFocused && !isSelected && 'bg-white/[0.04]', !isSelected && !isFocused && 'hover:bg-white/[0.04]'), children: [_jsx("span", { className: cn('text-[13px]', isSelected ? 'text-violet-200 font-medium' : 'text-gray-300 font-normal'), children: option.label }), isSelected && (_jsx(Check, { size: 14, className: "text-violet-400", strokeWidth: 2.5 }))] })));
|
|
7
|
+
DropdownOption.displayName = 'DropdownOption';
|
|
8
|
+
const defaultDateRangeOptions = [
|
|
9
|
+
{ label: 'Today', value: 'today' },
|
|
10
|
+
{ label: 'Yesterday', value: 'yesterday' },
|
|
11
|
+
{ label: 'Last 7 days', value: 'last_7_days' },
|
|
12
|
+
{ label: 'Last 14 days', value: 'last_14_days' },
|
|
13
|
+
{ label: 'Last 30 days', value: 'last_30_days' },
|
|
14
|
+
{ label: 'This month', value: 'this_month' },
|
|
15
|
+
{ label: 'Last month', value: 'last_month' },
|
|
16
|
+
{ label: 'This quarter', value: 'this_quarter' },
|
|
17
|
+
];
|
|
18
|
+
const useClickOutsideDropdown = (dropdownRef, isOpen, onClose) => {
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
if (!isOpen)
|
|
21
|
+
return;
|
|
22
|
+
const handleClickOutside = (event) => {
|
|
23
|
+
if (dropdownRef.current &&
|
|
24
|
+
!dropdownRef.current.contains(event.target)) {
|
|
25
|
+
onClose();
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
document.addEventListener('mousedown', handleClickOutside);
|
|
29
|
+
return () => document.removeEventListener('mousedown', handleClickOutside);
|
|
30
|
+
}, [isOpen, onClose, dropdownRef]);
|
|
31
|
+
};
|
|
32
|
+
export function Header({ orgName = 'Global Retail Ops', dateRange = 'Last 7 days', onDateRangeChange, dateRangeOptions = defaultDateRangeOptions, userInitials = 'SJ', showNotification = true, onNotificationClick, onAvatarClick, minimal = false, onMenuClick, logoSrc, }) {
|
|
33
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
34
|
+
const [selectedRange, setSelectedRange] = useState(dateRange);
|
|
35
|
+
const dropdownRef = useRef(null);
|
|
36
|
+
// eslint-disable-next-line react-hooks/set-state-in-effect, react-hooks-extra/no-direct-set-state-in-use-effect
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
setSelectedRange(dateRange);
|
|
39
|
+
}, [dateRange]);
|
|
40
|
+
useClickOutsideDropdown(dropdownRef, isOpen, () => setIsOpen(false));
|
|
41
|
+
const handleSelect = (option) => {
|
|
42
|
+
setSelectedRange(option.label);
|
|
43
|
+
setIsOpen(false);
|
|
44
|
+
onDateRangeChange?.(option.value);
|
|
45
|
+
};
|
|
46
|
+
return (_jsxs("header", { className: "w-full h-16 sticky top-0 flex-shrink-0 z-50 flex items-center justify-between px-4 sm:px-6 lg:px-8 border-b border-white/[0.06] bg-[rgba(3,0,5,0.85)] backdrop-blur-xl", children: [_jsxs("div", { className: "flex items-center gap-3 md:hidden", children: [onMenuClick && (_jsx("button", { type: "button", onClick: onMenuClick, className: "w-8 h-8 flex items-center justify-center rounded-lg transition-colors hover:bg-white/[0.06]", "aria-label": "Toggle menu", children: _jsx(Menu, { size: 20, className: "text-gray-400", strokeWidth: 2 }) })), logoSrc && (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("img", { src: logoSrc, alt: "CROW Client logo", className: "w-6 h-6" }), _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "text-sm font-bold text-white leading-none", children: "CROW" }), _jsx("span", { className: "text-[8px] font-medium text-gray-500 tracking-[0.15em] uppercase leading-none", children: "CLIENT" })] })] }))] }), !minimal && (_jsx(LeftSection, { orgName: orgName, selectedRange: selectedRange, isOpen: isOpen, setIsOpen: setIsOpen, dropdownRef: dropdownRef, dateRangeOptions: dateRangeOptions, handleSelect: handleSelect })), minimal && _jsx("div", { className: "hidden md:block flex-1" }), _jsx(RightSection, { showNotification: showNotification, onNotificationClick: onNotificationClick, onAvatarClick: onAvatarClick, userInitials: userInitials })] }));
|
|
47
|
+
}
|
|
48
|
+
function LeftSection({ orgName, selectedRange, isOpen, setIsOpen, dropdownRef, dateRangeOptions, handleSelect, }) {
|
|
49
|
+
return (_jsxs("div", { className: "hidden md:flex items-center gap-3 sm:gap-6 min-w-0", children: [_jsx("span", { className: "text-sm font-medium text-white tracking-wide hidden sm:block truncate max-w-[140px] lg:max-w-none", children: orgName }), _jsx("div", { className: "hidden sm:block w-px h-4 bg-white/10" }), _jsx(DatePickerDropdown, { selectedRange: selectedRange, isOpen: isOpen, setIsOpen: setIsOpen, dropdownRef: dropdownRef, dateRangeOptions: dateRangeOptions, handleSelect: handleSelect })] }));
|
|
50
|
+
}
|
|
51
|
+
const handleDropdownKeyDown = (e, isOpen, focusedIndex, dateRangeOptions, setIsOpen, setFocusedIndex, handleSelect) => {
|
|
52
|
+
if (!isOpen) {
|
|
53
|
+
if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {
|
|
54
|
+
e.preventDefault();
|
|
55
|
+
setIsOpen(true);
|
|
56
|
+
setFocusedIndex(0);
|
|
57
|
+
}
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
switch (e.key) {
|
|
61
|
+
case 'Escape':
|
|
62
|
+
e.preventDefault();
|
|
63
|
+
setIsOpen(false);
|
|
64
|
+
setFocusedIndex(-1);
|
|
65
|
+
break;
|
|
66
|
+
case 'ArrowDown':
|
|
67
|
+
e.preventDefault();
|
|
68
|
+
setFocusedIndex(focusedIndex < dateRangeOptions.length - 1 ? focusedIndex + 1 : 0);
|
|
69
|
+
break;
|
|
70
|
+
case 'ArrowUp':
|
|
71
|
+
e.preventDefault();
|
|
72
|
+
setFocusedIndex(focusedIndex > 0 ? focusedIndex - 1 : dateRangeOptions.length - 1);
|
|
73
|
+
break;
|
|
74
|
+
case 'Home':
|
|
75
|
+
e.preventDefault();
|
|
76
|
+
setFocusedIndex(0);
|
|
77
|
+
break;
|
|
78
|
+
case 'End':
|
|
79
|
+
e.preventDefault();
|
|
80
|
+
setFocusedIndex(dateRangeOptions.length - 1);
|
|
81
|
+
break;
|
|
82
|
+
case 'Enter':
|
|
83
|
+
case ' ':
|
|
84
|
+
e.preventDefault();
|
|
85
|
+
if (focusedIndex >= 0 && focusedIndex < dateRangeOptions.length) {
|
|
86
|
+
handleSelect(dateRangeOptions[focusedIndex]);
|
|
87
|
+
setFocusedIndex(-1);
|
|
88
|
+
}
|
|
89
|
+
break;
|
|
90
|
+
case 'Tab':
|
|
91
|
+
setIsOpen(false);
|
|
92
|
+
setFocusedIndex(-1);
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
function DatePickerDropdown({ selectedRange, isOpen, setIsOpen, dropdownRef, dateRangeOptions, handleSelect, }) {
|
|
97
|
+
const [focusedIndex, setFocusedIndex] = useState(-1);
|
|
98
|
+
const optionRefs = useRef([]);
|
|
99
|
+
useEffect(() => {
|
|
100
|
+
if (focusedIndex >= 0 && focusedIndex < optionRefs.current.length) {
|
|
101
|
+
optionRefs.current[focusedIndex]?.scrollIntoView({ block: 'nearest' });
|
|
102
|
+
}
|
|
103
|
+
}, [focusedIndex]);
|
|
104
|
+
const handleKeyDown = (e) => {
|
|
105
|
+
handleDropdownKeyDown(e, isOpen, focusedIndex, dateRangeOptions, setIsOpen, setFocusedIndex, handleSelect);
|
|
106
|
+
};
|
|
107
|
+
return (_jsxs("div", { ref: dropdownRef, className: "relative", children: [_jsxs("button", { type: "button", onClick: () => setIsOpen(!isOpen), onKeyDown: handleKeyDown, "aria-label": "Select date range", "aria-expanded": isOpen, "aria-haspopup": "listbox", className: cn('h-[30px] px-3 flex items-center gap-2 rounded-full transition-all', isOpen
|
|
108
|
+
? 'bg-violet-500/15 outline outline-1 outline-violet-500/40 -outline-offset-1'
|
|
109
|
+
: 'bg-white/[0.03] outline outline-1 outline-white/10 -outline-offset-1'), children: [_jsx(Calendar, { size: 12, className: cn(isOpen ? 'text-violet-400' : 'text-gray-400'), strokeWidth: 2 }), _jsx("span", { className: cn('text-xs font-medium whitespace-nowrap', isOpen ? 'text-violet-200' : 'text-gray-300'), children: selectedRange }), _jsx(ChevronDown, { size: 10, className: cn('transition-transform duration-200', isOpen ? 'text-violet-400 rotate-180' : 'text-gray-500'), strokeWidth: 2 })] }), _jsx(DropdownMenu, { isOpen: isOpen, dateRangeOptions: dateRangeOptions, selectedRange: selectedRange, handleSelect: handleSelect, focusedIndex: focusedIndex, optionRefs: optionRefs })] }));
|
|
110
|
+
}
|
|
111
|
+
function DropdownMenu({ isOpen, dateRangeOptions, selectedRange, handleSelect, focusedIndex, optionRefs, }) {
|
|
112
|
+
return (_jsxs("div", { role: "listbox", "aria-label": "Date range options", "aria-activedescendant": focusedIndex >= 0 ? `option-${focusedIndex}` : undefined, className: cn('absolute top-[38px] left-0 w-[200px] rounded-xl overflow-hidden z-50', 'bg-[rgba(10,5,20,0.98)] backdrop-blur-[20px]', 'border border-white/[0.08]', 'shadow-[0px_20px_40px_rgba(0,0,0,0.5),0px_0px_1px_rgba(139,92,246,0.3)]', 'transition-all duration-200 ease-[cubic-bezier(0.16,1,0.3,1)]', isOpen
|
|
113
|
+
? 'opacity-100 translate-y-0 scale-100 pointer-events-auto'
|
|
114
|
+
: 'opacity-0 -translate-y-2 scale-[0.96] pointer-events-none'), children: [_jsx("div", { className: "px-4 pt-3 pb-2 border-b border-white/[0.06]", children: _jsx("span", { className: "text-[10px] font-semibold uppercase tracking-wide text-gray-500", children: "Select time range" }) }), _jsx("div", { className: "p-1.5", children: dateRangeOptions.map((option, index) => {
|
|
115
|
+
const isSelected = selectedRange === option.label;
|
|
116
|
+
const isFocused = focusedIndex === index;
|
|
117
|
+
return (_jsx(DropdownOption, { option: option, isSelected: isSelected, isFocused: isFocused, handleSelect: handleSelect, index: index, ref: el => {
|
|
118
|
+
if (optionRefs.current) {
|
|
119
|
+
optionRefs.current[index] = el;
|
|
120
|
+
}
|
|
121
|
+
} }, option.value));
|
|
122
|
+
}) }), _jsx("div", { className: "px-4 py-2 border-t border-white/[0.06] bg-gradient-to-b from-transparent to-violet-500/[0.03]", children: _jsx("span", { className: "text-[10px] text-gray-600", children: "Data refreshes every 5 min" }) })] }));
|
|
123
|
+
}
|
|
124
|
+
function RightSection({ showNotification, onNotificationClick, onAvatarClick, userInitials, }) {
|
|
125
|
+
return (_jsxs("div", { className: "flex items-center gap-2", children: [_jsxs("button", { type: "button", onClick: onNotificationClick, "aria-label": showNotification ? 'View notifications (new)' : 'View notifications', className: "w-8 h-8 flex items-center justify-center rounded-lg relative transition-colors hover:bg-white/[0.06]", children: [_jsx(Bell, { size: 16, className: "text-gray-500", strokeWidth: 2 }), showNotification && (_jsx("div", { className: "absolute top-1.5 right-1.5 w-1.5 h-1.5 rounded-full bg-violet-500 border-[1.5px] border-[rgba(3,0,5,0.9)]" }))] }), _jsx("button", { type: "button", onClick: onAvatarClick, "aria-label": "User menu", className: "w-8 h-8 rounded-full flex items-center justify-center bg-violet-900/40 outline outline-1 outline-white/10 -outline-offset-1 transition-all hover:outline-violet-500/40", children: _jsx("span", { className: "text-xs font-semibold text-white", children: userInitials }) })] }));
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=Header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/components/layout/Header.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
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
|
+
export declare function ListItem({ children, onClick, ariaLabel, showChevron, highlighted, className, }: ListItemProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=ListItem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListItem.d.ts","sourceRoot":"","sources":["../../../src/components/layout/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;AAcD,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,EACR,OAAO,EACP,SAAS,EACT,WAAmB,EACnB,WAAmB,EACnB,SAAS,GACV,EAAE,aAAa,2CAsBf"}
|
|
@@ -0,0 +1,14 @@
|
|
|
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
|
+
function ChevronIndicator() {
|
|
6
|
+
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 }) }));
|
|
7
|
+
}
|
|
8
|
+
export function ListItem({ children, onClick, ariaLabel, showChevron = false, highlighted = false, className, }) {
|
|
9
|
+
const highlightStyles = highlighted
|
|
10
|
+
? 'border-l-2 border-l-violet-500 bg-violet-500/[0.02] pl-3 sm:pl-3.5'
|
|
11
|
+
: 'hover:bg-white/[0.02]';
|
|
12
|
+
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', highlightStyles, className), children: _jsxs("div", { className: "flex items-start justify-between", children: [_jsx("div", { className: "flex-1 min-w-0", children: children }), showChevron && _jsx(ChevronIndicator, {})] }) }));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=ListItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListItem.js","sourceRoot":"","sources":["../../../src/components/layout/ListItem.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAWrC,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;AAED,MAAM,UAAU,QAAQ,CAAC,EACvB,QAAQ,EACR,OAAO,EACP,SAAS,EACT,WAAW,GAAG,KAAK,EACnB,WAAW,GAAG,KAAK,EACnB,SAAS,GACK;IACd,MAAM,eAAe,GAAG,WAAW;QACjC,CAAC,CAAC,oEAAoE;QACtE,CAAC,CAAC,uBAAuB,CAAC;IAE5B,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,gBACJ,SAAS,EACrB,SAAS,EAAE,EAAE,CACX,gFAAgF,EAChF,eAAe,EACf,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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { MobileSidebarProps } from '../../lib/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/layout/MobileSidebar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAW1D,YAAY,EAAE,kBAAkB,EAAE,CAAC;AAwBnC,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,OAAO,EACP,QAA4B,EAC5B,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,2CA8FpB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
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 '../chat/ChatHistorySection';
|
|
7
|
+
import { DEFAULT_NAV_ITEMS } from '../../lib/constants/navigation';
|
|
8
|
+
import { NavMenu } from './NavMenu';
|
|
9
|
+
import { SettingsDropup } from '../inputs/SettingsDropup';
|
|
10
|
+
import { SidebarLogo } from './SidebarLogo';
|
|
11
|
+
import { normalizePath } from '../../lib/utils/pathUtils';
|
|
12
|
+
const useBodyScrollLock = (isOpen, onClose) => {
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
if (!isOpen) {
|
|
15
|
+
document.body.style.overflow = '';
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
document.body.style.overflow = 'hidden';
|
|
19
|
+
const handleEscapeKey = (e) => {
|
|
20
|
+
if (e.key === 'Escape') {
|
|
21
|
+
onClose();
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
document.addEventListener('keydown', handleEscapeKey);
|
|
25
|
+
return () => {
|
|
26
|
+
document.removeEventListener('keydown', handleEscapeKey);
|
|
27
|
+
document.body.style.overflow = '';
|
|
28
|
+
};
|
|
29
|
+
}, [isOpen, onClose]);
|
|
30
|
+
};
|
|
31
|
+
export function MobileSidebar({ isOpen, onClose, navItems = DEFAULT_NAV_ITEMS, 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, }) {
|
|
32
|
+
useBodyScrollLock(isOpen, onClose);
|
|
33
|
+
const normalizedHref = normalizePath(activeHref);
|
|
34
|
+
const showChatHistory = normalizedHref === '/ask-crow';
|
|
35
|
+
const handleNavigate = (href) => {
|
|
36
|
+
onNavigate?.(href);
|
|
37
|
+
onClose();
|
|
38
|
+
};
|
|
39
|
+
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: {
|
|
40
|
+
background: 'linear-gradient(180deg, rgba(255, 255, 255, 0.02) 0%, rgba(255, 255, 255, 0) 100%)',
|
|
41
|
+
} }), _jsx("div", { className: "absolute left-0 top-0 w-[279px] h-32 opacity-50 pointer-events-none", style: {
|
|
42
|
+
background: 'linear-gradient(180deg, #100B1A 0%, rgba(16, 11, 26, 0) 100%)',
|
|
43
|
+
} }), _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 }))] })] })] })) }));
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=MobileSidebar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MobileSidebar.js","sourceRoot":"","sources":["../../../src/components/layout/MobileSidebar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { NavItem } from '../../lib/types';
|
|
2
|
+
export interface NavMenuProps {
|
|
3
|
+
items: NavItem[];
|
|
4
|
+
activeHref: string;
|
|
5
|
+
onNavigate?: (href: string) => void;
|
|
6
|
+
isCollapsed?: boolean;
|
|
7
|
+
onRequestExpand?: (menuLabel: string) => void;
|
|
8
|
+
}
|
|
9
|
+
export declare function NavMenu({ items, activeHref, onNavigate, isCollapsed, onRequestExpand }: NavMenuProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=NavMenu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NavMenu.d.ts","sourceRoot":"","sources":["../../../src/components/layout/NavMenu.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAO/C,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;IACpC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C;AAoBD,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,WAAmB,EAAE,eAAe,EAAE,EAAE,YAAY,2CA2K5G"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { ChevronDown } from 'lucide-react';
|
|
4
|
+
import { useEffect, useRef, useState } from 'react';
|
|
5
|
+
import { cn } from '../../lib/utils';
|
|
6
|
+
import { ICON_REGISTRY } from '../../lib/constants/icons';
|
|
7
|
+
import { isActivePath } from '../../lib/utils/pathUtils';
|
|
8
|
+
const isSubmenuActive = (subItems, activeHref) => subItems?.some(item => isActivePath(activeHref, item.href));
|
|
9
|
+
function renderIcon(iconName, active) {
|
|
10
|
+
const IconComponent = ICON_REGISTRY[iconName];
|
|
11
|
+
if (!IconComponent)
|
|
12
|
+
return null;
|
|
13
|
+
return (_jsx(IconComponent, { size: 15, className: cn('transition-colors', active ? 'text-violet-300' : 'text-gray-500'), strokeWidth: 2 }));
|
|
14
|
+
}
|
|
15
|
+
export function NavMenu({ items, activeHref, onNavigate, isCollapsed = false, onRequestExpand }) {
|
|
16
|
+
const [expandedMenus, setExpandedMenus] = useState(() => items
|
|
17
|
+
.filter(item => item.submenu && isSubmenuActive(item.submenu, activeHref))
|
|
18
|
+
.map(item => item.label));
|
|
19
|
+
const prevCollapsedRef = useRef(isCollapsed);
|
|
20
|
+
// eslint-disable-next-line react-hooks/set-state-in-effect
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
if (isCollapsed && !prevCollapsedRef.current) {
|
|
23
|
+
setExpandedMenus([]);
|
|
24
|
+
}
|
|
25
|
+
prevCollapsedRef.current = isCollapsed;
|
|
26
|
+
}, [isCollapsed]);
|
|
27
|
+
const toggleMenu = (label) => {
|
|
28
|
+
if (isCollapsed) {
|
|
29
|
+
setExpandedMenus([label]);
|
|
30
|
+
onRequestExpand?.(label);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
setExpandedMenus(prev => prev.includes(label) ? prev.filter(l => l !== label) : [...prev, label]);
|
|
34
|
+
};
|
|
35
|
+
const handleNavigate = (href, e) => {
|
|
36
|
+
e.preventDefault();
|
|
37
|
+
onNavigate?.(href);
|
|
38
|
+
};
|
|
39
|
+
const handleKeyDown = (label, e) => {
|
|
40
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
41
|
+
e.preventDefault();
|
|
42
|
+
toggleMenu(label);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
return (_jsx("nav", { className: cn('mt-2 flex flex-col gap-1 transition-[width,margin] duration-300', isCollapsed ? 'w-[56px] ml-3' : 'w-[247px] ml-4'), children: items.map(item => {
|
|
46
|
+
const itemIsActive = item.submenu
|
|
47
|
+
? isSubmenuActive(item.submenu, activeHref)
|
|
48
|
+
: isActivePath(activeHref, item.href);
|
|
49
|
+
const expanded = item.submenu && expandedMenus.includes(item.label);
|
|
50
|
+
const submenuHeight = item.submenu ? item.submenu.length * 35.5 : 0;
|
|
51
|
+
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('h-[41px] relative rounded-lg border-none cursor-pointer', 'flex items-center gap-3 transition-all duration-300', isCollapsed ? 'w-[56px] justify-center pl-0' : 'w-[247px] pl-3', expanded && !isCollapsed
|
|
52
|
+
? 'bg-white/[0.03]'
|
|
53
|
+
: '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) }), !isCollapsed && (_jsxs(_Fragment, { children: [_jsx("span", { className: cn('text-sm font-normal leading-[21px] flex-1 text-left font-[Sora,sans-serif]', 'transition-opacity duration-200', 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 }) })] }))] }), !isCollapsed && (_jsx("div", { className: "ml-11 overflow-hidden transition-all duration-250", style: {
|
|
54
|
+
maxHeight: expanded ? submenuHeight : 0,
|
|
55
|
+
opacity: expanded ? 1 : 0,
|
|
56
|
+
}, children: item.submenu.map(subitem => {
|
|
57
|
+
const subActive = isActivePath(subitem.href, activeHref);
|
|
58
|
+
return (_jsxs("a", { href: subitem.href, onClick: e => handleNavigate(subitem.href, e), className: cn('w-[203px] h-[35.5px] rounded-lg flex items-center pl-3 gap-2', 'no-underline cursor-pointer transition-colors duration-150', subActive
|
|
59
|
+
? 'bg-violet-500/10'
|
|
60
|
+
: 'bg-transparent hover:bg-white/[0.04]'), children: [subActive && (_jsx("div", { className: "w-1.5 h-1.5 rounded-full bg-gradient-to-br from-violet-400 to-violet-600 shrink-0" })), _jsx("span", { className: cn('text-[13px] leading-[19.5px] font-[Sora,sans-serif] transition-colors duration-150', subActive
|
|
61
|
+
? 'text-violet-300 font-medium'
|
|
62
|
+
: 'text-gray-500 font-normal'), children: subitem.label })] }, subitem.label));
|
|
63
|
+
}) }))] }, item.label)) : (_jsxs("a", { href: item.href, onClick: e => handleNavigate(item.href, e), className: cn('h-[41px] rounded-lg flex items-center gap-3', 'no-underline cursor-pointer transition-all duration-300', isCollapsed ? 'w-[56px] justify-center pl-0' : 'w-[247px] pl-3', itemIsActive
|
|
64
|
+
? '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'
|
|
65
|
+
: '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) }), !isCollapsed && (_jsx("span", { className: cn('text-sm font-normal leading-[21px] font-[Sora,sans-serif] transition-opacity duration-200', itemIsActive ? 'text-white' : 'text-gray-400'), children: item.label }))] }, item.label));
|
|
66
|
+
}) }));
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=NavMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NavMenu.js","sourceRoot":"","sources":["../../../src/components/layout/NavMenu.tsx"],"names":[],"mappings":"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"}
|