diff --git a/apps/level_up/.env.example b/apps/level_up/.env.example new file mode 100644 index 00000000..2b0f238e --- /dev/null +++ b/apps/level_up/.env.example @@ -0,0 +1,15 @@ +# NextAuth Configuration +NEXTAUTH_URL=http://localhost:3001 +NEXTAUTH_SECRET=your-nextauth-secret-here + +# SSC OAuth Configuration +SSC_CLIENT_ID=your-ssc-client-id + +#Game craft ssc event id +GAME_CRAFT_SSC_EVENT_ID=202501 + +# External App URLs +# Development: http://localhost:3000 +# Production: https://ceit-ssc.ir +NEXT_PUBLIC_SSC_URL=http://localhost:3000 +NEXT_PUBLIC_API_URL=https://localhost:8000 \ No newline at end of file diff --git a/apps/level_up/Dockerfile b/apps/level_up/Dockerfile new file mode 100644 index 00000000..f257cfbf --- /dev/null +++ b/apps/level_up/Dockerfile @@ -0,0 +1,26 @@ +# Step 1: Use a lightweight Node.js base +FROM node:20-alpine AS base + +# Step 2: Set working directory +WORKDIR /app + +# Step 3: Copy only dependency files first (for caching) +COPY pnpm-lock.yaml ./ +COPY package.json ./ +COPY pnpm-workspace.yaml ./ +COPY apps/game_craft/package.json apps/game_craft/ +COPY packages/core/package.json packages/core/ +COPY packages/ui/package.json packages/ui/ + +# Step 4: Install deps with pnpm (monorepo-aware) +RUN npm install -g pnpm@9 && pnpm install --frozen-lockfile + +# Step 5: Copy all source code +COPY . . + +# Step 6: Build game_craft +RUN pnpm run build + +# Step 7: Start production server +EXPOSE 3000 +CMD ["pnpm", "start"] diff --git a/apps/level_up/app/[locale]/(public)/faq/page.tsx b/apps/level_up/app/[locale]/(public)/faq/page.tsx new file mode 100644 index 00000000..bdb02f40 --- /dev/null +++ b/apps/level_up/app/[locale]/(public)/faq/page.tsx @@ -0,0 +1,153 @@ +"use client"; + +import { Flex, theme, Typography, Collapse, Space, Card } from "antd"; +import { useTranslations } from "next-intl"; +import { QuestionCircleOutlined } from "@ant-design/icons"; +import { useResponsive } from "lib/hooks/useResponsive"; + +const { useToken } = theme; + +export default function FAQPage() { + const { token } = useToken(); + const screens = useResponsive(); + const t = useTranslations("app"); + const faqViewPadding = screens.lg ? "3rem 5rem" : "3rem 2rem"; + + const items = [ + { + key: "1", + label: ( + + + + {t("faq.competitionParticipate.title")} + + + ), + children: ( + + {t("faq.competitionParticipate.content")} + + ), + }, + { + key: "2", + label: ( + + + + {t("faq.teamsConditions.title")} + + + ), + children: ( + + {t("faq.teamsConditions.content")} + + ), + }, + { + key: "3", + label: ( + + + + {t("faq.howToParticipate.title")} + + + ), + children: ( + + {t("faq.howToParticipate.content")} + + ), + }, + { + key: "4", + label: ( + + + + {t("faq.competitionRules.title")} + + + ), + children: ( + + {t("faq.competitionRules.content")} + + ), + } + ]; + + return ( + + + + + + + {t("faq.title")} + + + {t("faq.competitionConditions")} + + + + + + + + + ); +} diff --git a/apps/level_up/app/[locale]/(public)/gallery/page.tsx b/apps/level_up/app/[locale]/(public)/gallery/page.tsx new file mode 100644 index 00000000..a7927961 --- /dev/null +++ b/apps/level_up/app/[locale]/(public)/gallery/page.tsx @@ -0,0 +1,96 @@ +"use client"; + +import { Empty, Flex, theme, Typography, Image, Row, Col } from "antd"; +import { useTranslations } from "next-intl"; +import { useResponsive } from "../../../../lib/hooks/useResponsive"; +import { galleryImages } from "../../../../config/galleryImages"; + +const { useToken } = theme; + +export default function GalleryPage() { + const { token } = useToken(); + const screens = useResponsive(); + const t = useTranslations("app"); + const galleryViewPadding = screens.lg ? "3rem 5rem" : "3rem 2rem"; + + return ( + + + + {t("mainNavigation.gallery")} + + + {galleryImages.length > 0 ? ( + + + {galleryImages.map((image) => ( + + + {image.alt} + + + ))} + + + ) : ( + + )} + + + + ); +} diff --git a/apps/level_up/app/[locale]/(public)/history/page.tsx b/apps/level_up/app/[locale]/(public)/history/page.tsx new file mode 100644 index 00000000..561f6994 --- /dev/null +++ b/apps/level_up/app/[locale]/(public)/history/page.tsx @@ -0,0 +1,55 @@ +"use client"; + +import { Empty, Flex, theme, Typography } from "antd"; +import { useTranslations } from "next-intl"; +import {useResponsive} from "../../../../lib/hooks/useResponsive"; + +const { useToken } = theme; + +export default function HistoryPage() { + const { token } = useToken(); + const screens = useResponsive(); + const t = useTranslations("app"); + const historyViewPadding = screens.lg ? "3rem 5rem" : "3rem 2rem"; + + return ( + + + + {t("mainNavigation.history")} + + + + + + + ); +} diff --git a/apps/level_up/app/[locale]/(public)/layout.tsx b/apps/level_up/app/[locale]/(public)/layout.tsx new file mode 100644 index 00000000..cb63a5f6 --- /dev/null +++ b/apps/level_up/app/[locale]/(public)/layout.tsx @@ -0,0 +1,48 @@ +"use client"; + +import { FloatButton, Layout, theme } from "antd"; +import { AppHeader } from "../../../components/layout/AppHeader"; +import { AppFooter } from "../../../components/layout/AppFooter"; +import Wave from "../../../components/common/Wave"; +import { usePathname } from "next/navigation"; + +interface MainLayoutProps { + children: React.ReactNode; +} + +const { useToken } = theme; + +export default function MainLayout({ children }: MainLayoutProps) { + const { token } = useToken(); + const pathname = usePathname(); + + // if pathname == /[locale]/ --> home page + const isHomePage = pathname === "/" || /^\/[a-zA-Z-]+\/?$/.test(pathname); + + return ( + + + + {children} + + + + {/**/} + + ); +} diff --git a/apps/level_up/app/[locale]/(public)/news/page.tsx b/apps/level_up/app/[locale]/(public)/news/page.tsx new file mode 100644 index 00000000..7f6ebca4 --- /dev/null +++ b/apps/level_up/app/[locale]/(public)/news/page.tsx @@ -0,0 +1,55 @@ +"use client"; + +import { Empty, Flex, theme, Typography } from "antd"; +import { useTranslations } from "next-intl"; +import { useResponsive } from "../../../../lib/hooks/useResponsive"; + +const { useToken } = theme; + +export default function NewsPage() { + const { token } = useToken(); + const screens = useResponsive(); + const t = useTranslations("app"); + const newsViewPadding = screens.lg ? "3rem 5rem" : "3rem 2rem"; + + return ( + + + + {t("mainNavigation.news")} + + + + + + + ); +} diff --git a/apps/level_up/app/[locale]/(public)/page.tsx b/apps/level_up/app/[locale]/(public)/page.tsx new file mode 100644 index 00000000..80f32045 --- /dev/null +++ b/apps/level_up/app/[locale]/(public)/page.tsx @@ -0,0 +1,85 @@ +"use client"; + +import { Flex, theme } from "antd"; +import { GameCraftTimeline } from "../../../components/features/Timeline"; +import { GameCraftIntro } from "../../../components/features/home/GameCraftIntro"; +import { Prizes } from "../../../components/features/home/Prizes"; +import { AboutUs } from "../../../components/features/home/AboutUs"; +import { OfflineWorkshop } from "../../../components/features/workshops/OfflineWorkshop"; +import { OnlineWorkshop } from "../../../components/features/workshops/OnlineWorkshop"; +import { Sponsors } from "../../../components/features/home/Sponsors"; +import Wave from "../../../components/common/Wave"; +import { useResponsive } from "../../../lib/hooks/useResponsive"; +import { customColors } from "../../../config/colors"; +import WelcomePopup from "../../../components/features/popup/WelcomePopup"; +import { CompetitionsList } from "components/features/competitions/CompetitonsList"; + +const { useToken } = theme; + +export default function HomePage() { + const { token } = useToken(); + const screens = useResponsive(); + const homeViewPadding = screens.lg ? "3rem 5rem" : "3rem 2rem"; + + return ( + <> + {/**/} + + {/* GameCraft Introduction Section */} + + {/**/} + + {/*Timeline and Prizes Section*/} + {/**/} + {/**/} + + {/* Workshop Sections - Matching React order exactly */} +
+ + + + + + {/* Sponsors Section */} + {/**/} + + + {/* About Us Section */} + + + + ); +} diff --git a/apps/level_up/app/[locale]/(public)/sponsor/page.tsx b/apps/level_up/app/[locale]/(public)/sponsor/page.tsx new file mode 100644 index 00000000..8b17d3c9 --- /dev/null +++ b/apps/level_up/app/[locale]/(public)/sponsor/page.tsx @@ -0,0 +1,109 @@ +"use client"; + +import { Empty, Flex, theme, Typography } from "antd"; +import { useTranslations } from "next-intl"; +import {useResponsive} from "../../../../lib/hooks/useResponsive"; +import {sponsors} from "../../../../config/sponsors"; +import SponsorCard from "../../../../components/common/SponsorCard"; + +const { useToken } = theme; + +export default function SponsorsPage() { + const { token } = useToken(); + const screens = useResponsive(); + const t = useTranslations("app"); + const tSponsors = useTranslations("app.sponsors"); + + // Responsive padding configuration + const isMobile = !screens.md; + const isTablet = screens.md && !screens.lg; + + const getResponsivePadding = () => { + if (isMobile) return "2rem 1rem"; + if (isTablet) return "2.5rem 2rem"; + return "3rem 5rem"; + }; + + const getContainerPadding = () => { + if (isMobile) return token.padding; + if (isTablet) return token.paddingLG; + return token.padding; + }; + + const getMaxWidth = () => { + if (isMobile) return "100%"; + if (isTablet) return "800px"; + return "1200px"; + }; + + return ( + + + + {t("mainNavigation.sponsors")} + + + {sponsors.length > 0 ? ( + + {sponsors.map((sponsor, index) => ( + + ))} + + ) : ( + + )} + + + + ); +} diff --git a/apps/level_up/app/[locale]/(public)/sponsors/page.tsx b/apps/level_up/app/[locale]/(public)/sponsors/page.tsx new file mode 100644 index 00000000..a4aba452 --- /dev/null +++ b/apps/level_up/app/[locale]/(public)/sponsors/page.tsx @@ -0,0 +1,5 @@ +import { redirect } from 'next/navigation' + +export default function SponsorsRedirect() { + redirect('/sponsor') +} diff --git a/apps/level_up/app/[locale]/(public)/staffs/page.tsx b/apps/level_up/app/[locale]/(public)/staffs/page.tsx new file mode 100644 index 00000000..f280c4f3 --- /dev/null +++ b/apps/level_up/app/[locale]/(public)/staffs/page.tsx @@ -0,0 +1,5 @@ +import { StaffView } from "../../../../components/features/staff/StaffView"; + +export default function StaffsPage() { + return ; +} diff --git a/apps/level_up/app/[locale]/[...rest]/page.ts b/apps/level_up/app/[locale]/[...rest]/page.ts new file mode 100644 index 00000000..723244f9 --- /dev/null +++ b/apps/level_up/app/[locale]/[...rest]/page.ts @@ -0,0 +1,5 @@ +import { notFound } from "next/navigation"; + +export default function Page() { + return notFound(); +} diff --git a/apps/level_up/app/[locale]/auth/page.tsx b/apps/level_up/app/[locale]/auth/page.tsx new file mode 100644 index 00000000..0af67d6f --- /dev/null +++ b/apps/level_up/app/[locale]/auth/page.tsx @@ -0,0 +1,22 @@ +"use client"; + +import { useRouter } from "@bprogress/next"; +import { useRouter as nextIntlRouter } from "../../../lib/navigation"; +import { useSession } from "next-auth/react"; +import { useEffect, useState } from "react"; + +export default function LoginPage() { + const session = useSession(); + const router = useRouter({ customRouter: nextIntlRouter }); + + useEffect(() => { + if (session.status === "authenticated") { + router.push("/dashboard"); + // TODO: show toast + } else { + router.push("/"); + } + }, [session]); + + return
لطفا صبر کنید | please wait
; +} diff --git a/apps/level_up/app/[locale]/dashboard/events/page.tsx b/apps/level_up/app/[locale]/dashboard/events/page.tsx new file mode 100644 index 00000000..3d53c180 --- /dev/null +++ b/apps/level_up/app/[locale]/dashboard/events/page.tsx @@ -0,0 +1,180 @@ +"use client"; + +import { Alert, Col, Empty, Flex, Row, Spin, theme, Typography } from "antd"; +import { useTranslations } from "next-intl"; +import { WorkshopCard } from "components/features/workshops/WorkshopCard"; +import { PresentationType } from "@ssc/core"; +import { usePurchases } from "lib/hooks/usePurchases"; +import { CompetitionsList } from "components/features/competitions/CompetitonsList"; +import { useResponsive } from "lib/hooks/useResponsive"; + +const { useToken } = theme; + +export default function EventsPage() { + const { token } = useToken(); + const t = useTranslations("app"); + const { presentations, loading, error, isAuthenticated } = usePurchases(); + const screen = useResponsive(); + + // Filter presentations by type + const workshops = presentations.filter( + (p) => p.type === "workshop" || p.type === "course" + ); + const talks = presentations.filter((p) => p.type === "talk"); + + const renderSection = (items: typeof presentations, title: string) => { + if (loading) { + return ( + + + + ); + } + + if (error) { + return ( + + ); + } + + if (!items || items.length === 0) { + return ( + + + + ); + } + + return ( + + {items.map((item) => ( + + + + ))} + + ); + }; + + // If not authenticated, show message to login + if (!isAuthenticated) { + return ( + + + + ); + } + + return ( + + {/* Competition Section */} + + + {t("dashboard.events.competitions")} + + + + + {/* Workshops Section */} + + + {t("dashboard.events.workshops")} + + {renderSection(workshops, "کارگاه")} + + + {/* Talks Section */} + + + {t("dashboard.events.talks")} + + {renderSection(talks, "ارائه")} + + + ); +} diff --git a/apps/level_up/app/[locale]/dashboard/games/page.tsx b/apps/level_up/app/[locale]/dashboard/games/page.tsx new file mode 100644 index 00000000..0462a684 --- /dev/null +++ b/apps/level_up/app/[locale]/dashboard/games/page.tsx @@ -0,0 +1,59 @@ +"use client"; + +import { Divider, Flex, Grid, theme, Typography } from "antd"; +import { GameCard } from "../../../../components/features/games/GameCard"; +import { UploadGameForm } from "../../../../components/features/games/UploadGameForm"; +import { useTranslations } from "next-intl"; + +const { useToken } = theme; +const { useBreakpoint } = Grid; + +export default function GamesPage() { + const { token } = useToken(); + const screens = useBreakpoint(); + const t = useTranslations("app.dashboard.games"); + + return ( + + + + + + {screens.lg ? ( + + ) : ( + + {t("preview")} + + )} + + + + + + ); +} diff --git a/apps/level_up/app/[locale]/dashboard/layout.tsx b/apps/level_up/app/[locale]/dashboard/layout.tsx new file mode 100644 index 00000000..866f5aa1 --- /dev/null +++ b/apps/level_up/app/[locale]/dashboard/layout.tsx @@ -0,0 +1,166 @@ +"use client"; + +import {theme, Grid, Flex, Typography, Divider, Button} from "antd"; +import {ArrowLeftOutlined} from "@ant-design/icons"; +import {useDashboardNavigations} from "../../../lib/config/dashboard-navigation"; +import {DashboardHeader} from "../../../components/layout/dashboard"; +import {DashboardNavigationCard} from "../../../components/layout/dashboard"; +import LogoWithText from "../../../components/common/LogoWithText"; +import {usePathname} from "lib/navigation"; +import {useAuth} from "lib/hooks/useAuth"; +import {useEffect} from "react"; +import {useRouter} from "next/navigation"; +import {useTranslations} from "next-intl"; + +const {useToken} = theme; +const {useBreakpoint} = Grid; + +interface DashboardLayoutProps { + children: React.ReactNode; + params: Promise<{ locale: string }>; +} + +export default function DashboardLayout({children}: DashboardLayoutProps) { + const screens = useBreakpoint(); + const {token} = useToken(); + const dashboardNavigations = useDashboardNavigations(); + const pathname = usePathname(); + const {isAuthenticated} = useAuth(); + const router = useRouter(); + const t = useTranslations(); + + useEffect(() => { + if (!isAuthenticated) { + router.push("/"); + } + }, [isAuthenticated]); + + const handleBackToHome = () => { + router.push("/"); + }; + + return ( + + + + + {screens.lg ? ( + + {/* Back button aligned with logo */} + + + {/* Logo in center */} + + + {/* Empty div for spacing balance */} +
+ + ) : ( + <> + )} + + {screens.lg ? ( + + + + ) : ( + <> + )} + + + + + { + dashboardNavigations.find((item) => item.route === pathname) + ?.name + } + + + + + {children} + + + + + + + ); +} diff --git a/apps/level_up/app/[locale]/dashboard/online-account/page.tsx b/apps/level_up/app/[locale]/dashboard/online-account/page.tsx new file mode 100644 index 00000000..28e042d1 --- /dev/null +++ b/apps/level_up/app/[locale]/dashboard/online-account/page.tsx @@ -0,0 +1,132 @@ +"use client"; + +import { Alert, Button, Flex, theme, Typography } from "antd"; +import { usePurchases } from "lib/hooks/usePurchases"; +import { useSession } from "next-auth/react"; +import { useTranslations } from "next-intl"; +import { LuCopy } from "react-icons/lu"; +import { toast, ToastContainer } from "react-toastify"; + +const { useToken } = theme; + +export default function EventsPage() { + const { token } = useToken(); + const t = useTranslations("app"); + const { isAuthenticated } = usePurchases(); + const session = useSession(); + + const handleCopyCode = async (text: string) => { + try { + await navigator.clipboard.writeText(text); + toast.info("با موفقیت کپی شد"); + } catch (err) { + console.error("Failed to copy code:", err); + } + }; + + // If not authenticated, show message to login + if (!isAuthenticated) { + return ( + + + + ); + } + + return ( + + + {/* Skyroom Account */} + + + {t("dashboard.onlineAccount.skyroom")} + + + {t("dashboard.onlineAccount.description")} + + + + {t("dashboard.onlineAccount.username")} + + + {session.data.skyUsername} + + + + {t("dashboard.onlineAccount.password")} + + + {session.data.skyPassword} + + + + ); +} diff --git a/apps/level_up/app/[locale]/dashboard/page.tsx b/apps/level_up/app/[locale]/dashboard/page.tsx new file mode 100644 index 00000000..4ef00162 --- /dev/null +++ b/apps/level_up/app/[locale]/dashboard/page.tsx @@ -0,0 +1,12 @@ +import { redirect } from 'next/navigation' + +interface DashboardPageProps { + params: Promise<{ locale: string }> +} + +export default async function DashboardPage({ params }: DashboardPageProps) { + const { locale } = await params + + // Redirect to events page as the default dashboard page with proper locale + redirect(`/${locale}/dashboard/events`) +} diff --git a/apps/level_up/app/[locale]/dashboard/shopping-bag/page.tsx b/apps/level_up/app/[locale]/dashboard/shopping-bag/page.tsx new file mode 100644 index 00000000..fc9227c1 --- /dev/null +++ b/apps/level_up/app/[locale]/dashboard/shopping-bag/page.tsx @@ -0,0 +1,127 @@ +"use client"; + +import { PayBox } from "../../../../components/features/cart/PayBox"; +import ProductCart from "components/features/cart/ProductCart"; +import { useAppDispatch, useAppSelector } from "lib/store/store"; +import { + cartPresentationsSelector, + cartLoadingSelector, + cartErrorSelector, +} from "lib/store/cart/cart.selectors"; +import { useEffect } from "react"; +import { + fetchCartThunk, + removeItemFromCartThunk, +} from "lib/store/cart/cart.thunk"; +import { Flex, theme, Row, Col, Spin, Empty, Alert, message } from "antd"; +import {ItemType, PresentationType} from "@ssc/core"; + +const { useToken } = theme; + +// TODO: Hydrate redux with SSR, also make this component server component + +export default function ShoppingBagPage() { + const dispatch = useAppDispatch(); + const cartItems = useAppSelector(cartPresentationsSelector); + const loading = useAppSelector(cartLoadingSelector); + const error = useAppSelector(cartErrorSelector); + const { token } = useToken(); + + useEffect(() => { + dispatch(fetchCartThunk()); + }, [dispatch]); + + const handleRemoveItem = async (item_id: number, item_type: ItemType) => { + try { + await dispatch(removeItemFromCartThunk({ item_id, item_type })).unwrap(); + message.success("محصول از سبد خرید حذف شد"); + } catch (error) { + message.error("خطا در حذف محصول"); + } + }; + + const renderContent = () => { + if (loading) { + return ( + + + + ); + } + + if (error) { + return ( + + ); + } + + if (!cartItems || cartItems.length === 0) { + return ( + + + + ); + } + + return ( + + {cartItems.map((item) => ( + + handleRemoveItem(item.id, ItemType.PRESENTATION)} + /> + + ))} + + ); + }; + + return ( + + + {renderContent()} + + + + ); +} diff --git a/apps/level_up/app/[locale]/dashboard/team-status/page.tsx b/apps/level_up/app/[locale]/dashboard/team-status/page.tsx new file mode 100644 index 00000000..767782ab --- /dev/null +++ b/apps/level_up/app/[locale]/dashboard/team-status/page.tsx @@ -0,0 +1,32 @@ +"use client"; + +import { Flex, theme, Typography } from "antd"; +import { useTranslations } from "next-intl"; +import { TeamMemberContainer } from "../../../../components/features/team/TeamMemberContainer"; + +const { useToken } = theme; + +export default function TeamStatusPage() { + const t = useTranslations("app.dashboard.teamStatus"); + const { token } = useToken(); + + return ( + + {/* + {t("teamName")} + */} + + + ); +} diff --git a/apps/level_up/app/[locale]/layout.tsx b/apps/level_up/app/[locale]/layout.tsx new file mode 100644 index 00000000..1a9e6ca8 --- /dev/null +++ b/apps/level_up/app/[locale]/layout.tsx @@ -0,0 +1,189 @@ +import { NextIntlClientProvider } from "next-intl"; +import { getMessages } from "next-intl/server"; +import { ThemeProvider } from "next-themes"; +import localFont from "next/font/local"; +import "../globals.css"; +import { SoundProvider } from "components/providers/SoundProvider"; +import { AntdRegistry } from "@ant-design/nextjs-registry"; +import AuthProvider from "components/providers/AuthProvider"; +import AntDesignProvider from "components/providers/AntDesignProvider"; +import Providers from "components/Providers"; +import { routing } from "lib/routing"; +import StoreProvider from "components/providers/StoreProvider"; +import GoftinoProvider from "components/providers/GoftinoProvider"; + +// Font definitions +const estedad = localFont({ + src: [ + { + path: "../../public/fonts/Estedad-v7.3/webfonts/statics/Estedad-Thin.woff2", + weight: "100", + style: "normal", + }, + { + path: "../../public/fonts/Estedad-v7.3/webfonts/statics/Estedad-ExtraLight.woff2", + weight: "200", + style: "normal", + }, + { + path: "../../public/fonts/Estedad-v7.3/webfonts/statics/Estedad-Light.woff2", + weight: "300", + style: "normal", + }, + { + path: "../../public/fonts/Estedad-v7.3/webfonts/statics/Estedad-Regular.woff2", + weight: "400", + style: "normal", + }, + { + path: "../../public/fonts/Estedad-v7.3/webfonts/statics/Estedad-Medium.woff2", + weight: "500", + style: "normal", + }, + { + path: "../../public/fonts/Estedad-v7.3/webfonts/statics/Estedad-SemiBold.woff2", + weight: "600", + style: "normal", + }, + { + path: "../../public/fonts/Estedad-v7.3/webfonts/statics/Estedad-Bold.woff2", + weight: "700", + style: "normal", + }, + { + path: "../../public/fonts/Estedad-v7.3/webfonts/statics/Estedad-ExtraBold.woff2", + weight: "800", + style: "normal", + }, + { + path: "../../public/fonts/Estedad-v7.3/webfonts/statics/Estedad-Black.woff2", + weight: "900", + style: "normal", + }, + ], + variable: "--font-estedad", + display: "swap", +}); + +const vazirmatn = localFont({ + src: [ + { + path: "../../public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-Thin.woff2", + weight: "100", + style: "normal", + }, + { + path: "../../public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-ExtraLight.woff2", + weight: "200", + style: "normal", + }, + { + path: "../../public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-Light.woff2", + weight: "300", + style: "normal", + }, + { + path: "../../public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-Regular.woff2", + weight: "400", + style: "normal", + }, + { + path: "../../public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-Medium.woff2", + weight: "500", + style: "normal", + }, + { + path: "../../public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-SemiBold.woff2", + weight: "600", + style: "normal", + }, + { + path: "../../public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-Bold.woff2", + weight: "700", + style: "normal", + }, + { + path: "../../public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-ExtraBold.woff2", + weight: "800", + style: "normal", + }, + { + path: "../../public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-Black.woff2", + weight: "900", + style: "normal", + }, + ], + variable: "--font-vazirmatn", + display: "swap", +}); + +interface LocaleLayoutProps { + children: React.ReactNode; + params: Promise<{ locale: string }>; +} + +export function generateStaticParams() { + return routing.locales.map((locale) => ({ locale })); +} + +export async function generateMetadata({ + params, +}: { + params: Promise<{ locale: string }>; +}) { + const { locale } = await params; + + const title = locale === "fa" ? "لول‌آپ" : "LevelUp"; + const description = locale === "fa" ? "لول‌آپ - ۱۴۰۴" : "LevelUp - 2025"; + + return { + title, + description, + icons: { + icon: "/favicon.ico", + shortcut: "/favicon.ico", + apple: "/favicon.ico", + }, + }; +} + +export default async function LocaleLayout({ + children, + params, +}: LocaleLayoutProps) { + const { locale } = await params; + const messages = await getMessages(); + const direction = locale === "fa" ? "rtl" : "ltr"; + + return ( + + + + + + + + + + + {children} + + + + + + + + + + ); +} diff --git a/apps/level_up/app/[locale]/not-found.tsx b/apps/level_up/app/[locale]/not-found.tsx new file mode 100644 index 00000000..5a9218fb --- /dev/null +++ b/apps/level_up/app/[locale]/not-found.tsx @@ -0,0 +1,183 @@ +"use client"; + +import { Button, Typography, Flex } from "antd"; +import { useTranslations } from "next-intl"; +import { useRouter, usePathname } from "next/navigation"; +import Image from "next/image"; +import { HomeOutlined, ArrowLeftOutlined } from "@ant-design/icons"; +import { useTheme } from "next-themes"; +import { useEffect, useState } from "react"; + +const { Title, Paragraph } = Typography; + +export default function NotFound() { + const t = useTranslations("notFound"); + const router = useRouter(); + const pathname = usePathname(); + const { theme } = useTheme(); + const [mounted, setMounted] = useState(false); + + useEffect(() => { + setMounted(true); + }, []); + + const handleGoHome = () => { + // Extract the locale from the current pathname + const locale = pathname.split("/")[1] || "fa"; + router.push(`/${locale}`); + }; + + const handleGoBack = () => { + router.back(); + }; + + if (!mounted) return null; + + return ( +
+
+ + {/* Error Code */} +
+ + 404 + +
+ 404 +
+
+ + {/* Error Message */} +
+ + {t("title") || "Oops! Page Not Found"} + + + + {t("description") || + "It looks like the page you're looking for does not exist."} + +
+ + {/* Action Buttons */} + + + + + + + {/* Decorative Elements */} +
+
+
+
+
+
+ + +
+ ); +} diff --git a/apps/level_up/app/api/auth/[...nextauth]/route.ts b/apps/level_up/app/api/auth/[...nextauth]/route.ts new file mode 100644 index 00000000..dae0688b --- /dev/null +++ b/apps/level_up/app/api/auth/[...nextauth]/route.ts @@ -0,0 +1,374 @@ +import { BASE_URL } from "@ssc/core"; +import { RequestResponse } from "@ssc/core/lib/types/api/general"; +import { UserProfileResponse } from "@ssc/core/lib/types/api/User/user"; +import axios from "axios"; +import { serverApi } from "lib/api/server/serverApi"; +import NextAuth, { AuthOptions } from "next-auth"; +import { Provider } from "next-auth/providers"; +import { getRequestConfig } from "next-intl/server"; + +interface SSCProviderOptions { + clientId: string; + clientSecret?: string; +} + +interface SSCProfile { + success?: boolean; + data?: { + id?: number; + email: string; + first_name?: string; + last_name?: string; + profile_picture?: string; + phone_number?: string; + date_joined?: string; + sky_username?: string; + sky_password?: string; + }; + + // Direct fields for fallback + id?: number; + sub?: string; + email?: string; + first_name?: string; + last_name?: string; + profile_picture?: string; + sky_username?: string; + sky_password?: string; +} + +function SSCProvider(options: SSCProviderOptions): Provider { + return { + id: "ssc", + name: "SSC SSO", + type: "oauth", + authorization: { + url: `${ + process.env.NEXT_PUBLIC_SSC_URL || "http://localhost:3000" + }/login`, + params: { + scope: "read write", + response_type: "code", + }, + }, + token: { + url: `${BASE_URL}/o/token/`, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + async request(context: any) { + const { params, checks } = context; + console.log("Full token request context:", context); + + const formData = new URLSearchParams(); + formData.append("grant_type", "authorization_code"); + formData.append("code", params.code); + formData.append("client_id", process.env.SSC_CLIENT_ID!); + formData.append( + "redirect_uri", + `${ + process.env.NEXTAUTH_URL || "http://localhost:3001" + }/api/auth/callback/ssc` + ); + + const codeVerifier = checks?.code_verifier || params.code_verifier; + if (codeVerifier) { + formData.append("code_verifier", codeVerifier); + } else { + console.warn("PKCE code_verifier not found in context!"); + } + + console.log("Sending form data:", Object.fromEntries(formData)); + + const response = await fetch(`${BASE_URL}/o/token/`, { + method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded", + Accept: "application/json", + }, + body: formData, + }); + + console.log("!@!", response); + const result = await response.json(); + console.log("Token response from Django:", result); + + if (!response.ok) { + const errorDetail = + result.errors?.detail || + result.error_description || + result.error || + "Token exchange failed"; + throw new Error(`Token exchange failed: ${errorDetail}`); + } + + const tokens = result.data || result; + + if (!tokens.access_token) { + console.error("No access_token in response:", tokens); + throw new Error("access_token not found in response"); + } + + return { + tokens: { + access_token: tokens.access_token, + refresh_token: tokens.refresh_token, + token_type: tokens.token_type || "Bearer", + expires_in: tokens.expires_in, + scope: tokens.scope, + }, + }; + }, + }, + userinfo: { + url: `${BASE_URL}/profile/`, + }, + + clientId: options.clientId, + // Don't include clientSecret for PKCE flow + client: { + token_endpoint_auth_method: "none", + }, + checks: ["pkce", "state"], + profile(profile: SSCProfile) { + console.log("Processing profile:", profile); + + const userData = profile.data || profile; + + return { + id: userData.id?.toString() || userData.email || "", + name: `${userData.first_name || ""} ${userData.last_name || ""}`.trim(), + email: userData.email, + image: userData.profile_picture, + skyUsername: userData.sky_username, + skyPassword: userData.sky_password, + }; + }, + }; +} + +declare module "next-auth" { + interface Session { + accessToken?: string; + tokenType?: string; + expiresIn?: number; + scope?: string; + + skyUsername?: string; + skyPassword?: string; + } + + interface User { + accessToken?: string; + refreshToken?: string; + tokenType?: string; + expiresIn?: number; + scope?: string; + + skyUsername?: string; + skyPassword?: string; + } +} + +declare module "next-auth/jwt" { + interface JWT { + accessToken?: string; + refreshToken?: string; + tokenType?: string; + expiresIn?: number; + scope?: string; + expiresAt?: number; + provider?: string; + + skyUsername?: string; + skyPassword?: string; + } +} + +const authOptions: AuthOptions = { + providers: [ + SSCProvider({ + clientId: process.env.SSC_CLIENT_ID, + }), + ], + // debug: true, // Enable debug mode + // logger: { + // error(code, metadata) { + // console.error("NextAuth Error:", code, metadata); + // }, + // warn(code) { + // console.warn("NextAuth Warning:", code); + // }, + // debug(code, metadata) { + // console.log("NextAuth Debug:", code, metadata); + // }, + // }, + callbacks: { + async signIn({ user, account, profile, email, credentials }) { + console.log("SignIn callback triggered:", { + provider: account?.provider, + user: user?.email, + accountKeys: account ? Object.keys(account) : null, + profile: profile, + }); + + if (account?.provider === "ssc") { + try { + console.log("SSC account data:", account); + // Store OAuth tokens in user object + const userWithTokens = user; + userWithTokens.accessToken = account.access_token; + userWithTokens.refreshToken = account.refresh_token; + userWithTokens.tokenType = account.token_type || "Bearer"; + // Store expires_in as duration in seconds (not absolute timestamp) + userWithTokens.expiresIn = (account.expires_in as number) || 900; + return true; + } catch (error) { + console.error("Error handling SSC OAuth tokens:", error); + return false; + } + } + + if (account?.provider === "google") { + try { + const response = await serverApi.auth.googleAuth({ + access_token: account.access_token, + id_token: account.id_token, + }); + + if (response.status === 200 && response.data?.success) { + const tokenData = response.data.data; + // Store backend tokens in user object + const userWithTokens = user; + userWithTokens.accessToken = tokenData.access_token; + userWithTokens.refreshToken = tokenData.refresh_token; + userWithTokens.tokenType = tokenData.token_type; + userWithTokens.expiresIn = tokenData.expires_in; + return true; + } else { + console.error( + "Backend Google authentication failed:", + response.data + ); + return false; + } + } catch (error) { + console.error("Error authenticating with backend:", error); + return false; + } + } + + // Allow credentials provider sign in + // if (account?.provider === "credentials") { + // return true; + // } + + return false; + }, + + async jwt({ token, user, account }) { + if (user && account) { + const userWithTokens = user; + token.accessToken = userWithTokens.accessToken; + token.refreshToken = userWithTokens.refreshToken; + token.tokenType = userWithTokens.tokenType; + token.expiresIn = userWithTokens.expiresIn; // Duration in seconds + token.scope = userWithTokens.scope; + token.provider = account.provider; // Store provider info for refresh logic + + token.skyUsername = user.skyUsername; + token.skyPassword = user.skyPassword; + + // Calculate absolute expiry time in milliseconds + const expiresAt = Date.now() + (userWithTokens.expiresIn || 0) * 1000; + token.expiresAt = expiresAt; + } + + if (Date.now() < (token.expiresAt || 0)) { + return token; + } + + // Access token has expired, try to refresh it + try { + // For SSC OAuth tokens, use OAuth2 refresh endpoint + if (token.provider === "ssc" && token.refreshToken) { + const response = await serverApi.auth.refresh( + token.refreshToken, + process.env.SSC_CLIENT_ID! + ); + + console.log("Refresh response:", response.status); + + if (response.status === 200) { + console.log("Refreshed tokens:", response.data); + + if (response.data.success && response.data.data) { + const newTokenData = response.data.data; + token.accessToken = newTokenData.access_token; + token.refreshToken = + newTokenData.refresh_token ?? token.refreshToken; + token.tokenType = newTokenData.token_type; + token.expiresIn = newTokenData.expires_in; // Duration in seconds + + // Update expiry time - calculate absolute timestamp + const expiresAt = + Date.now() + (newTokenData.expires_in || 0) * 1000; + token.expiresAt = expiresAt; + + console.log( + "Token refreshed successfully, new expiry:", + new Date(expiresAt).toISOString() + ); + + return token; + } + } + } + } catch (error) { + console.error("Token refresh failed:", error); + console.error("Token refresh failed:", error.response); + console.error("Token refresh failed:", error.request); + } + + // Return null to force sign out + return null; + }, + + async session({ session, token }) { + const { + data: { data: user }, + } = await axios.get< + UserProfileResponse, + RequestResponse + >(`${BASE_URL}/profile/`, { + headers: { + Authorization: `Bearer ${token.accessToken}`, + }, + }); + + if (token.accessToken) { + const sessionWithTokens = session; + sessionWithTokens.accessToken = token.accessToken; + sessionWithTokens.tokenType = token.tokenType; + sessionWithTokens.expiresIn = token.expiresIn; + sessionWithTokens.scope = token.scope; + + session.skyUsername = user.sky_username; + session.skyPassword = user.sky_password; + } + + return session; + }, + }, + pages: { + signIn: "/auth", + error: "/auth", + }, + session: { + strategy: "jwt", + maxAge: 30 * 24 * 60 * 60, + }, + secret: process.env.NEXTAUTH_SECRET, +}; + +const handler = NextAuth(authOptions); + +export { handler as GET, handler as POST }; diff --git a/apps/level_up/app/favicon.ico b/apps/level_up/app/favicon.ico new file mode 100644 index 00000000..92c3c9db --- /dev/null +++ b/apps/level_up/app/favicon.ico @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/level_up/app/globals.css b/apps/level_up/app/globals.css new file mode 100644 index 00000000..940cce89 --- /dev/null +++ b/apps/level_up/app/globals.css @@ -0,0 +1,181 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +/* RTL support */ +[dir="rtl"] { + text-align: right; +} + +[dir="ltr"] { + text-align: left; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +html { + cursor: url("/cursor/pointer.cur"); +} + +a, +.ant-collapse-header:hover, +.ant-collapse-header:hover *, +.ant-image-mask:hover, +.ant-btn:not(:disabled):hover { + cursor: url("/cursor/cursor.cur"), auto !important; +} + +body { + width: auto; + min-height: 100vh; + font-family: var(--font-estedad), var(--font-vazirmatn), sans-serif; + background-color: lightyellow; + overflow: auto; + overflow-x: hidden; + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ +} + +::-webkit-scrollbar { + scrollbar-width: none; + display: none; +} + +/* Debug font variables */ +:root { + --font-estedad: 'Estedad'; + --font-vazirmatn: 'Vazirmatn'; +} + +/* RTL support */ +[dir="rtl"] { + text-align: right; +} + +[dir="ltr"] { + text-align: left; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + width: auto; + min-height: 100vh; + font-family: var(--font-estedad), var(--font-vazirmatn), sans-serif; + background-color: lightyellow; + overflow: auto; + overflow-x: hidden; + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ +} + +::-webkit-scrollbar { + scrollbar-width: none; + display: none; +} + +/* Debug font variables */ +:root { + --font-estedad: 'Estedad'; + --font-vazirmatn: 'Vazirmatn'; +} + +/* Custom Toastify Styles */ +.custom-toast-container .Toastify__toast { + background: #ffffff; + border: 2px solid #3c3a7d; + border-radius: 12px; + box-shadow: 0 4px 12px rgba(60, 58, 125, 0.15); + font-family: var(--font-estedad), var(--font-vazirmatn), sans-serif; + font-weight: 500; + color: #000000d9; + margin-bottom: 8px; +} + +.custom-toast-container .Toastify__toast--success { + border-color: #01B582; + background: linear-gradient(135deg, #ffffff 0%, #f0fdf9 100%); +} + +.custom-toast-container .Toastify__toast--error { + border-color: #ff4d4f; + background: linear-gradient(135deg, #ffffff 0%, #fef2f2 100%); +} + +.custom-toast-container .Toastify__toast--warning { + border-color: #faad14; + background: linear-gradient(135deg, #ffffff 0%, #fffbeb 100%); +} + +.custom-toast-container .Toastify__toast--info { + border-color: #3c3a7d; + background: linear-gradient(135deg, #ffffff 0%, #f8f9ff 100%); +} + +.custom-toast-container .Toastify__progress-bar { + height: 4px; +} + +.custom-toast-container .Toastify__progress-bar--success { + background: #01B582; +} + +.custom-toast-container .Toastify__progress-bar--error { + background: #ff4d4f; +} + +.custom-toast-container .Toastify__progress-bar--warning { + background: #faad14; +} + +.custom-toast-container .Toastify__progress-bar--info { + background: #3c3a7d; +} + +.custom-toast-container .Toastify__close-button { + color: #3c3a7d; + opacity: 0.7; +} + +.custom-toast-container .Toastify__close-button:hover { + opacity: 1; +} + +/* Dark mode support */ +.dark .custom-toast-container .Toastify__toast { + background: #262626; + color: #ffffffd9; + border-color: #4c4a8d; +} + +.dark .custom-toast-container .Toastify__toast--success { + border-color: #01B582; + background: linear-gradient(135deg, #262626 0%, #0f2420 100%); +} + +.dark .custom-toast-container .Toastify__toast--error { + border-color: #ff4d4f; + background: linear-gradient(135deg, #262626 0%, #2d1b1b 100%); +} + +.dark .custom-toast-container .Toastify__toast--warning { + border-color: #faad14; + background: linear-gradient(135deg, #262626 0%, #2d2416 100%); +} + +.dark .custom-toast-container .Toastify__toast--info { + border-color: #4c4a8d; + background: linear-gradient(135deg, #262626 0%, #1a1a2e 100%); +} + +.dark .custom-toast-container .Toastify__close-button { + color: #ffffffd9; +} diff --git a/apps/level_up/components/Providers.tsx b/apps/level_up/components/Providers.tsx new file mode 100644 index 00000000..0dc8d0e8 --- /dev/null +++ b/apps/level_up/components/Providers.tsx @@ -0,0 +1,37 @@ +"use client"; + +import { AppProgressProvider } from "@bprogress/next"; +import { ToastContainer } from "react-toastify"; +import "react-toastify/dist/ReactToastify.css"; + +const Providers = ({ children }: { children: React.ReactNode }) => { + return ( + + {children} + + + ); +}; + +export default Providers; diff --git a/apps/level_up/components/common/CrownBadge.tsx b/apps/level_up/components/common/CrownBadge.tsx new file mode 100644 index 00000000..6b1f069b --- /dev/null +++ b/apps/level_up/components/common/CrownBadge.tsx @@ -0,0 +1,48 @@ +"use client"; + +import React from "react"; +import Image from "next/image"; + +interface CrownBadgeProps { + children: React.ReactNode; +} + +const CrownBadge: React.FC = ({ children }) => { + return ( +
+
+ Crown +
+ {children} +
+ ); +}; + +const styles = { + wrapper: { + position: "relative" as const, + display: "inline-block", + width: "100%", + height: "100%", + }, + crownContainer: { + position: "absolute" as const, + top: 0, + right: 0, + transform: "translate(50%, -50%)", + zIndex: 1, + }, + crownIcon: { + width: "40px", + height: "40px", + transform: "rotate(35deg)", + }, +}; + +export default CrownBadge; diff --git a/apps/level_up/components/common/LogoWithText.tsx b/apps/level_up/components/common/LogoWithText.tsx new file mode 100644 index 00000000..056b8973 --- /dev/null +++ b/apps/level_up/components/common/LogoWithText.tsx @@ -0,0 +1,62 @@ +'use client' + +import { Flex, Typography } from 'antd' +import { useTranslations } from 'next-intl' +import Image from 'next/image' + +interface LogoWithTextProps { + variant?: 'dark' | 'light' + size?: number + className?: string +} + +export default function LogoWithText({ + variant = 'dark', + size = 100, + className = '' +}: LogoWithTextProps) { + const t = useTranslations('app') + + const logoSrc = variant === 'dark' ? '/images/logo/ssc_white.png' : '/images/logo/ssc_white.png' + + return ( + + + {t('logo.game')} + + + ssc Logo + + + {t('logo.craft')} + + + ) +} diff --git a/apps/level_up/components/common/SoundControls.tsx b/apps/level_up/components/common/SoundControls.tsx new file mode 100644 index 00000000..520d6237 --- /dev/null +++ b/apps/level_up/components/common/SoundControls.tsx @@ -0,0 +1,32 @@ +"use client"; + + +import {useSound} from "../providers/SoundProvider"; +import {Button} from "antd"; +import {SoundFilled, SoundOutlined} from "@ant-design/icons"; + +export function SoundControls() { + const { toggle, muted, volume, changeVolume } = useSound(); + + return ( +
+ + + changeVolume(parseFloat(e.target.value))} + className="w-20" + disabled={muted} + /> +
+ ); +} diff --git a/apps/level_up/components/common/SponsorCard.tsx b/apps/level_up/components/common/SponsorCard.tsx new file mode 100644 index 00000000..a44241ac --- /dev/null +++ b/apps/level_up/components/common/SponsorCard.tsx @@ -0,0 +1,128 @@ +"use client"; + +import {Typography, Button, Flex, theme, Tag} from "antd"; +import {LinkOutlined} from "@ant-design/icons"; +import Image from "next/image"; +import {Sponsor, sponsors} from "../../config/sponsors"; +import {useResponsive} from "../../lib/hooks/useResponsive"; +import {useTranslations} from "next-intl"; +import {customColors} from "../../config/colors"; + +const {Text, Title} = Typography; +const {useToken} = theme; + +interface SponsorCardProps { + sponsor: Sponsor; + index: number; +} + +export default function SponsorCard({sponsor, index}: SponsorCardProps) { + const {token} = useToken(); + const screens = useResponsive(); + const t = useTranslations("app.sponsors"); + + const isMobile = !screens.md; + + const handleVisitWebsite = () => { + window.open(sponsor.link, "_blank", "noopener,noreferrer"); + }; + + return ( + + {/* Sponsor Content */} + + + {/* Logo Section */} + + {`${sponsor.id} + + + {/* Content Section */} + + + {t(`${sponsor.id}.name`, {default: sponsor.id})} + + + + {t(`${sponsor.id}.description`)} + + + + + + + + {index < sponsors.length - 1 && ( + + + )} + + ); +} diff --git a/apps/level_up/components/common/TelegramIcon.tsx b/apps/level_up/components/common/TelegramIcon.tsx new file mode 100644 index 00000000..fd396c82 --- /dev/null +++ b/apps/level_up/components/common/TelegramIcon.tsx @@ -0,0 +1,33 @@ +import React from 'react'; + +interface TelegramIconProps { + color?: string; + size?: number | string; + className?: string; + style?: React.CSSProperties; +} + +export function TelegramIcon({ + color = 'currentColor', + size = 24, + className, + style +}: TelegramIconProps) { + return ( + + + + ); +} diff --git a/apps/level_up/components/common/ThemeToggle.tsx b/apps/level_up/components/common/ThemeToggle.tsx new file mode 100644 index 00000000..4c1729e0 --- /dev/null +++ b/apps/level_up/components/common/ThemeToggle.tsx @@ -0,0 +1,20 @@ +"use client"; + +import { Button } from "antd"; +import { MoonOutlined, SunOutlined } from "@ant-design/icons"; +import { useTheme } from "next-themes"; + +export default function ThemeToggle() { + const { theme, setTheme } = useTheme(); + + return ( + + ); +} diff --git a/apps/level_up/components/common/Wave.tsx b/apps/level_up/components/common/Wave.tsx new file mode 100644 index 00000000..d2d62d8a --- /dev/null +++ b/apps/level_up/components/common/Wave.tsx @@ -0,0 +1,36 @@ +import { CSSProperties } from "react"; + +interface WaveProps { + width?: string | number; + height?: string | number; + fill?: string; + style?: CSSProperties; + className?: string; +} + +export default function Wave({ + width = "100%", + height, + fill = "red", + style = {}, + className = "", +}: WaveProps) { + return ( + + + + ); +} diff --git a/apps/level_up/components/features/Timeline/GameCraftTimeline.tsx b/apps/level_up/components/features/Timeline/GameCraftTimeline.tsx new file mode 100644 index 00000000..e5f75ae2 --- /dev/null +++ b/apps/level_up/components/features/Timeline/GameCraftTimeline.tsx @@ -0,0 +1,142 @@ +import { ConfigProvider, Flex, Timeline, Typography } from "antd"; +import { useTranslations } from "next-intl"; +import Image from "next/image"; +import TimelineDot from "./TimelineDot"; +import TimelineLabel from "./TimelineLabel"; +import TimelineChildren from "./TimelineChildren"; + +interface GameCraftTimelineProps { + padding?: string | number; + backgroundColor?: string; + className?: string; +} + +export default function GameCraftTimeline({ + padding = "2rem", + backgroundColor = "transparent", + className = "", +}: GameCraftTimelineProps) { + const t = useTranslations("app.timeline"); + + const items = [ + { + dot: , + children: ( + + ), + label: , + }, + { + dot: , + children: ( + + ), + label: ( + + ), + }, + { + dot: , + children: ( + + ), + label: , + }, + { + dot: , + children: ( + + ), + label: , + }, + { + dot: , + children: ( + + ), + label: , + }, + { + dot: , + children: ( + + ), + label: , + }, + { + dot: , + children: ( + + ), + label: ( + + ), + }, + ]; + + return ( + + + Background bubble + + + {t("title")} + + + + + + ); +} diff --git a/apps/level_up/components/features/Timeline/TimelineChildren.tsx b/apps/level_up/components/features/Timeline/TimelineChildren.tsx new file mode 100644 index 00000000..7f9e4840 --- /dev/null +++ b/apps/level_up/components/features/Timeline/TimelineChildren.tsx @@ -0,0 +1,45 @@ +import { Flex, Typography } from "antd"; + +interface TimelineChildrenProps { + title: string; + time: string; + titleLevel?: 1 | 2 | 3 | 4 | 5; +} + +export default function TimelineChildren({ + title, + time, + titleLevel = 2, +}: TimelineChildrenProps) { + return ( + + + {title} + + + {time} + + + ); +} diff --git a/apps/level_up/components/features/Timeline/TimelineDot.tsx b/apps/level_up/components/features/Timeline/TimelineDot.tsx new file mode 100644 index 00000000..c1400dc6 --- /dev/null +++ b/apps/level_up/components/features/Timeline/TimelineDot.tsx @@ -0,0 +1,54 @@ +import { Avatar, Flex, theme } from "antd"; + +interface TimelineDotProps { + logoSrc?: string; + size?: string; +} + +const { useToken } = theme; + +export default function TimelineDot({ + logoSrc = "/mario/giphy-11.gif", + size = "5vw", +}: TimelineDotProps) { + const { token } = useToken(); + return ( + + + + + + + + ); +} diff --git a/apps/level_up/components/features/Timeline/TimelineLabel.tsx b/apps/level_up/components/features/Timeline/TimelineLabel.tsx new file mode 100644 index 00000000..25021d25 --- /dev/null +++ b/apps/level_up/components/features/Timeline/TimelineLabel.tsx @@ -0,0 +1,32 @@ +import { Flex } from "antd"; +import Image from "next/image"; + +interface TimelineLabelProps { + logo: string; + alt?: string; + width?: string; +} + +export default function TimelineLabel({ + logo, + alt = "Timeline step", + width = "30%", +}: TimelineLabelProps) { + return ( + + {alt} + + ); +} diff --git a/apps/level_up/components/features/Timeline/index.ts b/apps/level_up/components/features/Timeline/index.ts new file mode 100644 index 00000000..45a9a4e0 --- /dev/null +++ b/apps/level_up/components/features/Timeline/index.ts @@ -0,0 +1,5 @@ +export { default as GameCraftTimeline } from './GameCraftTimeline' +export { default as TimelineDot } from './TimelineDot' +export { default as TimelineLabel } from './TimelineLabel' +export { default as TimelineChildren } from './TimelineChildren' + diff --git a/apps/level_up/components/features/cart/CartButton.tsx b/apps/level_up/components/features/cart/CartButton.tsx new file mode 100644 index 00000000..9d3fbc3f --- /dev/null +++ b/apps/level_up/components/features/cart/CartButton.tsx @@ -0,0 +1,71 @@ +'use client'; + +import {Badge, Button, Spin} from "antd"; +import {useFormatter} from "lib/hooks/useFormatter"; +import { + cartErrorSelector, + cartPresentationsCountSelector, + cartLoadingSelector, +} from "lib/store/cart/cart.selectors"; +import {useAppDispatch, useAppSelector} from "lib/store/store"; +import {useEffect, useMemo} from "react"; +import {FaShoppingCart} from "react-icons/fa"; +import {CgSpinnerTwoAlt} from "react-icons/cg"; +import {fetchCartThunk} from "lib/store/cart/cart.thunk"; +import {useRouter as nextIntlRouter} from "lib/routing"; +import {useRouter} from "@bprogress/next"; +import {ShoppingCartOutlined} from "@ant-design/icons"; +import {LoadingOutlined} from "@ant-design/icons"; + +const CartButton = () => { + const {formatNumberToMoney} = useFormatter(); + const router = useRouter({customRouter: nextIntlRouter}); + const dispatch = useAppDispatch(); + const counter = useAppSelector(cartPresentationsCountSelector); + const error = useAppSelector(cartErrorSelector); + const loading = useAppSelector(cartLoadingSelector); + + useEffect(() => { + dispatch(fetchCartThunk()); + }, []); + + const badge = useMemo(() => { + if (loading) { + return ; + } else { + if (error) { + return "!"; + } else { + return formatNumberToMoney(counter); + } + } + }, [counter, error, loading]); + + return ( + + //
router.push("/dashboard/shopping-bag")} + // > + // + //
+ // {badge} + //
+ //
+ ); +}; + +export default CartButton; diff --git a/apps/level_up/components/features/cart/PayBox.tsx b/apps/level_up/components/features/cart/PayBox.tsx new file mode 100644 index 00000000..3854188b --- /dev/null +++ b/apps/level_up/components/features/cart/PayBox.tsx @@ -0,0 +1,244 @@ +"use client"; + +import { + cartPresentationsSelector, + cartLoadingSelector, + cartPaymentDataSelector, +} from "lib/store/cart/cart.selectors"; +import { createAndCheckoutThunk } from "lib/store/order/order.thunk"; +import { + applyBonusCodeThunk, + removeBonusCodeThunk, +} from "lib/store/cart/cart.thunk"; +import { useAppDispatch, useAppSelector } from "lib/store/store"; +import { useCallback, useState } from "react"; +import { + Flex, + Divider, + Typography, + Button as AntButton, + theme, + Spin, + Modal, + Input, + message, +} from "antd"; +import { useFormatter } from "lib/hooks/useFormatter"; +import { toast, ToastContainer } from "react-toastify"; +import { FaCross } from "react-icons/fa"; +import { MdCancel } from "react-icons/md"; + +const { useToken } = theme; + +export function PayBox() { + const dispatch = useAppDispatch(); + const cartItems = useAppSelector(cartPresentationsSelector); + const paymentData = useAppSelector(cartPaymentDataSelector); + const loading = useAppSelector(cartLoadingSelector); + const { token, theme } = useToken(); + const { formatNumberToMoney } = useFormatter(); + + // State for discount code modal and input + const [isDiscountModalOpen, setIsDiscountModalOpen] = useState(false); + const [discountCode, setDiscountCode] = useState(""); + const [discountLoading, setDiscountLoading] = useState(false); + + const applyDiscount = () => { + setIsDiscountModalOpen(true); + }; + + const handleDiscountSubmit = async () => { + if (!discountCode.trim()) { + toast.error("لطفاً کد تخفیف را وارد کنید"); + return; + } + + setDiscountLoading(true); + try { + await dispatch(applyBonusCodeThunk(discountCode.trim())).unwrap(); + toast.success("کد تخفیف با موفقیت اعمال شد"); + setIsDiscountModalOpen(false); + setDiscountCode(""); + } catch (error) { + toast.error("کد تخفیف معتبر نمی باشد"); + } finally { + setDiscountLoading(false); + } + }; + + const handleDiscountCancel = () => { + setIsDiscountModalOpen(false); + setDiscountCode(""); + }; + + const checkout = useCallback(() => { + dispatch(createAndCheckoutThunk(cartItems.map((item) => item.id))) + .unwrap() + .then((res) => { + window.open(res.payment_url, "_blank"); + }) + .catch((error) => { + console.error(error); + }); + }, [cartItems, dispatch]); + + if (loading) { + return ( + + + + ); + } + + return ( + + + + + + {!paymentData.discountCode ? ( + <> + کد تخفیف دارید؟ + + وارد کردن + + + ) : ( + <> + کد تخفیف شما: + <> + + + {paymentData.discountCode} + + } + onClick={() => dispatch(removeBonusCodeThunk())} + style={{ padding: 0, margin: 0 }} + aria-label="حذف کد تخفیف" + /> + + + + )} + + + + + جمع کل: + + {formatNumberToMoney(paymentData.subTotal)} تومان + + + + {paymentData.discountAmount > 0 && ( + + تخفیف: + + -{formatNumberToMoney(paymentData.discountAmount)} تومان + + + )} + + + + + + مبلغ نهایی: + + + {formatNumberToMoney(paymentData.total)} تومان + + + + + + + پرداخت + + + + + + {/* Discount Code Modal */} + + + کد تخفیف خود را وارد کنید: + setDiscountCode(e.target.value)} + onPressEnter={handleDiscountSubmit} + size="large" + disabled={discountLoading} + /> + + + + ); +} diff --git a/apps/level_up/components/features/cart/ProductCart.tsx b/apps/level_up/components/features/cart/ProductCart.tsx new file mode 100644 index 00000000..ddbb06ec --- /dev/null +++ b/apps/level_up/components/features/cart/ProductCart.tsx @@ -0,0 +1,120 @@ +import {digitsToHindi, moneyFormat} from "@ssc/utils"; +import Image from "next/image"; +import React from "react"; +import {Card, Flex, Typography, Button, theme, Grid} from 'antd'; +import {DeleteOutlined} from "@ant-design/icons"; + +const {useToken} = theme; +const {useBreakpoint} = Grid; + +interface Props { + title: string; + price: string; + imageUrl: string; + onRemove: () => void; +} + +const ProductCart = (props: Props) => { + const {token} = useToken(); + const screens = useBreakpoint(); + + const isMobile = !screens.md; + const imageSize = isMobile ? 48 : 64; + + return ( + + + {/* Main content section - Image and Title */} + + {props.title} + + {props.title} + + + + {/* Price and Action section */} + + + {digitsToHindi(moneyFormat(props.price))} تومان + + + ); + case "approved_awaiting_payment": + return ( + + ); + case "awaiting_payment_confirmation": + return ( + + ); + case "active": + return ( + + ); + default: + break; + } + }; + + useEffect(() => { + if (isAuthenticated) + dispatch(fetchTeamsThunk()) + .unwrap() + .catch((err) => { + toast.error(err.message); + }); + + setFilteredTeams( + teams.filter( + (team) => + isTeamSizeValid(team.memberships.length) && + (!team.group_competition_details || + team.group_competition_details.id == competitionId) + ) + ); + }, [isAuthenticated, showGroupModal]); + + const handlePayment = (teamId: number) => { + dispatch(payTeamThunk(teamId)) + .unwrap() + .then((res) => { + if (res.paymentUrl) { + window.open(res.paymentUrl, "_blank"); + } else { + // free + toast.success("پرداخت با موفقیت انجام شد"); + } + }) + .catch((err) => { + toast.error(err.message); + }); + }; + + const handleRegisterCompetition = (team: TeamDetails) => { + const pending = team.memberships.some( + (member) => member.status === "pending" + ); + if (pending) { + toast.error("تمامی اعضای تیم باید درخواست عضویت خود را تایید کنند"); + return; + } + + dispatch(registerTeamThunk({ teamId: team.id, competitionId })) + .unwrap() + .then((res) => { + toast.success(res.message); + }) + .catch((err) => { + toast.error(err.message); + }); + }; + + const content = useMemo(() => { + if (loading) { + return ( + + + + ); + } else if (error) { + return ( + + ); + } else { + return filteredTeams.length === 0 ? ( + + با هر تیمی تنها یک ثبت نام ممکن است، با مراجعه به + داشبورد{" "} + + سایت انجمن (ceit-ssc.ir) + {" "} + میتوانید تیم جدید با اعضای دلخواه بسازید + + } + type="info" + showIcon + /> + ) : ( + filteredTeams.map((team) => { + return ( + + )} + + ); + }) + ); + } + }, [teams, filteredTeams, t, loading]); + + const cardButton = () => ( + + ); + + return ( + <> + {cardButton()} + setShowGroupModal(false)} + footer={ + [ + // Only show action button if not purchased + // ...(!isPurchased + // ? [ + // : + // } + // onClick={() => { + // if (isSelected) { + // removeFromCart(); + // } else { + // handleAddToCart(); + // } + // setShowModal(false); + // }} + // disabled={ + // !competition.is_active || + // buttonShouldBeDisabled || + // competition.capacity <= 0 || + // !isAuthenticated + // } + // loading={buttonLoading} + // > + // {buttonText} + // , + // ] + // : []), + ] + } + width={700} + style={{ top: 50, zIndex: 200 }} + styles={{ + body: { maxHeight: "70vh", overflowY: "auto" }, + }} + > + + انتخاب تیم برای ثبت نام + + + {isAuthenticated && content} + + + + ); +}; + +export default GroupModal; diff --git a/apps/level_up/components/features/games/GameCard.tsx b/apps/level_up/components/features/games/GameCard.tsx new file mode 100644 index 00000000..7bcaeefe --- /dev/null +++ b/apps/level_up/components/features/games/GameCard.tsx @@ -0,0 +1,108 @@ +"use client"; + +import React from "react"; +import { Button, Flex, theme, Typography } from "antd"; +import { HeartOutlined } from "@ant-design/icons"; +import { useTranslations } from "next-intl"; +import Image from "next/image"; + +const { useToken } = theme; + +interface GameCardProps { + gameName?: string; + gameDescription?: string; + gameImage?: string; +} + +export const GameCard: React.FC = ({ + gameName = "Game Name", + gameDescription = "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Asperiores dicta obcaecati quae! Ab aspernatur blanditiis dignissimos eum fugiat itaque maxime modi nisi non omnis ratione repellat sed suscipit, totam vero.", + gameImage = "/images/logo/gameTestImage.jpg" +}) => { + const { token } = useToken(); + const t = useTranslations("app.dashboard.games"); + + return ( + + +
+ Game Image +
+ + + {gameName} + +
+ + + {gameDescription} + + + + + +
+ ); +}; diff --git a/apps/level_up/components/features/games/UploadGameForm.tsx b/apps/level_up/components/features/games/UploadGameForm.tsx new file mode 100644 index 00000000..d61abcb8 --- /dev/null +++ b/apps/level_up/components/features/games/UploadGameForm.tsx @@ -0,0 +1,89 @@ +"use client"; + +import React from "react"; +import { Button, Flex, Input, theme, Typography, Upload } from "antd"; +import { PlusOutlined } from "@ant-design/icons"; +import { useTranslations } from "next-intl"; + +const { useToken } = theme; + +export const UploadGameForm: React.FC = () => { + const { token } = useToken(); + const t = useTranslations("app.dashboard.games"); + + return ( + + + + + {t("upload")} + + + + + + + + + + + + + + ); +}; diff --git a/apps/level_up/components/features/home/AboutUs.tsx b/apps/level_up/components/features/home/AboutUs.tsx new file mode 100644 index 00000000..a620ae26 --- /dev/null +++ b/apps/level_up/components/features/home/AboutUs.tsx @@ -0,0 +1,74 @@ +"use client"; + +import { Button, Col, Flex, Row, Typography } from "antd"; +import Image from "next/image"; +import { useRouter as useNextIntlRouter } from "../../../lib/navigation"; +import { useTranslations } from "next-intl"; +import { customColors } from "../../../config/colors"; +import { useRouter } from "@bprogress/next"; + +interface AboutUsProps { + padding?: string; + backgroundColor?: string; +} + +export function AboutUs({ + padding = "3rem 2rem", + backgroundColor, +}: AboutUsProps) { + const router = useRouter({ + customRouter: useNextIntlRouter, + }); + const t = useTranslations("app"); + + return ( + + + + + + + {t("aboutUs.title")} + + + {t("aboutUs.description")} + + + + + + + + ); +} diff --git a/apps/level_up/components/features/home/GameCraftIntro.tsx b/apps/level_up/components/features/home/GameCraftIntro.tsx new file mode 100644 index 00000000..ec0b2caf --- /dev/null +++ b/apps/level_up/components/features/home/GameCraftIntro.tsx @@ -0,0 +1,147 @@ +"use client"; + +import {Button, Col, ConfigProvider, Flex, Row, Typography} from "antd"; +import {InstagramOutlined, XOutlined, YoutubeFilled} from "@ant-design/icons"; +import {useTranslations} from "next-intl"; +import Image from "next/image"; +import {useResponsive} from "../../../lib/hooks/useResponsive"; +import {darkTheme} from "../../../components/providers/AntDesignProvider"; +import {customColors} from "../../../config/colors"; +import {gameCraftSocialLinks, sscSocialLinks} from "../../../config/socialLinks"; +import {TelegramIcon} from "../../../components/common/TelegramIcon"; + +interface GameCraftIntroProps { + padding?: string; + backgroundColor?: string; +} + +export function GameCraftIntro({ + padding = "3rem 2rem", + backgroundColor, + }: GameCraftIntroProps) { + const t = useTranslations("app"); + const screens = useResponsive(); + + return ( + + + + + {/* Bubble Background - using the actual SVG from React project */} + + bubble-image + + + + {t("intro.title")} + + + + {t("intro.subtitle")} + + + + {t("intro.description")} + + + + + + + ))} + + + ); +} diff --git a/apps/level_up/components/features/popup/WelcomePopup.tsx b/apps/level_up/components/features/popup/WelcomePopup.tsx new file mode 100644 index 00000000..a1392198 --- /dev/null +++ b/apps/level_up/components/features/popup/WelcomePopup.tsx @@ -0,0 +1,396 @@ +import { useRouter } from "@bprogress/next"; +import { useRouter as useNextIntlRouter } from "../../../lib/navigation"; +import { Button, Flex, Typography, Modal } from "antd"; +import { CloseOutlined } from "@ant-design/icons"; +import React, { useState, useEffect } from "react"; +import { useLocale } from "next-intl"; +import { digitsToHindi } from "@ssc/utils"; +import { toast } from "react-toastify"; + +const WelcomePopup = () => { + const router = useRouter({ + customRouter: useNextIntlRouter, + }); + const locale = useLocale(); + const [isVisible, setIsVisible] = useState(false); + + useEffect(() => { + // Check if 24 hours have passed since last popup was shown + const lastShownTimestamp = localStorage.getItem( + "gamecraft-welcome-popup-last-shown" + ); + const now = Date.now(); + const twentyFourHours = 24 * 60 * 60 * 1000; // 24 hours in milliseconds + + if (!lastShownTimestamp) { + // First time visitor - show popup after delay + const timer = setTimeout(() => { + setIsVisible(true); + }, 1500); + + return () => clearTimeout(timer); + } else { + // Check if 24 hours have passed + const lastShown = parseInt(lastShownTimestamp, 10); + const timeDifference = now - lastShown; + + if (timeDifference >= twentyFourHours) { + // More than 24 hours have passed - show popup + const timer = setTimeout(() => { + setIsVisible(true); + }, 1500); + + return () => clearTimeout(timer); + } + } + }, []); + + const handleClose = () => { + setIsVisible(false); + // Save current timestamp so popup shows again after 24 hours + localStorage.setItem( + "gamecraft-welcome-popup-last-shown", + Date.now().toString() + ); + }; + + const handleCopyCode = async () => { + try { + await navigator.clipboard.writeText("LAST50"); + toast.success( + locale === "fa" + ? "کد تخفیف با موفقیت کپی شد!" + : "Discount code copied successfully!" + ); + } catch (err) { + console.error("Failed to copy code:", err); + toast.error( + locale === "fa" ? "خطا در کپی کردن کد" : "Failed to copy code" + ); + } + }; + + const handleClaimNow = () => { + router.push("/#workshops"); + handleClose(); + }; + + return ( + +
+ {/* Game-style decorative elements */} +
+
+
+
+ + {/* Close button */} + + + + + + + {/* Animated background effects */} +
+
+
+ + ); +}; + +export default WelcomePopup; diff --git a/apps/level_up/components/features/presentersAvatar/PresentersAvatar.tsx b/apps/level_up/components/features/presentersAvatar/PresentersAvatar.tsx new file mode 100644 index 00000000..7793811b --- /dev/null +++ b/apps/level_up/components/features/presentersAvatar/PresentersAvatar.tsx @@ -0,0 +1,131 @@ +import React from "react"; +import { Avatar, Flex, Typography, theme } from "antd"; +import { UserOutlined } from "@ant-design/icons"; +import { useTranslations } from "next-intl"; + +const { useToken } = theme; + +interface PresenterDetail { + id: number; + name: string; + email: string; + bio: string; + presenter_picture: string | null; + created_at: string; +} + +interface PresentersAvatarProps { + presenters: PresenterDetail[]; + maxDisplay?: number; +} + +const PresentersAvatar: React.FC = ({ + presenters = [], + maxDisplay = 3, +}) => { + const { token } = useToken(); + const t = useTranslations("workshop"); + + if (!presenters || presenters.length === 0) { + return ( + + } size={32} /> + + {t("noPresenters")} + + + ); + } + + const displayPresenters = presenters.slice(0, maxDisplay); + const remainingCount = presenters.length - maxDisplay; + + if (presenters.length === 1) { + const presenter = presenters[0]; + return ( + + } + size={32} + /> + + {presenter.name} + + + ); + } + + return ( + + {/* Avatar Stack */} +
+ {displayPresenters.map((presenter, index) => ( + } + size={32} + style={{ + marginLeft: index > 0 ? -8 : 0, + border: `2px solid ${token.colorBgContainer}`, + zIndex: maxDisplay - index, + }} + /> + ))} + {remainingCount > 0 && ( + + + +{remainingCount} + + + )} +
+ + {/* Names Display */} + + {remainingCount > 0 + ? `${displayPresenters.map((p) => p.name).join(", ")} ${t("andMore", { + count: remainingCount, + })}` + : displayPresenters.map((p) => p.name).join(", ")} + +
+ ); +}; + +export default PresentersAvatar; diff --git a/apps/level_up/components/features/staff/StaffCard.tsx b/apps/level_up/components/features/staff/StaffCard.tsx new file mode 100644 index 00000000..0cd901be --- /dev/null +++ b/apps/level_up/components/features/staff/StaffCard.tsx @@ -0,0 +1,118 @@ +"use client"; + +import { Avatar, Button, Flex, theme, Typography } from "antd"; +import { GithubFilled, LinkedinFilled, UserOutlined } from "@ant-design/icons"; +import { StaffMember } from "../../../config/staffs"; +import Image from "next/image"; +import { TelegramIcon } from "../../../components/common/TelegramIcon"; + +const { useToken } = theme; + +interface StaffCardProps { + staff: StaffMember; +} + +export function StaffCard({ staff }: StaffCardProps) { + const { token } = useToken(); + + return ( + + + { + staff.imageUrl ? ( + } src={staff.imageUrl} /> + ) : ( + + {"mario + + ) + // } + // src={"/mario/giphy-16.gif"} + // /> + } + + + + {staff.name} + + {staff.role} + + + + + + + + + ); +} diff --git a/apps/level_up/components/features/staff/StaffContainer.tsx b/apps/level_up/components/features/staff/StaffContainer.tsx new file mode 100644 index 00000000..ed8d05c1 --- /dev/null +++ b/apps/level_up/components/features/staff/StaffContainer.tsx @@ -0,0 +1,85 @@ +"use client"; + +import { Col, Flex, Row, theme, Typography } from "antd"; +import { StaffCard } from "./StaffCard"; +import { useStaffs } from "../../../config/staffs"; +import { useTranslations } from "next-intl"; +import { customColors } from "../../../config/colors"; +import Image from "next/image"; + +const { useToken } = theme; + +export function StaffContainer() { + const { token } = useToken(); + const staffs = useStaffs(); + const t = useTranslations("app.staffs"); + + return ( + + + + {t("title")} + + + + {staffs.map((team, index) => ( + + + {team.teamTitle} + + + {team.teamMembers.map((staff, staffIndex) => ( + + + + ))} + + + ))} + + + ); +} diff --git a/apps/level_up/components/features/staff/StaffView.tsx b/apps/level_up/components/features/staff/StaffView.tsx new file mode 100644 index 00000000..59ae786b --- /dev/null +++ b/apps/level_up/components/features/staff/StaffView.tsx @@ -0,0 +1,24 @@ +"use client"; + +import { Flex } from "antd"; +import { StaffContainer } from "./StaffContainer"; +import {useResponsive} from "../../../lib/hooks/useResponsive"; + +export function StaffView() { + const screens = useResponsive(); + const staffViewPadding = screens.lg ? "3rem 5rem" : "3rem 2rem"; + + return ( + + + + ); +} diff --git a/apps/level_up/components/features/stickyBar/StickyBar.tsx b/apps/level_up/components/features/stickyBar/StickyBar.tsx new file mode 100644 index 00000000..09b52f60 --- /dev/null +++ b/apps/level_up/components/features/stickyBar/StickyBar.tsx @@ -0,0 +1,236 @@ +import { useRouter } from "@bprogress/next"; +import { useRouter as useNextIntlRouter } from "../../../lib/navigation"; +import { Button, Flex, Typography } from "antd"; +import { CloseOutlined } from "@ant-design/icons"; +import React, { useState } from "react"; +import { useLocale } from "next-intl"; +import { digitsToHindi } from "@ssc/utils"; +import { toast, ToastContainer } from "react-toastify"; + +const StickyBar = () => { + const router = useRouter({ + customRouter: useNextIntlRouter, + }); + const locale = useLocale(); + const [isVisible, setIsVisible] = useState(true); + + const handleClose = () => { + setIsVisible(false); + }; + + const handleCopyCode = async () => { + try { + await navigator.clipboard.writeText("LAST50"); + toast.info("با موفقیت کپی شد"); + // You could add a toast notification here if desired + } catch (err) { + console.error("Failed to copy code:", err); + } + }; + + if (!isVisible) { + return null; + } + + return ( +
+ + {/* Game-style decorative elements */} +
+
+
+
+ + {/* Main coupon content */} + + 🎮 + + {locale === "fa" ? ( + <> + 🔥 تخفیف ویژهٔ ثبت‌نام! {digitsToHindi("50")}٪ تخفیف برای + کارگاه‌های ساخت بازی با کد{" "} + + LAST50 + + + ) : ( + <> + 🔥 Special Game Craft Offer — 50% OFF on Game Development + Workshops with code{" "} + { + const target = e.currentTarget as HTMLElement; + target.style.backgroundColor = "rgba(255,255,255,0.3)"; + target.style.transform = "scale(1.05)"; + }} + onMouseLeave={(e) => { + const target = e.currentTarget as HTMLElement; + target.style.backgroundColor = "rgba(255,255,255,0.2)"; + target.style.transform = "scale(1)"; + }} + title="Click to copy" + > + LAST50 + + ! + + )} + + + + + + {/* Close button */} +
+ ); +}; + +export default StickyBar; diff --git a/apps/level_up/components/features/team/TeamMemberCard.tsx b/apps/level_up/components/features/team/TeamMemberCard.tsx new file mode 100644 index 00000000..778c9195 --- /dev/null +++ b/apps/level_up/components/features/team/TeamMemberCard.tsx @@ -0,0 +1,67 @@ +"use client"; + +import React from "react"; +import { Flex, theme, Typography } from "antd"; +import Image from "next/image"; +import CrownBadge from "../../common/CrownBadge"; + +const { useToken } = theme; + +interface TeamMemberCardProps { + isHead?: boolean; + name?: string; + avatar?: string; +} + +export const TeamMemberCard: React.FC = ({ + isHead = false, + name = "", + avatar = "svg/avatar-1.svg", +}) => { + const { token } = useToken(); + + const memberCard = ( + +
+ user-image +
+ {name} +
+ ); + + return isHead ? {memberCard} : memberCard; +}; diff --git a/apps/level_up/components/features/team/TeamMemberContainer.tsx b/apps/level_up/components/features/team/TeamMemberContainer.tsx new file mode 100644 index 00000000..3bb7d9dc --- /dev/null +++ b/apps/level_up/components/features/team/TeamMemberContainer.tsx @@ -0,0 +1,169 @@ +"use client"; + +import React, { useEffect, useMemo, useState } from "react"; +import { Alert, Col, Flex, Row, Spin, theme, Typography } from "antd"; +import { useTranslations } from "next-intl"; +import { TeamMemberCard } from "./TeamMemberCard"; +import { useAppSelector } from "lib/store/store"; +import { TeamDetails } from "@ssc/core/lib/types/api/Teams/teams"; +import { clientApi } from "lib/api/client/clientApi"; +import { eventId } from "lib/utils/constants"; +import { GroupCompetitionsList } from "@ssc/core/lib/types/api/competitions/competitions"; + +const { useToken } = theme; + +export const TeamMemberContainer: React.FC = () => { + const { token } = useToken(); + const t = useTranslations("app.dashboard.teamStatus"); + + const { data: teams } = useAppSelector((s) => s.teams); + const [filteredTeams, setFilteredTeams] = useState([]); + const [competitions, setCompetitions] = useState<{ + loading: boolean; + error?: string; + data?: GroupCompetitionsList; + }>({ loading: true }); + + const isValidTeam = (competitionId: number) => + !!competitions.data?.results.find( + (competition) => competition.id == competitionId + ); + + useEffect(() => { + clientApi.competitions + .getGroupCompetitionsList(eventId, undefined) + .then((response) => { + if (response.status === 200) { + setCompetitions({ + loading: false, + data: response.data.data, + }); + } else { + setCompetitions({ loading: false, error: "failed to fetch" }); + } + }) + .catch((err) => { + setCompetitions({ loading: false, error: err }); + }); + + setFilteredTeams( + teams.filter( + (team) => + team.group_competition_details && + isValidTeam(team.group_competition_details.id) && + team.status === "active" + ) + ); + }, [competitions, teams]); + + const mapTeamMembers = (team: TeamDetails) => + team.memberships.map((member) => ( + + + + )); + + const mapTeams = () => + filteredTeams.map((team) => ( + <> + + + {team.group_competition_details.title}: + + + {team.name} + + + {mapTeamMembers(team)} + + )); + + const content = useMemo(() => { + if (competitions.loading) { + return ( + + + + ); + } else if (competitions.error) { + return ( + + ); + } else { + return filteredTeams.length === 0 ? ( + + ) : ( + mapTeams() + ); + } + }, [competitions, t]); + + return ( + + + {content} + {/* + + {t("teamMembers")} + + + {[1, 2, 3, 4, 5, 6, 7].map((item, index) => ( + + + + ))} */} + {/* + + */} + + + ); +}; diff --git a/apps/level_up/components/features/workshops/OfflineWorkshop.tsx b/apps/level_up/components/features/workshops/OfflineWorkshop.tsx new file mode 100644 index 00000000..7ace581d --- /dev/null +++ b/apps/level_up/components/features/workshops/OfflineWorkshop.tsx @@ -0,0 +1,117 @@ +"use client"; + +import { Flex, Typography, Spin, Alert } from "antd"; +import { WorkshopGrid } from "./WorkshopGrid"; +import { useTranslations } from "next-intl"; +import { useResponsive } from "../../../lib/hooks/useResponsive"; +import { useEffect, useMemo, useState } from "react"; +import { PresentationsList, PresentationType } from "@ssc/core"; +import { clientApi } from "lib/api/client/clientApi"; +import { eventId } from "lib/utils/constants"; + +interface OfflineWorkshopProps { + padding?: string; + backgroundColor?: string; +} + +export function OfflineWorkshop({ + padding = "3rem 2rem", + backgroundColor, +}: OfflineWorkshopProps) { + const screens = useResponsive(); + const t = useTranslations(); + const [presentations, setPresentations] = useState<{ + loading: boolean; + error?: string; + data?: PresentationsList; + }>({ loading: true }); + + useEffect(() => { + clientApi.presentations + .getPresentationsList( + eventId, + undefined, + undefined, + PresentationType.WORKSHOP + ) + .then((response) => { + if (response.status === 200) { + const filteredData = response.data.data; + filteredData.results = filteredData.results.filter( + (presentation) => presentation.is_active + ); + + setPresentations({ + loading: false, + data: filteredData, + }); + } else { + setPresentations({ loading: false, error: "failed to fetch" }); + } + }) + .catch((err) => { + setPresentations({ loading: false, error: "failed to fetch" }); + }); + }, []); + + const content = useMemo(() => { + if (presentations.loading) { + return ( + + + + ); + } else if (presentations.error) { + return ( + + ); + } else { + return presentations.data.results.length === 0 ? ( + + ) : ( + + ); + } + }, [presentations]); + + return ( + + + {t("workshop.workshops")} + + + {content} + + ); +} diff --git a/apps/level_up/components/features/workshops/OnlineWorkshop.tsx b/apps/level_up/components/features/workshops/OnlineWorkshop.tsx new file mode 100644 index 00000000..2f500a0e --- /dev/null +++ b/apps/level_up/components/features/workshops/OnlineWorkshop.tsx @@ -0,0 +1,137 @@ +"use client"; + +import { Flex, theme, Typography, Spin, Alert } from "antd"; +import Wave from "../../common/Wave"; +import { WorkshopGrid } from "./WorkshopGrid"; +import { useTranslations } from "next-intl"; +import { useResponsive } from "../../../lib/hooks/useResponsive"; +import { useEffect, useMemo, useState } from "react"; +import { PresentationsList, PresentationType } from "@ssc/core"; +import { clientApi } from "lib/api/client/clientApi"; +import { eventId } from "lib/utils/constants"; + +const { useToken } = theme; + +interface OnlineWorkshopProps { + padding?: string; + backgroundColor?: string; +} + +export function OnlineWorkshop({ + padding = "3rem 2rem", + backgroundColor, +}: OnlineWorkshopProps) { + const { token } = useToken(); + const screens = useResponsive(); + const t = useTranslations(); + const [presentations, setPresentations] = useState<{ + loading: boolean; + error?: string; + data?: PresentationsList; + }>({ loading: true }); + + useEffect(() => { + clientApi.presentations + .getPresentationsList( + eventId, + undefined, + undefined, + PresentationType.TALK + ) + .then((response) => { + if (response.status === 200) { + const filteredData = response.data.data; + filteredData.results = filteredData.results.filter( + (presentation) => presentation.is_active + ); + + setPresentations({ + loading: false, + data: filteredData, + }); + } else { + setPresentations({ loading: false, error: "failed to fetch" }); + } + }) + .catch((err) => { + setPresentations({ loading: false, error: "failed to fetch" }); + }); + }, []); + + const content = useMemo(() => { + if (presentations.loading) { + return ( + + + + ); + } else if (presentations.error) { + return ( + + ); + } else { + return presentations.data.results.length === 0 ? ( + + ) : ( + + ); + } + }, [presentations, t]); + + return ( + + + + + {t("workshop.presentations")} + + + {content} + + + + ); +} diff --git a/apps/level_up/components/features/workshops/WorkshopCard.tsx b/apps/level_up/components/features/workshops/WorkshopCard.tsx new file mode 100644 index 00000000..e69563d9 --- /dev/null +++ b/apps/level_up/components/features/workshops/WorkshopCard.tsx @@ -0,0 +1,771 @@ +"use client"; + +import { useTranslations } from "next-intl"; +import Image from "next/image"; +import { ItemType, PresentationOverview } from "@ssc/core"; +import PresentersAvatar from "../presentersAvatar/PresentersAvatar"; +import { use, useMemo, useState } from "react"; +import { + Card, + Typography, + Button as AntButton, + Flex, + Badge, + Modal, + theme, + Space, + Row, + Col, +} from "antd"; +import { + ClockCircleOutlined, + EnvironmentOutlined, + LinkOutlined, + ShoppingCartOutlined, + DeleteOutlined, + EyeOutlined, +} from "@ant-design/icons"; +import { useFormatter } from "lib/hooks/useFormatter"; +import { useAppDispatch, useAppSelector } from "lib/store/store"; +import { + cartLoadingSelector, + itemInCartSelector, +} from "lib/store/cart/cart.selectors"; +import { useIsPresentationPurchased } from "lib/hooks/usePurchases"; +import { + addItemToCartThunk, + removeItemFromCartThunk, +} from "lib/store/cart/cart.thunk"; +import { toast } from "react-toastify"; +import { useAuth } from "lib/hooks/useAuth"; +import { digitsToHindi } from "@ssc/utils"; + +const { useToken } = theme; + +interface WorkshopCardProps { + workshopImage?: string; + presentation: PresentationOverview; + isPurchased?: boolean; // Add this prop to control purchase button visibility +} + +// simple RTL detection (Persian/Arabic Unicode ranges) +const isRTL = (text?: string) => + !!text && /[\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF]/.test(text); + +export function WorkshopCard({ + presentation, + workshopImage, + isPurchased = false, // Default to false if not provided +}: WorkshopCardProps) { + const t = useTranslations(); + const [showModal, setShowModal] = useState(false); + const { formatNumberToMoney } = useFormatter(); + const dispatch = useAppDispatch(); + const itemInCart = useAppSelector( + itemInCartSelector(presentation.id, ItemType.PRESENTATION) + ); + const isPresentationPurchased = useIsPresentationPurchased(presentation.id); + const buttonShouldBeDisabled = useAppSelector(cartLoadingSelector); + const [buttonLoading, setButtonLoading] = useState(false); + const { isAuthenticated } = useAuth(); + const { token } = useToken(); + + const isSelected = useMemo(() => { + return itemInCart !== undefined; + }, [itemInCart]); + + // Color palette + const colorStripes = ["#4CAF50", "#2196F3", "#FFC107", "#F44336"]; + + const buttonText = useMemo(() => { + if (!isAuthenticated) return t("workshop.loginToContinue"); + if (isSelected) { + return t("workshop.removeFromCart"); + } else { + return presentation.is_paid + ? t("workshop.addToCart") + : t("workshop.enroll"); + } + }, [isSelected, presentation, t, isAuthenticated]); + + // Format date and time + const formatDateTime = (dateTimeString: string) => { + const date = new Date(dateTimeString); + return date.toLocaleString("fa-IR", { + timeZone: "UTC", + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit", + }); + }; + + // Format time only (for end time when it's same day) + const formatTime = (dateTimeString: string) => { + const date = new Date(dateTimeString); + return date.toLocaleString("fa-IR", { + timeZone: "UTC", + hour: "2-digit", + minute: "2-digit", + }); + }; + + // Check if start and end dates are on the same day + const isSameDay = (startTime: string, endTime: string) => { + const start = new Date(startTime); + const end = new Date(endTime); + return start.toDateString() === end.toDateString(); + }; + + // Format date time range + const formatDateTimeRange = () => { + if (!presentation.end_time) { + return formatDateTime(presentation.start_time); + } + + // if (isSameDay(presentation.start_time, presentation.end_time)) { + // // Same day: show date + start time - end time + // + // } else { + // // Different days: show full start date/time - full end date/time + // return `${formatDateTime(presentation.start_time)} - ${formatDateTime(presentation.end_time)}`; + // } + + // since all the presentations are on one day + return `${formatDateTime(presentation.start_time)} - ${formatTime( + presentation.end_time + )}`; + }; + + const handleAddToCart = () => { + if (buttonShouldBeDisabled) { + if (!isAuthenticated) { + toast.error("لطفا وارد حساب خود شوید"); + } + return; + } + setButtonLoading(true); + dispatch( + addItemToCartThunk({ + item_type: ItemType.PRESENTATION, + item_id: presentation.id, + }) + ) + .unwrap() + .catch() + .finally(() => setButtonLoading(false)); + }; + + const removeFromCart = () => { + if (buttonShouldBeDisabled || !itemInCart) return; + setButtonLoading(true); + dispatch( + removeItemFromCartThunk({ + item_id: itemInCart.id, + item_type: ItemType.PRESENTATION, + }) + ) + .unwrap() + .catch() + .finally(() => setButtonLoading(false)); + }; + + const titleIsRTL = isRTL(presentation.title); + const descriptionIsRTL = isRTL(presentation.description); + + const formatPrice = () => { + return presentation.is_paid + ? formatNumberToMoney(presentation.price) + : t("workshop.free"); + }; + + return ( + <> + {/* Workshop Card */} + + {/* Header Image with Stripes */} +
+ {/* Workshop Image */} + workshop + + {/* Colored Stripes */} +
+ {colorStripes.map((color, index) => ( +
+ ))} +
+ + {/* View Details Button */} +
+ setShowModal(true)} + type="primary" + icon={} + size="small" + style={{ + borderRadius: token.borderRadiusLG, + backgroundColor: "rgba(0, 0, 0, 0.7)", + borderColor: "transparent", + }} + > + جزئیات بیشتر + +
+
+ + {/* Content */} + + {/* Title and Badges */} + + + {presentation.title} + + + + {!presentation.is_online && ( + + )} + {presentation.is_online && ( + + )} + + + + + + {/* Presentation online link */} + {isPurchased && presentation.online_link && ( + + + {t("workshop.onlineLink")} + + + + {presentation.online_link} + + + + )} + + {/* Description */} + + {presentation.description} + + + {/* Date and Time */} + + + + {formatDateTimeRange()} + + + + {/* Location/Link */} + {presentation.location && !presentation.is_online && ( + + + + {presentation.location} + + + )} + {/* {isPurchased && + presentation.online_link && + presentation.is_online && ( + + + + {t("workshop.onlineLink")} + + + )} */} + + {/* Presenters Label */} + + {t("workshop.presenters")}: + + + {/* Presenters */} + {presentation.presenters_details.map((presenter) => ( + + ))} + + {/* Capacity */} + + + {t("workshop.capacity") + + ": " + + digitsToHindi(presentation.capacity)} + + + + {t("workshop.remainingCapacity") + + ": " + + digitsToHindi(presentation.remaining_capacity)} + + + + {/* Price and Add to Cart */} + + + {formatPrice()} {presentation.is_paid && t("common.currency")} + + + {/* Show purchased button if already purchased, otherwise show add to cart/register button */} + {isPresentationPurchased ? ( + + خریداری شده + + ) : ( + : + } + onClick={isSelected ? removeFromCart : handleAddToCart} + disabled={ + !presentation.is_active || + buttonShouldBeDisabled || + presentation.capacity <= 0 || + !isAuthenticated + } + loading={buttonLoading} + style={{ + borderRadius: token.borderRadius, + height: "36px", + }} + > + {buttonText} + + )} + + + + + {/* Modal */} + setShowModal(false)} + footer={[ + // Only show action button if not purchased + ...(!isPurchased + ? [ + : + } + onClick={() => { + if (isSelected) { + removeFromCart(); + } else { + handleAddToCart(); + } + setShowModal(false); + }} + disabled={ + !presentation.is_active || + buttonShouldBeDisabled || + presentation.capacity <= 0 || + !isAuthenticated + } + loading={buttonLoading} + > + {buttonText} + , + ] + : []), + ]} + width={700} + style={{ top: 50, zIndex: 200 }} + styles={{ + body: { maxHeight: "70vh", overflowY: "auto" }, + }} + > + + {presentation.title} + + + {/* Workshop Image */} + {presentation.poster && ( +
+ workshop + {/* Colored Stripes */} +
+ {colorStripes.map((color, index) => ( +
+ ))} +
+
+ )} + + {/* Workshop Details */} + + {/* Left Column */} + + + {/* Description */} +
+ + {t("workshop.description")} + + + {presentation.description} + +
+ + {/* Requirements */} + {presentation.requirements && ( +
+ + {t("workshop.requirements")} + + + {presentation.requirements} + +
+ )} + + {/* Date and Time */} +
+ + {t("workshop.schedule")} + + + + + {formatDateTimeRange()} + + +
+ + {/* Location */} + {presentation.location !== null && ( +
+ + {t("workshop.location")} + + {presentation.location && !presentation.is_online && ( + + + + {presentation.location} + + + )} + {presentation.online_link && presentation.is_online && ( + + + + {t("workshop.onlineLink")} + + + )} +
+ )} +
+ + + {/* Right Column */} + + + {/* Presenters */} +
+ + {t("workshop.presenters")} + + {presentation.presenters_details.map((presenter) => ( + <> + + + {presenter.bio} + + + ))} +
+ + {/* Price */} +
+ + {t("workshop.price")} + + + {presentation.is_paid + ? `${formatNumberToMoney(presentation.price)} ${t( + "common.currency" + )}` + : t("workshop.free")} + +
+
+ +
+ + + ); +} diff --git a/apps/level_up/components/features/workshops/WorkshopGrid.tsx b/apps/level_up/components/features/workshops/WorkshopGrid.tsx new file mode 100644 index 00000000..f33a2610 --- /dev/null +++ b/apps/level_up/components/features/workshops/WorkshopGrid.tsx @@ -0,0 +1,53 @@ +"use client"; + +import { Row, Col } from "antd"; +import { WorkshopCard } from "./WorkshopCard"; +import { PresentationOverview } from "@ssc/core"; + +interface WorkshopGridProps { + presentations?: PresentationOverview[]; + workshopImage?: string; // Add optional image prop +} + +export function WorkshopGrid({ + presentations = [], + workshopImage, +}: WorkshopGridProps) { + return ( + + {presentations.map((presentation) => ( + + + + ))} + + ); +} diff --git a/apps/level_up/components/layout/AppDrawer.tsx b/apps/level_up/components/layout/AppDrawer.tsx new file mode 100644 index 00000000..c663021d --- /dev/null +++ b/apps/level_up/components/layout/AppDrawer.tsx @@ -0,0 +1,214 @@ +"use client"; + +import { Button, Drawer, Flex, Switch, theme } from "antd"; +import { useTranslations, useLocale } from "next-intl"; +import { usePathname } from "next/navigation"; +import { MoonFilled, SunFilled } from "@ant-design/icons"; +import { useRouter as useNextIntlRouter } from "../../lib/navigation"; +import { useTheme } from "next-themes"; +import { useMainNavigations } from "../../lib/config/navigation"; +import { useAuth } from "../../lib/hooks/useAuth"; +import { useRouter } from "@bprogress/next"; +import { signIn } from "next-auth/react"; +import CartButton from "components/features/cart/CartButton"; + +const { useToken } = theme; + +interface MainDrawerProps { + open: boolean; + toggleDrawerOpen: () => void; +} + +export default function AppDrawer({ open, toggleDrawerOpen }: MainDrawerProps) { + const t = useTranslations("app"); + const locale = useLocale(); + const mainNavigations = useMainNavigations(); + const pathname = usePathname(); + const { token } = useToken(); + const { theme, setTheme } = useTheme(); + const { isAuthenticated, user, logout } = useAuth(); + const router = useRouter({ + customRouter: useNextIntlRouter, + }); + + const isActive = (path: string) => { + // Remove locale prefix from pathname for comparison + const pathWithoutLocale = pathname.replace(`/${locale}`, "") || "/"; + return pathWithoutLocale === path; + }; + + const handleLanguageSwitch = () => { + const newLocale = locale === "fa" ? "en" : "fa"; + // Remove the current locale from the pathname and get the clean path + const currentPath = pathname.replace(`/${locale}`, "") || "/"; + router.replace(currentPath, { locale: newLocale }); + }; + + const handleNavigation = (route: string) => { + toggleDrawerOpen(); + router.push(route); + }; + + const handleLogout = async () => { + try { + await logout(); + toggleDrawerOpen(); + } catch (error) { + console.error("Logout error:", error); + } + }; + + return ( + + + + + + ))} + + {isAuthenticated && ( + + + + )} + + + {isAuthenticated && user ? ( + <> + + + + ) : ( + <> + + + + )} + + + + + ); +} diff --git a/apps/level_up/components/layout/AppFooter.tsx b/apps/level_up/components/layout/AppFooter.tsx new file mode 100644 index 00000000..065d09ce --- /dev/null +++ b/apps/level_up/components/layout/AppFooter.tsx @@ -0,0 +1,107 @@ +"use client"; + +import { + Button, + Col, + ConfigProvider, + Divider, + Flex, + Layout, + Row, + theme, + Typography, +} from "antd"; +import { useTranslations } from "next-intl"; +import { + FacebookFilled, + InstagramOutlined, + LinkedinFilled, + XOutlined, + YoutubeFilled, +} from "@ant-design/icons"; +import Image from "next/image"; +import { darkTheme } from "../../components/providers/AntDesignProvider"; +import { gameCraftSocialLinks, sscSocialLinks } from "../../config/socialLinks"; +import { TelegramIcon } from "../../components/common/TelegramIcon"; + +const { useToken } = theme; + +export function AppFooter() { + const { token } = useToken(); + const t = useTranslations("app"); + + return ( + + + + {t("footer.autGameCraft")} + + + + + + + aut-computer-engineering-logo + + + + + + + ))} + + + + + + + + + {!isLoading ? ( + !isAuthenticated ? ( + <> + {/* /!* router.push("/auth/signup")}*/} + {/* onMouseEnter={() => playSound("coin")}*/} + {/*>*/} + {/* {t("auth.signUp")}*/} + {/* *!/*/} + + + ) : ( + + + + + ) + ) : ( + + + + )} + + + + ) : ( + +
+ ); +} diff --git a/apps/level_up/components/layout/dashboard/DashboardDrawer.tsx b/apps/level_up/components/layout/dashboard/DashboardDrawer.tsx new file mode 100644 index 00000000..b0ecde8a --- /dev/null +++ b/apps/level_up/components/layout/dashboard/DashboardDrawer.tsx @@ -0,0 +1,93 @@ +"use client"; + +import { Button, Drawer, Flex, Switch, theme } from "antd"; +import { useTranslations, useLocale } from "next-intl"; +import { DashboardNavigationCard } from "./DashboardNavigationCard"; +import { MoonFilled, SunFilled } from "@ant-design/icons"; +import { useTheme } from "next-themes"; +import { useRouter, usePathname } from "next/navigation"; + +const { useToken } = theme; + +interface DashboardDrawerProps { + open: boolean; + toggleDrawerOpen: () => void; +} + +export function DashboardDrawer({ + open, + toggleDrawerOpen, +}: DashboardDrawerProps) { + const t = useTranslations(); + const locale = useLocale(); + const { token } = useToken(); + const { theme, setTheme } = useTheme(); + const router = useRouter(); + const pathname = usePathname(); + + const toggleTheme = () => { + setTheme(theme === "dark" ? "light" : "dark"); + }; + + const toggleLanguage = () => { + const newLocale = locale === "fa" ? "en" : "fa"; + const currentPath = pathname.replace(`/${locale}`, ""); + router.push(`/${newLocale}${currentPath}`); + }; + + const direction = locale === "fa" ? "rtl" : "ltr"; + + return ( + toggleDrawerOpen()} + zIndex={100000000} + style={{ + backgroundColor: `${token.colorBgBase}`, + backdropFilter: "blur(10px)", + }} + > + + + + ))} + + + + + ); +} diff --git a/apps/level_up/components/layout/dashboard/index.ts b/apps/level_up/components/layout/dashboard/index.ts new file mode 100644 index 00000000..49ffc2fc --- /dev/null +++ b/apps/level_up/components/layout/dashboard/index.ts @@ -0,0 +1,4 @@ +export { DashboardHeader } from './DashboardHeader'; +export { DashboardDrawer } from './DashboardDrawer'; +export { DashboardNavigationCard } from './DashboardNavigationCard'; + diff --git a/apps/level_up/components/providers/AntDesignProvider.tsx b/apps/level_up/components/providers/AntDesignProvider.tsx new file mode 100644 index 00000000..497b4f1e --- /dev/null +++ b/apps/level_up/components/providers/AntDesignProvider.tsx @@ -0,0 +1,104 @@ +"use client"; + +import { + ConfigProvider, + message, + notification, + theme as antdTheme, +} from "antd"; +import { ReactNode, useEffect } from "react"; +import { useTheme } from "next-themes"; +import { customColors } from "../../config/colors"; + +interface AntDesignProviderProps { + children: ReactNode; + direction: "ltr" | "rtl"; +} + +const lightTheme = { + token: { + fontFamily: "var(--font-estedad), var(--font-vazirmatn), sans-serif", + borderRadius: 16, + colorPrimary: customColors.colorPrimary, + // colorInfo: customColors.colorPrimary, + colorSuccess: customColors.colorAction, + colorWarning: "#faad14", + colorError: "#ff4d4f", + colorBgBase: "#ffffff", + colorBgContainer: "#ffffff", + colorBgElevated: "#ffffff", + colorText: "#000000d9", + colorTextSecondary: "#00000073", + }, + components: { + Timeline: { + dotBg: "transparent", + tailColor: customColors.colorAction, + tailWidth: 10, + }, + Button: { + colorPrimary: customColors.colorPrimary, + colorPrimaryHover: "#4c4a8d", + colorPrimaryActive: "#2c2a6d", + }, + Layout: { + headerBg: customColors.colorPrimary, + bodyBg: "#f5f5f5", + }, + Switch: {}, + Collapse: {}, + Message: { + colorBgBase: "#ffffff", + }, + }, +}; + +export const darkTheme = { + algorithm: antdTheme.darkAlgorithm, + token: { + ...lightTheme.token, + colorBgBase: "#1E1E1E", + colorBgContainer: "#262626", + colorBgElevated: "#2a2a2a", + colorText: "#ffffffd9", + colorTextSecondary: "#ffffff73", + }, + components: { + ...lightTheme.components, + Layout: { + headerBg: "#3c3a7d", + bodyBg: "#1E1E1E", + }, + Message: { + colorBgBase: "#262626", + }, + }, +}; + +export default function AntDesignProvider({ + children, + direction, +}: AntDesignProviderProps) { + const { theme } = useTheme(); + + const algorithm = theme === "dark" ? darkTheme : lightTheme; + + useEffect(() => { + message.config({ + top: 100, + duration: 2, + maxCount: 3, + }); + + notification.config({ + placement: "topRight", + duration: 4.5, + }); + }, []); + + return ( + + {children} + + ); +} diff --git a/apps/level_up/components/providers/AuthProvider.tsx b/apps/level_up/components/providers/AuthProvider.tsx new file mode 100644 index 00000000..a9378c3c --- /dev/null +++ b/apps/level_up/components/providers/AuthProvider.tsx @@ -0,0 +1,12 @@ +"use client"; + +import { SessionProvider } from "next-auth/react"; +import { ReactNode } from "react"; + +interface AuthProviderProps { + children: ReactNode; +} + +export default function AuthProvider({ children }: AuthProviderProps) { + return {children}; +} diff --git a/apps/level_up/components/providers/GoftinoProvider.tsx b/apps/level_up/components/providers/GoftinoProvider.tsx new file mode 100644 index 00000000..80898b8c --- /dev/null +++ b/apps/level_up/components/providers/GoftinoProvider.tsx @@ -0,0 +1,12 @@ +"use client"; + +import React from "react"; +import { useGoftino } from "lib/hooks/useGoftino"; + +const GoftinoProvider = () => { + useGoftino(); + + return null; +}; + +export default GoftinoProvider; diff --git a/apps/level_up/components/providers/SoundProvider.tsx b/apps/level_up/components/providers/SoundProvider.tsx new file mode 100644 index 00000000..30a0e77e --- /dev/null +++ b/apps/level_up/components/providers/SoundProvider.tsx @@ -0,0 +1,87 @@ +"use client"; + +import { + createContext, + useContext, + useState, + useCallback, + ReactNode, + useEffect, +} from "react"; +import { + playSound as play, + setGlobalVolume, + toggleMute as toggleHowlerMute, + SoundKey, +} from "../../lib/soundManager"; + +type SoundContextType = { + playSound: (key: SoundKey) => void; + toggle: () => void; + muted: boolean; + volume: number; + changeVolume: (v: number) => void; + audioEnabled: boolean; +}; + +const SoundContext = createContext(undefined); + +export function SoundProvider({ children }: { children: ReactNode }) { + const [muted, setMuted] = useState(false); + const [volume, setVolume] = useState(1); + const [audioEnabled, setAudioEnabled] = useState(false); + + // Enable audio on first user interaction + useEffect(() => { + const enableAudio = () => { + setAudioEnabled(true); + document.removeEventListener("click", enableAudio); + document.removeEventListener("touchstart", enableAudio); + document.removeEventListener("keydown", enableAudio); + }; + + document.addEventListener("click", enableAudio); + document.addEventListener("touchstart", enableAudio); + document.addEventListener("keydown", enableAudio); + + return () => { + document.removeEventListener("click", enableAudio); + document.removeEventListener("touchstart", enableAudio); + document.removeEventListener("keydown", enableAudio); + }; + }, []); + + const playSound = useCallback( + (key: SoundKey) => { + if (audioEnabled && !muted) { + play(key); + } + }, + [audioEnabled, muted] + ); + + const toggle = useCallback(() => { + const newMute = !muted; + setMuted(newMute); + toggleHowlerMute(newMute); + }, [muted]); + + const changeVolume = useCallback((v: number) => { + setVolume(v); + setGlobalVolume(v); + }, []); + + return ( + + {children} + + ); +} + +export function useSound() { + const ctx = useContext(SoundContext); + if (!ctx) throw new Error("useSound must be used inside SoundProvider"); + return ctx; +} diff --git a/apps/level_up/components/providers/StoreProvider.tsx b/apps/level_up/components/providers/StoreProvider.tsx new file mode 100644 index 00000000..34e93fd6 --- /dev/null +++ b/apps/level_up/components/providers/StoreProvider.tsx @@ -0,0 +1,13 @@ +"use client"; + +import { store } from "lib/store/store"; +import { ReactNode } from "react"; +import { Provider } from "react-redux"; + +interface StoreProviderProps { + children: ReactNode; +} + +export default function StoreProvider({ children }: StoreProviderProps) { + return {children}; +} diff --git a/apps/level_up/config/colors.ts b/apps/level_up/config/colors.ts new file mode 100644 index 00000000..54c4d726 --- /dev/null +++ b/apps/level_up/config/colors.ts @@ -0,0 +1,8 @@ +// Custom brand colors for the application +export const customColors = { + colorAction: "#01B582", // Brand action color + colorPrimary: "#3c3a7d", // Primary brand color + colorOfflineWorkshop: "#4F7B79", // Offline workshop background color +} as const; + +export type CustomColors = typeof customColors; diff --git a/apps/level_up/config/galleryImages.ts b/apps/level_up/config/galleryImages.ts new file mode 100644 index 00000000..2c123790 --- /dev/null +++ b/apps/level_up/config/galleryImages.ts @@ -0,0 +1,81 @@ +export interface GalleryImage { + id: string; + src: string; + alt: string; + title?: string; +} + +export const galleryImages: GalleryImage[] = [ + { + id: "gamecraft-1", + src: "/gallary/gamecraft-1.jpg", + alt: "GameCraft Event Image 1", + title: "GameCraft Event 1" + }, + { + id: "gamecraft-2", + src: "/gallary/gamecraft-2.jpg", + alt: "GameCraft Event Image 2", + title: "GameCraft Event 2" + }, + { + id: "gamecraft-3", + src: "/gallary/gamecraft-3.jpg", + alt: "GameCraft Event Image 3", + title: "GameCraft Event 3" + }, + { + id: "gamecraft-4", + src: "/gallary/gamecraft-4.jpg", + alt: "GameCraft Event Image 4", + title: "GameCraft Event 4" + }, + { + id: "gamecraft-5", + src: "/gallary/gamecraft-5.jpg", + alt: "GameCraft Event Image 5", + title: "GameCraft Event 5" + }, + { + id: "gamecraft-6", + src: "/gallary/gamecraft-6.jpg", + alt: "GameCraft Event Image 6", + title: "GameCraft Event 6" + }, + { + id: "gamecraft-7", + src: "/gallary/gamecraft-7.jpg", + alt: "GameCraft Event Image 7", + title: "GameCraft Event 7" + }, + { + id: "gamecraft-8", + src: "/gallary/gamecraft-8.jpg", + alt: "GameCraft Event Image 8", + title: "GameCraft Event 8" + }, + { + id: "gamecraft-9", + src: "/gallary/gamecraft-9.jpg", + alt: "GameCraft Event Image 9", + title: "GameCraft Event 9" + }, + { + id: "gamecraft-10", + src: "/gallary/gamecraft-10.jpg", + alt: "GameCraft Event Image 10", + title: "GameCraft Event 10" + }, + { + id: "gamecraft-11", + src: "/gallary/gamecraft-11.jpg", + alt: "GameCraft Event Image 11", + title: "GameCraft Event 11" + }, + { + id: "gamecraft-12", + src: "/gallary/gamecraft-12.jpg", + alt: "GameCraft Event Image 12", + title: "GameCraft Event 12" + } +]; diff --git a/apps/level_up/config/socialLinks.ts b/apps/level_up/config/socialLinks.ts new file mode 100644 index 00000000..3e7472ab --- /dev/null +++ b/apps/level_up/config/socialLinks.ts @@ -0,0 +1,21 @@ +// Social media links for GameCraft +export const gameCraftSocialLinks = { + instagram: "https://www.instagram.com/autgamecraft", + telegram: "https://t.me/AUTGamecraft", + twitter: "https://x.com/AutGamecraft", + website: "https://gamecraft.ir", + youtube: "", + linkedin: "", + facebook: "", + illustrationTehranUniInstagram: "https://www.instagram.com/illustration.ut" +} as const; + +// Future: SSC social links +export const sscSocialLinks = { + instagram: "https://www.instagram.com/ceit_ssc", + telegram: "https://t.me/ceit_ssc", + twitter: "https://twitter.com/ceit_ssc", + linkedin: "https://www.linkedin.com/school/students-scientific-chapter/", + website: "https://ceit-ssc.ir/", + youtube: "", +} as const; diff --git a/apps/level_up/config/sponsors.ts b/apps/level_up/config/sponsors.ts new file mode 100644 index 00000000..8160777b --- /dev/null +++ b/apps/level_up/config/sponsors.ts @@ -0,0 +1,16 @@ +export interface Sponsor { + id: string; + logo: string; + link: string; + tier: 'platinum' | 'gold' | 'silver'; +} + +// name and description of sponsors comes from translation files using id +export const sponsors: Sponsor[] = [ + { + id: "Liara", + logo: "/assets/images/sponsors/liara.png", + link: "https://liara.ir/", + tier: "gold" + }, +]; diff --git a/apps/level_up/config/staffs.ts b/apps/level_up/config/staffs.ts new file mode 100644 index 00000000..fb91e464 --- /dev/null +++ b/apps/level_up/config/staffs.ts @@ -0,0 +1,131 @@ +import { useTranslations } from "next-intl"; + +export interface StaffMember { + imageUrl: string; + name: string; + role: string; + githubUrl?: string; + linkedinUrl?: string; + telegramUrl?: string; +} + +export interface StaffTeam { + teamTitle: string; + teamMembers: StaffMember[]; +} + +export function useStaffs(): StaffTeam[] { + const t = useTranslations("app.staffs"); + + const organizingTeam: StaffTeam = { + teamTitle: t("organizingTeam.title"), + teamMembers: [ + { + imageUrl: "/images/2025/staffs/AmirabbasEntezari.jpg", + name: "امیرعباس انتظاری", + role: "دبیر رویداد", + telegramUrl: "https://t.me/amirabbas_entezari", + githubUrl: "https://github.com/AmirabbasEntezari", + linkedinUrl: "https://www.linkedin.com/in/amirabbas-entezari/", + }, + { + imageUrl: "/images/2025/staffs/MohammadJavadAkbari.jpg", + name: "محمدجواد اکبری", + role: "دبیر انجمن علمی", + githubUrl: "https://github.com/Javad-Ak", + linkedinUrl: "https://www.linkedin.com/in/mo-ja-akbari/", + telegramUrl: "", + }, + ], + }; + + const technicalTeam: StaffTeam = { + teamTitle: t("technicalTeam.title"), + teamMembers: [ + { + imageUrl: "/images/2025/staffs/AmirhosseinAghighi.jpg", + name: "امیرحسین عقیقی", + role: "سرپرست تیم فنی", + telegramUrl: "https://t.me/Amirhosseinaghighii", + linkedinUrl: "https://www.linkedin.com/in/amirhossein-aghighi/", + githubUrl: "https://github.com/AmirhosseinAghighi", + }, + { + imageUrl: "/images/2025/staffs/MohammadJavadAkbari.jpg", + name: "محمد جواد اکبری", + role: "توسعه دهنده بک اند", + githubUrl: "https://github.com/Javad-Ak", + linkedinUrl: "https://www.linkedin.com/in/mo-ja-akbari/", + telegramUrl: "", + }, + { + imageUrl: "/images/2025/staffs/MoeinEnayati.png", + name: "معین عنایتی", + role: "توسعه دهنده بک اند و دوآپس", + telegramUrl: "https://t.me/moein_enayati", + linkedinUrl: "https://www.linkedin.com/in/moein-enayati", + githubUrl: "https://github.com/moeinEN", + }, + { + imageUrl: "/images/2025/staffs/AlirezaNikooei.jpg", + name: "علیرضا نیکوئی", + role: "دوآپس", + githubUrl: "https://github.com/alirezanikooei", + linkedinUrl: "https://www.linkedin.com/in/alireza-nikooei-10655a1b5", + telegramUrl: "https://t.me/Nikoooei", + }, + { + imageUrl: "/images/2025/staffs/PouryaFahimi.jpg", + name: "پوریا فهیمی", + role: "توسعه دهنده فرانت اند", + telegramUrl: "https://t.me/pouryaf289", + linkedinUrl: "https://www.linkedin.com/in/pourya-fahimi/", + githubUrl: "https://github.com/PouryaFahimi", + }, + { + imageUrl: "/images/2025/staffs/MahdiHaeri.jpg", + name: "مهدی حائری", + role: "توسعه دهنده فرانت اند", + telegramUrl: "https://t.me/Mahdi_Haeri", + linkedinUrl: "https://www.linkedin.com/in/mahdi-haeri-4406861b9/", + githubUrl: "https://github.com/MahdiHaeri", + }, + ], + }; + + const scientificTeam: StaffTeam = { + teamTitle: t("scientificTeam.title"), + teamMembers: [ + { + imageUrl: "/images/2025/staffs/AmirabbasEntezari.jpg", + name: "امیرعباس انتظاری", + role: "سرپرست تیم علمی", + telegramUrl: "https://t.me/amirabbas_entezari", + githubUrl: "https://github.com/AmirabbasEntezari", + linkedinUrl: "https://www.linkedin.com/in/amirabbas-entezari/", + }, + { + imageUrl: "/images/2025/staffs/AlirezaSafari.jpg", + name: "علی رضا صفری ", + role: "عضو تیم علمی", + telegramUrl: "https://t.me/A4f_ss", + linkedinUrl: "https://www.linkedin.com/in/alireza-safari-3ba3942b8/", + githubUrl: "https://github.com/Alireza12ss", + }, + { + imageUrl: "/images/2025/staffs/MohammadJavadAkbari.jpg", + name: "محمدجواد اکبری", + role: "عضو تیم علمی", + githubUrl: "https://github.com/Javad-Ak", + linkedinUrl: "https://www.linkedin.com/in/mo-ja-akbari/", + telegramUrl: "", + }, + ], + }; + + return [ + organizingTeam, + technicalTeam, + scientificTeam, + ]; +} diff --git a/apps/level_up/lib/api/client/clientApi.ts b/apps/level_up/lib/api/client/clientApi.ts new file mode 100644 index 00000000..9ca679ec --- /dev/null +++ b/apps/level_up/lib/api/client/clientApi.ts @@ -0,0 +1,48 @@ +"use client"; + +import { ApiModule, BASE_URL } from "@ssc/core"; +import axios, { AxiosRequestConfig } from "axios"; +import { getSession, signOut } from "next-auth/react"; + +declare module "axios" { + export interface AxiosRequestConfig { + requiresAuth?: boolean; + } +} + +export const axiosInstance = axios.create({ + baseURL: BASE_URL, + timeout: 10000, + headers: { + "Content-Type": "application/json", + }, +}); + +axiosInstance.interceptors.request.use( + async (request) => { + if (request.requiresAuth) { + const session = await getSession(); + if (session && session.accessToken) { + request.headers["Authorization"] = `Bearer ${session.accessToken}`; + } + } + return request; + }, + (error) => { + return Promise.reject(error); + } +); + +axiosInstance.interceptors.response.use( + (response) => { + return response; + }, + async (error) => { + if (error.response?.status === 401) { + await signOut({ callbackUrl: "/login" }); + } + return Promise.reject(error); + } +); + +export const clientApi = new ApiModule(axiosInstance); diff --git a/apps/level_up/lib/api/server/serverApi.ts b/apps/level_up/lib/api/server/serverApi.ts new file mode 100644 index 00000000..196a0bd9 --- /dev/null +++ b/apps/level_up/lib/api/server/serverApi.ts @@ -0,0 +1,4 @@ +import { serverHttpService } from "@ssc/core"; +import { ApiModule } from "@ssc/core"; + +export const serverApi = new ApiModule(serverHttpService); diff --git a/apps/level_up/lib/config/dashboard-navigation.tsx b/apps/level_up/lib/config/dashboard-navigation.tsx new file mode 100644 index 00000000..f092abd5 --- /dev/null +++ b/apps/level_up/lib/config/dashboard-navigation.tsx @@ -0,0 +1,44 @@ +import { useTranslations, useLocale } from "next-intl"; +import { FaExternalLinkAlt } from "react-icons/fa"; + +export interface DashboardNavigationItem { + name: string; + route: string; + icon?: React.ReactNode; +} + +export const useDashboardNavigations = (): DashboardNavigationItem[] => { + const t = useTranslations("app.dashboard"); + const locale = useLocale(); + + return [ + // { + // name: t("profile.label"), + // // route: `/${locale}/dashboard/events`, + // route: `${ + // process.env.NEXT_PUBLIC_SSC_URL || "https://ceit-ssc.ir" + // }/dashboard`, + // icon: , + // }, + { + name: t("event"), + route: `/dashboard/events`, + }, + { + name: t("teamStatus.label"), + route: `/dashboard/team-status`, + }, + // { + // name: t("games.label"), + // route: `/${locale}/dashboard/games`, + // }, + { + name: t("shoppingBag"), + route: `/dashboard/shopping-bag`, + }, + { + name: t("onlineAccount.label"), + route: `/dashboard/online-account`, + }, + ]; +}; diff --git a/apps/level_up/lib/config/navigation.ts b/apps/level_up/lib/config/navigation.ts new file mode 100644 index 00000000..25e3f87e --- /dev/null +++ b/apps/level_up/lib/config/navigation.ts @@ -0,0 +1,42 @@ +import { useTranslations } from "next-intl"; + +export interface NavigationItem { + name: string; + route: string; + icon?: React.ReactNode; +} + +export const useMainNavigations = (): NavigationItem[] => { + const t = useTranslations("app.mainNavigation"); + + return [ + { + name: t("home"), + route: "/", + }, + // { + // name: t('news'), + // route: '/news', + // }, + { + name: t("faq"), + route: "/faq", + }, + { + name: t("staffs"), + route: "/staffs", + }, + { + name: t("gallery"), + route: "/gallery", + }, + { + name: t("sponsors"), + route: "/sponsor", + }, + // { + // name: t("dashboard"), + // route: "/dashboard/shopping-bag", + // }, + ]; +}; diff --git a/apps/level_up/lib/hooks/useAuth.ts b/apps/level_up/lib/hooks/useAuth.ts new file mode 100644 index 00000000..4d9144f6 --- /dev/null +++ b/apps/level_up/lib/hooks/useAuth.ts @@ -0,0 +1,27 @@ +import { signOut, useSession } from "next-auth/react"; +import { useMemo } from "react"; + +export const useAuth = () => { + const session = useSession(); + + const isLoading = useMemo( + () => session.status === "loading", + [session.status] + ); + + const isAuthenticated = useMemo( + () => session.status === "authenticated", + [session.status] + ); + + const logout = () => { + signOut({ callbackUrl: "/" }); + }; + + const user = useMemo( + () => (session.status === "authenticated" ? session.data.user : undefined), + [session] + ); + + return { isLoading, isAuthenticated, user, logout }; +}; diff --git a/apps/level_up/lib/hooks/useFetch.ts b/apps/level_up/lib/hooks/useFetch.ts new file mode 100644 index 00000000..8893c9aa --- /dev/null +++ b/apps/level_up/lib/hooks/useFetch.ts @@ -0,0 +1,77 @@ +"use client"; + +import { useState, useEffect, useCallback } from "react"; + +export interface UseFetchState { + data: T | null; + loading: boolean; + error: Error | null; +} + +export interface UseFetchOptions { + immediate?: boolean; + onSuccess?: (data: T) => void; + onError?: (error: Error) => void; +} + +/** + * Custom hook for data fetching with loading states + * @param apiFunc - The API function to call + * @param params - Parameters to pass to the API function + * @param options - Additional options for the fetch behavior + */ +export function useFetch( + apiFunc: (params?: P) => Promise, + params?: P, + options: UseFetchOptions = {} +): UseFetchState & { refetch: (newParams?: P) => Promise } { + const { immediate = true, onSuccess, onError } = options; + + const [data, setData] = useState(null); + const [loading, setLoading] = useState(immediate); + const [error, setError] = useState(null); + + const fetchData = useCallback( + async (fetchParams?: P) => { + try { + setLoading(true); + setError(null); + + const response = await apiFunc(fetchParams || params); + setData(response); + + if (onSuccess) { + onSuccess(response); + } + } catch (err) { + const error = + err instanceof Error ? err : new Error("An unknown error occurred"); + setError(error); + + if (onError) { + onError(error); + } + } finally { + setLoading(false); + } + }, + [apiFunc, params, onSuccess, onError] + ); + + const refetch = useCallback( + async (newParams?: P) => { + await fetchData(newParams); + }, + [fetchData] + ); + + useEffect(() => { + if (immediate) { + fetchData(); + } + }, []); + + return { data, loading, error, refetch }; +} + +export default useFetch; diff --git a/apps/level_up/lib/hooks/useFormatter.ts b/apps/level_up/lib/hooks/useFormatter.ts new file mode 100644 index 00000000..7e104580 --- /dev/null +++ b/apps/level_up/lib/hooks/useFormatter.ts @@ -0,0 +1,15 @@ +"use client"; + +import { digitsToHindi, moneyFormat } from "@ssc/utils"; +import { useLocale } from "next-intl"; + +export const useFormatter = () => { + const locale = useLocale(); + + const formatNumberToMoney = (value: string | number) => { + const formatted = moneyFormat(value); + return locale === "fa" ? digitsToHindi(formatted) : formatted; + }; + + return { formatNumberToMoney }; +}; diff --git a/apps/level_up/lib/hooks/useGoftino.ts b/apps/level_up/lib/hooks/useGoftino.ts new file mode 100644 index 00000000..9fb5dde3 --- /dev/null +++ b/apps/level_up/lib/hooks/useGoftino.ts @@ -0,0 +1,111 @@ +import { useSession } from "next-auth/react"; +import { useCallback, useEffect, useState } from "react"; + +const WIDGET_ID = "pbMzMN"; + +declare global { + interface Window { + Goftino?: { + setUser: (userData: { + email?: string; + name?: string; + phone?: string; + tags?: string[]; + metadata?: { key: string; value: string }[]; + avatar?: string; + about?: string; + forceUpdate?: boolean; + }) => void; + }; + } +} + +export function useGoftino() { + const [isGoftinoReady, setIsGoftinoReady] = useState(false); + const session = useSession(); + + const removeAllGoftinoScripts = (element) => { + if (!element) return; + const { id } = element; + if (id && (id === "goftino" || id === "goftino_w")) { + removeElem(element); + } + }; + + const removeGoftinoElements = useCallback((): void => { + setIsGoftinoReady(false); + getAllTags("script", removeAllGoftinoScripts); + getAllTags("iframe", removeAllGoftinoScripts); + getAllTags("style", removeAllGoftinoScripts); + }, []); + + const loadGoftino = useCallback(() => { + const scriptElement = document.createElement("script"); + const widgetUrl = "https://www.goftino.com/widget/" + WIDGET_ID; + const localStorageKey = "goftino_" + WIDGET_ID; + const localStorageValue = localStorage.getItem(localStorageKey); + + scriptElement.id = "goftino"; + scriptElement.async = true; + scriptElement.src = localStorageValue + ? widgetUrl + "?o=" + localStorageValue + : widgetUrl; + + document.getElementsByTagName("head")[0].appendChild(scriptElement); + }, []); + + const restartGoftino = useCallback(() => { + setIsGoftinoReady(false); + removeGoftinoElements(); + loadGoftino(); + }, [removeGoftinoElements, loadGoftino]); + + useEffect(() => { + restartGoftino(); + + function handleGoftinoReady() { + if (session.status === "authenticated") { + const { user } = session.data; + // console.log("!@! user data to goftino", { + // email: user.email, + // name: user.name, + // forceUpdate: true, + // }); + window.Goftino?.setUser({ + email: user.email, + name: user.name, + tags: ["gamecraft", "user"], + forceUpdate: true, + }); + } + + setIsGoftinoReady(true); + } + + if (document.readyState === "complete") { + loadGoftino(); + } else { + window.addEventListener("load", loadGoftino); + } + + window.addEventListener("goftino_ready", handleGoftinoReady); + + return () => { + window.removeEventListener("goftino_ready", handleGoftinoReady); + }; + }, [session, restartGoftino, loadGoftino]); + + return { isGoftinoReady }; +} + +export const getAllTags = (tagName: string, cb) => { + const elements = document.getElementsByTagName(tagName); + const elementsArray = Array.prototype.slice.call(elements); + elementsArray.forEach(cb); +}; + +export const removeElem = (element: Node): Node => + element.parentNode!.removeChild(element); + +export const getElemById = (elemId: string): Node | null => + document.getElementById(elemId); diff --git a/apps/level_up/lib/hooks/usePurchases.ts b/apps/level_up/lib/hooks/usePurchases.ts new file mode 100644 index 00000000..f31de370 --- /dev/null +++ b/apps/level_up/lib/hooks/usePurchases.ts @@ -0,0 +1,42 @@ +"use client"; + +import { useEffect } from "react"; +import { useAppDispatch, useAppSelector } from "../store/store"; +import { fetchPurchasesThunk } from "../store/purchases/purchases.thunk"; +import { + purchasesLoadingSelector, + purchasesErrorSelector, + purchasedPresentationsSelector, + isPresentationPurchasedSelector, +} from "../store/purchases/purchases.selectors"; +import { useAuth } from "./useAuth"; + +export function usePurchases() { + const dispatch = useAppDispatch(); + const { isAuthenticated } = useAuth(); + const loading = useAppSelector(purchasesLoadingSelector); + const error = useAppSelector(purchasesErrorSelector); + const presentations = useAppSelector(purchasedPresentationsSelector); + + useEffect(() => { + // Only fetch purchases if user is authenticated and we haven't loaded yet + if (isAuthenticated && presentations.length === 0 && !loading && !error) { + dispatch(fetchPurchasesThunk()); + } + }, [dispatch, isAuthenticated, presentations.length]); + + return { + presentations, + loading, + error, + isAuthenticated, + }; +} + +export function useIsPresentationPurchased(presentationId: number) { + const isPurchased = useAppSelector(isPresentationPurchasedSelector(presentationId)); + const { isAuthenticated } = useAuth(); + + // Only return true if user is authenticated and has purchased + return isAuthenticated && isPurchased; +} diff --git a/apps/level_up/lib/hooks/useRequest.ts b/apps/level_up/lib/hooks/useRequest.ts new file mode 100644 index 00000000..d19e62c0 --- /dev/null +++ b/apps/level_up/lib/hooks/useRequest.ts @@ -0,0 +1,22 @@ +import React from "react"; + +export const useFetch = (apiMethod: (...args) => Promise) => { + const [data, setData] = React.useState(null); + const [loading, setLoading] = React.useState(false); + const [error, setError] = React.useState(null); + + const fetchData = async (...args) => { + setLoading(true); + setError(null); + try { + const response = await apiMethod(...args); + setData(response); + } catch (err) { + setError(err.message || "An error occurred"); + } finally { + setLoading(false); + } + }; + + return { data, loading, error, fetchData }; +}; diff --git a/apps/level_up/lib/hooks/useResponsive.ts b/apps/level_up/lib/hooks/useResponsive.ts new file mode 100644 index 00000000..bf7e2f57 --- /dev/null +++ b/apps/level_up/lib/hooks/useResponsive.ts @@ -0,0 +1,23 @@ +import { useMediaQuery } from "react-responsive"; + +export const useResponsive = () => { + const xxl = useMediaQuery({ + query: "(min-width: 1600px)", + }); + const xl = useMediaQuery({ + query: "(min-width: 1200px)", + }); + const lg = useMediaQuery({ + query: "(min-width: 992px)", + }); + const md = useMediaQuery({ + query: "(min-width: 768px)", + }); + const sm = useMediaQuery({ + query: "(min-width: 576px)", + }); + const xs = useMediaQuery({ + query: "(max-width: 576px)", + }); + return { xxl, xl, lg, md, sm, xs }; +}; diff --git a/apps/level_up/lib/i18n.ts b/apps/level_up/lib/i18n.ts new file mode 100644 index 00000000..5e61102e --- /dev/null +++ b/apps/level_up/lib/i18n.ts @@ -0,0 +1,17 @@ +import { getRequestConfig } from "next-intl/server"; +import { routing } from "./routing"; + +export default getRequestConfig(async ({ requestLocale }) => { + // This typically corresponds to the `[locale]` segment + let locale = await requestLocale; + + // Ensure that a valid locale is used + if (!locale || !routing.locales.includes(locale as (typeof routing.locales)[number])) { + locale = routing.defaultLocale; + } + + return { + locale, + messages: (await import(`../messages/${locale}.json`)).default, + }; +}); diff --git a/apps/level_up/lib/navigation.ts b/apps/level_up/lib/navigation.ts new file mode 100644 index 00000000..f0bbd9af --- /dev/null +++ b/apps/level_up/lib/navigation.ts @@ -0,0 +1,9 @@ +import { createSharedPathnamesNavigation } from 'next-intl/navigation'; + +export const locales = ['en', 'fa'] as const; +export const defaultLocale = 'fa' as const; + +export type Locale = (typeof locales)[number]; + +export const { Link, redirect, usePathname, useRouter } = + createSharedPathnamesNavigation({ locales }); diff --git a/apps/level_up/lib/routing.ts b/apps/level_up/lib/routing.ts new file mode 100644 index 00000000..b082efa0 --- /dev/null +++ b/apps/level_up/lib/routing.ts @@ -0,0 +1,15 @@ +import { defineRouting } from "next-intl/routing"; +import { createNavigation } from "next-intl/navigation"; + +export const routing = defineRouting({ + // A list of all locales that are supported + locales: ["fa", "en"], + + // Used when no locale matches + defaultLocale: "fa", +}); + +// Lightweight wrappers around Next.js' navigation APIs +// that will consider the routing configuration +export const { Link, redirect, usePathname, useRouter } = + createNavigation(routing); diff --git a/apps/level_up/lib/soundManager.ts b/apps/level_up/lib/soundManager.ts new file mode 100644 index 00000000..cc6df18c --- /dev/null +++ b/apps/level_up/lib/soundManager.ts @@ -0,0 +1,57 @@ +import { Howl, Howler } from "howler"; + +// List of available sounds +export type SoundKey = "coin" | "jump"; + +// Store all sounds in one place +const sounds: Record = { + coin: new Howl({ + src: ["/sound/super-mario-coin-sound.mp3"], + volume: 0.3, + preload: true, + html5: true, + onloaderror: (id, error) => { + console.error(`Failed to load hover sound:`, error); + }, + onplayerror: (id, error) => { + console.error(`Failed to play hover sound:`, error); + }, + }), + jump: new Howl({ + src: ["/sound/super-mario-jump-sound.mp3"], + volume: 0.3, + preload: true, + html5: true, + onloaderror: (id, error) => { + console.error(`Failed to load hover sound:`, error); + }, + onplayerror: (id, error) => { + console.error(`Failed to play hover sound:`, error); + }, + }), +}; + +export const playSound = (key: SoundKey): void => { + try { + const sound = sounds[key]; + if (sound) { + // Check if the sound is ready to play + if (sound.state() === "loaded") { + sound.stop(); // reset if needed + // sound.play(); + } else { + console.warn(`Sound "${key}" is not loaded yet`); + } + } + } catch (error) { + console.error(`Error playing sound "${key}":`, error); + } +}; + +export const setGlobalVolume = (vol: number): void => { + Howler.volume(vol); // 0.0 - 1.0 +}; + +export const toggleMute = (mute: boolean): void => { + Howler.mute(mute); +}; diff --git a/apps/level_up/lib/store/cart/cart.selectors.ts b/apps/level_up/lib/store/cart/cart.selectors.ts new file mode 100644 index 00000000..5229cb6c --- /dev/null +++ b/apps/level_up/lib/store/cart/cart.selectors.ts @@ -0,0 +1,49 @@ +import { RootState } from "../store"; +import { createSelector } from "@reduxjs/toolkit"; +import { ItemType } from "@ssc/core"; + +export const cartSelector = (state: RootState) => state.cart; + +export const cartPresentationsSelector = createSelector( + [cartSelector], + (cart) => cart.presentations +); + +export const cartPresentationsCountSelector = createSelector( + [cartSelector], + (cart) => cart.count +); + +export const cartErrorSelector = createSelector( + [cartSelector], + (cart) => cart.error +); + +export const cartLoadingSelector = createSelector( + [cartSelector], + (cart) => cart.loading +); + +export const itemInCartSelector = (id: number, type: ItemType) => + createSelector([cartPresentationsSelector], (presentation) => { + switch (type) { + case ItemType.PRESENTATION: + return presentation.find((item) => item.id === id); + case ItemType.SOLO_COMPETITION: + return false; + case ItemType.COMPETITION_TEAM: + return false; + default: + return false; + } + }); + +export const cartPaymentDataSelector = createSelector( + [cartSelector], + (cart) => ({ + total: cart.total, + subTotal: cart.subTotal, + discountAmount: cart.discountAmount, + discountCode: cart.discountCode, + }) +); diff --git a/apps/level_up/lib/store/cart/cart.slice.ts b/apps/level_up/lib/store/cart/cart.slice.ts new file mode 100644 index 00000000..0056a0e8 --- /dev/null +++ b/apps/level_up/lib/store/cart/cart.slice.ts @@ -0,0 +1,114 @@ +"use client"; + +import { createSlice, PayloadAction } from "@reduxjs/toolkit"; +import { Cart, Presentation } from "@ssc/core"; +import { + addItemToCartThunk, + applyBonusCodeThunk, + fetchCartThunk, + removeBonusCodeThunk, + removeItemFromCartThunk, +} from "./cart.thunk"; + +const initialState = { + presentations: [] as Presentation[], + count: 0, + discountCode: null as string | null, + discountAmount: 0, + total: 0, + subTotal: 0, + error: null as string | null, + loading: false, +}; + +const cartSlice = createSlice({ + name: "cart", + initialState: initialState, + reducers: {}, + extraReducers: (builder) => { + builder.addAsyncThunk(fetchCartThunk, { + pending: (state) => { + state.loading = true; + state.error = null; + }, + fulfilled: (state, action) => { + state.presentations = action.payload.presentations; + state.count = action.payload.presentations.length; + state.discountCode = action.payload.discount_code; + state.discountAmount = action.payload.discount_amount || 0; + // Handle both PriceObject and plain number formats + state.subTotal = + typeof action.payload.subtotal_amount === "object" + ? action.payload.subtotal_amount?.parsedValue || 0 + : action.payload.subtotal_amount || 0; + state.total = + typeof action.payload.total_amount === "object" + ? action.payload.total_amount?.parsedValue || 0 + : action.payload.total_amount || 0; + state.error = null; + state.loading = false; + }, + + rejected: (state, action) => { + state.presentations = []; + state.count = 0; + state.error = action.payload as string; + state.loading = false; + }, + }); + builder.addAsyncThunk(addItemToCartThunk, { + pending: (state) => { + state.loading = true; + state.error = null; + }, + rejected: (state, action) => { + state.error = action.payload as string; + state.loading = false; + }, + }); + builder.addAsyncThunk(removeItemFromCartThunk, { + pending: (state) => { + state.loading = true; + state.error = null; + }, + rejected: (state, action) => { + state.error = action.payload as string; + state.loading = false; + }, + }); + builder.addAsyncThunk(removeBonusCodeThunk, { + fulfilled: (state, action: PayloadAction) => { + state.discountCode = action.payload.discount_code; + state.discountAmount = action.payload.discount_amount; + state.subTotal = + typeof action.payload.subtotal_amount === "object" + ? action.payload.subtotal_amount?.parsedValue || 0 + : action.payload.subtotal_amount || 0; + state.total = + typeof action.payload.total_amount === "object" + ? action.payload.total_amount?.parsedValue || 0 + : action.payload.total_amount || 0; + }, + }); + builder.addAsyncThunk(applyBonusCodeThunk, { + fulfilled: (state, action: PayloadAction) => { + // state.presentations = action.payload.presentations; + // state.count = action.payload.presentations.length; + state.discountCode = action.payload.discount_code; + state.discountAmount = action.payload.discount_amount; + // Handle both PriceObject and plain number formats + state.subTotal = + typeof action.payload.subtotal_amount === "object" + ? action.payload.subtotal_amount?.parsedValue || 0 + : action.payload.subtotal_amount || 0; + state.total = + typeof action.payload.total_amount === "object" + ? action.payload.total_amount?.parsedValue || 0 + : action.payload.total_amount || 0; + }, + }); + }, +}); + +export const {} = cartSlice.actions; +export const cartReducer = cartSlice.reducer; diff --git a/apps/level_up/lib/store/cart/cart.thunk.ts b/apps/level_up/lib/store/cart/cart.thunk.ts new file mode 100644 index 00000000..aa0ef120 --- /dev/null +++ b/apps/level_up/lib/store/cart/cart.thunk.ts @@ -0,0 +1,70 @@ +"use client"; + +import { eventId } from "lib/utils/constants"; +import { createAppAsyncThunk } from "../createAppAsyncThunk"; +import { Cart, ItemType } from "@ssc/core"; + +export const fetchCartThunk = createAppAsyncThunk( + "cart/fetchCart", + async (_, thunkAPI) => { + try { + const response = await thunkAPI.extra.Api.shop.fetchCart(eventId); + const data = response.data.data; + return thunkAPI.fulfillWithValue(data); + } catch (error) { + return thunkAPI.rejectWithValue(error.message); + } + } +); + +export const addItemToCartThunk = createAppAsyncThunk( + "cart/addItem", + async (params: { item_type: ItemType; item_id: number }, thunkAPI) => { + try { + await thunkAPI.extra.Api.shop.addItem(params.item_type, params.item_id); + thunkAPI.dispatch(fetchCartThunk()); + return; + } catch (error) { + return thunkAPI.rejectWithValue(error.message); + } + } +); + +export const removeItemFromCartThunk = createAppAsyncThunk( + "cart/removeItem", + async (args: { item_id: number; item_type: ItemType }, thunkAPI) => { + try { + thunkAPI.extra.Api.shop.removeItem(args.item_id, args.item_type); + thunkAPI.dispatch(fetchCartThunk()); + return; + } catch (error) { + return thunkAPI.rejectWithValue(error.message); + } + } +); + +export const applyBonusCodeThunk = createAppAsyncThunk( + "cart/applyBonusCode", + async (code: string, thunkAPI) => { + try { + const response = await thunkAPI.extra.Api.shop.applyDiscountCode(code); + const data = response.data.data; + return thunkAPI.fulfillWithValue(data); + } catch (error) { + return thunkAPI.rejectWithValue(error.message); + } + } +); + +export const removeBonusCodeThunk = createAppAsyncThunk( + "cart/removeBonusCode", + async (parameters: void, thunkAPI) => { + try { + const response = await thunkAPI.extra.Api.shop.removeDiscountCode(); + const data = response.data.data; + return thunkAPI.fulfillWithValue(data); + } catch (error) { + return thunkAPI.rejectWithValue(error.message); + } + } +); diff --git a/apps/level_up/lib/store/createAppAsyncThunk.ts b/apps/level_up/lib/store/createAppAsyncThunk.ts new file mode 100644 index 00000000..a44892a2 --- /dev/null +++ b/apps/level_up/lib/store/createAppAsyncThunk.ts @@ -0,0 +1,8 @@ +import { createAsyncThunk } from "@reduxjs/toolkit"; +import { clientApi } from "../api/client/clientApi"; + +export const createAppAsyncThunk = createAsyncThunk.withTypes<{ + extra: { + Api: typeof clientApi; + }; +}>(); diff --git a/apps/level_up/lib/store/order/order.selectors.ts b/apps/level_up/lib/store/order/order.selectors.ts new file mode 100644 index 00000000..e69de29b diff --git a/apps/level_up/lib/store/order/order.slice.ts b/apps/level_up/lib/store/order/order.slice.ts new file mode 100644 index 00000000..b3b301c5 --- /dev/null +++ b/apps/level_up/lib/store/order/order.slice.ts @@ -0,0 +1,39 @@ +"use client"; + +import { createSlice } from "@reduxjs/toolkit"; +import { ItemType } from "antd/es/menu/interface"; + +type orderStateType = { + id: number; + order_id: string; + totalAmount: number; + status: "pending_payment"; + createdAt: string; + paidAt: string; + items: { + id: number; + description: string; + price: string; + content_type: number; + object_id: number; + event_id: number; + item_type: ItemType; + item_title: string; + }[]; +}; + +const initialState = { + id: 0, + order_id: "", + totalAmount: 0, +} as orderStateType; + +const orderSlice = createSlice({ + name: "order", + initialState: initialState, + reducers: {}, + extraReducers: (builder) => {}, +}); + +export const {} = orderSlice.actions; +export const orderReducer = orderSlice.reducer; diff --git a/apps/level_up/lib/store/order/order.thunk.ts b/apps/level_up/lib/store/order/order.thunk.ts new file mode 100644 index 00000000..7a39c07b --- /dev/null +++ b/apps/level_up/lib/store/order/order.thunk.ts @@ -0,0 +1,32 @@ +import { createAppAsyncThunk } from "../createAppAsyncThunk"; + +export const checkoutThunk = createAppAsyncThunk( + "order/partialCheckout", + async (eventID: number, thunkAPI) => { + try { + const response = await thunkAPI.extra.Api.order.checkout(eventID); + const data = response.data.data; + return thunkAPI.fulfillWithValue(data); + } catch (error) { + return thunkAPI.rejectWithValue(error.message); + } + } +); + +export const createAndCheckoutThunk = createAppAsyncThunk( + "order/checkout", + async (itemIds: number[], thunkAPI) => { + try { + const response = await thunkAPI + .dispatch(checkoutThunk(Number(process.env.GAME_CRAFT_SSC_EVENT_ID))) + .unwrap(); + const paymentRes = await thunkAPI.extra.Api.payment.initiatePayment( + response.order_id + ); + const paymentData = paymentRes.data.data; + return thunkAPI.fulfillWithValue(paymentData); + } catch (error) { + return thunkAPI.rejectWithValue(error.message); + } + } +); diff --git a/apps/level_up/lib/store/orderHistory/orderHistory.slice.ts b/apps/level_up/lib/store/orderHistory/orderHistory.slice.ts new file mode 100644 index 00000000..e69de29b diff --git a/apps/level_up/lib/store/orderHistory/orderHistory.thunk.ts b/apps/level_up/lib/store/orderHistory/orderHistory.thunk.ts new file mode 100644 index 00000000..e69de29b diff --git a/apps/level_up/lib/store/purchases/purchases.selectors.ts b/apps/level_up/lib/store/purchases/purchases.selectors.ts new file mode 100644 index 00000000..146f8ea1 --- /dev/null +++ b/apps/level_up/lib/store/purchases/purchases.selectors.ts @@ -0,0 +1,47 @@ +import { RootState } from "../store"; +import { createSelector } from "@reduxjs/toolkit"; + +export const purchasesSelector = (state: RootState) => state.purchases; + +export const purchasedPresentationsSelector = createSelector( + [purchasesSelector], + (purchases) => purchases.presentations +); + +export const purchasedSoloCompetitionsSelector = createSelector( + [purchasesSelector], + (purchases) => purchases.soloCompetitions +); + +export const purchasedProductsSelector = createSelector( + [purchasesSelector], + (purchases) => purchases.products +); + +export const purchasesLoadingSelector = createSelector( + [purchasesSelector], + (purchases) => purchases.loading +); + +export const purchasesErrorSelector = createSelector( + [purchasesSelector], + (purchases) => purchases.error +); + +// Filter presentations by type for workshops and talks +export const workshopsSelector = createSelector( + [purchasedPresentationsSelector], + (presentations) => presentations.filter(p => p.type === "workshop" || p.type === "course") +); + +export const talksSelector = createSelector( + [purchasedPresentationsSelector], + (presentations) => presentations.filter(p => p.type === "talk") +); + +// Check if a specific presentation is purchased +export const isPresentationPurchasedSelector = (presentationId: number) => + createSelector( + [purchasedPresentationsSelector], + (presentations) => presentations.some(p => p.id === presentationId) + ); diff --git a/apps/level_up/lib/store/purchases/purchases.slice.ts b/apps/level_up/lib/store/purchases/purchases.slice.ts new file mode 100644 index 00000000..99f0d1d9 --- /dev/null +++ b/apps/level_up/lib/store/purchases/purchases.slice.ts @@ -0,0 +1,53 @@ +"use client"; + +import { createSlice, PayloadAction } from "@reduxjs/toolkit"; +import { PresentationOverview, SoloCompetition, Product } from "@ssc/core"; +import { fetchPurchasesThunk } from "./purchases.thunk"; + +interface PurchasesState { + presentations: PresentationOverview[]; + soloCompetitions: SoloCompetition[]; + products: Product[]; + loading: boolean; + error: string | null; +} + +const initialState: PurchasesState = { + presentations: [], + soloCompetitions: [], + products: [], + loading: false, + error: null, +}; + +const purchasesSlice = createSlice({ + name: "purchases", + initialState, + reducers: {}, + extraReducers: (builder) => { + builder.addAsyncThunk(fetchPurchasesThunk, { + pending: (state) => { + state.loading = true; + state.error = null; + }, + fulfilled: (state, action) => { + state.loading = false; + state.error = null; + + // Direct access to presentations from the API response + state.presentations = action.payload.presentations || []; + state.soloCompetitions = action.payload.solo_competitions || []; + state.products = action.payload.products || []; + }, + rejected: (state, action) => { + state.loading = false; + state.error = action.payload as string; + state.presentations = []; + state.soloCompetitions = []; + state.products = []; + }, + }); + }, +}); + +export const purchasesReducer = purchasesSlice.reducer; diff --git a/apps/level_up/lib/store/purchases/purchases.thunk.ts b/apps/level_up/lib/store/purchases/purchases.thunk.ts new file mode 100644 index 00000000..0e67c419 --- /dev/null +++ b/apps/level_up/lib/store/purchases/purchases.thunk.ts @@ -0,0 +1,19 @@ +"use client"; + +import { createAppAsyncThunk } from "../createAppAsyncThunk"; +import { PurchasesResponse } from "@ssc/core"; + +export const fetchPurchasesThunk = createAppAsyncThunk( + "purchases/fetchPurchases", + async (_, thunkAPI) => { + try { + const response = await thunkAPI.extra.Api.purchases.fetchPurchases(); + const data = response.data.data; + return thunkAPI.fulfillWithValue(data); + } catch (error) { + return thunkAPI.rejectWithValue( + error?.message || "Failed to fetch purchases" + ); + } + } +); diff --git a/apps/level_up/lib/store/store.ts b/apps/level_up/lib/store/store.ts new file mode 100644 index 00000000..58af4578 --- /dev/null +++ b/apps/level_up/lib/store/store.ts @@ -0,0 +1,42 @@ +"use client"; + +import { + combineReducers, + configureStore, + createAsyncThunk, +} from "@reduxjs/toolkit"; +import { TypedUseSelectorHook, useDispatch, useSelector } from "react-redux"; +import { cartReducer } from "./cart/cart.slice"; +import { clientApi } from "lib/api/client/clientApi"; +import { orderReducer } from "./order/order.slice"; +import { purchasesReducer } from "./purchases/purchases.slice"; +import { teamsReducer } from "./teams/teams.slice"; + +export const store = configureStore({ + reducer: combineReducers({ + cart: cartReducer, + order: orderReducer, + purchases: purchasesReducer, + teams: teamsReducer, + }), + middleware: (getDefaultMiddleware) => + getDefaultMiddleware({ + thunk: { + extraArgument: { + Api: clientApi, + }, + }, + }), +}); + +export type RootState = ReturnType; +export type AppDispatch = typeof store.dispatch; +export const useAppDispatch: () => AppDispatch = useDispatch; +export const useAppSelector: TypedUseSelectorHook = useSelector; +export const createAppAsyncThunk = createAsyncThunk.withTypes<{ + state: RootState; + dispatch: AppDispatch; + extra: { + Api: typeof clientApi; + }; +}>(); diff --git a/apps/level_up/lib/store/teams/teams.slice.ts b/apps/level_up/lib/store/teams/teams.slice.ts new file mode 100644 index 00000000..de809452 --- /dev/null +++ b/apps/level_up/lib/store/teams/teams.slice.ts @@ -0,0 +1,56 @@ +import { createSlice } from "@reduxjs/toolkit"; +import { TeamDetails } from "@ssc/core/lib/types/api/Teams/teams"; +import { + fetchTeamsThunk, + payTeamThunk, + registerTeamThunk, +} from "./teams.thunk"; + +interface TeamsState { + loading: boolean; + error?: string | null; + data: TeamDetails[]; +} + +const initialState: TeamsState = { + loading: true, + error: null, + data: [], +}; + +const teamsSlice = createSlice({ + name: "teams", + initialState, + reducers: {}, + extraReducers: (builder) => { + builder + .addCase(fetchTeamsThunk.pending, (state) => { + state.loading = true; + state.error = null; + }) + .addCase(fetchTeamsThunk.fulfilled, (state, action) => { + state.loading = false; + state.data = action.payload; + }) + .addCase(fetchTeamsThunk.rejected, (state, action) => { + state.loading = false; + state.error = action.error.message ?? "Failed to fetch teams"; + }) + + .addCase(payTeamThunk.fulfilled, (state, action) => { + const team = state.data.find((t) => t.id === action.payload.teamId); + if (team) team.status = "awaiting_payment_confirmation"; + }) + + .addCase(registerTeamThunk.fulfilled, (state, action) => { + const { teamId, details } = action.payload; + const team = state.data.find((t) => t.id === teamId); + if (team) { + // team.group_competition_details = details; + team.status = "pending_admin_verification"; // update according to backend + } + }); + }, +}); + +export const teamsReducer = teamsSlice.reducer; diff --git a/apps/level_up/lib/store/teams/teams.thunk.ts b/apps/level_up/lib/store/teams/teams.thunk.ts new file mode 100644 index 00000000..8dbecabc --- /dev/null +++ b/apps/level_up/lib/store/teams/teams.thunk.ts @@ -0,0 +1,72 @@ +import { TeamDetails } from "@ssc/core/lib/types/api/Teams/teams"; +import { createAppAsyncThunk } from "../createAppAsyncThunk"; + +export const fetchTeamsThunk = createAppAsyncThunk( + "teams/fetchTeams", + async (_, { extra: { Api } }) => { + const res = await Api.teams.getTeamsList(); + return res.data.data.results as TeamDetails[]; + } +); + +export const payTeamThunk = createAppAsyncThunk( + "teams/payTeam", + async (teamId: number, { extra: { Api }, rejectWithValue }) => { + try { + const res = await Api.teams.teamPayment(teamId); + + if (res.status === 200) { + return { teamId, paymentUrl: res.data.data.payment_url }; + } + + if (res.status === 204) { + // it's free + } + + return { teamId }; + } catch (err) { + console.log(err); + if (err.status == 403) + return rejectWithValue({ + code: err.status, + message: "تنها سرگروه مجاز به پرداخت میباشد", + }); + return rejectWithValue({ + code: err.response?.status ?? 500, + message: "پرداخت ناموفق بود", + }); + } + } +); + +export const registerTeamThunk = createAppAsyncThunk( + "teams/registerTeam", + async ( + { teamId, competitionId }: { teamId: number; competitionId: number }, + { extra: { Api }, rejectWithValue, dispatch } + ) => { + try { + const res = await Api.teams.registerCompetition(teamId, competitionId); + dispatch(fetchTeamsThunk()); + return { + teamId, + details: res.data, + message: "تیم در مسابقه ثبت شد و آماده پرداخت است", + }; + } catch (err) { + if (err.response?.status === 403) { + return rejectWithValue({ + code: 403, + message: "تنها سرگروه مجاز به ثبت تیم می باشد", + }); + } + if (err.response?.status === 400) { + return rejectWithValue({ + code: 400, + message: err.response?.data?.message || "خطای نامشخص", + }); + } + return rejectWithValue({ code: 500, message: "خطای ناشناخته" }); + } + } +); diff --git a/apps/level_up/lib/utils/constants.ts b/apps/level_up/lib/utils/constants.ts new file mode 100644 index 00000000..af426b21 --- /dev/null +++ b/apps/level_up/lib/utils/constants.ts @@ -0,0 +1,2 @@ +"use client"; +export const eventId = Number(process.env.GAME_CRAFT_SSC_EVENT_ID); diff --git a/apps/level_up/lib/utils/storage.ts b/apps/level_up/lib/utils/storage.ts new file mode 100644 index 00000000..efd339e5 --- /dev/null +++ b/apps/level_up/lib/utils/storage.ts @@ -0,0 +1,58 @@ +/** + * Storage utility for handling localStorage operations with Next.js SSR compatibility + */ + +export const storage = { + set: (key: string, value: T): void => { + if (typeof window !== 'undefined') { + try { + localStorage.setItem(key, JSON.stringify(value)) + } catch (error) { + console.error(`Error setting localStorage key "${key}":`, error) + } + } + }, + + get: (key: string): T | null => { + if (typeof window !== 'undefined') { + try { + const item = localStorage.getItem(key) + return item ? JSON.parse(item) : null + } catch (error) { + console.error(`Error getting localStorage key "${key}":`, error) + return null + } + } + return null + }, + + remove: (key: string): void => { + if (typeof window !== 'undefined') { + try { + localStorage.removeItem(key) + } catch (error) { + console.error(`Error removing localStorage key "${key}":`, error) + } + } + }, + + clear: (): void => { + if (typeof window !== 'undefined') { + try { + localStorage.clear() + } catch (error) { + console.error('Error clearing localStorage:', error) + } + } + }, + + // Check if a key exists + exists: (key: string): boolean => { + if (typeof window !== 'undefined') { + return localStorage.getItem(key) !== null + } + return false + } +} + +export default storage diff --git a/apps/level_up/messages/en.json b/apps/level_up/messages/en.json new file mode 100644 index 00000000..71210277 --- /dev/null +++ b/apps/level_up/messages/en.json @@ -0,0 +1,263 @@ +{ + "app": { + "name": "LevelUp", + "logo": { + "game": "Level", + "craft": "Up" + }, + "mainNavigation": { + "home": "Home", + "news": "News", + "faq": "FAQ", + "staffs": "Our Team", + "gallery": "Gallery", + "sponsors": "Sponsors", + "dashboard": "Dashboard" + }, + "sponsors": { + "title": "Sponsors", + "noSponsors": "No sponsors yet.", + "visitWebsite": "Show website!", + "Liara": { + "name": "Liara", + "description": "Liara makes it easy to deploy any software!" + } + }, + "staffs": { + "title": "Our Team", + "organizingTeam": { + "title": "Organizing Team" + }, + "technicalTeam": { + "title": "Technical Team" + }, + "scientificTeam": { + "title": "Scientific Team" + }, + "marketingTeam": { + "title": "Marketing Team" + }, + "contentCreationTeam": { + "title": "Content Creation Team" + }, + "graphicTeam": { + "title": "Graphic Design Team" + }, + "financeTeam": { + "title": "Finance Team" + }, + "operationsTeam": { + "title": "Operations Team" + }, + "decorationTeam": { + "title": "Decoration Team" + } + }, + "dashboard": { + "event": "Events", + "events": { + "title": "Events & Workshops", + "competitions": "My Competitions", + "workshops": "My Workshops", + "talks": "My Talks", + "loading": "Loading...", + "empty": "You haven't enrolled in any events", + "emptyDescription": "Browse available events and enroll to expand your skills" + }, + "teamStatus": { + "label": "Teams Status", + "teamName": "Team Name", + "teamMembers": "Team Members", + "addTeammate": "Add Teammate", + "noTeams": "You haven't enrolled in any competitions", + "noTeamsDescription": "There is no such a team that enrolled in a competition for you" + }, + "games": { + "label": "Games", + "upload": "Upload", + "gameName": "Game Name", + "gameLink": "Game Link", + "gameDescription": "Game Description", + "submitGame": "Submit Game", + "preview": "Preview", + "download": "Download" + }, + "profile": { + "label": "Profile", + "profileImage": "Profile Image", + "firstName": "First Name", + "lastName": "Last Name", + "email": "Email", + "phoneNumber": "Phone Number", + "updateProfile": "Update Profile", + "uploadImage": "Upload Image", + "changeImage": "Change Image", + "emailLocked": "Email cannot be changed", + "personalInformation": "Personal Information", + "profilePicture": "Profile Picture", + "saveChanges": "Save Changes", + "cancel": "Cancel", + "profileUpdated": "Profile updated successfully", + "invalidImage": "Please upload a valid image file", + "maxFileSize": "File size should not exceed 5MB" + }, + "shoppingBag": "Shopping Cart", + "onlineAccount": { + "label": "Online Account", + "skyroom": "Skyroom Account", + "description": "", + "username": "Username", + "password": "Password" + } + }, + "pages": { + "main": "LevelUp", + "home": "Home", + "dashboard": "Dashboard", + "notFound": "Page Not Found", + "login": "Login", + "signUp": "Sign Up", + "forgotPassword": "Forgot Password" + }, + "auth": { + "login": "Login", + "signUp": "Sign Up", + "logout": "Logout", + "register": "Register", + "email": "Email", + "password": "Password", + "displayName": "Display Name", + "phoneNumber": "Phone Number", + "forgotPassword": "Forgot Password?", + "doNotHaveAccount": "Don't have an account?", + "alreadyHaveAccount": "Already have an account?", + "resetPassword": "Reset Password", + "resetPasswordInstructions": "Enter your email address and we'll send you instructions to reset your password.", + "sendResetLink": "Send Reset Link", + "backToLogin": "Back to Login", + "resetLinkSent": "Reset link has been sent to your email", + "resetLinkError": "Failed to send reset link. Please try again.", + "loginWithSSC": "Login with SSC", + "loginWithEmail": "Login with Email", + "or": "OR", + "invalidCredentials": "Invalid email or password", + "loginSuccessful": "Login successful! Redirecting...", + "loginFailed": "Login failed. Please try again.", + "ssoLoginFailed": "SSO login failed. Please try again." + }, + "intro": { + "title": "LevelUp", + "subtitle": "The Level Up Educational Event", + "description": "LevelUp is an educational event designed to empower students and enthusiasts through hands-on learning and collaboration. Organized by Amirkabir University of Technology, this year's event offers a dynamic blend of courses, workshops, and competitions focused on creativity, technology, and innovation. Participants will have the opportunity to learn from experienced mentors, develop practical skills, and showcase their talents in engaging challenges — all within a supportive and inspiring community environment." + }, + "aboutUs": { + "title": "About Us", + "description": "The Computer Science Student Association at Amirkabir University is an independent organization dedicated to scientific and educational activities. Each year, the association hosts numerous academic and educational events at university, national, and international levels, attracting a large audience. Notable events include ACM competitions, Linux festivals, DMC data mining competitions, and AAISS artificial intelligence seminars.\nOne of the association's key approaches is strengthening team spirit and large-scale collaboration, helping students gain valuable experience for their professional lives. This event is no exception, with many students actively participating in the association's initiatives." + }, + "footer": { + "autGameCraft": "Amirkabir Level Up", + "copyRight": "© 2025 LevelUp. All rights reserved." + }, + "faq": { + "title": "Frequently Asked Questions", + "competitionConditions": "Course and Workshop Participation", + "competitionParticipate": { + "title": "How can I register for courses and workshops?", + "content": "To participate in LevelUp courses or workshops, visit levelup.ceit-ssc.ir, browse the available sessions, and complete the payment for your chosen course. After payment, the purchased course will appear in your dashboard under 'Purchased Courses'." + }, + "teamsConditions": { + "title": "How can I access my purchased courses?", + "content": "Once you've registered for a course or presentation, go to your dashboard on the LevelUp website and open the 'My Courses' section. There you can view all the courses and workshops you’ve enrolled in, along with access details for each." + }, + "howToParticipate": { + "title": "How do I join online classes?", + "content": "For online classes, your Skyroom username and password are displayed in the 'Online Account' section of your dashboard. You can use these credentials to join your class sessions directly through the Skyroom platform." + }, + "competitionRules": { + "title": "Workshop and Course Rules", + "content": "Please check each course’s schedule before attending. Participants are expected to join sessions on time, whether in-person or online. Sharing login credentials or class links with others is not allowed. If you face any issues accessing a session, please contact event support." + } + }, + "buttons": { + "staffs": "Our Team", + "learnMore": "Learn More", + "watchNow": "Watch Now", + "registerNow": "Register Now" + } + }, + "button": { + "submit": "Submit", + "logout": "Logout", + "login": "Login", + "signup": "Sign Up", + "cancel": "Cancel", + "events": "Events", + "teamStatus": "Teams Status", + "games": "Games", + "shoppingBag": "Shopping Cart", + "staffs": "Our Team", + "backToHome": "Back to Home", + "sendResetLink": "Send Reset Link", + "backToLogin": "Back to Login" + }, + "error": { + "404": "Page Not Found", + "500": "Internal Server Error" + }, + "workshop": { + "loginToContinue": "Login to continue", + "workshops": "Workshops", + "presentations": "Presentations", + "competitions": "Competitions", + "price": "Price", + "per_member": "Per Each Member", + "description": "Description", + "schedule": "Schedule", + "location": "Location", + "inPerson": "In Person", + "online": "Online", + "addToCart": "Add to Cart", + "removeFromCart": "Remove from Cart", + "enroll": "Enroll", + "presenters": "Presenters", + "unknownPresenter": "Unknown Presenter", + "noPresenters": "No presenters", + "andMore": "and {count} more", + "onlineWorkshops": "Online Workshops", + "onlineTalks": "Online Talks", + "onlineLink": "Presentation Link", + "offlineWorkshops": "In-Person Workshops", + "free": "Free", + "error": "Failed to load workshops", + "noWorkshops": "No workshops available", + "noOnlineWorkshops": "No online workshops are currently available", + "noOfflineWorkshops": "No in-person workshops are currently available", + "viewDetails": "View Details", + "capacity": "Total Capacity", + "teamsCapacity": "Teams Total Capacity", + "remainingCapacity": "Remaining", + "teamSizes": "Team Sizes", + "requirements": "Requirements", + "type": { + "course": "Course", + "talk": "Talk", + "workshop": "Workshop" + }, + "level": { + "beginner": "Beginner", + "intermediate": "Intermediate", + "advanced": "Advanced" + } + }, + "common": { + "currency": "Toman", + "retry": "Retry", + "close": "Close" + }, + "notFound": { + "title": "Oops! Page Not Found", + "description": "It looks like the page you're looking for doesn't exist. Mario couldn't find it in any of the castle levels!", + "goHome": "Go Home", + "goBack": "Go Back" + } +} diff --git a/apps/level_up/messages/fa.json b/apps/level_up/messages/fa.json new file mode 100644 index 00000000..929063e1 --- /dev/null +++ b/apps/level_up/messages/fa.json @@ -0,0 +1,263 @@ +{ + "app": { + "name": "لول آپ", + "logo": { + "game": "لول", + "craft": "آپ" + }, + "mainNavigation": { + "home": "خانه", + "news": "اخبار", + "faq": "سوالات متداول", + "staffs": "تیم ما", + "gallery": "گالری", + "sponsors": "حامیان", + "dashboard": "داشبورد" + }, + "staffs": { + "title": "تیم ما", + "organizingTeam": { + "title": "تیم برگزاری" + }, + "technicalTeam": { + "title": "تیم فنی" + }, + "scientificTeam": { + "title": "تیم علمی" + }, + "marketingTeam": { + "title": "تیم بازاریابی" + }, + "contentCreationTeam": { + "title": "تیم تولید محتوا" + }, + "graphicTeam": { + "title": "تیم طراحی گرافیک" + }, + "financeTeam": { + "title": "تیم مالی" + }, + "operationsTeam": { + "title": "تیم اجرایی" + }, + "decorationTeam": { + "title": "تیم تزئینات" + } + }, + "sponsors": { + "title": "حامیان", + "noSponsors": "هنوز حامی‌ای وجود ندارد", + "visitWebsite": "مشاهده وب‌سایت", + "Liara": { + "name": "Liara", + "description": "ما کارهای پیچیده\u200Cی راه\u200Cاندازی و تنظیمات سرورها را انجام داده\u200Cایم تا شما فقط با آپلود سورس\u200Cکد برنامه\u200Cی خود، آن را به\u200Cسادگی روی سرور اجرا کنید." + } + }, + "dashboard": { + "event": "رویدادها", + "events": { + "title": "رویدادها و کارگاه‌ها", + "competitions": "مسابقات من", + "workshops": "کارگاه‌های من", + "talks": "ارائه‌های من", + "loading": "در حال بارگذاری...", + "empty": "شما در هیچ رویدادی ثبت‌نام نکرده‌اید", + "emptyDescription": "برای مشاهده رویدادهای موجود و ثبت‌نام، به بخش مربوطه مراجعه کنید" + }, + "teamStatus": { + "label": "وضعیت تیم ها", + "teamName": "نام تیم", + "teamMembers": "افراد تیم", + "addTeammate": "افزودن هم تیمی", + "noTeams": "تاکنون در هیچ مسابقه ای ثبت نام نکرده اید", + "noTeamsDescription": "شما هنوز تیم فعالی که در مسابقه شرکت کرده باشد ندارید" + }, + "games": { + "label": "بازی‌ها", + "upload": "آپلود", + "gameName": "نام بازی", + "gameLink": "لینک بازی", + "gameDescription": "توضیحات بازی", + "submitGame": "ثبت بازی", + "preview": "پیش‌نمایش", + "download": "دانلود" + }, + "profile": { + "label": "پروفایل", + "profileImage": "تصویر پروفایل", + "firstName": "نام", + "lastName": "نام خانوادگی", + "email": "ایمیل", + "phoneNumber": "شماره تلفن", + "updateProfile": "بروزرسانی پروفایل", + "uploadImage": "آپلود تصویر", + "changeImage": "تغییر تصویر", + "emailLocked": "ایمیل قابل تغییر نیست", + "personalInformation": "اطلاعات شخصی", + "profilePicture": "تصویر پروفایل", + "saveChanges": "ذخیره تغییرات", + "cancel": "لغو", + "profileUpdated": "پروفایل با موفقیت بروزرسانی شد", + "invalidImage": "لطفاً یک فایل تصویر معتبر آپلود کنید", + "maxFileSize": "حجم فایل نباید از ۵ مگابایت بیشتر باشد" + }, + "shoppingBag": "سبد خرید", + "onlineAccount": { + "label": "اکانت آنلاین", + "skyroom": "اکانت اسکای روم", + "description": "از این اکانت جهت شرکت در ارائه هایی که در بستر اسکای روم تشکیل می شوند استفاده نمایید.", + "username": "نام کاربری", + "password": "رمز عبور" + } + }, + "pages": { + "main": "لول آپ", + "home": "خانه", + "dashboard": "داشبورد", + "notFound": "صفحه یافت نشد", + "login": "ورود", + "signUp": "ثبت‌نام", + "forgotPassword": "فراموشی رمز عبور" + }, + "auth": { + "login": "ورود", + "signUp": "ثبت‌نام", + "logout": "خروج", + "register": "ثبت‌نام", + "email": "ایمیل", + "password": "رمز عبور", + "displayName": "نام نمایشی", + "phoneNumber": "شماره تلفن", + "forgotPassword": "رمز عبور خود را فراموش کرده‌اید؟", + "doNotHaveAccount": "حساب کاربری ندارید؟", + "alreadyHaveAccount": "حساب کاربری دارید؟", + "resetPassword": "بازیابی رمز عبور", + "resetPasswordInstructions": "آدرس ایمیل خود را وارد کنید تا دستورالعمل‌های بازیابی رمز عبور را برای شما ارسال کنیم.", + "sendResetLink": "ارسال لینک بازیابی", + "backToLogin": "بازگشت به صفحه ورود", + "resetLinkSent": "لینک بازیابی به ایمیل شما ارسال شد", + "resetLinkError": "ارسال لینک بازیابی با مشکل مواجه شد. لطفاً دوباره تلاش کنید.", + "loginWithSSC": "ورود با SSC", + "loginWithEmail": "ورود با ایمیل", + "or": "یا", + "invalidCredentials": "ایمیل یا رمز عبور نادرست است", + "loginSuccessful": "ورود موفقیت‌آمیز! در حال انتقال...", + "loginFailed": "ورود ناموفق بود. لطفاً دوباره تلاش کنید.", + "ssoLoginFailed": "ورود SSO ناموفق بود. لطفاً دوباره تلاش کنید." + }, + "intro": { + "title": "لول‌آپ", + "subtitle": "آموزش در لول\u200Cآپ امیرکبیر", + "description": "لول‌آپ رویدادی آموزشی است که با هدف ارتقای مهارت‌ها و توانمندسازی دانشجویان و علاقه‌مندان از طریق یادگیری عملی و کار تیمی برگزار می‌شود. این رویداد با میزبانی دانشگاه صنعتی امیرکبیر، شامل مجموعه‌ای از دوره‌ها، کارگاه‌ها و مسابقات در زمینه‌های خلاقیت، فناوری و نوآوری است. شرکت‌کنندگان در لول‌آپ فرصت دارند از تجربیات منتورهای حرفه‌ای بهره‌مند شوند، مهارت‌های خود را در فضای واقعی به کار بگیرند و در رقابت‌های هیجان‌انگیز استعدادهایشان را به نمایش بگذارند؛ در محیطی پویا، الهام‌بخش و پرانرژی." + }, + "aboutUs": { + "title": "درباره ما", + "description": "انجمن علمی دانشکده کامپیوتر امیرکبیر، نهادی مستقل در جهت انجام فعالیت‌های علمی و آموزشی است. هر ساله رویدادهای علمی و آموزشی متعددی توسط انجمن علمی در سطح دانشگاهی، کشوری و بین‌المللی برگزار شده و مخاطبان بسیاری را به خود جذب می‌کند. از میان این رویدادها می‌توان به مسابقات ACM، جشنواره لینوکس، مسابقات داده‌کاوی DMC و سمینارهای هوش مصنوعی AAISS اشاره کرد.\nیکی از رویکردهای مهم انجمن علمی دانشکده، تقویت روحیه کار تیمی و در مقیاس بزرگ است؛ به طوری که دانشجویان دخیل در رویدادها با کسب این تجربه، زندگی شغلی مؤثرتری داشته باشند. این رویداد نیز مستثنی نبوده و بسیاری از دانشجویان در این مسیر، انجمن علمی را همراهی کرده‌اند." + }, + "buttons": { + "staffs": "با تیم ما آشنا شوید", + "learnMore": "اطلاعات بیشتر", + "watchNow": "همین حالا ببینید", + "registerNow": "همین حالا ثبت نام کنید" + }, + "footer": { + "autGameCraft": "لول آپ امیرکبیر", + "copyRight": "لول آپ ۱۴۰۴ - تمام حقوق محفوظ است ©" + }, + "faq": { + "title": "سوالات متداول", + "competitionConditions": "شرایط شرکت در دوره‌ها و ارائه‌ها", + "competitionParticipate": { + "title": "چگونه در دوره‌ها و کارگاه‌ها شرکت کنیم؟", + "content": "برای شرکت در دوره‌ها و کارگاه‌های لول‌آپ کافی است به وب‌سایت levelup.ceit-ssc.ir مراجعه کنید، دوره یا کارگاه مورد نظر خود را از بین گزینه‌های موجود انتخاب کرده و هزینه آن را پرداخت نمایید. پس از پرداخت، دوره در بخش «دوره‌های خریداری‌شده» داشبورد شما قابل مشاهده خواهد بود." + }, + "teamsConditions": { + "title": "چگونه به دوره‌های خریداری‌شده دسترسی پیدا کنم؟", + "content": "پس از خرید هر دوره یا ارائه، می‌توانید از طریق داشبورد کاربری خود در سایت لول‌آپ به بخش «دوره‌های من» مراجعه کنید. در آن‌جا تمام دوره‌ها و کارگاه‌هایی که ثبت‌نام کرده‌اید نمایش داده می‌شود و لینک یا اطلاعات دسترسی به هرکدام در دسترس خواهد بود." + }, + "howToParticipate": { + "title": "چگونه وارد کلاس‌های آنلاین شوم؟", + "content": "برای کلاس‌های آنلاین، اطلاعات ورود شما (نام کاربری و رمز عبور) در بخش «حساب آنلاین» داشبورد نمایش داده می‌شود. کلاس‌ها از طریق پلتفرم اسکای‌روم برگزار می‌شوند و می‌توانید با استفاده از اطلاعات موجود مستقیماً وارد کلاس شوید." + }, + "competitionRules": { + "title": "قوانین حضور در دوره‌ها و کارگاه‌ها", + "content": "لطفاً پیش از شروع دوره‌ها زمان‌بندی جلسات را در صفحه هر دوره بررسی کنید. شرکت‌کنندگان باید در زمان مقرر در کلاس‌های حضوری یا آنلاین حضور داشته باشند. اشتراک‌گذاری لینک یا اطلاعات ورود برای سایر افراد مجاز نیست. در صورت بروز مشکل در ورود، با پشتیبانی انجمن علمی تماس بگیرید." + } + } + }, + "button": { + "submit": "ثبت", + "logout": "خروج", + "login": "ورود", + "signup": "ثبت‌نام", + "cancel": "لغو", + "events": "رویدادها", + "teamStatus": "وضعیت تیم ها", + "games": "بازی‌ها", + "shoppingBag": "سبد خرید", + "staffs": "تیم ما", + "backToHome": "بازگشت به خانه", + "sendResetLink": "ارسال لینک بازیابی", + "backToLogin": "بازگشت به صفحه ورود" + }, + "error": { + "404": "صفحه یافت نشد", + "500": "خطای سرور داخلی" + }, + "workshop": { + "loginToContinue": "ابتدا وارد شوید", + "competitions": "مسابقه ها", + "workshops": "کارگاه ها", + "presentations": "ارائه ها", + "price": "قیمت", + "per_member": "هر عضو", + "description": "توضیحات", + "schedule": "زمان برگزاری", + "location": "مکان", + "inPerson": "حضوری", + "online": "آنلاین", + "addToCart": "اضافه به سبد خرید", + "removeFromCart": "حذف از سبد خرید", + "enroll": "ثبت نام", + "presenters": "ارائه دهندگان", + "unknownPresenter": "ارائه‌دهنده نامشخص", + "noPresenters": "بدون ارائه‌دهنده", + "andMore": "و {count} نفر دیگر", + "onlineWorkshops": "کارگاه‌های آنلاین", + "onlineTalks": "ارائه های آنلاین", + "onlineLink": "لینک ارائه", + "offlineWorkshops": "کارگاه‌های حضوری", + "free": "رایگان", + "error": "خطا در بارگذاری کارگاه‌ها", + "noWorkshops": "کارگاهی موجود نیست", + "noOnlineWorkshops": "در حال حاضر هیچ کارگاه آنلاینی موجود نیست", + "noOfflineWorkshops": "در حال حاضر هیچ کارگاه حضوری موجود نیست", + "viewDetails": "جزئیات بیشتر", + "capacity": "ظرفیت کل", + "teamsCapacity": "ظرفیت کل تیم ها", + "remainingCapacity": "باقی مانده", + "teamSizes": "اندازه تیم ها", + "requirements": "پیش نیاز ها", + "type": { + "course": "دوره", + "talk": "سخنرانی", + "workshop": "کارگاه" + }, + "level": { + "beginner": "مبتدی", + "intermediate": "متوسط", + "advanced": "پیشرفته" + } + }, + "common": { + "currency": "تومان", + "retry": "تلاش دوباره", + "close": "بستن" + }, + "notFound": { + "title": "اوپس! صفحه پیدا نشد", + "description": "به نظر می‌رسد صفحه‌ای که به دنبال آن هستید وجود ندارد.", + "goHome": "بازگشت به خانه", + "goBack": "بازگشت" + } +} diff --git a/apps/level_up/middleware.ts b/apps/level_up/middleware.ts new file mode 100644 index 00000000..b926a15f --- /dev/null +++ b/apps/level_up/middleware.ts @@ -0,0 +1,41 @@ +import { withAuth } from "next-auth/middleware"; +import createMiddleware from "next-intl/middleware"; +import { routing } from "./lib/routing"; + +const intlMiddleware = createMiddleware(routing); + +// Protected routes that require authentication +const protectedRoutes = ["/dashboard", "/profile", "/admin"]; + +function isProtectedRoute(pathname: string) { + const pathWithoutLocale = pathname.replace(/^\/(fa|en)/, "") || "/"; + return protectedRoutes.some((route) => pathWithoutLocale.startsWith(route)); +} + +export default withAuth( + function middleware(req) { + return intlMiddleware(req); + }, + { + callbacks: { + authorized: ({ token, req }) => { + const { pathname } = req.nextUrl; + + if (!isProtectedRoute(pathname)) { + return true; + } + + return !!token; + }, + }, + pages: { + signIn: "/fa/", + }, + } +); + +export const config = { + matcher: [ + "/((?!api|_next/static|_next/image|favicon.ico|images|sound|assets|public|svg|.*\\.cur|.*\\.lottie|.*\\.svg|.*\\.png|.*\\.jpg|.*\\.jpeg|.*\\.gif|.*\\.webp|.*\\.ico|.*\\.css|.*\\.js|.*\\.woff|.*\\.woff2|.*\\.ttf|.*\\.otf|not-found|error).*)", + ], +}; diff --git a/apps/level_up/next.config.ts b/apps/level_up/next.config.ts new file mode 100644 index 00000000..3f187f34 --- /dev/null +++ b/apps/level_up/next.config.ts @@ -0,0 +1,24 @@ +import createNextIntlPlugin from "next-intl/plugin"; +import type { NextConfig } from "next"; + +const withNextIntl = createNextIntlPlugin("./lib/i18n.ts"); +const withBundleAnalyzer = require("@next/bundle-analyzer")({ + enabled: process.env.ANALYZE === "true", +}); + +const nextConfig: NextConfig = { + env: { + GAME_CRAFT_SSC_EVENT_ID: process.env.GAME_CRAFT_SSC_EVENT_ID, + }, + transpilePackages: ["@ssc/ui", "@ssc/utils", "@ssc/core"], + modularizeImports: { + antd: { + transform: "antd/lib/{{member}}", + }, + }, + images: { + domains: ["api.ceit-ssc.ir"], + }, +}; + +export default withBundleAnalyzer(withNextIntl(nextConfig)); diff --git a/apps/level_up/package.json b/apps/level_up/package.json new file mode 100644 index 00000000..83b51852 --- /dev/null +++ b/apps/level_up/package.json @@ -0,0 +1,50 @@ +{ + "name": "@ssc/level_up", + "version": "0.1.0", + "private": true, + "type": "module", + "scripts": { + "build": "next build", + "dev": "next dev", + "lint": "next lint", + "start": "NEXT_DEBUG=true next start", + "type-check": "tsc --noEmit" + }, + "dependencies": { + "@ant-design/icons": "^6.0.0", + "@ant-design/nextjs-registry": "^1.1.0", + "@ant-design/v5-patch-for-react-19": "^1.0.3", + "@bprogress/next": "^3.2.12", + "@lottiefiles/dotlottie-react": "^0.15.2", + "@reduxjs/toolkit": "^2.9.0", + "@ssc/core": "workspace:*", + "@ssc/ui": "workspace:*", + "@ssc/utils": "workspace:*", + "antd": "^5.27.1", + "axios": "^1.11.0", + "clsx": "^2.1.1", + "howler": "^2.2.4", + "next": "^15.5.2", + "next-auth": "^4.24.11", + "next-intl": "^3.26.5", + "next-themes": "^0.4.6", + "react": "^19.1.1", + "react-dom": "^19.1.1", + "react-icons": "^5.5.0", + "react-lottie": "^1.2.10", + "react-redux": "^9.2.0", + "react-responsive": "^10.0.1", + "react-toastify": "^11.0.5" + }, + "devDependencies": { + "@next/bundle-analyzer": "^15.5.2", + "@ssc/tailwind-config": "workspace:*", + "@types/node": "^22.18.0", + "@types/react": "^19.1.12", + "@types/react-dom": "^19.1.9", + "autoprefixer": "^10.4.21", + "postcss": "^8.5.6", + "tailwindcss": "^3.4.17", + "typescript": "^5.9.2" + } +} diff --git a/apps/level_up/postcss.config.js b/apps/level_up/postcss.config.js new file mode 100644 index 00000000..2aa7205d --- /dev/null +++ b/apps/level_up/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/apps/level_up/public/assets/images/3d-dark.png b/apps/level_up/public/assets/images/3d-dark.png new file mode 100644 index 00000000..2202ab63 Binary files /dev/null and b/apps/level_up/public/assets/images/3d-dark.png differ diff --git a/apps/level_up/public/assets/images/Asset 4.png b/apps/level_up/public/assets/images/Asset 4.png new file mode 100644 index 00000000..75793b58 Binary files /dev/null and b/apps/level_up/public/assets/images/Asset 4.png differ diff --git a/apps/level_up/public/assets/images/Asset4.png b/apps/level_up/public/assets/images/Asset4.png new file mode 100644 index 00000000..75793b58 Binary files /dev/null and b/apps/level_up/public/assets/images/Asset4.png differ diff --git a/apps/level_up/public/assets/images/IranServer.png b/apps/level_up/public/assets/images/IranServer.png new file mode 100644 index 00000000..de64c1ab Binary files /dev/null and b/apps/level_up/public/assets/images/IranServer.png differ diff --git a/apps/level_up/public/assets/images/avngames.png b/apps/level_up/public/assets/images/avngames.png new file mode 100644 index 00000000..803254e8 Binary files /dev/null and b/apps/level_up/public/assets/images/avngames.png differ diff --git a/apps/level_up/public/assets/images/black-cube.png b/apps/level_up/public/assets/images/black-cube.png new file mode 100644 index 00000000..73431575 Binary files /dev/null and b/apps/level_up/public/assets/images/black-cube.png differ diff --git a/apps/level_up/public/assets/images/brainladder.png b/apps/level_up/public/assets/images/brainladder.png new file mode 100644 index 00000000..b0b7a607 Binary files /dev/null and b/apps/level_up/public/assets/images/brainladder.png differ diff --git a/apps/level_up/public/assets/images/crown.png b/apps/level_up/public/assets/images/crown.png new file mode 100644 index 00000000..c11b449f Binary files /dev/null and b/apps/level_up/public/assets/images/crown.png differ diff --git a/apps/level_up/public/assets/images/dark-3d.png b/apps/level_up/public/assets/images/dark-3d.png new file mode 100644 index 00000000..b0ace205 Binary files /dev/null and b/apps/level_up/public/assets/images/dark-3d.png differ diff --git a/apps/level_up/public/assets/images/default_prof.jpg b/apps/level_up/public/assets/images/default_prof.jpg new file mode 100644 index 00000000..3adfd6db Binary files /dev/null and b/apps/level_up/public/assets/images/default_prof.jpg differ diff --git a/apps/level_up/public/assets/images/dream-event.png b/apps/level_up/public/assets/images/dream-event.png new file mode 100644 index 00000000..768683b2 Binary files /dev/null and b/apps/level_up/public/assets/images/dream-event.png differ diff --git a/apps/level_up/public/assets/images/dropout.png b/apps/level_up/public/assets/images/dropout.png new file mode 100644 index 00000000..e567a9c7 Binary files /dev/null and b/apps/level_up/public/assets/images/dropout.png differ diff --git a/apps/level_up/public/assets/images/folan.png b/apps/level_up/public/assets/images/folan.png new file mode 100644 index 00000000..841caefc Binary files /dev/null and b/apps/level_up/public/assets/images/folan.png differ diff --git a/apps/level_up/public/assets/images/folan4.png b/apps/level_up/public/assets/images/folan4.png new file mode 100644 index 00000000..9884c494 Binary files /dev/null and b/apps/level_up/public/assets/images/folan4.png differ diff --git a/apps/level_up/public/assets/images/folan_2.png b/apps/level_up/public/assets/images/folan_2.png new file mode 100644 index 00000000..de75a863 Binary files /dev/null and b/apps/level_up/public/assets/images/folan_2.png differ diff --git a/apps/level_up/public/assets/images/funtory.png b/apps/level_up/public/assets/images/funtory.png new file mode 100644 index 00000000..3ee5c026 Binary files /dev/null and b/apps/level_up/public/assets/images/funtory.png differ diff --git a/apps/level_up/public/assets/images/gameTestImage.jpg b/apps/level_up/public/assets/images/gameTestImage.jpg new file mode 100644 index 00000000..6d081bfd Binary files /dev/null and b/apps/level_up/public/assets/images/gameTestImage.jpg differ diff --git a/apps/level_up/public/assets/images/hayahool.png b/apps/level_up/public/assets/images/hayahool.png new file mode 100644 index 00000000..b4407329 Binary files /dev/null and b/apps/level_up/public/assets/images/hayahool.png differ diff --git a/apps/level_up/public/assets/images/institue.png b/apps/level_up/public/assets/images/institue.png new file mode 100644 index 00000000..48e0bfe4 Binary files /dev/null and b/apps/level_up/public/assets/images/institue.png differ diff --git a/apps/level_up/public/assets/images/medrick-logo.png b/apps/level_up/public/assets/images/medrick-logo.png new file mode 100644 index 00000000..71f4dcc9 Binary files /dev/null and b/apps/level_up/public/assets/images/medrick-logo.png differ diff --git a/apps/level_up/public/assets/images/myket.png b/apps/level_up/public/assets/images/myket.png new file mode 100644 index 00000000..12d1b09e Binary files /dev/null and b/apps/level_up/public/assets/images/myket.png differ diff --git a/apps/level_up/public/assets/images/pattern.png b/apps/level_up/public/assets/images/pattern.png new file mode 100644 index 00000000..d0735baa Binary files /dev/null and b/apps/level_up/public/assets/images/pattern.png differ diff --git a/apps/level_up/public/assets/images/pgj.png b/apps/level_up/public/assets/images/pgj.png new file mode 100644 index 00000000..1c4b02c8 Binary files /dev/null and b/apps/level_up/public/assets/images/pgj.png differ diff --git a/apps/level_up/public/assets/images/quiz of kings.png b/apps/level_up/public/assets/images/quiz of kings.png new file mode 100644 index 00000000..e5744736 Binary files /dev/null and b/apps/level_up/public/assets/images/quiz of kings.png differ diff --git a/apps/level_up/public/assets/images/sponsors/asiatech.png b/apps/level_up/public/assets/images/sponsors/asiatech.png new file mode 100644 index 00000000..1be5039d Binary files /dev/null and b/apps/level_up/public/assets/images/sponsors/asiatech.png differ diff --git a/apps/level_up/public/assets/images/sponsors/black-cube.png b/apps/level_up/public/assets/images/sponsors/black-cube.png new file mode 100644 index 00000000..73431575 Binary files /dev/null and b/apps/level_up/public/assets/images/sponsors/black-cube.png differ diff --git a/apps/level_up/public/assets/images/sponsors/incytelGames.png b/apps/level_up/public/assets/images/sponsors/incytelGames.png new file mode 100644 index 00000000..909d734b Binary files /dev/null and b/apps/level_up/public/assets/images/sponsors/incytelGames.png differ diff --git a/apps/level_up/public/assets/images/sponsors/liara.png b/apps/level_up/public/assets/images/sponsors/liara.png new file mode 100644 index 00000000..fa89ab9d Binary files /dev/null and b/apps/level_up/public/assets/images/sponsors/liara.png differ diff --git a/apps/level_up/public/assets/images/sponsors/pgj.png b/apps/level_up/public/assets/images/sponsors/pgj.png new file mode 100644 index 00000000..54d3aadb Binary files /dev/null and b/apps/level_up/public/assets/images/sponsors/pgj.png differ diff --git a/apps/level_up/public/assets/images/sponsors/snappfood.png b/apps/level_up/public/assets/images/sponsors/snappfood.png new file mode 100644 index 00000000..dc08a8a7 Binary files /dev/null and b/apps/level_up/public/assets/images/sponsors/snappfood.png differ diff --git a/apps/level_up/public/assets/images/sponsors/yektanet.png b/apps/level_up/public/assets/images/sponsors/yektanet.png new file mode 100644 index 00000000..813b604a Binary files /dev/null and b/apps/level_up/public/assets/images/sponsors/yektanet.png differ diff --git a/apps/level_up/public/assets/images/ssc_white.png b/apps/level_up/public/assets/images/ssc_white.png new file mode 100644 index 00000000..3dfaeeb7 Binary files /dev/null and b/apps/level_up/public/assets/images/ssc_white.png differ diff --git a/apps/level_up/public/assets/images/tod.png b/apps/level_up/public/assets/images/tod.png new file mode 100644 index 00000000..17b14491 Binary files /dev/null and b/apps/level_up/public/assets/images/tod.png differ diff --git a/apps/level_up/public/assets/svg/bubble-light-purple.svg b/apps/level_up/public/assets/svg/bubble-light-purple.svg new file mode 100644 index 00000000..8ddca33e --- /dev/null +++ b/apps/level_up/public/assets/svg/bubble-light-purple.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/level_up/public/assets/svg/bubble-purple.svg b/apps/level_up/public/assets/svg/bubble-purple.svg new file mode 100644 index 00000000..b3937652 --- /dev/null +++ b/apps/level_up/public/assets/svg/bubble-purple.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/level_up/public/assets/svg/dark-3d-bulb.svg b/apps/level_up/public/assets/svg/dark-3d-bulb.svg new file mode 100644 index 00000000..db7a00fa --- /dev/null +++ b/apps/level_up/public/assets/svg/dark-3d-bulb.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/apps/level_up/public/assets/svg/dark-3d.svg b/apps/level_up/public/assets/svg/dark-3d.svg new file mode 100644 index 00000000..b3bfd8ae --- /dev/null +++ b/apps/level_up/public/assets/svg/dark-3d.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/apps/level_up/public/assets/svg/prize-1.svg b/apps/level_up/public/assets/svg/prize-1.svg new file mode 100644 index 00000000..480a6bf5 --- /dev/null +++ b/apps/level_up/public/assets/svg/prize-1.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/level_up/public/assets/svg/prize-2.svg b/apps/level_up/public/assets/svg/prize-2.svg new file mode 100644 index 00000000..fc63de5a --- /dev/null +++ b/apps/level_up/public/assets/svg/prize-2.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/level_up/public/assets/svg/prize-3.svg b/apps/level_up/public/assets/svg/prize-3.svg new file mode 100644 index 00000000..32c2851d --- /dev/null +++ b/apps/level_up/public/assets/svg/prize-3.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/level_up/public/cursor/cursor.cur b/apps/level_up/public/cursor/cursor.cur new file mode 100644 index 00000000..bd385847 Binary files /dev/null and b/apps/level_up/public/cursor/cursor.cur differ diff --git a/apps/level_up/public/cursor/pointer.cur b/apps/level_up/public/cursor/pointer.cur new file mode 100644 index 00000000..adf86105 Binary files /dev/null and b/apps/level_up/public/cursor/pointer.cur differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/Estedad-sample.png b/apps/level_up/public/fonts/Estedad-v7.3/Estedad-sample.png new file mode 100644 index 00000000..c168eaf3 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/Estedad-sample.png differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/Variable/Estedad-FD[KSHD,wght].ttf b/apps/level_up/public/fonts/Estedad-v7.3/Variable/Estedad-FD[KSHD,wght].ttf new file mode 100644 index 00000000..526090f4 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/Variable/Estedad-FD[KSHD,wght].ttf differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/Variable/Estedad[KSHD,wght].ttf b/apps/level_up/public/fonts/Estedad-v7.3/Variable/Estedad[KSHD,wght].ttf new file mode 100644 index 00000000..0cd26cc3 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/Variable/Estedad[KSHD,wght].ttf differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/estedad.css b/apps/level_up/public/fonts/Estedad-v7.3/estedad.css new file mode 100644 index 00000000..12d17a6f --- /dev/null +++ b/apps/level_up/public/fonts/Estedad-v7.3/estedad.css @@ -0,0 +1,62 @@ +@font-face { + font-family: 'Estedad'; + font-style: normal; + font-weight: 100; + src: url('webfonts/statics/Estedad-ExtraLight.woff2') format('woff2'); +} + +@font-face { + font-family: 'Estedad'; + font-style: normal; + font-weight: 200; + src: url('webfonts/statics/Estedad-Thin.woff2') format('woff2'); +} + +@font-face { + font-family: 'Estedad'; + font-style: normal; + font-weight: 300; + src: url('webfonts/statics/Estedad-Light.woff2') format('woff2'); +} + +@font-face { + font-family: 'Estedad'; + font-style: normal; + font-weight: 500; + src: url('webfonts/statics/Estedad-Medium.woff2') format('woff2'); +} + +@font-face { + font-family: 'Estedad'; + font-style: normal; + font-weight: 600; + src: url('webfonts/statics/Estedad-Regular.woff2') format('woff2'); +} + +@font-face { + font-family: 'Estedad'; + font-style: normal; + font-weight: 800; + src: url('webfonts/statics/Estedad-SemiBold.woff2') format('woff2'); +} + +@font-face { + font-family: 'Estedad'; + font-style: normal; + font-weight: 900; + src: url('webfonts/statics/Estedad-Bold.woff2') format('woff2'); +} + +@font-face { + font-family: 'Estedad'; + font-style: normal; + font-weight: 950; + src: url('webfonts/statics/Estedad-ExtraBold.woff2') format('woff2'); +} + +@font-face { + font-family: 'Estedad'; + font-style: normal; + font-weight: 1000; + src: url('webfonts/statics/Estedad-Black.woff2') format('woff2'); +} diff --git a/apps/level_up/public/fonts/Estedad-v7.3/ttf/Estedad-Black.ttf b/apps/level_up/public/fonts/Estedad-v7.3/ttf/Estedad-Black.ttf new file mode 100644 index 00000000..0bbe6cec Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/ttf/Estedad-Black.ttf differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/ttf/Estedad-Bold.ttf b/apps/level_up/public/fonts/Estedad-v7.3/ttf/Estedad-Bold.ttf new file mode 100644 index 00000000..934be8b3 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/ttf/Estedad-Bold.ttf differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/ttf/Estedad-ExtraBold.ttf b/apps/level_up/public/fonts/Estedad-v7.3/ttf/Estedad-ExtraBold.ttf new file mode 100644 index 00000000..6d69e10d Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/ttf/Estedad-ExtraBold.ttf differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/ttf/Estedad-ExtraLight.ttf b/apps/level_up/public/fonts/Estedad-v7.3/ttf/Estedad-ExtraLight.ttf new file mode 100644 index 00000000..e9d87744 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/ttf/Estedad-ExtraLight.ttf differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/ttf/Estedad-Light.ttf b/apps/level_up/public/fonts/Estedad-v7.3/ttf/Estedad-Light.ttf new file mode 100644 index 00000000..fd07ab8e Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/ttf/Estedad-Light.ttf differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/ttf/Estedad-Medium.ttf b/apps/level_up/public/fonts/Estedad-v7.3/ttf/Estedad-Medium.ttf new file mode 100644 index 00000000..e0943157 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/ttf/Estedad-Medium.ttf differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/ttf/Estedad-Regular.ttf b/apps/level_up/public/fonts/Estedad-v7.3/ttf/Estedad-Regular.ttf new file mode 100644 index 00000000..5d6758c9 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/ttf/Estedad-Regular.ttf differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/ttf/Estedad-SemiBold.ttf b/apps/level_up/public/fonts/Estedad-v7.3/ttf/Estedad-SemiBold.ttf new file mode 100644 index 00000000..7ac69f1f Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/ttf/Estedad-SemiBold.ttf differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/ttf/Estedad-Thin.ttf b/apps/level_up/public/fonts/Estedad-v7.3/ttf/Estedad-Thin.ttf new file mode 100644 index 00000000..e917bca1 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/ttf/Estedad-Thin.ttf differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/ttf/FD/Estedad-FD-Black.ttf b/apps/level_up/public/fonts/Estedad-v7.3/ttf/FD/Estedad-FD-Black.ttf new file mode 100644 index 00000000..d68b7a97 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/ttf/FD/Estedad-FD-Black.ttf differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/ttf/FD/Estedad-FD-Bold.ttf b/apps/level_up/public/fonts/Estedad-v7.3/ttf/FD/Estedad-FD-Bold.ttf new file mode 100644 index 00000000..3e13688e Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/ttf/FD/Estedad-FD-Bold.ttf differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/ttf/FD/Estedad-FD-ExtraBold.ttf b/apps/level_up/public/fonts/Estedad-v7.3/ttf/FD/Estedad-FD-ExtraBold.ttf new file mode 100644 index 00000000..dead0d06 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/ttf/FD/Estedad-FD-ExtraBold.ttf differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/ttf/FD/Estedad-FD-ExtraLight.ttf b/apps/level_up/public/fonts/Estedad-v7.3/ttf/FD/Estedad-FD-ExtraLight.ttf new file mode 100644 index 00000000..cd4955b2 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/ttf/FD/Estedad-FD-ExtraLight.ttf differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/ttf/FD/Estedad-FD-Light.ttf b/apps/level_up/public/fonts/Estedad-v7.3/ttf/FD/Estedad-FD-Light.ttf new file mode 100644 index 00000000..004ec97a Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/ttf/FD/Estedad-FD-Light.ttf differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/ttf/FD/Estedad-FD-Medium.ttf b/apps/level_up/public/fonts/Estedad-v7.3/ttf/FD/Estedad-FD-Medium.ttf new file mode 100644 index 00000000..7433882b Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/ttf/FD/Estedad-FD-Medium.ttf differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/ttf/FD/Estedad-FD-Regular.ttf b/apps/level_up/public/fonts/Estedad-v7.3/ttf/FD/Estedad-FD-Regular.ttf new file mode 100644 index 00000000..8f018e33 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/ttf/FD/Estedad-FD-Regular.ttf differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/ttf/FD/Estedad-FD-SemiBold.ttf b/apps/level_up/public/fonts/Estedad-v7.3/ttf/FD/Estedad-FD-SemiBold.ttf new file mode 100644 index 00000000..b1774c9f Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/ttf/FD/Estedad-FD-SemiBold.ttf differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/ttf/FD/Estedad-FD-Thin.ttf b/apps/level_up/public/fonts/Estedad-v7.3/ttf/FD/Estedad-FD-Thin.ttf new file mode 100644 index 00000000..77e008dc Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/ttf/FD/Estedad-FD-Thin.ttf differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/Estedad-Black.woff2 b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/Estedad-Black.woff2 new file mode 100644 index 00000000..41d73ab3 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/Estedad-Black.woff2 differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/Estedad-Bold.woff2 b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/Estedad-Bold.woff2 new file mode 100644 index 00000000..f902f872 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/Estedad-Bold.woff2 differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/Estedad-ExtraBold.woff2 b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/Estedad-ExtraBold.woff2 new file mode 100644 index 00000000..2bd438a1 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/Estedad-ExtraBold.woff2 differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/Estedad-ExtraLight.woff2 b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/Estedad-ExtraLight.woff2 new file mode 100644 index 00000000..27404930 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/Estedad-ExtraLight.woff2 differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/Estedad-Light.woff2 b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/Estedad-Light.woff2 new file mode 100644 index 00000000..ba2ff999 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/Estedad-Light.woff2 differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/Estedad-Medium.woff2 b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/Estedad-Medium.woff2 new file mode 100644 index 00000000..b023e050 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/Estedad-Medium.woff2 differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/Estedad-Regular.woff2 b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/Estedad-Regular.woff2 new file mode 100644 index 00000000..0a77dfc2 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/Estedad-Regular.woff2 differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/Estedad-SemiBold.woff2 b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/Estedad-SemiBold.woff2 new file mode 100644 index 00000000..433f5405 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/Estedad-SemiBold.woff2 differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/Estedad-Thin.woff2 b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/Estedad-Thin.woff2 new file mode 100644 index 00000000..cf82ee10 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/Estedad-Thin.woff2 differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/FD/Estedad-FD-Black.woff2 b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/FD/Estedad-FD-Black.woff2 new file mode 100644 index 00000000..94f458f1 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/FD/Estedad-FD-Black.woff2 differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/FD/Estedad-FD-Bold.woff2 b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/FD/Estedad-FD-Bold.woff2 new file mode 100644 index 00000000..0302c641 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/FD/Estedad-FD-Bold.woff2 differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/FD/Estedad-FD-ExtraBold.woff2 b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/FD/Estedad-FD-ExtraBold.woff2 new file mode 100644 index 00000000..0be62c64 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/FD/Estedad-FD-ExtraBold.woff2 differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/FD/Estedad-FD-ExtraLight.woff2 b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/FD/Estedad-FD-ExtraLight.woff2 new file mode 100644 index 00000000..e9bfb701 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/FD/Estedad-FD-ExtraLight.woff2 differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/FD/Estedad-FD-Light.woff2 b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/FD/Estedad-FD-Light.woff2 new file mode 100644 index 00000000..c1312c81 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/FD/Estedad-FD-Light.woff2 differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/FD/Estedad-FD-Medium.woff2 b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/FD/Estedad-FD-Medium.woff2 new file mode 100644 index 00000000..fb71ca06 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/FD/Estedad-FD-Medium.woff2 differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/FD/Estedad-FD-Regular.woff2 b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/FD/Estedad-FD-Regular.woff2 new file mode 100644 index 00000000..a027c0b5 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/FD/Estedad-FD-Regular.woff2 differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/FD/Estedad-FD-SemiBold.woff2 b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/FD/Estedad-FD-SemiBold.woff2 new file mode 100644 index 00000000..2fa813eb Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/FD/Estedad-FD-SemiBold.woff2 differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/FD/Estedad-FD-Thin.woff2 b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/FD/Estedad-FD-Thin.woff2 new file mode 100644 index 00000000..a24463e2 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/statics/FD/Estedad-FD-Thin.woff2 differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/webfonts/variable/Estedad-FD[KSHD,wght].woff2 b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/variable/Estedad-FD[KSHD,wght].woff2 new file mode 100644 index 00000000..ec19d31c Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/variable/Estedad-FD[KSHD,wght].woff2 differ diff --git a/apps/level_up/public/fonts/Estedad-v7.3/webfonts/variable/Estedad[KSHD,wght].woff2 b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/variable/Estedad[KSHD,wght].woff2 new file mode 100644 index 00000000..62aa8925 Binary files /dev/null and b/apps/level_up/public/fonts/Estedad-v7.3/webfonts/variable/Estedad[KSHD,wght].woff2 differ diff --git a/apps/level_up/public/fonts/IRANYekanX/fontiran.css b/apps/level_up/public/fonts/IRANYekanX/fontiran.css new file mode 100644 index 00000000..e03130dc --- /dev/null +++ b/apps/level_up/public/fonts/IRANYekanX/fontiran.css @@ -0,0 +1,87 @@ +@font-face { + font-family: 'IRANYekanX'; + font-style: normal; + font-weight: 100; + src: url('woff/IRANYekanX-Thin.woff') format('woff'), + url('woff2/IRANYekanX-Thin.woff2') format('woff2'); +} + +@font-face { + font-family: 'IRANYekanX'; + font-style: normal; + font-weight: 200; + src: url('woff/IRANYekanX-UltraLight.woff') format('woff'), + url('woff2/IRANYekanX-UltraLight.woff2') format('woff2'); +} + +@font-face { + font-family: 'IRANYekanX'; + font-style: normal; + font-weight: 300; + src: url('woff/IRANYekanX-Light.woff') format('woff'), + url('woff2/IRANYekanX-Light.woff2') format('woff2'); +} + +@font-face { + font-family: 'IRANYekanX'; + font-style: normal; + font-weight: 500; + src: url('woff/IRANYekanX-Medium.woff') format('woff'), + url('woff2/IRANYekanX-Medium.woff2') format('woff2'); +} + +@font-face { + font-family: 'IRANYekanX'; + font-style: normal; + font-weight: 600; + src: url('woff/IRANYekanX-DemiBold.woff') format('woff'), + url('woff2/IRANYekanX-DemiBold.woff2') format('woff2'); +} + +@font-face { + font-family: 'IRANYekanX'; + font-style: normal; + font-weight: 800; + src: url('woff/IRANYekanX-ExtraBold.woff') format('woff'), + url('woff2/IRANYekanX-ExtraBold.woff2') format('woff2'); +} + +@font-face { + font-family: 'IRANYekanX'; + font-style: normal; + font-weight: 900; + src: url('woff/IRANYekanX-Black.woff') format('woff'), + url('woff2/IRANYekanX-Black.woff2') format('woff2'); +} + +@font-face { + font-family: 'IRANYekanX'; + font-style: normal; + font-weight: 950; + src: url('woff/IRANYekanX-ExtraBlack.woff') format('woff'), + url('woff2/IRANYekanX-ExtraBlack.woff2') format('woff2'); +} + +@font-face { + font-family: 'IRANYekanX'; + font-style: normal; + font-weight: 1000; + src: url('woff/IRANYekanX-Heavy.woff') format('woff'), + url('woff2/IRANYekanX-Heavy.woff2') format('woff2'); +} + +@font-face { + font-family: 'IRANYekanX'; + font-style: normal; + font-weight: bold; + src: url('woff/IRANYekanX-Bold.woff') format('woff'), + url('woff2/IRANYekanX-Bold.woff2') format('woff2'); +} + +@font-face { + font-family: 'IRANYekanX'; + font-style: normal; + font-weight: normal; + src: url('woff/IRANYekanX-Regular.woff') format('woff'), + url('woff2/IRANYekanX-Regular.woff2') format('woff2'); +} diff --git a/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-Black.woff b/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-Black.woff new file mode 100644 index 00000000..595fa18e Binary files /dev/null and b/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-Black.woff differ diff --git a/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-Bold.woff b/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-Bold.woff new file mode 100644 index 00000000..c5f285fe Binary files /dev/null and b/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-Bold.woff differ diff --git a/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-DemiBold.woff b/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-DemiBold.woff new file mode 100644 index 00000000..9af6375a Binary files /dev/null and b/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-DemiBold.woff differ diff --git a/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-ExtraBlack.woff b/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-ExtraBlack.woff new file mode 100644 index 00000000..99cc6551 Binary files /dev/null and b/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-ExtraBlack.woff differ diff --git a/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-ExtraBold.woff b/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-ExtraBold.woff new file mode 100644 index 00000000..6087a521 Binary files /dev/null and b/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-ExtraBold.woff differ diff --git a/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-Heavy.woff b/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-Heavy.woff new file mode 100644 index 00000000..bdc053eb Binary files /dev/null and b/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-Heavy.woff differ diff --git a/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-Light.woff b/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-Light.woff new file mode 100644 index 00000000..0477cd5a Binary files /dev/null and b/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-Light.woff differ diff --git a/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-Medium.woff b/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-Medium.woff new file mode 100644 index 00000000..f8013a37 Binary files /dev/null and b/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-Medium.woff differ diff --git a/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-Regular.woff b/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-Regular.woff new file mode 100644 index 00000000..e3d92006 Binary files /dev/null and b/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-Regular.woff differ diff --git a/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-Thin.woff b/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-Thin.woff new file mode 100644 index 00000000..6041db14 Binary files /dev/null and b/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-Thin.woff differ diff --git a/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-UltraLight.woff b/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-UltraLight.woff new file mode 100644 index 00000000..c0433401 Binary files /dev/null and b/apps/level_up/public/fonts/IRANYekanX/woff/IRANYekanX-UltraLight.woff differ diff --git a/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-Black.woff2 b/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-Black.woff2 new file mode 100644 index 00000000..e67c520c Binary files /dev/null and b/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-Black.woff2 differ diff --git a/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-Bold.woff2 b/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-Bold.woff2 new file mode 100644 index 00000000..dd3fc162 Binary files /dev/null and b/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-Bold.woff2 differ diff --git a/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-DemiBold.woff2 b/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-DemiBold.woff2 new file mode 100644 index 00000000..f1f6750d Binary files /dev/null and b/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-DemiBold.woff2 differ diff --git a/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-ExtraBlack.woff2 b/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-ExtraBlack.woff2 new file mode 100644 index 00000000..03a06821 Binary files /dev/null and b/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-ExtraBlack.woff2 differ diff --git a/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-ExtraBold.woff2 b/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-ExtraBold.woff2 new file mode 100644 index 00000000..c041d78e Binary files /dev/null and b/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-ExtraBold.woff2 differ diff --git a/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-Heavy.woff2 b/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-Heavy.woff2 new file mode 100644 index 00000000..ea163079 Binary files /dev/null and b/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-Heavy.woff2 differ diff --git a/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-Light.woff2 b/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-Light.woff2 new file mode 100644 index 00000000..8d9534c1 Binary files /dev/null and b/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-Light.woff2 differ diff --git a/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-Medium.woff2 b/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-Medium.woff2 new file mode 100644 index 00000000..cdb4ce09 Binary files /dev/null and b/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-Medium.woff2 differ diff --git a/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-Regular.woff2 b/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-Regular.woff2 new file mode 100644 index 00000000..89ae517f Binary files /dev/null and b/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-Regular.woff2 differ diff --git a/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-Thin.woff2 b/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-Thin.woff2 new file mode 100644 index 00000000..c5a94098 Binary files /dev/null and b/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-Thin.woff2 differ diff --git a/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-UltraLight.woff2 b/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-UltraLight.woff2 new file mode 100644 index 00000000..cb42c164 Binary files /dev/null and b/apps/level_up/public/fonts/IRANYekanX/woff2/IRANYekanX-UltraLight.woff2 differ diff --git a/apps/level_up/public/fonts/SF_Pro_Rounded/SF-Pro-Rounded-Regular.ttf b/apps/level_up/public/fonts/SF_Pro_Rounded/SF-Pro-Rounded-Regular.ttf new file mode 100644 index 00000000..8514dfc7 Binary files /dev/null and b/apps/level_up/public/fonts/SF_Pro_Rounded/SF-Pro-Rounded-Regular.ttf differ diff --git a/apps/level_up/public/fonts/SF_Pro_Rounded/sfProRounded.css b/apps/level_up/public/fonts/SF_Pro_Rounded/sfProRounded.css new file mode 100644 index 00000000..39bd8ca3 --- /dev/null +++ b/apps/level_up/public/fonts/SF_Pro_Rounded/sfProRounded.css @@ -0,0 +1,6 @@ +@font-face { + font-family: 'SF-Pro-Rounded'; + font-style: normal; + font-weight: 100; + src: url('SF-Pro-Rounded-Regular.ttf') format('woff'); +} \ No newline at end of file diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/AUTHORS.txt b/apps/level_up/public/fonts/vazirmatn-v33.003/AUTHORS.txt new file mode 100644 index 00000000..6efd2e62 --- /dev/null +++ b/apps/level_up/public/fonts/vazirmatn-v33.003/AUTHORS.txt @@ -0,0 +1,9 @@ +# This is the official list of authors for copyright purposes. +# This file is distinct from the CONTRIBUTORS files. +# See the latter for an explanation. +# +# Names should be added to this file as: +# Name or Organization +# The email address is not required for organizations. + +Saber Rastikerdar \ No newline at end of file diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/CHANGELOG.md b/apps/level_up/public/fonts/vazirmatn-v33.003/CHANGELOG.md new file mode 100644 index 00000000..2523d7aa --- /dev/null +++ b/apps/level_up/public/fonts/vazirmatn-v33.003/CHANGELOG.md @@ -0,0 +1,1512 @@ +# Vazirmatn Changelog + +## 33.003 + +- Fixed wrong kerning for ژ ر with مـ تـ ثـ + +۱ تیر ۱۴۰۱ + +- اصلاح کرنینگ اشتباه ژ ر با مـ تـ ثـ + +## 33.002 + +- Added alternatives for یـ تـ پـ and related glyphs in connection with ـڕ‌ ـړ ـږ ـڵ ـڭ ـڬ ـݢ ـٹـ ـۏ ـه ـة (#273) +- Improved حـ ـحـ ـح ح ـڡـ ـڡ ـه ڪ ڡـ ڡ و ـو ٯ ـٯ +- Improved ۵ in Thick + +۳۱ خرداد ۱۴۰۱ + +- اضافه شدن جایگزین‌ها برای «یـ تـ پـ» و گلیف‌های مربوطه در اتصال با «ـڕ‌ ـړ ـږ ـڵ ـڭ ـڬ ـݢ ـٹـ ـۏ ـه ـة» (#273) +- بهبود حـ ـحـ ـح ح ـڡـ ـڡ ـه ڪ ڡـ ڡ و ـو ٯ ـٯ +- بهبود ۵ در ضخیم + +## 33.001 + +- Fixed wrong forms of letter ڽ (thanks @WanAhmadShahmi98) (#272) + +۲۰ خرداد ۱۴۰۱ + +- رفع ایراد فرم‌های حرف ڽ (با تشکر از @WanAhmadShahmi98) (#272) + +## 33.000 + +- Added Jawi letters (thanks @WanAhmadShahmi98) (#262) +- Added U+06C8 (ۈ) of Uyghur language (thanks @victorlee) (#270) +- Fixed wrong interpolation of endofproof (thanks @ErwinDenissen) (#259) +- Improved/Redesigned س سـ ـسـ ـس ٮ ٮـ ـٮـ ـٮ صـ ـصـ ی ـی ح ـح حـ ـحـ ک ع (#247) +- Fixed dots in ـثـ (#265) +- Fixed anchor location in عـ ع ـع ـعـ ـد (#263) +- Fixed ڪ ـﮫ ھے ـیے ـپے +- Improved kerning +- Improved thickness in Thin +- Improved/Fixed some other glyphs + +۲۰ خرداد ۱۴۰۱ + +- اضافه شدن حروف جاوی مربوط به زبان مالایی (با تشکر از @WanAhmadShahmi98) (#262) +- اضافه شدن گلیف U+06C8 (ۈ) از زبان اویغوری (با تشکر از @victorlee) (#270) +- رفع ایراد درون‌یابی endofproof (با تشکر از @ErwinDenissen) (#259) +- بهبود/بازطراحی س سـ ـسـ ـس ٮ ٮـ ـٮـ ـٮ صـ ـصـ ی ـی ح ـح حـ ـحـ ک ع (#247) +- اصلاح نقاط در ـثـ (#265) +- اصلاح مکان اعراب در عـ ع ـع ـعـ ـد (#263) +- اصلاح ڪ ـﮫ ھے ـیے ـپے +- بهبود کرنینگ +- بهبود ضخامت در نازک +- بهبود/اصلاح برخی دیگر از گلیف‌ها + +## 32.102 + +- Fixed bad rendering issue by removing the hinting totally +- Fixed dots in ثـ in Variable (thanks @alimanian) (#252) +- Improved ر ـر (#248) + +۱۳ فرورین ۱۴۰۱ + +- رفع نمایش خراب گلیف‌ها با حذف سراسری هینتینگ +- رفع مشکل نقطه‌ها در ثـ در وریبل (با تشکر از @alimanian) (#252) +- بهبود ر ـر (#248) + +## 32.101 + +- Fixed the lack of glyphs (ZWJ, ZWNJ) in the generated fonts (thanks @kokabi1365) #249 + +۲۹ اسفند ۱۴۰۰ + +- رفع نبود نیم‌فاصله در فونت‌های تولید شده (با تشکر از @kokabi1365) #249 + +## 32.1 + +- Fixed collapsing numbers issue by removing kerning for Persian/Arabic numbers #244 + +۲۲ اسفند ۱۴۰۰ + +- رفع مشکل در هم فرو روفتن اعداد با حذف کرنینگ اعداد فارسی/عربی #244 + +## 32.0.0 + +- Renamed from Vazir to Vazirmatn +- Increased the size of the glyphs (letters, signs and numbers) +- Redesigned thick versions and applied contrast +- Added Thin weight (recreating weights less than regular) +- Changed spacing for all glyphs (increasing in heavy weights and decreasing in light weights) +- Added Round-Dots version (Thanks @ghaznavipc) #127 +- Separated files by type (Thanks @xmha97) #190 +- Corrected the names of misc versions (Thanks @kokabi1365) #203 +- Fixed the problem of not showing dots in the UI version (Thanks @sepehr-brj) #194 +- Fixing Corning problem in Latin letters (Thanks @hamid0740) #218 +- Most letters shrinked +- Improved س ص ن ي ك (Thanks @ulaima) #226 +- Fixed height issue in the UI version (با تشکر از @ulaima) #227 +- Fix the problem of Hamza (Thanks @X7md) #229 +- Designed + - − ÷ × symbols according to the size of Persian/Arabic letters and numbers +- Resize "بـ یـ تـ پـ" and similar letters to fit next to other letters like "ـی ـق ـو ـر ..." +- Improved thickness +- Improved diacritics +- Redesigned Arabic numerals ٥ ٤ ٦ and 9 +- Redesigned ۴ in Heavy +- Redesigned ۲ ۳ ۷ ۸ ۵ +- Redesigned ی همزه ؟ ٌ ٚ ٛ +- Changed kerning and spacing in number and fixed the problem of number spacing in style-set ss01 +- Redesigned Quranic brackets +- Improved ـهـ ـلا لا ع عـ ـعـ ـع هـ ء ـه ك +- Corrected ﷼ +- Shortened ک گ +- Improved رزژـرـزـژ +- Improved . ! ؛ ، ٬ ۰ ممیز : « » +- Improved آ ص ط +- Improved the kerning of «آ ر ز ژ ـر ـز ـژ» with other letters +- Fixed technical problems in outputs by completely changing the way of combining with Latin and the way of producing outputs (scripts have been rewritten) +- Completion of Latin glyphs # 93 + +۱۷ اسفند ۱۴۰۰ + +- تغییر نام از وزیر به وزیرمتن +- بزرگتر شدن اندازه گلیف‌ها (حروف و علائم و ارقام) +- بازطراحی وزن‌‌های ضخیم و اعمال کنتراست +- اضافه شدن وزن‌ نازک (ساخت مجدد وزن‌های کمتر از معمولی) +- تغییر فاصله حروف (افزایش در ضخیم‌ها و کاهش در نازک‌ها) +- اضافه شدن نسخه نقطه‌گرد (با تشکر از @ghaznavipc) #127 +- تفکیک فایل‌ها بر اساس نوع (با تشکر از @xmha97) #190 +- اصلاح اسامی نسخه‌های متفرقه (با تشکر از @kokabi1365) #203 +- رفع مشکل عدم نمایش نقاط ي در نسخه یوآی (با تشکر از @sepehr-brj) #194 +- رفع ایراد کرنینگ در حروف لاتین (با تشکر از @hamid0740) #218 +- فشرده‌ شدن اغلب حروف +- بهبود س ص ن ي ك (با تشکر از @ulaima) #226 +- رفع ایراد ارتفاع در نسخه یوآی (با تشکر از @ulaima) #227 +- رفع ایراد همزه (با تشکر از @X7md) #229 +- طراحی علائم + - − ÷ × متناسب با اندازه حروف و ارقام فارسی (خط تیره و منها یک شکل شده‌اند) +- تغییر اندازه «بـ یـ تـ پـ» و حروف مشابه به تناسب در کنار سایر حروف از جمله «ـی ـق ـو ـر ...» +- بهبود ضخامت قلم +- بهبود اِعراب +- بازطراحی ارقام عربی ٥ ٤ ٦ و ۴ +- بازطراحی ۴ در ضخیم +- بازطراحی ارقام ۲ ۳ ۷ ۸ ۵ +- بازطراحی ی همزه ؟ ٌ ٚ ٛ +- تغییر کرنینگ ارقام و اصلاح عرض‌ها و رفع مشکل فاصله اعداد در استایل‌ست ss01 +- بازطراحی پرانتزهای قرآنی +- بهبود ـهـ ـلا لا ع عـ ـعـ ـع هـ ء ـه ك +- اصلاح ﷼ +- کوتاه‌تر شدن ک گ +- بهبود رزژـرـزـژ +- بهبود . ! ؛ ، ٬ ۰ ممیز : « » +- بهبود آ ص ط +- بهبود کرنینگ «آ ر ز ژ ـر ـز ـژ» با دیگر حروف +- رفع اشکالات فنی با تغییر کامل شیوه ترکیب با لاتین و نحوه تولید خروجی‌ها (اسکریپت ها بازنویسی شده‌اند) +- کامل شدن حروف لاتین #93 + + +## Old Vazir Changelog + +نسخه ۳۰.۱.۰ +----------- +۱ شهریور ۱۴۰۰ + +- بازطراحی لا ـلا +- بهبود ۴ ۶ ء +- اصلاح عرض غـ + + +نسخه ۳۰.۰.۰ +----------- +۱۳ مرداد ۱۴۰۰ + +- بازطراحی ـفـ ـقـ ـف +- بهبود ی م ـم ف فـ ق قـ +- بهبود ـی در ضخیم‌ها +- اضافه شدن کرنینگ «ـا آ ا» با «ع غ» +- اضافه شدن کرنینگ «د ـد ذ ـذ ـی» با «ک گ کـ گـ» #211 +- اضافه شدن ss01 Style Set برای جایگزینی ارقام لاتین با فارسی (با تشکر از @EhsanCh) #198 +- اضافه شدن tnum برای نمایش ارقام به صورت هم‌عرض یا با عرض یکسان (با تشکر از @EhsanCh) #198 + + +نسخه ۲۹.۱.۰ +----------- +۴ تیر ۱۴۰۰ + +- افزایش طول کشیده (با تشکر از @imiimiimi) #153 +- اضافه شدن گلیف uni25cc ◌ (با تشکر از @adamiturabi) #200 +- اصلاح خط زیر (با تشکر از @Farshidmi) #205 +- بهبود ی ـعـ ـع ٤ ٥ ٦ +- اضافه شدن کرنینگ ٦ و ٥ ٨ + + +نسخه ۲۹.۰.۲ +----------- +۲۶ خرداد ۱۴۰۰ + +- اصلاح کرنینگ «لا ـلا» و «ع غ» (با تشکر از @rasa-app) #82 +- بهبود مد + + +نسخه ۲۹.۰.۱ +----------- +۲۰ خرداد ۱۴۰۰ + +- رفع ایراد عـ ع + + +نسخه ۲۹.۰.۰ +----------- +۲۰ خرداد ۱۴۰۰ + +- افزایش فاصله بین واژه‌ها +- بهبود ه لـ ـلـ +- بهبود مد آ +- بهبود نقاط ز ـز ژ ـژ خـ ـخـ خ ـخ +- بهبود اِعراب م ـم يـ بـ + + +نسخه ۲۸.۰.۰ +----------- +۱۸ فروردین ۱۴۰۰ + +- کاهش فاصله بین واژه‌ها + + +نسخه ۲۷.۲.۲ +----------- +۲۵ بهمن ۱۳۹۹ + +- اصلاح انحنای ۶ ۴ ۳ در حالتهای ضخیم +- اصلاح ضخامت ـد + + +نسخه ۲۷.۲.۱ +----------- +۱۶ بهمن ۱۳۹۹ + +- بهبود ـعـ ـع + + +نسخه ۲۷.۲.۰ +----------- +۲۵ دی ۱۳۹۹ + +- بهبود ز ـز کـ ـکـ ـک ک +- افزایش ضخامت نقاط در وزن‌های بالا + + +نسخه ۲۷.۱.۰ +----------- +۲۲ آذر ۱۳۹۹ + +- کاهش ارتفاع متریک قلم (فاصله بین خطوط) (با تشکر از @Mohammad-777) +- رفع ایراد اعراب ٯ ٮ (با تشکر از @dscorbett) #178 +- رفع ایراد ﮿ ﯀ (با تشکر از @dscorbett) #179 +- بهبود ـعـ ـع + + +نسخه ۲۷.۰.۳ +----------- +۹ آذر ۱۳۹۹ + +- افزایش هینتینگ برای نمایش بهتر در سیستم‌عامل ویندوز +- رفع ایراد نامگذاری فونت‌ها (با تشکر از @Ariodaad) #177 + + +نسخه ۲۷.۰.۲ +----------- +۵ آذر ۱۳۹۹ + +- رفع ایراد چاپ ـيـ يـ عربی و ارقام در نسخه «تمام ارقام فارسی» در برخی چاپگرها (با تشکر از @Ariodaad) #176 +- بهبود ـعـ +- بهبود همزه در خروجی + + +نسخه ۲۷.۰.۱ +----------- +۲ آذر ۱۳۹۹ + +- حذف گلیف رزرو شده U+FE75 (با تشکر از @dscorbett) #175 + + +نسخه ۲۷.۰.۰ +----------- +۲ آذر ۱۳۹۹ + +- بازنگری در طراحی «ر» و کرنینگ آن +- بازنگری در طراحی «ـعـ ـع» +- افزایش ارتفاع متریک قلم از بالا و پایین +- کاهش فاصله بین کلمات +- افزایش ارتفاغ گلیف‌های عمودی در تمام وزن‌ها به غیر از معمولی +- بهبود نقطه‌ها (متوسط، ضخیم، سیاه) +- بهبود و اصلاحات در حروف از جمله آ لا ـلا ص ـص س ـس عـ ع ک ـک کـ ـکـ ف فـ ـفـ ق ـق و ی ـی م ـم ء ۹ ۶ +- بهبود مـ ـمـ ـم م فـ ف در سیاه +- اصلاح ھ جدا +- بازسازی وزن نازک و سیاه و اصلاح محل اعراب +- بهبود شکل اعراب +- اصلاح فیلد Manufacturer (با تشکر از @xmha97) #154 +- اضافه شدن تمامی حالات حروف «ؽ ݣ ۉ» از زبان ترکی #155 +- اصلاح ارجاع‌ها و رفع ایراد جابجایی یا چاپ نشدن برخی حروف و علائم (با تشکر از @Ariodaad) #158 +- اصلاح ضخامت مد، همزه، یای کوتاه و اعراب و تبدیل rlig به ccmp (باتشکر از @aminabedi68) #160 +- اضافه شدن حرف ڪ (با تشکر از HosseinborAhmad) #161 +- اضافه شدن حرف ۉ از زبان ازبکی (با تشکر از @vaheedxp) #162 +- اضافه شدن تمامی حالات حروف «ۋ ڭ ﯗ ﯙ» از زبان قزاقی Kazakh (با تشکر از @MuratKaribay) #164 +- اضافه شدن «ںـ ـںـ ٮـ ـٮـ ٯـ ـٯـ» (با تشکر از @dscorbett) #169 +- حذف کرنینگ «ر ز ژ» با «فاصله» به دلیل مشکل نمایش در مرورگر کروم (با تشکر از @mojtabamoradi) #172 +- اضافه شدن نسخه UI (با ارتفاع متریک کمتر) +- اضافه شدن لایسنس (مجوز) OFL به فونت #173 +- تغییر محتوای اطلاعاتی فونت +- و برخی اصلاحات فنی + + +نسخه ۲۶.۰.۲ +----------- +۲۷ اردیبهشت ۱۳۹۹ + +- اصلاح ضخامت مد الف در سبک + + +نسخه ۲۶.۰.۱ +----------- +۲۵ اردیبهشت ۱۳۹۹ + +- رفع ایراد ـے همزه دار در اردو + + +نسخه ۲۶.۰.۰ +----------- +۲۴ اردیبهشت ۱۳۹۹ + +- اضافه شدن زبان‌های پشتو و اردو +- اضافه شدن گلیف‌های جدید از ایشو #143 بخش دوم (با تشکر از @farshadrasuli) +- اصلاح عدد ۴ +- بهبود نقاط در ضخیم و متوسط +- رفع ایراد ایشو #140 و اضافه شدن لیگچرهای لام و الف صامت +- اصلاح همزه ٦ ، +- بهبود گیومه (با تشکر از @neesti) + + +نسخه ۲۵.۰.۰ +----------- +۱۰ اردیبهشت ۱۳۹۹ + +- تغییر جداول کرنینگ برای رفع ایراد نمایش کرنینگ در برخی نرم‌افزارها از جمله Adobe XD +- اضافه شدن 13 گلیف‌ جدید از ایشو #143 بخش نخست (با تشکر از @farshadrasuli) +- اضافه شدن کرنینگ «ر ز ژ ـر ـز ـژ» با گلیف فاصله (با تشکر از @saeidka) +- حذف و اضافه شدن برخی گلیف‌های لاتین از قلم روبوتو + + +نسخه ۲۴.۲.۰ +----------- +۲۹ فروردین ۱۳۹۹ + +- افزایش فاصله بین کلمات + + +نسخه ۲۴.۱.۰ +----------- +۵ فروردین ۱۳۹۹ + +- بهبود ی م ـم + + +نسخه ۲۴.۰.۰ +----------- +۲۳ اسفند ۱۳۹۸ + +- اصلاح ی ـو ـق ـا +- افزایش ناحیه اتصال «یـ پـ ـیـ ـپـ بـ ـبـ» با «ـو ـق» +- کاهش فاصله بین کلمات + + +نسخه ۲۳.۰.۰ +----------- +۶ اسفند ۱۳۹۸ + +- بازطراحی ی +- اصلاح عرض آ و کرنینگ آن با سایر حروف +- بهبود عرض ـن ـد +- بهبود ه هـ حـ ـحـ ـد ك آ +- اصلاح ایرادات همپوشانی در سبک و نازک +- کاهش ارتفاع گلیف‌های عمودی +- اصلاح ۷ ۸ در سبک + + +نسخه ۲۲.۱.۰ +----------- +۲۸ بهمن ۱۳۹۸ + +- افزایش عرض ـی ـب ب ف ک ـگ + + +نسخه ۲۲.۰.۰ +----------- +۹ بهمن ۱۳۹۸ + +- تغییر عرض ـیـ ـتـ ـپـ ـبـ ـنـ مـ ـمـ ـئـ + + +نسخه ۲۱.۲.۱ +----------- +۴ دی ۱۳۹۸ + +- بهبود ی +- اصلاح آدرس لایسنس + + +نسخه ۲۱.۲.۰ +----------- +۶ آذر ۱۳۹۸ + +- بهبود نقاط پایین خط کرسی +- بهبود ـی (با تشکر از @PAPIONbit) +- بهبود عرض ـهـ + + +نسخه ۲۱.۱.۲ +----------- +۲۵ آبان ۱۳۹۸ + +- اصلاح اعراب ـی +- اصلاح جداول GPOS + + +نسخه ۲۱.۱.۱ +----------- +۹ آبان ۱۳۹۸ + +- رفع ایراد هـ در معمولی و سبک +- اصلاح ۰ + + +نسخه ۲۱.۱.۰ +----------- +۱۶ مهر ۱۳۹۸ + +- رفع ایراد اعراب س ـس سـ ـسـ +- اصلاح ـی ـي ـئ +- اصلاح ؟ در وزن سبک +- اصلاح ـنـ در وزن نازک +- اصلاح عرض ۳ + + +نسخه ۲۱.۰.۱ +----------- +۸ شهریور ۱۳۹۸ + +- بهبود سه نقطه + + +نسخه ۲۱.۰.۰ +----------- +۷ شهریور ۱۳۹۸ + +- بازسازی کل فونت به صورت cubic، اصلاح نقاط، اصلاح اسامی و رند شدن اندازه‌ها ایشو #123 (با تشکر از @aminabedi68) +- کاهش جزئی ضخامت قلم +- بهبود و باز طراحی ارقام +- کاهش عرض ـی ـعـ به روش کالت (با تشکر از @aminabedi68) +- بهبود حـ ـحـ ـفـ ـف ف فـ ف ق ح ـح ع ـهـ ـی ر ـر و ـو ﻙ ـﻙ هـ ـه +- بهبود مکان و کاهش ضخامت نقاط +- افزایش عرض پـ یـ ثـ ـپـ ـيـ ـثـ +- کاهش عرض ت ـت ف لـ ـلـ +- بهبود دندانه‌ها +- اضافه شدن کرنینگ «لا ـلا» با ع غ +- اصلاح مکان تمام اِعراب +- رفع مشکل همپوشانی اِعراب ایشو #103 (با تشکر از @ali-hardan) +- بازطراحی ٬ +- بهبود علائم + + +نسخه ۲۰.۱.۱ +----------- +۲۱ مرداد ۱۳۹۸ + +- افزایش جزئی فاصله ارقام +- اصلاح نام بولد +- اصلاح ناحیه همپوشانی ـفـ + + +نسخه ۲۰.۱.۰ +----------- +۷ خرداد ۱۳۹۸ + +- بهبود شکل و کرنینگ ارقام +- اصلاح ٫ + + +نسخه ۲۰.۰.۰ +----------- +۴ خرداد ۱۳۹۸ + +- بازطراحی هـ ؟ +- بهبود ـی ی ـه ـعـ ۰ ۶ +- تنظیم مجدد ناحیه همپوشانی در تمامی حالت‌ها +- بهبود ارتفاع +- اصلاح کرنینگ هٔ با رزژ +- اصلاح اندازه حالات سبک و متوسط در لاتین + + +نسخه ۱۹.۲.۰ +----------- +۵ اسفند ۱۳۹۷ + +- بهبود م ـم +- بهبود شکل و اندازه و مکان اعراب + + +نسخه ۱۹.۱.۰ +----------- +۱۸ دی ۱۳۹۷ + +- بهبود هـ ن +- رفع ایراد ریال +- اصلاح حفره‌ها در سیاه +- اصلاح اعراب پـ ـپـ +- اصلاح ـا در سیاه + + +نسخه ۱۹.۰.۰ +----------- +۱۱ مرداد ۱۳۹۷ + +- اضافه شدن وزن سنگین +- اضافه شدن حروف کوردی (با تشکر از dolanskurd-Dolan Hêriş) +- بهبود ۰ ۲ ۳ ۴ ۶ ۹ م ـم +- اصلاح ـر در نسخه سبک +- بهبود نقاط ت ث +- بهبود ـهـ در ضخیم و متوسط +- اصلاح نقطه ج ـج در متوسط +- اصلاح کرنینگ آ کـ +- بهبود تک نقطه در ضخیم + + +نسخه ۱۸.۰.۱ +----------- +۲۳ فروردین ۱۳۹۷ + +- اصلاح ۳ +- بهبود ـع ـعـ + + +نسخه ۱۸.۰.۰ +----------- +۲۴ بهمن ۱۳۹۶ + +- بهبود ر و ـر ـر ی ـی د ـد ـهـ +- بهبود دندانه‌های س +- بهبود اندازه نـ بـ ـنـ ـبـ ـب ب ف ـف ک ـک ئـ ـئـ +- بهبود نقاط +- بهبود ارقام +- اضافه شدن کرنینگ ارقام + + +نسخه ۱۷.۲.۰ +----------- +۲۳ بهمن ۱۳۹۶ + +- بهبود قوس و اندازه حروف س ص ی ن ق + + +نسخه ۱۷.۱.۱ +----------- +۲۰ دی ۱۳۹۶ + +- اصلاح جزئی ضخمات ص ط + + +نسخه ۱۷.۱.۰ +----------- +۲۰ دی ۱۳۹۶ + +- اصلاح عرض ـا ا ی و ـو مـ عـ ـه +- اصلاح ـمـ ـم س ه + + +نسخه ۱۷.۰.۰ +----------- +۱۸ دی ۱۳۹۶ + +- بهبود ارتفاع گلیف‌ها و متریک فونت +- بهبود ص ط ی ـی +- اضافه شدن جدا کننده تاریخ عربی +- اصلاح عرض تـ ثـ + + +نسخه ۱۶.۱.۰ +----------- +۲۰ مهر ۱۳۹۶ + +- رفع اشکال سرکش گاف +- بهبود ی ـی ه +- بهبود همزه روی حروف +- کاهش ارتفاغ گیومه +- بهبود هـ در حالت ضخیم +- بهبود نقاط در حالت ضخیم +- بهبود نقاط ژ ز + + +نسخه ۱۶.۰.۱ +----------- +۱۵ مهر ۱۳۹۶ + +- رفع اشکال س + + +نسخه ۱۶.۰.۰ +----------- +۱۵ مهر ۱۳۹۶ + +- بهبود کل اعراب +- اصلاح ضخامت کـ ـکـ +- بهبود متیرک‌های فونت +- بهبود ؟ ! ا ـه ص ط ء و همزه روی حروف +- بهبود ارتفاع و ناحیه همپوشانی + + +نسخه ۱۵.۱.۰ +----------- +۲ مهر ۱۳۹۶ + +- بهبود ۹ ۵ ـد کـ ـکـ +- اصلاح اعراب کـ ـکـ + + +نسخه ۱۵.۰.۰ +----------- +۹ شهریور ۱۳۹۶ + +- بهبود ضخامت +- بهبود ر و ی +- بهبود ارتفاع + + +نسخه ۱۴.۰.۰ +----------- +۳۱ مرداد ۱۳۹۶ + +- بهبود حروف و ارقام +- اصلاح مشخصات فونت‌های تفکیک شده بدون لاتین و حروف فارسی (با تشکر از @morealaz) + + +نسخه ۱۳.۰.۱ +----------- +۱۵ تیر ۱۳۹۶ + +- اصلاح ایراد ـآ ـأ +- اصلاح نقاط ـه ه نقطه‌دار +- اصلاح اعراب إ ـإ + + +نسخه ۱۳.۰.۰ +----------- +۱۵ تیر ۱۳۹۶ + +- بهبود دندانه‌های وسط و انتها +- اصلاح فـ +- بهبود فاصله بین واژه‌ای +- بهبود ضخامت ح ـح ع ـع + + +نسخه ۱۲.۰.۰ +----------- +۱۰ تیر ۱۳۹۶ + +- بهبود حروف کشیده +- بهبود م ی ط ف +- بهبود ـو ـق +- تصحیح لیگچر الله +- بهبود مکان نقاط + + +نسخه ۱۱.۰.۱ +----------- +۲۵ خرداد ۱۳۹۶ + +- اصلاح نام قلم در حالت نازک برای محیط دسکتاپ (با تشکر از @Javid-Izadfar) + + +نسخه ۱۱.۰.۰ +----------- +۱۸ خرداد ۱۳۹۶ + +- بهبود سـ ـسـ ـا ـی ی ـعـ +- بهبود حالات م ک +- اصلاح عرض ف +- اضافه شدن نسخه باریک + + +نسخه ۱۰.۰.۱ +----------- +۱۵ خرداد ۱۳۹۶ + +- رفع ایراد عرض ـفـ ـقـ +- اصلاح ضخامت مد در حالت نازک +- رفع ایراد هینتینگ در woff و eot + + +نسخه ۱۰.۰.۰ +----------- +۶ خرداد ۱۳۹۶ + +- بهبود و بازطراحی در گلیف‌ها +- اضافه شدن نسخه وزن متوسط +- اضافه شدن نسخه woff2 + + +نسخه ۱۰.۰.۰-بتا +--------------- +۹ فروردین ۱۳۹۶ + +- اصلاح ضخامت خط کرسی در گلیف‌ها (برابر شدن) +- بهبود هـ در ضخیم +- بهبود عرض ۹ + + +نسخه ۱۰.۰.۰-آلفا +---------------- +۸ فروردین ۱۳۹۶ + +- تجدید نظر در سایز قلم +- برابر شدن سایز وزن‌ها +- کاهش فاصله بین کلمات +- بهبود ارقام +- بهبود حروف و علائم + + +نسخه ۹.۰.۰-بتا +-------------- +۳۰ اسفند ۱۳۹۵ + +- کاهش فاصله بین کلمات +- بازطراحی گیومه +- بهبود فاصله طولی مـ ـه + + +نسخه ۹.۰.۰-آلفا +--------------- +۲۵ اسفند ۱۳۹۵ + +- تجدید نظر در ضخامت و اندازه قلم +- اصلاح و بهبود گلیف‌ها + + +نسخه ۸.۲.۱ +---------- +۱۶ اسفند ۱۳۹۵ + +- اصلاح هـ عـ +- اصلاح ط در ضخیم + + +نسخه ۸.۲.۰ +---------- +۱۵ اسفند ۱۳۹۵ + +- بهبود ـعـ +- اصلاح اعراب +- اصلاح نقاط +- اصلاح س + + +نسخه ۸.۱.۰ +---------- +۱۳ اسفند ۱۳۹۵ + +- بهبود حالات خ +- بهبود ارتفاع گلیف‌های عمودی +- بهبود نقطه ذ ـذ +- بهبود ارتفاع م ـم +- اصلاح ! در ضخیم + + +نسخه ۸.۰.۰ +---------- +۱۲ اسفند ۱۳۹۵ + +- بهبود قوس‌ها، اندازه‌ها، طول‌ها، شکل‌ها و فاصله‌ها +- رفع مشکل ـن (با تشکر از @Masishta) + + +نسخه ۷.۱.۰ +---------- +۷ اسفند ۱۳۹۵ + +- اصلاح و بهبود د ـد ر ـر ـن مـ ـمـ ـفـ ـف هـ ـق ـو ّ ـت ف حـ ـحـ + + +نسخه ۷.۰.۰ +---------- +۷ بهمن ۱۳۹۵ + +- افزایش سایز قلم جهت هماهنگی با سایر قلم های رایج +- بهبود برخی گلیف ها و ارتفاع +- اصلاح متریک‌ها + + +نسخه ۶.۳.۴ +---------- +۳ مهر ۱۳۹۵ + +- رفع ایراد زاویه سرکش گ +- بهبود اتصال از راست ـط ـص +- رفع ایراد X-Height + + +نسخه ۶.۳.۳ +---------- +۲۳ آذر ۱۳۹۵ + +- رفع ایراد ضخامت کرسی ـح حـ ـحـ +- رفع ایراد جهت در ضخیم + + +نسخه ۶.۳.۲ +---------- +۱۶ آذر ۱۳۹۵ + +- رفع ایراد هم‌خانواده نبودن نسخه‌های قلم + + +نسخه ۶.۳.۱ +---------- +۱۵ آذر ۱۳۹۵ + +- اصلاح حالات ک در ضخیم +- بهبود جزئی ـه + + +نسخه ۶.۳.۰ +---------- +۱۵ آذر ۱۳۹۵ + +- بهبود ارتفاع +- بهبود حـ ـحـ +- اصلاح دندانه صـ ـصـ +- بهبود ؟ +- افزایش فاصله نقاط در ضخیم + + +نسخه ۶.۲.۰ +---------- +۱۲ آذر ۱۳۹۵ + +- بهبود ضخامت گلیف های عمودی +- بهبود ارقام + + +نسخه ۶.۱.۰ +---------- +۱۱ آذر ۱۳۹۵ + +- رفع اشکال ـت در ضخیم +- بهبود ق +- بهبود مکان نقاط + + +نسخه ۶.۰.۰ +---------- +۱۰ آذر ۱۳۹۵ + +- بهبود قوس‌ها و دندانه‌ها و اندازه‌ها و زوایا +- بهبود شکل حروف +- اصلاح همزه بر روی ه +- افزایش فاصله بین واژه‌ای + + +نسخه ۵.۱.۱ +---------- +۱ آذر ۱۳۹۵ + +- بهبود عرض در ـسـ سـ ـس ـعـ + + +نسخه ۵.۱.۰ +---------- +۱ آذر ۱۳۹۵ + +- بهبود ح ـح حـ ـحـ ـع ع ل ـل ی ـی ن ـن س ـس ص ـص ـهـ هـ ء +- بهبود و اصلاح ارقام +- بازگشت ـه از نسخه چهار + + +نسخه ۵.۰.۰ +---------- +۳۰ آبان ۱۳۹۵ + +- بازطراحی برخی گلیف ها برای بازگشت به تایپ فیس وزیر یک +- بهبود برخی گلیف ها (با تشکر از محمد) +- اصلاح متریک در نسخه ضخیم +- ایجاد دوباره نسخه ضخیم و سبک +- اصلح ارقام ۴ ۵ ۶ در نسخه تمام ارقام فارسی + + +نسخه ۴.۴.۱ +---------- +۷ آبان ۱۳۹۵ + +- بهبود فـ ف ق ـو و مـ ـمـ + + +نسخه ۴.۴.۰ +---------- +۲۹ مهر ۱۳۹۵ + +- بهبود ارتفاع و فاصله و برخی نقاط +- تصحیح صفر در ضخیم + + +نسخه ۴.۳.۱ +---------- +۲۵ مهر ۱۳۹۵ + +- بهبود دندانه ها + + +نسخه ۴.۳.۰ +---------- +۲۵ مهر ۱۳۹۵ + +- افزایش عرض مـ ـمـ لـ ـلـ ـی +- بهبود ۹ فـ و ـفـ + + +نسخه ۴.۲.۱ +---------- +۲۴ مهر ۱۳۹۵ + +- بهبود و در ضخیم +- اصلاح ـقـ ٫ +- اضافه شدن گلیف ریال +- تصحیح جهت + + +نسخه ۴.۲ +-------- +۲۳ مهر ۱۳۹۵ + +- بهبود ضخامت در حالت توپر +- بهبود دندانه ها و ارتفاع + + +نسخه ۴.۱.۲ +---------- +۶ مهر ۱۳۹۵ + +- بهبود مـ ـه +- اصلاح charset + + +نسخه ۴.۱.۱ +---------- +۱۹ شهریور ۱۳۹۵ + +- بهبود بسیار جزيی قوس س ص ن +- اصلاح دندانه صـ ـسـ +- بهبود ـم + + +نسخه ۴.۱.۰ +---------- +۷ شهریور ۱۳۹۵ + +- افزایش نواحی همپوشانی +- کوچکتر شدن خط فاصله (تطویل) + + +نسخه ۴.۰.۱ +---------- +۲۲ مرداد ۱۳۹۵ + +- اصلاح ۶ +- بهبود ح و دندانه های س در حالت ضخیم + + +نسخه ۴.۰.۰ +---------- +۲۱ مرداد ۱۳۹۵ + +- باز طراحی و بهبود فونت +- اضافه شدن حروف لاتین فونت روبوتو به قلم + + +نسخه ۳.۱.۰ +---------- +۴ تیر ۱۳۹۵ + +- افزایش طولی فونت در برخی گلیف ها + + +نسخه ۳.۰.۱ +---------- +۲۹ خرداد ۱۳۹۵ + +- اضافه شدن cdn + + +نسخه ۳ +------ +۲۸ خرداد ۱۳۹۵ + +- بهبود بسیاری از گلیف ها +- بهبود فاصله +- اضافه شدن وزن های نازک و متوسط +- اضافه شدن گلیف های الله و ریال +- حذف داده های اضافی و کاهش حجم فایل + + +نسخه ۲ +------ +۱۲ اردیبهشت ۱۳۹۵ + +- بهبود حالات س +- بهبود بـ +- پشتیبانی از bower با (تشکر از Nasser Rafie-geminorum) + + +نسخه ۲-کاندیدای انتشار ۱۳ +------------------------- +۲ اردیبهشت ۱۳۹۵ + +- بهبود دندانه ها +- بهبود ضخامت ها +- بهبود فاصله در حالت توپر + + +نسخه ۲-کاندیدای انتشار ۱۲ +------------------------- +۲۸ فروردین ۱۳۹۵ + +- بهبود ه و ـو ف فـ ـق ق ـد ر ـر +- بهبود ارتفاع گلیف های عمودی و نقاط +- اصلاح ؟ ! در حالت ضخیم + + +نسخه ۲-کاندیدای انتشار ۱۱ +------------------------- +۲۳ فروردین ۱۳۹۵ + +- بهبود حالات ح ع +- بهبود نقاط +- اصلاح متریک های فونت +- بهبود م + + +نسخه ۲-کاندیدای انتشار ۱۰ +------------------------- +۲۰ فروردین ۱۳۹۵ + +- بهبود تک نقطه + + +نسخه ۲-کاندیدای انتشار ۹ +------------------------ +۱۸ فروردین ۱۳۹۵ + +- بهبود ٪ +- اصلاح کد پیج فونت (با تشکر از Saleh Souzanchi-zoghal و Saeed Rasooli-ilius) + + +نسخه ۲-کاندیدای انتشار ۸ +------------------------ +۱۳ فروردین ۱۳۹۵ + +- بهبود مـ ـمـ ی هـ ـه ـت +- بهبود همزه (با تشکر از amin3d) +- بهبود تک نقطه (با تشکر از Saleh Souzanchi-zoghal) +- تصحیح ایراد فایل eot (با تشکر از Alireza Dabiri Nejad-alirdn) + + +نسخه ۲-کاندیدای انتشار ۷ +------------------------ +۲۶ اسفند ۱۳۹۴ + +- بهبود فاصله ها + + +نسخه ۲-کاندیدای انتشار ۶ +------------------------ +۲۵ اسفند ۱۳۹۴ + +- بهبود کرنینگ + + +نسخه ۲-کاندیدای انتشار ۵ +------------------------ +۲۲ اسفند ۱۳۹۴ + +- تصحیح نقاط ـت ـث +- بهبود م +- تصحیح ص + + +نسخه ۲-کاندیدای انتشار ۴ +------------------------ +۲۱ اسفند ۱۳۹۴ + +- بازنگری کلی در حالت ضخیم +- بهبود م + + +نسخه ۲-کاندیدای انتشار ۳ +------------------------ +۲۱ اسفند ۱۳۹۴ + +- بهبود هـ ـمـ مـ م ر ـر و ـو لا ـلا ـن ن ـق ق +- بهبود حالات ط ص س + + +نسخه ۲-کاندیدای انتشار ۲ +------------------------ +۲۰ اسفند ۱۳۹۴ + +- بهبود هـ +- بهبود ـم در حالت ضخیم + + +نسخه ۲-کاندیدای انتشار ۱ +------------------------ +۱۷ اسفند ۱۳۹۴ + +- بهبود نقاط +- اصلاح ق ـق ـع +- بهبود سرکش گاف در حالت ضخیم +- اضافه شدن گلیف های ه همزه دار +- اصلاح برخی اعراب + + +نسخه ۲-کاندیدای انتشار ۰ +------------------------ +۱۶ اسفند ۱۳۹۴ + +- بزرگتر شدن کل فونت + + +نسخه ۲-بتا-رفع اشکال ۵ +---------------------- +۱۵ اسفند ۱۳۹۴ + +- بهبود هـ ـم +- بهبود نقاط +- بهبود نقطه در حالات خ +- تصحیح ـفـ ـقـ +- بهبود نقاط ـچ در حالت ضخیم + + +نسخه ۲-بتا-رفع اشکال ۴ +---------------------- +۱۳ اسفند ۱۳۹۴ + +- بهبود مـ ـمـ م سـ ـسـ هـ ـهـ و حالات ص + + +نسخه ۲-بتا-رفع اشکال ۳ +---------------------- +۱۱ اسفند ۱۳۹۴ + +- تغییر شکل ـم و بهبود مـ ـمـ م ۶ همزه +- تصحیح ـف در حالت ضخیم + + +نسخه ۲-بتا-رفع اشکال ۲ +---------------------- +۸ اسفند ۱۳۹۴ + +- بهبود ح ـح حـ ـحـ بـ سـ س ق ن ـع ع ۷ ۸ +- بهبود نقطه ها + + +نسخه ۲-بتا-رفع اشکال ۱ +---------------------- +۱۵ بهمن ۱۳۹۴ + +- اصلاح لا ـلا ی خ هـ طـ ـطـ ـق س ـسـ ـس سـ مـ ـمـ ـم طـ ـطـ +- اصلاح مد +- بازنگری در کرنینگ ارقام + + +نسخه ۲-بتا-رفع اشکال ۰ +---------------------- +۱۲ دی ۱۳۹۴ + +- تصحیح اعراب +- تصحیح کرنینگ +- تصحیح گلیف ها و اندازه ها + + +نسخه ۲-بتا +---------- +۱۱ دی ۱۳۹۴ + +- تغییر کل سایز قلم +- تغییر فاصله +- تنظیم مجدد سایز ضخیم +- تصحیح برخی گلیف‌ها + +نسخه ۲-آلفا +----------- +۲۹ آذر ۱۳۹۴ + +- تغییرات و باز طراحی گسترده در گلیف‌ها + + +نسخه ۱.۱۲.۱ +----------- +۲۰ آذر ۱۳۹۴ + +- اصلاح اندازه ج +- اصلاح سایز گلیف های علائم و ارقام در ضخیم +- حذف ارقام لاتین +- اصلاح د س ـسـ +- اصلاحات جزئی در شکل گلیف ها + +نسخه ۱.۱۲ +--------- +۲۰ آذر ۱۳۹۴ + +- اصلاحات زیاد بر روی گلیف ها و کرنینگ + +نسخه ۱.۱۱ +--------- +۱۸ آذر ۱۳۹۴ + +- اصلاحات در فاصله ها +- بهبود ح ـح ـع ع ـک‌ ـکـ ف ق ۵ + + +نسخه ۱.۱۰.۸ +----------- +۸ آذر ۱۳۹۴ + +- اصلاحاتی بر روی علائم و اندازه ها +- اصلاح همزه + + +نسخه ۱.۱۰.۷ +----------- +۲۴ آبان ۱۳۹۴ + +- بهبود ـم + +نسخه ۱.۱۰.۶ +----------- +۲۱ آبان ۱۳۹۴ + +- اصلاح گلیف های ـک ـکـ + +نسخه ۱.۱۰.۵ +----------- +۱۷ آبان ۱۳۹۴ + +- حذف عبارت کپی رایت اضافی + +نسخه ۱.۱۰.۴ +----------- +۱۵ آبان ۱۳۹۴ + +- اصلاح مکان نقطه های پ چ + +نسخه ۱.۱۰.۳ +----------- +۱۵ آبان ۱۳۹۴ + +- اصلاح دو نقطه و سه نقطه (نزدیکتر شدن به هم) +- اصلاح ـم + +نسخه ۱.۱۰.۲ +----------- +۱۳ آبان ۱۳۹۴ + +- اصلاح ـم + +نسخه ۱.۱۰.۱ +----------- +۱۳ آبان ۱۳۹۴ + +- اصلاح گلیف ۶ +- اصلاح اعراب + +نسخه ۱.۱۰ +--------- +۱۳ آبان ۱۳۹۴ + +-باز طراحی حرف ـم +- اضافه شدن داده های هینتینگ با استفاده از نرم افزار ttfautohint (با تشکر از Salar Khalilzadeh-salarcode) + +نسخه ۱.۹.۵ +---------- +۸ آبان ۱۳۹۴ + +- تصحیح حرف ی برای رندر بهتر در فایرفاکس + +نسخه ۱.۹.۴ +---------- +۸ آبان ۱۳۹۴ + +- ضخیم تر شدن حرف ی به مقدار کم + +نسخه ۱.۹.۳ +---------- +۷ آبان ۱۳۹۴ + +- باز طراحی حرف ی + +نسخه ۱.۹.۲ +---------- +۷ آبان ۱۳۹۴ + +- تصحیح اعراب برخی حروف +- تصحیح نقطه حرف ی عربی + +نسخه ۱.۹.۱ +---------- +۷ آبان ۱۳۹۴ + +- اصلاحات مجدد در اندازه های فونت + +نسخه ۱.۹ +-------- +۷ آبان ۱۳۹۴ + +- اصلاحات کلیدی و مهم در اندازه های فونت (با تشکر از A_O) + +نسخه ۱.۸.۶ +---------- +۶ آبان ۱۳۹۴ + +- تصحیح مکان نقطه های سه تایی +- تصحیح جهت حرف حـ + +نسخه ۱.۸.۵ +---------- +۵ آبان ۱۳۹۴ + +- تصحیح مکان نقاط برخی حروف + +نسخه ۱.۸.۴ +---------- +۵ آبان ۱۳۹۴ + +- تصحیح شکل عدد ۳ +- حذف برخی ردیف های lookup اضافه + +نسخه ۱.۸.۳ +---------- +۴ آبان ۱۳۹۴ + +- تصحیح مشکل در هم رفتگی حروف متصل در حالت ضخیم + +نسخه ۱.۸.۲ +---------- +۴ آبان ۱۳۹۴ + +- تصحیح مکان نقاط نویسه‌های چ و چـ + +نسخه ۱.۸.۱ +---------- +۴ آبان ۱۳۹۴ + +- اصلاح جزئی بر روی انتهای حروف کشیده برای نمایش بهتر و یا صاف تر +- تصحیح مکان نقطه حروف یـ و ـيـ عربی + + +نسخه ۱.۸ +-------- +۳ آبان ۱۳۹۴ + +- اضافه شدن نویسه های نیم فاصله و فاصله مجازی. (با تشکر از ahmadali shafiee-ahmadalli) +- تصحیح مکان نقطه حرف ق + + +نسخه ۱.۷.۸ +---------- +۲ آبان ۱۳۹۴ + +- اصلاح سایز طول گلیف عدد صفر لاتین (طول اعداد یکسان باید باشد) + +نسخه ۱.۷.۷ +---------- +۲ آبان ۱۳۹۴ + +- اصلاح گلیف (ـ) + +نسخه ۱.۷.۶ +---------- +۲ آبان ۱۳۹۴ + +- اصلاح حرف هـ +- اصلاح مکان نقاط برخی حروف +- اصلاحات بیشتر بر روی اعراب + +نسخه ۱.۷.۵ +---------- +۱ آبان ۱۳۹۴ + +- اصلاحات مجدد اعراب با فواصل بهتر + +نسخه ۱.۷.۴ +---------- +۱ آبان ۱۳۹۴ + +- اصلاحات فراوان اعراب + +نسخه ۱.۷.۳ +---------- +۳۰ مهر ۱۳۹۴ + +- اصلاحات جزئی +- اضافه شدن نسخه تمام اعداد فارسی + +نسخه ۱.۷.۲ +---------- +۳۰ مهر ۱۳۹۴ + +- تصحیح گلیف های م و ـم + +نسخه ۱.۷.۱ +---------- +۳۰ مهر ۱۳۹۴ + +- تصحیح اعراب +- تصحیح حرف هـ +- تصحیح حرف ـم + +نسخه ۱.۷ +-------- +۳۰ مهر ۱۳۹۴ + +- باز طراحی گلیف ویرگول (با تشکر از Ebrahim Byagowi-ebraminio) +- باز طراحی گلیف نقطه ویرگول +- تصحیح اندازه و مکان اعراب کل حروف +- تصحیح جزئی شکل حرف عـ + +نسخه ۱.۶ +-------- +۲۸ مهر ۱۳۹۴ + +- تغییر شکل گلیف ممیز (با تشکر از Ebrahim Byagowi-ebraminio) +- تنظیم مجدد فاصله های حروف در حالت ضخیم + +نسخه ۱.۵.۳ +---------- +۲۷ مهر ۱۳۹۴ + +- اصلاحات کرنینگ + +نسخه ۱.۵.۲ +---------- +۲۷ مهر ۱۳۹۴ + +- اصلاحات کرنینگ + +نسخه ۱.۵.۱ +---------- +۲۷ مهر ۱۳۹۴ + +- برخی اصلاحات کرنینگ + +نسخه ۱.۵ +---------- +۲۷ مهر ۱۳۹۴ + +- اضافه شدن کرنینگ برای حروف لازم + +نسخه ۱.۴.۴ +---------- +۲۶ مهر ۱۳۹۴ + +- بهبود برخی از گلیف ها برای نمایش بهتر در فایرفاکس و اینترنت اکسپلورر (با تشکر از Salar Khalilzadeh-salarcode) + +نسخه ۱.۴.۳ +---------- +۲۶ مهر ۱۳۹۴ + +- حل مشکل عدد ۹ در حالت نرمال +- بهبود حرف ن در حالت ضخیم + +نسخه ۱.۴.۲ +---------- +۲۶ مهر ۱۳۹۴ + +- اضافه شدن گلیف گیلکی دوم ۊ +- برخی اصلاحات جزئي + +نسخه ۱.۴.۱ +---------- +۲۵ مهر ۱۳۹۴ + +- تصحیح اندازه گلیف های غیر عربی از جمله اعداد +- اضافه شدن فایل فونت فورج (با تشکر از Sasan Cooper-sasy360) + + +نسخه ۱.۴ +-------- +۲۵ مهر ۱۳۹۴ + +- حرف ۊ از حروف گیلکی اضافه شد (با تشکر از ورگ v6rg). +- مشکل اعراب حروف حل شد. + +نسخه ۱.۳.۱ +---------- +۲۳ مهر ۱۳۹۴ + +- حل مشکل نمایش در مک. (با تشکر از Arvin Jenabi و Sajad Abedi) + +نسخه ۱.۰ +-------- +۲۲ مهر ۱۳۹۴ + +- اولین نسخه + + +برای مشاهده تاریخچه فونت وزیر به [این صفحه](https://github.com/rastikerdar/vazir-font/blob/master/CHANGELOG.md) مراجعه نمایید. diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/OFL.txt b/apps/level_up/public/fonts/vazirmatn-v33.003/OFL.txt new file mode 100644 index 00000000..be66b382 --- /dev/null +++ b/apps/level_up/public/fonts/vazirmatn-v33.003/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2015 The Vazirmatn Project Authors (https://github.com/rastikerdar/vazirmatn) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/README.md b/apps/level_up/public/fonts/vazirmatn-v33.003/README.md new file mode 100644 index 00000000..27ba4d2d --- /dev/null +++ b/apps/level_up/public/fonts/vazirmatn-v33.003/README.md @@ -0,0 +1,61 @@ +# Vazirmatn Font فونت وزیرمتن + +Vazirmatn is a Persian/Arabic font project that started in 2015 under the name of Vazir with the idea of a new simple and legible typeface suitable for web pages and applications. Design and development have taken a long way but I hope the results are worth it. Thanks to DejaVu Sans font (v2.35) published in public domain there was a free software base to start the Vazir project. Although Vazir was completely different in typeface, still the original software was common. The design is done in Fontforge. For Latin glyphs, Vazirmatn is combined with Roboto font by a build script, however there is also a version without Latin glyphs (Non-Latin). ([More info](https://rastikerdar.github.io/vazirmatn/fa/docs)) + +- [Website](https://rastikerdar.github.io/vazirmatn) +- [Docs](https://rastikerdar.github.io/vazirmatn/fa/docs) +- [Test the font](https://rastikerdar.github.io/vazirmatn/fa/lab) + +## Install + +### Download + +Grab the [latest release](https://github.com/rastikerdar/vazirmatn/releases/latest) zip package. + +TTF files are in folder `fonts/ttf`. There is also a rounded dots version in folder `Round-Dots/`. + +### [npm](https://www.npmjs.com/package/vazirmatn) + +``` +npm install vazirmatn +``` +or +``` +yarn add vazirmatn +``` + +### CDN + +```html + +``` + +`*-font-face.css` for other versions are in `misc` and `Round-Dots` folders. + +```css +body { + font-family: Vazirmatn, sans-serif; +} +``` + +### Arch Linux ([AUR](https://aur.archlinux.org/packages/vazirmatn-fonts)) +``` +yay -S vazirmatn-fonts +``` + +## Build + +All weights other than Thin, Regular and Black are generated by interpolation method by [fontmake](https://github.com/googlefonts/fontmake) library. See [README.md](/scripts/README.md) in `scripts/`. All build steps (generating files) are done by scripts. + +## Thank you + +- [fontforge](https://fontforge.org/) +- [fontmake](https://github.com/googlefonts/fontmake) +- [fonttools](https://github.com/fonttools/fonttools) +- [DejaVu Fonts v2.35](https://dejavu-fonts.github.io) (used for the first version) + +## License +This Font Software is licensed under the SIL Open Font License, Version 1.1. See [OFL.txt](OFL.txt). + +## Authors +See [AUTHORS.txt](AUTHORS.txt). diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/Vazirmatn-RD-font-face.css b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/Vazirmatn-RD-font-face.css new file mode 100644 index 00000000..ff6fa5ea --- /dev/null +++ b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/Vazirmatn-RD-font-face.css @@ -0,0 +1,72 @@ +/* Generated by script */ +@font-face { + font-family: Vazirmatn RD; + src: url('fonts/webfonts/Vazirmatn-RD-Thin.woff2') format('woff2'); + font-weight: 100; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD; + src: url('fonts/webfonts/Vazirmatn-RD-ExtraLight.woff2') format('woff2'); + font-weight: 200; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD; + src: url('fonts/webfonts/Vazirmatn-RD-Light.woff2') format('woff2'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD; + src: url('fonts/webfonts/Vazirmatn-RD-Regular.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD; + src: url('fonts/webfonts/Vazirmatn-RD-Medium.woff2') format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD; + src: url('fonts/webfonts/Vazirmatn-RD-SemiBold.woff2') format('woff2'); + font-weight: 600; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD; + src: url('fonts/webfonts/Vazirmatn-RD-Bold.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD; + src: url('fonts/webfonts/Vazirmatn-RD-ExtraBold.woff2') format('woff2'); + font-weight: 800; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD; + src: url('fonts/webfonts/Vazirmatn-RD-Black.woff2') format('woff2'); + font-weight: 900; + font-style: normal; + font-display: swap; +} diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/ttf/Vazirmatn-RD-Black.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/ttf/Vazirmatn-RD-Black.ttf new file mode 100644 index 00000000..dd7c2a0b Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/ttf/Vazirmatn-RD-Black.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/ttf/Vazirmatn-RD-Bold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/ttf/Vazirmatn-RD-Bold.ttf new file mode 100644 index 00000000..d0d65b08 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/ttf/Vazirmatn-RD-Bold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/ttf/Vazirmatn-RD-ExtraBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/ttf/Vazirmatn-RD-ExtraBold.ttf new file mode 100644 index 00000000..cfe91a0c Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/ttf/Vazirmatn-RD-ExtraBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/ttf/Vazirmatn-RD-ExtraLight.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/ttf/Vazirmatn-RD-ExtraLight.ttf new file mode 100644 index 00000000..81e99578 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/ttf/Vazirmatn-RD-ExtraLight.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/ttf/Vazirmatn-RD-Light.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/ttf/Vazirmatn-RD-Light.ttf new file mode 100644 index 00000000..0dfb68ba Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/ttf/Vazirmatn-RD-Light.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/ttf/Vazirmatn-RD-Medium.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/ttf/Vazirmatn-RD-Medium.ttf new file mode 100644 index 00000000..f351e5db Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/ttf/Vazirmatn-RD-Medium.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/ttf/Vazirmatn-RD-Regular.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/ttf/Vazirmatn-RD-Regular.ttf new file mode 100644 index 00000000..296633af Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/ttf/Vazirmatn-RD-Regular.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/ttf/Vazirmatn-RD-SemiBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/ttf/Vazirmatn-RD-SemiBold.ttf new file mode 100644 index 00000000..3e2b0bd3 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/ttf/Vazirmatn-RD-SemiBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/ttf/Vazirmatn-RD-Thin.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/ttf/Vazirmatn-RD-Thin.ttf new file mode 100644 index 00000000..7e7a39c1 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/ttf/Vazirmatn-RD-Thin.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/variable/Vazirmatn-RD[wght].ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/variable/Vazirmatn-RD[wght].ttf new file mode 100644 index 00000000..626a591b Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/variable/Vazirmatn-RD[wght].ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD-Black.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD-Black.woff2 new file mode 100644 index 00000000..4ec3c647 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD-Black.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD-Bold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD-Bold.woff2 new file mode 100644 index 00000000..8de5f278 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD-Bold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD-ExtraBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD-ExtraBold.woff2 new file mode 100644 index 00000000..305c34a4 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD-ExtraBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD-ExtraLight.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD-ExtraLight.woff2 new file mode 100644 index 00000000..95da9ab4 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD-ExtraLight.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD-Light.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD-Light.woff2 new file mode 100644 index 00000000..fd9071fd Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD-Light.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD-Medium.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD-Medium.woff2 new file mode 100644 index 00000000..0a0d2234 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD-Medium.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD-Regular.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD-Regular.woff2 new file mode 100644 index 00000000..64610022 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD-Regular.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD-SemiBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD-SemiBold.woff2 new file mode 100644 index 00000000..a246e472 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD-SemiBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD-Thin.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD-Thin.woff2 new file mode 100644 index 00000000..062b7daf Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD-Thin.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD[wght].woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD[wght].woff2 new file mode 100644 index 00000000..21a20093 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/fonts/webfonts/Vazirmatn-RD[wght].woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/Vazirmatn-RD-FD-NL-font-face.css b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/Vazirmatn-RD-FD-NL-font-face.css new file mode 100644 index 00000000..9137ea7d --- /dev/null +++ b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/Vazirmatn-RD-FD-NL-font-face.css @@ -0,0 +1,72 @@ +/* Generated by script */ +@font-face { + font-family: Vazirmatn RD FD NL; + src: url('fonts/webfonts/Vazirmatn-RD-FD-NL-Thin.woff2') format('woff2'); + font-weight: 100; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD FD NL; + src: url('fonts/webfonts/Vazirmatn-RD-FD-NL-ExtraLight.woff2') format('woff2'); + font-weight: 200; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD FD NL; + src: url('fonts/webfonts/Vazirmatn-RD-FD-NL-Light.woff2') format('woff2'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD FD NL; + src: url('fonts/webfonts/Vazirmatn-RD-FD-NL-Regular.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD FD NL; + src: url('fonts/webfonts/Vazirmatn-RD-FD-NL-Medium.woff2') format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD FD NL; + src: url('fonts/webfonts/Vazirmatn-RD-FD-NL-SemiBold.woff2') format('woff2'); + font-weight: 600; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD FD NL; + src: url('fonts/webfonts/Vazirmatn-RD-FD-NL-Bold.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD FD NL; + src: url('fonts/webfonts/Vazirmatn-RD-FD-NL-ExtraBold.woff2') format('woff2'); + font-weight: 800; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD FD NL; + src: url('fonts/webfonts/Vazirmatn-RD-FD-NL-Black.woff2') format('woff2'); + font-weight: 900; + font-style: normal; + font-display: swap; +} diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-FD-NL-Black.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-FD-NL-Black.ttf new file mode 100644 index 00000000..00e5d6d0 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-FD-NL-Black.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-FD-NL-Bold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-FD-NL-Bold.ttf new file mode 100644 index 00000000..9e28abce Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-FD-NL-Bold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-FD-NL-ExtraBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-FD-NL-ExtraBold.ttf new file mode 100644 index 00000000..938137b2 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-FD-NL-ExtraBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-FD-NL-ExtraLight.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-FD-NL-ExtraLight.ttf new file mode 100644 index 00000000..65169ab9 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-FD-NL-ExtraLight.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-FD-NL-Light.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-FD-NL-Light.ttf new file mode 100644 index 00000000..4d7c52a0 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-FD-NL-Light.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-FD-NL-Medium.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-FD-NL-Medium.ttf new file mode 100644 index 00000000..468bd990 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-FD-NL-Medium.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-FD-NL-Regular.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-FD-NL-Regular.ttf new file mode 100644 index 00000000..4388f93c Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-FD-NL-Regular.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-FD-NL-SemiBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-FD-NL-SemiBold.ttf new file mode 100644 index 00000000..52ffd066 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-FD-NL-SemiBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-FD-NL-Thin.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-FD-NL-Thin.ttf new file mode 100644 index 00000000..f90df7d0 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-FD-NL-Thin.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-FD-NL-Black.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-FD-NL-Black.woff2 new file mode 100644 index 00000000..f4234e78 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-FD-NL-Black.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-FD-NL-Bold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-FD-NL-Bold.woff2 new file mode 100644 index 00000000..2e1478e0 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-FD-NL-Bold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-FD-NL-ExtraBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-FD-NL-ExtraBold.woff2 new file mode 100644 index 00000000..9539d63c Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-FD-NL-ExtraBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-FD-NL-ExtraLight.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-FD-NL-ExtraLight.woff2 new file mode 100644 index 00000000..30a93dd2 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-FD-NL-ExtraLight.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-FD-NL-Light.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-FD-NL-Light.woff2 new file mode 100644 index 00000000..f258c8e9 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-FD-NL-Light.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-FD-NL-Medium.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-FD-NL-Medium.woff2 new file mode 100644 index 00000000..8332dc78 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-FD-NL-Medium.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-FD-NL-Regular.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-FD-NL-Regular.woff2 new file mode 100644 index 00000000..e8238d15 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-FD-NL-Regular.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-FD-NL-SemiBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-FD-NL-SemiBold.woff2 new file mode 100644 index 00000000..231ab5f5 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-FD-NL-SemiBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-FD-NL-Thin.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-FD-NL-Thin.woff2 new file mode 100644 index 00000000..bc0014a3 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-FD-NL-Thin.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/Vazirmatn-RD-FD-font-face.css b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/Vazirmatn-RD-FD-font-face.css new file mode 100644 index 00000000..3f876e84 --- /dev/null +++ b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/Vazirmatn-RD-FD-font-face.css @@ -0,0 +1,72 @@ +/* Generated by script */ +@font-face { + font-family: Vazirmatn RD FD; + src: url('fonts/webfonts/Vazirmatn-RD-FD-Thin.woff2') format('woff2'); + font-weight: 100; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD FD; + src: url('fonts/webfonts/Vazirmatn-RD-FD-ExtraLight.woff2') format('woff2'); + font-weight: 200; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD FD; + src: url('fonts/webfonts/Vazirmatn-RD-FD-Light.woff2') format('woff2'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD FD; + src: url('fonts/webfonts/Vazirmatn-RD-FD-Regular.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD FD; + src: url('fonts/webfonts/Vazirmatn-RD-FD-Medium.woff2') format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD FD; + src: url('fonts/webfonts/Vazirmatn-RD-FD-SemiBold.woff2') format('woff2'); + font-weight: 600; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD FD; + src: url('fonts/webfonts/Vazirmatn-RD-FD-Bold.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD FD; + src: url('fonts/webfonts/Vazirmatn-RD-FD-ExtraBold.woff2') format('woff2'); + font-weight: 800; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD FD; + src: url('fonts/webfonts/Vazirmatn-RD-FD-Black.woff2') format('woff2'); + font-weight: 900; + font-style: normal; + font-display: swap; +} diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/ttf/Vazirmatn-RD-FD-Black.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/ttf/Vazirmatn-RD-FD-Black.ttf new file mode 100644 index 00000000..0df2e015 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/ttf/Vazirmatn-RD-FD-Black.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/ttf/Vazirmatn-RD-FD-Bold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/ttf/Vazirmatn-RD-FD-Bold.ttf new file mode 100644 index 00000000..589eee55 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/ttf/Vazirmatn-RD-FD-Bold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/ttf/Vazirmatn-RD-FD-ExtraBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/ttf/Vazirmatn-RD-FD-ExtraBold.ttf new file mode 100644 index 00000000..542c9b3c Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/ttf/Vazirmatn-RD-FD-ExtraBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/ttf/Vazirmatn-RD-FD-ExtraLight.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/ttf/Vazirmatn-RD-FD-ExtraLight.ttf new file mode 100644 index 00000000..57ddbf05 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/ttf/Vazirmatn-RD-FD-ExtraLight.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/ttf/Vazirmatn-RD-FD-Light.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/ttf/Vazirmatn-RD-FD-Light.ttf new file mode 100644 index 00000000..17924224 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/ttf/Vazirmatn-RD-FD-Light.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/ttf/Vazirmatn-RD-FD-Medium.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/ttf/Vazirmatn-RD-FD-Medium.ttf new file mode 100644 index 00000000..bb89d389 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/ttf/Vazirmatn-RD-FD-Medium.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/ttf/Vazirmatn-RD-FD-Regular.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/ttf/Vazirmatn-RD-FD-Regular.ttf new file mode 100644 index 00000000..91390e6b Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/ttf/Vazirmatn-RD-FD-Regular.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/ttf/Vazirmatn-RD-FD-SemiBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/ttf/Vazirmatn-RD-FD-SemiBold.ttf new file mode 100644 index 00000000..2f78697e Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/ttf/Vazirmatn-RD-FD-SemiBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/ttf/Vazirmatn-RD-FD-Thin.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/ttf/Vazirmatn-RD-FD-Thin.ttf new file mode 100644 index 00000000..eaabfec9 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/ttf/Vazirmatn-RD-FD-Thin.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-RD-FD-Black.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-RD-FD-Black.woff2 new file mode 100644 index 00000000..5038f6bc Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-RD-FD-Black.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-RD-FD-Bold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-RD-FD-Bold.woff2 new file mode 100644 index 00000000..1a35db5e Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-RD-FD-Bold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-RD-FD-ExtraBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-RD-FD-ExtraBold.woff2 new file mode 100644 index 00000000..699a1f43 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-RD-FD-ExtraBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-RD-FD-ExtraLight.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-RD-FD-ExtraLight.woff2 new file mode 100644 index 00000000..ccc24b8c Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-RD-FD-ExtraLight.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-RD-FD-Light.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-RD-FD-Light.woff2 new file mode 100644 index 00000000..d66c3839 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-RD-FD-Light.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-RD-FD-Medium.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-RD-FD-Medium.woff2 new file mode 100644 index 00000000..7c8d4649 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-RD-FD-Medium.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-RD-FD-Regular.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-RD-FD-Regular.woff2 new file mode 100644 index 00000000..d996eb7c Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-RD-FD-Regular.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-RD-FD-SemiBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-RD-FD-SemiBold.woff2 new file mode 100644 index 00000000..155c2125 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-RD-FD-SemiBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-RD-FD-Thin.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-RD-FD-Thin.woff2 new file mode 100644 index 00000000..71f17662 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-RD-FD-Thin.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/Vazirmatn-RD-NL-font-face.css b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/Vazirmatn-RD-NL-font-face.css new file mode 100644 index 00000000..1e03fd7f --- /dev/null +++ b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/Vazirmatn-RD-NL-font-face.css @@ -0,0 +1,72 @@ +/* Generated by script */ +@font-face { + font-family: Vazirmatn RD NL; + src: url('fonts/webfonts/Vazirmatn-RD-NL-Thin.woff2') format('woff2'); + font-weight: 100; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD NL; + src: url('fonts/webfonts/Vazirmatn-RD-NL-ExtraLight.woff2') format('woff2'); + font-weight: 200; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD NL; + src: url('fonts/webfonts/Vazirmatn-RD-NL-Light.woff2') format('woff2'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD NL; + src: url('fonts/webfonts/Vazirmatn-RD-NL-Regular.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD NL; + src: url('fonts/webfonts/Vazirmatn-RD-NL-Medium.woff2') format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD NL; + src: url('fonts/webfonts/Vazirmatn-RD-NL-SemiBold.woff2') format('woff2'); + font-weight: 600; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD NL; + src: url('fonts/webfonts/Vazirmatn-RD-NL-Bold.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD NL; + src: url('fonts/webfonts/Vazirmatn-RD-NL-ExtraBold.woff2') format('woff2'); + font-weight: 800; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD NL; + src: url('fonts/webfonts/Vazirmatn-RD-NL-Black.woff2') format('woff2'); + font-weight: 900; + font-style: normal; + font-display: swap; +} diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/ttf/Vazirmatn-RD-NL-Black.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/ttf/Vazirmatn-RD-NL-Black.ttf new file mode 100644 index 00000000..090f5f6a Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/ttf/Vazirmatn-RD-NL-Black.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/ttf/Vazirmatn-RD-NL-Bold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/ttf/Vazirmatn-RD-NL-Bold.ttf new file mode 100644 index 00000000..6f124f82 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/ttf/Vazirmatn-RD-NL-Bold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/ttf/Vazirmatn-RD-NL-ExtraBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/ttf/Vazirmatn-RD-NL-ExtraBold.ttf new file mode 100644 index 00000000..4da39aaf Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/ttf/Vazirmatn-RD-NL-ExtraBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/ttf/Vazirmatn-RD-NL-ExtraLight.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/ttf/Vazirmatn-RD-NL-ExtraLight.ttf new file mode 100644 index 00000000..b0bfd59b Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/ttf/Vazirmatn-RD-NL-ExtraLight.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/ttf/Vazirmatn-RD-NL-Light.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/ttf/Vazirmatn-RD-NL-Light.ttf new file mode 100644 index 00000000..c05c993e Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/ttf/Vazirmatn-RD-NL-Light.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/ttf/Vazirmatn-RD-NL-Medium.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/ttf/Vazirmatn-RD-NL-Medium.ttf new file mode 100644 index 00000000..0d083ef7 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/ttf/Vazirmatn-RD-NL-Medium.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/ttf/Vazirmatn-RD-NL-Regular.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/ttf/Vazirmatn-RD-NL-Regular.ttf new file mode 100644 index 00000000..544b9fa0 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/ttf/Vazirmatn-RD-NL-Regular.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/ttf/Vazirmatn-RD-NL-SemiBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/ttf/Vazirmatn-RD-NL-SemiBold.ttf new file mode 100644 index 00000000..84edd7ec Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/ttf/Vazirmatn-RD-NL-SemiBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/ttf/Vazirmatn-RD-NL-Thin.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/ttf/Vazirmatn-RD-NL-Thin.ttf new file mode 100644 index 00000000..f3d03dc6 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/ttf/Vazirmatn-RD-NL-Thin.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/variable/Vazirmatn-RD-NL[wght].ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/variable/Vazirmatn-RD-NL[wght].ttf new file mode 100644 index 00000000..cd90b12c Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/variable/Vazirmatn-RD-NL[wght].ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL-Black.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL-Black.woff2 new file mode 100644 index 00000000..26390a6c Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL-Black.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL-Bold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL-Bold.woff2 new file mode 100644 index 00000000..65e69595 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL-Bold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL-ExtraBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL-ExtraBold.woff2 new file mode 100644 index 00000000..381aad16 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL-ExtraBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL-ExtraLight.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL-ExtraLight.woff2 new file mode 100644 index 00000000..a7347447 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL-ExtraLight.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL-Light.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL-Light.woff2 new file mode 100644 index 00000000..3be158aa Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL-Light.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL-Medium.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL-Medium.woff2 new file mode 100644 index 00000000..c50874d4 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL-Medium.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL-Regular.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL-Regular.woff2 new file mode 100644 index 00000000..eb018c73 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL-Regular.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL-SemiBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL-SemiBold.woff2 new file mode 100644 index 00000000..687e4fc2 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL-SemiBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL-Thin.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL-Thin.woff2 new file mode 100644 index 00000000..64f68df8 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL-Thin.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL[wght].woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL[wght].woff2 new file mode 100644 index 00000000..cf464c0f Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/Non-Latin/fonts/webfonts/Vazirmatn-RD-NL[wght].woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/Vazirmatn-RD-UI-FD-NL-font-face.css b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/Vazirmatn-RD-UI-FD-NL-font-face.css new file mode 100644 index 00000000..87ad5e8f --- /dev/null +++ b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/Vazirmatn-RD-UI-FD-NL-font-face.css @@ -0,0 +1,72 @@ +/* Generated by script */ +@font-face { + font-family: Vazirmatn RD UI FD NL; + src: url('fonts/webfonts/Vazirmatn-RD-UI-FD-NL-Thin.woff2') format('woff2'); + font-weight: 100; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI FD NL; + src: url('fonts/webfonts/Vazirmatn-RD-UI-FD-NL-ExtraLight.woff2') format('woff2'); + font-weight: 200; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI FD NL; + src: url('fonts/webfonts/Vazirmatn-RD-UI-FD-NL-Light.woff2') format('woff2'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI FD NL; + src: url('fonts/webfonts/Vazirmatn-RD-UI-FD-NL-Regular.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI FD NL; + src: url('fonts/webfonts/Vazirmatn-RD-UI-FD-NL-Medium.woff2') format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI FD NL; + src: url('fonts/webfonts/Vazirmatn-RD-UI-FD-NL-SemiBold.woff2') format('woff2'); + font-weight: 600; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI FD NL; + src: url('fonts/webfonts/Vazirmatn-RD-UI-FD-NL-Bold.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI FD NL; + src: url('fonts/webfonts/Vazirmatn-RD-UI-FD-NL-ExtraBold.woff2') format('woff2'); + font-weight: 800; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI FD NL; + src: url('fonts/webfonts/Vazirmatn-RD-UI-FD-NL-Black.woff2') format('woff2'); + font-weight: 900; + font-style: normal; + font-display: swap; +} diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-FD-NL-Black.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-FD-NL-Black.ttf new file mode 100644 index 00000000..3e8cdb22 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-FD-NL-Black.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-FD-NL-Bold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-FD-NL-Bold.ttf new file mode 100644 index 00000000..df93ff0a Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-FD-NL-Bold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-FD-NL-ExtraBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-FD-NL-ExtraBold.ttf new file mode 100644 index 00000000..0848070d Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-FD-NL-ExtraBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-FD-NL-ExtraLight.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-FD-NL-ExtraLight.ttf new file mode 100644 index 00000000..97d04b24 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-FD-NL-ExtraLight.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-FD-NL-Light.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-FD-NL-Light.ttf new file mode 100644 index 00000000..8e5fa90d Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-FD-NL-Light.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-FD-NL-Medium.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-FD-NL-Medium.ttf new file mode 100644 index 00000000..913fcc23 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-FD-NL-Medium.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-FD-NL-Regular.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-FD-NL-Regular.ttf new file mode 100644 index 00000000..7e57a00f Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-FD-NL-Regular.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-FD-NL-SemiBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-FD-NL-SemiBold.ttf new file mode 100644 index 00000000..2f5fb6d7 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-FD-NL-SemiBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-FD-NL-Thin.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-FD-NL-Thin.ttf new file mode 100644 index 00000000..a39d8486 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-FD-NL-Thin.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-FD-NL-Black.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-FD-NL-Black.woff2 new file mode 100644 index 00000000..768f2fe4 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-FD-NL-Black.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-FD-NL-Bold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-FD-NL-Bold.woff2 new file mode 100644 index 00000000..c06826af Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-FD-NL-Bold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-FD-NL-ExtraBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-FD-NL-ExtraBold.woff2 new file mode 100644 index 00000000..4cc311a9 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-FD-NL-ExtraBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-FD-NL-ExtraLight.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-FD-NL-ExtraLight.woff2 new file mode 100644 index 00000000..7ea625f1 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-FD-NL-ExtraLight.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-FD-NL-Light.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-FD-NL-Light.woff2 new file mode 100644 index 00000000..7db91b3e Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-FD-NL-Light.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-FD-NL-Medium.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-FD-NL-Medium.woff2 new file mode 100644 index 00000000..0fef7593 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-FD-NL-Medium.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-FD-NL-Regular.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-FD-NL-Regular.woff2 new file mode 100644 index 00000000..9ca96e0d Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-FD-NL-Regular.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-FD-NL-SemiBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-FD-NL-SemiBold.woff2 new file mode 100644 index 00000000..be6c245b Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-FD-NL-SemiBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-FD-NL-Thin.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-FD-NL-Thin.woff2 new file mode 100644 index 00000000..a8e1259e Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-FD-NL-Thin.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/Vazirmatn-RD-UI-FD-font-face.css b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/Vazirmatn-RD-UI-FD-font-face.css new file mode 100644 index 00000000..0f440a56 --- /dev/null +++ b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/Vazirmatn-RD-UI-FD-font-face.css @@ -0,0 +1,72 @@ +/* Generated by script */ +@font-face { + font-family: Vazirmatn RD UI FD; + src: url('fonts/webfonts/Vazirmatn-RD-UI-FD-Thin.woff2') format('woff2'); + font-weight: 100; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI FD; + src: url('fonts/webfonts/Vazirmatn-RD-UI-FD-ExtraLight.woff2') format('woff2'); + font-weight: 200; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI FD; + src: url('fonts/webfonts/Vazirmatn-RD-UI-FD-Light.woff2') format('woff2'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI FD; + src: url('fonts/webfonts/Vazirmatn-RD-UI-FD-Regular.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI FD; + src: url('fonts/webfonts/Vazirmatn-RD-UI-FD-Medium.woff2') format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI FD; + src: url('fonts/webfonts/Vazirmatn-RD-UI-FD-SemiBold.woff2') format('woff2'); + font-weight: 600; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI FD; + src: url('fonts/webfonts/Vazirmatn-RD-UI-FD-Bold.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI FD; + src: url('fonts/webfonts/Vazirmatn-RD-UI-FD-ExtraBold.woff2') format('woff2'); + font-weight: 800; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI FD; + src: url('fonts/webfonts/Vazirmatn-RD-UI-FD-Black.woff2') format('woff2'); + font-weight: 900; + font-style: normal; + font-display: swap; +} diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-RD-UI-FD-Black.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-RD-UI-FD-Black.ttf new file mode 100644 index 00000000..960753fa Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-RD-UI-FD-Black.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-RD-UI-FD-Bold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-RD-UI-FD-Bold.ttf new file mode 100644 index 00000000..2475cdac Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-RD-UI-FD-Bold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-RD-UI-FD-ExtraBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-RD-UI-FD-ExtraBold.ttf new file mode 100644 index 00000000..36e588a0 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-RD-UI-FD-ExtraBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-RD-UI-FD-ExtraLight.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-RD-UI-FD-ExtraLight.ttf new file mode 100644 index 00000000..9e60dec4 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-RD-UI-FD-ExtraLight.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-RD-UI-FD-Light.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-RD-UI-FD-Light.ttf new file mode 100644 index 00000000..aecf14c0 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-RD-UI-FD-Light.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-RD-UI-FD-Medium.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-RD-UI-FD-Medium.ttf new file mode 100644 index 00000000..c12edde6 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-RD-UI-FD-Medium.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-RD-UI-FD-Regular.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-RD-UI-FD-Regular.ttf new file mode 100644 index 00000000..5b988ff3 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-RD-UI-FD-Regular.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-RD-UI-FD-SemiBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-RD-UI-FD-SemiBold.ttf new file mode 100644 index 00000000..03a19e94 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-RD-UI-FD-SemiBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-RD-UI-FD-Thin.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-RD-UI-FD-Thin.ttf new file mode 100644 index 00000000..fa93a390 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-RD-UI-FD-Thin.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-RD-UI-FD-Black.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-RD-UI-FD-Black.woff2 new file mode 100644 index 00000000..28af8968 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-RD-UI-FD-Black.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-RD-UI-FD-Bold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-RD-UI-FD-Bold.woff2 new file mode 100644 index 00000000..da4ef15e Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-RD-UI-FD-Bold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-RD-UI-FD-ExtraBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-RD-UI-FD-ExtraBold.woff2 new file mode 100644 index 00000000..75ec0961 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-RD-UI-FD-ExtraBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-RD-UI-FD-ExtraLight.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-RD-UI-FD-ExtraLight.woff2 new file mode 100644 index 00000000..86a324b7 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-RD-UI-FD-ExtraLight.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-RD-UI-FD-Light.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-RD-UI-FD-Light.woff2 new file mode 100644 index 00000000..2aaefc5d Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-RD-UI-FD-Light.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-RD-UI-FD-Medium.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-RD-UI-FD-Medium.woff2 new file mode 100644 index 00000000..b3d2a60c Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-RD-UI-FD-Medium.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-RD-UI-FD-Regular.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-RD-UI-FD-Regular.woff2 new file mode 100644 index 00000000..52fc711c Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-RD-UI-FD-Regular.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-RD-UI-FD-SemiBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-RD-UI-FD-SemiBold.woff2 new file mode 100644 index 00000000..78d167a9 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-RD-UI-FD-SemiBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-RD-UI-FD-Thin.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-RD-UI-FD-Thin.woff2 new file mode 100644 index 00000000..550788e3 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-RD-UI-FD-Thin.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/Vazirmatn-RD-UI-NL-font-face.css b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/Vazirmatn-RD-UI-NL-font-face.css new file mode 100644 index 00000000..1d81975f --- /dev/null +++ b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/Vazirmatn-RD-UI-NL-font-face.css @@ -0,0 +1,72 @@ +/* Generated by script */ +@font-face { + font-family: Vazirmatn RD UI NL; + src: url('fonts/webfonts/Vazirmatn-RD-UI-NL-Thin.woff2') format('woff2'); + font-weight: 100; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI NL; + src: url('fonts/webfonts/Vazirmatn-RD-UI-NL-ExtraLight.woff2') format('woff2'); + font-weight: 200; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI NL; + src: url('fonts/webfonts/Vazirmatn-RD-UI-NL-Light.woff2') format('woff2'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI NL; + src: url('fonts/webfonts/Vazirmatn-RD-UI-NL-Regular.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI NL; + src: url('fonts/webfonts/Vazirmatn-RD-UI-NL-Medium.woff2') format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI NL; + src: url('fonts/webfonts/Vazirmatn-RD-UI-NL-SemiBold.woff2') format('woff2'); + font-weight: 600; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI NL; + src: url('fonts/webfonts/Vazirmatn-RD-UI-NL-Bold.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI NL; + src: url('fonts/webfonts/Vazirmatn-RD-UI-NL-ExtraBold.woff2') format('woff2'); + font-weight: 800; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI NL; + src: url('fonts/webfonts/Vazirmatn-RD-UI-NL-Black.woff2') format('woff2'); + font-weight: 900; + font-style: normal; + font-display: swap; +} diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-NL-Black.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-NL-Black.ttf new file mode 100644 index 00000000..ecc52aed Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-NL-Black.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-NL-Bold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-NL-Bold.ttf new file mode 100644 index 00000000..6aa7c12c Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-NL-Bold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-NL-ExtraBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-NL-ExtraBold.ttf new file mode 100644 index 00000000..e463b79e Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-NL-ExtraBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-NL-ExtraLight.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-NL-ExtraLight.ttf new file mode 100644 index 00000000..8132b054 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-NL-ExtraLight.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-NL-Light.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-NL-Light.ttf new file mode 100644 index 00000000..1811fbeb Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-NL-Light.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-NL-Medium.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-NL-Medium.ttf new file mode 100644 index 00000000..65438c41 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-NL-Medium.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-NL-Regular.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-NL-Regular.ttf new file mode 100644 index 00000000..40ddd51c Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-NL-Regular.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-NL-SemiBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-NL-SemiBold.ttf new file mode 100644 index 00000000..7be5336e Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-NL-SemiBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-NL-Thin.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-NL-Thin.ttf new file mode 100644 index 00000000..e28d9f0c Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-RD-UI-NL-Thin.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-NL-Black.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-NL-Black.woff2 new file mode 100644 index 00000000..b4c006b6 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-NL-Black.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-NL-Bold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-NL-Bold.woff2 new file mode 100644 index 00000000..6b8f9dc7 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-NL-Bold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-NL-ExtraBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-NL-ExtraBold.woff2 new file mode 100644 index 00000000..0990cb8c Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-NL-ExtraBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-NL-ExtraLight.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-NL-ExtraLight.woff2 new file mode 100644 index 00000000..31ca9369 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-NL-ExtraLight.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-NL-Light.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-NL-Light.woff2 new file mode 100644 index 00000000..a00368aa Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-NL-Light.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-NL-Medium.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-NL-Medium.woff2 new file mode 100644 index 00000000..6debf0c9 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-NL-Medium.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-NL-Regular.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-NL-Regular.woff2 new file mode 100644 index 00000000..bd84edb8 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-NL-Regular.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-NL-SemiBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-NL-SemiBold.woff2 new file mode 100644 index 00000000..e3f5f07c Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-NL-SemiBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-NL-Thin.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-NL-Thin.woff2 new file mode 100644 index 00000000..2720676e Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-RD-UI-NL-Thin.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/Vazirmatn-RD-UI-font-face.css b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/Vazirmatn-RD-UI-font-face.css new file mode 100644 index 00000000..e547f832 --- /dev/null +++ b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/Vazirmatn-RD-UI-font-face.css @@ -0,0 +1,72 @@ +/* Generated by script */ +@font-face { + font-family: Vazirmatn RD UI; + src: url('fonts/webfonts/Vazirmatn-RD-UI-Thin.woff2') format('woff2'); + font-weight: 100; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI; + src: url('fonts/webfonts/Vazirmatn-RD-UI-ExtraLight.woff2') format('woff2'); + font-weight: 200; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI; + src: url('fonts/webfonts/Vazirmatn-RD-UI-Light.woff2') format('woff2'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI; + src: url('fonts/webfonts/Vazirmatn-RD-UI-Regular.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI; + src: url('fonts/webfonts/Vazirmatn-RD-UI-Medium.woff2') format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI; + src: url('fonts/webfonts/Vazirmatn-RD-UI-SemiBold.woff2') format('woff2'); + font-weight: 600; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI; + src: url('fonts/webfonts/Vazirmatn-RD-UI-Bold.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI; + src: url('fonts/webfonts/Vazirmatn-RD-UI-ExtraBold.woff2') format('woff2'); + font-weight: 800; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn RD UI; + src: url('fonts/webfonts/Vazirmatn-RD-UI-Black.woff2') format('woff2'); + font-weight: 900; + font-style: normal; + font-display: swap; +} diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/ttf/Vazirmatn-RD-UI-Black.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/ttf/Vazirmatn-RD-UI-Black.ttf new file mode 100644 index 00000000..e06e2b45 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/ttf/Vazirmatn-RD-UI-Black.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/ttf/Vazirmatn-RD-UI-Bold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/ttf/Vazirmatn-RD-UI-Bold.ttf new file mode 100644 index 00000000..39ee4488 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/ttf/Vazirmatn-RD-UI-Bold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/ttf/Vazirmatn-RD-UI-ExtraBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/ttf/Vazirmatn-RD-UI-ExtraBold.ttf new file mode 100644 index 00000000..9b407438 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/ttf/Vazirmatn-RD-UI-ExtraBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/ttf/Vazirmatn-RD-UI-ExtraLight.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/ttf/Vazirmatn-RD-UI-ExtraLight.ttf new file mode 100644 index 00000000..349be2cd Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/ttf/Vazirmatn-RD-UI-ExtraLight.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/ttf/Vazirmatn-RD-UI-Light.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/ttf/Vazirmatn-RD-UI-Light.ttf new file mode 100644 index 00000000..ee5abd6d Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/ttf/Vazirmatn-RD-UI-Light.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/ttf/Vazirmatn-RD-UI-Medium.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/ttf/Vazirmatn-RD-UI-Medium.ttf new file mode 100644 index 00000000..b5babac2 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/ttf/Vazirmatn-RD-UI-Medium.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/ttf/Vazirmatn-RD-UI-Regular.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/ttf/Vazirmatn-RD-UI-Regular.ttf new file mode 100644 index 00000000..a1518925 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/ttf/Vazirmatn-RD-UI-Regular.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/ttf/Vazirmatn-RD-UI-SemiBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/ttf/Vazirmatn-RD-UI-SemiBold.ttf new file mode 100644 index 00000000..6ebfba3d Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/ttf/Vazirmatn-RD-UI-SemiBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/ttf/Vazirmatn-RD-UI-Thin.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/ttf/Vazirmatn-RD-UI-Thin.ttf new file mode 100644 index 00000000..3bfee54d Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/ttf/Vazirmatn-RD-UI-Thin.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/webfonts/Vazirmatn-RD-UI-Black.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/webfonts/Vazirmatn-RD-UI-Black.woff2 new file mode 100644 index 00000000..c1cbf367 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/webfonts/Vazirmatn-RD-UI-Black.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/webfonts/Vazirmatn-RD-UI-Bold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/webfonts/Vazirmatn-RD-UI-Bold.woff2 new file mode 100644 index 00000000..d25f185e Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/webfonts/Vazirmatn-RD-UI-Bold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/webfonts/Vazirmatn-RD-UI-ExtraBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/webfonts/Vazirmatn-RD-UI-ExtraBold.woff2 new file mode 100644 index 00000000..22e9e4f6 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/webfonts/Vazirmatn-RD-UI-ExtraBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/webfonts/Vazirmatn-RD-UI-ExtraLight.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/webfonts/Vazirmatn-RD-UI-ExtraLight.woff2 new file mode 100644 index 00000000..71185c16 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/webfonts/Vazirmatn-RD-UI-ExtraLight.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/webfonts/Vazirmatn-RD-UI-Light.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/webfonts/Vazirmatn-RD-UI-Light.woff2 new file mode 100644 index 00000000..f168ba60 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/webfonts/Vazirmatn-RD-UI-Light.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/webfonts/Vazirmatn-RD-UI-Medium.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/webfonts/Vazirmatn-RD-UI-Medium.woff2 new file mode 100644 index 00000000..8d7028c4 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/webfonts/Vazirmatn-RD-UI-Medium.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/webfonts/Vazirmatn-RD-UI-Regular.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/webfonts/Vazirmatn-RD-UI-Regular.woff2 new file mode 100644 index 00000000..c99d1dac Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/webfonts/Vazirmatn-RD-UI-Regular.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/webfonts/Vazirmatn-RD-UI-SemiBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/webfonts/Vazirmatn-RD-UI-SemiBold.woff2 new file mode 100644 index 00000000..778f6fc3 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/webfonts/Vazirmatn-RD-UI-SemiBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/webfonts/Vazirmatn-RD-UI-Thin.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/webfonts/Vazirmatn-RD-UI-Thin.woff2 new file mode 100644 index 00000000..f79b6a29 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/Round-Dots/misc/UI/fonts/webfonts/Vazirmatn-RD-UI-Thin.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Vazirmatn-Variable-font-face.css b/apps/level_up/public/fonts/vazirmatn-v33.003/Vazirmatn-Variable-font-face.css new file mode 100644 index 00000000..9b7e8c6e --- /dev/null +++ b/apps/level_up/public/fonts/vazirmatn-v33.003/Vazirmatn-Variable-font-face.css @@ -0,0 +1,8 @@ +@font-face { + font-family: 'Vazirmatn'; + src: url('fonts/webfonts/Vazirmatn[wght].woff2') format('woff2 supports variations'), + url('fonts/webfonts/Vazirmatn[wght].woff2') format('woff2-variations'); + font-weight: 100 900; + font-style: normal; + font-display: swap; +} \ No newline at end of file diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/Vazirmatn-font-face.css b/apps/level_up/public/fonts/vazirmatn-v33.003/Vazirmatn-font-face.css new file mode 100644 index 00000000..9d625acd --- /dev/null +++ b/apps/level_up/public/fonts/vazirmatn-v33.003/Vazirmatn-font-face.css @@ -0,0 +1,72 @@ +/* Generated by script */ +@font-face { + font-family: Vazirmatn; + src: url('fonts/webfonts/Vazirmatn-Thin.woff2') format('woff2'); + font-weight: 100; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn; + src: url('fonts/webfonts/Vazirmatn-ExtraLight.woff2') format('woff2'); + font-weight: 200; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn; + src: url('fonts/webfonts/Vazirmatn-Light.woff2') format('woff2'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn; + src: url('fonts/webfonts/Vazirmatn-Regular.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn; + src: url('fonts/webfonts/Vazirmatn-Medium.woff2') format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn; + src: url('fonts/webfonts/Vazirmatn-SemiBold.woff2') format('woff2'); + font-weight: 600; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn; + src: url('fonts/webfonts/Vazirmatn-Bold.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn; + src: url('fonts/webfonts/Vazirmatn-ExtraBold.woff2') format('woff2'); + font-weight: 800; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn; + src: url('fonts/webfonts/Vazirmatn-Black.woff2') format('woff2'); + font-weight: 900; + font-style: normal; + font-display: swap; +} diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/ttf/Vazirmatn-Black.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/ttf/Vazirmatn-Black.ttf new file mode 100644 index 00000000..4b9bd661 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/ttf/Vazirmatn-Black.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/ttf/Vazirmatn-Bold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/ttf/Vazirmatn-Bold.ttf new file mode 100644 index 00000000..efa9b095 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/ttf/Vazirmatn-Bold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/ttf/Vazirmatn-ExtraBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/ttf/Vazirmatn-ExtraBold.ttf new file mode 100644 index 00000000..380bd158 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/ttf/Vazirmatn-ExtraBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/ttf/Vazirmatn-ExtraLight.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/ttf/Vazirmatn-ExtraLight.ttf new file mode 100644 index 00000000..b7b947e6 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/ttf/Vazirmatn-ExtraLight.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/ttf/Vazirmatn-Light.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/ttf/Vazirmatn-Light.ttf new file mode 100644 index 00000000..2dfd5c35 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/ttf/Vazirmatn-Light.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/ttf/Vazirmatn-Medium.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/ttf/Vazirmatn-Medium.ttf new file mode 100644 index 00000000..1e08dd54 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/ttf/Vazirmatn-Medium.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/ttf/Vazirmatn-Regular.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/ttf/Vazirmatn-Regular.ttf new file mode 100644 index 00000000..64e4a818 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/ttf/Vazirmatn-Regular.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/ttf/Vazirmatn-SemiBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/ttf/Vazirmatn-SemiBold.ttf new file mode 100644 index 00000000..6b3842ac Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/ttf/Vazirmatn-SemiBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/ttf/Vazirmatn-Thin.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/ttf/Vazirmatn-Thin.ttf new file mode 100644 index 00000000..b7a7d233 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/ttf/Vazirmatn-Thin.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/variable/Vazirmatn[wght].ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/variable/Vazirmatn[wght].ttf new file mode 100644 index 00000000..b02ceb05 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/variable/Vazirmatn[wght].ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-Black.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-Black.woff2 new file mode 100644 index 00000000..f08cace8 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-Black.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-Bold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-Bold.woff2 new file mode 100644 index 00000000..65b427f8 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-Bold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-ExtraBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-ExtraBold.woff2 new file mode 100644 index 00000000..c074e70f Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-ExtraBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-ExtraLight.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-ExtraLight.woff2 new file mode 100644 index 00000000..997dea07 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-ExtraLight.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-Light.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-Light.woff2 new file mode 100644 index 00000000..d154722a Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-Light.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-Medium.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-Medium.woff2 new file mode 100644 index 00000000..495af757 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-Medium.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-Regular.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-Regular.woff2 new file mode 100644 index 00000000..c9824c87 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-Regular.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-SemiBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-SemiBold.woff2 new file mode 100644 index 00000000..53016415 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-SemiBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-Thin.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-Thin.woff2 new file mode 100644 index 00000000..b7df2782 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn-Thin.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn[wght].woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn[wght].woff2 new file mode 100644 index 00000000..a501289a Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/fonts/webfonts/Vazirmatn[wght].woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/Vazirmatn-FD-NL-font-face.css b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/Vazirmatn-FD-NL-font-face.css new file mode 100644 index 00000000..664c44c0 --- /dev/null +++ b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/Vazirmatn-FD-NL-font-face.css @@ -0,0 +1,72 @@ +/* Generated by script */ +@font-face { + font-family: Vazirmatn FD NL; + src: url('fonts/webfonts/Vazirmatn-FD-NL-Thin.woff2') format('woff2'); + font-weight: 100; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn FD NL; + src: url('fonts/webfonts/Vazirmatn-FD-NL-ExtraLight.woff2') format('woff2'); + font-weight: 200; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn FD NL; + src: url('fonts/webfonts/Vazirmatn-FD-NL-Light.woff2') format('woff2'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn FD NL; + src: url('fonts/webfonts/Vazirmatn-FD-NL-Regular.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn FD NL; + src: url('fonts/webfonts/Vazirmatn-FD-NL-Medium.woff2') format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn FD NL; + src: url('fonts/webfonts/Vazirmatn-FD-NL-SemiBold.woff2') format('woff2'); + font-weight: 600; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn FD NL; + src: url('fonts/webfonts/Vazirmatn-FD-NL-Bold.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn FD NL; + src: url('fonts/webfonts/Vazirmatn-FD-NL-ExtraBold.woff2') format('woff2'); + font-weight: 800; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn FD NL; + src: url('fonts/webfonts/Vazirmatn-FD-NL-Black.woff2') format('woff2'); + font-weight: 900; + font-style: normal; + font-display: swap; +} diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-FD-NL-Black.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-FD-NL-Black.ttf new file mode 100644 index 00000000..dde4d053 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-FD-NL-Black.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-FD-NL-Bold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-FD-NL-Bold.ttf new file mode 100644 index 00000000..89dec5cc Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-FD-NL-Bold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-FD-NL-ExtraBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-FD-NL-ExtraBold.ttf new file mode 100644 index 00000000..5b02de89 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-FD-NL-ExtraBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-FD-NL-ExtraLight.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-FD-NL-ExtraLight.ttf new file mode 100644 index 00000000..552440c6 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-FD-NL-ExtraLight.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-FD-NL-Light.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-FD-NL-Light.ttf new file mode 100644 index 00000000..39a245f4 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-FD-NL-Light.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-FD-NL-Medium.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-FD-NL-Medium.ttf new file mode 100644 index 00000000..7134ba5d Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-FD-NL-Medium.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-FD-NL-Regular.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-FD-NL-Regular.ttf new file mode 100644 index 00000000..ff9b5033 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-FD-NL-Regular.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-FD-NL-SemiBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-FD-NL-SemiBold.ttf new file mode 100644 index 00000000..0dfab7f0 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-FD-NL-SemiBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-FD-NL-Thin.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-FD-NL-Thin.ttf new file mode 100644 index 00000000..c220bb74 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-FD-NL-Thin.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-FD-NL-Black.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-FD-NL-Black.woff2 new file mode 100644 index 00000000..3dd1eb00 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-FD-NL-Black.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-FD-NL-Bold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-FD-NL-Bold.woff2 new file mode 100644 index 00000000..8c41d970 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-FD-NL-Bold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-FD-NL-ExtraBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-FD-NL-ExtraBold.woff2 new file mode 100644 index 00000000..0e282fec Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-FD-NL-ExtraBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-FD-NL-ExtraLight.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-FD-NL-ExtraLight.woff2 new file mode 100644 index 00000000..2a89457b Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-FD-NL-ExtraLight.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-FD-NL-Light.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-FD-NL-Light.woff2 new file mode 100644 index 00000000..b830c7d4 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-FD-NL-Light.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-FD-NL-Medium.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-FD-NL-Medium.woff2 new file mode 100644 index 00000000..36b116e5 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-FD-NL-Medium.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-FD-NL-Regular.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-FD-NL-Regular.woff2 new file mode 100644 index 00000000..7c9285a2 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-FD-NL-Regular.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-FD-NL-SemiBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-FD-NL-SemiBold.woff2 new file mode 100644 index 00000000..26da2afd Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-FD-NL-SemiBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-FD-NL-Thin.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-FD-NL-Thin.woff2 new file mode 100644 index 00000000..5e5600b5 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-FD-NL-Thin.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/Vazirmatn-FD-font-face.css b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/Vazirmatn-FD-font-face.css new file mode 100644 index 00000000..cbccbc84 --- /dev/null +++ b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/Vazirmatn-FD-font-face.css @@ -0,0 +1,72 @@ +/* Generated by script */ +@font-face { + font-family: Vazirmatn FD; + src: url('fonts/webfonts/Vazirmatn-FD-Thin.woff2') format('woff2'); + font-weight: 100; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn FD; + src: url('fonts/webfonts/Vazirmatn-FD-ExtraLight.woff2') format('woff2'); + font-weight: 200; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn FD; + src: url('fonts/webfonts/Vazirmatn-FD-Light.woff2') format('woff2'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn FD; + src: url('fonts/webfonts/Vazirmatn-FD-Regular.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn FD; + src: url('fonts/webfonts/Vazirmatn-FD-Medium.woff2') format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn FD; + src: url('fonts/webfonts/Vazirmatn-FD-SemiBold.woff2') format('woff2'); + font-weight: 600; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn FD; + src: url('fonts/webfonts/Vazirmatn-FD-Bold.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn FD; + src: url('fonts/webfonts/Vazirmatn-FD-ExtraBold.woff2') format('woff2'); + font-weight: 800; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn FD; + src: url('fonts/webfonts/Vazirmatn-FD-Black.woff2') format('woff2'); + font-weight: 900; + font-style: normal; + font-display: swap; +} diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/ttf/Vazirmatn-FD-Black.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/ttf/Vazirmatn-FD-Black.ttf new file mode 100644 index 00000000..cf09256a Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/ttf/Vazirmatn-FD-Black.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/ttf/Vazirmatn-FD-Bold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/ttf/Vazirmatn-FD-Bold.ttf new file mode 100644 index 00000000..8a08b749 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/ttf/Vazirmatn-FD-Bold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/ttf/Vazirmatn-FD-ExtraBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/ttf/Vazirmatn-FD-ExtraBold.ttf new file mode 100644 index 00000000..1e29bc97 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/ttf/Vazirmatn-FD-ExtraBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/ttf/Vazirmatn-FD-ExtraLight.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/ttf/Vazirmatn-FD-ExtraLight.ttf new file mode 100644 index 00000000..d8126776 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/ttf/Vazirmatn-FD-ExtraLight.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/ttf/Vazirmatn-FD-Light.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/ttf/Vazirmatn-FD-Light.ttf new file mode 100644 index 00000000..1241e29f Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/ttf/Vazirmatn-FD-Light.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/ttf/Vazirmatn-FD-Medium.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/ttf/Vazirmatn-FD-Medium.ttf new file mode 100644 index 00000000..f7f2aa94 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/ttf/Vazirmatn-FD-Medium.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/ttf/Vazirmatn-FD-Regular.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/ttf/Vazirmatn-FD-Regular.ttf new file mode 100644 index 00000000..a5f5deac Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/ttf/Vazirmatn-FD-Regular.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/ttf/Vazirmatn-FD-SemiBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/ttf/Vazirmatn-FD-SemiBold.ttf new file mode 100644 index 00000000..fe384e68 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/ttf/Vazirmatn-FD-SemiBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/ttf/Vazirmatn-FD-Thin.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/ttf/Vazirmatn-FD-Thin.ttf new file mode 100644 index 00000000..eaada002 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/ttf/Vazirmatn-FD-Thin.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-FD-Black.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-FD-Black.woff2 new file mode 100644 index 00000000..251a9237 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-FD-Black.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-FD-Bold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-FD-Bold.woff2 new file mode 100644 index 00000000..f97f0dbe Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-FD-Bold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-FD-ExtraBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-FD-ExtraBold.woff2 new file mode 100644 index 00000000..e2b2d317 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-FD-ExtraBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-FD-ExtraLight.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-FD-ExtraLight.woff2 new file mode 100644 index 00000000..d019c922 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-FD-ExtraLight.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-FD-Light.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-FD-Light.woff2 new file mode 100644 index 00000000..41d75fb0 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-FD-Light.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-FD-Medium.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-FD-Medium.woff2 new file mode 100644 index 00000000..27212370 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-FD-Medium.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-FD-Regular.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-FD-Regular.woff2 new file mode 100644 index 00000000..ac7cff8f Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-FD-Regular.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-FD-SemiBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-FD-SemiBold.woff2 new file mode 100644 index 00000000..359e57e3 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-FD-SemiBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-FD-Thin.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-FD-Thin.woff2 new file mode 100644 index 00000000..d9cfb370 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Farsi-Digits/fonts/webfonts/Vazirmatn-FD-Thin.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/Vazirmatn-NL-font-face.css b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/Vazirmatn-NL-font-face.css new file mode 100644 index 00000000..5b086ae3 --- /dev/null +++ b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/Vazirmatn-NL-font-face.css @@ -0,0 +1,72 @@ +/* Generated by script */ +@font-face { + font-family: Vazirmatn NL; + src: url('fonts/webfonts/Vazirmatn-NL-Thin.woff2') format('woff2'); + font-weight: 100; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn NL; + src: url('fonts/webfonts/Vazirmatn-NL-ExtraLight.woff2') format('woff2'); + font-weight: 200; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn NL; + src: url('fonts/webfonts/Vazirmatn-NL-Light.woff2') format('woff2'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn NL; + src: url('fonts/webfonts/Vazirmatn-NL-Regular.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn NL; + src: url('fonts/webfonts/Vazirmatn-NL-Medium.woff2') format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn NL; + src: url('fonts/webfonts/Vazirmatn-NL-SemiBold.woff2') format('woff2'); + font-weight: 600; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn NL; + src: url('fonts/webfonts/Vazirmatn-NL-Bold.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn NL; + src: url('fonts/webfonts/Vazirmatn-NL-ExtraBold.woff2') format('woff2'); + font-weight: 800; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn NL; + src: url('fonts/webfonts/Vazirmatn-NL-Black.woff2') format('woff2'); + font-weight: 900; + font-style: normal; + font-display: swap; +} diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/ttf/Vazirmatn-NL-Black.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/ttf/Vazirmatn-NL-Black.ttf new file mode 100644 index 00000000..d777ec50 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/ttf/Vazirmatn-NL-Black.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/ttf/Vazirmatn-NL-Bold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/ttf/Vazirmatn-NL-Bold.ttf new file mode 100644 index 00000000..419275df Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/ttf/Vazirmatn-NL-Bold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/ttf/Vazirmatn-NL-ExtraBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/ttf/Vazirmatn-NL-ExtraBold.ttf new file mode 100644 index 00000000..fd954548 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/ttf/Vazirmatn-NL-ExtraBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/ttf/Vazirmatn-NL-ExtraLight.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/ttf/Vazirmatn-NL-ExtraLight.ttf new file mode 100644 index 00000000..61cb1bf9 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/ttf/Vazirmatn-NL-ExtraLight.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/ttf/Vazirmatn-NL-Light.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/ttf/Vazirmatn-NL-Light.ttf new file mode 100644 index 00000000..e7d39ef6 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/ttf/Vazirmatn-NL-Light.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/ttf/Vazirmatn-NL-Medium.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/ttf/Vazirmatn-NL-Medium.ttf new file mode 100644 index 00000000..9f8c0ebd Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/ttf/Vazirmatn-NL-Medium.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/ttf/Vazirmatn-NL-Regular.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/ttf/Vazirmatn-NL-Regular.ttf new file mode 100644 index 00000000..265d8bac Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/ttf/Vazirmatn-NL-Regular.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/ttf/Vazirmatn-NL-SemiBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/ttf/Vazirmatn-NL-SemiBold.ttf new file mode 100644 index 00000000..87b62c21 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/ttf/Vazirmatn-NL-SemiBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/ttf/Vazirmatn-NL-Thin.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/ttf/Vazirmatn-NL-Thin.ttf new file mode 100644 index 00000000..769abb22 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/ttf/Vazirmatn-NL-Thin.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/variable/Vazirmatn-NL[wght].ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/variable/Vazirmatn-NL[wght].ttf new file mode 100644 index 00000000..8d6ae604 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/variable/Vazirmatn-NL[wght].ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL-Black.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL-Black.woff2 new file mode 100644 index 00000000..355cf741 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL-Black.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL-Bold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL-Bold.woff2 new file mode 100644 index 00000000..d924f298 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL-Bold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL-ExtraBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL-ExtraBold.woff2 new file mode 100644 index 00000000..f75949f9 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL-ExtraBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL-ExtraLight.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL-ExtraLight.woff2 new file mode 100644 index 00000000..63eb9d04 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL-ExtraLight.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL-Light.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL-Light.woff2 new file mode 100644 index 00000000..c60fd2d0 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL-Light.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL-Medium.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL-Medium.woff2 new file mode 100644 index 00000000..cc41a1eb Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL-Medium.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL-Regular.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL-Regular.woff2 new file mode 100644 index 00000000..bd0589b7 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL-Regular.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL-SemiBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL-SemiBold.woff2 new file mode 100644 index 00000000..65417277 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL-SemiBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL-Thin.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL-Thin.woff2 new file mode 100644 index 00000000..77992a84 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL-Thin.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL[wght].woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL[wght].woff2 new file mode 100644 index 00000000..949ad263 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/Non-Latin/fonts/webfonts/Vazirmatn-NL[wght].woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/Vazirmatn-UI-FD-NL-font-face.css b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/Vazirmatn-UI-FD-NL-font-face.css new file mode 100644 index 00000000..5acc2fed --- /dev/null +++ b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/Vazirmatn-UI-FD-NL-font-face.css @@ -0,0 +1,72 @@ +/* Generated by script */ +@font-face { + font-family: Vazirmatn UI FD NL; + src: url('fonts/webfonts/Vazirmatn-UI-FD-NL-Thin.woff2') format('woff2'); + font-weight: 100; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI FD NL; + src: url('fonts/webfonts/Vazirmatn-UI-FD-NL-ExtraLight.woff2') format('woff2'); + font-weight: 200; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI FD NL; + src: url('fonts/webfonts/Vazirmatn-UI-FD-NL-Light.woff2') format('woff2'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI FD NL; + src: url('fonts/webfonts/Vazirmatn-UI-FD-NL-Regular.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI FD NL; + src: url('fonts/webfonts/Vazirmatn-UI-FD-NL-Medium.woff2') format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI FD NL; + src: url('fonts/webfonts/Vazirmatn-UI-FD-NL-SemiBold.woff2') format('woff2'); + font-weight: 600; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI FD NL; + src: url('fonts/webfonts/Vazirmatn-UI-FD-NL-Bold.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI FD NL; + src: url('fonts/webfonts/Vazirmatn-UI-FD-NL-ExtraBold.woff2') format('woff2'); + font-weight: 800; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI FD NL; + src: url('fonts/webfonts/Vazirmatn-UI-FD-NL-Black.woff2') format('woff2'); + font-weight: 900; + font-style: normal; + font-display: swap; +} diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-UI-FD-NL-Black.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-UI-FD-NL-Black.ttf new file mode 100644 index 00000000..bf59f015 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-UI-FD-NL-Black.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-UI-FD-NL-Bold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-UI-FD-NL-Bold.ttf new file mode 100644 index 00000000..e70490c3 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-UI-FD-NL-Bold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-UI-FD-NL-ExtraBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-UI-FD-NL-ExtraBold.ttf new file mode 100644 index 00000000..6c626819 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-UI-FD-NL-ExtraBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-UI-FD-NL-ExtraLight.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-UI-FD-NL-ExtraLight.ttf new file mode 100644 index 00000000..c1ee4673 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-UI-FD-NL-ExtraLight.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-UI-FD-NL-Light.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-UI-FD-NL-Light.ttf new file mode 100644 index 00000000..e1aa5183 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-UI-FD-NL-Light.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-UI-FD-NL-Medium.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-UI-FD-NL-Medium.ttf new file mode 100644 index 00000000..c05c32ea Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-UI-FD-NL-Medium.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-UI-FD-NL-Regular.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-UI-FD-NL-Regular.ttf new file mode 100644 index 00000000..7ff26d48 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-UI-FD-NL-Regular.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-UI-FD-NL-SemiBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-UI-FD-NL-SemiBold.ttf new file mode 100644 index 00000000..598379d2 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-UI-FD-NL-SemiBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-UI-FD-NL-Thin.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-UI-FD-NL-Thin.ttf new file mode 100644 index 00000000..718972c9 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/ttf/Vazirmatn-UI-FD-NL-Thin.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-UI-FD-NL-Black.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-UI-FD-NL-Black.woff2 new file mode 100644 index 00000000..ec576946 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-UI-FD-NL-Black.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-UI-FD-NL-Bold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-UI-FD-NL-Bold.woff2 new file mode 100644 index 00000000..8048291f Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-UI-FD-NL-Bold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-UI-FD-NL-ExtraBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-UI-FD-NL-ExtraBold.woff2 new file mode 100644 index 00000000..70018ea8 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-UI-FD-NL-ExtraBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-UI-FD-NL-ExtraLight.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-UI-FD-NL-ExtraLight.woff2 new file mode 100644 index 00000000..062f4627 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-UI-FD-NL-ExtraLight.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-UI-FD-NL-Light.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-UI-FD-NL-Light.woff2 new file mode 100644 index 00000000..73348a33 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-UI-FD-NL-Light.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-UI-FD-NL-Medium.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-UI-FD-NL-Medium.woff2 new file mode 100644 index 00000000..764aa6a8 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-UI-FD-NL-Medium.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-UI-FD-NL-Regular.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-UI-FD-NL-Regular.woff2 new file mode 100644 index 00000000..13adfe8a Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-UI-FD-NL-Regular.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-UI-FD-NL-SemiBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-UI-FD-NL-SemiBold.woff2 new file mode 100644 index 00000000..1da3f3d0 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-UI-FD-NL-SemiBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-UI-FD-NL-Thin.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-UI-FD-NL-Thin.woff2 new file mode 100644 index 00000000..3f6199bb Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits-Non-Latin/fonts/webfonts/Vazirmatn-UI-FD-NL-Thin.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/Vazirmatn-UI-FD-font-face.css b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/Vazirmatn-UI-FD-font-face.css new file mode 100644 index 00000000..15c96804 --- /dev/null +++ b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/Vazirmatn-UI-FD-font-face.css @@ -0,0 +1,72 @@ +/* Generated by script */ +@font-face { + font-family: Vazirmatn UI FD; + src: url('fonts/webfonts/Vazirmatn-UI-FD-Thin.woff2') format('woff2'); + font-weight: 100; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI FD; + src: url('fonts/webfonts/Vazirmatn-UI-FD-ExtraLight.woff2') format('woff2'); + font-weight: 200; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI FD; + src: url('fonts/webfonts/Vazirmatn-UI-FD-Light.woff2') format('woff2'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI FD; + src: url('fonts/webfonts/Vazirmatn-UI-FD-Regular.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI FD; + src: url('fonts/webfonts/Vazirmatn-UI-FD-Medium.woff2') format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI FD; + src: url('fonts/webfonts/Vazirmatn-UI-FD-SemiBold.woff2') format('woff2'); + font-weight: 600; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI FD; + src: url('fonts/webfonts/Vazirmatn-UI-FD-Bold.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI FD; + src: url('fonts/webfonts/Vazirmatn-UI-FD-ExtraBold.woff2') format('woff2'); + font-weight: 800; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI FD; + src: url('fonts/webfonts/Vazirmatn-UI-FD-Black.woff2') format('woff2'); + font-weight: 900; + font-style: normal; + font-display: swap; +} diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-UI-FD-Black.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-UI-FD-Black.ttf new file mode 100644 index 00000000..e2083df0 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-UI-FD-Black.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-UI-FD-Bold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-UI-FD-Bold.ttf new file mode 100644 index 00000000..0354ca3e Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-UI-FD-Bold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-UI-FD-ExtraBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-UI-FD-ExtraBold.ttf new file mode 100644 index 00000000..6b91e789 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-UI-FD-ExtraBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-UI-FD-ExtraLight.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-UI-FD-ExtraLight.ttf new file mode 100644 index 00000000..c6c3d8fc Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-UI-FD-ExtraLight.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-UI-FD-Light.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-UI-FD-Light.ttf new file mode 100644 index 00000000..65668b1c Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-UI-FD-Light.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-UI-FD-Medium.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-UI-FD-Medium.ttf new file mode 100644 index 00000000..86baad59 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-UI-FD-Medium.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-UI-FD-Regular.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-UI-FD-Regular.ttf new file mode 100644 index 00000000..ecbd2d7d Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-UI-FD-Regular.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-UI-FD-SemiBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-UI-FD-SemiBold.ttf new file mode 100644 index 00000000..30b4f038 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-UI-FD-SemiBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-UI-FD-Thin.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-UI-FD-Thin.ttf new file mode 100644 index 00000000..57b21b34 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/ttf/Vazirmatn-UI-FD-Thin.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-UI-FD-Black.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-UI-FD-Black.woff2 new file mode 100644 index 00000000..4ca8ab0e Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-UI-FD-Black.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-UI-FD-Bold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-UI-FD-Bold.woff2 new file mode 100644 index 00000000..8a4cceda Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-UI-FD-Bold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-UI-FD-ExtraBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-UI-FD-ExtraBold.woff2 new file mode 100644 index 00000000..8c242c4b Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-UI-FD-ExtraBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-UI-FD-ExtraLight.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-UI-FD-ExtraLight.woff2 new file mode 100644 index 00000000..40bb0a7b Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-UI-FD-ExtraLight.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-UI-FD-Light.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-UI-FD-Light.woff2 new file mode 100644 index 00000000..3df3b744 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-UI-FD-Light.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-UI-FD-Medium.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-UI-FD-Medium.woff2 new file mode 100644 index 00000000..05029712 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-UI-FD-Medium.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-UI-FD-Regular.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-UI-FD-Regular.woff2 new file mode 100644 index 00000000..0af837f2 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-UI-FD-Regular.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-UI-FD-SemiBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-UI-FD-SemiBold.woff2 new file mode 100644 index 00000000..85465b50 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-UI-FD-SemiBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-UI-FD-Thin.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-UI-FD-Thin.woff2 new file mode 100644 index 00000000..9ea69e3c Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Farsi-Digits/fonts/webfonts/Vazirmatn-UI-FD-Thin.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/Vazirmatn-UI-NL-font-face.css b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/Vazirmatn-UI-NL-font-face.css new file mode 100644 index 00000000..4f9d1b9f --- /dev/null +++ b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/Vazirmatn-UI-NL-font-face.css @@ -0,0 +1,72 @@ +/* Generated by script */ +@font-face { + font-family: Vazirmatn UI NL; + src: url('fonts/webfonts/Vazirmatn-UI-NL-Thin.woff2') format('woff2'); + font-weight: 100; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI NL; + src: url('fonts/webfonts/Vazirmatn-UI-NL-ExtraLight.woff2') format('woff2'); + font-weight: 200; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI NL; + src: url('fonts/webfonts/Vazirmatn-UI-NL-Light.woff2') format('woff2'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI NL; + src: url('fonts/webfonts/Vazirmatn-UI-NL-Regular.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI NL; + src: url('fonts/webfonts/Vazirmatn-UI-NL-Medium.woff2') format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI NL; + src: url('fonts/webfonts/Vazirmatn-UI-NL-SemiBold.woff2') format('woff2'); + font-weight: 600; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI NL; + src: url('fonts/webfonts/Vazirmatn-UI-NL-Bold.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI NL; + src: url('fonts/webfonts/Vazirmatn-UI-NL-ExtraBold.woff2') format('woff2'); + font-weight: 800; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI NL; + src: url('fonts/webfonts/Vazirmatn-UI-NL-Black.woff2') format('woff2'); + font-weight: 900; + font-style: normal; + font-display: swap; +} diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-UI-NL-Black.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-UI-NL-Black.ttf new file mode 100644 index 00000000..95447b48 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-UI-NL-Black.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-UI-NL-Bold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-UI-NL-Bold.ttf new file mode 100644 index 00000000..34aa1dba Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-UI-NL-Bold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-UI-NL-ExtraBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-UI-NL-ExtraBold.ttf new file mode 100644 index 00000000..ebb87690 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-UI-NL-ExtraBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-UI-NL-ExtraLight.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-UI-NL-ExtraLight.ttf new file mode 100644 index 00000000..6ececda7 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-UI-NL-ExtraLight.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-UI-NL-Light.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-UI-NL-Light.ttf new file mode 100644 index 00000000..95f8453e Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-UI-NL-Light.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-UI-NL-Medium.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-UI-NL-Medium.ttf new file mode 100644 index 00000000..cdeca0dd Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-UI-NL-Medium.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-UI-NL-Regular.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-UI-NL-Regular.ttf new file mode 100644 index 00000000..9deb47ee Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-UI-NL-Regular.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-UI-NL-SemiBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-UI-NL-SemiBold.ttf new file mode 100644 index 00000000..3255b93a Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-UI-NL-SemiBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-UI-NL-Thin.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-UI-NL-Thin.ttf new file mode 100644 index 00000000..dde0662e Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/ttf/Vazirmatn-UI-NL-Thin.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-UI-NL-Black.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-UI-NL-Black.woff2 new file mode 100644 index 00000000..8bbdbdf4 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-UI-NL-Black.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-UI-NL-Bold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-UI-NL-Bold.woff2 new file mode 100644 index 00000000..baeb0262 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-UI-NL-Bold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-UI-NL-ExtraBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-UI-NL-ExtraBold.woff2 new file mode 100644 index 00000000..f72c635b Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-UI-NL-ExtraBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-UI-NL-ExtraLight.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-UI-NL-ExtraLight.woff2 new file mode 100644 index 00000000..3b6e6114 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-UI-NL-ExtraLight.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-UI-NL-Light.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-UI-NL-Light.woff2 new file mode 100644 index 00000000..a1a1e290 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-UI-NL-Light.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-UI-NL-Medium.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-UI-NL-Medium.woff2 new file mode 100644 index 00000000..42f09bf4 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-UI-NL-Medium.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-UI-NL-Regular.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-UI-NL-Regular.woff2 new file mode 100644 index 00000000..3ce577ae Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-UI-NL-Regular.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-UI-NL-SemiBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-UI-NL-SemiBold.woff2 new file mode 100644 index 00000000..d97b240e Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-UI-NL-SemiBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-UI-NL-Thin.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-UI-NL-Thin.woff2 new file mode 100644 index 00000000..4192b54b Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI-Non-Latin/fonts/webfonts/Vazirmatn-UI-NL-Thin.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/Vazirmatn-UI-font-face.css b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/Vazirmatn-UI-font-face.css new file mode 100644 index 00000000..26693f99 --- /dev/null +++ b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/Vazirmatn-UI-font-face.css @@ -0,0 +1,72 @@ +/* Generated by script */ +@font-face { + font-family: Vazirmatn UI; + src: url('fonts/webfonts/Vazirmatn-UI-Thin.woff2') format('woff2'); + font-weight: 100; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI; + src: url('fonts/webfonts/Vazirmatn-UI-ExtraLight.woff2') format('woff2'); + font-weight: 200; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI; + src: url('fonts/webfonts/Vazirmatn-UI-Light.woff2') format('woff2'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI; + src: url('fonts/webfonts/Vazirmatn-UI-Regular.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI; + src: url('fonts/webfonts/Vazirmatn-UI-Medium.woff2') format('woff2'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI; + src: url('fonts/webfonts/Vazirmatn-UI-SemiBold.woff2') format('woff2'); + font-weight: 600; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI; + src: url('fonts/webfonts/Vazirmatn-UI-Bold.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI; + src: url('fonts/webfonts/Vazirmatn-UI-ExtraBold.woff2') format('woff2'); + font-weight: 800; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: Vazirmatn UI; + src: url('fonts/webfonts/Vazirmatn-UI-Black.woff2') format('woff2'); + font-weight: 900; + font-style: normal; + font-display: swap; +} diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/ttf/Vazirmatn-UI-Black.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/ttf/Vazirmatn-UI-Black.ttf new file mode 100644 index 00000000..bc422d46 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/ttf/Vazirmatn-UI-Black.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/ttf/Vazirmatn-UI-Bold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/ttf/Vazirmatn-UI-Bold.ttf new file mode 100644 index 00000000..b76f47e9 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/ttf/Vazirmatn-UI-Bold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/ttf/Vazirmatn-UI-ExtraBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/ttf/Vazirmatn-UI-ExtraBold.ttf new file mode 100644 index 00000000..0747a452 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/ttf/Vazirmatn-UI-ExtraBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/ttf/Vazirmatn-UI-ExtraLight.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/ttf/Vazirmatn-UI-ExtraLight.ttf new file mode 100644 index 00000000..ef464272 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/ttf/Vazirmatn-UI-ExtraLight.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/ttf/Vazirmatn-UI-Light.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/ttf/Vazirmatn-UI-Light.ttf new file mode 100644 index 00000000..ebfca7ac Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/ttf/Vazirmatn-UI-Light.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/ttf/Vazirmatn-UI-Medium.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/ttf/Vazirmatn-UI-Medium.ttf new file mode 100644 index 00000000..caa2056c Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/ttf/Vazirmatn-UI-Medium.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/ttf/Vazirmatn-UI-Regular.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/ttf/Vazirmatn-UI-Regular.ttf new file mode 100644 index 00000000..0b68e819 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/ttf/Vazirmatn-UI-Regular.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/ttf/Vazirmatn-UI-SemiBold.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/ttf/Vazirmatn-UI-SemiBold.ttf new file mode 100644 index 00000000..9eff472f Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/ttf/Vazirmatn-UI-SemiBold.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/ttf/Vazirmatn-UI-Thin.ttf b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/ttf/Vazirmatn-UI-Thin.ttf new file mode 100644 index 00000000..11b55978 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/ttf/Vazirmatn-UI-Thin.ttf differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/webfonts/Vazirmatn-UI-Black.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/webfonts/Vazirmatn-UI-Black.woff2 new file mode 100644 index 00000000..48194132 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/webfonts/Vazirmatn-UI-Black.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/webfonts/Vazirmatn-UI-Bold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/webfonts/Vazirmatn-UI-Bold.woff2 new file mode 100644 index 00000000..ae0916fa Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/webfonts/Vazirmatn-UI-Bold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/webfonts/Vazirmatn-UI-ExtraBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/webfonts/Vazirmatn-UI-ExtraBold.woff2 new file mode 100644 index 00000000..27c3930e Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/webfonts/Vazirmatn-UI-ExtraBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/webfonts/Vazirmatn-UI-ExtraLight.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/webfonts/Vazirmatn-UI-ExtraLight.woff2 new file mode 100644 index 00000000..7aed8e44 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/webfonts/Vazirmatn-UI-ExtraLight.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/webfonts/Vazirmatn-UI-Light.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/webfonts/Vazirmatn-UI-Light.woff2 new file mode 100644 index 00000000..6b6e0120 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/webfonts/Vazirmatn-UI-Light.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/webfonts/Vazirmatn-UI-Medium.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/webfonts/Vazirmatn-UI-Medium.woff2 new file mode 100644 index 00000000..5ccb6421 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/webfonts/Vazirmatn-UI-Medium.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/webfonts/Vazirmatn-UI-Regular.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/webfonts/Vazirmatn-UI-Regular.woff2 new file mode 100644 index 00000000..7deef0cb Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/webfonts/Vazirmatn-UI-Regular.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/webfonts/Vazirmatn-UI-SemiBold.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/webfonts/Vazirmatn-UI-SemiBold.woff2 new file mode 100644 index 00000000..1d6d937b Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/webfonts/Vazirmatn-UI-SemiBold.woff2 differ diff --git a/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/webfonts/Vazirmatn-UI-Thin.woff2 b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/webfonts/Vazirmatn-UI-Thin.woff2 new file mode 100644 index 00000000..1dee3725 Binary files /dev/null and b/apps/level_up/public/fonts/vazirmatn-v33.003/misc/UI/fonts/webfonts/Vazirmatn-UI-Thin.woff2 differ diff --git "a/apps/level_up/public/fonts/vazirmatn-v33.003/\330\261\330\247\331\207\331\206\331\205\330\247.txt" "b/apps/level_up/public/fonts/vazirmatn-v33.003/\330\261\330\247\331\207\331\206\331\205\330\247.txt" new file mode 100644 index 00000000..86f077e6 --- /dev/null +++ "b/apps/level_up/public/fonts/vazirmatn-v33.003/\330\261\330\247\331\207\331\206\331\205\330\247.txt" @@ -0,0 +1,5 @@ +لطفا برای مشاهده صفحات راهنما به وبسایت پروژه مراجعه کنید: +https://rastikerdar.github.io/vazirmatn/ + +مخزن پروژه: +https://github.com/rastikerdar/vazirmatn diff --git a/apps/level_up/public/gallary/gamecraft-1.jpg b/apps/level_up/public/gallary/gamecraft-1.jpg new file mode 100644 index 00000000..d4ace19d Binary files /dev/null and b/apps/level_up/public/gallary/gamecraft-1.jpg differ diff --git a/apps/level_up/public/gallary/gamecraft-10.jpg b/apps/level_up/public/gallary/gamecraft-10.jpg new file mode 100644 index 00000000..f3945fad Binary files /dev/null and b/apps/level_up/public/gallary/gamecraft-10.jpg differ diff --git a/apps/level_up/public/gallary/gamecraft-11.jpg b/apps/level_up/public/gallary/gamecraft-11.jpg new file mode 100644 index 00000000..c8ff8232 Binary files /dev/null and b/apps/level_up/public/gallary/gamecraft-11.jpg differ diff --git a/apps/level_up/public/gallary/gamecraft-12.jpg b/apps/level_up/public/gallary/gamecraft-12.jpg new file mode 100644 index 00000000..21c52142 Binary files /dev/null and b/apps/level_up/public/gallary/gamecraft-12.jpg differ diff --git a/apps/level_up/public/gallary/gamecraft-2.jpg b/apps/level_up/public/gallary/gamecraft-2.jpg new file mode 100644 index 00000000..b7634631 Binary files /dev/null and b/apps/level_up/public/gallary/gamecraft-2.jpg differ diff --git a/apps/level_up/public/gallary/gamecraft-3.jpg b/apps/level_up/public/gallary/gamecraft-3.jpg new file mode 100644 index 00000000..b36d8e76 Binary files /dev/null and b/apps/level_up/public/gallary/gamecraft-3.jpg differ diff --git a/apps/level_up/public/gallary/gamecraft-4.jpg b/apps/level_up/public/gallary/gamecraft-4.jpg new file mode 100644 index 00000000..f9c334bd Binary files /dev/null and b/apps/level_up/public/gallary/gamecraft-4.jpg differ diff --git a/apps/level_up/public/gallary/gamecraft-5.jpg b/apps/level_up/public/gallary/gamecraft-5.jpg new file mode 100644 index 00000000..f37f9a5d Binary files /dev/null and b/apps/level_up/public/gallary/gamecraft-5.jpg differ diff --git a/apps/level_up/public/gallary/gamecraft-6.jpg b/apps/level_up/public/gallary/gamecraft-6.jpg new file mode 100644 index 00000000..3af3ae87 Binary files /dev/null and b/apps/level_up/public/gallary/gamecraft-6.jpg differ diff --git a/apps/level_up/public/gallary/gamecraft-7.jpg b/apps/level_up/public/gallary/gamecraft-7.jpg new file mode 100644 index 00000000..b784469b Binary files /dev/null and b/apps/level_up/public/gallary/gamecraft-7.jpg differ diff --git a/apps/level_up/public/gallary/gamecraft-8.jpg b/apps/level_up/public/gallary/gamecraft-8.jpg new file mode 100644 index 00000000..fd5654b1 Binary files /dev/null and b/apps/level_up/public/gallary/gamecraft-8.jpg differ diff --git a/apps/level_up/public/gallary/gamecraft-9.jpg b/apps/level_up/public/gallary/gamecraft-9.jpg new file mode 100644 index 00000000..dbd248bc Binary files /dev/null and b/apps/level_up/public/gallary/gamecraft-9.jpg differ diff --git a/apps/level_up/public/googled946bfc674156387(1).html b/apps/level_up/public/googled946bfc674156387(1).html new file mode 100644 index 00000000..cbefe1d8 --- /dev/null +++ b/apps/level_up/public/googled946bfc674156387(1).html @@ -0,0 +1 @@ +google-site-verification: googled946bfc674156387.html \ No newline at end of file diff --git a/apps/level_up/public/images/2025/staffs/AliAghaee.jpg b/apps/level_up/public/images/2025/staffs/AliAghaee.jpg new file mode 100644 index 00000000..50d4adb8 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/AliAghaee.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/AliMoghaddam.jpg b/apps/level_up/public/images/2025/staffs/AliMoghaddam.jpg new file mode 100644 index 00000000..75644b58 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/AliMoghaddam.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/AliMohamadi.jpg b/apps/level_up/public/images/2025/staffs/AliMohamadi.jpg new file mode 100644 index 00000000..5ee4bfc7 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/AliMohamadi.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/AlirezaAtharifard.jpg b/apps/level_up/public/images/2025/staffs/AlirezaAtharifard.jpg new file mode 100644 index 00000000..2d566100 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/AlirezaAtharifard.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/AlirezaNikooei.jpg b/apps/level_up/public/images/2025/staffs/AlirezaNikooei.jpg new file mode 100644 index 00000000..4ab7c577 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/AlirezaNikooei.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/AlirezaSafari.jpg b/apps/level_up/public/images/2025/staffs/AlirezaSafari.jpg new file mode 100644 index 00000000..447d7b58 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/AlirezaSafari.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/AlirezaYousefpour.jpg b/apps/level_up/public/images/2025/staffs/AlirezaYousefpour.jpg new file mode 100644 index 00000000..e9c77f17 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/AlirezaYousefpour.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/AminRezaeeyan.jpg b/apps/level_up/public/images/2025/staffs/AminRezaeeyan.jpg new file mode 100644 index 00000000..bdd43d1c Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/AminRezaeeyan.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/AmirabbasEntezari.jpg b/apps/level_up/public/images/2025/staffs/AmirabbasEntezari.jpg new file mode 100644 index 00000000..6a3c77f1 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/AmirabbasEntezari.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/AmiraliZakeri.jpg b/apps/level_up/public/images/2025/staffs/AmiraliZakeri.jpg new file mode 100644 index 00000000..1a006bd6 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/AmiraliZakeri.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/AmirhosseinAghighi.jpg b/apps/level_up/public/images/2025/staffs/AmirhosseinAghighi.jpg new file mode 100644 index 00000000..d5336ad2 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/AmirhosseinAghighi.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/ArianMohseni.png b/apps/level_up/public/images/2025/staffs/ArianMohseni.png new file mode 100644 index 00000000..2ca2db74 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/ArianMohseni.png differ diff --git a/apps/level_up/public/images/2025/staffs/ArminaMotaghi.jpg b/apps/level_up/public/images/2025/staffs/ArminaMotaghi.jpg new file mode 100644 index 00000000..6146f9a3 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/ArminaMotaghi.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/AsalJlz.jpg b/apps/level_up/public/images/2025/staffs/AsalJlz.jpg new file mode 100644 index 00000000..2f5fda19 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/AsalJlz.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/AshkanChaji.jpg b/apps/level_up/public/images/2025/staffs/AshkanChaji.jpg new file mode 100644 index 00000000..75052874 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/AshkanChaji.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/AvaMostanbet.jpg b/apps/level_up/public/images/2025/staffs/AvaMostanbet.jpg new file mode 100644 index 00000000..770ecc53 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/AvaMostanbet.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/BehradHozouri.jpg b/apps/level_up/public/images/2025/staffs/BehradHozouri.jpg new file mode 100644 index 00000000..c845b84a Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/BehradHozouri.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/DelaraamRoohani.jpg b/apps/level_up/public/images/2025/staffs/DelaraamRoohani.jpg new file mode 100644 index 00000000..1ae50f54 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/DelaraamRoohani.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/ElnazBaharvand.jpg b/apps/level_up/public/images/2025/staffs/ElnazBaharvand.jpg new file mode 100644 index 00000000..23e0b270 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/ElnazBaharvand.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/FatemehSadatMoujani.jpeg b/apps/level_up/public/images/2025/staffs/FatemehSadatMoujani.jpeg new file mode 100644 index 00000000..c0007832 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/FatemehSadatMoujani.jpeg differ diff --git a/apps/level_up/public/images/2025/staffs/HessamHosseinian.jpg b/apps/level_up/public/images/2025/staffs/HessamHosseinian.jpg new file mode 100644 index 00000000..2d292a64 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/HessamHosseinian.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/IMG_6957 - asal Jlz.jpg b/apps/level_up/public/images/2025/staffs/IMG_6957 - asal Jlz.jpg new file mode 100644 index 00000000..2f5fda19 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/IMG_6957 - asal Jlz.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/MahdiHaeri.jpg b/apps/level_up/public/images/2025/staffs/MahdiHaeri.jpg new file mode 100644 index 00000000..5eeea613 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/MahdiHaeri.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/MahdiNajibpour.png b/apps/level_up/public/images/2025/staffs/MahdiNajibpour.png new file mode 100644 index 00000000..380ecdeb Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/MahdiNajibpour.png differ diff --git a/apps/level_up/public/images/2025/staffs/MahdiehTahami.jpg b/apps/level_up/public/images/2025/staffs/MahdiehTahami.jpg new file mode 100644 index 00000000..17bb5f4f Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/MahdiehTahami.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/MatinDehghanipor.jpg b/apps/level_up/public/images/2025/staffs/MatinDehghanipor.jpg new file mode 100644 index 00000000..39a1d30f Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/MatinDehghanipor.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/MelikaGhasemipour.jpg b/apps/level_up/public/images/2025/staffs/MelikaGhasemipour.jpg new file mode 100644 index 00000000..fc547232 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/MelikaGhasemipour.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/MoeinEnayati.png b/apps/level_up/public/images/2025/staffs/MoeinEnayati.png new file mode 100644 index 00000000..cb5f7711 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/MoeinEnayati.png differ diff --git a/apps/level_up/public/images/2025/staffs/MohammadEshratabadi.jpg b/apps/level_up/public/images/2025/staffs/MohammadEshratabadi.jpg new file mode 100644 index 00000000..7e557621 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/MohammadEshratabadi.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/MohammadJavadAkbari.jpg b/apps/level_up/public/images/2025/staffs/MohammadJavadAkbari.jpg new file mode 100644 index 00000000..dc3dd951 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/MohammadJavadAkbari.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/MohammadrafiDavaji.jpg b/apps/level_up/public/images/2025/staffs/MohammadrafiDavaji.jpg new file mode 100644 index 00000000..c5cf7776 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/MohammadrafiDavaji.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/NargesTakallu.jpg b/apps/level_up/public/images/2025/staffs/NargesTakallu.jpg new file mode 100644 index 00000000..3071fcbd Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/NargesTakallu.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/ParnianEsfahani.jpg b/apps/level_up/public/images/2025/staffs/ParnianEsfahani.jpg new file mode 100644 index 00000000..b74826ad Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/ParnianEsfahani.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/ParnianJavadi.jpg b/apps/level_up/public/images/2025/staffs/ParnianJavadi.jpg new file mode 100644 index 00000000..f3183f4c Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/ParnianJavadi.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/ParsaSamareh.jpg b/apps/level_up/public/images/2025/staffs/ParsaSamareh.jpg new file mode 100644 index 00000000..970e6e7b Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/ParsaSamareh.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/PouryaFahimi.jpg b/apps/level_up/public/images/2025/staffs/PouryaFahimi.jpg new file mode 100644 index 00000000..7472fea4 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/PouryaFahimi.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/RezaAdinepour.jpg b/apps/level_up/public/images/2025/staffs/RezaAdinepour.jpg new file mode 100644 index 00000000..aaedd6f6 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/RezaAdinepour.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/RoseNazeri.jpg b/apps/level_up/public/images/2025/staffs/RoseNazeri.jpg new file mode 100644 index 00000000..d18b24e2 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/RoseNazeri.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/SabaSeyedtabaei.jpg b/apps/level_up/public/images/2025/staffs/SabaSeyedtabaei.jpg new file mode 100644 index 00000000..3453e47f Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/SabaSeyedtabaei.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/SetayeshYavari.jpg b/apps/level_up/public/images/2025/staffs/SetayeshYavari.jpg new file mode 100644 index 00000000..8edf39ac Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/SetayeshYavari.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/ShadiYousefabadi.jpg b/apps/level_up/public/images/2025/staffs/ShadiYousefabadi.jpg new file mode 100644 index 00000000..54724b7c Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/ShadiYousefabadi.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/SoroushNanbakhsh.jpg b/apps/level_up/public/images/2025/staffs/SoroushNanbakhsh.jpg new file mode 100644 index 00000000..c4ed873c Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/SoroushNanbakhsh.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/ZahraSheikhi.jpg b/apps/level_up/public/images/2025/staffs/ZahraSheikhi.jpg new file mode 100644 index 00000000..2a200309 Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/ZahraSheikhi.jpg differ diff --git a/apps/level_up/public/images/2025/staffs/hero.gif b/apps/level_up/public/images/2025/staffs/hero.gif new file mode 100644 index 00000000..7a02088f Binary files /dev/null and b/apps/level_up/public/images/2025/staffs/hero.gif differ diff --git a/apps/level_up/public/images/Luigi.jpg b/apps/level_up/public/images/Luigi.jpg new file mode 100644 index 00000000..8c3a9611 Binary files /dev/null and b/apps/level_up/public/images/Luigi.jpg differ diff --git a/apps/level_up/public/images/LuigiSquare.jpg b/apps/level_up/public/images/LuigiSquare.jpg new file mode 100644 index 00000000..7a53110d Binary files /dev/null and b/apps/level_up/public/images/LuigiSquare.jpg differ diff --git a/apps/level_up/public/images/SuperMario.jpg b/apps/level_up/public/images/SuperMario.jpg new file mode 100644 index 00000000..d7d109ed Binary files /dev/null and b/apps/level_up/public/images/SuperMario.jpg differ diff --git a/apps/level_up/public/images/SuperMarioSquare.jpg b/apps/level_up/public/images/SuperMarioSquare.jpg new file mode 100644 index 00000000..079ebd6e Binary files /dev/null and b/apps/level_up/public/images/SuperMarioSquare.jpg differ diff --git a/apps/level_up/public/images/course.png b/apps/level_up/public/images/course.png new file mode 100644 index 00000000..610f6790 Binary files /dev/null and b/apps/level_up/public/images/course.png differ diff --git a/apps/level_up/public/images/dark-3d.svg b/apps/level_up/public/images/dark-3d.svg new file mode 100644 index 00000000..b3bfd8ae --- /dev/null +++ b/apps/level_up/public/images/dark-3d.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/apps/level_up/public/images/light-3d-bulb.svg b/apps/level_up/public/images/light-3d-bulb.svg new file mode 100644 index 00000000..5dc208da --- /dev/null +++ b/apps/level_up/public/images/light-3d-bulb.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/level_up/public/images/light-3d.svg b/apps/level_up/public/images/light-3d.svg new file mode 100644 index 00000000..a7a0da73 --- /dev/null +++ b/apps/level_up/public/images/light-3d.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/level_up/public/images/logo/3d-dark.png b/apps/level_up/public/images/logo/3d-dark.png new file mode 100644 index 00000000..2202ab63 Binary files /dev/null and b/apps/level_up/public/images/logo/3d-dark.png differ diff --git a/apps/level_up/public/images/logo/Asset 4.png b/apps/level_up/public/images/logo/Asset 4.png new file mode 100644 index 00000000..75793b58 Binary files /dev/null and b/apps/level_up/public/images/logo/Asset 4.png differ diff --git a/apps/level_up/public/images/logo/IranServer.png b/apps/level_up/public/images/logo/IranServer.png new file mode 100644 index 00000000..de64c1ab Binary files /dev/null and b/apps/level_up/public/images/logo/IranServer.png differ diff --git a/apps/level_up/public/images/logo/avngames.png b/apps/level_up/public/images/logo/avngames.png new file mode 100644 index 00000000..803254e8 Binary files /dev/null and b/apps/level_up/public/images/logo/avngames.png differ diff --git a/apps/level_up/public/images/logo/black-cube.png b/apps/level_up/public/images/logo/black-cube.png new file mode 100644 index 00000000..73431575 Binary files /dev/null and b/apps/level_up/public/images/logo/black-cube.png differ diff --git a/apps/level_up/public/images/logo/brainladder.png b/apps/level_up/public/images/logo/brainladder.png new file mode 100644 index 00000000..b0b7a607 Binary files /dev/null and b/apps/level_up/public/images/logo/brainladder.png differ diff --git a/apps/level_up/public/images/logo/crown.png b/apps/level_up/public/images/logo/crown.png new file mode 100644 index 00000000..c11b449f Binary files /dev/null and b/apps/level_up/public/images/logo/crown.png differ diff --git a/apps/level_up/public/images/logo/dark-3d.png b/apps/level_up/public/images/logo/dark-3d.png new file mode 100644 index 00000000..b0ace205 Binary files /dev/null and b/apps/level_up/public/images/logo/dark-3d.png differ diff --git a/apps/level_up/public/images/logo/default_prof.jpg b/apps/level_up/public/images/logo/default_prof.jpg new file mode 100644 index 00000000..3adfd6db Binary files /dev/null and b/apps/level_up/public/images/logo/default_prof.jpg differ diff --git a/apps/level_up/public/images/logo/dream-event.png b/apps/level_up/public/images/logo/dream-event.png new file mode 100644 index 00000000..768683b2 Binary files /dev/null and b/apps/level_up/public/images/logo/dream-event.png differ diff --git a/apps/level_up/public/images/logo/dropout.png b/apps/level_up/public/images/logo/dropout.png new file mode 100644 index 00000000..e567a9c7 Binary files /dev/null and b/apps/level_up/public/images/logo/dropout.png differ diff --git a/apps/level_up/public/images/logo/folan.png b/apps/level_up/public/images/logo/folan.png new file mode 100644 index 00000000..841caefc Binary files /dev/null and b/apps/level_up/public/images/logo/folan.png differ diff --git a/apps/level_up/public/images/logo/folan4.png b/apps/level_up/public/images/logo/folan4.png new file mode 100644 index 00000000..9884c494 Binary files /dev/null and b/apps/level_up/public/images/logo/folan4.png differ diff --git a/apps/level_up/public/images/logo/folan_2.png b/apps/level_up/public/images/logo/folan_2.png new file mode 100644 index 00000000..de75a863 Binary files /dev/null and b/apps/level_up/public/images/logo/folan_2.png differ diff --git a/apps/level_up/public/images/logo/funtory.png b/apps/level_up/public/images/logo/funtory.png new file mode 100644 index 00000000..3ee5c026 Binary files /dev/null and b/apps/level_up/public/images/logo/funtory.png differ diff --git a/apps/level_up/public/images/logo/gameTestImage.jpg b/apps/level_up/public/images/logo/gameTestImage.jpg new file mode 100644 index 00000000..6d081bfd Binary files /dev/null and b/apps/level_up/public/images/logo/gameTestImage.jpg differ diff --git a/apps/level_up/public/images/logo/hayahool.png b/apps/level_up/public/images/logo/hayahool.png new file mode 100644 index 00000000..b4407329 Binary files /dev/null and b/apps/level_up/public/images/logo/hayahool.png differ diff --git a/apps/level_up/public/images/logo/institue.png b/apps/level_up/public/images/logo/institue.png new file mode 100644 index 00000000..48e0bfe4 Binary files /dev/null and b/apps/level_up/public/images/logo/institue.png differ diff --git a/apps/level_up/public/images/logo/medrick-logo.png b/apps/level_up/public/images/logo/medrick-logo.png new file mode 100644 index 00000000..71f4dcc9 Binary files /dev/null and b/apps/level_up/public/images/logo/medrick-logo.png differ diff --git a/apps/level_up/public/images/logo/myket.png b/apps/level_up/public/images/logo/myket.png new file mode 100644 index 00000000..12d1b09e Binary files /dev/null and b/apps/level_up/public/images/logo/myket.png differ diff --git a/apps/level_up/public/images/logo/pattern.jpg b/apps/level_up/public/images/logo/pattern.jpg new file mode 100644 index 00000000..cf52a3b5 Binary files /dev/null and b/apps/level_up/public/images/logo/pattern.jpg differ diff --git a/apps/level_up/public/images/logo/pattern.png b/apps/level_up/public/images/logo/pattern.png new file mode 100644 index 00000000..d0735baa Binary files /dev/null and b/apps/level_up/public/images/logo/pattern.png differ diff --git a/apps/level_up/public/images/logo/pgj.png b/apps/level_up/public/images/logo/pgj.png new file mode 100644 index 00000000..1c4b02c8 Binary files /dev/null and b/apps/level_up/public/images/logo/pgj.png differ diff --git a/apps/level_up/public/images/logo/quiz of kings.png b/apps/level_up/public/images/logo/quiz of kings.png new file mode 100644 index 00000000..e5744736 Binary files /dev/null and b/apps/level_up/public/images/logo/quiz of kings.png differ diff --git a/apps/level_up/public/images/logo/ssc_white.png b/apps/level_up/public/images/logo/ssc_white.png new file mode 100644 index 00000000..3dfaeeb7 Binary files /dev/null and b/apps/level_up/public/images/logo/ssc_white.png differ diff --git a/apps/level_up/public/images/logo/tod.png b/apps/level_up/public/images/logo/tod.png new file mode 100644 index 00000000..17b14491 Binary files /dev/null and b/apps/level_up/public/images/logo/tod.png differ diff --git a/apps/level_up/public/images/pattern.png b/apps/level_up/public/images/pattern.png new file mode 100644 index 00000000..85881471 Binary files /dev/null and b/apps/level_up/public/images/pattern.png differ diff --git a/apps/level_up/public/lottie/Fireworks.lottie b/apps/level_up/public/lottie/Fireworks.lottie new file mode 100644 index 00000000..57142f1f Binary files /dev/null and b/apps/level_up/public/lottie/Fireworks.lottie differ diff --git a/apps/level_up/public/mario/carnivorous-plant_528099.png b/apps/level_up/public/mario/carnivorous-plant_528099.png new file mode 100644 index 00000000..7ebd7520 Binary files /dev/null and b/apps/level_up/public/mario/carnivorous-plant_528099.png differ diff --git a/apps/level_up/public/mario/freepik__super_mario_theme_badge_cute.png b/apps/level_up/public/mario/freepik__super_mario_theme_badge_cute.png new file mode 100644 index 00000000..0d0726a1 Binary files /dev/null and b/apps/level_up/public/mario/freepik__super_mario_theme_badge_cute.png differ diff --git a/apps/level_up/public/mario/giphy-1.gif b/apps/level_up/public/mario/giphy-1.gif new file mode 100644 index 00000000..e69de29b diff --git a/apps/level_up/public/mario/giphy-10.gif b/apps/level_up/public/mario/giphy-10.gif new file mode 100644 index 00000000..e69de29b diff --git a/apps/level_up/public/mario/giphy-11.gif b/apps/level_up/public/mario/giphy-11.gif new file mode 100644 index 00000000..e69de29b diff --git a/apps/level_up/public/mario/giphy-12.gif b/apps/level_up/public/mario/giphy-12.gif new file mode 100644 index 00000000..e69de29b diff --git a/apps/level_up/public/mario/giphy-13.gif b/apps/level_up/public/mario/giphy-13.gif new file mode 100644 index 00000000..e69de29b diff --git a/apps/level_up/public/mario/giphy-14.gif b/apps/level_up/public/mario/giphy-14.gif new file mode 100644 index 00000000..bbda630d Binary files /dev/null and b/apps/level_up/public/mario/giphy-14.gif differ diff --git a/apps/level_up/public/mario/giphy-15.gif b/apps/level_up/public/mario/giphy-15.gif new file mode 100644 index 00000000..f4f3c17d Binary files /dev/null and b/apps/level_up/public/mario/giphy-15.gif differ diff --git a/apps/level_up/public/mario/giphy-16.gif b/apps/level_up/public/mario/giphy-16.gif new file mode 100644 index 00000000..e69de29b diff --git a/apps/level_up/public/mario/giphy-2.gif b/apps/level_up/public/mario/giphy-2.gif new file mode 100644 index 00000000..e69de29b diff --git a/apps/level_up/public/mario/giphy-4.gif b/apps/level_up/public/mario/giphy-4.gif new file mode 100644 index 00000000..e69de29b diff --git a/apps/level_up/public/mario/giphy-5.gif b/apps/level_up/public/mario/giphy-5.gif new file mode 100644 index 00000000..e69de29b diff --git a/apps/level_up/public/mario/giphy-6.gif b/apps/level_up/public/mario/giphy-6.gif new file mode 100644 index 00000000..e69de29b diff --git a/apps/level_up/public/mario/giphy-7.gif b/apps/level_up/public/mario/giphy-7.gif new file mode 100644 index 00000000..e69de29b diff --git a/apps/level_up/public/mario/giphy-8.gif b/apps/level_up/public/mario/giphy-8.gif new file mode 100644 index 00000000..e69de29b diff --git a/apps/level_up/public/mario/giphy-9.gif b/apps/level_up/public/mario/giphy-9.gif new file mode 100644 index 00000000..e2f7a491 Binary files /dev/null and b/apps/level_up/public/mario/giphy-9.gif differ diff --git a/apps/level_up/public/mario/giphy-coin.gif b/apps/level_up/public/mario/giphy-coin.gif new file mode 100644 index 00000000..7f4841df Binary files /dev/null and b/apps/level_up/public/mario/giphy-coin.gif differ diff --git a/apps/level_up/public/mario/giphy.gif b/apps/level_up/public/mario/giphy.gif new file mode 100644 index 00000000..e69de29b diff --git a/apps/level_up/public/mario/mario-friends.png b/apps/level_up/public/mario/mario-friends.png new file mode 100644 index 00000000..a00ea5b8 Binary files /dev/null and b/apps/level_up/public/mario/mario-friends.png differ diff --git a/apps/level_up/public/mario/mushroom.gif b/apps/level_up/public/mario/mushroom.gif new file mode 100644 index 00000000..e2f7a491 Binary files /dev/null and b/apps/level_up/public/mario/mushroom.gif differ diff --git a/apps/level_up/public/sound/super-mario-coin-sound.mp3 b/apps/level_up/public/sound/super-mario-coin-sound.mp3 new file mode 100644 index 00000000..7daf22fb Binary files /dev/null and b/apps/level_up/public/sound/super-mario-coin-sound.mp3 differ diff --git a/apps/level_up/public/sound/super-mario-jump-sound.mp3 b/apps/level_up/public/sound/super-mario-jump-sound.mp3 new file mode 100644 index 00000000..9ef5bee2 Binary files /dev/null and b/apps/level_up/public/sound/super-mario-jump-sound.mp3 differ diff --git a/apps/level_up/public/svg/avatar-1.svg b/apps/level_up/public/svg/avatar-1.svg new file mode 100644 index 00000000..20ed393a --- /dev/null +++ b/apps/level_up/public/svg/avatar-1.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/apps/level_up/public/svg/avatar-2.svg b/apps/level_up/public/svg/avatar-2.svg new file mode 100644 index 00000000..84866e9e --- /dev/null +++ b/apps/level_up/public/svg/avatar-2.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/apps/level_up/public/svg/avatar-3.svg b/apps/level_up/public/svg/avatar-3.svg new file mode 100644 index 00000000..d76751a2 --- /dev/null +++ b/apps/level_up/public/svg/avatar-3.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/apps/level_up/public/svg/bubble-light-purple.svg b/apps/level_up/public/svg/bubble-light-purple.svg new file mode 100644 index 00000000..8ddca33e --- /dev/null +++ b/apps/level_up/public/svg/bubble-light-purple.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/level_up/public/svg/bubble-purple.svg b/apps/level_up/public/svg/bubble-purple.svg new file mode 100644 index 00000000..b3937652 --- /dev/null +++ b/apps/level_up/public/svg/bubble-purple.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/level_up/public/svg/bubble-white.svg b/apps/level_up/public/svg/bubble-white.svg new file mode 100644 index 00000000..f3961c56 --- /dev/null +++ b/apps/level_up/public/svg/bubble-white.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/level_up/public/svg/dark-3d-bulb.svg b/apps/level_up/public/svg/dark-3d-bulb.svg new file mode 100644 index 00000000..db7a00fa --- /dev/null +++ b/apps/level_up/public/svg/dark-3d-bulb.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/apps/level_up/public/svg/dark-3d.svg b/apps/level_up/public/svg/dark-3d.svg new file mode 100644 index 00000000..b3bfd8ae --- /dev/null +++ b/apps/level_up/public/svg/dark-3d.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/apps/level_up/public/svg/dark-flat-bulb.svg b/apps/level_up/public/svg/dark-flat-bulb.svg new file mode 100644 index 00000000..bdbe7f7a --- /dev/null +++ b/apps/level_up/public/svg/dark-flat-bulb.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/apps/level_up/public/svg/dark-flat.svg b/apps/level_up/public/svg/dark-flat.svg new file mode 100644 index 00000000..d813d66c --- /dev/null +++ b/apps/level_up/public/svg/dark-flat.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/apps/level_up/public/svg/discord.svg b/apps/level_up/public/svg/discord.svg new file mode 100644 index 00000000..7e5553a6 --- /dev/null +++ b/apps/level_up/public/svg/discord.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/level_up/public/svg/instagram.svg b/apps/level_up/public/svg/instagram.svg new file mode 100644 index 00000000..4e1c525d --- /dev/null +++ b/apps/level_up/public/svg/instagram.svg @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/apps/level_up/public/svg/light-3d-bulb.svg b/apps/level_up/public/svg/light-3d-bulb.svg new file mode 100644 index 00000000..5dc208da --- /dev/null +++ b/apps/level_up/public/svg/light-3d-bulb.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/level_up/public/svg/light-3d.svg b/apps/level_up/public/svg/light-3d.svg new file mode 100644 index 00000000..a7a0da73 --- /dev/null +++ b/apps/level_up/public/svg/light-3d.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/level_up/public/svg/light-flat-bulb.svg b/apps/level_up/public/svg/light-flat-bulb.svg new file mode 100644 index 00000000..1523acc9 --- /dev/null +++ b/apps/level_up/public/svg/light-flat-bulb.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/apps/level_up/public/svg/light-flat.svg b/apps/level_up/public/svg/light-flat.svg new file mode 100644 index 00000000..82c17e39 --- /dev/null +++ b/apps/level_up/public/svg/light-flat.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/apps/level_up/public/svg/pattern.svg b/apps/level_up/public/svg/pattern.svg new file mode 100644 index 00000000..df3bb833 --- /dev/null +++ b/apps/level_up/public/svg/pattern.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/level_up/public/svg/prize-1.svg b/apps/level_up/public/svg/prize-1.svg new file mode 100644 index 00000000..480a6bf5 --- /dev/null +++ b/apps/level_up/public/svg/prize-1.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/level_up/public/svg/prize-2.svg b/apps/level_up/public/svg/prize-2.svg new file mode 100644 index 00000000..fc63de5a --- /dev/null +++ b/apps/level_up/public/svg/prize-2.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/level_up/public/svg/prize-3.svg b/apps/level_up/public/svg/prize-3.svg new file mode 100644 index 00000000..32c2851d --- /dev/null +++ b/apps/level_up/public/svg/prize-3.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/level_up/public/svg/sad-craft.svg b/apps/level_up/public/svg/sad-craft.svg new file mode 100644 index 00000000..ae2a570b --- /dev/null +++ b/apps/level_up/public/svg/sad-craft.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/level_up/public/svg/telegram.svg b/apps/level_up/public/svg/telegram.svg new file mode 100644 index 00000000..1a7942a9 --- /dev/null +++ b/apps/level_up/public/svg/telegram.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/level_up/public/svg/timline-1.svg b/apps/level_up/public/svg/timline-1.svg new file mode 100644 index 00000000..ae444367 --- /dev/null +++ b/apps/level_up/public/svg/timline-1.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/level_up/public/svg/timline-2.svg b/apps/level_up/public/svg/timline-2.svg new file mode 100644 index 00000000..b46a42e4 --- /dev/null +++ b/apps/level_up/public/svg/timline-2.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/level_up/public/svg/timline-3.svg b/apps/level_up/public/svg/timline-3.svg new file mode 100644 index 00000000..018c24b4 --- /dev/null +++ b/apps/level_up/public/svg/timline-3.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/apps/level_up/public/svg/timline-4.svg b/apps/level_up/public/svg/timline-4.svg new file mode 100644 index 00000000..6c700cb8 --- /dev/null +++ b/apps/level_up/public/svg/timline-4.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/level_up/public/svg/timline-5.svg b/apps/level_up/public/svg/timline-5.svg new file mode 100644 index 00000000..c862488a --- /dev/null +++ b/apps/level_up/public/svg/timline-5.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/level_up/public/svg/timline-6.svg b/apps/level_up/public/svg/timline-6.svg new file mode 100644 index 00000000..90dac91d --- /dev/null +++ b/apps/level_up/public/svg/timline-6.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/level_up/public/svg/twitter.svg b/apps/level_up/public/svg/twitter.svg new file mode 100644 index 00000000..1de45e6e --- /dev/null +++ b/apps/level_up/public/svg/twitter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/level_up/public/svg/wave-green.svg b/apps/level_up/public/svg/wave-green.svg new file mode 100644 index 00000000..141d64cf --- /dev/null +++ b/apps/level_up/public/svg/wave-green.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/level_up/public/svg/wave-purple-light.svg b/apps/level_up/public/svg/wave-purple-light.svg new file mode 100644 index 00000000..e698f190 --- /dev/null +++ b/apps/level_up/public/svg/wave-purple-light.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/level_up/public/svg/wave-purple.svg b/apps/level_up/public/svg/wave-purple.svg new file mode 100644 index 00000000..05cd1d40 --- /dev/null +++ b/apps/level_up/public/svg/wave-purple.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/level_up/tailwind.config.ts b/apps/level_up/tailwind.config.ts new file mode 100644 index 00000000..7b3f2823 --- /dev/null +++ b/apps/level_up/tailwind.config.ts @@ -0,0 +1,65 @@ +import type { Config } from "tailwindcss"; + +const config: Config = { + content: [ + "./pages/**/*.{js,ts,jsx,tsx,mdx}", + "./components/**/*.{js,ts,jsx,tsx,mdx}", + "./app/**/*.{js,ts,jsx,tsx,mdx}", + "./lib/**/*.{js,ts,jsx,tsx,mdx}", + "../../packages/ui/src/**/*.{js,ts,jsx,tsx,mdx}", + ], + theme: { + extend: { + fontFamily: { + estedad: ["Estedad", "sans-serif"], + vazirmatn: ["Vazirmatn", "sans-serif"], + "iran-yekan": ["IRANYekanX", "sans-serif"], + "sf-pro": ["SF Pro Rounded", "sans-serif"], + }, + colors: { + // Your custom brand colors + primary: "#0056D2", // Bright blue + action: "#00C897", // Fresh green accent + "offline-workshop": "#4E6E81", // Muted teal + + // Ant Design theme colors extracted from provider + "antd-primary": "#0056D2", + "antd-primary-hover": "#1E6DEB", + "antd-primary-active": "#0041A8", + "antd-success": "#00C897", + "antd-warning": "#FFC93C", + "antd-error": "#FF5A5F", + + // Light theme colors + "antd-bg-base": "#ffffff", + "antd-bg-container": "#f9fafb", + "antd-bg-elevated": "#ffffff", + "antd-text": "#1a1a1a", + "antd-text-secondary": "#4b5563", + "antd-layout-header": "#0056D2", + "antd-layout-body": "#f4f6f8", + + // Dark theme colors + "antd-dark-bg-base": "#0F172A", + "antd-dark-bg-container": "#1E293B", + "antd-dark-bg-elevated": "#27364A", + "antd-dark-text": "#F8FAFC", + "antd-dark-text-secondary": "#CBD5E1", + "antd-dark-layout-header": "#0056D2", + "antd-dark-layout-body": "#0F172A", + }, + backgroundImage: { + "gradient-radial": "radial-gradient(var(--tw-gradient-stops))", + "gradient-conic": + "conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))", + }, + }, + }, + plugins: [], + darkMode: "class", + corePlugins: { + preflight: false, // Disable to avoid conflicts with Ant Design + }, +}; + +export default config; diff --git a/apps/level_up/tsconfig.json b/apps/level_up/tsconfig.json new file mode 100644 index 00000000..b5a17653 --- /dev/null +++ b/apps/level_up/tsconfig.json @@ -0,0 +1,33 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "outDir": "dist", + "allowJs": true, + "skipLibCheck": true, + "strict": false, + "noEmit": true, + "incremental": true, + "module": "esnext", + "esModuleInterop": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "plugins": [ + { + "name": "next" + } + ], + "target": "ES2017", + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 70ad0103..bcc41d2e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -119,6 +119,109 @@ importers: specifier: ^5.9.2 version: 5.9.2 + apps/level_up: + dependencies: + '@ant-design/icons': + specifier: ^6.0.0 + version: 6.0.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@ant-design/nextjs-registry': + specifier: ^1.1.0 + version: 1.1.0(@ant-design/cssinjs@1.24.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(antd@5.27.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@ant-design/v5-patch-for-react-19': + specifier: ^1.0.3 + version: 1.0.3(antd@5.27.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@bprogress/next': + specifier: ^3.2.12 + version: 3.2.12(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@lottiefiles/dotlottie-react': + specifier: ^0.15.2 + version: 0.15.2(react@19.1.1) + '@reduxjs/toolkit': + specifier: ^2.9.0 + version: 2.9.0(react-redux@9.2.0(@types/react@19.1.12)(react@19.1.1)(redux@5.0.1))(react@19.1.1) + '@ssc/core': + specifier: workspace:* + version: link:../../packages/core + '@ssc/ui': + specifier: workspace:* + version: link:../../packages/ui + '@ssc/utils': + specifier: workspace:* + version: link:../../packages/utils + antd: + specifier: ^5.27.1 + version: 5.27.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + axios: + specifier: ^1.11.0 + version: 1.11.0 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + howler: + specifier: ^2.2.4 + version: 2.2.4 + next: + specifier: ^15.5.2 + version: 15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + next-auth: + specifier: ^4.24.11 + version: 4.24.11(@auth/core@0.34.2)(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + next-intl: + specifier: ^3.26.5 + version: 3.26.5(next@15.5.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1) + next-themes: + specifier: ^0.4.6 + version: 0.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: + specifier: ^19.1.1 + version: 19.1.1 + react-dom: + specifier: ^19.1.1 + version: 19.1.1(react@19.1.1) + react-icons: + specifier: ^5.5.0 + version: 5.5.0(react@19.1.1) + react-lottie: + specifier: ^1.2.10 + version: 1.2.10(react@19.1.1) + react-redux: + specifier: ^9.2.0 + version: 9.2.0(@types/react@19.1.12)(react@19.1.1)(redux@5.0.1) + react-responsive: + specifier: ^10.0.1 + version: 10.0.1(react@19.1.1) + react-toastify: + specifier: ^11.0.5 + version: 11.0.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + devDependencies: + '@next/bundle-analyzer': + specifier: ^15.5.2 + version: 15.5.2 + '@ssc/tailwind-config': + specifier: workspace:* + version: link:../../packages/tailwind-config + '@types/node': + specifier: ^22.18.0 + version: 22.18.0 + '@types/react': + specifier: ^19.1.12 + version: 19.1.12 + '@types/react-dom': + specifier: ^19.1.9 + version: 19.1.9(@types/react@19.1.12) + autoprefixer: + specifier: ^10.4.21 + version: 10.4.21(postcss@8.5.6) + postcss: + specifier: ^8.5.6 + version: 8.5.6 + tailwindcss: + specifier: ^3.4.17 + version: 3.4.17 + typescript: + specifier: ^5.9.2 + version: 5.9.2 + apps/ssc: dependencies: '@auth/core': @@ -275,10 +378,10 @@ importers: version: 9.0.17(@types/react@19.1.8)(storybook@9.0.17(@testing-library/dom@10.4.0)) '@storybook/addon-vitest': specifier: ^9.0.17 - version: 9.0.17(@vitest/browser@3.2.4(playwright@1.54.1)(vite@7.0.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))(vitest@3.2.4))(@vitest/runner@3.2.4)(react-dom@19.1.1(react@19.1.0))(react@19.1.0)(storybook@9.0.17(@testing-library/dom@10.4.0))(vitest@3.2.4(@types/node@24.5.1)(@vitest/browser@3.2.4)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 9.0.17(@vitest/browser@3.2.4(playwright@1.54.1)(vite@7.0.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))(vitest@3.2.4))(@vitest/runner@3.2.4)(react-dom@19.1.1(react@19.1.1))(react@19.1.0)(storybook@9.0.17(@testing-library/dom@10.4.0))(vitest@3.2.4(@types/node@24.5.1)(@vitest/browser@3.2.4)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)) '@storybook/react-vite': specifier: ^9.0.17 - version: 9.0.17(react-dom@19.1.1(react@19.1.0))(react@19.1.0)(rollup@4.45.1)(storybook@9.0.17(@testing-library/dom@10.4.0))(typescript@5.8.3)(vite@7.0.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)) + version: 9.0.17(react-dom@19.1.1(react@19.1.1))(react@19.1.0)(rollup@4.45.1)(storybook@9.0.17(@testing-library/dom@10.4.0))(typescript@5.8.3)(vite@7.0.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)) '@vitest/browser': specifier: ^3.2.4 version: 3.2.4(playwright@1.54.1)(vite@7.0.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))(vitest@3.2.4) @@ -5204,11 +5307,11 @@ snapshots: '@lottiefiles/dotlottie-web@0.50.2': {} - '@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.0)': + '@mdx-js/react@3.1.0(@types/react@19.1.8)(react@19.1.1)': dependencies: '@types/mdx': 2.0.13 '@types/react': 19.1.8 - react: 19.1.0 + react: 19.1.1 '@napi-rs/wasm-runtime@0.2.11': dependencies: @@ -5487,21 +5590,21 @@ snapshots: '@storybook/addon-docs@9.0.17(@types/react@19.1.8)(storybook@9.0.17(@testing-library/dom@10.4.0))': dependencies: - '@mdx-js/react': 3.1.0(@types/react@19.1.8)(react@19.1.0) + '@mdx-js/react': 3.1.0(@types/react@19.1.8)(react@19.1.1) '@storybook/csf-plugin': 9.0.17(storybook@9.0.17(@testing-library/dom@10.4.0)) - '@storybook/icons': 1.4.0(react-dom@19.1.1(react@19.1.0))(react@19.1.0) - '@storybook/react-dom-shim': 9.0.17(react-dom@19.1.1(react@19.1.0))(react@19.1.0)(storybook@9.0.17(@testing-library/dom@10.4.0)) - react: 19.1.0 + '@storybook/icons': 1.4.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@storybook/react-dom-shim': 9.0.17(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(storybook@9.0.17(@testing-library/dom@10.4.0)) + react: 19.1.1 react-dom: 19.1.1(react@19.1.0) storybook: 9.0.17(@testing-library/dom@10.4.0) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - '@storybook/addon-vitest@9.0.17(@vitest/browser@3.2.4(playwright@1.54.1)(vite@7.0.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))(vitest@3.2.4))(@vitest/runner@3.2.4)(react-dom@19.1.1(react@19.1.0))(react@19.1.0)(storybook@9.0.17(@testing-library/dom@10.4.0))(vitest@3.2.4(@types/node@24.5.1)(@vitest/browser@3.2.4)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))': + '@storybook/addon-vitest@9.0.17(@vitest/browser@3.2.4(playwright@1.54.1)(vite@7.0.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))(vitest@3.2.4))(@vitest/runner@3.2.4)(react-dom@19.1.1(react@19.1.1))(react@19.1.0)(storybook@9.0.17(@testing-library/dom@10.4.0))(vitest@3.2.4(@types/node@24.5.1)(@vitest/browser@3.2.4)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))': dependencies: '@storybook/global': 5.0.0 - '@storybook/icons': 1.4.0(react-dom@19.1.1(react@19.1.0))(react@19.1.0) + '@storybook/icons': 1.4.0(react-dom@19.1.1(react@19.1.1))(react@19.1.0) prompts: 2.4.2 storybook: 9.0.17(@testing-library/dom@10.4.0) ts-dedent: 2.2.0 @@ -5527,23 +5630,34 @@ snapshots: '@storybook/global@5.0.0': {} - '@storybook/icons@1.4.0(react-dom@19.1.1(react@19.1.0))(react@19.1.0)': + '@storybook/icons@1.4.0(react-dom@19.1.1(react@19.1.1))(react@19.1.0)': dependencies: react: 19.1.0 react-dom: 19.1.1(react@19.1.0) - '@storybook/react-dom-shim@9.0.17(react-dom@19.1.1(react@19.1.0))(react@19.1.0)(storybook@9.0.17(@testing-library/dom@10.4.0))': + '@storybook/icons@1.4.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + dependencies: + react: 19.1.1 + react-dom: 19.1.1(react@19.1.0) + + '@storybook/react-dom-shim@9.0.17(react-dom@19.1.1(react@19.1.1))(react@19.1.0)(storybook@9.0.17(@testing-library/dom@10.4.0))': dependencies: react: 19.1.0 react-dom: 19.1.1(react@19.1.0) storybook: 9.0.17(@testing-library/dom@10.4.0) - '@storybook/react-vite@9.0.17(react-dom@19.1.1(react@19.1.0))(react@19.1.0)(rollup@4.45.1)(storybook@9.0.17(@testing-library/dom@10.4.0))(typescript@5.8.3)(vite@7.0.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))': + '@storybook/react-dom-shim@9.0.17(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(storybook@9.0.17(@testing-library/dom@10.4.0))': + dependencies: + react: 19.1.1 + react-dom: 19.1.1(react@19.1.0) + storybook: 9.0.17(@testing-library/dom@10.4.0) + + '@storybook/react-vite@9.0.17(react-dom@19.1.1(react@19.1.1))(react@19.1.0)(rollup@4.45.1)(storybook@9.0.17(@testing-library/dom@10.4.0))(typescript@5.8.3)(vite@7.0.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0))': dependencies: '@joshwooding/vite-plugin-react-docgen-typescript': 0.6.1(typescript@5.8.3)(vite@7.0.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)) '@rollup/pluginutils': 5.2.0(rollup@4.45.1) '@storybook/builder-vite': 9.0.17(storybook@9.0.17(@testing-library/dom@10.4.0))(vite@7.0.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(yaml@2.8.0)) - '@storybook/react': 9.0.17(react-dom@19.1.1(react@19.1.0))(react@19.1.0)(storybook@9.0.17(@testing-library/dom@10.4.0))(typescript@5.8.3) + '@storybook/react': 9.0.17(react-dom@19.1.1(react@19.1.1))(react@19.1.0)(storybook@9.0.17(@testing-library/dom@10.4.0))(typescript@5.8.3) find-up: 7.0.0 magic-string: 0.30.17 react: 19.1.0 @@ -5558,10 +5672,10 @@ snapshots: - supports-color - typescript - '@storybook/react@9.0.17(react-dom@19.1.1(react@19.1.0))(react@19.1.0)(storybook@9.0.17(@testing-library/dom@10.4.0))(typescript@5.8.3)': + '@storybook/react@9.0.17(react-dom@19.1.1(react@19.1.1))(react@19.1.0)(storybook@9.0.17(@testing-library/dom@10.4.0))(typescript@5.8.3)': dependencies: '@storybook/global': 5.0.0 - '@storybook/react-dom-shim': 9.0.17(react-dom@19.1.1(react@19.1.0))(react@19.1.0)(storybook@9.0.17(@testing-library/dom@10.4.0)) + '@storybook/react-dom-shim': 9.0.17(react-dom@19.1.1(react@19.1.1))(react@19.1.0)(storybook@9.0.17(@testing-library/dom@10.4.0)) react: 19.1.0 react-dom: 19.1.1(react@19.1.0) storybook: 9.0.17(@testing-library/dom@10.4.0) @@ -7465,7 +7579,7 @@ snapshots: next-auth@4.24.11(@auth/core@0.34.2)(next@15.3.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - '@babel/runtime': 7.27.6 + '@babel/runtime': 7.28.3 '@panva/hkdf': 1.2.1 cookie: 0.7.2 jose: 4.15.9