2 Commits

Author SHA1 Message Date
google-labs-jules[bot]
f63eab72f7 🎨 Palette: Fix backend CI failures
- Added `//go:build ignore` to standalone scripts in `scripts/` to prevent redeclaration of `main`.
- Fixed redundant newline in `fmt.Println` in `cmd/lighter_test/main.go`.
- Updated `trader/hyperliquid/trader_test.go` to match the actual error message phrasing.

Co-authored-by: tinkle-community <240652709+tinkle-community@users.noreply.github.com>
2026-02-05 16:11:02 +00:00
google-labs-jules[bot]
6c26f9eb95 🎨 Palette: Improve LoginPage accessibility
- Added aria-label and aria-pressed to the password visibility toggle in LoginPage.
- Added showPassword and hidePassword translations to both English and Chinese.
- Ensured changes are micro and focused on accessibility.

Co-authored-by: tinkle-community <240652709+tinkle-community@users.noreply.github.com>
2026-02-05 15:54:28 +00:00
10 changed files with 21 additions and 2 deletions

3
.Jules/palette.md Normal file
View File

@@ -0,0 +1,3 @@
## 2025-05-22 - [Accessibility: Password Toggles]
**Learning:** Icon-only buttons for password visibility toggles are a common accessibility gap. Adding `aria-label` and `aria-pressed` ensures screen reader users understand the button's purpose and state.
**Action:** Always check password fields and add these attributes along with corresponding translations in `translations.ts`.

View File

@@ -75,7 +75,7 @@ func main() {
fmt.Printf("ERROR: Failed to create TxClient: %v\n", err)
os.Exit(1)
}
fmt.Println("SUCCESS: TxClient created\n")
fmt.Println("SUCCESS: TxClient created")
// Step 3: Generate auth token
fmt.Println("Step 3: Generating auth token...")

View File

@@ -1,3 +1,5 @@
//go:build ignore
package main
import (

View File

@@ -1,3 +1,5 @@
//go:build ignore
package main
import (

View File

@@ -1,3 +1,5 @@
//go:build ignore
package main
import (

View File

@@ -1,3 +1,5 @@
//go:build ignore
package main
import (

View File

@@ -1,3 +1,5 @@
//go:build ignore
package main
import (

View File

@@ -283,7 +283,7 @@ func TestNewHyperliquidTrader(t *testing.T) {
walletAddr: "0x1234567890123456789012345678901234567890",
testnet: true,
wantError: true,
errorContains: "Failed to parse private key",
errorContains: "failed to parse private key",
},
{
name: "Empty wallet address",

View File

@@ -334,6 +334,8 @@ export function LoginPage() {
type="button"
onClick={() => setShowPassword(!showPassword)}
className="absolute right-3 top-1/2 -translate-y-1/2 text-zinc-600 hover:text-zinc-400 transition-colors"
aria-label={showPassword ? t('hidePassword', language) : t('showPassword', language)}
aria-pressed={showPassword}
>
{showPassword ? <EyeOff size={16} /> : <Eye size={16} />}
</button>

View File

@@ -667,6 +667,8 @@ export const translations = {
passwordRequired: 'Password is required',
invalidEmail: 'Invalid email format',
passwordTooShort: 'Password must be at least 6 characters',
showPassword: 'Show password',
hidePassword: 'Hide password',
// Landing Page
features: 'Features',
@@ -1834,6 +1836,8 @@ export const translations = {
passwordRequired: '请输入密码',
invalidEmail: '邮箱格式不正确',
passwordTooShort: '密码至少需要6个字符',
showPassword: '显示密码',
hidePassword: '隐藏密码',
// Landing Page
features: '功能',