diff --git a/src/app/globals.css b/src/app/globals.css index 756266f6f8..787e4c6612 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -97,11 +97,10 @@ --alert-error: 0 78% 98%; --alert-error-icon: 0 84% 60%; - /* we plan to add the whole alpha color palettes */ - --whiteAlpha-800: rgba(255, 255, 255, 0.8); - --blackAlpha-800: rgba(0, 0, 0, 0.8); - --blackAlpha-300: rgba(0, 0, 0, 0.3); - --blackAlpha-100: rgba(0, 0, 0, 0.1); + --blackAlpha-soft: rgba(0, 0, 0, 0.06); + --blackAlpha-medium: rgba(0, 0, 0, 0.16); + --blackAlpha-hard: rgba(0, 0, 0, 0.8); + /* not sure about this approach, we should think about this one too */ --gray: 240 3% 46%; /* gray.500 from Chakra */ @@ -127,8 +126,12 @@ --github-active: 0 0% 15%; --farcaster: 261 55% 61%; - --farcaster-hover: 261 55% 55%; - --farcaster-active: 239 75% 50%; + --farcaster-hover: 261 55% 49%; + --farcaster-active: 261 54% 37%; + + --uniswap: 331 100% 45%; + --uniswap-hover: 332 100% 35%; + --uniswap-active: 331 100% 25%; /** * Missing reward colors to work with the current Chakra driven solution. @@ -247,8 +250,13 @@ --google-active: 212 96% 78%; --github-hover: 0 0% 44%; --github-active: 0 0% 68%; - --farcaster-hover: 239 75% 75%; - --farcaster-active: 238 76% 81%; + + --farcaster-hover: 261 54% 69%; + --farcaster-active: 262 54% 77%; + + --uniswap-hover: 331 100% 55%; + --uniswap-active: 331 100% 65%; + } } diff --git a/src/components/[guild]/AddAndOrderRoles/components/DraggableRoleCard.tsx b/src/components/[guild]/AddAndOrderRoles/components/DraggableRoleCard.tsx index 42488eddfb..e32b32cad5 100644 --- a/src/components/[guild]/AddAndOrderRoles/components/DraggableRoleCard.tsx +++ b/src/components/[guild]/AddAndOrderRoles/components/DraggableRoleCard.tsx @@ -1,7 +1,7 @@ import { HStack, Heading, Icon, Spacer } from "@chakra-ui/react" import { DotsSixVertical } from "@phosphor-icons/react" import { MemberCount } from "components/[guild]/RoleCard/components/MemberCount" -import Visibility from "components/[guild]/Visibility" +import { Visibility } from "components/[guild]/Visibility" import Card from "components/common/Card" import GuildLogo from "components/common/GuildLogo" import { Role } from "types" @@ -34,10 +34,10 @@ const DraggableRoleCard = ({ role }: Props) => { className="!bg-transparent text-muted-foreground" /> diff --git a/src/components/[guild]/Requirements/RoleRequirements.tsx b/src/components/[guild]/Requirements/RoleRequirements.tsx index 0b2f684182..5a28fb4866 100644 --- a/src/components/[guild]/Requirements/RoleRequirements.tsx +++ b/src/components/[guild]/Requirements/RoleRequirements.tsx @@ -5,10 +5,13 @@ import { Fragment } from "react" import { Role } from "types" import { LogicDivider } from "../LogicDivider" import useRequirements from "../hooks/useRequirements" -import AnyOfHeader from "./components/AnyOfHeader" +import { AnyOfHeader } from "./components/AnyOfHeader" import { HiddenRequirementAccessIndicator } from "./components/HiddenRequirementAccessIndicator" -import RequirementComponent, { RequirementSkeleton } from "./components/Requirement" -import RequirementDisplayComponent from "./components/RequirementDisplayComponent" +import { + Requirement as RequirementComponent, + RequirementSkeleton, +} from "./components/Requirement" +import { RequirementDisplayComponent } from "./components/RequirementDisplayComponent" type Props = { role?: Role // Role can be undefined when the role is private diff --git a/src/components/[guild]/Requirements/components/AnyOfHeader.tsx b/src/components/[guild]/Requirements/components/AnyOfHeader.tsx index 0eaf811231..dc1eee562e 100644 --- a/src/components/[guild]/Requirements/components/AnyOfHeader.tsx +++ b/src/components/[guild]/Requirements/components/AnyOfHeader.tsx @@ -1,42 +1,15 @@ -import { Box, HStack, Text, useColorModeValue } from "@chakra-ui/react" - type Props = { anyOfNum?: number } -const AnyOfHeader = ({ anyOfNum }: Props): JSX.Element => { - const borderColor = useColorModeValue("blackAlpha.400", "whiteAlpha.400") - const textColor = useColorModeValue("blackAlpha.500", "whiteAlpha.400") - - return ( - - - - {`ANY ${anyOfNum} OF`} - - - - ) -} - -export default AnyOfHeader +const AnyOfHeader = ({ anyOfNum }: Props): JSX.Element => ( +
+
+
+ {`ANY ${anyOfNum} OF`} +
+
+
+) + +export { AnyOfHeader } diff --git a/src/components/[guild]/Requirements/components/BlockExplorerUrl.tsx b/src/components/[guild]/Requirements/components/BlockExplorerUrl.tsx index 69713b16dd..a5bcdf9fde 100644 --- a/src/components/[guild]/Requirements/components/BlockExplorerUrl.tsx +++ b/src/components/[guild]/Requirements/components/BlockExplorerUrl.tsx @@ -1,5 +1,5 @@ import { useColorMode } from "@chakra-ui/react" -import { RequirementLinkButton } from "components/[guild]/Requirements/components/RequirementButton" +import { RequirementLink } from "components/[guild]/Requirements/components/RequirementButton" import { NULL_ADDRESS } from "utils/guildCheckout/constants" import { CHAIN_CONFIG, Chain } from "wagmiConfig/chains" import { useRequirementContext } from "./RequirementContext" @@ -35,12 +35,11 @@ const BlockExplorerUrl = ({ : `${blockExplorerUrl}/${path}/${addressProp ?? address}` return ( - - {label ?? "View on explorer"} - + label={label ?? "View on explorer"} + /> ) } diff --git a/src/components/[guild]/Requirements/components/DataBlockWithDate.tsx b/src/components/[guild]/Requirements/components/DataBlockWithDate.tsx index 2a53af8ca0..9f69387b6e 100644 --- a/src/components/[guild]/Requirements/components/DataBlockWithDate.tsx +++ b/src/components/[guild]/Requirements/components/DataBlockWithDate.tsx @@ -1,4 +1,4 @@ -import DataBlock from "components/common/DataBlock" +import { DataBlock } from "components/common/DataBlock" type Props = { timestamp: number @@ -49,4 +49,4 @@ export const BeforeAfterDates = ({ return null } -export default DataBlockWithDate +export { DataBlockWithDate } diff --git a/src/components/[guild]/Requirements/components/DataBlockWithRelativeDate.tsx b/src/components/[guild]/Requirements/components/DataBlockWithRelativeDate.tsx index 867c41395f..e70de5b83d 100644 --- a/src/components/[guild]/Requirements/components/DataBlockWithRelativeDate.tsx +++ b/src/components/[guild]/Requirements/components/DataBlockWithRelativeDate.tsx @@ -1,4 +1,4 @@ -import DataBlock from "components/common/DataBlock" +import { DataBlock } from "components/common/DataBlock" import formatRelativeTimeFromNow from "utils/formatRelativeTimeFromNow" type Props = { @@ -9,4 +9,4 @@ const DataBlockWithRelativeDate = ({ timestamp }: Props): JSX.Element => ( {formatRelativeTimeFromNow(timestamp)} ) -export default DataBlockWithRelativeDate +export { DataBlockWithRelativeDate } diff --git a/src/components/[guild]/Requirements/components/Requirement.tsx b/src/components/[guild]/Requirements/components/Requirement.tsx index 97c5200771..1806d6edbd 100644 --- a/src/components/[guild]/Requirements/components/Requirement.tsx +++ b/src/components/[guild]/Requirements/components/Requirement.tsx @@ -1,21 +1,14 @@ -import { - Box, - HStack, - SimpleGrid, - Skeleton, - Stack, - Tag, - Text, - VStack, -} from "@chakra-ui/react" -import Visibility from "components/[guild]/Visibility" +import { Badge } from "@/components/ui/Badge" +import { Skeleton } from "@/components/ui/Skeleton" +import { Visibility } from "components/[guild]/Visibility" import dynamic from "next/dynamic" import React, { ComponentType, PropsWithChildren } from "react" import { useFormContext } from "react-hook-form" import { useRequirementContext } from "./RequirementContext" import { RequirementImage, RequirementImageCircle } from "./RequirementImage" -import ResetRequirementButton from "./ResetRequirementButton" -import ViewOriginalPopover from "./ViewOriginalPopover" +import { ResetRequirementButton } from "./ResetRequirementButton" +import { ViewOriginalPopover } from "./ViewOriginalPopover" + const DataProviderRequirement = dynamic(() => import("./DataProviderRequirement")) export type RequirementProps = PropsWithChildren<{ @@ -50,71 +43,58 @@ const Requirement = ({ /> ) - const ChildrenWrapper = childrenWrapper ?? Box + const ChildrenWrapper = childrenWrapper ?? "div" const ImageWrapper = imageWrapper ?? React.Fragment return ( - - - - - - - - - - - {requirement?.isNegated && DON'T} +
+ + + + + + +
+ + {requirement?.isNegated && DON'T} {requirement?.type === "LINK_VISIT" ? children : requirement?.data?.customName || children} - {!setValue ? ( + + +
+ {!setValue && ( - ) : null} - - - + )} + {footer} {showViewOriginal && ( - +
- - - {children} - +
+

{children}

{!!setValue && } - - +
+
)} - {footer} -
- +
+
{rightElement} - +
) } export const RequirementSkeleton = () => ( - Loading requirement... + ) -export default Requirement +export { Requirement } diff --git a/src/components/[guild]/Requirements/components/RequirementAccessIndicatorUI.tsx b/src/components/[guild]/Requirements/components/RequirementAccessIndicatorUI.tsx index ac4e78149e..2dfcccc55b 100644 --- a/src/components/[guild]/Requirements/components/RequirementAccessIndicatorUI.tsx +++ b/src/components/[guild]/Requirements/components/RequirementAccessIndicatorUI.tsx @@ -31,7 +31,7 @@ const RequirementAccessIndicatorUI = ({ const [openCount, setOpenCount] = useState(0) return ( -
+
{ diff --git a/src/components/[guild]/Requirements/components/RequirementButton.tsx b/src/components/[guild]/Requirements/components/RequirementButton.tsx index 95c03dc38e..c404a10e77 100644 --- a/src/components/[guild]/Requirements/components/RequirementButton.tsx +++ b/src/components/[guild]/Requirements/components/RequirementButton.tsx @@ -1,39 +1,74 @@ -import { Img } from "@chakra-ui/react" -import { ArrowSquareOut } from "@phosphor-icons/react" -import Button from "components/common/Button" +import { Anchor, AnchorProps, anchorVariants } from "@/components/ui/Anchor" +import { Button, ButtonProps, buttonVariants } from "@/components/ui/Button" +import { cn } from "@/lib/utils" +import { ArrowSquareOut } from "@phosphor-icons/react/dist/ssr" import { PropsWithChildren, forwardRef } from "react" -import { Rest } from "types" -type Props = PropsWithChildren +type Props = PropsWithChildren -const RequirementButton = forwardRef(({ children, ...rest }: Props, ref: any) => ( - -)) +const RequirementButton = forwardRef( + ( + { variant = "unstyled", className, children, ...buttonProps }: Props, + ref: any + ) => ( + + ) +) -type LinkProps = Props & { imageUrl: string } +interface LinkProps extends Omit { + label: string + imageUrl: string + variant?: Omit | "link" +} -const RequirementLinkButton = ({ children, imageUrl, ...rest }: LinkProps) => ( - ( + } - rightIcon={} - {...rest} + className={cn( + buttonVariants({ + variant: + variant === "link" ? "unstyled" : (variant as ButtonProps["variant"]), + size: "xs", + className: [ + "h-5 rounded-md", + { + [anchorVariants({ variant: "muted", className: "px-0" })]: + variant === "link", + "hover:no-underline": variant !== "link", + }, + className, + ], + }) + )} + {...anchorProps} > - {children} - + Link image + {label} + + ) -export { RequirementButton, RequirementLinkButton } +export { RequirementButton, RequirementLink } diff --git a/src/components/[guild]/Requirements/components/RequirementChainIndicator.tsx b/src/components/[guild]/Requirements/components/RequirementChainIndicator.tsx index 5afe8d54de..5c86c6cf63 100644 --- a/src/components/[guild]/Requirements/components/RequirementChainIndicator.tsx +++ b/src/components/[guild]/Requirements/components/RequirementChainIndicator.tsx @@ -1,29 +1,27 @@ -import { Img, Tag, TagLabel, TagProps, useColorModeValue } from "@chakra-ui/react" +import { Badge, BadgeProps } from "@/components/ui/Badge" import { Requirement } from "types" import { CHAIN_CONFIG } from "wagmiConfig/chains" import { useRequirementContext } from "./RequirementContext" const RequirementChainIndicator = ({ chain: chainFromProp, - ...rest -}: { chain?: Requirement["chain"] } & TagProps) => { + ...badgeProps +}: { chain?: Requirement["chain"] } & BadgeProps) => { const { chain: chainFromContext } = useRequirementContext() ?? {} const chain = chainFromProp ?? chainFromContext - const bg = useColorModeValue("white", "blackAlpha.300") if (!chain) return null return ( - - + {CHAIN_CONFIG[chain].name} - {CHAIN_CONFIG[chain].name} - + {CHAIN_CONFIG[chain].name} + ) } -export default RequirementChainIndicator +export { RequirementChainIndicator } diff --git a/src/components/[guild]/Requirements/components/RequirementContext.tsx b/src/components/[guild]/Requirements/components/RequirementContext.tsx index ec8959bfa7..f2be210438 100644 --- a/src/components/[guild]/Requirements/components/RequirementContext.tsx +++ b/src/components/[guild]/Requirements/components/RequirementContext.tsx @@ -1,5 +1,6 @@ import { schemas } from "@guildxyz/types" import { PropsWithChildren, createContext, useContext } from "react" +import { RequirementType } from "requirements/types" import { Requirement } from "types" import { z } from "zod" @@ -24,12 +25,11 @@ const RequirementProvider = ({ ) } -type ReqType = z.output["type"] -const useRequirementContext = () => { +const useRequirementContext = () => { const requirement = useContext(RequirementContext) return requirement as unknown as Extract< z.output, - { type: RequirementType } + { type: T } > } diff --git a/src/components/[guild]/Requirements/components/RequirementDisplayComponent.tsx b/src/components/[guild]/Requirements/components/RequirementDisplayComponent.tsx index a26e87420d..7348adec4e 100644 --- a/src/components/[guild]/Requirements/components/RequirementDisplayComponent.tsx +++ b/src/components/[guild]/Requirements/components/RequirementDisplayComponent.tsx @@ -1,20 +1,22 @@ import { usePostHogContext } from "@/components/Providers/PostHogProvider" -import { Icon } from "@chakra-ui/react" -import { Warning } from "@phosphor-icons/react" -import DataBlock from "components/common/DataBlock" +import { Warning } from "@phosphor-icons/react/dist/ssr" +import { DataBlock } from "components/common/DataBlock" import { PropsWithChildren } from "react" import { ErrorBoundary } from "react-error-boundary" import { REQUIREMENT_DISPLAY_COMPONENTS } from "requirements/requirementDisplayComponents" -import { Requirement as RequirementType, Rest } from "types" +import { Requirement as RequirementType } from "types" import { CHAIN_CONFIG } from "wagmiConfig/chains" -import Requirement from "./Requirement" +import { Requirement, RequirementProps } from "./Requirement" import { RequirementAccessIndicator } from "./RequirementAccessIndicator" import { RequirementProvider, useRequirementContext } from "./RequirementContext" -type Props = { +interface Props extends RequirementProps { requirement: RequirementType - rightElement?: JSX.Element -} & Rest +} + +export const RequirementWarningIcon = () => ( + +) const RequirementDisplayComponent = ({ requirement, @@ -25,7 +27,7 @@ const RequirementDisplayComponent = ({ if (!!requirement.chain && !CHAIN_CONFIG[requirement.chain]) return ( - }> + }> {`Unsupported requirement chain: `} {requirement.chain} @@ -33,7 +35,7 @@ const RequirementDisplayComponent = ({ if (!RequirementComponent) return ( - }> + }> {`Unsupported requirement type: `} {requirement.type} @@ -64,11 +66,8 @@ export const InvalidRequirementErrorBoundary = ({ return ( } - rightElement={rightElement} - > - {`Invalid requirement: `} + } rightElement={rightElement}> + {"Invalid requirement: "} {requirement.type} } @@ -86,4 +85,4 @@ export const InvalidRequirementErrorBoundary = ({ ) } -export default RequirementDisplayComponent +export { RequirementDisplayComponent } diff --git a/src/components/[guild]/Requirements/components/RequirementImage.tsx b/src/components/[guild]/Requirements/components/RequirementImage.tsx index 23484ec4ba..98c7346336 100644 --- a/src/components/[guild]/Requirements/components/RequirementImage.tsx +++ b/src/components/[guild]/Requirements/components/RequirementImage.tsx @@ -1,5 +1,5 @@ -import { Circle, Img, SkeletonCircle, useColorModeValue } from "@chakra-ui/react" -import { PropsWithChildren } from "react" +import { Skeleton } from "@/components/ui/Skeleton" +import { PropsWithChildren, ReactNode } from "react" type Props = { isImageLoading?: boolean @@ -8,49 +8,21 @@ type Props = { const RequirementImageCircle = ({ isImageLoading, children, -}: PropsWithChildren) => { - const imageBgColor = useColorModeValue("blackAlpha.100", "blackAlpha.300") - - return ( - - - {children} - - +}: PropsWithChildren) => + isImageLoading ? ( + + ) : ( +
+ {children} +
) -} -const RequirementImage = ({ image }) => { +const RequirementImage = ({ image }: { image: ReactNode | string }) => { if (typeof image !== "string") return image if (image.endsWith(".mp4")) - return ( -
diff --git a/src/components/[guild]/RolePlatforms/components/AddRoleRewardModal/components/DynamicSetup/BaseValueModal.tsx b/src/components/[guild]/RolePlatforms/components/AddRoleRewardModal/components/DynamicSetup/BaseValueModal.tsx index 7bb893eda8..036eb850e8 100644 --- a/src/components/[guild]/RolePlatforms/components/AddRoleRewardModal/components/DynamicSetup/BaseValueModal.tsx +++ b/src/components/[guild]/RolePlatforms/components/AddRoleRewardModal/components/DynamicSetup/BaseValueModal.tsx @@ -11,7 +11,7 @@ import { import { CaretRight } from "@phosphor-icons/react" import { LogicDivider } from "components/[guild]/LogicDivider" import { useRequirementHandlerContext } from "components/[guild]/RequirementHandlerContext" -import RequirementDisplayComponent from "components/[guild]/Requirements/components/RequirementDisplayComponent" +import { RequirementDisplayComponent } from "components/[guild]/Requirements/components/RequirementDisplayComponent" import DisplayCard from "components/common/DisplayCard" import { Modal } from "components/common/Modal" import AddRequirement from "components/create-guild/Requirements/components/AddRequirement" diff --git a/src/components/[guild]/RolePlatforms/components/AddRoleRewardModal/components/DynamicSetup/DynamicRewardSetup.tsx b/src/components/[guild]/RolePlatforms/components/AddRoleRewardModal/components/DynamicSetup/DynamicRewardSetup.tsx index b601cb1bd7..33586e90be 100644 --- a/src/components/[guild]/RolePlatforms/components/AddRoleRewardModal/components/DynamicSetup/DynamicRewardSetup.tsx +++ b/src/components/[guild]/RolePlatforms/components/AddRoleRewardModal/components/DynamicSetup/DynamicRewardSetup.tsx @@ -10,7 +10,7 @@ import { } from "@chakra-ui/react" import { ArrowsClockwise, Lightning } from "@phosphor-icons/react" import { useRequirementHandlerContext } from "components/[guild]/RequirementHandlerContext" -import RequirementDisplayComponent from "components/[guild]/Requirements/components/RequirementDisplayComponent" +import { RequirementDisplayComponent } from "components/[guild]/Requirements/components/RequirementDisplayComponent" import AddCard from "components/common/AddCard" import Button from "components/common/Button" import Card from "components/common/Card" diff --git a/src/components/[guild]/SetVisibility/hooks/useVisibilityTooltipLabel.tsx b/src/components/[guild]/SetVisibility/hooks/useVisibilityTooltipLabel.tsx index 616f85c2bf..68d1a94771 100644 --- a/src/components/[guild]/SetVisibility/hooks/useVisibilityTooltipLabel.tsx +++ b/src/components/[guild]/SetVisibility/hooks/useVisibilityTooltipLabel.tsx @@ -29,6 +29,7 @@ const useVisibilityTooltipLabel = ( bgColor={"blackAlpha.600"} name={role.name} imageUrl={role.imageUrl} + mx="0.5" /> ) : ( "selected" diff --git a/src/components/[guild]/Visibility.tsx b/src/components/[guild]/Visibility.tsx index 621981204d..e60a330d29 100644 --- a/src/components/[guild]/Visibility.tsx +++ b/src/components/[guild]/Visibility.tsx @@ -1,19 +1,25 @@ -import { Tag, TagLabel, TagLeftIcon, TagProps, Tooltip } from "@chakra-ui/react" +import { Badge, BadgeProps } from "@/components/ui/Badge" +import { + Tooltip, + TooltipContent, + TooltipPortal, + TooltipTrigger, +} from "@/components/ui/Tooltip" +import { cn } from "@/lib/utils" import { Visibility as VisibilityType } from "@guildxyz/types" import useVisibilityTooltipLabel from "./SetVisibility/hooks/useVisibilityTooltipLabel" import { VISIBILITY_DATA } from "./SetVisibility/visibilityData" -type Props = { +interface Props extends BadgeProps { entityVisibility: VisibilityType visibilityRoleId: number | null - showTagLabel?: boolean -} & TagProps +} const Visibility = ({ entityVisibility, visibilityRoleId, - showTagLabel, - ...tagProps + className, + ...badgeProps }: Props) => { const VisibilityIcon = VISIBILITY_DATA[entityVisibility].Icon @@ -22,19 +28,25 @@ const Visibility = ({ if (entityVisibility === "PUBLIC") return null return ( - - - - {showTagLabel && ( - {VISIBILITY_DATA[entityVisibility].title} - )} - + + + + + {VISIBILITY_DATA[entityVisibility].title} + + + + + + {label} + + ) } -export default Visibility +export { Visibility } diff --git a/src/components/[guild]/activity/ActivityLogAction/ActivityLogAction.tsx b/src/components/[guild]/activity/ActivityLogAction/ActivityLogAction.tsx index 7b46fc2ad3..51db39e428 100644 --- a/src/components/[guild]/activity/ActivityLogAction/ActivityLogAction.tsx +++ b/src/components/[guild]/activity/ActivityLogAction/ActivityLogAction.tsx @@ -10,7 +10,7 @@ import { useDisclosure, } from "@chakra-ui/react" import { CaretDown } from "@phosphor-icons/react" -import RequirementDisplayComponent from "components/[guild]/Requirements/components/RequirementDisplayComponent" +import { RequirementDisplayComponent } from "components/[guild]/Requirements/components/RequirementDisplayComponent" import Card from "components/common/Card" import { Requirement } from "types" import { ACTION, ActivityLogAction as Action } from "../constants" diff --git a/src/components/[guild]/activity/ActivityLogAction/components/ActivityLogChildAction.tsx b/src/components/[guild]/activity/ActivityLogAction/components/ActivityLogChildAction.tsx index 6eb21189da..973a6df65f 100644 --- a/src/components/[guild]/activity/ActivityLogAction/components/ActivityLogChildAction.tsx +++ b/src/components/[guild]/activity/ActivityLogAction/components/ActivityLogChildAction.tsx @@ -1,5 +1,5 @@ import { Center, HStack, Stack, Text, useBreakpointValue } from "@chakra-ui/react" -import RequirementDisplayComponent from "components/[guild]/Requirements/components/RequirementDisplayComponent" +import { RequirementDisplayComponent } from "components/[guild]/Requirements/components/RequirementDisplayComponent" import { PropsWithChildren } from "react" import { Requirement } from "types" import { ACTION } from "../../constants" diff --git a/src/components/[guild]/activity/ActivityLogAction/components/BeforeAfterActions.tsx b/src/components/[guild]/activity/ActivityLogAction/components/BeforeAfterActions.tsx index 2c739475c8..a5e9c61858 100644 --- a/src/components/[guild]/activity/ActivityLogAction/components/BeforeAfterActions.tsx +++ b/src/components/[guild]/activity/ActivityLogAction/components/BeforeAfterActions.tsx @@ -9,7 +9,7 @@ import { Text, } from "@chakra-ui/react" import { ArrowRight } from "@phosphor-icons/react" -import RequirementDisplayComponent from "components/[guild]/Requirements/components/RequirementDisplayComponent" +import { RequirementDisplayComponent } from "components/[guild]/Requirements/components/RequirementDisplayComponent" import GuildLogo from "components/common/GuildLogo" import { useColorPalette } from "hooks/useColorPalette" import { Requirement } from "types" diff --git a/src/components/common/DataBlock.tsx b/src/components/common/DataBlock.tsx index 2c212f6151..e3b02e826c 100644 --- a/src/components/common/DataBlock.tsx +++ b/src/components/common/DataBlock.tsx @@ -1,5 +1,6 @@ -import { Icon, Skeleton, Text, Tooltip, useColorModeValue } from "@chakra-ui/react" -import { Warning } from "@phosphor-icons/react" +import { Skeleton } from "@/components/ui/Skeleton" +import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/Tooltip" +import { Warning } from "@phosphor-icons/react/dist/ssr" import { PropsWithChildren } from "react" type Props = { @@ -12,36 +13,26 @@ const DataBlock = ({ error, children, }: PropsWithChildren): JSX.Element => { - const bg = useColorModeValue("blackAlpha.100", "blackAlpha.300") - - if (isLoading) return Loading... + if (isLoading) return return ( - - - {error && ( - - )} - - {children} - - + + + + {error && ( + + )} + {children} + + + +

{error}

+
) } -export default DataBlock +export { DataBlock } diff --git a/src/components/common/DataBlockWithCopy.tsx b/src/components/common/DataBlockWithCopy.tsx index 4b70bbef7d..bff1b8a937 100644 --- a/src/components/common/DataBlockWithCopy.tsx +++ b/src/components/common/DataBlockWithCopy.tsx @@ -1,7 +1,8 @@ -import { HStack, Icon, Text, Tooltip, useClipboard } from "@chakra-ui/react" -import { Check } from "@phosphor-icons/react" +import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/Tooltip" +import { useCopyToClipboard } from "@/hooks/useCopyToClipboard" +import { Check } from "@phosphor-icons/react/dist/ssr" import { PropsWithChildren } from "react" -import DataBlock from "./DataBlock" +import { DataBlock } from "./DataBlock" type Props = { text: string @@ -11,28 +12,21 @@ const DataBlockWithCopy = ({ text, children, }: PropsWithChildren): JSX.Element => { - const { onCopy, hasCopied } = useClipboard(text) + const { copyToClipboard, hasCopied } = useCopyToClipboard() return ( - - {hasCopied && } - {hasCopied ? "Copied" : "Click to copy"} - - } - placement="top" - shouldWrapChildren - > - - - {children ?? text} - - + + copyToClipboard(text)} className="rounded-md"> + + {children ?? text} + + + + {hasCopied && } + {hasCopied ? "Copied" : "Click to copy"} + ) } -export default DataBlockWithCopy +export { DataBlockWithCopy } diff --git a/src/components/create-guild/Requirements/components/UnsupportedRequirementTypeCard.tsx b/src/components/create-guild/Requirements/components/UnsupportedRequirementTypeCard.tsx index 255021b1ea..6f8ecbc6ef 100644 --- a/src/components/create-guild/Requirements/components/UnsupportedRequirementTypeCard.tsx +++ b/src/components/create-guild/Requirements/components/UnsupportedRequirementTypeCard.tsx @@ -1,7 +1,6 @@ -import { Icon } from "@chakra-ui/react" -import { Warning } from "@phosphor-icons/react" -import Requirement from "components/[guild]/Requirements/components/Requirement" -import DataBlock from "components/common/DataBlock" +import { Requirement } from "components/[guild]/Requirements/components/Requirement" +import { RequirementWarningIcon } from "components/[guild]/Requirements/components/RequirementDisplayComponent" +import { DataBlock } from "components/common/DataBlock" import { PropsWithChildren } from "react" import RequirementBaseCard from "./RequirementBaseCard" @@ -14,7 +13,7 @@ const UnsupportedRequirementTypeCard = ({ children, }: PropsWithChildren) => ( - }> + }> {`Unsupported requirement type: `} {type} diff --git a/src/components/create-guild/Requirements/hooks/useHandleRequirementState.ts b/src/components/create-guild/Requirements/hooks/useHandleRequirementState.ts index ed084c0105..45429d8b82 100644 --- a/src/components/create-guild/Requirements/hooks/useHandleRequirementState.ts +++ b/src/components/create-guild/Requirements/hooks/useHandleRequirementState.ts @@ -27,7 +27,10 @@ const useHandleRequirementState = (methods) => { } const append = ( - req: Schemas["RequirementCreationPayload"] + req: Exclude< + Schemas["RequirementCreationPayload"], + { type: "WORLD_ID_VERIFICATION" } + > ): ClientStateRequirementCreateResponse => { const reqToAdd: ClientStateRequirementCreateResponse = { id: uuidv7(), ...req } if (freeEntry) { diff --git a/src/requirements/Airdrop/AirdropRequirement.tsx b/src/requirements/Airdrop/AirdropRequirement.tsx index 135bc72330..01ec1ae76c 100644 --- a/src/requirements/Airdrop/AirdropRequirement.tsx +++ b/src/requirements/Airdrop/AirdropRequirement.tsx @@ -1,6 +1,7 @@ import { Icon, Text, useDisclosure } from "@chakra-ui/react" import { ArrowSquareIn } from "@phosphor-icons/react" -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" diff --git a/src/requirements/Allowlist/AllowlistRequirement.tsx b/src/requirements/Allowlist/AllowlistRequirement.tsx index 765dbee42d..b05b7e6243 100644 --- a/src/requirements/Allowlist/AllowlistRequirement.tsx +++ b/src/requirements/Allowlist/AllowlistRequirement.tsx @@ -2,7 +2,8 @@ import { Fade, HStack, Icon, Text, useDisclosure } from "@chakra-ui/react" import { Schemas } from "@guildxyz/types" import { ArrowSquareIn, ListPlus } from "@phosphor-icons/react" import RequirementConnectButton from "components/[guild]/Requirements/components/ConnectRequirementPlatformButton" -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" diff --git a/src/requirements/Captcha/CaptchaRequirement.tsx b/src/requirements/Captcha/CaptchaRequirement.tsx index cc89f5c65b..036d09f2fd 100644 --- a/src/requirements/Captcha/CaptchaRequirement.tsx +++ b/src/requirements/Captcha/CaptchaRequirement.tsx @@ -1,10 +1,11 @@ import { Icon } from "@chakra-ui/react" import { Robot } from "@phosphor-icons/react" -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" -import DataBlock from "components/common/DataBlock" +import { DataBlock } from "components/common/DataBlock" import formatRelativeTimeFromNow from "utils/formatRelativeTimeFromNow" import CompleteCaptcha from "./components/CompleteCaptcha" diff --git a/src/requirements/CoinbaseEAS/CoinbaseEASRequirement.tsx b/src/requirements/CoinbaseEAS/CoinbaseEASRequirement.tsx index 0b791e4460..7755556ea2 100644 --- a/src/requirements/CoinbaseEAS/CoinbaseEASRequirement.tsx +++ b/src/requirements/CoinbaseEAS/CoinbaseEASRequirement.tsx @@ -1,5 +1,6 @@ import { Img, Text } from "@chakra-ui/react" -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" diff --git a/src/requirements/ContractState/ContractStateForm.tsx b/src/requirements/ContractState/ContractStateForm.tsx index b39503acf8..b907c42ed4 100644 --- a/src/requirements/ContractState/ContractStateForm.tsx +++ b/src/requirements/ContractState/ContractStateForm.tsx @@ -26,7 +26,7 @@ import { import { Info, Plus, X } from "@phosphor-icons/react" import Button from "components/common/Button" import ControlledSelect from "components/common/ControlledSelect" -import DataBlockWithCopy from "components/common/DataBlockWithCopy" +import { DataBlockWithCopy } from "components/common/DataBlockWithCopy" import FormErrorMessage from "components/common/FormErrorMessage" import { useMemo } from "react" import { Controller, useFieldArray, useFormContext, useWatch } from "react-hook-form" diff --git a/src/requirements/ContractState/ContractStateRequirement.tsx b/src/requirements/ContractState/ContractStateRequirement.tsx index b4fa9af41d..92d20edfad 100644 --- a/src/requirements/ContractState/ContractStateRequirement.tsx +++ b/src/requirements/ContractState/ContractStateRequirement.tsx @@ -14,14 +14,15 @@ import { Tr, useColorModeValue, } from "@chakra-ui/react" -import { CaretDown, Function } from "@phosphor-icons/react" +import { CaretDown, Function } from "@phosphor-icons/react/dist/ssr" import BlockExplorerUrl from "components/[guild]/Requirements/components/BlockExplorerUrl" -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { RequirementButton } from "components/[guild]/Requirements/components/RequirementButton" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" -import DataBlock from "components/common/DataBlock" +import { DataBlock } from "components/common/DataBlock" import shortenHex from "utils/shortenHex" const ADDRESS_REGEX = /^0x[A-F0-9]{40}$/i @@ -39,7 +40,7 @@ const ContractStateRequirement = (props: RequirementProps) => { - }> + }> View query diff --git a/src/requirements/Disco/DiscoRequirement.tsx b/src/requirements/Disco/DiscoRequirement.tsx index 25d95d75f6..e6c6cdc98f 100644 --- a/src/requirements/Disco/DiscoRequirement.tsx +++ b/src/requirements/Disco/DiscoRequirement.tsx @@ -1,9 +1,10 @@ import { Img } from "@chakra-ui/react" -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" -import DataBlock from "components/common/DataBlock" +import { DataBlock } from "components/common/DataBlock" import shortenHex from "utils/shortenHex" type DiscoParamType = { diff --git a/src/requirements/Discord/DiscordRequirement.tsx b/src/requirements/Discord/DiscordRequirement.tsx index a45deed732..9019d67622 100644 --- a/src/requirements/Discord/DiscordRequirement.tsx +++ b/src/requirements/Discord/DiscordRequirement.tsx @@ -1,12 +1,13 @@ import { Icon, Text } from "@chakra-ui/react" import { DiscordLogo } from "@phosphor-icons/react" import ConnectRequirementPlatformButton from "components/[guild]/Requirements/components/ConnectRequirementPlatformButton" -import DataBlockWithDate from "components/[guild]/Requirements/components/DataBlockWithDate" -import Requirement, { +import { DataBlockWithDate } from "components/[guild]/Requirements/components/DataBlockWithDate" +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" -import DataBlock from "components/common/DataBlock" +import { DataBlock } from "components/common/DataBlock" import useServerData from "hooks/useServerData" import formatRelativeTimeFromNow from "utils/formatRelativeTimeFromNow" diff --git a/src/requirements/Email/EmailRequirement.tsx b/src/requirements/Email/EmailRequirement.tsx index f2f360fc17..02efe9284e 100644 --- a/src/requirements/Email/EmailRequirement.tsx +++ b/src/requirements/Email/EmailRequirement.tsx @@ -1,11 +1,12 @@ import { Icon } from "@chakra-ui/react" import { EnvelopeSimple } from "@phosphor-icons/react" import RequirementConnectButton from "components/[guild]/Requirements/components/ConnectRequirementPlatformButton" -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" -import DataBlock from "components/common/DataBlock" +import { DataBlock } from "components/common/DataBlock" const EmailRequirement = (props: RequirementProps) => { const { data, type } = useRequirementContext() diff --git a/src/requirements/EthereumAttestation/EthereumAttestationRequirement.tsx b/src/requirements/EthereumAttestation/EthereumAttestationRequirement.tsx index b331434ce3..a4218ca3a7 100644 --- a/src/requirements/EthereumAttestation/EthereumAttestationRequirement.tsx +++ b/src/requirements/EthereumAttestation/EthereumAttestationRequirement.tsx @@ -1,10 +1,11 @@ import { Img } from "@chakra-ui/react" -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" -import DataBlock from "components/common/DataBlock" -import DataBlockWithCopy from "components/common/DataBlockWithCopy" +import { DataBlock } from "components/common/DataBlock" +import { DataBlockWithCopy } from "components/common/DataBlockWithCopy" import useResolveAddress from "hooks/useResolveAddress" import shortenHex from "utils/shortenHex" import EthereumAttestationRequirementFooter from "./components/EthereumAttestationRequirementFooter" diff --git a/src/requirements/EthereumAttestation/components/EthereumAttestationRequirementFooter.tsx b/src/requirements/EthereumAttestation/components/EthereumAttestationRequirementFooter.tsx index 6c17a96aa6..ee6db1d502 100644 --- a/src/requirements/EthereumAttestation/components/EthereumAttestationRequirementFooter.tsx +++ b/src/requirements/EthereumAttestation/components/EthereumAttestationRequirementFooter.tsx @@ -1,7 +1,7 @@ import { HStack, Wrap } from "@chakra-ui/react" import BlockExplorerUrl from "components/[guild]/Requirements/components/BlockExplorerUrl" -import { RequirementLinkButton } from "components/[guild]/Requirements/components/RequirementButton" -import RequirementChainIndicator from "components/[guild]/Requirements/components/RequirementChainIndicator" +import { RequirementLink } from "components/[guild]/Requirements/components/RequirementButton" +import { RequirementChainIndicator } from "components/[guild]/Requirements/components/RequirementChainIndicator" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" export const EAS_SCAN_BASE = { @@ -22,12 +22,11 @@ const EthereumAttestationRequirementFooter = () => { - - Schema - + label="Schema" + /> { if (type === "FARCASTER_LIKE") { @@ -64,6 +63,7 @@ export default function FarcasterAction() { }) } }} + className={PLATFORM_COLORS.FARCASTER} > {type === "FARCASTER_FOLLOW" && farcasterUser?.display_name ? `Follow ${farcasterUser?.display_name}` diff --git a/src/requirements/Farcaster/components/FarcasterCastSmall.tsx b/src/requirements/Farcaster/components/FarcasterCastSmall.tsx index b3418d8b4e..6328714e91 100644 --- a/src/requirements/Farcaster/components/FarcasterCastSmall.tsx +++ b/src/requirements/Farcaster/components/FarcasterCastSmall.tsx @@ -1,6 +1,6 @@ import { Flex, HStack, Image, Link, Skeleton, Text } from "@chakra-ui/react" import { Chat, Heart, ShareNetwork, WarningCircle } from "@phosphor-icons/react" -import DataBlock from "components/common/DataBlock" +import { DataBlock } from "components/common/DataBlock" import { FarcasterCastData } from "../types" const FarcasterCastSmall = ({ diff --git a/src/requirements/Form/FormRequirement.tsx b/src/requirements/Form/FormRequirement.tsx index c8364f028f..e7ad877160 100644 --- a/src/requirements/Form/FormRequirement.tsx +++ b/src/requirements/Form/FormRequirement.tsx @@ -1,6 +1,7 @@ import { Link } from "@chakra-ui/next-js" import { Icon, Skeleton, Text, Tooltip } from "@chakra-ui/react" -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" diff --git a/src/requirements/Free/FreeRequirement.tsx b/src/requirements/Free/FreeRequirement.tsx index 60f4c3205d..a1e729d555 100644 --- a/src/requirements/Free/FreeRequirement.tsx +++ b/src/requirements/Free/FreeRequirement.tsx @@ -1,6 +1,6 @@ import { Icon } from "@chakra-ui/react" import { Icon as PhosphorIcon } from "@phosphor-icons/react" -import Requirement from "components/[guild]/Requirements/components/Requirement" +import { Requirement } from "components/[guild]/Requirements/components/Requirement" import REQUIREMENTS from "requirements" const FreeRequirement = ({ ...rest }) => ( diff --git a/src/requirements/Fuel/FuelRequirement.tsx b/src/requirements/Fuel/FuelRequirement.tsx index 2c8e434cb0..edcc8f59fc 100644 --- a/src/requirements/Fuel/FuelRequirement.tsx +++ b/src/requirements/Fuel/FuelRequirement.tsx @@ -1,10 +1,11 @@ import { Icon, Img, Tag, TagLabel, Text, useColorModeValue } from "@chakra-ui/react" import { ArrowsLeftRight } from "@phosphor-icons/react" -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" -import DataBlockWithCopy from "components/common/DataBlockWithCopy" +import { DataBlockWithCopy } from "components/common/DataBlockWithCopy" import shortenHex from "utils/shortenHex" const NULL_FUEL_ADDRESS = diff --git a/src/requirements/Galaxy/GalaxyRequirement.tsx b/src/requirements/Galaxy/GalaxyRequirement.tsx index 6e52bfacfe..937b073af5 100644 --- a/src/requirements/Galaxy/GalaxyRequirement.tsx +++ b/src/requirements/Galaxy/GalaxyRequirement.tsx @@ -1,9 +1,10 @@ import { Link, Text } from "@chakra-ui/react" -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" -import DataBlock from "components/common/DataBlock" +import { DataBlock } from "components/common/DataBlock" import { useGalaxyCampaign } from "./hooks/useGalaxyCampaigns" const GalaxyRequirement = (props: RequirementProps): JSX.Element => { diff --git a/src/requirements/GitPoap/GitPoapRequirement.tsx b/src/requirements/GitPoap/GitPoapRequirement.tsx index 53104fd29d..836dd0b295 100644 --- a/src/requirements/GitPoap/GitPoapRequirement.tsx +++ b/src/requirements/GitPoap/GitPoapRequirement.tsx @@ -1,9 +1,10 @@ import { Link, Text } from "@chakra-ui/react" -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" -import DataBlock from "components/common/DataBlock" +import { DataBlock } from "components/common/DataBlock" import { usePoap } from "../Poap/hooks/usePoaps" const GitPoapRequirement = (props: RequirementProps) => { diff --git a/src/requirements/GitcoinPassport/GitcoinPassportRequirement.tsx b/src/requirements/GitcoinPassport/GitcoinPassportRequirement.tsx index 5df22f8e83..981d47f82e 100644 --- a/src/requirements/GitcoinPassport/GitcoinPassportRequirement.tsx +++ b/src/requirements/GitcoinPassport/GitcoinPassportRequirement.tsx @@ -1,5 +1,4 @@ import { - Icon, Popover, PopoverArrow, PopoverBody, @@ -14,13 +13,14 @@ import { Tr, useColorModeValue, } from "@chakra-ui/react" -import { CaretDown } from "@phosphor-icons/react" -import Requirement, { +import { CaretDown } from "@phosphor-icons/react/dist/ssr" +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { RequirementButton } from "components/[guild]/Requirements/components/RequirementButton" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" -import DataBlock from "components/common/DataBlock" +import { DataBlock } from "components/common/DataBlock" import { useRoleMembership } from "components/explorer/hooks/useMembership" import { scorers } from "./components/Score" import { SetupPassport } from "./components/SetupPassport" @@ -56,7 +56,7 @@ const GitcoinPassportRequirement = ({ ...rest }: RequirementProps): JSX.Element Object.keys(requirement.data ?? {}).length > 0 && ( - }> + }> View parameters diff --git a/src/requirements/Github/GithubRequirement.tsx b/src/requirements/Github/GithubRequirement.tsx index 748fdcd420..e12b877a5a 100644 --- a/src/requirements/Github/GithubRequirement.tsx +++ b/src/requirements/Github/GithubRequirement.tsx @@ -2,13 +2,14 @@ import { Link } from "@chakra-ui/next-js" import { Icon } from "@chakra-ui/react" import { GithubLogo } from "@phosphor-icons/react" import ConnectRequirementPlatformButton from "components/[guild]/Requirements/components/ConnectRequirementPlatformButton" -import DataBlockWithDate from "components/[guild]/Requirements/components/DataBlockWithDate" -import DataBlockWithRelativeDate from "components/[guild]/Requirements/components/DataBlockWithRelativeDate" -import Requirement, { +import { DataBlockWithDate } from "components/[guild]/Requirements/components/DataBlockWithDate" +import { DataBlockWithRelativeDate } from "components/[guild]/Requirements/components/DataBlockWithRelativeDate" +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" -import DataBlock from "components/common/DataBlock" +import { DataBlock } from "components/common/DataBlock" import pluralize from "utils/pluralize" const GithubRequirement = (props: RequirementProps) => { diff --git a/src/requirements/Guild/GuildRequirement.tsx b/src/requirements/Guild/GuildRequirement.tsx index af3a3a33ec..aa5983a5ea 100644 --- a/src/requirements/Guild/GuildRequirement.tsx +++ b/src/requirements/Guild/GuildRequirement.tsx @@ -1,8 +1,9 @@ import { Link } from "@chakra-ui/next-js" import { Icon, Img, Skeleton, Text } from "@chakra-ui/react" import { Detective } from "@phosphor-icons/react" -import DataBlockWithDate from "components/[guild]/Requirements/components/DataBlockWithDate" -import Requirement, { +import { DataBlockWithDate } from "components/[guild]/Requirements/components/DataBlockWithDate" +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" diff --git a/src/requirements/Juicebox/JuiceboxRequirement.tsx b/src/requirements/Juicebox/JuiceboxRequirement.tsx index eac50534fb..867a0821fe 100644 --- a/src/requirements/Juicebox/JuiceboxRequirement.tsx +++ b/src/requirements/Juicebox/JuiceboxRequirement.tsx @@ -1,8 +1,9 @@ -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" -import DataBlock from "components/common/DataBlock" +import { DataBlock } from "components/common/DataBlock" import { useJuiceboxProject } from "./hooks/useJuicebox" const JuiceboxRequirement = (props: RequirementProps) => { diff --git a/src/requirements/Lens/LensRequirement.tsx b/src/requirements/Lens/LensRequirement.tsx index c224fe3ac4..52952a2c93 100644 --- a/src/requirements/Lens/LensRequirement.tsx +++ b/src/requirements/Lens/LensRequirement.tsx @@ -1,6 +1,7 @@ import { Link } from "@chakra-ui/next-js" import { Skeleton } from "@chakra-ui/react" -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" diff --git a/src/requirements/Mirror/MirrorRequirement.tsx b/src/requirements/Mirror/MirrorRequirement.tsx index abc3be01d5..21cf17e7f7 100644 --- a/src/requirements/Mirror/MirrorRequirement.tsx +++ b/src/requirements/Mirror/MirrorRequirement.tsx @@ -1,10 +1,11 @@ import { Text } from "@chakra-ui/react" import BlockExplorerUrl from "components/[guild]/Requirements/components/BlockExplorerUrl" -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" -import DataBlock from "components/common/DataBlock" +import { DataBlock } from "components/common/DataBlock" import shortenHex from "utils/shortenHex" import { Chain } from "wagmiConfig/chains" import useMirrorEdition from "./hooks/useMirrorEdition" diff --git a/src/requirements/Nft/NftRequirement.tsx b/src/requirements/Nft/NftRequirement.tsx index 9f32262a77..db342a57e7 100644 --- a/src/requirements/Nft/NftRequirement.tsx +++ b/src/requirements/Nft/NftRequirement.tsx @@ -3,13 +3,14 @@ import { consts } from "@guildxyz/types" import { ImageData } from "@nouns/assets" import { ArrowSquareOut } from "@phosphor-icons/react" import BlockExplorerUrl from "components/[guild]/Requirements/components/BlockExplorerUrl" -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" import useGuild from "components/[guild]/hooks/useGuild" import Button from "components/common/Button" -import DataBlock from "components/common/DataBlock" +import { DataBlock } from "components/common/DataBlock" import { env } from "env" import { Fragment } from "react" import SearchableVirtualListModal from "requirements/common/SearchableVirtualListModal" diff --git a/src/requirements/Nft/providedValue/NftAmountProvidedValue.tsx b/src/requirements/Nft/providedValue/NftAmountProvidedValue.tsx index f6f8bcf2e3..5003550c31 100644 --- a/src/requirements/Nft/providedValue/NftAmountProvidedValue.tsx +++ b/src/requirements/Nft/providedValue/NftAmountProvidedValue.tsx @@ -1,7 +1,7 @@ import { HStack, Text } from "@chakra-ui/react" import { consts } from "@guildxyz/types" import useGuild from "components/[guild]/hooks/useGuild" -import DataBlock from "components/common/DataBlock" +import { DataBlock } from "components/common/DataBlock" import type { ProvidedValueDisplayProps } from "requirements/requirementProvidedValues" import { isGuildPinSupportedChain } from "utils/guildCheckout/utils" import { Chain } from "wagmiConfig/chains" diff --git a/src/requirements/Noox/NooxRequirement.tsx b/src/requirements/Noox/NooxRequirement.tsx index 932ca920f9..d135e9b74a 100644 --- a/src/requirements/Noox/NooxRequirement.tsx +++ b/src/requirements/Noox/NooxRequirement.tsx @@ -1,9 +1,10 @@ import { Link, Text } from "@chakra-ui/react" -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" -import DataBlock from "components/common/DataBlock" +import { DataBlock } from "components/common/DataBlock" import useNooxBadge from "./hooks/useNooxBadge" const NooxRequirement = (props: RequirementProps) => { diff --git a/src/requirements/Parallel/ParallelRequirement.tsx b/src/requirements/Parallel/ParallelRequirement.tsx index 07ace630bd..c2e47c23d6 100644 --- a/src/requirements/Parallel/ParallelRequirement.tsx +++ b/src/requirements/Parallel/ParallelRequirement.tsx @@ -1,8 +1,9 @@ -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" -import DataBlock from "components/common/DataBlock" +import { DataBlock } from "components/common/DataBlock" const ParallelRequirement = (props: RequirementProps) => { const requirement = useRequirementContext() diff --git a/src/requirements/Payment/PaymentRequirement.tsx b/src/requirements/Payment/PaymentRequirement.tsx index e4910f2936..7202a6c1e5 100644 --- a/src/requirements/Payment/PaymentRequirement.tsx +++ b/src/requirements/Payment/PaymentRequirement.tsx @@ -1,14 +1,16 @@ import { Icon, Text } from "@chakra-ui/react" -import { Coins, Warning } from "@phosphor-icons/react" +import { Coins } from "@phosphor-icons/react" import BlockExplorerUrl from "components/[guild]/Requirements/components/BlockExplorerUrl" import BuyPass from "components/[guild]/Requirements/components/GuildCheckout/BuyPass" import { GuildCheckoutProvider } from "components/[guild]/Requirements/components/GuildCheckout/components/GuildCheckoutContext" -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" +import { RequirementWarningIcon } from "components/[guild]/Requirements/components/RequirementDisplayComponent" import useGuildPermission from "components/[guild]/hooks/useGuildPermission" -import DataBlock from "components/common/DataBlock" +import { DataBlock } from "components/common/DataBlock" import { useRoleMembership } from "components/explorer/hooks/useMembership" import useToken from "hooks/useToken" import { NULL_ADDRESS } from "utils/guildCheckout/constants" @@ -115,7 +117,7 @@ const OriginalPaymentRequirement = (props: RequirementProps): JSX.Element => { const PaymentRequirement = (props: RequirementProps) => { const { type } = useRequirementContext() return ( - }> + }> {`Unsupported requirement type: `} {type} diff --git a/src/requirements/Poap/PoapRequirement.tsx b/src/requirements/Poap/PoapRequirement.tsx index f24b7ac29a..a9da5a4977 100644 --- a/src/requirements/Poap/PoapRequirement.tsx +++ b/src/requirements/Poap/PoapRequirement.tsx @@ -1,9 +1,10 @@ import { Link, Text } from "@chakra-ui/react" -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" -import DataBlock from "components/common/DataBlock" +import { DataBlock } from "components/common/DataBlock" import { usePoap } from "./hooks/usePoaps" const PoapRequirement = (props: RequirementProps) => { diff --git a/src/requirements/Points/PointsRequirement.tsx b/src/requirements/Points/PointsRequirement.tsx index a448415c89..c16b852c5c 100644 --- a/src/requirements/Points/PointsRequirement.tsx +++ b/src/requirements/Points/PointsRequirement.tsx @@ -1,7 +1,8 @@ import { Link } from "@chakra-ui/next-js" import { Skeleton } from "@chakra-ui/react" import { GuildReward } from "@guildxyz/types" -import Requirement, { +import { + Requirement, RequirementProps, RequirementSkeleton, } from "components/[guild]/Requirements/components/Requirement" diff --git a/src/requirements/Rep3/Rep3Requirement.tsx b/src/requirements/Rep3/Rep3Requirement.tsx index 685fe2a633..eba566c93b 100644 --- a/src/requirements/Rep3/Rep3Requirement.tsx +++ b/src/requirements/Rep3/Rep3Requirement.tsx @@ -1,9 +1,10 @@ import BlockExplorerUrl from "components/[guild]/Requirements/components/BlockExplorerUrl" -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" -import DataBlock from "components/common/DataBlock" +import { DataBlock } from "components/common/DataBlock" import shortenHex from "utils/shortenHex" const Rep3Requirement = (props: RequirementProps): JSX.Element => { diff --git a/src/requirements/Snapshot/SnapshotRequirement.tsx b/src/requirements/Snapshot/SnapshotRequirement.tsx index 2e2d106037..6ac4f2441f 100644 --- a/src/requirements/Snapshot/SnapshotRequirement.tsx +++ b/src/requirements/Snapshot/SnapshotRequirement.tsx @@ -1,5 +1,4 @@ import { - Icon, Popover, PopoverArrow, PopoverBody, @@ -7,14 +6,15 @@ import { PopoverTrigger, Portal, } from "@chakra-ui/react" -import { CaretDown } from "@phosphor-icons/react" -import DataBlockWithDate from "components/[guild]/Requirements/components/DataBlockWithDate" -import Requirement, { +import { CaretDown } from "@phosphor-icons/react/dist/ssr" +import { DataBlockWithDate } from "components/[guild]/Requirements/components/DataBlockWithDate" +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { RequirementButton } from "components/[guild]/Requirements/components/RequirementButton" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" -import DataBlock from "components/common/DataBlock" +import { DataBlock } from "components/common/DataBlock" import useSWRImmutable from "swr/immutable" import pluralize from "utils/pluralize" import SnapshotSpaceLink from "./components/SnapshotSpaceLink" @@ -40,7 +40,7 @@ const SnapshotRequirement = (props: RequirementProps): JSX.Element => { Object.keys(requirement.data.strategies[0].params ?? {}).length && ( - }> + }> View parameters diff --git a/src/requirements/Sound/SoundRequirement.tsx b/src/requirements/Sound/SoundRequirement.tsx index c5c83561bf..6ce09cbcd3 100644 --- a/src/requirements/Sound/SoundRequirement.tsx +++ b/src/requirements/Sound/SoundRequirement.tsx @@ -1,6 +1,7 @@ import { Link } from "@chakra-ui/next-js" import { Img } from "@chakra-ui/react" -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" diff --git a/src/requirements/Token/TokenRequirement.tsx b/src/requirements/Token/TokenRequirement.tsx index 949b9cd97b..4e421103fd 100644 --- a/src/requirements/Token/TokenRequirement.tsx +++ b/src/requirements/Token/TokenRequirement.tsx @@ -1,9 +1,10 @@ import { Text } from "@chakra-ui/react" import BlockExplorerUrl from "components/[guild]/Requirements/components/BlockExplorerUrl" -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" -import RequirementChainIndicator from "components/[guild]/Requirements/components/RequirementChainIndicator" +import { RequirementChainIndicator } from "components/[guild]/Requirements/components/RequirementChainIndicator" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" import useTokenData from "hooks/useTokenData" import { CHAIN_CONFIG, Chain } from "wagmiConfig/chains" diff --git a/src/requirements/Token/providedValue/TokenProvidedValue.tsx b/src/requirements/Token/providedValue/TokenProvidedValue.tsx index 7a5185afb4..a251c4dcea 100644 --- a/src/requirements/Token/providedValue/TokenProvidedValue.tsx +++ b/src/requirements/Token/providedValue/TokenProvidedValue.tsx @@ -1,5 +1,5 @@ -import { HStack, Text, useColorModeValue } from "@chakra-ui/react" -import RequirementChainIndicator from "components/[guild]/Requirements/components/RequirementChainIndicator" +import { HStack, Text } from "@chakra-ui/react" +import { RequirementChainIndicator } from "components/[guild]/Requirements/components/RequirementChainIndicator" import useTokenData from "hooks/useTokenData" import type { ProvidedValueDisplayProps } from "requirements/requirementProvidedValues" import { NULL_ADDRESS } from "utils/guildCheckout/constants" @@ -14,12 +14,10 @@ const TokenProvidedValue = ({ requirement }: ProvidedValueDisplayProps) => { data: { symbol }, } = useTokenData(requirementChain, requirementAddress ?? NULL_ADDRESS) - const tagBg = useColorModeValue("blackAlpha.100", "blackAlpha.300") - return ( {symbol ?? "Token"} balance - + ) } diff --git a/src/requirements/Twitter/TwitterRequirement.tsx b/src/requirements/Twitter/TwitterRequirement.tsx index 32a2be7b0f..93a819ebf1 100644 --- a/src/requirements/Twitter/TwitterRequirement.tsx +++ b/src/requirements/Twitter/TwitterRequirement.tsx @@ -1,14 +1,15 @@ import { Icon, Text } from "@chakra-ui/react" import { ArrowSquareOut } from "@phosphor-icons/react" import ConnectRequirementPlatformButton from "components/[guild]/Requirements/components/ConnectRequirementPlatformButton" -import DataBlockWithDate from "components/[guild]/Requirements/components/DataBlockWithDate" -import Requirement, { +import { DataBlockWithDate } from "components/[guild]/Requirements/components/DataBlockWithDate" +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" import useUser from "components/[guild]/hooks/useUser" -import DataBlock from "components/common/DataBlock" -import DataBlockWithCopy from "components/common/DataBlockWithCopy" +import { DataBlock } from "components/common/DataBlock" +import { DataBlockWithCopy } from "components/common/DataBlockWithCopy" import XLogo from "static/icons/x.svg" import useSWRImmutable from "swr/immutable" import { PlatformType } from "types" diff --git a/src/requirements/Uniswap/UniswapRequirement.tsx b/src/requirements/Uniswap/UniswapRequirement.tsx index 9d78ee3ea6..7f4745ce69 100644 --- a/src/requirements/Uniswap/UniswapRequirement.tsx +++ b/src/requirements/Uniswap/UniswapRequirement.tsx @@ -1,11 +1,12 @@ import { HStack, Skeleton } from "@chakra-ui/react" -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" -import { RequirementLinkButton } from "components/[guild]/Requirements/components/RequirementButton" -import RequirementChainIndicator from "components/[guild]/Requirements/components/RequirementChainIndicator" +import { RequirementLink } from "components/[guild]/Requirements/components/RequirementButton" +import { RequirementChainIndicator } from "components/[guild]/Requirements/components/RequirementChainIndicator" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" -import DataBlock from "components/common/DataBlock" +import { DataBlock } from "components/common/DataBlock" import { useRoleMembership } from "components/explorer/hooks/useMembership" import REQUIREMENTS from "requirements" import { Chains } from "wagmiConfig/chains" @@ -61,19 +62,15 @@ const UniswapRequirement = ({ ...rest }: RequirementProps): JSX.Element => { {/* The Uniswap app didn't seem able to handle testnets in the query param */} {!hasAccess && !UNISWAP_TESTNETS.has(chain) && ( - - Add Liquidity - + variant="solid" + className="bg-uniswap text-white hover:bg-uniswap-hover active:bg-uniswap-active" + label="Add Liquidity" + /> )} } diff --git a/src/requirements/Uniswap/providedValue/PositionsProvidedValue.tsx b/src/requirements/Uniswap/providedValue/PositionsProvidedValue.tsx index 2bb2e7387a..e2e6e2438a 100644 --- a/src/requirements/Uniswap/providedValue/PositionsProvidedValue.tsx +++ b/src/requirements/Uniswap/providedValue/PositionsProvidedValue.tsx @@ -1,5 +1,5 @@ import { HStack, Skeleton, Text } from "@chakra-ui/react" -import DataBlock from "components/common/DataBlock" +import { DataBlock } from "components/common/DataBlock" import type { ProvidedValueDisplayProps } from "requirements/requirementProvidedValues" import { Chains } from "wagmiConfig/chains" import { useSymbolsOfPair } from "../hooks/useSymbolsOfPair" diff --git a/src/requirements/Unlock/UnlockRequirement.tsx b/src/requirements/Unlock/UnlockRequirement.tsx index 6d46603e70..f36f87ec65 100644 --- a/src/requirements/Unlock/UnlockRequirement.tsx +++ b/src/requirements/Unlock/UnlockRequirement.tsx @@ -1,5 +1,6 @@ import BlockExplorerUrl from "components/[guild]/Requirements/components/BlockExplorerUrl" -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" diff --git a/src/requirements/VisitLink/VisitLinkRequirement.tsx b/src/requirements/VisitLink/VisitLinkRequirement.tsx index 07a0cacb3e..704f15a163 100644 --- a/src/requirements/VisitLink/VisitLinkRequirement.tsx +++ b/src/requirements/VisitLink/VisitLinkRequirement.tsx @@ -16,7 +16,8 @@ import { } from "@chakra-ui/react" import { ArrowSquareOut, Link as LinkIcon } from "@phosphor-icons/react" import { useMembershipUpdate } from "components/[guild]/JoinModal/hooks/useMembershipUpdate" -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" @@ -24,10 +25,11 @@ import { RequirementImage, RequirementImageCircle, } from "components/[guild]/Requirements/components/RequirementImage" -import ResetRequirementButton, { +import { + ResetRequirementButton, getDefaultVisitLinkCustomName, } from "components/[guild]/Requirements/components/ResetRequirementButton" -import ViewOriginalPopover from "components/[guild]/Requirements/components/ViewOriginalPopover" +import { ViewOriginalPopover } from "components/[guild]/Requirements/components/ViewOriginalPopover" import useUser from "components/[guild]/hooks/useUser" import { Alert } from "components/common/Modal" import { useRoleMembership } from "components/explorer/hooks/useMembership" @@ -65,7 +67,8 @@ const VisitLinkRequirement = ({ ...props }: RequirementProps) => { onError: () => showErrorToast("Something went wrong"), }) - const isCustomName = data?.customName !== getDefaultVisitLinkCustomName(data) + const isCustomName = + !!data?.customName && data.customName !== getDefaultVisitLinkCustomName(data) const [, first, , link, , second] = isCustomName ? (VISIT_LINK_REGEX.exec(data.customName) ?? []) : [] @@ -107,7 +110,7 @@ const VisitLinkRequirement = ({ ...props }: RequirementProps) => { footer={ (isCustomName || !!data?.customImage) && ( - + } /> diff --git a/src/requirements/WalletActivity/WalletActivityRequirement.tsx b/src/requirements/WalletActivity/WalletActivityRequirement.tsx index 0239119fcf..3f6f39876f 100644 --- a/src/requirements/WalletActivity/WalletActivityRequirement.tsx +++ b/src/requirements/WalletActivity/WalletActivityRequirement.tsx @@ -7,13 +7,14 @@ import { Wallet, } from "@phosphor-icons/react" import { BeforeAfterDates } from "components/[guild]/Requirements/components/DataBlockWithDate" -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" -import RequirementChainIndicator from "components/[guild]/Requirements/components/RequirementChainIndicator" +import { RequirementChainIndicator } from "components/[guild]/Requirements/components/RequirementChainIndicator" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" -import DataBlock from "components/common/DataBlock" -import DataBlockWithCopy from "components/common/DataBlockWithCopy" +import { DataBlock } from "components/common/DataBlock" +import { DataBlockWithCopy } from "components/common/DataBlockWithCopy" import { ForwardRefExoticComponent, RefAttributes } from "react" import formatRelativeTimeFromNow from "utils/formatRelativeTimeFromNow" import pluralize from "utils/pluralize" diff --git a/src/requirements/WalletActivity/providedValue/ContractDeployProvidedValue.tsx b/src/requirements/WalletActivity/providedValue/ContractDeployProvidedValue.tsx index 5191e92649..3cff6fbcd9 100644 --- a/src/requirements/WalletActivity/providedValue/ContractDeployProvidedValue.tsx +++ b/src/requirements/WalletActivity/providedValue/ContractDeployProvidedValue.tsx @@ -1,20 +1,12 @@ -import { HStack, Text, useColorModeValue } from "@chakra-ui/react" -import RequirementChainIndicator from "components/[guild]/Requirements/components/RequirementChainIndicator" +import { HStack, Text } from "@chakra-ui/react" +import { RequirementChainIndicator } from "components/[guild]/Requirements/components/RequirementChainIndicator" import type { ProvidedValueDisplayProps } from "requirements/requirementProvidedValues" -const ContractDeployProvidedValue = ({ requirement }: ProvidedValueDisplayProps) => { - const tagBg = useColorModeValue("blackAlpha.100", "blackAlpha.300") - - return ( - - Deployed contracts - - - ) -} +const ContractDeployProvidedValue = ({ requirement }: ProvidedValueDisplayProps) => ( + + Deployed contracts + + +) export default ContractDeployProvidedValue diff --git a/src/requirements/WalletActivity/providedValue/TxCountProvidedValue.tsx b/src/requirements/WalletActivity/providedValue/TxCountProvidedValue.tsx index 034942bdc8..4addd89549 100644 --- a/src/requirements/WalletActivity/providedValue/TxCountProvidedValue.tsx +++ b/src/requirements/WalletActivity/providedValue/TxCountProvidedValue.tsx @@ -1,16 +1,12 @@ -import { HStack, Text, useColorModeValue } from "@chakra-ui/react" -import RequirementChainIndicator from "components/[guild]/Requirements/components/RequirementChainIndicator" +import { HStack, Text } from "@chakra-ui/react" +import { RequirementChainIndicator } from "components/[guild]/Requirements/components/RequirementChainIndicator" import type { ProvidedValueDisplayProps } from "requirements/requirementProvidedValues" -const TxCountProvidedValue = ({ requirement }: ProvidedValueDisplayProps) => { - const tagBg = useColorModeValue("blackAlpha.100", "blackAlpha.300") - - return ( - - Number of transactions - - - ) -} +const TxCountProvidedValue = ({ requirement }: ProvidedValueDisplayProps) => ( + + Number of transactions + + +) export default TxCountProvidedValue diff --git a/src/requirements/Web3Inbox/Web3InboxRequirement.tsx b/src/requirements/Web3Inbox/Web3InboxRequirement.tsx index 0fc53feedc..c034ac4e4e 100644 --- a/src/requirements/Web3Inbox/Web3InboxRequirement.tsx +++ b/src/requirements/Web3Inbox/Web3InboxRequirement.tsx @@ -1,6 +1,7 @@ import { Link, Text } from "@chakra-ui/react" import { ArrowSquareOut } from "@phosphor-icons/react" -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" diff --git a/src/requirements/Yup/YupRequirement.tsx b/src/requirements/Yup/YupRequirement.tsx index 7c12e985b0..8401527545 100644 --- a/src/requirements/Yup/YupRequirement.tsx +++ b/src/requirements/Yup/YupRequirement.tsx @@ -1,8 +1,9 @@ -import Requirement, { +import { + Requirement, RequirementProps, } from "components/[guild]/Requirements/components/Requirement" import { useRequirementContext } from "components/[guild]/Requirements/components/RequirementContext" -import DataBlock from "components/common/DataBlock" +import { DataBlock } from "components/common/DataBlock" const YupRequirement = (props: RequirementProps): JSX.Element => { const requirement = useRequirementContext() diff --git a/src/requirements/types.ts b/src/requirements/types.ts index 742372869f..6f63b67d26 100644 --- a/src/requirements/types.ts +++ b/src/requirements/types.ts @@ -3,9 +3,10 @@ import { Icon } from "@phosphor-icons/react" import { UseControllerProps } from "react-hook-form" import { Requirement } from "types" -export type RequirementType = - | Schemas["Requirement"]["type"] - | "WORLD_ID_VERIFICATION" +export type RequirementType = Exclude< + Schemas["Requirement"]["type"], + "WORLD_ID_VERIFICATION" +> export type RequirementFormProps = { baseFieldPath: string diff --git a/src/rewards/Token/DynamicRewardModal.tsx b/src/rewards/Token/DynamicRewardModal.tsx index 67f1a789ce..85091edef3 100644 --- a/src/rewards/Token/DynamicRewardModal.tsx +++ b/src/rewards/Token/DynamicRewardModal.tsx @@ -24,7 +24,7 @@ import { useDisclosure, } from "@chakra-ui/react" import { Lightning, PencilSimple, Question } from "@phosphor-icons/react" -import RequirementDisplayComponent from "components/[guild]/Requirements/components/RequirementDisplayComponent" +import { RequirementDisplayComponent } from "components/[guild]/Requirements/components/RequirementDisplayComponent" import useGuildPermission from "components/[guild]/hooks/useGuildPermission" import Card from "components/common/Card" import dynamic from "next/dynamic" diff --git a/src/types.ts b/src/types.ts index a1ac66e1b9..153e353ad5 100644 --- a/src/types.ts +++ b/src/types.ts @@ -462,13 +462,17 @@ type Trait = { } } -type Requirement = z.output -type RequirementCreateResponseOutput = z.output< - typeof schemas.RequirementCreateResponseSchema +type Requirement = Exclude< + z.output, + { type: "WORLD_ID_VERIFICATION" } +> +type RequirementCreateResponseOutput = Exclude< + z.output, + { type: "WORLD_ID_VERIFICATION" } > type ClientStateRequirementCreateResponse = Omit< - Schemas["RequirementCreateResponse"], + Exclude, /** * These props won't be included in the response when we only store the requirement * object on client side, so we omit them from the type & add them back as optional diff --git a/src/v2/components/CircularProgressBar.tsx b/src/v2/components/CircularProgressBar.tsx index 971630ea26..20730adf31 100644 --- a/src/v2/components/CircularProgressBar.tsx +++ b/src/v2/components/CircularProgressBar.tsx @@ -30,7 +30,7 @@ export const CircularProgressBar: React.FC = ({ > { - const [_, copy] = useCopyToClipboard() - const [showSuccess, setShowSuccess] = useState(false) + const { hasCopied, copyToClipboard } = useCopyToClipboard() + return (
@@ -15,13 +14,9 @@ export const CopyLink = ({ href }: { href: string }) => { { - copy(href) - setShowSuccess(true) - window.setTimeout(() => setShowSuccess(false), 1000) - }} + onClick={() => copyToClipboard(href)} icon={ - showSuccess ? ( + hasCopied ? ( ) : ( diff --git a/src/v2/components/CopyableAddress.tsx b/src/v2/components/CopyableAddress.tsx index 6089388032..aa4270661c 100644 --- a/src/v2/components/CopyableAddress.tsx +++ b/src/v2/components/CopyableAddress.tsx @@ -1,6 +1,6 @@ +import { useCopyToClipboard } from "@/hooks/useCopyToClipboard" import { cn } from "@/lib/utils" -import { ButtonHTMLAttributes, useRef, useState } from "react" -import { useCopyToClipboard } from "usehooks-ts" +import { ButtonHTMLAttributes, useRef } from "react" import shortenHex from "utils/shortenHex" import { Button } from "./ui/Button" import { Tooltip, TooltipContent, TooltipTrigger } from "./ui/Tooltip" @@ -19,20 +19,14 @@ const CopyableAddress = ({ ...props }: Props): JSX.Element => { const buttonRef = useRef(null) - const [, copyToClipboard] = useCopyToClipboard() - const [forceOpenTooltip, setForceOpenTooltip] = useState(false) + const { hasCopied, copyToClipboard } = useCopyToClipboard() return ( - + - {forceOpenTooltip ? "Copied" : "Click to copy address"} + {hasCopied ? "Copied" : "Click to copy address"} ) diff --git a/src/v2/components/ui/ColorPicker.tsx b/src/v2/components/ui/ColorPicker.tsx index 18f38715b6..a0e31b07e1 100644 --- a/src/v2/components/ui/ColorPicker.tsx +++ b/src/v2/components/ui/ColorPicker.tsx @@ -42,9 +42,7 @@ export const ColorPicker = ({ fieldName, onChange }: Props) => { as={Palette} pos="absolute" pointerEvents={"none"} - color={ - isIconLight ? "var(--whiteAlpha-800)" : "var(--blackAlpha-800)" - } + color={isIconLight ? "white" : "black"} />
{ + const [_, _originalCopyToClipboard] = _useCopyToClipBoard() + + const [hasCopied, setHasCopied] = useState(false) + const copyToClipboard = useCallback( + (text: string) => { + _originalCopyToClipboard(text) + setHasCopied(true) + }, + [_originalCopyToClipboard] + ) + + useEffect(() => { + let timeoutId: number | null = null + + if (hasCopied) { + timeoutId = window.setTimeout(() => { + setHasCopied(false) + }, options.timeout) + } + + return () => { + if (timeoutId) { + window.clearTimeout(timeoutId) + } + } + }, [options.timeout, hasCopied]) + + return { + hasCopied, + copyToClipboard, + } +} + +export { useCopyToClipboard } diff --git a/tailwind.config.ts b/tailwind.config.ts index c2bce705ba..f81369c487 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -24,6 +24,11 @@ const config = { }, colors: { gray: "hsl(var(--gray))", + blackAlpha: { + DEFAULT: "var(--blackAlpha-medium)", + soft: "var(--blackAlpha-soft)", + hard: "var(--blackAlpha-hard)", + }, banner: { DEFAULT: "var(--banner)", dark: "var(--banner-dark)", @@ -170,6 +175,11 @@ const config = { hover: "hsl(var(--farcaster-hover))", active: "hsl(var(--farcaster-active))", }, + uniswap: { + DEFAULT: "hsl(var(--uniswap))", + hover: "hsl(var(--uniswap-hover))", + active: "hsl(var(--uniswap-active))", + }, }, opacity: { banner: "var(--banner-opacity)"