chore: remove icon from DocCard

swizzled into our codebase for customizations
This commit is contained in:
Scott Jungling
2024-10-24 09:46:37 -07:00
parent 96f4898446
commit 22bb0391df
2 changed files with 153 additions and 0 deletions

126
src/theme/DocCard/index.tsx Normal file
View File

@@ -0,0 +1,126 @@
import Link from "@docusaurus/Link";
import {
findFirstSidebarItemLink,
useDocById,
} from "@docusaurus/plugin-content-docs/client";
import { usePluralForm } from "@docusaurus/theme-common";
import { translate } from "@docusaurus/Translate";
import clsx from "clsx";
import { type ReactNode } from "react";
import type {
PropSidebarItemCategory,
PropSidebarItemLink,
} from "@docusaurus/plugin-content-docs";
import type { Props } from "@theme/DocCard";
import Heading from "@theme/Heading";
import styles from "./styles.module.css";
function useCategoryItemsPlural() {
const { selectMessage } = usePluralForm();
return (count: number) =>
selectMessage(
count,
translate(
{
message: "1 item|{count} items",
id: "theme.docs.DocCard.categoryDescription.plurals",
description:
"The default description for a category card in the generated index about how many items this category includes",
},
{ count }
)
);
}
function CardContainer({
href,
children,
}: {
href: string;
children: ReactNode;
}): JSX.Element {
return (
<Link
href={href}
className={clsx("card padding--lg", styles.cardContainer)}
>
{children}
</Link>
);
}
function CardLayout({
href,
title,
description,
}: {
href: string;
title: string;
description?: string;
}): JSX.Element {
return (
<CardContainer href={href}>
<Heading
as="h2"
className={clsx("text--truncate", styles.cardTitle)}
title={title}
>
{title}
</Heading>
{description && (
<p
className={clsx("text--truncate", styles.cardDescription)}
title={description}
>
{description}
</p>
)}
</CardContainer>
);
}
function CardCategory({
item,
}: {
item: PropSidebarItemCategory;
}): JSX.Element | null {
const href = findFirstSidebarItemLink(item);
const categoryItemsPlural = useCategoryItemsPlural();
// Unexpected: categories that don't have a link have been filtered upfront
if (!href) {
return null;
}
return (
<CardLayout
href={href}
title={item.label}
description={item.description ?? categoryItemsPlural(item.items.length)}
/>
);
}
function CardLink({ item }: { item: PropSidebarItemLink }): JSX.Element {
const doc = useDocById(item.docId ?? undefined);
return (
<CardLayout
href={item.href}
title={item.label}
description={item.description ?? doc?.description}
/>
);
}
export default function DocCard({ item }: Props): JSX.Element {
switch (item.type) {
case "link":
return <CardLink item={item} />;
case "category":
return <CardCategory item={item} />;
default:
throw new Error(`unknown item type ${JSON.stringify(item)}`);
}
}

View File

@@ -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;
}