···22import { getCanonicalUrl } from "@/utils/urls";
3344interface Sitemap {
55- url: string
66- priority: number
55+ url: string;
66+ priority: number;
77}
8899export const revalidate = 691200; // 8 days
+2-2
app/(home)/bot/pronouns/genders/page.tsx
···11-import { Metadata } from "next";
11+import type { Metadata } from "next";
2233-import { PronounsResponse } from "@/typings";
33+import type { PronounsResponse } from "@/typings";
44import { getCanonicalUrl } from "@/utils/urls";
5566import List from "../list.component";
+3-3
app/(home)/bot/pronouns/layout.tsx
···11-import { Metadata } from "next";
11+import type { Metadata } from "next";
22import { Montserrat, Patrick_Hand } from "next/font/google";
33import Image from "next/image";
44import Link from "next/link";
···1010import ImageGrid from "@/components/image-grid";
1111import { defaultFetchOptions } from "@/lib/api";
1212import ArrowPic from "@/public/icons/arroww.webp";
1313-import { ApiV1TopguildsGetResponse } from "@/typings";
1313+import type { ApiV1TopguildsGetResponse } from "@/typings";
1414import { cn } from "@/utils/cn";
1515import { getBaseUrl, getCanonicalUrl } from "@/utils/urls";
1616···5151export default async function RootLayout({
5252 children
5353}: {
5454- children: React.ReactNode
5454+ children: React.ReactNode;
5555}) {
5656 const topGuilds = await fetch(`${process.env.NEXT_PUBLIC_API}/top-guilds`, defaultFetchOptions)
5757 .then((res) => res.json())
+2-3
app/(home)/bot/pronouns/list.component.tsx
···22import { HiAcademicCap } from "react-icons/hi";
3344import Ad from "@/components/ad";
55-import { PronounsResponse } from "@/typings";
55+import type { PronounsResponse } from "@/typings";
6677interface Props {
88 res: PronounsResponse;
99 type: string;
1010}
11111212-export default async function List({ res, type }: Props) {
1313-1212+export default function List({ res, type }: Props) {
1413 return (
1514 <div>
1615 <div className="w-full flex items-center justify-between mb-2">
···11-import { Metadata } from "next";
11+import type { Metadata } from "next";
2233-import { PronounsResponse } from "@/typings";
33+import type { PronounsResponse } from "@/typings";
44import { getCanonicalUrl } from "@/utils/urls";
5566import List from "../list.component";
+2-2
app/(home)/bot/pronouns/sexualities/page.tsx
···11-import { Metadata } from "next";
11+import type { Metadata } from "next";
2233-import { PronounsResponse } from "@/typings";
33+import type { PronounsResponse } from "@/typings";
44import { getCanonicalUrl } from "@/utils/urls";
5566import List from "../list.component";
+3-3
app/(home)/debug/page.tsx
···11-import { Metadata } from "next";
11+import type { Metadata } from "next";
22import { cookies, headers } from "next/headers";
33import Link from "next/link";
44import { HiTrash } from "react-icons/hi";
···10101111import Panel from "./panel.component";
12121313-export const generateMetadata = async (): Promise<Metadata> => {
1313+export const generateMetadata = (): Metadata => {
1414 const title = "Shiggy";
1515 const description = "";
1616 const url = getCanonicalUrl("debug");
···4444};
45454646export default async function Home() {
4747- const headerList: { name: string, value: string }[] = [];
4747+ const headerList: { name: string; value: string; }[] = [];
4848 for (const [key, value] of (await headers()).entries()) {
4949 headerList.push({ name: key, value });
5050 }
···2222 Open Discord{"'"}s add-app flow at <LinkTag href="/login?invite=true">wamellow.com/invite</LinkTag>.
2323 </li>
2424 <li>
2525- Select a server and click on {'"'}Continue{'"'}.
2525+ Select a server and click on {"\""}Continue{"\""}.
2626 </li>
2727 <li>
2828- Do <span className="font-semibold">not uncheck</span> any permissions and click on {'"'}Authorize{'"'}.
2828+ Do <span className="font-semibold">not uncheck</span> any permissions and click on {"\""}Authorize{"\""}.
2929 </li>
3030 <li>
3131 <span className="font-semibold">Done!</span> 🎉 You should now find yourself on the Dashboard for your server!
···5252 <LinkTag href="/login?invite=true">Invite Wamellow</LinkTag> to your Server. If you do not own it, ask the server Administrators to add Wamellow.
5353 </li>
5454 <li>
5555- Go to the <LinkTag href="/login?invite=true">Dashboard on wamellow.com/dashboard</LinkTag>, find your server and click {'"'}manage{'"'}.
5555+ Go to the <LinkTag href="/login?invite=true">Dashboard on wamellow.com/dashboard</LinkTag>, find your server and click {"\""}manage{"\""}.
5656 </li>
5757 <li>
5858- Select a channel to be used in the {'"'}Text to Speech{'"'} section.
5858+ Select a channel to be used in the {"\""}Text to Speech{"\""} section.
5959 </li>
6060 <li>
6161 Join any voice channel in your Server (be sure Wamellow can join it too).
···8686 <div>
8787 <ol className="list-decimal list-inside marker:text-neutral-500 mb-4">
8888 <li>
8989- In the Discord App, click on your servers' name and click {'"'}Settings{'"'}
8989+ In the Discord App, click on your servers' name and click {"\""}Settings{"\""}
9090 </li>
9191 <li>
9292- Then go to the tab {'"'}Integrations{'"'} in the {'"'}Apps{'"'} category.
9292+ Then go to the tab {"\""}Integrations{"\""} in the {"\""}Apps{"\""} category.
9393 </li>
9494 <li>
9595- In the {'"'}Bots and Apps{'"'} list, find Wamellow and click on {'"'}Manage{'"'}.
9595+ In the {"\""}Bots and Apps{"\""} list, find Wamellow and click on {"\""}Manage{"\""}.
9696 </li>
9797 <li>
9898 You can choose to disable commands for everyone by their roles, or only in certain channels.
···2626import SpacePic from "@/public/space.webp";
2727import WaifuPic from "@/public/waifu.webp";
2828import WelcomePic from "@/public/welcome.webp";
2929-import { ApiV1TopguildsGetResponse } from "@/typings";
2929+import type { ApiV1TopguildsGetResponse } from "@/typings";
3030import { cn } from "@/utils/cn";
3131import { toFixedArrayLength } from "@/utils/fixed-array-length";
3232import { actor } from "@/utils/tts";
···8181 </ClientButton>
8282 );
83838484- async function renderCount() {
8484+ function renderCount() {
8585 "use server";
8686 return <span>trust us!</span>;
8787 }
+2-2
app/(home)/privacy/page.tsx
···11import { readFile } from "fs/promises";
22-import { Metadata } from "next";
22+import type { Metadata } from "next";
3344import { CopyToClipboardButton } from "@/components/copy-to-clipboard";
55import BeautifyMarkdown from "@/components/markdown";
···7788export const revalidate = false;
991010-export const generateMetadata = async (): Promise<Metadata> => {
1010+export const generateMetadata = (): Metadata => {
11111212 const title = "Privacy";
1313 const description = "We take your privacy seriously. Read about Wamellow's Privacy Policy to learn how.";
+5-5
app/(home)/pro/page.tsx
···11import { Button, Chip } from "@nextui-org/react";
22-import { Metadata } from "next";
22+import type { Metadata } from "next";
33import { Montserrat } from "next/font/google";
44import Link from "next/link";
55import { BsQuestionLg } from "react-icons/bs";
···8899import Comment from "@/components/comment";
1010import ImageGrid from "@/components/image-grid";
1111-import { ApiV1TopguildsGetResponse } from "@/typings";
1111+import type { ApiV1TopguildsGetResponse } from "@/typings";
1212import { cn } from "@/utils/cn";
1313import { getBaseUrl, getCanonicalUrl } from "@/utils/urls";
1414···19192020const fetchOptions = { headers: { Authorization: process.env.API_SECRET as string }, next: { revalidate: 60 * 60 } };
21212222-export const generateMetadata = async (): Promise<Metadata> => {
2222+export const generateMetadata = (): Metadata => {
23232424 const title = "Professional experience";
2525 const description = "Get epic Pro+ ULTRA HD features for wamellow to upgrade your servers to a whole new experience and unlock tons of premium features.";
···5959 prefetch={false}
6060 startContent={<HiUserAdd />}
6161 >
6262- Get started
6262+ Get started
6363 </Button>
6464 <Button
6565 as={Link}
···6868 href="https://lunish.nl/kofi"
6969 startContent={<HiLightningBolt />}
7070 >
7171- Subscribe
7171+ Subscribe
7272 </Button>
7373 </>);
7474
+1-1
app/(home)/status/api.ts
···11import { defaultFetchOptions } from "@/lib/api";
22-import { ApiError } from "@/typings";
22+import type { ApiError } from "@/typings";
3344export interface ApiCluster {
55 id: number;
+1-1
app/(home)/status/cluster.component.tsx
···66import { cn } from "@/utils/cn";
77import { intl } from "@/utils/numbers";
8899-import { ApiCluster } from "./api";
99+import type { ApiCluster } from "./api";
10101111export function Cluster(cluster: ApiCluster) {
1212 return (
+4-4
app/(home)/status/layout.tsx
···11-import { Metadata } from "next";
11+import type { Metadata } from "next";
22import { Montserrat } from "next/font/google";
33-import { ReactNode } from "react";
33+import type { ReactNode } from "react";
4455import { Section } from "@/components/section";
66import { cn } from "@/utils/cn";
···1111const montserrat = Montserrat({ subsets: ["latin"] });
12121313interface Props {
1414- children: ReactNode
1414+ children: ReactNode;
1515}
16161717-export const generateMetadata = async (): Promise<Metadata> => {
1717+export const generateMetadata = (): Metadata => {
1818 const title = "Status";
1919 const description = "Check the status of all clusters and voice chat nodes, double check if we screwed something up - again!";
2020 const url = getCanonicalUrl("status");
+4-4
app/(home)/status/node.component.tsx
···11import { Chip } from "@nextui-org/react";
22import Image from "next/image";
33-import { ReactNode } from "react";
33+import type { ReactNode } from "react";
44import { FaCrown } from "react-icons/fa";
5566-import { ApiNode } from "./api";
66+import type { ApiNode } from "./api";
7788-export function Node({ index, node }: { index: number; node: ApiNode }) {
88+export function Node({ index, node }: { index: number; node: ApiNode; }) {
99 return (
1010 <div
1111 className="p-4 bg-wamellow rounded-lg space-y-2 outline-violet-400 duration-200 h-fit"
···5151 );
5252}
53535454-function Icon({ id }: { id: string }) {
5454+function Icon({ id }: { id: string; }) {
5555 return (
5656 <Image
5757 alt={`${id} country flag`}
+2-2
app/(home)/status/side.component.tsx
···2233import { Accordion, AccordionItem, Chip } from "@nextui-org/react";
44import { useCookies } from "next-client-cookies";
55-import { ReactNode, useEffect, useMemo, useState } from "react";
55+import { type ReactNode, useEffect, useMemo, useState } from "react";
6677import DumbTextInput from "@/components/inputs/dumb-text-input";
88import { intl } from "@/utils/numbers";
991010-import { ApiV1StatusGetResponse } from "./api";
1010+import type { ApiV1StatusGetResponse } from "./api";
11111212export function Side({
1313 status
+3-3
app/(home)/team/page.tsx
···11-import { Metadata } from "next";
11+import type { Metadata } from "next";
22import Image from "next/image";
33import { BsDiscord, BsGithub } from "react-icons/bs";
44···13131414export const revalidate = 3600;
15151616-export const generateMetadata = async (): Promise<Metadata> => {
1616+export const generateMetadata = (): Metadata => {
1717 const title = "Team";
1818 const description = "Meet the creators of Wamellow and its products. Our dedicated team, including developers and donors, drives innovation and community growth.";
1919 const url = getCanonicalUrl("team");
···4646 };
4747};
48484949-export default async function Home() {
4949+export default function Home() {
5050 return (
5151 <div>
5252 <h2 className="text-2xl font-medium text-neutral-200">Team 🍪</h2>
+1-1
app/(home)/team/person.component.tsx
···11import Image from "next/image";
22import Link from "next/link";
33-import { AnchorHTMLAttributes, DetailedHTMLProps, HTMLAttributes } from "react";
33+import type { AnchorHTMLAttributes, DetailedHTMLProps, HTMLAttributes } from "react";
44import { HiExternalLink } from "react-icons/hi";
5566import { getUser } from "@/lib/discord/user";
+2-2
app/(home)/terms/page.tsx
···11import { readFile } from "fs/promises";
22-import { Metadata } from "next";
22+import type { Metadata } from "next";
3344import { CopyToClipboardButton } from "@/components/copy-to-clipboard";
55import BeautifyMarkdown from "@/components/markdown";
···7788export const revalidate = false;
991010-export const generateMetadata = async (): Promise<Metadata> => {
1010+export const generateMetadata = (): Metadata => {
11111212 const title = "Terms of Service";
1313 const description = "Read about Wamellow's Terms of Service.";
···11-import { Metadata } from "next";
11+import type { Metadata } from "next";
22import { Montserrat } from "next/font/google";
33import Image from "next/image";
44import Link from "next/link";
···20202121export const revalidate = 3600;
22222323-export const generateMetadata = async (): Promise<Metadata> => {
2323+export const generateMetadata = (): Metadata => {
24242525 const title = "Free /image Ai for Discord";
2626 const description = "Summon the enchantment of AI generated images to your Discord server with our versatile /image command, featuring over 40+ distinct SD and 10+ SDXL models.";
···66import { useEffect, useState } from "react";
77import { HiCloudUpload } from "react-icons/hi";
8899-import { ApiV1UploadGetResponse } from "@/typings";
99+import type { ApiV1UploadGetResponse } from "@/typings";
1010import { cn } from "@/utils/cn";
11111212enum State {
···4848 if (id) removeTag(id);
4949 }}
5050 >
5151- Are you sure you want to delete the {'"'}{name}{'"'} tag? It will be gone forever, probably, who knows.
5151+ Are you sure you want to delete the {"\""}{name}{"\""} tag? It will be gone forever, probably, who knows.
5252 </Modal>
5353 </>
5454 );
+1-1
app/dashboard/[guildId]/custom-commands/page.tsx
···1616import { cacheOptions, getData } from "@/lib/api";
1717import { Permissions } from "@/lib/discord/enum/permissions";
1818import SadWumpusPic from "@/public/sad-wumpus.gif";
1919-import { ApiV1GuildsModulesTagsGetResponse } from "@/typings";
1919+import type { ApiV1GuildsModulesTagsGetResponse } from "@/typings";
20202121import CreateTag, { Style } from "./create.component";
2222import DeleteTag from "./delete.component";
···88import MultiSelectMenu from "@/components/inputs/multi-select-menu";
99import SelectMenu from "@/components/inputs/select-menu";
1010import Modal from "@/components/modal";
1111-import { ApiV1GuildsModulesDailypostsGetResponse, DailypostType } from "@/typings";
1111+import { type ApiV1GuildsModulesDailypostsGetResponse, DailypostType } from "@/typings";
1212import { createSelectableItems } from "@/utils/create-selectable-items";
13131414import { generateHourArray, typeToName } from "./util";
···5858 if (id) remove(id);
5959 }}
6060 >
6161- Are you sure you want to delete the {'"'}{name}{'"'} dailypost? It will be gone forever, probably, who knows.
6161+ Are you sure you want to delete the {"\""}{name}{"\""} dailypost? It will be gone forever, probably, who knows.
6262 </Modal>
6363 </>);
6464}
+1-1
app/dashboard/[guildId]/dailyposts/page.tsx
···1414import SelectMenu from "@/components/inputs/select-menu";
1515import { ScreenMessage } from "@/components/screen-message";
1616import SadWumpusPic from "@/public/sad-wumpus.gif";
1717-import { ApiV1GuildsModulesDailypostsGetResponse } from "@/typings";
1717+import type { ApiV1GuildsModulesDailypostsGetResponse } from "@/typings";
1818import { createSelectableItems } from "@/utils/create-selectable-items";
19192020import CreateNotification, { Style } from "./create.component";
···1515import SelectMenu from "@/components/inputs/select-menu";
1616import Switch from "@/components/inputs/switch";
1717import Notice from "@/components/notice";
1818-import { ApiError,ApiV1GuildsModulesByeGetResponse } from "@/typings";
1818+import type { ApiError, ApiV1GuildsModulesByeGetResponse } from "@/typings";
1919import { createSelectableItems } from "@/utils/create-selectable-items";
20202121export default function Home() {
···11-21"use client";
32import { Button } from "@nextui-org/react";
43import Link from "next/link";
···1211import Switch from "@/components/inputs/switch";
1312import Notice from "@/components/notice";
1413import { OverviewLink } from "@/components/overview-link";
1515-import { ApiError,ApiV1GuildsModulesPassportGetResponse } from "@/typings";
1414+import type { ApiError, ApiV1GuildsModulesPassportGetResponse } from "@/typings";
1615import { createSelectableItems } from "@/utils/create-selectable-items";
1716import { getCanonicalUrl } from "@/utils/urls";
1817
+1-1
app/dashboard/[guildId]/greeting/welcome/page.tsx
···1717import Switch from "@/components/inputs/switch";
1818import Notice from "@/components/notice";
1919import { Section } from "@/components/section";
2020-import { ApiError,ApiV1GuildsModulesWelcomeGetResponse } from "@/typings";
2020+import type { ApiError, ApiV1GuildsModulesWelcomeGetResponse } from "@/typings";
2121import { createSelectableEmojiItems, createSelectableItems } from "@/utils/create-selectable-items";
22222323export default function Home() {
+2-2
app/dashboard/[guildId]/layout.tsx
···1818import { ScreenMessage, SupportButton } from "@/components/screen-message";
1919import { cacheOptions, getData } from "@/lib/api";
2020import SadWumpusPic from "@/public/sad-wumpus.gif";
2121-import { ApiV1GuildsChannelsGetResponse, ApiV1GuildsEmojisGetResponse, ApiV1GuildsGetResponse, ApiV1GuildsRolesGetResponse } from "@/typings";
2121+import type { ApiV1GuildsChannelsGetResponse, ApiV1GuildsEmojisGetResponse, ApiV1GuildsGetResponse, ApiV1GuildsRolesGetResponse } from "@/typings";
2222import { intl } from "@/utils/numbers";
2323import { getCanonicalUrl } from "@/utils/urls";
2424···4343export default function RootLayout({
4444 children
4545}: {
4646- children: React.ReactNode
4646+ children: React.ReactNode;
4747}) {
4848 const cookies = useCookies();
4949 const params = useParams();
+2-2
app/dashboard/[guildId]/leaderboards/page.tsx
···55import { HiChartBar, HiViewGridAdd } from "react-icons/hi";
66import { useQuery } from "react-query";
7788-import { Guild, guildStore } from "@/common/guilds";
88+import { type Guild, guildStore } from "@/common/guilds";
99import ImageUrlInput from "@/components/inputs/image-url-input";
1010import MultiSelectMenu from "@/components/inputs/multi-select-menu";
1111import { ScreenMessage } from "@/components/screen-message";
1212import { Section, SubSection } from "@/components/section";
1313import { cacheOptions, getData } from "@/lib/api";
1414import SadWumpusPic from "@/public/sad-wumpus.gif";
1515-import { ApiV1GuildsModulesLeaderboardGetResponse } from "@/typings";
1515+import type { ApiV1GuildsModulesLeaderboardGetResponse } from "@/typings";
1616import { createSelectableItems } from "@/utils/create-selectable-items";
17171818import { OverviewLink } from "../../../../components/overview-link";
···5858 if (id) remove(id);
5959 }}
6060 >
6161- Are you sure you want to delete the {'"'}{name}{'"'} channel from posting notifications? It will be gone forever, probably, who knows.
6161+ Are you sure you want to delete the {"\""}{name}{"\""} channel from posting notifications? It will be gone forever, probably, who knows.
6262 </Modal>
6363 </>);
6464}
+2-2
app/dashboard/[guildId]/notifications/page.tsx
···1616import SelectMenu from "@/components/inputs/select-menu";
1717import { ScreenMessage } from "@/components/screen-message";
1818import SadWumpusPic from "@/public/sad-wumpus.gif";
1919-import { ApiV1GuildsModulesNotificationsGetResponse, NotificationType } from "@/typings";
1919+import { type ApiV1GuildsModulesNotificationsGetResponse, NotificationType } from "@/typings";
2020import { cn } from "@/utils/cn";
2121import { createSelectableItems } from "@/utils/create-selectable-items";
2222···199199 className
200200}: {
201201 type: NotificationType;
202202- className?: string;
202202+ className?: string;
203203}) {
204204 switch (type) {
205205 case NotificationType.YouTube: return <BsYoutube className={cn("text-red-500", className)} />;
···1313import { CopyToClipboardButton } from "@/components/copy-to-clipboard";
1414import Modal from "@/components/modal";
1515import Notice, { NoticeType } from "@/components/notice";
1616-import { ApiError, ApiV1GuildsGetResponse, ApiV1GuildsModulesLeaderboardGetResponse, ApiV1GuildsTopmembersPaginationGetResponse } from "@/typings";
1616+import type { ApiError, ApiV1GuildsGetResponse, ApiV1GuildsModulesLeaderboardGetResponse, ApiV1GuildsTopmembersPaginationGetResponse } from "@/typings";
1717import { intl } from "@/utils/numbers";
1818import { getCanonicalUrl } from "@/utils/urls";
1919
+2-2
app/login/api.ts
···11-import { User } from "@/common/user";
22-import { ApiError } from "@/typings";
11+import type { User } from "@/common/user";
22+import type { ApiError } from "@/typings";
3344interface UserSessionCreate extends User {
55 session: string;
+2-2
app/login/open-graph/page.tsx
···11-import { Metadata } from "next";
11+import type { Metadata } from "next";
22import { headers } from "next/headers";
33import { redirect } from "next/navigation";
4455import { getCanonicalUrl } from "@/utils/urls";
6677-export const generateMetadata = async (): Promise<Metadata> => {
77+export const generateMetadata = (): Metadata => {
88 const title = "Login with Discord";
99 const description = "Start customising your profile and managing servers.";
1010 const url = getCanonicalUrl("login");
···11import { Button } from "@nextui-org/react";
22-import { ApiError } from "next/dist/server/api-utils";
22+import type { ApiError } from "next/dist/server/api-utils";
33import Image from "next/image";
44-import { ChangeEvent, useRef, useState } from "react";
44+import { type ChangeEvent, useRef, useState } from "react";
55import { HiUpload } from "react-icons/hi";
6677-import { User, userStore } from "@/common/user";
77+import { type User, userStore } from "@/common/user";
88import Box from "@/components/box";
99import { Shiggy } from "@/components/shiggy";
1010-import { ApiV1UsersMeRankEmojiDeleteResponse, ApiV1UsersMeRankEmojiPutResponse } from "@/typings";
1010+import type { ApiV1UsersMeRankEmojiDeleteResponse, ApiV1UsersMeRankEmojiPutResponse } from "@/typings";
1111import { cn } from "@/utils/cn";
1212import { deepMerge } from "@/utils/deepMerge";
1313import sleep from "@/utils/sleep";
···171171 index,
172172 emojiId
173173}: {
174174- index: number,
175175- emojiId: string | null
174174+ index: number;
175175+ emojiId: string | null;
176176}) {
177177 const classNames = "rounded-xl relative size-12 aspect-square";
178178 const style = {
+2-2
app/profile/rank/leaderboard-style.component.tsx
···11import { useState } from "react";
2233-import { User, userStore } from "@/common/user";
44-import { ApiError,ApiV1UsersMeGetResponse } from "@/typings";
33+import { type User, userStore } from "@/common/user";
44+import type { ApiError, ApiV1UsersMeGetResponse } from "@/typings";
55import { cn } from "@/utils/cn";
66import { deepMerge } from "@/utils/deepMerge";
77
+1-1
app/profile/rank/page.tsx
···11"use client";
2233-import { User, userStore } from "@/common/user";
33+import { type User, userStore } from "@/common/user";
44import ImageUrlInput from "@/components/inputs/image-url-input";
55import SelectInput from "@/components/inputs/select-menu";
66import TextInput from "@/components/inputs/text-input";
+2-2
app/profile/spotify/page.tsx
···1313import { HomeButton, ScreenMessage, SupportButton } from "@/components/screen-message";
1414import { cacheOptions, getData } from "@/lib/api";
1515import SadWumpusPic from "@/public/sad-wumpus.gif";
1616-import { ApiV1UsersMeConnectionsSpotifyGetResponse } from "@/typings";
1616+import type { ApiV1UsersMeConnectionsSpotifyGetResponse } from "@/typings";
17171818interface Props {
1919- searchParams: Promise<{ spotify_login_success?: string }>
1919+ searchParams: Promise<{ spotify_login_success?: string; }>;
2020}
21212222export default function Home({ searchParams }: Props) {
+2-2
app/profile/text-to-speech/page.tsx
···11"use client";
2233-import { User, userStore } from "@/common/user";
33+import { type User, userStore } from "@/common/user";
44import SelectInput from "@/components/inputs/select-menu";
55import { deepMerge } from "@/utils/deepMerge";
66-import { actor, getVoices, voices } from "@/utils/tts";
66+import { type actor, getVoices, voices } from "@/utils/tts";
7788export default function Home() {
99 const user = userStore((s) => s);
+1-1
app/user/[userId]/api.ts
···11import { defaultFetchOptions } from "@/lib/api";
22-import { ApiError,ApiV1UsersGetResponse } from "@/typings";
22+import type { ApiError, ApiV1UsersGetResponse } from "@/typings";
3344export async function getUser(userId: string): Promise<ApiV1UsersGetResponse | ApiError | undefined> {
55 const res = await fetch(
···11export const revalidate = 3600;
2233-export default async function Home() {
33+export default function Home() {
44 return (
55 <>
66 <i>User has no bio yet</i>
+1-1
app/user/[userId]/side.component.tsx
···55import { HiAnnotation, HiLink, HiVolumeUp } from "react-icons/hi";
6677import { ClientCountUp } from "@/components/counter";
88-import { ApiError,ApiV1UsersGetResponse } from "@/typings";
88+import type { ApiError, ApiV1UsersGetResponse } from "@/typings";
991010export default function Side({
1111 user
+1-1
common/guilds.ts
···11import { create } from "zustand";
2233-import { ApiV1GuildsChannelsGetResponse, ApiV1GuildsEmojisGetResponse, ApiV1GuildsGetResponse, ApiV1GuildsRolesGetResponse } from "@/typings";
33+import type { ApiV1GuildsChannelsGetResponse, ApiV1GuildsEmojisGetResponse, ApiV1GuildsGetResponse, ApiV1GuildsRolesGetResponse } from "@/typings";
4455export interface Guild extends ApiV1GuildsGetResponse {
66 channels?: ApiV1GuildsChannelsGetResponse[];
+1-1
common/user.ts
···11import { create } from "zustand";
2233-import { ApiV1UsersMeGetResponse } from "@/typings";
33+import type { ApiV1UsersMeGetResponse } from "@/typings";
4455export interface User {
66 HELLO_AND_WELCOME_TO_THE_DEV_TOOLS__PLEASE_GO_AWAY?: true;
+1-1
components/ad.tsx
···33import { Button } from "@nextui-org/react";
44import { Poppins } from "next/font/google";
55import Link from "next/link";
66-import { FunctionComponent } from "react";
66+import type { FunctionComponent } from "react";
77import { HiArrowNarrowRight } from "react-icons/hi";
8899import { cn } from "@/utils/cn";
+3-3
components/avatar.tsx
···11"use client";
2233-import { AvatarIcon, AvatarProps as BaseAvatarProps, useAvatar } from "@nextui-org/react";
33+import { AvatarIcon, type AvatarProps as BaseAvatarProps, useAvatar } from "@nextui-org/react";
44import Image from "next/image";
55import { forwardRef, useMemo } from "react";
6677-export type AvatarProps = BaseAvatarProps
77+export type AvatarProps = BaseAvatarProps;
8899-export const Avatar = forwardRef<HTMLSpanElement, AvatarProps>(({ src: source,...props }, ref) => {
99+export const Avatar = forwardRef<HTMLSpanElement, AvatarProps>(({ src: source, ...props }, ref) => {
1010 const {
1111 src,
1212 icon = <AvatarIcon />,
···11-21import { Button } from "@nextui-org/react";
32import React, { useState } from "react";
43
+1-1
components/click-outside.tsx
···1414 const handleDocumentClick = (event: MouseEvent): void => {
15151616 // @ts-expect-error -- It think's closest doesn't exist, but it does
1717- // eslint-disable-next-line @typescript-eslint/no-unsafe-call -- It think's closest doesn't exist, but it does
1717+1818 if (!event.target?.closest(".wamellow-modal")) {
1919 onClose();
2020 }
+2-2
components/comment.tsx
···11import { Patrick_Hand } from "next/font/google";
22-import Image, { StaticImageData } from "next/image";
22+import Image, { type StaticImageData } from "next/image";
33import { HiChevronRight } from "react-icons/hi";
4455import { cn } from "@/utils/cn";
···1313 content: string | React.ReactNode;
1414}
15151616-export default async function Comment({
1616+export default function Comment({
1717 username,
1818 bio,
1919 avatar,
···44import Link from "next/link";
55import { HiExternalLink, HiPencil } from "react-icons/hi";
6677-import { Guild, guildStore } from "@/common/guilds";
77+import { type Guild, guildStore } from "@/common/guilds";
88import { cn } from "@/utils/cn";
991010interface TBase {
+1-1
components/discord/app-badge.tsx
···11-import { HTMLProps } from "react";
11+import type { HTMLProps } from "react";
22import { HiCheck } from "react-icons/hi";
3344import { cn } from "@/utils/cn";
···22import { useEffect, useState } from "react";
33import { TailSpin } from "react-loading-icons";
4455-import { ApiError } from "@/typings";
55+import type { ApiError } from "@/typings";
66import { cn } from "@/utils/cn";
7788enum State {
+1-1
components/inputs/text-input.tsx
···33import { useEffect, useState } from "react";
44import { TailSpin } from "react-loading-icons";
5566-import { ApiError } from "@/typings";
66+import type { ApiError } from "@/typings";
77import { cn } from "@/utils/cn";
8899import { useStateDebounced } from "../../utils/useDebounce";
···66import { useEffect, useState } from "react";
77import { HiX } from "react-icons/hi";
8899-import { ApiError } from "@/typings";
99+import type { ApiError } from "@/typings";
1010import { cn } from "@/utils/cn";
11111212import { ClickOutside } from "./click-outside";
···20202121interface Props<T> {
2222 className?: string;
2323- variant?:"secondary" | "default" | "destructive";
2323+ variant?: "secondary" | "default" | "destructive";
24242525 title: string;
2626 children: React.ReactNode;
+1-1
components/screen-message.tsx
···11-import { Button } from "@nextui-org/react";
11+import type { Button } from "@nextui-org/react";
22import Link from "next/link";
33import { BsDiscord } from "react-icons/bs";
44import { HiHome } from "react-icons/hi";
···11-import { ApiError, ApiV1GuildsGetResponse } from "@/typings";
11+import type { ApiError, ApiV1GuildsGetResponse } from "@/typings";
2233export interface ApiRequestOptions {
44 force?: boolean;
+1-1
lib/discord/guild.ts
···11import { Collection } from "@discordjs/collection";
22-import { APIGuild, RESTError, RESTGetAPIGuildResult, Routes } from "discord-api-types/v10";
22+import { type APIGuild, type RESTError, type RESTGetAPIGuildResult, Routes } from "discord-api-types/v10";
3344import { rest } from "./index";
55import { fetchWidget } from "./widget";
+1-1
lib/discord/user.ts
···11import { Collection } from "@discordjs/collection";
22-import { APIUser, RESTError, RESTGetAPIUserResult, Routes } from "discord-api-types/v10";
22+import { type APIUser, type RESTError, type RESTGetAPIUserResult, Routes } from "discord-api-types/v10";
3344import { rest } from "./index";
55
+1-1
lib/discord/widget.ts
···11-import { RESTError, RESTGetAPIGuildWidgetJSONResult, Routes } from "discord-api-types/v10";
11+import { type RESTError, type RESTGetAPIGuildWidgetJSONResult, Routes } from "discord-api-types/v10";
2233import { rest } from ".";
44
+1-1
lib/github/index.ts
···11-import { Endpoints } from "@octokit/types";
11+import type { Endpoints } from "@octokit/types";
2233export async function getRepository(fullname: string) {
44 const res = await request<Endpoints["GET /repos/{owner}/{repo}"]["response"]["data"]>("GET", `/repos/${fullname}`);
···11-import React from "react";
11+import type React from "react";
2233-import { User } from "@/common/user";
44-import { ApiError } from "@/typings";
33+import type { User } from "@/common/user";
44+import type { ApiError } from "@/typings";
5566enum State {
77 Idle = 0,
+1-1
utils/cn.ts
···11-import { ClassValue, clsx } from "clsx";
11+import { type ClassValue, clsx } from "clsx";
22import { twMerge } from "tailwind-merge";
3344export function cn(...inputs: ClassValue[]) {
+4-3
utils/create-selectable-items.tsx
···11-import { ApiV1GuildsChannelsGetResponse, ApiV1GuildsEmojisGetResponse, ApiV1GuildsRolesGetResponse, PermissionFlagsBits } from "@/typings";
21import Image from "next/image";
22+33+import { type ApiV1GuildsChannelsGetResponse, type ApiV1GuildsEmojisGetResponse, type ApiV1GuildsRolesGetResponse, PermissionFlagsBits } from "@/typings";
3445type Item = ApiV1GuildsChannelsGetResponse | ApiV1GuildsRolesGetResponse;
55-type PermissionNames = keyof typeof PermissionFlagsBits | "RoleHirachy"
66+type PermissionNames = keyof typeof PermissionFlagsBits | "RoleHirachy";
6778function parsePermissions(permissions: number, required: PermissionNames[]) {
89 if (permissions === -1 && required.includes("RoleHirachy")) return ["Role is above Wamellow"];
···4950 name: c.name.replace(/-|_/g, " "),
5051 value: c.id
5152 }))
5252- ]
5353+ ];
5354}