Skip to content
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

[@mantine/core] Stepper: Vertical stepper with multiple lines fix #2106

Merged
merged 28 commits into from Aug 14, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
846e180
[@mantine/core] Select: only use open/close callback when value changes
wes337 Feb 19, 2022
9e8045f
[@mantine/core] Select: do not use early return
wes337 Feb 19, 2022
8f446fa
Merge remote-tracking branch 'upstream/master'
wes337 Feb 19, 2022
40ea5cd
Merge remote-tracking branch 'upstream/master'
wes337 Feb 23, 2022
e1c76d0
Merge remote-tracking branch 'upstream/master'
wes337 Feb 26, 2022
52f4349
Merge remote-tracking branch 'upstream/master'
wes337 Mar 6, 2022
a74533c
Merge remote-tracking branch 'upstream/master'
wes337 Mar 10, 2022
75852b2
Merge remote-tracking branch 'upstream/master'
wes337 Mar 26, 2022
bc2b0db
Merge remote-tracking branch 'upstream/master'
wes337 Mar 27, 2022
a3c4287
Merge remote-tracking branch 'upstream/master'
wes337 Apr 3, 2022
4afe44a
Merge remote-tracking branch 'upstream/master'
wes337 Apr 19, 2022
6ac338e
Merge remote-tracking branch 'upstream/master'
wes337 May 7, 2022
3c04aba
Merge remote-tracking branch 'upstream/master'
wes337 May 9, 2022
75c8f60
Merge remote-tracking branch 'upstream/master'
wes337 May 10, 2022
7ce8791
Merge remote-tracking branch 'upstream/master'
wes337 May 25, 2022
d96a3a6
Merge remote-tracking branch 'upstream/master'
wes337 May 30, 2022
936dbb3
Merge remote-tracking branch 'upstream/master'
wes337 Jun 11, 2022
a53a6e2
Merge remote-tracking branch 'upstream/master'
wes337 Jun 12, 2022
b4b3751
Merge remote-tracking branch 'upstream/master'
wes337 Jun 12, 2022
1053827
Merge remote-tracking branch 'upstream/master'
wes337 Jun 12, 2022
3ad1b2a
Merge remote-tracking branch 'upstream/master'
wes337 Jun 20, 2022
8e439e1
Merge remote-tracking branch 'upstream/master'
wes337 Jun 30, 2022
f576e77
Merge remote-tracking branch 'upstream/master'
wes337 Aug 7, 2022
52a9357
Merge remote-tracking branch 'upstream/master'
wes337 Aug 13, 2022
d4599e0
[@mantine/core] Stepper: fix multi line vertical stepper
wes337 Aug 13, 2022
6539433
[@mantine/core] Stepper: fix vertical stepper icon and text alignment
wes337 Aug 13, 2022
b3d95d7
[@mantine/core] Stepper: fix vertical styles for chrome/edge
wes337 Aug 14, 2022
0a208ae
[@mantine/core] Stepper: remove margin from first
wes337 Aug 14, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
55 changes: 50 additions & 5 deletions src/mantine-core/src/Stepper/Step/Step.styles.ts
Expand Up @@ -7,6 +7,7 @@ export interface StepStylesParams {
radius: MantineNumberSize;
allowStepClick: boolean;
iconPosition: 'right' | 'left';
orientation: 'vertical' | 'horizontal';
}

export const iconSizes = {
Expand All @@ -18,28 +19,63 @@ export const iconSizes = {
};

export default createStyles(
(theme, { color, iconSize, size, radius, allowStepClick, iconPosition }: StepStylesParams) => {
(
theme,
{ color, iconSize, size, radius, allowStepClick, iconPosition, orientation }: StepStylesParams
) => {
const _iconSize = iconSize || theme.fn.size({ size, sizes: iconSizes });
const iconMargin = size === 'xl' || size === 'lg' ? theme.spacing.md : theme.spacing.sm;
const _radius = theme.fn.size({ size: radius, sizes: theme.radius });
const colors = theme.fn.variant({ variant: 'filled', color });
const separatorDistanceFromIcon = theme.spacing.xs / 2;

const verticalOrientationStyles = {
step: {
justifyContent: 'flex-start',
minHeight: `${_iconSize + theme.spacing.xl + separatorDistanceFromIcon}px`,
marginTop: `${separatorDistanceFromIcon}px`,
overflow: 'hidden',

'&:first-of-type': {
marginTop: 0,
},

'&:last-of-type': {
minHeight: 'auto',
},
},
} as const;

return {
stepLoader: {},

step: {
display: 'flex',
flexDirection: iconPosition === 'left' ? 'row' : 'row-reverse',
cursor: allowStepClick ? 'pointer' : 'default',
alignItems: 'center',
...(orientation === 'vertical'
? verticalOrientationStyles.step
: {
alignItems: 'center',
}),
},

stepWrapper: {
position: 'relative',
overflow: 'hidden',
flexShrink: 0,
marginBottom: separatorDistanceFromIcon,
},

verticalSeparator: {
top: `${_iconSize + separatorDistanceFromIcon}px`,
left: `${_iconSize / 2}px`,
height: '100vh',
position: 'absolute',
borderLeft: `2px solid ${
theme.colorScheme === 'dark' ? theme.colors.dark[5] : theme.colors.gray[1]
}`,
},

verticalSeparatorActive: {
borderColor: theme.fn.variant({ variant: 'filled', color }).background,
},

stepIcon: {
Expand Down Expand Up @@ -85,6 +121,15 @@ export default createStyles(
flexDirection: 'column',
marginLeft: iconPosition === 'left' ? iconMargin : undefined,
marginRight: iconPosition === 'right' ? iconMargin : undefined,

...(orientation === 'vertical'
? {
marginTop:
_iconSize > theme.fn.size({ size, sizes: theme.fontSizes }) * 4
? _iconSize / 4
: _iconSize / 12,
}
: null),
},

stepLabel: {
Expand Down
13 changes: 12 additions & 1 deletion src/mantine-core/src/Stepper/Step/Step.tsx
Expand Up @@ -65,6 +65,9 @@ export interface StepProps

/** Static selector base */
__staticSelector?: string;

/** Component orientation */
orientation?: 'vertical' | 'horizontal';
}

const defaultIconSizes = {
Expand Down Expand Up @@ -98,12 +101,13 @@ export const Step = forwardRef<HTMLButtonElement, StepProps>(
classNames,
styles,
unstyled,
orientation,
...others
}: StepProps,
ref
) => {
const { classes, cx, theme } = useStyles(
{ color, iconSize, size, radius, allowStepClick, iconPosition },
{ color, iconSize, size, radius, allowStepClick, iconPosition, orientation },
{ name: __staticSelector, classNames, styles, unstyled }
);

Expand Down Expand Up @@ -147,6 +151,13 @@ export const Step = forwardRef<HTMLButtonElement, StepProps>(
)
) : null}
</div>
{orientation === 'vertical' && (
<div
className={cx(classes.verticalSeparator, {
[classes.verticalSeparatorActive]: state === 'stepCompleted',
})}
/>
)}
</div>
)}

Expand Down
44 changes: 42 additions & 2 deletions src/mantine-core/src/Stepper/Stepper.story.tsx
Expand Up @@ -122,10 +122,50 @@ storiesOf('Stepper', module)
volutpat nunc accumsan at. Curabitur ac auctor ante, et convallis diam. Donec eget
mi consectetur, pharetra urna et, volutpat nibh. Integer sit amet diam ligula.
Phasellus ex purus, dictum non purus ut, viverra maximus sem. Sed luctus eget massa
vitae dapibus. Sed ante tortor, viverra at urna et, feugiat scelerisque dolor.`}
loading
vitae dapibus. Sed ante tortor, viverra at urna et, feugiat scelerisque dolor. Fusce lacinia lacus at sem luctus
accumsan nec nec turpis. Fusce interdum, orci id porta viverra, sem lorem porta
nibh, eget bibendum ligula sapien sit amet orci. Maecenas lobortis lorem dui, a
volutpat nunc accumsan at. Curabitur ac auctor ante, et convallis diam. Donec eget
mi consectetur, pharetra urna et, volutpat nibh.`}
/>
<Stepper.Step label="Step 3" description="Get full access" />
<Stepper.Step
label="Step 4"
description={`Curabitur in neque dignissim, accumsan ante et, aliquam ex. Mauris nibh tortor,
blandit sit amet eleifend sed, convallis in erat. Lorem ipsum dolor sit amet,
consectetur adipiscing elit. In hac habitasse platea dictumst. Integer feugiat elit
vel neque tincidunt semper. Pellentesque euismod dignissim massa, ac venenatis ipsum
vulputate mattis. Integer a efficitur ligula. Fusce lacinia lacus at sem luctus
accumsan nec nec turpis. Fusce interdum, orci id porta viverra, sem lorem porta
nibh, eget bibendum ligula sapien sit amet orci. Maecenas lobortis lorem dui, a
volutpat nunc accumsan at. Curabitur ac auctor ante, et convallis diam. Donec eget
mi consectetur, pharetra urna et, volutpat nibh. Integer sit amet diam ligula.
Phasellus ex purus, dictum non purus ut, viverra maximus sem. Sed luctus eget massa
vitae dapibus. Sed ante tortor, viverra at urna et, feugiat scelerisque dolor. Fusce lacinia lacus at sem luctus
accumsan nec nec turpis. Fusce interdum, orci id porta viverra, sem lorem porta
nibh, eget bibendum ligula sapien sit amet orci. Maecenas lobortis lorem dui, a
volutpat nunc accumsan at. Curabitur ac auctor ante, et convallis diam. Donec eget
mi consectetur, pharetra urna et, volutpat nibh.`}
/>
<Stepper.Step
label="Step 5"
description={`Curabitur in neque dignissim, accumsan ante et, aliquam ex. Mauris nibh tortor,
blandit sit amet eleifend sed, convallis in erat. Lorem ipsum dolor sit amet,
consectetur adipiscing elit. In hac habitasse platea dictumst. Integer feugiat elit
vel neque tincidunt semper. Pellentesque euismod dignissim massa, ac venenatis ipsum
vulputate mattis. Integer a efficitur ligula. Fusce lacinia lacus at sem luctus
accumsan nec nec turpis. Fusce interdum, orci id porta viverra, sem lorem porta
nibh, eget bibendum ligula sapien sit amet orci. Maecenas lobortis lorem dui, a
volutpat nunc accumsan at. Curabitur ac auctor ante, et convallis diam. Donec eget
mi consectetur, pharetra urna et, volutpat nibh. Integer sit amet diam ligula.
Phasellus ex purus, dictum non purus ut, viverra maximus sem. Sed luctus eget massa
vitae dapibus. Sed ante tortor, viverra at urna et, feugiat scelerisque dolor. Fusce lacinia lacus at sem luctus
accumsan nec nec turpis. Fusce interdum, orci id porta viverra, sem lorem porta
nibh, eget bibendum ligula sapien sit amet orci. Maecenas lobortis lorem dui, a
volutpat nunc accumsan at. Curabitur ac auctor ante, et convallis diam. Donec eget
mi consectetur, pharetra urna et, volutpat nibh.`}
/>
<Stepper.Step label="Step 6" description="Get full access" />
</Stepper>
</div>
</div>
Expand Down
2 changes: 1 addition & 1 deletion src/mantine-core/src/Stepper/Stepper.tsx
Expand Up @@ -134,7 +134,7 @@ export const Stepper: StepperComponent = forwardRef<HTMLDivElement, StepperProps
})
);

if (index !== _children.length - 1) {
if (orientation === 'horizontal' && index !== _children.length - 1) {
acc.push(
<div
className={cx(classes.separator, { [classes.separatorActive]: index < active })}
Expand Down
2 changes: 2 additions & 0 deletions src/mantine-styles-api/src/styles-api/Stepper.styles-api.ts
Expand Up @@ -4,7 +4,9 @@ export const Stepper: Record<StepperStylesNames, string> = {
root: 'Root element',
steps: 'Steps controls wrapper',
separator: 'Separator line between step controls',
verticalSeparator: 'Vertical separator line between step controls',
separatorActive: 'Separator active modifier',
verticalSeparatorActive: 'Vertical separator active modifier',
content: 'Current step content wrapper',
stepWrapper: 'Wrapper for the step icon and separator',
step: 'Step control button',
Expand Down