Skip to content

Commit

Permalink
Merge pull request #34 from AngleProtocol/buttons/modals
Browse files Browse the repository at this point in the history
Buttons/modals
  • Loading branch information
clmntsnr authored Dec 3, 2024
2 parents 1f10990 + 415db6f commit ceb90d5
Show file tree
Hide file tree
Showing 8 changed files with 92 additions and 77 deletions.
2 changes: 1 addition & 1 deletion packages/dappkit
Submodule dappkit updated 48 files
+1 −1 src/components.ts
+2 −2 src/components/VisuallyHidden.tsx
+4 −5 src/components/dapp/Countdown.tsx
+4 −9 src/components/dapp/TransactionButton.tsx
+7 −7 src/components/dapp/TransactionHelper.tsx
+10 −9 src/components/dapp/WalletButton.tsx
+16 −7 src/components/dapp/WalletConnectors.tsx
+8 −13 src/components/extenders/Card.tsx
+6 −20 src/components/extenders/Dropdown.tsx
+1 −3 src/components/extenders/Group.tsx
+17 −5 src/components/extenders/Icons.tsx
+7 −5 src/components/extenders/Modal.tsx
+56 −42 src/components/extenders/Select.tsx
+3 −11 src/components/layout/Container.tsx
+8 −29 src/components/primitives/Accordion.tsx
+1 −1 src/components/primitives/Bar.tsx
+6 −10 src/components/primitives/Box.tsx
+8 −8 src/components/primitives/Button.tsx
+4 −17 src/components/primitives/Checkbox.tsx
+4 −11 src/components/primitives/Collapsible.tsx
+4 −22 src/components/primitives/Divider.tsx
+8 −22 src/components/primitives/Hash.tsx
+10 −18 src/components/primitives/Input.tsx
+1 −1 src/components/primitives/List.tsx
+9 −10 src/components/primitives/PrimitiveTag.tsx
+2 −5 src/components/primitives/Scroll.tsx
+7 −25 src/components/primitives/Slider.tsx
+2 −4 src/components/primitives/Table.tsx
+5 −26 src/components/primitives/Text.tsx
+7 −43 src/components/primitives/Title.tsx
+4 −9 src/components/primitives/Tooltip.tsx
+4 −12 src/components/primitives/Value.tsx
+25 −100 src/config/themes.ts
+0 −1 src/constants/SCREENS.json
+12 −7 src/context/Dapp.context.tsx
+16 −40 src/context/Theme.context.tsx
+4 −4 src/context/Wallet.context.tsx
+2 −7 src/hooks/theming/OverrideTheme.tsx
+3 −3 src/hooks/theming/useThemableProps.tsx
+4 −13 src/hooks/theming/useThemedVariables.tsx
+23 −21 src/hooks/useClipboard.tsx
+5 −6 src/hooks/useWalletState.tsx
+4 −4 src/index.ts
+1 −1 src/style.css
+4 −4 src/theming/coloring.ts
+9 −7 src/utils/event.ts
+9 −9 src/utils/react.ts
+4 −7 src/utils/tailwind.ts
1 change: 1 addition & 0 deletions src/components/element/SwitchMode.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { useMemo } from "react";
export default function SwitchMode() {
const { mode, toggleMode } = useTheme();
const canSwitchModes = useMemo(() => !(!config.modes || config.modes?.length === 1), []);

return (
canSwitchModes && (
<Button look="base" onClick={toggleMode}>
Expand Down
3 changes: 2 additions & 1 deletion src/components/element/Tag.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,8 @@ export default function Tag<T extends keyof TagTypes>({ type, value, ...props }:
<Divider className="border-main-6" horizontal />
{/* <Text size="xs">{token?.description}</Text> */}
<Group className="flex-col" size="md">
<Button to={`/protocols/${protocol?.name}`} size="sm" look="bold">
<Button to={`/protocols/${protocol?.name}`} size="xs" look="soft">
<Icon remix="RiArrowRightLine" />
{protocol?.name} on Merkl
</Button>
<Button size="xs" look="soft">
Expand Down
56 changes: 38 additions & 18 deletions src/components/element/functions/SearchBar.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type { Opportunity } from "@merkl/api";
import { Form, useLocation } from "@remix-run/react";
import { Group, Icon, Icons, Input, Modal, Title, useShortcut } from "dappkit";
import { Divider, Group, Icon, Icons, Input, Modal, Title, useShortcut } from "dappkit";
import { Button } from "dappkit";
import Scroll from "packages/dappkit/src/components/primitives/Scroll";
import { type ReactNode, useEffect, useMemo, useState } from "react";
Expand All @@ -18,9 +18,12 @@ function OpportunityResult({ opportunity }: { opportunity: Opportunity }) {
const { link, icons } = useOpportunity(opportunity);

return (
<Button to={link} size="lg" look="bold">
<Icons>{icons}</Icons> {opportunity.name}
</Button>
<>
<Button to={link} look="soft">
<Icons>{icons}</Icons> {opportunity.name} <Icon remix="RiArrowRightLine" />
</Button>
<Divider look="bold" />
</>
);
}

Expand Down Expand Up @@ -50,34 +53,45 @@ export default function SearchBar({ icon = false }: SearchBarProps) {

return (
<Group className="flex-col flex-nowrap overflow-hidden">
<Scroll className="min-h-[70vh] w-full gap-xl z-10" vertical>
<Scroll className="min-h-[70vh] w-full [&>*]:flex [&>*]:flex-col [&>*]:gap-xl*2 z-10" vertical>
{entries
.filter(([_, res]) => res?.length)
.map(([category, results]) => (
<Group key={category} className="flex-col">
<Group key={category} className="flex-col" size="xl">
<Title h={4}>{titles[category]}</Title>
<Group size="sm" className="flex-col">
<Group className="flex-col">
{results.map((_, i) => {
switch (category) {
case "chain":
return (
<Button to={`/chains/${results[i].name}`} size="lg" look="bold">
<Icon src={results[i].icon} /> {results[i].name}
</Button>
<>
<Button to={`/chain/${results[i].name}`} look="soft" className="gap-lg">
<Icon src={results[i].icon} /> {results[i].name}
<Icon remix="RiArrowRightLine" />
</Button>
<Divider look="bold" />
</>
);
case "opportunity":
return <OpportunityResult opportunity={results[i]} />;
case "token":
return (
<Button to={`/token/${results[i].symbol}`} size="lg" look="bold">
<Icon src={results[i].icon} /> {results[i].symbol}
</Button>
<>
<Button to={`/token/${results[i].symbol}`} look="soft">
<Icon src={results[i].icon} /> {results[i].symbol} <Icon remix="RiArrowRightLine" />
</Button>
<Divider look="bold" />
</>
);
case "protocol":
return (
<Button to={`/protocols/${results[i].name}`} size="lg" look="bold">
<Icon src={results[i].icon} /> {results[i].name}
</Button>
<>
<Button to={`/protocol/${results[i].name}`} look="soft">
<Icon src={results[i].icon} /> {results[i].name}
<Icon remix="RiArrowRightLine" />
</Button>
<Divider look="bold" />
</>
);
default:
break;
Expand All @@ -93,11 +107,17 @@ export default function SearchBar({ icon = false }: SearchBarProps) {

return (
<Modal
className="h-full py-xl*2 w-[90vw] md:w-[70vw] lg:w-[50vw] xl:w-[500px] z-20 [&>*]:max-h-full [&>*]:animate-drop [&>*]:origin-top"
size="xl"
className="h-full p-xl*2 w-[90vw] md:w-[70vw] lg:w-[50vw] xl:w-[500px] z-20 [&>*]:max-h-full [&>*]:animate-drop [&>*]:origin-top"
state={[opened, setOpened]}
modal={
<>
<Input look="bold" size="md" state={[searchInput, setSearchInput]} placeholder="Search Merkl..." />
<Input
look="base"
state={[searchInput, setSearchInput]}
placeholder="Search"
suffix={<Icon className="text-main-12" remix="RiSearchLine" />}
/>
{Results}
</>
}>
Expand Down
7 changes: 2 additions & 5 deletions src/components/element/opportunity/OpportunityFilters.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -95,14 +95,14 @@ export default function OpportunityFilters({ only, exclude, chains }: Opportunit
}

return (
<Group>
<Group className="items-center">
{fields.includes("search") && (
<Form>
<Input
name="search"
value={innerSearch}
state={[innerSearch, setInnerSearch]}
suffix={<Icon size="sm" remix="RiSearchLine" />}
suffix={<Icon remix="RiSearchLine" />}
onClick={onSearchSubmit}
placeholder="Search"
/>
Expand All @@ -114,7 +114,6 @@ export default function OpportunityFilters({ only, exclude, chains }: Opportunit
allOption={"All actions"}
multiple
options={actionOptions}
size="sm"
look="bold"
placeholder="Actions"
/>
Expand All @@ -125,7 +124,6 @@ export default function OpportunityFilters({ only, exclude, chains }: Opportunit
allOption={"All status"}
multiple
options={statusOptions}
size="sm"
look="bold"
placeholder="Status"
/>
Expand All @@ -137,7 +135,6 @@ export default function OpportunityFilters({ only, exclude, chains }: Opportunit
multiple
search
options={chainOptions}
size="sm"
look="bold"
placeholder="Chains"
/>
Expand Down
78 changes: 38 additions & 40 deletions src/components/layout/Header.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import { motion } from "framer-motion";
import config from "merkl.config";
import { useWalletContext } from "packages/dappkit/src/context/Wallet.context";
import { useMemo, useState } from "react";
import { useMediaQuery } from "react-responsive";
import SCREENS from "../../../packages/dappkit/src/constants/SCREENS.json";
import SwitchMode from "../element/SwitchMode";
import SearchBar from "../element/functions/SearchBar";
import { LayerMenu } from "./LayerMenu";

const container = {
Expand All @@ -30,13 +30,9 @@ const item = {
};

export default function Header() {
const { mode, toggleMode } = useTheme();
const { mode } = useTheme();
const { address: user } = useWalletContext();
const [open, setOpen] = useState<boolean>(false);
const mdScreens = useMediaQuery({ maxWidth: SCREENS.lg });

const smScreens = useMediaQuery({ maxWidth: SCREENS.md });
const canSwitchModes = useMemo(() => !(!config.modes || config.modes?.length === 1), []);

const routes = useMemo(() => {
const { homepage, ...rest } = config.routes;
Expand All @@ -63,49 +59,51 @@ export default function Header() {
<Container className="py-xl">
<Group className="justify-between items-center">
<motion.div variants={item}>
{mdScreens ? (
<Dropdown
size="lg"
padding="xs"
open={open}
content={<LayerMenu nav={routes} setOpen={setOpen} />}
className="flex gap-sm md:gap-lg items-center">
<Image
className="w-[140px] md:w-[200px]"
alt={`${config.appName} logo`}
src={mode !== "dark" ? customerDarkLogo : customerLogo}
/>
<Icon className="text-main-12" remix="RiArrowDownSLine" />
</Dropdown>
) : (
<Button size="lg" to={routes.homepage.route} look="soft">
<Image
className="w-[200px]"
alt={`${config.appName} logo`}
src={mode !== "dark" ? customerDarkLogo : customerLogo}
/>
</Button>
)}
<Dropdown
size="lg"
padding="xs"
open={open}
content={<LayerMenu nav={routes} setOpen={setOpen} />}
className="lg:hidden flex gap-sm md:gap-lg items-center">
<Image
className="w-[140px] md:w-[200px]"
alt={`${config.appName} logo`}
src={mode !== "dark" ? customerDarkLogo : customerLogo}
/>
<Icon className="text-main-12" remix="RiArrowDownSLine" />
</Dropdown>

<Button className="hidden lg:flex" size="lg" to={routes.homepage.route} look="soft">
<Image
className="w-[200px]"
alt={`${config.appName} logo`}
src={mode !== "dark" ? customerDarkLogo : customerLogo}
/>
</Button>
</motion.div>

<motion.div variants={item}>
<Group className="gap-xl items-center">
{!mdScreens &&
Object.entries(routes)
<Group className="items-center" size="xl">
<Group className="hidden lg:flex items-center" size="xl">
{Object.entries(config.routes)
.filter(([key]) => !["homepage", "privacy", "terms"].includes(key))
.map(([key, { route }]) => {
return (
<Button className="capitalize" look="soft" size="lg" key={`${key}-link`} to={route}>
<Button look="soft" size="lg" key={`${key}-link`} to={route}>
{key}
</Button>
);
})}
{canSwitchModes && (
<Button size="lg" look="base" onClick={toggleMode}>
<Icon size="sm" remix={mode === "dark" ? "RiMoonClearLine" : "RiSunLine"} />
</Button>
)}
{!smScreens && <WalletButton />}
<Group className="items-center">
<SwitchMode />

<SearchBar icon={true} />
</Group>
</Group>

<Group className="hidden md:flex">
<WalletButton />
</Group>
</Group>
</motion.div>
</Group>
Expand Down
18 changes: 8 additions & 10 deletions src/components/layout/LayerMenu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,14 @@ import { NavLink } from "@remix-run/react";
import { Divider, Group, Text, WalletButton } from "dappkit";
import { Icon } from "packages/dappkit/src";
import type { FC } from "react";
import { useMediaQuery } from "react-responsive";
import type { routesType } from "src/config/type";
import SCREENS from "../../../packages/dappkit/src/constants/SCREENS.json";
import SwitchMode from "../element/SwitchMode";
import SearchBar from "../element/functions/SearchBar";

export const LayerMenu: FC<{
nav: routesType;
setOpen: (open: boolean) => void;
}> = ({ nav, setOpen }) => {
const smScreens = useMediaQuery({ maxWidth: SCREENS.md });
return (
<div className="layermenu z-50 min-w-64 bg-main-2 flex flex-col">
<main className="flex-1 overflow-y-scroll w-full">
Expand All @@ -37,15 +34,16 @@ export const LayerMenu: FC<{
<footer className="mt-lg">
<Group className="flex-col items-stretch">
<Group className="items-center">
<SearchBar />
<div className="flex-1">
<SearchBar />
</div>
<SwitchMode />
</Group>
{!!smScreens && (
<>
<Divider look="soft" />
<WalletButton />
</>
)}

<Group className="md:hidden">
<Divider look="soft" />
<WalletButton />
</Group>
</Group>
</footer>
</div>
Expand Down
4 changes: 2 additions & 2 deletions src/customer/assets/style/shorthands.css
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,13 @@
@apply opacity-100;
}
.dim:hover {
@apply opacity-70;
@apply opacity-60;
}
}

:disabled,
.disabled {
@apply opacity-40 pointer-events-none;
@apply opacity-60 pointer-events-none;
}

.faq-item__trigger[data-state="open"] > * {
Expand Down

0 comments on commit ceb90d5

Please sign in to comment.