diff --git a/packages/docusaurus-playground/src/pages/index.mdx b/packages/docusaurus-playground/src/pages/index.mdx index 02bc30d..b1750ee 100644 --- a/packages/docusaurus-playground/src/pages/index.mdx +++ b/packages/docusaurus-playground/src/pages/index.mdx @@ -2,7 +2,6 @@ import { Hero, HeroTitle, HeroDescription, - HeroVideo, HeroActions, HeroAction, CallToActionSection, @@ -20,77 +19,238 @@ import { ShowcaseCard, JobsPerDepartment, GithubChallenges, + LogoCarousel, } from '../components/mdx' import * as jobData from '/generated/jobs.json' import * as challengesData from '/generated/challenges.json' - - - {'Defend Against Data Censorship With Codex'} - - { - 'Codex is a durable, decentralized data storage protocol, created so the world community can preserve its most important knowledge without risk of censorship.' - } - - - - Follow Codex - - - - - - - - + + + {'LIGHT AND PERFORMANT CLIENTS, FOR THE ETHEREUM NETWORK'} + + + { + 'Run Nimbus on lightweight devices or premium servers with equal ease and peace of mind. Trusted by solo stakers and enterprise node operators alike.' + } + + + + Learn more + + + - Codex implements advanced erasure coding techniques - to ensure data stored is always retrievable without relying on - inefficient full replication methods. - - ), + title: 'Consensus Client', + description: + 'An ultra-light client that contributes to the network and does not require syncing.', }, { - title: 'Accessible', + title: 'Verified Web3 Proxy', description: - 'Participating in the Codex network is highly accessible thanks to its permissionless nature, and bandwidth usage optimizations like its "lazy repair" system and lightweight ZK-based remote auditing system.', + 'A lightweight execution layer client to complement the consensus layer - coming soon.', }, { - title: 'Decentralized', + title: 'Portal Client', description: - "The network's native marketplace incentivizes wide participation, ensuring robust resistance to censorship and external attack.", + 'An ultra-light client that contributes to the network and does not require syncing.', }, { - title: 'Low-cost', + title: 'Execution Client', description: - "Codex's design slashes the costs associated with traditional cloud storage providers while democratizing opportunities to contribute excess system resources to the network.", + 'A lightweight execution layer client to complement the consensus layer - coming soon.', }, ]} > - - Read more + + read more + + + + Read mroe + + + + + + + + + + + + + + + + + + + + + Follow the detailed +
+ step-by-step guide here + + } + list={[ + { + title: 'Simple setup', + description: + 'Run integrated Nimbus Beacon Node and Validator Client together.', + }, + { + title: 'Beacon setup', + description: + 'Use Nimbus Beacon Node with an alternative validator client.', + }, + { + title: 'Beacon setup', + description: + 'Use Nimbus Validator Client with an alternative Beacon Node', + }, + ]} + label="Get Nimbus" + target="_blank" + href="https://nimbus.guide/quick-start.html" />
+ + + + + + + + + + + + + + + + + + + + + + + + + = ({
{title} diff --git a/packages/logos-docusaurus-theme/package.json b/packages/logos-docusaurus-theme/package.json index 23d677c..0b58fc7 100644 --- a/packages/logos-docusaurus-theme/package.json +++ b/packages/logos-docusaurus-theme/package.json @@ -21,7 +21,7 @@ }, "dependencies": { "@acid-info/docusaurus-og": "^1.0.0-alpha.111", - "@acid-info/lsd-react": "^0.1.0-alpha.21", + "@acid-info/lsd-react": "^0.1.0-beta.1", "@docusaurus/core": "^2.4.1", "@docusaurus/mdx-loader": "^2.4.1", "@docusaurus/module-type-aliases": "^2.4.1", diff --git a/packages/logos-docusaurus-theme/src/client/components/Icon/Icon.tsx b/packages/logos-docusaurus-theme/src/client/components/Icon/Icon.tsx index 0d4dbd9..ea66134 100644 --- a/packages/logos-docusaurus-theme/src/client/components/Icon/Icon.tsx +++ b/packages/logos-docusaurus-theme/src/client/components/Icon/Icon.tsx @@ -1,18 +1,22 @@ import { useColorMode } from '@docusaurus/theme-common' import { clsx } from 'clsx' -import React, { CSSProperties } from 'react' +import React from 'react' import styles from './style.module.scss' +import AddSvg from '../../static/icons/add.svg' import ArrowLCircleSvg from '../../static/icons/arrow-left-circle.svg' import ArrowL from '../../static/icons/arrow-left.svg' import ArrowRCircleSvg from '../../static/icons/arrow-right-circle.svg' import ArrowR from '../../static/icons/arrow-right.svg' +import Avatar from '../../static/icons/avatar.svg' import CloseSvg from '../../static/icons/close.svg' import CopySvg from '../../static/icons/copy.svg' +import DiscordWhiteSvg from '../../static/icons/discord-white.svg' import DiscordSvg from '../../static/icons/discord.svg' import DiscourseSvg from '../../static/icons/discourse.svg' import DotSvg from '../../static/icons/dot.svg' +import DownloadSvg from '../../static/icons/download.svg' import DropdownSvg from '../../static/icons/dropdown.svg' import EditSvg from '../../static/icons/edit.svg' import ExternalLinkSvg from '../../static/icons/external-link.svg' @@ -23,15 +27,13 @@ import GithubWhiteSvg from '../../static/icons/github-white.svg' import GScholarSvg from '../../static/icons/gscholar.svg' import HistorySvg from '../../static/icons/history.svg' import LinkedinSvg from '../../static/icons/linkedin.svg' +import RemoveSvg from '../../static/icons/remove.svg' import SearchSvg from '../../static/icons/search.svg' import StatusSvg from '../../static/icons/status.svg' +import TelegramWhiteSvg from '../../static/icons/telegram-white.svg' import TelegramSvg from '../../static/icons/telegram.svg' import TwitterSvg from '../../static/icons/twitter.svg' -import DiscordWhiteSvg from '../../static/icons/discord-white.svg' -import TelegramWhiteSvg from '../../static/icons/telegram-white.svg' import XWhiteSvg from '../../static/icons/x-white.svg' -import Avatar from '../../static/icons/avatar.svg' -import DownloadSvg from '../../static/icons/download.svg' type TIconProps = { size?: 's' | 'm' | 'l' @@ -40,19 +42,20 @@ type TIconProps = { type TProps = { children?: JSX.Element - fill?: string + fill?: boolean + stroke?: boolean } & TIconProps export const Icon = (props: TProps): JSX.Element => { const { children, size = 'm' } = props - const { colorMode, setColorMode } = useColorMode() return (
@@ -234,3 +237,15 @@ export const IconDownload = (props: TIconProps): JSX.Element => ( ) + +export const IconAdd = (props: TIconProps): JSX.Element => ( + + + +) + +export const IconRemove = (props: TIconProps): JSX.Element => ( + + + +) diff --git a/packages/logos-docusaurus-theme/src/client/components/Icon/style.module.scss b/packages/logos-docusaurus-theme/src/client/components/Icon/style.module.scss index 63efbd5..2f2e313 100644 --- a/packages/logos-docusaurus-theme/src/client/components/Icon/style.module.scss +++ b/packages/logos-docusaurus-theme/src/client/components/Icon/style.module.scss @@ -15,15 +15,38 @@ width: 40px; } } +} - &.dark { - .fill { - fill: var(--ifm-color-black); +[data-theme='dark'] { + .icon { + &.fill { + &, + * { + fill: var(--ifm-color-white); + } } - .stroke { - stroke: var(--ifm-color-white); + &.stroke { + svg, + svg * { + stroke: var(--ifm-color-white); + } + } + } +} + +[data-theme='light'] { + .icon { + &.fill { + &, + * { + fill: var(--ifm-color-black); + } + } + &.stroke { + svg, + svg * { + stroke: var(--ifm-color-black); + } } } - &.light { - } } diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/AccordionItem/AccordionItem.scss b/packages/logos-docusaurus-theme/src/client/components/mdx/AccordionItem/AccordionItem.scss new file mode 100644 index 0000000..fa0a076 --- /dev/null +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/AccordionItem/AccordionItem.scss @@ -0,0 +1,45 @@ +@use '../../../css/utils'; +@use '../../../css/lsd'; + +.mdx-accordion-item { + border-bottom: 1px solid rgb(var(--lsd-border-primary)); + + > input { + display: none; + } +} + +.mdx-accordion-item__header { + min-height: 88px; + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + padding: 16px 0; + gap: 0 16px; + + &, + * { + cursor: pointer; + } +} + +.mdx-accordion-item__content-wrapper { + overflow: hidden; + height: auto; +} + +.mdx-accordion-item__content { + height: 0; +} + +.mdx-accordion-item--open { + .mdx-accordion-item__content { + height: auto; + padding-top: 6px; + padding-bottom: 1.875rem; + } +} + +@include utils.responsive('lg', 'down') { +} diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/AccordionItem/AccordionItem.tsx b/packages/logos-docusaurus-theme/src/client/components/mdx/AccordionItem/AccordionItem.tsx new file mode 100644 index 0000000..80fb32a --- /dev/null +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/AccordionItem/AccordionItem.tsx @@ -0,0 +1,72 @@ +import clsx from 'clsx' +import React, { useEffect, useState } from 'react' +import './AccordionItem.scss' +import { Typography } from '@acid-info/lsd-react' +import { IconAdd, IconRemove } from '../../Icon' +import uniqueId from 'lodash/uniqueId' + +export type AccordionItemProps = Omit< + React.HTMLProps, + 'title' +> & { + open?: boolean + title: React.ReactNode + onToggle?: (open: boolean) => void +} + +export const AccordionItem: React.FC = ({ + open: openProp, + onToggle, + title, + className, + children, + ...props +}) => { + const id = uniqueId('accordion-item-') + const [open, setOpen] = useState(openProp ?? false) + + if (typeof openProp !== 'undefined' && openProp !== open) { + setOpen(openProp) + } + + const handleToggle = () => { + if (typeof openProp !== 'undefined') { + onToggle && onToggle(!open) + } else { + setOpen((val) => !val) + } + } + + return ( +
+ +
handleToggle()} + > + + {title} + +
+ {open ? : } +
+
+
+
{children}
+
+
+ ) +} diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/AccordionItem/index.ts b/packages/logos-docusaurus-theme/src/client/components/mdx/AccordionItem/index.ts new file mode 100644 index 0000000..61f1abb --- /dev/null +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/AccordionItem/index.ts @@ -0,0 +1 @@ +export * from './AccordionItem' diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/AssetCard/AssetCard.tsx b/packages/logos-docusaurus-theme/src/client/components/mdx/AssetCard/AssetCard.tsx index 3279f60..924ed66 100644 --- a/packages/logos-docusaurus-theme/src/client/components/mdx/AssetCard/AssetCard.tsx +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/AssetCard/AssetCard.tsx @@ -101,7 +101,7 @@ export const AssetCard: React.FC = ({ {title && ( {title} diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/CallToActionSection/CallToActionSection.scss b/packages/logos-docusaurus-theme/src/client/components/mdx/CallToActionSection/CallToActionSection.scss index a4c8cb8..847137e 100644 --- a/packages/logos-docusaurus-theme/src/client/components/mdx/CallToActionSection/CallToActionSection.scss +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/CallToActionSection/CallToActionSection.scss @@ -19,7 +19,16 @@ .mdx-cta-section--title-only { .mdx-cta-section__title { - @include lsd.typography('h1', false); + @include lsd.typography('h5', false); + font-weight: 300; + + max-width: 886px; + } +} + +.mdx-cta-section--title-button { + .mdx-cta-section__title { + @include lsd.typography('display4', false); font-weight: 300; max-width: 886px; @@ -27,8 +36,7 @@ @include utils.responsive('lg', 'down') { .mdx-cta-section__title { - font-size: 1.5rem !important; - line-height: 2rem !important; + @include lsd.typography('h4', false); } } } @@ -41,11 +49,11 @@ } .mdx-cta-section__title { - @include lsd.typography('h6', false); + @include lsd.typography('h5', false); } .mdx-cta-section__description { - @include lsd.typography('h4', false); + @include lsd.typography('h3', false); } .mdx-cta-section__link { @@ -65,7 +73,7 @@ .mdx-cta-section--simple { .mdx-cta-section__title { - @include lsd.typography('h6', false); + @include lsd.typography('h5', false); } .mdx-cta-section__description { @@ -91,11 +99,11 @@ } .mdx-cta-section__title { - @include lsd.typography('h6', false); + @include lsd.typography('h5', false); } .mdx-cta-section__description { - @include lsd.typography('h2', false); + @include lsd.typography('h1', false); margin-top: 2rem; } @@ -145,8 +153,7 @@ } & > p { - font-size: 1.5rem !important; - line-height: 2rem !important; + @include lsd.typography('h4', true); } } } @@ -155,12 +162,10 @@ @include utils.responsive('lg', 'down') { .mdx-cta-section__title { - font-size: 1rem !important; - line-height: 100% !important; + @include lsd.typography('subtitle2', true); } .mdx-cta-section__description { - font-size: 1.5rem !important; - line-height: 2rem !important; + @include lsd.typography('h4', true); } } diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/CallToActionSection/CallToActionSection.tsx b/packages/logos-docusaurus-theme/src/client/components/mdx/CallToActionSection/CallToActionSection.tsx index 4d3aada..6c89329 100644 --- a/packages/logos-docusaurus-theme/src/client/components/mdx/CallToActionSection/CallToActionSection.tsx +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/CallToActionSection/CallToActionSection.tsx @@ -117,10 +117,13 @@ export const CallToActionSection: React.FC = ({ }) => { const withDescription = !!description const withList = list.length > 0 + const withButton = !!href const display = - title && !withDescription && !withList + title && !withDescription && !withButton && !withList ? 'title-only' + : title && !description && !withList && withButton + ? 'title-button' : title && description && columns === 2 ? `full-width` : title && description && list.length > 0 @@ -158,10 +161,10 @@ export const CallToActionSection: React.FC = ({
{list.map((option, index) => (
- + {option.title} - + {option.description}
diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/FeatureList/FeatureList.scss b/packages/logos-docusaurus-theme/src/client/components/mdx/FeatureList/FeatureList.scss index dc03e74..f5e2475 100644 --- a/packages/logos-docusaurus-theme/src/client/components/mdx/FeatureList/FeatureList.scss +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/FeatureList/FeatureList.scss @@ -69,9 +69,21 @@ .mdx-feature-list__feature-description { } -.mdx-feature-list__extra { - margin-top: 3.5rem; - padding: 0 1rem; +.mdx-feature-list__header { + display: flex; + flex-direction: row; + align-items: center; + gap: 2rem; +} + +.mdx-feature-list--cta-top { +} + +.mdx-feature-list--cta-bottom { + .mdx-feature-list__extra { + margin-top: 3.5rem; + padding: 0 1rem; + } } @include utils.responsive('lg', 'up') { @@ -110,14 +122,16 @@ @include utils.responsive('lg', 'down') { .mdx-feature-list { .mdx-feature-list__title { - @include lsd.typography('subtitle1', false); + @include lsd.typography('subtitle2', false); padding: 1rem 0; } } - .mdx-feature-list__extra { - margin-top: 2rem; - padding: 0; + .mdx-feature-list--cta-bottom { + .mdx-feature-list__extra { + margin-top: 2rem; + padding: 0; + } } .mdx-feature-list__list { @@ -136,12 +150,12 @@ } .mdx-feature-list__feature-title { - @include lsd.typography('h5', false); + @include lsd.typography('h4', false); margin-top: 1rem; } .mdx-feature-list__feature-description { - @include lsd.typography('subtitle1'); + @include lsd.typography('body1', false); margin-top: 3rem; } diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/FeatureList/FeatureList.tsx b/packages/logos-docusaurus-theme/src/client/components/mdx/FeatureList/FeatureList.tsx index cf0cf4e..4f33093 100644 --- a/packages/logos-docusaurus-theme/src/client/components/mdx/FeatureList/FeatureList.tsx +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/FeatureList/FeatureList.tsx @@ -24,6 +24,11 @@ export type FeatureListProps = Omit< * The vertical alignment of feature description. */ alignment?: 'bottom' | 'top' + + /** + * The position of the call to action buttons. + */ + ctaPosition?: 'top' | 'bottom' } /** @@ -53,6 +58,7 @@ export const FeatureList: React.FC = ({ alignment = 'bottom', features = [], className, + ctaPosition = 'bottom', children, ...props }) => { @@ -62,16 +68,22 @@ export const FeatureList: React.FC = ({ className, 'mdx-feature-list', `mdx-feature-list--${alignment}-aligned`, + `mdx-feature-list--cta-${ctaPosition}`, )} {...props} > - - {title} - +
+ + {title} + + {children && ctaPosition === 'top' && ( +
{children}
+ )} +
{features.map((feature, index) => (
@@ -84,14 +96,14 @@ export const FeatureList: React.FC = ({ {index + 1} {feature.title} @@ -102,7 +114,9 @@ export const FeatureList: React.FC = ({
))}
- {children &&
{children}
} + {children && ctaPosition === 'bottom' && ( +
{children}
+ )}
) } diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/GithubChallenges/SingleGithubChallenge.tsx b/packages/logos-docusaurus-theme/src/client/components/mdx/GithubChallenges/SingleGithubChallenge.tsx index f53c8af..6e8d6b6 100644 --- a/packages/logos-docusaurus-theme/src/client/components/mdx/GithubChallenges/SingleGithubChallenge.tsx +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/GithubChallenges/SingleGithubChallenge.tsx @@ -104,7 +104,7 @@ export const SingleGithubChallenge: React.FC = ({ return (
- + {issue.title} diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/Grid/Grid.tsx b/packages/logos-docusaurus-theme/src/client/components/mdx/Grid/Grid.tsx index 99e9ca2..54d4e48 100644 --- a/packages/logos-docusaurus-theme/src/client/components/mdx/Grid/Grid.tsx +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/Grid/Grid.tsx @@ -1,15 +1,10 @@ -import { - ChevronLeftIcon, - ChevronRightIcon, - IconButton, - IconButtonGroup, - THEME_BREAKPOINTS, -} from '@acid-info/lsd-react' +import { THEME_BREAKPOINTS } from '@acid-info/lsd-react' import { css } from '@emotion/react' import styled from '@emotion/styled' import clsx from 'clsx' import React, { useRef } from 'react' import { lsdUtils } from '../../../lib/lsd.utils' +import { ScrollButtons } from '../ScrollButtons' import { GridItem } from './GridItem' export type GridProps = React.ComponentProps & { @@ -29,62 +24,17 @@ export const Grid: { Item: typeof GridItem } & React.FC = ({ }) => { const ref = useRef(null) - const scroll = (direction: -1 | 1) => { - const el = ref.current - if (!el) return - - const itemWidth = el.children[0]?.getBoundingClientRect?.()?.width ?? 236 - el.scrollTo({ - behavior: 'smooth', - left: - el.scrollLeft + - (el.getBoundingClientRect()?.width - itemWidth) * direction, - }) - } - return (
{actions} -
- - - - {leftLabel.length ? ( - - {leftLabel} - - ) : null} - - - {rightLabel.length ? ( - - {rightLabel} - - ) : null} - - - -
+
{children} @@ -113,26 +63,6 @@ const GridRoot = styled.div<{ .mdx-grid__scroll { display: flex; - flex-direction: row; - gap: 0 1rem; - margin-left: auto; - } - - .mdx-grid__scroll--spacing-buttons { - width: 100%; - - > div { - justify-content: space-between; - width: 100%; - } - - > div > button:not(:last-child) { - border-right: 1px solid rgb(var(--lsd-border-primary)) !important; - } - } - - .mdx-grid__scroll-button { - display: flex; } .mdx-grid__content { @@ -211,47 +141,4 @@ const GridRoot = styled.div<{ `} `) })} - - ${(props) => - lsdUtils.responsive( - props.theme as any, - 'md', - 'up', - )(css` - .mdx-grid__scroll-button--with-label { - width: auto; - min-width: 83px; - padding: 5px 11px 5px 9px; - gap: 12px; - - &:first-of-type { - justify-content: flex-start; - } - - &:last-of-type { - justify-content: flex-start; - } - } - `)} - - ${(props) => - lsdUtils.responsive( - props.theme as any, - 'sm', - 'down', - )(css` - .mdx-grid__scroll { - & > div { - justify-content: flex-end; - - > button:not(:last-child) { - border-right: none !important; - } - } - } - - .mdx-grid__scroll-button-label { - display: none; - } - `)} ` diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/HeroDescription/HeroDescription.tsx b/packages/logos-docusaurus-theme/src/client/components/mdx/HeroDescription/HeroDescription.tsx index 57d89ee..1d2fbe4 100644 --- a/packages/logos-docusaurus-theme/src/client/components/mdx/HeroDescription/HeroDescription.tsx +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/HeroDescription/HeroDescription.tsx @@ -21,7 +21,7 @@ export const HeroDescription: React.FC = ({ return ( = ({ className="mdx-jpd__job-link" >
- + {job.title} diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/LogoCarousel/LogoCarousel.scss b/packages/logos-docusaurus-theme/src/client/components/mdx/LogoCarousel/LogoCarousel.scss new file mode 100644 index 0000000..40bf7b5 --- /dev/null +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/LogoCarousel/LogoCarousel.scss @@ -0,0 +1,33 @@ +@use '../../../css/utils'; +@use '../../../css/lsd'; + +.mdx-logo-carousel { + .mdx-section-header__title { + flex-basis: 100%; + } + + .mdx-section-header__extra { + margin-left: auto; + } + + .mdx-logo-carousel__inner { + margin-top: 100px; + } + + .mdx-logo-carousel__item { + flex-shrink: 0; + } + + .mdx-logo-carousel__logo { + height: 56px; + width: auto; + } +} + +@include utils.responsive('lg', 'down') { + .mdx-logo-carousel { + .mdx-logo-carousel__inner { + margin-top: 64px; + } + } +} diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/LogoCarousel/LogoCarousel.tsx b/packages/logos-docusaurus-theme/src/client/components/mdx/LogoCarousel/LogoCarousel.tsx new file mode 100644 index 0000000..f0bd9ad --- /dev/null +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/LogoCarousel/LogoCarousel.tsx @@ -0,0 +1,64 @@ +import { Typography } from '@acid-info/lsd-react' +import ThemedImage from '@theme/ThemedImage' +import clsx from 'clsx' +import React, { useRef } from 'react' +import './LogoCarousel.scss' +import { Grid, SectionHeader } from '..' +import { ScrollButtons } from '../ScrollButtons' +import { useHydrated } from '../../../lib/useHydrated' + +export type LogoCarouselProps = Omit< + React.HTMLAttributes, + 'title' +> & { + title?: React.ReactNode + items?: { + title?: string + logoSrc?: string + logoSrcDark?: string + }[] +} + +export const LogoCarousel: React.FC = ({ + title, + className, + items = [], + children, + ...props +}) => { + const hydrated = useHydrated() + const ref = useRef(null) + const containerRef = useRef(null) + + if (typeof window !== 'undefined' && hydrated && !containerRef.current) { + containerRef.current = + ref.current?.querySelector('.mdx-grid__content') ?? null + + console.log(containerRef.current, ref.current) + } + + return ( +
+ + + + + {items.map((item) => ( + + + + ))} + +
+ ) +} diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/LogoCarousel/index.ts b/packages/logos-docusaurus-theme/src/client/components/mdx/LogoCarousel/index.ts new file mode 100644 index 0000000..0c94203 --- /dev/null +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/LogoCarousel/index.ts @@ -0,0 +1 @@ +export * from './LogoCarousel' diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/NewsletterSubscription/NewsletterSubscription.scss b/packages/logos-docusaurus-theme/src/client/components/mdx/NewsletterSubscription/NewsletterSubscription.scss index a7bfc9a..158be7d 100644 --- a/packages/logos-docusaurus-theme/src/client/components/mdx/NewsletterSubscription/NewsletterSubscription.scss +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/NewsletterSubscription/NewsletterSubscription.scss @@ -37,14 +37,12 @@ } .mdx-ns__description { - font-size: 32px !important; - line-height: 40px !important; + @include lsd.typography('h3', false); } @include utils.responsive('md', 'down') { .mdx-ns__description { - font-size: 24px !important; - line-height: 32px !important; + @include lsd.typography('h4', false); } .mdx-ns__inner { diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/PageCard/PageCard.tsx b/packages/logos-docusaurus-theme/src/client/components/mdx/PageCard/PageCard.tsx index d5daf00..582353a 100644 --- a/packages/logos-docusaurus-theme/src/client/components/mdx/PageCard/PageCard.tsx +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/PageCard/PageCard.tsx @@ -51,7 +51,7 @@ export const PageCard: React.FC = ({ {description} diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/ProfileCard/ProfileCard.scss b/packages/logos-docusaurus-theme/src/client/components/mdx/ProfileCard/ProfileCard.scss index cefd173..902ff42 100644 --- a/packages/logos-docusaurus-theme/src/client/components/mdx/ProfileCard/ProfileCard.scss +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/ProfileCard/ProfileCard.scss @@ -27,6 +27,7 @@ width: 40px !important; height: 40px !important; border-radius: 50%; + border: 1px solid rgb(var(--lsd-border-primary)); svg { width: 40px !important; @@ -39,7 +40,6 @@ } .mdx-profile-card__name { - @include lsd.typography('h4'); } .mdx-profile-card__buttons { @@ -103,6 +103,6 @@ } .mdx-profile-card__name { - @include lsd.typography('h6'); + @include lsd.typography('h5'); } } diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/ProfileCard/ProfileCard.tsx b/packages/logos-docusaurus-theme/src/client/components/mdx/ProfileCard/ProfileCard.tsx index 1846dea..a8cac6e 100644 --- a/packages/logos-docusaurus-theme/src/client/components/mdx/ProfileCard/ProfileCard.tsx +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/ProfileCard/ProfileCard.tsx @@ -76,7 +76,7 @@ export const ProfileCard: React.FC = ({ )} {name} diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/Roadmap/Roadmap.scss b/packages/logos-docusaurus-theme/src/client/components/mdx/Roadmap/Roadmap.scss index 6f6240e..a79baa8 100644 --- a/packages/logos-docusaurus-theme/src/client/components/mdx/Roadmap/Roadmap.scss +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/Roadmap/Roadmap.scss @@ -19,7 +19,7 @@ } .mdx-roadmap__timeline { - margin-top: 7.25rem; + margin-top: 6.25rem; .mdx-grid-item:last-child { .mdx-timeline-item__border { diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/Roadmap/Roadmap.tsx b/packages/logos-docusaurus-theme/src/client/components/mdx/Roadmap/Roadmap.tsx index 95921f7..48ead56 100644 --- a/packages/logos-docusaurus-theme/src/client/components/mdx/Roadmap/Roadmap.tsx +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/Roadmap/Roadmap.tsx @@ -73,7 +73,7 @@ export const Roadmap: React.FC = ({ return (
- + {title} diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/ScrollButtons/ScrollButtons.scss b/packages/logos-docusaurus-theme/src/client/components/mdx/ScrollButtons/ScrollButtons.scss new file mode 100644 index 0000000..eae0ebe --- /dev/null +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/ScrollButtons/ScrollButtons.scss @@ -0,0 +1,57 @@ +@use '../../../css/utils'; +@use '../../../css/lsd'; + +.mdx-scroll-buttons { + width: 100%; + + > div { + width: 100%; + display: flex; + flex-direction: row; + justify-content: flex-end; + } +} + +@include utils.responsive('md', 'up') { + .mdx-scroll-buttons__button--with-label { + width: auto !important; + min-width: 83px; + padding: 5px 11px 5px 9px !important; + gap: 12px; + + &:first-of-type { + justify-content: flex-start; + } + + &:last-of-type { + justify-content: flex-start; + } + } + + .mdx-scroll-buttons--spaced { + & > div { + gap: 0 1rem; + justify-content: space-between; + + & > button:not(:last-child) { + border-right: 1px solid rgb(var(--lsd-border-primary)) !important; + } + } + } +} + +@include utils.responsive('md', 'down') { + .mdx-scroll-buttons { + & > div { + justify-content: flex-end; + + > button:not(:last-child) { + border-right: none !important; + } + } + + .mdx-scroll-buttons__label { + display: none; + } + } +} diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/ScrollButtons/ScrollButtons.tsx b/packages/logos-docusaurus-theme/src/client/components/mdx/ScrollButtons/ScrollButtons.tsx new file mode 100644 index 0000000..651f385 --- /dev/null +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/ScrollButtons/ScrollButtons.tsx @@ -0,0 +1,85 @@ +import { + ChevronLeftIcon, + ChevronRightIcon, + IconButton, + IconButtonGroup, +} from '@acid-info/lsd-react' +import clsx from 'clsx' +import React from 'react' +import './ScrollButtons.scss' + +export type ScrollButtonsProps = React.HTMLProps & { + containerId?: string + containerRef?: React.RefObject + leftLabel?: string + rightLabel?: string + spacing?: 'spaced' | 'grouped' +} + +export const ScrollButtons: React.FC = ({ + leftLabel, + rightLabel, + containerRef, + containerId, + spacing = 'grouped', + ...props +}) => { + const scroll = (direction: -1 | 1) => { + const el = containerRef + ? containerRef.current + : document.querySelector(`#${containerId}`) + if (!el) return + + const itemWidth = el.children[0]?.getBoundingClientRect?.()?.width ?? 236 + el.scrollTo({ + behavior: 'smooth', + left: + el.scrollLeft + + (el.getBoundingClientRect()?.width - itemWidth) * direction, + }) + } + + return ( +
+ + 0 && + 'mdx-scroll-buttons__button--with-label', + )} + size="small" + onClick={scroll.bind(null, -1)} + > + + {leftLabel && leftLabel.length > 0 && ( + {leftLabel} + )} + + + {rightLabel && rightLabel.length > 0 && ( + {rightLabel} + )} + + + +
+ ) +} diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/ScrollButtons/index.ts b/packages/logos-docusaurus-theme/src/client/components/mdx/ScrollButtons/index.ts new file mode 100644 index 0000000..24c317c --- /dev/null +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/ScrollButtons/index.ts @@ -0,0 +1 @@ +export * from './ScrollButtons' diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/SectionHeader/SectionHeader.scss b/packages/logos-docusaurus-theme/src/client/components/mdx/SectionHeader/SectionHeader.scss index c477243..2537509 100644 --- a/packages/logos-docusaurus-theme/src/client/components/mdx/SectionHeader/SectionHeader.scss +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/SectionHeader/SectionHeader.scss @@ -15,12 +15,23 @@ } } +.mdx-section-header__title { + display: flex; + flex-direction: row; + align-items: center; + gap: 2rem; +} + @include utils.responsive('lg', 'down') { .mdx-section-header { flex-direction: column; &__title { - @include lsd.typography('body1'); + @include lsd.typography('subtitle2'); + } + + &__description { + @include lsd.typography('h4'); } } } diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/SectionHeader/SectionHeader.tsx b/packages/logos-docusaurus-theme/src/client/components/mdx/SectionHeader/SectionHeader.tsx index 93a04b8..27063c8 100644 --- a/packages/logos-docusaurus-theme/src/client/components/mdx/SectionHeader/SectionHeader.tsx +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/SectionHeader/SectionHeader.tsx @@ -9,28 +9,27 @@ export type SectionHeaderProps = Omit & { description?: React.ReactNode } -export const SectionHeader: React.FC = ({ - title, - description, - className, - children, - ...props -}) => { +export const SectionHeader: React.FC< + React.PropsWithChildren +> = ({ title, description, className, children, ...props }) => { return ( {title} + {children && ( +
{children}
+ )}
{description && ( {description} diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/ShowcaseCard/ShowcaseCard.scss b/packages/logos-docusaurus-theme/src/client/components/mdx/ShowcaseCard/ShowcaseCard.scss index 408ab2c..4775fdc 100644 --- a/packages/logos-docusaurus-theme/src/client/components/mdx/ShowcaseCard/ShowcaseCard.scss +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/ShowcaseCard/ShowcaseCard.scss @@ -6,20 +6,54 @@ } .mdx-showcase-card__inner { - padding: 24px 8px; + padding-top: 1.5rem; + display: flex; + flex-direction: column; + gap: 1.5rem; } .mdx-showcase-card__logo { + width: 58px; + height: auto; +} + +.mdx-showcase-card__index { + width: 30px; + height: 30px; + color: rgb(var(--lsd-text-secondary)) !important; + background-color: rgb(var(--lsd-surface-secondary)); + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + border-radius: 50%; } .mdx-showcase-card__name { - margin-top: 1rem; } .mdx-showcase-card__description { - border-top: 1px solid rgb(var(--lsd-border-primary)); - margin-top: 24px; - padding-top: 16px; + margin-top: -0.125rem; + padding-top: 0.5rem; +} + +.mdx-showcase-card--large { + .mdx-showcase-card__logo { + width: 58px; + } +} + +.mdx-showcase-card--small { + .mdx-showcase-card__logo { + width: 34px; + } +} + +.mdx-showcase-card--border-solid { + .mdx-showcase-card__description { + border-top: 1px solid rgb(var(--lsd-border-primary)); + padding-top: 1rem; + } } @include utils.responsive('lg', 'down') { @@ -29,7 +63,8 @@ } .mdx-showcase-card__name { - @include lsd.typography('h6'); + font-size: 1.375rem !important; + line-height: 1.75rem !important; } .mdx-showcase-card__description { diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/ShowcaseCard/ShowcaseCard.tsx b/packages/logos-docusaurus-theme/src/client/components/mdx/ShowcaseCard/ShowcaseCard.tsx index 864160c..8ec7f02 100644 --- a/packages/logos-docusaurus-theme/src/client/components/mdx/ShowcaseCard/ShowcaseCard.tsx +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/ShowcaseCard/ShowcaseCard.tsx @@ -8,24 +8,47 @@ export type ShowcaseCardProps = Omit< React.HTMLAttributes, 'title' > & { + index?: React.ReactNode logoSrc?: string logoSrcDark?: string name: React.ReactNode description: React.ReactNode + size?: 'small' | 'large' + borderStyle?: 'none' | 'solid' } export const ShowcaseCard: React.FC = ({ + index, name, logoSrc, logoSrcDark, description, className, + size = 'large', + borderStyle = 'solid', children, ...props }) => { return ( -
+
+ {index && ( + + {index} + + )} {(logoSrc || logoSrcDark) && ( = ({ className="mdx-showcase-card__logo" /> )} - - {name} - - - {description} - + {name && ( + + {name} + + )} + {description && ( + + {description} + + )}
) diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/TimelineItem/TimelineItem.tsx b/packages/logos-docusaurus-theme/src/client/components/mdx/TimelineItem/TimelineItem.tsx index c19f8af..cdaef6e 100644 --- a/packages/logos-docusaurus-theme/src/client/components/mdx/TimelineItem/TimelineItem.tsx +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/TimelineItem/TimelineItem.tsx @@ -109,7 +109,7 @@ export const TimelineItem: React.FC = ({
)} = ({
@@ -130,7 +130,7 @@ export const TimelineItem: React.FC = ({
diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/index.ts b/packages/logos-docusaurus-theme/src/client/components/mdx/index.ts index d07a10b..69ffa92 100644 --- a/packages/logos-docusaurus-theme/src/client/components/mdx/index.ts +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/index.ts @@ -1,3 +1,4 @@ +export * from './AccordionItem' export * from './AppCard' export * from './AssetCard' export * from './Box' @@ -17,6 +18,7 @@ export * from './HeroModel' export * from './HeroTitle' export * from './HeroVideo' export * from './JobsPerDepartment' +export * from './LogoCarousel' export * from './NewsletterSubscription' export * from './PoweredBy' export * from './ProfileCard' diff --git a/packages/logos-docusaurus-theme/src/client/css/blog.scss b/packages/logos-docusaurus-theme/src/client/css/blog.scss index bdde895..1642101 100644 --- a/packages/logos-docusaurus-theme/src/client/css/blog.scss +++ b/packages/logos-docusaurus-theme/src/client/css/blog.scss @@ -4,6 +4,10 @@ .blog-wrapper { } +.blog-wrapper h1[itemprop='headline'] { + @include lsd.typography('h1'); +} + .blog-wrapper > .container { display: flex; width: 100%; @@ -62,13 +66,19 @@ } .blog-wrapper--index h2[itemprop='headline'] { - @include lsd.typography('h6'); + @include lsd.typography('h4'); > a { text-decoration: none; } } +.blog-wrapper--index [itemprop='blogPost'] { + .markdown { + @include lsd.typography('body2'); + } +} + .blog-wrapper .breadcrumbs__item { text-decoration: none; } @@ -164,7 +174,7 @@ } .blog-wrapper h1[itemprop='headline'] { - @include lsd.typography('h3'); + @include lsd.typography('h2'); } } @@ -210,7 +220,7 @@ margin: 0 !important; h3 { - @include lsd.typography('h6'); + @include lsd.typography('h5'); } a { diff --git a/packages/logos-docusaurus-theme/src/client/static/icons/add.svg b/packages/logos-docusaurus-theme/src/client/static/icons/add.svg new file mode 100644 index 0000000..a75d367 --- /dev/null +++ b/packages/logos-docusaurus-theme/src/client/static/icons/add.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/logos-docusaurus-theme/src/client/static/icons/remove.svg b/packages/logos-docusaurus-theme/src/client/static/icons/remove.svg new file mode 100644 index 0000000..6129138 --- /dev/null +++ b/packages/logos-docusaurus-theme/src/client/static/icons/remove.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/logos-docusaurus-theme/src/client/theme/BlogPostItem/Header/Subtitle/index.tsx b/packages/logos-docusaurus-theme/src/client/theme/BlogPostItem/Header/Subtitle/index.tsx index a3798b4..10c8cff 100644 --- a/packages/logos-docusaurus-theme/src/client/theme/BlogPostItem/Header/Subtitle/index.tsx +++ b/packages/logos-docusaurus-theme/src/client/theme/BlogPostItem/Header/Subtitle/index.tsx @@ -9,7 +9,7 @@ type SubtitleProps = { export const Subtitle = ({ content }: SubtitleProps): JSX.Element => { return ( - + {content} ) diff --git a/packages/logos-docusaurus-theme/src/client/theme/BlogPostItem/Header/Subtitle/styles.module.scss b/packages/logos-docusaurus-theme/src/client/theme/BlogPostItem/Header/Subtitle/styles.module.scss index d7cc4a8..4d3e7b2 100644 --- a/packages/logos-docusaurus-theme/src/client/theme/BlogPostItem/Header/Subtitle/styles.module.scss +++ b/packages/logos-docusaurus-theme/src/client/theme/BlogPostItem/Header/Subtitle/styles.module.scss @@ -8,6 +8,6 @@ @include utils.responsive('lg', 'down') { .blogPostSubtitle { margin-top: 4px; - @include lsd.typography('body1'); + @include lsd.typography('subtitle2'); } } diff --git a/yarn.lock b/yarn.lock index 96436ca..90bacdd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -62,6 +62,19 @@ react-hot-toast "^2.4.1" react-use "^17.4.0" +"@acid-info/lsd-react@^0.1.0-beta.1": + version "0.1.0-beta.1" + resolved "https://registry.yarnpkg.com/@acid-info/lsd-react/-/lsd-react-0.1.0-beta.1.tgz#a6d8dc04a3422a1a840d032fc1d1730f4cc34e29" + integrity sha512-YletiehVgoXmMhIH03u67Dxg8ZiFNrGhEsvN9/+jCTnOaBQxf0/JgS7kqBeZUlqK88prU6P/QzZruiWsxVFKgA== + dependencies: + "@datepicker-react/hooks" "^2.8.4" + "@emotion/react" "^11.10.5" + "@emotion/styled" "^11.10.5" + clsx "^1.2.1" + lodash "^4.17.21" + react-hot-toast "^2.4.1" + react-use "^17.4.0" + "@algolia/autocomplete-core@1.8.2": version "1.8.2" resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.8.2.tgz#8d758c8652742e2761450d2b615a841fca24e10e"