|
1 |
| -.ds-accordion { |
2 |
| - --dsc-accordion-border-radius: min(1rem, var(--ds-border-radius-md)); |
3 |
| - --dsc-accordion-border-color: var(--ds-color-neutral-border-subtle); |
| 1 | +.ds-accordion-group { |
4 | 2 | --dsc-accordion-background: var(--ds-color-neutral-background-default);
|
5 |
| - --dsc-accordion-button-background: var(--ds-color-neutral-background-default); |
6 |
| - --dsc-accordion-button-background-open: var(--ds-color-neutral-background-subtle); |
7 |
| - --dsc-accordion-icon-background-hover: var(--ds-color-neutral-surface-default); |
8 |
| - --dsc-accordion-icon-background-active: var(--ds-color-neutral-surface-default); |
9 |
| - |
10 |
| - border-bottom: 1px solid var(--dsc-accordion-border-color); |
11 |
| - box-sizing: border-box; |
12 |
| - background-color: var(--dsc-accordion-background); |
13 |
| -} |
14 |
| - |
15 |
| -.ds-accordion--border { |
16 |
| - border: 1px solid var(--dsc-accordion-border-color); |
17 |
| - border-radius: var(--dsc-accordion-border-radius); |
18 |
| -} |
19 |
| - |
20 |
| -.ds-accordion__expand-icon { |
21 |
| - border-radius: var(--ds-border-radius-md); |
22 |
| - color: var(--ds-color-neutral-text-default); |
23 |
| -} |
24 |
| - |
25 |
| -.ds-accordion__content { |
26 |
| - padding: var(--ds-spacing-5, 1rem); |
27 |
| - overflow: hidden; |
28 |
| - text-overflow: ellipsis; |
29 |
| -} |
30 |
| - |
31 |
| -.ds-accordion__heading { |
32 |
| - margin: 0; |
33 |
| - width: 100%; |
34 |
| - display: flex; |
35 |
| - justify-content: flex-start; |
36 |
| - align-items: center; |
37 |
| - gap: var(--ds-spacing-2); |
38 |
| - text-align: left; |
39 |
| - border: none; |
40 |
| - border-top: 1px solid var(--dsc-accordion-border-color); |
41 |
| - background-color: var(--dsc-accordion-button-background); |
42 |
| -} |
43 |
| - |
44 |
| -.ds-accordion__button { |
45 |
| - cursor: pointer; |
46 |
| - width: 100%; |
47 |
| - display: flex; |
48 |
| - justify-content: flex-start; |
49 |
| - align-items: center; |
50 |
| - gap: var(--ds-spacing-2); |
51 |
| - margin: 0; |
52 |
| - padding: var(--ds-spacing-4); |
53 |
| - background-color: transparent; |
54 |
| - border: none; |
55 |
| - font-family: inherit; |
56 |
| -} |
57 |
| - |
58 |
| -.ds-accordion__item--open .ds-accordion__heading { |
59 |
| - background-color: var(--dsc-accordion-button-background-open); |
60 |
| -} |
61 |
| - |
62 |
| -.ds-accordion__item:focus-within { |
63 |
| - position: relative; |
64 |
| -} |
65 |
| - |
66 |
| -.ds-accordion__item:where(.ds-accordion__item--open) .ds-accordion__expand-icon { |
67 |
| - transform: rotateZ(180deg); |
68 |
| -} |
| 3 | + --dsc-accordion-border-radius: min(1rem, var(--ds-border-radius-md)); |
| 4 | + --dsc-accordion-border: 1px solid var(--ds-color-neutral-border-subtle); |
| 5 | + --dsc-accordion-chevron-gap: var(--ds-spacing-2); |
| 6 | + --dsc-accordion-chevron-size: var(--ds-spacing-6); |
| 7 | + --dsc-accordion-chevron-rotate: 0deg; |
| 8 | + --dsc-accordion-heading-background--hover: var(--ds-color-neutral-surface-default); |
| 9 | + --dsc-accordion-heading-background--open: var(--ds-color-neutral-background-subtle); |
| 10 | + --dsc-accordion-heading-background: var(--ds-color-neutral-background-default); |
| 11 | + --dsc-accordion-padding: var(--ds-spacing-4); |
| 12 | + |
| 13 | + &[data-border] > * { |
| 14 | + border: var(--dsc-accordion-border); |
| 15 | + |
| 16 | + &:first-child, |
| 17 | + &:first-child > :is(summary, u-summary) { |
| 18 | + border-top-left-radius: var(--dsc-accordion-border-radius); |
| 19 | + border-top-right-radius: var(--dsc-accordion-border-radius); |
| 20 | + } |
| 21 | + |
| 22 | + &:last-child, |
| 23 | + &:last-child:not([open]) > :is(summary, u-summary) { |
| 24 | + border-bottom-left-radius: var(--dsc-accordion-border-radius); |
| 25 | + border-bottom-right-radius: var(--dsc-accordion-border-radius); |
| 26 | + } |
| 27 | + } |
69 | 28 |
|
70 |
| -.ds-accordion__item:not(:first-child) .ds-accordion__heading { |
71 |
| - border-top: 1px solid var(--dsc-accordion-border-color); |
72 |
| -} |
| 29 | + &[data-color='subtle'] { |
| 30 | + --dsc-accordion-background: var(--ds-color-neutral-background-subtle); |
| 31 | + --dsc-accordion-border: 1px solid var(--ds-color-neutral-border-subtle); |
| 32 | + --dsc-accordion-heading-background--hover: var(--ds-color-neutral-surface-hover); |
| 33 | + --dsc-accordion-heading-background--open: var(--ds-color-neutral-surface-default); |
| 34 | + --dsc-accordion-heading-background: var(--ds-color-neutral-background-subtle); |
| 35 | + } |
73 | 36 |
|
74 |
| -.ds-accordion--border .ds-accordion__item:first-child .ds-accordion__heading { |
75 |
| - border-top: 0; |
76 |
| -} |
| 37 | + &[data-color='brand1'] { |
| 38 | + --dsc-accordion-background: var(--ds-color-brand1-background-subtle); |
| 39 | + --dsc-accordion-border: 1px solid var(--ds-color-brand1-border-subtle); |
| 40 | + --dsc-accordion-heading-background--hover: var(--ds-color-brand1-surface-hover); |
| 41 | + --dsc-accordion-heading-background--open: var(--ds-color-brand1-surface-default); |
| 42 | + --dsc-accordion-heading-background: var(--ds-color-brand1-surface-default); |
| 43 | + } |
77 | 44 |
|
78 |
| -.ds-accordion--border .ds-accordion__item:first-of-type .ds-accordion__heading:first-of-type { |
79 |
| - border-top-left-radius: var(--dsc-accordion-border-radius); |
80 |
| - border-top-right-radius: var(--dsc-accordion-border-radius); |
81 |
| -} |
| 45 | + &[data-color='brand2'] { |
| 46 | + --dsc-accordion-background: var(--ds-color-brand2-background-subtle); |
| 47 | + --dsc-accordion-border: 1px solid var(--ds-color-brand2-border-subtle); |
| 48 | + --dsc-accordion-heading-background--hover: var(--ds-color-brand2-surface-hover); |
| 49 | + --dsc-accordion-heading-background--open: var(--ds-color-brand2-surface-default); |
| 50 | + --dsc-accordion-heading-background: var(--ds-color-brand2-surface-default); |
| 51 | + } |
82 | 52 |
|
83 |
| -.ds-accordion--border .ds-accordion__item:last-of-type:not(.ds-accordion__item--open) .ds-accordion__heading:first-of-type { |
84 |
| - border-bottom-left-radius: var(--dsc-accordion-border-radius); |
85 |
| - border-bottom-right-radius: var(--dsc-accordion-border-radius); |
| 53 | + &[data-color='brand3'] { |
| 54 | + --dsc-accordion-background: var(--ds-color-brand3-background-subtle); |
| 55 | + --dsc-accordion-border: 1px solid var(--ds-color-brand3-border-subtle); |
| 56 | + --dsc-accordion-heading-background--hover: var(--ds-color-brand3-surface-hover); |
| 57 | + --dsc-accordion-heading-background--open: var(--ds-color-brand3-surface-default); |
| 58 | + --dsc-accordion-heading-background: var(--ds-color-brand3-surface-default); |
| 59 | + } |
86 | 60 | }
|
87 | 61 |
|
88 |
| -@media (hover: hover) and (pointer: fine) { |
89 |
| - .ds-accordion__heading:hover .ds-accordion__expand-icon { |
90 |
| - background-color: var(--dsc-accordion-icon-background-hover); |
| 62 | +.ds-accordion__item { |
| 63 | + background: var(--dsc-accordion-background); |
| 64 | + border-block: var(--dsc-accordion-border); |
| 65 | + |
| 66 | + & > :is(summary, u-summary) { |
| 67 | + background: var(--dsc-accordion-heading-background); |
| 68 | + box-sizing: border-box; |
| 69 | + cursor: pointer; |
| 70 | + list-style: none; |
| 71 | + outline: none; |
| 72 | + padding-block: var(--dsc-accordion-padding); |
| 73 | + padding-inline: calc(var(--dsc-accordion-padding) + var(--dsc-accordion-chevron-size) + var(--dsc-accordion-chevron-gap)) var(--dsc-accordion-padding); |
| 74 | + |
| 75 | + &:focus-visible { |
| 76 | + position: relative; /* Ensure foucs outline renders on top */ |
| 77 | + } |
| 78 | + |
| 79 | + &::before { |
| 80 | + background: currentcolor; |
| 81 | + border-radius: var(--ds-border-radius-md); |
| 82 | + content: ''; |
| 83 | + height: var(--dsc-accordion-chevron-size); |
| 84 | + mask: 50% / contain no-repeat |
| 85 | + url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5.97 9.47a.75.75 0 0 1 1.06 0L12 14.44l4.97-4.97a.75.75 0 1 1 1.06 1.06l-5.5 5.5a.75.75 0 0 1-1.06 0l-5.5-5.5a.75.75 0 0 1 0-1.06'/%3E%3C/svg%3E"); |
| 86 | + position: absolute; |
| 87 | + rotate: var(--dsc-accordion-chevron-rotate); |
| 88 | + margin-inline: calc( |
| 89 | + (var(--dsc-accordion-chevron-size) + var(--dsc-accordion-chevron-gap)) * -1 |
| 90 | + ); /* Using margin instead of top/left to avoid position: relative and to support dir="rtl" */ |
| 91 | + |
| 92 | + width: var(--dsc-accordion-chevron-size); |
| 93 | + } |
91 | 94 | }
|
92 | 95 |
|
93 |
| - .ds-accordion__item--open .ds-accordion__heading:hover .ds-accordion__expand-icon { |
94 |
| - background-color: var(--dsc-accordion-icon-background-active); |
| 96 | + & + & { |
| 97 | + border-top: 0; /* Skip border-top when .accordion__item is followed by .accordion__item */ |
95 | 98 | }
|
96 |
| -} |
97 | 99 |
|
98 |
| -.ds-accordion--neutral { |
99 |
| - --dsc-accordion-background: var(--ds-color-neutral-background-default); |
100 |
| - --dsc-accordion-button-background: var(--ds-color-neutral-background-default); |
101 |
| - --dsc-accordion-button-background-open: var(--ds-color-neutral-background-subtle); |
102 |
| - --dsc-accordion-icon-background-hover: var(--ds-color-neutral-surface-default); |
103 |
| -} |
104 |
| - |
105 |
| -.ds-accordion--subtle { |
106 |
| - --dsc-accordion-background: var(--ds-color-neutral-background-subtle); |
107 |
| - --dsc-accordion-border-color: var(--ds-color-neutral-border-default); |
108 |
| - --dsc-accordion-button-background: var(--ds-color-neutral-background-subtle); |
109 |
| - --dsc-accordion-button-background-open: var(--ds-color-neutral-surface-default); |
110 |
| - --dsc-accordion-icon-background-hover: var(--ds-color-neutral-surface-default); |
111 |
| - --dsc-accordion-icon-background-active: var(--ds-color-neutral-surface-active); |
112 |
| -} |
| 100 | + & > :not(summary, u-summary) { |
| 101 | + border-radius: inherit; |
| 102 | + padding: var(--ds-spacing-5, 1rem); |
| 103 | + } |
113 | 104 |
|
114 |
| -.ds-accordion--brand1 { |
115 |
| - --dsc-accordion-background: var(--ds-color-brand1-background-subtle); |
116 |
| - --dsc-accordion-border-color: var(--ds-color-brand1-border-subtle); |
117 |
| - --dsc-accordion-button-background: var(--ds-color-brand1-surface-default); |
118 |
| - --dsc-accordion-button-background-open: var(--ds-color-brand1-surface-hover); |
119 |
| - --dsc-accordion-icon-background-hover: var(--ds-color-brand1-surface-active); |
120 |
| - --dsc-accordion-icon-background-active: var(--ds-color-brand1-surface-active); |
121 |
| -} |
| 105 | + &[open] > :is(summary, u-summary) { |
| 106 | + background: var(--dsc-accordion-heading-background--open); |
| 107 | + } |
122 | 108 |
|
123 |
| -.ds-accordion--brand2 { |
124 |
| - --dsc-accordion-background: var(--ds-color-brand2-background-subtle); |
125 |
| - --dsc-accordion-border-color: var(--ds-color-brand2-border-subtle); |
126 |
| - --dsc-accordion-button-background: var(--ds-color-brand2-surface-default); |
127 |
| - --dsc-accordion-button-background-open: var(--ds-color-brand2-surface-hover); |
128 |
| - --dsc-accordion-icon-background-hover: var(--ds-color-brand2-surface-active); |
129 |
| - --dsc-accordion-icon-background-active: var(--ds-color-brand2-surface-active); |
130 |
| -} |
| 109 | + /* Make flip on click */ |
| 110 | + &[open]:not([data-chevron-open='false']) { |
| 111 | + --dsc-accordion-chevron-rotate: -180deg; |
| 112 | + } |
131 | 113 |
|
132 |
| -.ds-accordion--brand3 { |
133 |
| - --dsc-accordion-background: var(--ds-color-brand3-background-subtle); |
134 |
| - --dsc-accordion-border-color: var(--ds-color-brand3-border-subtle); |
135 |
| - --dsc-accordion-button-background: var(--ds-color-brand3-surface-default); |
136 |
| - --dsc-accordion-button-background-open: var(--ds-color-brand3-surface-hover); |
137 |
| - --dsc-accordion-icon-background-hover: var(--ds-color-brand3-surface-active); |
138 |
| - --dsc-accordion-icon-background-active: var(--ds-color-brand3-surface-active); |
| 114 | + @media (hover: hover) and (pointer: fine) { |
| 115 | + & > :is(summary, u-summary):hover { |
| 116 | + background: var(--dsc-accordion-heading-background--hover); |
| 117 | + } |
| 118 | + } |
139 | 119 | }
|
0 commit comments