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

test(storybook): support running visual tests in Chromatic #2570

Merged
merged 1 commit into from
Oct 10, 2024

Conversation

unekinn
Copy link
Contributor

@unekinn unekinn commented Oct 3, 2024

Closes #963

To better make use of visual tests:

  • "Avatar/In Dropdown" story renders with the dropdown open
  • Modals, comboboxes, dropdowns, and popovers are now opened
    automatically (when not in docs) through interaction tests
  • SkipLink: added a story showing the SkipLink when it has become visible
  • Switch: added examples of enabled and hovered switches
  • Added a default 1rem padding to stories, to account for normally
    overflowing content like focus styles, floating badges etc
  • Several stories have custom styling to ensure elements that have been
    removed from the normal layout flow (e.g. with absolute positioning)
    or are rendered outside the Story root element (e.g. with a React
    portal) are actually visible in the snapshots. To easier facilitate
    this, a global customStylesDecorator has been added, which adds styles
    configured through parameters.customStyles.

This commit also replaces story-specific decorators which only added
styling with parameter.customStyles, simplifying the stories a bit.

Visual tests on 320px wide screen revealed a bug where Combobox was
wider than the screen. This has been fixed.

With the changes that open modals, add pseudo states etc, some new
accessibility violations surfaced.

  • Fixed axe violation svg-img-alt in Dropdown stories
  • Disabled axe rule color-contrast when the pseudo-class :active is
    emulated through storybook-addon-pseudo-states, since we concluded
    that 4.5:1 text contrast during press actions is unnecessary

Chromatic is run automatically for pull requests through Github Actions
-- see .github/workflows/test.yml.

If you want to trigger visual tests from your own machine, add (or edit)
the file apps/storybook/.env. This file is in .gitignore and will not be
committed.

Add the following to .env:

CHROMATIC_PROJECT_TOKEN=<token>

Replace <token> with the token found here, under "Setup Chromatic with this project token".

Then run these commands:

yarn build:storybook
yarn chromatic

You can also replace the last command with e.g.

yarn chromatic --no-only-changed --only-story-names "Komponenter/Modal/*"

...to only run tests for the Modal components

Copy link

changeset-bot bot commented Oct 3, 2024

🦋 Changeset detected

Latest commit: 1f61635

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 4 packages
Name Type
@digdir/designsystemet-css Patch
@digdir/designsystemet Patch
@digdir/designsystemet-theme Patch
@digdir/designsystemet-react Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Copy link
Contributor

github-actions bot commented Oct 3, 2024

Preview deployments for this pull request:

Storybook - 10. Oct 2024 - 11:17

Copy link
Contributor

github-actions bot commented Oct 3, 2024

Coverage Report

Status Category Percentage Covered / Total
🔵 Lines 59.34% 3734 / 6292
🔵 Statements 59.34% 3734 / 6292
🔵 Functions 87.23% 164 / 188
🔵 Branches 75.43% 519 / 688
File CoverageNo changed files found.
Generated in workflow #267 for commit 1f61635 by the Vitest Coverage Report Action

@unekinn unekinn force-pushed the test/setup-chromatic branch 2 times, most recently from c8a4097 to 92a7eb3 Compare October 4, 2024 13:29
@unekinn unekinn changed the title test(storybook): support running visual tests in chromatic test(storybook): support running visual tests in Chromatic Oct 4, 2024
@unekinn unekinn force-pushed the test/setup-chromatic branch 4 times, most recently from 395bd4a to c5289a1 Compare October 8, 2024 09:01
@unekinn unekinn marked this pull request as ready for review October 8, 2024 09:07
@unekinn unekinn force-pushed the test/setup-chromatic branch from a3748f6 to 80c8a76 Compare October 8, 2024 09:29
@@ -0,0 +1,8 @@
{
"$schema": "https://www.chromatic.com/config-file.schema.json",
"onlyChanged": true,
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Eg er usikker på om onlyChanged kanskje må settast false eller at vi må legge inn externals: ["packages/css", "pachages/theme"], for å sørge for at visuelle testar blir kjørt på nytt ved endringer i css og tema. Tenker å teste dette etter vi har fått inn baseline snapshots, før den tid vil alle stories lage nye snapshots uansett

@unekinn unekinn force-pushed the test/setup-chromatic branch 4 times, most recently from 13c3433 to eb75bba Compare October 10, 2024 08:13
Closes #963

To better make use of visual tests:
- "Avatar/In Dropdown" story renders with the dropdown open
- Modals, comboboxes, dropdowns, and popovers are now opened
  automatically (when not in docs) through interaction tests
- SkipLink: added a story showing the SkipLink when it has become visible
- Switch: added examples of enabled and hovered switches
- Added a default 1rem padding to stories, to account for normally
  overflowing content like focus styles, floating badges etc
- Several stories have custom styling to ensure elements that have been
  removed from the normal layout flow (e.g. with absolute positioning)
  or are rendered outside the Story root element (e.g. with a React
  portal) are actually visible in the snapshots. To easier facilitate
  this, a global customStylesDecorator has been added, which adds styles
  configured through `parameters.customStyles`.

This commit also replaces story-specific decorators which only added
styling with `parameter.customStyles`, simplifying the stories a bit.

Visual tests on 320px wide screen revealed a bug where Combobox was
wider than the screen. This has been fixed.

With the changes that open modals, add pseudo states etc, some new
accessibility violations surfaced.
- Fixed axe violation `svg-img-alt` in Dropdown stories
- Disabled axe rule `color-contrast` when the pseudo-class :active is
  emulated through `storybook-addon-pseudo-states`, since we concluded
  that 4.5:1 text contrast during press actions is unnecessary

Chromatic is run automatically for pull requests through Github Actions
-- see `.github/workflows/test.yml`.

If you want to trigger visual tests from your own machine, add (or edit)
the file `apps/storybook/.env`. This file is in .gitignore and will not be
committed.

Add the following to `.env`:
```
CHROMATIC_PROJECT_TOKEN=<token>
```

Replace `<token>` with the token found [here](https://www.chromatic.com/manage?appId=66fe736b9d639fe6801bf130&setup=true), under "Setup Chromatic with this project token".

Then run these commands:
```
yarn build:storybook
yarn chromatic
```

You can also replace the last command with e.g.
```
yarn chromatic --no-only-changed --only-story-names "Komponenter/Modal/*"
```
...to only run tests for the Modal components
@unekinn unekinn force-pushed the test/setup-chromatic branch from eb75bba to 1f61635 Compare October 10, 2024 09:13
Copy link
Member

@Barsnes Barsnes left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚀 🥮 👀

@unekinn unekinn merged commit 2238293 into next Oct 10, 2024
8 checks passed
@unekinn unekinn deleted the test/setup-chromatic branch October 10, 2024 10:16
unekinn added a commit that referenced this pull request Oct 10, 2024
Closes #963

To better make use of visual tests:
- "Avatar/In Dropdown" story renders with the dropdown open
- Modals, comboboxes, dropdowns, and popovers are now opened
  automatically (when not in docs) through interaction tests
- SkipLink: added a story showing the SkipLink when it has become
visible
- Switch: added examples of enabled and hovered switches
- Added a default 1rem padding to stories, to account for normally
  overflowing content like focus styles, floating badges etc
- Several stories have custom styling to ensure elements that have been
  removed from the normal layout flow (e.g. with absolute positioning)
  or are rendered outside the Story root element (e.g. with a React
  portal) are actually visible in the snapshots. To easier facilitate
  this, a global customStylesDecorator has been added, which adds styles
  configured through `parameters.customStyles`.

This commit also replaces story-specific decorators which only added
styling with `parameter.customStyles`, simplifying the stories a bit.

Visual tests on 320px wide screen revealed a bug where Combobox was
wider than the screen. This has been fixed.

With the changes that open modals, add pseudo states etc, some new
accessibility violations surfaced.
- Fixed axe violation `svg-img-alt` in Dropdown stories
- Disabled axe rule `color-contrast` when the pseudo-class :active is
  emulated through `storybook-addon-pseudo-states`, since we concluded
  that 4.5:1 text contrast during press actions is unnecessary

There is also a `yarn patch` applied to support axe running on multiple root elements
(to support portals) when run through the Storybook a11y addon "Accessibility" tab.
The patch is only necessary for the GUI, not for the CI tests which are run using `test-storybook`

Chromatic is run automatically for pull requests through Github Actions
-- see `.github/workflows/test.yml`.

If you want to trigger visual tests from your own machine, add (or edit)
the file `apps/storybook/.env`. This file is in .gitignore and will not
be
committed.

Add the following to `.env`:
```
CHROMATIC_PROJECT_TOKEN=<token>
```

Replace `<token>` with the token found
[here](https://www.chromatic.com/manage?appId=66fe736b9d639fe6801bf130&setup=true),
under "Setup Chromatic with this project token".

Then run these commands:
```
yarn build:storybook
yarn chromatic
```

You can also replace the last command with e.g.
```
yarn chromatic --no-only-changed --only-story-names "Komponenter/Modal/*"
```
...to only run tests for the Modal components
unekinn added a commit that referenced this pull request Oct 11, 2024
Closes #963

To better make use of visual tests:
- "Avatar/In Dropdown" story renders with the dropdown open
- Modals, comboboxes, dropdowns, and popovers are now opened
  automatically (when not in docs) through interaction tests
- SkipLink: added a story showing the SkipLink when it has become
visible
- Switch: added examples of enabled and hovered switches
- Added a default 1rem padding to stories, to account for normally
  overflowing content like focus styles, floating badges etc
- Several stories have custom styling to ensure elements that have been
  removed from the normal layout flow (e.g. with absolute positioning)
  or are rendered outside the Story root element (e.g. with a React
  portal) are actually visible in the snapshots. To easier facilitate
  this, a global customStylesDecorator has been added, which adds styles
  configured through `parameters.customStyles`.

This commit also replaces story-specific decorators which only added
styling with `parameter.customStyles`, simplifying the stories a bit.

Visual tests on 320px wide screen revealed a bug where Combobox was
wider than the screen. This has been fixed.

With the changes that open modals, add pseudo states etc, some new
accessibility violations surfaced.
- Fixed axe violation `svg-img-alt` in Dropdown stories
- Disabled axe rule `color-contrast` when the pseudo-class :active is
  emulated through `storybook-addon-pseudo-states`, since we concluded
  that 4.5:1 text contrast during press actions is unnecessary

There is also a `yarn patch` applied to support axe running on multiple root elements
(to support portals) when run through the Storybook a11y addon "Accessibility" tab.
The patch is only necessary for the GUI, not for the CI tests which are run using `test-storybook`

Chromatic is run automatically for pull requests through Github Actions
-- see `.github/workflows/test.yml`.

If you want to trigger visual tests from your own machine, add (or edit)
the file `apps/storybook/.env`. This file is in .gitignore and will not
be
committed.

Add the following to `.env`:
```
CHROMATIC_PROJECT_TOKEN=<token>
```

Replace `<token>` with the token found
[here](https://www.chromatic.com/manage?appId=66fe736b9d639fe6801bf130&setup=true),
under "Setup Chromatic with this project token".

Then run these commands:
```
yarn build:storybook
yarn chromatic
```

You can also replace the last command with e.g.
```
yarn chromatic --no-only-changed --only-story-names "Komponenter/Modal/*"
```
...to only run tests for the Modal components
mimarz pushed a commit that referenced this pull request Nov 20, 2024
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to next, this PR will
be updated.

⚠️⚠️⚠️⚠️⚠️⚠️

`next` is currently in **pre mode** so this branch has prereleases
rather than normal releases. If you want to exit prereleases, run
`changeset pre exit` on `next`.

⚠️⚠️⚠️⚠️⚠️⚠️

# Releases
## @digdir/[email protected]

### Major Changes

- Search: New compound API
([#2708](#2708))

- Radio + Checkbox:
([#2607](#2607))
    -   Use `label` prop instead of `children` as label text
- Remove `Radio.Group` and `Checkbox.Group` and use `Fieldset` instead

### Minor Changes

- React components and css now support custom colors through the
`data-color` attribute.
([#2703](#2703))

**BREAKING CHANGE**: All React components that had a `color` prop have
been changed to use `data-color`.

All<sup>1</sup> css targeting `data-color` has been changed to work with
all custom colors generated by the CLI.

`Avatar`, `Badge`, `Button`, and `Link` use
`--ds-color-accent-*`<sup>2</sup>, unless `data-color` is set directly
on the element.

For components that had a `color` prop, but defaulted to something other
than `"accent"`, `data-color` must also be set directly on the element.

All other components that defaulted to `"accent"`, or previously only
existed in `"accent"` color, now support `data-color`. They will also
inherit their color from the closest `data-color` attribute. If none is
found, they use `--ds-color-accent-*`<sup>2</sup>.

<sup>1</sup>: ...except `Alert`, which only supports `info`, `warning`,
`danger` and `success` colors.
<sup>2</sup>: If an `"accent"` color is not defined in the theme, the
`--ds-color-accent-*` variables will point to the first `main-color`.

- Implemented a more flexible system of semantic border-radius tokens.
([#2497](#2497))

### Patch Changes

- Accordion: Fix chevron abandoning parent in scroll container
([#2699](#2699))

- SkipLink: Add css variables
([#2626](#2626))

- ValidationMessage: Add icon when `error={true}`
([#2596](#2596))

- ValidationMessage: fix icon abandoning the component when scrolling
([#2646](#2646))

- Accordion: Add css variable for chevron
([#2626](#2626))

- CSS: base sizing on font-size so all components can have all sizes,
and naturally inherits size from context
([#2541](#2541))

- CSS: Move default background-color to `<body>` element
([#2754](#2754))

- Dropdown: Add `Dropdown.Button` for more explicit API
([#2694](#2694))

- Breadcrumbs: Add css variable for chevron
([#2626](#2626))

- Input: Sufficient color contrast for readonly
([#2621](#2621))

- Alert: fix icon abandoning the component when scrolling
([#2648](#2648))

- chip: Fix wrong font sizes
([#2595](#2595))

- Button: Fix SVG and images shrinking in flex containers
([#2612](#2612))

- Fieldset: Move to compound components `Fieldset.Legend` and
`Fieldset.Description`
([#2705](#2705))

- Table: add `z-index` to stickhy header
([#2761](#2761))

- Tooltip: Add more variables
([#2626](#2626))

- Button: Use font-weight `--ds-font-weight-medium`
([#2618](#2618))

- Field: Adds `<Field>` component wrapping and connecting internal form
elements for better accessibility
([#2502](#2502))

- Chip: Use correct `32px` height to align nicely with `<Tag>`
([#2683](#2683))

- Combobox: fix overflow on screens narrower than ~340px
([#2570](#2570))

- Label: Fix icon abandoning parent in scroll container
([#2699](#2699))

- Label: Use data attributes for styling
([#2588](#2588))

    ValidationMessage: Use data attributes for styling

- Select + Textarea:
([#2571](#2571))

- Remove `label`, `hideLabel`, `description`, `characterLimit` and
`error` as these will be part of `Field` API

- Pagination: Add css variable for chevron
([#2626](#2626))

- Field.Affix:
([#2793](#2793))

    -   Rename `Field.AffixWrapper` to `Field.Affixes`
    -   Support inputs with `size` attribute

- Remove `baseline` layer and fix layerorder for typography
([#2588](#2588))

- Modal backdrop was invisible in some browser versions. See
<https://caniuse.com/mdn-css_selectors_backdrop_inherit_from_originating_element>
for affected versions.
([#2615](#2615))

- Table: Add `Table.Foot` and style caption
([#2744](#2744))

## @digdir/[email protected]

### Major Changes

- Search: New compound API
([#2708](#2708))

- Dropdown: Add `Dropdown.Button` for more explicit API
([#2694](#2694))

- Switch: Use `label` prop instead of `children` to render label
([#2773](#2773))

- Fieldset: Move to compound components `Fieldset.Legend` and
`Fieldset.Description`
([#2705](#2705))

- React components and css now support custom colors through the
`data-color` attribute.
([#2703](#2703))

**BREAKING CHANGE**: All React components that had a `color` prop have
been changed to use `data-color`.

All<sup>1</sup> css targeting `data-color` has been changed to work with
all custom colors generated by the CLI.

`Avatar`, `Badge`, `Button`, and `Link` use
`--ds-color-accent-*`<sup>2</sup>, unless `data-color` is set directly
on the element.

For components that had a `color` prop, but defaulted to something other
than `"accent"`, `data-color` must also be set directly on the element.

All other components that defaulted to `"accent"`, or previously only
existed in `"accent"` color, now support `data-color`. They will also
inherit their color from the closest `data-color` attribute. If none is
found, they use `--ds-color-accent-*`<sup>2</sup>.

<sup>1</sup>: ...except `Alert`, which only supports `info`, `warning`,
`danger` and `success` colors.
<sup>2</sup>: If an `"accent"` color is not defined in the theme, the
`--ds-color-accent-*` variables will point to the first `main-color`.

- Input+Select: Use native HTML `size` prop instead of `htmlSize`
([#2697](#2697))

- Radio + Checkbox:
([#2607](#2607))
    -   Use `label` prop instead of `children` as label text
- Remove `Radio.Group` and `Checkbox.Group` and use `Fieldset` instead

### Patch Changes

- Dropdown: Rename `DropdownContext` to `DropdownTriggerContext`
([#2782](#2782))

- Textfield: Removed `htmlSize`, you can now use native `size`
([#2710](#2710))

- CSS: base sizing on font-size so all components can have all sizes,
and naturally inherits size from context
([#2541](#2541))

- Popover+Dropdown: Fix issue when combining controlled state with
changing child elements
([#2707](#2707))

- Modal: Rename `ModalContext` to `ModalTriggerContext`
([#2782](#2782))

- Input: Sufficient color contrast for readonly
([#2621](#2621))

- Popover: Make sure arrow does not leave the popover
([#2652](#2652))

- Modal: Fix `onClose` not being called
([#2622](#2622))

- Textfield: Refactored `characterLimit` to `counter` and now use new
`Field.Counter` sub-component
([#2710](#2710))

- useRadioGroup: Add hook to easily control groups of `<Radio>`
components ([#2739](#2739))

- useCheckboxGroup: Add hook to easily control groups of `<Checkbox>`
components ([#2739](#2739))

- Modal: Expose native close event object to onClose callback
([#2738](#2738))

- Textfield: Now works as expected with `data-size`
([#2710](#2710))

- Field: Adds `<Field>` component wrapping and connecting internal form
elements for better accessibility
([#2502](#2502))

- Textfield: Added `multiline` for switching between `input` and
`textarea` ([#2710](#2710))

- Tooltip: Be able to send `string` as children
([#2777](#2777))

- Textfield: Removed `hideLabel`, use `aria-label` or `aria-describedby`
for "hidden" labels
([#2710](#2710))

- Avatar: Fix `aria-hidden` being wrongly added to a fragment
([#2626](#2626))

- Chip: Use correct `32px` height to align nicely with `<Tag>`
([#2683](#2683))

- Label: Use data attributes for styling
([#2588](#2588))

    ValidationMessage: Use data attributes for styling

- Select + Textarea:
([#2571](#2571))

- Remove `label`, `hideLabel`, `description`, `characterLimit` and
`error` as these will be part of `Field` API

- Field.Affix:
([#2793](#2793))

    -   Rename `Field.AffixWrapper` to `Field.Affixes`
    -   Support inputs with `size` attribute

- Table: Add `Table.Foot` and style caption
([#2744](#2744))

- Popover: Rename `PopoverContext` to `PopoverTriggerContext`
([#2782](#2782))

- Spinner: `aria-label` required instead of `title` prop
([#2682](#2682))

- Textfield: Update to use `Field` internally
([#2710](#2710))

## @digdir/[email protected]

### Minor Changes

- React components and css now support custom colors through the
`data-color` attribute.
([#2703](#2703))

**BREAKING CHANGE**: All React components that had a `color` prop have
been changed to use `data-color`.

All<sup>1</sup> css targeting `data-color` has been changed to work with
all custom colors generated by the CLI.

`Avatar`, `Badge`, `Button`, and `Link` use
`--ds-color-accent-*`<sup>2</sup>, unless `data-color` is set directly
on the element.

For components that had a `color` prop, but defaulted to something other
than `"accent"`, `data-color` must also be set directly on the element.

All other components that defaulted to `"accent"`, or previously only
existed in `"accent"` color, now support `data-color`. They will also
inherit their color from the closest `data-color` attribute. If none is
found, they use `--ds-color-accent-*`<sup>2</sup>.

<sup>1</sup>: ...except `Alert`, which only supports `info`, `warning`,
`danger` and `success` colors.
<sup>2</sup>: If an `"accent"` color is not defined in the theme, the
`--ds-color-accent-*` variables will point to the first `main-color`.

- CSS variables: `--ds-color-*-{1,2,...,13,contrast-1,contrast-2}`,
which were generated from the `primitives` layer of design tokens, have
been removed since they are always 1-to-1 with the semantic layer. Use
the equivalent variables from the semantic layer instead
([#2641](#2641))

    Example, for the `neutral` scale:

    ```css
var(--ds-color-neutral-background-default); /* instead of:
var(--ds-color-neutral-1) */
var(--ds-color-neutral-background-subtle); /* instead of:
var(--ds-color-neutral-2) */
var(--ds-color-neutral-surface-default); /* instead of:
var(--ds-color-neutral-3) */
var(--ds-color-neutral-surface-hover); /* instead of:
var(--ds-color-neutral-4) */
var(--ds-color-neutral-surface-active); /* instead of:
var(--ds-color-neutral-5) */
var(--ds-color-neutral-border-subtle); /* instead of:
var(--ds-color-neutral-6) */
var(--ds-color-neutral-border-default); /* instead of:
var(--ds-color-neutral-7) */
var(--ds-color-neutral-border-strong); /* instead of:
var(--ds-color-neutral-8) */
var(--ds-color-neutral-base-default); /* instead of:
var(--ds-color-neutral-9) */
var(--ds-color-neutral-base-hover); /* instead of:
var(--ds-color-neutral-10) */
var(--ds-color-neutral-base-active); /* instead of:
var(--ds-color-neutral-11) */
var(--ds-color-neutral-text-subtle); /* instead of:
var(--ds-color-neutral-12) */
var(--ds-color-neutral-text-default); /* instead of:
var(--ds-color-neutral-13) */
var(--ds-color-neutral-contrast-default); /* instead of:
var(--ds-color-neutral-contrast-1) */
var(--ds-color-neutral-contrast-subtle); /* instead of:
var(--ds-color-neutral-contrast-2) */
    ```

    ...and similarly for `accent`, `brand1`, `brand2` and `brand3`.

- CLI now supports creating themes with 1 or more "main" colors, a
neutral color, and 1 or more "support" colors. The "main" and "support"
colors can have arbitrary names. There can not be more than 4 colors of
each category unless you're using Figma on the Enterprise plan, due to
plan-based restrictions on the number of variable modes per collection.
([#2733](#2733))

- Implemented a more flexible system of semantic border-radius tokens.
([#2497](#2497))

### Patch Changes

- Removed `init` command. Use `tokens create` instead.
([#2616](#2616))

- Update global colors
([#2662](#2662))

- chore: change default tokens build output folder
([`f8986b8316894ef5cd55f6ee232e4f6aaae6486a`](f8986b8))

## @digdir/[email protected]

### Minor Changes

- React components and css now support custom colors through the
`data-color` attribute.
([#2703](#2703))

**BREAKING CHANGE**: All React components that had a `color` prop have
been changed to use `data-color`.

All<sup>1</sup> css targeting `data-color` has been changed to work with
all custom colors generated by the CLI.

`Avatar`, `Badge`, `Button`, and `Link` use
`--ds-color-accent-*`<sup>2</sup>, unless `data-color` is set directly
on the element.

For components that had a `color` prop, but defaulted to something other
than `"accent"`, `data-color` must also be set directly on the element.

All other components that defaulted to `"accent"`, or previously only
existed in `"accent"` color, now support `data-color`. They will also
inherit their color from the closest `data-color` attribute. If none is
found, they use `--ds-color-accent-*`<sup>2</sup>.

<sup>1</sup>: ...except `Alert`, which only supports `info`, `warning`,
`danger` and `success` colors.
<sup>2</sup>: If an `"accent"` color is not defined in the theme, the
`--ds-color-accent-*` variables will point to the first `main-color`.

- CSS variables: `--ds-color-*-{1,2,...,13,contrast-1,contrast-2}`,
which were generated from the `primitives` layer of design tokens, have
been removed since they are always 1-to-1 with the semantic layer. Use
the equivalent variables from the semantic layer instead
([#2641](#2641))

    Example, for the `neutral` scale:

    ```css
var(--ds-color-neutral-background-default); /* instead of:
var(--ds-color-neutral-1) */
var(--ds-color-neutral-background-subtle); /* instead of:
var(--ds-color-neutral-2) */
var(--ds-color-neutral-surface-default); /* instead of:
var(--ds-color-neutral-3) */
var(--ds-color-neutral-surface-hover); /* instead of:
var(--ds-color-neutral-4) */
var(--ds-color-neutral-surface-active); /* instead of:
var(--ds-color-neutral-5) */
var(--ds-color-neutral-border-subtle); /* instead of:
var(--ds-color-neutral-6) */
var(--ds-color-neutral-border-default); /* instead of:
var(--ds-color-neutral-7) */
var(--ds-color-neutral-border-strong); /* instead of:
var(--ds-color-neutral-8) */
var(--ds-color-neutral-base-default); /* instead of:
var(--ds-color-neutral-9) */
var(--ds-color-neutral-base-hover); /* instead of:
var(--ds-color-neutral-10) */
var(--ds-color-neutral-base-active); /* instead of:
var(--ds-color-neutral-11) */
var(--ds-color-neutral-text-subtle); /* instead of:
var(--ds-color-neutral-12) */
var(--ds-color-neutral-text-default); /* instead of:
var(--ds-color-neutral-13) */
var(--ds-color-neutral-contrast-default); /* instead of:
var(--ds-color-neutral-contrast-1) */
var(--ds-color-neutral-contrast-subtle); /* instead of:
var(--ds-color-neutral-contrast-2) */
    ```

    ...and similarly for `accent`, `brand1`, `brand2` and `brand3`.

- Implemented a more flexible system of semantic border-radius tokens.
([#2497](#2497))

### Patch Changes

- tokens: Removed validationmessage and label typography styles
([#2698](#2698))

- Update global colors
([#2662](#2662))

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
mimarz pushed a commit that referenced this pull request Feb 21, 2025
Closes #963

To better make use of visual tests:
- "Avatar/In Dropdown" story renders with the dropdown open
- Modals, comboboxes, dropdowns, and popovers are now opened
  automatically (when not in docs) through interaction tests
- SkipLink: added a story showing the SkipLink when it has become
visible
- Switch: added examples of enabled and hovered switches
- Added a default 1rem padding to stories, to account for normally
  overflowing content like focus styles, floating badges etc
- Several stories have custom styling to ensure elements that have been
  removed from the normal layout flow (e.g. with absolute positioning)
  or are rendered outside the Story root element (e.g. with a React
  portal) are actually visible in the snapshots. To easier facilitate
  this, a global customStylesDecorator has been added, which adds styles
  configured through `parameters.customStyles`.

This commit also replaces story-specific decorators which only added
styling with `parameter.customStyles`, simplifying the stories a bit.

Visual tests on 320px wide screen revealed a bug where Combobox was
wider than the screen. This has been fixed.

With the changes that open modals, add pseudo states etc, some new
accessibility violations surfaced.
- Fixed axe violation `svg-img-alt` in Dropdown stories
- Disabled axe rule `color-contrast` when the pseudo-class :active is
  emulated through `storybook-addon-pseudo-states`, since we concluded
  that 4.5:1 text contrast during press actions is unnecessary

There is also a `yarn patch` applied to support axe running on multiple root elements
(to support portals) when run through the Storybook a11y addon "Accessibility" tab.
The patch is only necessary for the GUI, not for the CI tests which are run using `test-storybook`

Chromatic is run automatically for pull requests through Github Actions
-- see `.github/workflows/test.yml`.

If you want to trigger visual tests from your own machine, add (or edit)
the file `apps/storybook/.env`. This file is in .gitignore and will not
be
committed.

Add the following to `.env`:
```
CHROMATIC_PROJECT_TOKEN=<token>
```

Replace `<token>` with the token found
[here](https://www.chromatic.com/manage?appId=66fe736b9d639fe6801bf130&setup=true),
under "Setup Chromatic with this project token".

Then run these commands:
```
yarn build:storybook
yarn chromatic
```

You can also replace the last command with e.g.
```
yarn chromatic --no-only-changed --only-story-names "Komponenter/Modal/*"
```
...to only run tests for the Modal components
mimarz pushed a commit that referenced this pull request Feb 21, 2025
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to next, this PR will
be updated.

⚠️⚠️⚠️⚠️⚠️⚠️

`next` is currently in **pre mode** so this branch has prereleases
rather than normal releases. If you want to exit prereleases, run
`changeset pre exit` on `next`.

⚠️⚠️⚠️⚠️⚠️⚠️

# Releases
## @digdir/[email protected]

### Major Changes

- Search: New compound API
([#2708](#2708))

- Radio + Checkbox:
([#2607](#2607))
    -   Use `label` prop instead of `children` as label text
- Remove `Radio.Group` and `Checkbox.Group` and use `Fieldset` instead

### Minor Changes

- React components and css now support custom colors through the
`data-color` attribute.
([#2703](#2703))

**BREAKING CHANGE**: All React components that had a `color` prop have
been changed to use `data-color`.

All<sup>1</sup> css targeting `data-color` has been changed to work with
all custom colors generated by the CLI.

`Avatar`, `Badge`, `Button`, and `Link` use
`--ds-color-accent-*`<sup>2</sup>, unless `data-color` is set directly
on the element.

For components that had a `color` prop, but defaulted to something other
than `"accent"`, `data-color` must also be set directly on the element.

All other components that defaulted to `"accent"`, or previously only
existed in `"accent"` color, now support `data-color`. They will also
inherit their color from the closest `data-color` attribute. If none is
found, they use `--ds-color-accent-*`<sup>2</sup>.

<sup>1</sup>: ...except `Alert`, which only supports `info`, `warning`,
`danger` and `success` colors.
<sup>2</sup>: If an `"accent"` color is not defined in the theme, the
`--ds-color-accent-*` variables will point to the first `main-color`.

- Implemented a more flexible system of semantic border-radius tokens.
([#2497](#2497))

### Patch Changes

- Accordion: Fix chevron abandoning parent in scroll container
([#2699](#2699))

- SkipLink: Add css variables
([#2626](#2626))

- ValidationMessage: Add icon when `error={true}`
([#2596](#2596))

- ValidationMessage: fix icon abandoning the component when scrolling
([#2646](#2646))

- Accordion: Add css variable for chevron
([#2626](#2626))

- CSS: base sizing on font-size so all components can have all sizes,
and naturally inherits size from context
([#2541](#2541))

- CSS: Move default background-color to `<body>` element
([#2754](#2754))

- Dropdown: Add `Dropdown.Button` for more explicit API
([#2694](#2694))

- Breadcrumbs: Add css variable for chevron
([#2626](#2626))

- Input: Sufficient color contrast for readonly
([#2621](#2621))

- Alert: fix icon abandoning the component when scrolling
([#2648](#2648))

- chip: Fix wrong font sizes
([#2595](#2595))

- Button: Fix SVG and images shrinking in flex containers
([#2612](#2612))

- Fieldset: Move to compound components `Fieldset.Legend` and
`Fieldset.Description`
([#2705](#2705))

- Table: add `z-index` to stickhy header
([#2761](#2761))

- Tooltip: Add more variables
([#2626](#2626))

- Button: Use font-weight `--ds-font-weight-medium`
([#2618](#2618))

- Field: Adds `<Field>` component wrapping and connecting internal form
elements for better accessibility
([#2502](#2502))

- Chip: Use correct `32px` height to align nicely with `<Tag>`
([#2683](#2683))

- Combobox: fix overflow on screens narrower than ~340px
([#2570](#2570))

- Label: Fix icon abandoning parent in scroll container
([#2699](#2699))

- Label: Use data attributes for styling
([#2588](#2588))

    ValidationMessage: Use data attributes for styling

- Select + Textarea:
([#2571](#2571))

- Remove `label`, `hideLabel`, `description`, `characterLimit` and
`error` as these will be part of `Field` API

- Pagination: Add css variable for chevron
([#2626](#2626))

- Field.Affix:
([#2793](#2793))

    -   Rename `Field.AffixWrapper` to `Field.Affixes`
    -   Support inputs with `size` attribute

- Remove `baseline` layer and fix layerorder for typography
([#2588](#2588))

- Modal backdrop was invisible in some browser versions. See
<https://caniuse.com/mdn-css_selectors_backdrop_inherit_from_originating_element>
for affected versions.
([#2615](#2615))

- Table: Add `Table.Foot` and style caption
([#2744](#2744))

## @digdir/[email protected]

### Major Changes

- Search: New compound API
([#2708](#2708))

- Dropdown: Add `Dropdown.Button` for more explicit API
([#2694](#2694))

- Switch: Use `label` prop instead of `children` to render label
([#2773](#2773))

- Fieldset: Move to compound components `Fieldset.Legend` and
`Fieldset.Description`
([#2705](#2705))

- React components and css now support custom colors through the
`data-color` attribute.
([#2703](#2703))

**BREAKING CHANGE**: All React components that had a `color` prop have
been changed to use `data-color`.

All<sup>1</sup> css targeting `data-color` has been changed to work with
all custom colors generated by the CLI.

`Avatar`, `Badge`, `Button`, and `Link` use
`--ds-color-accent-*`<sup>2</sup>, unless `data-color` is set directly
on the element.

For components that had a `color` prop, but defaulted to something other
than `"accent"`, `data-color` must also be set directly on the element.

All other components that defaulted to `"accent"`, or previously only
existed in `"accent"` color, now support `data-color`. They will also
inherit their color from the closest `data-color` attribute. If none is
found, they use `--ds-color-accent-*`<sup>2</sup>.

<sup>1</sup>: ...except `Alert`, which only supports `info`, `warning`,
`danger` and `success` colors.
<sup>2</sup>: If an `"accent"` color is not defined in the theme, the
`--ds-color-accent-*` variables will point to the first `main-color`.

- Input+Select: Use native HTML `size` prop instead of `htmlSize`
([#2697](#2697))

- Radio + Checkbox:
([#2607](#2607))
    -   Use `label` prop instead of `children` as label text
- Remove `Radio.Group` and `Checkbox.Group` and use `Fieldset` instead

### Patch Changes

- Dropdown: Rename `DropdownContext` to `DropdownTriggerContext`
([#2782](#2782))

- Textfield: Removed `htmlSize`, you can now use native `size`
([#2710](#2710))

- CSS: base sizing on font-size so all components can have all sizes,
and naturally inherits size from context
([#2541](#2541))

- Popover+Dropdown: Fix issue when combining controlled state with
changing child elements
([#2707](#2707))

- Modal: Rename `ModalContext` to `ModalTriggerContext`
([#2782](#2782))

- Input: Sufficient color contrast for readonly
([#2621](#2621))

- Popover: Make sure arrow does not leave the popover
([#2652](#2652))

- Modal: Fix `onClose` not being called
([#2622](#2622))

- Textfield: Refactored `characterLimit` to `counter` and now use new
`Field.Counter` sub-component
([#2710](#2710))

- useRadioGroup: Add hook to easily control groups of `<Radio>`
components ([#2739](#2739))

- useCheckboxGroup: Add hook to easily control groups of `<Checkbox>`
components ([#2739](#2739))

- Modal: Expose native close event object to onClose callback
([#2738](#2738))

- Textfield: Now works as expected with `data-size`
([#2710](#2710))

- Field: Adds `<Field>` component wrapping and connecting internal form
elements for better accessibility
([#2502](#2502))

- Textfield: Added `multiline` for switching between `input` and
`textarea` ([#2710](#2710))

- Tooltip: Be able to send `string` as children
([#2777](#2777))

- Textfield: Removed `hideLabel`, use `aria-label` or `aria-describedby`
for "hidden" labels
([#2710](#2710))

- Avatar: Fix `aria-hidden` being wrongly added to a fragment
([#2626](#2626))

- Chip: Use correct `32px` height to align nicely with `<Tag>`
([#2683](#2683))

- Label: Use data attributes for styling
([#2588](#2588))

    ValidationMessage: Use data attributes for styling

- Select + Textarea:
([#2571](#2571))

- Remove `label`, `hideLabel`, `description`, `characterLimit` and
`error` as these will be part of `Field` API

- Field.Affix:
([#2793](#2793))

    -   Rename `Field.AffixWrapper` to `Field.Affixes`
    -   Support inputs with `size` attribute

- Table: Add `Table.Foot` and style caption
([#2744](#2744))

- Popover: Rename `PopoverContext` to `PopoverTriggerContext`
([#2782](#2782))

- Spinner: `aria-label` required instead of `title` prop
([#2682](#2682))

- Textfield: Update to use `Field` internally
([#2710](#2710))

## @digdir/designsystemet@1.0.0-next.36

### Minor Changes

- React components and css now support custom colors through the
`data-color` attribute.
([#2703](#2703))

**BREAKING CHANGE**: All React components that had a `color` prop have
been changed to use `data-color`.

All<sup>1</sup> css targeting `data-color` has been changed to work with
all custom colors generated by the CLI.

`Avatar`, `Badge`, `Button`, and `Link` use
`--ds-color-accent-*`<sup>2</sup>, unless `data-color` is set directly
on the element.

For components that had a `color` prop, but defaulted to something other
than `"accent"`, `data-color` must also be set directly on the element.

All other components that defaulted to `"accent"`, or previously only
existed in `"accent"` color, now support `data-color`. They will also
inherit their color from the closest `data-color` attribute. If none is
found, they use `--ds-color-accent-*`<sup>2</sup>.

<sup>1</sup>: ...except `Alert`, which only supports `info`, `warning`,
`danger` and `success` colors.
<sup>2</sup>: If an `"accent"` color is not defined in the theme, the
`--ds-color-accent-*` variables will point to the first `main-color`.

- CSS variables: `--ds-color-*-{1,2,...,13,contrast-1,contrast-2}`,
which were generated from the `primitives` layer of design tokens, have
been removed since they are always 1-to-1 with the semantic layer. Use
the equivalent variables from the semantic layer instead
([#2641](#2641))

    Example, for the `neutral` scale:

    ```css
var(--ds-color-neutral-background-default); /* instead of:
var(--ds-color-neutral-1) */
var(--ds-color-neutral-background-subtle); /* instead of:
var(--ds-color-neutral-2) */
var(--ds-color-neutral-surface-default); /* instead of:
var(--ds-color-neutral-3) */
var(--ds-color-neutral-surface-hover); /* instead of:
var(--ds-color-neutral-4) */
var(--ds-color-neutral-surface-active); /* instead of:
var(--ds-color-neutral-5) */
var(--ds-color-neutral-border-subtle); /* instead of:
var(--ds-color-neutral-6) */
var(--ds-color-neutral-border-default); /* instead of:
var(--ds-color-neutral-7) */
var(--ds-color-neutral-border-strong); /* instead of:
var(--ds-color-neutral-8) */
var(--ds-color-neutral-base-default); /* instead of:
var(--ds-color-neutral-9) */
var(--ds-color-neutral-base-hover); /* instead of:
var(--ds-color-neutral-10) */
var(--ds-color-neutral-base-active); /* instead of:
var(--ds-color-neutral-11) */
var(--ds-color-neutral-text-subtle); /* instead of:
var(--ds-color-neutral-12) */
var(--ds-color-neutral-text-default); /* instead of:
var(--ds-color-neutral-13) */
var(--ds-color-neutral-contrast-default); /* instead of:
var(--ds-color-neutral-contrast-1) */
var(--ds-color-neutral-contrast-subtle); /* instead of:
var(--ds-color-neutral-contrast-2) */
    ```

    ...and similarly for `accent`, `brand1`, `brand2` and `brand3`.

- CLI now supports creating themes with 1 or more "main" colors, a
neutral color, and 1 or more "support" colors. The "main" and "support"
colors can have arbitrary names. There can not be more than 4 colors of
each category unless you're using Figma on the Enterprise plan, due to
plan-based restrictions on the number of variable modes per collection.
([#2733](#2733))

- Implemented a more flexible system of semantic border-radius tokens.
([#2497](#2497))

### Patch Changes

- Removed `init` command. Use `tokens create` instead.
([#2616](#2616))

- Update global colors
([#2662](#2662))

- chore: change default tokens build output folder
([`f8986b8316894ef5cd55f6ee232e4f6aaae6486a`](f8986b8))

## @digdir/[email protected]

### Minor Changes

- React components and css now support custom colors through the
`data-color` attribute.
([#2703](#2703))

**BREAKING CHANGE**: All React components that had a `color` prop have
been changed to use `data-color`.

All<sup>1</sup> css targeting `data-color` has been changed to work with
all custom colors generated by the CLI.

`Avatar`, `Badge`, `Button`, and `Link` use
`--ds-color-accent-*`<sup>2</sup>, unless `data-color` is set directly
on the element.

For components that had a `color` prop, but defaulted to something other
than `"accent"`, `data-color` must also be set directly on the element.

All other components that defaulted to `"accent"`, or previously only
existed in `"accent"` color, now support `data-color`. They will also
inherit their color from the closest `data-color` attribute. If none is
found, they use `--ds-color-accent-*`<sup>2</sup>.

<sup>1</sup>: ...except `Alert`, which only supports `info`, `warning`,
`danger` and `success` colors.
<sup>2</sup>: If an `"accent"` color is not defined in the theme, the
`--ds-color-accent-*` variables will point to the first `main-color`.

- CSS variables: `--ds-color-*-{1,2,...,13,contrast-1,contrast-2}`,
which were generated from the `primitives` layer of design tokens, have
been removed since they are always 1-to-1 with the semantic layer. Use
the equivalent variables from the semantic layer instead
([#2641](#2641))

    Example, for the `neutral` scale:

    ```css
var(--ds-color-neutral-background-default); /* instead of:
var(--ds-color-neutral-1) */
var(--ds-color-neutral-background-subtle); /* instead of:
var(--ds-color-neutral-2) */
var(--ds-color-neutral-surface-default); /* instead of:
var(--ds-color-neutral-3) */
var(--ds-color-neutral-surface-hover); /* instead of:
var(--ds-color-neutral-4) */
var(--ds-color-neutral-surface-active); /* instead of:
var(--ds-color-neutral-5) */
var(--ds-color-neutral-border-subtle); /* instead of:
var(--ds-color-neutral-6) */
var(--ds-color-neutral-border-default); /* instead of:
var(--ds-color-neutral-7) */
var(--ds-color-neutral-border-strong); /* instead of:
var(--ds-color-neutral-8) */
var(--ds-color-neutral-base-default); /* instead of:
var(--ds-color-neutral-9) */
var(--ds-color-neutral-base-hover); /* instead of:
var(--ds-color-neutral-10) */
var(--ds-color-neutral-base-active); /* instead of:
var(--ds-color-neutral-11) */
var(--ds-color-neutral-text-subtle); /* instead of:
var(--ds-color-neutral-12) */
var(--ds-color-neutral-text-default); /* instead of:
var(--ds-color-neutral-13) */
var(--ds-color-neutral-contrast-default); /* instead of:
var(--ds-color-neutral-contrast-1) */
var(--ds-color-neutral-contrast-subtle); /* instead of:
var(--ds-color-neutral-contrast-2) */
    ```

    ...and similarly for `accent`, `brand1`, `brand2` and `brand3`.

- Implemented a more flexible system of semantic border-radius tokens.
([#2497](#2497))

### Patch Changes

- tokens: Removed validationmessage and label typography styles
([#2698](#2698))

- Update global colors
([#2662](#2662))

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Test Chromatic for visual testing
2 participants