Files
oxpoe e903912029
CI / test (push) Successful in 27s
ui: surface chrome ala tuios — bar workspace + modal + strip hint bertier
Analisa referensi tuios (Charm/BubbleTea): overlay = surface solid + chip
judul aksen, bukan border; hint strip dibuang bertier saat sempit; geometri
satu sumber untuk render & hit-test.

- components.Chip: pill label (latar aksen + teks Base; mode terminal =
  reverse) — dipakai bar workspace & modal.
- Bar workspace jadi surface 3 baris (chip 'workspace', subjudul tautan
  seksi + tombol kanan, pill Cari inset Base) — pola mock draf-tia.
- Modal konverter jadi surface: chip judul, blok inset Base untuk input &
  output (padding & teks dalam satu gaya agar latar tak bolong oleh reset
  SGR), strip tombol Base, baris hint terstyling.
- Footer jadi dock hint: kunci aksen tebal + label redup, hint dibuang
  bertier (dekoratif dulu, esensial bertahan) dengan ellipsis, status
  diagnostik dipangkas ke sisa ruang — teks plain (hit-test) = teks tampil.
- Tes: chip (3 mode tema), footer bertier (plain==styled, batas lebar), e2e
  posisi klik digeser mengikuti bar 3 baris.
2026-10-16 03:57:13 +07:00

27 lines
710 B
Go

package components
import (
"strings"
"testing"
"github.com/charmbracelet/x/ansi"
"gitea.oxpoe.qzz.io/oxpoe/tia-love/internal/ui/theme"
)
// TestChip — ukuran chip = label + 2 sel padding, isi label utuh di semua mode
// tema (mode terminal memakai reverse, bukan latar warna).
func TestChip(t *testing.T) {
for _, mode := range []theme.Mode{theme.ModeDark, theme.ModeLight, theme.ModeTerminal} {
theme.Set(mode, "mauve")
out := Chip("workspace")
if got := ansi.Strip(out); got != " workspace " {
t.Fatalf("mode %s: teks chip = %q", mode, got)
}
if !strings.Contains(out, "workspace") {
t.Fatalf("mode %s: label hilang di %q", mode, out)
}
}
theme.Set(theme.ModeDark, "mauve")
}