From 470a852f0f583af3622ce7cfab2059334a2275e0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Yoannis=20S=C3=A1nchez=20Soto?=
Date: Tue, 16 Apr 2024 07:40:09 -0400
Subject: [PATCH] First Commit
---
.editorconfig | 10 +
.eslintignore | 5 +
.eslintrc.json | 30 +++
.gitignore | 41 ++++
.prettierignore | 12 +
.vscode/settings.json | 4 +
LICENCE.md | 21 ++
README.md | 22 ++
app/icon.svg | 10 +
app/layout.tsx | 66 ++++++
app/page.tsx | 143 ++++++++++++
components.json | 15 ++
components/counters/countdown.tsx | 36 +++
components/counters/counters-section.tsx | 58 +++++
components/counters/realtime-countdown.tsx | 42 ++++
components/footer.tsx | 10 +
components/icons.tsx | 41 ++++
components/main-nav.tsx | 41 ++++
components/site-header.tsx | 54 +++++
components/tailwind-indicator.tsx | 14 ++
components/theme-provider.tsx | 9 +
components/theme-toggle.tsx | 23 ++
components/ui/button.tsx | 56 +++++
components/ui/carousel.tsx | 260 +++++++++++++++++++++
components/ui/dialog.tsx | 120 ++++++++++
components/ui/input.tsx | 25 ++
components/ui/label.tsx | 24 ++
components/ui/meteors.tsx | 35 +++
components/ui/progress.tsx | 26 +++
components/ui/scroll-area.tsx | 46 ++++
components/ui/spinning-number.tsx | 104 +++++++++
components/ui/wave-progressbar.tsx | 27 +++
config/site.ts | 14 ++
docs/banner.png | Bin 0 -> 155358 bytes
lib/fonts.ts | 11 +
lib/utils.ts | 6 +
next-env.d.ts | 5 +
next.config.mjs | 18 ++
package.json | 62 +++++
postcss.config.js | 6 +
prettier.config.js | 32 +++
public/favicon.ico | Bin 0 -> 25931 bytes
public/favicon.svg | 10 +
public/google2cd5e5f412650d96.html | 1 +
public/next.svg | 1 +
public/og.png | Bin 0 -> 192774 bytes
public/thirteen.svg | 1 +
public/vercel.svg | 1 +
styles/globals.css | 64 +++++
tailwind.config.js | 85 +++++++
tsconfig.json | 36 +++
tsconfig.tsbuildinfo | 1 +
types/nav.ts | 6 +
53 files changed, 1790 insertions(+)
create mode 100644 .editorconfig
create mode 100644 .eslintignore
create mode 100644 .eslintrc.json
create mode 100644 .gitignore
create mode 100644 .prettierignore
create mode 100644 .vscode/settings.json
create mode 100644 LICENCE.md
create mode 100644 README.md
create mode 100644 app/icon.svg
create mode 100644 app/layout.tsx
create mode 100644 app/page.tsx
create mode 100644 components.json
create mode 100644 components/counters/countdown.tsx
create mode 100644 components/counters/counters-section.tsx
create mode 100644 components/counters/realtime-countdown.tsx
create mode 100644 components/footer.tsx
create mode 100644 components/icons.tsx
create mode 100644 components/main-nav.tsx
create mode 100644 components/site-header.tsx
create mode 100644 components/tailwind-indicator.tsx
create mode 100644 components/theme-provider.tsx
create mode 100644 components/theme-toggle.tsx
create mode 100644 components/ui/button.tsx
create mode 100644 components/ui/carousel.tsx
create mode 100644 components/ui/dialog.tsx
create mode 100644 components/ui/input.tsx
create mode 100644 components/ui/label.tsx
create mode 100644 components/ui/meteors.tsx
create mode 100644 components/ui/progress.tsx
create mode 100644 components/ui/scroll-area.tsx
create mode 100644 components/ui/spinning-number.tsx
create mode 100644 components/ui/wave-progressbar.tsx
create mode 100644 config/site.ts
create mode 100644 docs/banner.png
create mode 100644 lib/fonts.ts
create mode 100644 lib/utils.ts
create mode 100644 next-env.d.ts
create mode 100644 next.config.mjs
create mode 100644 package.json
create mode 100644 postcss.config.js
create mode 100644 prettier.config.js
create mode 100644 public/favicon.ico
create mode 100644 public/favicon.svg
create mode 100644 public/google2cd5e5f412650d96.html
create mode 100644 public/next.svg
create mode 100644 public/og.png
create mode 100644 public/thirteen.svg
create mode 100644 public/vercel.svg
create mode 100644 styles/globals.css
create mode 100644 tailwind.config.js
create mode 100644 tsconfig.json
create mode 100644 tsconfig.tsbuildinfo
create mode 100644 types/nav.ts
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..ae10a5c
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,10 @@
+# editorconfig.org
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+indent_size = 2
+indent_style = space
+insert_final_newline = true
+trim_trailing_whitespace = true
diff --git a/.eslintignore b/.eslintignore
new file mode 100644
index 0000000..dc0f9d8
--- /dev/null
+++ b/.eslintignore
@@ -0,0 +1,5 @@
+dist/*
+.cache
+public
+node_modules
+*.esm.js
diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644
index 0000000..fe113b7
--- /dev/null
+++ b/.eslintrc.json
@@ -0,0 +1,30 @@
+{
+ "$schema": "https://json.schemastore.org/eslintrc",
+ "root": true,
+ "extends": [
+ "next/core-web-vitals",
+ "prettier",
+ "plugin:tailwindcss/recommended"
+ ],
+ "plugins": ["tailwindcss"],
+ "rules": {
+ "@next/next/no-html-link-for-pages": "off",
+ "react/jsx-key": "off",
+ "tailwindcss/no-custom-classname": "off"
+ },
+ "settings": {
+ "tailwindcss": {
+ "callees": ["cn"],
+ "config": "tailwind.config.js"
+ },
+ "next": {
+ "rootDir": ["./"]
+ }
+ },
+ "overrides": [
+ {
+ "files": ["*.ts", "*.tsx"],
+ "parser": "@typescript-eslint/parser"
+ }
+ ]
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1f612e8
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,41 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+node_modules
+.pnp
+.pnp.js
+yarn.lock
+.yarnrc.yml
+.yarn/
+
+# testing
+coverage
+
+# next.js
+.next/
+out/
+build
+
+
+# misc
+.DS_Store
+*.pem
+public/ai-data/
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+.pnpm-debug.log*
+
+# local env files
+.env.local
+.env.development.local
+.env.test.local
+.env.production.local
+
+# turbo
+.turbo
+
+.contentlayer
+.env
\ No newline at end of file
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 0000000..2f73093
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,12 @@
+cache
+.cache
+package.json
+package-lock.json
+public
+CHANGELOG.md
+.yarn
+dist
+node_modules
+.next
+build
+.contentlayer
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..99438eb
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,4 @@
+{
+ "typescript.tsdk": "../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib",
+ "typescript.enablePromptUseWorkspaceTsdk": true
+}
diff --git a/LICENCE.md b/LICENCE.md
new file mode 100644
index 0000000..59e4abb
--- /dev/null
+++ b/LICENCE.md
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2023 Yoannis Sánchez Soto
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..4f9d1dd
--- /dev/null
+++ b/README.md
@@ -0,0 +1,22 @@
+Year Progress 📅
+
+
+📅 New Year Countdown. It shows the remaining days, hours, minutes, and seconds until the new year arrives. 🥳🎉
+
+
+
+year-progress.pages.dev
+
+
+![blog](docs/banner.png)
+
+
+
+## ⚖️ License
+
+Licensed under the [MIT license](https://github.com/shadcn/ui/blob/main/LICENSE.md).
diff --git a/app/icon.svg b/app/icon.svg
new file mode 100644
index 0000000..c3a718f
--- /dev/null
+++ b/app/icon.svg
@@ -0,0 +1,10 @@
+
+
\ No newline at end of file
diff --git a/app/layout.tsx b/app/layout.tsx
new file mode 100644
index 0000000..33a7826
--- /dev/null
+++ b/app/layout.tsx
@@ -0,0 +1,66 @@
+import "@/styles/globals.css"
+import { Metadata } from "next"
+
+import { siteConfig } from "@/config/site"
+import { fontSans } from "@/lib/fonts"
+import { cn } from "@/lib/utils"
+import { Meteors } from "@/components/ui/meteors"
+import { Footer } from "@/components/footer"
+import { SiteHeader } from "@/components/site-header"
+import { TailwindIndicator } from "@/components/tailwind-indicator"
+import { ThemeProvider } from "@/components/theme-provider"
+
+export const metadata: Metadata = {
+ title: {
+ default: siteConfig.name,
+ template: `%s - ${siteConfig.name}`,
+ },
+ description: siteConfig.description,
+ themeColor: [
+ { media: "(prefers-color-scheme: light)", color: "white" },
+ { media: "(prefers-color-scheme: dark)", color: "black" },
+ ],
+ openGraph: {
+ images: [
+ {
+ url: "https://year-progress.pages.dev/og.png",
+ },
+ ],
+ },
+ icons: {
+ icon: "/favicon.svg",
+ shortcut: "/favicon-16x16.png",
+ apple: "/apple-touch-icon.png",
+ },
+}
+
+interface RootLayoutProps {
+ children: React.ReactNode
+}
+
+export default function RootLayout({ children }: RootLayoutProps) {
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+ >
+ )
+}
diff --git a/app/page.tsx b/app/page.tsx
new file mode 100644
index 0000000..fda4a31
--- /dev/null
+++ b/app/page.tsx
@@ -0,0 +1,143 @@
+"use client"
+
+import { FormEvent, useState } from "react"
+import Image from "next/image"
+import imglyRemoveBackground, { Config } from "@imgly/background-removal"
+import { Download, ImageIcon } from "lucide-react"
+
+import { Button } from "@/components/ui/button"
+import {
+ Dialog,
+ DialogContent,
+ DialogDescription,
+ DialogHeader,
+ DialogTitle,
+} from "@/components/ui/dialog"
+import { Input } from "@/components/ui/input"
+import { Progress } from "@/components/ui/progress"
+
+export default function IndexPage() {
+ const [showDialog, setShowDialog] = useState(false)
+ const [dialogText, setDialogText] = useState("null")
+ const [dialogProgress, setDialogProgress] = useState(0)
+ const [dialogTotal, setDialogTotal] = useState(100)
+
+ const [imageData, setImageData] = useState(null)
+ const [resultData, setResultData] = useState(null)
+
+ const handleDataChange = (e: any) => {
+ const file = e.target.files[0]
+ const url = URL.createObjectURL(file)
+
+ if (file) setImageData(url)
+ }
+
+ const handleDownload = () => {
+ const link = document.createElement("a")
+ link.href = resultData!
+ link.download = resultData!
+ link.click()
+ }
+
+ const remove = (ev: FormEvent) => {
+ ev.preventDefault()
+ let config: Config = {
+ debug: true,
+ publicPath: "http://localhost:3000/ai-data/", // path to the wasm files
+ progress: (key, current, total) => {
+ console.log(`Downloading ${key}: ${current} of ${total}`)
+ setShowDialog(true)
+ setDialogProgress(current)
+ setDialogTotal(total)
+ setDialogText(key)
+
+ if (current === total && key === "compute:inference")
+ setShowDialog(false)
+ },
+ }
+
+ if (imageData) {
+ imglyRemoveBackground(imageData!, config).then((blob: Blob) => {
+ // result is a blob encoded as PNG.
+ // It can be converted to an URL to be used as HTMLImage.src
+ const url = URL.createObjectURL(blob)
+
+ setResultData(url)
+ })
+ }
+ }
+
+ return (
+
+ {/* Form */}
+
+
+ {/* Images */}
+
+ {imageData ? (
+
+ ) : (
+
+
+
+ )}
+ {resultData ? (
+
+
+
+ ) : (
+
+
+
+ )}
+
+
+ {/* Tools */}
+
+
+
+
+
+
+ )
+}
diff --git a/components.json b/components.json
new file mode 100644
index 0000000..f8ce0ad
--- /dev/null
+++ b/components.json
@@ -0,0 +1,15 @@
+{
+ "$schema": "https://ui.shadcn.com/schema.json",
+ "style": "default",
+ "tailwind": {
+ "config": "tailwind.config.js",
+ "css": "app/globals.css",
+ "baseColor": "neutral",
+ "cssVariables": true
+ },
+ "rsc": false,
+ "aliases": {
+ "utils": "@/lib/utils",
+ "components": "@/components"
+ }
+}
diff --git a/components/counters/countdown.tsx b/components/counters/countdown.tsx
new file mode 100644
index 0000000..1a5dbe7
--- /dev/null
+++ b/components/counters/countdown.tsx
@@ -0,0 +1,36 @@
+"use client"
+
+import { useEffect, useState } from "react"
+
+import { SpinningNumber } from "../ui/spinning-number"
+
+type Props = {
+ value: number
+ type?: "seconds" | "minutes" | "custom"
+}
+
+export const Countdown: React.FC = ({ type = "custom", value }) => {
+ const [val, setValue] = useState(value)
+
+ useEffect(() => {
+ if (type !== "custom") {
+ const interval = setInterval(
+ () => {
+ setValue(val - 1)
+ },
+ type === "seconds" ? 1000 : 60000
+ )
+ return () => {
+ clearInterval(interval)
+ }
+ }
+ }, [type, val])
+
+ return (
+
+ )
+}
diff --git a/components/counters/counters-section.tsx b/components/counters/counters-section.tsx
new file mode 100644
index 0000000..b50d3fc
--- /dev/null
+++ b/components/counters/counters-section.tsx
@@ -0,0 +1,58 @@
+"use client"
+
+import { DateTime } from "luxon"
+
+import { SpinningNumber } from "../ui/spinning-number"
+import WaveProgressbar from "../ui/wave-progressbar"
+import { Countdown } from "./countdown"
+
+export const CounterSection = () => {
+ const now = DateTime.now()
+
+ const startOfYear = DateTime.local().set({ month: 0, day: 1 })
+ const endOfYear = DateTime.local().set({ month: 12, day: 31 })
+ const timeLeft = endOfYear.diff(now, ["days", "hours", "minutes", "seconds"])
+
+ const totalDays = endOfYear.diff(startOfYear).as("days")
+ const daysPassed = now.diff(startOfYear).as("days")
+ const percentageCompleted = (daysPassed / totalDays) * 100
+
+ return (
+ <>
+ {/* Counters */}
+
+
+
+
+
+
+
+ >
+ )
+}
diff --git a/components/counters/realtime-countdown.tsx b/components/counters/realtime-countdown.tsx
new file mode 100644
index 0000000..4cda552
--- /dev/null
+++ b/components/counters/realtime-countdown.tsx
@@ -0,0 +1,42 @@
+"use client"
+
+import { useEffect, useState } from "react"
+
+export const RealtimeCountdown = () => {
+ const [timeLeft, setTimeleft] = useState(getTimeLeft())
+
+ function getTimeLeft() {
+ const now = new Date()
+ const endOfYear = new Date(now.getFullYear() + 1, 0, 1) // End of this year
+
+ const difference = endOfYear.getTime() - now.getTime()
+
+ const seconds = Math.floor(difference / 1000)
+ const minutes = Math.floor(seconds / 60)
+ const hours = Math.floor(minutes / 60)
+ const days = Math.floor(hours / 24)
+ const months = Math.floor(days / 30)
+
+ const timeLeft = {
+ months: months,
+ days: days % 30,
+ hours: hours % 24,
+ minutes: minutes % 60,
+ seconds: seconds % 60,
+ }
+
+ return timeLeft
+ }
+
+ useEffect(() => {
+ const interval = setInterval(() => {
+ setTimeleft(getTimeLeft())
+ }, 1000)
+
+ return () => clearInterval(interval)
+ }, [timeLeft])
+
+ return (
+ {`${timeLeft.months} months, ${timeLeft.days} days, ${timeLeft.hours} hours, ${timeLeft.minutes} minutes, ${timeLeft.seconds} seconds`}
+ )
+}
diff --git a/components/footer.tsx b/components/footer.tsx
new file mode 100644
index 0000000..a316922
--- /dev/null
+++ b/components/footer.tsx
@@ -0,0 +1,10 @@
+export const Footer = () => {
+ return (
+
+ Made by{" "}
+
+ @yossthedev
+
+
+ )
+}
diff --git a/components/icons.tsx b/components/icons.tsx
new file mode 100644
index 0000000..e3c97ba
--- /dev/null
+++ b/components/icons.tsx
@@ -0,0 +1,41 @@
+import {
+ LucideProps,
+ Moon,
+ SunMedium,
+ Twitter,
+ type Icon as LucideIcon,
+} from "lucide-react"
+
+export type Icon = LucideIcon
+
+export const Icons = {
+ sun: SunMedium,
+ moon: Moon,
+ twitter: Twitter,
+ logo: (props: LucideProps) => (
+
+ ),
+ gitHub: (props: LucideProps) => (
+
+ ),
+}
diff --git a/components/main-nav.tsx b/components/main-nav.tsx
new file mode 100644
index 0000000..79e0b88
--- /dev/null
+++ b/components/main-nav.tsx
@@ -0,0 +1,41 @@
+import * as React from "react"
+import Link from "next/link"
+
+import { NavItem } from "@/types/nav"
+import { siteConfig } from "@/config/site"
+import { cn } from "@/lib/utils"
+import { Icons } from "@/components/icons"
+
+interface MainNavProps {
+ items?: NavItem[]
+}
+
+export function MainNav({ items }: MainNavProps) {
+ return (
+
+
+
+ Removerized
+
+ {items?.length ? (
+
+ ) : null}
+
+ )
+}
diff --git a/components/site-header.tsx b/components/site-header.tsx
new file mode 100644
index 0000000..e05ff4c
--- /dev/null
+++ b/components/site-header.tsx
@@ -0,0 +1,54 @@
+"use client"
+
+import Link from "next/link"
+
+import { siteConfig } from "@/config/site"
+import { buttonVariants } from "@/components/ui/button"
+import { Icons } from "@/components/icons"
+import { MainNav } from "@/components/main-nav"
+import { ThemeToggle } from "@/components/theme-toggle"
+
+export function SiteHeader() {
+ return (
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/components/tailwind-indicator.tsx b/components/tailwind-indicator.tsx
new file mode 100644
index 0000000..535e074
--- /dev/null
+++ b/components/tailwind-indicator.tsx
@@ -0,0 +1,14 @@
+export function TailwindIndicator() {
+ if (process.env.NODE_ENV === "production") return null
+
+ return (
+
+
xs
+
sm
+
md
+
lg
+
xl
+
2xl
+
+ )
+}
diff --git a/components/theme-provider.tsx b/components/theme-provider.tsx
new file mode 100644
index 0000000..8c90fbc
--- /dev/null
+++ b/components/theme-provider.tsx
@@ -0,0 +1,9 @@
+"use client"
+
+import * as React from "react"
+import { ThemeProvider as NextThemesProvider } from "next-themes"
+import { type ThemeProviderProps } from "next-themes/dist/types"
+
+export function ThemeProvider({ children, ...props }: ThemeProviderProps) {
+ return {children}
+}
diff --git a/components/theme-toggle.tsx b/components/theme-toggle.tsx
new file mode 100644
index 0000000..01e846c
--- /dev/null
+++ b/components/theme-toggle.tsx
@@ -0,0 +1,23 @@
+"use client"
+
+import * as React from "react"
+import { Moon, Sun } from "lucide-react"
+import { useTheme } from "next-themes"
+
+import { Button } from "@/components/ui/button"
+
+export function ThemeToggle() {
+ const { setTheme, theme } = useTheme()
+
+ return (
+
+ )
+}
diff --git a/components/ui/button.tsx b/components/ui/button.tsx
new file mode 100644
index 0000000..bb9b91a
--- /dev/null
+++ b/components/ui/button.tsx
@@ -0,0 +1,56 @@
+import * as React from "react"
+import { Slot } from "@radix-ui/react-slot"
+import { cva, type VariantProps } from "class-variance-authority"
+
+import { cn } from "@/lib/utils"
+
+const buttonVariants = cva(
+ "inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:opacity-50 disabled:pointer-events-none ring-offset-background",
+ {
+ variants: {
+ variant: {
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
+ destructive:
+ "bg-destructive text-destructive-foreground hover:bg-destructive/90",
+ outline:
+ "border border-input hover:bg-accent hover:text-accent-foreground",
+ secondary:
+ "bg-secondary text-secondary-foreground hover:bg-secondary/80",
+ ghost: "hover:bg-accent hover:text-accent-foreground",
+ link: "underline-offset-4 hover:underline text-primary",
+ },
+ size: {
+ default: "h-10 py-2 px-4",
+ sm: "h-9 px-3 rounded-md",
+ lg: "h-11 px-8 rounded-md",
+ icon: "h-10 w-10",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ size: "default",
+ },
+ }
+)
+
+export interface ButtonProps
+ extends React.ButtonHTMLAttributes,
+ VariantProps {
+ asChild?: boolean
+}
+
+const Button = React.forwardRef(
+ ({ className, variant, size, asChild = false, ...props }, ref) => {
+ const Comp = asChild ? Slot : "button"
+ return (
+
+ )
+ }
+)
+Button.displayName = "Button"
+
+export { Button, buttonVariants }
diff --git a/components/ui/carousel.tsx b/components/ui/carousel.tsx
new file mode 100644
index 0000000..9c2b9bf
--- /dev/null
+++ b/components/ui/carousel.tsx
@@ -0,0 +1,260 @@
+import * as React from "react"
+import useEmblaCarousel, {
+ type UseEmblaCarouselType,
+} from "embla-carousel-react"
+import { ArrowLeft, ArrowRight } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+import { Button } from "@/components/ui/button"
+
+type CarouselApi = UseEmblaCarouselType[1]
+type UseCarouselParameters = Parameters
+type CarouselOptions = UseCarouselParameters[0]
+type CarouselPlugin = UseCarouselParameters[1]
+
+type CarouselProps = {
+ opts?: CarouselOptions
+ plugins?: CarouselPlugin
+ orientation?: "horizontal" | "vertical"
+ setApi?: (api: CarouselApi) => void
+}
+
+type CarouselContextProps = {
+ carouselRef: ReturnType[0]
+ api: ReturnType[1]
+ scrollPrev: () => void
+ scrollNext: () => void
+ canScrollPrev: boolean
+ canScrollNext: boolean
+} & CarouselProps
+
+const CarouselContext = React.createContext(null)
+
+function useCarousel() {
+ const context = React.useContext(CarouselContext)
+
+ if (!context) {
+ throw new Error("useCarousel must be used within a ")
+ }
+
+ return context
+}
+
+const Carousel = React.forwardRef<
+ HTMLDivElement,
+ React.HTMLAttributes & CarouselProps
+>(
+ (
+ {
+ orientation = "horizontal",
+ opts,
+ setApi,
+ plugins,
+ className,
+ children,
+ ...props
+ },
+ ref
+ ) => {
+ const [carouselRef, api] = useEmblaCarousel(
+ {
+ ...opts,
+ axis: orientation === "horizontal" ? "x" : "y",
+ },
+ plugins
+ )
+ const [canScrollPrev, setCanScrollPrev] = React.useState(false)
+ const [canScrollNext, setCanScrollNext] = React.useState(false)
+
+ const onSelect = React.useCallback((api: CarouselApi) => {
+ if (!api) {
+ return
+ }
+
+ setCanScrollPrev(api.canScrollPrev())
+ setCanScrollNext(api.canScrollNext())
+ }, [])
+
+ const scrollPrev = React.useCallback(() => {
+ api?.scrollPrev()
+ }, [api])
+
+ const scrollNext = React.useCallback(() => {
+ api?.scrollNext()
+ }, [api])
+
+ const handleKeyDown = React.useCallback(
+ (event: React.KeyboardEvent) => {
+ if (event.key === "ArrowLeft") {
+ event.preventDefault()
+ scrollPrev()
+ } else if (event.key === "ArrowRight") {
+ event.preventDefault()
+ scrollNext()
+ }
+ },
+ [scrollPrev, scrollNext]
+ )
+
+ React.useEffect(() => {
+ if (!api || !setApi) {
+ return
+ }
+
+ setApi(api)
+ }, [api, setApi])
+
+ React.useEffect(() => {
+ if (!api) {
+ return
+ }
+
+ onSelect(api)
+ api.on("reInit", onSelect)
+ api.on("select", onSelect)
+
+ return () => {
+ api?.off("select", onSelect)
+ }
+ }, [api, onSelect])
+
+ return (
+
+
+ {children}
+
+
+ )
+ }
+)
+Carousel.displayName = "Carousel"
+
+const CarouselContent = React.forwardRef<
+ HTMLDivElement,
+ React.HTMLAttributes
+>(({ className, ...props }, ref) => {
+ const { carouselRef, orientation } = useCarousel()
+
+ return (
+
+ )
+})
+CarouselContent.displayName = "CarouselContent"
+
+const CarouselItem = React.forwardRef<
+ HTMLDivElement,
+ React.HTMLAttributes
+>(({ className, ...props }, ref) => {
+ const { orientation } = useCarousel()
+
+ return (
+
+ )
+})
+CarouselItem.displayName = "CarouselItem"
+
+const CarouselPrevious = React.forwardRef<
+ HTMLButtonElement,
+ React.ComponentProps
+>(({ className, variant = "outline", size = "icon", ...props }, ref) => {
+ const { orientation, scrollPrev, canScrollPrev } = useCarousel()
+
+ return (
+
+ )
+})
+CarouselPrevious.displayName = "CarouselPrevious"
+
+const CarouselNext = React.forwardRef<
+ HTMLButtonElement,
+ React.ComponentProps
+>(({ className, variant = "outline", size = "icon", ...props }, ref) => {
+ const { orientation, scrollNext, canScrollNext } = useCarousel()
+
+ return (
+
+ )
+})
+CarouselNext.displayName = "CarouselNext"
+
+export {
+ type CarouselApi,
+ Carousel,
+ CarouselContent,
+ CarouselItem,
+ CarouselPrevious,
+ CarouselNext,
+}
diff --git a/components/ui/dialog.tsx b/components/ui/dialog.tsx
new file mode 100644
index 0000000..c23630e
--- /dev/null
+++ b/components/ui/dialog.tsx
@@ -0,0 +1,120 @@
+import * as React from "react"
+import * as DialogPrimitive from "@radix-ui/react-dialog"
+import { X } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+const Dialog = DialogPrimitive.Root
+
+const DialogTrigger = DialogPrimitive.Trigger
+
+const DialogPortal = DialogPrimitive.Portal
+
+const DialogClose = DialogPrimitive.Close
+
+const DialogOverlay = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+DialogOverlay.displayName = DialogPrimitive.Overlay.displayName
+
+const DialogContent = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, children, ...props }, ref) => (
+
+
+
+ {children}
+
+
+ Close
+
+
+
+))
+DialogContent.displayName = DialogPrimitive.Content.displayName
+
+const DialogHeader = ({
+ className,
+ ...props
+}: React.HTMLAttributes) => (
+
+)
+DialogHeader.displayName = "DialogHeader"
+
+const DialogFooter = ({
+ className,
+ ...props
+}: React.HTMLAttributes) => (
+
+)
+DialogFooter.displayName = "DialogFooter"
+
+const DialogTitle = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+DialogTitle.displayName = DialogPrimitive.Title.displayName
+
+const DialogDescription = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+DialogDescription.displayName = DialogPrimitive.Description.displayName
+
+export {
+ Dialog,
+ DialogPortal,
+ DialogOverlay,
+ DialogClose,
+ DialogTrigger,
+ DialogContent,
+ DialogHeader,
+ DialogFooter,
+ DialogTitle,
+ DialogDescription,
+}
diff --git a/components/ui/input.tsx b/components/ui/input.tsx
new file mode 100644
index 0000000..677d05f
--- /dev/null
+++ b/components/ui/input.tsx
@@ -0,0 +1,25 @@
+import * as React from "react"
+
+import { cn } from "@/lib/utils"
+
+export interface InputProps
+ extends React.InputHTMLAttributes {}
+
+const Input = React.forwardRef(
+ ({ className, type, ...props }, ref) => {
+ return (
+
+ )
+ }
+)
+Input.displayName = "Input"
+
+export { Input }
diff --git a/components/ui/label.tsx b/components/ui/label.tsx
new file mode 100644
index 0000000..683faa7
--- /dev/null
+++ b/components/ui/label.tsx
@@ -0,0 +1,24 @@
+import * as React from "react"
+import * as LabelPrimitive from "@radix-ui/react-label"
+import { cva, type VariantProps } from "class-variance-authority"
+
+import { cn } from "@/lib/utils"
+
+const labelVariants = cva(
+ "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
+)
+
+const Label = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef &
+ VariantProps
+>(({ className, ...props }, ref) => (
+
+))
+Label.displayName = LabelPrimitive.Root.displayName
+
+export { Label }
diff --git a/components/ui/meteors.tsx b/components/ui/meteors.tsx
new file mode 100644
index 0000000..7d995c1
--- /dev/null
+++ b/components/ui/meteors.tsx
@@ -0,0 +1,35 @@
+"use client"
+
+import React from "react"
+
+import { cn } from "@/lib/utils"
+
+export const Meteors = ({
+ number,
+ className,
+}: {
+ number?: number
+ className?: string
+}) => {
+ const meteors = new Array(number || 20).fill(true)
+ return (
+ <>
+ {meteors.map((el, idx) => (
+
+ ))}
+ >
+ )
+}
diff --git a/components/ui/progress.tsx b/components/ui/progress.tsx
new file mode 100644
index 0000000..105fb65
--- /dev/null
+++ b/components/ui/progress.tsx
@@ -0,0 +1,26 @@
+import * as React from "react"
+import * as ProgressPrimitive from "@radix-ui/react-progress"
+
+import { cn } from "@/lib/utils"
+
+const Progress = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, value, ...props }, ref) => (
+
+
+
+))
+Progress.displayName = ProgressPrimitive.Root.displayName
+
+export { Progress }
diff --git a/components/ui/scroll-area.tsx b/components/ui/scroll-area.tsx
new file mode 100644
index 0000000..cf253cf
--- /dev/null
+++ b/components/ui/scroll-area.tsx
@@ -0,0 +1,46 @@
+import * as React from "react"
+import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area"
+
+import { cn } from "@/lib/utils"
+
+const ScrollArea = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, children, ...props }, ref) => (
+
+
+ {children}
+
+
+
+
+))
+ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName
+
+const ScrollBar = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, orientation = "vertical", ...props }, ref) => (
+
+
+
+))
+ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName
+
+export { ScrollArea, ScrollBar }
diff --git a/components/ui/spinning-number.tsx b/components/ui/spinning-number.tsx
new file mode 100644
index 0000000..127a9a8
--- /dev/null
+++ b/components/ui/spinning-number.tsx
@@ -0,0 +1,104 @@
+"use client"
+
+import { useEffect, useRef, useState } from "react"
+import { motion } from "framer-motion"
+
+type SpinningNumberProps = React.DetailedHTMLProps<
+ React.HTMLAttributes,
+ HTMLDivElement
+> & {
+ value: number
+ animationDuration?: number
+}
+
+export const SpinningNumber = ({
+ value,
+ animationDuration = 500,
+ className,
+ ...props
+}: SpinningNumberProps) => {
+ const ref = useRef(null)
+
+ const [splitted, setSplitted] = useState(value.toString().split(""))
+ const [lineHeight, setLineHeight] = useState(0)
+
+ useEffect(() => {
+ const element = ref.current
+ if (element) {
+ const tempElement = document.createElement("span")
+ tempElement.style.fontSize = window.getComputedStyle(element).fontSize
+ tempElement.style.fontFamily = window.getComputedStyle(element).fontFamily
+ tempElement.style.lineHeight = window.getComputedStyle(element).lineHeight
+ tempElement.innerHTML = "dummy"
+ element.appendChild(tempElement)
+ setLineHeight(tempElement.offsetHeight)
+ element.removeChild(tempElement)
+ }
+ }, [lineHeight])
+
+ useEffect(() => {
+ setSplitted(value.toString().split(""))
+ }, [value])
+
+ return (
+
+
+
+ {splitted.map((num, i) => (
+
+ ))}
+
+
+
+ )
+}
+
+type SingleNumberProps = {
+ number: number
+ index: number
+ lineHeight: number
+ animationDuration: number
+}
+
+export const SingleNumber = ({
+ number,
+ index,
+ lineHeight,
+ animationDuration,
+}: SingleNumberProps) => {
+ const nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
+ const [y, setY] = useState(-1 * nums.indexOf(number) * lineHeight)
+
+ useEffect(() => {
+ setY(-1 * nums.indexOf(number) * lineHeight)
+ }, [number, lineHeight])
+
+ return (
+
+ {nums.map((digit) => (
+
+ {digit}
+
+ ))}
+
+ )
+}
diff --git a/components/ui/wave-progressbar.tsx b/components/ui/wave-progressbar.tsx
new file mode 100644
index 0000000..3d10526
--- /dev/null
+++ b/components/ui/wave-progressbar.tsx
@@ -0,0 +1,27 @@
+"use client"
+
+import { useState } from "react"
+import { motion } from "framer-motion"
+
+type Props = {
+ value: number
+}
+
+const WaveProgressbar: React.FC = ({ value }) => {
+ const [val] = useState(300 - value * 3)
+
+ return (
+
+ )
+}
+
+export default WaveProgressbar
diff --git a/config/site.ts b/config/site.ts
new file mode 100644
index 0000000..3694b58
--- /dev/null
+++ b/config/site.ts
@@ -0,0 +1,14 @@
+export type SiteConfig = typeof siteConfig
+
+export const siteConfig = {
+ name: "Removerized - Free AI Background Remover Tool",
+ description:
+ "New Year Countdown. It shows the remaining days, hours, minutes, and seconds until the new year arrives.",
+ mainNav: [
+
+ ],
+ links: {
+ twitter: "https://twitter.com/yossthedev",
+ github: "https://github.com/yossTheDev/yearprogress",
+ },
+}
diff --git a/docs/banner.png b/docs/banner.png
new file mode 100644
index 0000000000000000000000000000000000000000..f4062f93253b546b47c3eff8053e7277d03f8f3a
GIT binary patch
literal 155358
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 |