UNPKG

@wix/design-system

Version:

@wix/design-system

363 lines (334 loc) 11.9 kB
## Feature Examples ### Size - description: <p>Control the size of a component with <code>size</code> prop:</p><li><code>large</code> - use when item height is >212 px.</li><li><code>medium</code> - use when item height is between 162 px and 212 px.</li><li><code>small</code> - use when item height is between 120 px and 162 px.</li><li><code>tiny</code> (default) - use when item height is between 48 px and 120 px.</li><p></p><p><code>size</code> prop affects component's padding and icon size. Its height and width also depend on a parent container.</p><p></p><p>Minimum height of a component is:</p><li>48 px for <code>dashes</code>,</li><li>42 px for <code>plain</code>, and</li><li>81×81 px for <code>image</code> themes.</li> - example: ```jsx <StorybookComponents.Stack flexDirection="column"> <AddItem size="large">Large</AddItem> <AddItem size="medium">Medium</AddItem> <AddItem size="small">Small</AddItem> <AddItem size="tiny">Tiny</AddItem> </StorybookComponents.Stack>; ``` ### Theme - description: <p>Control the style of a component with <code>theme</code> prop:</p><li><code>dashes</code> (default) - use it outside of a card, in a table or a list that contains images.</li><li><code>plain</code> - use for in-card lists and tables that mainly consist of text.</li><li><code>filled</code> - use for small in-card items, when a prominent call to action is needed.</li><li><code>image</code> - use to add images inside a card.</li> - example: ```jsx <StorybookComponents.Stack flexDirection="column"> <AddItem theme="dashes">Dashes</AddItem> <AddItem theme="plain">Plain</AddItem> <AddItem theme="filled">Filled</AddItem> <AddItem theme="image">Image</AddItem> </StorybookComponents.Stack>; ``` ### Alignment - description: <p>Control content alignment with <code>alignItems</code> prop:</p><li><code>left</code></li><li><code>center</code> (default)</li><li><code>right</code></li><p></p><p>Use <code>left</code> alignment with a <code>plain</code> component theme to maintain visual consistency with a remaining list inside a card.</p> - example: ```jsx <StorybookComponents.Stack flexDirection="column"> <AddItem theme="plain" alignItems="left"> Left </AddItem> <AddItem theme="plain" alignItems="center"> Center </AddItem> <AddItem theme="plain" alignItems="right"> Right </AddItem> </StorybookComponents.Stack>; ``` ### Padding - description: <p>Control whether a component has padding with <code>removePadding</code> prop.</p><p></p><p>Use it in special cases only, when component is used in dense and narrow layouts.</p> - example: ```jsx <StorybookComponents.Stack flexDirection="column"> <AddItem>Default</AddItem> <AddItem removePadding>No padding</AddItem> </StorybookComponents.Stack>; ``` ### Border radius - description: <p>Control the border radius of a component with <code>borderRadius</code> prop.</p><p></p><p>By default, component has a corner radius of 8 px. Change it in custom scenarios, for example, when user needs to add a round avatar photo.</p> - example: ```jsx <StorybookComponents.Stack width="min-content" height="100px"> <AddItem borderRadius="8px" /> <AddItem borderRadius="100%" /> </StorybookComponents.Stack>; ``` ### Title - description: <p>Emphasize action with a <code>title</code>.</p><p></p><p>If no title is shown, display it in a tooltip on item hover with <code>tooltipContent</code> prop.</p> - example: ```jsx <StorybookComponents.Stack flexDirection="column"> <AddItem>Title</AddItem> <AddItem tooltipContent="Title"></AddItem> </StorybookComponents.Stack>; ``` ### Subtitle - description: <p>Add a description below the title using <code>subtitle</code> prop.</p><p></p><p>Use it to explain item details, such as a supported file format of a maximum allowed file size.</p> - example: ```jsx <AddItem subtitle="Subtitle">Title</AddItem>; ``` ### Icon - description: <p>Control a '+' icon visibility with <code>showIcon</code> prop. The icon is always shown by default.</p> - example: ```jsx <StorybookComponents.Stack flexDirection="column"> <AddItem>Default</AddItem> <AddItem showIcon={false}>No icon</AddItem> </StorybookComponents.Stack>; ``` ### Custom icon or illustration - description: <p>Override a default '+' icon with a custom icon or illustration by passing it to <code>icon</code> prop. </p><p></p><p>Align dimensions of the icon or illustration based on add item <code>size</code>:</p><li>Use S2 illustrations in <code>large</code> and <code>medium</code> size components.</li><li>Use S1 for <code>small</code> size component.</li><li>Use 24×24 px or 18×18 px icons for <code>tiny</code> size component.</li> - example: ```jsx <StorybookComponents.Stack width="50%" flexDirection="column"> <Box height="212px"> <AddItem size="large" icon={ <StorybookComponents.Placeholder width="96px" height="96px"> <StorybookComponents.Stack justifyContent="center" height="100%" alignItems="center" > <Text weight="bold" secondary> S2 </Text> </StorybookComponents.Stack> </StorybookComponents.Placeholder> } > Large </AddItem> </Box> <Box height="162px"> <AddItem size="medium" icon={ <StorybookComponents.Placeholder width="96px" height="96px"> <StorybookComponents.Stack justifyContent="center" height="100%" alignItems="center" > <Text weight="bold" secondary> S2 </Text> </StorybookComponents.Stack> </StorybookComponents.Placeholder> } > Medium </AddItem> </Box> <Box height="120px"> <AddItem size="small" icon={ <StorybookComponents.Placeholder width="60px" height="60px"> <StorybookComponents.Stack justifyContent="center" height="100%" alignItems="center" > <Text weight="bold" secondary> S1 </Text> </StorybookComponents.Stack> </StorybookComponents.Placeholder> } > Small </AddItem> </Box> <Box> <AddItem size="tiny" icon={<Icons.Image />}> Tiny </AddItem> </Box> <Box> <AddItem size="tiny" icon={<Icons.ImageSmall />}> Tiny with small icon </AddItem> </Box> </StorybookComponents.Stack>; ``` ### Disabled - description: <p>Disable all component interactions with <code>disabled</code> prop. Use it to show that no new item can be added to the list at a moment.</p> - example: ```jsx <AddItem disabled>Disabled</AddItem>; ``` ### Tooltip - description: <p>Describe add item action with <code>tooltipContent</code>. Tooltip is shown when users hover on the item with a mouse.</p><p></p><p>Control tooltip design with <code>tooltipProps</code>. </p> - example: ```jsx <AddItem tooltipContent="Description for the add item action" tooltipProps={{ placement: 'bottom' }} > Hover to see tooltip </AddItem>; ``` ## Common Use Case Examples ### Inside a card - description: <p>Use Add item to create a new item inside a card.</p><p></p><p>When the list consists mainly of textual content, use <code>plain</code> theme and adjust component's <code>alignment</code>.</p> - example: ```jsx () => { const records = [ { option: `Size`, vars: 'S, M, L', }, { option: `Colors`, vars: 'Black, Neutral, White', }, { option: 'Material', vars: 'Cotton, Eco leather', }, ]; const columns = [ { title: 'Option', render: (row) => row.option }, { title: 'Variations', render: (row) => row.vars }, ]; return ( <Box> <Card hideOverflow> <Card.Header title="Product options"></Card.Header> <Table data={records} columns={columns} rowVerticalPadding="medium"> <Table.Content /> <AddItem theme="plain" alignItems="left"> Add New Option </AddItem> </Table> </Card> </Box> ); }; ``` ### Inside a page - description: <p>Use Add item's <code>dashed</code> theme when component is placed directly inside of a <code><Page/></code> layout.</p> - example: ```jsx <Page> <Page.Header title="Events" /> <Page.Content> <Layout> <Cell span={12}> <Box height={160}> <Box align="center" verticalAlign="middle" width={180}> <Image height="180px" borderRadius="8px 0px 0px 8px" src="running_man.png" /> </Box> <Box direction="vertical" borderRadius="0px 8px 8px 0px" verticalAlign="space-between" padding="18px 24px" backgroundColor="D80" flexGrow={1} > <Box verticalAlign="space-between" flexGrow={1}> <Box direction="vertical" gap="3px"> <Heading size="small">Get running!</Heading> <Text size="small" secondary> Scheduled for April 26, 2021 </Text> </Box> </Box> <Box align="space-between"> <Box gap="24px"> <Box verticalAlign="middle" gap="0px"> <Icons.LockUnlockedSmall /> <Box marginLeft={1}> <Text size="small">Public</Text> </Box> </Box> <Box verticalAlign="middle"> <Box marginLeft={1}> <Text size="small">Join for Free</Text> </Box> </Box> </Box> <Box> <Box verticalAlign="middle"> <Box gap="SP2"> <IconButton priority="secondary" size="small"> <Icons.MoreSmall /> </IconButton> <Button priority="secondary" size="small"> Edit </Button> </Box> </Box> </Box> </Box> </Box> </Box> </Cell> <Cell> <Box height={160}> <AddItem size="small">Add New Event</AddItem> </Box> </Cell> </Layout> </Page.Content> </Page>; ``` ### Add images - description: <p>Use Add item to upload images.</p><p></p><p>For this, select <code>image</code> theme and show the title inside a tooltip on mouse hover.</p> - example: ```jsx <Card> <Card.Header title="Profile" /> <Card.Divider /> <Card.Content> <Layout> <Cell span={6}> <Box direction="vertical" gap="4"> <FormField labelSize="small" label="Business name"> <Input placeholder="" /> </FormField> <FormField labelSize="small" label="Short description"> <InputArea placeholder="Add more details about your business." rows={3} hasCounter resizable /> </FormField> </Box> </Cell> <Cell span={6}> <FormField labelSize="small" label="Logo"> <Dropzone onDrop={() => {}}> <Dropzone.Content> <FileUpload> {({ openFileUploadDialog }) => ( <Box height="168px"> <AddItem theme="image" tooltipContent="Add Logo" size="medium" onClick={openFileUploadDialog} /> </Box> )} </FileUpload> </Dropzone.Content> </Dropzone> </FormField> </Cell> </Layout> </Card.Content> </Card>; ```