From 26bb22fabadd4ecba41e623d7c2fe668fbb3fec5 Mon Sep 17 00:00:00 2001 From: kemuru <102478601+kemuru@users.noreply.github.com> Date: Sat, 14 Dec 2024 08:22:22 +0100 Subject: [PATCH 01/12] feat: update ui library, abstract hover transition style, update favicon, add more hovers --- web/src/components/CasesDisplay/Filters.tsx | 29 ++++++++++-------- .../components/DisputePreview/Policies.tsx | 3 +- .../DisputeView/DisputeCardView.tsx | 3 +- .../DisputeView/DisputeListView.tsx | 3 +- web/src/components/DottedMenuButton.tsx | 7 ++++- web/src/components/EvidenceCard.tsx | 3 +- web/src/components/HowItWorks.tsx | 5 +-- web/src/components/LightButton.tsx | 3 +- web/src/favicon.ico | Bin 243998 -> 14008 bytes web/src/layout/Footer/index.tsx | 3 +- web/src/layout/Header/Logo.tsx | 4 ++- .../CaseDetails/Voting/VotesDetails/index.tsx | 5 --- .../CourtDetails/StakePanel/InputDisplay.tsx | 11 +++++-- web/src/pages/Courts/CourtDetails/Stats.tsx | 8 ----- web/src/pages/Courts/CourtDetails/index.tsx | 19 +++++++----- web/src/styles/commonStyles.ts | 21 +++++++++++++ 16 files changed, 82 insertions(+), 45 deletions(-) create mode 100644 web/src/styles/commonStyles.ts diff --git a/web/src/components/CasesDisplay/Filters.tsx b/web/src/components/CasesDisplay/Filters.tsx index c7ae88513..cb417ac65 100644 --- a/web/src/components/CasesDisplay/Filters.tsx +++ b/web/src/components/CasesDisplay/Filters.tsx @@ -1,5 +1,7 @@ import React from "react"; -import styled, { useTheme } from "styled-components"; +import styled, { css, useTheme } from "styled-components"; + +import { hoverShortTransitionTiming } from "styles/commonStyles"; import { useNavigate, useParams } from "react-router-dom"; @@ -19,15 +21,6 @@ const Container = styled.div` width: fit-content; `; -const StyledGridIcon = styled(GridIcon)` - cursor: pointer; - transition: filter 0.2s ease; - fill: ${({ theme }) => theme.primaryBlue}; - width: 16px; - height: 16px; - overflow: hidden; -`; - const IconsContainer = styled.div` display: flex; justify-content: center; @@ -35,13 +28,25 @@ const IconsContainer = styled.div` gap: 4px; `; -const StyledListIcon = styled(ListIcon)` +const BaseIconStyles = css` + ${hoverShortTransitionTiming} cursor: pointer; - transition: filter 0.2s ease; fill: ${({ theme }) => theme.primaryBlue}; width: 16px; height: 16px; overflow: hidden; + + :hover { + fill: ${({ theme }) => theme.secondaryBlue}; + } +`; + +const StyledGridIcon = styled(GridIcon)` + ${BaseIconStyles} +`; + +const StyledListIcon = styled(ListIcon)` + ${BaseIconStyles} `; const Filters: React.FC = () => { diff --git a/web/src/components/DisputePreview/Policies.tsx b/web/src/components/DisputePreview/Policies.tsx index 91adfc4ad..2eb7f5c2e 100644 --- a/web/src/components/DisputePreview/Policies.tsx +++ b/web/src/components/DisputePreview/Policies.tsx @@ -8,6 +8,7 @@ import { getIpfsUrl } from "utils/getIpfsUrl"; import { isUndefined } from "utils/index"; import { responsiveSize } from "styles/responsiveSize"; +import { hoverShortTransitionTiming } from "styles/commonStyles"; import { InternalLink } from "components/InternalLink"; @@ -38,12 +39,12 @@ const StyledPaperclipIcon = styled(PaperclipIcon)` `; const StyledInternalLink = styled(InternalLink)` + ${hoverShortTransitionTiming} display: flex; gap: 4px; &:hover { svg { - transition: fill 0.1s; fill: ${({ theme }) => theme.secondaryBlue}; } } diff --git a/web/src/components/DisputeView/DisputeCardView.tsx b/web/src/components/DisputeView/DisputeCardView.tsx index 2c2e370a3..97360cc72 100644 --- a/web/src/components/DisputeView/DisputeCardView.tsx +++ b/web/src/components/DisputeView/DisputeCardView.tsx @@ -8,6 +8,7 @@ import { Card } from "@kleros/ui-components-library"; import { Periods } from "consts/periods"; import { responsiveSize } from "styles/responsiveSize"; +import { hoverShortTransitionTiming } from "styles/commonStyles"; import { StyledSkeleton } from "components/StyledSkeleton"; @@ -15,11 +16,11 @@ import DisputeInfo from "./DisputeInfo"; import PeriodBanner from "./PeriodBanner"; const StyledCard = styled(Card)` + ${hoverShortTransitionTiming} width: 100%; height: 100%; max-height: 335px; min-height: 290px; - transition: background-color 0.1s; &:hover { background-color: ${({ theme }) => theme.lightGrey}BB; diff --git a/web/src/components/DisputeView/DisputeListView.tsx b/web/src/components/DisputeView/DisputeListView.tsx index cdd4e64c3..ad22d7cb3 100644 --- a/web/src/components/DisputeView/DisputeListView.tsx +++ b/web/src/components/DisputeView/DisputeListView.tsx @@ -9,16 +9,17 @@ import { Card } from "@kleros/ui-components-library"; import { Periods } from "consts/periods"; import { responsiveSize } from "styles/responsiveSize"; +import { hoverShortTransitionTiming } from "styles/commonStyles"; import DisputeInfo from "./DisputeInfo"; import PeriodBanner from "./PeriodBanner"; const StyledListItem = styled(Card)` + ${hoverShortTransitionTiming} display: flex; flex-grow: 1; width: 100%; height: 82px; - transition: background-color 0.1s; &:hover { background-color: ${({ theme }) => theme.lightGrey}BB; diff --git a/web/src/components/DottedMenuButton.tsx b/web/src/components/DottedMenuButton.tsx index 3684b24ed..d1f5102d0 100644 --- a/web/src/components/DottedMenuButton.tsx +++ b/web/src/components/DottedMenuButton.tsx @@ -1,6 +1,8 @@ import React from "react"; import styled, { css, keyframes } from "styled-components"; +import { hoverShortTransitionTiming } from "styles/commonStyles"; + import DottedMenu from "svgs/icons/dotted-menu.svg"; const ripple = keyframes` @@ -57,13 +59,16 @@ const Container = styled.div<{ displayRipple: boolean }>` `; const ButtonContainer = styled.div` + ${hoverShortTransitionTiming} border-radius: 50%; z-index: 1; background-color: ${({ theme }) => theme.lightBackground}; - transition: background-color 0.1s; :hover { background-color: ${({ theme }) => theme.lightGrey}; + svg { + fill: ${({ theme }) => theme.secondaryBlue}; + } } `; diff --git a/web/src/components/EvidenceCard.tsx b/web/src/components/EvidenceCard.tsx index c5954f9eb..ddd7ba62c 100644 --- a/web/src/components/EvidenceCard.tsx +++ b/web/src/components/EvidenceCard.tsx @@ -3,6 +3,7 @@ import styled, { css } from "styled-components"; import { landscapeStyle } from "styles/landscapeStyle"; import { responsiveSize } from "styles/responsiveSize"; +import { hoverShortTransitionTiming } from "styles/commonStyles"; import Identicon from "react-identicons"; import ReactMarkdown from "react-markdown"; @@ -165,6 +166,7 @@ const MobileText = styled.span` `; const StyledInternalLink = styled(InternalLink)` + ${hoverShortTransitionTiming} display: flex; gap: ${responsiveSize(5, 6)}; > svg { @@ -173,7 +175,6 @@ const StyledInternalLink = styled(InternalLink)` } :hover svg { - transition: fill 0.1s; fill: ${({ theme }) => theme.secondaryBlue}; } `; diff --git a/web/src/components/HowItWorks.tsx b/web/src/components/HowItWorks.tsx index 7fc2cf8d9..ad4847d60 100644 --- a/web/src/components/HowItWorks.tsx +++ b/web/src/components/HowItWorks.tsx @@ -1,9 +1,12 @@ import React from "react"; import styled from "styled-components"; +import { hoverShortTransitionTiming } from "styles/commonStyles"; + import BookOpenIcon from "svgs/icons/book-open.svg"; const Container = styled.div` + ${hoverShortTransitionTiming} display: flex; align-items: center; font-size: 14px; @@ -11,7 +14,6 @@ const Container = styled.div` gap: 8px; cursor: pointer; color: ${({ theme }) => theme.primaryBlue}; - transition: color 0.1s; svg path { fill: ${({ theme }) => theme.primaryBlue}; @@ -20,7 +22,6 @@ const Container = styled.div` &:hover { color: ${({ theme }) => theme.secondaryBlue}; svg path { - transition: fill 0.1s; fill: ${({ theme }) => theme.secondaryBlue}; } } diff --git a/web/src/components/LightButton.tsx b/web/src/components/LightButton.tsx index 9e4c579bc..86307d53a 100644 --- a/web/src/components/LightButton.tsx +++ b/web/src/components/LightButton.tsx @@ -1,10 +1,12 @@ import React from "react"; import styled, { css } from "styled-components"; import { landscapeStyle } from "styles/landscapeStyle"; +import { hoverShortTransitionTiming } from "styles/commonStyles"; import { Button } from "@kleros/ui-components-library"; const StyledButton = styled(Button)<{ isMobileNavbar?: boolean }>` + ${hoverShortTransitionTiming} background-color: transparent; padding: 8px !important; border-radius: 7px; @@ -20,7 +22,6 @@ const StyledButton = styled(Button)<{ isMobileNavbar?: boolean }>` .button-svg { fill: ${({ theme, isMobileNavbar }) => (isMobileNavbar ? theme.primaryText : `${theme.white}`)} !important; } - transition: background-color 0.1s; background-color: ${({ theme }) => theme.whiteLowOpacityStrong}; } diff --git a/web/src/favicon.ico b/web/src/favicon.ico index 16a8426eef8cff590208db71e7841c80044e72d4..47556b42952514397cdaef37cd8b15099242a13a 100644 GIT binary patch literal 14008 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 BlbZkl literal 243998 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 z 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%0DJ@fXX10nj?Bb= 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 diff --git a/web/src/layout/Footer/index.tsx b/web/src/layout/Footer/index.tsx index 046dd69b7..4007b781b 100644 --- a/web/src/layout/Footer/index.tsx +++ b/web/src/layout/Footer/index.tsx @@ -2,6 +2,7 @@ import React from "react"; import styled, { css } from "styled-components"; import { landscapeStyle } from "styles/landscapeStyle"; +import { hoverShortTransitionTiming } from "styles/commonStyles"; import SecuredByKlerosLogo from "svgs/footer/secured-by-kleros.svg"; @@ -32,6 +33,7 @@ const Container = styled.div` `; const StyledSecuredByKlerosLogo = styled(SecuredByKlerosLogo)` + ${hoverShortTransitionTiming} min-height: 24px; path { @@ -40,7 +42,6 @@ const StyledSecuredByKlerosLogo = styled(SecuredByKlerosLogo)` :hover path { fill: ${({ theme }) => theme.white}; - transition: fill 0.1s; } `; diff --git a/web/src/layout/Header/Logo.tsx b/web/src/layout/Header/Logo.tsx index 36dd0cf0f..5ccaabe3b 100644 --- a/web/src/layout/Header/Logo.tsx +++ b/web/src/layout/Header/Logo.tsx @@ -1,6 +1,8 @@ import React, { useMemo } from "react"; import styled, { Theme } from "styled-components"; +import { hoverShortTransitionTiming } from "styles/commonStyles"; + import { Link } from "react-router-dom"; import { ArbitratorTypes, getArbitratorType } from "consts/index"; @@ -29,13 +31,13 @@ const BadgeText = styled.label` `; const StyledKlerosCourtLogo = styled(KlerosCourtLogo)` + ${hoverShortTransitionTiming} max-height: 40px; width: auto; &:hover { path { fill: ${({ theme }) => theme.white}BF; - transition: fill 0.1s; } } `; diff --git a/web/src/pages/Cases/CaseDetails/Voting/VotesDetails/index.tsx b/web/src/pages/Cases/CaseDetails/Voting/VotesDetails/index.tsx index ec0dfdcc9..340b7ba75 100644 --- a/web/src/pages/Cases/CaseDetails/Voting/VotesDetails/index.tsx +++ b/web/src/pages/Cases/CaseDetails/Voting/VotesDetails/index.tsx @@ -28,12 +28,7 @@ const StyledAccordion = styled(CustomAccordion)` [class*="accordion-button"] { padding: 11.5px ${responsiveSize(8, 18)} !important; - background-color: ${({ theme }) => theme.whiteBackground} !important; - border: 1px solid ${({ theme }) => theme.stroke} !important; margin: 4px 0; - > svg { - fill: ${({ theme }) => theme.primaryText} !important; - } } [class*="Body"] { diff --git a/web/src/pages/Courts/CourtDetails/StakePanel/InputDisplay.tsx b/web/src/pages/Courts/CourtDetails/StakePanel/InputDisplay.tsx index 1ea779a74..da9f89b5f 100644 --- a/web/src/pages/Courts/CourtDetails/StakePanel/InputDisplay.tsx +++ b/web/src/pages/Courts/CourtDetails/StakePanel/InputDisplay.tsx @@ -1,5 +1,7 @@ import React, { useState, useMemo, useEffect } from "react"; -import styled, { css } from "styled-components"; +import styled from "styled-components"; + +import { hoverShortTransitionTiming } from "styles/commonStyles"; import { useParams } from "react-router-dom"; import { useDebounce } from "react-use"; @@ -10,8 +12,6 @@ import { commify, uncommify } from "utils/commify"; import { formatPNK, roundNumberDown } from "utils/format"; import { isUndefined } from "utils/index"; -import { landscapeStyle } from "styles/landscapeStyle"; - import { NumberInputField } from "components/NumberInputField"; import StakeWithdrawButton, { ActionType } from "./StakeWithdrawButton"; @@ -29,8 +29,13 @@ const LabelArea = styled.div` `; const StyledLabel = styled.label` + ${hoverShortTransitionTiming} color: ${({ theme }) => theme.primaryBlue}; cursor: pointer; + + :hover { + color: ${({ theme }) => theme.secondaryBlue}; + } `; const InputArea = styled.div` diff --git a/web/src/pages/Courts/CourtDetails/Stats.tsx b/web/src/pages/Courts/CourtDetails/Stats.tsx index a1a71d6df..55bedfc72 100644 --- a/web/src/pages/Courts/CourtDetails/Stats.tsx +++ b/web/src/pages/Courts/CourtDetails/Stats.tsx @@ -32,14 +32,6 @@ import { StyledSkeleton } from "components/StyledSkeleton"; const StyledAccordion = styled(Accordion)` > * > button { justify-content: unset; - background-color: ${({ theme }) => theme.whiteBackground} !important; - border: 1px solid ${({ theme }) => theme.stroke} !important; - > svg { - fill: ${({ theme }) => theme.primaryText} !important; - } - > p { - color: ${({ theme }) => theme.primaryText}; - } } //adds padding to body container > * > div > div { diff --git a/web/src/pages/Courts/CourtDetails/index.tsx b/web/src/pages/Courts/CourtDetails/index.tsx index e255cb103..852ffb3dc 100644 --- a/web/src/pages/Courts/CourtDetails/index.tsx +++ b/web/src/pages/Courts/CourtDetails/index.tsx @@ -1,7 +1,7 @@ import React from "react"; import styled, { css } from "styled-components"; -import { useParams } from "react-router-dom"; +import { useNavigate, useParams } from "react-router-dom"; import { useToggle } from "react-use"; import { Card, Breadcrumb } from "@kleros/ui-components-library"; @@ -94,16 +94,15 @@ const CourtDetails: React.FC = () => { const { data: policy } = useCourtPolicy(id); const { data } = useCourtTree(); const [isStakingMiniGuideOpen, toggleStakingMiniGuide] = useToggle(false); + const navigate = useNavigate(); const courtPath = getCourtsPath(data?.court, id); - const items = []; - items.push( - ...(courtPath?.map((node) => ({ + const breadcrumbItems = + courtPath?.map((node) => ({ text: node.name, value: node.id, - })) ?? []) - ); + })) ?? []; return ( @@ -111,7 +110,13 @@ const CourtDetails: React.FC = () => { {policy ? policy.name : } - {items.length > 1 && items[0]?.value !== 1 ? : null} + {breadcrumbItems.length > 1 ? ( + navigate(`/courts/${courtId}`)} + /> + ) : null} {!isProductionDeployment() && } diff --git a/web/src/styles/commonStyles.ts b/web/src/styles/commonStyles.ts new file mode 100644 index 000000000..941b48a35 --- /dev/null +++ b/web/src/styles/commonStyles.ts @@ -0,0 +1,21 @@ +import { css } from "styled-components"; + +export const hoverShortTransitionTiming = css` + :hover { + transition: 0.1s; + } + + :not(:hover) { + transition: 0.1s; + } +`; + +export const hoverLongTransitionTiming = css` + :hover { + transition: 0.2s; + } + + :not(:hover) { + transition: 0.2s; + } +`; From 7465db0e203aea2aa62ece8aadd214cabdb12a9f Mon Sep 17 00:00:00 2001 From: kemuru <102478601+kemuru@users.noreply.github.com> Date: Sun, 15 Dec 2024 01:41:41 +0100 Subject: [PATCH 02/12] chore: switch hover effect in appeal's option card --- web/src/pages/Cases/CaseDetails/Appeal/OptionCard.tsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/web/src/pages/Cases/CaseDetails/Appeal/OptionCard.tsx b/web/src/pages/Cases/CaseDetails/Appeal/OptionCard.tsx index c301e70e6..5c4ad0998 100644 --- a/web/src/pages/Cases/CaseDetails/Appeal/OptionCard.tsx +++ b/web/src/pages/Cases/CaseDetails/Appeal/OptionCard.tsx @@ -1,6 +1,8 @@ import React, { useMemo } from "react"; import styled from "styled-components"; +import { hoverShortTransitionTiming } from "styles/commonStyles"; + import { useMeasure } from "react-use"; import { formatEther } from "viem"; @@ -11,10 +13,14 @@ import Gavel from "svgs/icons/gavel.svg"; import { isUndefined } from "utils/index"; const StyledCard = styled(Card)` + ${hoverShortTransitionTiming} width: 100%; padding: 24px; + &:hover { + background-color: ${({ theme }) => theme.lightGrey}BB; cursor: pointer; + box-shadow: none; } `; From 0da7cbdadbf7f10b1f7a66f8b69aa1f9ce718893 Mon Sep 17 00:00:00 2001 From: kemuru <102478601+kemuru@users.noreply.github.com> Date: Mon, 16 Dec 2024 07:09:41 +0100 Subject: [PATCH 03/12] chore: adjust hover effect in card --- web/src/components/DisputeView/DisputeCardView.tsx | 6 +----- web/src/components/DisputeView/DisputeListView.tsx | 6 +----- web/src/pages/Cases/CaseDetails/Appeal/OptionCard.tsx | 2 -- 3 files changed, 2 insertions(+), 12 deletions(-) diff --git a/web/src/components/DisputeView/DisputeCardView.tsx b/web/src/components/DisputeView/DisputeCardView.tsx index 97360cc72..602c98f06 100644 --- a/web/src/components/DisputeView/DisputeCardView.tsx +++ b/web/src/components/DisputeView/DisputeCardView.tsx @@ -21,10 +21,6 @@ const StyledCard = styled(Card)` height: 100%; max-height: 335px; min-height: 290px; - - &:hover { - background-color: ${({ theme }) => theme.lightGrey}BB; - } `; const CardContainer = styled.div` @@ -62,7 +58,7 @@ interface IDisputeCardView { const DisputeCardView: React.FC = ({ isLoading, ...props }) => { return ( - + {isLoading ? : } diff --git a/web/src/components/DisputeView/DisputeListView.tsx b/web/src/components/DisputeView/DisputeListView.tsx index ad22d7cb3..d0c1c967a 100644 --- a/web/src/components/DisputeView/DisputeListView.tsx +++ b/web/src/components/DisputeView/DisputeListView.tsx @@ -20,10 +20,6 @@ const StyledListItem = styled(Card)` flex-grow: 1; width: 100%; height: 82px; - - &:hover { - background-color: ${({ theme }) => theme.lightGrey}BB; - } `; const ListContainer = styled.div` @@ -65,7 +61,7 @@ const DisputeListView: React.FC = (props) => { const { isDisconnected } = useAccount(); return ( - + diff --git a/web/src/pages/Cases/CaseDetails/Appeal/OptionCard.tsx b/web/src/pages/Cases/CaseDetails/Appeal/OptionCard.tsx index 5c4ad0998..0ac19f61d 100644 --- a/web/src/pages/Cases/CaseDetails/Appeal/OptionCard.tsx +++ b/web/src/pages/Cases/CaseDetails/Appeal/OptionCard.tsx @@ -18,9 +18,7 @@ const StyledCard = styled(Card)` padding: 24px; &:hover { - background-color: ${({ theme }) => theme.lightGrey}BB; cursor: pointer; - box-shadow: none; } `; From 7147c8f4b2686a6ff91986ab3d002bc5a52610ec Mon Sep 17 00:00:00 2001 From: kemuru <102478601+kemuru@users.noreply.github.com> Date: Mon, 16 Dec 2024 17:37:22 +0100 Subject: [PATCH 04/12] feat: destroying margins, update ui component library --- web/package.json | 2 +- web/src/components/CasesDisplay/Search.tsx | 10 +++---- .../CasesDisplay/StatsAndFilters.tsx | 6 ++-- web/src/components/CasesDisplay/index.tsx | 2 +- web/src/components/ExtraStatsDisplay.tsx | 1 - web/src/components/LatestCases.tsx | 4 +-- web/src/pages/Cases/CaseDetails/Tabs.tsx | 3 ++ web/src/pages/Cases/CaseDetails/Timeline.tsx | 28 ++++++++----------- web/src/pages/Cases/CaseDetails/index.tsx | 5 ++-- web/src/pages/Cases/index.tsx | 2 +- web/src/pages/Courts/index.tsx | 2 +- web/src/pages/Dashboard/Courts/Header.tsx | 4 +-- web/src/pages/Dashboard/Courts/index.tsx | 5 ++-- web/src/pages/Dashboard/JurorInfo/Header.tsx | 2 +- web/src/pages/Dashboard/index.tsx | 6 ++-- web/src/pages/Home/Community/index.tsx | 4 +-- web/src/pages/Home/CourtOverview/Chart.tsx | 9 +++--- .../pages/Home/CourtOverview/ExtraStats.tsx | 5 +++- web/src/pages/Home/CourtOverview/Header.tsx | 17 +++++++---- web/src/pages/Home/TopJurors/index.tsx | 4 +-- web/src/pages/Home/index.tsx | 2 +- yarn.lock | 10 +++---- 22 files changed, 69 insertions(+), 64 deletions(-) diff --git a/web/package.json b/web/package.json index 46d18bd06..0d872e08f 100644 --- a/web/package.json +++ b/web/package.json @@ -81,7 +81,7 @@ "@kleros/kleros-app": "^2.0.1", "@kleros/kleros-sdk": "workspace:^", "@kleros/kleros-v2-contracts": "workspace:^", - "@kleros/ui-components-library": "^2.16.0", + "@kleros/ui-components-library": "^2.17.0", "@lifi/wallet-management": "^3.4.6", "@lifi/widget": "^3.12.3", "@sentry/react": "^7.120.0", diff --git a/web/src/components/CasesDisplay/Search.tsx b/web/src/components/CasesDisplay/Search.tsx index 6d1d265e3..2179df17f 100644 --- a/web/src/components/CasesDisplay/Search.tsx +++ b/web/src/components/CasesDisplay/Search.tsx @@ -18,14 +18,12 @@ import { responsiveSize } from "styles/responsiveSize"; const Container = styled.div` display: flex; flex-direction: column; - gap: 4px; + gap: ${responsiveSize(8, 16)}; ${landscapeStyle( - () => - css` - flex-direction: row; - gap: ${responsiveSize(4, 22)}; - ` + () => css` + flex-direction: row; + ` )} `; diff --git a/web/src/components/CasesDisplay/StatsAndFilters.tsx b/web/src/components/CasesDisplay/StatsAndFilters.tsx index 51a04d7a5..78dd78ee5 100644 --- a/web/src/components/CasesDisplay/StatsAndFilters.tsx +++ b/web/src/components/CasesDisplay/StatsAndFilters.tsx @@ -1,6 +1,8 @@ import React from "react"; import styled from "styled-components"; +import { responsiveSize } from "styles/responsiveSize"; + import Filters from "./Filters"; import Stats, { IStats } from "./Stats"; @@ -8,8 +10,8 @@ const Container = styled.div` display: flex; flex-wrap: wrap; gap: 8px; - margin-top: 11px; - margin-bottom: 48px; + margin-top: ${responsiveSize(4, 8)}; + margin-bottom: ${responsiveSize(16, 32)}; justify-content: space-between; `; diff --git a/web/src/components/CasesDisplay/index.tsx b/web/src/components/CasesDisplay/index.tsx index 7b30e7751..6a3bf8684 100644 --- a/web/src/components/CasesDisplay/index.tsx +++ b/web/src/components/CasesDisplay/index.tsx @@ -17,7 +17,7 @@ const TitleContainer = styled.div` justify-content: space-between; align-items: center; flex-wrap: wrap; - margin-bottom: ${responsiveSize(32, 48)}; + margin-bottom: ${responsiveSize(12, 24)}; `; const StyledTitle = styled.h1` diff --git a/web/src/components/ExtraStatsDisplay.tsx b/web/src/components/ExtraStatsDisplay.tsx index a562708a2..dd292164b 100644 --- a/web/src/components/ExtraStatsDisplay.tsx +++ b/web/src/components/ExtraStatsDisplay.tsx @@ -9,7 +9,6 @@ const Container = styled.div` display: flex; gap: 8px; align-items: center; - margin-top: 24px; `; const SVGContainer = styled.div` diff --git a/web/src/components/LatestCases.tsx b/web/src/components/LatestCases.tsx index 9f8a9d55b..34f259f35 100644 --- a/web/src/components/LatestCases.tsx +++ b/web/src/components/LatestCases.tsx @@ -13,11 +13,11 @@ import { SkeletonDisputeCard } from "components/StyledSkeleton"; import { Dispute_Filter } from "../graphql/graphql"; const Container = styled.div` - margin-top: ${responsiveSize(48, 80)}; + margin-top: ${responsiveSize(28, 48)}; `; const Title = styled.h1` - margin-bottom: ${responsiveSize(16, 48)}; + margin-bottom: ${responsiveSize(12, 24)}; `; const DisputeContainer = styled.div` diff --git a/web/src/pages/Cases/CaseDetails/Tabs.tsx b/web/src/pages/Cases/CaseDetails/Tabs.tsx index 7f8b07761..0ec722d98 100644 --- a/web/src/pages/Cases/CaseDetails/Tabs.tsx +++ b/web/src/pages/Cases/CaseDetails/Tabs.tsx @@ -1,6 +1,8 @@ import React, { useState, useEffect, useMemo } from "react"; import styled from "styled-components"; +import { responsiveSize } from "styles/responsiveSize"; + import { useNavigate, useLocation, useParams } from "react-router-dom"; import { Tabs as TabsComponent } from "@kleros/ui-components-library"; @@ -20,6 +22,7 @@ import { useAppealCost } from "queries/useAppealCost"; const StyledTabs = styled(TabsComponent)` width: 100%; + margin-top: ${responsiveSize(12, 24)}; > * { display: flex; flex-wrap: wrap; diff --git a/web/src/pages/Cases/CaseDetails/Timeline.tsx b/web/src/pages/Cases/CaseDetails/Timeline.tsx index be8113549..b4aa8ece4 100644 --- a/web/src/pages/Cases/CaseDetails/Timeline.tsx +++ b/web/src/pages/Cases/CaseDetails/Timeline.tsx @@ -1,6 +1,8 @@ import React, { useMemo } from "react"; import styled, { css } from "styled-components"; +import { landscapeStyle } from "styles/landscapeStyle"; + import { Box, Steps } from "@kleros/ui-components-library"; import { Periods } from "consts/periods"; @@ -10,34 +12,26 @@ import { secondsToDayHourMinute } from "utils/date"; import { DisputeDetailsQuery } from "queries/useDisputeDetailsQuery"; -import { landscapeStyle } from "styles/landscapeStyle"; -import { responsiveSize } from "styles/responsiveSize"; - import { StyledSkeleton } from "components/StyledSkeleton"; const TimeLineContainer = styled(Box)` - display: block; width: 100%; - height: 98px; + height: auto; border-radius: 0px; - padding: ${responsiveSize(16, 48)} 8px 0px ${responsiveSize(12, 22)}; - margin-top: ${responsiveSize(16, 48)}; - margin-bottom: ${responsiveSize(12, 22)}; - background-color: ${({ theme }) => theme.whiteBackground}; - - ${landscapeStyle( - () => css` - display: block; - padding: 28px 8px 8px 8px; - ` - )} + background-color: transparent; `; const StyledSteps = styled(Steps)` display: flex; justify-content: space-between; - width: 85%; + width: 89%; margin: auto; + + ${landscapeStyle( + () => css` + width: 98%; + ` + )} `; const Timeline: React.FC<{ diff --git a/web/src/pages/Cases/CaseDetails/index.tsx b/web/src/pages/Cases/CaseDetails/index.tsx index 643eb696d..cdf434b00 100644 --- a/web/src/pages/Cases/CaseDetails/index.tsx +++ b/web/src/pages/Cases/CaseDetails/index.tsx @@ -33,7 +33,8 @@ const HeaderContainer = styled.div` width: 100%; display: flex; align-items: center; - margin-bottom: ${responsiveSize(32, 54)}; + margin-top: -2px; + margin-bottom: ${responsiveSize(16, 24)}; `; const Header = styled.h1` @@ -55,8 +56,8 @@ const CaseDetails: React.FC = () => {
Case #{id}
- + theme.lightBackground}; - padding: ${responsiveSize(32, 80)} ${responsiveSize(24, 136)} ${responsiveSize(76, 96)}; + padding: ${responsiveSize(32, 48)} ${responsiveSize(24, 136)} ${responsiveSize(40, 60)}; max-width: ${MAX_WIDTH_LANDSCAPE}; margin: 0 auto; `; diff --git a/web/src/pages/Courts/index.tsx b/web/src/pages/Courts/index.tsx index 691c849d2..dea046be9 100644 --- a/web/src/pages/Courts/index.tsx +++ b/web/src/pages/Courts/index.tsx @@ -12,7 +12,7 @@ import TopSearch from "./TopSearch"; const Container = styled.div` width: 100%; background-color: ${({ theme }) => theme.lightBackground}; - padding: ${responsiveSize(32, 80)} ${responsiveSize(24, 136)} ${responsiveSize(76, 96)}; + padding: ${responsiveSize(32, 48)} ${responsiveSize(24, 136)} ${responsiveSize(40, 60)}; max-width: ${MAX_WIDTH_LANDSCAPE}; margin: 0 auto; `; diff --git a/web/src/pages/Dashboard/Courts/Header.tsx b/web/src/pages/Dashboard/Courts/Header.tsx index 3577acd68..7244de1dc 100644 --- a/web/src/pages/Dashboard/Courts/Header.tsx +++ b/web/src/pages/Dashboard/Courts/Header.tsx @@ -16,10 +16,10 @@ const Container = styled.div` display: flex; flex-direction: column; width: 100%; - gap: 12px; + gap: 4px; align-items: flex-start; justify-content: space-between; - margin-bottom: ${responsiveSize(32, 48)}; + margin-bottom: ${responsiveSize(16, 24)}; ${landscapeStyle( () => css` diff --git a/web/src/pages/Dashboard/Courts/index.tsx b/web/src/pages/Dashboard/Courts/index.tsx index 965185b80..2b99b4cb8 100644 --- a/web/src/pages/Dashboard/Courts/index.tsx +++ b/web/src/pages/Dashboard/Courts/index.tsx @@ -9,18 +9,19 @@ import { useReadSortitionModuleGetJurorBalance } from "hooks/contracts/generated import { useJurorStakeDetailsQuery } from "queries/useJurorStakeDetailsQuery"; import { landscapeStyle } from "styles/landscapeStyle"; +import { responsiveSize } from "styles/responsiveSize"; import CourtCard from "./CourtCard"; import Header from "./Header"; const Container = styled.div` - margin-top: 64px; + margin-top: ${responsiveSize(24, 48)}; `; const CourtCardsContainer = styled.div` display: flex; flex-direction: column; - gap: 12px; + gap: 4px; z-index: 0; ${landscapeStyle( diff --git a/web/src/pages/Dashboard/JurorInfo/Header.tsx b/web/src/pages/Dashboard/JurorInfo/Header.tsx index 00660f3b7..907df0015 100644 --- a/web/src/pages/Dashboard/JurorInfo/Header.tsx +++ b/web/src/pages/Dashboard/JurorInfo/Header.tsx @@ -16,7 +16,7 @@ const Container = styled.div` display: flex; flex-direction: column; justify-content: flex-start; - margin-bottom: ${responsiveSize(32, 48)}; + margin-bottom: ${responsiveSize(16, 24)}; gap: 12px; ${landscapeStyle( diff --git a/web/src/pages/Dashboard/index.tsx b/web/src/pages/Dashboard/index.tsx index 5aa271d7e..37f06b6e6 100644 --- a/web/src/pages/Dashboard/index.tsx +++ b/web/src/pages/Dashboard/index.tsx @@ -25,16 +25,16 @@ import JurorInfo from "./JurorInfo"; const Container = styled.div` width: 100%; background-color: ${({ theme }) => theme.lightBackground}; - padding: ${responsiveSize(32, 80)} ${responsiveSize(24, 136)} ${responsiveSize(76, 96)}; + padding: ${responsiveSize(32, 48)} ${responsiveSize(24, 136)} ${responsiveSize(40, 60)}; max-width: ${MAX_WIDTH_LANDSCAPE}; margin: 0 auto; `; const StyledCasesDisplay = styled(CasesDisplay)` - margin-top: 64px; + margin-top: ${responsiveSize(32, 48)}; .title { - margin-bottom: ${responsiveSize(16, 48)}; + margin-bottom: ${responsiveSize(12, 24)}; } `; diff --git a/web/src/pages/Home/Community/index.tsx b/web/src/pages/Home/Community/index.tsx index 0c2cf8547..27af3020d 100644 --- a/web/src/pages/Home/Community/index.tsx +++ b/web/src/pages/Home/Community/index.tsx @@ -11,10 +11,10 @@ import { responsiveSize } from "styles/responsiveSize"; import { Element } from "./Element"; const Container = styled.div` - margin-top: ${responsiveSize(44, 64)}; + margin-top: ${responsiveSize(24, 48)}; h1 { - margin-bottom: ${responsiveSize(16, 48)}; + margin-bottom: ${responsiveSize(12, 24)}; } `; diff --git a/web/src/pages/Home/CourtOverview/Chart.tsx b/web/src/pages/Home/CourtOverview/Chart.tsx index 10a53d1a4..94cf8f3bb 100644 --- a/web/src/pages/Home/CourtOverview/Chart.tsx +++ b/web/src/pages/Home/CourtOverview/Chart.tsx @@ -1,6 +1,8 @@ import React, { useMemo, useState } from "react"; import styled from "styled-components"; +import { responsiveSize } from "styles/responsiveSize"; + import { Tooltip } from "chart.js"; import { formatUnits } from "viem"; @@ -8,8 +10,6 @@ import { DropdownSelect } from "@kleros/ui-components-library"; import { useHomePageContext } from "hooks/useHomePageContext"; -import { responsiveSize } from "styles/responsiveSize"; - import { StyledSkeleton } from "components/StyledSkeleton"; import CasesByCourtsChart, { CasesByCourtsChartData } from "./CasesByCourtsChart"; @@ -17,14 +17,14 @@ import StakedPNKByCourtsChart, { StakedPNKByCourtsChartData } from "./StakedPNKB import TimeSeriesChart from "./TimeSeriesChart"; const Container = styled.div` - margin-bottom: ${responsiveSize(32, 48)}; + margin-bottom: ${responsiveSize(16, 32)}; display: flex; flex-direction: column; `; const StyledDropdown = styled(DropdownSelect)` width: fit-content; - align-self: end; + align-self: start; `; const CHART_OPTIONS = [ @@ -40,7 +40,6 @@ const ChartOptionsDropdown: React.FC<{ { diff --git a/web/src/pages/Home/CourtOverview/ExtraStats.tsx b/web/src/pages/Home/CourtOverview/ExtraStats.tsx index 18112c115..9786b4f61 100644 --- a/web/src/pages/Home/CourtOverview/ExtraStats.tsx +++ b/web/src/pages/Home/CourtOverview/ExtraStats.tsx @@ -1,6 +1,8 @@ import React, { useState } from "react"; import styled from "styled-components"; +import { responsiveSize } from "styles/responsiveSize"; + import { DropdownSelect } from "@kleros/ui-components-library"; import LawBalance from "svgs/icons/law-balance.svg"; @@ -13,8 +15,9 @@ import ExtraStatsDisplay from "components/ExtraStatsDisplay"; const StyledCard = styled.div` display: flex; flex-wrap: wrap; - gap: 0 24px; + gap: 12px 24px; justify-content: center; + margin-top: ${responsiveSize(12, 16)}; `; const StyledLabel = styled.label` diff --git a/web/src/pages/Home/CourtOverview/Header.tsx b/web/src/pages/Home/CourtOverview/Header.tsx index fa54bf4a2..9c8598f71 100644 --- a/web/src/pages/Home/CourtOverview/Header.tsx +++ b/web/src/pages/Home/CourtOverview/Header.tsx @@ -3,31 +3,36 @@ import styled from "styled-components"; import { responsiveSize } from "styles/responsiveSize"; -import { Link } from "react-router-dom"; - import { Button } from "@kleros/ui-components-library"; import Bookmark from "svgs/icons/bookmark.svg"; +import { InternalLink } from "components/InternalLink"; + const StyledHeader = styled.div` display: flex; flex-wrap: wrap; justify-content: space-between; - gap: 0 12px; - margin-bottom: ${responsiveSize(16, 0)}; + gap: 8px 12px; + margin-bottom: 12px; `; const StyledH1 = styled.h1` font-size: ${responsiveSize(21, 24)}; + margin: 0; +`; + +const StyledInternalLink = styled(InternalLink)` + height: 34px; `; const Header: React.FC = () => { return ( Court Overview - +