The weeb for the next gen discord boat - Wamellow wamellow.com
bot discord
3
fork

Configure Feed

Select the types of activity you want to include in your feed.

use new buttons everywhere

Luna 59d73d69 746ba160

+182 -109
+41 -17
app/(home)/bot/pronouns/layout.tsx
··· 5 5 import { BsDiscord } from "react-icons/bs"; 6 6 import { HiChevronRight, HiHome, HiUserAdd } from "react-icons/hi"; 7 7 8 + import ServerGrid from "@/components/guild-grid"; 8 9 import ImageReduceMotion from "@/components/image-reduce-motion"; 9 - import ServerGrid from "@/components/guild-grid"; 10 + import { ServerButton } from "@/components/server-button"; 10 11 import ArrowPic from "@/public/arroww.webp"; 11 12 import { ApiV1TopguildsGetResponse } from "@/typings"; 12 13 import { getBaseUrl, getCanonicalUrl } from "@/utils/urls"; ··· 65 66 66 67 <div className="md:text-xl text-lg lg:flex w-full mt-4"> 67 68 <div className="tracking-wide w-full grid grid-cols-2 md:flex flex-wrap h-min gap-2"> 68 - <Link href="/bot/pronouns" className="button items-center"> 69 + <ServerButton 70 + as={Link} 71 + href="/bot/pronouns" 72 + isIconOnly 73 + > 69 74 <HiHome /> 70 - </Link> 71 - <Link href="/bot/pronouns/pronouns" className="button"> 75 + </ServerButton> 76 + <ServerButton 77 + as={Link} 78 + href="/bot/pronouns/pronouns" 79 + > 72 80 Pronouns 73 - </Link> 74 - <Link href="/bot/pronouns/genders" className="button"> 81 + </ServerButton> 82 + <ServerButton 83 + as={Link} 84 + href="/bot/pronouns/genders" 85 + > 75 86 Genders 76 - </Link> 77 - <Link href="/bot/pronouns/sexualities" className="button"> 87 + </ServerButton> 88 + <ServerButton 89 + as={Link} 90 + href="/bot/pronouns/sexualities" 91 + > 78 92 Sexualities 79 - </Link> 93 + </ServerButton> 80 94 </div> 81 95 82 96 <div className="flex flex-col min-w-full lg:min-w-[420px]"> 83 97 84 98 <div className="lg:ml-auto flex gap-2 text-xl font-medium mt-4 lg:mt-0"> 85 - <Link href="https://top.gg/bot/912003493777268767/invite" className="flex text-neutral-200 bg-violet-600 hover:bg-violet-600/80 py-2 px-4 rounded-md duration-200 w-1/2 lg:w-fit justify-center gap-2"> 86 - <HiUserAdd className="relative top-1" /> 87 - <span className="block sm:hidden">Pronouns</span> 88 - <span className="hidden sm:block">Invite Pronouns</span> 89 - </Link> 90 - <Link href="/support" className="button w-1/2"> 91 - <BsDiscord /> 99 + <ServerButton 100 + as={Link} 101 + startContent={<HiUserAdd />} 102 + className="button-primary w-1/2 lg:w-fit !text-xl !font-medium" 103 + href="https://top.gg/bot/912003493777268767/invite" 104 + size="lg" 105 + > 106 + <span className="block sm:hidden">Invite</span> 107 + <span className="hidden sm:block">Invite Wamellow</span> 108 + </ServerButton> 109 + <ServerButton 110 + as={Link} 111 + startContent={<BsDiscord />} 112 + className="w-1/2 lg:w-fit !text-xl !font-medium" 113 + href="/support" 114 + size="lg" 115 + > 92 116 <span className="block sm:hidden">Support</span> 93 117 <span className="hidden sm:block">Join support</span> 94 - </Link> 118 + </ServerButton> 95 119 </div> 96 120 97 121
+1 -1
app/(home)/bot/pronouns/list.component.tsx
··· 29 29 <Ad 30 30 title="Auditional Text" 31 31 description="Convert your text into either a MP3 file or let the bot speak the text in your current voice channel and choose from 18 different voices." 32 - url="https://discord.com/oauth2/authorize?client_id=1097907896987160666&scope=bot&permissions=2147486720" 32 + url="https://discord.com/oauth2/authorize?client_id=985213199248924722&scope=bot&permissions=3197952" 33 33 color="green" 34 34 /> 35 35 <Ad
+7 -3
app/(home)/bot/pronouns/page.tsx
··· 4 4 import { HiPlus } from "react-icons/hi"; 5 5 6 6 import DiscordMessage from "@/components/discord/message"; 7 + import { ServerButton } from "@/components/server-button"; 7 8 8 9 const montserrat = Montserrat({ subsets: ["latin"] }); 9 10 ··· 53 54 </div> 54 55 55 56 <div className="flex gap-2 mt-4"> 56 - <Link href="/support" className="flex text-neutral-200 bg-violet-600 hover:bg-violet-600/80 py-2 px-4 rounded-md duration-200 justify-center gap-2 items-center"> 57 - <HiPlus /> 57 + <ServerButton 58 + as={Link} 59 + startContent={<HiPlus />} 60 + href="/support" 61 + > 58 62 Request additional 59 - </Link> 63 + </ServerButton> 60 64 </div> 61 65 62 66 </div>
+25 -4
app/(home)/layout.tsx
··· 1 - 2 1 import { readFile } from "fs/promises"; 3 2 import Link from "next/link"; 4 3 import { BiCopyright, BiLogoGithub, BiLogoGmail, BiLogoTiktok, BiLogoTwitter, BiLogoYoutube } from "react-icons/bi"; ··· 7 6 import { SiKofi } from "react-icons/si"; 8 7 9 8 import TopggIcon from "@/components/icons/topgg"; 9 + import { ServerButton } from "@/components/server-button"; 10 10 11 11 export default async function RootLayout({ 12 12 children ··· 74 74 </div> 75 75 76 76 <div className="flex flex-wrap gap-2 mt-2 dark:text-neutral-400 text-neutral-600 select-none"> 77 - <Link href="/terms" className="dark:bg-wamellow/80 dark:hover:bg-wamellow-alpha bg-wamellow-100/80 hover:bg-wamellow-100-alpha py-1 px-2 rounded-md duration-200">Terms of Service</Link> 78 - <Link href="/privacy" className="dark:bg-wamellow/80 dark:hover:bg-wamellow-alpha bg-wamellow-100/80 hover:bg-wamellow-100-alpha py-1 px-2 rounded-md duration-200">Privacy Policy</Link> 79 - <Link href="/support" className="dark:bg-wamellow/80 dark:hover:bg-wamellow-alpha bg-wamellow-100/80 hover:bg-wamellow-100-alpha py-1 px-2 rounded-md duration-200">Support</Link> 77 + <ServerButton 78 + as={Link} 79 + className="dark:text-neutral-400 text-neutral-400" 80 + href="/terms" 81 + size="sm" 82 + > 83 + Terms of Service 84 + </ServerButton> 85 + <ServerButton 86 + as={Link} 87 + className="dark:text-neutral-400 text-neutral-400" 88 + href="/privacy" 89 + size="sm" 90 + > 91 + Privacy Policy 92 + </ServerButton> 93 + <ServerButton 94 + as={Link} 95 + className="dark:text-neutral-400 text-neutral-400" 96 + href="/support" 97 + size="sm" 98 + > 99 + Support 100 + </ServerButton> 80 101 </div> 81 102 82 103 </div>
+48 -24
app/(home)/page.tsx
··· 13 13 import DiscordMessageFile from "@/components/discord/Message-file"; 14 14 import ServerGrid from "@/components/guild-grid"; 15 15 import { ListTab } from "@/components/list"; 16 + import { ServerButton } from "@/components/server-button"; 16 17 import ArrowPic from "@/public/arroww.webp"; 17 18 import LeaderboardPic from "@/public/leaderboard.webp"; 18 19 import WaifuPic from "@/public/waifu.webp"; ··· 41 42 const intl = new Intl.NumberFormat("en", { notation: "standard" }); 42 43 43 44 const Invite = () => ( 44 - <Link href="/login?invite=true" className="button-primary"> 45 - <HiUserAdd /> 46 - <span className="block sm:hidden">Wamellow</span> 45 + <ServerButton 46 + as={Link} 47 + startContent={<HiUserAdd />} 48 + href="/login?invite=true" 49 + className="button-primary" 50 + > 51 + <span className="block sm:hidden">Invite</span> 47 52 <span className="hidden sm:block">Invite Wamellow</span> 48 - </Link> 53 + </ServerButton> 49 54 ); 50 55 51 56 return ( ··· 74 79 75 80 <div className="flex flex-col min-w-full lg:min-w-[420px]"> 76 81 77 - <div className="lg:ml-auto flex gap-2 text-xl font-medium mt-4 lg:mt-0"> 78 - <Link href="/login?invite=true" className="flex text-neutral-200 bg-violet-600 hover:bg-violet-600/80 py-2 px-4 rounded-md duration-200 w-1/2 lg:w-fit justify-center gap-2"> 79 - <HiUserAdd className="relative top-1" /> 80 - <span className="block sm:hidden">Wamellow</span> 82 + <div className="lg:ml-auto flex gap-2 mt-4 lg:mt-0"> 83 + <ServerButton 84 + as={Link} 85 + startContent={<HiUserAdd />} 86 + className="button-primary w-1/2 lg:w-fit !text-xl !font-medium" 87 + href="/login?invite=true" 88 + size="lg" 89 + > 90 + <span className="block sm:hidden">Invite</span> 81 91 <span className="hidden sm:block">Invite Wamellow</span> 82 - </Link> 83 - <Link href="/support" className="button w-1/2"> 84 - <BsDiscord /> 92 + </ServerButton> 93 + <ServerButton 94 + as={Link} 95 + startContent={<BsDiscord />} 96 + className="w-1/2 lg:w-fit !text-xl !font-medium" 97 + href="/support" 98 + size="lg" 99 + > 85 100 <span className="block sm:hidden">Support</span> 86 101 <span className="hidden sm:block">Join support</span> 87 - </Link> 102 + </ServerButton> 88 103 </div> 89 104 90 105 ··· 114 129 115 130 <div className="flex gap-2 mt-4"> 116 131 <Invite /> 117 - <Link href="/leaderboard/1055188344188973066" className="button"> 118 - <span className="mr-2">View Leaderboard</span> 119 - <HiArrowRight /> 120 - </Link> 132 + <ServerButton 133 + as={Link} 134 + startContent={<HiArrowRight />} 135 + href="/leaderboard/1055188344188973066" 136 + > 137 + View Leaderboard 138 + </ServerButton> 121 139 </div> 122 140 123 141 </div> ··· 181 199 182 200 <div className="flex gap-2 mt-4"> 183 201 <Invite /> 184 - <Link href="/dashboard?to=greeting" className="button"> 185 - <span className="mr-2">Setup</span> 186 - <HiArrowRight /> 187 - </Link> 202 + <ServerButton 203 + as={Link} 204 + startContent={<HiArrowRight />} 205 + href="/dashboard?to=greeting" 206 + > 207 + Setup 208 + </ServerButton> 188 209 </div> 189 210 190 211 </div> ··· 204 225 205 226 <div className="flex gap-2 mt-4"> 206 227 <Invite /> 207 - <Link href="/dashboard?to=starboard" className="button"> 208 - <span className="mr-2">Setup</span> 209 - <HiArrowRight /> 210 - </Link> 228 + <ServerButton 229 + as={Link} 230 + startContent={<HiArrowRight />} 231 + href="/dashboard?to=starboard" 232 + > 233 + Setup 234 + </ServerButton> 211 235 </div> 212 236 213 237 </div>
+1 -1
app/dashboard/[guildId]/custom-commands/page.tsx
··· 56 56 switch (res.status) { 57 57 case 200: { 58 58 setTags(response); 59 - if (!tagId) setTagId(response[0].tagId); 59 + if (!tagId) setTagId(response[0]?.tagId); 60 60 break; 61 61 } 62 62 default: {
+21 -20
app/dashboard/[guildId]/layout.tsx
··· 1 1 "use client"; 2 2 3 3 import { Skeleton } from "@nextui-org/react"; 4 - import Head from "next/head"; 5 4 import Link from "next/link"; 6 5 import { useParams, usePathname } from "next/navigation"; 7 6 import { useEffect, useState } from "react"; ··· 163 162 164 163 return ( 165 164 <div className="flex flex-col w-full"> 166 - <Head> 167 - {guild?.name && <title>{`${guild?.name}'s Dashboard`}</title>} 168 - </Head> 165 + <title>{`${guild?.name}'s Dashboard`}</title> 169 166 170 167 <div className="flex flex-col gap-5 mb-3"> 171 168 <Link href="/dashboard" className="button-underline"> 172 169 <HiArrowNarrowLeft /> Serverlist 173 170 </Link> 174 171 175 - <div className="text-lg flex gap-5 items-center"> 176 - <Skeleton isLoaded={!!guild?.id} className="rounded-full h-14 w-14 ring-offset-[var(--background-rgb)] ring-2 ring-offset-2 ring-violet-400/40"> 177 - <ImageReduceMotion url={`https://cdn.discordapp.com/icons/${guild?.id}/${guild?.icon}`} size={128} alt="Server" /> 178 - </Skeleton> 172 + <div className="text-lg flex flex-col md:flex-row md:items-center"> 173 + <div className="flex gap-5"> 174 + <Skeleton isLoaded={!!guild?.id} className="rounded-full h-14 w-14 ring-offset-[var(--background-rgb)] ring-2 ring-offset-2 ring-violet-400/40 shrink-0"> 175 + <ImageReduceMotion url={`https://cdn.discordapp.com/icons/${guild?.id}/${guild?.icon}`} size={128} alt="Server" /> 176 + </Skeleton> 179 177 180 - {!guild?.id ? 181 - <div> 182 - <Skeleton className="rounded-xl w-32 h-5 mb-2" /> 183 - <Skeleton className="rounded-xl w-10 h-3.5" /> 184 - </div> 185 - : 186 - <div className="flex flex-col gap-1"> 187 - <div className="text-2xl dark:text-neutral-200 text-neutral-800 font-medium">{guild?.name || "Unknown Server"}</div> 188 - <div className="text-sm font-semibold flex items-center gap-1"> <HiUsers /> {intl.format(guild?.memberCount || 0)}</div> 189 - </div> 190 - } 178 + {!guild?.id ? 179 + <div> 180 + <Skeleton className="rounded-xl w-32 h-5 mb-2" /> 181 + <Skeleton className="rounded-xl w-10 h-3.5" /> 182 + </div> 183 + : 184 + <div className="flex flex-col gap-1"> 185 + <div className="text-2xl dark:text-neutral-200 text-neutral-800 font-medium">{guild?.name || "Unknown Server"}</div> 186 + <div className="text-sm font-semibold flex items-center gap-1"> <HiUsers /> {intl.format(guild?.memberCount || 0)}</div> 187 + </div> 188 + } 191 189 192 - <div className="ml-auto"> 190 + </div> 191 + 192 + <div className="md:ml-auto mt-6 md:mt-0"> 193 193 {web.devToolsEnabled && 194 194 <CopyToClipboardButton 195 195 text={getCanonicalUrl("leaderboard", params.guildId.toString())} ··· 202 202 } 203 203 </div> 204 204 </div> 205 + 205 206 </div> 206 207 207 208 <ListTab
+1 -1
app/dashboard/[guildId]/leaderboards/updating.component.tsx
··· 53 53 }); 54 54 55 55 return ( 56 - <div className="w-1/3 flex items-center flex-col"> 56 + <div className="md:w-1/3 flex items-center flex-col"> 57 57 <div> 58 58 <div className="text-sm mb-0.5">Updating {type} {leaderboard?.channelId && "in"}</div> 59 59
+2 -1
app/dashboard/page.tsx
··· 98 98 <Button 99 99 as={Link} 100 100 href="/login?invite=true" 101 - className="button-blurple" 101 + className="button-blurple w-1/2 md:w-min" 102 102 startContent={<HiUserAdd />} 103 103 > 104 104 Add to Server ··· 106 106 <Button 107 107 as={Link} 108 108 href="/login" 109 + className="w-1/2 md:w-min" 109 110 startContent={<BsDiscord />} 110 111 > 111 112 Reload
+4 -9
app/globals.css
··· 55 55 56 56 button.subpixel-antialiased:not(.w-unit-10):not(.default):not(.bg-secondary):not(.button-primary):not(.button-blurple):not(.button-underline), 57 57 a[role="button"]:not(.w-unit-10):not(.default):not(.bg-secondary):not(.button-primary):not(.button-blurple):not(.button-underline) { 58 - @apply dark:hover:bg-wamellow-light hover:bg-wamellow-100-light justify-start 59 - } 60 - 61 - button.subpixel-antialiased:not(.w-unit-10):not(.default):not(.bg-secondary):not(.button-primary):not(.button-blurple):not(.button-underline), 62 - a[role="button"]:not(.w-unit-10):not(.default):not(.bg-secondary):not(.button-primary):not(.button-blurple):not(.button-underline) { 63 - @apply text-medium duration-200 58 + @apply dark:hover:bg-wamellow-light hover:bg-wamellow-100-light py-2 px-4 rounded-md duration-200 justify-center gap-2 items-center text-medium 64 59 } 65 60 66 61 .text-sm button.subpixel-antialiased, ··· 70 65 } 71 66 72 67 .button { 73 - @apply flex dark:text-neutral-300 text-neutral-700 dark:bg-wamellow bg-wamellow-100 dark:hover:bg-wamellow-light hover:bg-wamellow-100-light py-2 px-4 rounded-md duration-200 lg:w-fit justify-center gap-2 items-center text-medium 68 + @apply flex dark:text-neutral-300 text-neutral-700 dark:bg-wamellow bg-wamellow-100 dark:hover:bg-wamellow-light hover:bg-wamellow-100-light py-2 px-4 rounded-md duration-200 justify-center gap-2 items-center text-medium 74 69 } 75 70 76 71 .button-primary { 77 - @apply flex text-neutral-200 bg-violet-600 hover:bg-violet-600/80 py-2 px-4 rounded-md duration-200 lg:w-fit justify-center gap-2 items-center text-medium 72 + @apply flex text-neutral-200 bg-violet-600 hover:bg-violet-600/80 py-2 px-4 rounded-md duration-200 justify-center gap-2 items-center text-medium 78 73 } 79 74 80 75 .button-blurple { 81 - @apply flex text-neutral-100 bg-blurple hover:bg-blurple-dark py-2 px-4 rounded-md duration-200 lg:w-fit justify-center gap-2 items-center font-medium text-medium 76 + @apply flex text-neutral-100 bg-blurple hover:bg-blurple-dark py-2 px-4 rounded-md duration-200 justify-center gap-2 items-center font-medium text-medium 82 77 } 83 78 84 79 .button-underline {
+4 -2
app/leaderboard/[guildId]/side.component.tsx
··· 12 12 import ErrorBanner from "@/components/Error"; 13 13 import Modal from "@/components/modal"; 14 14 import { ApiV1GuildsModulesLeaderboardGetResponse } from "@/typings"; 15 + import cn from "@/utils/cn"; 15 16 import { getCanonicalUrl } from "@/utils/urls"; 16 17 17 18 const SideComponent: FunctionComponent<{ guildId: string, design: ApiV1GuildsModulesLeaderboardGetResponse }> = ({ guildId, design }) => { ··· 24 25 <div className="flex flex-col gap-3"> 25 26 26 27 <CopyToClipboardButton 27 - className={design?.backgroundColor && "dark:bg-wamellow/60 bg-wamellow-100/60 dark:hover:bg-wamellow-light/70 hover:bg-wamellow-100-light/70 w-full" || " w-full"} 28 + className={cn("w-full !justify-start", design?.backgroundColor && "dark:bg-wamellow/60 bg-wamellow-100/60 dark:hover:bg-wamellow-light/70 hover:bg-wamellow-100-light/70")} 28 29 text={getCanonicalUrl("leaderboard", guildId)} 29 30 icon={<HiShare />} 30 31 /> ··· 41 42 42 43 <div className="flex flex-col gap-3"> 43 44 <Button 44 - className="w-full" 45 + className="w-full !justify-start" 45 46 onClick={() => setModal(true)} 46 47 startContent={<HiTrash />} 47 48 > ··· 49 50 </Button> 50 51 <Button 51 52 as={Link} 53 + className="w-full !justify-start" 52 54 href={getCanonicalUrl("dashboard", guildId)} 53 55 startContent={<HiViewGridAdd />} 54 56 >
+16 -8
app/profile/layout.tsx
··· 3 3 import { Skeleton } from "@nextui-org/react"; 4 4 import { useEffect, useState } from "react"; 5 5 import CountUp from "react-countup"; 6 + import { HiHome } from "react-icons/hi"; 6 7 7 8 import { userStore } from "@/common/user"; 8 - import ErrorBanner from "@/components/Error"; 9 9 import ImageReduceMotion from "@/components/image-reduce-motion"; 10 10 import { ListTab } from "@/components/list"; 11 + import { ScreenMessage } from "@/components/screen-message"; 11 12 import { ApiV1MeGetResponse, RouteErrorResponse } from "@/typings"; 12 13 13 14 export default function RootLayout({ ··· 49 50 }); 50 51 }, [user]); 51 52 52 - if (error) return <ErrorBanner message={error} />; 53 - 54 53 return ( 55 54 <div className="flex flex-col w-full h-full"> 56 55 <title>Your profile</title> 57 56 58 57 <div className="flex flex-col gap-5 mb-3"> 59 - {error && <ErrorBanner message={error} />} 60 58 61 59 <div className="text-lg flex flex-col md:flex-row md:items-center"> 62 60 <div className="flex gap-5"> 63 - <Skeleton isLoaded={!!user?.id} className="rounded-full h-14 w-14 ring-offset-[var(--background-rgb)] ring-2 ring-offset-2 ring-violet-400/40"> 61 + <Skeleton isLoaded={!!user?.id} className="rounded-full h-14 w-14 ring-offset-[var(--background-rgb)] ring-2 ring-offset-2 ring-violet-400/40 shrink-0"> 64 62 <ImageReduceMotion url={`https://cdn.discordapp.com/avatars/${user?.id}/${user?.avatar}`} size={128} alt="User" /> 65 63 </Skeleton> 66 64 ··· 77 75 } 78 76 </div> 79 77 80 - <div className="md:ml-auto flex items-center gap-5 mt-6 sm:mt-0"> 78 + <div className="md:ml-auto flex items-center gap-5 mt-6 md:mt-0"> 81 79 <div> 82 80 <div className="text-sm font-medium">Messages</div> 83 81 {!user?.extended?.activity ··· 136 134 ) 137 135 ]} 138 136 url={"/profile"} 139 - disabled={!user} 137 + disabled={!user?.id || !!error} 140 138 /> 141 139 142 - {user?.id ? children : <></>} 140 + {error ? 141 + <ScreenMessage 142 + title="Something went wrong.." 143 + description={error} 144 + href="/" 145 + button="Go back home" 146 + icon={<HiHome />} 147 + /> 148 + : 149 + user?.id ? children : <></> 150 + } 143 151 144 152 </div> 145 153 );
+1 -1
components/Header.tsx
··· 158 158 key={"headerButton-" + button.name + button.url} 159 159 as={Link} 160 160 href={button.url} 161 - className="dark:hover:bg-wamellow-alpha hover:bg-wamellow-100-alpha p-4 w-full duration-200 flex items-center" 161 + className="w-full !justify-start" 162 162 onClick={() => setMenu(false)} 163 163 startContent={button.icon} 164 164 >
+8 -15
components/Modal.tsx
··· 1 1 "use client"; 2 2 3 - import { Progress } from "@nextui-org/react"; 3 + import { Button, Progress } from "@nextui-org/react"; 4 4 import { AnimatePresence, motion, MotionConfig } from "framer-motion"; 5 5 import { useState } from "react"; 6 6 import { HiX } from "react-icons/hi"; 7 - import TailSpin from "react-loading-icons/dist/esm/components/tail-spin"; 8 7 9 8 import { RouteErrorResponse } from "@/typings"; 10 9 import cn from "@/utils/cn"; ··· 106 105 <div className="md:relative absolute bottom-0 left-0 w-full dark:bg-wamellow/40 bg-wamellow-100/40 rounded-bl-md rounded-br-md"> 107 106 <div className="flex items-center w-full gap-4 p-4"> 108 107 109 - {state === "LOADING" ? 110 - <div className="flex items-center gap-2"> 111 - <TailSpin stroke="#a3a3a3" strokeWidth={6} className="relative h-3 w-3 overflow-visible" /> 112 - Submitting... 113 - </div> 114 - : 115 - subChildren 116 - } 108 + {subChildren} 117 109 118 110 {onSubmit && 119 111 <button ··· 124 116 </button> 125 117 } 126 118 127 - <button 119 + <Button 120 + color={variant || "secondary"} 128 121 onClick={() => { 129 122 if (state === "LOADING") return; 130 123 if (!onSubmit) return onClose(); ··· 141 134 }) 142 135 .catch((e: Error) => setError(e.message || "Unknown server error")); 143 136 }} 144 - className={cn("flex bg-violet-600 hover:bg-violet-700 text-neutral-200 font-medium py-2 px-5 duration-200 rounded-md", !onSubmit && "ml-auto", state === "LOADING" && "opacity-50 cursor-wait", variant === "danger" && "bg-red-500/80 hover:bg-red-600")} 145 - disabled={state === "LOADING"} 137 + className={cn(!onSubmit && "ml-auto")} 138 + isLoading={state === "LOADING"} 146 139 > 147 - <span>{buttonName}</span> 148 - </button> 140 + {buttonName} 141 + </Button> 149 142 150 143 </div> 151 144 </div>
+2 -2
components/discord/Message.tsx
··· 59 59 <div className="flex flex-row items-start pointer-events-none [&>*]:pointer-events-auto"> 60 60 <div className="flex justify-start items-center w-[52px] shrink-0"> 61 61 <Avatar 62 - className="h-10 w-10 hover:cursor-pointer mt-1.5 lca-popover-activator" 62 + className="h-10 w-10 hover:cursor-pointer mt-1.5" 63 63 radius="full" 64 64 src={user.avatar} 65 65 /> ··· 67 67 68 68 <div className="flex-1 w-0"> 69 69 <div className="flex items-center space-x-2"> 70 - <div className="font-semibold whitespace-nowrap overflow-hidden text-ellipsis hover:underline lca-popover-activator" > 70 + <div className="font-semibold whitespace-nowrap overflow-hidden text-ellipsis hover:underline" > 71 71 {user.username} 72 72 </div> 73 73 {user.bot && <div className="text-xxs text-white bg-blurple rounded py-[1px] px-1 flex items-center">