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) => (