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

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 (120) hide show
  1. package/dist/components/cards/InvitationDetailsCard.d.ts +7 -4
  2. package/dist/components/cards/InvitationDetailsCard.d.ts.map +1 -1
  3. package/dist/components/cards/InvitationDetailsCard.js +4 -2
  4. package/dist/components/cards/InvitationDetailsCard.js.map +1 -1
  5. package/dist/components/index.d.ts +0 -1
  6. package/dist/components/index.d.ts.map +1 -1
  7. package/dist/components/index.js +0 -1
  8. package/dist/components/index.js.map +1 -1
  9. package/dist/components/inputs/EmailTagInput.js +1 -1
  10. package/dist/components/inputs/EmailTagInput.js.map +1 -1
  11. package/dist/styles.css +1 -1
  12. package/package.json +13 -20
  13. package/dist/components/dashboard/ChatHistorySection.d.ts +0 -4
  14. package/dist/components/dashboard/ChatHistorySection.d.ts.map +0 -1
  15. package/dist/components/dashboard/ChatHistorySection.js +0 -119
  16. package/dist/components/dashboard/ChatHistorySection.js.map +0 -1
  17. package/dist/components/dashboard/DashboardBackground.d.ts +0 -4
  18. package/dist/components/dashboard/DashboardBackground.d.ts.map +0 -1
  19. package/dist/components/dashboard/DashboardBackground.js +0 -12
  20. package/dist/components/dashboard/DashboardBackground.js.map +0 -1
  21. package/dist/components/dashboard/FilterDropdown.d.ts +0 -14
  22. package/dist/components/dashboard/FilterDropdown.d.ts.map +0 -1
  23. package/dist/components/dashboard/FilterDropdown.js +0 -114
  24. package/dist/components/dashboard/FilterDropdown.js.map +0 -1
  25. package/dist/components/dashboard/GlassPanel.d.ts +0 -13
  26. package/dist/components/dashboard/GlassPanel.d.ts.map +0 -1
  27. package/dist/components/dashboard/GlassPanel.js +0 -20
  28. package/dist/components/dashboard/GlassPanel.js.map +0 -1
  29. package/dist/components/dashboard/Header.d.ts +0 -4
  30. package/dist/components/dashboard/Header.d.ts.map +0 -1
  31. package/dist/components/dashboard/Header.js +0 -123
  32. package/dist/components/dashboard/Header.js.map +0 -1
  33. package/dist/components/dashboard/IconBadge.d.ts +0 -22
  34. package/dist/components/dashboard/IconBadge.d.ts.map +0 -1
  35. package/dist/components/dashboard/IconBadge.js +0 -44
  36. package/dist/components/dashboard/IconBadge.js.map +0 -1
  37. package/dist/components/dashboard/ListItem.d.ts +0 -22
  38. package/dist/components/dashboard/ListItem.d.ts.map +0 -1
  39. package/dist/components/dashboard/ListItem.js +0 -25
  40. package/dist/components/dashboard/ListItem.js.map +0 -1
  41. package/dist/components/dashboard/MetricsCard.d.ts +0 -10
  42. package/dist/components/dashboard/MetricsCard.d.ts.map +0 -1
  43. package/dist/components/dashboard/MetricsCard.js +0 -41
  44. package/dist/components/dashboard/MetricsCard.js.map +0 -1
  45. package/dist/components/dashboard/MobileSidebar.d.ts +0 -4
  46. package/dist/components/dashboard/MobileSidebar.d.ts.map +0 -1
  47. package/dist/components/dashboard/MobileSidebar.js +0 -57
  48. package/dist/components/dashboard/MobileSidebar.js.map +0 -1
  49. package/dist/components/dashboard/NavMenu.d.ts +0 -8
  50. package/dist/components/dashboard/NavMenu.d.ts.map +0 -1
  51. package/dist/components/dashboard/NavMenu.js +0 -66
  52. package/dist/components/dashboard/NavMenu.js.map +0 -1
  53. package/dist/components/dashboard/PatternCard.d.ts +0 -15
  54. package/dist/components/dashboard/PatternCard.d.ts.map +0 -1
  55. package/dist/components/dashboard/PatternCard.js +0 -36
  56. package/dist/components/dashboard/PatternCard.js.map +0 -1
  57. package/dist/components/dashboard/SearchInput.d.ts +0 -30
  58. package/dist/components/dashboard/SearchInput.d.ts.map +0 -1
  59. package/dist/components/dashboard/SearchInput.js +0 -52
  60. package/dist/components/dashboard/SearchInput.js.map +0 -1
  61. package/dist/components/dashboard/SectionHeader.d.ts +0 -13
  62. package/dist/components/dashboard/SectionHeader.d.ts.map +0 -1
  63. package/dist/components/dashboard/SectionHeader.js +0 -19
  64. package/dist/components/dashboard/SectionHeader.js.map +0 -1
  65. package/dist/components/dashboard/SettingsDropup.d.ts +0 -9
  66. package/dist/components/dashboard/SettingsDropup.d.ts.map +0 -1
  67. package/dist/components/dashboard/SettingsDropup.js +0 -98
  68. package/dist/components/dashboard/SettingsDropup.js.map +0 -1
  69. package/dist/components/dashboard/SettingsModal.d.ts +0 -4
  70. package/dist/components/dashboard/SettingsModal.d.ts.map +0 -1
  71. package/dist/components/dashboard/SettingsModal.js +0 -56
  72. package/dist/components/dashboard/SettingsModal.js.map +0 -1
  73. package/dist/components/dashboard/SidePanel.d.ts +0 -12
  74. package/dist/components/dashboard/SidePanel.d.ts.map +0 -1
  75. package/dist/components/dashboard/SidePanel.js +0 -79
  76. package/dist/components/dashboard/SidePanel.js.map +0 -1
  77. package/dist/components/dashboard/Sidebar.d.ts +0 -4
  78. package/dist/components/dashboard/Sidebar.d.ts.map +0 -1
  79. package/dist/components/dashboard/Sidebar.js +0 -28
  80. package/dist/components/dashboard/Sidebar.js.map +0 -1
  81. package/dist/components/dashboard/SidebarLogo.d.ts +0 -7
  82. package/dist/components/dashboard/SidebarLogo.d.ts.map +0 -1
  83. package/dist/components/dashboard/SidebarLogo.js +0 -6
  84. package/dist/components/dashboard/SidebarLogo.js.map +0 -1
  85. package/dist/components/dashboard/SourceIcon.d.ts +0 -15
  86. package/dist/components/dashboard/SourceIcon.d.ts.map +0 -1
  87. package/dist/components/dashboard/SourceIcon.js +0 -28
  88. package/dist/components/dashboard/SourceIcon.js.map +0 -1
  89. package/dist/components/dashboard/StatusBadge.d.ts +0 -26
  90. package/dist/components/dashboard/StatusBadge.d.ts.map +0 -1
  91. package/dist/components/dashboard/StatusBadge.js +0 -42
  92. package/dist/components/dashboard/StatusBadge.js.map +0 -1
  93. package/dist/components/dashboard/StatusIndicator.d.ts +0 -16
  94. package/dist/components/dashboard/StatusIndicator.d.ts.map +0 -1
  95. package/dist/components/dashboard/StatusIndicator.js +0 -35
  96. package/dist/components/dashboard/StatusIndicator.js.map +0 -1
  97. package/dist/components/dashboard/Tag.d.ts +0 -16
  98. package/dist/components/dashboard/Tag.d.ts.map +0 -1
  99. package/dist/components/dashboard/Tag.js +0 -18
  100. package/dist/components/dashboard/Tag.js.map +0 -1
  101. package/dist/components/dashboard/TipCard.d.ts +0 -12
  102. package/dist/components/dashboard/TipCard.d.ts.map +0 -1
  103. package/dist/components/dashboard/TipCard.js +0 -17
  104. package/dist/components/dashboard/TipCard.js.map +0 -1
  105. package/dist/components/dashboard/ToggleSwitch.d.ts +0 -17
  106. package/dist/components/dashboard/ToggleSwitch.d.ts.map +0 -1
  107. package/dist/components/dashboard/ToggleSwitch.js +0 -27
  108. package/dist/components/dashboard/ToggleSwitch.js.map +0 -1
  109. package/dist/components/dashboard/constants.d.ts +0 -28
  110. package/dist/components/dashboard/constants.d.ts.map +0 -1
  111. package/dist/components/dashboard/constants.js +0 -104
  112. package/dist/components/dashboard/constants.js.map +0 -1
  113. package/dist/components/dashboard/index.d.ts +0 -27
  114. package/dist/components/dashboard/index.d.ts.map +0 -1
  115. package/dist/components/dashboard/index.js +0 -27
  116. package/dist/components/dashboard/index.js.map +0 -1
  117. package/dist/components/dashboard/types.d.ts +0 -115
  118. package/dist/components/dashboard/types.d.ts.map +0 -1
  119. package/dist/components/dashboard/types.js +0 -2
  120. package/dist/components/dashboard/types.js.map +0 -1
@@ -1,98 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } 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 './ToggleSwitch';
7
- export function SettingsDropup({ userName = 'User', userEmail = 'user@example.com', initialNotifications = true, onNotificationsChange, onLogout, }) {
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
- }
20
- };
21
- document.addEventListener('mousedown', handleClickOutside);
22
- return () => document.removeEventListener('mousedown', handleClickOutside);
23
- }, []);
24
- // Calculate focusable item count
25
- const focusableItemCount = 1 + (onLogout ? 1 : 0);
26
- useEffect(() => {
27
- // eslint-disable-next-line react-hooks/set-state-in-effect
28
- setFocusedIndex(isOpen ? 0 : -1);
29
- }, [isOpen]);
30
- const handleKeyDown = (e) => {
31
- if (!isOpen) {
32
- if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {
33
- e.preventDefault();
34
- setIsOpen(true);
35
- setFocusedIndex(0);
36
- }
37
- return;
38
- }
39
- switch (e.key) {
40
- case 'Escape':
41
- e.preventDefault();
42
- setIsOpen(false);
43
- triggerRef.current?.focus();
44
- break;
45
- case 'ArrowDown':
46
- e.preventDefault();
47
- setFocusedIndex(prev => (prev < focusableItemCount - 1 ? prev + 1 : 0));
48
- break;
49
- case 'ArrowUp':
50
- e.preventDefault();
51
- setFocusedIndex(prev => (prev > 0 ? prev - 1 : focusableItemCount - 1));
52
- break;
53
- case 'Home':
54
- e.preventDefault();
55
- setFocusedIndex(0);
56
- break;
57
- case 'End':
58
- e.preventDefault();
59
- setFocusedIndex(focusableItemCount - 1);
60
- break;
61
- case 'Tab':
62
- setIsOpen(false);
63
- setFocusedIndex(-1);
64
- break;
65
- }
66
- };
67
- useEffect(() => {
68
- if (isOpen && focusedIndex >= 0) {
69
- if (focusedIndex === 0) {
70
- notificationsItemRef.current?.focus();
71
- }
72
- else if (focusedIndex === 1 && onLogout) {
73
- logoutItemRef.current?.focus();
74
- }
75
- }
76
- }, [focusedIndex, isOpen, onLogout]);
77
- const handleNotificationsToggle = () => {
78
- const newValue = !notifications;
79
- setNotifications(newValue);
80
- onNotificationsChange?.(newValue);
81
- };
82
- return (_jsxs("div", { ref: ref, className: "w-[247px] absolute left-4 bottom-6", children: [_jsxs("div", { role: "menu", className: cn('absolute bottom-[52px] left-0 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)]', isOpen
83
- ? 'opacity-100 translate-y-0 scale-100 pointer-events-auto'
84
- : '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 => {
85
- if (e.key === 'Enter' || e.key === ' ') {
86
- e.preventDefault();
87
- handleNotificationsToggle();
88
- }
89
- else {
90
- handleKeyDown(e);
91
- }
92
- }, className: cn('w-full py-2.5 px-2 flex items-center justify-between rounded-lg transition-colors cursor-pointer', focusedIndex === 0 && isOpen
93
- ? 'bg-white/[0.06]'
94
- : '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: handleKeyDown, 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
95
- ? 'bg-red-500/10'
96
- : '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: "border-t border-white/[0.08] pt-3", children: _jsxs("button", { ref: triggerRef, type: "button", onClick: () => setIsOpen(!isOpen), onKeyDown: handleKeyDown, "aria-label": "Open settings", "aria-expanded": isOpen, "aria-haspopup": "menu", className: cn('w-[247px] h-[41px] rounded-lg border-none cursor-pointer transition-colors', 'flex items-center pl-3 gap-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 }) }), _jsx("span", { className: cn('text-sm font-normal leading-[21px] font-[Sora,sans-serif] flex-1 text-left', 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 }) })] }) })] }));
97
- }
98
- //# sourceMappingURL=SettingsDropup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SettingsDropup.js","sourceRoot":"","sources":["../../../src/components/dashboard/SettingsDropup.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type { SettingsModalProps } from './types';
2
- export type { SettingsModalProps };
3
- export declare function SettingsModal({ isOpen, onClose, userEmail, userName, onLogout, onNotificationsChange, initialNotifications, }: SettingsModalProps): import("react/jsx-runtime").JSX.Element | null;
4
- //# sourceMappingURL=SettingsModal.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SettingsModal.d.ts","sourceRoot":"","sources":["../../../src/components/dashboard/SettingsModal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAMlD,YAAY,EAAE,kBAAkB,EAAE,CAAC;AAEnC,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,OAAO,EACP,SAA8B,EAC9B,QAAiB,EACjB,QAAQ,EACR,qBAAqB,EACrB,oBAA2B,GAC5B,EAAE,kBAAkB,kDA2KpB"}
@@ -1,56 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { Bell, BellOff, Globe, LogOut, User, X } from 'lucide-react';
4
- import { useCallback, useEffect, useRef, useState } from 'react';
5
- import { cn } from '../../lib/utils';
6
- import { ToggleSwitch } from './ToggleSwitch';
7
- export function SettingsModal({ isOpen, onClose, userEmail = 'user@example.com', userName = 'User', onLogout, onNotificationsChange, initialNotifications = true, }) {
8
- const [notifications, setNotifications] = useState(initialNotifications);
9
- const [isClosing, setIsClosing] = useState(false);
10
- const closeTimeoutRef = useRef(null);
11
- const modalRef = useRef(null);
12
- useEffect(() => {
13
- if (isOpen) {
14
- setIsClosing(false);
15
- modalRef.current?.focus();
16
- }
17
- }, [isOpen]);
18
- useEffect(() => {
19
- setNotifications(initialNotifications);
20
- }, [initialNotifications]);
21
- useEffect(() => {
22
- return () => {
23
- if (closeTimeoutRef.current) {
24
- clearTimeout(closeTimeoutRef.current);
25
- }
26
- };
27
- }, []);
28
- const handleClose = useCallback(() => {
29
- setIsClosing(true);
30
- closeTimeoutRef.current = setTimeout(() => {
31
- onClose();
32
- }, 200);
33
- }, [onClose]);
34
- useEffect(() => {
35
- if (!isOpen)
36
- return;
37
- const handleKeyDown = (e) => {
38
- if (e.key === 'Escape') {
39
- handleClose();
40
- }
41
- };
42
- document.addEventListener('keydown', handleKeyDown);
43
- return () => document.removeEventListener('keydown', handleKeyDown);
44
- }, [isOpen, handleClose]);
45
- const handleNotificationsToggle = () => {
46
- const newValue = !notifications;
47
- setNotifications(newValue);
48
- onNotificationsChange?.(newValue);
49
- };
50
- if (!isOpen)
51
- return null;
52
- return (_jsxs(_Fragment, { children: [_jsx("div", { role: "presentation", "aria-hidden": "true", onClick: handleClose, className: cn('fixed inset-0 bg-black/60 backdrop-blur-sm z-[100] transition-opacity duration-200', isClosing ? 'opacity-0' : 'opacity-100') }), _jsxs("div", { ref: modalRef, role: "dialog", "aria-modal": "true", "aria-labelledby": "settings-modal-title", tabIndex: -1, className: cn('fixed top-1/2 left-1/2 w-[400px] max-w-[90vw] z-[101]', 'bg-[rgba(10,5,20,0.98)] backdrop-blur-[20px] rounded-2xl', 'border border-white/[0.08]', 'shadow-[0px_24px_48px_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)]', isClosing
53
- ? 'opacity-0 -translate-x-1/2 -translate-y-1/2 scale-95'
54
- : 'opacity-100 -translate-x-1/2 -translate-y-1/2 scale-100'), children: [_jsxs("div", { className: "flex items-center justify-between px-6 py-5 border-b border-white/[0.06]", children: [_jsx("h2", { id: "settings-modal-title", className: "text-white text-lg font-semibold font-[Sora,sans-serif] m-0", children: "Settings" }), _jsx("button", { type: "button", onClick: handleClose, "aria-label": "Close settings", className: "w-8 h-8 flex items-center justify-center bg-transparent border-none rounded-lg cursor-pointer transition-colors hover:bg-white/[0.06]", children: _jsx(X, { size: 18, className: "text-gray-500", strokeWidth: 2 }) })] }), _jsx("div", { className: "px-6 py-5 border-b border-white/[0.06]", children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "w-12 h-12 rounded-full bg-violet-500/20 flex items-center justify-center border border-violet-500/30", children: _jsx(User, { size: 24, className: "text-violet-400", strokeWidth: 1.5 }) }), _jsxs("div", { children: [_jsx("div", { className: "text-white text-sm font-medium font-[Sora,sans-serif]", children: userName }), _jsx("div", { className: "text-gray-500 text-xs font-[Sora,sans-serif] mt-0.5", children: userEmail })] })] }) }), _jsxs("div", { className: "p-3 px-4", children: [_jsxs("button", { type: "button", onClick: handleNotificationsToggle, className: "w-full px-3 py-3.5 flex items-center justify-between bg-transparent border-none rounded-[10px] cursor-pointer transition-colors hover:bg-white/[0.04]", children: [_jsxs("div", { className: "flex items-center gap-3", children: [notifications ? (_jsx(Bell, { size: 18, className: "text-emerald-500", strokeWidth: 2 })) : (_jsx(BellOff, { size: 18, className: "text-gray-500", strokeWidth: 2 })), _jsx("span", { className: "text-gray-300 text-sm font-[Sora,sans-serif]", children: "Notifications" })] }), _jsx(ToggleSwitch, { enabled: notifications, onChange: handleNotificationsToggle, "aria-label": "Toggle notifications" })] }), _jsxs("button", { type: "button", disabled: true, "aria-disabled": "true", className: "w-full px-3 py-3.5 flex items-center justify-between bg-transparent border-none rounded-[10px] cursor-not-allowed opacity-60", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx(Globe, { size: 18, className: "text-gray-500", strokeWidth: 2 }), _jsx("span", { className: "text-gray-300 text-sm font-[Sora,sans-serif]", children: "Language" })] }), _jsx("div", { className: "text-gray-500 text-[13px] font-[Sora,sans-serif]", children: "English" })] })] }), onLogout && (_jsx("div", { className: "px-4 pt-3 pb-5 border-t border-white/[0.06]", children: _jsxs("button", { type: "button", onClick: onLogout, className: "w-full p-3 flex items-center justify-center gap-2 bg-red-500/10 border border-red-500/20 rounded-[10px] cursor-pointer transition-all hover:bg-red-500/15 hover:border-red-500/30", children: [_jsx(LogOut, { size: 16, className: "text-red-500", strokeWidth: 2 }), _jsx("span", { className: "text-red-500 text-sm font-medium font-[Sora,sans-serif]", children: "Sign out" })] }) }))] })] }));
55
- }
56
- //# sourceMappingURL=SettingsModal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SettingsModal.js","sourceRoot":"","sources":["../../../src/components/dashboard/SettingsModal.tsx"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- export interface SidePanelProps {
2
- isOpen: boolean;
3
- onClose: () => void;
4
- title?: string;
5
- subtitle?: string;
6
- children: React.ReactNode;
7
- width?: 'sm' | 'md' | 'lg';
8
- showBackdrop?: boolean;
9
- className?: string;
10
- }
11
- export declare function SidePanel({ isOpen, onClose, title, subtitle, children, width, showBackdrop, className, }: SidePanelProps): import("react/jsx-runtime").JSX.Element;
12
- //# sourceMappingURL=SidePanel.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SidePanel.d.ts","sourceRoot":"","sources":["../../../src/components/dashboard/SidePanel.tsx"],"names":[],"mappings":"AASA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAQD,wBAAgB,SAAS,CAAC,EACxB,MAAM,EACN,OAAO,EACP,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,KAAY,EACZ,YAAmB,EACnB,SAAS,GACV,EAAE,cAAc,2CA8IhB"}
@@ -1,79 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { X } from 'lucide-react';
4
- import { useCallback, useEffect, useRef } from 'react';
5
- import { cn } from '../../lib/utils';
6
- const FOCUSABLE_ELEMENTS = 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])';
7
- const widthClasses = {
8
- sm: 'w-[380px]',
9
- md: 'w-[480px]',
10
- lg: 'w-[560px]',
11
- };
12
- export function SidePanel({ isOpen, onClose, title, subtitle, children, width = 'md', showBackdrop = true, className, }) {
13
- const scrollContainerRef = useRef(null);
14
- const panelRef = useRef(null);
15
- const previousActiveElement = useRef(null);
16
- const handleKeyDown = useCallback((e) => {
17
- if (e.key === 'Escape') {
18
- onClose();
19
- return;
20
- }
21
- // Focus trap
22
- if (e.key === 'Tab' && panelRef.current) {
23
- const focusableElements = panelRef.current.querySelectorAll(FOCUSABLE_ELEMENTS);
24
- const firstElement = focusableElements[0];
25
- const lastElement = focusableElements[focusableElements.length - 1];
26
- if (e.shiftKey && document.activeElement === firstElement) {
27
- e.preventDefault();
28
- lastElement?.focus();
29
- }
30
- else if (!e.shiftKey && document.activeElement === lastElement) {
31
- e.preventDefault();
32
- firstElement?.focus();
33
- }
34
- }
35
- }, [onClose]);
36
- useEffect(() => {
37
- if (isOpen) {
38
- previousActiveElement.current = document.activeElement;
39
- document.addEventListener('keydown', handleKeyDown);
40
- // Focus first focusable element in panel
41
- setTimeout(() => {
42
- if (panelRef.current) {
43
- const focusableElements = panelRef.current.querySelectorAll(FOCUSABLE_ELEMENTS);
44
- focusableElements[0]?.focus();
45
- }
46
- }, 0);
47
- }
48
- else {
49
- // Restore focus to previous element
50
- previousActiveElement.current?.focus();
51
- }
52
- return () => {
53
- document.removeEventListener('keydown', handleKeyDown);
54
- };
55
- }, [isOpen, handleKeyDown]);
56
- useEffect(() => {
57
- if (isOpen && scrollContainerRef.current) {
58
- scrollContainerRef.current.scrollTop = 0;
59
- }
60
- }, [isOpen]);
61
- return (_jsxs(_Fragment, { children: [showBackdrop && (_jsx("div", { className: cn('fixed inset-0 z-[200] transition-opacity duration-300', isOpen ? 'opacity-100' : 'opacity-0 pointer-events-none'), style: {
62
- background: 'rgba(0, 0, 0, 0.60)',
63
- backdropFilter: 'blur(4px)',
64
- }, onClick: onClose })), _jsxs("div", { ref: panelRef, role: "dialog", "aria-modal": "true", "aria-labelledby": title ? 'side-panel-title' : undefined, className: cn('fixed top-0 right-0 h-full z-[201] flex flex-col transition-transform duration-300 ease-out', widthClasses[width], isOpen ? 'translate-x-0' : 'translate-x-full', className), style: {
65
- background: 'linear-gradient(180deg, rgba(10, 5, 20, 0.98) 0%, rgba(5, 2, 12, 0.99) 100%)',
66
- borderLeft: '1px solid rgba(255, 255, 255, 0.08)',
67
- boxShadow: '-20px 0 60px rgba(0, 0, 0, 0.5)',
68
- }, children: [_jsxs("div", { className: "flex-shrink-0 flex items-start justify-between p-6 border-b", style: { borderColor: 'rgba(255, 255, 255, 0.08)' }, children: [_jsxs("div", { className: "flex-1 min-w-0 pr-4", children: [title && (_jsx("h2", { id: "side-panel-title", className: "text-lg font-semibold truncate text-gray-100", children: title })), subtitle && (_jsx("p", { className: "text-sm mt-1 truncate text-gray-500", children: subtitle }))] }), _jsx("button", { type: "button", onClick: onClose, className: "p-2 -m-2 rounded-lg transition-colors hover:bg-white/5", "aria-label": "Close panel", children: _jsx(X, { size: 20, color: "#6B7280" }) })] }), _jsx("div", { ref: scrollContainerRef, className: "side-panel-content flex-1 overflow-y-auto overscroll-contain", "data-lenis-prevent": true, children: children }), _jsx("style", { children: `
69
- .side-panel-content {
70
- scroll-behavior: smooth;
71
- -ms-overflow-style: none;
72
- scrollbar-width: none;
73
- }
74
- .side-panel-content::-webkit-scrollbar {
75
- display: none;
76
- }
77
- ` })] })] }));
78
- }
79
- //# sourceMappingURL=SidePanel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SidePanel.js","sourceRoot":"","sources":["../../../src/components/dashboard/SidePanel.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type { NavItem, SidebarProps } from './types';
2
- export type { NavItem, SidebarProps };
3
- export declare function Sidebar({ navItems, activeHref, onNavigate, showSettings, logoSrc, userName, userEmail, onLogout, onNotificationsChange, initialNotifications, chatHistory, activeChatId, chatHistoryExpanded, onChatClick, onChatHistoryToggle, onChatRename, onChatDelete, showChatHistory, }: SidebarProps): import("react/jsx-runtime").JSX.Element;
4
- //# sourceMappingURL=Sidebar.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../../../src/components/dashboard/Sidebar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAMrD,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AAiBtC,wBAAgB,OAAO,CAAC,EACtB,QAA0B,EAC1B,UAAgB,EAChB,UAAU,EACV,YAAmB,EACnB,OAAsB,EACtB,QAAiB,EACjB,SAA8B,EAC9B,QAAQ,EACR,qBAAqB,EACrB,oBAA2B,EAC3B,WAAW,EACX,YAAY,EACZ,mBAA0B,EAC1B,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,eAAuB,GACxB,EAAE,YAAY,2CAyCd"}
@@ -1,28 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { ChatHistorySection } from './ChatHistorySection';
4
- import { NavMenu } from './NavMenu';
5
- import { SettingsDropup } from './SettingsDropup';
6
- import { SidebarLogo } from './SidebarLogo';
7
- const defaultNavItems = [
8
- { icon: 'grid_view', label: 'Overview', href: '/' },
9
- { icon: 'chat_bubble', label: 'Ask CROW', href: '/ask-crow' },
10
- {
11
- icon: 'timeline',
12
- label: 'Analysis',
13
- href: '#',
14
- submenu: [
15
- { icon: '', label: 'Interactions', href: '/analysis/interactions' },
16
- { icon: '', label: 'Patterns', href: '/analysis/patterns' },
17
- ],
18
- },
19
- { icon: 'group', label: 'Team', href: '/team' },
20
- ];
21
- export function Sidebar({ navItems = defaultNavItems, activeHref = '/', onNavigate, showSettings = true, logoSrc = '/logo.webp', userName = 'User', userEmail = 'user@example.com', onLogout, onNotificationsChange, initialNotifications = true, chatHistory, activeChatId, chatHistoryExpanded = true, onChatClick, onChatHistoryToggle, onChatRename, onChatDelete, showChatHistory = false, }) {
22
- // Auto-show chat history when on Ask CROW page
23
- const normalizedHref = activeHref?.replace(/\/$/, '') || '';
24
- const isAskCrowPage = normalizedHref === '/ask-crow';
25
- const displayChatHistory = showChatHistory || isAskCrowPage;
26
- return (_jsxs("aside", { className: "w-[280px] h-full relative bg-black overflow-hidden border-r border-white/[0.08] shrink-0 hidden md:flex md:flex-col", children: [_jsx("div", { className: "w-[279px] h-full absolute left-0 top-0 bg-gradient-to-b from-white/[0.02] to-transparent pointer-events-none" }), _jsx("div", { className: "w-[279px] h-32 absolute left-0 top-0 opacity-50 bg-gradient-to-b from-[#100B1A] to-transparent pointer-events-none" }), _jsx(SidebarLogo, { logoSrc: logoSrc }), _jsx(NavMenu, { items: navItems, activeHref: activeHref, onNavigate: onNavigate }), _jsx(ChatHistorySection, { items: chatHistory, activeItemId: activeChatId, isExpanded: chatHistoryExpanded, isVisible: displayChatHistory, onItemClick: onChatClick, onToggleExpanded: onChatHistoryToggle, onRename: onChatRename, onDelete: onChatDelete }), showSettings && (_jsx(SettingsDropup, { userName: userName, userEmail: userEmail, initialNotifications: initialNotifications, onNotificationsChange: onNotificationsChange, onLogout: onLogout }))] }));
27
- }
28
- //# sourceMappingURL=Sidebar.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Sidebar.js","sourceRoot":"","sources":["../../../src/components/dashboard/Sidebar.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C,MAAM,eAAe,GAAc;IACjC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE;IACnD,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE;IAC7D;QACE,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,UAAU;QACjB,IAAI,EAAE,GAAG;QACT,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,wBAAwB,EAAE;YACnE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,oBAAoB,EAAE;SAC5D;KACF;IACD,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;CAChD,CAAC;AAEF,MAAM,UAAU,OAAO,CAAC,EACtB,QAAQ,GAAG,eAAe,EAC1B,UAAU,GAAG,GAAG,EAChB,UAAU,EACV,YAAY,GAAG,IAAI,EACnB,OAAO,GAAG,YAAY,EACtB,QAAQ,GAAG,MAAM,EACjB,SAAS,GAAG,kBAAkB,EAC9B,QAAQ,EACR,qBAAqB,EACrB,oBAAoB,GAAG,IAAI,EAC3B,WAAW,EACX,YAAY,EACZ,mBAAmB,GAAG,IAAI,EAC1B,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,eAAe,GAAG,KAAK,GACV;IACb,+CAA+C;IAC/C,MAAM,cAAc,GAAG,UAAU,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;IAC5D,MAAM,aAAa,GAAG,cAAc,KAAK,WAAW,CAAC;IACrD,MAAM,kBAAkB,GAAG,eAAe,IAAI,aAAa,CAAC;IAE5D,OAAO,CACL,iBAAO,SAAS,EAAC,qHAAqH,aACpI,cAAK,SAAS,EAAC,8GAA8G,GAAG,EAChI,cAAK,SAAS,EAAC,oHAAoH,GAAG,EAEtI,KAAC,WAAW,IAAC,OAAO,EAAE,OAAO,GAAI,EAEjC,KAAC,OAAO,IACN,KAAK,EAAE,QAAQ,EACf,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,GACtB,EAEF,KAAC,kBAAkB,IACjB,KAAK,EAAE,WAAW,EAClB,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,mBAAmB,EAC/B,SAAS,EAAE,kBAAkB,EAC7B,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,mBAAmB,EACrC,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,YAAY,GACtB,EAED,YAAY,IAAI,CACf,KAAC,cAAc,IACb,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,oBAAoB,EAAE,oBAAoB,EAC1C,qBAAqB,EAAE,qBAAqB,EAC5C,QAAQ,EAAE,QAAQ,GAClB,CACH,IACK,CACT,CAAC;AACJ,CAAC"}
@@ -1,7 +0,0 @@
1
- export interface SidebarLogoProps {
2
- logoSrc: string;
3
- title?: string;
4
- subtitle?: string;
5
- }
6
- export declare function SidebarLogo({ logoSrc, title, subtitle, }: SidebarLogoProps): import("react/jsx-runtime").JSX.Element;
7
- //# sourceMappingURL=SidebarLogo.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SidebarLogo.d.ts","sourceRoot":"","sources":["../../../src/components/dashboard/SidebarLogo.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,KAAc,EACd,QAAmB,GACpB,EAAE,gBAAgB,2CAgBlB"}
@@ -1,6 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- export function SidebarLogo({ logoSrc, title = 'CROW', subtitle = 'CLIENT', }) {
4
- return (_jsxs("div", { className: "w-[117.43px] h-[60px] absolute left-6 top-[11.75px]", children: [_jsx("img", { src: logoSrc, alt: `${title} Logo`, className: "w-[58px] h-[60px] absolute left-0 top-0 object-contain" }), _jsx("div", { className: "absolute left-[58px] top-[14px] flex flex-col justify-center text-white text-lg font-bold font-[Sora,sans-serif] leading-[18px] tracking-[0.45px]", children: title }), _jsx("div", { className: "absolute left-[58px] top-9 flex flex-col justify-center text-gray-400 text-[9px] font-medium font-[Sora,sans-serif] uppercase leading-[13.5px] tracking-[0.9px]", children: subtitle })] }));
5
- }
6
- //# sourceMappingURL=SidebarLogo.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SidebarLogo.js","sourceRoot":"","sources":["../../../src/components/dashboard/SidebarLogo.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAQb,MAAM,UAAU,WAAW,CAAC,EAC1B,OAAO,EACP,KAAK,GAAG,MAAM,EACd,QAAQ,GAAG,QAAQ,GACF;IACjB,OAAO,CACL,eAAK,SAAS,EAAC,qDAAqD,aAClE,cACE,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,GAAG,KAAK,OAAO,EACpB,SAAS,EAAC,wDAAwD,GAClE,EACF,cAAK,SAAS,EAAC,mJAAmJ,YAC/J,KAAK,GACF,EACN,cAAK,SAAS,EAAC,iKAAiK,YAC7K,QAAQ,GACL,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -1,15 +0,0 @@
1
- export type SourceType = 'web' | 'cctv' | 'social';
2
- export interface SourceIconProps {
3
- source: SourceType;
4
- size?: 'sm' | 'md';
5
- }
6
- /**
7
- * An icon component that displays source type with color-coded styling
8
- * Used to distinguish between web, CCTV, and social media sources
9
- * @param {SourceIconProps} props - Component props
10
- * @param {'web' | 'cctv' | 'social'} props.source - Type of source
11
- * @param {'sm' | 'md'} [props.size='sm'] - Icon size variant
12
- * @returns {JSX.Element} The source icon component
13
- */
14
- export declare function SourceIcon({ source, size }: SourceIconProps): import("react/jsx-runtime").JSX.Element;
15
- //# sourceMappingURL=SourceIcon.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SourceIcon.d.ts","sourceRoot":"","sources":["../../../src/components/dashboard/SourceIcon.tsx"],"names":[],"mappings":"AAIA,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEnD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACpB;AAeD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,IAAW,EAAE,EAAE,eAAe,2CAclE"}
@@ -1,28 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import { Globe, MessageCircle, Video } from 'lucide-react';
4
- const sourceConfig = {
5
- web: { icon: Globe, color: '#60A5FA', bg: 'rgba(96, 165, 250, 0.15)' },
6
- cctv: { icon: Video, color: '#F87171', bg: 'rgba(248, 113, 113, 0.15)' },
7
- social: {
8
- icon: MessageCircle,
9
- color: '#A78BFA',
10
- bg: 'rgba(167, 139, 250, 0.15)',
11
- },
12
- };
13
- /**
14
- * An icon component that displays source type with color-coded styling
15
- * Used to distinguish between web, CCTV, and social media sources
16
- * @param {SourceIconProps} props - Component props
17
- * @param {'web' | 'cctv' | 'social'} props.source - Type of source
18
- * @param {'sm' | 'md'} [props.size='sm'] - Icon size variant
19
- * @returns {JSX.Element} The source icon component
20
- */
21
- export function SourceIcon({ source, size = 'sm' }) {
22
- const config = sourceConfig[source];
23
- const IconComponent = config.icon;
24
- const sizeClasses = size === 'sm' ? 'w-8 h-8' : 'w-10 h-10';
25
- const iconSize = size === 'sm' ? 16 : 20;
26
- return (_jsx("div", { className: `${sizeClasses} rounded-lg flex items-center justify-center`, style: { background: config.bg }, children: _jsx(IconComponent, { size: iconSize, color: config.color }) }));
27
- }
28
- //# sourceMappingURL=SourceIcon.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SourceIcon.js","sourceRoot":"","sources":["../../../src/components/dashboard/SourceIcon.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAS3D,MAAM,YAAY,GAGd;IACF,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,0BAA0B,EAAE;IACtE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,2BAA2B,EAAE;IACxE,MAAM,EAAE;QACN,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,SAAS;QAChB,EAAE,EAAE,2BAA2B;KAChC;CACF,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,GAAG,IAAI,EAAmB;IACjE,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC;IAClC,MAAM,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;IAC5D,MAAM,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAEzC,OAAO,CACL,cACE,SAAS,EAAE,GAAG,WAAW,8CAA8C,EACvE,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,EAAE,YAEhC,KAAC,aAAa,IAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,GAAI,GAClD,CACP,CAAC;AACJ,CAAC"}
@@ -1,26 +0,0 @@
1
- import type { VariantProps } from 'class-variance-authority';
2
- declare const badgeVariants: (props?: ({
3
- variant?: "medium" | "high" | "low" | "positive" | "negative" | "neutral" | "warning" | "info" | null | undefined;
4
- size?: "default" | "sm" | null | undefined;
5
- } & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
6
- export interface StatusBadgeProps extends VariantProps<typeof badgeVariants> {
7
- children: React.ReactNode;
8
- className?: string;
9
- uppercase?: boolean;
10
- tracking?: boolean;
11
- }
12
- /**
13
- * A status badge component for displaying status information
14
- * Supports multiple semantic variants (positive, negative, warning, etc.)
15
- * @param {StatusBadgeProps} props - Component props
16
- * @param {React.ReactNode} props.children - Badge text content
17
- * @param {'positive' | 'negative' | 'warning' | 'neutral' | 'info' | 'high' | 'medium' | 'low'} [props.variant='neutral'] - Semantic variant
18
- * @param {'default' | 'sm'} [props.size='default'] - Badge size
19
- * @param {string} [props.className=''] - Additional CSS classes
20
- * @param {boolean} [props.uppercase=false] - Whether to uppercase the text
21
- * @param {boolean} [props.tracking=false] - Whether to add letter spacing
22
- * @returns {JSX.Element} The status badge component
23
- */
24
- export declare function StatusBadge({ children, variant, size, className, uppercase, tracking, }: StatusBadgeProps): import("react/jsx-runtime").JSX.Element;
25
- export {};
26
- //# sourceMappingURL=StatusBadge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StatusBadge.d.ts","sourceRoot":"","sources":["../../../src/components/dashboard/StatusBadge.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAI7D,QAAA,MAAM,aAAa;;;mFAsBjB,CAAC;AAEH,MAAM,WAAW,gBAAiB,SAAQ,YAAY,CAAC,OAAO,aAAa,CAAC;IAC1E,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,OAAmB,EACnB,IAAgB,EAChB,SAAc,EACd,SAAiB,EACjB,QAAgB,GACjB,EAAE,gBAAgB,2CAalB"}
@@ -1,42 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import { cva } from 'class-variance-authority';
4
- import { cn } from '../../lib/utils';
5
- const badgeVariants = cva('inline-flex items-center rounded font-medium', {
6
- variants: {
7
- variant: {
8
- positive: 'bg-emerald-500/10 text-emerald-400 border border-emerald-500/20',
9
- negative: 'bg-rose-500/10 text-rose-400 border border-rose-500/20',
10
- warning: 'bg-yellow-500/10 text-yellow-400 border border-yellow-500/20',
11
- neutral: 'bg-gray-500/10 text-gray-400 border border-gray-500/20',
12
- info: 'bg-violet-500/10 text-violet-300 border border-violet-500/20',
13
- high: 'bg-violet-500/20 text-violet-300 border border-violet-500/20',
14
- medium: 'bg-violet-500/10 text-violet-400 border border-violet-500/10',
15
- low: 'bg-gray-500/10 text-gray-400 border border-gray-500/10',
16
- },
17
- size: {
18
- default: 'px-2 py-0.5 text-[10px]',
19
- sm: 'px-1.5 py-0.5 text-[9px]',
20
- },
21
- },
22
- defaultVariants: {
23
- variant: 'neutral',
24
- size: 'default',
25
- },
26
- });
27
- /**
28
- * A status badge component for displaying status information
29
- * Supports multiple semantic variants (positive, negative, warning, etc.)
30
- * @param {StatusBadgeProps} props - Component props
31
- * @param {React.ReactNode} props.children - Badge text content
32
- * @param {'positive' | 'negative' | 'warning' | 'neutral' | 'info' | 'high' | 'medium' | 'low'} [props.variant='neutral'] - Semantic variant
33
- * @param {'default' | 'sm'} [props.size='default'] - Badge size
34
- * @param {string} [props.className=''] - Additional CSS classes
35
- * @param {boolean} [props.uppercase=false] - Whether to uppercase the text
36
- * @param {boolean} [props.tracking=false] - Whether to add letter spacing
37
- * @returns {JSX.Element} The status badge component
38
- */
39
- export function StatusBadge({ children, variant = 'neutral', size = 'default', className = '', uppercase = false, tracking = false, }) {
40
- return (_jsx("span", { className: cn(badgeVariants({ variant, size }), uppercase && 'uppercase', tracking && 'tracking-wider', className), children: children }));
41
- }
42
- //# sourceMappingURL=StatusBadge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StatusBadge.js","sourceRoot":"","sources":["../../../src/components/dashboard/StatusBadge.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAErC,MAAM,aAAa,GAAG,GAAG,CAAC,8CAA8C,EAAE;IACxE,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,QAAQ,EACN,iEAAiE;YACnE,QAAQ,EAAE,wDAAwD;YAClE,OAAO,EAAE,8DAA8D;YACvE,OAAO,EAAE,wDAAwD;YACjE,IAAI,EAAE,8DAA8D;YACpE,IAAI,EAAE,8DAA8D;YACpE,MAAM,EAAE,8DAA8D;YACtE,GAAG,EAAE,wDAAwD;SAC9D;QACD,IAAI,EAAE;YACJ,OAAO,EAAE,yBAAyB;YAClC,EAAE,EAAE,0BAA0B;SAC/B;KACF;IACD,eAAe,EAAE;QACf,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,SAAS;KAChB;CACF,CAAC,CAAC;AASH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,QAAQ,EACR,OAAO,GAAG,SAAS,EACnB,IAAI,GAAG,SAAS,EAChB,SAAS,GAAG,EAAE,EACd,SAAS,GAAG,KAAK,EACjB,QAAQ,GAAG,KAAK,GACC;IACjB,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,aAAa,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAChC,SAAS,IAAI,WAAW,EACxB,QAAQ,IAAI,gBAAgB,EAC5B,SAAS,CACV,YAEA,QAAQ,GACJ,CACR,CAAC;AACJ,CAAC"}
@@ -1,16 +0,0 @@
1
- export interface StatusIndicatorProps {
2
- status?: 'active' | 'inactive' | 'processing';
3
- label?: string;
4
- className?: string;
5
- }
6
- /**
7
- * A status indicator component that displays system status with a colored dot
8
- * Shows predefined labels for each status or custom labels
9
- * @param {StatusIndicatorProps} props - Component props
10
- * @param {'active' | 'inactive' | 'processing'} [props.status='active'] - Status type
11
- * @param {string} [props.label] - Custom label text (overrides default)
12
- * @param {string} [props.className] - Additional CSS classes
13
- * @returns {JSX.Element} The status indicator component
14
- */
15
- export declare function StatusIndicator({ status, label, className, }: StatusIndicatorProps): import("react/jsx-runtime").JSX.Element;
16
- //# sourceMappingURL=StatusIndicator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StatusIndicator.d.ts","sourceRoot":"","sources":["../../../src/components/dashboard/StatusIndicator.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAoBD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,EAC9B,MAAiB,EACjB,KAAK,EACL,SAAS,GACV,EAAE,oBAAoB,2CAuBtB"}
@@ -1,35 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { cn } from '../../lib/utils';
4
- const statusConfig = {
5
- active: {
6
- dotColor: 'bg-violet-400',
7
- textColor: 'text-violet-300',
8
- label: 'System Active',
9
- },
10
- inactive: {
11
- dotColor: 'bg-gray-500',
12
- textColor: 'text-gray-400',
13
- label: 'System Offline',
14
- },
15
- processing: {
16
- dotColor: 'bg-amber-400',
17
- textColor: 'text-amber-300',
18
- label: 'Processing',
19
- },
20
- };
21
- /**
22
- * A status indicator component that displays system status with a colored dot
23
- * Shows predefined labels for each status or custom labels
24
- * @param {StatusIndicatorProps} props - Component props
25
- * @param {'active' | 'inactive' | 'processing'} [props.status='active'] - Status type
26
- * @param {string} [props.label] - Custom label text (overrides default)
27
- * @param {string} [props.className] - Additional CSS classes
28
- * @returns {JSX.Element} The status indicator component
29
- */
30
- export function StatusIndicator({ status = 'active', label, className, }) {
31
- const config = statusConfig[status];
32
- const displayLabel = label ?? config.label;
33
- return (_jsxs("div", { className: cn('inline-flex items-center gap-2 px-4 py-1.5 rounded-full', 'backdrop-blur-sm bg-violet-500/10 border border-violet-500/20', className), children: [_jsx("div", { className: cn('w-1.5 h-1.5 rounded-full', config.dotColor) }), _jsx("span", { className: cn('text-[10px] font-bold uppercase tracking-[1px] leading-[15px]', config.textColor), children: displayLabel })] }));
34
- }
35
- //# sourceMappingURL=StatusIndicator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StatusIndicator.js","sourceRoot":"","sources":["../../../src/components/dashboard/StatusIndicator.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAQrC,MAAM,YAAY,GAAG;IACnB,MAAM,EAAE;QACN,QAAQ,EAAE,eAAe;QACzB,SAAS,EAAE,iBAAiB;QAC5B,KAAK,EAAE,eAAe;KACvB;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE,aAAa;QACvB,SAAS,EAAE,eAAe;QAC1B,KAAK,EAAE,gBAAgB;KACxB;IACD,UAAU,EAAE;QACV,QAAQ,EAAE,cAAc;QACxB,SAAS,EAAE,gBAAgB;QAC3B,KAAK,EAAE,YAAY;KACpB;CACO,CAAC;AAEX;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,MAAM,GAAG,QAAQ,EACjB,KAAK,EACL,SAAS,GACY;IACrB,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,YAAY,GAAG,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;IAE3C,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,yDAAyD,EACzD,+DAA+D,EAC/D,SAAS,CACV,aAED,cAAK,SAAS,EAAE,EAAE,CAAC,0BAA0B,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAI,EACnE,eACE,SAAS,EAAE,EAAE,CACX,+DAA+D,EAC/D,MAAM,CAAC,SAAS,CACjB,YAEA,YAAY,GACR,IACH,CACP,CAAC;AACJ,CAAC"}
@@ -1,16 +0,0 @@
1
- export interface TagProps {
2
- children: React.ReactNode;
3
- variant?: 'default' | 'active';
4
- className?: string;
5
- }
6
- /**
7
- * A simple tag component for displaying labels or categories
8
- * Supports default and active visual states
9
- * @param {TagProps} props - Component props
10
- * @param {React.ReactNode} props.children - Tag text content
11
- * @param {'default' | 'active'} [props.variant='default'] - Visual variant
12
- * @param {string} [props.className] - Additional CSS classes
13
- * @returns {JSX.Element} The tag component
14
- */
15
- export declare function Tag({ children, variant, className }: TagProps): import("react/jsx-runtime").JSX.Element;
16
- //# sourceMappingURL=Tag.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tag.d.ts","sourceRoot":"","sources":["../../../src/components/dashboard/Tag.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAmB,EAAE,SAAS,EAAE,EAAE,QAAQ,2CAgBzE"}