Commit Graph
1138 Commits
Author SHA1 Message Date
Timothy Jaeryang Baek 810378c0b8 refac 2026-07-27 19:39:36 -04:00
Timothy Jaeryang Baek b6b16d5871 refac 2026-07-27 19:24:03 -04:00
Timothy Jaeryang Baek f59d86a10c refac 2026-07-27 03:18:12 -04:00
Timothy Jaeryang Baek 9707d3a5c2 refac 2026-07-27 03:09:25 -04:00
Timothy Jaeryang BaekandVince Castillo, PhD 7801909d27 a11y
Co-Authored-By: Vince Castillo, PhD <154394560+professorcastillo@users.noreply.github.com>
2026-07-27 01:43:58 -04:00
Timothy Jaeryang Baek de681aa543 refac 2026-07-27 01:03:10 -04:00
Timothy Jaeryang Baek 71c4da8c06 refac 2026-07-26 21:12:14 -04:00
Timothy Jaeryang Baek db5c092299 refac 2026-07-26 21:02:31 -04:00
Timothy Jaeryang Baek f798d05586 refac 2026-07-26 19:34:41 -04:00
Classic298 30be10f968 feat: prevent duplicate auth form submissions while one is pending (#27416)
* feat: prevent duplicate auth form submissions while one is pending

When a sign in, sign up or LDAP request is slow, the auth form can be submitted again and every extra click or Enter press starts another concurrent authentication request. The form never tracked a pending state, so submitHandler dispatched a new API call on every submit event. This adds a submitting flag that makes submitHandler ignore re-entrant submits, disables both submit buttons with a dimmed style while a request is in flight and resets the flag in a finally block so the form recovers after a failed attempt. Guarding submitHandler covers button clicks and Enter key submits for sign in, sign up and LDAP alike since all of them flow through the single form submit handler.
Fixes #27264

* feat: show a spinner while an auth request is pending

Disabling the submit button stops a second submission but gives no positive sign that the first one is still running, so on a slow identity provider the form looks unresponsive rather than busy. Both submit buttons now render the existing Spinner next to their label while submitting is set, following the same in-button pattern used by the workspace editors.
2026-07-26 18:55:41 -04:00
G30 11d72c1ce2 fix(ui): replace history entry on redirect so browser back navigation works (#27478) 2026-07-26 18:44:23 -04:00
Timothy Jaeryang Baek 0e0d08382a refac 2026-07-26 18:11:12 -04:00
Timothy Jaeryang Baek 1f0dc90abe refac 2026-07-26 18:06:03 -04:00
Classic298 e3cce68ef2 fix: gate placeholder contrast fix behind High Contrast Mode (#27555)
Follow-up to #27496, reopened as a high contrast mode change.

Placeholder text is the lowest contrast text in the product. The grey scale in src/tailwind.css is achromatic oklch(L 0 0), so relative luminance is exactly L³, and placeholder:text-gray-300 is 1.58:1 on white against the 4.5:1 required by WCAG 1.4.3. The large text exemption does not apply, the largest of these is text-lg. Placeholders are frequently the only format hint a field gives, for example admin/Settings/General.svelte uses e.g.) "http://localhost:3000".

Rather than deleting the ~200 per-component placeholder utilities and rewriting the base rule, the remap now happens in two CSS rules that only apply when the existing High Contrast Mode setting is on, so the default theme is untouched:

- placeholders resolve to gray-600 (5.75:1) in light mode
- placeholders resolve to gray-500 (6.46:1) in dark mode

The rules sit in `@layer utilities` and are anchored on `input`/`textarea`, which puts them above both the base rule in src/tailwind.css and every per-component `placeholder:text-*` utility, so no call site has to change. Placeholders stay distinguishable from real input values, which are text-gray-700 (8.46:1) in light and dark:text-gray-300 (11.39:1) in dark.

The chat composer placeholder is a tiptap ::before, so neither the base rule nor any utility reaches it. It is hardcoded #676767, which is 5.66:1 in light but only 3.17:1 on the dark canvas, so only the dark side is remapped, to gray-500. That rule stays outside the layer because the rule it overrides is unlayered too.

The root layout toggles a `high-contrast` class on documentElement from `$settings.highContrastMode`, alongside the existing theme classes, so every route is covered and the class is removed again when the setting is turned off.

Verified in a browser against Tailwind's emitted rules and layer order, on inputs both with and without per-component placeholder utilities: with the setting on, placeholders resolve to gray-600 in light and gray-500 in dark, the composer placeholder resolves to gray-500 in dark even with the prefers-color-scheme override treated as unconditional, and with the setting off nothing changes in either theme. Also checked against the oled-dark theme (gray-500 on #000 is 7.57:1) and the dark:bg-white/[0.03] input surface (6.01:1).

Note: the `high-contrast` class toggle is the same hunk as in the muted text contrast branch. Whichever lands first, the other rebases cleanly by dropping it.
2026-07-26 18:02:57 -04:00
G30 29499cb4ba perf: dedupe folder refetches and chat-list sweeps on sidebar folder selection (#27540) 2026-07-26 17:27:33 -04:00
G30 ef197de0d7 fix: open settings deep links on client-side navigation and open Add Terminal settings directly (#27552) 2026-07-26 17:26:34 -04:00
Timothy Jaeryang Baek d7513e4ce8 refac 2026-07-24 02:05:31 -04:00
Classic298 585b704597 fix: clear token cookie on 401 auth redirect to stop login flash loop (#26751)
Since v0.10.0 a global fetch interceptor redirects to /auth and clears
localStorage.token whenever an authenticated backend request returns 401.
The OAuth callback cookie ("token", set with httponly=False so the
frontend can read it) is left behind. The auth page's oauthCallbackHandler
then immediately signs the user back in from that cookie and navigates to
"/", where the next 401 triggers the redirect again. The result is an
endless /auth and / ping-pong that renders as uncontrollable screen
flashing, and as a PWA stuck on a flashing splash screen when SvelteKit's
update check turns each navigation into a full page reload. Affected
users could only recover by clearing cookies, which matches the reports.

Clear the token cookie together with localStorage when redirecting, so
/auth stays on the login form and the user can sign in again normally.

Fixes #26731
2026-07-24 00:59:43 -05:00
G30 3132f11e55 feat: add setting to toggle keyboard shortcuts on/off (#27300) 2026-07-23 22:14:56 -04:00
Timothy Jaeryang Baek 49abfbdd15 refac 2026-07-23 13:18:04 -04:00
Timothy Jaeryang Baek 409fb39717 refac 2026-07-21 13:53:30 -04:00
Timothy Jaeryang Baek 6940297486 refac 2026-07-20 22:27:09 -04:00
Timothy Jaeryang Baek 49e57f4e7e chore: format 2026-07-20 22:11:42 -04:00
Timothy Jaeryang Baek 2fcb36267f refac 2026-07-20 01:33:53 -04:00
Timothy Jaeryang Baek 421da67446 refac 2026-07-17 05:15:09 -04:00
Timothy Jaeryang Baek a6fcc61a16 refac 2026-07-17 00:55:24 -04:00
Timothy Jaeryang Baek ce44b90eae refac 2026-07-17 00:54:13 -04:00
Timothy Jaeryang Baek 27d7eafcd9 refac 2026-07-17 00:16:01 -04:00
Timothy Jaeryang Baek d7f33996ee refac 2026-07-16 02:49:21 -04:00
Timothy Jaeryang Baek 9be11883b8 refac 2026-07-16 02:05:08 -04:00
Timothy Jaeryang Baek 933ab1e1cd refac 2026-07-15 18:03:36 -04:00
Timothy Jaeryang Baek db934a3b4f refac 2026-07-15 16:51:08 -04:00
Timothy Jaeryang Baek 29782aba01 refac 2026-07-15 16:26:40 -04:00
Timothy Jaeryang Baek 609cc6ad9b refac 2026-07-15 16:26:31 -04:00
Timothy Jaeryang Baek 727041da78 refac 2026-07-15 05:49:48 -04:00
Timothy Jaeryang Baek f8ea15b84a refac 2026-07-15 05:38:44 -04:00
Timothy Jaeryang Baek 3ce3c52936 refac 2026-07-15 05:17:41 -04:00
Timothy Jaeryang Baek 343eb1d659 refac 2026-07-15 04:52:06 -04:00
Timothy Jaeryang Baek 1760b073c7 refac 2026-07-15 04:39:37 -04:00
Timothy Jaeryang Baek 59fc600b52 refac 2026-07-15 04:33:06 -04:00
Timothy Jaeryang Baek f8350360df refac 2026-07-15 04:12:11 -04:00
Timothy Jaeryang Baek 05e3f71317 refac 2026-07-15 04:01:23 -04:00
Timothy Jaeryang Baek fee4c280f8 refac 2026-07-15 03:22:29 -04:00
Timothy Jaeryang Baek 3ff20b210e refac 2026-07-15 03:13:37 -04:00
Timothy Jaeryang Baek d300522e96 refac 2026-07-15 03:11:15 -04:00
Timothy Jaeryang Baek 622767d724 refac 2026-07-15 02:49:46 -04:00
Timothy Jaeryang Baek b2769f831e refac 2026-07-15 02:07:39 -04:00
Timothy Jaeryang Baek 804ec68a6b refac 2026-07-15 02:01:45 -04:00
Timothy Jaeryang Baek c64fe45376 refac 2026-07-15 01:22:51 -04:00
Timothy Jaeryang Baek c1460570b7 refac 2026-07-15 00:40:20 -04:00