Skip to content

Commit 0420eff

Browse files
authored
Merge pull request #452 from Meet-hybrid/Add-winner-announcement-confetti-animation-to-WinnerAnnouncement-modal
Add confetti animation to WinnerAnnouncement modal and clean up Navba…
2 parents c1f9907 + a83add4 commit 0420eff

9 files changed

Lines changed: 127 additions & 17 deletions

File tree

build2.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
2+
> tikka@0.0.0 build
3+
> tsc -b && vite build
4+
5+
src/providers/AuthProvider.spec.tsx(9,24): error TS6133: 'useAuthContext' is declared but its value is never read.

build3.txt

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
2+
> tikka@0.0.0 build
3+
> tsc -b && vite build
4+
5+
vite v7.3.2 building client environment for production...
6+
transforming...
7+
✓ 3021 modules transformed.
8+
rendering chunks...
9+
computing gzip size...
10+
dist/index.html  1.73 kB │ gzip: 0.77 kB
11+
dist/assets/3-B2PXQJel.png  5.65 kB
12+
dist/assets/4-BxACK2jC.png  6.36 kB
13+
dist/assets/5-xEgLFcUT.png  6.85 kB
14+
dist/assets/8-6vf27Hhz.png  7.00 kB
15+
dist/assets/1-5jXDgs-q.png  7.10 kB
16+
dist/assets/7-Ds_8B3RO.png  7.83 kB
17+
dist/assets/DiscordLogo-Dp2iuK3u.svg  7.91 kB │ gzip: 1.65 kB
18+
dist/assets/2-6CXo4oID.png  7.94 kB
19+
dist/assets/6-DYhjU5Wq.png  8.21 kB
20+
dist/assets/Union-D-10JQOL.png  30.36 kB
21+
dist/assets/featraff-Bv4sVt5c.png  412.08 kB
22+
dist/assets/detailimage--ZG6nh61.png  538.04 kB
23+
dist/assets/hero-img-JiVLtEnX.png 1,813.94 kB
24+
dist/assets/index-DjKgvGZD.css  77.94 kB │ gzip: 13.08 kB
25+
dist/assets/x-CI6RJ3w-.js  0.16 kB │ gzip: 0.15 kB
26+
dist/assets/user-yeQMMHK8.js  0.19 kB │ gzip: 0.18 kB
27+
dist/assets/external-link-D23OKI0E.js  0.25 kB │ gzip: 0.20 kB
28+
dist/assets/notificationService-CJSnWAaU.js  0.61 kB │ gzip: 0.37 kB
29+
dist/assets/EnterRaffleButton-C-zKBDh6.js  1.02 kB │ gzip: 0.68 kB
30+
dist/assets/ProgressBar-CXtr5O3o.js  1.25 kB │ gzip: 0.66 kB
31+
dist/assets/ErrorMessage-NjG9FfBp.js  1.42 kB │ gzip: 0.61 kB
32+
dist/assets/Breadcrumbs-Bx0KKdNB.js  1.60 kB │ gzip: 0.89 kB
33+
dist/assets/useRaffles-DWPGBBer.js  2.16 kB │ gzip: 0.82 kB
34+
dist/assets/Search-CypVeaax.js  2.67 kB │ gzip: 1.29 kB
35+
dist/assets/FAQPage-BxOTr0Be.js  2.82 kB │ gzip: 1.37 kB
36+
dist/assets/raffleService-i53A7lDq.js  3.12 kB │ gzip: 1.12 kB
37+
dist/assets/AddToCalendar-DqKF7-op.js  3.33 kB │ gzip: 1.44 kB
38+
dist/assets/Home-By8lGLNQ.js  3.45 kB │ gzip: 1.45 kB
39+
dist/assets/RaffleCardSkeleton-1LQ8-qI2.js  4.60 kB │ gzip: 1.09 kB
40+
dist/assets/VerifiedBadge-C7frfgeQ.js  5.13 kB │ gzip: 3.20 kB
41+
dist/assets/Transparency-Dha5WipW.js  5.28 kB │ gzip: 1.90 kB
42+
dist/assets/Leaderboard-C5ot4-9h.js  5.40 kB │ gzip: 1.71 kB
43+
dist/assets/detailimage-CdDhT-9z.js  5.60 kB │ gzip: 2.28 kB
44+
dist/assets/LandingPage-xD8jpPVM.js  7.70 kB │ gzip: 2.29 kB
45+
dist/assets/FeaturedRaffle-D6iW0j42.js  7.72 kB │ gzip: 2.73 kB
46+
dist/assets/MyRaffles-DRH-Qgwo.js  8.04 kB │ gzip: 2.46 kB
47+
dist/assets/Settings-DsDczQ31.js  8.51 kB │ gzip: 2.36 kB
48+
dist/assets/WinnerDemo-Dp8ZD0Ds.js  10.41 kB │ gzip: 4.04 kB
49+
dist/assets/confetti.module-w0HAUrg8.js  10.67 kB │ gzip: 4.28 kB
50+
dist/assets/browser-ponyfill-CVM2qnkm.js  11.04 kB │ gzip: 3.84 kB
51+
dist/assets/RafflePage-CqIKUbhS.js  14.82 kB │ gzip: 3.87 kB
52+
dist/assets/RaffleDetails-nSitqoKo.js  23.82 kB │ gzip: 8.49 kB
53+
dist/assets/Support-TQ_jwaVG.js  28.11 kB │ gzip: 10.37 kB
54+
dist/assets/CreateRaffle-IpK_4PvU.js  254.43 kB │ gzip: 64.30 kB
55+
dist/assets/OracleAdmin-CyrF21P1.js  363.87 kB │ gzip: 108.92 kB
56+
dist/assets/index-CSJk34Yd.js 1,925.24 kB │ gzip: 568.27 kB
57+

58+
(!) Some chunks are larger than 500 kB after minification. Consider:
59+
- Using dynamic import() to code-split the application
60+
- Use build.rollupOptions.output.manualChunks to improve chunking: https://rollupjs.org/configuration-options/#output-manualchunks
61+
- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.
62+
✓ built in 1m 36s

client/src/components/Navbar.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,10 @@ import tikka from "../assets/svg/Tikka.svg";
66
import WalletButton from "./WalletButton";
77
import ThemeToggle from "./ThemeToggle";
88
import SignInButton from "./SignInButton";
9-
import NotificationBellIcon from "./cards/NotificationBellIcon";
109
import { Search } from "lucide-react";
1110
import { useWalletContext } from "../providers/WalletProvider";
1211
import { STELLAR_CONFIG } from "../config/stellar";
1312
import { useTranslation } from "react-i18next";
14-
import { Globe } from "lucide-react";
1513

1614

1715
const Navbar = ({ onStart }: { onStart?: () => void }) => {

client/src/components/landing/TrendingRaffles.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import { useNavigate } from "react-router-dom";
66
import { useRaffle } from "../../hooks/useRaffles";
77
import RaffleCardSkeleton from "../ui/RaffleCardSkeleton";
88
import ErrorMessage from "../ui/ErrorMessage";
9+
import Modal from "../modals/Modal";
10+
import SuccessfulTicket from "../modals/SuccessfulTicket";
911

1012
interface TrendingRafflesProps {
1113
raffleIds: number[];

client/src/components/modals/WinnerAnnouncement.tsx

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import React from "react";
1+
import React, { useEffect, useRef } from "react";
22
import { X } from "lucide-react";
3+
import confetti from "canvas-confetti";
34
import type {
45
WinnerAnnouncementProps,
56
SocialPlatform,
@@ -14,6 +15,58 @@ const WinnerAnnouncement: React.FC<WinnerAnnouncementProps> = ({
1415
walletAddress = "0x330cd8fec...8b7c",
1516
isVisible = true,
1617
}) => {
18+
const hasFiredRef = useRef(false);
19+
20+
useEffect(() => {
21+
if (!isVisible) return;
22+
if (hasFiredRef.current) return;
23+
24+
const prefersReducedMotion = window.matchMedia(
25+
"(prefers-reduced-motion: reduce)"
26+
).matches;
27+
if (prefersReducedMotion) return;
28+
29+
hasFiredRef.current = true;
30+
31+
const duration = 3 * 1000;
32+
const animationEnd = Date.now() + duration;
33+
const defaults = {
34+
startVelocity: 30,
35+
spread: 360,
36+
ticks: 60,
37+
zIndex: 0,
38+
};
39+
40+
const randomInRange = (min: number, max: number) =>
41+
Math.random() * (max - min) + min;
42+
43+
const interval: ReturnType<typeof setInterval> = setInterval(() => {
44+
const timeLeft = animationEnd - Date.now();
45+
46+
if (timeLeft <= 0) {
47+
clearInterval(interval);
48+
return;
49+
}
50+
51+
const particleCount = 50 * (timeLeft / duration);
52+
confetti({
53+
...defaults,
54+
particleCount,
55+
origin: { x: randomInRange(0.1, 0.3), y: Math.random() - 0.2 },
56+
});
57+
confetti({
58+
...defaults,
59+
particleCount,
60+
origin: { x: randomInRange(0.7, 0.9), y: Math.random() - 0.2 },
61+
});
62+
}, 250);
63+
64+
return () => {
65+
clearInterval(interval);
66+
confetti.reset();
67+
};
68+
}, [isVisible]);
69+
1770
if (!isVisible) return null;
1871

1972
const socialPlatforms: SocialPlatform[] = [

client/src/pages/FAQ/FAQPage.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useState } from 'react';
1+
import { useState } from 'react';
22
import { faqData } from './FAQContent';
33

44
const FAQItem = ({ question, answer, id }: { question: string, answer: string, id: string }) => {

client/src/pages/Home.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { useTranslation } from "react-i18next";
1616
const PAGE_SIZE = 6;
1717

1818
const Home = () => {
19+
const { t } = useTranslation();
1920
const { raffles, total, error, isLoading: rafflesLoading, refetch } = useRaffles({
2021
status: "open",
2122
limit: PAGE_SIZE,

client/src/providers/AuthProvider.spec.tsx

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@
66
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
77
import { render, act } from '@testing-library/react';
88
import * as fc from 'fast-check';
9-
import React from 'react';
10-
import { AuthProvider, useAuthContext } from './AuthProvider';
9+
import { AuthProvider } from './AuthProvider';
1110

1211
// ── Mocks ─────────────────────────────────────────────────────────────────────
1312

@@ -51,14 +50,6 @@ afterEach(() => {
5150
vi.unstubAllEnvs();
5251
});
5352

54-
// ── Helper: render AuthProvider and get context ───────────────────────────────
55-
56-
function TestConsumer({ onContext }: { onContext: (ctx: ReturnType<typeof useAuthContext>) => void }) {
57-
const ctx = useAuthContext();
58-
onContext(ctx);
59-
return null;
60-
}
61-
6253
// ── P11: Wallet disconnect triggers logout ────────────────────────────────────
6354

6455
describe('P11: Wallet disconnect triggers logout', () => {

client/src/services/apiClient.spec.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@
33
* Feature: siws-auth
44
*/
55

6-
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
7-
import * as fc from 'fast-check';
8-
import { getToken, setToken, clearToken, apiRequest } from './apiClient';
6+
import { vi, beforeEach, afterEach } from 'vitest';
97

108
beforeEach(() => {
119
sessionStorage.clear();

0 commit comments

Comments
 (0)