From ab2106a241ec7a6784a16f3d03aec27834af47e0 Mon Sep 17 00:00:00 2001 From: Hossein Mehrabi Date: Fri, 20 Oct 2023 16:27:51 +0330 Subject: [PATCH] feat: downloadable asset card refs acid-info/logos-brand-guidelines#15 --- .../src/client/components/Icon/Icon.tsx | 7 ++ .../components/mdx/AssetCard/AssetCard.scss | 70 +++++++++++++++++ .../components/mdx/AssetCard/AssetCard.tsx | 77 +++++++++++++++++++ .../client/components/mdx/AssetCard/index.ts | 1 + .../src/client/components/mdx/index.ts | 1 + .../src/client/static/icons/download.svg | 3 + 6 files changed, 159 insertions(+) create mode 100644 packages/logos-docusaurus-theme/src/client/components/mdx/AssetCard/AssetCard.scss create mode 100644 packages/logos-docusaurus-theme/src/client/components/mdx/AssetCard/AssetCard.tsx create mode 100644 packages/logos-docusaurus-theme/src/client/components/mdx/AssetCard/index.ts create mode 100644 packages/logos-docusaurus-theme/src/client/static/icons/download.svg 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 a869382..54ee13c 100644 --- a/packages/logos-docusaurus-theme/src/client/components/Icon/Icon.tsx +++ b/packages/logos-docusaurus-theme/src/client/components/Icon/Icon.tsx @@ -31,6 +31,7 @@ import DiscordWhiteSvg from '../../static/icons/discord-white.svg' import TelegramWhiteSvg from '../../static/icons/telegram-white.svg' import XSvg from '../../static/icons/x.svg' import Avatar from '../../static/icons/avatar.svg' +import DownloadSvg from '../../static/icons/download.svg' type TIconProps = { size?: 's' | 'm' | 'l' @@ -227,3 +228,9 @@ export const IconAvatar = (props: TIconProps): JSX.Element => ( ) + +export const IconDownload = (props: TIconProps): JSX.Element => ( + + + +) diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/AssetCard/AssetCard.scss b/packages/logos-docusaurus-theme/src/client/components/mdx/AssetCard/AssetCard.scss new file mode 100644 index 0000000..67261ab --- /dev/null +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/AssetCard/AssetCard.scss @@ -0,0 +1,70 @@ +@use '../../../css/utils'; +@use '../../../css/lsd'; + +.mdx-asset-card { + width: 216px; + display: flex; + flex-direction: column; + align-items: flex-start; + border: 1px solid rgb(var(--lsd-border-primary)); + border-bottom: none; + text-decoration: none !important; + min-height: 144px; +} + +.mdx-asset-card__inner { + width: 100%; + padding: 16px 16px 32px 16px; +} + +.mdx-asset-card__title { + margin-bottom: 16px; +} + +.mdx-asset-card__image { + img { + width: 100%; + height: 100%; + object-fit: contain; + object-position: center center; + } +} + +.mdx-asset-card__downloadables { + width: 100%; + display: flex; + flex-direction: row; + align-items: flex-start; + justify-content: stretch; + + & > * { + flex-grow: 1; + font-size: 12px; + text-decoration: none !important; + text-underline-offset: unset !important; + + button { + width: 100%; + justify-content: space-between; + text-decoration: none; + } + + &:first-child button { + border-left: none; + } + + &:last-child button { + border-right: none; + } + + &:not(:last-child) button { + border-right: none; + } + } +} + +.mdx-asset-card:not(.mdx-asset-card--downloadable) { + .mdx-asset-card__inner { + border-bottom: 1px solid rgb(var(--lsd-border-primary)); + } +} 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 new file mode 100644 index 0000000..4b3a279 --- /dev/null +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/AssetCard/AssetCard.tsx @@ -0,0 +1,77 @@ +import { Button, Typography } from '@acid-info/lsd-react' +import clsx from 'clsx' +import React from 'react' +import { KeepRatio } from '../../KeepRatio' +import './AssetCard.scss' +import { IconDownload } from '../../Icon' + +export type AssetCardProps = Omit, 'title'> & { + title?: React.ReactNode + previewSrc: string + downloadable?: { + src: string + title: React.ReactNode + }[] +} + +export const AssetCard: React.FC = ({ + title, + previewSrc, + downloadable, + ...props +}) => { + const isDownloadable = downloadable && downloadable.length > 0 + + return ( +
+
+ {title && ( + + {title} + + )} + + {(typeof + +
+ { + // TODO: use LSD ButtonGroup + } + {isDownloadable && ( +
+ {downloadable.map((downloadable, index) => ( + + + + ))} +
+ )} +
+ ) +} diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/AssetCard/index.ts b/packages/logos-docusaurus-theme/src/client/components/mdx/AssetCard/index.ts new file mode 100644 index 0000000..4d47f52 --- /dev/null +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/AssetCard/index.ts @@ -0,0 +1 @@ +export * from './AssetCard' 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 6646347..24e703e 100644 --- a/packages/logos-docusaurus-theme/src/client/components/mdx/index.ts +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/index.ts @@ -1,4 +1,5 @@ export * from './AppCard' +export * from './AssetCard' export * from './Box' export * from './CallToActionButton' export * from './CallToActionSection' diff --git a/packages/logos-docusaurus-theme/src/client/static/icons/download.svg b/packages/logos-docusaurus-theme/src/client/static/icons/download.svg new file mode 100644 index 0000000..35f433b --- /dev/null +++ b/packages/logos-docusaurus-theme/src/client/static/icons/download.svg @@ -0,0 +1,3 @@ + + +