{
const accordionContent = html`
@@ -125,9 +126,9 @@ describe("calcite-accordion", () => {
Accordion Item Content
`);
- const icon1 = await page.find(`calcite-accordion-item[id='1'] >>> .${CSS.iconStart}`);
- const icon2 = await page.find(`calcite-accordion-item[id='2'] >>> .${CSS.iconStart}`);
- const icon3 = await page.find(`calcite-accordion-item[id='3'] >>> .${CSS.iconStart}`);
+ const icon1 = await page.find(`calcite-accordion-item[id='1'] >>> .${ACCORDION_ITEM_CSS.iconStart}`);
+ const icon2 = await page.find(`calcite-accordion-item[id='2'] >>> .${ACCORDION_ITEM_CSS.iconStart}`);
+ const icon3 = await page.find(`calcite-accordion-item[id='3'] >>> .${ACCORDION_ITEM_CSS.iconStart}`);
expect(icon1).not.toBe(null);
expect(icon2).toBe(null);
expect(icon3).not.toBe(null);
@@ -142,7 +143,7 @@ describe("calcite-accordion", () => {
const element = await page.find("calcite-accordion");
const [item1, item2, item3] = await element.findAll("calcite-accordion-item");
const [item1Content, item2Content, item3Content] = await element.findAll(
- `calcite-accordion-item >>> .${CSS.content}`,
+ `calcite-accordion-item >>> .${ACCORDION_ITEM_CSS.content}`,
);
expect(item1).not.toHaveAttribute("expanded");
@@ -166,7 +167,7 @@ describe("calcite-accordion", () => {
expect(element).toEqualAttribute("selection-mode", "multiple");
const [item1, item2, item3] = await element.findAll("calcite-accordion-item");
const [item1Content, item2Content, item3Content] = await element.findAll(
- `calcite-accordion-item >>> .${CSS.content}`,
+ `calcite-accordion-item >>> .${ACCORDION_ITEM_CSS.content}`,
);
await item1.click();
await item3.click();
@@ -191,7 +192,7 @@ describe("calcite-accordion", () => {
expect(element).toEqualAttribute("selection-mode", "single");
const [item1, item2, item3] = await element.findAll("calcite-accordion-item");
const [item1Content, item2Content, item3Content] = await element.findAll(
- `calcite-accordion-item >>> .${CSS.content}`,
+ `calcite-accordion-item >>> .${ACCORDION_ITEM_CSS.content}`,
);
await item1.click();
await item3.click();
@@ -240,7 +241,7 @@ describe("calcite-accordion", () => {
expect(element).toEqualAttribute("selection-mode", "single-persist");
const [item1, item2, item3] = await element.findAll("calcite-accordion-item");
const [item1Content, item2Content, item3Content] = await element.findAll(
- `calcite-accordion-item >>> .${CSS.content}`,
+ `calcite-accordion-item >>> .${ACCORDION_ITEM_CSS.content}`,
);
await item2.click();
@@ -267,7 +268,7 @@ describe("calcite-accordion", () => {
await page.waitForChanges();
const [item1, item2, item3] = await element.findAll("calcite-accordion-item");
const [item1Content, item2Content, item3Content] = await element.findAll(
- `calcite-accordion-item >>> .${CSS.content}`,
+ `calcite-accordion-item >>> .${ACCORDION_ITEM_CSS.content}`,
);
await item1.click();
await item3.click();
@@ -281,4 +282,17 @@ describe("calcite-accordion", () => {
expect(await item2Content.isVisible()).toBe(true);
expect(await item3Content.isVisible()).toBe(true);
});
+
+ describe("theme", () => {
+ themed(`${accordionContent}`, {
+ "--calcite-accordion-background-color": {
+ shadowSelector: `.${CSS.accordion}`,
+ targetProp: "backgroundColor",
+ },
+ "--calcite-accordion-border-color": {
+ shadowSelector: `.${CSS.accordion}`,
+ targetProp: "borderColor",
+ },
+ });
+ });
});
diff --git a/packages/calcite-components/src/components/accordion/accordion.scss b/packages/calcite-components/src/components/accordion/accordion.scss
index 896e5da332a..5f390cb0b05 100644
--- a/packages/calcite-components/src/components/accordion/accordion.scss
+++ b/packages/calcite-components/src/components/accordion/accordion.scss
@@ -1,41 +1,51 @@
-// scale variants for child
-:host([scale="s"]) {
- --calcite-accordion-item-spacing-unit: theme("spacing.1");
- --calcite-accordion-icon-margin: theme("spacing.2");
- --calcite-accordion-item-padding: var(--calcite-accordion-item-spacing-unit) theme("spacing.2");
- @apply text-n2h;
-}
-
-:host([scale="m"]) {
- --calcite-accordion-item-spacing-unit: theme("spacing.2");
- --calcite-accordion-icon-margin: theme("spacing.3");
- --calcite-accordion-item-padding: var(--calcite-accordion-item-spacing-unit) theme("spacing.3");
- @apply text-n1h;
-}
-
-:host([scale="l"]) {
- --calcite-accordion-item-spacing-unit: theme("spacing.3");
- --calcite-accordion-icon-margin: theme("spacing.4");
- --calcite-accordion-item-padding: var(--calcite-accordion-item-spacing-unit) theme("spacing.4");
- @apply text-0h;
-}
+/**
+ * CSS Custom Properties
+ *
+ * These properties can be overridden using the component's tag as selector.
+ *
+ * @prop --calcite-accordion-border-color: Specifies the component's border color.
+ * @prop --calcite-accordion-background-color: Specifies the component's background color.
+*/
:host {
@apply relative
block
max-w-full
leading-6;
- --calcite-accordion-item-border: theme("borderColor.color.2");
- --calcite-accordion-item-background: theme("backgroundColor.foreground.1");
+}
+
+.accordion {
+ @apply border border-solid border-b-0;
+ border-color: var(--calcite-accordion-border-color, theme("borderColor.color.2"));
+ background-color: var(--calcite-accordion-background-color, theme("backgroundColor.foreground.1"));
}
.accordion--transparent {
- --calcite-accordion-item-border: transparent;
- --calcite-accordion-item-background: transparent;
+ --calcite-accordion-border-color: transparent;
+ border-color: var(--calcite-color-transparent);
+ background-color: var(--calcite-color-transparent);
}
-.accordion {
- @apply border border-solid border-color-2 border-b-0;
+// scale variants for child
+:host([scale="s"]) {
+ --calcite-internal-accordion-item-spacing-unit: theme("spacing.1");
+ --calcite-internal-accordion-icon-margin: theme("spacing.2");
+ --calcite-internal-accordion-item-padding: var(--calcite-internal-accordion-item-spacing-unit) theme("spacing.2");
+ @apply text-n2h;
+}
+
+:host([scale="m"]) {
+ --calcite-internal-accordion-item-spacing-unit: theme("spacing.2");
+ --calcite-internal-accordion-icon-margin: theme("spacing.3");
+ --calcite-internal-accordion-item-padding: var(--calcite-internal-accordion-item-spacing-unit) theme("spacing.3");
+ @apply text-n1h;
+}
+
+:host([scale="l"]) {
+ --calcite-internal-accordion-item-spacing-unit: theme("spacing.3");
+ --calcite-internal-accordion-icon-margin: theme("spacing.4");
+ --calcite-internal-accordion-item-padding: var(--calcite-internal-accordion-item-spacing-unit) theme("spacing.4");
+ @apply text-0h;
}
@include base-component();
diff --git a/packages/calcite-components/src/components/accordion/accordion.stories.ts b/packages/calcite-components/src/components/accordion/accordion.stories.ts
index 122990c1642..583f21efba3 100644
--- a/packages/calcite-components/src/components/accordion/accordion.stories.ts
+++ b/packages/calcite-components/src/components/accordion/accordion.stories.ts
@@ -1,9 +1,11 @@
+// import { getVariableTestValue } from "../../tests/utils";
import { AccordionItem } from "../accordion-item/accordion-item";
import { modesDarkDefault } from "../../../.storybook/utils";
import { placeholderImage } from "../../../.storybook/placeholderImage";
import { iconNames } from "../../../.storybook/helpers";
import { html } from "../../../support/formatting";
import { ATTRIBUTES } from "../../../.storybook/resources";
+import { setCSSVariables } from "../../tests/utils/cssTokenValues";
import { Accordion } from "./accordion";
const { scale, appearance, selectionMode } = ATTRIBUTES;
@@ -216,3 +218,47 @@ const accordionItemsIconHeaderUseCases = iconHeaderUseCasesArr
export const longHeading_MediumIconForLargeAccordionItem_TestOnly = (): string => html`
${accordionItemsIconHeaderUseCases}
`;
+
+export const theming_TestOnly = (): string =>
+ html`
+
+
+
+ ${accordionItemContent}
+
+
+ ${accordionItemContent}
+
+
+ ${accordionItemContent}
+
+
+ ${accordionItemContent}
+
+
+
+
+
+ ${accordionItemContent}
+
+
+ ${accordionItemContent}
+
+
+ ${accordionItemContent}
+
+
+ ${accordionItemContent}
+
+
+
`;
diff --git a/packages/calcite-components/src/components/accordion/accordion.tsx b/packages/calcite-components/src/components/accordion/accordion.tsx
index 847c944d861..98c8fbe9358 100644
--- a/packages/calcite-components/src/components/accordion/accordion.tsx
+++ b/packages/calcite-components/src/components/accordion/accordion.tsx
@@ -12,6 +12,7 @@ import {
import { Appearance, Position, IconType, Scale, SelectionMode } from "../interfaces";
import { createObserver } from "../../utils/observers";
import { RequestedItem } from "./interfaces";
+import { CSS } from "./resources";
/**
* @slot - A slot for adding `calcite-accordion-item`s. `calcite-accordion` cannot be nested, however `calcite-accordion-item`s can.
*/
@@ -93,8 +94,8 @@ export class Accordion {
return (
diff --git a/packages/calcite-components/src/components/accordion/resources.ts b/packages/calcite-components/src/components/accordion/resources.ts
new file mode 100644
index 00000000000..a09df2575b4
--- /dev/null
+++ b/packages/calcite-components/src/components/accordion/resources.ts
@@ -0,0 +1,4 @@
+export const CSS = {
+ accordion: "accordion",
+ transparent: "accordion--transparent",
+};
diff --git a/packages/calcite-components/src/demos/_assets/demo-theme.ts b/packages/calcite-components/src/demos/_assets/demo-theme.ts
index 55c02899401..06850cacfeb 100644
--- a/packages/calcite-components/src/demos/_assets/demo-theme.ts
+++ b/packages/calcite-components/src/demos/_assets/demo-theme.ts
@@ -9,12 +9,12 @@
export function getTokenValue(token: string): string {
const tokenValueMap = {
background$: "rgb(252, 244, 52)",
- "text-color$": "rgb(239,118,39)",
+ "text-color$": "rgb(239, 118, 39)",
"border-color$": "rgb(156, 89, 209)",
- "background-color$": "rgb(44, 44, 44)",
+ "background-color$": "rgb(252, 244, 52)",
color$: "rgb(0, 191, 255)",
- highlighted$: "rgb(255, 105, 180)",
- selected$: "rgb(255, 255, 255)",
+ hover$: "rgb(255, 105, 180)",
+ pressed$: "rgb(44, 44, 44)",
shadow$:
"rgb(255, 255, 255) 0px 0px 0px 4px, rgb(255, 105, 180) 0px 0px 0px 5px inset, rgb(0, 191, 255) 0px 0px 0px 9px",
"z-index$": "42",
diff --git a/packages/calcite-components/src/demos/accordion.html b/packages/calcite-components/src/demos/accordion.html
index 72013ee02bb..212312cc7d3 100644
--- a/packages/calcite-components/src/demos/accordion.html
+++ b/packages/calcite-components/src/demos/accordion.html
@@ -904,6 +904,126 @@
Accordion
+
+
+
+
+