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(convertTransform): fix scale and rotate on skew + refactors #1916

Merged
merged 2 commits into from
Dec 31, 2023

Conversation

SethFalco
Copy link
Member

@SethFalco SethFalco commented Dec 30, 2023

I have divided this pull request into two commits, if you want to review it, please look at one commit at a time:

  1. Functional changes relevant to the bug being fixed
  2. Various refactors

When we encounter a transform matrix with both shears (a B C d e f) set or unset, we conditionally invert sx and sy. This is needed most of the time to preserve the original sign (+/-) of scales (A b c D e f) since this gets lost after squaring in Math.hypot.

The previous implementation lead us to make conversions like the following, which are both wrong:

Matrix Expected Actual Notes
matrix(0 -1 -1 0 0 0) scale(1 -1)rotate(90) rotate(-90)
matrix(0 1 1 0 0 0) matrix(0 1 1 0 0 0) rotate(90) The decomposed matrix is scale(1 -1)rotate(-90), but that's long, so we scrap it.

While looking into matrix decomposition, my understanding is that if b and c have the same sign (positive / negative), this effectively rotates and inverts sy (negative vertical scaling), even if a and d weren't explicitly set. We ignore positive d values because in this block, if b and c are non-zero and have the same sign, and a and d are non-zero, they should have opposite signs, so we can imply that we've already inverted sx and will update the rotation. That's done so we can define a shorter transform and keep rotations to 2 digits only.

i.e. rotate(-135)scale(1.4 -1.4) vs scale(-1.4 1.4)rotate(-45)

Anyone with more experience in math and applying or decomposing transformation matrices would be very welcome to chime in.

… Frederic Wang's website puts the scale for matrix(0 -1 -1 0 0 0) inside/after, like rotate(-90) scale(1,-1), but we set scaleBefore to false and put the scale outside/first.
* The fact that "before" is vague makes things more confusing. Is "before" defined as coming first in the string, or as applying first to the object as it's innermost?

#1892 (comment)

Answering this here, as I now have more context. We do an optimization on top of the algorithm used on Frederic Wang's website to try to keep rotations to 2 digits. For example, where they would return rotation(-135)scale(…) we'll make it scale(…)rotation(-45) and invert the scales appropriately, which saves 1 byte. We just weren't doing the inversions correctly in some cases.

Refactors

Use toFixed when comparing scales (A b c D e f). This makes the output more consistent. For example, all the following transforms should yield the same output, but if the calculated matrix has a value like 1e-6 then it failed to meet the condition before:

  • matrix(0, -1, -1, 0, 0, 0)
  • scale(1 -1)rotate(90)
  • scale(-1 1)rotate(-90)

Since our stringless toFixed method has been migrated to a utility anyway, I've updated some instances of Number(string.toFixed(num)) to use it to avoid all the casting.

Renames significantDigits to numberOfDigits because that's what it is, not that number of significant digits.

Uses a Set to match transformation names instead of a regular expression for performance.


This takes us down from 255 failing tests in the SVGO Test Suite (proposed regression tests) down to 172 and finishes in 19.3 minutes. I've also confirmed it only resolves tests and does not break others. 🎉

Related

Discussed here:

Background on sign issues in the past:

@SethFalco SethFalco merged commit 2661dac into svg:main Dec 31, 2023
10 checks passed
@SethFalco SethFalco deleted the fix-convert-transforms branch December 31, 2023 00:59
gfellerph referenced this pull request in swisspost/design-system Jan 4, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@babel/core](https://babel.dev/docs/en/next/babel-core)
([source](https://github.com/babel/babel/tree/HEAD/packages/babel-core))
| [`7.23.6` ->
`7.23.7`](https://renovatebot.com/diffs/npm/@babel%2fcore/7.23.6/7.23.7)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@babel%2fcore/7.23.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@babel%2fcore/7.23.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@babel%2fcore/7.23.6/7.23.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@babel%2fcore/7.23.6/7.23.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@changesets/parse](https://github.com/changesets/changesets/tree/main#readme)
([source](https://github.com/changesets/changesets)) | [`0.1.0` ->
`0.4.0`](https://renovatebot.com/diffs/npm/@changesets%2fparse/0.1.0/0.4.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@changesets%2fparse/0.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@changesets%2fparse/0.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@changesets%2fparse/0.1.0/0.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@changesets%2fparse/0.1.0/0.4.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [@percy/cli](https://github.com/percy/cli)
([source](https://github.com/percy/cli/tree/HEAD/packages/cli)) |
[`1.27.4` ->
`1.27.6`](https://renovatebot.com/diffs/npm/@percy%2fcli/1.27.4/1.27.6)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@percy%2fcli/1.27.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@percy%2fcli/1.27.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@percy%2fcli/1.27.4/1.27.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@percy%2fcli/1.27.4/1.27.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@storybook/addon-essentials](https://github.com/storybookjs/storybook/tree/next/code/addons/essentials)
([source](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/essentials))
| [`7.6.6` ->
`7.6.7`](https://renovatebot.com/diffs/npm/@storybook%2faddon-essentials/7.6.6/7.6.7)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddon-essentials/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2faddon-essentials/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2faddon-essentials/7.6.6/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddon-essentials/7.6.6/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@storybook/addon-links](https://github.com/storybookjs/storybook/tree/next/code/addons/links)
([source](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/links))
| [`7.6.6` ->
`7.6.7`](https://renovatebot.com/diffs/npm/@storybook%2faddon-links/7.6.6/7.6.7)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddon-links/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2faddon-links/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2faddon-links/7.6.6/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddon-links/7.6.6/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@storybook/addons](https://github.com/storybookjs/storybook/tree/next/code/deprecated/addons)
([source](https://github.com/storybookjs/storybook/tree/HEAD/code/deprecated/addons))
| [`7.6.6` ->
`7.6.7`](https://renovatebot.com/diffs/npm/@storybook%2faddons/7.6.6/7.6.7)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddons/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2faddons/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2faddons/7.6.6/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddons/7.6.6/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@storybook/blocks](https://github.com/storybookjs/storybook/tree/next/code/ui/blocks)
([source](https://github.com/storybookjs/storybook/tree/HEAD/code/ui/blocks))
| [`7.6.6` ->
`7.6.7`](https://renovatebot.com/diffs/npm/@storybook%2fblocks/7.6.6/7.6.7)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2fblocks/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2fblocks/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2fblocks/7.6.6/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2fblocks/7.6.6/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@storybook/components](https://github.com/storybookjs/storybook/tree/next/code/ui/components)
([source](https://github.com/storybookjs/storybook/tree/HEAD/code/ui/components))
| [`7.6.6` ->
`7.6.7`](https://renovatebot.com/diffs/npm/@storybook%2fcomponents/7.6.6/7.6.7)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2fcomponents/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2fcomponents/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2fcomponents/7.6.6/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2fcomponents/7.6.6/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@storybook/core-events](https://github.com/storybookjs/storybook/tree/next/code/lib/core-events)
([source](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/core-events))
| [`7.6.6` ->
`7.6.7`](https://renovatebot.com/diffs/npm/@storybook%2fcore-events/7.6.6/7.6.7)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2fcore-events/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2fcore-events/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2fcore-events/7.6.6/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2fcore-events/7.6.6/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@storybook/manager-api](https://github.com/storybookjs/storybook/tree/next/code/lib/manager-api)
([source](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/manager-api))
| [`7.6.6` ->
`7.6.7`](https://renovatebot.com/diffs/npm/@storybook%2fmanager-api/7.6.6/7.6.7)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2fmanager-api/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2fmanager-api/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2fmanager-api/7.6.6/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2fmanager-api/7.6.6/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@storybook/preview-api](https://github.com/storybookjs/storybook/tree/next/code/lib/preview-api)
([source](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/preview-api))
| [`7.6.6` ->
`7.6.7`](https://renovatebot.com/diffs/npm/@storybook%2fpreview-api/7.6.6/7.6.7)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2fpreview-api/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2fpreview-api/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2fpreview-api/7.6.6/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2fpreview-api/7.6.6/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@storybook/theming](https://github.com/storybookjs/storybook/tree/next/code/lib/theming)
([source](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/theming))
| [`7.6.6` ->
`7.6.7`](https://renovatebot.com/diffs/npm/@storybook%2ftheming/7.6.6/7.6.7)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2ftheming/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2ftheming/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2ftheming/7.6.6/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2ftheming/7.6.6/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@storybook/web-components](https://github.com/storybookjs/storybook/tree/next/code/renderers/web-components)
([source](https://github.com/storybookjs/storybook/tree/HEAD/code/renderers/web-components))
| [`7.6.6` ->
`7.6.7`](https://renovatebot.com/diffs/npm/@storybook%2fweb-components/7.6.6/7.6.7)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2fweb-components/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2fweb-components/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2fweb-components/7.6.6/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2fweb-components/7.6.6/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@storybook/web-components-vite](https://github.com/storybookjs/storybook/tree/next/code/frameworks/web-components-vite)
([source](https://github.com/storybookjs/storybook/tree/HEAD/code/frameworks/web-components-vite))
| [`7.6.6` ->
`7.6.7`](https://renovatebot.com/diffs/npm/@storybook%2fweb-components-vite/7.6.6/7.6.7)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2fweb-components-vite/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@storybook%2fweb-components-vite/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@storybook%2fweb-components-vite/7.6.6/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2fweb-components-vite/7.6.6/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node)
([source](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node))
| [`18.19.3` ->
`18.19.4`](https://renovatebot.com/diffs/npm/@types%2fnode/18.19.3/18.19.4)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/18.19.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/18.19.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/18.19.3/18.19.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/18.19.3/18.19.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node)
([source](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node))
| [`16.18.68` ->
`16.18.69`](https://renovatebot.com/diffs/npm/@types%2fnode/16.18.68/16.18.69)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/16.18.69?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/16.18.69?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/16.18.68/16.18.69?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/16.18.68/16.18.69?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@types/node-fetch](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node-fetch)
([source](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node-fetch))
| [`2.6.9` ->
`2.6.10`](https://renovatebot.com/diffs/npm/@types%2fnode-fetch/2.6.9/2.6.10)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode-fetch/2.6.10?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode-fetch/2.6.10?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode-fetch/2.6.9/2.6.10?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode-fetch/2.6.9/2.6.10?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react)
([source](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react))
| [`18.2.45` ->
`18.2.46`](https://renovatebot.com/diffs/npm/@types%2freact/18.2.45/18.2.46)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2freact/18.2.46?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2freact/18.2.46?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2freact/18.2.45/18.2.46?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2freact/18.2.45/18.2.46?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint)
([source](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin))
| [`6.15.0` ->
`6.17.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2feslint-plugin/6.15.0/6.17.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2feslint-plugin/6.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2feslint-plugin/6.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2feslint-plugin/6.15.0/6.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2feslint-plugin/6.15.0/6.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint)
([source](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser))
| [`6.15.0` ->
`6.17.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/6.15.0/6.17.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fparser/6.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fparser/6.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fparser/6.15.0/6.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fparser/6.15.0/6.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [core-js](https://github.com/zloirock/core-js)
([source](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js))
| [`3.34.0` ->
`3.35.0`](https://renovatebot.com/diffs/npm/core-js/3.34.0/3.35.0) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/core-js/3.35.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/core-js/3.35.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/core-js/3.34.0/3.35.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/core-js/3.34.0/3.35.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [cypress](https://cypress.io)
([source](https://github.com/cypress-io/cypress)) | [`13.6.1` ->
`13.6.2`](https://renovatebot.com/diffs/npm/cypress/13.6.1/13.6.2) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/cypress/13.6.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/cypress/13.6.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/cypress/13.6.1/13.6.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cypress/13.6.1/13.6.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[eslint-plugin-n](https://github.com/eslint-community/eslint-plugin-n)
| [`16.5.0` ->
`16.6.1`](https://renovatebot.com/diffs/npm/eslint-plugin-n/16.5.0/16.6.1)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/eslint-plugin-n/16.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/eslint-plugin-n/16.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/eslint-plugin-n/16.5.0/16.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint-plugin-n/16.5.0/16.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[rollup-plugin-visualizer](https://github.com/btd/rollup-plugin-visualizer)
| [`5.11.0` ->
`5.12.0`](https://renovatebot.com/diffs/npm/rollup-plugin-visualizer/5.11.0/5.12.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/rollup-plugin-visualizer/5.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/rollup-plugin-visualizer/5.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/rollup-plugin-visualizer/5.11.0/5.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/rollup-plugin-visualizer/5.11.0/5.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [sass](https://github.com/sass/dart-sass) | [`1.69.5` ->
`1.69.7`](https://renovatebot.com/diffs/npm/sass/1.69.5/1.69.7) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/sass/1.69.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/sass/1.69.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/sass/1.69.5/1.69.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/sass/1.69.5/1.69.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[storybook](https://github.com/storybookjs/storybook/tree/next/code/lib/cli)
([source](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/cli))
| [`7.6.6` ->
`7.6.7`](https://renovatebot.com/diffs/npm/storybook/7.6.6/7.6.7) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/storybook/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/storybook/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/storybook/7.6.6/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/storybook/7.6.6/7.6.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [svgo](https://svgo.dev) ([source](https://github.com/svg/svgo)) |
[`3.1.0` -> `3.2.0`](https://renovatebot.com/diffs/npm/svgo/3.1.0/3.2.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/svgo/3.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/svgo/3.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/svgo/3.1.0/3.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/svgo/3.1.0/3.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>babel/babel (@&#8203;babel/core)</summary>

###
[`v7.23.7`](https://github.com/babel/babel/blob/HEAD/CHANGELOG.md#v7237-2023-12-29)

[Compare
Source](https://github.com/babel/babel/compare/v7.23.6...v7.23.7)

##### :bug: Bug Fix

-   `babel-traverse`
- [#&#8203;16191](https://github.com/babel/babel/pull/16191) fix:
Crash when removing without `Program`
([@&#8203;liuxingbaoyu](https://github.com/liuxingbaoyu))
-   `babel-helpers`, `babel-plugin-proposal-decorators`
- [#&#8203;16180](https://github.com/babel/babel/pull/16180) fix:
Class decorator `ctx.kind` is wrong
([@&#8203;liuxingbaoyu](https://github.com/liuxingbaoyu))
-   `babel-plugin-proposal-decorators`
- [#&#8203;16170](https://github.com/babel/babel/pull/16170) Fix
decorator initProto usage in derived classes
([@&#8203;JLHwung](https://github.com/JLHwung))
-   `babel-core`
- [#&#8203;16167](https://github.com/babel/babel/pull/16167) Avoid
unpreventable `unhandledRejection` events
([@&#8203;nicolo-ribaudo](https://github.com/nicolo-ribaudo))

##### :house: Internal

-   `babel-helper-create-class-features-plugin`
- [#&#8203;16186](https://github.com/babel/babel/pull/16186) chore:
Update deps ([@&#8203;liuxingbaoyu](https://github.com/liuxingbaoyu))
- `babel-helper-create-class-features-plugin`,
`babel-plugin-proposal-decorators`
- [#&#8203;16177](https://github.com/babel/babel/pull/16177) Merge
decorators into class features
([@&#8203;JLHwung](https://github.com/JLHwung))

</details>

<details>
<summary>changesets/changesets (@&#8203;changesets/parse)</summary>

###
[`v0.4.0`](https://github.com/changesets/changesets/releases/tag/%40changesets/changelog-github%400.4.0)

[Compare
Source](https://github.com/changesets/changesets/compare/@changesets/parse@0.3.16...@changesets/parse@0.4.0)

##### Minor Changes

- [#&#8203;564](https://github.com/atlassian/changesets/pull/564)
[`707002d`](https://github.com/atlassian/changesets/commit/707002dec9332a2c1322522a23861e747a6bff6f)
Thanks [@&#8203;Andarist](https://github.com/Andarist)! - It's now
possible to specify multiple authors of a change by using multiple
`author: @&#8203;someuser` lines.

##### Patch Changes

- Updated dependencies
\[[`de2b4a5`](https://github.com/atlassian/changesets/commit/de2b4a5a7b244a37d94625bcb70ecde9dde5b612)]:
-
[@&#8203;changesets/types](https://github.com/changesets/types)[@&#8203;4](https://github.com/4).0.0

###
[`v0.3.16`](https://github.com/changesets/changesets/releases/tag/%40changesets/parse%400.3.16)

[Compare
Source](https://github.com/changesets/changesets/compare/@changesets/parse@0.3.15...@changesets/parse@0.3.16)

##### Patch Changes

- Updated dependencies
\[[`521205d`](https://github.com/changesets/changesets/commit/521205dc8c70fe71b181bd3c4bb7c9c6d2e721d2)]:
-
[@&#8203;changesets/types](https://github.com/changesets/types)[@&#8203;5](https://github.com/5).2.1

###
[`v0.3.15`](https://github.com/changesets/changesets/releases/tag/%40changesets/parse%400.3.15)

[Compare
Source](https://github.com/changesets/changesets/compare/@changesets/parse@0.3.14...@changesets/parse@0.3.15)

##### Patch Changes

- Updated dependencies
\[[`8c08469`](https://github.com/changesets/changesets/commit/8c0846977597ddaf51aaeb35f1f0f9428bf8ba14)]:
-
[@&#8203;changesets/types](https://github.com/changesets/types)[@&#8203;5](https://github.com/5).2.0

###
[`v0.3.14`](https://github.com/changesets/changesets/releases/tag/%40changesets/parse%400.3.14)

[Compare
Source](https://github.com/changesets/changesets/compare/@changesets/parse@0.3.13...@changesets/parse@0.3.14)

##### Patch Changes

- Updated dependencies
\[[`dd9b76f`](https://github.com/changesets/changesets/commit/dd9b76f162a546ae8b412e0cb10277f971f3585e)]:
-
[@&#8203;changesets/types](https://github.com/changesets/types)[@&#8203;5](https://github.com/5).1.0

###
[`v0.3.13`](https://github.com/changesets/changesets/releases/tag/%40changesets/parse%400.3.13)

[Compare
Source](https://github.com/changesets/changesets/compare/@changesets/parse@0.3.12...@changesets/parse@0.3.13)

##### Patch Changes

- Updated dependencies
\[[`c87eba6`](https://github.com/changesets/changesets/commit/c87eba6f80a34563b7382f87472c29f6dafb546c)]:
-
[@&#8203;changesets/types](https://github.com/changesets/types)[@&#8203;5](https://github.com/5).0.0

###
[`v0.3.12`](https://github.com/changesets/changesets/releases/tag/%40changesets/parse%400.3.12)

[Compare
Source](https://github.com/changesets/changesets/compare/@changesets/parse@0.3.11...@changesets/parse@0.3.12)

##### Patch Changes

- Updated dependencies
\[[`27a5a82`](https://github.com/changesets/changesets/commit/27a5a82188914570d192162f9d045dfd082a3c15)]:
-
[@&#8203;changesets/types](https://github.com/changesets/types)[@&#8203;4](https://github.com/4).1.0

###
[`v0.3.11`](https://github.com/changesets/changesets/releases/tag/%40changesets/parse%400.3.11)

[Compare
Source](https://github.com/changesets/changesets/compare/@changesets/parse@0.3.10...@changesets/parse@0.3.11)

##### Patch Changes

- [#&#8203;740](https://github.com/changesets/changesets/pull/740)
[`957e39c`](https://github.com/changesets/changesets/commit/957e39c21549dd91e03faa5cd30e44e4c3d7331f)
Thanks [@&#8203;akphi](https://github.com/akphi)! - Fixed an issue
with failing to parse changesets containing a completely empty summary.

###
[`v0.3.10`](https://github.com/changesets/changesets/releases/tag/%40changesets/parse%400.3.10)

[Compare
Source](https://github.com/changesets/changesets/compare/@changesets/parse@0.3.9...@changesets/parse@0.3.10)

##### Patch Changes

- Updated dependencies
\[[`9a993ba`](https://github.com/atlassian/changesets/commit/9a993ba09629c1620d749432520470cec49d3a96)]:
-
[@&#8203;changesets/types](https://github.com/changesets/types)[@&#8203;4](https://github.com/4).0.2

###
[`v0.3.9`](https://github.com/changesets/changesets/releases/tag/%40changesets/parse%400.3.9)

[Compare
Source](https://github.com/changesets/changesets/compare/@changesets/parse@0.3.8...@changesets/parse@0.3.9)

##### Patch Changes

- Updated dependencies
\[[`e89e28a`](https://github.com/atlassian/changesets/commit/e89e28a05f5fa43307db73812a6bcd269b62ddee)]:
-
[@&#8203;changesets/types](https://github.com/changesets/types)[@&#8203;4](https://github.com/4).0.1

###
[`v0.3.8`](https://github.com/changesets/changesets/releases/tag/%40changesets/parse%400.3.8)

[Compare
Source](https://github.com/changesets/changesets/compare/@changesets/parse@0.3.7...@changesets/parse@0.3.8)

##### Patch Changes

- Updated dependencies
\[[`de2b4a5`](https://github.com/atlassian/changesets/commit/de2b4a5a7b244a37d94625bcb70ecde9dde5b612)]:
-
[@&#8203;changesets/types](https://github.com/changesets/types)[@&#8203;4](https://github.com/4).0.0

###
[`v0.3.7`](https://github.com/changesets/changesets/releases/tag/%40changesets/parse%400.3.7)

[Compare
Source](https://github.com/changesets/changesets/compare/@changesets/parse@0.3.6...@changesets/parse@0.3.7)

##### Patch Changes

-
[`5b6005e`](https://github.com/atlassian/changesets/commit/5b6005e0349a105b3d138fccdb22d13de8949862)
[#&#8203;462](https://github.com/atlassian/changesets/pull/462) Thanks
[@&#8203;Andarist](https://github.com/Andarist)! - Fixed an issue with
failing to parse changesets containing Windows newlines.

###
[`v0.3.6`](https://github.com/changesets/changesets/releases/tag/%40changesets/parse%400.3.6)

[Compare
Source](https://github.com/changesets/changesets/compare/@changesets/parse@0.3.5...@changesets/parse@0.3.6)

##### Patch Changes

- Updated dependencies
\[[`2b49d66`](https://github.com/atlassian/changesets/commit/2b49d668ecaa1333bc5c7c5be4648dda1b11528d)]:
-
[@&#8203;changesets/types](https://github.com/changesets/types)[@&#8203;3](https://github.com/3).0.0

###
[`v0.3.5`](https://github.com/changesets/changesets/releases/tag/%40changesets/parse%400.3.5)

[Compare
Source](https://github.com/changesets/changesets/compare/@changesets/parse@0.3.4...@changesets/parse@0.3.5)

##### Patch Changes

-
[`1706fb7`](https://github.com/atlassian/changesets/commit/1706fb751ecc2f5a792c42f467b2063078d58716)
[#&#8203;321](https://github.com/atlassian/changesets/pull/321) Thanks
[@&#8203;mitchellhamilton](https://github.com/mitchellhamilton)! - Fix
TypeScript declarations

- Updated dependencies
\[[`1706fb7`](https://github.com/atlassian/changesets/commit/1706fb751ecc2f5a792c42f467b2063078d58716)]:
-
[@&#8203;changesets/types](https://github.com/changesets/types)[@&#8203;2](https://github.com/2).0.1

###
[`v0.3.4`](https://github.com/changesets/changesets/releases/tag/%40changesets/parse%400.3.4)

[Compare
Source](https://github.com/changesets/changesets/compare/@changesets/parse@0.3.3...@changesets/parse@0.3.4)

##### Patch Changes

- Updated dependencies
\[[`011d57f`](https://github.com/atlassian/changesets/commit/011d57f1edf9e37f75a8bef4f918e72166af096e)]:
-
[@&#8203;changesets/types](https://github.com/changesets/types)[@&#8203;2](https://github.com/2).0.0

###
[`v0.3.3`](https://github.com/changesets/changesets/releases/tag/%40changesets/parse%400.3.3)

[Compare
Source](https://github.com/changesets/changesets/compare/@changesets/parse@0.3.2...@changesets/parse@0.3.3)

##### Patch Changes

-
[`04ddfd7`](https://github.com/atlassian/changesets/commit/04ddfd7c3acbfb84ef9c92873fe7f9dea1f5145c)
[#&#8203;305](https://github.com/atlassian/changesets/pull/305) Thanks
[@&#8203;Noviny](https://github.com/Noviny)! - Add link to changelog
in readme

- Updated dependencies
\[[`04ddfd7`](https://github.com/atlassian/changesets/commit/04ddfd7c3acbfb84ef9c92873fe7f9dea1f5145c),
[`e56928b`](https://github.com/atlassian/changesets/commit/e56928bbd6f9096def06ac37487bdbf28efec9d1)]:
-
[@&#8203;changesets/types](https://github.com/changesets/types)[@&#8203;1](https://github.com/1).0.1

###
[`v0.3.2`](https://github.com/changesets/changesets/releases/tag/%40changesets/parse%400.3.2)

##### Patch Changes

-
[`41e2e3d`](https://github.com/atlassian/changesets/commit/41e2e3dd1053ff2f35a1a07e60793c9099f26997)
[#&#8203;292](https://github.com/atlassian/changesets/pull/292) Thanks
[@&#8203;acheronfail](https://github.com/acheronfail)! - Fix
`repository` field in package.json

- Updated dependencies
\[[`41e2e3d`](https://github.com/atlassian/changesets/commit/41e2e3dd1053ff2f35a1a07e60793c9099f26997),
[`cc8c921`](https://github.com/atlassian/changesets/commit/cc8c92143d4c4b7cca8b9917dfc830a40b5cda20),
[`cc8c921`](https://github.com/atlassian/changesets/commit/cc8c92143d4c4b7cca8b9917dfc830a40b5cda20),
[`2363366`](https://github.com/atlassian/changesets/commit/2363366756d1b15bddf6d803911baccfca03cbdf)]:
-
[@&#8203;changesets/types](https://github.com/changesets/types)[@&#8203;1](https://github.com/1).0.0

###
[`v0.3.0`](https://github.com/changesets/changesets/releases/tag/%40changesets/write%400.3.0)

[Compare
Source](https://github.com/changesets/changesets/compare/@changesets/parse@0.2.1...@changesets/parse@0.3.0)

##### Minor Changes

- [#&#8203;1185](https://github.com/changesets/changesets/pull/1185)
[`a971652`](https://github.com/changesets/changesets/commit/a971652ec1403aab3fb89eb2f1640bd5012b895a)
Thanks [@&#8203;Andarist](https://github.com/Andarist)! -
`package.json#exports` have been added to limit what (and how) code
might be imported from the package.

##### Patch Changes

- Updated dependencies
\[[`a971652`](https://github.com/changesets/changesets/commit/a971652ec1403aab3fb89eb2f1640bd5012b895a)]:
-
[@&#8203;changesets/types](https://github.com/changesets/types)[@&#8203;6](https://github.com/6).0.0

###
[`v0.2.1`](https://github.com/changesets/changesets/compare/@changesets/parse@0.2.0...@changesets/parse@0.2.1)

[Compare
Source](https://github.com/changesets/changesets/compare/@changesets/parse@0.2.0...@changesets/parse@0.2.1)

###
[`v0.2.0`](https://github.com/changesets/changesets/compare/@changesets/parse@0.1.2...@changesets/parse@0.2.0)

[Compare
Source](https://github.com/changesets/changesets/compare/@changesets/parse@0.1.2...@changesets/parse@0.2.0)

###
[`v0.1.2`](https://github.com/changesets/changesets/compare/@changesets/parse@0.1.0...@changesets/parse@0.1.2)

[Compare
Source](https://github.com/changesets/changesets/compare/@changesets/parse@0.1.0...@changesets/parse@0.1.2)

</details>

<details>
<summary>percy/cli (@&#8203;percy/cli)</summary>

### [`v1.27.6`](https://github.com/percy/cli/releases/tag/v1.27.6)

[Compare
Source](https://github.com/percy/cli/compare/v1.27.5...v1.27.6)

<!-- Release notes generated using configuration in .github/release.yml
at master -->

#### What's Changed

##### ✨ Enhancements

- Add support for Scrollable single element screenshot by
[@&#8203;chinmay-browserstack](https://github.com/chinmay-browserstack)
in
[https://github.com/percy/cli/pull/1458](https://github.com/percy/cli/pull/1458)
- Percy on Automate: Adding FullPage Support by
[@&#8203;Amit3200](https://github.com/Amit3200)
[@&#8203;rishigupta1599](https://github.com/rishigupta1599) in
[https://github.com/percy/cli/pull/1431](https://github.com/percy/cli/pull/1431)
- Percy on Automate: Add FullPage in global config by
[@&#8203;Amit3200](https://github.com/Amit3200) in
[https://github.com/percy/cli/pull/1477](https://github.com/percy/cli/pull/1477)

##### 🐛 Bug Fixes

- 🐛 Fix connection refused for `ipv6` by
[@&#8203;itsjwala](https://github.com/itsjwala) in
[https://github.com/percy/cli/pull/1463](https://github.com/percy/cli/pull/1463)

##### 🏗 Maintenance

- 🏗️ test fix: dom package test failing in chrome 120+ by
[@&#8203;itsjwala](https://github.com/itsjwala) in
[https://github.com/percy/cli/pull/1476](https://github.com/percy/cli/pull/1476)

**Full Changelog**:
https://github.com/percy/cli/compare/v1.27.5...v1.27.6

### [`v1.27.5`](https://github.com/percy/cli/releases/tag/v1.27.5)

[Compare
Source](https://github.com/percy/cli/compare/v1.27.4...v1.27.5)

<!-- Release notes generated using configuration in .github/release.yml
at master -->

Note: We have received some reports where percy cli randomly stops
working after this release, so we are currently tagging 1.27.4 as latest
version on npm to fix for users using `latest` tag. 1.27.5 will still be
available if used explicitly. We are investigating the issue.

#### What's Changed

##### ✨ Enhancements

- ✨ Implement Warning + Disable Percy for unsupported combinations by
[@&#8203;this-is-shivamsingh](https://github.com/this-is-shivamsingh)
in
[https://github.com/percy/cli/pull/1411](https://github.com/percy/cli/pull/1411)
- ✨ Added support to set network interface to bind by
[@&#8203;ninadbstack](https://github.com/ninadbstack) in
[https://github.com/percy/cli/pull/1447](https://github.com/percy/cli/pull/1447)

##### 🐛 Bug Fixes

- Fixing FindRegion + Refactor by
[@&#8203;Amit3200](https://github.com/Amit3200) in
[https://github.com/percy/cli/pull/1408](https://github.com/percy/cli/pull/1408)
- Resolving race condition in snapshots flush by
[@&#8203;rishigupta1599](https://github.com/rishigupta1599) in
[https://github.com/percy/cli/pull/1440](https://github.com/percy/cli/pull/1440)

##### 🏗 Maintenance

- ♻️ Refactor: added defaultmap + locking mechanism for intercepts queue
by [@&#8203;nilshah98](https://github.com/nilshah98) in
[https://github.com/percy/cli/pull/1441](https://github.com/percy/cli/pull/1441)

#### New Contributors

-
[@&#8203;this-is-shivamsingh](https://github.com/this-is-shivamsingh)
made their first contribution in
[https://github.com/percy/cli/pull/1411](https://github.com/percy/cli/pull/1411)

**Full Changelog**:
https://github.com/percy/cli/compare/v1.27.4...v1.27.5

</details>

<details>
<summary>storybookjs/storybook
(@&#8203;storybook/addon-essentials)</summary>

###
[`v7.6.7`](https://github.com/storybookjs/storybook/blob/HEAD/CHANGELOG.md#767)

[Compare
Source](https://github.com/storybookjs/storybook/compare/v7.6.6...v7.6.7)

- Core: Skip no-framework error when ignorePreview=true -
[#&#8203;25286](https://github.com/storybookjs/storybook/pull/25286),
thanks [@&#8203;ndelangen](https://github.com/ndelangen)!
- Dependencies: Semver dependency fixes -
[#&#8203;25283](https://github.com/storybookjs/storybook/pull/25283),
thanks [@&#8203;ndelangen](https://github.com/ndelangen)!
- Vite: Fix pre-transform error in Vite 5 -
[#&#8203;25329](https://github.com/storybookjs/storybook/pull/25329),
thanks [@&#8203;yannbf](https://github.com/yannbf)!
- Vue3: Fix pnp by making compiler-core a dependency -
[#&#8203;25311](https://github.com/storybookjs/storybook/pull/25311),
thanks [@&#8203;shilman](https://github.com/shilman)!

</details>

<details>
<summary>storybookjs/storybook (@&#8203;storybook/addon-links)</summary>

###
[`v7.6.7`](https://github.com/storybookjs/storybook/compare/v7.6.6...22ec27e2c6dbc6b3b7183c3c77693e4853f198a0)

[Compare
Source](https://github.com/storybookjs/storybook/compare/v7.6.6...v7.6.7)

</details>

<details>
<summary>typescript-eslint/typescript-eslint
(@&#8203;typescript-eslint/eslint-plugin)</summary>

###
[`v6.17.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#6170-2024-01-01)

[Compare
Source](https://github.com/typescript-eslint/typescript-eslint/compare/v6.16.0...v6.17.0)

##### Bug Fixes

- **eslint-plugin:** \[no-restricted-imports] prevent crash when
`patterns` or `paths` in options are empty
([#&#8203;8108](https://github.com/typescript-eslint/typescript-eslint/issues/8108))
([675e987](https://github.com/typescript-eslint/typescript-eslint/commit/675e987ca1d13244c03d7e09d4e42c6539689d9a))

##### Features

- **eslint-plugin:** \[no-floating-promises] flag result of .map(async)
([#&#8203;7897](https://github.com/typescript-eslint/typescript-eslint/issues/7897))
([5857356](https://github.com/typescript-eslint/typescript-eslint/commit/5857356962060b19aa792bee778f9167ee54154b))
- **eslint-plugin:** \[switch-exhaustiveness-check] add an option to
warn against a `default` case on an already exhaustive `switch`
([#&#8203;7539](https://github.com/typescript-eslint/typescript-eslint/issues/7539))
([6a219bd](https://github.com/typescript-eslint/typescript-eslint/commit/6a219bdfe6fcf86aae28158e0d855f87a8bac719))

You can read about our [versioning
strategy](https://main--typescript-eslint.netlify.app/users/versioning)
and
[releases](https://main--typescript-eslint.netlify.app/users/releases)
on our website.

###
[`v6.16.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#6160-2023-12-25)

[Compare
Source](https://github.com/typescript-eslint/typescript-eslint/compare/v6.15.0...v6.16.0)

##### Bug Fixes

- **eslint-plugin:** \[unbound-method] exempt all non-Promise built-in
statics
([#&#8203;8096](https://github.com/typescript-eslint/typescript-eslint/issues/8096))
([3182959](https://github.com/typescript-eslint/typescript-eslint/commit/31829591e2c5cf6bdbdd5da23b12c5782f710fa5))

##### Features

- **eslint-plugin:** deprecate formatting (meta.type: layout) rules
([#&#8203;8073](https://github.com/typescript-eslint/typescript-eslint/issues/8073))
([04dea84](https://github.com/typescript-eslint/typescript-eslint/commit/04dea84e8e934a415ec1381a90de3cde670d0dc3))
- **eslint-plugin:** deprecate no-extra-semi in favor of ESLint
Stylistic equivalent
([#&#8203;8123](https://github.com/typescript-eslint/typescript-eslint/issues/8123))
([9368bf3](https://github.com/typescript-eslint/typescript-eslint/commit/9368bf390afc58a19123782f8dff2bb5cdd3cccc))

You can read about our [versioning
strategy](https://main--typescript-eslint.netlify.app/users/versioning)
and
[releases](https://main--typescript-eslint.netlify.app/users/releases)
on our website.

</details>

<details>
<summary>typescript-eslint/typescript-eslint
(@&#8203;typescript-eslint/parser)</summary>

###
[`v6.17.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#6170-2024-01-01)

[Compare
Source](https://github.com/typescript-eslint/typescript-eslint/compare/v6.16.0...v6.17.0)

**Note:** Version bump only for package
[@&#8203;typescript-eslint/parser](https://github.com/typescript-eslint/parser)

You can read about our [versioning
strategy](https://main--typescript-eslint.netlify.app/users/versioning)
and
[releases](https://main--typescript-eslint.netlify.app/users/releases)
on our website.

###
[`v6.16.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#6160-2023-12-25)

[Compare
Source](https://github.com/typescript-eslint/typescript-eslint/compare/v6.15.0...v6.16.0)

**Note:** Version bump only for package
[@&#8203;typescript-eslint/parser](https://github.com/typescript-eslint/parser)

You can read about our [versioning
strategy](https://main--typescript-eslint.netlify.app/users/versioning)
and
[releases](https://main--typescript-eslint.netlify.app/users/releases)
on our website.

</details>

<details>
<summary>zloirock/core-js (core-js)</summary>

###
[`v3.35.0`](https://github.com/zloirock/core-js/blob/HEAD/CHANGELOG.md#3350---20231229)

[Compare
Source](https://github.com/zloirock/core-js/compare/v3.34.0...v3.35.0)

- [`{ Map, Set, WeakMap, WeakSet }.{ from, of
}`](https://github.com/tc39/proposal-setmap-offrom) became
non-generic, following
[this](https://github.com/tc39/proposal-setmap-offrom/issues/16#issuecomment-1843346541)
and some other notes. Now they can be invoked without `this`, but no
longer return subclass instances
- Fixed handling some cases of non-enumerable symbol keys from `Symbol`
polyfill
- Removed unneeded NodeJS domains-related logic from `queueMicrotask`
polyfill
-   Fixed subclassing of wrapped `ArrayBuffer`
-   Refactoring, many different minor optimizations
-   Compat data improvements:
-
[`Array.fromAsync`](https://github.com/tc39/proposal-array-from-async)
marked as [supported from V8 ~ Chrome
121](https://bugs.chromium.org/p/v8/issues/detail?id=13321#c13)
- It seems that the ancient [`Array.prototype.push`
bug](https://bugs.chromium.org/p/v8/issues/detail?id=12681) is fixed in
V8 ~ Chrome 122 (Hallelujah!)
- [`ArrayBuffer.prototype.transfer` and friends
proposal](https://github.com/tc39/proposal-arraybuffer-transfer)
features marked as [supported from FF
122](https://bugzilla.mozilla.org/show_bug.cgi?id=1865103#c8) and Bun
1.0.19
- [`Object.groupBy` and
`Map.groupBy`](https://github.com/tc39/proposal-array-grouping) marked
as supported from Bun 1.0.19
- Since [`Iterator` helpers
proposal](https://github.com/tc39/proposal-iterator-helpers) methods
are still not disabled in Deno, the web compatibility issue why it was
disabled in Chromium makes no sense for Deno and fixed in the spec, they
marked as supported from Deno 1.37
- Added Opera Android 80 and updated [Opera Android
79](https://forums.opera.com/topic/68490/opera-for-android-79) compat
data mapping
    -   Added Samsung Internet 24 compat data mapping

</details>

<details>
<summary>cypress-io/cypress (cypress)</summary>

###
[`v13.6.2`](https://github.com/cypress-io/cypress/releases/tag/v13.6.2)

[Compare
Source](https://github.com/cypress-io/cypress/compare/v13.6.1...v13.6.2)

Changelog: https://docs.cypress.io/guides/references/changelog#13-6-2

</details>

<details>
<summary>eslint-community/eslint-plugin-n (eslint-plugin-n)</summary>

###
[`v16.6.1`](https://github.com/eslint-community/eslint-plugin-n/releases/tag/16.6.1)

[Compare
Source](https://github.com/eslint-community/eslint-plugin-n/compare/16.6.0...16.6.1)

- fix: eslint 7.0 support
([#&#8203;156](https://github.com/eslint-community/eslint-plugin-n/issues/156))
([`2419888`](https://github.com/eslint-community/eslint-plugin-n/commit/2419888))

###
[`v16.6.0`](https://github.com/eslint-community/eslint-plugin-n/releases/tag/16.6.0)

[Compare
Source](https://github.com/eslint-community/eslint-plugin-n/compare/16.5.0...16.6.0)

- feat: supported new globals added in the new node.js versions
([#&#8203;154](https://github.com/eslint-community/eslint-plugin-n/issues/154))
([`7628925`](https://github.com/eslint-community/eslint-plugin-n/commit/7628925))

</details>

<details>
<summary>btd/rollup-plugin-visualizer
(rollup-plugin-visualizer)</summary>

###
[`v5.12.0`](https://github.com/btd/rollup-plugin-visualizer/blob/HEAD/CHANGELOG.md#5120)

[Compare
Source](https://github.com/btd/rollup-plugin-visualizer/compare/v5.11.0...v5.12.0)

-   Make unique id in generated data to be hash of data
-   Remove strict from CLI

</details>

<details>
<summary>sass/dart-sass (sass)</summary>

###
[`v1.69.7`](https://github.com/sass/dart-sass/blob/HEAD/CHANGELOG.md#1697)

[Compare
Source](https://github.com/sass/dart-sass/compare/1.69.6...1.69.7)

##### Embedded Sass

- In the JS Embedded Host, properly install the x64 Dart Sass executable
on
    ARM64 Windows.

###
[`v1.69.6`](https://github.com/sass/dart-sass/blob/HEAD/CHANGELOG.md#1696)

[Compare
Source](https://github.com/sass/dart-sass/compare/1.69.5...1.69.6)

- Produce better output for numbers with complex units in
`meta.inspect()` and
    debugging messages.

-   Escape U+007F DELETE when serializing strings.

- When generating CSS error messages to display in-browser, escape all
code
points that aren't in the US-ASCII region. Previously only code points
U+0100
    LATIN CAPITAL LETTER A WITH MACRON were escaped.

-   Provide official releases for musl LibC and for Android.

-   Don't crash when running `meta.apply()` in asynchronous mode.

##### JS API

- Fix a bug where certain exceptions could produce `SourceSpan`s that
didn't
    follow the documented `SourceSpan` API.

</details>

<details>
<summary>svg/svgo (svgo)</summary>

### [`v3.2.0`](https://github.com/svg/svgo/releases/tag/v3.2.0)

[Compare Source](https://github.com/svg/svgo/compare/v3.1.0...v3.2.0)

#### What's Changed

##### Bug Fixes

- [**Convert Path
Commands**](https://svgo.dev/docs/plugins/convert-path-data/), fix
instances were `q` was incorrectly converted to `t`. By
[@&#8203;KTibow](https://github.com/KTibow) in
[https://github.com/svg/svgo/pull/1889](https://github.com/svg/svgo/pull/1889)
- [**Convert
Transform**](https://svgo.dev/docs/plugins/convert-transform/), fix for
some transforms that weren't being converted correctly. By
[@&#8203;SethFalco](https://github.com/SethFalco) in
[https://github.com/svg/svgo/pull/1916](https://github.com/svg/svgo/pull/1916)

##### SVG Optimization

- [**Convert Path
Commands**](https://svgo.dev/docs/plugins/convert-path-data/), improves
closing paths and how we determine if to use absolute or relative
commands. By [@&#8203;KTibow](https://github.com/KTibow) in
[https://github.com/svg/svgo/pull/1867](https://github.com/svg/svgo/pull/1867)
- [**Convert Path
Commands**](https://svgo.dev/docs/plugins/convert-path-data/), round arc
or convert to lines based on the sagitta, can be disabled by setting
`smartArcRounding` to `false`. By
[@&#8203;KTibow](https://github.com/KTibow) in
[https://github.com/svg/svgo/pull/1873](https://github.com/svg/svgo/pull/1873)
- [**Convert Path
Commands**](https://svgo.dev/docs/plugins/convert-path-data/), convert
cubic Bézier curves to quadratic Bézier curves where possible, can be
disabled by setting `convertToQ` to `false`. By
[@&#8203;KTibow](https://github.com/KTibow) in
[https://github.com/svg/svgo/pull/1889](https://github.com/svg/svgo/pull/1889)

##### Performance

- [**Merge Paths**](https://svgo.dev/docs/plugins/merge-paths/),
refactor for performance with large files. By
[@&#8203;mozzie](https://github.com/mozzie) in
[https://github.com/svg/svgo/pull/1764](https://github.com/svg/svgo/pull/1764)
and
[https://github.com/svg/svgo/pull/1904](https://github.com/svg/svgo/pull/1904)
- [**Convert Path
Commands**](https://svgo.dev/docs/plugins/convert-path-data/), refactor
`#stringifyPathData` for performance. By
[@&#8203;SethFalco](https://github.com/SethFalco) in
[https://github.com/svg/svgo/pull/1900](https://github.com/svg/svgo/pull/1900)
- Use
[`Set`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Set)
instead of
[`Array`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)
for faster lookups. By
[@&#8203;SethFalco](https://github.com/SethFalco) in
[https://github.com/svg/svgo/pull/1899](https://github.com/svg/svgo/pull/1899)

#### Metrics

Before and after using vectors from various sources, with the default
preset of each respective version:

| SVG | Original | v3.1.0 | v3.2.0 | Delta |
|---|---|---|---|---|
| [Arch Linux Logo](https://archlinux.org/art/) | 9.529 KiB | 4.162 KiB
| 4.115 KiB | ⬇️ 0.047 KiB |
|
[Blobs](https://gitlab.gnome.org/GNOME/gnome-backgrounds/-/blob/main/backgrounds/blobs-d.svg)
| 50.45 KiB | 42.949 KiB | 42.623 KiB | ⬇️ 0.326 KiB |
| [Isometric
Madness](https://inkscape.org/~Denis_Kuznetsky/%E2%98%85isometric-madness)
| 869.034 KiB | 550.153 KiB | 540.582 KiB | ⬇️ 9.571 KiB |
| [tldr-pages
Banner](https://github.com/tldr-pages/tldr/blob/main/images/banner.svg)
| 2.071 KiB | 1.07 KiB | 1.07 KiB | |
| [Wikipedia
Logo](https://en.wikipedia.org/wiki/File:Wikipedia-logo-v2.svg) |
161.551 KiB | 116 KiB | 111.668 KiB | ⬇️ 4.332 KiB |

Before and after of the browser bundle of each respective version:

| | v3.1.0 | v3.2.0 | Delta |
|---|---|---|---|
| svgo.browser.js | 660.9 kB | 910.9 kB | ⬆️ 250 kB |

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "every weekend" in timezone
Europe/Zurich, Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://github.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/swisspost/design-system).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4xMDMuMSIsInVwZGF0ZWRJblZlciI6IjM3LjEwMy4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Philipp Gfeller <philipp.gfeller@post.ch>
nono referenced this pull request in cozy/cozy-stack Jan 8, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [svgo](https://svgo.dev) ([source](https://github.com/svg/svgo)) |
[`3.1.0` -> `3.2.0`](https://renovatebot.com/diffs/npm/svgo/3.1.0/3.2.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/svgo/3.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/svgo/3.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/svgo/3.1.0/3.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/svgo/3.1.0/3.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>svg/svgo (svgo)</summary>

### [`v3.2.0`](https://github.com/svg/svgo/releases/tag/v3.2.0)

[Compare Source](https://github.com/svg/svgo/compare/v3.1.0...v3.2.0)

#### What's Changed

##### Bug Fixes

- [**Convert Path
Commands**](https://svgo.dev/docs/plugins/convert-path-data/), fix
instances were `q` was incorrectly converted to `t`. By
[@&#8203;KTibow](https://github.com/KTibow) in
[https://github.com/svg/svgo/pull/1889](https://github.com/svg/svgo/pull/1889)
- [**Convert
Transform**](https://svgo.dev/docs/plugins/convert-transform/), fix for
some transforms that weren't being converted correctly. By
[@&#8203;SethFalco](https://github.com/SethFalco) in
[https://github.com/svg/svgo/pull/1916](https://github.com/svg/svgo/pull/1916)

##### SVG Optimization

- [**Convert Path
Commands**](https://svgo.dev/docs/plugins/convert-path-data/), improves
closing paths and how we determine if to use absolute or relative
commands. By [@&#8203;KTibow](https://github.com/KTibow) in
[https://github.com/svg/svgo/pull/1867](https://github.com/svg/svgo/pull/1867)
- [**Convert Path
Commands**](https://svgo.dev/docs/plugins/convert-path-data/), round arc
or convert to lines based on the sagitta, can be disabled by setting
`smartArcRounding` to `false`. By
[@&#8203;KTibow](https://github.com/KTibow) in
[https://github.com/svg/svgo/pull/1873](https://github.com/svg/svgo/pull/1873)
- [**Convert Path
Commands**](https://svgo.dev/docs/plugins/convert-path-data/), convert
cubic Bézier curves to quadratic Bézier curves where possible, can be
disabled by setting `convertToQ` to `false`. By
[@&#8203;KTibow](https://github.com/KTibow) in
[https://github.com/svg/svgo/pull/1889](https://github.com/svg/svgo/pull/1889)

##### Performance

- [**Merge Paths**](https://svgo.dev/docs/plugins/merge-paths/),
refactor for performance with large files. By
[@&#8203;mozzie](https://github.com/mozzie) in
[https://github.com/svg/svgo/pull/1764](https://github.com/svg/svgo/pull/1764)
and
[https://github.com/svg/svgo/pull/1904](https://github.com/svg/svgo/pull/1904)
- [**Convert Path
Commands**](https://svgo.dev/docs/plugins/convert-path-data/), refactor
`#stringifyPathData` for performance. By
[@&#8203;SethFalco](https://github.com/SethFalco) in
[https://github.com/svg/svgo/pull/1900](https://github.com/svg/svgo/pull/1900)
- Use
[`Set`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Set)
instead of
[`Array`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)
for faster lookups. By
[@&#8203;SethFalco](https://github.com/SethFalco) in
[https://github.com/svg/svgo/pull/1899](https://github.com/svg/svgo/pull/1899)

#### Metrics

Before and after using vectors from various sources, with the default
preset of each respective version:

| SVG | Original | v3.1.0 | v3.2.0 | Delta |
|---|---|---|---|---|
| [Arch Linux Logo](https://archlinux.org/art/) | 9.529 KiB | 4.162 KiB
| 4.115 KiB | ⬇️ 0.047 KiB |
|
[Blobs](https://gitlab.gnome.org/GNOME/gnome-backgrounds/-/blob/main/backgrounds/blobs-d.svg)
| 50.45 KiB | 42.949 KiB | 42.623 KiB | ⬇️ 0.326 KiB |
| [Isometric
Madness](https://inkscape.org/~Denis_Kuznetsky/%E2%98%85isometric-madness)
| 869.034 KiB | 550.153 KiB | 540.582 KiB | ⬇️ 9.571 KiB |
| [tldr-pages
Banner](https://github.com/tldr-pages/tldr/blob/main/images/banner.svg)
| 2.071 KiB | 1.07 KiB | 1.07 KiB | |
| [Wikipedia
Logo](https://en.wikipedia.org/wiki/File:Wikipedia-logo-v2.svg) |
161.551 KiB | 116 KiB | 111.668 KiB | ⬇️ 4.332 KiB |

Before and after of the browser bundle of each respective version:

| | v3.1.0 | v3.2.0 | Delta |
|---|---|---|---|
| svgo.browser.js | 660.9 kB | 910.9 kB | ⬆️ 250 kB |

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "before 6am on Monday" in timezone
Europe/Paris, Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/cozy/cozy-stack).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4xMjEuMCIsInVwZGF0ZWRJblZlciI6IjM3LjEyMS4wIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIn0=-->
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.

1 participant