Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 469
feat(ui): Section style alignment#9431
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Uh oh!
There was an error while loading. Please reload this page.
Changes from all commits
df56759a2712eaa491250f2884435a34f9995e455d0b0790531529bdFile filter
Filter by extension
Conversations
Uh oh!
There was an error while loading. Please reload this page.
Jump to
Uh oh!
There was an error while loading. Please reload this page.
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| --- | ||
| --- | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| --- | ||
| --- |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -3,20 +3,41 @@ import { Badge } from '@clerk/ui/mosaic/components/badge'; | ||
| import { Button } from '@clerk/ui/mosaic/components/button'; | ||
| import { Icon } from '@clerk/ui/mosaic/components/icon'; | ||
| import { Section } from '@clerk/ui/mosaic/components/section'; | ||
| import * as stylex from '@stylexjs/stylex'; | ||
| import type { StoryMeta } from '@/lib/types'; | ||
| export { default as __source } from './section.stories?raw'; | ||
| const providerIconUrl = (provider: string) => `https://img.clerk.com/static/${provider}.svg`; | ||
| const styles = stylex.create({ | ||
MemberAuthor There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Following up replacing with IconFrame | ||
| providerMedia: { | ||
| backgroundColor: 'var(--cl-color-background)', | ||
| borderColor: 'light-dark(var(--cl-color-border-faded), var(--cl-color-background))', | ||
| borderRadius: 'var(--cl-radius-lg)', | ||
| borderStyle: 'solid', | ||
| borderWidth: '1px', | ||
| }, | ||
| providerIcon: { | ||
| display: 'block', | ||
| height: '20px', | ||
| width: '20px', | ||
| }, | ||
| }); | ||
| function ProviderIcon({ provider }: { provider: string }) { | ||
| return ( | ||
| <img | ||
| alt='' | ||
| src={providerIconUrl(provider)} | ||
| style={{ display: 'block', height: 24, width: 24 }} | ||
| /> | ||
| <Section.Media | ||
| size='lg' | ||
| {...stylex.props(styles.providerMedia)} | ||
| > | ||
| <img | ||
| alt='' | ||
| src={providerIconUrl(provider)} | ||
| {...stylex.props(styles.providerIcon)} | ||
| /> | ||
| </Section.Media> | ||
| ); | ||
| } | ||
| @@ -33,18 +54,27 @@ export function Default() { | ||
| <Section.Group> | ||
| <Section.Row> | ||
| <Section.Item> | ||
| <Section.Content> | ||
| <Section.Label>Profile picture</Section.Label> | ||
| <Section.Description>PNG or JPEG, Recommended size 1:1, up to 10MB.</Section.Description> | ||
| </Section.Content> | ||
| <Section.Actions> | ||
| <Avatar.Root size='lg'> | ||
| <Section.Media size='lg'> | ||
| <Avatar.Root size='fit'> | ||
| <Avatar.Image | ||
| alt='Preston Booth' | ||
| src='https://avatars.githubusercontent.com/u/51144033?v=4' | ||
| /> | ||
| <Avatar.Fallback>PB</Avatar.Fallback> | ||
| </Avatar.Root> | ||
| </Section.Media> | ||
| <Section.Content> | ||
| <Section.Label>Profile picture</Section.Label> | ||
| <Section.Description>Recommend size 1:1, up to 10MB.</Section.Description> | ||
| </Section.Content> | ||
| <Section.Actions> | ||
| <Button | ||
| color='neutral' | ||
| size='sm' | ||
| variant='outline' | ||
| > | ||
| Upload | ||
| </Button> | ||
| </Section.Actions> | ||
| </Section.Item> | ||
| </Section.Row> | ||
| @@ -61,7 +91,7 @@ export function Default() { | ||
| size='sm' | ||
| variant='outline' | ||
| > | ||
| Update name | ||
| Edit name | ||
| </Button> | ||
| </Section.Actions> | ||
| </Section.Item> | ||
| @@ -79,7 +109,7 @@ export function Default() { | ||
| size='sm' | ||
| variant='outline' | ||
| > | ||
| Update username | ||
| Edit username | ||
| </Button> | ||
| </Section.Actions> | ||
| </Section.Item> | ||
| @@ -114,18 +144,27 @@ export function MultipleEmailAndPhoneNumbers() { | ||
| <Section.Group> | ||
| <Section.Row> | ||
| <Section.Item> | ||
| <Section.Content> | ||
| <Section.Label>Profile picture</Section.Label> | ||
| <Section.Description>PNG or JPEG, Recommended size 1:1, up to 10MB.</Section.Description> | ||
| </Section.Content> | ||
| <Section.Actions> | ||
| <Avatar.Root size='lg'> | ||
| <Section.Media size='lg'> | ||
| <Avatar.Root size='fit'> | ||
| <Avatar.Image | ||
| alt='Preston Booth' | ||
| src='https://avatars.githubusercontent.com/u/51144033?v=4' | ||
| /> | ||
| <Avatar.Fallback>PB</Avatar.Fallback> | ||
| </Avatar.Root> | ||
| </Section.Media> | ||
| <Section.Content> | ||
| <Section.Label>Profile picture</Section.Label> | ||
| <Section.Description>Recommend size 1:1, up to 10MB.</Section.Description> | ||
| </Section.Content> | ||
| <Section.Actions> | ||
| <Button | ||
| color='neutral' | ||
| size='sm' | ||
| variant='outline' | ||
| > | ||
| Upload | ||
| </Button> | ||
| </Section.Actions> | ||
| </Section.Item> | ||
| </Section.Row> | ||
| @@ -142,7 +181,7 @@ export function MultipleEmailAndPhoneNumbers() { | ||
| size='sm' | ||
| variant='outline' | ||
| > | ||
| Update name | ||
| Edit name | ||
| </Button> | ||
| </Section.Actions> | ||
| </Section.Item> | ||
| @@ -160,7 +199,7 @@ export function MultipleEmailAndPhoneNumbers() { | ||
| size='sm' | ||
| variant='outline' | ||
| > | ||
| Update username | ||
| Edit username | ||
| </Button> | ||
| </Section.Actions> | ||
| </Section.Item> | ||
| @@ -177,12 +216,7 @@ export function MultipleEmailAndPhoneNumbers() { | ||
| size='sm' | ||
| variant='outline' | ||
| > | ||
| Add | ||
| <Icon | ||
| name='plus' | ||
| placement='inline-end' | ||
| size='sm' | ||
| /> | ||
| Add email | ||
| </Button> | ||
| </Section.Actions> | ||
| </Section.Item> | ||
| @@ -236,12 +270,7 @@ export function MultipleEmailAndPhoneNumbers() { | ||
| size='sm' | ||
| variant='outline' | ||
| > | ||
| Add | ||
| <Icon | ||
| name='plus' | ||
| placement='inline-end' | ||
| size='sm' | ||
| /> | ||
| Add phone number | ||
| </Button> | ||
| </Section.Actions> | ||
| </Section.Item> | ||
| @@ -279,9 +308,7 @@ export function ConnectedAccounts() { | ||
| <Section.Group> | ||
| <Section.Row> | ||
| <Section.Item> | ||
| <Section.Media> | ||
| <ProviderIcon provider='google' /> | ||
| </Section.Media> | ||
| <ProviderIcon provider='google' /> | ||
| <Section.Content> | ||
| <Section.Label>Google</Section.Label> | ||
| <Section.Description>test@google.com</Section.Description> | ||
| @@ -301,9 +328,7 @@ export function ConnectedAccounts() { | ||
| </Section.Row> | ||
| <Section.Row> | ||
| <Section.Item> | ||
| <Section.Media> | ||
| <ProviderIcon provider='apple' /> | ||
| </Section.Media> | ||
| <ProviderIcon provider='apple' /> | ||
| <Section.Content> | ||
| <Section.Label>Apple</Section.Label> | ||
| </Section.Content> | ||
| @@ -314,6 +339,11 @@ export function ConnectedAccounts() { | ||
| variant='outline' | ||
| > | ||
| Connect | ||
| <Icon | ||
| name='arrow-right-top' | ||
| placement='inline-end' | ||
| size='sm' | ||
| /> | ||
| </Button> | ||
| </Section.Actions> | ||
| </Section.Item> | ||
| @@ -340,7 +370,7 @@ export function Destructive() { | ||
| <Button | ||
| color='negative' | ||
| size='sm' | ||
| variant='ghost' | ||
| variant='outline' | ||
| > | ||
| Delete account | ||
| </Button> | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,117 @@ | ||
| import * as stylex from '@stylexjs/stylex'; | ||
| import { colorVars, fontWeightVars, radiusVars, space, typeScaleVars } from '../../tokens.stylex'; | ||
| import { sectionItemsMarker } from './section.markers.stylex'; | ||
| /* eslint-disable @stylexjs/no-lookahead-selectors -- Mosaic's supported browsers include :has(); | ||
| the marker keeps this selector scoped to Section.Items. */ | ||
| export const styles = stylex.create({ | ||
| root: { | ||
| display: 'flex', | ||
| flexDirection: 'column', | ||
| rowGap: space['2'], | ||
| width: '100%', | ||
| }, | ||
| title: { | ||
| fontWeight: fontWeightVars['--cl-font-medium'], | ||
| }, | ||
| group: { | ||
| borderColor: colorVars['--cl-color-border'], | ||
| borderRadius: radiusVars['--cl-radius-xl'], | ||
| borderStyle: 'solid', | ||
| borderWidth: '1px', | ||
| overflow: 'hidden', | ||
| backgroundColor: colorVars['--cl-color-card'], | ||
| width: '100%', | ||
| }, | ||
| row: { | ||
| marginInline: space['4'], | ||
| borderBlockStartColor: colorVars['--cl-color-border'], | ||
| borderBlockStartStyle: 'solid', | ||
| borderBlockStartWidth: { | ||
| default: '1px', | ||
| ':first-child': '0px', | ||
| }, | ||
| display: 'flex', | ||
| flexDirection: 'column', | ||
| paddingBlockEnd: { | ||
| default: space['4'], | ||
| [stylex.when.descendant('[data-nested]', sectionItemsMarker)]: space['1'], | ||
| }, | ||
| paddingBlockStart: space['4'], | ||
| rowGap: { | ||
| default: space['2'], | ||
| [stylex.when.descendant('[data-nested]', sectionItemsMarker)]: space['3'], | ||
| }, | ||
| minHeight: `calc(${space['18.5']} + 1px)`, | ||
| width: 'auto', | ||
| }, | ||
| items: { | ||
| display: 'flex', | ||
| flexDirection: 'column', | ||
| width: '100%', | ||
| }, | ||
| item: { | ||
| alignItems: 'center', | ||
| columnGap: space['3'], | ||
| display: 'flex', | ||
| flexWrap: 'nowrap', | ||
| justifyContent: 'space-between', | ||
| width: '100%', | ||
| }, | ||
| nestedItem: { | ||
| paddingBlock: space['1'], | ||
| }, | ||
| mediaBase: { | ||
| alignItems: 'center', | ||
| alignSelf: 'center', | ||
| aspectRatio: '1/1', | ||
| display: 'flex', | ||
| flexShrink: 0, | ||
| justifyContent: 'center', | ||
| }, | ||
| mediaSm: { | ||
| height: space['4'], | ||
| width: space['4'], | ||
| }, | ||
| mediaMd: { | ||
| height: space['6'], | ||
| width: space['6'], | ||
| }, | ||
| mediaLg: { | ||
| height: space['10'], | ||
| width: space['10'], | ||
| }, | ||
| mediaXl: { | ||
| height: space['12'], | ||
| width: space['12'], | ||
| }, | ||
| content: { | ||
| display: 'flex', | ||
| flexDirection: 'column', | ||
| flexGrow: 1, | ||
| justifyContent: 'center', | ||
| rowGap: space['0.5'], | ||
| minWidth: 0, | ||
| }, | ||
| label: { | ||
| color: colorVars['--cl-color-card-foreground'], | ||
| fontSize: typeScaleVars['--cl-text-sm-size'], | ||
| fontWeight: fontWeightVars['--cl-font-medium'], | ||
| lineHeight: typeScaleVars['--cl-text-sm-leading'], | ||
| }, | ||
| description: { | ||
| color: colorVars['--cl-color-neutral-faded'], | ||
| fontSize: typeScaleVars['--cl-text-sm-size'], | ||
| fontWeight: fontWeightVars['--cl-font-normal'], | ||
| lineHeight: typeScaleVars['--cl-text-sm-leading'], | ||
| textWrap: 'balance', | ||
| }, | ||
| actions: { | ||
| alignItems: 'center', | ||
| display: 'flex', | ||
| flexShrink: 0, | ||
| justifyContent: 'flex-end', | ||
| }, | ||
| }); | ||
| /* eslint-enable @stylexjs/no-lookahead-selectors */ |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.