diff --git a/.changeset/floppy-tigers-wait.md b/.changeset/floppy-tigers-wait.md
new file mode 100644
index 0000000000..ba72973327
--- /dev/null
+++ b/.changeset/floppy-tigers-wait.md
@@ -0,0 +1,7 @@
+---
+'@sl-design-system/progress-bar': minor
+---
+
+- Refactored to use new contextual tokens
+- Moved sub label (in main slot) above the progress bar
+- The text in the main slot in `error` variant is no longer the danger color. To communicate errors you can use the new `error` slot. That is placed underneath the progressbar and shown in a contrasting colour.
diff --git a/packages/components/progress-bar/src/progress-bar.scss b/packages/components/progress-bar/src/progress-bar.scss
index 6e30d7d00d..ec7df7d35b 100644
--- a/packages/components/progress-bar/src/progress-bar.scss
+++ b/packages/components/progress-bar/src/progress-bar.scss
@@ -1,54 +1,26 @@
-$variants: success, warning, error;
-
:host {
- --_bar-background: var(--sl-color-progressbar-background);
- --_bar-thickness: var(--sl-size-progressbar);
- --_border-radius: var(--sl-border-radius-full);
- --_gap: var(--sl-space-progressbar-vertical-gap);
- --_helper-color: var(--sl-color-input-helper-text-default);
- --_helper-color-error: var(--sl-color-progressbar-error-track);
- --_helper-font: var(--sl-text-input-field-label-hint-md);
--_indeterminate-duration: 20s;
- --_label-color: var(--sl-color-input-field-label-text-default);
- --_label-font: var(--sl-text-input-field-label-label-md);
- --_label-gap: var(--sl-space-progressbar-horizontal-gap);
- --_progress-background: var(--sl-color-progressbar-active-track);
- --_icon-fill: var(--sl-color-progressbar-active-track);
+ --_fill-color: var(--sl-color-border-selected);
@media (prefers-reduced-motion: no-preference) {
--_indeterminate-duration: 1.2s;
}
- color: var(--_helper-color);
display: flex;
flex-direction: column;
- font: var(--_helper-font);
- gap: var(--_gap);
+ gap: var(--sl-space-050);
}
-@each $variant in $variants {
- :host([variant='#{$variant}']:not([indeterminate])) {
- --_progress-background: var(--sl-color-progressbar-#{$variant}-track);
- --_icon-fill: var(--sl-color-progressbar-#{$variant}-track);
- }
-
- :host([variant='#{$variant}'][indeterminate]) .progress {
- --_progress-background: var(--sl-color-progressbar-#{$variant}-track);
- --_icon-fill: var(--sl-color-progressbar-#{$variant}-track);
-
- animation: none;
- inline-size: 100%;
- }
+:host([variant='success']) {
+ --_fill-color: var(--sl-color-border-positive-plain);
+}
- :host([variant='#{$variant}'][indeterminate]) {
- .label sl-icon {
- --sl-icon-fill-default: var(--sl-color-progressbar-#{$variant}-track);
- }
+:host([variant='warning']) {
+ --_fill-color: var(--sl-color-border-caution-plain);
+}
- .helper sl-icon {
- --sl-icon-fill-default: var(--sl-color-progressbar-#{$variant}-track);
- }
- }
+:host([variant='error']) {
+ --_fill-color: var(--sl-color-border-negative-plain);
}
:host([indeterminate]) .progress {
@@ -60,42 +32,34 @@ $variants: success, warning, error;
inline-size: 100%;
}
-:host([variant='error']) ::slotted(*) {
- color: var(--_helper-color-error);
-}
-
.label {
- color: var(--_label-color);
+ color: var(--sl-color-foreground-bold);
display: flex;
- font: var(--_label-font);
- gap: var(--_label-gap);
+ font: var(--sl-text-new-heading-sm);
+ gap: var(--sl-space-100);
justify-content: space-between;
+}
- sl-icon {
- --sl-icon-fill-default: var(--_icon-fill);
- }
+sl-icon {
+ --sl-icon-fill-default: var(--_fill-color);
}
.helper {
+ color: var(--sl-color-foreground-subtlest);
display: flex;
- gap: var(--_label-gap);
+ gap: var(--sl-space-100);
justify-content: space-between;
-
- sl-icon {
- --sl-icon-fill-default: var(--_icon-fill);
- }
}
-::slotted(*) {
- color: var(--_helper-color);
- font: var(--_helper-font);
+slot[name='error'] {
+ color: var(--sl-color-foreground-negative-plain);
}
.container {
align-items: stretch;
- background: var(--_bar-background);
- block-size: var(--_bar-thickness);
- border-radius: var(--_border-radius);
+ background: var(--sl-color-border-plain);
+ block-size: var(--sl-size-050);
+ border-radius: var(--sl-border-radius-full);
display: flex;
inline-size: 100%;
overflow: hidden;
@@ -103,8 +67,8 @@ $variants: success, warning, error;
}
.progress {
- background: var(--_progress-background);
- border-radius: var(--_border-radius);
+ background: var(--_fill-color);
+ border-radius: var(--sl-border-radius-full);
transform-origin: left;
transition:
400ms transform,
diff --git a/packages/components/progress-bar/src/progress-bar.stories.ts b/packages/components/progress-bar/src/progress-bar.stories.ts
index 9547d7ade2..538a293d82 100644
--- a/packages/components/progress-bar/src/progress-bar.stories.ts
+++ b/packages/components/progress-bar/src/progress-bar.stories.ts
@@ -38,7 +38,7 @@ export default {
render: ({ indeterminate, variant, value, label, slot }) => {
return html`