Skip to content
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/yellow-wombats-battle.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@swisspost/design-system-components': patch
'@swisspost/design-system-styles': patch
---

Fixed collapsible/accordion styles that broke after Bootstrap removed several CSS custom properties.
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
@use '@swisspost/design-system-styles/basics';
@use '@swisspost/design-system-styles/components/accordion';
@use '@swisspost/design-system-styles/components/transitions';

Expand Down
2 changes: 1 addition & 1 deletion packages/demo/src/app/home/home.component.scss
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@
}

.accordion-button {
@include post.font-curve(post.$accordion-font-curve);
@include post.font-curve(post.$accordion-heading-font-curve);

small {
@include post.font-curve('tiny');
Expand Down
129 changes: 72 additions & 57 deletions packages/styles/src/components/accordion.scss
Original file line number Diff line number Diff line change
@@ -1,94 +1,109 @@
@forward './../variables/options';

@use './../lic/bootstrap-license';
@use './../themes/bootstrap/core' as *;
@use './../themes/bootstrap/accordion' as ba;
@use './../mixins/button' as button-mixins;
@use './../mixins/color' as color-mixins;
@use './../mixins/icons' as icon-mixins;
@use './../mixins/type' as type-mixins;
@use './../mixins/utilities' as utility-mixins;

@use './../mixins/type';
@use './../mixins/utilities';
@use './../variables/spacing';
@use './../variables/components/accordion';
@use './../variables/components/button';

.accordion-item {
border-right: 0;
border-left: 0;
background-color: transparent;
border-block-start: accordion.$accordion-border-width solid accordion.$accordion-border-color;
}

&:last-of-type {
border-bottom: 0;
}
.accordion-header {
@include type-mixins.font-curve(accordion.$accordion-header-font-curve);
font-weight: accordion.$accordion-header-font-weight;
line-height: accordion.$accordion-header-line-height;
margin: 0;
Comment thread
alizedebray marked this conversation as resolved.
}

.accordion-button {
@include type.font-curve(accordion.$accordion-font-curve);
@include button-mixins.reset-button;

background-color: transparent;
font-weight: accordion.$accordion-button-font-weight;
line-height: accordion.$accordion-button-line-height;
width: 100%;
position: relative;
padding-block: accordion.$accordion-button-padding;
padding-inline-start: accordion.$accordion-button-padding;
padding-inline-end: accordion.$accordion-button-padding + accordion.$accordion-icon-size;
text-align: start;

&:hover,
&:focus {
&:not(:disabled) {
color: accordion.$accordion-button-hover-color;
}
&:not(:disabled) {
cursor: accordion.$accordion-button-cursor;
}

&:disabled {
opacity: button.$btn-disabled-opacity !important;
opacity: accordion.$accordion-button-disabled-opacity;
}

&:focus {
outline: none;
box-shadow: accordion.$accordion-button-focus-box-shadow;
}

&::after {
@include icon-mixins.pi(accordion.$accordion-icon-name);
Comment thread
alizedebray marked this conversation as resolved.
Outdated
content: '';
display: block;
height: accordion.$accordion-icon-size;
width: accordion.$accordion-icon-size;
background-size: accordion.$accordion-icon-size;
background-position: center;
background-repeat: no-repeat;
position: absolute;
inset-inline-end: accordion.$accordion-button-padding;
inset-block-start: 50%;
transform: translateY(-50%);
transition: accordion.$accordion-icon-transition;

// TODO: find a way to style icon within web component on dark background
@include color-mixins.on-dark-background() {
filter: invert(1);
}
}

.accordion-item[open] &::after {
transform: accordion.$accordion-icon-transform;
&.collapsed::after {
transform: translateY(-50%) accordion.$accordion-icon-transform;
}

// style to improve hcm mode
@include utilities.high-contrast-mode() {
// TODO: find a way to style WHCM within web component
@include utility-mixins.high-contrast-mode() {
&:hover,
&:focus-visible {
&:not(:disabled) {
outline: spacing.$size-line solid Highlight;
outline: accordion.$accordion-border-width solid Highlight;
}
}

&:disabled {
opacity: 1 !important;
}
}
}

&::after {
background-image: $accordion-hcm-icon;
}

&:not(.collapsed)::after {
background-image: $accordion-hcm-icon;
.accordion-body {
padding: accordion.$accordion-body-padding;
border-block-start: accordion.$accordion-border-width solid accordion.$accordion-border-color;

// TODO: find a way to style headings within web component
Comment thread
alizedebray marked this conversation as resolved.
Outdated
@each $heading-size in (1 2 3 4 5 6) {
h#{$heading-size},
.h#{$heading-size} {
@include type-mixins.font-curve(accordion.$accordion-heading-font-curve);
margin: accordion.$accordion-heading-margin;
font-weight: accordion.$accordion-heading-font-weight;
}
}
}

.accordion-button,
.accordion-body {
padding-top: accordion.$accordion-body-padding-top;
padding-bottom: accordion.$accordion-body-padding-bottom;

h2,
h3,
h4,
h5,
h6 {
@include type.font-curve(accordion.$accordion-font-curve);

margin-top: accordion.$accordion-body-heading-margin-top;
margin-bottom: 0;
font-weight: accordion.$accordion-body-heading-font-weight;

&,
p {
&:first-child {
margin-top: 0;
}
> :first-child {
margin-block-start: 0 !important;
}

&:last-child {
margin-bottom: 0;
}
}
> :last-child {
margin-block-end: 0 !important;
}
}
46 changes: 32 additions & 14 deletions packages/styles/src/variables/components/_accordion.scss
Original file line number Diff line number Diff line change
@@ -1,35 +1,53 @@
@use './../spacing';
@use './../type';
@use './../../functions/icons';

@use './../animation';
@use './../color';
@use './../commons';
@use './../animation';
@use './../../functions/sizing';
@use './../../functions/icons';
@use './../spacing';
@use './../type';

$accordion-padding-x: spacing.$size-regular !default;
$accordion-border-color: color.$gray-10 !default;
@use './button';

$accordion-padding: spacing.$spacer !default;
$accordion-border-width: commons.$border-thick !default;
$accordion-border-color: color.$gray-10 !default;

$accordion-header-font-curve: 'regular' !default;
$accordion-header-font-weight: type.$font-weight-bold !default;
$accordion-header-line-height: type.$line-height-copy !default;

$accordion-button-cursor: pointer !default;
$accordion-button-padding: $accordion-padding !default;
$accordion-button-disabled-opacity: button.$btn-disabled-opacity !default;
$accordion-button-focus-box-shadow: button.$btn-focus-box-shadow !default;

$accordion-icon-name: 2112 !default;
$accordion-icon-size: spacing.$size-large !default;
$accordion-icon-transition: transform animation.$transition-base-timing !default;
$accordion-icon-transform: rotate(-180deg) !default;

$accordion-body-padding: spacing.$size-small-regular $accordion-padding spacing.$size-bigger-big !default;

$accordion-heading-margin: spacing.$size-bigger-big 0 0 !default;
$accordion-heading-font-curve: $accordion-header-font-curve !default;
$accordion-heading-font-weight: $accordion-header-font-weight !default;

// Deprecated
$accordion-padding-x: spacing.$size-regular !default;
$accordion-border-radius: 0 !default;
$accordion-font-curve: 'regular';

$accordion-body-padding-top: spacing.$size-small-regular !default;
$accordion-body-padding-bottom: spacing.$size-bigger-big !default;

$accordion-body-heading-margin-top: spacing.$size-bigger-big;
$accordion-body-heading-font-weight: type.$font-weight-bold;

$accordion-button-padding-y: spacing.$size-regular !default;
$accordion-button-color: color.$black !default;
$accordion-button-active-bg: transparent !default;
$accordion-button-active-color: color.$black !default;
$accordion-button-hover-color: color.$black !default;
$accordion-button-font-weight: type.$font-weight-bold !default;
$accordion-button-line-height: type.$line-height-copy !default;

$accordion-icon-width: spacing.$size-large !default;
$accordion-icon-transform: rotate(180deg) !default;
$accordion-icon-transition: transform animation.$transition-base-timing;

$_accordion-chevron: icons.get-colored-svg-url(2113, $accordion-button-color);
$_accordion-active-chevron: icons.get-colored-svg-url(2113, $accordion-button-active-color);
$_accordion-hcm-chevron: icons.get-colored-svg-url(2113, color.$white);
Expand Down
2 changes: 1 addition & 1 deletion pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.