diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/PageCard/PageCard.scss b/packages/logos-docusaurus-theme/src/client/components/mdx/PageCard/PageCard.scss new file mode 100644 index 0000000..306337e --- /dev/null +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/PageCard/PageCard.scss @@ -0,0 +1,50 @@ +@use '../../../css/utils'; +@use '../../../css/lsd'; + +.mdx-page-card { + display: flex; + flex-direction: row; + align-items: flex-start; + justify-content: stretch; + + text-decoration: none; + border: 1px solid rgb(var(--lsd-border-primary)); +} + +.mdx-page-card__icon { + padding: 22px 16px; +} + +.mdx-page-card__inner { + width: 100%; + min-width: 0; + display: flex; + flex-direction: column; + + gap: 8px; + padding: 16px 0 18px 0; +} + +.mdx-page-card__title { + display: block; + width: 100%; + padding-right: 8px; + font-size: 16px; + line-height: 24px; + overflow: hidden; + white-space: nowrap; + font-style: normal; + text-overflow: ellipsis; +} + +.mdx-page-card__description { + display: block; + width: 100%; + padding-right: 8px; + font-size: 12px; + line-height: 16px; + overflow: hidden; + white-space: nowrap; + font-style: normal; + text-overflow: ellipsis; +} 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 new file mode 100644 index 0000000..bf7b4f2 --- /dev/null +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/PageCard/PageCard.tsx @@ -0,0 +1,45 @@ +import { FolderIcon, Typography } from '@acid-info/lsd-react' +import Link, { Props as LinkProps } from '@docusaurus/Link' +import clsx from 'clsx' +import React from 'react' +import './PageCard.scss' + +export type PageCardProps = Omit & { + title?: React.ReactNode + description?: React.ReactNode + icon?: React.ReactNode +} + +export const PageCard: React.FC = ({ + title, + description, + icon = , + target = '_self', + ...props +}) => { + return ( + +
{icon}
+
+ + {title} + + + {description} + +
+ + ) +} diff --git a/packages/logos-docusaurus-theme/src/client/components/mdx/PageCard/index.ts b/packages/logos-docusaurus-theme/src/client/components/mdx/PageCard/index.ts new file mode 100644 index 0000000..417971a --- /dev/null +++ b/packages/logos-docusaurus-theme/src/client/components/mdx/PageCard/index.ts @@ -0,0 +1 @@ +export * from './PageCard' diff --git a/packages/logos-docusaurus-theme/src/client/theme/DocCard/index.tsx b/packages/logos-docusaurus-theme/src/client/theme/DocCard/index.tsx new file mode 100644 index 0000000..1a61d8f --- /dev/null +++ b/packages/logos-docusaurus-theme/src/client/theme/DocCard/index.tsx @@ -0,0 +1,70 @@ +import { translate } from '@docusaurus/Translate' +import isInternalUrl from '@docusaurus/isInternalUrl' +import type { + PropSidebarItemCategory, + PropSidebarItemLink, +} from '@docusaurus/plugin-content-docs' +import { + findFirstCategoryLink, + useDocById, +} from '@docusaurus/theme-common/internal' +import type { Props } from '@theme/DocCard' +import React from 'react' +import { PageCard } from '../../components/mdx/PageCard' + +function CardCategory({ + item, +}: { + item: PropSidebarItemCategory +}): JSX.Element | null { + const href = findFirstCategoryLink(item) + + // Unexpected: categories that don't have a link have been filtered upfront + if (!href) { + return null + } + + return ( + + ) +} + +function CardLink({ item }: { item: PropSidebarItemLink }): JSX.Element { + const icon = isInternalUrl(item.href) ? '📄️' : '🔗' + const doc = useDocById(item.docId ?? undefined) + return ( + + ) +} + +export default function DocCard({ item }: Props): JSX.Element { + switch (item.type) { + case 'link': + return + case 'category': + return + default: + throw new Error(`unknown item type ${JSON.stringify(item)}`) + } +} diff --git a/packages/logos-docusaurus-theme/src/client/theme/DocCard/styles.module.css b/packages/logos-docusaurus-theme/src/client/theme/DocCard/styles.module.css new file mode 100644 index 0000000..4f7ad27 --- /dev/null +++ b/packages/logos-docusaurus-theme/src/client/theme/DocCard/styles.module.css @@ -0,0 +1,27 @@ +.cardContainer { + --ifm-link-color: var(--ifm-color-emphasis-800); + --ifm-link-hover-color: var(--ifm-color-emphasis-700); + --ifm-link-hover-decoration: none; + + box-shadow: 0 1.5px 3px 0 rgb(0 0 0 / 15%); + border: 1px solid var(--ifm-color-emphasis-200); + transition: all var(--ifm-transition-fast) ease; + transition-property: border, box-shadow; +} + +.cardContainer:hover { + border-color: var(--ifm-color-primary); + box-shadow: 0 3px 6px 0 rgb(0 0 0 / 20%); +} + +.cardContainer *:last-child { + margin-bottom: 0; +} + +.cardTitle { + font-size: 1.2rem; +} + +.cardDescription { + font-size: 0.8rem; +} diff --git a/packages/logos-docusaurus-theme/src/client/theme/DocCardList/DocCardList.module.scss b/packages/logos-docusaurus-theme/src/client/theme/DocCardList/DocCardList.module.scss new file mode 100644 index 0000000..943c04d --- /dev/null +++ b/packages/logos-docusaurus-theme/src/client/theme/DocCardList/DocCardList.module.scss @@ -0,0 +1,19 @@ +@use '../../css/utils'; + +.root { + display: grid; + gap: 16px; + grid-template-columns: repeat(2, 50%); + + > * { + padding: 0 !important; + margin: 0 !important; + + max-width: unset; + width: 100% !important; + } + + @include utils.responsive('lg', 'down') { + grid-template-columns: 100%; + } +} diff --git a/packages/logos-docusaurus-theme/src/client/theme/DocCardList/index.tsx b/packages/logos-docusaurus-theme/src/client/theme/DocCardList/index.tsx new file mode 100644 index 0000000..b696221 --- /dev/null +++ b/packages/logos-docusaurus-theme/src/client/theme/DocCardList/index.tsx @@ -0,0 +1,15 @@ +import DocCardList from '@docusaurus/theme-classic/lib/theme/DocCardList' +import type { Props } from '@theme/DocCardList' +import clsx from 'clsx' +import React from 'react' +import styles from './DocCardList.module.scss' + +export default function DocCardListWrapper(props: Props): JSX.Element { + console.log(props) + return ( + + ) +}