Skip to content

fix(meter): update layout tokens #2080

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

Merged
merged 11 commits into from
Aug 25, 2023
79 changes: 51 additions & 28 deletions components/progressbar/index.css
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,16 @@ governing permissions and limitations under the License.
--spectrum-progressbar-label-and-value-white: var(--spectrum-white);
--spectrum-progressbar-track-color-white: var(--spectrum-transparent-white-300);
--spectrum-progressbar-fill-color-white: var(--spectrum-white);

/* Meter */
--spectrum-meter-min-width: var(--spectrum-meter-minimum-width);
--spectrum-meter-max-width: var(--spectrum-meter-maximum-width);
--spectrum-meter-inline-size: var(--spectrum-meter-default-width);
--spectrum-meter-thickness-s: var(--spectrum-meter-thickness-small);
--spectrum-meter-thickness-l: var(--spectrum-meter-thickness-large);
--spectrum-meter-top-to-text: var(--spectrum-component-top-to-text);
}

/* Meter only supports size S and L */
.spectrum-ProgressBar--sizeS, .spectrum-Meter--sizeS {
--spectrum-progressbar-size-default: var(--spectrum-progressbar-size-2400);

Expand All @@ -70,7 +77,6 @@ governing permissions and limitations under the License.
--spectrum-progressbar-spacing-top-to-text: var(--spectrum-component-top-to-text-75);
}

/* Meter only supports size S and L */
.spectrum-ProgressBar--sizeL, .spectrum-Meter--sizeL {
--spectrum-progressbar-size-default: var(--spectrum-progressbar-size-2500);

Expand All @@ -89,12 +95,37 @@ governing permissions and limitations under the License.
--spectrum-progressbar-spacing-top-to-text: var(--spectrum-component-top-to-text-300);
}

@media (forced-colors: active) {
.spectrum-ProgressBar-track {
forced-color-adjust: none;
--highcontrast-progressbar-fill-color: ButtonText;
--highcontrast-progressbar-track-color: ButtonFace;
border: 1px solid ButtonText;
.spectrum-Meter {
--spectrum-progressbar-size-default: var(--mod-meter-inline-size, var(--spectrum-meter-inline-size));
--spectrum-progressbar-max-size: var(--mod-meter-max-width, var(--spectrum-meter-max-width));
--spectrum-progressbar-min-size: var(--mod-meter-min-width, var(--spectrum-meter-min-width));

/* Meter only supports size S and L */
&.spectrum-Meter--sizeS {
--spectrum-progressbar-thickness: var(--spectrum-meter-thickness-s);
}

&.spectrum-Meter--sizeL {
--spectrum-progressbar-thickness: var(--spectrum-meter-thickness-l);
--spectrum-progressbar-spacing-top-to-text: var(--spectrum-component-top-to-text-75);
}

&.is-positive {
.spectrum-ProgressBar-fill {
background-color: var(--highcontrast-progressbar-fill-color, var(--mod-progressbar-fill-color-positive, var(--spectrum-progressbar-fill-color-positive)));
}
}

&.is-notice {
.spectrum-ProgressBar-fill {
background-color: var(--highcontrast-progressbar-fill-color, var(--mod-progressbar-fill-color-notice, var(--spectrum-progressbar-fill-color-notice)));
}
}

&.is-negative {
.spectrum-ProgressBar-fill {
background-color: var(--highcontrast-progressbar-fill-color, var(--mod-progressbar-fill-color-negative, var(--spectrum-progressbar-fill-color-negative)));
}
}
}

Expand Down Expand Up @@ -148,31 +179,14 @@ governing permissions and limitations under the License.
block-size: var(--mod-progressbar-thickness, var(--spectrum-progressbar-thickness));
border-radius: var(--spectrum-progressbar-corner-radius);

background: var(--highcontrast-progressbar-track-color, var(--mod-progressbar-track-color, var(--spectrum-progressbar-track-color)));
}

/* Fill variants */
&.is-positive {
.spectrum-ProgressBar-fill {
background: var(--highcontrast-progressbar-fill-color, var(--mod-progressbar-fill-color-positive, var(--spectrum-progressbar-fill-color-positive)));
}
}
&.is-notice {
.spectrum-ProgressBar-fill {
background: var(--highcontrast-progressbar-fill-color, var(--mod-progressbar-fill-color-notice, var(--spectrum-progressbar-fill-color-notice)));
}
}
&.is-negative {
.spectrum-ProgressBar-fill {
background: var(--highcontrast-progressbar-fill-color, var(--mod-progressbar-fill-color-negative, var(--spectrum-progressbar-fill-color-negative)));
}
background-color: var(--highcontrast-progressbar-track-color, var(--mod-progressbar-track-color, var(--spectrum-progressbar-track-color)));
}

.spectrum-ProgressBar-fill {
border: none;
block-size: var(--mod-progressbar-thickness, var(--spectrum-progressbar-thickness));
transition: width 1s;
background: var(--highcontrast-progressbar-fill-color, var(--mod-progressbar-fill-color, var(--spectrum-progressbar-fill-color)));
background-color: var(--highcontrast-progressbar-fill-color, var(--mod-progressbar-fill-color, var(--spectrum-progressbar-fill-color)));
}

&--indeterminate .spectrum-ProgressBar-fill {
Expand Down Expand Up @@ -211,7 +225,7 @@ governing permissions and limitations under the License.
&--staticWhite {
.spectrum-ProgressBar-fill {
color: var(--mod-progressbar-label-and-value-white, var(--spectrum-progressbar-label-and-value-white));
background: var(--mod-progressbar-fill-color-white, var(--spectrum-progressbar-fill-color-white));
background-color: var(--mod-progressbar-fill-color-white, var(--spectrum-progressbar-fill-color-white));
}

.spectrum-ProgressBar-label,
Expand Down Expand Up @@ -255,3 +269,12 @@ governing permissions and limitations under the License.
transform: translate(calc(-1 * var(--mod-progressbar-size-default, var(--spectrum-progressbar-size-default))));
}
}

@media (forced-colors: active) {
.spectrum-ProgressBar-track {
forced-color-adjust: none;
--highcontrast-progressbar-fill-color: ButtonText;
--highcontrast-progressbar-track-color: ButtonFace;
border: 1px solid ButtonText;
}
}
22 changes: 13 additions & 9 deletions components/progressbar/metadata/meter.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,17 @@ sections:
- name: Custom Properties API
description: |
This component can be modified via its `--mod-*` prefixed custom properties. A list of those prefixed custom properties can be found <a href="https://github.com/adobe/spectrum-css/tree/main/components/progressbar/metadata/mods.md">here</a>.
- name: Migration Guide
description: |
### spectrum-Meter class
Meter now uses the class `spectrum-Meter` on the parent `div`
examples:
- id: meter-sizes
name: Sizing
markup: |
<div class="spectrum-Examples" style="flex-direction: column;">
<div class="spectrum-Examples-item">
<div class="spectrum-ProgressBar spectrum-Meter--sizeS is-positive" value="50" role="progressbar" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100" style="width: 200px;">
<div class="spectrum-ProgressBar spectrum-Meter spectrum-Meter--sizeS is-positive" value="50" role="progressbar" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100">
<div class="spectrum-FieldLabel spectrum-FieldLabel--sizeS spectrum-ProgressBar-label">Storage Space</div>
<div class="spectrum-FieldLabel spectrum-FieldLabel--sizeS spectrum-ProgressBar-percentage">50%</div>
<div class="spectrum-ProgressBar-track">
Expand All @@ -28,7 +32,7 @@ examples:
</div>
</br>
<div class="spectrum-Examples-item" style="margin-bottom: 20px;">
<div class="spectrum-ProgressBar spectrum-Meter--sizeL is-notice" value="80" role="progressbar" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100" style="width: 200px;">
<div class="spectrum-ProgressBar spectrum-Meter spectrum-Meter--sizeL is-notice" value="80" role="progressbar" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100">
<div class="spectrum-FieldLabel spectrum-FieldLabel--sizeL spectrum-ProgressBar-label">Storage Space</div>
<div class="spectrum-FieldLabel spectrum-FieldLabel--sizeL spectrum-ProgressBar-percentage">80%</div>
<div class="spectrum-ProgressBar-track">
Expand All @@ -39,7 +43,7 @@ examples:
name: Colors
markup: |
<div style="margin: 20px 0;">
<div class="spectrum-ProgressBar spectrum-Meter--sizeL is-positive" value="50" role="progressbar" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100">
<div class="spectrum-ProgressBar spectrum-Meter spectrum-Meter--sizeL is-positive" value="50" role="progressbar" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100">
<div class="spectrum-FieldLabel spectrum-FieldLabel--sizeL spectrum-ProgressBar-label">Storage Space</div>
<div class="spectrum-FieldLabel spectrum-FieldLabel--sizeL spectrum-ProgressBar-percentage">50%</div>
<div class="spectrum-ProgressBar-track">
Expand All @@ -48,7 +52,7 @@ examples:
</div>
</div>
<div style="margin: 20px 0;">
<div class="spectrum-ProgressBar spectrum-Meter--sizeL is-notice" value="80" role="progressbar" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100">
<div class="spectrum-ProgressBar spectrum-Meter spectrum-Meter--sizeL is-notice" value="80" role="progressbar" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100">
<div class="spectrum-FieldLabel spectrum-FieldLabel--sizeL spectrum-ProgressBar-label">Storage Space</div>
<div class="spectrum-FieldLabel spectrum-FieldLabel--sizeL spectrum-ProgressBar-percentage">80%</div>
<div class="spectrum-ProgressBar-track">
Expand All @@ -57,15 +61,15 @@ examples:
</div>
</div>
<div style="margin: 20px 0;">
<div class="spectrum-ProgressBar spectrum-Meter--sizeL is-negative" value="90" role="progressbar" aria-valuenow="90" aria-valuemin="0" aria-valuemax="100">
<div class="spectrum-ProgressBar spectrum-Meter spectrum-Meter--sizeL is-negative" value="90" role="progressbar" aria-valuenow="90" aria-valuemin="0" aria-valuemax="100">
<div class="spectrum-FieldLabel spectrum-FieldLabel--sizeL spectrum-ProgressBar-label">Storage Space</div>
<div class="spectrum-FieldLabel spectrum-FieldLabel--sizeL spectrum-ProgressBar-percentage">90%</div>
<div class="spectrum-ProgressBar-track">
<div class="spectrum-ProgressBar-fill" style="width: 90%;"></div>
</div>
</div>
<div style="margin: 20px 0;">
<div class="spectrum-ProgressBar spectrum-Meter--sizeL" value="40" role="progressbar" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100">
<div class="spectrum-ProgressBar spectrum-Meter spectrum-Meter--sizeL" value="40" role="progressbar" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100">
<div class="spectrum-FieldLabel spectrum-FieldLabel--sizeL spectrum-ProgressBar-label">Storage Space</div>
<div class="spectrum-FieldLabel spectrum-FieldLabel--sizeL spectrum-ProgressBar-percentage">40%</div>
<div class="spectrum-ProgressBar-track">
Expand All @@ -77,7 +81,7 @@ examples:
name: Neutral
markup: |
<div style="margin: 20px 0;">
<div class="spectrum-ProgressBar spectrum-Meter--sizeL is-positive" value="50" role="progressbar" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100">
<div class="spectrum-ProgressBar spectrum-Meter spectrum-Meter--sizeL is-positive" value="50" role="progressbar" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100">
<div class="spectrum-FieldLabel spectrum-FieldLabel--sizeL spectrum-ProgressBar-label">Storage Space</div>
<div class="spectrum-FieldLabel spectrum-FieldLabel--sizeL spectrum-ProgressBar-percentage">50%</div>
<div class="spectrum-ProgressBar-track">
Expand All @@ -89,7 +93,7 @@ examples:
name: Notice
markup: |
<div style="margin: 20px 0;">
<div class="spectrum-ProgressBar spectrum-Meter--sizeL is-notice" value="80" role="progressbar" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100">
<div class="spectrum-ProgressBar spectrum-Meter spectrum-Meter--sizeL is-notice" value="80" role="progressbar" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100">
<div class="spectrum-FieldLabel spectrum-FieldLabel--sizeL spectrum-ProgressBar-label">Storage Space</div>
<div class="spectrum-FieldLabel spectrum-FieldLabel--sizeL spectrum-ProgressBar-percentage">80%</div>
<div class="spectrum-ProgressBar-track">
Expand All @@ -101,7 +105,7 @@ examples:
name: Negative
markup: |
<div style="margin: 20px 0;">
<div class="spectrum-ProgressBar spectrum-Meter--sizeL is-negative" value="90" role="progressbar" aria-valuenow="90" aria-valuemin="0" aria-valuemax="100">
<div class="spectrum-ProgressBar spectrum-Meter spectrum-Meter--sizeL is-negative" value="90" role="progressbar" aria-valuenow="90" aria-valuemin="0" aria-valuemax="100">
<div class="spectrum-FieldLabel spectrum-FieldLabel--sizeL spectrum-ProgressBar-label">Storage Space</div>
<div class="spectrum-FieldLabel spectrum-FieldLabel--sizeL spectrum-ProgressBar-percentage">90%</div>
<div class="spectrum-ProgressBar-track">
Expand Down
3 changes: 3 additions & 0 deletions components/progressbar/metadata/mods.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
| Modifiable Custom Properties |
| ------------------------------------------------------- |
| `--mod-meter-inline-size` |
| `--mod-meter-max-width` |
| `--mod-meter-min-width` |
| `--mod-progressbar-animation-duration-indeterminate` |
| `--mod-progressbar-animation-ease-in-out-indeterminate` |
| `--mod-progressbar-fill-color` |
Expand Down
92 changes: 92 additions & 0 deletions components/progressbar/stories/meter.stories.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
// Import the component markup template
import { Template } from "./metertemplate";

export default {
title: "Components/Meter",
description:
"The meter component is a visual representations of a quantity or an achievement. Their progress is determined by user actions, rather than system actions.",
component: "ProgressBar",
argTypes: {
label: {
name: "Label",
type: { name: "string" },
table: {
type: { summary: "string" },
category: "Content",
},
control: "text",
},
value: {
name: "Percent value for fill",
type: { name: "number" },
table: {
type: { summary: "number" },
category: "Content",
},
control: { type: "range", min: 0, max: 100,},
},
meterFill: {
name: "Meter fill color",
type: { name: "string" },
table: {
type: { summary: "string" },
category: "Component",
},
options: ["notice", "positive", "negative", "default"],
control: "select",
},
size: {
name: "Meter size",
type: { name: "string" },
table: {
type: { summary: "string" },
category: "Component",
},
options: ["s", "l"],
control: "select",
},
},
args: {
rootClass: "spectrum-ProgressBar",
label: "Storage Space",
size: "s",
value: 50,
},
parameters: {
actions: {
handles: [],
},
status: {
type: process.env.MIGRATED_PACKAGES.includes("progressbar")
? "migrated"
: undefined,
},
},
};

export const Default = Template.bind({});
Default.args = {
meterFill: "default",
};

export const Large = Template.bind({});
Large.args = {
meterFill: "default",
size: "l",
};


export const Postive = Template.bind({});
Postive.args = {
meterFill: "positive",
};

export const Negative = Template.bind({});
Negative.args = {
meterFill: "negative",
};

export const Notice = Template.bind({});
Notice.args = {
meterFill: "notice",
};
51 changes: 51 additions & 0 deletions components/progressbar/stories/metertemplate.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import { html } from "lit";
import { classMap } from "lit/directives/class-map.js";
import { Template as FieldLabel } from "@spectrum-css/fieldlabel/stories/template.js";

import "../index.css";

export const Template = ({
rootClass = "spectrum-ProgressBar",
customClasses = [],
label,
value,
meterFill,
size = "s",
...globals
}) => {

return html`
<div
class=${classMap({
[rootClass]: true,
["spectrum-Meter"]: true,
[`spectrum-Meter--size${size?.toUpperCase()}`]: size,
[`is-${meterFill}`]: meterFill !== "default",
...customClasses.reduce((a, c) => ({ ...a, [c]: true }), {}),
})}
value="${value}%"
role="progressbar"
aria-valuenow="${value}%"
aria-valuemin="0"
aria-valuemax="100"
>
${FieldLabel({
...globals,
size,
label,
alignment: "",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can just remove this if you don't have anything to pass through

customClasses: [`${rootClass}-label`],
})}
${FieldLabel({
...globals,
size,
label: `${value}%`,
alignment: "",
customClasses: [`${rootClass}-percentage`],
})}
<div class="${rootClass}-track">
<div class="${rootClass}-fill" style="width: ${value}%;"></div>
</div>
</div>
`;
};
Loading