@myrjfa/ui 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/chat/ChatMain.d.ts.map +1 -1
  2. package/dist/chat/ChatMain.js +173 -145
  3. package/dist/chat/ChatSidebar.js +7 -8
  4. package/dist/chat/ConversationList.d.ts.map +1 -1
  5. package/dist/chat/ConversationList.js +20 -18
  6. package/dist/chat/ExpensePanel.d.ts +4 -1
  7. package/dist/chat/ExpensePanel.d.ts.map +1 -1
  8. package/dist/chat/ExpensePanel.js +215 -195
  9. package/dist/chat/MessageBubble.d.ts +5 -3
  10. package/dist/chat/MessageBubble.d.ts.map +1 -1
  11. package/dist/chat/MessageBubble.js +185 -103
  12. package/dist/chat/MessageInput.d.ts +8 -1
  13. package/dist/chat/MessageInput.d.ts.map +1 -1
  14. package/dist/chat/MessageInput.js +182 -165
  15. package/dist/chat/MilestonePanel.d.ts +4 -1
  16. package/dist/chat/MilestonePanel.d.ts.map +1 -1
  17. package/dist/chat/MilestonePanel.js +150 -150
  18. package/dist/chat/components/ParticipantSelector.d.ts +11 -0
  19. package/dist/chat/components/ParticipantSelector.d.ts.map +1 -0
  20. package/dist/chat/components/ParticipantSelector.js +17 -0
  21. package/dist/chat/components/SplitInputs.d.ts +11 -0
  22. package/dist/chat/components/SplitInputs.d.ts.map +1 -0
  23. package/dist/chat/components/SplitInputs.js +83 -0
  24. package/dist/chat/components/SplitTypeSelector.d.ts +8 -0
  25. package/dist/chat/components/SplitTypeSelector.d.ts.map +1 -0
  26. package/dist/chat/components/SplitTypeSelector.js +13 -0
  27. package/dist/chat/dialogs/AddMemberDialog.js +30 -90
  28. package/dist/chat/dialogs/CameraDialog.js +38 -86
  29. package/dist/chat/dialogs/CreatePollDialog.d.ts +8 -0
  30. package/dist/chat/dialogs/CreatePollDialog.d.ts.map +1 -0
  31. package/dist/chat/dialogs/CreatePollDialog.js +38 -0
  32. package/dist/chat/dialogs/ExpenseAnalyticsDialog.d.ts +19 -0
  33. package/dist/chat/dialogs/ExpenseAnalyticsDialog.d.ts.map +1 -0
  34. package/dist/chat/dialogs/ExpenseAnalyticsDialog.js +52 -0
  35. package/dist/chat/dialogs/GroupInfoDialog.d.ts.map +1 -1
  36. package/dist/chat/dialogs/GroupInfoDialog.js +55 -92
  37. package/dist/chat/dialogs/GroupInfoViewDialog.js +5 -6
  38. package/dist/chat/dialogs/NewChatDialog.d.ts.map +1 -1
  39. package/dist/chat/dialogs/NewChatDialog.js +49 -113
  40. package/dist/chat/dialogs/NewGroupDialog.d.ts.map +1 -1
  41. package/dist/chat/dialogs/NewGroupDialog.js +49 -92
  42. package/dist/chat/dialogs/ParticipantsDialog.d.ts.map +1 -1
  43. package/dist/chat/dialogs/ParticipantsDialog.js +68 -118
  44. package/dist/chat/dialogs/UserProfileDialog.d.ts +10 -0
  45. package/dist/chat/dialogs/UserProfileDialog.d.ts.map +1 -0
  46. package/dist/chat/dialogs/UserProfileDialog.js +100 -0
  47. package/dist/dashboard/action-buttons.js +4 -5
  48. package/dist/dashboard/app-sidebar.js +46 -128
  49. package/dist/dashboard/card-header.js +1 -2
  50. package/dist/dashboard/dashboard-components.js +3 -5
  51. package/dist/dashboard/data-table.js +21 -33
  52. package/dist/dashboard/nav-main.js +4 -5
  53. package/dist/dashboard/nav-secondary.js +2 -25
  54. package/dist/dashboard/stats-card.js +1 -2
  55. package/dist/dashboard/table.js +8 -54
  56. package/dist/header/mobile-nav-item.js +1 -2
  57. package/dist/header/mobile-navbar.js +8 -9
  58. package/dist/header/nav-item.js +1 -2
  59. package/dist/index.d.ts +1 -0
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +1 -1
  62. package/dist/main/footer.js +5 -9
  63. package/dist/main/navbar.js +53 -136
  64. package/dist/main/paginationBar.js +12 -14
  65. package/dist/main/portfolio/portfolioItem.js +1 -2
  66. package/dist/main/portfolio/portfolioPopup.js +16 -17
  67. package/dist/main/review-page.d.ts.map +1 -1
  68. package/dist/main/review-page.js +131 -198
  69. package/dist/misc/accordion.js +8 -34
  70. package/dist/misc/alert-dialog.js +22 -55
  71. package/dist/misc/alert.js +7 -32
  72. package/dist/misc/alertdialogclaude.js +50 -125
  73. package/dist/misc/avatar.js +6 -31
  74. package/dist/misc/badge.js +4 -27
  75. package/dist/misc/button.js +4 -27
  76. package/dist/misc/card.js +12 -40
  77. package/dist/misc/carousel.js +37 -61
  78. package/dist/misc/checkbox.js +2 -25
  79. package/dist/misc/command.js +18 -49
  80. package/dist/misc/datepicker.js +66 -76
  81. package/dist/misc/dialog.js +20 -52
  82. package/dist/misc/dropdown-menu.js +30 -67
  83. package/dist/misc/faq.js +2 -3
  84. package/dist/misc/file-preview.js +43 -97
  85. package/dist/misc/filter.d.ts.map +1 -1
  86. package/dist/misc/filter.js +18 -21
  87. package/dist/misc/filterBar.js +136 -160
  88. package/dist/misc/form.js +39 -60
  89. package/dist/misc/image-cropper.d.ts +10 -0
  90. package/dist/misc/image-cropper.d.ts.map +1 -0
  91. package/dist/misc/image-cropper.js +44 -0
  92. package/dist/misc/input.js +2 -25
  93. package/dist/misc/label.js +2 -25
  94. package/dist/misc/line-carousel.js +3 -13
  95. package/dist/misc/multiImageUploader.js +2 -3
  96. package/dist/misc/newsLetter.js +18 -78
  97. package/dist/misc/notification.d.ts +1 -2
  98. package/dist/misc/notification.d.ts.map +1 -1
  99. package/dist/misc/notification.js +89 -125
  100. package/dist/misc/pagination.js +16 -45
  101. package/dist/misc/password-eye.js +2 -3
  102. package/dist/misc/popover.d.ts.map +1 -1
  103. package/dist/misc/popover.js +8 -34
  104. package/dist/misc/progress.js +2 -25
  105. package/dist/misc/scroll-area.js +5 -29
  106. package/dist/misc/searchBar.js +27 -31
  107. package/dist/misc/searchBox.js +18 -22
  108. package/dist/misc/select.d.ts.map +1 -1
  109. package/dist/misc/select.js +22 -54
  110. package/dist/misc/separator.js +2 -25
  111. package/dist/misc/share.js +48 -104
  112. package/dist/misc/sheet.js +21 -53
  113. package/dist/misc/sidebar.js +112 -153
  114. package/dist/misc/skeleton.js +2 -25
  115. package/dist/misc/slider.js +3 -26
  116. package/dist/misc/starRating.js +5 -15
  117. package/dist/misc/stateCard.js +7 -8
  118. package/dist/misc/switch.d.ts +5 -0
  119. package/dist/misc/switch.d.ts.map +1 -0
  120. package/dist/misc/switch.js +8 -0
  121. package/dist/misc/tabs.js +8 -34
  122. package/dist/misc/textarea.js +2 -25
  123. package/dist/misc/tile.js +31 -92
  124. package/dist/misc/tooltip.js +8 -34
  125. package/dist/profile/socialLink.d.ts +1 -1
  126. package/dist/profile/socialLink.d.ts.map +1 -1
  127. package/dist/profile/socialLink.js +53 -69
  128. package/dist/utils/permissions.d.ts +7 -0
  129. package/dist/utils/permissions.d.ts.map +1 -0
  130. package/dist/utils/permissions.js +38 -0
  131. package/package.json +3 -2
@@ -1,40 +1,4 @@
1
1
  'use client';
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
- return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
39
3
  import { Popover, PopoverContent, PopoverTrigger } from "@radix-ui/react-popover";
40
4
  import { Separator } from "@radix-ui/react-separator";
@@ -54,128 +18,81 @@ import { Avatar, AvatarFallback, AvatarImage } from "../misc/avatar";
54
18
  import { Button } from "../misc/button";
55
19
  import { Label } from "../misc/label";
56
20
  import { MobileNotificationBell, NotificationBell } from "../misc/notification";
57
- export default function Navbar(_a) {
58
- var _this = this;
59
- var _b, _c, _d;
60
- var _e = _a.dark, dark = _e === void 0 ? false : _e;
61
- var router = useRouter();
62
- var _f = useAtom(userAtom), currentUser = _f[0], setCurrentUser = _f[1];
63
- var loading = useAtomValue(userLoadingAtom);
64
- var _g = useAtom(isLoggedInAtom), isLoggedIn = _g[0], setIsLoggedIn = _g[1];
65
- var _h = useState(false), scrolled = _h[0], setScrolled = _h[1];
66
- useEffect(function () {
67
- var handleScroll = function () {
68
- var isScrolled = window.scrollY > 10;
21
+ export default function Navbar({ dark = false }) {
22
+ var _a, _b;
23
+ const router = useRouter();
24
+ const [currentUser, setCurrentUser] = useAtom(userAtom);
25
+ const loading = useAtomValue(userLoadingAtom);
26
+ const [isLoggedIn, setIsLoggedIn] = useAtom(isLoggedInAtom);
27
+ const [scrolled, setScrolled] = useState(false);
28
+ useEffect(() => {
29
+ const handleScroll = () => {
30
+ const isScrolled = window.scrollY > 10;
69
31
  if (isScrolled !== scrolled) {
70
32
  setScrolled(isScrolled);
71
33
  }
72
34
  };
73
35
  window.addEventListener("scroll", handleScroll);
74
- return function () {
36
+ return () => {
75
37
  window.removeEventListener("scroll", handleScroll);
76
38
  };
77
39
  }, [scrolled]);
78
40
  if (loading)
79
41
  return _jsx("div", { className: "w-full h-screen flex items-center justify-center", children: "Loading..." });
80
- var logout = function () { return __awaiter(_this, void 0, void 0, function () {
81
- var role, response;
42
+ const logout = async () => {
82
43
  var _a;
83
- return __generator(this, function (_b) {
84
- switch (_b.label) {
85
- case 0:
86
- role = (currentUser === null || currentUser === void 0 ? void 0 : currentUser.role) || "user";
87
- setCurrentUser(null);
88
- setIsLoggedIn(false);
89
- return [4 /*yield*/, logoutUser(role)];
90
- case 1:
91
- response = _b.sent();
92
- if (!(response === null || response === void 0 ? void 0 : response.error)) return [3 /*break*/, 3];
93
- return [4 /*yield*/, showAlert(response.error)];
94
- case 2:
95
- _b.sent();
96
- return [3 /*break*/, 5];
97
- case 3: return [4 /*yield*/, showAlert((_a = response.message) !== null && _a !== void 0 ? _a : "Logged out successfully")];
98
- case 4:
99
- _b.sent();
100
- _b.label = 5;
101
- case 5: return [2 /*return*/];
102
- }
103
- });
104
- }); };
105
- var navbarBg = scrolled || window.scrollY > 10
44
+ const role = (currentUser === null || currentUser === void 0 ? void 0 : currentUser.role) || "user";
45
+ setCurrentUser(null);
46
+ setIsLoggedIn(false);
47
+ const response = await logoutUser(role);
48
+ if (response === null || response === void 0 ? void 0 : response.error) {
49
+ await showAlert(response.error);
50
+ }
51
+ else
52
+ await showAlert((_a = response.message) !== null && _a !== void 0 ? _a : "Logged out successfully");
53
+ };
54
+ const navbarBg = scrolled || window.scrollY > 10
106
55
  ? dark
107
56
  ? "bg-foreground/50 backdrop-blur-md"
108
57
  : "bg-background/50 backdrop-blur-md"
109
58
  : "bg-transparent";
110
- var navbarBorder = scrolled || window.scrollY > 10 ? "border-b border-border/30 shadow-lg" : "";
111
- var textColor = dark ? "text-gray-200" : "text-foreground";
112
- var navItemColor = dark
59
+ const navbarBorder = scrolled || window.scrollY > 10 ? "border-b border-border/30 shadow-lg" : "";
60
+ const textColor = dark ? "text-gray-200" : "text-foreground";
61
+ const navItemColor = dark
113
62
  ? "hover:text-white text-gray-250"
114
63
  : "hover:text-foreground text-gray-750";
115
- return (_jsx("header", { className: "fixed top-0 left-0 z-[100] mx-auto transition-all duration-300 w-full ".concat(navbarBg, " ").concat(textColor, " ").concat(navbarBorder), children: _jsxs("div", { className: "mx-auto flex items-center justify-between gap-10 py-4 px-4 lg:px-8", children: [_jsxs(Link, { href: "/", className: "flex items-center gap-3", children: [_jsxs(Avatar, { className: "ml-2 -mr-4.5", children: [_jsx(AvatarImage, { src: "/images/logoicon.webp" }), _jsxs(AvatarFallback, { children: [(currentUser === null || currentUser === void 0 ? void 0 : currentUser.firstName.charAt(0)) || "D", (currentUser === null || currentUser === void 0 ? void 0 : currentUser.lastName.charAt(0)) || "P"] })] }), _jsx("span", { className: "font-heading text-xl font-bold", children: "rippeaze" })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs("nav", { className: "hidden md:flex items-center gap-10 justify-end", children: [_jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs("button", { className: "flex items-center gap-1 text-sm font-medium cursor-pointer ".concat(navItemColor), children: [_jsx(Target, { className: "h-5 w-5" }), _jsx("span", { children: "Opportunities" }), _jsx(ChevronDown, { className: "h-4 w-4" })] }) }), _jsx(PopoverContent, { className: "w-56 p-2 mt-3 bg-white rounded-lg shadow-lg border", align: "start", sideOffset: 5, children: _jsx("div", { className: "flex flex-col", children: opportunityTypeOptions.map(function (opt) { return (_jsxs(Link, { href: "/opportunities?type=".concat(opt.value), className: "px-3 py-2 text-sm text-gray-700 hover:bg-gray-100 rounded-md flex flex-col", children: [_jsx("span", { className: "font-medium", children: opt.label }), _jsx("span", { className: "text-xs text-gray-500", children: opt.description })] }, opt.value)); }) }) })] }), _jsx(NavItem, { icon: _jsx(Luggage, { className: "h-5 w-5" }), label: "Packages", href: "/packages", className: navItemColor }), _jsx(NavItem, { icon: _jsx(Globe, { className: "h-5 w-5" }), label: "Blogs", href: "/blogs", className: navItemColor }), isLoggedIn && _jsx(NavItem, { icon: _jsx(MessageCircle, { className: "h-5 w-5" }), label: "Chat", href: "/chat", className: navItemColor, external: true }), currentUser ? _jsx(NavItem, { icon: _jsx(Store, { className: "h-5 w-5" }), label: "Become a Partner", href: "/contact", className: navItemColor })
116
- : _jsx(NavItem, { icon: _jsx(Store, { className: "h-5 w-5" }), label: "Register as Business", href: "/auth/register?role=host", className: navItemColor }), isLoggedIn && _jsx(NotificationBell, { id: (_b = currentUser === null || currentUser === void 0 ? void 0 : currentUser.username) !== null && _b !== void 0 ? _b : null, navItemColor: navItemColor })] }), _jsx("div", { className: "hidden md:flex items-center gap-2", children: _jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(Button, { variant: "link", className: "flex w-full gap-1 cursor-pointer", children: _jsxs(Avatar, { className: "ml-5 mr-4.5", children: [_jsx(AvatarImage, { src: (_c = currentUser === null || currentUser === void 0 ? void 0 : currentUser.profilePic) !== null && _c !== void 0 ? _c : "/images/profile_placeholder.webp" }), _jsxs(AvatarFallback, { children: [(currentUser === null || currentUser === void 0 ? void 0 : currentUser.firstName.charAt(0)) || "D", (currentUser === null || currentUser === void 0 ? void 0 : currentUser.lastName.charAt(0)) || "P"] })] }) }) }), _jsx(PopoverContent, { className: "w-full p-0 mt-3 bg-".concat(dark ? "primary" : "white", " rounded-lg shadow-lg"), align: "end", sideOffset: 5, children: _jsxs("div", { className: "py-2 w-full", children: [_jsxs("div", { className: "px-4 py-3 border-b w-full", children: [_jsx("p", { className: "text-sm font-medium", children: (currentUser === null || currentUser === void 0 ? void 0 : currentUser.username) || "Guest" }), _jsx("p", { className: "text-xs text-gray-500", children: (currentUser === null || currentUser === void 0 ? void 0 : currentUser.email) || "user@example.com" })] }), _jsxs("div", { className: "flex flex-col", children: [isLoggedIn ?
117
- _jsxs(Link, { href: "/profile/".concat((currentUser === null || currentUser === void 0 ? void 0 : currentUser.role) || "user", "/").concat((currentUser === null || currentUser === void 0 ? void 0 : currentUser.username) || "Guest"), className: "w-full py-2 px-4 text-sm text-gray-700 hover:bg-gray-100 flex items-center gap-2", children: [_jsxs(Avatar, { className: "w-4 h-4", children: [_jsx(AvatarImage, { src: (_d = currentUser === null || currentUser === void 0 ? void 0 : currentUser.profilePic) !== null && _d !== void 0 ? _d : "/images/profile_placeholder.webp" }), _jsx(AvatarFallback, { children: "U" })] }), "Profile"] }) :
118
- _jsxs(Button, { variant: "ghost", onClick: function () { return router.push('/auth/login?role=user'); }, className: "w-full py-2 px-4 text-sm text-gray-700 hover:bg-gray-100 flex items-center gap-2 justify-start", children: [_jsxs(Avatar, { className: "w-4 h-4", children: [_jsx(AvatarImage, { src: "/images/profile_placeholder.webp" }), _jsx(AvatarFallback, { children: "U" })] }), "Login As Volunteer"] }), isLoggedIn && _jsxs(Link, { href: "/overview/".concat((currentUser === null || currentUser === void 0 ? void 0 : currentUser.role) || 'user'), className: "w-full py-2 px-4 text-sm text-gray-700 hover:bg-gray-100 flex items-center gap-2", children: [_jsx(LayoutDashboardIcon, { className: "h-4 w-4" }), "Dashboard"] }), isLoggedIn && ((currentUser === null || currentUser === void 0 ? void 0 : currentUser.role) === "user" || (currentUser === null || currentUser === void 0 ? void 0 : currentUser.role) == null) &&
64
+ return (_jsx("header", { className: `fixed top-0 left-0 z-[100] mx-auto transition-all duration-300 w-full ${navbarBg} ${textColor} ${navbarBorder}`, children: _jsxs("div", { className: "mx-auto flex items-center justify-between gap-10 py-4 px-4 lg:px-8", children: [_jsxs(Link, { href: "/", className: "flex items-center gap-3", children: [_jsxs(Avatar, { className: "ml-2 -mr-4.5", children: [_jsx(AvatarImage, { src: "/images/logoicon.webp" }), _jsxs(AvatarFallback, { children: [(currentUser === null || currentUser === void 0 ? void 0 : currentUser.firstName.charAt(0)) || "D", (currentUser === null || currentUser === void 0 ? void 0 : currentUser.lastName.charAt(0)) || "P"] })] }), _jsx("span", { className: "font-heading text-xl font-bold", children: "rippeaze" })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs("nav", { className: "hidden md:flex items-center gap-10 justify-end", children: [_jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs("button", { className: `flex items-center gap-1 text-sm font-medium cursor-pointer ${navItemColor}`, children: [_jsx(Target, { className: "h-5 w-5" }), _jsx("span", { children: "Opportunities" }), _jsx(ChevronDown, { className: "h-4 w-4" })] }) }), _jsx(PopoverContent, { className: "w-56 p-2 mt-3 bg-white rounded-lg shadow-lg border", align: "start", sideOffset: 5, children: _jsx("div", { className: "flex flex-col", children: opportunityTypeOptions.map((opt) => (_jsxs(Link, { href: `/opportunities?type=${opt.value}`, className: "px-3 py-2 text-sm text-gray-700 hover:bg-gray-100 rounded-md flex flex-col", children: [_jsx("span", { className: "font-medium", children: opt.label }), _jsx("span", { className: "text-xs text-gray-500", children: opt.description })] }, opt.value))) }) })] }), _jsx(NavItem, { icon: _jsx(Luggage, { className: "h-5 w-5" }), label: "Packages", href: "/packages", className: navItemColor }), _jsx(NavItem, { icon: _jsx(Globe, { className: "h-5 w-5" }), label: "Blogs", href: "/blogs", className: navItemColor }), isLoggedIn && _jsx(NavItem, { icon: _jsx(MessageCircle, { className: "h-5 w-5" }), label: "Chat", href: "/chat", className: navItemColor, external: true }), currentUser ? _jsx(NavItem, { icon: _jsx(Store, { className: "h-5 w-5" }), label: "Become a Partner", href: "/contact", className: navItemColor })
65
+ : _jsx(NavItem, { icon: _jsx(Store, { className: "h-5 w-5" }), label: "Register as Business", href: "/auth/register?role=host", className: navItemColor }), isLoggedIn && _jsx(NotificationBell, { navItemColor: navItemColor })] }), _jsx("div", { className: "hidden md:flex items-center gap-2", children: _jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(Button, { variant: "link", className: "flex w-full gap-1 cursor-pointer", children: _jsxs(Avatar, { className: "ml-5 mr-4.5", children: [_jsx(AvatarImage, { src: (_a = currentUser === null || currentUser === void 0 ? void 0 : currentUser.profilePic) !== null && _a !== void 0 ? _a : "/images/profile_placeholder.webp" }), _jsxs(AvatarFallback, { children: [(currentUser === null || currentUser === void 0 ? void 0 : currentUser.firstName.charAt(0)) || "D", (currentUser === null || currentUser === void 0 ? void 0 : currentUser.lastName.charAt(0)) || "P"] })] }) }) }), _jsx(PopoverContent, { className: `w-full p-0 mt-3 bg-${dark ? "primary" : "white"} rounded-lg shadow-lg`, align: "end", sideOffset: 5, children: _jsxs("div", { className: "py-2 w-full", children: [_jsxs("div", { className: "px-4 py-3 border-b w-full", children: [_jsx("p", { className: "text-sm font-medium", children: (currentUser === null || currentUser === void 0 ? void 0 : currentUser.username) || "Guest" }), _jsx("p", { className: "text-xs text-gray-500", children: (currentUser === null || currentUser === void 0 ? void 0 : currentUser.email) || "user@example.com" })] }), _jsxs("div", { className: "flex flex-col", children: [isLoggedIn ?
66
+ _jsxs(Link, { href: `/profile/${(currentUser === null || currentUser === void 0 ? void 0 : currentUser.role) || "user"}/${(currentUser === null || currentUser === void 0 ? void 0 : currentUser.username) || "Guest"}`, className: "w-full py-2 px-4 text-sm text-gray-700 hover:bg-gray-100 flex items-center gap-2", children: [_jsxs(Avatar, { className: "w-4 h-4", children: [_jsx(AvatarImage, { src: (_b = currentUser === null || currentUser === void 0 ? void 0 : currentUser.profilePic) !== null && _b !== void 0 ? _b : "/images/profile_placeholder.webp" }), _jsx(AvatarFallback, { children: "U" })] }), "Profile"] }) :
67
+ _jsxs(Button, { variant: "ghost", onClick: () => router.push('/auth/login?role=user'), className: "w-full py-2 px-4 text-sm text-gray-700 hover:bg-gray-100 flex items-center gap-2 justify-start", children: [_jsxs(Avatar, { className: "w-4 h-4", children: [_jsx(AvatarImage, { src: "/images/profile_placeholder.webp" }), _jsx(AvatarFallback, { children: "U" })] }), "Login As Volunteer"] }), isLoggedIn && _jsxs(Link, { href: `/overview/${(currentUser === null || currentUser === void 0 ? void 0 : currentUser.role) || 'user'}`, className: "w-full py-2 px-4 text-sm text-gray-700 hover:bg-gray-100 flex items-center gap-2", children: [_jsx(LayoutDashboardIcon, { className: "h-4 w-4" }), "Dashboard"] }), isLoggedIn && ((currentUser === null || currentUser === void 0 ? void 0 : currentUser.role) === "user" || (currentUser === null || currentUser === void 0 ? void 0 : currentUser.role) == null) &&
119
68
  _jsxs(Link, { href: "/opportunities/favourites", className: "w-full py-2 px-4 text-sm text-gray-700 hover:bg-gray-100 flex items-center gap-2", children: [_jsx(Heart, { className: "h-4 w-4" }), "Favourites"] }), (currentUser === null || currentUser === void 0 ? void 0 : currentUser.role) === "host" ?
120
- _jsxs(Button, { variant: "ghost", onClick: function () { return __awaiter(_this, void 0, void 0, function () {
121
- return __generator(this, function (_a) {
122
- switch (_a.label) {
123
- case 0: return [4 /*yield*/, logout()];
124
- case 1:
125
- _a.sent();
126
- router.push('/auth/login?role=user');
127
- return [2 /*return*/];
128
- }
129
- });
130
- }); }, className: "w-full py-2 px-4 text-sm text-gray-700 hover:bg-gray-100 flex items-center gap-2 justify-start", children: [_jsxs(Avatar, { className: "w-4 h-4", children: [_jsx(AvatarImage, { src: "/images/profile_placeholder.webp" }), _jsx(AvatarFallback, { children: "U" })] }), "Login As Volunteer"] })
69
+ _jsxs(Button, { variant: "ghost", onClick: async () => {
70
+ await logout();
71
+ router.push('/auth/login?role=user');
72
+ }, className: "w-full py-2 px-4 text-sm text-gray-700 hover:bg-gray-100 flex items-center gap-2 justify-start", children: [_jsxs(Avatar, { className: "w-4 h-4", children: [_jsx(AvatarImage, { src: "/images/profile_placeholder.webp" }), _jsx(AvatarFallback, { children: "U" })] }), "Login As Volunteer"] })
131
73
  :
132
- _jsxs(Button, { variant: "ghost", onClick: function () { return __awaiter(_this, void 0, void 0, function () {
133
- return __generator(this, function (_a) {
134
- switch (_a.label) {
135
- case 0:
136
- if (!isLoggedIn) return [3 /*break*/, 2];
137
- return [4 /*yield*/, logout()];
138
- case 1:
139
- _a.sent();
140
- _a.label = 2;
141
- case 2:
142
- router.push('/auth/login?role=host');
143
- return [2 /*return*/];
144
- }
145
- });
146
- }); }, className: "w-full py-2 px-4 text-sm text-gray-700 hover:bg-gray-100 flex items-center gap-2 justify-start", children: [_jsxs(Avatar, { className: "w-4 h-4", children: [_jsx(AvatarImage, { src: "/images/profile_placeholder.webp" }), _jsx(AvatarFallback, { children: "H" })] }), "Login As Business"] }), _jsx(Separator, { className: "my-1" }), isLoggedIn && _jsx(Button, { variant: "outline", className: "py-2 mx-2 text-sm text-gray-700 hover:bg-gray-100 justify-center cursor-pointer", onClick: function () {
74
+ _jsxs(Button, { variant: "ghost", onClick: async () => {
75
+ if (isLoggedIn) {
76
+ await logout();
77
+ }
78
+ router.push('/auth/login?role=host');
79
+ }, className: "w-full py-2 px-4 text-sm text-gray-700 hover:bg-gray-100 flex items-center gap-2 justify-start", children: [_jsxs(Avatar, { className: "w-4 h-4", children: [_jsx(AvatarImage, { src: "/images/profile_placeholder.webp" }), _jsx(AvatarFallback, { children: "H" })] }), "Login As Business"] }), _jsx(Separator, { className: "my-1" }), isLoggedIn && _jsx(Button, { variant: "outline", className: "py-2 mx-2 text-sm text-gray-700 hover:bg-gray-100 justify-center cursor-pointer", onClick: () => {
147
80
  logout();
148
- }, children: "Sign out" })] })] }) })] }) })] }), _jsx(MobileNavbar, { children: _jsx("div", { className: "rounded-b-lg py-4 px-4 shadow-xl ".concat("bg-background", " ").concat(textColor), children: _jsxs("nav", { className: "flex flex-col gap-1 pt-2", children: [_jsxs("div", { className: "flex flex-col", children: [_jsxs("div", { className: "flex items-center gap-2 py-2 px-2 text-muted-foreground", children: [_jsx(Target, { className: "h-5 w-5" }), _jsx("span", { className: "text-sm font-medium", children: "Opportunities" })] }), _jsx("div", { className: "pl-8 flex flex-col gap-1", children: opportunityTypeOptions.map(function (opt) { return (_jsx(Link, { href: "/opportunities?type=".concat(opt.value), className: "py-1.5 px-2 text-sm text-gray-600 hover:text-foreground hover:bg-gray-100 rounded", children: opt.label }, opt.value)); }) })] }), _jsx(MobileNavItem, { icon: _jsx(Luggage, { className: "h-5 w-5" }), label: "Packages", href: "/packages" }), _jsx(MobileNavItem, { icon: _jsx(Globe, { className: "h-5 w-5" }), label: "Blogs", href: "/blogs" }), currentUser ? _jsx(MobileNavItem, { icon: _jsx(Store, { className: "h-5 w-5" }), label: "Become a Partner", href: "/contact" }) :
149
- _jsx(MobileNavItem, { icon: _jsx(Store, { className: "h-5 w-5" }), label: "Register as Business", href: "/auth/register?role=host" }), isLoggedIn && _jsx(MobileNotificationBell, {}), isLoggedIn && _jsx(MobileNavItem, { icon: _jsx(LayoutDashboardIcon, { className: "h-5 w-5" }), label: "Dashboard", href: "/overview/".concat((currentUser === null || currentUser === void 0 ? void 0 : currentUser.role) || 'user'), className: "md:hidden" }), isLoggedIn && ((currentUser === null || currentUser === void 0 ? void 0 : currentUser.role) === "user" || (currentUser === null || currentUser === void 0 ? void 0 : currentUser.role) == null) &&
150
- _jsx(MobileNavItem, { icon: _jsx(Heart, { className: "h-5 w-5" }), label: "Favourites", href: "/opportunities/favourites", className: "md:hidden" }), isLoggedIn ? _jsxs(Link, { href: "/profile/".concat((currentUser === null || currentUser === void 0 ? void 0 : currentUser.role) || "user", "/").concat((currentUser === null || currentUser === void 0 ? void 0 : currentUser.username) || "Guest"), className: "flex w-full gap-1 cursor-pointer my-2", children: [_jsxs(Avatar, { className: "w-5 h-5 ml-2", children: [_jsx(AvatarImage, { src: (currentUser === null || currentUser === void 0 ? void 0 : currentUser.profilePic) || "/images/profile_placeholder.webp" }), _jsx(AvatarFallback, { children: "DP" })] }), _jsx(Label, { htmlFor: "username", className: "cursor-pointer text-muted-foreground hover:text-foreground", children: (currentUser === null || currentUser === void 0 ? void 0 : currentUser.username) || "Guest" })] }) :
81
+ }, children: "Sign out" })] })] }) })] }) })] }), _jsx(MobileNavbar, { children: _jsx("div", { className: `rounded-b-lg py-4 px-4 shadow-xl ${"bg-background"} ${textColor}`, children: _jsxs("nav", { className: "flex flex-col gap-1 pt-2", children: [_jsxs("div", { className: "flex flex-col", children: [_jsxs("div", { className: "flex items-center gap-2 py-2 px-2 text-muted-foreground", children: [_jsx(Target, { className: "h-5 w-5" }), _jsx("span", { className: "text-sm font-medium", children: "Opportunities" })] }), _jsx("div", { className: "pl-8 flex flex-col gap-1", children: opportunityTypeOptions.map((opt) => (_jsx(Link, { href: `/opportunities?type=${opt.value}`, className: "py-1.5 px-2 text-sm text-gray-600 hover:text-foreground hover:bg-gray-100 rounded", children: opt.label }, opt.value))) })] }), _jsx(MobileNavItem, { icon: _jsx(Luggage, { className: "h-5 w-5" }), label: "Packages", href: "/packages" }), _jsx(MobileNavItem, { icon: _jsx(Globe, { className: "h-5 w-5" }), label: "Blogs", href: "/blogs" }), currentUser ? _jsx(MobileNavItem, { icon: _jsx(Store, { className: "h-5 w-5" }), label: "Become a Partner", href: "/contact" }) :
82
+ _jsx(MobileNavItem, { icon: _jsx(Store, { className: "h-5 w-5" }), label: "Register as Business", href: "/auth/register?role=host" }), isLoggedIn && _jsx(MobileNotificationBell, {}), isLoggedIn && _jsx(MobileNavItem, { icon: _jsx(LayoutDashboardIcon, { className: "h-5 w-5" }), label: "Dashboard", href: `/overview/${(currentUser === null || currentUser === void 0 ? void 0 : currentUser.role) || 'user'}`, className: "md:hidden" }), isLoggedIn && ((currentUser === null || currentUser === void 0 ? void 0 : currentUser.role) === "user" || (currentUser === null || currentUser === void 0 ? void 0 : currentUser.role) == null) &&
83
+ _jsx(MobileNavItem, { icon: _jsx(Heart, { className: "h-5 w-5" }), label: "Favourites", href: "/opportunities/favourites", className: "md:hidden" }), isLoggedIn ? _jsxs(Link, { href: `/profile/${(currentUser === null || currentUser === void 0 ? void 0 : currentUser.role) || "user"}/${(currentUser === null || currentUser === void 0 ? void 0 : currentUser.username) || "Guest"}`, className: "flex w-full gap-1 cursor-pointer my-2", children: [_jsxs(Avatar, { className: "w-5 h-5 ml-2", children: [_jsx(AvatarImage, { src: (currentUser === null || currentUser === void 0 ? void 0 : currentUser.profilePic) || "/images/profile_placeholder.webp" }), _jsx(AvatarFallback, { children: "DP" })] }), _jsx(Label, { htmlFor: "username", className: "cursor-pointer text-muted-foreground hover:text-foreground", children: (currentUser === null || currentUser === void 0 ? void 0 : currentUser.username) || "Guest" })] }) :
151
84
  _jsxs(Link, { href: "/auth/login", className: "flex w-full gap-1 cursor-pointer my-2", children: [_jsxs(Avatar, { className: "w-5 h-5 ml-2", children: [_jsx(AvatarImage, { src: "/images/profile_placeholder.webp" }), _jsx(AvatarFallback, { children: "U" })] }), _jsx(Label, { htmlFor: "username", className: "cursor-pointer text-muted-foreground hover:text-foreground", children: "Login As Volunteer" })] }), (currentUser === null || currentUser === void 0 ? void 0 : currentUser.role) === "host" ?
152
- _jsxs(Button, { variant: "ghost", onClick: function () { return __awaiter(_this, void 0, void 0, function () {
153
- return __generator(this, function (_a) {
154
- switch (_a.label) {
155
- case 0: return [4 /*yield*/, logout()];
156
- case 1:
157
- _a.sent();
158
- router.push('/auth/login?role=user');
159
- return [2 /*return*/];
160
- }
161
- });
162
- }); }, className: "w-full text-md text-gray-500 flex gap-1 justify-start", children: [_jsxs(Avatar, { className: "w-5 h-5 -ml-2", children: [_jsx(AvatarImage, { src: "/images/profile_placeholder.webp" }), _jsx(AvatarFallback, { children: "U" })] }), "Login As Volunteer"] })
85
+ _jsxs(Button, { variant: "ghost", onClick: async () => {
86
+ await logout();
87
+ router.push('/auth/login?role=user');
88
+ }, className: "w-full text-md text-gray-500 flex gap-1 justify-start", children: [_jsxs(Avatar, { className: "w-5 h-5 -ml-2", children: [_jsx(AvatarImage, { src: "/images/profile_placeholder.webp" }), _jsx(AvatarFallback, { children: "U" })] }), "Login As Volunteer"] })
163
89
  :
164
- _jsxs(Button, { variant: "ghost", onClick: function () { return __awaiter(_this, void 0, void 0, function () {
165
- return __generator(this, function (_a) {
166
- switch (_a.label) {
167
- case 0:
168
- if (!isLoggedIn) return [3 /*break*/, 2];
169
- return [4 /*yield*/, logout()];
170
- case 1:
171
- _a.sent();
172
- _a.label = 2;
173
- case 2:
174
- router.push('/auth/login?role=host');
175
- return [2 /*return*/];
176
- }
177
- });
178
- }); }, className: "w-full text-md text-gray-500 flex gap-1 justify-start", children: [_jsxs(Avatar, { className: "w-5 h-5 -ml-2", children: [_jsx(AvatarImage, { src: "/images/profile_placeholder.webp" }), _jsx(AvatarFallback, { children: "H" })] }), "Login As Business"] }), isLoggedIn && _jsx(Button, { variant: "outline", className: "py-2 mx-2 text-sm text-gray-700 hover:bg-gray-100 justify-center cursor-pointer", onClick: function () {
90
+ _jsxs(Button, { variant: "ghost", onClick: async () => {
91
+ if (isLoggedIn) {
92
+ await logout();
93
+ }
94
+ router.push('/auth/login?role=host');
95
+ }, className: "w-full text-md text-gray-500 flex gap-1 justify-start", children: [_jsxs(Avatar, { className: "w-5 h-5 -ml-2", children: [_jsx(AvatarImage, { src: "/images/profile_placeholder.webp" }), _jsx(AvatarFallback, { children: "H" })] }), "Login As Business"] }), isLoggedIn && _jsx(Button, { variant: "outline", className: "py-2 mx-2 text-sm text-gray-700 hover:bg-gray-100 justify-center cursor-pointer", onClick: () => {
179
96
  logout();
180
97
  }, children: "Sign out" })] }) }) })] }) }));
181
98
  }
@@ -3,28 +3,26 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { usePathname, useSearchParams } from "next/navigation";
4
4
  import { Suspense } from "react";
5
5
  import { Pagination, PaginationContent, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious } from "../misc/pagination";
6
- function PaginationBarComponent(_a) {
7
- var currentPage = _a.currentPage, totalPages = _a.totalPages;
8
- var searchParams = useSearchParams();
9
- var pathname = usePathname();
6
+ function PaginationBarComponent({ currentPage, totalPages }) {
7
+ const searchParams = useSearchParams();
8
+ const pathname = usePathname();
10
9
  function createPageURL(page) {
11
- var params = new URLSearchParams(searchParams);
10
+ const params = new URLSearchParams(searchParams);
12
11
  params.set('page', page.toString());
13
- return "".concat(pathname, "?").concat(params.toString());
12
+ return `${pathname}?${params.toString()}`;
14
13
  }
15
- var maxVisible = 5;
16
- var half = Math.floor(maxVisible / 2);
17
- var start = Math.max(1, currentPage - half);
18
- var end = Math.min(totalPages, start + maxVisible - 1);
14
+ const maxVisible = 5;
15
+ const half = Math.floor(maxVisible / 2);
16
+ let start = Math.max(1, currentPage - half);
17
+ const end = Math.min(totalPages, start + maxVisible - 1);
19
18
  if (end - start < maxVisible - 1) {
20
19
  start = Math.max(1, end - maxVisible + 1);
21
20
  }
22
- return (_jsx(Pagination, { children: _jsxs(PaginationContent, { children: [currentPage > 1 && (_jsx(PaginationItem, { children: _jsx(PaginationPrevious, { href: createPageURL(currentPage - 1) }) })), Array.from({ length: end - start + 1 }, function (_, i) {
23
- var page = start + i;
21
+ return (_jsx(Pagination, { children: _jsxs(PaginationContent, { children: [currentPage > 1 && (_jsx(PaginationItem, { children: _jsx(PaginationPrevious, { href: createPageURL(currentPage - 1) }) })), Array.from({ length: end - start + 1 }, (_, i) => {
22
+ const page = start + i;
24
23
  return (_jsx(PaginationItem, { children: _jsx(PaginationLink, { href: createPageURL(page), isActive: page === currentPage, children: page }) }, page));
25
24
  }), currentPage < totalPages && (_jsx(PaginationItem, { children: _jsx(PaginationNext, { href: createPageURL(currentPage + 1) }) }))] }) }));
26
25
  }
27
- export default function PaginationBar(_a) {
28
- var currentPage = _a.currentPage, totalPages = _a.totalPages;
26
+ export default function PaginationBar({ currentPage, totalPages }) {
29
27
  return (_jsx(Suspense, { fallback: _jsx("div", { className: "w-full h-screen flex items-center justify-center", children: "Loading..." }), children: _jsx(PaginationBarComponent, { currentPage: currentPage, totalPages: totalPages }) }));
30
28
  }
@@ -2,7 +2,6 @@
2
2
  'use client';
3
3
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
4
  import Image from 'next/image';
5
- export function PortfolioItemComponent(_a) {
6
- var item = _a.item, onClick = _a.onClick;
5
+ export function PortfolioItemComponent({ item, onClick }) {
7
6
  return _jsxs("div", { className: "relative aspect-square group cursor-pointer rounded-md overflow-hidden border border-gray-200", onClick: onClick, children: [item.mediaType === 'video' ? (_jsx("video", { src: item.url, muted: true, loop: true, playsInline: true, preload: "metadata", className: "object-cover w-full h-full" })) : (_jsx(Image, { src: item.url, alt: item.caption, fill: true, sizes: "(max-width: 768px) 50vw, 33vw", className: "object-cover transition-transform duration-300 group-hover:scale-105", loading: "lazy" })), _jsx("div", { className: "absolute inset-0 bg-black/0 group-hover:bg-black/40 transition-all duration-300 flex items-center justify-center", children: _jsx("div", { className: "text-white p-3 text-center text-sm opacity-0 group-hover:opacity-100 line-clamp-3", children: item.caption }) })] });
8
7
  }
@@ -7,19 +7,18 @@ import { Button } from '../../misc/button';
7
7
  import { ExternalLink, ChevronLeft, ChevronRight } from 'lucide-react';
8
8
  import ShareButton from '../../misc/share';
9
9
  import { Avatar, AvatarFallback, AvatarImage } from '../../misc/avatar';
10
- export function PortfolioPopUp(_a) {
11
- var items = _a.items, currentIndex = _a.currentIndex, firstName = _a.firstName, profilePic = _a.profilePic;
12
- var _b = useState(items.at(currentIndex)), currentItem = _b[0], setCurrentItem = _b[1];
13
- var _c = useState(currentIndex), currentIdx = _c[0], setCurrentIdx = _c[1];
14
- var touchStartX = useRef(null);
15
- var containerRef = useRef(null);
10
+ export function PortfolioPopUp({ items, currentIndex, firstName, profilePic }) {
11
+ const [currentItem, setCurrentItem] = useState(items.at(currentIndex));
12
+ const [currentIdx, setCurrentIdx] = useState(currentIndex);
13
+ const touchStartX = useRef(null);
14
+ const containerRef = useRef(null);
16
15
  // const [likes, setLikes] = useState(currentItem.likes ?? 0);
17
16
  // const [isLiked, setIsLiked] = useState(false);
18
- var handleNext = function () {
17
+ const handleNext = () => {
19
18
  var _a;
20
19
  if (currentIdx < items.length - 1) {
21
- var nextIdx = currentIdx + 1;
22
- var nextItem = items[nextIdx];
20
+ const nextIdx = currentIdx + 1;
21
+ const nextItem = items[nextIdx];
23
22
  setCurrentItem(nextItem);
24
23
  setCurrentIdx(nextIdx);
25
24
  // setLikes(nextItem.likes ?? 0);
@@ -27,11 +26,11 @@ export function PortfolioPopUp(_a) {
27
26
  }
28
27
  (_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.focus();
29
28
  };
30
- var handlePrev = function () {
29
+ const handlePrev = () => {
31
30
  var _a;
32
31
  if (currentIdx > 0) {
33
- var prevIdx = currentIdx - 1;
34
- var prevItem = items[prevIdx];
32
+ const prevIdx = currentIdx - 1;
33
+ const prevItem = items[prevIdx];
35
34
  setCurrentItem(prevItem);
36
35
  setCurrentIdx(prevIdx);
37
36
  // setLikes(prevItem.likes ?? 0);
@@ -44,21 +43,21 @@ export function PortfolioPopUp(_a) {
44
43
  // setLikes(prev => isLiked ? prev - 1 : prev + 1);
45
44
  // };
46
45
  /** ⌨️ Keyboard navigation */
47
- var handleKeyDown = function (e) {
46
+ const handleKeyDown = (e) => {
48
47
  if (e.key === 'ArrowRight')
49
48
  handleNext();
50
49
  else if (e.key === 'ArrowLeft')
51
50
  handlePrev();
52
51
  };
53
52
  /** 📱 Touch swipe navigation */
54
- var handleTouchStart = function (e) {
53
+ const handleTouchStart = (e) => {
55
54
  if (e.touches[0])
56
55
  touchStartX.current = e.touches[0].clientX;
57
56
  };
58
- var handleTouchEnd = function (e) {
57
+ const handleTouchEnd = (e) => {
59
58
  if (touchStartX.current == null || !e.changedTouches[0])
60
59
  return;
61
- var diff = touchStartX.current - e.changedTouches[0].clientX;
60
+ const diff = touchStartX.current - e.changedTouches[0].clientX;
62
61
  if (Math.abs(diff) > 50) {
63
62
  // Swipe left → next, right → previous
64
63
  if (diff > 0)
@@ -68,5 +67,5 @@ export function PortfolioPopUp(_a) {
68
67
  }
69
68
  touchStartX.current = null;
70
69
  };
71
- return (_jsxs("div", { ref: containerRef, tabIndex: 0, onKeyDown: handleKeyDown, onTouchStart: handleTouchStart, onTouchEnd: handleTouchEnd, className: "w-full h-full flex items-center justify-center relative rounded-lg", children: [currentIdx > 0 && (_jsx(Button, { variant: "ghost", size: "sm", onClick: handlePrev, className: "absolute -left-3 md:-left-12 z-50 text-black hover:bg-white bg-white/70 h-7 w-7 md:h-10 md:w-10 p-0 rounded-full", children: _jsx(ChevronLeft, { className: "h-8 w-8" }) })), currentIdx < items.length - 1 && (_jsx(Button, { variant: "ghost", size: "sm", onClick: handleNext, className: "absolute -right-3 md:-right-12 z-50 text-black hover:bg-white bg-white/70 h-7 w-7 md:h-10 md:w-10 p-0 rounded-full", children: _jsx(ChevronRight, { className: "h-8 w-8" }) })), _jsx("div", { className: "flex items-center justify-center w-full h-full mx-auto", children: _jsxs("div", { className: "flex flex-col md:flex-row w-full h-full rounded-lg overflow-hidden bg-white/80 backdrop-blur-sm border border-white/20 shadow-2xl", children: [_jsx("div", { className: "flex-2 flex items-center justify-center bg-black", children: currentItem.mediaType === 'video' ? (_jsx("video", { src: currentItem.url, controls: true, autoPlay: true, loop: true, className: "max-w-full max-h-full object-contain" }, currentItem._id)) : (_jsx("div", { className: "relative w-full h-full", children: _jsx(Image, { src: currentItem.url, alt: currentItem.caption, fill: true, sizes: "70vw", className: "object-contain", priority: true }, currentItem._id) })) }), _jsxs("div", { className: "flex-1 flex flex-col bg-white/90 backdrop-blur-sm text-black", children: [_jsx("div", { className: "p-4 border-b border-white/20", children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "w-8 h-8 bg-gradient-to-r from-blue-500 to-purple-500 rounded-full flex items-center justify-center", children: _jsxs(Avatar, { className: "h-full w-full shadow-lg", children: [_jsx(AvatarImage, { src: profilePic }), _jsx(AvatarFallback, { children: ((firstName === null || firstName === void 0 ? void 0 : firstName[0]) || "DP") })] }) }), _jsxs("div", { children: [_jsxs("h3", { className: "font-semibold text-sm text-gray-900", children: [firstName, "'s Portfolio"] }), _jsxs("p", { className: "text-xs text-gray-500", children: [currentIdx + 1, " of ", items.length] })] })] }) }), _jsxs("div", { className: "flex-1 px-4 overflow-y-auto space-y-3", children: [_jsx("p", { className: "text-sm leading-relaxed text-gray-900", children: currentItem.caption }), currentItem.mainUrl && (_jsxs(Button, { variant: "outline", size: "sm", className: "w-full", onClick: function () { return window.open(currentItem.mainUrl, '_blank'); }, children: [_jsx(ExternalLink, { className: "w-4 h-4 mr-2" }), "View Source"] }))] }), _jsxs("div", { className: "flex flex-row justify-between border-t border-white/20 p-4 pt-2 bg-white/90 backdrop-blur-sm", children: [_jsxs("div", { className: "text-sm space-y-1", children: [_jsxs("p", { className: "font-medium text-gray-900", children: [5, " likes"] }), _jsxs("p", { className: "text-gray-600 text-xs", children: [currentItem.comments || 0, " comments \u2022 ", currentItem.shares || 0, " shares"] }), _jsx("p", { className: "text-gray-400 text-xs", children: "2 hours ago" })] }), _jsx("div", { className: "flex items-center gap-3 mb-3", children: _jsx(ShareButton, {}) })] })] })] }) })] }));
70
+ return (_jsxs("div", { ref: containerRef, tabIndex: 0, onKeyDown: handleKeyDown, onTouchStart: handleTouchStart, onTouchEnd: handleTouchEnd, className: "w-full h-full flex items-center justify-center relative rounded-lg", children: [currentIdx > 0 && (_jsx(Button, { variant: "ghost", size: "sm", onClick: handlePrev, className: "absolute -left-3 md:-left-12 z-50 text-black hover:bg-white bg-white/70 h-7 w-7 md:h-10 md:w-10 p-0 rounded-full", children: _jsx(ChevronLeft, { className: "h-8 w-8" }) })), currentIdx < items.length - 1 && (_jsx(Button, { variant: "ghost", size: "sm", onClick: handleNext, className: "absolute -right-3 md:-right-12 z-50 text-black hover:bg-white bg-white/70 h-7 w-7 md:h-10 md:w-10 p-0 rounded-full", children: _jsx(ChevronRight, { className: "h-8 w-8" }) })), _jsx("div", { className: "flex items-center justify-center w-full h-full mx-auto", children: _jsxs("div", { className: "flex flex-col md:flex-row w-full h-full rounded-lg overflow-hidden bg-white/80 backdrop-blur-sm border border-white/20 shadow-2xl", children: [_jsx("div", { className: "flex-2 flex items-center justify-center bg-black", children: currentItem.mediaType === 'video' ? (_jsx("video", { src: currentItem.url, controls: true, autoPlay: true, loop: true, className: "max-w-full max-h-full object-contain" }, currentItem._id)) : (_jsx("div", { className: "relative w-full h-full", children: _jsx(Image, { src: currentItem.url, alt: currentItem.caption, fill: true, sizes: "70vw", className: "object-contain", priority: true }, currentItem._id) })) }), _jsxs("div", { className: "flex-1 flex flex-col bg-white/90 backdrop-blur-sm text-black", children: [_jsx("div", { className: "p-4 border-b border-white/20", children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "w-8 h-8 bg-gradient-to-r from-blue-500 to-purple-500 rounded-full flex items-center justify-center", children: _jsxs(Avatar, { className: "h-full w-full shadow-lg", children: [_jsx(AvatarImage, { src: profilePic }), _jsx(AvatarFallback, { children: ((firstName === null || firstName === void 0 ? void 0 : firstName[0]) || "DP") })] }) }), _jsxs("div", { children: [_jsxs("h3", { className: "font-semibold text-sm text-gray-900", children: [firstName, "'s Portfolio"] }), _jsxs("p", { className: "text-xs text-gray-500", children: [currentIdx + 1, " of ", items.length] })] })] }) }), _jsxs("div", { className: "flex-1 px-4 overflow-y-auto space-y-3", children: [_jsx("p", { className: "text-sm leading-relaxed text-gray-900", children: currentItem.caption }), currentItem.mainUrl && (_jsxs(Button, { variant: "outline", size: "sm", className: "w-full", onClick: () => window.open(currentItem.mainUrl, '_blank'), children: [_jsx(ExternalLink, { className: "w-4 h-4 mr-2" }), "View Source"] }))] }), _jsxs("div", { className: "flex flex-row justify-between border-t border-white/20 p-4 pt-2 bg-white/90 backdrop-blur-sm", children: [_jsxs("div", { className: "text-sm space-y-1", children: [_jsxs("p", { className: "font-medium text-gray-900", children: [5, " likes"] }), _jsxs("p", { className: "text-gray-600 text-xs", children: [currentItem.comments || 0, " comments \u2022 ", currentItem.shares || 0, " shares"] }), _jsx("p", { className: "text-gray-400 text-xs", children: "2 hours ago" })] }), _jsx("div", { className: "flex items-center gap-3 mb-3", children: _jsx(ShareButton, {}) })] })] })] }) })] }));
72
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"review-page.d.ts","sourceRoot":"","sources":["../../src/main/review-page.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAqB,gBAAgB,EAAc,MAAM,sCAAsC,CAAC;AAoD/G,UAAU,eAAe;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;CACzC;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAC/B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,UAA0B,EAC1B,QAAgB,EAChB,cAAmB,EACnB,cAAyB,GAC5B,EAAE,eAAe,2CAsNjB"}
1
+ {"version":3,"file":"review-page.d.ts","sourceRoot":"","sources":["../../src/main/review-page.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAqB,gBAAgB,EAAc,MAAM,sCAAsC,CAAC;AAoD/G,UAAU,eAAe;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;CACzC;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAC/B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,UAA0B,EAC1B,QAAgB,EAChB,cAAmB,EACnB,cAAyB,GAC5B,EAAE,eAAe,2CAwQjB"}