Commit Graph
29 Commits
Author SHA1 Message Date
christin 5cce3ee5f4 refactor(site): rename border-hover token to border-secondary (#24553)
Renames the `--border-hover` design token to `--border-secondary` and
updates the color values to work well on `surface-secondary`
backgrounds, preparing for the template creation flow.

- Light theme: `240 5% 65%` (`#A1A1AA`)
- Dark theme: `240 5% 26%` (`#3F3F46`)

All 7 component usages updated to use the new token name.

<details>
<summary>Context</summary>

The previous `border-hover` token used a single value (`#52525B`) for
both themes, which didn't provide enough contrast on `surface-secondary`
backgrounds. The rename to `border-secondary` better reflects its
semantic role as a secondary border color rather than a hover-specific
one, and the updated values give proper contrast in both light and dark
themes. This change is a prerequisite for the upcoming template creation
flow work.

</details>

> 🤖 Generated by Coder Agents
2026-04-22 09:54:28 +02:00
23f9e26796 refactor(site): replace shadcn color aliases with semantic design tokens (#24284)
The shadcn-compatible CSS aliases (`--background`, `--foreground`,
`--muted`,
`--muted-foreground`, `--primary`, `--primary-foreground`) were added as
part
of the Coder agents work with hardcoded HSL values that duplicated
existing
semantic design tokens. These non-standard color classes (`bg-muted`,
`text-muted-foreground`, `text-foreground`) had started spreading
through
components like Table, MultiUserSelect, and WorkspacesTable.

This PR makes two changes:

1. **CSS aliases now derive from canonical tokens via `var()`
references**
instead of duplicating HSL values. The aliases remain for `streamdown`
   and other external consumers, but `--background` now resolves to
   `--surface-primary` (`#FFFFFF` in light, was `#FAFAFA`), and the rest
   map to their semantic equivalents (`--content-primary`,
   `--surface-secondary`, `--content-secondary`, `--content-link`).

2. **Component classes replaced with semantic equivalents:**
   - `bg-muted` → `bg-surface-secondary`
   - `text-muted-foreground` → `text-content-secondary`
   - `text-foreground` → `text-content-primary`
   - `text-amber-400` → `text-content-warning`
   - `hsl(var(--background))` → `hsl(var(--surface-primary))`
   - `hsl(var(--muted-foreground))` → `hsl(var(--content-secondary))`

> This PR was initially created by Claude Opus 4.

Co-authored-by: Jaayden Halko <jaayden@coder.com>
Co-authored-by: Jaayden Halko <jaayden.halko@gmail.com>
2026-04-18 13:39:55 +01:00
Kayla はな 4fab372bdc chore: modernize utils/ imports (#23698) 2026-03-26 16:20:25 -06:00
Danielle Maywood 8bfc5e0868 fix(site): use focus-visible instead of focus for keyboard-only outlines (#23581) 2026-03-25 13:31:50 +00:00
Jaayden Halko 4e2640e506 fix(site): WCAG 2.1 AA remediation — landmarks, semantics, and a11y tooling (#22746)
## Summary

Targeted WCAG 2.1 AA accessibility remediation — continuation of #22673
— addressing remaining semantic, landmark, and tooling gaps identified
in the frontend accessibility review.

### Changes

#### Document semantics (WCAG 3.1.1)
- **`site/index.html`**: Added `<html lang="en">` root wrapper so screen
readers and browser features correctly identify the document language.

#### Landmark & bypass (WCAG 1.3.1, 2.4.1)
- **`DashboardLayout.tsx`**: Replaced `<div id="main-content">` with
`<main id="main-content">` so assistive technology exposes a proper main
landmark and the skip link targets a semantic region.

#### Table header relationships (WCAG 1.3.1)
- **`Table.tsx`**: `TableHead` now renders `scope="col"` by default
(overridable via prop), giving data cells an explicit header
relationship.

#### Semantic interactive controls (WCAG 2.1.1, 4.1.2)
- **`AuditLogRow.tsx`**: Replaced `<div role="button" tabIndex={0}>`
with native `<button type="button">`, removing the manual keyboard
handler (native button provides Enter/Space for free).
- **`Autocomplete.tsx`**: Replaced clear `<span role="button"
tabIndex={0}>` with native `<button type="button" aria-label="Clear
selection">`.

#### Reduced motion (WCAG 2.3.3 best practice)
- **`index.css`**: Added global `@media (prefers-reduced-motion:
reduce)` block that suppresses non-essential animations and transitions.

#### Accessibility regression tooling
- **Storybook**: Added `@storybook/addon-a11y` (version-matched to
existing Storybook 10.x).
- **vitest-axe**: Added `vitest-axe` with setup wiring and an exemplar
`Table.axe.test.tsx` that runs axe-core assertions in vitest.

### Test plan

- 12 new/updated tests pass across 5 test files:
  - `DashboardLayout.test.tsx` — main landmark + skip link behavior
  - `Table.test.tsx` — scope default + override
  - `Table.axe.test.tsx` — axe-core violation scan
  - `AuditPage.test.tsx` — keyboard toggle with native button
  - `Autocomplete.test.tsx` — clear control semantics
- `pnpm lint` clean (biome, TypeScript, circular deps)
- Manual keyboard traversal: skip link → main content, audit row toggle,
autocomplete clear
2026-03-13 10:47:53 +00:00
ケイラ b1f48f8d47 chore: disallow forwardRef (#21906) 2026-02-12 13:31:03 -07:00
Bruno Quaresma 8f2394c256 chore: replace MUI tables (#20201)
I tried to break this work into smaller pieces, but since there are a
lot of dependent components, I decided to handle it in one larger chunk
and rely on Storybook to catch any bugs.

That said, let me know if you’d prefer a different approach!
2025-10-09 10:09:37 -03:00
Bruno Quaresma accdcb8b77 chore: upgrade biome to v2 (#19362)
Guide for migration: https://biomejs.dev/guides/upgrade-to-biome-v2/
2025-08-14 18:25:15 -03:00
ケイラ 4f1db8b866 chore: upgrade to storybook 9 (#18983) 2025-08-08 14:36:27 -06:00
Bruno Quaresma bc3b8d5a51 feat: add task page (#18076)
**Demo:**


![image](https://github.com/user-attachments/assets/ca59ba92-a73a-4613-ae41-910f3f0455d2)
2025-05-28 15:19:05 -03:00
Bruno Quaresma 0b8fd7e403 chore: fix :first-child warning (#17727)
Fix the following warning:

```
The pseudo class ":first-child" is potentially unsafe when doing server-side rendering.
```
2025-05-09 11:11:00 -03:00
brettkolodny f108f9d71f chore: setup knip and remove unused exports, files, and dependencies (#17608)
Closes [coder/interal#600](https://github.com/coder/internal/issues/600)
2025-04-30 15:08:25 -04:00
Bruno Quaresma 510bc37cbc refactor: update avatar sizes in groups, users and members (#17230)
We updated the template and workspace avatars to be "lg" so to keep it
consistent we have to do the same for the other avatars too.
2025-04-04 10:09:37 -03:00
Jaayden Halko 7076c4e4ab feat: add combobox for selecting claim field value for group/role idp sync (#16459)
contributes to coder/internal#330

This is a followup to coder/coder#16335

This adds a combobox that swaps with the input for the idp group and idp
role names when the sync field returns claim values from the claim field
values endpoint. If no claim field values are returned then the input
remains instead of the combobox.


<img width="806" alt="Screenshot 2025-02-05 at 20 50 48"
src="https://github.com/user-attachments/assets/bff839f5-1a2f-4cc1-8933-73fde942bc75"
/>
<img width="803" alt="Screenshot 2025-02-05 at 20 51 00"
src="https://github.com/user-attachments/assets/e9c7ca33-136a-4962-b924-770a64658dc8"
/>
2025-02-07 16:31:02 -05:00
Jaayden Halko d76018a530 fix: style table component to figma design (#16417)
Update the table styling to match the figma designs

Figma:
https://www.figma.com/design/WfqIgsTFXN2BscBSSyXWF8/Coder-kit?node-id=1581-8756&m=dev

<img width="812" alt="Screenshot 2025-02-04 at 12 40 28"
src="https://github.com/user-attachments/assets/9b7dd49a-2f6d-4642-b205-b7cc2062cdd1"
/>
2025-02-04 10:39:44 -05:00
Bruno Quaresma 947818f2d3 chore: add Table component (#16410)
Reference:
https://www.figma.com/design/JYW69pbgOMr21fCMiQsPXg/Provisioners?node-id=10-2056&m=dev

Unfortunately, it’s kinda hard to apply a border only around the table
body using CSS and make it rounded—at least I couldn’t figure out a sane
way to do that. We’d probably need to use a workaround, like not using
the native HTML table element, but that would add significant work. With
that in mind, I'm wrapping the entire table with a border.

<img width="688" alt="Screenshot 2025-02-03 at 14 37 12"
src="https://github.com/user-attachments/assets/55675df0-1aca-4353-b795-0e3cc2938812"
/>
2025-02-03 20:24:47 -03:00
Bruno Quaresma d2aa75dd0d fix: Responsive for workspaces and workspace page (#3189) 2022-07-26 15:05:00 -03:00
Abhineet Jain 82938944e7 refactor: update Prettier printWidth to 100 (#2684) 2022-06-27 10:53:44 -04:00
Kira Pilot dd55d4577d chore: remove react imports (#1867)
reolves #1856
2022-05-31 10:01:37 -04:00
Asher 26b04cc96f chore: switch to generated types (#1394)
* Make column renderer use the same type as its key

That way the renderer only takes `string` for example when rendering the
name field instead of `string | number` when the interface has some
fields that are strings and some fields are numbers.

This will be necessary when switching to generated types since some of
the fields are numbers (like the owner count on a template).

* Switch fully to generated types

In some places the organization ID is part of the URL but not part of
the request so I separated out the ID into a separate argument in the
relevant API functions.

Otherwise this was a straightforward replacement where I mostly only
needed to change some of the interface names (User instead of
UserResponse for example) and add a few missing but required properties.

I kind of winged the template form; I am not sure what the difference
between a template and template version is or why the latter comes
before the former so the form just returns all the data required to
create both.

* Delete handwritten types

Except for UserAgent which seems to be purely frontend and
ReconnectingPTYRequest which is not in codersdk so I am just leaving it
for now.

* Remove implemented omitempty as a future idea

This was implemented in 2d3dc436a8.

* Add missing optionalities to generated request interfaces
2022-05-12 10:01:28 -05:00
Kira Pilot f93804a2a0 chore: renaming index files (#1397) 2022-05-11 17:02:28 -04:00
Bruno Quaresma 75343288ff feat: Add user menu on users table (#1222) 2022-05-02 14:58:49 +00:00
Asher 3151befb38 chore: un-nest components (#1090)
Closes #936.
2022-04-19 14:16:11 -05:00
Bruno Quaresma 301451be40 refactor: remove index files from components (#1086) 2022-04-19 13:20:28 -05:00
Presley Pizzo 6c9c1298e4 Reorganize Storybook (#1087) 2022-04-19 13:52:52 -04:00
Bruno Quaresma b9933d493a refactor: camel case files (#1081) 2022-04-19 11:18:12 -05:00
G r e y c0a9eaca56 chore(site): organize imports (#876) 2022-04-05 10:27:41 -04:00
G r e y 6560f2e340 refactor(site): generalize UserCell component (#484)
Summary:

This is a first step in porting over v1 AuditLog in a refactored/cleaned
up fashion. The existing `UserCell` component was generalized for re-use
across various tables (AuditLog, Users, Orgs).

Details:

- Move UserCell to `components/Table/Cells`
- Add tests and stories for UserCell


Impact:

This unblocks future work in list views like the audit log, user management
panel and organizations management panel.

Relations:

- This commit relates to https://github.com/coder/coder/issues/472, but does not finish it.
- This commit should not merge until after https://github.com/coder/coder/pull/465 and https://github.com/coder/coder/pull/483 because it's
based on them.
2022-03-23 10:28:34 -04:00
Bryan d8e530e1ec refactor: Add 'src' folder in 'site' (#445)
This refactoring re-organizes the `site` folder to have a nested `src` folder.

Originally, [we wanted to keep the directory structure shallow](https://github.com/coder/coder/pull/8#issuecomment-1009578910) - but there were two points that motivated this change to introduce the `src` level.

1. We have several non-`src` folders now (`e2e`, `static`, `html_templates`, `.storybook`)
2. Having a `src` folder makes it easier to run XState Typegen

So given those two data points - I believe it makes sense to revisit that and introduce a `src` folder.
2022-03-16 04:06:03 +00:00