Skip to content

Commit a6eac81

Browse files
committed
feat(accordion): add quiet style
Adds the "quiet" option to accordion, which does not have dividers and shows the rounded corners on hover.
1 parent 85a5b8d commit a6eac81

File tree

5 files changed

+36
-4
lines changed

5 files changed

+36
-4
lines changed

.changeset/chatty-lands-attack.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ the spacing around the content area.
1111

1212
##### New features
1313

14+
- Adds the optional "quiet" style, which does not show dividers between accordion items.
1415
- Adds CSS transition to animate the rotation of the disclosure indicator when expanding and
1516
collapsing the accordion item.
1617

components/accordion/dist/metadata.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
".spectrum-Accordion--compact.spectrum-Accordion--sizeL",
77
".spectrum-Accordion--compact.spectrum-Accordion--sizeS",
88
".spectrum-Accordion--compact.spectrum-Accordion--sizeXL",
9+
".spectrum-Accordion--quiet",
910
".spectrum-Accordion--sizeL",
1011
".spectrum-Accordion--sizeS",
1112
".spectrum-Accordion--sizeXL",
@@ -107,6 +108,7 @@
107108
"--spectrum-accordion-disclosure-indicator-to-text-small",
108109
"--spectrum-accordion-disclosure-indicator-to-text-space",
109110
"--spectrum-accordion-divider-color",
111+
"--spectrum-accordion-divider-thickness",
110112
"--spectrum-accordion-edge-to-disclosure-indicator-space",
111113
"--spectrum-accordion-edge-to-text",
112114
"--spectrum-accordion-edge-to-text-space",

components/accordion/index.css

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
--spectrum-accordion-corner-radius: var(--spectrum-corner-radius-medium-size-medium);
2828
--spectrum-accordion-item-content-area-top-to-content: var(--spectrum-accordion-content-area-top-to-content);
2929
--spectrum-accordion-item-content-area-bottom-to-content: var(--spectrum-accordion-content-area-bottom-to-content);
30+
--spectrum-accordion-divider-thickness: var(--spectrum-divider-thickness-small);
3031

3132
/* Text header */
3233
--spectrum-accordion-item-header-font: var(--spectrum-sans-font-family-stack);
@@ -172,6 +173,10 @@
172173
}
173174
}
174175

176+
.spectrum-Accordion--quiet {
177+
--spectrum-accordion-divider-thickness: 0px;
178+
}
179+
175180
.spectrum-Accordion-item.is-disabled {
176181
--spectrum-accordion-item-header-cursor: default;
177182
--spectrum-accordion-background-color-default: transparent;
@@ -198,10 +203,10 @@
198203
margin: 0;
199204
min-block-size: var(--mod-accordion-item-min-block-size, var(--spectrum-accordion-item-min-block-size));
200205
min-inline-size: var(--mod-accordion-item-minimum-width, var(--spectrum-accordion-item-minimum-width));
201-
border-block-end: var(--mod-accordion-divider-thickness, var(--spectrum-divider-thickness-small)) solid var(--spectrum-accordion-divider-color);
206+
border-block-end: var(--mod-accordion-divider-thickness, var(--spectrum-accordion-divider-thickness)) solid var(--spectrum-accordion-divider-color);
202207

203208
&:first-child {
204-
border-block-start: var(--mod-accordion-divider-thickness, var(--spectrum-divider-thickness-small)) solid var(--spectrum-accordion-divider-color);
209+
border-block-start: var(--mod-accordion-divider-thickness, var(--spectrum-accordion-divider-thickness)) solid var(--spectrum-accordion-divider-color);
205210
}
206211
}
207212

@@ -292,6 +297,10 @@
292297
}
293298
}
294299

300+
.spectrum-Accordion--quiet .spectrum-Accordion-itemHeader {
301+
border-radius: var(--mod-accordion-corner-radius, var(--spectrum-accordion-corner-radius));
302+
}
303+
295304
@media (forced-colors: active) {
296305
.spectrum-Accordion {
297306
--spectrum-accordion-focus-indicator-color: Highlight;

components/accordion/stories/accordion.stories.js

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Template as Link } from "@spectrum-css/link/stories/template.js";
22
import { Sizes } from "@spectrum-css/preview/decorators";
33
import { disableDefaultModes } from "@spectrum-css/preview/modes";
4-
import { size } from "@spectrum-css/preview/types";
4+
import { isQuiet, size } from "@spectrum-css/preview/types";
55
import { Template as Typography } from "@spectrum-css/typography/stories/template.js";
66
import metadata from "../dist/metadata.json";
77
import packageJson from "../package.json";
@@ -47,13 +47,15 @@ export default {
4747
options: ["compact", "regular", "spacious"],
4848
control: "select",
4949
},
50+
isQuiet,
5051
},
5152
args: {
5253
rootClass: "spectrum-Accordion",
5354
size: "m",
5455
density: "regular",
5556
collapseAll: false,
5657
disableAll: false,
58+
isQuiet: false,
5759
},
5860
parameters: {
5961
// Prevent an innacurate depiction of width due to "centered" layout's use of flex on the body.
@@ -212,6 +214,22 @@ Spacious.parameters = {
212214
};
213215
Spacious.storyName = "Density: Spacious";
214216

217+
/**
218+
* The optional quiet style for accordion has no dividers between sections. This style works best when a clear layout
219+
* (vertical stack, table, grid) makes it easy see and understand. Too many quiet components in a small space can be
220+
* hard to differentiate. This can be applied by adding the `spectrum-Accordion--quiet` class alongside the
221+
* parent `spectrum-Accordion` class.
222+
*/
223+
export const Quiet = Template.bind({});
224+
Quiet.tags = ["!dev"];
225+
Quiet.args = {
226+
items: content,
227+
isQuiet: true,
228+
};
229+
Quiet.parameters = {
230+
chromatic: { disableSnapshot: true },
231+
};
232+
215233
/**
216234
* Each of the different sizes have varying font sizes, and tighter or looser vertical spacing between the rows. Medium is the default size.
217235
*/

components/accordion/stories/template.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ export const Template = ({
7676
rootClass = "spectrum-Accordion",
7777
size = "m",
7878
density = "regular",
79+
isQuiet = false,
7980
items = [],
8081
id = getRandomId("accordion"),
8182
disableAll = false,
@@ -90,9 +91,10 @@ export const Template = ({
9091
class="${classMap({
9192
[rootClass]: true,
9293
[`${rootClass}--size${size?.toUpperCase()}`]:
93-
typeof size !== "undefined",
94+
typeof size !== "undefined" && size !== "m",
9495
[`${rootClass}--${density}`]:
9596
typeof density !== "undefined" && density !== "regular",
97+
[`${rootClass}--quiet`]: isQuiet,
9698
...customClasses.reduce((a, c) => ({ ...a, [c]: true }), {}),
9799
})}"
98100
id=${ifDefined(id)}

0 commit comments

Comments
 (0)