From dd4bee0e69bacc4c4a7511d7d6a3f1968dcb0932 Mon Sep 17 00:00:00 2001 From: Florian Laabs Date: Sun, 8 Nov 2026 07:50:59 +0100 Subject: [PATCH 1/4] fix: show a running step check on the Next button and ignore clicks meanwhile Signed-off-by: Florian Laabs --- .changeset/wizard-next-loading.md | 8 +++++ packages/parity/src/patterns.test.ts | 32 +++++++++++++++++++ .../react/src/components/Stepper/Stepper.tsx | 15 +++++++-- .../vue/src/components/Stepper/Stepper.vue | 12 +++++-- 4 files changed, 61 insertions(+), 6 deletions(-) create mode 100644 .changeset/wizard-next-loading.md diff --git a/.changeset/wizard-next-loading.md b/.changeset/wizard-next-loading.md new file mode 100644 index 0000000..0288adc --- /dev/null +++ b/.changeset/wizard-next-loading.md @@ -0,0 +1,8 @@ +--- +'@wirecore/wirelayer-vue': patch +'@wirecore/wirelayer-react': patch +--- + +`Stepper` and `Wizard`: while the current step is busy – an async `validate` in the `Wizard`, `loading` on the item in +the `Stepper` – "Next" shows a spinner and ignores clicks (`aria-busy`, `aria-disabled`) but keeps the focus. Before, +only the step's number turned into a spinner, and a second click on the unchanged button looked like nothing happened. diff --git a/packages/parity/src/patterns.test.ts b/packages/parity/src/patterns.test.ts index 81c6187..df244d9 100644 --- a/packages/parity/src/patterns.test.ts +++ b/packages/parity/src/patterns.test.ts @@ -669,6 +669,38 @@ describe.each(frameworks)('%s', (framework) => { await userEvent.click(screen.getByRole('button', { name: 'Finish' })); await waitFor(() => expect(onComplete).toHaveBeenCalled()); }); + + it('"Next" shows a running check and ignores clicks meanwhile, keeping the focus', async () => { + let done: (valid: boolean) => void = () => {}; + const validate = vi.fn(() => new Promise((resolve) => (done = resolve))); + await render( + framework, + el('Wizard', { + steps: [{ label: 'Contact', validate }, { label: 'Address' }], + $scoped: { + step: { + react: 'renderStep', + args: (index: number) => ({ index }), + render: ({ index }: { index: number }) => el('p', {}, `Content ${index + 1}`), + }, + }, + }) + ); + const next = screen.getByRole('button', { name: 'Next' }); + expect(next).not.toHaveAttribute('aria-busy'); + await userEvent.click(next); + await waitFor(() => expect(next).toHaveAttribute('aria-busy', 'true')); + expect(next).toHaveAttribute('aria-disabled', 'true'); + expect(next).toHaveFocus(); + await userEvent.click(next); + expect(validate).toHaveBeenCalledTimes(1); + + done(true); + await waitFor(() => + expect(screen.getByRole('tab', { name: /Address/ })).toHaveAttribute('aria-selected', 'true') + ); + expect(screen.getByRole('button', { name: 'Finish' })).not.toHaveAttribute('aria-busy'); + }); }); describe('Persona, Statistic, AiLabel, ConfigProvider', () => { diff --git a/packages/react/src/components/Stepper/Stepper.tsx b/packages/react/src/components/Stepper/Stepper.tsx index 6244da4..7303a33 100644 --- a/packages/react/src/components/Stepper/Stepper.tsx +++ b/packages/react/src/components/Stepper/Stepper.tsx @@ -9,7 +9,10 @@ import { useRecipe } from '../RecipesProvider/RecipesProvider.js'; export interface StepperItem { label: string; description?: string; - /** The step is busy (e.g. saving): a spinner instead of its number, aria-busy on the step */ + /** + * The step is busy (e.g. saving): a spinner instead of its number, aria-busy on the step – and while it is the + * current one, "Next" shows the spinner too and ignores clicks + */ loading?: boolean; } @@ -121,9 +124,15 @@ export function Stepper({ - {/* With linear, an invalid step blocks going on – shown as a disabled button */} + {/* + With linear, an invalid step blocks going on – shown as a disabled button. While the + current step is busy, the button shows it and ignores clicks, but keeps the focus + */} - diff --git a/packages/vue/src/components/Stepper/Stepper.vue b/packages/vue/src/components/Stepper/Stepper.vue index d25cecc..fc867dc 100644 --- a/packages/vue/src/components/Stepper/Stepper.vue +++ b/packages/vue/src/components/Stepper/Stepper.vue @@ -12,7 +12,10 @@ const translations = useTranslations(); export interface StepperItem { label: string; description?: string; - /** The step is busy (e.g. saving): a spinner instead of its number, aria-busy on the step */ + /** + * The step is busy (e.g. saving): a spinner instead of its number, aria-busy on the step – and while it is the + * current one, "Next" shows the spinner too and ignores clicks + */ loading?: boolean; } @@ -104,9 +107,12 @@ const noCurrent = null as unknown as undefined; - + - From 8317abc20af864aad590891cd43c3b04b667c371 Mon Sep 17 00:00:00 2001 From: Florian Laabs Date: Sun, 8 Nov 2026 08:06:22 +0100 Subject: [PATCH 2/4] fix: keep the month in view when deselecting the chosen day Signed-off-by: Florian Laabs --- .changeset/calendar-deselect-month.md | 7 +++++++ .../react/src/components/DatePicker/DatePickerBase.tsx | 2 ++ .../vue/src/components/DatePicker/DatePickerDayTable.vue | 2 ++ 3 files changed, 11 insertions(+) create mode 100644 .changeset/calendar-deselect-month.md diff --git a/.changeset/calendar-deselect-month.md b/.changeset/calendar-deselect-month.md new file mode 100644 index 0000000..2d69b39 --- /dev/null +++ b/.changeset/calendar-deselect-month.md @@ -0,0 +1,7 @@ +--- +'@wirecore/wirelayer-vue': patch +'@wirecore/wirelayer-react': patch +--- + +`Calendar` and `DatePicker` with `allowDeselect`: clearing the chosen day keeps its month in view and the focus on that +day. Before, the view jumped to today's month. diff --git a/packages/react/src/components/DatePicker/DatePickerBase.tsx b/packages/react/src/components/DatePicker/DatePickerBase.tsx index 3e93f9d..27aa83a 100644 --- a/packages/react/src/components/DatePicker/DatePickerBase.tsx +++ b/packages/react/src/components/DatePicker/DatePickerBase.tsx @@ -675,6 +675,8 @@ function DayTable({ if (api.selectionMode !== 'single' || !api.getDayTableCellState({ value: day, visibleRange }).selected) return; event.preventDefault(); api.clearValue({ focus: false }); + // Clearing moves Ark's focused day to today – and the view with it to today's month + api.setFocusedValue(day); }; // On the cell, before Ark's own handlers (capture): own weekend days and deselecting. Nothing extra on the // default calendar – same DOM and handlers as before diff --git a/packages/vue/src/components/DatePicker/DatePickerDayTable.vue b/packages/vue/src/components/DatePicker/DatePickerDayTable.vue index 77d0f9f..14b9fcf 100644 --- a/packages/vue/src/components/DatePicker/DatePickerDayTable.vue +++ b/packages/vue/src/components/DatePicker/DatePickerDayTable.vue @@ -55,6 +55,8 @@ function deselect(event: Event, day: DateValue) { if (!canDeselect(day)) return; event.preventDefault(); api.value.clearValue({ focus: false }); + // Clearing moves Ark's focused day to today – and the view with it to today's month + api.value.setFocusedValue(day); } // On the cell, before Ark's own handlers (capture): own weekend days and deselecting. Nothing extra on the // default calendar – same DOM and handlers as before From f00331cf170b03236e585d04f7468a525b4ddca1 Mon Sep 17 00:00:00 2001 From: Florian Laabs Date: Sun, 8 Nov 2026 08:06:22 +0100 Subject: [PATCH 3/4] test: pick the date range in today's month, where the empty calendar opens Signed-off-by: Florian Laabs --- packages/parity/e2e/date-time.spec.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/parity/e2e/date-time.spec.ts b/packages/parity/e2e/date-time.spec.ts index abd01c7..9f1cb8f 100644 --- a/packages/parity/e2e/date-time.spec.ts +++ b/packages/parity/e2e/date-time.spec.ts @@ -35,12 +35,22 @@ test.describe('DateRangePicker', () => { }); test('the calendar picks start, then end, and marks the days between', async ({ page }) => { + // Without a value the calendar opens on today's month – so the days are picked there + const now = new Date(); + const day = (date: number) => new Date(now.getFullYear(), now.getMonth(), date); + const label = (date: Date) => + new RegExp( + `^${date.toLocaleDateString('en-US', { weekday: 'long', month: 'long', day: 'numeric', year: 'numeric' })}` + ); + const iso = (date: Date) => + `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`; + const [start, end] = [day(7), day(9)]; await openStory(page, 'forms-daterangepicker--playground'); await page.getByRole('button', { name: 'Clear range' }).click(); await page.getByRole('button', { name: 'Open calendar' }).click(); - await page.getByRole('button', { name: /^Wednesday, October 7, 2026/ }).click(); - await page.getByRole('button', { name: /^Friday, October 9, 2026/ }).click(); - await expect(page.getByText('From: 2026-10-07 · To: 2026-10-09')).toBeVisible(); + await page.getByRole('button', { name: label(start) }).click(); + await page.getByRole('button', { name: label(end) }).click(); + await expect(page.getByText(`From: ${iso(start)} · To: ${iso(end)}`)).toBeVisible(); }); test('with time: start and end each get hour and minute', async ({ page }) => { From 70451a01c8f2e043c32c8007430925e4b4ea0fef Mon Sep 17 00:00:00 2001 From: Florian Laabs Date: Sun, 8 Nov 2026 08:28:46 +0100 Subject: [PATCH 4/4] test: new reference image for the vertical Stepper, whose busy current step now shows on Next Signed-off-by: Florian Laabs --- .../react-navigation-stepper--vertical.png | Bin 16629 -> 17002 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/packages/parity/e2e/visual/__screenshots__/react-navigation-stepper--vertical.png b/packages/parity/e2e/visual/__screenshots__/react-navigation-stepper--vertical.png index 76d9051984b991ec038529662e7f4dc63dec7957..b6bb1a230dfbf2ea77ac9d225d15c89e9ed4d0d2 100644 GIT binary patch literal 17002 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