From e8d1a8afded1df4a74677884b02414bc5aeceaef Mon Sep 17 00:00:00 2001 From: MasterGordon Date: Sat, 14 Jun 2025 04:37:10 +0200 Subject: [PATCH] moved to motion.dev --- bad | 1 - bun.lockb | Bin 258168 -> 259798 bytes package.json | 3 ++- src/Shell.tsx | 2 +- src/components/Board.tsx | 2 +- src/components/BounceImg.tsx | 2 +- src/components/Feed/Feed.tsx | 2 +- src/components/Feed/FeedItem.tsx | 2 +- src/components/LazyBoard.tsx | 3 +++ src/main.tsx | 2 +- src/themes/Theme.ts | 38 ++-------------------------- src/themes/useTheme.ts | 36 ++++++++++++++++++++++++++ src/views/collection/Collection.tsx | 2 +- src/views/endless/Endless.tsx | 2 +- src/views/home/Home.tsx | 2 +- src/views/home/Section.tsx | 10 +++++--- src/views/profile/Profile.tsx | 4 ++- src/views/store/Store.tsx | 31 +++++++++++++---------- vite.config.ts | 3 ++- 19 files changed, 81 insertions(+), 66 deletions(-) delete mode 100644 bad create mode 100644 src/components/LazyBoard.tsx create mode 100644 src/themes/useTheme.ts diff --git a/bad b/bad deleted file mode 100644 index 1b6af5b..0000000 --- a/bad +++ /dev/null @@ -1 +0,0 @@ -f7360d42-dcc1-4e1e-a90b-ef2295298872 diff --git a/bun.lockb b/bun.lockb index e7afa9353dcc236252775588c6777205abe03f41..ab2a72680d03170983abf300cab7d3eac5d15588 100755 GIT binary patch delta 49364 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 `Q~}qbLW|J)3P$t+4XR&?vYED zM5YcHLJ!x=-Kc1&Y^C_2a<_22ZLn$?SPACob7zbHQF*c)86|$?EXd57uZf`iS2%My(-%l?w_L50Q6NoEs{i`C0q)%=ruYP0yS|J9Fh|i@A;R;J`lS-S)8=ds4h` LS8UFeZ!Y{VsEPp{ delta 48083 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 NPlaGx&~l+X^FKNqSJ?mn diff --git a/package.json b/package.json index 8c4363d..cba12a9 100644 --- a/package.json +++ b/package.json @@ -35,9 +35,9 @@ "clsx": "^2.1.1", "dayjs": "^1.11.13", "drizzle-orm": "0.33.0", - "framer-motion": "^11.11.8", "jotai": "^2.10.0", "lucide-react": "^0.452.0", + "motion": "^12.18.1", "pixi-viewport": "^5.0.3", "pixi.js": "^7.0.0", "pixi.js-legacy": "^7.4.2", @@ -69,6 +69,7 @@ "typescript": "^5.6.3", "typescript-eslint": "^8.8.1", "vite": "^5.4.8", + "vite-bundle-analyzer": "^0.22.3", "vite-imagetools": "^7.0.4" } } diff --git a/src/Shell.tsx b/src/Shell.tsx index 33cbcc2..4a13e73 100644 --- a/src/Shell.tsx +++ b/src/Shell.tsx @@ -1,6 +1,6 @@ import { type PropsWithChildren, useEffect, useRef, useState } from "react"; import { Button } from "./components/Button"; -import { motion } from "framer-motion"; +import { motion } from "motion/react"; import { GitBranch, History, diff --git a/src/components/Board.tsx b/src/components/Board.tsx index e4f6d11..add2d08 100644 --- a/src/components/Board.tsx +++ b/src/components/Board.tsx @@ -10,8 +10,8 @@ import { type LoadedTexture, type LoadedTheme, type Theme, - useTheme, } from "../themes/Theme"; +import { useTheme } from "../themes/useTheme"; import { Container, Sprite, Stage, useTick } from "@pixi/react"; import Viewport from "./pixi/PixiViewport"; import type { Viewport as PixiViewport } from "pixi-viewport"; diff --git a/src/components/BounceImg.tsx b/src/components/BounceImg.tsx index 5818449..0a4f21c 100644 --- a/src/components/BounceImg.tsx +++ b/src/components/BounceImg.tsx @@ -1,4 +1,4 @@ -import { animate, motion } from "framer-motion"; +import { animate, motion } from "motion/react"; import { useRef } from "react"; const BounceImg = ({ src, className }: { src: string; className?: string }) => { diff --git a/src/components/Feed/Feed.tsx b/src/components/Feed/Feed.tsx index 824ca57..7c1e465 100644 --- a/src/components/Feed/Feed.tsx +++ b/src/components/Feed/Feed.tsx @@ -1,4 +1,4 @@ -import { AnimatePresence, motion } from "framer-motion"; +import { AnimatePresence, motion } from "motion/react"; import { useAtom } from "jotai"; import { feedItemsAtom, lootboxResultAtom } from "../../atoms"; import FeedItemElement from "./FeedItem"; diff --git a/src/components/Feed/FeedItem.tsx b/src/components/Feed/FeedItem.tsx index 1d99dc0..c74b393 100644 --- a/src/components/Feed/FeedItem.tsx +++ b/src/components/Feed/FeedItem.tsx @@ -1,4 +1,4 @@ -import { motion } from "framer-motion"; +import { motion } from "motion/react"; import type { PropsWithChildren } from "react"; import { formatTimeSpan } from "../../../shared/time"; import GemsIcon from "../GemIcon"; diff --git a/src/components/LazyBoard.tsx b/src/components/LazyBoard.tsx new file mode 100644 index 0000000..11bf3aa --- /dev/null +++ b/src/components/LazyBoard.tsx @@ -0,0 +1,3 @@ +import { lazy } from "react"; + +export const Board = lazy(() => import("./Board")); diff --git a/src/main.tsx b/src/main.tsx index f9b9815..acbe2c0 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -12,7 +12,7 @@ import Home from "./views/home/Home.tsx"; import Settings from "./views/settings/Settings.tsx"; import MatchHistory from "./views/match-history/MatchHistory.tsx"; import Collection from "./views/collection/Collection.tsx"; -import { AnimatePresence } from "framer-motion"; +import { AnimatePresence } from "motion/react"; import Store from "./views/store/Store.tsx"; import Profile from "./views/profile/Profile.tsx"; diff --git a/src/themes/Theme.ts b/src/themes/Theme.ts index 432eae0..b20507a 100644 --- a/src/themes/Theme.ts +++ b/src/themes/Theme.ts @@ -1,10 +1,9 @@ -import { Assets, Texture } from "pixi.js"; -import { useEffect, useState } from "react"; +import type { Texture } from "pixi.js"; type Png = typeof import("*.png"); type LazySprite = () => Promise; -interface WeightedLazySprites { +export interface WeightedLazySprites { weight: number; sprite: LazySprite; } @@ -54,36 +53,3 @@ export const mainWithSpecials = ( ...specials.map((sprite) => ({ weight: 0.05, sprite })), ]; }; - -export const useTheme = (theme: Theme) => { - const [loadedTheme, setLoadedTheme] = useState( - undefined - ); - useEffect(() => { - const loadTheme = async () => { - const loadedEntries = await Promise.all( - Object.entries(theme).map(async ([key, value]) => { - let loaded = value; - if (typeof value === "function") { - loaded = await Assets.load((await value()).default); - } - if (Array.isArray(value)) { - loaded = await Promise.all( - loaded.map(async (sprite: WeightedLazySprites) => { - return { - weight: sprite.weight, - sprite: await Assets.load((await sprite.sprite()).default), - }; - }) - ); - } - - return [key, loaded] as const; - }) - ); - setLoadedTheme(Object.fromEntries(loadedEntries) as LoadedTheme); - }; - loadTheme(); - }, [theme]); - return loadedTheme; -}; diff --git a/src/themes/useTheme.ts b/src/themes/useTheme.ts new file mode 100644 index 0000000..ea7e76f --- /dev/null +++ b/src/themes/useTheme.ts @@ -0,0 +1,36 @@ +import { Assets } from "pixi.js"; +import { useState, useEffect } from "react"; +import type { Theme, LoadedTheme, WeightedLazySprites } from "./Theme"; + +export const useTheme = (theme: Theme) => { + const [loadedTheme, setLoadedTheme] = useState( + undefined, + ); + useEffect(() => { + const loadTheme = async () => { + const loadedEntries = await Promise.all( + Object.entries(theme).map(async ([key, value]) => { + let loaded = value; + if (typeof value === "function") { + loaded = await Assets.load((await value()).default); + } + if (Array.isArray(value)) { + loaded = await Promise.all( + loaded.map(async (sprite: WeightedLazySprites) => { + return { + weight: sprite.weight, + sprite: await Assets.load((await sprite.sprite()).default), + }; + }), + ); + } + + return [key, loaded] as const; + }), + ); + setLoadedTheme(Object.fromEntries(loadedEntries) as LoadedTheme); + }; + loadTheme(); + }, [theme]); + return loadedTheme; +}; diff --git a/src/views/collection/Collection.tsx b/src/views/collection/Collection.tsx index 92a5193..2e528a4 100644 --- a/src/views/collection/Collection.tsx +++ b/src/views/collection/Collection.tsx @@ -1,6 +1,6 @@ import { Ellipsis } from "lucide-react"; import { testBoard } from "../../../shared/testBoard"; -import Board from "../../components/Board"; +import { Board } from "../../components/LazyBoard"; import { Button } from "../../components/Button"; import { themes } from "../../themes"; import { diff --git a/src/views/endless/Endless.tsx b/src/views/endless/Endless.tsx index d61ebcb..ef80503 100644 --- a/src/views/endless/Endless.tsx +++ b/src/views/endless/Endless.tsx @@ -1,10 +1,10 @@ -import Board from "../../components/Board"; import { useWSMutation, useWSQuery } from "../../hooks"; import { useAtom } from "jotai"; import { gameIdAtom } from "../../atoms"; import { Button } from "../../components/Button"; import LeaderboardButton from "../../components/LeaderboardButton"; import { Fragment, useEffect } from "react"; +import { Board } from "../../components/LazyBoard"; interface EndlessProps { gameId?: string; diff --git a/src/views/home/Home.tsx b/src/views/home/Home.tsx index d444161..10d341e 100644 --- a/src/views/home/Home.tsx +++ b/src/views/home/Home.tsx @@ -1,4 +1,4 @@ -import { animate, motion, useMotionValue, useTransform } from "framer-motion"; +import { animate, motion, useMotionValue, useTransform } from "motion/react"; import { useEffect } from "react"; import { useWSQuery } from "../../hooks"; import { Tag } from "../../components/Tag"; diff --git a/src/views/home/Section.tsx b/src/views/home/Section.tsx index ad0cd5e..44dfdc8 100644 --- a/src/views/home/Section.tsx +++ b/src/views/home/Section.tsx @@ -4,7 +4,7 @@ import { useMotionTemplate, useScroll, useTransform, -} from "framer-motion"; +} from "motion/react"; import { useEffect, useRef, useState } from "react"; import { cn } from "../../lib/utils"; @@ -48,8 +48,10 @@ const Section = ({ text, image, left }: SectionProps) => { className="md:w-[50%] h-90" // float up and down animate={{ - translateY: [0, 10, 0], - translateX: [0, 5, 0], + // translate: ["0 0", "5 10", "0 0"], + // transform: ["translate"] + x: [0, 10, 0], + y: [0, 5, 0], }} transition={{ repeat: Infinity, @@ -71,7 +73,7 @@ const Section = ({ text, image, left }: SectionProps) => { translateY, }} transition={{ - type: "just", + type: "spring", delay: 0.5, }} srcSet={image.map((i) => `${i.src} ${i.width}w`).join(", ")} diff --git a/src/views/profile/Profile.tsx b/src/views/profile/Profile.tsx index 7b8c4a9..03f3754 100644 --- a/src/views/profile/Profile.tsx +++ b/src/views/profile/Profile.tsx @@ -40,7 +40,9 @@ const Profile: React.FC = () => {

Total Games: {profile?.totalGames}

Highest Stage: {profile?.highestStage}

-

Average Stage: {profile?.averageStage}

+

+ Average Stage: {Math.round(profile?.averageStage ?? 1 * 100) / 100} +

diff --git a/src/views/store/Store.tsx b/src/views/store/Store.tsx index 6e147e6..f589781 100644 --- a/src/views/store/Store.tsx +++ b/src/views/store/Store.tsx @@ -16,9 +16,7 @@ import { lootboxResultAtom } from "../../atoms"; import { useAtom } from "jotai"; import { useEffect } from "react"; import Particles, { initParticlesEngine } from "@tsparticles/react"; -import { loadSlim } from "@tsparticles/slim"; -import { loadSeaAnemonePreset } from "@tsparticles/preset-sea-anemone"; -import { motion } from "framer-motion"; +import { motion } from "motion/react"; import BounceImg from "../../components/BounceImg"; const Store = () => { @@ -29,17 +27,24 @@ const Store = () => { // this should be run only once per application lifetime useEffect(() => { - initParticlesEngine(async (engine) => { - // you can initiate the tsParticles instance (engine) here, adding custom shapes or presets - // this loads the tsparticles package bundle, it's the easiest method for getting everything ready - // starting from v2 you can add only the features you need reducing the bundle size - //await loadAll(engine); - //await loadFull(engine); - await loadSlim(engine); - await loadSeaAnemonePreset(engine); + const cb = async () => { + const { loadSlim } = await import("@tsparticles/slim"); + const { loadSeaAnemonePreset } = await import( + "@tsparticles/preset-sea-anemone" + ); + initParticlesEngine(async (engine) => { + // you can initiate the tsParticles instance (engine) here, adding custom shapes or presets + // this loads the tsparticles package bundle, it's the easiest method for getting everything ready + // starting from v2 you can add only the features you need reducing the bundle size + //await loadAll(engine); + //await loadFull(engine); + await loadSlim(engine); + await loadSeaAnemonePreset(engine); - //await loadBasic(engine); - }); + //await loadBasic(engine); + }); + }; + cb(); }, []); return ( diff --git a/vite.config.ts b/vite.config.ts index 9ffaf19..34e8257 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -2,11 +2,12 @@ import { defineConfig } from "vite"; import react from "@vitejs/plugin-react-swc"; import tailwindcss from "@tailwindcss/vite"; import { imagetools } from "vite-imagetools"; +import { analyzer } from "vite-bundle-analyzer"; // https://vitejs.dev/config/ export default defineConfig({ server: { port: 3003, }, - plugins: [react(), tailwindcss(), imagetools()], + plugins: [react(), tailwindcss(), imagetools(), analyzer()], });