From 8eed586af3f11e79286a8a07f4de58d3dd90816f Mon Sep 17 00:00:00 2001 From: Olga Bulat Date: Tue, 4 Apr 2023 20:26:51 +0300 Subject: [PATCH] Add new buttons variants and sizes (#1003) * Add new VButton sizes and variants * Add new Storybook tests * Add border to transparent- buttons * Update bordered and transparent buttons * Update stories * Update snapshots * Remove pressed variants * Add missing snapshots * Fix transparent buttons * Update paddings In accordance with https://github.com/WordPress/openverse/issues/860#issuecomment-1491880626 * Update snapshots * Update frontend/src/components/VButton.vue Co-authored-by: Zack Krida --------- Co-authored-by: Zack Krida --- frontend/src/components/VButton.vue | 113 +++++++++++++++- .../src/components/meta/VButton.stories.mdx | 122 ++++++++++++++---- frontend/src/types/button.ts | 8 ++ frontend/test/storybook/playwright.config.ts | 2 +- .../visual-regression/v-button.spec.ts | 48 +++++++ .../bordered-gray-focused-linux.png | Bin 0 -> 2325 bytes .../bordered-gray-hovered-linux.png | Bin 0 -> 2170 bytes .../bordered-gray-resting-linux.png | Bin 0 -> 2189 bytes .../bordered-white-focused-linux.png | Bin 0 -> 2325 bytes .../bordered-white-hovered-linux.png | Bin 0 -> 2173 bytes .../bordered-white-resting-linux.png | Bin 0 -> 2031 bytes .../filled-dark-focused-linux.png | Bin 0 -> 2332 bytes .../filled-dark-hovered-linux.png | Bin 0 -> 2141 bytes .../filled-dark-resting-linux.png | Bin 0 -> 2127 bytes .../filled-gray-focused-linux.png | Bin 0 -> 2364 bytes .../filled-gray-hovered-linux.png | Bin 0 -> 2127 bytes .../filled-gray-resting-linux.png | Bin 0 -> 2211 bytes .../filled-pink-focused-linux.png | Bin 0 -> 2272 bytes .../filled-pink-hovered-linux.png | Bin 0 -> 2120 bytes .../filled-pink-resting-linux.png | Bin 0 -> 2079 bytes .../filled-white-focused-linux.png | Bin 0 -> 2320 bytes .../filled-white-hovered-linux.png | Bin 0 -> 2127 bytes .../filled-white-resting-linux.png | Bin 0 -> 2031 bytes .../transparent-dark-focused-linux.png | Bin 0 -> 2284 bytes .../transparent-dark-hovered-linux.png | Bin 0 -> 2133 bytes .../transparent-dark-resting-linux.png | Bin 0 -> 2031 bytes .../transparent-gray-focused-linux.png | Bin 0 -> 2284 bytes .../transparent-gray-hovered-linux.png | Bin 0 -> 2211 bytes .../transparent-gray-resting-linux.png | Bin 0 -> 2031 bytes 29 files changed, 262 insertions(+), 31 deletions(-) create mode 100644 frontend/test/storybook/visual-regression/v-button.spec.ts create mode 100644 frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/bordered-gray-focused-linux.png create mode 100644 frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/bordered-gray-hovered-linux.png create mode 100644 frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/bordered-gray-resting-linux.png create mode 100644 frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/bordered-white-focused-linux.png create mode 100644 frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/bordered-white-hovered-linux.png create mode 100644 frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/bordered-white-resting-linux.png create mode 100644 frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-dark-focused-linux.png create mode 100644 frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-dark-hovered-linux.png create mode 100644 frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-dark-resting-linux.png create mode 100644 frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-gray-focused-linux.png create mode 100644 frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-gray-hovered-linux.png create mode 100644 frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-gray-resting-linux.png create mode 100644 frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-pink-focused-linux.png create mode 100644 frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-pink-hovered-linux.png create mode 100644 frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-pink-resting-linux.png create mode 100644 frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-white-focused-linux.png create mode 100644 frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-white-hovered-linux.png create mode 100644 frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-white-resting-linux.png create mode 100644 frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/transparent-dark-focused-linux.png create mode 100644 frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/transparent-dark-hovered-linux.png create mode 100644 frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/transparent-dark-resting-linux.png create mode 100644 frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/transparent-gray-focused-linux.png create mode 100644 frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/transparent-gray-hovered-linux.png create mode 100644 frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/transparent-gray-resting-linux.png diff --git a/frontend/src/components/VButton.vue b/frontend/src/components/VButton.vue index 77fce9a17b..656821d422 100644 --- a/frontend/src/components/VButton.vue +++ b/frontend/src/components/VButton.vue @@ -10,8 +10,17 @@ { [$style[`${variant}-pressed`]]: isActive, [$style[`connection-${connections}`]]: isConnected, - 'border border-tx ring-offset-1 focus-visible:outline-none focus-visible:ring focus-visible:ring-pink': - !isPlainDangerous, + [$style[`icon-start-${size}`]]: hasIconStart, + [$style[`icon-end-${size}`]]: hasIconEnd, + 'gap-x-2': + (hasIconEnd || hasIconStart) && (size == 'medium' || size == 'large'), + 'gap-x-1': (hasIconEnd || hasIconStart) && size == 'small', + // Custom tailwind classes don't work with CSS modules in Vue so they are written here explicitly instead of accessed off of `$style`. + 'focus-slim-filled': isFilled, + 'focus-slim-tx': isBordered || isTransparent, + 'description-bold': isNewVariant, + 'border border-tx ring-offset-1 focus:outline-none focus-visible:ring focus-visible:ring-pink': + !isPlainDangerous && !isNewVariant, }, ]" :aria-pressed="pressed" @@ -158,6 +167,24 @@ const VButton = defineComponent({ type: String as PropType, default: "none", }, + /** + * Whether the button has an icon at the inline start of the button. + * + * @default false + */ + hasIconStart: { + type: Boolean, + default: false, + }, + /** + * Whether the button has an icon at the inline end of the button. + * + * @default false + */ + hasIconEnd: { + type: Boolean, + default: false, + }, }, setup(props, { attrs }) { const propsRef = toRefs(props) @@ -182,6 +209,15 @@ const VButton = defineComponent({ const isPlainDangerous = computed(() => { return propsRef.variant.value === "plain--avoid" }) + const isFilled = computed(() => { + return props.variant.startsWith("filled-") + }) + const isBordered = computed(() => { + return props.variant.startsWith("bordered-") + }) + const isTransparent = computed(() => { + return props.variant.startsWith("transparent-") + }) watch( [propsRef.disabled, propsRef.focusableWhenDisabled], @@ -223,6 +259,15 @@ const VButton = defineComponent({ { immediate: true } ) + // TODO: remove after the Core UI improvements are done + const isNewVariant = computed(() => { + return ( + props.variant.startsWith("filled-") || + props.variant.startsWith("bordered-") || + props.variant.startsWith("transparent-") + ) + }) + return { disabledAttributeRef, ariaDisabledRef, @@ -230,6 +275,10 @@ const VButton = defineComponent({ isActive, isConnected, isPlainDangerous, + isNewVariant, + isFilled, + isBordered, + isTransparent, } }, }) @@ -253,10 +302,70 @@ export default VButton @apply py-6 px-8; } +.size-small { + @apply h-8 py-0 px-2; +} +.icon-start-small { + @apply ps-1; +} +.icon-end-small { + @apply pe-1; +} + +.size-medium { + @apply h-10 py-0 px-3; +} +.icon-start-medium { + @apply ps-2; +} +.icon-end-medium { + @apply pe-2; +} + +.size-large { + @apply h-12 py-0 px-5; +} +.icon-start-large { + @apply ps-4; +} +.icon-end-large { + @apply pe-4; +} + a.button { @apply no-underline hover:no-underline; } +.filled-pink { + @apply bg-pink text-white hover:bg-dark-pink hover:text-white; +} + +.filled-dark { + @apply bg-dark-charcoal text-white hover:bg-dark-charcoal-80 hover:text-white; +} + +.filled-gray { + @apply bg-dark-charcoal-10 text-dark-charcoal hover:bg-dark-charcoal hover:text-white; +} + +.filled-white { + @apply bg-white text-dark-charcoal hover:bg-dark-charcoal hover:text-white; +} + +.bordered-white { + @apply border border-white bg-white text-dark-charcoal hover:border-dark-charcoal-20; +} + +.bordered-gray { + @apply border border-dark-charcoal-20 bg-white text-dark-charcoal hover:border-dark-charcoal; +} +.transparent-gray { + @apply bg-tx text-dark-charcoal hover:bg-dark-charcoal-10; +} +.transparent-dark { + @apply bg-tx text-dark-charcoal hover:bg-dark-charcoal hover:text-white; +} + .primary { @apply border-tx bg-pink text-white hover:border-tx hover:bg-dark-pink hover:text-white; } diff --git a/frontend/src/components/meta/VButton.stories.mdx b/frontend/src/components/meta/VButton.stories.mdx index 2bb4f1a5e0..5ecfca8e3f 100644 --- a/frontend/src/components/meta/VButton.stories.mdx +++ b/frontend/src/components/meta/VButton.stories.mdx @@ -5,17 +5,39 @@ import { Meta, Story, } from "@storybook/addon-docs" -import { buttonForms, buttonSizes, buttonVariants } from "~/types/button" +import { + buttonForms, + buttonSizes as allButtonSizes, + buttonVariants as allButtonVariants, +} from "~/types/button" import VButton from "~/components/VButton.vue" +import VIcon from "~/components/VIcon/VIcon.vue" import { capital } from "case" +import replayIcon from "~/assets/icons/replay.svg" +import externalLinkIcon from "~/assets/icons/external-link.svg" + +export const buttonVariants = allButtonVariants.filter( + (variant) => + variant.startsWith("filled-") || + variant.startsWith("bordered-") || + variant.startsWith("transparent-") +) +export const buttonSizes = allButtonSizes.filter( + (size) => !size.endsWith("-old") +) + export const Template = (args) => ({ template: ` +
Code is Poetry +
`, components: { VButton }, methods: { @@ -28,6 +50,25 @@ export const Template = (args) => ({ }, }) +export const TemplateWithIcons = (args) => ({ + template: ` +
+ + Button + + + Button + + + Button + +
`, + components: { VButton, VIcon }, + setup() { + return { args, replayIcon, externalLinkIcon } + }, +}) + # VButton @@ -48,11 +89,13 @@ export const Template = (args) => ({ variant: { options: buttonVariants, control: { type: "select" }, + defaultValue: "filled-pink", }, pressed: { control: "boolean" }, size: { options: buttonSizes, control: { type: "radio" }, + defaultValue: "medium", }, disabled: { control: "boolean" }, focusableWhenDisabled: { control: "boolean" }, @@ -69,7 +112,7 @@ export const VariantsTemplate = (args) => ({ {{ capitalize(variant) }} @@ -87,20 +130,24 @@ export const VariantsTemplate = (args) => ({ ## Button variants -### Primary +### Filled -The style used for Call-to-action buttons, such as the 'Search' button or 'Get -this media item' buttons. It is a pink button. +These buttons have a solid background color and no border. + variant.startsWith("filled-") + ), + }} argTypes={{ pressed: { control: "boolean" }, size: { options: buttonSizes, control: { type: "radio" }, + defaultValue: "medium", }, disabled: { control: "boolean" }, }} @@ -109,22 +156,24 @@ this media item' buttons. It is a pink button. -### Secondary - -The styles used for other buttons. +### Bordered -There are three variants of secondary buttons: filled, bordered and text -(without border). +These buttons have a white background and a border. + variant.startsWith("bordered-") + ), + }} argTypes={{ pressed: { control: "boolean" }, size: { options: buttonSizes, control: { type: "radio" }, + defaultValue: "medium", }, disabled: { control: "boolean" }, }} @@ -133,31 +182,24 @@ There are three variants of secondary buttons: filled, bordered and text -### Action-menu - -The styles used for header 'action-menu' buttons. +### Transparent -'action-menu' also has no border and no background. On hover, there is a light -border. It is used in the desktop header buttons and for the content type -switcher inside the searchbar. - -'action-menu-bordered' has a border but no background. It is used in the desktop -header buttons when the (old) header is scrolled. - -'action-menu-muted' has a light charcoal background. It is used for filters when -some filters are applied. +These buttons are transparent and don't have a border in resting state. + variant.startsWith("transparent-") + ), }} argTypes={{ pressed: { control: "boolean" }, size: { options: buttonSizes, control: { type: "radio" }, + defaultValue: "medium", }, disabled: { control: "boolean" }, }} @@ -165,3 +207,27 @@ some filters are applied. {VariantsTemplate.bind({})} + +### Buttons with Icons + + + + {TemplateWithIcons.bind({})} + + diff --git a/frontend/src/types/button.ts b/frontend/src/types/button.ts index 1a88d05f4f..36abaa92f5 100644 --- a/frontend/src/types/button.ts +++ b/frontend/src/types/button.ts @@ -19,6 +19,14 @@ export const buttonVariants = [ "full", "dropdown-label", "dropdown-label-pressed", + "filled-pink", + "filled-dark", + "filled-gray", + "filled-white", + "bordered-white", + "bordered-gray", + "transparent-gray", + "transparent-dark", ] as const export type ButtonVariant = typeof buttonVariants[number] diff --git a/frontend/test/storybook/playwright.config.ts b/frontend/test/storybook/playwright.config.ts index b2d856ce6a..fb1d4bef89 100644 --- a/frontend/test/storybook/playwright.config.ts +++ b/frontend/test/storybook/playwright.config.ts @@ -20,7 +20,7 @@ const config: PlaywrightTestConfig = { baseURL: "http://localhost:54000", trace: "retain-on-failure", }, - timeout: 2 * 60 * 1e3, + timeout: 60 * 1e3, // 1 minute expect: { toMatchSnapshot: { // To avoid flaky tests, we allow a small amount of pixel difference. diff --git a/frontend/test/storybook/visual-regression/v-button.spec.ts b/frontend/test/storybook/visual-regression/v-button.spec.ts new file mode 100644 index 0000000000..a43aaa5d6d --- /dev/null +++ b/frontend/test/storybook/visual-regression/v-button.spec.ts @@ -0,0 +1,48 @@ +import { expect, test } from "@playwright/test" + +import { makeGotoWithArgs } from "~~/test/storybook/utils/args" + +import { buttonVariants } from "~/types/button" + +const buttonLocator = "text=Code is Poetry" +const wrapperLocator = "#wrapper" + +test.describe.configure({ mode: "parallel" }) + +const newButtonVariants = buttonVariants.filter( + (name) => + name.startsWith("filled-") || + name.startsWith("bordered-") || + name.startsWith("transparent-") +) + +test.describe("VButton", () => { + const gotoWithArgs = makeGotoWithArgs("components-vbutton--v-button") + const nonPressedVariants = newButtonVariants.filter( + (name) => !name.endsWith("pressed") + ) + for (const variant of nonPressedVariants) { + test(`${variant} resting`, async ({ page }) => { + await gotoWithArgs(page, { variant }) + expect(await page.locator(wrapperLocator).screenshot()).toMatchSnapshot({ + name: `${variant}-resting.png`, + }) + }) + + test(`${variant} hovered`, async ({ page }) => { + await gotoWithArgs(page, { variant }) + await page.hover(buttonLocator) + expect(await page.locator(wrapperLocator).screenshot()).toMatchSnapshot({ + name: `${variant}-hovered.png`, + }) + }) + + test(`${variant} focused`, async ({ page }) => { + await gotoWithArgs(page, { variant }) + await page.focus(buttonLocator) + expect(await page.locator(wrapperLocator).screenshot()).toMatchSnapshot({ + name: `${variant}-focused.png`, + }) + }) + } +}) diff --git a/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/bordered-gray-focused-linux.png b/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/bordered-gray-focused-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..d18e4dc864d563dcca414861512a3987ce12a893 GIT binary patch literal 2325 zcma)8`9IX_7ysB9V;NbxDQ0v@OepJZ$R3KZMwVRrmVI0XV~DY3nd&C8g_O&TeK3|W z*2ogsr72@q_K>aI=^wb??+@>Dp4WLj=REJ%dCv2C-pOW210K*h5C8x?MuvJ83}3*2 z7AHHy=A~dN8IB2MVW0z4ygR=N0GvZcdfHa#+;v)%mF4mUj;#RbN>C~k3JR`DG7R+U zNV%>>;$$z9;524qZBO=(y>c*7T8AX$&B?A0OY9AxNEU+HA&9e3-tcYr`nx2g`D1Mz zLJ7M*grK*x#@C~f@~}&Ew{-FFMBg7fgo@_FyrpC=1hV1ynG*`TaG@;5n{SwV&AR^s zl1ibm^|FKH)AcLrjmP9mN6w!FbO^0gkH8(32D}RXVy^6j8^`P>)50)Eg#}BYWYskYyBT+%QO>~HUIIK z^12H4edw|n}NJ1VS9$CtWro`)* zzEKm9XQp%Ssev~B-LaGzf;Cg-mYG9w8!mZsuD^u^9qlcn;_2I-c;9AziBGj!BMMPI z5s{ivC$uE*5VJ5Q=(awXpapF!%#E{(IBfjM4fSDy56H6u@Sjdx#wI3>>-5K?SN)EZ zlHmFgdp)O)xPM9^2jycf%w{IP5InjtHykeY4n-s!N}_+yRmB5-YoXPd!w z;m4M*Un-m$W@x%an^WDfp5Rq6;R~j=4XdX6B!mIkV?c5O$oI&PGca|;67LNN|MZkF1 z@#3!CPc#dQh`EHzYESV)nlo(NkJ&mTI)b*e z-y*mrYb>{NHF)jd{k);8?#0F+N;=WDIvbrNxiF8Ppo}zuR}ZIeAR5vboCdQ!DC?t( z&Rw5p@LqLxMWd@pz8HS4e1+tdkS39emk0)ZXxV^|qbq~d2mPdYL)`IqJDxI%T_leR zi!b@JzfH9)(T`{zxd^fuH9Hlb;w5#PEf)eY&Ykz16x-Mt2UIM%4C(`IC%E4!hw&Z> zQKGMLCi?A#7#v$-M_8`>8D7PazS`T{L&UD7MXFm|18rUjKh2nMHy%pYJ@4%I zG8!gwO+TH6s12lJc(CsN=`)(2ZaTQAvodQpe53G=F-wcV-b`D17WjB|@t1^=*DqYS za1e5z9j+&wMGa(X_%R*uDEaL-PrilcXVyK%!#?CzXV?r8CZljMZGhDsD|*P{Wx)j@ zs1oMfL`lF(@W4`Pxq`BCJ2VnO#)m|2gzHXpH+Z&lFM;v}Vi`2dY|Xh)C=?*bM=e0} zo)w1h0=-k&OnJy2Kh4ku>HSSwqP=QB(2PTOXJKQxb`*^V(4y5{_wv6F4MolSeMt2m zb7Z=dhN#hXs}YuN?Mxa~Mer`(3s2-1I2jvY)~MjYTsqs|s`Ehs-$sprwvUI@Wm>dp!I8DYQTm{veJd*-8-e=~`JJAF8c)iCB5cLOtRu|w0w*V5P5=M^ literal 0 HcmV?d00001 diff --git a/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/bordered-gray-hovered-linux.png b/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/bordered-gray-hovered-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..24f67f909cd9fa6581cd11b8a5c2bb6f0655c069 GIT binary patch literal 2170 zcmai0c{tSD8~>_X%-El?N48tzQr00&_SBe$7+l2|OQSFtG$Yp%%64-@LX>QSYZ*(5 zsB95qmoaLLJy`~0-?HB6&)@U>?sNY*=ks}=^S6F`(Hda_l=n)r0DuREG&Q#U<0X64%PRSX6!%KF70D4%BB!iw zM>tcf%!N+N5N|RvU80|Qm_si69OuBcqhNhAH|vyLhP_0 zI4&hZ1$!bNuKUa=>tJF_Mp!;6$Gx;~8FDdbEP3`xczaMsmz<))G2FxSKM4`_4BZHG zB>_1|-0}9PZ-8d*|2In-DyY!PT+K6TRoUTELO`389V-Ov;0pDE`szQ_|T)# zZSwHWWvyMj1a6K5mp<6%b#uQn6^zwChq&21K;`X%IJfw9O3m zGInBOj%T}L$uhJw@daYuqf)JUkh`yy{{v3J)5c!+;8Go z(U<^1Xra*#35rln_3jZzw~+RBIG(=R(%n-jcaN*e$Km_z_sK|^5Enc?E{Jz_8yzcH zdr`$@c`l-~;>{ju%-xuQ@pE&Xra zS}onNu0wItX6DyTn1$T($sK-rQ|V8f9@ovWiiO3RZ0rjGfHLkB8FsLXoN`T?E2WhZ}Sg()l;c?;-? z*a%6AB-q$PKd}3I>>m_On6d6*%T7K5sZ8XiA2aNeWE|G`)P^557%x=6e%q`>K^Ij} z!pQ-f^mX=dO+n2rXF2_db~)-5R`dD>aDm@GY&Uz6xoO)4uH&(?Eu54CL(bQT;-W>9 zGo?)lKH(QUWbRws1XR?pZR$iKgE@3hYT1`5iwX3mzUTKv;m%xXWxOKjS2>&)YirG6 z*Nm_9zGx(u*4mbI7-U5sKQe0-dLz#h&(l(=i144<4TtyKFW*0B2Q4%4@=_s-pO2d6 zL3sxSYF(G^ffdaLba?qUe3RZkwm-?5iY~=LpS<3?9GNhPulB%u&u=tqx?%M<^*lby z{dyLPtbWvi^dsF(A>6>0M8Tco-|^0vO#W?TWF-gW)K!_66f2bhz%PeK4eq@R6$k9J zYCW7lt9^9R8GY)4;WNi+RZ{i5vas;)zuP5IMxw=HuFCP>VMsKE4zAFc^ z=;P!d4Gzg&Rt-hHaNzgEYm1bF3)+W-N6Xohdz>w4|B8cqRy!ytD7W_%{$=R6xWy<= zu0z^Ta=mU)SoMKAPdPc?5}0eI3!3?}h`s&$-kdt?qox)XD$aZJ1DZOIz=Tnxsnf&hI7=|10$4*K!h)&{e# z^;0&zV*HK zIMC>q@%j*P*9Y=6_NppmW#&byWtA!}`1HY=M>>XNki^SpEq^~;Dr|pJ;SlzRI$^Xf zI(_G6yPIbHx;}sNF(p|QYV?~~^bN|#uD7`S)r16r&?@MO%iS?994XLt^2X&L$>kro zgWd8D=Gf!xYeNH+tP6ypD9JD_E41AM;E z+7cJ;Hp(x|`}Do0c8dy${JC-9sidYto%k5Z#S^+0-K6j0VJZR0-L?di;F++n-S25T zvxTv%s1`L^dh)&~Yz%K|v8fFhZKmQmJZfafzNE6cX2E)3gg(O35G4reEaIr~(bfe~ z)&-x~Gk1X9J|PSS?dK6l!heH^;R0yN=i=>ujs(1br=+F08hgW1N+M40$>{pY(Y6Y5-xY(#vyQ}> z%qkC0Pu8GXaW<#k4e#4N(ZLq_TTA=EI&P+g+4eV;%Kx&U`7m*d3lLMo&=wB&qAD}Y za5`i*o4qlV+oz?9&>u`m*&cD`HG(DWGJfW%Kee>Q_2GA5ztcO55CGWH#u6CJnnn zxvHzGj962G8T~rCsUh#bu5Yvw)i&~Uw-#m0EfDtplFZ>@VF>h)=qWJ4n_pJO?=0OL z(f#Qcf7Fza2Gsh<*iw>v<%Fh76CmQOH0Zp;x4QYCk7eF*-L_t_g7K7%D{6}ut#>Uz zZ4BnT8ogzX;wnWLX<9%zA+YC%;txEx ik~TUk!u_x2(ecs+?rTU=o+0Nm0U)njH!U}DdH4@|$1m{! literal 0 HcmV?d00001 diff --git a/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/bordered-gray-resting-linux.png b/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/bordered-gray-resting-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..5c5eb920b13021f35fc006c527856e241f6f17ff GIT binary patch literal 2189 zcmai0c`(~)AOAV46l>L4TGmn9YSbC`5ea2mM59ry`;7ZmG@*`0iK{89Q8pCyin{A4 zsn*rlc2h-Ats-4Sf}(L$u-TdS&z<+3d7kez^Zm?xzn^F3^W1ZCuoV@S7X|=8)b0}0 znd^V&UP~cCu6>+yyOHa7Vw`Ouz_ULU7yuw-YX`ML+$vlBjB-LCrH_3}scQSn^(O&% zVKiTxb`ZEzR0)(SdZ9%(TqupMqo!JEqdOWjbU{B{+pkiPgt)I$_*6*#Y>PprCJ2wv zQP+q6y#*?lzNvRB9`KIj%mMU|1FWB?H)^WN6EcAk3=If%0mWhn+LBM<~ z&ewIzO=r7?)lZmtK1a*%i1ecJz#HNSR`Kag(d=`o>SvYNbd>^%pJ6Ema!Ko`{)oSz z2`HzS@&T?pKa##P#%$%q^Rq33pcxn9t9Mh>02ZE+)MV!f%ji=w{y? zQ0OO4w_ZHCNr(UrPkZIncYoJ)Ib}~Ef^?)}pPgO(h=ecQozud4`-Y@9y@@O{j90Lj z<&;pGwTeCZx}UTMp-@(DKd5nOPhE`&@2{iF1+aUx6Zt?z?indwKo1&SkhpNtdAm1+ zb~F7|>fIlLc=2MRezt8q{?MoxXcKPv+;ewY=RcG1Y*FWTJ4o^|fQ0k( zj^>bQi)gvD{zYY`pZaTF>p8Q}r^W(*_*4e_VA=29y%Q1_F7j}6au}#*PP(=|3uGh? zypd>X1@{(;2-B2Soz9W>w}mmfUclOHSI$(1;Tyjehx|#&3;`!?k2`LZsQwM+QI%QB}ua_=<@;lRGaH|a-d=l z%WF2$kk{7DG1O;bOROu?`Q~WS#qlWFPiH$j62Fwi#kB`sHyIW_AqM$KL_8>d;M14N z1Mqublq1DurRBtcOVbs+RihfY6=nwl<_EhPm~J*+&%i-jnw`LeyT|bXPI0}$+?W^{ zgAcYb$wys{X`C;o7`c?^gIV;?!`2OO?x7#{CIiMVtwT|$R}7q{>8)=7VfG_Vw<}OP za?UbnOW3%K&RXGZw-HT=vwShH8|c2c%~^(r)P?{+piE$AUJQ);-t4I*UY&SJbq$k4 z(CkZ_k(0jeAKcy^ zcdk+bA8qVr^Vg{-S?SHrJ{Jj*#1m=!5CRgIDG43@9)m~Vn|$PGY7K*%Q~pjNyzu&Z z7-R2e&AgmDZj!s>n0+=AJDy(GIr%=d5p*D$)XS5bo9q5Vxm}H^QyVxupZ9cZV!p3D zp-CfN;;xC28N0_SM&I!JtQFALQuJ~?`si~d*x->ODlDwp(VUY}nWhr7l0o^pWJZV& z{X82$zYKkV-Y!GPNGVtuc?NXU8ATiBa(V*beX$ny7D>3`VUTXuaphk|%u1}ctgBGm zUcKST3g<6JsctuJ%&e|c-W{;BnQiAV0(+M?D;fA6RR1G(?9#Sk>tg%>muuQqwMfZw z0uinkws4Y*GRD}8(>G=aHgHzj9g_8s$QJL7FCygaeivLqN>{D9I7vp&zyPv(3aFKE zFvQ0^pUImk3KcqVQDCBN#cGL9p7J*|G-Tz<93`W~=0u>4lk}}BM#1&#%9upcUzTj+ z%{?x^Y}N9lp}``yCBHcWFW?v66q zPbU~&?@wu(%Oztde?{YD^;?#X2!cc1lIuMGPnZ9z+U$rVSt76zSx4mlF91831N0fh GEA4Mtd>{M( literal 0 HcmV?d00001 diff --git a/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/bordered-white-focused-linux.png b/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/bordered-white-focused-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..d18e4dc864d563dcca414861512a3987ce12a893 GIT binary patch literal 2325 zcma)8`9IX_7ysB9V;NbxDQ0v@OepJZ$R3KZMwVRrmVI0XV~DY3nd&C8g_O&TeK3|W z*2ogsr72@q_K>aI=^wb??+@>Dp4WLj=REJ%dCv2C-pOW210K*h5C8x?MuvJ83}3*2 z7AHHy=A~dN8IB2MVW0z4ygR=N0GvZcdfHa#+;v)%mF4mUj;#RbN>C~k3JR`DG7R+U zNV%>>;$$z9;524qZBO=(y>c*7T8AX$&B?A0OY9AxNEU+HA&9e3-tcYr`nx2g`D1Mz zLJ7M*grK*x#@C~f@~}&Ew{-FFMBg7fgo@_FyrpC=1hV1ynG*`TaG@;5n{SwV&AR^s zl1ibm^|FKH)AcLrjmP9mN6w!FbO^0gkH8(32D}RXVy^6j8^`P>)50)Eg#}BYWYskYyBT+%QO>~HUIIK z^12H4edw|n}NJ1VS9$CtWro`)* zzEKm9XQp%Ssev~B-LaGzf;Cg-mYG9w8!mZsuD^u^9qlcn;_2I-c;9AziBGj!BMMPI z5s{ivC$uE*5VJ5Q=(awXpapF!%#E{(IBfjM4fSDy56H6u@Sjdx#wI3>>-5K?SN)EZ zlHmFgdp)O)xPM9^2jycf%w{IP5InjtHykeY4n-s!N}_+yRmB5-YoXPd!w z;m4M*Un-m$W@x%an^WDfp5Rq6;R~j=4XdX6B!mIkV?c5O$oI&PGca|;67LNN|MZkF1 z@#3!CPc#dQh`EHzYESV)nlo(NkJ&mTI)b*e z-y*mrYb>{NHF)jd{k);8?#0F+N;=WDIvbrNxiF8Ppo}zuR}ZIeAR5vboCdQ!DC?t( z&Rw5p@LqLxMWd@pz8HS4e1+tdkS39emk0)ZXxV^|qbq~d2mPdYL)`IqJDxI%T_leR zi!b@JzfH9)(T`{zxd^fuH9Hlb;w5#PEf)eY&Ykz16x-Mt2UIM%4C(`IC%E4!hw&Z> zQKGMLCi?A#7#v$-M_8`>8D7PazS`T{L&UD7MXFm|18rUjKh2nMHy%pYJ@4%I zG8!gwO+TH6s12lJc(CsN=`)(2ZaTQAvodQpe53G=F-wcV-b`D17WjB|@t1^=*DqYS za1e5z9j+&wMGa(X_%R*uDEaL-PrilcXVyK%!#?CzXV?r8CZljMZGhDsD|*P{Wx)j@ zs1oMfL`lF(@W4`Pxq`BCJ2VnO#)m|2gzHXpH+Z&lFM;v}Vi`2dY|Xh)C=?*bM=e0} zo)w1h0=-k&OnJy2Kh4ku>HSSwqP=QB(2PTOXJKQxb`*^V(4y5{_wv6F4MolSeMt2m zb7Z=dhN#hXs}YuN?Mxa~Mer`(3s2-1I2jvY)~MjYTsqs|s`Ehs-$sprwvUI@Wm>dp!I8DYQTm{veJd*-8-e=~`JJAF8c)iCB5cLOtRu|w0w*V5P5=M^ literal 0 HcmV?d00001 diff --git a/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/bordered-white-hovered-linux.png b/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/bordered-white-hovered-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..ef67a126ea915915afa607b42e705007a82f15fb GIT binary patch literal 2173 zcmai0c{J1u8~$0Ywc*nc2~)$R&nGwAT&=xS1(0owrtO79iAOf#-HI zMvCJ6j|F?VykY-bKB;N|KQxoSy`@u6YtT=MnmRhCOCUUy))#7QoPb~PUFi{MxY!`2 z6Lj`dXtSfz^`T4c?kTQ@v$3t@R!4Sa2QQ7*fZcKC4{dHkpy6{o8U@-hR%b;{gCFoP z;ue8_F6Y6Rq=uc{3M!no?)Gxm|Jj_k#`DMQWk1HyKwmP+Oj|UJl1rmUxxaof7w8AnXugxU8t%d z>OKF80D0Bt5by9S&$7?Jp)j5U-x|LErZ8+%%ZsbBB~;?RtgJfz9p)u=`mk}TBTz{z z2=5@R8}UU&>*kce{jQi^3qj1Sz#dmtRLaInAEfnRt=`=orpaSnhS*7Pe9_g*I}7yA zfk(uGMZJmAYU9Ab^PCxx*mizF1j6}8%ug<3Y*PJJlXE1O@tLkQ;WfnE$ddWTy<9jB z#K)7Fl{sMGOsQm9=!;6J0q6W*Aa7oAQP!j5&8Zbsl(B1N?>?Meuwj2jK}8&}vv;~M zj-ohn1F)k#_dNOY*M2d#Cv29-ys3%eC5bg)`t$CEJs#dF|%)P z-zTVU(lj7AKgemfsLbQg|F%Bin_4S{@eBUXizZqNBsT@fU5@;1n)zzM#8^R|A zR8&-V`6r}rF3VL&2_uvcsB7)Y<71Nt!hhzn(fL8|+qS_!V4Cn9?#h(4V3IONR zC|R-}8#{eGNHvURh9QN_cpS20&F-l`$@MHhbJ(Zdor*wV;x_SZq1^5sv=8NB`qo48 z9&&;RCHAT2VKtD3sPFvrtqV(N9{$CjRnz9?HgQ&pte*Nq$j~l5cunkS#{^KgzmOu#$t$bW#=Pmcn2p;(xpNNcr z(fnsg?(LXVb$cLYlenz*+-h{^1vqbs3W0Q`T#9}|rz^V~zh6-t8z18a0;`Cpiivb*)X~*#!ZATR79bLzy+JF}QB#yj9`}zbp0T*_~1yhf$ayOiZJ5l2;FTq2VIcqQRm+ZJo|y)o6u* ze97hZE~pL6-N-r=_>!SW^h^sl5ILGZ5ohG;CPdDV30Y+lkk%U;CC*tbeEr8Muqr|0 z`_)_$%(t~?)#U=L8Q{GJ8Vy0ecWlN#n4Ted^yp_ekBf^7elufiqOw0N_nKK#zWrpv zLF>of?zniVg>SpB*`&dd`T0G50I)>wH})NDKj@gkg!f`JN0lH%SgqHHrq8~D&}J5V znij;W!74(PwZmM>lR!zO-Ks)5V=@L$EbevudG3zOX&=a&LLWiPfnZod!UG%0(Y6Hb zOpU1H10n*24@C_WibkgVqf>7EpgMXKJ+G_{B$Ep?b+w8~X%+f*0sw9H*7 zanB-aXKnFx?HJYn=<4cbx1%PAUXVp5*S|@q6aVnwoE*O0$5!K|B-x!x&S`HSXIDl^ slcKG8SXOxlnS69Sc=ca#{x8&9kP?#uKoR>3!uclv3%HGGHOw>iZ`ait-T(jq literal 0 HcmV?d00001 diff --git a/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/bordered-white-resting-linux.png b/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/bordered-white-resting-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..756e0a061e7ef861cd2b29c044e683e94409e579 GIT binary patch literal 2031 zcmb_d`8(7L7yn9`a2X6&mdKt$Z?Cn`XtHK*Mh%t5a<83`Voc%MxuvXOvJ66Rk+F=W zCX6hN$TDVWY=vP4F_y-RZd2~O|HJ*^oX>Nf^Ld{0Jm-9#^SO_>Jg$&SfVUfFDy|1pv?s7yI)_O!>xaI0DI00d4K4=J>1pmHNCF zdqNIvOnj5<6{#ww?72iV8}_L3nYL4`3#*}+`J6SEbaAecD2ErGrWf4GpBRcgs)V2h z6qF_)?5d28l$|(6d3)MuoeF*yOhg5o=T+Pv--K}HI9;5(aX;h7ro4j!?d|>GawjP= z%?4_qJjp?^09Z8e1fg!HulR43y`YJ!tJ}-Uz7HZ<1`!2AX=QMIMd5DLaYLiG?R;6Q zv6ytDa*Vj$iiQS4PR->N4B@BWM zbZd3B&lm@yx`jwdnR$GKwY!IpjIQKSTYNI~ zYm}vXQWD9`2Z?YFdtHFu#H?25R^L!^4ST&)%~1ijqg;p{EtCA+sHVaam;-SO>-6W# z1uXoTB$R6}hX!BsLP-HkqK+Da!I;FfnMmZH&Toz%9(&odxVik-4W(?~6UsU!u&nx> ziv;rh!%n$NI!x%{(mE}x==Hs3vTgj|zcB2fAYZz|N}oT%E8+HlhG-1~4lA`Ad<*ga zGN52l>)>}|atd^v+#N44@@gt1K!U7C9i8IISjKJ@E^3ab=e>5L?8bZ@qWW2@Z|H%gW%Y4Rg>+p@>X z!Y$5)?&z*tV}O~sjl6ebxN~XVGjV+(X4;14Dv3~GvN9nlciNOwTUwBtz0Ix6?PZMp z>fS=xTfvCoeZMnqa;0NAE#`Nm@5RUGzp{|bF+JKMsJn_lB0}89X9yh&fBZOfFe|h7 z)P&}srjnLmx6^3)V~E+)2ExdCM&Ns*2JI{D#g+X0B13vmKw#fozxQ-x*DR1&q|pHJ zys%sc3&9)#s<@~|QTE)3-Q5_8po~#nVz<9 z^~H$1O+tW~>iw0U5d(EiCXZfiPCAGMgqR{m=t1|s4bJ^vH=l9c{$3?|w%|BP&yk|G zA!-@%?3)ko{M+0WS6FV2HTiITNN8~;Vx?87&xF$VDV;ezwZIp|8P!MJ3`y<(1++@v z&=Mqfr`f9FQTbuhUi*j0PjaxFvtVGJ|Ik`J$f~M=;9CEUJ!uIf%e?q9%C0npVtbsDH1;z?D>uTyT+EmDBI0XZ$KkyB{e-A8p>;9HMPwLStMBr9-idu(${i`cQP9qAN7vPeQe z@@zQ@3)c_rT3<5Q+xp?Z$Nl`-#b0A5c;YSr(l}}iB(t9d#e7;%M^)#Av58}9m#K5~ z2sFIt;}13dH{921N>~*o>{i1YwcZt|!pzJ}c43Czt9XG4x~EIJt|$;|5uwWSFxTO- z*0>UnJk$Js8){x41b7$oZT>R>T~h^m>7z{T4d7Tr^(v7Gyg~Bx8DQqZ^s=!T4H9x$Gkg#f?lft)kHZc2V1G zdIH3^4jfioIy!tI?yB-R(jJ(%t3shtP4VCt{cd+6I}SXQ-oRL|cMi-oL(^~IfD zR%Rn@acd?E09MuhwB`OZNYAq#*W48dsG!Y6JL1+6udd##RADi-$2LA|)(RqDR8mo} z7PD{~xgGi~ue8Q#$8bn+T}txsQwTYSN?hV;Rf>D!>Z>@~tdQ*knqKlp;CDB>!ue;G z_SF*Ze5Nt&)vkOjBz2xTg!xYC7@dk?K`o7@<8+H(hPUBP;YiM;2Q*4SM)va^8(iitZ|Gtsg>C=+LZq|1s*=T1s QiX0qpakylUhxw)c19ceXSpWb4 literal 0 HcmV?d00001 diff --git a/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-dark-focused-linux.png b/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-dark-focused-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..709559d93283486ddab19e4170f1e249e3fe2562 GIT binary patch literal 2332 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 literal 0 HcmV?d00001 diff --git a/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-dark-resting-linux.png b/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-dark-resting-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..c41366e55e2d58241dd40e875ca2311134587ae3 GIT binary patch literal 2127 zcmai0X*3jU8y?Eur1u~pp~-fl!H}h>WE*>im@Gq+WyliI7<+soBN17L$yQm@sIi2W zVN^3jV{c|G2{W=YS?8PgobS(f&i9@7$Mf9h{&U^Wxvu+ut~=e)-V!J(D+&MrfKV$l zCtk$!&Shai-i^zMZR7>M2q#NZKttcj1pq);1ZsB08C~+59^>ddCqrHZf3be(BH2AE zYBN;X&Bz(O>m+qd>Tn=i!0|A6;Eb0NKSME7#R!UZ0hO2A(`tm>q)33%L`B)WGnxEI zY_E&F^NhT?Fq%^|zN0lA$&>He#k~gXWQk$|Ift zM61punyQQ79j*D*a&!K73PValjY~hirA~QhwgzIur-k~W@S0-M+uFnQ&8DEj6El7( z=}R-pu{iAS%kGa(WhE>cSr`h~{4r8M?)Uiu|1a==l@-_atAkucoUCcfRM4yV0sMYV zMMcFHx0Fo27o~L+48JevNZ}YavQBcytCxdhEAVPQ>zQETV31w_+g+F z<<&`}(O%rnLV1~Fy-A34(GxmdF%Y2JvOktt6{=D3>{-&)0ijIVlqU~bQc7}q)77D3 zc;7_rf*V=9+!GnqLX)w4O*wsulg%ZZ>m6VF1@}tulgc$WAVo#2z^Gv6=Pl|) zfqu+6DwT@f#ngtdh0NgqRkS_7;@y2AU44D_Te8A-T1pF=#b#~vv~#<0qa;vl(XOGk zNK-xIh@t-n4-=D!`!v|XAIeJbW{Z6V&H%k}3~pHVSB%CZky43?MePgV{DKrWI5zX#4Cd;7jBqs`N2atRA%O>Mfr{h0VxK5;=}U zL&0RcjW0KDY3)wkKEh0i<}8_6nq7+~Xu4j`xrA@BOa{0s&8wW@^M$EfN92WeLN=gN$)GzO?c)di`aMsw@=G&MBTG&S`C7VAd*4!s(^lvaMffgc$Ir4QFc!~6V+7r3fd z-~cv@H9tmpeg&C;;+zd}VU)j^Tq3k9b|u!hyNm*xzGuo9%u72n-hIx?ISY`KK7OZm z?RZ@M4y)%P=Og{zrwgDc_E2a*fYysFUSbkiB-ScDev(=WJ(N#)T{Ek8I1UX zEZ7fgetVov5sdvnN3 zgGm#_&;)`VbwOIPfp2DJDITxvjlz35_Ba&1r?`4mCvXqig17V6n^^wc_z%g6?P4Ld z@z*{2zJAYCSMOYVUtkiqJ1-C6#2(eu)cpHX*vP#*2peo_ZoUn9!GSD?JR;u`r%@ibR5-|;abv7_S9QILGA z7Y3Ih-KiVERJ}5G)_bjK1}nqH5^5p4;+Crmg&I7Lda#kz@9Iic>^R3qcB7VkXNDb3 zKj~*b%}LFeaHDU9cAt9a)6L3D2@wNn8cIpKN(XX1Gt9wa^n#A|tz&JPSbBDhm5sf5 zP;K`enpHWdoR`D|bRoE$pkLeI_ph^*!N3?1J7UPj61_O0EMZ`(EQ$Bp%DLBU{Z|9y z$C_icg(?m{XR`HAVSeOR-r75a5Smm_Sc;z?Rkd5FYMI3QrZi0SI+S7_$`Jh59$f0Q z`Y{FigV~wi|7*t#BbeYWYl=jIAb$OoP0x}ZcYi3M7`&8|h|x;r&Ev-WDoh1!`}6Wo zKGAitjYs)~+0d|W;ekOxh0|>6W9D9wy!+er597e!TjMlZ3bRC@WOu~SgWRh9C0Y{o z8I__Tvb3@XEX-FjZuDw;I9-18-E+HHVi(u5oov^!oLgM8vLR-%;}K>Fjug?;z`!3L zKn1I+s%*o{zD*f%5Fv|dRr%8-PH5l#R)a_3Bxj`cPsV=DL^dEwMK)8gtgy3Lm-s4l z#B2Jf0xIFTsxAL$x~{IS7N+0{>-`g{;S1TJ sT)SlL6SGkoN=DYh|A_J*2i#FOkhTmrJ+i07+YkUyb9=J}Q}6r#2IF%Z(EtDd literal 0 HcmV?d00001 diff --git a/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-gray-focused-linux.png b/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-gray-focused-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..2067c0479f6269c9caca3142dbfb933dd9a6cba7 GIT binary patch literal 2364 zcmaJ@S5%V?68(^0deI}r4ZQ@A8ajxIpi}|VJv_J$TgkA&%Ly=wr zC=wB*L+C+TNFW4)gl58@-F?_M&zU>-Wgh09Gk0cQ-?A~|{$g83X7+Q6d0v&@8SS-44$s&qq1l4iU%h?04}da%<+^~~&MDBn;g1Cni@{A*MAFp7TKGnNpAG0f-p97O7CnvIN(jy{#;ya#S&Ar8v1DsY1T zfU?a*XpJ=i1z^6-1o#iGrWKkhV++e{a9_x~@c7_GzIOsI7q;Y}P<_+2Z|)qn>6PJ@S2lYV4Nq&T z5YOi3<|(63ylge_1qZ3{efn(G9v9{Zl53A9&xseNrr3V*zQX2CJ9 z8}>l{4FZ!9F?8uGa?I0lcM|mX#}H(GPQI*7fvGK(=WfIvML~dz8oI_sTx~iMy!x3I zFCi4m(NzK;`aCl;Qy=XyppYu2pV-lH4Yd=+Xh8j#M(LFqnozEY%i7$OjShcK+{wxk z(m~^|Zl$_ZRS8-lkG6T6oLf(T4ZPD!^uJ%C+C&2Qv6`f!Y>`y@VZKRNT~0DiLyuZ8 zL>wt$mzuftU?_&i*?BgUu(7t4P>E8C%){92w%QLhG&ER=I^w*SElcwp2{6rn& z8}&Mg@yDk)dAKC~J;itIn}k$hJtVJYE|o>NHe-S8{69<9*iMb+qU28)Az zE|JdG4AODd^Lb?sPOh<|GqbnXwAk1* z*yk>JFIO)Hw4w2dIc!n^NA)_hx}cPH8coD27cFrkDl#IlhAL@Va@N<^SFvAdeRVXc z>-gzR-U(S!Ii5!28;5O9fq&zp=_(+3UJL^R92_4nR|KqVEMu+RKg8+14pQ@E_6=7Ofelcn{Q;U;#(HI3v`Nr9GCxlP;5BmksS2cyGbOCvLUuG+AJvt#%`lw!SuUMBjl&prSA2|G39Y6Mey|$nBk7!s7@n{?Ink->KMCwJx(3@e7B{sk3FSfq zp61`qD1KL}P^>P6bf#6L%Y=va1?k?A2VWLc@;$AJM*rHtQ-tAR9(UJhRn0~!ejewi zoi;A0sbL4vdv!-O-)d}dTZ*4kSxU?r#Q&U$bX&W^`tGIJkg9|4xjTOg%HkCnisk3#33i zY@w^d)MdCKbp=M)+3Hn}q;2*wI>5Sju(LRJzvo%E$TcDf)iS#zuOVnPXf}^Ez6q|2 ziN)NGwY4zu*5BIdAjTzi9FUogIj=8`pdVXKbv8YZfd9CEYuokLMKR_+Y;JCaEX%Xw z0yuY+Z(4XxBeW7;_)bIXh2sz2zp-{Vg^T^zP=d+$1t`wEf>Mhfy$ z2v@&QdF^6f`AEXcqA{X^nu>e$++X!)n-;jIrl!*9cXb-HwMCD9X@XEW6_u5m8z!W| zfl8UnZ7pp@)svsreoQ2z^!WA{I{aJaYrZ|M)4;R3S}vu)R1O+AVw4{B)d?U7154jm zl{Tm9^1c+r*bHQkcvMAH{zw`wnsK|-8GP2V3?b&+SYrF$F{3rRNa~ukdv8xF_(B9* z0voG@V66FO&(6WoVdM0|@bDR-a+U7x?kDYeEutqB=p~Jyi=PU@tLE=!T7uOW%V4$z z!?fbdCK*|xu8s!~p)ytVD25mkY8IJ)vN;xh9RB9mhz}-yTsKcnpsyrD$EPXUTsJVK zzgJM~`iC^51aXVrVb`<*?kzbIiDaG)IUU9ywlJSILEM}0(GK-7uzaSmldH)wB+rJN zPa1AoDuv+_LZ&m`W--?t^1Pu%uz^N=7=r1~z(&gTq8jNdQu*2HB_>U>tl{#twY6@} z3w$Gf^-|UB8P5?ce@5MU-WgwZk-|OaF?$`w&6*9wyHdPPW(wExs@!5E+ra(5f$I5+ z>z#)R%&S{5;ggh;-ulwF$s16{IHj1pb!UlI-*@*(jH{{Od>=LXJW5?sW~LY<#D1ob zv3=4Uyi(O}j}tR~-@+Xd=eZ^B!Jr$Vi3q?F(X!%HBb&if_(zPNut-lB@GHMRr_X$c O01FeF>u6)wr~d$=aF-_l literal 0 HcmV?d00001 diff --git a/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-gray-hovered-linux.png b/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-gray-hovered-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..c41366e55e2d58241dd40e875ca2311134587ae3 GIT binary patch literal 2127 zcmai0X*3jU8y?Eur1u~pp~-fl!H}h>WE*>im@Gq+WyliI7<+soBN17L$yQm@sIi2W zVN^3jV{c|G2{W=YS?8PgobS(f&i9@7$Mf9h{&U^Wxvu+ut~=e)-V!J(D+&MrfKV$l zCtk$!&Shai-i^zMZR7>M2q#NZKttcj1pq);1ZsB08C~+59^>ddCqrHZf3be(BH2AE zYBN;X&Bz(O>m+qd>Tn=i!0|A6;Eb0NKSME7#R!UZ0hO2A(`tm>q)33%L`B)WGnxEI zY_E&F^NhT?Fq%^|zN0lA$&>He#k~gXWQk$|Ift zM61punyQQ79j*D*a&!K73PValjY~hirA~QhwgzIur-k~W@S0-M+uFnQ&8DEj6El7( z=}R-pu{iAS%kGa(WhE>cSr`h~{4r8M?)Uiu|1a==l@-_atAkucoUCcfRM4yV0sMYV zMMcFHx0Fo27o~L+48JevNZ}YavQBcytCxdhEAVPQ>zQETV31w_+g+F z<<&`}(O%rnLV1~Fy-A34(GxmdF%Y2JvOktt6{=D3>{-&)0ijIVlqU~bQc7}q)77D3 zc;7_rf*V=9+!GnqLX)w4O*wsulg%ZZ>m6VF1@}tulgc$WAVo#2z^Gv6=Pl|) zfqu+6DwT@f#ngtdh0NgqRkS_7;@y2AU44D_Te8A-T1pF=#b#~vv~#<0qa;vl(XOGk zNK-xIh@t-n4-=D!`!v|XAIeJbW{Z6V&H%k}3~pHVSB%CZky43?MePgV{DKrWI5zX#4Cd;7jBqs`N2atRA%O>Mfr{h0VxK5;=}U zL&0RcjW0KDY3)wkKEh0i<}8_6nq7+~Xu4j`xrA@BOa{0s&8wW@^M$EfN92WeLN=gN$)GzO?c)di`aMsw@=G&MBTG&S`C7VAd*4!s(^lvaMffgc$Ir4QFc!~6V+7r3fd z-~cv@H9tmpeg&C;;+zd}VU)j^Tq3k9b|u!hyNm*xzGuo9%u72n-hIx?ISY`KK7OZm z?RZ@M4y)%P=Og{zrwgDc_E2a*fYysFUSbkiB-ScDev(=WJ(N#)T{Ek8I1UX zEZ7fgetVov5sdvnN3 zgGm#_&;)`VbwOIPfp2DJDITxvjlz35_Ba&1r?`4mCvXqig17V6n^^wc_z%g6?P4Ld z@z*{2zJAYCSMOYVUtkiqJ1-C6#2(eu)cpHX*vP#*2peo_ZoUn9!GSD?JR;u`r%@ibR5-|;abv7_S9QILGA z7Y3Ih-KiVERJ}5G)_bjK1}nqH5^5p4;+Crmg&I7Lda#kz@9Iic>^R3qcB7VkXNDb3 zKj~*b%}LFeaHDU9cAt9a)6L3D2@wNn8cIpKN(XX1Gt9wa^n#A|tz&JPSbBDhm5sf5 zP;K`enpHWdoR`D|bRoE$pkLeI_ph^*!N3?1J7UPj61_O0EMZ`(EQ$Bp%DLBU{Z|9y z$C_icg(?m{XR`HAVSeOR-r75a5Smm_Sc;z?Rkd5FYMI3QrZi0SI+S7_$`Jh59$f0Q z`Y{FigV~wi|7*t#BbeYWYl=jIAb$OoP0x}ZcYi3M7`&8|h|x;r&Ev-WDoh1!`}6Wo zKGAitjYs)~+0d|W;ekOxh0|>6W9D9wy!+er597e!TjMlZ3bRC@WOu~SgWRh9C0Y{o z8I__Tvb3@XEX-FjZuDw;I9-18-E+HHVi(u5oov^!oLgM8vLR-%;}K>Fjug?;z`!3L zKn1I+s%*o{zD*f%5Fv|dRr%8-PH5l#R)a_3Bxj`cPsV=DL^dEwMK)8gtgy3Lm-s4l z#B2Jf0xIFTsxAL$x~{IS7N+0{>-`g{;S1TJ sT)SlL6SGkoN=DYh|A_J*2i#FOkhTmrJ+i07+YkUyb9=J}Q}6r#2IF%Z(EtDd literal 0 HcmV?d00001 diff --git a/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-gray-resting-linux.png b/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-gray-resting-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..824cdb7d3a30947fee6269f28a07f11dca63b325 GIT binary patch literal 2211 zcma)8cQhON7Y}W%3aXwF)aalORRp#3jHE$OlxHhNW0YEakqP7klownWUlAsZkN2$PA+C%nj7dx8@INox$LKAZ|Zi``CU z9~&JFC|4%GQxmAsj;ir$H=K7@j#<@J2P zpysINWRO-$<>E`f(&bfSB*34r-K6dS96Fa|v9Pj{mbZR8>=5{n;|3 zK14$A4w^_wD_N86yX&dUBX)oDZ`GPA|4%(icNDDWqcRgXSbsh#o33d!>ONMI)jB7k z8r_hBt2kl6}yq=+ES@1L*BK|H{%j{=IQGyWHNc&2mMvzkovsl*~eJ@e1_k^ ztLxbu;=-Qct>xtyg=9RO`Ye`c)3Kj?@lw-Vksa*z%=_e{=E#52&gbjMxMv_Sy*q!| z<2nalq;G?W>gaMFkSp(Q3Jh9gwer>i^9Itwfbfqk6Q#vE;Iy2zP(=IgeB ziWiYduJ9vE?t5&~zzgx(6KM}=2DfQMG@I+S2s1iGY_<+!mYk_O7maV3wl5P8z%Aizgr-D7y!{chvOW5N4e0w7L zL=M^e#%8S9Z9UK|H*n2s&3s_C<+eH8{TLTwv-7UJe8qDe;ppguQ?2Oo4h;y9WR~4z zdUD;0lbfqXyEXVkI!`1oRaiAP+Gq`Q>c4cT7E6yVKS#BG- z<$iZs+@b!=dwM!!Ep8_s8qb)jv7=Ac#pxa&ux8|E@j#9azc6^WWwfOUc~)MdqFzDz z`~ZJNg1MHWc>=fS=V4S%#*vY7M-dck2m2$MMU#m6h5j?9r9~&|aPLz`wNu=tNs50) zK~8!@BaT?GSy)<{k`x`sjGW}15B5;TkIV2C^4=fD_U`QZtKomGE#4(Jocb$lu5NYr z(zBVZsIga|LN9J=PY-Q2d_z!9krsjwAtBq}A3C5!_dcD^2?#r`2|4!nOeYI@?l1mr=OFq|`)pcBFd zlaVogh`kx=2nMB*dKvj_9xU9C)snKQGCdz~i4`vFUv_agkXo5tdiC3&mbtY=7fG!q zm@O}_VvVSMm}0Vvw^hGCr2sY;9i=3KSQ4(LX4fSqwa0~dF+Q>#$|t*|5N+a$bA*UZ z!O=_MJ}VwR{kZN_4-N^4rM@(@=z@%l41g`3_rdO@f)N#TGqC5_XuDB$qvYMYTHm?) zJs;h<*6f9sZeQxYew8#fF>c6;5Q&+2+JJqI<)5i6dW~R5e}GM4Y4UID2bfa=2&T_m zFvw*w$bI7A;Q<*b;FFV+qvGoln^0TdyBvb3mf+8l^FNBZuU z<>l0>PK@T_31=V>SHOX!4z;^VNnCYd@dvjPNFznhZ;DBD@=9oFv(>Lot#S5^-WKea z%nrL;jA(;RSlUl4IMkPhDbA63x+u8#b&Vs&L{x}J{8nc#;UY8EEV9y*@81KR(LR`E z15+m_@h*3$+5J@udwb*IVmzRv(e{(v2njGq@)K3w^~wm5&0g5}bOoK)C!~d%pQXgj zeu$pW1ZC?Y3|C3+OKX`Az@P=e?n?BW`V86GbbMa^BxFTiie```rb!-Z1y*`GkB>I{ zZ%qjNCU_^jnBPUug-J6}8v55}AahkNK^edVBVaMC;!=P3255;+pP}o1X5|<}w>`b3 zsqyIBA=+KjbIB7fG9UNRuEzIKOYKuM1kfrTsS$C&O>&0@Yl>H|wqm44U6CViOuXnd zp@frN0U<@lD~}_&m+Sqlg5UM&^}KUcek$68!*;=6U)1IjlQoo4LzVIg=-|d=y0)g$|A%XeW_d) zkl#DQ_4-PT{&mhm3u9JUY!=`@TwkuQacILUXD9PH@vLj~1$ij}!P8@PVBPz5`}ceb hM&tkU_rGBu@J@MYXyE40NinYu0NlvTuw36Y_FvXAJ5~Sy literal 0 HcmV?d00001 diff --git a/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-pink-focused-linux.png b/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-pink-focused-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..657c7895e2d97b18e88f2d280cec0a223d5ff3fa GIT binary patch literal 2272 zcma);`#%%a}v4D=Ir|q^!Wbp{Jh`4eIAd`=lOnpK2Mz-EG5Mh#Q*?+q_vfq3$MQ9 zVSG%Ox0Yby8hC{-+{MxqQ2$AJ1pqjPvo4-zqV(J%4I;KXu)00%$Z^^wUyZleZ<k6qeUK1!;>os zBSdIw#6KkU*woFp2>p7Uc`+X>$$>&+lJ-6eZm(giKiOhx6;{5@^@IV}GMl|-Zaszf zo+huqE+nRD#slTafaOVf0Uu=fxfk?`ShEkg{M&13Z?Kb;$bK!Ycw`9(pvJ7ai!3)4 z{?1nh^AwcuRdN4uyHPDq;^qIrT+p)3k5M@y*QiRj(ky+G(!qv|Cp zyRy)~112gtS3$;*JY3@02|!x#iPdShrh-$SwZ6D^#DRP2gL4+0JL1q@9FCNB8)*EJ zn`k;IC-ni|-z+L2sqpB1`Wgqh#akb$M4aY$QYmE;t+)^It&0 zWtfT29M`Ij9bi?GZw<3t_`yv-FSLvXiAM%&%uGn(xG_?(2&7rj^my|i3N9v?pv$W1 zUPM`HpFVTvrlFDKY^y_kuc!H%Wh)^tmXULw^z!bz%8tir%`01bp(y|UrhPd+*lhL| z%MZ>7fIq8n>|r1z-NWy7;tXJi%JF$m?=0ayR!=<p1u} zc}X^Zf$M)^$)4y3dSalv!$2qyj5329^$Ng9gN2*PMUAR+gQh@K3U)(tQngJaHnH$J zkl3{E7EN0oU_9SGxF@G^zU^(1Q_YFOmPPjCGn5pXua@3D511Y7k@RJD00|YWVQr9u zUf)J^C=l|qv&-JK(aaocQ=Xzdtd_2RsP=zx$Rt{qVlfO?an?oLpqKmL9+qh~4#}xD zdu3ZmxbMU9(%tHWlKDckGiW18v}?iOMB=&x__W^_ye5gblZA$7)O7wrny7!(7UXznmc}9V-7NxT~89*7jKqGdt9Ojwy z(ES237_9oC@(C*hCT%c5F!un=V3jLIhIrQDyWZTN6R{COXp`{-%E|pRNCr|@;QB1Y z72h8EzHS%VOt-Sro8)YW7ZVjnwML&Afw8=?rb>B90cAv-o9V~;jRCM`rKncUlCblz z<^(R0pim2rrwR!l+{6#@Iak4sM@xQ1%M|a96{o&TNBYY$P&&ZKiR$myqB2g57s};c ztPsG92lKj4ErWMK-32>Ev}NH;l<~6eiKKcATsh^kzLclaO0KZv>UDKjH(#w1JJYnZ z1MrKAc~Z}IXXoeqC21=0KAf%}*pH~77tk>ey+2R9wo2V_T&W8ox~`dZIc34|d@$FG z(8{*z1C$caB39}DJo_DzJCZJ4TE-c=kSpoO%dlnMoizr{%^$3GBqV zd-SByov503LAYJ-vN^(*`m}Qz2mI4F&*50f66K2kquce*&{$E*EL&&i_y6QdDz;!G zzQQ34ecz6t9zK}%fu4DFgn9+&hSV#KKg@z;fmJ~|M^a_aA-a0(`pBHX(QLw|Okixy zCUmWng<>uKRPZhaDx$L?;=P)tvuU-6{Y#LxICImma|R=hmRAii1xP(NE%v2(^T*5_ zVSgCNqVc-%r!9);fxwsEFuBP`8T4yBwLiCWBt*+CviB(@UZj3-T}%I3%JaKbDQhft z#&Rdk)WV+J*V)WJv{t3y0?QV!9a_=9ugZAJZ*im|O*|{E*Pxt%;C>#~#No&d$jquw z<`d1XRwX*{K@MswF97UuGMw|?L}tYPW1XR9WAE*LFW2XX9!nrK9eeV7B4jLxwJ`0t z^DPw3p`P0gz~~zUo#dSa?;#rSwjBn&ignpoy`7F4jz8y2YTX?Gu~`=d_5i$rO7}F# z_fZ)fkE(e*1ySu(JJly*J$hyiEe^+MsU~pesRacM04EKfpY<3D?eFt^U!pYcRg2n_HPB zYqJYxofE*7?FB<+Cu90h&|7s8IO+l<5~L#A>TjVK8JZ%UtR9~$r@8-|hpdgT(=S;) ZD(4hzFWiVt=6zWJ*5(do^`<@v{{pZbY`6db literal 0 HcmV?d00001 diff --git a/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-pink-hovered-linux.png b/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-pink-hovered-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..8bc5e31a639d6ea5f2165d17680ecb723a85ffac GIT binary patch literal 2120 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 JsP+Mg{{R@u{qz6; literal 0 HcmV?d00001 diff --git a/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-white-focused-linux.png b/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-white-focused-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..ef717e9b16928f5070b2aefd7be2327d1e1a7392 GIT binary patch literal 2320 zcmZ`*c{tSF7yrtdiBQ(jkR^KzB3l^7o_!59LiVk(Cyk{v1}W7rWKHE2GfIZBBxF)q zv!=m#3qxZGqlS2==l$>Z{N6wAJ)iU3=REh^=bZcb9JHgoB_FQ@F8~01)>h`uEL+Z6 zCOllM{ShVw&oXRCXG<7RKOjj10G{{O=BBQRC3H%dtLua~*IWW(C{RgJTIPjD_B)ed z@lIPdb<=1-*tA?(n#a9S*sjyNvez@WDcj>-rRn@%VIgvg>A|h}#qiS?Ln}@FIfV}& z(Z=z>%%5v&wi>Gj1-c>%O^JtRH!*sf^y?jb>c|0&pcwNUC>QMP@ZS`GMo~m%s_;rv zvkzG{R{}!y|Ks);L9K0**dZy`MIFFpTRpK~`4n_$AlVwuRHM-HRU}P6ZN32Sh;@E~ zl>NF$R=#kHI8UZ&XW6r*B-TOVlmf-}JHV#InH#}k6Nwv`aoGv>P}^$flk`pX{Gw8{K3wf1cTsml zrGW@}kBz-Q?)A9pq&kn=1L8*9Tj9Fi1GPY7i^T?1|d;wmaFjcs87M62L0i)q5X>5b>m+`l_jwb{Y{h5yYjy`*>j18=@6 zMg6_G)t#6Cmu!-cBy)qusRIcK1QkC~{CIK>y5_KmnpaL?v!|StRhpGt*YK#UPjZsW z0jB^FxDpt^20UyhN-~+uE(WUHt57fORL(BAcC3tfO(#8wW1ct?!@~f?q|s{D3XL=~kz#6@9u{2-X1Czu4fxodbD^lMTKPPhGr)cr8tBs3dVghi&JS z!ABi*kB0AmI%Sx;=UKIVfxn>#@!`!gx6$}8-$&bDCMOjomur=yx><31B`Fm<&j?m> zk+Yl$q8{IEZ7fDsUw5%i3W^jmTO1aJJ6X7{xGA_Xue4VUB|P!L?{a9iUw2kbgeds- z#_)K*=PQPh-!v;P&(=`B`!@0m@LN^eeaD_(+&`BM!ert;R*C=IDrncx)JeaA0P-a5 zyA$FLoQijS`n*&zxt6xJAXb4gen}(4_Ymx?B881^{?+{8?4@M>(wU3V#Y=fPvgG{c z>qHCx2R8B&%iz(}25m2oAfug?iKEb%23Ulhk7_tQ{3cnq-lJTa2q0mLCJU+=JF!xL ziM3OMqss+XUSR##0TO@WQ<@A-$YAAXk-I-xpF{v=izLP@ZkcN+pzl*iF&Jp?WNtS2 zqqR&RsH-v)m*3g)2fGn##r$*JX4>AC$T=^_-Q_*Axp+&96>>d^DpOli?{{YGO!z~* zF$gF4bL6+a_2baNmiN6cmFlCks-649{8iUnPph>0j8iAA{S^qfWr_G*cX{vE$tRHa ztfnlbBEOH5v}wP7otq}+#>M*aZS#dr2mNBcMEid!a;^zbevsX#kOW=pb1AZ^PNwPW zBgZ$io>-Aa=`qG{>F00XZGb}dCZ9XebF+&zz`>{X;-{^@BSNoaXaBfb@r1POU3gTJ z99>KWP=c}%emX-(SQo(h$6nL|DEQss&`k`V_O6cIPFWhOOzS(0jA;&CyFx?3s=z9P z=TVW77N|ix>V_gMxb5X0C9=*ITUwWOp?lQscW%jG?4|G11vx6%59=ysW?y!xkgh5j zX(2SJWX)|(!~~teAv#c+#p+43takbEsIahZvVo9aKzJtHRs=L%cEClWwI?zfR_%Ov+5uvmX2#7wzxt@P zOUIzkYIL^N((PLWVDhcshJ~|wW-dMxzoNBw6SvE^GsaLtrp9-z&Mg5gc*(1m^d#11 zxreq5dLBL$k#rdBsj|F7xbpi#z_*ef6dSu^e(@|-3_LBEzx$r5w38h2Q`-ys#EAIH zh<=q1KxlPwHN`h6swu+{Y#42 zj&5&;loZbyr(qC5RR;p<7ByL2;e+QMk`Kxjln~@cPKT(Sn|}EhOqm zCIuUDPu!V*w}O3rsal5iEk zkh#v>GNsmnCv(_rOG>QTj+8@ zheo4rMgxYS`z&NamQBvwd+T)Jf9mbOiEJBdi!JpbnQ&p&hyz%|?ak|9i1dE|PSRnW literal 0 HcmV?d00001 diff --git a/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-white-hovered-linux.png b/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-white-hovered-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..c41366e55e2d58241dd40e875ca2311134587ae3 GIT binary patch literal 2127 zcmai0X*3jU8y?Eur1u~pp~-fl!H}h>WE*>im@Gq+WyliI7<+soBN17L$yQm@sIi2W zVN^3jV{c|G2{W=YS?8PgobS(f&i9@7$Mf9h{&U^Wxvu+ut~=e)-V!J(D+&MrfKV$l zCtk$!&Shai-i^zMZR7>M2q#NZKttcj1pq);1ZsB08C~+59^>ddCqrHZf3be(BH2AE zYBN;X&Bz(O>m+qd>Tn=i!0|A6;Eb0NKSME7#R!UZ0hO2A(`tm>q)33%L`B)WGnxEI zY_E&F^NhT?Fq%^|zN0lA$&>He#k~gXWQk$|Ift zM61punyQQ79j*D*a&!K73PValjY~hirA~QhwgzIur-k~W@S0-M+uFnQ&8DEj6El7( z=}R-pu{iAS%kGa(WhE>cSr`h~{4r8M?)Uiu|1a==l@-_atAkucoUCcfRM4yV0sMYV zMMcFHx0Fo27o~L+48JevNZ}YavQBcytCxdhEAVPQ>zQETV31w_+g+F z<<&`}(O%rnLV1~Fy-A34(GxmdF%Y2JvOktt6{=D3>{-&)0ijIVlqU~bQc7}q)77D3 zc;7_rf*V=9+!GnqLX)w4O*wsulg%ZZ>m6VF1@}tulgc$WAVo#2z^Gv6=Pl|) zfqu+6DwT@f#ngtdh0NgqRkS_7;@y2AU44D_Te8A-T1pF=#b#~vv~#<0qa;vl(XOGk zNK-xIh@t-n4-=D!`!v|XAIeJbW{Z6V&H%k}3~pHVSB%CZky43?MePgV{DKrWI5zX#4Cd;7jBqs`N2atRA%O>Mfr{h0VxK5;=}U zL&0RcjW0KDY3)wkKEh0i<}8_6nq7+~Xu4j`xrA@BOa{0s&8wW@^M$EfN92WeLN=gN$)GzO?c)di`aMsw@=G&MBTG&S`C7VAd*4!s(^lvaMffgc$Ir4QFc!~6V+7r3fd z-~cv@H9tmpeg&C;;+zd}VU)j^Tq3k9b|u!hyNm*xzGuo9%u72n-hIx?ISY`KK7OZm z?RZ@M4y)%P=Og{zrwgDc_E2a*fYysFUSbkiB-ScDev(=WJ(N#)T{Ek8I1UX zEZ7fgetVov5sdvnN3 zgGm#_&;)`VbwOIPfp2DJDITxvjlz35_Ba&1r?`4mCvXqig17V6n^^wc_z%g6?P4Ld z@z*{2zJAYCSMOYVUtkiqJ1-C6#2(eu)cpHX*vP#*2peo_ZoUn9!GSD?JR;u`r%@ibR5-|;abv7_S9QILGA z7Y3Ih-KiVERJ}5G)_bjK1}nqH5^5p4;+Crmg&I7Lda#kz@9Iic>^R3qcB7VkXNDb3 zKj~*b%}LFeaHDU9cAt9a)6L3D2@wNn8cIpKN(XX1Gt9wa^n#A|tz&JPSbBDhm5sf5 zP;K`enpHWdoR`D|bRoE$pkLeI_ph^*!N3?1J7UPj61_O0EMZ`(EQ$Bp%DLBU{Z|9y z$C_icg(?m{XR`HAVSeOR-r75a5Smm_Sc;z?Rkd5FYMI3QrZi0SI+S7_$`Jh59$f0Q z`Y{FigV~wi|7*t#BbeYWYl=jIAb$OoP0x}ZcYi3M7`&8|h|x;r&Ev-WDoh1!`}6Wo zKGAitjYs)~+0d|W;ekOxh0|>6W9D9wy!+er597e!TjMlZ3bRC@WOu~SgWRh9C0Y{o z8I__Tvb3@XEX-FjZuDw;I9-18-E+HHVi(u5oov^!oLgM8vLR-%;}K>Fjug?;z`!3L zKn1I+s%*o{zD*f%5Fv|dRr%8-PH5l#R)a_3Bxj`cPsV=DL^dEwMK)8gtgy3Lm-s4l z#B2Jf0xIFTsxAL$x~{IS7N+0{>-`g{;S1TJ sT)SlL6SGkoN=DYh|A_J*2i#FOkhTmrJ+i07+YkUyb9=J}Q}6r#2IF%Z(EtDd literal 0 HcmV?d00001 diff --git a/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-white-resting-linux.png b/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/filled-white-resting-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..756e0a061e7ef861cd2b29c044e683e94409e579 GIT binary patch literal 2031 zcmb_d`8(7L7yn9`a2X6&mdKt$Z?Cn`XtHK*Mh%t5a<83`Voc%MxuvXOvJ66Rk+F=W zCX6hN$TDVWY=vP4F_y-RZd2~O|HJ*^oX>Nf^Ld{0Jm-9#^SO_>Jg$&SfVUfFDy|1pv?s7yI)_O!>xaI0DI00d4K4=J>1pmHNCF zdqNIvOnj5<6{#ww?72iV8}_L3nYL4`3#*}+`J6SEbaAecD2ErGrWf4GpBRcgs)V2h z6qF_)?5d28l$|(6d3)MuoeF*yOhg5o=T+Pv--K}HI9;5(aX;h7ro4j!?d|>GawjP= z%?4_qJjp?^09Z8e1fg!HulR43y`YJ!tJ}-Uz7HZ<1`!2AX=QMIMd5DLaYLiG?R;6Q zv6ytDa*Vj$iiQS4PR->N4B@BWM zbZd3B&lm@yx`jwdnR$GKwY!IpjIQKSTYNI~ zYm}vXQWD9`2Z?YFdtHFu#H?25R^L!^4ST&)%~1ijqg;p{EtCA+sHVaam;-SO>-6W# z1uXoTB$R6}hX!BsLP-HkqK+Da!I;FfnMmZH&Toz%9(&odxVik-4W(?~6UsU!u&nx> ziv;rh!%n$NI!x%{(mE}x==Hs3vTgj|zcB2fAYZz|N}oT%E8+HlhG-1~4lA`Ad<*ga zGN52l>)>}|atd^v+#N44@@gt1K!U7C9i8IISjKJ@E^3ab=e>5L?8bZ@qWW2@Z|H%gW%Y4Rg>+p@>X z!Y$5)?&z*tV}O~sjl6ebxN~XVGjV+(X4;14Dv3~GvN9nlciNOwTUwBtz0Ix6?PZMp z>fS=xTfvCoeZMnqa;0NAE#`Nm@5RUGzp{|bF+JKMsJn_lB0}89X9yh&fBZOfFe|h7 z)P&}srjnLmx6^3)V~E+)2ExdCM&Ns*2JI{D#g+X0B13vmKw#fozxQ-x*DR1&q|pHJ zys%sc3&9)#s<@~|QTE)3-Q5_8po~#nVz<9 z^~H$1O+tW~>iw0U5d(EiCXZfiPCAGMgqR{m=t1|s4bJ^vH=l9c{$3?|w%|BP&yk|G zA!-@%?3)ko{M+0WS6FV2HTiITNN8~;Vx?87&xF$VDV;ezwZIp|8P!MJ3`y<(1++@v z&=Mqfr`f9FQTbuhUi*j0PjaxFvtVGJ|Ik`J$f~M=;9CEUJ!uIf%e?q9%C0npVtbsDH1;z?D>uTyT+EmDBI0XZ$KkyB{e-A8p>;9HMPwLStMBr9-idu(${i`cQP9qAN7vPeQe z@@zQ@3)c_rT3<5Q+xp?Z$Nl`-#b0A5c;YSr(l}}iB(t9d#e7;%M^)#Av58}9m#K5~ z2sFIt;}13dH{921N>~*o>{i1YwcZt|!pzJ}c43Czt9XG4x~EIJt|$;|5uwWSFxTO- z*0>UnJk$Js8){x41b7$oZT>R>T~h^m>7z{T4d7Tr^(v7Gyg~Bx8DQqZ^s=!T4H9x$Gkg#f?lft)kHZc2V1G zdIH3^4jfioIy!tI?yB-R(jJ(%t3shtP4VCt{cd+6I}SXQ-oRL|cMi-oL(^~IfD zR%Rn@acd?E09MuhwB`OZNYAq#*W48dsG!Y6JL1+6udd##RADi-$2LA|)(RqDR8mo} z7PD{~xgGi~ue8Q#$8bn+T}txsQwTYSN?hV;Rf>D!>Z>@~tdQ*knqKlp;CDB>!ue;G z_SF*Ze5Nt&)vkOjBz2xTg!xYC7@dk?K`o7@<8+H(hPUBP;YiM;2Q*4SM)va^8(iitZ|Gtsg>C=+LZq|1s*=T1s QiX0qpakylUhxw)c19ceXSpWb4 literal 0 HcmV?d00001 diff --git a/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/transparent-dark-focused-linux.png b/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/transparent-dark-focused-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..385589b6340373c76e9d4d76c5be276281362e96 GIT binary patch literal 2284 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 literal 0 HcmV?d00001 diff --git a/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/transparent-dark-hovered-linux.png b/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/transparent-dark-hovered-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..1dc23f21e0e7402a0bee6bb99110ecdb7d15c75d GIT binary patch literal 2133 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 F;vdQaAdLV3 literal 0 HcmV?d00001 diff --git a/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/transparent-dark-resting-linux.png b/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/transparent-dark-resting-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..756e0a061e7ef861cd2b29c044e683e94409e579 GIT binary patch literal 2031 zcmb_d`8(7L7yn9`a2X6&mdKt$Z?Cn`XtHK*Mh%t5a<83`Voc%MxuvXOvJ66Rk+F=W zCX6hN$TDVWY=vP4F_y-RZd2~O|HJ*^oX>Nf^Ld{0Jm-9#^SO_>Jg$&SfVUfFDy|1pv?s7yI)_O!>xaI0DI00d4K4=J>1pmHNCF zdqNIvOnj5<6{#ww?72iV8}_L3nYL4`3#*}+`J6SEbaAecD2ErGrWf4GpBRcgs)V2h z6qF_)?5d28l$|(6d3)MuoeF*yOhg5o=T+Pv--K}HI9;5(aX;h7ro4j!?d|>GawjP= z%?4_qJjp?^09Z8e1fg!HulR43y`YJ!tJ}-Uz7HZ<1`!2AX=QMIMd5DLaYLiG?R;6Q zv6ytDa*Vj$iiQS4PR->N4B@BWM zbZd3B&lm@yx`jwdnR$GKwY!IpjIQKSTYNI~ zYm}vXQWD9`2Z?YFdtHFu#H?25R^L!^4ST&)%~1ijqg;p{EtCA+sHVaam;-SO>-6W# z1uXoTB$R6}hX!BsLP-HkqK+Da!I;FfnMmZH&Toz%9(&odxVik-4W(?~6UsU!u&nx> ziv;rh!%n$NI!x%{(mE}x==Hs3vTgj|zcB2fAYZz|N}oT%E8+HlhG-1~4lA`Ad<*ga zGN52l>)>}|atd^v+#N44@@gt1K!U7C9i8IISjKJ@E^3ab=e>5L?8bZ@qWW2@Z|H%gW%Y4Rg>+p@>X z!Y$5)?&z*tV}O~sjl6ebxN~XVGjV+(X4;14Dv3~GvN9nlciNOwTUwBtz0Ix6?PZMp z>fS=xTfvCoeZMnqa;0NAE#`Nm@5RUGzp{|bF+JKMsJn_lB0}89X9yh&fBZOfFe|h7 z)P&}srjnLmx6^3)V~E+)2ExdCM&Ns*2JI{D#g+X0B13vmKw#fozxQ-x*DR1&q|pHJ zys%sc3&9)#s<@~|QTE)3-Q5_8po~#nVz<9 z^~H$1O+tW~>iw0U5d(EiCXZfiPCAGMgqR{m=t1|s4bJ^vH=l9c{$3?|w%|BP&yk|G zA!-@%?3)ko{M+0WS6FV2HTiITNN8~;Vx?87&xF$VDV;ezwZIp|8P!MJ3`y<(1++@v z&=Mqfr`f9FQTbuhUi*j0PjaxFvtVGJ|Ik`J$f~M=;9CEUJ!uIf%e?q9%C0npVtbsDH1;z?D>uTyT+EmDBI0XZ$KkyB{e-A8p>;9HMPwLStMBr9-idu(${i`cQP9qAN7vPeQe z@@zQ@3)c_rT3<5Q+xp?Z$Nl`-#b0A5c;YSr(l}}iB(t9d#e7;%M^)#Av58}9m#K5~ z2sFIt;}13dH{921N>~*o>{i1YwcZt|!pzJ}c43Czt9XG4x~EIJt|$;|5uwWSFxTO- z*0>UnJk$Js8){x41b7$oZT>R>T~h^m>7z{T4d7Tr^(v7Gyg~Bx8DQqZ^s=!T4H9x$Gkg#f?lft)kHZc2V1G zdIH3^4jfioIy!tI?yB-R(jJ(%t3shtP4VCt{cd+6I}SXQ-oRL|cMi-oL(^~IfD zR%Rn@acd?E09MuhwB`OZNYAq#*W48dsG!Y6JL1+6udd##RADi-$2LA|)(RqDR8mo} z7PD{~xgGi~ue8Q#$8bn+T}txsQwTYSN?hV;Rf>D!>Z>@~tdQ*knqKlp;CDB>!ue;G z_SF*Ze5Nt&)vkOjBz2xTg!xYC7@dk?K`o7@<8+H(hPUBP;YiM;2Q*4SM)va^8(iitZ|Gtsg>C=+LZq|1s*=T1s QiX0qpakylUhxw)c19ceXSpWb4 literal 0 HcmV?d00001 diff --git a/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/transparent-gray-focused-linux.png b/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/transparent-gray-focused-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..385589b6340373c76e9d4d76c5be276281362e96 GIT binary patch literal 2284 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 literal 0 HcmV?d00001 diff --git a/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/transparent-gray-hovered-linux.png b/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/transparent-gray-hovered-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..824cdb7d3a30947fee6269f28a07f11dca63b325 GIT binary patch literal 2211 zcma)8cQhON7Y}W%3aXwF)aalORRp#3jHE$OlxHhNW0YEakqP7klownWUlAsZkN2$PA+C%nj7dx8@INox$LKAZ|Zi``CU z9~&JFC|4%GQxmAsj;ir$H=K7@j#<@J2P zpysINWRO-$<>E`f(&bfSB*34r-K6dS96Fa|v9Pj{mbZR8>=5{n;|3 zK14$A4w^_wD_N86yX&dUBX)oDZ`GPA|4%(icNDDWqcRgXSbsh#o33d!>ONMI)jB7k z8r_hBt2kl6}yq=+ES@1L*BK|H{%j{=IQGyWHNc&2mMvzkovsl*~eJ@e1_k^ ztLxbu;=-Qct>xtyg=9RO`Ye`c)3Kj?@lw-Vksa*z%=_e{=E#52&gbjMxMv_Sy*q!| z<2nalq;G?W>gaMFkSp(Q3Jh9gwer>i^9Itwfbfqk6Q#vE;Iy2zP(=IgeB ziWiYduJ9vE?t5&~zzgx(6KM}=2DfQMG@I+S2s1iGY_<+!mYk_O7maV3wl5P8z%Aizgr-D7y!{chvOW5N4e0w7L zL=M^e#%8S9Z9UK|H*n2s&3s_C<+eH8{TLTwv-7UJe8qDe;ppguQ?2Oo4h;y9WR~4z zdUD;0lbfqXyEXVkI!`1oRaiAP+Gq`Q>c4cT7E6yVKS#BG- z<$iZs+@b!=dwM!!Ep8_s8qb)jv7=Ac#pxa&ux8|E@j#9azc6^WWwfOUc~)MdqFzDz z`~ZJNg1MHWc>=fS=V4S%#*vY7M-dck2m2$MMU#m6h5j?9r9~&|aPLz`wNu=tNs50) zK~8!@BaT?GSy)<{k`x`sjGW}15B5;TkIV2C^4=fD_U`QZtKomGE#4(Jocb$lu5NYr z(zBVZsIga|LN9J=PY-Q2d_z!9krsjwAtBq}A3C5!_dcD^2?#r`2|4!nOeYI@?l1mr=OFq|`)pcBFd zlaVogh`kx=2nMB*dKvj_9xU9C)snKQGCdz~i4`vFUv_agkXo5tdiC3&mbtY=7fG!q zm@O}_VvVSMm}0Vvw^hGCr2sY;9i=3KSQ4(LX4fSqwa0~dF+Q>#$|t*|5N+a$bA*UZ z!O=_MJ}VwR{kZN_4-N^4rM@(@=z@%l41g`3_rdO@f)N#TGqC5_XuDB$qvYMYTHm?) zJs;h<*6f9sZeQxYew8#fF>c6;5Q&+2+JJqI<)5i6dW~R5e}GM4Y4UID2bfa=2&T_m zFvw*w$bI7A;Q<*b;FFV+qvGoln^0TdyBvb3mf+8l^FNBZuU z<>l0>PK@T_31=V>SHOX!4z;^VNnCYd@dvjPNFznhZ;DBD@=9oFv(>Lot#S5^-WKea z%nrL;jA(;RSlUl4IMkPhDbA63x+u8#b&Vs&L{x}J{8nc#;UY8EEV9y*@81KR(LR`E z15+m_@h*3$+5J@udwb*IVmzRv(e{(v2njGq@)K3w^~wm5&0g5}bOoK)C!~d%pQXgj zeu$pW1ZC?Y3|C3+OKX`Az@P=e?n?BW`V86GbbMa^BxFTiie```rb!-Z1y*`GkB>I{ zZ%qjNCU_^jnBPUug-J6}8v55}AahkNK^edVBVaMC;!=P3255;+pP}o1X5|<}w>`b3 zsqyIBA=+KjbIB7fG9UNRuEzIKOYKuM1kfrTsS$C&O>&0@Yl>H|wqm44U6CViOuXnd zp@frN0U<@lD~}_&m+Sqlg5UM&^}KUcek$68!*;=6U)1IjlQoo4LzVIg=-|d=y0)g$|A%XeW_d) zkl#DQ_4-PT{&mhm3u9JUY!=`@TwkuQacILUXD9PH@vLj~1$ij}!P8@PVBPz5`}ceb hM&tkU_rGBu@J@MYXyE40NinYu0NlvTuw36Y_FvXAJ5~Sy literal 0 HcmV?d00001 diff --git a/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/transparent-gray-resting-linux.png b/frontend/test/storybook/visual-regression/v-button.spec.ts-snapshots/transparent-gray-resting-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..756e0a061e7ef861cd2b29c044e683e94409e579 GIT binary patch literal 2031 zcmb_d`8(7L7yn9`a2X6&mdKt$Z?Cn`XtHK*Mh%t5a<83`Voc%MxuvXOvJ66Rk+F=W zCX6hN$TDVWY=vP4F_y-RZd2~O|HJ*^oX>Nf^Ld{0Jm-9#^SO_>Jg$&SfVUfFDy|1pv?s7yI)_O!>xaI0DI00d4K4=J>1pmHNCF zdqNIvOnj5<6{#ww?72iV8}_L3nYL4`3#*}+`J6SEbaAecD2ErGrWf4GpBRcgs)V2h z6qF_)?5d28l$|(6d3)MuoeF*yOhg5o=T+Pv--K}HI9;5(aX;h7ro4j!?d|>GawjP= z%?4_qJjp?^09Z8e1fg!HulR43y`YJ!tJ}-Uz7HZ<1`!2AX=QMIMd5DLaYLiG?R;6Q zv6ytDa*Vj$iiQS4PR->N4B@BWM zbZd3B&lm@yx`jwdnR$GKwY!IpjIQKSTYNI~ zYm}vXQWD9`2Z?YFdtHFu#H?25R^L!^4ST&)%~1ijqg;p{EtCA+sHVaam;-SO>-6W# z1uXoTB$R6}hX!BsLP-HkqK+Da!I;FfnMmZH&Toz%9(&odxVik-4W(?~6UsU!u&nx> ziv;rh!%n$NI!x%{(mE}x==Hs3vTgj|zcB2fAYZz|N}oT%E8+HlhG-1~4lA`Ad<*ga zGN52l>)>}|atd^v+#N44@@gt1K!U7C9i8IISjKJ@E^3ab=e>5L?8bZ@qWW2@Z|H%gW%Y4Rg>+p@>X z!Y$5)?&z*tV}O~sjl6ebxN~XVGjV+(X4;14Dv3~GvN9nlciNOwTUwBtz0Ix6?PZMp z>fS=xTfvCoeZMnqa;0NAE#`Nm@5RUGzp{|bF+JKMsJn_lB0}89X9yh&fBZOfFe|h7 z)P&}srjnLmx6^3)V~E+)2ExdCM&Ns*2JI{D#g+X0B13vmKw#fozxQ-x*DR1&q|pHJ zys%sc3&9)#s<@~|QTE)3-Q5_8po~#nVz<9 z^~H$1O+tW~>iw0U5d(EiCXZfiPCAGMgqR{m=t1|s4bJ^vH=l9c{$3?|w%|BP&yk|G zA!-@%?3)ko{M+0WS6FV2HTiITNN8~;Vx?87&xF$VDV;ezwZIp|8P!MJ3`y<(1++@v z&=Mqfr`f9FQTbuhUi*j0PjaxFvtVGJ|Ik`J$f~M=;9CEUJ!uIf%e?q9%C0npVtbsDH1;z?D>uTyT+EmDBI0XZ$KkyB{e-A8p>;9HMPwLStMBr9-idu(${i`cQP9qAN7vPeQe z@@zQ@3)c_rT3<5Q+xp?Z$Nl`-#b0A5c;YSr(l}}iB(t9d#e7;%M^)#Av58}9m#K5~ z2sFIt;}13dH{921N>~*o>{i1YwcZt|!pzJ}c43Czt9XG4x~EIJt|$;|5uwWSFxTO- z*0>UnJk$Js8){x41b7$oZT>R>T~h^m>7z{T4d7Tr^(v7Gyg~Bx8DQqZ^s=!T4H9x$Gkg#f?lft)kHZc2V1G zdIH3^4jfioIy!tI?yB-R(jJ(%t3shtP4VCt{cd+6I}SXQ-oRL|cMi-oL(^~IfD zR%Rn@acd?E09MuhwB`OZNYAq#*W48dsG!Y6JL1+6udd##RADi-$2LA|)(RqDR8mo} z7PD{~xgGi~ue8Q#$8bn+T}txsQwTYSN?hV;Rf>D!>Z>@~tdQ*knqKlp;CDB>!ue;G z_SF*Ze5Nt&)vkOjBz2xTg!xYC7@dk?K`o7@<8+H(hPUBP;YiM;2Q*4SM)va^8(iitZ|Gtsg>C=+LZq|1s*=T1s QiX0qpakylUhxw)c19ceXSpWb4 literal 0 HcmV?d00001