From 4c1dfb06387e8d78d45c826c61df4aedea6c124a Mon Sep 17 00:00:00 2001
From: Jaydip Sanghani <91427591+jellydeck@users.noreply.github.com>
Date: Wed, 7 Jan 2026 16:32:55 +0530
Subject: [PATCH] chore: improve UX & chore work
- export panel can be closed by clicking outside
- icons are separate components
---
src/components/editor/Navbar.tsx | 140 +++++++++----------------------
src/components/icons/Bluesky.tsx | 14 ++++
src/components/icons/Github.tsx | 21 +++++
src/components/icons/X.tsx | 16 ++++
src/components/ui/popover.tsx | 20 ++---
5 files changed, 99 insertions(+), 112 deletions(-)
create mode 100644 src/components/icons/Bluesky.tsx
create mode 100644 src/components/icons/Github.tsx
create mode 100644 src/components/icons/X.tsx
diff --git a/src/components/editor/Navbar.tsx b/src/components/editor/Navbar.tsx
index d5175d6..658e69a 100644
--- a/src/components/editor/Navbar.tsx
+++ b/src/components/editor/Navbar.tsx
@@ -16,16 +16,18 @@ import {
Coffee,
ExternalLink,
Loader2,
- QrCode,
Heart,
- Twitter,
X,
CheckCircle,
- Github,
} from "lucide-react";
+import { Github } from "@/components/icons/Github";
+import { Bluesky } from "@/components/icons/Bluesky";
+import { X as XIcon } from "@/components/icons/X";
+
import { toast } from "sonner";
import { useMockupStore } from "@/contexts/MockupContext";
import html2canvas from "html2canvas";
+import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover";
export function Navbar() {
const [showExportOptions, setShowExportOptions] = useState(false);
@@ -36,8 +38,7 @@ export function Navbar() {
const { uploadedImage, imageBorder, fixedMargin, margin } = useMockupStore();
- const isMobile =
- typeof window !== "undefined" ? window.innerWidth < 768 : false;
+ const isMobile = typeof window !== "undefined" ? window.innerWidth < 768 : false;
const getQualityLabel = (value) => {
switch (value) {
@@ -56,9 +57,7 @@ export function Navbar() {
if (!uploadedImage) return;
try {
- const mockupElement = document.querySelector(
- "[data-mockup-canvas]",
- ) as HTMLDivElement;
+ const mockupElement = document.querySelector("[data-mockup-canvas]") as HTMLDivElement;
if (!mockupElement) throw new Error("Mockup canvas not found");
const imgElement = mockupElement.querySelector("img") as HTMLImageElement;
@@ -130,16 +129,11 @@ export function Navbar() {
const qualityMultiplier = quality[0];
try {
- await Promise.all(
- formats.map((format) => exportImage(format, qualityMultiplier)),
- );
+ await Promise.all(formats.map((format) => exportImage(format, qualityMultiplier)));
- toast.success(
- `Successfully exported all formats (${formats.join(", ")})!`,
- {
- icon: ,
- },
- );
+ toast.success(`Successfully exported all formats (${formats.join(", ")})!`, {
+ icon: ,
+ });
} catch (error) {
console.error("Export all formats error:", error);
toast.error("Failed to export some formats. Please try again.");
@@ -259,7 +253,7 @@ export function Navbar() {
rel="noopener noreferrer"
className="inline-flex gap-2 w-full grid-cols-2"
>
-
+
Hey, You can also help us out at here
@@ -320,9 +314,7 @@ export function Navbar() {
-
- Thanks so much!
-
+ Thanks for contribution!
@@ -333,9 +325,7 @@ export function Navbar() {
alt="QR code for making payment in Indian Rupees"
/>
-
- Scan with any UPI app
-
+
Scan with any UPI app
@@ -360,20 +350,7 @@ export function Navbar() {
rel="noopener noreferrer"
className="flex items-center gap-2"
>
-
+
Bluesky
@@ -384,12 +361,12 @@ export function Navbar() {
className="flex-1 border-primary/30 hover:border-primary/50"
>
-
+
Twitter
@@ -418,11 +395,7 @@ export function Navbar() {
{!isMobile && (
crafted by
-