Skip to content
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

fix(Accordion): implement css adjustments and native details #2363

Merged
merged 32 commits into from
Sep 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
be59b75
fix: start implementing css adjustments and native details
eirikbacker Sep 2, 2024
e2938a4
fix: css rewrites
eirikbacker Sep 2, 2024
30a4b04
fix: support right-to-left text
eirikbacker Sep 2, 2024
add6679
fix: typo
eirikbacker Sep 2, 2024
33a9c06
chore: comment margin usage
eirikbacker Sep 2, 2024
e0cc806
Merge branch 'next' into fix/css-native-accordion
eirikbacker Sep 9, 2024
614d068
docs: update accordionheading
eirikbacker Sep 9, 2024
e50cef3
fix: typo
eirikbacker Sep 9, 2024
265c339
docs: update accordion usage
eirikbacker Sep 9, 2024
8254fc0
fix: animate content
eirikbacker Sep 9, 2024
d78035c
fix: better selector
eirikbacker Sep 9, 2024
c78aa98
fix: exports
eirikbacker Sep 9, 2024
c2682b1
fix: lint
eirikbacker Sep 9, 2024
a68d26b
Merge branch 'next' into fix/css-native-accordion
eirikbacker Sep 10, 2024
0b13e2d
fix: pr feedbacks
eirikbacker Sep 11, 2024
0b47c46
fix(Accordion): controlled onfound
eirikbacker Sep 11, 2024
15fd174
Merge branch 'next' into fix/css-native-accordion
eirikbacker Sep 11, 2024
a8f605a
fix(Accordion): follow same color logic as card
eirikbacker Sep 11, 2024
17cf8e3
fix(Accordion): adjust colors
eirikbacker Sep 12, 2024
092ea64
Merge branch 'next' into fix/css-native-accordion
eirikbacker Sep 13, 2024
f61f419
fix(Accordion): improve onfound implementation
eirikbacker Sep 13, 2024
f3c5a7e
Merge branch 'next' into fix/css-native-accordion
eirikbacker Sep 13, 2024
f7d8de4
Merge branch 'next' into fix/css-native-accordion
eirikbacker Sep 13, 2024
cbc1c89
fix(Accordion): types
eirikbacker Sep 13, 2024
c688748
docs(Accordion): add content
eirikbacker Sep 13, 2024
a466e8a
docs(Accordion): onfound description
eirikbacker Sep 16, 2024
2669b6d
Merge branch 'next' into fix/css-native-accordion
eirikbacker Sep 16, 2024
b99d8e9
fix(Accordion): make chevron animate with content
eirikbacker Sep 16, 2024
68b4b57
Merge branch 'next' into fix/css-native-accordion
eirikbacker Sep 16, 2024
f13325b
fix(Accordion): drop chevron animation
eirikbacker Sep 16, 2024
6228a65
chore(Accordion): update comment about chevron
eirikbacker Sep 16, 2024
35cac99
Merge branch 'next' into fix/css-native-accordion
eirikbacker Sep 16, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions apps/storefront/app/monstre/feilmeldinger/page.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import {
CardContent,
Heading,
Paragraph,
AccordionRoot,
Accordion,
AccordionItem,
AccordionContent,
AccordionHeading
Expand Down Expand Up @@ -183,11 +183,11 @@ Her må vi gjøre det så tydelig som mulig for brukeren at flere felt påvirker

I dette eksempelet har vi en gruppe med felt, der brukeren ikke nødvendigvis har alle opplysningene, men må fylle ut minst ett felt.

<AccordionRoot
<Accordion
color='neutral'
>
<AccordionItem>
<AccordionHeading level={3}>Eksempel på feilmelding som gjelder flere felt</AccordionHeading>
<AccordionHeading>Eksempel på feilmelding som gjelder flere felt</AccordionHeading>
<AccordionContent
style={{
paddingTop: '0px',
Expand Down Expand Up @@ -216,7 +216,7 @@ I dette eksempelet har vi en gruppe med felt, der brukeren ikke nødvendigvis ha
/>
</AccordionContent>
</AccordionItem>
</AccordionRoot>
</Accordion>

## Kode

Expand Down
10 changes: 5 additions & 5 deletions apps/theme/components/Previews/Components/Components.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -339,9 +339,9 @@ export const Components = () => {
<Heading size='xs' className={classes.cardTitle}>
Ofte stillte spørsmål
</Heading>
<Accordion.Root color='brand3' border className={classes.accordion}>
<Accordion color='brand3' border className={classes.accordion}>
<Accordion.Item>
<Accordion.Heading level={3}>
<Accordion.Heading>
Hvem kan registrere seg i Frivillighetsregisteret?
</Accordion.Heading>
<Accordion.Content>
Expand All @@ -353,7 +353,7 @@ export const Components = () => {
</Accordion.Content>
</Accordion.Item>
<Accordion.Item>
<Accordion.Heading level={3}>
<Accordion.Heading>
Hvordan går jeg fram for å registrere i Frivillighetsregisteret?
</Accordion.Heading>
<Accordion.Content>
Expand All @@ -363,7 +363,7 @@ export const Components = () => {
</Accordion.Content>
</Accordion.Item>
<Accordion.Item>
<Accordion.Heading level={3}>
<Accordion.Heading>
Hvordan går jeg fram for å registrere i Frivillighetsregisteret?
</Accordion.Heading>
<Accordion.Content>
Expand All @@ -372,7 +372,7 @@ export const Components = () => {
registrene samtidig i Samordnet registermelding.
</Accordion.Content>
</Accordion.Item>
</Accordion.Root>
</Accordion>
</div>
<div className={cl(classes.card, classes.alert)}>
<Alert color='info'>
Expand Down
228 changes: 104 additions & 124 deletions packages/css/accordion.css
Original file line number Diff line number Diff line change
@@ -1,139 +1,119 @@
.ds-accordion {
--dsc-accordion-border-radius: min(1rem, var(--ds-border-radius-md));
--dsc-accordion-border-color: var(--ds-color-neutral-border-subtle);
.ds-accordion-group {
--dsc-accordion-background: var(--ds-color-neutral-background-default);
--dsc-accordion-button-background: var(--ds-color-neutral-background-default);
--dsc-accordion-button-background-open: var(--ds-color-neutral-background-subtle);
--dsc-accordion-icon-background-hover: var(--ds-color-neutral-surface-default);
--dsc-accordion-icon-background-active: var(--ds-color-neutral-surface-default);

border-bottom: 1px solid var(--dsc-accordion-border-color);
box-sizing: border-box;
background-color: var(--dsc-accordion-background);
}

.ds-accordion--border {
border: 1px solid var(--dsc-accordion-border-color);
border-radius: var(--dsc-accordion-border-radius);
}

.ds-accordion__expand-icon {
border-radius: var(--ds-border-radius-md);
color: var(--ds-color-neutral-text-default);
}

.ds-accordion__content {
padding: var(--ds-spacing-5, 1rem);
overflow: hidden;
text-overflow: ellipsis;
}

.ds-accordion__heading {
margin: 0;
width: 100%;
display: flex;
justify-content: flex-start;
align-items: center;
gap: var(--ds-spacing-2);
text-align: left;
border: none;
border-top: 1px solid var(--dsc-accordion-border-color);
background-color: var(--dsc-accordion-button-background);
}

.ds-accordion__button {
cursor: pointer;
width: 100%;
display: flex;
justify-content: flex-start;
align-items: center;
gap: var(--ds-spacing-2);
margin: 0;
padding: var(--ds-spacing-4);
background-color: transparent;
border: none;
font-family: inherit;
}

.ds-accordion__item--open .ds-accordion__heading {
background-color: var(--dsc-accordion-button-background-open);
}

.ds-accordion__item:focus-within {
position: relative;
}

.ds-accordion__item:where(.ds-accordion__item--open) .ds-accordion__expand-icon {
transform: rotateZ(180deg);
}
--dsc-accordion-border-radius: min(1rem, var(--ds-border-radius-md));
--dsc-accordion-border: 1px solid var(--ds-color-neutral-border-subtle);
--dsc-accordion-chevron-gap: var(--ds-spacing-2);
--dsc-accordion-chevron-size: var(--ds-spacing-6);
--dsc-accordion-chevron-rotate: 0deg;
--dsc-accordion-heading-background--hover: var(--ds-color-neutral-surface-default);
--dsc-accordion-heading-background--open: var(--ds-color-neutral-background-subtle);
--dsc-accordion-heading-background: var(--ds-color-neutral-background-default);
--dsc-accordion-padding: var(--ds-spacing-4);

&[data-border] > * {
border: var(--dsc-accordion-border);

&:first-child,
&:first-child > :is(summary, u-summary) {
border-top-left-radius: var(--dsc-accordion-border-radius);
border-top-right-radius: var(--dsc-accordion-border-radius);
}

&:last-child,
&:last-child:not([open]) > :is(summary, u-summary) {
border-bottom-left-radius: var(--dsc-accordion-border-radius);
border-bottom-right-radius: var(--dsc-accordion-border-radius);
}
}

.ds-accordion__item:not(:first-child) .ds-accordion__heading {
border-top: 1px solid var(--dsc-accordion-border-color);
}
&[data-color='subtle'] {
--dsc-accordion-background: var(--ds-color-neutral-background-subtle);
--dsc-accordion-border: 1px solid var(--ds-color-neutral-border-subtle);
--dsc-accordion-heading-background--hover: var(--ds-color-neutral-surface-hover);
--dsc-accordion-heading-background--open: var(--ds-color-neutral-surface-default);
--dsc-accordion-heading-background: var(--ds-color-neutral-background-subtle);
}

.ds-accordion--border .ds-accordion__item:first-child .ds-accordion__heading {
border-top: 0;
}
&[data-color='brand1'] {
--dsc-accordion-background: var(--ds-color-brand1-background-subtle);
--dsc-accordion-border: 1px solid var(--ds-color-brand1-border-subtle);
--dsc-accordion-heading-background--hover: var(--ds-color-brand1-surface-hover);
--dsc-accordion-heading-background--open: var(--ds-color-brand1-surface-default);
--dsc-accordion-heading-background: var(--ds-color-brand1-surface-default);
}

.ds-accordion--border .ds-accordion__item:first-of-type .ds-accordion__heading:first-of-type {
border-top-left-radius: var(--dsc-accordion-border-radius);
border-top-right-radius: var(--dsc-accordion-border-radius);
}
&[data-color='brand2'] {
--dsc-accordion-background: var(--ds-color-brand2-background-subtle);
--dsc-accordion-border: 1px solid var(--ds-color-brand2-border-subtle);
--dsc-accordion-heading-background--hover: var(--ds-color-brand2-surface-hover);
--dsc-accordion-heading-background--open: var(--ds-color-brand2-surface-default);
--dsc-accordion-heading-background: var(--ds-color-brand2-surface-default);
}

.ds-accordion--border .ds-accordion__item:last-of-type:not(.ds-accordion__item--open) .ds-accordion__heading:first-of-type {
border-bottom-left-radius: var(--dsc-accordion-border-radius);
border-bottom-right-radius: var(--dsc-accordion-border-radius);
&[data-color='brand3'] {
--dsc-accordion-background: var(--ds-color-brand3-background-subtle);
--dsc-accordion-border: 1px solid var(--ds-color-brand3-border-subtle);
--dsc-accordion-heading-background--hover: var(--ds-color-brand3-surface-hover);
--dsc-accordion-heading-background--open: var(--ds-color-brand3-surface-default);
--dsc-accordion-heading-background: var(--ds-color-brand3-surface-default);
}
}

@media (hover: hover) and (pointer: fine) {
.ds-accordion__heading:hover .ds-accordion__expand-icon {
background-color: var(--dsc-accordion-icon-background-hover);
.ds-accordion__item {
background: var(--dsc-accordion-background);
border-block: var(--dsc-accordion-border);

& > :is(summary, u-summary) {
background: var(--dsc-accordion-heading-background);
box-sizing: border-box;
cursor: pointer;
list-style: none;
outline: none;
padding-block: var(--dsc-accordion-padding);
padding-inline: calc(var(--dsc-accordion-padding) + var(--dsc-accordion-chevron-size) + var(--dsc-accordion-chevron-gap)) var(--dsc-accordion-padding);

&:focus-visible {
position: relative; /* Ensure foucs outline renders on top */
}

&::before {
background: currentcolor;
border-radius: var(--ds-border-radius-md);
content: '';
height: var(--dsc-accordion-chevron-size);
mask: 50% / contain no-repeat
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");
position: absolute;
rotate: var(--dsc-accordion-chevron-rotate);
margin-inline: calc(
(var(--dsc-accordion-chevron-size) + var(--dsc-accordion-chevron-gap)) * -1
); /* Using margin instead of top/left to avoid position: relative and to support dir="rtl" */

width: var(--dsc-accordion-chevron-size);
}
}

.ds-accordion__item--open .ds-accordion__heading:hover .ds-accordion__expand-icon {
background-color: var(--dsc-accordion-icon-background-active);
& + & {
border-top: 0; /* Skip border-top when .accordion__item is followed by .accordion__item */
}
}

.ds-accordion--neutral {
--dsc-accordion-background: var(--ds-color-neutral-background-default);
--dsc-accordion-button-background: var(--ds-color-neutral-background-default);
--dsc-accordion-button-background-open: var(--ds-color-neutral-background-subtle);
--dsc-accordion-icon-background-hover: var(--ds-color-neutral-surface-default);
}

.ds-accordion--subtle {
--dsc-accordion-background: var(--ds-color-neutral-background-subtle);
--dsc-accordion-border-color: var(--ds-color-neutral-border-default);
--dsc-accordion-button-background: var(--ds-color-neutral-background-subtle);
--dsc-accordion-button-background-open: var(--ds-color-neutral-surface-default);
--dsc-accordion-icon-background-hover: var(--ds-color-neutral-surface-default);
--dsc-accordion-icon-background-active: var(--ds-color-neutral-surface-active);
}
& > :not(summary, u-summary) {
border-radius: inherit;
padding: var(--ds-spacing-5, 1rem);
}

.ds-accordion--brand1 {
--dsc-accordion-background: var(--ds-color-brand1-background-subtle);
--dsc-accordion-border-color: var(--ds-color-brand1-border-subtle);
--dsc-accordion-button-background: var(--ds-color-brand1-surface-default);
--dsc-accordion-button-background-open: var(--ds-color-brand1-surface-hover);
--dsc-accordion-icon-background-hover: var(--ds-color-brand1-surface-active);
--dsc-accordion-icon-background-active: var(--ds-color-brand1-surface-active);
}
&[open] > :is(summary, u-summary) {
background: var(--dsc-accordion-heading-background--open);
}

.ds-accordion--brand2 {
--dsc-accordion-background: var(--ds-color-brand2-background-subtle);
--dsc-accordion-border-color: var(--ds-color-brand2-border-subtle);
--dsc-accordion-button-background: var(--ds-color-brand2-surface-default);
--dsc-accordion-button-background-open: var(--ds-color-brand2-surface-hover);
--dsc-accordion-icon-background-hover: var(--ds-color-brand2-surface-active);
--dsc-accordion-icon-background-active: var(--ds-color-brand2-surface-active);
}
/* Make flip on click */
&[open]:not([data-chevron-open='false']) {
--dsc-accordion-chevron-rotate: -180deg;
}

.ds-accordion--brand3 {
--dsc-accordion-background: var(--ds-color-brand3-background-subtle);
--dsc-accordion-border-color: var(--ds-color-brand3-border-subtle);
--dsc-accordion-button-background: var(--ds-color-brand3-surface-default);
--dsc-accordion-button-background-open: var(--ds-color-brand3-surface-hover);
--dsc-accordion-icon-background-hover: var(--ds-color-brand3-surface-active);
--dsc-accordion-icon-background-active: var(--ds-color-brand3-surface-active);
@media (hover: hover) and (pointer: fine) {
& > :is(summary, u-summary):hover {
background: var(--dsc-accordion-heading-background--hover);
}
}
}
3 changes: 2 additions & 1 deletion packages/react/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@
"@floating-ui/react": "0.26.23",
"@navikt/aksel-icons": "^6.14.0",
"@radix-ui/react-slot": "^1.1.0",
"@tanstack/react-virtual": "^3.10.7"
"@tanstack/react-virtual": "^3.10.7",
"@u-elements/u-details": "^0.0.5"
},
"devDependencies": {
"@rollup/plugin-commonjs": "^26.0.1",
Expand Down
4 changes: 2 additions & 2 deletions packages/react/src/components/Accordion/Accordion.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ Med `Accordion` kan du presentere mye innhold på liten plass i en eller flere r
```tsx
import { Accordion } from '@digdir/designsystemet-react';

<Accordion.Root>
<Accordion>
<Accordion.Item>
<Accordion.Heading>Accordion heading text</Accordion.Heading>
<Accordion.Content>Accordion content</Accordion.Content>
Expand All @@ -34,7 +34,7 @@ import { Accordion } from '@digdir/designsystemet-react';
<Accordion.Heading>Accordion heading text</Accordion.Heading>
<Accordion.Content>Accordion content</Accordion.Content>
</Accordion.Item>
</Accordion.Root>;
</Accordion>;
```

## Eksempler
Expand Down
Loading
Loading