From dbd50a6c09b159a8df11648c11c3fd1f8c251812 Mon Sep 17 00:00:00 2001 From: David Linke Date: Fri, 30 Aug 2024 11:38:56 -0400 Subject: [PATCH] docs: add header pattern documentation (#1523) * docs(patterns): add header documentation * feat(patterns): add pattern links in main readme * docs(patterns): add BackLink props to Header documentation * docs(patterns): simplify header code sample * docs(patterns): add changeset on Header component documentation * docs(patterns): fix nativeElement props for BackLink props * docs(patterns): lint HeaderPropTable and header doc page * chore: pr comments --------- Co-authored-by: Chancellor Clark --- .changeset/cyan-games-pump.md | 5 + README.md | 2 + packages/docs/PropTables/HeaderPropTable.tsx | 119 +++++++++++++++ .../components/CodePreview/CodePreview.tsx | 2 + .../docs/components/PropTable/PropTable.tsx | 4 +- packages/docs/components/SideNav/SideNav.tsx | 4 + packages/docs/pages/header.tsx | 140 ++++++++++++++++++ 7 files changed, 274 insertions(+), 2 deletions(-) create mode 100644 .changeset/cyan-games-pump.md create mode 100644 packages/docs/PropTables/HeaderPropTable.tsx create mode 100644 packages/docs/pages/header.tsx diff --git a/.changeset/cyan-games-pump.md b/.changeset/cyan-games-pump.md new file mode 100644 index 000000000..9646e985f --- /dev/null +++ b/.changeset/cyan-games-pump.md @@ -0,0 +1,5 @@ +--- +'@bigcommerce/docs': patch +--- + +Added Header component documentation diff --git a/README.md b/README.md index 34c360d15..775924772 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,7 @@ Workspaces are inside the [packages](https://github.com/bigcommerce/big-design/b - [big-design](https://github.com/bigcommerce/big-design/blob/main/packages/big-design): React component library. - [big-design-theme](https://github.com/bigcommerce/big-design/blob/main/packages/big-design-theme): Default Theme. - [big-design-icons](https://github.com/bigcommerce/big-design/blob/main/packages/big-design-icons): Icons library. +- [big-design-patterns](https://github.com/bigcommerce/big-design/tree/main/packages/big-design-patterns): Pattern library. - [docs](https://github.com/bigcommerce/big-design/blob/main/packages/docs): Documentation live here. - [configs](https://github.com/bigcommerce/big-design/blob/main/packages/configs): (internal) Shared configs between packages. @@ -68,6 +69,7 @@ As this is a monorepo, each package has it's own Changelog. Links for each can b - [big-design](https://github.com/bigcommerce/big-design/blob/main/packages/big-design/CHANGELOG.md) - [big-design-theme](https://github.com/bigcommerce/big-design/blob/main/packages/big-design-theme/CHANGELOG.md) - [big-design-icons](https://github.com/bigcommerce/big-design/blob/main/packages/big-design-icons/CHANGELOG.md) +- [big-design-patterns](https://github.com/bigcommerce/big-design/blob/main/packages/big-design-patterns/CHANGELOG.md) - [configs](https://github.com/bigcommerce/big-design/tree/main/packages/configs) - [docs](https://github.com/bigcommerce/big-design/blob/main/packages/docs/CHANGELOG.md) diff --git a/packages/docs/PropTables/HeaderPropTable.tsx b/packages/docs/PropTables/HeaderPropTable.tsx new file mode 100644 index 000000000..d91550e09 --- /dev/null +++ b/packages/docs/PropTables/HeaderPropTable.tsx @@ -0,0 +1,119 @@ +import React from 'react'; + +import { NextLink, Prop, PropTable, PropTableWrapper } from '../components'; + +const headerProps: Prop[] = [ + { + name: 'title', + types: 'string', + description: 'The main title of the header.', + required: true, + }, + { + name: 'actions', + types: ( + <> + {'Array<'} + + ActionButton + + {' | '} + + ActionDropdown + + {'>'} + + ), + description: 'An array of actions to display in the header. Can include buttons or dropdowns.', + }, + { + name: 'backLink', + types: ( + + BackLink + + ), + description: 'Configuration for a back link displayed at the top left of the header.', + }, + { + name: 'badge', + types: ( + + BadgeProps + + ), + description: 'Props to display a badge next to the title.', + }, + { + name: 'description', + types: [ + 'string', + + Text + , + ], + description: 'A description to display under the title.', + }, + { + name: 'icon', + types: 'ReactNode', + description: 'An icon to display to the left of the title.', + }, +]; + +export const HeaderPropTable: React.FC = (props) => ( + +); + +const actionButtonProps: Prop[] = [ + { + name: 'text', + types: 'string', + description: 'The text content of the button.', + required: true, + }, +]; + +export const ActionButtonPropsTable: React.FC = (props) => ( + +); + +const actionDropdownProps: Prop[] = [ + { + name: 'toggle', + types: ( + + ActionButton + + ), + description: 'The button used to toggle the dropdown.', + required: true, + }, +]; + +export const ActionDropdownPropsTable: React.FC = (props) => ( + +); + +const backLinkProps: Prop[] = [ + { + name: 'text', + types: 'string', + description: 'The text content of the back link.', + required: true, + }, +]; + +export const BackLinkPropsTable: React.FC = (props) => ( + +); diff --git a/packages/docs/components/CodePreview/CodePreview.tsx b/packages/docs/components/CodePreview/CodePreview.tsx index 90079f654..62dea7e56 100644 --- a/packages/docs/components/CodePreview/CodePreview.tsx +++ b/packages/docs/components/CodePreview/CodePreview.tsx @@ -1,6 +1,7 @@ import { transform } from '@babel/standalone'; import * as BigDesign from '@bigcommerce/big-design'; import * as BigDesignIcons from '@bigcommerce/big-design-icons'; +import * as BigDesignPatterns from '@bigcommerce/big-design-patterns'; import clipboardCopy from 'clipboard-copy'; import parser from 'prettier/parser-babel'; import { format } from 'prettier/standalone'; @@ -16,6 +17,7 @@ import { StyledLiveError } from './styled'; const defaultScope = { ...BigDesign, ...BigDesignIcons, + ...BigDesignPatterns, React, useEffect, useState, diff --git a/packages/docs/components/PropTable/PropTable.tsx b/packages/docs/components/PropTable/PropTable.tsx index cce3c0c7a..a831c9c04 100644 --- a/packages/docs/components/PropTable/PropTable.tsx +++ b/packages/docs/components/PropTable/PropTable.tsx @@ -41,10 +41,10 @@ export const PropTable: FC = (props) => { header: 'Prop name', hash: 'propName', render: ({ name, required }) => ( - <> + {name} {required ? * : null} - + ), }, { diff --git a/packages/docs/components/SideNav/SideNav.tsx b/packages/docs/components/SideNav/SideNav.tsx index 0b34edae0..cad3c699d 100644 --- a/packages/docs/components/SideNav/SideNav.tsx +++ b/packages/docs/components/SideNav/SideNav.tsx @@ -102,6 +102,10 @@ export const SideNav: React.FC = () => { Tooltip + + Header + + Box Breakpoints diff --git a/packages/docs/pages/header.tsx b/packages/docs/pages/header.tsx new file mode 100644 index 000000000..4da15509d --- /dev/null +++ b/packages/docs/pages/header.tsx @@ -0,0 +1,140 @@ +import { H1, Panel, Text } from '@bigcommerce/big-design'; +import { AddIcon, ArrowDropDownIcon } from '@bigcommerce/big-design-icons'; +import { Header } from '@bigcommerce/big-design-patterns'; +import React, { Fragment } from 'react'; + +import { + Code, + CodePreview, + CodeSnippet, + ContentRoutingTabs, + GuidelinesTable, + List, +} from '../components'; +import { ButtonPropTable, DropdownPropTable } from '../PropTables'; +import { + ActionButtonPropsTable, + ActionDropdownPropsTable, + BackLinkPropsTable, + HeaderPropTable, +} from '../PropTables/HeaderPropTable'; + +const HeaderPage = () => { + return ( + <> +

Header

+ + + + Header is a layout component that provides a standard structure for + page titles, descriptions, icons, badges, and actions. + + + When to use: + + To display a title and related actions at the top of a page. + To provide context and quick actions for users. + + + + + + + To use Header import the component from the package: + + {`import { Header } from '@bigcommerce/big-design-patterns';`} + + + {/* jsx-to-string:start */} +
, + }, + { + items: [ + { content: 'Option 1', onItemClick: (item) => item }, + { content: 'Option 2', onItemClick: (item) => item }, + ], + toggle: { + text: 'Secondary', + variant: 'secondary', + iconRight: , + }, + }, + { + text: 'Tertiary', + variant: 'subtle', + }, + ]} + backLink={{ + text: 'Back to Dashboard', + href: '/dashboard', + }} + badge={{ label: 'New', variant: 'success' }} + description="This is a description of the page content." + title="Page Title" + /> + {/* jsx-to-string:end */} + + + + + , + }, + { + id: 'action-button', + title: 'ActionButton', + render: () => ( + } + /> + ), + }, + { + id: 'action-dropdown', + title: 'ActionDropdown', + render: () => ( + } + /> + ), + }, + { + id: 'back-link', + title: 'BackLink', + render: () => , + }, + ]} + /> + + + + + + + ); +}; + +export default HeaderPage;