Skip to content

Commit

Permalink
feat(rating): add component tokens (#11150)
Browse files Browse the repository at this point in the history
**Related Issue:**
[#7180](#7180)

## Summary

Add `rating` component tokens.

`--calcite-rating-spacing`: Specifies the amount of left and right
margin spacing between each item.
`--calcite-rating-color-hover`: Specifies the component's item color
when hovered or selected.
`--calcite-rating-color`: Specifies the component's item color.
`--calcite-rating-average-color`: Specifies the component's item color
when average is set.
`--calcite-rating-average-text-color`: Specifies the component's average
text color.
`--calcite-rating-count-text-color`: Specifies the component's count
text color.

---------

Co-authored-by: Ali Stump <[email protected]>
  • Loading branch information
aPreciado88 and alisonailea authored Jan 7, 2025
1 parent 04875f7 commit 6dbb559
Show file tree
Hide file tree
Showing 6 changed files with 101 additions and 11 deletions.
55 changes: 55 additions & 0 deletions packages/calcite-components/src/components/rating/rating.e2e.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,11 @@ import {
reflects,
renders,
t9n,
themed,
} from "../../tests/commonTests";
import { html } from "../../../support/formatting";
import { isElementFocused } from "../../tests/utils";
import { CSS } from "./resources";

describe("calcite-rating", () => {
describe("common tests", () => {
Expand Down Expand Up @@ -795,4 +798,56 @@ describe("calcite-rating", () => {
expect(element).toEqualAttribute("value", "2");
});
});

describe("theme", () => {
describe("default", () => {
themed(html`<calcite-rating></calcite-rating>`, {
"--calcite-rating-spacing": {
shadowSelector: `.${CSS.fieldSet}`,
targetProp: "gap",
},
"--calcite-rating-color": {
shadowSelector: `.${CSS.star}`,
targetProp: "color",
},
});
});
describe("selected", () => {
themed(html`<calcite-rating value="2" class=${CSS.hovered}></calcite-rating>`, {
"--calcite-rating-color-hover": [
{
shadowSelector: `.${CSS.star}`,
targetProp: "color",
state: { hover: { attribute: "class", value: CSS.hovered } },
},
{
shadowSelector: `.${CSS.selected}`,
targetProp: "color",
},
],
});
});
describe("average", () => {
themed(html`<calcite-rating average="3.65" count="240" show-chip></calcite-rating>`, {
"--calcite-rating-average-color": [
{
shadowSelector: `.${CSS.average}`,
targetProp: "color",
},
{
shadowSelector: `.${CSS.fraction}`,
targetProp: "color",
},
],
"--calcite-rating-average-text-color": {
shadowSelector: `.${CSS.numberAverage}`,
targetProp: "color",
},
"--calcite-rating-count-text-color": {
shadowSelector: `.${CSS.numberCount}`,
targetProp: "color",
},
});
});
});
});
27 changes: 17 additions & 10 deletions packages/calcite-components/src/components/rating/rating.scss
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,13 @@
*
* These properties can be overridden using the component's tag as selector.
*
* @prop --calcite-rating-spacing-unit: The amount of left and right margin spacing between each rating star.
* @prop --calcite-rating-spacing-unit: [Deprecated] Use `--calcite-rating-spacing`. Specifies the amount of left and right margin spacing between each item.
* @prop --calcite-rating-spacing: Specifies the amount of left and right margin spacing between each item.
* @prop --calcite-rating-color-hover: Specifies the component's item color when hovered or selected.
* @prop --calcite-rating-color: Specifies the component's item color.
* @prop --calcite-rating-average-color: Specifies the component's item color when average is set.
* @prop --calcite-rating-average-text-color: Specifies the component's average text color.
* @prop --calcite-rating-count-text-color: Specifies the component's count text color.
*/

:host {
Expand All @@ -15,17 +21,17 @@

:host([scale="s"]) {
@apply h-6;
--calcite-rating-spacing-unit: theme("spacing.1");
--calcite-internal-rating-spacing: theme("spacing.1");
}

:host([scale="m"]) {
@apply h-8;
--calcite-rating-spacing-unit: theme("spacing.2");
--calcite-internal-rating-spacing: theme("spacing.2");
}

:host([scale="l"]) {
@apply h-11;
--calcite-rating-spacing-unit: theme("spacing.3");
--calcite-internal-rating-spacing: theme("spacing.3");
}

:host([read-only]) {
Expand All @@ -38,7 +44,7 @@
border-width: 0;
padding: 0;
align-items: center;
gap: var(--calcite-rating-spacing-unit);
gap: var(--calcite-rating-spacing, var(--calcite-internal-rating-spacing));
}

.wrapper {
Expand All @@ -51,20 +57,20 @@
display: flex;
flex-direction: column;
cursor: pointer;
color: theme("borderColor.color.input");
color: var(--calcite-rating-color, theme("borderColor.color.input"));
&:focus {
@apply focus-outset;
}
}

.average,
.fraction {
color: theme("colors.warning");
color: var(--calcite-rating-average-color, theme("colors.warning"));
}

.hovered,
.selected {
color: theme("colors.brand");
color: var(--calcite-rating-color-hover, theme("colors.brand"));
}

.fraction {
Expand All @@ -84,13 +90,14 @@ calcite-chip {

.number--average {
font-weight: bold;
color: var(--calcite-rating-average-text-color);
}

.number--count {
color: var(--calcite-color-text-2);
color: var(--calcite-rating-count-text-color, var(--calcite-color-text-2));
font-style: italic;
&:not(:first-child) {
margin-inline-start: var(--calcite-rating-spacing-unit);
margin-inline-start: var(--calcite-rating-spacing, var(--calcite-internal-rating-spacing));
}
}

Expand Down
11 changes: 11 additions & 0 deletions packages/calcite-components/src/components/rating/resources.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
export const CSS = {
fieldSet: "fieldset",
star: "star",
hovered: "hovered",
selected: "selected",
average: "average",
fraction: "fraction",
numberAverage: "number--average",
numberCount: "number--count",
};

export const IDS = {
validationMessage: "validationMessage",
};
6 changes: 5 additions & 1 deletion packages/calcite-components/src/custom-theme.stories.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ import { pagination } from "./custom-theme/pagination";
import { popover, popoverTokens } from "./custom-theme/popover";
import { progress, progressTokens } from "./custom-theme/progress";
import { segmentedControl } from "./custom-theme/segmented-control";
import { rating, ratingTokens } from "./custom-theme/rating";
import { slider, sliderTokens } from "./custom-theme/slider";
import { switchTokens } from "./custom-theme/switch";
import { tabs, tabsBordered, tabsTokens } from "./custom-theme/tabs";
Expand Down Expand Up @@ -133,7 +134,9 @@ const kitchenSink = (args: Record<string, string>, useTestValues = false) =>
${avatarInitials} ${avatarThumbnail} ${progress} ${handle} ${textArea} ${popover} ${tile} ${tooltip}
${comboboxItem}
</div>
<div class="demo-column">${navigation} ${navigationLogos} ${navigationUsers} ${blockSection} ${block}</div>
<div class="demo-column">
${navigation} ${navigationLogos} ${navigationUsers} ${blockSection} ${block} ${rating}
</div>
<div class="demo-column"><div class="demo-column">${alert}</div></div>
</div>
</div>`;
Expand Down Expand Up @@ -167,6 +170,7 @@ const componentTokens = {
...noticeTokens,
...popoverTokens,
...progressTokens,
...ratingTokens,
...sliderTokens,
...switchTokens,
...tabsTokens,
Expand Down
12 changes: 12 additions & 0 deletions packages/calcite-components/src/custom-theme/rating.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { html } from "../../support/formatting";

export const ratingTokens = {
calciteRatingSpacing: "",
calciteRatingColorHover: "",
calciteRatingColor: "",
calciteRatingAverageColor: "",
calciteRatingAverageTextColor: "",
calciteRatingCountTextColor: "",
};

export const rating = html`<calcite-rating></calcite-rating>`;
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
*/
export function getTokenValue(token: string): string {
const tokenValueMap = {
spacing: "42px",
// granular patterns for the same token must be listed first to match correctly
background$: "rgb(252, 244, 52)",
"text-color$": "rgb(239, 118, 39)",
Expand Down

0 comments on commit 6dbb559

Please sign in to comment.