From 0186383d4da7ad97f30aae132256b13a01f5316f Mon Sep 17 00:00:00 2001 From: Andrea Scartabelli Date: Fri, 9 Aug 2024 07:17:33 +0200 Subject: [PATCH] web-wallet: Update `Stepper` component to new design - Added missing "Soehne Mono" font and its `@font-face` definition Resolves #2071 --- web-wallet/CHANGELOG.md | 3 + .../dusk/components/Stepper/Stepper.svelte | 107 ++- .../dusk/components/Wizard/WizardStep.svelte | 2 +- .../dusk/components/__tests__/Stepper.spec.js | 86 +- .../__snapshots__/Stepper.spec.js.snap | 654 ++++++++++++--- .../lib/dusk/components/dusk.components.d.ts | 7 + .../__tests__/__snapshots__/page.spec.js.snap | 760 ++++++++---------- .../__tests__/__snapshots__/page.spec.js.snap | 46 +- .../components-showcase/Steppers.svelte | 157 +++- .../src/style/dusk-components/stepper.css | 72 +- web-wallet/src/style/dusk/language.css | 12 +- web-wallet/src/style/main.css | 18 +- .../static/fonts/soehne-mono-buch.woff2 | Bin 0 -> 17080 bytes .../static/fonts/soehne-mono-kraftig.woff2 | Bin 0 -> 16800 bytes 14 files changed, 1265 insertions(+), 659 deletions(-) create mode 100644 web-wallet/static/fonts/soehne-mono-buch.woff2 create mode 100644 web-wallet/static/fonts/soehne-mono-kraftig.woff2 diff --git a/web-wallet/CHANGELOG.md b/web-wallet/CHANGELOG.md index f7f7b5cf00..c6cab6622f 100644 --- a/web-wallet/CHANGELOG.md +++ b/web-wallet/CHANGELOG.md @@ -17,10 +17,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Update anchor colors to ensure better accessibility [#1765] - Update Transactions list design [#1922] - Update Buttons to match the design system [#1606] +- Update `Stepper` component to new design [#2071] ### Fixed - Fix Receive tab content overflows [#1901] +- Add missing "Soehne Mono" and its `@font-face` definition [#2071] ## [0.5.0] - 2024-03-27 @@ -232,6 +234,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 [#1922]: https://github.com/dusk-network/rusk/issues/1922 [#2026]: https://github.com/dusk-network/rusk/issues/2026 [#2000]: https://github.com/dusk-network/rusk/issues/2000 +[#2071]: https://github.com/dusk-network/rusk/issues/2071 diff --git a/web-wallet/src/lib/dusk/components/Stepper/Stepper.svelte b/web-wallet/src/lib/dusk/components/Stepper/Stepper.svelte index 33804cf27a..779e4996e6 100644 --- a/web-wallet/src/lib/dusk/components/Stepper/Stepper.svelte +++ b/web-wallet/src/lib/dusk/components/Stepper/Stepper.svelte @@ -1,43 +1,98 @@ + + -
-
-
-
- - {#if steps >= 2} -
- {#each Array(steps).keys() as currentStep (currentStep)} -
= 2} +
+ {#if Array.isArray(steps)} + {#each steps as currentStep, idx (currentStep)} + {@const id = `step-${randomUUID()}`} + + class:dusk-stepper__step--processed={idx <= activeStep} + aria-current={idx === activeStep ? "step" : undefined} + aria-labelledby={id} + > + {#if currentStep.iconPath} + + {:else} + {showStepNumbers ? idx + 1 : ""} + {/if} + + {currentStep.label} {/each} -
- {/if} -
+ {:else} + {#each Array(steps).keys() as idx (idx)} + {showStepNumbers ? idx + 1 : ""} + {/each} + {/if} +
+{/if} diff --git a/web-wallet/src/lib/dusk/components/Wizard/WizardStep.svelte b/web-wallet/src/lib/dusk/components/Wizard/WizardStep.svelte index 444fbaf5e9..1183692daa 100644 --- a/web-wallet/src/lib/dusk/components/Wizard/WizardStep.svelte +++ b/web-wallet/src/lib/dusk/components/Wizard/WizardStep.svelte @@ -90,7 +90,7 @@ {#if step === currentStep} {#if showStepper} - + {/if} diff --git a/web-wallet/src/lib/dusk/components/__tests__/Stepper.spec.js b/web-wallet/src/lib/dusk/components/__tests__/Stepper.spec.js index 9f531ae969..4630d1063d 100644 --- a/web-wallet/src/lib/dusk/components/__tests__/Stepper.spec.js +++ b/web-wallet/src/lib/dusk/components/__tests__/Stepper.spec.js @@ -1,39 +1,91 @@ -import { afterEach, describe, expect, it } from "vitest"; +import { afterAll, afterEach, describe, expect, it, vi } from "vitest"; import { cleanup, render } from "@testing-library/svelte"; +import { mdiCheckDecagramOutline } from "@mdi/js"; import { Stepper } from ".."; +vi.mock("$lib/dusk/string", async (importOriginal) => { + /** @type {typeof import("$lib/dusk/string")} */ + const original = await importOriginal(); + + return { + ...original, + randomUUID: () => "some-generated-id", + }; +}); + describe("Stepper", () => { + const baseProps = { + activeStep: 2, + steps: [ + { label: "foo" }, + { label: "bar" }, + { label: "baz" }, + { label: "qux" }, + { iconPath: mdiCheckDecagramOutline, label: "quux" }, + ], + }; + const baseOptions = { + props: baseProps, + target: document.body, + }; + afterEach(cleanup); - it("renders the Stepper component with two steps", () => { - const { container } = render(Stepper, { - props: { activeStep: 0, steps: 2 }, - }); + afterAll(() => { + vi.doUnmock("$lib/dusk/string"); + }); + + it("should render the `Stepper` component accepting an array of `StepperStep` objects as steps", async () => { + const { container, rerender } = render(Stepper, baseOptions); + + expect(container.firstChild).toMatchSnapshot(); + + await rerender({ ...baseProps, activeStep: 3 }); expect(container.firstChild).toMatchSnapshot(); }); - it("renders the Stepper component with a completed step", () => { - const { container } = render(Stepper, { - props: { activeStep: 1, steps: 2 }, - }); + it("should render the `Stepper` component accepting a number as the amount of steps", async () => { + const props = { ...baseProps, steps: 5 }; + const { container, rerender } = render(Stepper, { ...baseOptions, props }); + + expect(container.firstChild).toMatchSnapshot(); + + await rerender({ ...baseProps, activeStep: 3 }); + + expect(container.firstChild).toMatchSnapshot(); + }); + + it("should pass additional class names and attributes to the rendered element", () => { + const props = { + ...baseProps, + className: "foo bar", + id: "some-id", + }; + const { container } = render(Stepper, { ...baseOptions, props }); expect(container.firstChild).toMatchSnapshot(); }); - it("renders the Stepper component with five steps", () => { - const { container } = render(Stepper, { - props: { activeStep: 0, steps: 5 }, - }); + it("should add the proper class name for the desired variant", () => { + const props = { + ...baseProps, + + /** @type {StepperVariant} */ + variant: "secondary", + }; + const { container } = render(Stepper, { ...baseOptions, props }); expect(container.firstChild).toMatchSnapshot(); }); - it("renders the Stepper component with five steps, with the third one being active, and the first two – completed", () => { - const { container } = render(Stepper, { - props: { activeStep: 3, steps: 5 }, - }); + it("should allow to hide the step numbers", () => { + const props = { + ...baseProps, + showStepNumbers: false, + }; + const { container } = render(Stepper, { ...baseOptions, props }); expect(container.firstChild).toMatchSnapshot(); }); diff --git a/web-wallet/src/lib/dusk/components/__tests__/__snapshots__/Stepper.spec.js.snap b/web-wallet/src/lib/dusk/components/__tests__/__snapshots__/Stepper.spec.js.snap index aeb0ef98a3..e0ac9f7bad 100644 --- a/web-wallet/src/lib/dusk/components/__tests__/__snapshots__/Stepper.spec.js.snap +++ b/web-wallet/src/lib/dusk/components/__tests__/__snapshots__/Stepper.spec.js.snap @@ -1,155 +1,541 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`Stepper > renders the Stepper component with a completed step 1`] = ` +exports[`Stepper > should add the proper class name for the desired variant 1`] = `
-
-
-
- -
-
-
-
+ + 1 + + + + foo + + + 2 + + + + bar + + + 3 + + + + baz + + + 4 + + + + qux + + + + + + + + + + quux + + +
+`; + +exports[`Stepper > should allow to hide the step numbers 1`] = ` +
+ + + + + + foo + + + + + + + bar + + + + + + + baz + + + + + + + qux + + + + + + + + + + quux + + +
+`; + +exports[`Stepper > should pass additional class names and attributes to the rendered element 1`] = ` +
+ + 1 + + + + foo + + + 2 + + + + bar + + + 3 + + + + baz + + + 4 + + + + qux + + + + + + + + + + quux + +
`; -exports[`Stepper > renders the Stepper component with five steps 1`] = ` +exports[`Stepper > should render the \`Stepper\` component accepting a number as the amount of steps 1`] = `
-
-
-
- -
-
-
-
-
-
-
+ + 1 + + + 2 + + + 3 + + + 4 + + + 5 + +
`; -exports[`Stepper > renders the Stepper component with five steps, with the third one being active, and the first two – completed 1`] = ` +exports[`Stepper > should render the \`Stepper\` component accepting a number as the amount of steps 2`] = `
-
-
-
- -
-
-
-
-
-
-
+ + 1 + + + + foo + + + 2 + + + + bar + + + 3 + + + + baz + + + 4 + + + + qux + + + + + + + + + + quux + +
`; -exports[`Stepper > renders the Stepper component with two steps 1`] = ` +exports[`Stepper > should render the \`Stepper\` component accepting an array of \`StepperStep\` objects as steps 1`] = `
-
-
-
- -
-
-
-
+ + 1 + + + + foo + + + 2 + + + + bar + + + 3 + + + + baz + + + 4 + + + + qux + + + + + + + + + + quux + + +
+`; + +exports[`Stepper > should render the \`Stepper\` component accepting an array of \`StepperStep\` objects as steps 2`] = ` +
+ + 1 + + + + foo + + + 2 + + + + bar + + + 3 + + + + baz + + + 4 + + + + qux + + + + + + + + + + quux + +
`; diff --git a/web-wallet/src/lib/dusk/components/dusk.components.d.ts b/web-wallet/src/lib/dusk/components/dusk.components.d.ts index 6ef80fece2..0412d875e6 100644 --- a/web-wallet/src/lib/dusk/components/dusk.components.d.ts +++ b/web-wallet/src/lib/dusk/components/dusk.components.d.ts @@ -34,6 +34,13 @@ type SelectOption = { value: string; }; +type StepperStep = { + iconPath?: string; + label: string; +}; + +type StepperVariant = "primary" | "secondary"; + type SuspenseErrorVariant = "alert" | "details"; type TabItem = { diff --git a/web-wallet/src/routes/(welcome)/setup/create/__tests__/__snapshots__/page.spec.js.snap b/web-wallet/src/routes/(welcome)/setup/create/__tests__/__snapshots__/page.spec.js.snap index 7a9f01b3f1..95d257c130 100644 --- a/web-wallet/src/routes/(welcome)/setup/create/__tests__/__snapshots__/page.spec.js.snap +++ b/web-wallet/src/routes/(welcome)/setup/create/__tests__/__snapshots__/page.spec.js.snap @@ -19,53 +19,43 @@ exports[`Create > correctly renders the Mnemonic Preview page 1`] = `
-
-
-
- -
+ -
-
-
-
-
-
-
+ 2 + + + 3 + + + 4 + + + 5 + + + 6 + +
+
correctly renders the Mnemonic Verification page 1`] = `
-
-
-
- -
+ -
-
-
-
-
-
-
+ 2 + + + 3 + + + 4 + + + 5 + + + 6 + +
+
doesn't let the user proceed if they have entered mismatching
-
-
-
- -
+ -
-
-
-
-
-
-
+ 2 + + + 3 + + + 4 + + + 5 + + + 6 + +
+
ensures that the Undo button on the Mnemonic Validate step wor
-
-
-
- -
+ -
-
-
-
-
-
-
+ 2 + + + 3 + + + 4 + + + 5 + + + 6 + +
+
ensures the All Done step renders as expected 1`] = `
-
-
-
- -
+ -
-
-
-
-
-
-
+ 2 + + + 3 + + + 4 + + + 5 + + + 6 + +
+
ensures the Password step renders as expected 1`] = `
-
-
-
- -
+ -
-
-
-
-
-
-
+ 2 + + + 3 + + + 4 + + + 5 + + + 6 + +
+
ensures the Password step renders as expected 2`] = `
-
-
-
- -
+ -
-
-
-
-
-
-
+ 2 + + + 3 + + + 4 + + + 5 + + + 6 + +
+
ensures the Swap To Native Dusk step renders as expected 1`] =
-
-
-
- -
+ -
-
-
-
-
-
-
+ 2 + + + 3 + + + 4 + + + 5 + + + 6 + +
+

The ERC20 token swap functionality is currently disabled and will be provided @@ -2227,53 +2147,43 @@ exports[`Create > lets the user proceed if they have entered a matching Mnemonic

-
-
-
- -
+ -
-
-
-
-
-
-
+ 2 + + + 3 + + + 4 + + + 5 + + + 6 + +
+
should render the \`Securely store your seed phrase!\` agreeme
-
-
-
- -
+ -
-
-
-
-
-
-
+ 2 + + + 3 + + + 4 + + + 5 + + + 6 + +
+
should render the Mnemonic Authenticate step after accepting
-
-
-
- -
+ -
-
-
-
+ 2 + + + 3 + +
+
+ -
- - +
+
+ + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+ +
+ + diff --git a/web-wallet/src/style/dusk-components/stepper.css b/web-wallet/src/style/dusk-components/stepper.css index 9318fe4146..8b98cd84ba 100644 --- a/web-wallet/src/style/dusk-components/stepper.css +++ b/web-wallet/src/style/dusk-components/stepper.css @@ -1,38 +1,76 @@ .dusk-stepper { + --step-size: 1.5em; + position: relative; width: 100%; + display: grid; + row-gap: var(--default-gap); + grid-template-columns: repeat(var(--columns), 1fr); + justify-content: space-between; } -.dusk-stepper__progress-bar { +.dusk-stepper::before, +.dusk-stepper::after { + --left-offset: calc(50% / var(--columns)); + + content: ""; + display: block; position: absolute; - top: 50%; + top: calc(var(--step-size) / 2); + left: var(--left-offset); transform: translateY(-50%); - width: 100%; - height: var(--progress-bar-height); - background-color: var(--progress-bg-color); + height: var(--stepper-bar-height); border-radius: var(--control-border-radius-size); - overflow: hidden; } -.dusk-stepper__progress-filler { - height: 100%; - background-color: var(--progress-filler-color); +.dusk-stepper::before { + width: calc(100% - var(--left-offset) * 2); + background-color: var(--stepper-rail-color); } -.dusk-stepper__steps { - display: flex; - justify-content: space-between; - width: 100%; +.dusk-stepper--variant--secondary::before { + background-color: var(--stepper-rail-color-variant-secondary); +} + +.dusk-stepper::after { + width: var(--progress-width); + background-color: var(--stepper-filler-color); } .dusk-stepper__step { - width: 0.625em; - height: 0.625em; - background-color: var(--progress-bg-color); + grid-row: 1; + display: inline-flex; + align-items: center; + justify-content: center; + width: var(--step-size); + height: var(--step-size); + font-family: var(--mono-font-family); + line-height: 1; + background-color: var(--stepper-rail-color); + color: var(--stepper-on-rail-color); border-radius: 50%; z-index: 1; + margin: 0 auto; +} + +.dusk-stepper--variant--secondary + .dusk-stepper__step:not(.dusk-stepper__step--processed) { + background-color: var(--stepper-rail-color-variant-secondary); + color: var(--stepper-on-rail-variant-secondary-color); } .dusk-stepper__step--processed { - background-color: var(--progress-filler-color); + background-color: var(--stepper-filler-color); + color: var(--stepper-on-filler-color); +} + +.dusk-stepper__step-label { + grid-row: 2; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-family: var(--mono-font-family); + font-size: 0.5em; + text-transform: uppercase; + text-align: center; } diff --git a/web-wallet/src/style/dusk/language.css b/web-wallet/src/style/dusk/language.css index 00c49de720..0e094d6e0e 100644 --- a/web-wallet/src/style/dusk/language.css +++ b/web-wallet/src/style/dusk/language.css @@ -84,12 +84,22 @@ --anchor-color-hover: var(--secondary-color-variant-light); --anchor-color-active: var(--secondary-color-variant-light); - /* Progress-related components (Stepper, Progress Bar, etc */ + /* Progress bars */ --progress-bar-height: 0.3125em; --progress-bg-color: var(--primary-color); --progress-filler-color: var(--success-color); + /* Steppers */ + + --stepper-bar-height: 0.3125em; + --stepper-rail-color: var(--background-color); + --stepper-rail-color-variant-secondary: var(--primary-color); + --stepper-filler-color: var(--success-color); + --stepper-on-filler-color: var(--on-success-color); + --stepper-on-rail-color: var(--on-background-color); + --stepper-on-rail-variant-secondary-color: var(--on-primary-color); + /* Checkbox control */ --checkbox-control-size: 1.2em; diff --git a/web-wallet/src/style/main.css b/web-wallet/src/style/main.css index ff620c4135..3e99a04f9c 100644 --- a/web-wallet/src/style/main.css +++ b/web-wallet/src/style/main.css @@ -32,17 +32,33 @@ @font-face { font-family: "Soehne"; font-style: normal; + font-display: swap; font-weight: 400; src: url("/fonts/soehne-buch.woff2") format("woff2"); - font-display: swap; } @font-face { font-family: "Soehne"; font-style: normal; + font-display: swap; font-weight: 500; src: url("/fonts/soehne-kraftig.woff2") format("woff2"); +} + +@font-face { + font-family: "Soehne Mono"; + font-style: normal; font-display: swap; + font-weight: 400; + src: url("/fonts/soehne-mono-buch.woff2") format("woff2"); +} + +@font-face { + font-family: "Soehne Mono"; + font-style: normal; + font-display: swap; + font-weight: 500; + src: url("/fonts/soehne-mono-kraftig.woff2") format("woff2"); } * { diff --git a/web-wallet/static/fonts/soehne-mono-buch.woff2 b/web-wallet/static/fonts/soehne-mono-buch.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4fc6eb90b5946c929b0665dab5e6b0d2d14c7e84 GIT binary patch literal 17080 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 literal 0 HcmV?d00001 diff --git a/web-wallet/static/fonts/soehne-mono-kraftig.woff2 b/web-wallet/static/fonts/soehne-mono-kraftig.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f17feb5289744c4b48ad482075df15ae95331c35 GIT binary patch literal 16800 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 Tu()25RluL8)