From ec43c184fe6406e6622807e691ad578965ab3628 Mon Sep 17 00:00:00 2001 From: Suneet Tipirneni <77477100+suneettipirneni@users.noreply.github.com> Date: Thu, 28 Jul 2022 10:26:06 -0400 Subject: [PATCH] feat(website): add icons for sections (#8377) * feat(website): add icons for sections * chore: make requested changes * fix: add icon for function parameters --- .../website/src/components/DocContainer.tsx | 10 ++- .../website/src/components/ListSidebar.tsx | 88 ++++++++----------- packages/website/src/components/Section.tsx | 32 ++++--- packages/website/src/components/Sections.tsx | 7 +- .../website/src/components/model/Enum.tsx | 3 +- 5 files changed, 70 insertions(+), 70 deletions(-) diff --git a/packages/website/src/components/DocContainer.tsx b/packages/website/src/components/DocContainer.tsx index fada37bbe..381cc591d 100644 --- a/packages/website/src/components/DocContainer.tsx +++ b/packages/website/src/components/DocContainer.tsx @@ -1,4 +1,5 @@ import type { ReactNode } from 'react'; +import { VscListSelection, VscSymbolParameter } from 'react-icons/vsc'; import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter'; import { vscDarkPlus } from 'react-syntax-highlighter/dist/cjs/styles/prism'; import { CodeListingSeparatorType } from './CodeListing'; @@ -48,11 +49,16 @@ export function DocContainer({ name, kind, excerpt, summary, typeParams, childre ) : null}
-
+
} title="Summary" className="dark:text-white">

{summary ?? 'No summary provided.'}

{typeParams?.length ? ( -
+
} + title="Type Parameters" + className="dark:text-white" + defaultClosed + >
) : null} diff --git a/packages/website/src/components/ListSidebar.tsx b/packages/website/src/components/ListSidebar.tsx index fe81bdd2d..0a6408045 100644 --- a/packages/website/src/components/ListSidebar.tsx +++ b/packages/website/src/components/ListSidebar.tsx @@ -1,8 +1,14 @@ -import { AnimatePresence, motion } from 'framer-motion'; import Link from 'next/link'; -import { useState } from 'react'; -import { VscChevronDown, VscChevronRight } from 'react-icons/vsc'; +import { + VscSymbolClass, + VscSymbolEnum, + VscSymbolField, + VscSymbolInterface, + VscSymbolMethod, + VscSymbolVariable, +} from 'react-icons/vsc'; import type { ItemListProps } from './ItemSidebar'; +import { Section } from './Section'; export type Members = ItemListProps['data']['members']; @@ -57,39 +63,32 @@ function groupMembers(members: Members): GroupedMembers { return { Classes, Functions, Enums, Interfaces, Types, Variables }; } -export function ListSidebarSection({ members, selectedMember, title }: ListSidebarSectionProps) { - const [showList, setShowList] = useState(true); +function resolveIcon(item: keyof GroupedMembers) { + switch (item) { + case 'Classes': + return ; + case 'Enums': + return ; + case 'Interfaces': + return ; + case 'Types': + return ; + case 'Variables': + return ; + case 'Functions': + return ; + } +} + +export function ListSidebar({ members, selectedMember }: ListSidebarSectionProps) { + const groupItems = groupMembers(members); return ( -
-

setShowList(!showList)} - > - {showList ? : } - {title} -

- - {showList ? ( - - {members.map((member, i) => ( + <> + {(Object.keys(groupItems) as (keyof GroupedMembers)[]).map((group, i) => ( +
+
+ {groupItems[group].map((member, i) => (
))} - - ) : null} - -
- ); -} - -export function ListSidebar({ members, selectedMember }: ListSidebarSectionProps) { - const groupItems = groupMembers(members); - - return ( - <> - {Object.keys(groupItems).map((group, i) => ( - +
+
))} ); diff --git a/packages/website/src/components/Section.tsx b/packages/website/src/components/Section.tsx index e6c6553e1..f17fab7cb 100644 --- a/packages/website/src/components/Section.tsx +++ b/packages/website/src/components/Section.tsx @@ -8,24 +8,35 @@ export interface SectionProps { title: string; className?: string | undefined; defaultClosed?: boolean; + iconElement?: JSX.Element; + showSeparator?: boolean; } -export function Section({ title, children, className, defaultClosed }: SectionProps) { +export function Section({ + title, + children, + className, + defaultClosed, + iconElement, + showSeparator = true, +}: SectionProps) { const [collapsed, setCollapsed] = useState(defaultClosed ?? false); return (
- -

setCollapsed(!collapsed)} - > - {collapsed ? : } - {title} -

+

setCollapsed(!collapsed)} + > + {collapsed ? : } + {iconElement ?? null} + {title} +

+ {collapsed ? null : ( <> {children} - + {showSeparator && } )} diff --git a/packages/website/src/components/Sections.tsx b/packages/website/src/components/Sections.tsx index 93268512d..0ce208fb1 100644 --- a/packages/website/src/components/Sections.tsx +++ b/packages/website/src/components/Sections.tsx @@ -1,3 +1,4 @@ +import { VscSymbolConstant, VscSymbolMethod, VscSymbolProperty } from 'react-icons/vsc'; import { MethodList } from './MethodList'; import { ParameterTable } from './ParameterTable'; import { PropertyList } from './PropertyList'; @@ -11,7 +12,7 @@ export interface PropertiesSectionProps { export function PropertiesSection({ data }: PropertiesSectionProps) { return data.length ? ( -
+
} title="Properties" className="dark:text-white">
) : null; @@ -23,7 +24,7 @@ export interface MethodsSectionProps { export function MethodsSection({ data }: MethodsSectionProps) { return data.length ? ( -
+
} title="Methods" className="dark:text-white">
) : null; @@ -35,7 +36,7 @@ export interface ParametersSectionProps { export function ParametersSection({ data }: ParametersSectionProps) { return data.length ? ( -
+
} title="Parameters" className="dark:text-white">
) : null; diff --git a/packages/website/src/components/model/Enum.tsx b/packages/website/src/components/model/Enum.tsx index 2e332d9b0..0f668cb96 100644 --- a/packages/website/src/components/model/Enum.tsx +++ b/packages/website/src/components/model/Enum.tsx @@ -1,3 +1,4 @@ +import { VscSymbolEnumMember } from 'react-icons/vsc'; import { CodeListing, CodeListingSeparatorType } from '../CodeListing'; import { DocContainer } from '../DocContainer'; import { Section } from '../Section'; @@ -10,7 +11,7 @@ export interface EnumProps { export function Enum({ data }: EnumProps) { return ( -
+
} title="Members" className="dark:text-white">
{data.members.map((member) => (