Skip to content

Commit

Permalink
feat: add user dialog and topbar docs (#3298)
Browse files Browse the repository at this point in the history
* chore(user-dialog): fix zindex

* docs(website): add topbar and user dialog docs

* chore: pr feedback

* chore: pr feedback example update
  • Loading branch information
nkrantz committed Jun 28, 2023
1 parent 771da3b commit cc840e4
Show file tree
Hide file tree
Showing 12 changed files with 791 additions and 3 deletions.
6 changes: 6 additions & 0 deletions .changeset/moody-yaks-grow.md
@@ -0,0 +1,6 @@
---
'@twilio-paste/user-dialog': patch
'@twilio-paste/core': patch
---

[User dialog] add zindex so menu overlays the page its on
2 changes: 2 additions & 0 deletions cypress/integration/sitemap-vrt/constants.ts
Expand Up @@ -80,6 +80,8 @@ export const SITEMAP = [
'/components/time-picker/',
'/components/truncate/',
'/components/tooltip/',
'/components/topbar',
'/components/user-dialog/',
'/components/textarea/',
'/core/changelog/',
'/components/table/',
Expand Down
2 changes: 1 addition & 1 deletion packages/paste-core/components/topbar/package.json
Expand Up @@ -3,7 +3,7 @@
"version": "0.2.0",
"category": "layout",
"status": "alpha",
"description": "Topbar encapsulates application-wide controls that rest at the top of the screen.",
"description": "Topbar contains application-wide controls that rest at the top of the screen.",
"author": "Twilio Inc.",
"license": "MIT",
"main:dev": "src/index.tsx",
Expand Down
2 changes: 1 addition & 1 deletion packages/paste-core/components/user-dialog/package.json
Expand Up @@ -3,7 +3,7 @@
"version": "1.0.0",
"category": "navigation",
"status": "production",
"description": "User dialog is an expandable menu that contains profile related actions.",
"description": "User dialog is a menu that contains user profile-related actions.",
"author": "Twilio Inc.",
"license": "MIT",
"main:dev": "src/index.tsx",
Expand Down
2 changes: 2 additions & 0 deletions packages/paste-core/components/user-dialog/src/UserDialog.tsx
Expand Up @@ -24,6 +24,8 @@ const UserDialogPopover = React.forwardRef<HTMLDivElement, UserDialogPopoverProp
padding="space0"
marginTop="space30"
width="size30"
zIndex="zIndex80"
outline="none"
>
{props.children}
</Box>
Expand Down
2 changes: 2 additions & 0 deletions packages/paste-website/package.json
Expand Up @@ -119,9 +119,11 @@
"@twilio-paste/toast": "^11.0.0",
"@twilio-paste/tooltip": "^10.0.0",
"@twilio-paste/tooltip-primitive": "^1.0.0",
"@twilio-paste/topbar": "^0.2.0",
"@twilio-paste/truncate": "^13.0.0",
"@twilio-paste/types": "^5.0.0",
"@twilio-paste/uid-library": "^1.0.0",
"@twilio-paste/user-dialog": "^1.0.0",
"@twilio-paste/utils": "^4.0.0",
"@types/airtable": "^0.10.1",
"@types/gtag.js": "^0.0.12",
Expand Down
Expand Up @@ -5,7 +5,7 @@ const ProductSwitcherMenu = () => {
return (
<>
<ProductSwitcherButton {...productSwitcher} i18nButtonLabel="Switch products" />
<ProductSwitcher {...productSwitcher} aria-label="Avaiable accounts">
<ProductSwitcher {...productSwitcher} aria-label="Available products">
<ProductSwitcherItem
{...productSwitcher}
name="product"
Expand Down
222 changes: 222 additions & 0 deletions packages/paste-website/src/component-examples/TopbarExamples.ts
@@ -0,0 +1,222 @@
export const defaultTopbarExample = `
const TopbarExample = () => {
const [account, setAccount] = React.useState('Account name');
const menu = useMenuState();
const onClick = (newAccount) => {
menu.hide();
setAccount(newAccount);
};
const productSwitcher = useProductSwitcherState();
const [product, setProduct] = React.useState('twilio');
return (
<Topbar>
<Box display="flex" columnGap="space50">
<MenuBadge {...menu} i18nButtonLabel="Change account" variant="decorative10">
{account}
</MenuBadge>
<Menu {...menu} aria-label="Accounts">
<MenuItem {...menu} onClick={()=>onClick('Account one')}>
Account one
</MenuItem>
<MenuItem {...menu} onClick={()=>onClick('Account two')}>
Account two
</MenuItem>
<MenuItem {...menu} onClick={()=>onClick('Account three')}>
Account three
</MenuItem>
</Menu>
<Badge variant="subaccount" size="small">Subaccount</Badge>
<Box flex-shrink="4" paddingX="space150">
<Input placeholder="Search" insertBefore={<SearchIcon decorative/>}/>
</Box>
<ProductSwitcherButton {...productSwitcher} i18nButtonLabel="Switch products" />
<ProductSwitcher {...productSwitcher} aria-label="Available products">
<ProductSwitcherItem
{...productSwitcher}
name="product"
value="twilio"
checked={product === 'twilio'}
onChange={(e) => {
setProduct('twilio');
}}
productName="Twilio"
productStrapline="SMS, Voice & Video"
productIcon={<LogoTwilioIcon decorative />}
/>
<ProductSwitcherItem
{...productSwitcher}
name="product"
value="segment"
checked={product === 'segment'}
onChange={(e) => {
setProduct('segment');
}}
productName="Segment"
productStrapline="Customer data platform"
productIcon={<ProductSegmentIcon decorative />}
/>
<ProductSwitcherItem
{...productSwitcher}
name="product"
value="flex"
checked={product === 'flex'}
onChange={(e) => {
setProduct('flex');
}}
productName="Flex"
productStrapline="Cloud-based contact center"
productIcon={<ProductFlexIcon decorative />}
/>
<ProductSwitcherItem
{...productSwitcher}
name="product"
value="sendgrid"
checked={product === 'sendgrid'}
onChange={(e) => {
setProduct('sendgrid');
}}
productName="SendGrid"
productStrapline="Email delivery and API"
productIcon={<ProductEmailAPIIcon decorative />}
/>
<ProductSwitcherItem
{...productSwitcher}
name="product"
value="admin"
checked={product === 'admin'}
onChange={(e) => {
setProduct('admin');
}}
productName="Console Admin"
productStrapline="Admin center"
productIcon={<LogoTwilioIcon decorative />}
/>
</ProductSwitcher>
</Box>
</Topbar>
)
}
render(
<TopbarExample/>
)
`.trim();

export const emptyTopbarExample = `
const TopbarExample = () => {
return (
<Topbar>I am an empty Topbar</Topbar>
)
}
render(
<TopbarExample/>
)
`.trim();

export const defaultAccountSwitcherExample = `
const AccountSwitcher = () => {
const [account, setAccount] = React.useState('Account name');
const menu = useMenuState();
const onClick = (newAccount) => {
menu.hide();
setAccount(newAccount);
};
return (
<>
<MenuBadge {...menu} i18nButtonLabel="Change account" variant="decorative10">
{account}
</MenuBadge>
<Menu {...menu} aria-label="Accounts">
<MenuItem {...menu} onClick={()=>onClick('Account one')}>
Account one
</MenuItem>
<MenuItem {...menu} onClick={()=>onClick('Account two')}>
Account two
</MenuItem>
<MenuItem {...menu} onClick={()=>onClick('Account three')}>
Account three
</MenuItem>
</Menu>
</>
);
};
render(
<AccountSwitcher />
)
`.trim();

export const defaultProductSwitcherExample = `
const ProductSwitcherMenu = () => {
const productSwitcher = useProductSwitcherState();
const [product, setProduct] = React.useState('twilio');
return (
<>
<ProductSwitcherButton {...productSwitcher} i18nButtonLabel="Switch products" />
<ProductSwitcher {...productSwitcher} aria-label="Available products">
<ProductSwitcherItem
{...productSwitcher}
name="product"
value="twilio"
checked={product === 'twilio'}
onChange={(e) => {
setProduct('twilio');
}}
productName="Twilio"
productStrapline="SMS, Voice & Video"
productIcon={<LogoTwilioIcon decorative />}
/>
<ProductSwitcherItem
{...productSwitcher}
name="product"
value="segment"
checked={product === 'segment'}
onChange={(e) => {
setProduct('segment');
}}
productName="Segment"
productStrapline="Customer data platform"
productIcon={<ProductSegmentIcon decorative />}
/>
<ProductSwitcherItem
{...productSwitcher}
name="product"
value="flex"
checked={product === 'flex'}
onChange={(e) => {
setProduct('flex');
}}
productName="Flex"
productStrapline="Cloud-based contact center"
productIcon={<ProductFlexIcon decorative />}
/>
<ProductSwitcherItem
{...productSwitcher}
name="product"
value="sendgrid"
checked={product === 'sendgrid'}
onChange={(e) => {
setProduct('sendgrid');
}}
productName="SendGrid"
productStrapline="Email delivery and API"
productIcon={<ProductEmailAPIIcon decorative />}
/>
<ProductSwitcherItem
{...productSwitcher}
name="product"
value="admin"
checked={product === 'admin'}
onChange={(e) => {
setProduct('admin');
}}
productName="Console Admin"
productStrapline="Admin center"
productIcon={<LogoTwilioIcon decorative />}
/>
</ProductSwitcher>
</>
);
};
render(
<ProductSwitcherMenu />
)
`.trim();

0 comments on commit cc840e4

Please sign in to comment.