Files
windmill/frontend
Guilhem LemouelandClaude Opus 5 6eeb29deb2 fix: harden the import wizard and put it on the design system
Review fixes, then the parts of the wizard that were hand-built where the
design system already had an answer.

Correctness:

- Hub SVGs are sanitised with DOMPurify before `{@html}`. The earlier comment
  claimed the markup came from the hub's own icon package rather than user
  input, which the custom-URL feature makes false: the hub is whatever address
  the user typed.
- The run owns navigation while it is in flight. The stepper refuses to move,
  `beforeNavigate` cancels browser back/forward, and unmounting resolves a
  pending migration review so the executor cannot hang waiting on a component
  that is gone.
- The folder edited on the last step reaches the executor, so a retry after
  changing it imports where the field now says.
- `validateWorkspaceId` and the workspace-entry pair (`listUserWorkspaces` then
  `switchWorkspace`) are extracted, so the wizard and the real create form
  cannot drift on what an id is or on what entering a workspace means.

Design system:

- The destination tiles are `RadioCard`, which gains `showRadio` and a snippet
  `description`; the wizard turns the glyph off because the border and tint
  already say which one is picked. `RadioCard` now also carries `role="radio"`
  and `aria-checked`, which it had neither of, and marks its selection with
  `surface-accent-selected` — the token `FileExplorer`, `TriggersTable` and
  `RunnableRow` all use for the chosen row.
- Form labels follow `brand-guidelines.md` — sentence case, real `<label>`
  elements so the text focuses the field, Caption-styled errors — rather than
  one-off 11px uppercase tertiary text. They use the lighter secondary weight,
  since the fields arrive prefilled and the value carries the meaning.

Folder choice, restored and merged:

- Picking an existing folder came back for an existing-workspace destination.
  `FolderPicker` takes a `workspace` prop so it can list a workspace without
  switching to it, and resolves `whoami` there — its write flags came from
  `$userStore`, i.e. the wrong workspace, which rendered every real folder
  read-only and unselectable. A new workspace has no folders to choose between,
  so it is not asked.
- The progress list and the imported paths are one component: the paths hang
  off the import task that produces them instead of forming a second list.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-19 13:13:47 +02:00
..
2026-03-05 18:11:40 +01:00
2026-03-18 11:38:22 +00:00

Windmill frontend

The Windmill frontend written in Svelte 5 + Tailwind CSS

The frontend is under AGPL, see the LICENSE file at the root of this repo