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.

fix some styles

Luna 8d413629 b89c4cfd

+45 -35
+7 -6
app/dashboard/[guildId]/nsfw-image-scanning/page.tsx
··· 3 3 import { Code } from "@nextui-org/react"; 4 4 import { useParams } from "next/navigation"; 5 5 import { useState } from "react"; 6 - import { HiExclamation, HiViewGridAdd } from "react-icons/hi"; 6 + import { HiViewGridAdd } from "react-icons/hi"; 7 7 import { useQuery } from "react-query"; 8 8 9 9 import { guildStore } from "@/common/guilds"; 10 10 import MultiSelectMenu from "@/components/inputs/MultiSelectMenu"; 11 11 import SelectMenu from "@/components/inputs/SelectMenu"; 12 12 import Switch from "@/components/inputs/Switch"; 13 + import Notice, { NoticeType } from "@/components/notice"; 13 14 import { ScreenMessage } from "@/components/screen-message"; 14 15 import { getData } from "@/lib/api"; 15 16 import { ApiV1GuildsModulesNsfwModerationGetResponse } from "@/typings"; ··· 53 54 return ( 54 55 <> 55 56 56 - <div className="mb-6 p-3 rounded-md bg-violet-500/80 border-violet-400/80 border text-neutral-200 flex items-center gap-2"> 57 - <HiExclamation className="mt-1 h-5 w-5" /> 58 - <span>Images could be false positives of false negatives, this will not replace human moderation.</span> 59 - </div> 57 + <Notice 58 + type={NoticeType.Info} 59 + message="Images could be false positives of false negatives, this will not replace human moderation." 60 + /> 60 61 61 62 <Switch 62 63 name="NSFW image moderation enabled." ··· 137 138 </div> 138 139 139 140 <span className="mb-2" > 140 - Members with the <Code>Manage Messages</Code> permission bypass the NSFW image scanning automatically. <br /> 141 + Members with the <Code color="secondary">Manage Messages</Code> permission bypass the NSFW image scanning automatically. <br /> 141 142 </span> 142 143 143 144 </>
+27 -19
app/dashboard/page.tsx
··· 10 10 11 11 import { userStore } from "@/common/user"; 12 12 import { webStore } from "@/common/webstore"; 13 - import ErrorBanner from "@/components/Error"; 14 13 import ImageReduceMotion from "@/components/image-reduce-motion"; 15 14 import DumbTextInput from "@/components/inputs/Dumb_TextInput"; 15 + import Notice, { NoticeType } from "@/components/notice"; 16 16 import { ScreenMessage } from "@/components/screen-message"; 17 17 import SadWumpusPic from "@/public/sad-wumpus.gif"; 18 18 import { RouteErrorResponse, UserGuild } from "@/typings"; ··· 82 82 <div className="flex flex-col w-full"> 83 83 <title>Dashboard</title> 84 84 85 - {error && <ErrorBanner message={error} />} 85 + {error && 86 + <Notice 87 + type={NoticeType.Error} 88 + message={error} 89 + /> 90 + } 91 + 86 92 <div className="md:flex md:items-center"> 87 93 <div> 88 94 <div className="text-2xl dark:text-neutral-100 text-neutral-900 font-semibold mb-2">👋 Heyia, {user?.global_name || `@${user?.username}`}</div> 89 95 <div className="text-lg font-medium">Select a server you want to manage.</div> 90 96 </div> 91 97 92 - {web.devToolsEnabled && 93 - <div className="md:hidden mt-3"> 98 + <div className="md:hidden mt-3"> 99 + <DumbTextInput 100 + value={search} 101 + setValue={setSearch} 102 + placeholder="Search" 103 + thin 104 + /> 105 + </div> 106 + 107 + <div className="md:ml-auto flex gap-3 mt-4 md:mt-0"> 108 + <div className="hidden md:block"> 94 109 <DumbTextInput 95 110 value={search} 96 111 setValue={setSearch} ··· 98 113 thin 99 114 /> 100 115 </div> 101 - } 102 - 103 - <div className="md:ml-auto flex gap-3 mt-4 md:mt-0"> 104 - {web.devToolsEnabled && 105 - <div className="hidden md:block"> 106 - <DumbTextInput 107 - value={search} 108 - setValue={setSearch} 109 - placeholder="Search" 110 - thin 111 - /> 112 - </div> 113 - } 114 116 <Button 115 117 as={Link} 116 118 href="/login?invite=true" ··· 134 136 <hr className="mx-0 p-1 my-4 dark:border-wamellow-light border-wamellow-100-light w-full" /> 135 137 136 138 <div className="dark:bg-wamellow bg-wamellow-100 md:flex gap-1 dark:text-neutral-400 text-neutral-600 rounded-md overflow-hidden w-[72px] mb-5 hidden"> 137 - <button onClick={() => setDisplay("GRID")} className={cn("h-7 w-8 flex items-center justify-center p-[4px] rounded-md", display === "GRID" ? "dark:bg-neutral-700/50 bg-neutral-400/50" : "dark:bg-neutral-800/30 bg-neutral-400/30")}> 139 + <button 140 + onClick={() => setDisplay("GRID")} 141 + className={cn("h-7 w-8 flex items-center justify-center p-[4px] rounded-md", display === "GRID" && "dark:bg-wamellow bg-wamellow-100")} 142 + > 138 143 <HiViewGrid /> 139 144 </button> 140 - <button onClick={() => setDisplay("LIST")} className={cn("h-7 w-8 flex items-center justify-center p-[4px] rounded-md", display === "LIST" ? "dark:bg-neutral-700/50 bg-neutral-400/50" : "dark:bg-neutral-800/30 bg-neutral-400/30")}> 145 + <button 146 + onClick={() => setDisplay("LIST")} 147 + className={cn("h-7 w-8 flex items-center justify-center p-[4px] rounded-md", display === "LIST" && "dark:bg-wamellow bg-wamellow-100")} 148 + > 141 149 <HiViewList /> 142 150 </button> 143 151 </div>
-1
app/leaderboard/[guildId]/side.component.tsx
··· 73 73 as={Link} 74 74 className="w-full !justify-start" 75 75 color="secondary" 76 - variant="flat" 77 76 href={guild.inviteUrl} 78 77 target="_blank" 79 78 startContent={<BsDiscord />}
+3 -3
components/counter.tsx
··· 74 74 </Link>} 75 75 </div> 76 76 77 - <div className="flex"> 77 + <div className="md:flex"> 78 78 <ClientCountUp className="text-3xl dark:text-neutral-100 text-neutral-900 font-medium" end={item.number} /> 79 - <span className="text-lg dark:text-violet-400 text-violet-600 font-medium relative top-2.5 ml-2"> 79 + <div className="text-lg dark:text-violet-400 text-violet-600 font-medium relative md:top-2.5 md:ml-2"> 80 80 {typeof item.gained === "number" 81 81 ? 82 82 <>+<ClientCountUp end={item.gained} /> {item.append || "today"}</> 83 83 : 84 84 item.gained 85 85 } 86 - </span> 86 + </div> 87 87 </div> 88 88 89 89 </div>
+3 -3
components/header.tsx
··· 141 141 } 142 142 }} 143 143 className=" 144 - relative top-2 sm:right-[268px] w-full sm:w-72 dark:bg-wamellow bg-wamellow-100 rounded-xl backdrop-blur-2xl backdrop-brightness-75 overflow-hidden shadow-xl 144 + relative top-2 sm:right-[268px] w-full sm:w-72 dark:bg-black/40 bg-white/40 rounded-xl backdrop-blur-3xl backdrop-brightness-75 overflow-hidden shadow-xl 145 145 flex flex-col py-2 sm:py-1 p-2 sm:p-0 text-base 146 146 [--y-closed:-16px] [--opacity-closed:0%] sm:[--scale-closed:90%] 147 147 [--y-open:0px] [--opacity-open:100%] sm:[--scale-open:100%] ··· 173 173 174 174 {buttons.map((button, i) => { 175 175 if ("type" in button && button.type === "split") { 176 - return <hr key={"headerButton-" + button.type + i} className="my-1 mx-0 dark:border-wamellow-light border-wamellow-100-light" />; 176 + return <hr key={"headerButton-" + button.type + i} className="my-1 mx-2 dark:border-wamellow border-wamellow-100" />; 177 177 } 178 178 179 179 if ("url" in button) { ··· 198 198 className="flex items-center px-4 pt-2 pb-3" 199 199 > 200 200 {button.icon} 201 - <span className="ml-2 text-xl my-1 sm:text-medium sm:my-0">{button.name}</span> 201 + <span className="ml-[9px] text-xl my-1 sm:text-medium sm:my-0">{button.name}</span> 202 202 <Switch 203 203 key={"headerButton-" + button.name} 204 204 className="ml-auto"
+2 -2
components/modal.tsx
··· 54 54 animate={show ? "open" : "closed"} 55 55 exit="closed" 56 56 variants={{ closed: { opacity: 0 }, open: { opacity: 1 } }} 57 - className="fixed top-0 left-0 h-screen w-full inset-0 bg-black/90 flex items-center justify-center z-50" 57 + className="fixed top-0 left-0 h-screen w-full inset-0 backdrop-blur backdrop-brightness-50 flex items-center justify-center z-50" 58 58 > 59 59 <motion.div 60 60 initial="closed" ··· 74 74 }} 75 75 className=" 76 76 md:relative fixed bottom-0 min-h-[333px] md:min-h-fit m-2 77 - w-full md:w-[480px] backdrop-blur-xl backdrop-brightness-10 rounded-xl shadow-md 77 + w-full md:w-[480px] bg-[#06040b] rounded-xl shadow-md 78 78 max-sm:[--y-closed:16px] [--opacity-closed:0%] sm:[--scale-closed:90%] 79 79 max-sm:[--y-open:0px] [--opacity-open:100%] sm:[--scale-open:100%] 80 80 "
+3 -1
components/notice.tsx
··· 1 1 import { HiExclamation, HiExclamationCircle } from "react-icons/hi"; 2 2 3 + import cn from "@/utils/cn"; 4 + 3 5 export enum NoticeType { 4 6 Error = "error", 5 7 Info = "info" ··· 18 20 }: Props) { 19 21 20 22 return ( 21 - <div className={`w-full text-neutral-100 ${type === NoticeType.Info ? "bg-violet-400/40" : "bg-red-400/40"} py-2 px-4 mb-6 rounded-md flex gap-2 items-center`}> 23 + <div className={cn("w-full text-neutral-100 py-2 px-4 mb-6 rounded-md flex gap-2 items-center", type === NoticeType.Info ? "bg-violet-400/40" : "bg-red-400/40")}> 22 24 {type === NoticeType.Info ? <HiExclamationCircle className="h-5 w-5" /> : <HiExclamation className="h-5 w-5" />} 23 25 <div className="text-lg">{message}</div> 24 26