UNPKG

@wix/design-system

Version:

@wix/design-system

209 lines (187 loc) 6.27 kB
## Feature Examples ### Size - description: <p>Control the tab size with the <code>size</code> prop:</p><p></p><li><code>medium</code> (default) is the standard used in common cases. </li><li><code>small</code> fits into smaller elements and compact designs.</li><li><code>tiny</code> is used for dense layouts. </li> - example: ```jsx <StorybookComponents.Stack flexDirection="column" width="200px"> <VerticalTabs onChange={(/*id*/) => {}}> <VerticalTabs.TabItem suffixIcon={<Icons.ChevronRight />}> Medium tab 1 </VerticalTabs.TabItem> <VerticalTabs.TabItem suffixIcon={<Icons.ChevronRight />}> Medium tab 2 </VerticalTabs.TabItem> <VerticalTabs.TabItem suffixIcon={<Icons.ChevronRight />}> Medium tab 3 </VerticalTabs.TabItem> </VerticalTabs> <VerticalTabs size="small" onChange={(/*id*/) => {}}> <VerticalTabs.TabItem suffixIcon={<Icons.ChevronRight />}> Small tab 1 </VerticalTabs.TabItem> <VerticalTabs.TabItem suffixIcon={<Icons.ChevronRight />}> Small tab 2 </VerticalTabs.TabItem> <VerticalTabs.TabItem suffixIcon={<Icons.ChevronRight />}> Small tab 3 </VerticalTabs.TabItem> </VerticalTabs> <VerticalTabs size="tiny" onChange={(/*id*/) => {}}> <VerticalTabs.TabItem suffixIcon={<Icons.ChevronRight />}> Tiny tab 1 </VerticalTabs.TabItem> <VerticalTabs.TabItem suffixIcon={<Icons.ChevronRight />}> Tiny tab 2 </VerticalTabs.TabItem> <VerticalTabs.TabItem suffixIcon={<Icons.ChevronRight />}> Tiny tab 3 </VerticalTabs.TabItem> </VerticalTabs> </StorybookComponents.Stack>; ``` ### Skin - description: <p><code>skin</code> controls the overall visual style of the <code>VerticalTabs</code> container and items.</p><li><code>standard</code> (default)</li><li><code>light</code></li><li><code>neutral</code> </li> - example: ```jsx () => { const [activeTabs, setActiveTabs] = React.useState({ standard: 0, light: 0, neutral: 0, }); const tabItems = [ { id: 0, label: 'Overview' }, { id: 1, label: 'Settings' }, { id: 2, label: 'Billing' }, ]; return ( <Box gap="20px" direction="vertical"> <Box direction="horizontal" gap="20px"> <Box width="220px" gap="20px" direction="vertical"> <Text>Standard</Text> <VerticalTabs skin="standard" activeTabId={activeTabs.standard} onChange={(tabId) => setActiveTabs((prevTabs) => ({ ...prevTabs, standard: tabId })) } > {tabItems.map((item) => ( <VerticalTabs.TabItem key={item.id} id={item.id}> {item.label} </VerticalTabs.TabItem> ))} </VerticalTabs> </Box> <Box width="220px" gap="20px" direction="vertical"> <Text>Light</Text> <VerticalTabs skin="light" activeTabId={activeTabs.standard} onChange={(tabId) => setActiveTabs((prevTabs) => ({ ...prevTabs, standard: tabId })) } > {tabItems.map((item) => ( <VerticalTabs.TabItem key={item.id} id={item.id}> {item.label} </VerticalTabs.TabItem> ))} </VerticalTabs> </Box> <Box width="220px" gap="20px" direction="vertical"> <Text>Neutral</Text> <VerticalTabs skin="neutral" activeTabId={activeTabs.standard} onChange={(tabId) => setActiveTabs((prevTabs) => ({ ...prevTabs, standard: tabId })) } > {tabItems.map((item) => ( <VerticalTabs.TabItem key={item.id} id={item.id}> {item.label} </VerticalTabs.TabItem> ))} </VerticalTabs> </Box> </Box> </Box> ); }; ``` ### Group title - description: <p>Group related tabs together under a title by using a <code><VerticalTabs.TabsGroup/></code> wrapper.</p> - example: ```jsx <div style={{ width: 200 }}> <VerticalTabs onChange={(/*id*/) => {}}> <VerticalTabs.TabsGroup title="Group Title"> <VerticalTabs.TabItem> Tab 1 </VerticalTabs.TabItem> <VerticalTabs.TabItem> Tab 2 </VerticalTabs.TabItem> <VerticalTabs.TabItem> Tab 3 </VerticalTabs.TabItem> </VerticalTabs.TabsGroup> </VerticalTabs> </div>; ``` ### Selected tab - description: <p>Specify which tab is currently selected with the <code>activeTabId</code> prop.</p> - example: ```jsx <div style={{ width: 200 }}> <VerticalTabs activeTabId={0} onChange={(/*id*/) => {}}> <VerticalTabs.TabsGroup title="Group Title"> <VerticalTabs.TabItem id={0}> Tab 1 </VerticalTabs.TabItem> <VerticalTabs.TabItem id={1}> Tab 2 </VerticalTabs.TabItem> <VerticalTabs.TabItem id={2}> Tab 3 </VerticalTabs.TabItem> </VerticalTabs.TabsGroup> </VerticalTabs> </div>; ``` ## Common Use Case Examples ### Sidebar in a custom modal - description: <p>Place tabs inside a <code></CustomModalLayout></code> to create a sidebar with structured content.</p> - example: ```jsx <CustomModalLayout showFooterDivider showHeaderDivider primaryButtonText="Save" secondaryButtonText="Cancel" onCloseButtonClick={() => {}} title="Account settings" removeContentPadding content={ <Box> <Box width="200px" direction="vertical" paddingBottom="16px"> <VerticalTabs size="small" onChange={(/*id*/) => {}}> <VerticalTabs.TabsGroup title="Settings"> <VerticalTabs.TabItem suffixIcon={<Icons.ChevronRight />}> Account info </VerticalTabs.TabItem> <VerticalTabs.TabItem suffixIcon={<Icons.ChevronRight />}> Login info </VerticalTabs.TabItem> <VerticalTabs.TabItem suffixIcon={<Icons.ChevronRight />}> Email preferences </VerticalTabs.TabItem> </VerticalTabs.TabsGroup> </VerticalTabs> </Box> <Divider direction="vertical"></Divider> </Box> } />; ```