From 971f0cb360af0c420342a46de94458c05f9e8127 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B7=E7=94=B5=E8=8A=BD=E8=A1=A3?= Date: Mon, 5 Oct 2026 15:02:31 -0400 Subject: [PATCH] WIP chat input --- attachment_chip.go | 90 +++++++ attachment_chip_test.go | 62 +++++ citation_badge.go | 131 ++++++++++ citation_badge_test.go | 99 ++++++++ context_chips.go | 80 ++++++ context_chips_test.go | 60 +++++ context_mention_menu.go | 114 +++++++++ context_mention_menu_test.go | 108 ++++++++ context_window_meter.go | 95 +++++++ context_window_meter_test.go | 63 +++++ drag_drop_overlay.go | 100 ++++++++ drag_drop_overlay_test.go | 53 ++++ icons/svg/at-sign.svg | 15 ++ icons/svg/bot.svg | 19 ++ icons/svg/globe.svg | 16 ++ icons/svg/key-round.svg | 15 ++ icons/svg/mic-off.svg | 19 ++ icons/svg/mic.svg | 16 ++ icons/svg/paperclip.svg | 14 ++ icons/svg/shield-check.svg | 15 ++ icons/svg/sliders-horizontal.svg | 22 ++ icons/svg/square.svg | 14 ++ icons/svg/telescope.svg | 20 ++ icons/svg/terminal.svg | 15 ++ messages_chatinput.go | 64 +++++ mode_selector.go | 53 ++++ mode_selector_test.go | 62 +++++ model_selector.go | 150 +++++++++++ model_selector_test.go | 72 ++++++ parameter_panel.go | 76 ++++++ parameter_panel_test.go | 69 ++++++ paste_image_preview.go | 56 +++++ paste_image_preview_test.go | 61 +++++ prompt_composer.go | 99 ++++++++ prompt_composer_test.go | 85 +++++++ search_progress.go | 86 +++++++ search_progress_test.go | 60 +++++ send_button.go | 72 ++++++ send_button_test.go | 46 ++++ slash_command_menu.go | 232 ++++++++++++++++++ slash_command_menu_test.go | 122 +++++++++ source_card.go | 37 +++ source_card_test.go | 66 +++++ sources_panel.go | 54 ++++ sources_panel_test.go | 66 +++++ .../snapshots/darwin/attachment_chip-dark.png | Bin 0 -> 7776 bytes .../darwin/attachment_chip-light.png | Bin 0 -> 7631 bytes .../snapshots/darwin/citation_badge-dark.png | Bin 0 -> 3429 bytes .../snapshots/darwin/citation_badge-light.png | Bin 0 -> 3290 bytes .../snapshots/darwin/context_chips-dark.png | Bin 0 -> 6610 bytes .../snapshots/darwin/context_chips-light.png | Bin 0 -> 6359 bytes .../darwin/context_mention_menu-dark.png | Bin 0 -> 24204 bytes .../darwin/context_mention_menu-light.png | Bin 0 -> 25537 bytes .../darwin/context_window_meter-dark.png | Bin 0 -> 16654 bytes .../darwin/context_window_meter-light.png | Bin 0 -> 15945 bytes .../darwin/drag_drop_overlay-dark.png | Bin 0 -> 7808 bytes .../darwin/drag_drop_overlay-light.png | Bin 0 -> 7470 bytes .../snapshots/darwin/mode_selector-dark.png | Bin 0 -> 9877 bytes .../snapshots/darwin/mode_selector-light.png | Bin 0 -> 9729 bytes .../snapshots/darwin/model_selector-dark.png | Bin 0 -> 17254 bytes .../snapshots/darwin/model_selector-light.png | Bin 0 -> 18707 bytes .../snapshots/darwin/parameter_panel-dark.png | Bin 0 -> 12173 bytes .../darwin/parameter_panel-light.png | Bin 0 -> 11796 bytes .../darwin/paste_image_preview-dark.png | Bin 0 -> 1654 bytes .../darwin/paste_image_preview-light.png | Bin 0 -> 1647 bytes .../snapshots/darwin/prompt_composer-dark.png | Bin 0 -> 12719 bytes .../darwin/prompt_composer-light.png | Bin 0 -> 12076 bytes .../snapshots/darwin/search_progress-dark.png | Bin 0 -> 18338 bytes .../darwin/search_progress-light.png | Bin 0 -> 17464 bytes .../snapshots/darwin/send_button-dark.png | Bin 0 -> 2835 bytes .../snapshots/darwin/send_button-light.png | Bin 0 -> 2902 bytes .../darwin/slash_command_menu-dark.png | Bin 0 -> 14873 bytes .../darwin/slash_command_menu-light.png | Bin 0 -> 16496 bytes .../snapshots/darwin/source_card-dark.png | Bin 0 -> 18679 bytes .../snapshots/darwin/source_card-light.png | Bin 0 -> 18262 bytes .../snapshots/darwin/sources_panel-dark.png | Bin 0 -> 26405 bytes .../snapshots/darwin/sources_panel-light.png | Bin 0 -> 25782 bytes .../snapshots/darwin/token_counter-dark.png | Bin 0 -> 6301 bytes .../snapshots/darwin/token_counter-light.png | Bin 0 -> 6085 bytes .../darwin/tool_toggle_menu-dark.png | Bin 0 -> 18313 bytes .../darwin/tool_toggle_menu-light.png | Bin 0 -> 19707 bytes .../darwin/voice_input_button-dark.png | Bin 0 -> 6692 bytes .../darwin/voice_input_button-light.png | Bin 0 -> 6423 bytes .../snapshots/darwin/voice_waveform-dark.png | Bin 0 -> 3275 bytes .../snapshots/darwin/voice_waveform-light.png | Bin 0 -> 3239 bytes text_area.go | 5 + token_counter.go | 49 ++++ token_counter_test.go | 55 +++++ tool_toggle_menu.go | 122 +++++++++ tool_toggle_menu_test.go | 78 ++++++ voice_input_button.go | 77 ++++++ voice_input_button_test.go | 76 ++++++ voice_waveform.go | 75 ++++++ voice_waveform_test.go | 63 +++++ 94 files changed, 3543 insertions(+) create mode 100644 attachment_chip.go create mode 100644 attachment_chip_test.go create mode 100644 citation_badge.go create mode 100644 citation_badge_test.go create mode 100644 context_chips.go create mode 100644 context_chips_test.go create mode 100644 context_mention_menu.go create mode 100644 context_mention_menu_test.go create mode 100644 context_window_meter.go create mode 100644 context_window_meter_test.go create mode 100644 drag_drop_overlay.go create mode 100644 drag_drop_overlay_test.go create mode 100644 icons/svg/at-sign.svg create mode 100644 icons/svg/bot.svg create mode 100644 icons/svg/globe.svg create mode 100644 icons/svg/key-round.svg create mode 100644 icons/svg/mic-off.svg create mode 100644 icons/svg/mic.svg create mode 100644 icons/svg/paperclip.svg create mode 100644 icons/svg/shield-check.svg create mode 100644 icons/svg/sliders-horizontal.svg create mode 100644 icons/svg/square.svg create mode 100644 icons/svg/telescope.svg create mode 100644 icons/svg/terminal.svg create mode 100644 messages_chatinput.go create mode 100644 mode_selector.go create mode 100644 mode_selector_test.go create mode 100644 model_selector.go create mode 100644 model_selector_test.go create mode 100644 parameter_panel.go create mode 100644 parameter_panel_test.go create mode 100644 paste_image_preview.go create mode 100644 paste_image_preview_test.go create mode 100644 prompt_composer.go create mode 100644 prompt_composer_test.go create mode 100644 search_progress.go create mode 100644 search_progress_test.go create mode 100644 send_button.go create mode 100644 send_button_test.go create mode 100644 slash_command_menu.go create mode 100644 slash_command_menu_test.go create mode 100644 source_card.go create mode 100644 source_card_test.go create mode 100644 sources_panel.go create mode 100644 sources_panel_test.go create mode 100644 testdata/snapshots/darwin/attachment_chip-dark.png create mode 100644 testdata/snapshots/darwin/attachment_chip-light.png create mode 100644 testdata/snapshots/darwin/citation_badge-dark.png create mode 100644 testdata/snapshots/darwin/citation_badge-light.png create mode 100644 testdata/snapshots/darwin/context_chips-dark.png create mode 100644 testdata/snapshots/darwin/context_chips-light.png create mode 100644 testdata/snapshots/darwin/context_mention_menu-dark.png create mode 100644 testdata/snapshots/darwin/context_mention_menu-light.png create mode 100644 testdata/snapshots/darwin/context_window_meter-dark.png create mode 100644 testdata/snapshots/darwin/context_window_meter-light.png create mode 100644 testdata/snapshots/darwin/drag_drop_overlay-dark.png create mode 100644 testdata/snapshots/darwin/drag_drop_overlay-light.png create mode 100644 testdata/snapshots/darwin/mode_selector-dark.png create mode 100644 testdata/snapshots/darwin/mode_selector-light.png create mode 100644 testdata/snapshots/darwin/model_selector-dark.png create mode 100644 testdata/snapshots/darwin/model_selector-light.png create mode 100644 testdata/snapshots/darwin/parameter_panel-dark.png create mode 100644 testdata/snapshots/darwin/parameter_panel-light.png create mode 100644 testdata/snapshots/darwin/paste_image_preview-dark.png create mode 100644 testdata/snapshots/darwin/paste_image_preview-light.png create mode 100644 testdata/snapshots/darwin/prompt_composer-dark.png create mode 100644 testdata/snapshots/darwin/prompt_composer-light.png create mode 100644 testdata/snapshots/darwin/search_progress-dark.png create mode 100644 testdata/snapshots/darwin/search_progress-light.png create mode 100644 testdata/snapshots/darwin/send_button-dark.png create mode 100644 testdata/snapshots/darwin/send_button-light.png create mode 100644 testdata/snapshots/darwin/slash_command_menu-dark.png create mode 100644 testdata/snapshots/darwin/slash_command_menu-light.png create mode 100644 testdata/snapshots/darwin/source_card-dark.png create mode 100644 testdata/snapshots/darwin/source_card-light.png create mode 100644 testdata/snapshots/darwin/sources_panel-dark.png create mode 100644 testdata/snapshots/darwin/sources_panel-light.png create mode 100644 testdata/snapshots/darwin/token_counter-dark.png create mode 100644 testdata/snapshots/darwin/token_counter-light.png create mode 100644 testdata/snapshots/darwin/tool_toggle_menu-dark.png create mode 100644 testdata/snapshots/darwin/tool_toggle_menu-light.png create mode 100644 testdata/snapshots/darwin/voice_input_button-dark.png create mode 100644 testdata/snapshots/darwin/voice_input_button-light.png create mode 100644 testdata/snapshots/darwin/voice_waveform-dark.png create mode 100644 testdata/snapshots/darwin/voice_waveform-light.png create mode 100644 token_counter.go create mode 100644 token_counter_test.go create mode 100644 tool_toggle_menu.go create mode 100644 tool_toggle_menu_test.go create mode 100644 voice_input_button.go create mode 100644 voice_input_button_test.go create mode 100644 voice_waveform.go create mode 100644 voice_waveform_test.go diff --git a/attachment_chip.go b/attachment_chip.go new file mode 100644 index 0000000..1fc9ff5 --- /dev/null +++ b/attachment_chip.go @@ -0,0 +1,90 @@ +package mujica + +import ( + "fmt" + "log/slog" + "math" + + "github.com/egoist/mygo/ui" + + "mujicaui/icons" + "mujicaui/theme" +) + +// Attachment is a file attached to a prompt; the caller uploads it. +type Attachment struct { + // Name is required. + Name string + // Type is the MIME type; empty picks the icon from the name. + Type string + Size int64 + // Uploading shows Progress, 0 to 1. + Uploading bool + Progress float64 + // Err shows a failed upload with retry. + Err error +} + +// AttachmentChipResult is a chip's element and the user's request this frame. +type AttachmentChipResult struct { + Element *ui.Element + removed, retried bool +} + +// Removed reports a press of the remove button. +func (r AttachmentChipResult) Removed() bool { return r.removed } + +// Retried reports a press of retry on a failed upload. +func (r AttachmentChipResult) Retried() bool { return r.retried } + +// AttachmentChip shows an attachment's type, name, size, upload progress or failure, and remove. +func AttachmentChip(c *ui.Context, a Attachment) AttachmentChipResult { + if a.Name == "" || a.Size < 0 { + panic("mujica: Attachment needs a Name and a non-negative Size") + } + if a.Uploading && !(a.Progress >= 0 && a.Progress <= 1) { + panic("mujica: Attachment Progress must be from 0 to 1") + } + k := Tokens(c) + u := Density(c).Unit() + var r AttachmentChipResult + border := k.Border + if a.Err != nil { + border = k.Danger + } + r.Element = ui.Row(c).Gap(u * 2).AlignItems(ui.Center).Padding(u, u, u, u*2).Width(220). + Radius(theme.ControlRadius).Background(k.Surface).Border(theme.BorderWidth, border).Role(ui.RoleGroup).Label(a.Name) + disabled := r.Element.IsDisabled() + r.Element.Children(func() { + icon, color := fileMessageIcon(a.Name, a.Type), k.AccentText + if a.Err != nil { + icon, color = "circle-alert", k.Danger + } + ui.Icon(c, icons.Must(icon)).Size(20, 20).Shrink(0).TextColor(color) + ui.Column(c).Grow(1).MinWidth(0).Gap(u / 2).Children(func() { + ui.Text(c, a.Name).SingleLine().FontSize(FontSize(c, theme.CaptionSize)).FontWeight(600) + small := FontSize(c, theme.CaptionSize) + switch { + case a.Err != nil: + ui.Text(c, msg(c, "attachment_chip.failed")).SingleLine().FontSize(small).TextColor(k.Danger) + case a.Uploading: + pct := int(math.Round(a.Progress * 100)) + ui.Text(c, fmt.Sprintf(msg(c, "attachment_chip.uploading"), pct)).SingleLine().FontSize(small).TextColor(k.TextMuted).FontFeatures("tnum") + frac := float32(a.Progress) + ui.Box(c).Height(3).Radius(1.5).Background(k.Border).Role(ui.RoleProgress).Label(fmt.Sprintf(msg(c, "attachment_chip.uploading"), pct)). + Draw(func(p *ui.Painter, b ui.Rect) { p.Fill(ui.Rect{X: b.X, Y: b.Y, W: b.W * frac, H: b.H}, k.AccentText, 1.5) }) + default: + ui.Text(c, fileMessageSize(c, a.Size)).SingleLine().FontSize(small).TextColor(k.TextMuted) + } + }) + if a.Err != nil && iconAction(c, icons.Must("refresh-cw"), fmt.Sprintf(msg(c, "attachment_chip.retry"), a.Name)).Clicked() && !disabled { + r.retried = true + slog.Debug("mujica: attachment_chip retry") + } + if iconAction(c, icons.Must("x"), fmt.Sprintf(msg(c, "attachment_chip.remove"), a.Name)).Clicked() && !disabled { + r.removed = true + slog.Debug("mujica: attachment_chip remove") + } + }) + return r +} diff --git a/attachment_chip_test.go b/attachment_chip_test.go new file mode 100644 index 0000000..3b9e1bd --- /dev/null +++ b/attachment_chip_test.go @@ -0,0 +1,62 @@ +package mujica + +import ( + "errors" + "testing" + + "github.com/egoist/mygo/ui" +) + +func TestAttachmentChipStatesAndActions(t *testing.T) { + a := Attachment{Name: "guests.csv", Size: 4096, Uploading: true, Progress: 0.4} + removed, retried := 0, 0 + tt := ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + r := AttachmentChip(c, a) + if r.Removed() { + removed++ + } + if r.Retried() { + retried++ + } + }, 400, 120) + if !tt.HasText("Uploading 40%") { + t.Fatalf("progress: %q", tt.Texts()) + } + if _, ok := tt.Find("Retry upload of guests.csv"); ok { + t.Fatal("retry shown while uploading") + } + a.Uploading, a.Err = false, errors.New("413") + tt.Frame() + _ = tt.Click("Retry upload of guests.csv") + _ = tt.Click("Remove guests.csv") + if retried != 1 || removed != 1 || !tt.HasText("Upload failed") { + t.Fatalf("retried %d removed %d texts %q", retried, removed, tt.Texts()) + } + a.Err = nil + tt.Frame() + if !tt.HasText("4.0 KB") { + t.Fatalf("size: %q", tt.Texts()) + } +} + +func TestAttachmentChipBadProgress(t *testing.T) { + defer func() { + if recover() == nil { + t.Fatal("no panic for progress 2") + } + }() + ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + AttachmentChip(c, Attachment{Name: "a", Uploading: true, Progress: 2}) + }, 100, 100) +} + +func TestAttachmentChipSnapshot(t *testing.T) { + snapshot(t, "attachment_chip", 520, 80, func(c *ui.Context) { + ui.Row(c).Padding(12).Gap(8).Children(func() { + AttachmentChip(c, Attachment{Name: "guests.csv", Size: 4096}) + AttachmentChip(c, Attachment{Name: "portrait.png", Size: 812000, Uploading: true, Progress: 0.62}) + }) + }) +} diff --git a/citation_badge.go b/citation_badge.go new file mode 100644 index 0000000..83e9c88 --- /dev/null +++ b/citation_badge.go @@ -0,0 +1,131 @@ +package mujica + +import ( + "fmt" + "log/slog" + "time" + + "github.com/egoist/mygo/ui" + + "mujicaui/internal" + "mujicaui/theme" +) + +// Source is a document an answer cites. +type Source struct { + // Title and URL are required. + Title, URL string + Site string + Snippet string + Published time.Time +} + +// CitationState links citations, source cards and the sources panel; the caller holds it. +type CitationState struct { + // Active is the 1-based number of the source the user chose; 0 for none. + Active int + hover int + owner uint64 +} + +// lit reports whether source n is chosen or hovered anywhere. +func (s *CitationState) lit(n int) bool { return n > 0 && (s.Active == n || s.hover == n) } + +// track records that e, showing source n, is or is no longer under the pointer. +func (s *CitationState) track(c *ui.Context, e *ui.Element, n int) { + switch over := e.Hovered(); { + case over && s.hover != n: + s.hover, s.owner = n, e.ID() + c.Invalidate() + case !over && s.owner == e.ID() && s.hover != 0: + s.hover, s.owner = 0, 0 + c.Invalidate() + } +} + +// CitationBadge is an inline source number; hovering previews the source, clicking makes it Active. +func CitationBadge(c *ui.Context, n int, src Source, st *CitationState) ChoiceResult { + if n < 1 || st == nil || src.Title == "" || src.URL == "" { + panic("mujica: CitationBadge needs n >= 1, a state and a Source with Title and URL") + } + k := Tokens(c) + label := fmt.Sprintf(msg(c, "citation_badge.label"), n, src.Title) + size := FontSize(c, theme.CaptionSize-1) + b := ui.ButtonBase(c).MinWidth(18).Height(18).Padding(0, 4).Radius(theme.ControlRadius).Label(label).Transition(colorFade) + internal.Ring(b, k.Focus, theme.ControlRadius) + st.track(c, b, n) + if st.lit(n) { + b.Background(k.Selection).Border(theme.BorderWidth, k.AccentText).TextColor(k.AccentText) + } else { + b.Background(k.SurfaceHover).Border(theme.BorderWidth, k.Border).TextColor(k.TextMuted) + } + b.Children(func() { ui.Text(c, fmt.Sprint(n)).FontSize(size).FontFeatures("tnum").FontWeight(600).SingleLine() }) + r := ChoiceResult{Element: b} + if b.Clicked() && !b.IsDisabled() && st.Active != n { + st.Active, r.changed = n, true + slog.Debug("mujica: citation_badge activate", "n", n) + } + citationPreview(c, b, n, src) + return r +} + +// citationPreviewDelay is how long hover or focus rests before the preview shows. +const citationPreviewDelay = 500 * time.Millisecond + +// citationPreview shows the source by badge b once hover or keyboard focus rests on it. +// It lets the pointer through, so the badge stays clickable under it; Escape hides it. +func citationPreview(c *ui.Context, b *ui.Element, n int, src Source) { + st := ui.Local(b, "mujica.citation", func() tooltipState { return tooltipState{} }) + size := ui.Local(b, "mujica.citation.size", func() ui.Rect { return ui.Rect{} }) + if !b.Hovered() && !b.FocusVisible() { + *st = tooltipState{} + return + } + if st.dismissed { + return + } + if st.since.IsZero() { + st.since = c.Now() + } + if wait := citationPreviewDelay - c.Now().Sub(st.since); wait > 0 { + c.After(wait) + return + } + if overlayEscape(c, st) { + st.dismissed = true + return + } + u := Density(c).Unit() + w := float32(300) + x, y := overlayPlace(c, b.Bounds(), w, size.H, 6) + ui.Overlay(c, func() { + panel := ui.Column(c).Absolute().Left(x).Top(y).Width(w).Padding(u * 3).PassThrough().Role(ui.RoleTooltip) + overlayStyle(c, panel, overlayAnchored(c, panel, *size)) + *size = panel.Bounds() + panel.Children(func() { sourceSummary(c, n, src) }) + }) +} + +// sourceSummary shows a source's number, site, title, time and snippet. +func sourceSummary(c *ui.Context, n int, src Source) { + k := Tokens(c) + u := Density(c).Unit() + small := FontSize(c, theme.CaptionSize) + ui.Column(c).Gap(u).MinWidth(0).Grow(1).Children(func() { + ui.Row(c).Gap(u * 2).AlignItems(ui.Center).Children(func() { + ui.Text(c, fmt.Sprintf("[%d]", n)).FontSize(small).FontFeatures("tnum").TextColor(k.AccentText).SingleLine() + site := src.Site + if site == "" { + site = src.URL + } + ui.Text(c, site).FontSize(small).TextColor(k.TextMuted).SingleLine().Shrink(1).MinWidth(0) + if !src.Published.IsZero() { + ui.Text(c, src.Published.Format("2006-01-02")).FontSize(small).TextColor(k.TextMuted).FontFeatures("tnum").SingleLine() + } + }) + ui.Text(c, src.Title).FontWeight(600).MaxLines(2) + if src.Snippet != "" { + ui.Text(c, src.Snippet).FontSize(small).TextColor(k.TextMuted).MaxLines(3) + } + }) +} diff --git a/citation_badge_test.go b/citation_badge_test.go new file mode 100644 index 0000000..52afd4a --- /dev/null +++ b/citation_badge_test.go @@ -0,0 +1,99 @@ +package mujica + +import ( + "testing" + "time" + + "github.com/egoist/mygo/ui" +) + +var sourcesSample = []Source{ + {Title: "The Palace of Versailles", URL: "https://example.com/versailles", Site: "example.com", + Snippet: "Seat of the court from 1682.", Published: time.Date(2025, 5, 4, 0, 0, 0, 0, time.UTC)}, + {Title: "Hall of Mirrors", URL: "https://example.org/hall", Snippet: "Seventeen arches of mirrors face the garden."}, + {Title: "Court etiquette", URL: "https://example.net/etiquette", Site: "example.net"}, +} + +// citationApp is an answer with badges beside a sources panel, sharing one state. +type citationApp struct { + st CitationState + opened []int +} + +func (a *citationApp) view(c *ui.Context) { + Use(c, Settings{}) + ui.Row(c).Fill().Padding(16).Gap(16).AlignItems(ui.Start).Children(func() { + ui.Row(c).Gap(4).Children(func() { + ui.Text(c, "The court moved in 1682") + CitationBadge(c, 1, sourcesSample[0], &a.st) + CitationBadge(c, 3, sourcesSample[2], &a.st) + }) + ui.Column(c).Width(300).Height(400).Children(func() { + if n, ok := SourcesPanel(c, sourcesSample, &a.st).Opened(); ok { + a.opened = append(a.opened, n) + } + }) + }) +} + +func TestCitationBadgeActivatesAndPreviews(t *testing.T) { + a := &citationApp{} + tt := ui.NewTester(a.view, 900, 500) + r, ok := tt.Find("Source 3: Court etiquette") + if !ok { + t.Fatal("badge not named") + } + tt.Move(r.X+r.W/2, r.Y+r.H/2) + tt.Frame() + if a.st.hover != 3 { + t.Fatalf("hover %d, want 3", a.st.hover) + } + time.Sleep(600 * time.Millisecond) + tt.Frame() + if n := len(tt.Texts()); n == 0 || !tt.HasText("example.net") { + t.Fatalf("no preview card: %q", tt.Texts()) + } + tt.ClickAt(r.X+r.W/2, r.Y+r.H/2) + if a.st.Active != 3 { + t.Fatalf("active %d", a.st.Active) + } + tt.Move(5, 480) + tt.Frame() + if a.st.hover != 0 { + t.Fatalf("hover %d after leaving", a.st.hover) + } +} + +func TestCitationBadgeKeyboard(t *testing.T) { + a := &citationApp{} + tt := ui.NewTester(a.view, 900, 500) + tt.Key(0, ui.KeyTab) + tt.Key(0, ui.KeyEnter) + if a.st.Active != 1 { + t.Fatalf("Enter on the first badge: active %d", a.st.Active) + } +} + +func TestCitationBadgeBadNumber(t *testing.T) { + defer func() { + if recover() == nil { + t.Fatal("no panic for number 0") + } + }() + var st CitationState + ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + CitationBadge(c, 0, sourcesSample[0], &st) + }, 100, 100) +} + +func TestCitationBadgeSnapshot(t *testing.T) { + snapshot(t, "citation_badge", 360, 60, func(c *ui.Context) { + st := ui.Local(c.Root(), "st", func() CitationState { return CitationState{Active: 2} }) + ui.Row(c).Padding(16).Gap(4).Children(func() { + ui.Text(c, "Seventeen arches") + CitationBadge(c, 1, sourcesSample[0], st) + CitationBadge(c, 2, sourcesSample[1], st) + }) + }) +} diff --git a/context_chips.go b/context_chips.go new file mode 100644 index 0000000..fa0a11f --- /dev/null +++ b/context_chips.go @@ -0,0 +1,80 @@ +package mujica + +import ( + "fmt" + "log/slog" + + "github.com/egoist/mygo/ui" + + "mujicaui/icons" + "mujicaui/internal" + "mujicaui/theme" +) + +// ContextChipsOptions configure ContextChips. +type ContextChipsOptions struct { + // Max is how many chips show before the rest fold under "+N"; zero means 4. + Max int +} + +// RemoveResult is a list's element and the ID the user removed this frame. +type RemoveResult struct { + Element *ui.Element + removed string +} + +// Removed returns the ID whose remove button was pressed. +func (r RemoveResult) Removed() (string, bool) { return r.removed, r.removed != "" } + +// ContextChips lists attached context as chips with remove buttons; past Max the rest fold. +func ContextChips(c *ui.Context, items []ContextItem, opts ContextChipsOptions) RemoveResult { + if opts.Max < 0 { + panic("mujica: ContextChips Max must not be negative") + } + limit := opts.Max + if limit == 0 { + limit = 4 + } + k := Tokens(c) + u := Density(c).Unit() + var r RemoveResult + r.Element = ui.Row(c).Gap(u * 2).Wrap().AlignItems(ui.Center).Role(ui.RoleList).Label(msg(c, "context_chips.label")) + expanded := ui.Local(r.Element, "expanded", func() bool { return false }) + disabled := r.Element.IsDisabled() + r.Element.Children(func() { + shown := len(items) + if !*expanded { + shown = min(shown, limit) + } + for _, it := range items[:shown] { + ui.Row(c).Key(it.ID).Gap(u).AlignItems(ui.Center).Padding(0, 0, 0, u*2).MinHeight(theme.MinHitSize). + Radius(theme.ControlRadius).Background(k.Surface).Border(theme.BorderWidth, k.Border).Role(ui.RoleListItem). + Children(func() { + ui.Icon(c, icons.Must(it.Kind.icon())).Size(14, 14).Shrink(0).TextColor(k.AccentText) + ui.Text(c, it.Label).SingleLine().MaxWidth(180).FontSize(FontSize(c, theme.CaptionSize)) + if iconAction(c, icons.Must("x"), fmt.Sprintf(msg(c, "context_chips.remove"), it.Label)).Clicked() && !disabled { + r.removed = it.ID + slog.Debug("mujica: context_chips remove", "id", it.ID) + } + }) + } + if len(items) <= limit { + return + } + label := fmt.Sprintf(msg(c, "context_chips.more"), len(items)-limit) + if *expanded { + label = msg(c, "context_chips.less") + } + b := ui.ButtonBase(c).MinHeight(theme.MinHitSize).Padding(0, u*2).Radius(theme.ControlRadius).Label(label).TextColor(k.AccentText) + internal.Ring(b, k.Focus, theme.ControlRadius) + if b.Hovered() { + b.Background(k.SurfaceHover) + } + b.Children(func() { ui.Text(c, label).FontSize(FontSize(c, theme.CaptionSize)).SingleLine() }) + if b.Clicked() && !disabled { + *expanded = !*expanded + slog.Debug("mujica: context_chips fold", "expanded", *expanded) + } + }) + return r +} diff --git a/context_chips_test.go b/context_chips_test.go new file mode 100644 index 0000000..de476f6 --- /dev/null +++ b/context_chips_test.go @@ -0,0 +1,60 @@ +package mujica + +import ( + "testing" + + "github.com/egoist/mygo/ui" +) + +func TestContextChipsRemoveAndFold(t *testing.T) { + items := append([]ContextItem{}, mentionSample...) + items = append(items, ContextItem{ID: "w2", Label: "Hall of Mirrors", Kind: ContextWeb}) + off := false + tt := ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + ui.Column(c).Disabled(off).Children(func() { + if id, ok := ContextChips(c, items, ContextChipsOptions{Max: 3}).Removed(); ok { + for i, it := range items { + if it.ID == id { + items = append(items[:i], items[i+1:]...) + break + } + } + } + }) + }, 600, 200) + if tt.HasText("seating.xlsx") || !tt.HasText("+2 more") { + t.Fatalf("fold: %q", tt.Texts()) + } + _ = tt.Click("+2 more") + if !tt.HasText("Hall of Mirrors") || !tt.HasText("Show less") { + t.Fatalf("expand: %q", tt.Texts()) + } + _ = tt.Click("Remove guests.csv") + if len(items) != 4 || tt.HasText("guests.csv") { + t.Fatalf("remove left %d items", len(items)) + } + off = true + _ = tt.Click("Remove Protocol") + if len(items) != 4 { + t.Fatal("disabled chips removed an item") + } +} + +func TestContextChipsNegativeMax(t *testing.T) { + defer func() { + if recover() == nil { + t.Fatal("no panic for a negative Max") + } + }() + ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + ContextChips(c, nil, ContextChipsOptions{Max: -1}) + }, 100, 100) +} + +func TestContextChipsSnapshot(t *testing.T) { + snapshot(t, "context_chips", 560, 90, func(c *ui.Context) { + ui.Column(c).Padding(16).Children(func() { ContextChips(c, mentionSample, ContextChipsOptions{Max: 3}) }) + }) +} diff --git a/context_mention_menu.go b/context_mention_menu.go new file mode 100644 index 0000000..2f4b689 --- /dev/null +++ b/context_mention_menu.go @@ -0,0 +1,114 @@ +package mujica + +import ( + "log/slog" + "strings" + + "github.com/egoist/mygo/ui" +) + +// ContextKind is what a piece of context is. +type ContextKind int + +const ( + ContextFile ContextKind = iota + ContextDoc + ContextWeb +) + +func (k ContextKind) icon() string { + switch k { + case ContextFile: + return "file" + case ContextDoc: + return "file-text" + case ContextWeb: + return "globe" + } + panic("mujica: unknown ContextKind") +} + +func (k ContextKind) group() string { + return [...]string{"context_mention_menu.file", "context_mention_menu.doc", "context_mention_menu.web"}[k] +} + +// ContextItem is a file, document or web page the user can mention. +type ContextItem struct { + // ID is the item's stable identity; required. + ID string + Label string + Detail string + Kind ContextKind +} + +// ContextMentionOptions configure a ContextMentionMenu. +type ContextMentionOptions struct { + // Loading shows that the caller is fetching items for the query. + Loading bool +} + +// ContextMentionResult is the menu's popup, nil while closed, its query and the item chosen this frame. +type ContextMentionResult struct { + Element *ui.Element + query string + queryChanged bool + chosen ContextItem + ok bool +} + +// Query returns the text after "@"; QueryChanged reports a new one to fetch items for. +func (r ContextMentionResult) Query() string { return r.query } +func (r ContextMentionResult) QueryChanged() bool { return r.queryChanged } + +// Chosen returns the item picked by Enter, Tab or a click; its "@query" was taken out of the text. +func (r ContextMentionResult) Chosen() (ContextItem, bool) { return r.chosen, r.ok } + +// ContextMentionMenu pops up items grouped by kind while the composer's text ends in "@query". +// The caller filters items for Query, possibly asynchronously, and attaches the chosen one. +func ContextMentionMenu(c *ui.Context, composer InputResult, value *string, items []ContextItem, opts ContextMentionOptions) ContextMentionResult { + var rows []slashMenuRow + var order []int + for kind := ContextFile; kind <= ContextWeb; kind++ { + for i, it := range items { + if it.ID == "" || it.Label == "" { + panic("mujica: ContextItem needs ID and Label") + } + if it.Kind == kind { + rows = append(rows, slashMenuRow{label: it.Label, detail: it.Detail, icon: kind.icon(), group: msg(c, kind.group())}) + order = append(order, i) + } + } + } + if len(order) != len(items) { + panic("mujica: unknown ContextKind") + } + st := ui.Local(composer.Element, slashMenuKey{"mention"}, func() slashMenuState { return slashMenuState{} }) + at := contextMentionAt(*value) + var r ContextMentionResult + if at >= 0 { + r.query = (*value)[at+1:] + } + // A new query, or the menu opening, asks the caller for items. + r.queryChanged = at >= 0 && (r.query != st.query || !st.open && st.dismissed == nil) + empty := msg(c, "context_mention_menu.empty") + if opts.Loading { + empty = msg(c, "context_mention_menu.loading") + } + i, _ := slashMenuShow(c, composer, st, r.query, at >= 0, rows, slashMenuOptions{empty: empty, label: msg(c, "context_mention_menu.label"), loading: opts.Loading}) + r.Element = st.panel + if i >= 0 { + r.chosen, r.ok = items[order[i]], true + *value = (*value)[:at] + slog.Debug("mujica: context_mention_menu choose", "id", r.chosen.ID) + } + return r +} + +// contextMentionAt returns where the trailing "@query" starts, or -1. +func contextMentionAt(s string) int { + at := strings.LastIndexByte(s, '@') + if at < 0 || strings.ContainsAny(s[at+1:], " \t\n") || at > 0 && !strings.ContainsRune(" \t\n", rune(s[at-1])) { + return -1 + } + return at +} diff --git a/context_mention_menu_test.go b/context_mention_menu_test.go new file mode 100644 index 0000000..4640122 --- /dev/null +++ b/context_mention_menu_test.go @@ -0,0 +1,108 @@ +package mujica + +import ( + "strings" + "testing" + + "github.com/egoist/mygo/ui" +) + +var mentionSample = []ContextItem{ + {ID: "w1", Label: "Versailles — Wikipedia", Detail: "en.wikipedia.org", Kind: ContextWeb}, + {ID: "f1", Label: "guests.csv", Detail: "~/ball", Kind: ContextFile}, + {ID: "d1", Label: "Protocol", Detail: "Notion", Kind: ContextDoc}, + {ID: "f2", Label: "seating.xlsx", Detail: "~/ball", Kind: ContextFile}, +} + +// mentionTester filters items as an async source would, one frame late. +type mentionTester struct { + text string + items []ContextItem + loading bool + chosen []string + queries []string +} + +func (m *mentionTester) view(c *ui.Context) { + Use(c, Settings{}) + ui.Column(c).Fill().Justify(ui.End).Padding(16).Children(func() { + p := PromptComposer(c, &m.text, PromptComposerOptions{Label: "Prompt"}) + r := ContextMentionMenu(c, p, &m.text, m.items, ContextMentionOptions{Loading: m.loading}) + if r.QueryChanged() { + m.queries = append(m.queries, r.Query()) + m.items = nil + for _, it := range mentionSample { + if strings.Contains(strings.ToLower(it.Label), strings.ToLower(r.Query())) { + m.items = append(m.items, it) + } + } + } + if it, ok := r.Chosen(); ok { + m.chosen = append(m.chosen, it.ID) + } + }) +} + +func TestContextMentionMenuGroupsAndChooses(t *testing.T) { + m := &mentionTester{} + tt := ui.NewTester(m.view, 600, 500) + _ = tt.Click("Prompt") + tt.Type("Read @") + tt.Frame() + files, _ := tt.Find("Files") + docs, _ := tt.Find("Documents") + web, ok := tt.Find("Web pages") + if !ok || !(files.Y < docs.Y && docs.Y < web.Y) { + t.Fatalf("groups not in file, doc, web order: %q", tt.Texts()) + } + tt.Type("s") + tt.Frame() + if len(m.queries) < 2 || m.queries[len(m.queries)-1] != "s" { + t.Fatalf("queries %q", m.queries) + } + tt.Key(0, ui.KeyDown) + tt.Key(0, ui.KeyEnter) + if len(m.chosen) != 1 || m.text != "Read " { + t.Fatalf("chosen %v text %q", m.chosen, m.text) + } +} + +func TestContextMentionMenuOnlyAfterSpaceAndLoading(t *testing.T) { + m := &mentionTester{loading: true} + tt := ui.NewTester(m.view, 600, 500) + _ = tt.Click("Prompt") + tt.Type("mail@host") + if tt.HasText("Files") || len(m.queries) != 0 { + t.Fatal("an @ inside a word opened the menu") + } + tt.Type(" @x") + m.items = nil + tt.Frame() + if !tt.HasText("Searching…") { + t.Fatalf("loading state missing: %q", tt.Texts()) + } + tt.Key(0, ui.KeyEnter) + if len(m.chosen) != 0 { + t.Fatal("Enter chose from an empty list") + } +} + +func TestContextMentionMenuBadItem(t *testing.T) { + defer func() { + if recover() == nil { + t.Fatal("no panic for an item without ID") + } + }() + m := &mentionTester{items: []ContextItem{{Label: "x"}}} + ui.NewTester(m.view, 300, 300) +} + +func TestContextMentionMenuSnapshot(t *testing.T) { + snapshotAfter(t, "context_mention_menu", 560, 420, func(c *ui.Context) { + (*ui.Local(c.Root(), "m", func() *mentionTester { return &mentionTester{items: mentionSample} })).view(c) + }, func(tt *ui.Tester) { + _ = tt.Click("Prompt") + tt.Type("Compare @") + tt.Frame() + }) +} diff --git a/context_window_meter.go b/context_window_meter.go new file mode 100644 index 0000000..068fc4e --- /dev/null +++ b/context_window_meter.go @@ -0,0 +1,95 @@ +package mujica + +import ( + "fmt" + "math" + + "github.com/egoist/mygo/ui" + + "mujicaui/icons" + "mujicaui/internal" + "mujicaui/theme" +) + +// ContextSegment is one part of the context window, as system, history or attachments. +type ContextSegment struct { + Label string + Tokens int +} + +// ContextWindowMeterOptions configure a ContextWindowMeter. +type ContextWindowMeterOptions struct { + // Warn is the used share that shows the warning; zero means 0.8. + Warn float64 +} + +// ContextWindowMeter shows how the context window is used, segment by segment, and warns past a threshold. +// Each segment has a palette color and a legend marker shape, so it never relies on color alone. +func ContextWindowMeter(c *ui.Context, segments []ContextSegment, limit int, opts ContextWindowMeterOptions) *ui.Element { + if limit <= 0 || opts.Warn < 0 || opts.Warn > 1 { + panic("mujica: ContextWindowMeter needs limit > 0 and 0 <= Warn <= 1") + } + used := 0 + for _, s := range segments { + if s.Label == "" || s.Tokens < 0 { + panic("mujica: ContextSegment needs a Label and non-negative Tokens") + } + used += s.Tokens + } + warn := opts.Warn + if warn == 0 { + warn = 0.8 + } + k := Tokens(c) + u := Density(c).Unit() + small := FontSize(c, theme.CaptionSize) + pal := internal.Palette(k) + share := float64(used) / float64(limit) + pct := int(math.Round(share * 100)) + summary := fmt.Sprintf(msg(c, "context_window_meter.used"), tokenThousands(used), tokenThousands(limit), pct) + col := ui.Column(c).Gap(u * 2).MinWidth(200).Role(ui.RoleMeter).Label(msg(c, "context_window_meter.label")).Description(summary) + col.Children(func() { + ui.Row(c).Gap(u * 2).Children(func() { + ui.Text(c, msg(c, "context_window_meter.label")).FontWeight(600).Grow(1).SingleLine() + ui.Text(c, summary).FontSize(small).FontFeatures("tnum").TextColor(k.TextMuted).SingleLine() + }) + ui.Box(c).Height(10).Radius(theme.ControlRadius).Background(k.Border).Clip().Draw(func(p *ui.Painter, r ui.Rect) { + x := r.X + for i, s := range segments { + w := r.W * float32(min(float64(s.Tokens)/float64(limit), 1)) + w = min(w, r.X+r.W-x) + p.Fill(ui.Rect{X: x, Y: r.Y, W: w, H: r.H}, pal[i%len(pal)], 0) + x += w + // A surface gap parts neighbouring segments. + if i < len(segments)-1 && w > 0 { + p.Fill(ui.Rect{X: internal.Snap(p, x-1), Y: r.Y, W: 1, H: r.H}, k.Surface, 0) + } + } + mark := r.X + r.W*float32(warn) + p.Fill(ui.Rect{X: internal.Snap(p, mark), Y: r.Y, W: 1, H: r.H}, k.Text, 0) + }) + ui.Row(c).Gap(u * 4).Wrap().Children(func() { + for i, s := range segments { + ui.Row(c).Gap(u).AlignItems(ui.Center).Children(func() { + ui.Box(c).Size(10, 10).Draw(func(p *ui.Painter, r ui.Rect) { + internal.Marker(p, i, r.X+r.W/2, r.Y+r.H/2, 9, pal[i%len(pal)]) + }) + ui.Text(c, s.Label+" "+tokenThousands(s.Tokens)).FontSize(small).FontFeatures("tnum").SingleLine() + }) + } + ui.Text(c, msg(c, "context_window_meter.free")+" "+tokenThousands(max(limit-used, 0))).FontSize(small). + FontFeatures("tnum").TextColor(k.TextMuted).SingleLine() + }) + if share >= warn { + color := k.Warning + if used > limit { + color = k.Danger + } + ui.Row(c).Gap(u).AlignItems(ui.Center).TextColor(color).Role(ui.RoleStatus).Children(func() { + ui.Icon(c, icons.Must("triangle-alert")).Size(14, 14) + ui.Text(c, fmt.Sprintf(msg(c, "context_window_meter.warn"), pct)).FontSize(small) + }) + } + }) + return col +} diff --git a/context_window_meter_test.go b/context_window_meter_test.go new file mode 100644 index 0000000..f961478 --- /dev/null +++ b/context_window_meter_test.go @@ -0,0 +1,63 @@ +package mujica + +import ( + "testing" + + "github.com/egoist/mygo/ui" + + "mujicaui/internal" + "mujicaui/theme" +) + +var contextSegmentsSample = []ContextSegment{{Label: "System", Tokens: 1200}, {Label: "History", Tokens: 58000}, {Label: "Attachments", Tokens: 24000}} + +func TestContextWindowMeterLegendAndWarning(t *testing.T) { + segs := contextSegmentsSample + tt := ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + ContextWindowMeter(c, segs, 128000, ContextWindowMeterOptions{}) + }, 600, 200) + for _, s := range []string{"System 1,200", "History 58,000", "Attachments 24,000", "Free 44,800", "83,200 of 128,000 tokens (65%)"} { + if !tt.HasText(s) { + t.Errorf("missing %q in %q", s, tt.Texts()) + } + } + if tt.HasText("Context is") { + t.Fatal("warning below the threshold") + } + segs = append(segs, ContextSegment{Label: "Draft", Tokens: 30000}) + tt.Frame() + if !tt.HasText("Context is 88% full") { + t.Fatalf("warning missing: %q", tt.Texts()) + } +} + +func TestContextWindowMeterPaletteContrast(t *testing.T) { + for _, k := range []theme.Tokens{theme.Light(), theme.Dark()} { + for i, col := range internal.Palette(k) { + if r := theme.Contrast(col, k.Surface); r < 3 { + t.Errorf("dark %v series %d contrast %.2f", k.Dark, i, r) + } + } + } +} + +func TestContextWindowMeterBadOptions(t *testing.T) { + defer func() { + if recover() == nil { + t.Fatal("no panic for a zero limit") + } + }() + ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + ContextWindowMeter(c, nil, 0, ContextWindowMeterOptions{}) + }, 100, 100) +} + +func TestContextWindowMeterSnapshot(t *testing.T) { + snapshot(t, "context_window_meter", 520, 140, func(c *ui.Context) { + ui.Column(c).Padding(16).Children(func() { + ContextWindowMeter(c, append(contextSegmentsSample, ContextSegment{Label: "Draft", Tokens: 30000}), 128000, ContextWindowMeterOptions{}) + }) + }) +} diff --git a/drag_drop_overlay.go b/drag_drop_overlay.go new file mode 100644 index 0000000..c4cbf45 --- /dev/null +++ b/drag_drop_overlay.go @@ -0,0 +1,100 @@ +package mujica + +import ( + "fmt" + "log/slog" + "path/filepath" + "strings" + + "github.com/egoist/mygo/ui" + + "mujicaui/icons" + "mujicaui/internal" + "mujicaui/theme" +) + +// DragDropOverlayOptions configure a DragDropOverlay. +type DragDropOverlayOptions struct { + // Hint replaces the built-in "Drop files to attach". + Hint string + // Accept checks each dropped path; nil accepts all. + Accept func(path string) bool +} + +// DropResult is the overlay's element and the files dropped this frame. +type DropResult struct { + Element *ui.Element + accepted []string + rejected []string +} + +// Accepted returns the dropped paths Accept took; Rejected those it refused. +func (r DropResult) Accepted() []string { return r.accepted } +func (r DropResult) Rejected() []string { return r.rejected } + +// DragDropOverlay wraps content; while files from other apps are dragged over it, a full mask shows the hint. +func DragDropOverlay(c *ui.Context, opts DragDropOverlayOptions, content func()) DropResult { + if content == nil { + panic("mujica: DragDropOverlay needs content") + } + k := Tokens(c) + u := Density(c).Unit() + var r DropResult + r.Element = ui.Box(c).MinHeight(0).MinWidth(0) + disabled := r.Element.IsDisabled() + rejected := ui.Local(r.Element, "rejected", func() []string { return nil }) + over := !disabled && r.Element.FileDragOver() + if files := r.Element.DroppedFiles(); len(files) > 0 && !disabled { + r.accepted, r.rejected = dragDropSplit(files, opts.Accept) + *rejected = r.rejected + slog.Debug("mujica: drag_drop_overlay drop", "accepted", len(r.accepted), "rejected", len(r.rejected)) + } + if over { + *rejected = nil + } + hint := opts.Hint + if hint == "" { + hint = msg(c, "drag_drop_overlay.hint") + } + r.Element.Children(func() { + content() + if len(*rejected) > 0 && !over { + names := make([]string, len(*rejected)) + for i, p := range *rejected { + names[i] = filepath.Base(p) + } + ui.Text(c, fmt.Sprintf(msg(c, "drag_drop_overlay.rejected"), strings.Join(names, ", "))). + TextColor(k.Danger).FontSize(FontSize(c, theme.CaptionSize)).Role(ui.RoleStatus).Padding(u, u*2) + } + if over { + dragDropMask(c, hint) + } + }) + return r +} + +// dragDropMask covers its parent with the drop hint. +func dragDropMask(c *ui.Context, hint string) { + k := Tokens(c) + u := Density(c).Unit() + mask := ui.Column(c).Absolute().Left(0).Top(0).Right(0).Bottom(0).Center().Gap(u * 2). + Background(k.Background.Alpha(0.92)).Radius(theme.CardRadius).PassThrough().Role(ui.RoleStatus).Label(hint) + mask.Opacity(overlayEnter(c, mask)) + mask.Draw(func(p *ui.Painter, b ui.Rect) { internal.Frame(p, b, u*2, 5, k.Ornament) }) + mask.Children(func() { + ui.Icon(c, icons.Must("upload")).Size(24, 24).TextColor(k.AccentText) + ui.Text(c, hint).Font(theme.SerifFont).FontSize(FontSize(c, theme.H3Size)).TextColor(k.Text) + }) +} + +// dragDropSplit sorts dropped paths by accept, nil accepting all. +func dragDropSplit(files []string, accept func(string) bool) (ok, no []string) { + for _, f := range files { + if accept == nil || accept(f) { + ok = append(ok, f) + } else { + no = append(no, f) + } + } + return ok, no +} diff --git a/drag_drop_overlay_test.go b/drag_drop_overlay_test.go new file mode 100644 index 0000000..9ed981a --- /dev/null +++ b/drag_drop_overlay_test.go @@ -0,0 +1,53 @@ +package mujica + +import ( + "slices" + "strings" + "testing" + + "github.com/egoist/mygo/ui" +) + +func TestDragDropOverlayIdleShowsContentOnly(t *testing.T) { + tt := ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + DragDropOverlay(c, DragDropOverlayOptions{}, func() { ui.Text(c, "Chat") }) + }, 300, 200) + if !tt.HasText("Chat") || tt.HasText("Drop files to attach") { + t.Fatalf("idle overlay: %q", tt.Texts()) + } +} + +func TestDragDropOverlaySplitsByAccept(t *testing.T) { + images := func(p string) bool { return strings.HasSuffix(p, ".png") } + ok, no := dragDropSplit([]string{"/a.png", "/b.exe", "/c.png"}, images) + if !slices.Equal(ok, []string{"/a.png", "/c.png"}) || !slices.Equal(no, []string{"/b.exe"}) { + t.Fatalf("ok %v no %v", ok, no) + } + ok, no = dragDropSplit([]string{"/b.exe"}, nil) + if len(ok) != 1 || no != nil { + t.Fatalf("nil accept: ok %v no %v", ok, no) + } +} + +func TestDragDropOverlayNeedsContent(t *testing.T) { + defer func() { + if recover() == nil { + t.Fatal("no panic without content") + } + }() + ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + DragDropOverlay(c, DragDropOverlayOptions{}, nil) + }, 100, 100) +} + +// TestDragDropOverlaySnapshot draws the mask shown while files are over the area. +func TestDragDropOverlaySnapshot(t *testing.T) { + snapshot(t, "drag_drop_overlay", 420, 220, func(c *ui.Context) { + ui.Box(c).Fill().Padding(12).Children(func() { + ui.Text(c, "A conversation sits under the mask.") + dragDropMask(c, msg(c, "drag_drop_overlay.hint")) + }) + }) +} diff --git a/icons/svg/at-sign.svg b/icons/svg/at-sign.svg new file mode 100644 index 0000000..215e899 --- /dev/null +++ b/icons/svg/at-sign.svg @@ -0,0 +1,15 @@ + + + + diff --git a/icons/svg/bot.svg b/icons/svg/bot.svg new file mode 100644 index 0000000..fd35df9 --- /dev/null +++ b/icons/svg/bot.svg @@ -0,0 +1,19 @@ + + + + + + + + diff --git a/icons/svg/globe.svg b/icons/svg/globe.svg new file mode 100644 index 0000000..736ac9b --- /dev/null +++ b/icons/svg/globe.svg @@ -0,0 +1,16 @@ + + + + + diff --git a/icons/svg/key-round.svg b/icons/svg/key-round.svg new file mode 100644 index 0000000..7e73cc9 --- /dev/null +++ b/icons/svg/key-round.svg @@ -0,0 +1,15 @@ + + + + diff --git a/icons/svg/mic-off.svg b/icons/svg/mic-off.svg new file mode 100644 index 0000000..2c76f1b --- /dev/null +++ b/icons/svg/mic-off.svg @@ -0,0 +1,19 @@ + + + + + + + + diff --git a/icons/svg/mic.svg b/icons/svg/mic.svg new file mode 100644 index 0000000..0fa775a --- /dev/null +++ b/icons/svg/mic.svg @@ -0,0 +1,16 @@ + + + + + diff --git a/icons/svg/paperclip.svg b/icons/svg/paperclip.svg new file mode 100644 index 0000000..9f77f61 --- /dev/null +++ b/icons/svg/paperclip.svg @@ -0,0 +1,14 @@ + + + diff --git a/icons/svg/shield-check.svg b/icons/svg/shield-check.svg new file mode 100644 index 0000000..f7002a9 --- /dev/null +++ b/icons/svg/shield-check.svg @@ -0,0 +1,15 @@ + + + + diff --git a/icons/svg/sliders-horizontal.svg b/icons/svg/sliders-horizontal.svg new file mode 100644 index 0000000..d0323e8 --- /dev/null +++ b/icons/svg/sliders-horizontal.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + diff --git a/icons/svg/square.svg b/icons/svg/square.svg new file mode 100644 index 0000000..0addb4f --- /dev/null +++ b/icons/svg/square.svg @@ -0,0 +1,14 @@ + + + diff --git a/icons/svg/telescope.svg b/icons/svg/telescope.svg new file mode 100644 index 0000000..38cf16b --- /dev/null +++ b/icons/svg/telescope.svg @@ -0,0 +1,20 @@ + + + + + + + + + diff --git a/icons/svg/terminal.svg b/icons/svg/terminal.svg new file mode 100644 index 0000000..63f090f --- /dev/null +++ b/icons/svg/terminal.svg @@ -0,0 +1,15 @@ + + + + diff --git a/messages_chatinput.go b/messages_chatinput.go new file mode 100644 index 0000000..3a9744f --- /dev/null +++ b/messages_chatinput.go @@ -0,0 +1,64 @@ +package mujica + +func init() { + addMessages(map[string][2]string{ + "prompt_composer.label": {"Message", "消息"}, + "slash_command_menu.label": {"Commands", "命令"}, + "slash_command_menu.empty": {"No matching commands", "没有匹配的命令"}, + "context_mention_menu.label": {"Add context", "添加上下文"}, + "context_mention_menu.empty": {"No matches", "无匹配"}, + "context_mention_menu.loading": {"Searching…", "搜索中…"}, + "context_mention_menu.file": {"Files", "文件"}, + "context_mention_menu.doc": {"Documents", "文档"}, + "context_mention_menu.web": {"Web pages", "网页"}, + "attachment_chip.remove": {"Remove %s", "移除 %s"}, + "attachment_chip.retry": {"Retry upload of %s", "重试上传 %s"}, + "attachment_chip.uploading": {"Uploading %d%%", "上传中 %d%%"}, + "attachment_chip.failed": {"Upload failed", "上传失败"}, + "paste_image_preview.remove": {"Remove image %s", "移除图片 %s"}, + "paste_image_preview.label": {"Pasted images", "粘贴的图片"}, + "drag_drop_overlay.hint": {"Drop files to attach", "松开以添加文件"}, + "drag_drop_overlay.rejected": {"Not accepted: %s", "不支持:%s"}, + "voice_input_button.start": {"Start voice input", "开始语音输入"}, + "voice_input_button.stop": {"Stop recording, %s", "停止录音,%s"}, + "voice_input_button.denied": {"Microphone access denied", "麦克风权限被拒绝"}, + "voice_waveform.label": {"Input level", "输入电平"}, + "voice_waveform.silent": {"No sound detected", "未检测到声音"}, + "context_chips.label": {"Attached context", "已附加的上下文"}, + "context_chips.remove": {"Remove %s", "移除 %s"}, + "context_chips.more": {"+%d more", "另有 %d 项"}, + "context_chips.less": {"Show less", "收起"}, + "model_selector.label": {"Model", "模型"}, + "model_selector.context": {"%s context", "%s 上下文"}, + "model_selector.placeholder": {"Choose a model", "选择模型"}, + "mode_selector.label": {"Mode", "模式"}, + "mode_selector.chat": {"Chat", "对话"}, + "mode_selector.search": {"Search", "搜索"}, + "mode_selector.research": {"Deep research", "深度研究"}, + "mode_selector.agent": {"Agent", "智能体"}, + "tool_toggle_menu.label": {"Tools", "工具"}, + "tool_toggle_menu.count": {"Tools, %d on", "工具,已开 %d 个"}, + "tool_toggle_menu.needs_auth": {"Needs authorization", "需要授权"}, + "tool_toggle_menu.authorize_short": {"Authorize", "授权"}, + "tool_toggle_menu.authorize": {"Authorize %s", "授权 %s"}, + "parameter_panel.label": {"Parameters", "参数"}, + "parameter_panel.reset": {"Reset %s", "重置 %s"}, + "parameter_panel.reset_all": {"Reset all", "全部重置"}, + "parameter_panel.default": {"Default %s", "默认 %s"}, + "token_counter.label": {"About %s of %s tokens", "约 %s / %s 个 token"}, + "token_counter.over": {"%s over the limit", "超出 %s"}, + "context_window_meter.label": {"Context window", "上下文窗口"}, + "context_window_meter.used": {"%s of %s tokens (%d%%)", "%s / %s token(%d%%)"}, + "context_window_meter.warn": {"Context is %d%% full", "上下文已用 %d%%"}, + "context_window_meter.free": {"Free", "剩余"}, + "send_button.send": {"Send", "发送"}, + "send_button.stop": {"Stop generating", "停止生成"}, + "citation_badge.label": {"Source %d: %s", "来源 %d:%s"}, + "source_card.open": {"Open %s", "打开 %s"}, + "sources_panel.label": {"Sources", "来源"}, + "sources_panel.empty": {"No sources", "没有来源"}, + "search_progress.searching": {"Searching for “%s”", "正在搜索“%s”"}, + "search_progress.read": {"Read %d of %d sources", "已读 %d / %d 个来源"}, + "search_progress.done": {"Searched “%s”, read %d sources", "已搜索“%s”,读了 %d 个来源"}, + }) +} diff --git a/mode_selector.go b/mode_selector.go new file mode 100644 index 0000000..953667a --- /dev/null +++ b/mode_selector.go @@ -0,0 +1,53 @@ +package mujica + +import ( + "log/slog" + + "github.com/egoist/mygo/ui" + + "mujicaui/icons" +) + +// ChatMode is how the assistant answers. +type ChatMode int + +const ( + ModeChat ChatMode = iota + ModeSearch + ModeResearch + ModeAgent +) + +// chatModes names each mode's copy key and icon, in order. +var chatModes = [...][2]string{ + {"mode_selector.chat", "message-square"}, + {"mode_selector.search", "globe"}, + {"mode_selector.research", "telescope"}, + {"mode_selector.agent", "bot"}, +} + +// ModeSelectorOptions configure a ModeSelector. +type ModeSelectorOptions struct { + // IconsOnly hides the labels, which then name the icons. + IconsOnly bool + Disabled bool +} + +// ModeSelector switches among chat, search, deep research and agent modes; arrows move the choice. +func ModeSelector(c *ui.Context, mode *ChatMode, opts ModeSelectorOptions) ChoiceResult { + if *mode < ModeChat || *mode > ModeAgent { + panic("mujica: unknown ChatMode") + } + segs := make([]Segment, len(chatModes)) + for i, m := range chatModes { + segs[i] = Segment{Label: msg(c, m[0]), Icon: icons.Must(m[1]), HideLabel: opts.IconsOnly} + } + i := int(*mode) + e := SegmentedControl(c, &i, segs, SegmentedControlOptions{Label: msg(c, "mode_selector.label"), Disabled: opts.Disabled}) + r := ChoiceResult{Element: e, changed: ChatMode(i) != *mode} + if r.changed { + *mode = ChatMode(i) + slog.Debug("mujica: mode_selector changed", "mode", i) + } + return r +} diff --git a/mode_selector_test.go b/mode_selector_test.go new file mode 100644 index 0000000..9464ec0 --- /dev/null +++ b/mode_selector_test.go @@ -0,0 +1,62 @@ +package mujica + +import ( + "testing" + + "github.com/egoist/mygo/ui" +) + +func TestModeSelectorClickAndArrows(t *testing.T) { + mode, n, off := ModeChat, 0, false + tt := ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + if ModeSelector(c, &mode, ModeSelectorOptions{Disabled: off}).Changed() { + n++ + } + }, 600, 100) + _ = tt.Click("Deep research") + if mode != ModeResearch || n != 1 { + t.Fatalf("click: mode %d changes %d", mode, n) + } + tt.Key(0, ui.KeyTab) + tt.Key(0, ui.KeyRight) + if mode != ModeAgent { + t.Fatalf("Right: mode %d", mode) + } + off = true + _ = tt.Click("Chat") + if mode != ModeAgent { + t.Fatal("disabled selector changed") + } +} + +func TestModeSelectorIconsOnlyAndBadMode(t *testing.T) { + mode := ModeSearch + tt := ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + ModeSelector(c, &mode, ModeSelectorOptions{IconsOnly: true}) + }, 300, 100) + if _, ok := tt.Find("Search"); !ok { + t.Fatal("icon segments unnamed") + } + defer func() { + if recover() == nil { + t.Fatal("no panic for an unknown mode") + } + }() + bad := ChatMode(9) + ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + ModeSelector(c, &bad, ModeSelectorOptions{}) + }, 100, 100) +} + +func TestModeSelectorSnapshot(t *testing.T) { + mode := ModeResearch + snapshot(t, "mode_selector", 520, 120, func(c *ui.Context) { + ui.Column(c).Padding(16).Gap(12).AlignItems(ui.Start).Children(func() { + ModeSelector(c, &mode, ModeSelectorOptions{}) + ModeSelector(c, &mode, ModeSelectorOptions{IconsOnly: true}) + }) + }) +} diff --git a/model_selector.go b/model_selector.go new file mode 100644 index 0000000..2f53b9e --- /dev/null +++ b/model_selector.go @@ -0,0 +1,150 @@ +package mujica + +import ( + "fmt" + "log/slog" + "strconv" + + "github.com/egoist/mygo/ui" + + "mujicaui/theme" +) + +// ModelOption is one model a ModelSelector offers. +type ModelOption struct { + // ID is the value chosen; required. + ID string + Name string + // Capabilities are short tags, as "Vision" or "Tools". + Capabilities []string + // ContextTokens is the context length; zero hides it. + ContextTokens int + // Unavailable explains why the model cannot be chosen; empty means available. + Unavailable string +} + +// ModelSelectorOptions configure a ModelSelector. +type ModelSelectorOptions struct { + Disabled bool + // Label names the selector; empty uses the built-in "Model". + Label string +} + +// ModelSelector chooses a model ID into *value from a list showing capabilities, context length and why some are unavailable. +func ModelSelector(c *ui.Context, value *string, models []ModelOption, opts ModelSelectorOptions) ChoiceResult { + for _, m := range models { + if m.ID == "" || m.Name == "" || m.ContextTokens < 0 { + panic("mujica: ModelOption needs ID, Name and a non-negative ContextTokens") + } + } + k := Tokens(c) + u := Density(c).Unit() + old := *value + pick := old + var s *ui.SelectParts[string] + ui.Row(c).Shrink(0).Disabled(opts.Disabled).Children(func() { s = ui.SelectBase(c, &pick) }) + tr := s.Trigger + label := opts.Label + if label == "" { + label = msg(c, "model_selector.label") + } + tr.Label(label) + cur, has := modelSelectorFind(models, *value) + selectField(c, tr, s.Open(), func() { + if has { + ui.Text(c, cur.Name).SingleLine().FontWeight(600).Grow(1).Shrink(1) + } else { + ui.Text(c, msg(c, "model_selector.placeholder")).SingleLine().TextColor(k.TextMuted).Grow(1).Shrink(1) + } + }) + if opts.Disabled { + return ChoiceResult{Element: tr} + } + s.Popup(func(panel *ui.Element) { + selectPanel(c, panel) + panel.MinWidth(320) + ui.Scroll(c).MaxHeight(360).Children(func() { + for _, m := range models { + var row *ui.Element + if m.Unavailable != "" { + row = ui.Row(c).Disabled(true).Description(m.Unavailable) + } else { + row = s.Item(m.ID) + } + hi := m.Unavailable == "" && row.Highlighted() + chosen := m.ID == *value + row.Padding(u*2, u*3, u*2, u*2).Gap(u * 2).AlignItems(ui.Start).Radius(theme.ControlRadius).Role(ui.RoleListItem).Label(m.Name) + switch { + case chosen: + row.Background(k.Selection) + case hi: + row.Background(k.SurfaceHover) + } + if hi { + row.Draw(func(p *ui.Painter, r ui.Rect) { p.Fill(ui.Rect{X: r.X, Y: r.Y + 4, W: 2, H: r.H - 8}, k.AccentText, 1) }) + } + row.Children(func() { + selectCheck(c, chosen) + modelSelectorRow(c, m) + }) + } + }) + }) + if pick != *value && !tr.IsDisabled() { + if m, ok := modelSelectorFind(models, pick); ok && m.Unavailable == "" { + *value = pick + } + } + changed := *value != old + if changed { + slog.Debug("mujica: model_selector changed", "model", *value) + } + return ChoiceResult{Element: tr, changed: changed} +} + +// modelSelectorRow shows a model's name, tags, context and unavailability. +func modelSelectorRow(c *ui.Context, m ModelOption) { + k := Tokens(c) + u := Density(c).Unit() + small := FontSize(c, theme.CaptionSize) + ui.Column(c).Gap(u).Grow(1).MinWidth(0).Children(func() { + ui.Row(c).Gap(u * 2).AlignItems(ui.Center).Children(func() { + ui.Text(c, m.Name).FontWeight(600).SingleLine() + if m.ContextTokens > 0 { + ui.Text(c, fmt.Sprintf(msg(c, "model_selector.context"), modelSelectorTokens(m.ContextTokens))). + FontSize(small).TextColor(k.TextMuted).FontFeatures("tnum").SingleLine() + } + }) + if len(m.Capabilities) > 0 { + ui.Row(c).Gap(u).Wrap().Children(func() { + for _, cap := range m.Capabilities { + ui.Text(c, cap).FontSize(small).Padding(0, u*1.5).Radius(theme.ControlRadius). + Border(theme.BorderWidth, k.Border).TextColor(k.AccentText).SingleLine() + } + }) + } + if m.Unavailable != "" { + ui.Text(c, m.Unavailable).FontSize(small).TextColor(k.TextMuted).Italic() + } + }) +} + +func modelSelectorFind(models []ModelOption, id string) (ModelOption, bool) { + for _, m := range models { + if m.ID == id { + return m, true + } + } + return ModelOption{}, false +} + +// modelSelectorTokens writes a token count as 8K, 200K or 1M. +func modelSelectorTokens(n int) string { + switch { + case n >= 1_000_000 && n%100_000 == 0: + return strconv.FormatFloat(float64(n)/1e6, 'f', -1, 64) + "M" + case n >= 1000: + return strconv.Itoa(n/1000) + "K" + } + return strconv.Itoa(n) +} diff --git a/model_selector_test.go b/model_selector_test.go new file mode 100644 index 0000000..99f876a --- /dev/null +++ b/model_selector_test.go @@ -0,0 +1,72 @@ +package mujica + +import ( + "testing" + + "github.com/egoist/mygo/ui" +) + +var modelsSample = []ModelOption{ + {ID: "herald", Name: "Herald 2", Capabilities: []string{"Vision", "Tools"}, ContextTokens: 200000}, + {ID: "page", Name: "Page Mini", Capabilities: []string{"Fast"}, ContextTokens: 32000}, + {ID: "oracle", Name: "Oracle", ContextTokens: 1000000, Unavailable: "Needs the Court plan"}, +} + +func modelTester(v *string, changes *int, off *bool) *ui.Tester { + return ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + ui.Column(c).Padding(16).Children(func() { + if ModelSelector(c, v, modelsSample, ModelSelectorOptions{Disabled: *off}).Changed() { + *changes++ + } + }) + }, 500, 500) +} + +func TestModelSelectorShowsDetailsAndChooses(t *testing.T) { + v, n, off := "herald", 0, false + tt := modelTester(&v, &n, &off) + _ = tt.Click("Model") + for _, s := range []string{"200K context", "Vision", "1M context", "Needs the Court plan", "32K context"} { + if !tt.HasText(s) { + t.Errorf("missing %q in %q", s, tt.Texts()) + } + } + _ = tt.Click("Oracle") + if v != "herald" || n != 0 { + t.Fatalf("unavailable model chosen: %q", v) + } + tt.Key(0, ui.KeyEscape) + tt.Key(0, ui.KeyTab) + tt.Key(0, ui.KeyDown) + tt.Key(0, ui.KeyDown) + tt.Key(0, ui.KeyDown) + tt.Key(0, ui.KeyEnter) + if v != "page" || n != 1 { + t.Fatalf("keyboard choice %q changes %d (Down stops before the unavailable model)", v, n) + } +} + +func TestModelSelectorDisabled(t *testing.T) { + v, n, off := "herald", 0, true + tt := modelTester(&v, &n, &off) + _ = tt.Click("Model") + if tt.HasText("Page Mini") { + t.Fatal("disabled selector opened") + } +} + +func TestModelSelectorTokens(t *testing.T) { + for n, want := range map[int]string{512: "512", 8000: "8K", 200000: "200K", 1000000: "1M", 1500000: "1.5M"} { + if got := modelSelectorTokens(n); got != want { + t.Errorf("%d: %q, want %q", n, got, want) + } + } +} + +func TestModelSelectorSnapshot(t *testing.T) { + snapshotAfter(t, "model_selector", 440, 330, func(c *ui.Context) { + v := ui.Local(c.Root(), "v", func() string { return "herald" }) + ui.Column(c).Padding(16).Children(func() { ModelSelector(c, v, modelsSample, ModelSelectorOptions{}) }) + }, func(tt *ui.Tester) { _ = tt.Click("Model") }) +} diff --git a/parameter_panel.go b/parameter_panel.go new file mode 100644 index 0000000..044f68a --- /dev/null +++ b/parameter_panel.go @@ -0,0 +1,76 @@ +package mujica + +import ( + "fmt" + "log/slog" + "strconv" + + "github.com/egoist/mygo/ui" + + "mujicaui/icons" + "mujicaui/theme" +) + +// ModelParam is one generation parameter, as temperature or top-p. +type ModelParam struct { + // Label and Value are required. + Label string + Value *float64 + // Min, Max and Step bound the value; Default lies within them. + Min, Max, Step, Default float64 +} + +// ParameterPanel adjusts generation parameters with sliders; each shows its range and resets to its default. +func ParameterPanel(c *ui.Context, params []ModelParam) ChoiceResult { + for _, p := range params { + if p.Label == "" || p.Value == nil || !(p.Min < p.Max) || p.Step <= 0 || p.Default < p.Min || p.Default > p.Max { + panic("mujica: ModelParam needs Label, Value, Min < Max, Step > 0 and Default in range") + } + } + k := Tokens(c) + u := Density(c).Unit() + small := FontSize(c, theme.CaptionSize) + var r ChoiceResult + r.Element = ui.Column(c).Gap(u * 4).MinWidth(240).Role(ui.RoleGroup).Label(msg(c, "parameter_panel.label")) + disabled := r.Element.IsDisabled() + set := func(p ModelParam, v float64) { + if *p.Value != v && !disabled { + *p.Value, r.changed = v, true + slog.Debug("mujica: parameter_panel set", "param", p.Label, "value", v) + } + } + r.Element.Children(func() { + for _, p := range params { + format := func(v float64) string { return strconv.FormatFloat(v, 'f', sliderDecimals(p.Min, p.Step, p.Default), 64) } + ui.Column(c).Key(p.Label).Gap(u).Children(func() { + ui.Row(c).Gap(u * 2).AlignItems(ui.Center).Children(func() { + ui.Text(c, p.Label).FontWeight(600).Grow(1).SingleLine() + ui.Text(c, format(*p.Value)).FontFeatures("tnum").TextColor(k.AccentText).SingleLine() + ui.Row(c).Disabled(*p.Value == p.Default).Children(func() { + if iconAction(c, icons.Must("rotate-ccw"), fmt.Sprintf(msg(c, "parameter_panel.reset"), p.Label)). + Tooltip(fmt.Sprintf(msg(c, "parameter_panel.default"), format(p.Default))).Clicked() { + set(p, p.Default) + } + }) + }) + v := *p.Value + if Slider(c, &v, SliderOptions{Min: p.Min, Max: p.Max, Step: p.Step, Label: p.Label, Disabled: disabled}).Changed() { + set(p, v) + } + ui.Row(c).Children(func() { + ui.Text(c, format(p.Min)).FontSize(small).TextColor(k.TextMuted).Grow(1) + ui.Text(c, fmt.Sprintf(msg(c, "parameter_panel.default"), format(p.Default))).FontSize(small).TextColor(k.TextMuted) + ui.Text(c, format(p.Max)).FontSize(small).TextColor(k.TextMuted).Grow(1).TextAlign(ui.End) + }) + }) + } + ui.Row(c).Justify(ui.End).Children(func() { + if Button(c, msg(c, "parameter_panel.reset_all"), ButtonOptions{Variant: Ghost, Icon: icons.Must("rotate-ccw")}).Clicked() { + for _, p := range params { + set(p, p.Default) + } + } + }) + }) + return r +} diff --git a/parameter_panel_test.go b/parameter_panel_test.go new file mode 100644 index 0000000..928a4d4 --- /dev/null +++ b/parameter_panel_test.go @@ -0,0 +1,69 @@ +package mujica + +import ( + "testing" + + "github.com/egoist/mygo/ui" +) + +func paramSample(temp, topP *float64) []ModelParam { + return []ModelParam{ + {Label: "Temperature", Value: temp, Min: 0, Max: 2, Step: 0.1, Default: 1}, + {Label: "Top-p", Value: topP, Min: 0, Max: 1, Step: 0.05, Default: 1}, + } +} + +func TestParameterPanelAdjustAndReset(t *testing.T) { + temp, topP, n, off := 1.0, 0.9, 0, false + tt := ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + ui.Column(c).Padding(16).Disabled(off).Children(func() { + if ParameterPanel(c, paramSample(&temp, &topP)).Changed() { + n++ + } + }) + }, 500, 400) + for _, s := range []string{"1.0", "0.90", "Default 1.0", "2.0"} { + if !tt.HasText(s) { + t.Errorf("missing %q in %q", s, tt.Texts()) + } + } + tt.Key(0, ui.KeyTab) + tt.Key(0, ui.KeyRight) + if temp != 1.1 || n != 1 { + t.Fatalf("Right: temp %v changes %d", temp, n) + } + _ = tt.Click("Reset Temperature") + if temp != 1 { + t.Fatalf("reset temp %v", temp) + } + _ = tt.Click("Reset all") + if topP != 1 || n != 3 { + t.Fatalf("reset all: topP %v changes %d", topP, n) + } + off = true + tt.Key(0, ui.KeyRight) + if temp != 1 { + t.Fatal("disabled panel changed") + } +} + +func TestParameterPanelBadParam(t *testing.T) { + v := 0.0 + defer func() { + if recover() == nil { + t.Fatal("no panic for a default outside the range") + } + }() + ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + ParameterPanel(c, []ModelParam{{Label: "x", Value: &v, Min: 0, Max: 1, Step: 0.1, Default: 3}}) + }, 100, 100) +} + +func TestParameterPanelSnapshot(t *testing.T) { + temp, topP := 0.7, 1.0 + snapshot(t, "parameter_panel", 420, 260, func(c *ui.Context) { + ui.Column(c).Padding(16).Children(func() { ParameterPanel(c, paramSample(&temp, &topP)) }) + }) +} diff --git a/paste_image_preview.go b/paste_image_preview.go new file mode 100644 index 0000000..0ef07e2 --- /dev/null +++ b/paste_image_preview.go @@ -0,0 +1,56 @@ +package mujica + +import ( + "fmt" + "log/slog" + + "github.com/egoist/mygo/ui" + + "mujicaui/icons" + "mujicaui/theme" +) + +// PastedImage is an image pasted or dropped into a prompt; the caller decodes it. +type PastedImage struct { + // ID is the image's stable identity; required. + ID string + Source ui.ImageSource + // Name describes it for assistive technology and the remove button. + Name string +} + +// pasteImageSize is the thumbnail's edge in DIPs. +const pasteImageSize float32 = 72 + +// PasteImagePreview shows pasted or dropped images as thumbnails, each with a remove button. +func PasteImagePreview(c *ui.Context, images []PastedImage) RemoveResult { + k := Tokens(c) + u := Density(c).Unit() + var r RemoveResult + r.Element = ui.Row(c).Gap(u * 2).Wrap().Role(ui.RoleList).Label(msg(c, "paste_image_preview.label")) + disabled := r.Element.IsDisabled() + r.Element.Children(func() { + for _, im := range images { + if im.ID == "" || im.Source == nil { + panic("mujica: PastedImage needs ID and Source") + } + ui.Box(c).Key(im.ID).Size(pasteImageSize, pasteImageSize).Role(ui.RoleListItem).Children(func() { + ui.Image(c, im.Source).Fit(ui.Cover).Size(pasteImageSize, pasteImageSize).Radius(theme.ControlRadius). + Border(theme.BorderWidth, k.Border).Label(im.Name) + x := iconAction(c, icons.Must("x"), fmt.Sprintf(msg(c, "paste_image_preview.remove"), im.Name)). + Absolute().Top(-u * 3).Right(-u * 3).Radius(theme.MinHitSize / 2) + // A 20 DIP disc inside the 28 DIP hit area. + x.Draw(func(p *ui.Painter, r ui.Rect) { + d := ui.Rect{X: r.X + 4, Y: r.Y + 4, W: r.W - 8, H: r.H - 8} + p.Fill(d, k.Surface, d.W/2) + p.Stroke(d, k.ControlBorder, d.W/2, theme.BorderWidth) + }) + if x.Clicked() && !disabled { + r.removed = im.ID + slog.Debug("mujica: paste_image_preview remove", "id", im.ID) + } + }) + } + }) + return r +} diff --git a/paste_image_preview_test.go b/paste_image_preview_test.go new file mode 100644 index 0000000..d58d9fd --- /dev/null +++ b/paste_image_preview_test.go @@ -0,0 +1,61 @@ +package mujica + +import ( + "testing" + + "github.com/egoist/mygo/ui" +) + +func pasteImages() []PastedImage { + return []PastedImage{ + {ID: "a", Source: imageGridPicture("#7D2034"), Name: "screenshot 1"}, + {ID: "b", Source: imageGridPicture("#355E80"), Name: "screenshot 2"}, + } +} + +func TestPasteImagePreviewRemoves(t *testing.T) { + imgs, off := pasteImages(), false + tt := ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + ui.Column(c).Padding(16).Disabled(off).Children(func() { + if id, ok := PasteImagePreview(c, imgs).Removed(); ok { + for i, im := range imgs { + if im.ID == id { + imgs = append(imgs[:i], imgs[i+1:]...) + break + } + } + } + }) + }, 400, 150) + if _, ok := tt.Find("screenshot 2"); !ok { + t.Fatal("thumbnail not named") + } + _ = tt.Click("Remove image screenshot 1") + if len(imgs) != 1 || imgs[0].ID != "b" { + t.Fatalf("left %v", imgs) + } + off = true + _ = tt.Click("Remove image screenshot 2") + if len(imgs) != 1 { + t.Fatal("disabled preview removed an image") + } +} + +func TestPasteImagePreviewNeedsSource(t *testing.T) { + defer func() { + if recover() == nil { + t.Fatal("no panic without a source") + } + }() + ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + PasteImagePreview(c, []PastedImage{{ID: "x"}}) + }, 100, 100) +} + +func TestPasteImagePreviewSnapshot(t *testing.T) { + snapshot(t, "paste_image_preview", 240, 110, func(c *ui.Context) { + ui.Column(c).Padding(20).Children(func() { PasteImagePreview(c, pasteImages()) }) + }) +} diff --git a/prompt_composer.go b/prompt_composer.go new file mode 100644 index 0000000..7221b67 --- /dev/null +++ b/prompt_composer.go @@ -0,0 +1,99 @@ +package mujica + +import ( + "log/slog" + "strings" + + "github.com/egoist/mygo/ui" +) + +// PromptComposerOptions configure a PromptComposer. +type PromptComposerOptions struct { + Placeholder string + // Label names the field; empty uses the built-in "Message". + Label string + // CmdEnterSends sends with Cmd+Enter (Ctrl+Enter) and makes Enter a newline. + CmdEnterSends bool + // MaxHeight caps the field in DIPs before it scrolls; zero means 200. + MaxHeight float32 + // Attachments builds the row above the field, as AttachmentChips. + Attachments func() + // Tools builds the left of the bar below the field; Actions its right, as a SendButton. + Tools, Actions func() + Disabled bool +} + +// promptHooks are key handlers menus over a composer add each frame. +type promptHooks struct{ list []func(ui.InputEvent) bool } + +type promptHooksKey struct{} + +// PromptComposer is a multi-line prompt: Enter sends and Shift+Enter breaks the line, or Cmd+Enter sends. +// Submitted never fires for blank text. +func PromptComposer(c *ui.Context, value *string, opts PromptComposerOptions) InputResult { + if value == nil { + panic("mujica: PromptComposer needs a value") + } + if opts.MaxHeight < 0 { + panic("mujica: PromptComposer MaxHeight must not be negative") + } + u := Density(c).Unit() + maxH := opts.MaxHeight + if maxH == 0 { + maxH = 200 + } + label := opts.Label + if label == "" { + label = msg(c, "prompt_composer.label") + } + var r InputResult + r.Element = ui.Column(c).Gap(u * 2).MinWidth(0).Disabled(opts.Disabled) + hooks := ui.Local(r.Element, promptHooksKey{}, func() *promptHooks { return &promptHooks{} }) + h := *hooks + h.list = h.list[:0] + r.Element.Children(func() { + if opts.Attachments != nil { + ui.Row(c).Gap(u * 2).Wrap().Children(opts.Attachments) + } + ta := TextAreaOptions{Label: label, Placeholder: opts.Placeholder, MaxHeight: maxH, + keys: func(ev ui.InputEvent) bool { + for _, f := range h.list { + if f(ev) { + return true + } + } + return false + }} + if !opts.CmdEnterSends { + ta.SubmitKey = ui.KeyEnter + } + area := TextArea(c, value, ta) + r.Input, r.changed = area.Input, area.Changed() + r.submitted = area.Submitted() && strings.TrimSpace(*value) != "" + if opts.Tools != nil || opts.Actions != nil { + ui.Row(c).Gap(u * 2).AlignItems(ui.Center).Children(func() { + ui.Row(c).Gap(u).AlignItems(ui.Center).Grow(1).Children(func() { + if opts.Tools != nil { + opts.Tools() + } + }) + if opts.Actions != nil { + opts.Actions() + } + }) + } + }) + if r.submitted { + slog.Debug("mujica: prompt_composer submit", "chars", len(*value)) + } + return r +} + +// promptComposerHook adds a key handler that runs before the composer's editor this frame. +func promptComposerHook(composer InputResult, f func(ui.InputEvent) bool) { + if composer.Element == nil { + panic("mujica: menus need a built PromptComposer") + } + h := *ui.Local(composer.Element, promptHooksKey{}, func() *promptHooks { return &promptHooks{} }) + h.list = append(h.list, f) +} diff --git a/prompt_composer_test.go b/prompt_composer_test.go new file mode 100644 index 0000000..abf9d04 --- /dev/null +++ b/prompt_composer_test.go @@ -0,0 +1,85 @@ +package mujica + +import ( + "testing" + + "github.com/egoist/mygo/ui" + + "mujicaui/icons" +) + +func promptTester(text *string, sends *int, opts PromptComposerOptions) *ui.Tester { + return ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + if PromptComposer(c, text, opts).Submitted() { + *sends++ + } + }, 500, 400) +} + +func TestPromptComposerEnterSendsShiftEnterBreaks(t *testing.T) { + text, sends := "", 0 + tt := promptTester(&text, &sends, PromptComposerOptions{Label: "Prompt"}) + _ = tt.Click("Prompt") + tt.Key(0, ui.KeyEnter) + if sends != 0 { + t.Fatal("blank prompt sent") + } + tt.Type("Bonjour") + tt.Key(ui.Shift, ui.KeyEnter) + tt.Type("Madame") + tt.Key(0, ui.KeyEnter) + if sends != 1 || text != "Bonjour\nMadame" { + t.Fatalf("sends %d text %q", sends, text) + } +} + +func TestPromptComposerCmdEnterMode(t *testing.T) { + text, sends := "", 0 + tt := promptTester(&text, &sends, PromptComposerOptions{Label: "Prompt", CmdEnterSends: true}) + _ = tt.Click("Prompt") + tt.Type("a") + tt.Key(0, ui.KeyEnter) + tt.Type("b") + tt.Key(ui.Cmd, ui.KeyEnter) + if sends != 1 || text != "a\nb" { + t.Fatalf("sends %d text %q", sends, text) + } +} + +func TestPromptComposerSlotsAndDisabled(t *testing.T) { + text, sends := "hello", 0 + tt := promptTester(&text, &sends, PromptComposerOptions{Label: "Prompt", Disabled: true}) + _ = tt.Click("Prompt") + tt.Type("x") + tt.Key(0, ui.KeyEnter) + if sends != 0 || text != "hello" { + t.Fatalf("disabled composer: sends %d text %q", sends, text) + } + tt = ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + PromptComposer(c, &text, PromptComposerOptions{ + Attachments: func() { ui.Text(c, "report.pdf") }, + Tools: func() { ui.Text(c, "Web search") }, + Actions: func() { ui.Text(c, "Send it") }, + }) + }, 500, 400) + for _, s := range []string{"report.pdf", "Web search", "Send it", "Message"} { + if _, ok := tt.Find(s); !ok { + t.Errorf("missing %q", s) + } + } +} + +func TestPromptComposerSnapshot(t *testing.T) { + text := "Draft the invitation for the spring ball,\nin the style of the court." + snapshot(t, "prompt_composer", 520, 220, func(c *ui.Context) { + ui.Column(c).Padding(16).Children(func() { + PromptComposer(c, &text, PromptComposerOptions{ + Attachments: func() { AttachmentChip(c, Attachment{Name: "guests.csv", Size: 4096}) }, + Tools: func() { iconAction(c, icons.Must("paperclip"), "Attach") }, + Actions: func() { SendButton(c, SendButtonOptions{Shortcut: "Enter"}) }, + }) + }) + }) +} diff --git a/search_progress.go b/search_progress.go new file mode 100644 index 0000000..e4569a6 --- /dev/null +++ b/search_progress.go @@ -0,0 +1,86 @@ +package mujica + +import ( + "fmt" + + "github.com/egoist/mygo/ui" + + "mujicaui/icons" + "mujicaui/theme" +) + +// SearchStage is one step of a web search, as "Planning" or "Reading". +type SearchStage struct { + Label string + Done bool +} + +// SearchProgressOptions describe the caller's search. +type SearchProgressOptions struct { + // Query is the keyword searched; required. + Query string + // Read and Total count the sources read so far and found. + Read, Total int + Stages []SearchStage + // Done folds the block to a summary, which the user can open again. + Done bool +} + +// searchProgressState is the fold, open while searching until the search ends. +type searchProgressState struct { + open, done bool +} + +// SearchProgress shows a search's keyword, sources read and stages; once Done it folds to one line. +func SearchProgress(c *ui.Context, opts SearchProgressOptions) ChoiceResult { + if opts.Query == "" || opts.Read < 0 || opts.Total < 0 || opts.Read > opts.Total { + panic("mujica: SearchProgress needs a Query and 0 <= Read <= Total") + } + r := ChoiceResult{Element: ui.Column(c).MinWidth(0)} + st := ui.Local(r.Element, "search", func() searchProgressState { return searchProgressState{open: true} }) + if opts.Done && !st.done { + // Finishing folds it once; the user may open it again. + st.open = false + } + st.done = opts.Done + title := fmt.Sprintf(msg(c, "search_progress.searching"), opts.Query) + if opts.Done { + title = fmt.Sprintf(msg(c, "search_progress.done"), opts.Query, opts.Read) + } + r.Element.Children(func() { r.changed = searchProgressBody(c, st, title, opts) }) + return r +} + +// searchProgressBody is the collapsible header and the stages. +func searchProgressBody(c *ui.Context, st *searchProgressState, title string, opts SearchProgressOptions) bool { + k := Tokens(c) + u := Density(c).Unit() + small := FontSize(c, theme.CaptionSize) + return Collapsible(c, &st.open, CollapsibleOptions{Title: title, Trigger: func() { + ui.Row(c).Gap(u * 2).AlignItems(ui.Center).TextColor(k.TextMuted).Children(func() { + if opts.Done { + ui.Icon(c, icons.Must("search")).Size(14, 14) + } else { + Spinner(c, SpinnerOptions{Size: 14, Label: title}) + } + ui.Text(c, title).FontSize(small).SingleLine() + }) + }}, func() { + ui.Text(c, fmt.Sprintf(msg(c, "search_progress.read"), opts.Read, opts.Total)).FontSize(small).FontFeatures("tnum").TextColor(k.TextMuted) + ui.Column(c).Gap(u).Role(ui.RoleList).Children(func() { + for _, s := range opts.Stages { + ui.Row(c).Gap(u * 2).AlignItems(ui.Center).Role(ui.RoleListItem).Children(func() { + if s.Done { + ui.Icon(c, icons.Must("check")).Size(14, 14).TextColor(k.Success) + } else { + ui.Icon(c, icons.Must("circle")).Size(14, 14).TextColor(k.TextMuted) + } + t := ui.Text(c, s.Label).FontSize(small) + if !s.Done { + t.TextColor(k.TextMuted) + } + }) + } + }) + }).Changed() +} diff --git a/search_progress_test.go b/search_progress_test.go new file mode 100644 index 0000000..d303d42 --- /dev/null +++ b/search_progress_test.go @@ -0,0 +1,60 @@ +package mujica + +import ( + "testing" + + "github.com/egoist/mygo/ui" +) + +func searchStages(done int) []SearchStage { + labels := []string{"Planning queries", "Searching the web", "Reading sources", "Writing the answer"} + out := make([]SearchStage, len(labels)) + for i, l := range labels { + out[i] = SearchStage{Label: l, Done: i < done} + } + return out +} + +func TestSearchProgressFoldsWhenDone(t *testing.T) { + opts := SearchProgressOptions{Query: "Versailles 1682", Read: 3, Total: 8, Stages: searchStages(2)} + tt := ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + SearchProgress(c, opts) + }, 500, 300) + tt.SetPreferences(ui.Preferences{ReduceMotion: true, TextScale: 1}) + for _, s := range []string{"Searching for “Versailles 1682”", "Read 3 of 8 sources", "Reading sources"} { + if !tt.HasText(s) { + t.Errorf("missing %q in %q", s, tt.Texts()) + } + } + opts.Done, opts.Read, opts.Stages = true, 8, searchStages(4) + tt.Frame() + if !tt.HasText("Searched “Versailles 1682”, read 8 sources") || tt.HasText("Reading sources") { + t.Fatalf("done: %q", tt.Texts()) + } + _ = tt.Click("Searched “Versailles 1682”, read 8 sources") + if !tt.HasText("Reading sources") { + t.Fatal("finished search does not open again") + } +} + +func TestSearchProgressBadCounts(t *testing.T) { + defer func() { + if recover() == nil { + t.Fatal("no panic for Read above Total") + } + }() + ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + SearchProgress(c, SearchProgressOptions{Query: "q", Read: 3, Total: 1}) + }, 100, 100) +} + +func TestSearchProgressSnapshot(t *testing.T) { + snapshot(t, "search_progress", 440, 230, func(c *ui.Context) { + ui.Column(c).Padding(16).Gap(12).Children(func() { + SearchProgress(c, SearchProgressOptions{Query: "Versailles 1682", Read: 3, Total: 8, Stages: searchStages(2)}) + SearchProgress(c, SearchProgressOptions{Query: "Hall of Mirrors", Read: 5, Total: 5, Stages: searchStages(4), Done: true}) + }) + }) +} diff --git a/send_button.go b/send_button.go new file mode 100644 index 0000000..379b99c --- /dev/null +++ b/send_button.go @@ -0,0 +1,72 @@ +package mujica + +import ( + "log/slog" + + "github.com/egoist/mygo/ui" + + "mujicaui/icons" + "mujicaui/internal" + "mujicaui/theme" +) + +// SendButtonOptions configure a SendButton. +type SendButtonOptions struct { + // Streaming turns the button into Stop while a reply is generated. + Streaming bool + // Disabled blocks sending, as for an empty prompt; Stop stays available. + Disabled bool + // Shortcut is the send key shown in the tooltip, as "Enter"; empty shows none. + Shortcut string +} + +// SendResult is the button and which action the user took this frame. +type SendResult struct { + Element *ui.Element + send, stop bool +} + +// Sent reports a press while idle; Stopped a press while streaming. +func (r SendResult) Sent() bool { return r.send } +func (r SendResult) Stopped() bool { return r.stop } + +// SendButton sends the prompt, or stops the reply while streaming. +func SendButton(c *ui.Context, opts SendButtonOptions) SendResult { + k := Tokens(c) + h := Density(c).ControlHeight() + label, icon := msg(c, "send_button.send"), "arrow-up" + if opts.Streaming { + label, icon = msg(c, "send_button.stop"), "square" + } + tip := label + if opts.Shortcut != "" && !opts.Streaming { + tip += " (" + opts.Shortcut + ")" + } + var r SendResult + var b *ui.Element + r.Element = ui.Row(c).Shrink(0).Disabled(opts.Disabled && !opts.Streaming) + r.Element.Children(func() { + b = ui.ButtonBase(c).Size(h, h).Radius(h / 2).Label(label).Tooltip(tip).Transition(colorFade) + internal.Ring(b, k.Focus, h/2) + bg, fg := k.Accent, k.OnAccent + switch { + case opts.Streaming: + bg, fg = k.Surface, k.Text + b.Border(theme.BorderWidth, k.ControlBorder) + if b.Hovered() { + bg = k.SurfaceHover + } + case b.Pressed(): + bg = k.AccentPressed + case b.Hovered(): + bg = k.AccentHover + } + b.Background(bg).TextColor(fg) + b.Children(func() { ui.Icon(c, icons.Must(icon)).Size(16, 16) }) + }) + if b.Clicked() && !b.IsDisabled() { + r.send, r.stop = !opts.Streaming, opts.Streaming + slog.Debug("mujica: send_button press", "stop", r.stop) + } + return r +} diff --git a/send_button_test.go b/send_button_test.go new file mode 100644 index 0000000..0d8efe4 --- /dev/null +++ b/send_button_test.go @@ -0,0 +1,46 @@ +package mujica + +import ( + "testing" + + "github.com/egoist/mygo/ui" +) + +func TestSendButtonSendStopDisabled(t *testing.T) { + opts := SendButtonOptions{Shortcut: "Enter"} + sends, stops := 0, 0 + tt := ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + r := SendButton(c, opts) + if r.Sent() { + sends++ + } + if r.Stopped() { + stops++ + } + }, 200, 100) + _ = tt.Click("Send") + opts.Streaming = true + tt.Frame() + _ = tt.Click("Stop generating") + opts = SendButtonOptions{Disabled: true} + tt.Frame() + _ = tt.Click("Send") + opts.Streaming = true + tt.Frame() + tt.Key(0, ui.KeyTab) + tt.Key(0, ui.KeyEnter) + if sends != 1 || stops != 2 { + t.Fatalf("sends %d stops %d (disabled blocks send, not stop)", sends, stops) + } +} + +func TestSendButtonSnapshot(t *testing.T) { + snapshot(t, "send_button", 200, 70, func(c *ui.Context) { + ui.Row(c).Padding(12).Gap(12).Children(func() { + SendButton(c, SendButtonOptions{}) + SendButton(c, SendButtonOptions{Streaming: true}) + SendButton(c, SendButtonOptions{Disabled: true}) + }) + }) +} diff --git a/slash_command_menu.go b/slash_command_menu.go new file mode 100644 index 0000000..6b3c190 --- /dev/null +++ b/slash_command_menu.go @@ -0,0 +1,232 @@ +package mujica + +import ( + "log/slog" + "strings" + + "github.com/egoist/mygo/ui" + + "mujicaui/icons" + "mujicaui/theme" +) + +// SlashCommand is one command of a SlashCommandMenu. +type SlashCommand struct { + // Name is typed after the slash; required, without spaces. + Name string + Description string +} + +// SlashCommandResult is the menu's popup panel, nil while closed, and the command chosen this frame. +type SlashCommandResult struct { + Element *ui.Element + chosen SlashCommand + ok bool +} + +// Chosen returns the command picked by Enter or a click. +func (r SlashCommandResult) Chosen() (SlashCommand, bool) { return r.chosen, r.ok } + +// SlashCommandMenu pops up commands while the composer's text is "/" plus a filter. +// Up and Down move, Enter or a click chooses, Tab completes, Escape closes; typing stays in the composer. +func SlashCommandMenu(c *ui.Context, composer InputResult, value *string, commands []SlashCommand) SlashCommandResult { + for _, cmd := range commands { + if cmd.Name == "" || strings.ContainsAny(cmd.Name, " \t\n") { + panic("mujica: SlashCommand Name must be one word") + } + } + var r SlashCommandResult + st := ui.Local(composer.Element, slashMenuKey{"slash"}, func() slashMenuState { return slashMenuState{} }) + query, typing := strings.CutPrefix(*value, "/") + typing = typing && !strings.ContainsAny(query, " \t\n") + var shown []SlashCommand + var rows []slashMenuRow + if typing { + q := strings.ToLower(query) + for pass := range 2 { + for _, cmd := range commands { + n := strings.ToLower(cmd.Name) + if pass == 0 && strings.HasPrefix(n, q) || pass == 1 && !strings.HasPrefix(n, q) && strings.Contains(n, q) { + shown = append(shown, cmd) + rows = append(rows, slashMenuRow{label: "/" + cmd.Name, detail: cmd.Description}) + } + } + } + } + i, how := slashMenuShow(c, composer, st, query, typing, rows, slashMenuOptions{empty: msg(c, "slash_command_menu.empty"), label: msg(c, "slash_command_menu.label")}) + r.Element = st.panel + if i >= 0 { + *value = "/" + shown[i].Name + " " + if how == slashMenuChose { + r.chosen, r.ok = shown[i], true + } + slog.Debug("mujica: slash_command_menu pick", "name", shown[i].Name, "chosen", r.ok) + } + return r +} + +type slashMenuKey struct{ name string } + +// slashMenuRow is one line of a composer menu; a group starts a titled section. +type slashMenuRow struct { + label, detail, icon, group string +} + +type slashMenuOptions struct { + empty, label string + loading bool +} + +// slashMenuState is a composer menu's highlight, Escape and pending key choice. +type slashMenuState struct { + hi, lastHi int + query string + dismissed *string + pick slashMenuHow + panel *ui.Element + held, open bool +} + +type slashMenuHow int + +const ( + slashMenuNone slashMenuHow = iota + slashMenuChose + slashMenuCompleted +) + +// slashMenuShow runs a composer menu while open and returns the row picked this frame and how. +func slashMenuShow(c *ui.Context, composer InputResult, st *slashMenuState, query string, open bool, rows []slashMenuRow, o slashMenuOptions) (int, slashMenuHow) { + st.panel = nil + if query != st.query { + st.hi, st.query = 0, query + if st.dismissed != nil && *st.dismissed != query { + st.dismissed = nil + } + } + // A press on the panel takes the focus from the composer; the press keeps it open. + open = open && st.dismissed == nil && !composer.Element.IsDisabled() && (composer.Input.Focused() || st.held) + pick, how := -1, slashMenuNone + st.open = open + if !open { + st.pick = slashMenuNone + return pick, how + } + st.hi = min(st.hi, len(rows)-1) + if st.pick != slashMenuNone && st.hi >= 0 { + pick, how = st.hi, st.pick + } + st.pick = slashMenuNone + n := len(rows) + promptComposerHook(composer, func(ev ui.InputEvent) bool { + if ev.Kind != ui.InputKeyDown || ev.Mods != 0 { + return false + } + switch ev.Key { + case ui.KeyDown, ui.KeyUp: + if n > 0 { + d := map[ui.Key]int{ui.KeyDown: 1, ui.KeyUp: -1}[ev.Key] + st.hi = (max(st.hi, 0) + d + n) % n + } + case ui.KeyEnter: + st.pick = slashMenuChose + case ui.KeyTab: + st.pick = slashMenuCompleted + case ui.KeyEscape: + q := query + st.dismissed = &q + default: + return false + } + c.Invalidate() + return true + }) + if i := slashMenuPanel(c, composer.Element.Bounds(), st, rows, o); i >= 0 { + pick, how = i, slashMenuChose + } + if pick >= 0 { + composer.Input.Focus() + } + return pick, how +} + +// slashMenuPanel draws the rows over or under the composer a and returns a clicked row. +func slashMenuPanel(c *ui.Context, a ui.Rect, st *slashMenuState, rows []slashMenuRow, o slashMenuOptions) int { + k := Tokens(c) + u := Density(c).Unit() + rowH := Density(c).ControlHeight() + headH := rowH * 0.75 + h := 2 * u + group := "" + for _, r := range rows { + if r.group != group { + h, group = h+headH, r.group + } + h += rowH + } + if len(rows) == 0 { + h += rowH + } + h = min(h, 280) + 2*theme.BorderWidth + w := min(max(a.W*0.6, 320), max(a.W, 200)) + x, y := overlayPlace(c, a, w, h, u) + clicked, pressed := -1, false + ui.Overlay(c, func() { + panel := ui.Column(c).Absolute().Left(x).Top(y).Width(w).Height(h).Role(ui.RoleList).Label(o.label) + overlayStyle(c, panel, overlayAnchored(c, panel, a)) + st.panel = panel + panel.HandleInput(func(ev ui.InputEvent) bool { + if ev.Kind == ui.InputPointerDown { + st.held = true + } + return false + }) + panel.Children(func() { + ui.Scroll(c).Fill().Padding(u).Children(func() { + if len(rows) == 0 { + ui.Row(c).MinHeight(rowH).Padding(0, u*3).Gap(u*2).AlignItems(ui.Center).TextColor(k.TextMuted).Children(func() { + if o.loading { + Spinner(c, SpinnerOptions{Size: 14}) + } + ui.Text(c, o.empty).SingleLine() + }) + } + group := "" + for i, r := range rows { + if r.group != group { + group = r.group + ui.Text(c, group).Height(headH).Padding(u*2, u*3, 0, u*3).FontSize(FontSize(c, theme.CaptionSize)). + FontWeight(600).TextColor(k.TextMuted).Role(ui.RoleText) + } + row := ui.Row(c).Key(i).Height(rowH).Padding(0, u*3, 0, u*2).Gap(u*2).AlignItems(ui.Center). + Radius(theme.ControlRadius).Role(ui.RoleListItem).Label(r.label).Cursor(ui.CursorPointer) + if row.Clicked() { + clicked = i + } + pressed = pressed || row.Pressed() + hi := i == st.hi + if hi { + row.Background(k.Selection).Draw(func(p *ui.Painter, b ui.Rect) { + p.Fill(ui.Rect{X: b.X, Y: b.Y + 4, W: 2, H: b.H - 8}, k.AccentText, 1) + }) + if st.lastHi != i { + st.lastHi = i + row.ScrollIntoView() + } + } else if row.Hovered() { + row.Background(k.SurfaceHover) + } + row.Children(func() { + if r.icon != "" { + ui.Icon(c, icons.Must(r.icon)).Size(16, 16).Shrink(0).TextColor(k.TextMuted) + } + ui.Text(c, r.label).SingleLine().Shrink(0).FontWeight(600) + ui.Text(c, r.detail).SingleLine().MinWidth(0).Shrink(1).TextColor(k.TextMuted).FontSize(FontSize(c, theme.CaptionSize)) + }) + } + }) + }) + }) + st.held = st.held && pressed + return clicked +} diff --git a/slash_command_menu_test.go b/slash_command_menu_test.go new file mode 100644 index 0000000..e4bcf89 --- /dev/null +++ b/slash_command_menu_test.go @@ -0,0 +1,122 @@ +package mujica + +import ( + "testing" + + "github.com/egoist/mygo/ui" +) + +var slashCommandsSample = []SlashCommand{ + {Name: "summarize", Description: "Summarize the thread"}, + {Name: "search", Description: "Search the web"}, + {Name: "translate", Description: "Translate to French"}, +} + +// slashTester is a composer with a slash menu; it records chosen commands and sends. +type slashTester struct { + text string + chosen []string + sends int + off bool +} + +func (s *slashTester) view(c *ui.Context) { + Use(c, Settings{}) + ui.Column(c).Fill().Justify(ui.End).Padding(16).Children(func() { + p := PromptComposer(c, &s.text, PromptComposerOptions{Label: "Prompt", Disabled: s.off}) + if p.Submitted() { + s.sends++ + } + if cmd, ok := SlashCommandMenu(c, p, &s.text, slashCommandsSample).Chosen(); ok { + s.chosen = append(s.chosen, cmd.Name) + } + }) +} + +func TestSlashCommandMenuFilterAndKeys(t *testing.T) { + s := &slashTester{} + tt := ui.NewTester(s.view, 500, 400) + _ = tt.Click("Prompt") + tt.Type("/s") + sr, _ := tt.Find("Search the web") + tr, ok := tt.Find("Translate to French") + if !ok || !tt.HasText("/summarize") || tr.Y <= sr.Y { + t.Fatalf("filter /s does not list prefix matches first: %q", tt.Texts()) + } + tt.Type("e") + if tt.HasText("/summarize") || !tt.HasText("/search") { + t.Fatalf("filter /se: %q", tt.Texts()) + } + tt.Key(0, ui.KeyBackspace) + tt.Key(0, ui.KeyDown) + tt.Key(0, ui.KeyEnter) + if s.text != "/search " || len(s.chosen) != 1 || s.chosen[0] != "search" || s.sends != 0 { + t.Fatalf("Enter: text %q chosen %v sends %d", s.text, s.chosen, s.sends) + } + if tt.HasText("/summarize") { + t.Fatal("menu stays open after choosing") + } +} + +func TestSlashCommandMenuTabCompletesAndEscapeCloses(t *testing.T) { + s := &slashTester{} + tt := ui.NewTester(s.view, 500, 400) + _ = tt.Click("Prompt") + tt.Type("/tr") + tt.Key(0, ui.KeyTab) + if s.text != "/translate " || len(s.chosen) != 0 { + t.Fatalf("Tab: text %q chosen %v", s.text, s.chosen) + } + s.text = "" + tt.Frame() + tt.Type("/") + if !tt.HasText("/summarize") { + t.Fatal("menu did not open on /") + } + tt.Key(0, ui.KeyEscape) + if tt.HasText("/summarize") { + t.Fatal("Escape did not close the menu") + } + tt.Type("t") + if !tt.HasText("/translate") { + t.Fatal("menu did not reopen as the filter changed") + } +} + +func TestSlashCommandMenuClickAndEmpty(t *testing.T) { + s := &slashTester{} + tt := ui.NewTester(s.view, 500, 400) + _ = tt.Click("Prompt") + tt.Type("/zz") + if !tt.HasText("No matching commands") { + t.Fatalf("empty state: %q", tt.Texts()) + } + tt.Key(0, ui.KeyBackspace) + tt.Key(0, ui.KeyBackspace) + if err := tt.Click("/translate"); err != nil { + t.Fatal(err) + } + if len(s.chosen) != 1 || s.chosen[0] != "translate" || !tt.Focused("Prompt") { + t.Fatalf("click chose %v, composer focused %v", s.chosen, tt.Focused("Prompt")) + } +} + +func TestSlashCommandMenuDisabledComposer(t *testing.T) { + s := &slashTester{text: "/s", off: true} + tt := ui.NewTester(s.view, 500, 400) + _ = tt.Click("Prompt") + tt.Key(0, ui.KeyEnter) + if tt.HasText("/search") || len(s.chosen) != 0 { + t.Fatal("disabled composer shows or uses the menu") + } +} + +func TestSlashCommandMenuSnapshot(t *testing.T) { + snapshotAfter(t, "slash_command_menu", 520, 360, func(c *ui.Context) { + (*ui.Local(c.Root(), "s", func() *slashTester { return &slashTester{} })).view(c) + }, func(tt *ui.Tester) { + _ = tt.Click("Prompt") + tt.Type("/") + tt.Key(0, ui.KeyDown) + }) +} diff --git a/source_card.go b/source_card.go new file mode 100644 index 0000000..d8b2e4f --- /dev/null +++ b/source_card.go @@ -0,0 +1,37 @@ +package mujica + +import ( + "fmt" + "log/slog" + + "github.com/egoist/mygo/ui" + + "mujicaui/internal" + "mujicaui/theme" +) + +// SourceCard shows source n's title, site, time and snippet; Clicked opens it. +// It lights up with Selection and an accent edge while st holds n Active or hovered. +func SourceCard(c *ui.Context, n int, src Source, st *CitationState) *ui.Element { + if n < 1 || st == nil || src.Title == "" || src.URL == "" { + panic("mujica: SourceCard needs n >= 1, a state and a Source with Title and URL") + } + k := Tokens(c) + u := Density(c).Unit() + b := ui.ButtonBase(c).Padding(u*2, u*3).AlignItems(ui.Start).Justify(ui.Start).Radius(theme.CardRadius). + Label(fmt.Sprintf(msg(c, "source_card.open"), src.Title)).Tooltip(src.URL).Transition(colorFade) + internal.Ring(b, k.Focus, theme.CardRadius) + st.track(c, b, n) + switch { + case st.lit(n): + b.Background(k.Selection).Border(theme.BorderWidth, k.Border).BorderWidth(theme.BorderWidth, theme.BorderWidth, theme.BorderWidth, 3). + BorderColor(k.AccentText) + default: + b.Background(k.Surface).Border(theme.BorderWidth, k.Border) + } + b.Children(func() { sourceSummary(c, n, src) }) + if b.Clicked() && !b.IsDisabled() { + slog.Debug("mujica: source_card open", "n", n) + } + return b +} diff --git a/source_card_test.go b/source_card_test.go new file mode 100644 index 0000000..4d6a804 --- /dev/null +++ b/source_card_test.go @@ -0,0 +1,66 @@ +package mujica + +import ( + "testing" + + "github.com/egoist/mygo/ui" +) + +func TestSourceCardOpensAndLights(t *testing.T) { + var st CitationState + opened, off := 0, false + var bg []byte + tt := ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + ui.Column(c).Padding(16).Width(360).Disabled(off).Children(func() { + if SourceCard(c, 1, sourcesSample[0], &st).Clicked() { + opened++ + } + }) + }, 400, 200) + for _, s := range []string{"[1]", "example.com", "2025-05-04", "The Palace of Versailles", "Seat of the court from 1682."} { + if !tt.HasText(s) { + t.Errorf("missing %q in %q", s, tt.Texts()) + } + } + bg = encode(t, tt.Image()) + _ = tt.Click("Open The Palace of Versailles") + tt.Key(0, ui.KeyEnter) + if opened != 2 { + t.Fatalf("opened %d", opened) + } + st.Active = 1 + tt.Move(390, 190) + tt.Frame() + if string(encode(t, tt.Image())) == string(bg) { + t.Fatal("active card does not light up") + } + off = true + _ = tt.Click("Open The Palace of Versailles") + if opened != 2 { + t.Fatal("disabled card opened") + } +} + +func TestSourceCardNeedsURL(t *testing.T) { + defer func() { + if recover() == nil { + t.Fatal("no panic without a URL") + } + }() + var st CitationState + ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + SourceCard(c, 1, Source{Title: "x"}, &st) + }, 100, 100) +} + +func TestSourceCardSnapshot(t *testing.T) { + snapshot(t, "source_card", 400, 260, func(c *ui.Context) { + st := ui.Local(c.Root(), "st", func() CitationState { return CitationState{Active: 2} }) + ui.Column(c).Padding(16).Gap(8).Children(func() { + SourceCard(c, 1, sourcesSample[0], st) + SourceCard(c, 2, sourcesSample[1], st) + }) + }) +} diff --git a/sources_panel.go b/sources_panel.go new file mode 100644 index 0000000..8a7d0b4 --- /dev/null +++ b/sources_panel.go @@ -0,0 +1,54 @@ +package mujica + +import ( + "fmt" + + "github.com/egoist/mygo/ui" + + "mujicaui/theme" +) + +// OpenResult is a list's element and the 1-based item the user opened this frame. +type OpenResult struct { + Element *ui.Element + opened int +} + +// Opened returns the number of the source opened. +func (r OpenResult) Opened() (int, bool) { return r.opened, r.opened > 0 } + +// SourcesPanel lists sources in citation order, numbered from 1; the Active one scrolls into view. +// It grows to fill its container, which needs a height. +func SourcesPanel(c *ui.Context, sources []Source, st *CitationState) OpenResult { + if st == nil || st.Active < 0 || st.Active > len(sources) { + panic("mujica: SourcesPanel needs a state whose Active is 0 or a listed source") + } + k := Tokens(c) + u := Density(c).Unit() + var r OpenResult + r.Element = ui.Column(c).Gap(u * 2).Grow(1).MinHeight(0).Role(ui.RoleList).Label(msg(c, "sources_panel.label")) + shown := ui.Local(r.Element, "active", func() int { return 0 }) + r.Element.Children(func() { + ui.Text(c, fmt.Sprintf("%s (%d)", msg(c, "sources_panel.label"), len(sources))).Font(theme.SerifFont). + FontSize(FontSize(c, theme.H3Size)).FontWeight(600) + if len(sources) == 0 { + ui.Text(c, msg(c, "sources_panel.empty")).TextColor(k.TextMuted) + return + } + ui.Scroll(c).Grow(1).MinHeight(0).Children(func() { + ui.Column(c).Gap(u * 2).Children(func() { + for i, src := range sources { + card := SourceCard(c, i+1, src, st).Role(ui.RoleListItem) + if card.Clicked() && !card.IsDisabled() { + r.opened = i + 1 + } + if st.Active == i+1 && *shown != st.Active { + card.ScrollIntoView() + } + } + }) + }) + }) + *shown = st.Active + return r +} diff --git a/sources_panel_test.go b/sources_panel_test.go new file mode 100644 index 0000000..d2ddd12 --- /dev/null +++ b/sources_panel_test.go @@ -0,0 +1,66 @@ +package mujica + +import ( + "fmt" + "testing" + + "github.com/egoist/mygo/ui" +) + +func TestSourcesPanelOrderOpenAndScroll(t *testing.T) { + var many []Source + for i := range 20 { + many = append(many, Source{Title: fmt.Sprintf("Source title %d", i+1), URL: fmt.Sprintf("https://example.com/%d", i+1)}) + } + var st CitationState + opened := 0 + tt := ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + ui.Column(c).Width(360).Height(300).Children(func() { + if n, ok := SourcesPanel(c, many, &st).Opened(); ok { + opened = n + } + }) + }, 400, 300) + first, _ := tt.Find("Source title 1") + second, _ := tt.Find("Source title 2") + if !tt.HasText("Sources (20)") || second.Y <= first.Y { + t.Fatalf("order or header: %q", tt.Texts()) + } + _ = tt.Click("Open Source title 2") + if opened != 2 { + t.Fatalf("opened %d", opened) + } + st.Active = 18 + tt.Frame() + tt.Frame() + r, ok := tt.Find("Source title 18") + if !ok || r.Y < 0 || r.Y+r.H > 300 { + t.Fatalf("active source not scrolled into view: %v %v", r, ok) + } +} + +func TestSourcesPanelEmptyAndBadActive(t *testing.T) { + var st CitationState + tt := ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + SourcesPanel(c, nil, &st) + }, 300, 200) + if !tt.HasText("No sources") { + t.Fatalf("texts %q", tt.Texts()) + } + defer func() { + if recover() == nil { + t.Fatal("no panic for an Active past the list") + } + }() + st.Active = 4 + tt.Frame() +} + +func TestSourcesPanelSnapshot(t *testing.T) { + snapshot(t, "sources_panel", 380, 420, func(c *ui.Context) { + st := ui.Local(c.Root(), "st", func() CitationState { return CitationState{Active: 2} }) + ui.Column(c).Padding(16).Height(420).Children(func() { SourcesPanel(c, sourcesSample, st) }) + }) +} diff --git a/testdata/snapshots/darwin/attachment_chip-dark.png b/testdata/snapshots/darwin/attachment_chip-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..93f2af58ea98925de795aeb8583a9c1e14621a6d GIT binary patch literal 7776 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/attachment_chip-light.png b/testdata/snapshots/darwin/attachment_chip-light.png new file mode 100644 index 0000000000000000000000000000000000000000..c8422e4d97724db31f272e7eb21cc64a971d9708 GIT binary patch literal 7631 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/citation_badge-dark.png b/testdata/snapshots/darwin/citation_badge-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..6f4ef224c2120c16833d7ed5c15f4d157e4bd87f GIT binary patch literal 3429 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/citation_badge-light.png b/testdata/snapshots/darwin/citation_badge-light.png new file mode 100644 index 0000000000000000000000000000000000000000..ad7f083a291a0ef65b0d3a6a0c49b179aa953a44 GIT binary patch literal 3290 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 F{|8j=EtvoS literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/context_chips-dark.png b/testdata/snapshots/darwin/context_chips-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..e8df2ee3943aa4ebfb286b9832eda10dd3b0e355 GIT binary patch literal 6610 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 Q|6u{p)_|y2KCz4W57foL1^@s6 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/context_mention_menu-dark.png b/testdata/snapshots/darwin/context_mention_menu-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..d231ea5c32a1fb609218cd0eae956fa0c4794ce9 GIT binary patch literal 24204 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 IA#WA&U!K)|4*&oF literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/context_mention_menu-light.png b/testdata/snapshots/darwin/context_mention_menu-light.png new file mode 100644 index 0000000000000000000000000000000000000000..9dacf40650bf6b7aaf54de6702739932e9a3be58 GIT binary patch literal 25537 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 G_}>6J+AKZ* literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/context_window_meter-light.png b/testdata/snapshots/darwin/context_window_meter-light.png new file mode 100644 index 0000000000000000000000000000000000000000..579e6d79a58e0c9327b9701933125576c8d196e6 GIT binary patch literal 15945 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/drag_drop_overlay-dark.png b/testdata/snapshots/darwin/drag_drop_overlay-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..a8de49e732a4137c06e3c3b4d499e2f39e3abb64 GIT binary patch literal 7808 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 IRhzK?0=bUJ=Kufz literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/drag_drop_overlay-light.png b/testdata/snapshots/darwin/drag_drop_overlay-light.png new file mode 100644 index 0000000000000000000000000000000000000000..96c37116857992f00437ca35e96e4d7e14293418 GIT binary patch literal 7470 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/mode_selector-dark.png b/testdata/snapshots/darwin/mode_selector-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..6f20d1c46a8b8656e331df34c40162e99a639e37 GIT binary patch literal 9877 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%0DMCJ0sk`}>j zb}BsZXw7|iO!hx(OMmH0SwjCeed%Aag6g0G1{un5Mj{br|0C5k^bvM|hfKNZc3Ke3 zhJuWee<&^BayU1@$0wTY5m+fY`-->EM*k)gPfQ}(`&XU&3Z%~I{e#S;USHW*J2Nv2 z%vvu`r4*0@aB*?BY=KbyWg$;E?9}K1Jv-mkrqsHaCd(r*BY<%x^1arrsQ^eb)BZ+B zd)F>AY=A#cfW5YnS+6(0&dLqQ1vcRO+%%H^msnGW^r5WU#omwt6(B!81b#?rAE}|p zFRC){Z|r%C`0v#!Ou~MDLKZ;XbZ+YqAfRFWw&1m5U9I_diG`Th?NfG=+Qgn>QU7x9QWT#5DJX&_C>8VJ5ONGVhdYM;UPR zwx&980F0k7U*#NKi910=Sd3P)2~8H#zvt5p6gT9t^Kt!nJ%|Vcs8q1Ai|4IY1h&s? zRsORoTw~`aPb;cMn@C!n2aYHz|6xZme&V}LrU-yO*!Y50u2O>N1*X1zYZEad#zR-vV8@vWFMow|A~V( zGV1qt=;BJ<;{iPZ@58ka#itrZ7peoZ)R->a!!Kv|xCL=!u~2%_P=HXYMwTaDO+$rB z_r;pMQ;$wIA$SM8Vu%6M1$yE$FqN{o?keU_z1y_m&W7kvTZRIal2wtlvsDv-B~5V} zJ)`(%?_fsgeX7LyKN&&v0Kq>vR!I@R_N(naI=Vr+7`hURD_${I0wnOuhX_TZziG3; zuJVmqYV;nB8E(s{u)m2jy6t!W{5#-@q^s*MlJy0_OQREujg{H9gN-($o&I#)^bdG* z)3ENUpKN{}Ej8f|A3h^N6Jph~v_CI-Q13$;By1{X>LbVdlQ!+jjaruTDl`||)D}MA zT^?o`TG)LN^Y}^Mn1w1H$M7i35lsXUc60<(M)R``G(^N(gM}yalgIZNf=~Q0*-iv> z!S^99v%Y3|QqbS3>PR+=*Jlq6ii4t3VF>&+Qo84ursNjioq8PIE2Q?c4OB#Zj7 zyp&VX+mtZDWgOOPTJjfF{!Z9?uj_Cy_iniy%ioJW|dvA9x1vc2& zEx^0ZuC1+lOS(&4Z=Z$serJ>sO{waQoBT!e(Se^Lf!@^4^z-LR1@odCy1NQM@`&-aXZKD+kvM6ATL3!bgs6^wJU75`807CkL|Obr?18E9k9WDZdTZk!DeS zYgwb`wc1@jP0v6^sGS@d5<0`R=U8LCY8Ztr!C9AP&a!C674IMB5LlzfTx34;q4&eM zZ%jAkDXMW>;lPAqH01e!YYUQ~&xa~CCZ5FG-p$8TuI#?MTLPLOi`+q?-r14a;qYPT zlUPyP=)+y|cht_@!08sd9hKp^vzxQs}LnyfA3m?67t6LFXBvp&^{)d{y^2Ni(y^=k$RtA>VBpFjrt7WsMa128PRG?9U zL5k5S5d|W5SMIGMM#n9wyy^G44{VQTx7YEe9+$hjeMN-BPQ$y$#deW)!aVv1pWFLW z{xBqFNuzz}p3ch~@6@xu^)y)H^WIa-Erq?@x?}pYw6Y^=e=FKzpk=+t@yJ9M`l-^} z;n(?2N`IeI&5{l9nLDuy0UK!J!QEDMu*PWOh_l4Af);l7hjqe} z?CRwTvpVgu3UL$d^*;j>yM~wD4`>DNOY|w;Pu8wLS=S%V^S*(k)f;YiXlR1!)zYy7 z>80VH-&NpgCqptaqkSTxac!OL^8(2!S9gC%qVWkfPj~<8t1lP0wtx5hzn*b|#5q9e z)BKxIqJE31vHAmXo)V3+2=I{~&R<@(-~gF?R9ENFDXQ_*ODCl?I?xXcw9+pvWvV@Y zE{6S=AC52smyEQ1&$Xgpmim6zUwxcXYz;Pv^19E&CS%-SothUjd7);JAEOp4M_kn# z%W6NnxU`iP74eBZ89#lIucDbAsX7Y1vK6b>jDji4U8ZJw^}h~EC~0z}mJ=rlGI!A=msd_HF${8!KX g_q{$v#D?M^VBxt}YKr8%LI4iwj|vi%?+pX~7trBCqW}N^ literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/model_selector-dark.png b/testdata/snapshots/darwin/model_selector-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..45239ea0c4f832e94170f533689506ded8fcb21a GIT binary patch literal 17254 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/model_selector-light.png b/testdata/snapshots/darwin/model_selector-light.png new file mode 100644 index 0000000000000000000000000000000000000000..896bbc0e3c9b74d49549ced5eb69a15bf13a0e13 GIT binary patch literal 18707 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/parameter_panel-light.png b/testdata/snapshots/darwin/parameter_panel-light.png new file mode 100644 index 0000000000000000000000000000000000000000..0c4913f58aca0ce5ccd9f3ebc45cdef8aab3e7b4 GIT binary patch literal 11796 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/paste_image_preview-dark.png b/testdata/snapshots/darwin/paste_image_preview-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..09071e8061fb809d2a3274b4a6a72f598d522d4d GIT binary patch literal 1654 zcmds&`BM@I9L4GIqV=fUH5IS4jJ2?_)D(}AHC?q(!PQitwo8pLA}}vNO#~&Cyl9=-e_(&upLXW+-uvav_owg7%kqM|sseR@002PM z?N?{Sb}nuUr@V99ivv|w0RTmNH)kiGnEN6w3%TE4S8;Lp`OY!7Z&CqFNoDdN{SK3% zTs%DzOn_?PA|{#L1B5-%PY=|Wmi4AcQ?h+pcPpFhv!y?Rj+xjXjlwPV=>;i1qDGKr zLbYyw#vxZm)?)1W}l0AtBvidF!2G1rX*5VNe zZyL}0_aH}l7Y$igBXZ%>Trjt0N{W6eJTZJp*qiq-QMm$ zj&3B(rPpejjicbpG4^FVqwS7NC=i2PUznc7AHsBwUwXmg4(|Yjg^uDOFddf z8~h~Jl)m&`4l1$jj^@!1OkJjkm{5svIeexnLnh(1{q@)y52fQA;$p_$`QE#vQ$JVaGd|0mJ{;HQwFg?}HZ0>jzNW@U8#u5@8u_cFRM=M@fmxp&|^k>QOb zT4+T{Uh9ry$|=F%cWD|6=OnV64ENe;%EM83RVOa;XuwwDlZV$*3{SGJdJyWg|GC*R zg)C%xgLQz3c0CK6P|q)vaFD7(xa)0U+36^q1>;5?EhbAhm_@i__C~PyWqs5@eTQ(y z_A0%zd*tL6d&Z1nzpvyaw~Sh}+=PE}=1SxwFP0PZ=hu&7gmb=TK8JCTd~d20Wp5L5 zb5KJ!vm>#6b!opDjNu#S2iBZli4z(|uNS_YC;(wliF)GiNgPLpxYcaw0#IHe6kC2%|OphqR85+Cp!V7DtjTC1bI_PI+nbC@dEETcC z;wQdO6pS`k*PuP&3cDP(A4_3Z*KNKJ1{|o55*!#4c@ZZ=1`ewhfcs*U3YT{Cj zeTsA##CCU}QgK_kv;M3?8WoOn6wAAl9(XY#nruUr&*dJLyqO)||dh z23kE?G5CLuobo_7tr-a&8GlpxtOvf}Wt9`|J#ZI6809e3$V0Z|q!1z^fNggDaz@=e z!JIEpi}-L7kzZudz?mS$rVdy%kU_M%kS0vfZ)dBbnlQu6SL=Ip$$3QIIz4KVk%Vn4 zXPwZ3+IU{Us|k8;J>wcH@0|By@DuuW@wPXKPG;m(g?7gGKP1`rLs literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/paste_image_preview-light.png b/testdata/snapshots/darwin/paste_image_preview-light.png new file mode 100644 index 0000000000000000000000000000000000000000..ff1e9dd82fe2b25e68cfa398d763feced22a0d17 GIT binary patch literal 1647 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/prompt_composer-light.png b/testdata/snapshots/darwin/prompt_composer-light.png new file mode 100644 index 0000000000000000000000000000000000000000..50313d718874212e88c1add7fa54fd147e83fdc2 GIT binary patch literal 12076 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 ffUnZ~CPeVB8S|p5D>C3efWpML+rCO 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/send_button-light.png b/testdata/snapshots/darwin/send_button-light.png new file mode 100644 index 0000000000000000000000000000000000000000..213ae4c7076289d263e767efb15c5b4b8587dd48 GIT binary patch literal 2902 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/slash_command_menu-dark.png b/testdata/snapshots/darwin/slash_command_menu-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..7d4ab323d4493e2b52d7f067caef0b7b92b69b2b GIT binary patch literal 14873 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 R`#)Zo7XL0ITn^Uu{a-?)(oFyW literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/source_card-dark.png b/testdata/snapshots/darwin/source_card-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..3d90e9926622060dcf17f9673c6fdd7435e70c78 GIT binary patch literal 18679 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 Ppb>+otDnm{r-UW|yU^Ds literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/source_card-light.png b/testdata/snapshots/darwin/source_card-light.png new file mode 100644 index 0000000000000000000000000000000000000000..a397f52911069dc3fb253226cb2991096ac5fd75 GIT binary patch literal 18262 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/sources_panel-dark.png b/testdata/snapshots/darwin/sources_panel-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..29a75d2a3406834dadc589fd4557bd883205133b GIT binary patch literal 26405 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 NpeU;<1D7%l{5QgRj+p=e literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/sources_panel-light.png b/testdata/snapshots/darwin/sources_panel-light.png new file mode 100644 index 0000000000000000000000000000000000000000..ac9753c81ad9a1bf41929607a2199a66ee6522d8 GIT binary patch literal 25782 zcmd43Wl&r}*DgA^ySo$Ib#Qlg5AN>n!686^AcF^Yf?I;Sy9Rf6zw^H5{JcNTS9NaH zo!(P3wWq3g_gcN4^(?80QB{^fK_o;3001a*vXbfm07L-zT?`KizSDJtumu2E1j68zM*rhSg4>tkd6Czz{YVPAL_(~)q;85t{m zKHpo6azICVta8XGC_|U4d2RRJvoZ66UA;Fs+a%By-(@?8!l5(VYdv8@i>rvhzAEK0V*1I*|jOsDlBI&FE1;4 zQ~gJ8MYKSr2{ZwL4!~CnNgy3Aqe$dPd^9}G3_)_Yq9>Vf&#|H%EI=_&Sjps5t3BI6 zON)EWyZ^Pu@b#k*hoT@E!5>SYgLEc*)aTHVbpXxIVro;e9nBu7JNGv$F^ii-iRbTE zwmmoSV_&HSX&uh(R8({Tb&XBALTgGA63?L=nP-RYc$}Q93k$rc$jDil3Elw{6m-*5 z{r&iW=Kg?{r6pEOlxRsP_pKZp;=LYj+M1Tyq?2oxyf)Lof7?`FoVL0dsXJg52XEir z12D0IE4obtKC4$|vU%xHAv4@-@{~GM-FviYGuGDD6umPKI(oCobpg}M^KMuFW^Q8r ztE(YNr)*-o9Cd9%e*NO7+i3~gv0n1gIHTu&T$7ooW@+S=)~w1bY0=WT7g z1_m&@L$^m5;~s2te-#hgI7z6eB>epi7Mx$}?q@DLPf2?0gFWxV1O0pSJD-F&wvy$c z!gawDLV6F3r(MOdB1NN>%g zjHZge{}(`O#{@cJq?D9p+T#TtHn#KnldbCrXmYY9wRCpONe3W$CnB5_9nVZh_rbto zCF7t8HiVYfZWYx%?4E;-7n|dXaT6B*iRKT#?qjILJq4C%OAqh7l=8=mnvtq@Or(cnb!kzv3X14nf!E> zj1?LA3-FJ7D6l;)wfTV&0-_s0o-AwD97uy3CuH5$EwptSY(kxTvBTxO>EIXV@bJ(a z#2EPFIF0soFGhlgCv_MFz#~>%lH2ps69!;tWMnnz;e_=&6$*fYl0Z2ldiDUqjDZFO z2pf;@pMd2?o+Qk5x4UhD2^w1(E{}DH?%S>c?{)RN78F$YT{4-B5eXS~L20GJBZL@w zZD--HtEG^N8(m#Gtg;%JjXNgGqhmLmT2+H3(Z}r@#0;I*PIYTv7{FY~`~LVb8D_VT z$McP6vTU)w%Dcze-So7}-NC(1?Yq1e#PX^>{noTGJTysK+9L==qJ_k+WzLa@{e3`v zlAUXsmxpJ)oko!PJS=r?o?hdud-J*444Sw^5jF(oa=gnxZ)0O)w`aDr_)b{{E|ZZx zb9}y$0Bm8#S}6QD|HPPm5A5w4$~i^o>1l+7+&2xU9yhaluDYJ@Ow%Z^V@YSCUD}A- ziQvOLDfzD#t1-P>2?0p)HUkZ4({Xl6)L&YE`@UMt0STC%@eP>exysG~ksLE~ z_nO9n`W6#Li6T#k()7@>RrB*3sd!?=w{>T2SD6-}HLw6|yqrc2M@E3@1u87ut$l@B z!!~+t&A*Z2Gi|qehm+RT2v;abMoMJz&-*LT6a<8jfO=i=K;M(Rw#;(yB|3dQHjs0B z*tohT(Da+DD}zP9$0@-M^hmqpH2nY*&v_DZUeS0g(fXk?qKxYC&l#0qy zaq$nMj?Zj)i%TZ)9tgwI}LPbaZs6hK(r~v_wqSFOO;kzT&V3^_~cJ#w#%T!cQxIKB@ z3se+}H5Zz3tNpNF;)N@dZ|v$~PO|0_6ugmyU0N$zpIKc^x#-J6UG%6cDNB}y6WkEv;gtf5nTdI#%@B0VGMb(89I&4iwzXX71A{8#Ujfxd&cQXWV;t`65JXra zg8XHuJXVK}x$@}vm}U#&cQb;xIF+MAm8NyjV5EZ|T3NN@GOog=>2Hbvdm|wczuRvL zde(`gn?t+FvM8vr&nnd+Rn=*g;&xpRl1#UH>V`kv*>8U|Hk#YoK2JWq|E0iC5q!yC zomoW$+cY`|Pco{LJaB(BK?!56Z0mDlLrCP!CkHxyBtD)z4-?*~Bdc97VAo1m3s+8M zO7jdwE%~(USNak$nj2Am@$a`+vJ^17lJfh-uEVx!7_ZFE%I_d-fM#W|7JQqIPu&d%;?X}L#Jw`3ALu^s>!lONhmVic+#S#elCy!c@$4sFrb{;p%&B5s=Od%s3u?RX6E<~a{j zl}#@++H$FHYE+h&r+~+e>YJI_9)Ivq5KgWDws3QCQSww99o$lM@p5r-1!A;xl$FJ| zKYu6J-BiGf492V~C;(HMsoaTW?|(8{n8l@IMoo6l@?gFZ&OUSsr7#w=kMl@Od`7)f zz$5k=Pf!a7^P<$;SR(T33JvSX)T&ijIyTW3kPg{WR_35#!IV0(emijp1}zvsMJ1Wf zEA;n92(uQcpjHctXH@cghrvUW04M<5!>4=t5Ye3s<$rAn62 zcGgvVUXVPPEPkJI#*Cv$rBxzsN@2i_yWFT`=i$j=Gkv?ds#9dK#){BSn-2~B`{LKF zN!$3FO~;5qUCQ6z+T6S`5!HH@8tJ4&%x=WoLQ)%aLPWR%&F!2(@TxuJ8VI@u~Xl$u<##`FM2+|NjEO*Z-21A`yx`?3J?GB*MdC_1+&k<4&8G!{?mW|{P79>+Wjx+|04U2clE$NvWcI4l%XIX#=d`y zmg?O$MR@ku4L;kN?fZt3-Jb9!@s9irHm1j$-hJ$Z;X=7k!;V^S0 z-n@&B4N^tf#cGwloe2_N2Xt2Uz$)npo2^p<1eK7Amwfi_7xK6$oPUqoJ@>(?iG=&@C@B(J2I; zyPSHP!l2QcW0`Su z-pwgLe|Pr?^jonB7|4ODsadS?g~FZf9hn&e<4U@FfWsERt|TH^+T`h$;5g+{@9!fv zCyi1Cs>=>MSuYOv{4_Sx!raLe%|sD3e2ytg>PwBB*>B-EfP97ya;r~UwXo%HWeR|h z_AuV^rQWSy7N2i?s^ZGHj&~p}b=@DC=^wYG-dwvK<-f|0ZzAI?Fk?o({v6M0^H`9l zps>)(%F8Aqa0?eN7{;{Jd4DSUc7PvLHS@jl!U7{RFWu$IdfD@Y-G0}1Z?~j=v9O35 z>*0u)48{clLSVkEKa2VX?GH986xhMGUmC1FOBEq|WDxk|a2kXzMxGQ5PZO=~4zlPq zHI&z1-z67m#K#XFE9R@x@j})Z2=I+(aSA*rdwkzo=pv1(FI*m<|2-Oum^4@F;*;~3 z*_d=Oz~ZSF$z(jdClnQ&_9JB{&=))WVZ#7JjKYV#-aOaZuF{?*mtR2IKtaR6|N8`t zQj88f=|&vRU$eI9PlUVRo8(WdmRySpH-i<*B+AEV)i$vC@I)(_DyY#h^WnYq(iyy%wS#9*Y~7V_Au_y*VM!& z!L9#oJ%vRka&dB&<6zTj)8<~QVq~N=0lJEg^|ri`kB!R#4cXX30Mt`cQ?YWrzRQ_^ zIbt&Cl2=q@;^uGr-5MeNt1IwU+IzP6xTLW+EUW`4U_H*`Y1j#WUWJyhILpD68~gVw zcG{0|mqY?;U|nc_jYM=PtX=FVjY z4VVpXB~@0}C@aY~@0`O>N;qTg@3)+Lk=0gW1>6&6jP1Md6*o73Yj0Ot3rMl zgBIGT?(j-kUDZfQc^;yh}Ld2$SsRM5f6LHzYpV)4Pt4G|F#^0K;mFeoiNub-9mjQ#I@ z5tZ=^>(Y9J2Zw9y2X#0-0Du~m`p6;Uex_@IGCLDGv|DR(z0qbnM%Lro$wDXjdQq^L zj?0o!SykAp0AZ<>mR?fwmluzV1|aI;v&S{3H(F6)W7Iku$_NT}`Ne55HZiJy(XI^+ zyp<%VM834N*2(H=c|K=xZ(2{{c8)gwbgs-Vh6XGjbfn>2YxPNv zuc{gu&zwk5veHfm05(Qa^|P~+IRI9ZndV#*(13rfHfk0}3BM|}3;V)!SWO5Oxfgl4 zpaHtes}{w@`fFE1U9(&r)qBSvE1zGw0 zNKr%a!le;c#XV+Vf|ZqRs45t?W^4$}2bcMlt&59|Z`(Ysmer0is2D~^brr21X>}xu z!WD6GaNg@EFf)FTrw)f@?GE%;Ffz0Uo5tg4k#Xuz|B#PU*i1{WaWRTZ7d;X^dLzo8 zTUe1RPz~r}DI^G?i)y`@nI`5GQ>kq&8(tsG%0S_mn9*L>2_!uf@&T+D=7)78;n9uxOXts^)+(nZW~e&YgsJ*_dKvarBMh6O1PZM)dyHH2j`GB6t59t$g{(~O=2J@TjM zUE9`=qGiFD4z_q?SSaQQu-hYen8u(&ci~&tegxSO655cORZmRN)W%(zJ^kLZF1Z~) z;?ge*{?luzpky^stXAH0v6`SwEL!|t z{->@5ZLM2x7ce%vA>M>#RVEU8zU6#b)%^FP9Vk%A$ardJzguYj)Fb{8`1$vKtyy_` z4u*{Pn>FxC@o)`vjI0D+mHqm1l(%`gkrBxrD%sTS3IQtsz*`Hal+A6Q88^1ErdHg{ zLz_CX@3xPBa-d5%Qwqn$Xs;}7x zgmp4)k4IE;YdqZdFFl^N770o#`>g6ycCeP2v<(&GtB75HWD$OzN-cE;jyqN@NGFx3 z(t$29tetv$drd>doE7B1m#*@+-8XrH!S3~m?2keDz(7BF=>`o=WbF;IQas#N=M;Sm z2K+@2>3V(eCF|>h!%7nr;9s-lt&Nh>Zw$lZKWURLM#lhvc56-7f&1~FL?dDzgRNng z9qjk`A3wgm09%-|ug!eUuXicMovOB)Eo**7)@JZZ%i5gW+1kv7ax3dRzKv+ivz*X* z-g6Tz7Og}pf!Mp6OAdNR<~)E##%it;-#mw5E4nFY=xy7}%Tr<-PD}E7!zIj$E}~;% z_-nnAzyHVq2I>boo)3sj&D#D}J2|Pz<|zcBNP*>w@9`3uS_+}kIDWvQ*A^y9&R6S- zfP~!bEg-KiZ8h=Y`NnMQ){BK0iHYaV%W}X15LH*d@t)$09UXm8MhX<1qVjBAw`8e= zCZXWxXYB~sJpJ=P(o0Es8?5`sLjz2+>Zb_H4w63hnhb&6uwPUk!Q0Nx_~npw_7o=< zd&%5!SE7S3epFwvYf1vw|0YRGgC9gA0YgoLtPSaefrWbu{;TnfPg@$>}{)3a`$p}Pl@`e;IZ|C z?~MZX^BNZeLrqoljErETbe@BwE1L7^Adj2ozYfT`X_nx?Po?0W%M*kiEDGW8AP0Cx z&~{MC?Kw3C{R$Ndm_jGX+SK6`h=s$R+v7)|{$CiAJ$OK3)Tot=WrxWQZ%gY*Ls@0N z#Km{PdR?a9oU~DW$7+ii-7c-H^@D@7CMLm2eM7Oau`_~ucm;~IsRL$#ejVM^kcyw} z0naCeQjA&I$;0S}Q@*b+FTq;^Pz6v0xAz6^LgczSLsxT4ywV~ngOHwtn}GN(bg z4pn#oM-yL1k(Zi?kdRD@A_I?*qKF#6=(#^>ubg+IC@bq=dx5$K2`HS+6|#=Uiht*!#8xu(E~~S$RX>Bkz5Iv-hW}k|a?gvocJLP{?eP9gY;t+L zcwb;SjYqbw@zV1ad4R~;FfeF#@Yw1SVw;{?T#Oa>&HMfx9^muDwmD+k_V))tI_^Uc znb3+oQs1L{(8-=2BV!c(%N!^teQ5Kwh!1A-awXZMCTJuF&bva02>Boc>9PBs4yAzV+*}2=oJQDzE6fZYO z?V%=MC{bu&Aewi||8eKxLP%3pmCLij)ZP7dB-Q%;Jsg%lugf3x`5DH;%S$<{DkCN3 zVNPZ3<_59&SMd`T6*|2BYSzxqj*aIYH&~hBe+2_m#;vHV)vpC#boKPU*6WH$k4glr81gs4TB9^ zV{Gjr^jfQgP*QT-10A_A;dXdUe4C%YdwUbd!P#fjseu59i@$M8SL$eL>KX7u!+e_r z33TYJUC_BYC?CXCmC^Of{R}PWE~9%`uJ42W_L7xlK03x&RZYxkY*FahVQG_JTh6~a zGlLq{=j(4G96Tv-EA{Ynz5Dha-fCD=Tia4F^P|1}C5_QgBe%4@y&ah^Z*Z{W=TBWN zt+byV7~pMho3@~m-oc}`yPn*!7ZT4nee}wudUSR9`*6Sk=;-MQ36)1i{W8Sejy11LM+E{JE{#j7Cp5_Z#_Icn}S%-N%Zoe6S8k_ zwDO?D{=*7i^UWPN(k@G#D(X$`?11H3sx z`BCgp0(lF~`KRKZ9v>-d$seT9u>L>pzp=2V7w0{`MMp>9!P`<%g+Jd`*XufX+;s_c zpzU1yP!-X?Ewkp43OlSdQ-QNBT3R?lLL~IY(N2H%8+>2pH4eWXNEA`1Ct6?hg7;(7JSFy$6#1FTiKq`?#yIf6NjH8TTOv*@?7G`T}^X-M~yv+p$ z8r~HBNdbfisCn}fD}VjIRV?S{yxEx$6LUTSCrX=&wUbv-QE`RG0fu#J%PwfajKM5@ z^UWVWv^6ztZOXcWKR0);Tz!4pHvGMi`N)KfNC2W%Ry-nCb8*NP5~Y=ux85iaDQRh$ z?0tJHjhcB1-NT!slLw6#qL!9vt*uWnSTe4BGgoy6QK%#_U5|f8M?0sGB#BV=Cm;V8 zgk*@y$bKDpoJJGjW5fTCtAK=(@aiDbZMRtXHKsGu3sIaOU6mB@(T<6Z-sySzpz=AW zAS;UwAMx@6TZ<%|n``{0fgD65BSUR*_3b{pt21D+b_8S|ye!-H&7?2SCwVCi9B@;u=vdz}TCJvQ6-GhXY_z!?jl z;_T@u7*w0E!E<-=|4r!X43DoKWymfu{PqKK3|pL-BgJFlqhH>Sgdgb6SrlzG$A};q^-VI4h8;BwZ z3fS(lFy&Xd`%V}Bw{BNxd}kklwBA~Th^KvFaY4xM=l7f(N(P3Le{8{X2lwxW|Dv-0 z1aC2}Otl7r!5b3Mj*hToh8%2YzkdDthCUXlc=2b~^_>e`u0B7fCdkAH+{rI5&y@Xv zgNysI{tUKPj<#@FV)Brsr7kE3o{qLQDP!Y{U4+NrPzj=zsnD-n@c1ZZHZ$ZOpWpIB z!@^$NP#}PPr;2chh$kYf@Ff4A43H@@2{?dSU5G5{PAk*26T7G!y}2=dChOmJxp8+F z@mvrlo?l=7k(w!Wd?d=*T|InGO&cCl(mr5SUzYcTFBv4Ty2vBwOz7bVVPtT(y;{h| z$~ylECL{ZGD|SWPi%#q03e<&>P>hU1655G;(h5iuM=HX(hq{XCZPiULM>960W#ttW zHDx)%Yd^@~dM|fOWTxKe2i(=~r--r#{D>dFCO!+YLqbeQRDlyc^V?MIsb9+D3F+zY zxepf?R(v_x=q@cM3wC?3_A#s_oQ?5hA|jewni}*RG#cBGKpCcN_zY=;CuFKWGm;=e z=)N2_Y&wFYGE9N8I=bnljJ|D-BM*g+=jKFIA-^a_lGa%QCq@$7IM4Ukytahn9aRnUU9u>lpU4MM(d?J>KgdNyQZqR}T3v#`K{e~_ zERq{W>8V`OZZ=W2pz^!x=$idm1VX{b(lb)uX+|v{lm6XMq`QIFg%7%WOML;vIT7MX z9CfGjgSAvRG`w1u^zT3V&FXhOJ+af$EG;bcn6!0OuM$E| zR|p8qpu-v}7y$X*%?}kVQ`JPgjkBE5H*Pnvv43@HyCzx7d~~!mRljn$)2=e!$SWzM zw&A*n0NdLe{BmkgQ~&Y>UFi^}W#y%geP#PSm>|Uf@jW%u_f;Cdyi4eQ#T^vm$0sN( zd=ZK-#&i{HVio{NnnX4bXQ!&8fwkw&&2cxlmcm=q#DySaK5(T#6(-?s(yghjmb~3I zR$g6$aB~}n+;t7?5minBEX55i|k>Uu?qk3aHQjWI#f5D=*S@RXC* zUYuIXRxaANuyk)*M;mJaCvFXR`{=Oc?QS^F>&=mFjA;aYerCNfF|iGgZeGlV0s!5{ zo1Wa@%y)t7410=tiZ84CTj!^|LQqLr6;qTSpERwWMp1F0S;rp=;fufECx^BA7%Mv| zX*G=jdH?Lo%PVA0a;EBNV&mdYP6W|Y(3^5iNXp7a_wDalS!V0$d3ky@=vK9*hFt7#dbs9X!6O&N^lE^QjU_^ar__YO!K-N9j#col zEPN2wKYxGO*xU^AcJ%jmc3xQ2wqJ-PztFUvTQvwY zA1BM|OL^=fWxFEaY9HPwj`eVsrlo_$Ux$f$6WNPG=0tENz!mhE#Fwa&Cp0EOjfhOp zV)N|QAlDmvbDKm>oP&<>G1<;%*+pqOWsIBs4*m}KlcL2q7%8NLy1RQygp0xA;idon z0oyJ5b;91*u+#25OU+!GY?aJ;`ZPg$7j3O)A1T6>h_``1XJhNkCVOe!hV5+iA%P?b z@A2;-#O9_zixVed0&Jm6M|jb0yAqKQ&CbSFK&6vrQJLN^P5oVR{2FzJiJt_0Y-#Fx z#`?_+P6<=f1(l0c5CA6qdOjQiB}GO|sDDL%d3TKkmTnRaZKRAc48Xv5*y;QlQhmt6u?-jqfCnU7#WBi0J3>7(=3J(&OxorfUc>qp9f$@{H4 z@sQERMl^Sdk>To~Js)vmS2z@C(&d&shdwn19yFQ5DMO9X(cWQcC|jF6qKds>+tg@& zpn*QRK7jQ3+qSWxyPNw;Q%$>O&JK?`>DR0cWsKy>z9mPNU9RBF={Sea&pEQ7Dh zq0>lT)J7`+DV@2VJV~0$si`rpvAUXB4}s6HCOjM}-1PlB0H9L8j49-6_*SVjV)~A$keWU?|XS1@l(|?SXc#RordUiNn;v!^bq;j81y!?E77Gcf+^E$8< zknt^lG1E7p(Tf7}Y+uXi^0X0oQei|?q+hCZ;ekV=<=BxzxZit8ot4w+saKgybv2~0P;5LNf9#9ie6BF}- zt_k$6;-4VJPV-})CUqDbeFbHNd(?hWj)@jk{7t@8DImxHMsVjx8)wPpk#Seip>kUV z>_Tr_BD#hNYi{epNB(BX(%JdjVdh3RjtUo_<3jZfLhn8`G(3V9U|O*JQ99y0zWkv^#AE zW61Td9vm>@v1U&Er<^h+@~)67EujsWEE!*Dvzm#WI`Sis`Ly=)wO+XrN3I_>e0!&j ztB~!~FQLjRq$R_A3~*wljr+}%0B?2#HkTa;0@s`6$?iR*PLx?CwI8I5-iFE+PO8Qk z`4UCIOnH3l_TieM;YjwE4vUeUlO0FV(SW-x0Fac9{#xHp?W;7=yKD&rDHqM?-sI;A z`Bt2{BCJr~dE}Sg()t1eLcf}xHBccS#JmRej$3`f%Sf}|gaR-bx9tp(Y`weAS&ci8 z?u%HpZqb4JGECk2YaF-8vE@Zw&{qKXM3`<@rFp`yx20sC@6Hwk@bIW9S~||3HzKfI zn;PIbytwt|Vwg0nf?vLlMFoGPLgjsq``t;h!1oU>dJSYP$Y5e7(UMxQ5pW(#t_c#k z=(TxG6g)wV45`$uoJH1;F*Q{#)(8{lUEOX|3BpBzt2Kx@(d4og^W#`@QDD@2hIwi^ z@U*qpBxGg^nB9g#xXH>Qm}wl@VHs$uKfV+1;xQ2DpsCa*UVojd?+@oolu?W$2Ik13 zce*?`yo;QD_{>>Bi#hmqdM^#tuQ;TsXZj`&*L}2z1g*RA{KOCvFw@^#7$eYR(Awb+ zalk3b52d%+ti$HwOI%{aR>ZAzyqo7>k08fZfQ|}C7>F>}m1!Ap;PF=U58G{>u{jeK zQg~$kovK}F*|=h~?=WNAbiR2+h575$1I)%ZD&?%OEgN(##J)5j<9D>HmY(<&WF!+v zo#G&Zy;qD@)2Ia(L4tJ61gA5y2bTh+h8vnyc*qL5Un)x2VvDQky_ybzL^qCv&5*mr3!zmO#^tb>BLVWxZpE+K7~R3df7mvQNrnmPl+Hy;G@ z8O3%)cYf0-UqXL=`?obc_JQ)B{J{Uo5JUnQkN1dz6Q3=1T>x?C{J9C|qI|LN#bD&2 z`XvYwLQo80!ns00e*R0IBCJrtWI!mE9~=qpl5~;!cYjq?)ps4G1bN)0Z|kRxyeVzX z4|ZBYfIow|D%NZmdy(}p;B>1=(>9+K$5A$6+JxP&>Mrw+Rh`c@Mzc&DP>o*EEH7`S zBCOdn0&#G1Blsyn1LFFUMVxwuL^aGwBL{+?IT?2z(NcBG4hM|yV(45p(=SPC|BBGa z0-uf^hh)gWarpmql;%m4!T`H`RZ6LMm4i;wvciT4+aM(-ey%7kii(N74@wox&}qgd ze7^+F`w!2f*RqK;luYGoq_`f=F20YBerf!?P97RAuwci=*6cw~+{KUOVbr2oa&t>n zhY;=Tl}=6z;x!M16Ix!3ad&tPBaO zalXZPQK&hUVeVQkH5FUqT0%qU&=RktK(I$mrwGR>|?&ETU zNz`+X$Wo#O$yaNXcc{>->1oa6+mS!M$kWB*;^O@ad7?%^8Lc>BXgJ_T=&S49ft-&| zfeEBkSkg?Wh#hrnK)%~M=*bO+0j~m-5jpwyK3MQ^KQStk7XW}ce0G|71@2W-4j6VE970H4{SVo-z+uMDVZc_|;31^Gv#EhNe2V7_YB2>?o^lZ8{Ao14pI?pitN)a!o*P=25foZkygOh*2OH%Gk#T>o8$_e(9{KiTp@ zF*pF*bNGS;r8vsODw4^0&h<#if{YgoOJ?fFJqwumM4@I~kI>>yr3*g5P^W5bjdrb^ z6dQI1h?UNzq;;uDS+>bi*E{J5ZhRyh^R9EZ=1w|$34t~)K$mev&rReN`J8r;7`)47fb>P z9wu?tPwdNs17p>nrRwFderSIFR$L(E+VV7zyfC=A4hGV6K3>nM<^l*}c~qWU4*5!$ zpu1C4*bp%M)dUctTwAFzEJbPt5WP6hsUlkP@H?NT=qpjmoGEi!ZwY>^D&xnj|6P1{ zo!MBbUG0;kTvS?|%fiHvuS!o9^(qyiA_hqLiOq@)#KAtWZ<^4cRk62G-5j3WspID? zow_0X7s$xl(OHN*bX~Y3Zf%`Wo?7bP>i^pd7of^mE2pGT9;Cj1Op!%Ouzz%=NGgRb zm8zkPE5cyLzEbo)7y%sx3BXL)^=(};Eqhl^I>MZ?egAj zC3do3LX1Nix4NC#jfy41T)w}&jyfKCz|A-jH? z9i8%tEJhv9L6|6(pDjl*RlxfIM8H4Io2d&YQhOcetGg>jIi+S*+H>)WPGzT+q1wZR1xGz&JZ zpZ`d~Ej>o{ksieb{CbC|Az5Bi>Wuo)Y_pn{6OTYBD^d3&>`8*ms6}4jwT{Rm)0W`IA z5TSde*cHk(PujS4a6MNs{$r^oj2`;;dtz$JvmcoPPe!DgA8@m zTqyuw#h0lY2{t-{c@w0O2nA39=tm+C@2v@x$vz?TV+#w_%3`X>05%?SS*DbDB+?{P zUEL!|UY!>9pbr#=(^|Llv$GNzY2Q}=ZXx$(uz8dxCkMi)SS`hkM=x{4X3pln&jFi?C>f&+%lOv%IwDX-Y&gcSjD3vY!$G61_mwCc#59-PbRc zNo_B7^oG3%3IITqGP1QD0d=%6t6AX2Nv(4bI`$fD%OsKM|Ncr3Ls4c_tC=JJ(N0$Hr#8KX~W@0C?zLnWQ+eG1LruPtt{xK?wEQbfvG(m!dqk zzwMdlcblAaOUBzz;Qv#Qs>K1)f(z|}FPBgY`XjE3unc6jFO_*^W zAv@QGUJg0_SQ_EvV5KFITW&ZmYKB0f>|EX1_^CRFrRVwkP;kr~+yKf!LzyBN%SQZ< zzr|_w_N>v#kc4X(4q~|NccUV$dtZBkpui>=I+NjqWx#WH*`rK$#DD?mujdbVdQuv$6Wbw5RxnkRdr zx-Pq)`i;q(ndQdyznT^o}i4t z)76#6UR2?`K{m*}FFsRYOy28keY46D7GO9kTU%8j3ZTSQV6iryKlZqnm-3oKDYpRl zR%iuL$%wE7dYtud-zgl<&BoBFchq>=b)CZhH)#0g2W%QhQm8$I1UxVqZK(qe0uEn&r16fC&c(1}(8y>#oz*BUBiN*JPP#{EX{Y)3xxN8KKUAx*x( zW2Z)##aC1Jhlu437h!_e`(V>JV@8X^%h8{|d8?l1`vTyiT9e~y3iFEG-e&gpah;=M z%I76x-qkf#A#JLqidJAPx&0Q!x`TAtyfuSgmG+LVi-Z#U{jU>N;sfl7&T5(fTZD3v$RVG)J}6xoIx>29fv^eOsBhAPZOuif#yM*0 zJ`8T%BmS3=kdPi)05efrYCk;}nmfsQcKk*;xbGrBf4;gZ{8sIL8)yff3j%-7I1e5| z_LS-M^o$T&^RduF??0W;3vmB$ozTZL9v^vKoDlXW@~=;Aa^w`Ey_n4rS`S_1bdWo} ziIlBc6$_Kg$4je;lfOZe9wp}<-N%}1`WasOr<&`oeK^TV3K)3UmN*t^G-uSNQR~ze z&$(k0DCm%dWIMleKTmg4{U`mW_}dO|#{4gpCXv8&^M5vOx1dSNHGzUb6X2Q_J5$x0qcF!|^Y!dy1|Cbx3UmsgSC zI`d0XEu8;$u1vBb15b^&h>1zKsfj1%To^x{Ts-CVM^OyM+oG0XNfqxZe#YbP9@jw9L~JAPXS!eW@PO7w6hkd)u`^@oVVodG8Z$Jo-JVCFVmuQP{2u~MG<0N&)B`&^H~n8pXrVsdFhAaI zoPG22v^E{m+ z5g4tkFuu8RxIB9kX21SZZ%z$e-`G4eI~dgEXl`j~=AhV`G`hIz=VC+mI*7tnI6saY zDQ;?RDOHv7%f`XUiRAC%zklQ{ZT#2E^$oFz3Ow231&U11XQv>!kr8ptql+E4+PW*1 zynwel#4-GtkzLp9?4FN{EeQ#6BzN~r#peC@M|m>gctjM>2JhkV$q$D^Wiv^(+0bOv zc#mAM;zqmFg9uJz(u?NBMYV#0)zwwF)RZ7Wzv3sc%w1xC?v@yNd0{FYI*?}z&YqMo-Q5zL@RKd6k?=b=0sd;ML8KT{^rg&DJRX1#s&29tVv!nwwN z?d|IaR=t)vRZPrSJdKyB_5v=GIR@MeTGrydFqJflqe&lwWPhB+9(_gT# zP<4bgU0(h`d^RUEC+b0Lk)33}{mq<`>urkWHMO0U>SWs)J8(tKF#n+v21+HZ^ZB1r@PBiKpKXb<7#cBLfQaPQj-k_E>fXrIqL zZ7t5(*_mxX{^QeAds)UJIgU(4hBULWuNb{1and(H!9}y8LR1i+E5A@zd6Slkj`wlz z_p^1PUBN;4DV<;S&?YiQ1`7Ph)ya5f*EWU93ufi|*rTCcThyh7qhnJ&S*fY_w^I;7 zL0e}}VJ`ob&evkjx#UFYdo<+r;ju z068`yqkRQEc5D}jWSb+6X?*-WFo4C{>R@9m2@&O&dbx(L3Jadh7l5eT3e@v(le!xH z!~FQbOlTRImPv51x3fy`sMZ%W>RbW0h>@@B%yjtp#N;QY#ZXiv_{ZZO#YJlE9_@*V z%3o@4!B)VL$wdD=&P4@oaZuEK>Op&Zx{wKuGbGG1(Vd=Ki`&4To%I`cil~lGY}2`8 zWqSAZKvsL`Z`g4WG&CAxWc<7v8Ja{z1s^mF=on-a4RQ(Q@chDpl3)-MHzOylpg7Jk`p4)JmUqzo zeg?1eGP&eT|LzcB>-y1jUDBq`LErpdO_l0<4;@|f$X7lAAW(oWUK=7L-qF-dU{?Vh zdgb={;g9bvqJlhFePTuGpPi0tDgXY(n7ep+1bl+F;v{#@JG?J9dbU9 zt*+n43RvV)&cQtp;RO#-KqV{>Zz2N1lw7;5Ob)PfVB@o~`I=wg)Y`eY3~H-pTgl_?)8I%6PqGFm^PmfAP1b&S%-99;#eZ zv7V=rmc0Rz8e8hg`KhDb0j5D?>EQxv#N;Oukh^I?!29y)pu@=I;zjWK>SMFpxX_Ar zVROb<*HF|!NCjLcU0T$x%$WSXG13!wa3<%Z5$@*im+s45-B}pF?58ac^rim7+tE>) zP4{zzzq&H`2gp64EK^9RHi*I_mlUX;dG|K3m;WacoI*S{+5C)_o*QY;Qr4U-UR^Ul zio3ut=+Woqc6~pXj7v0B##U4?*jy(h#us-G!W!9Y0RO8+nybCwMprZkU+G+yMyuOD zVd?UZ*FN zvE|~j)_=-DqzsttZGMt6OcLl8W=VwEl(2~_S6435i)j@n@|c->=f_yMgrR`F`Aljm zs@;<;dDJ00&$rdyov=55?-#h2gXPsBmZYVEcft2CrZLuQ%%EOF)rF44K{r$=Y4FB;PJ_Hk`(1G59BJd4eTEIH-Xm9{ojwUxDj z=C`=L7}&TQ&i{C#2Ppra_P#o(&97TGP^?9ZwRoYpL(xERcXui7P#_f7La_ox0>!O3 z#flUt*5d97g+Ot);(p%m*EutH?w#-4zs~vVOlC64n@Qfa_g;J1e%2Gtrip=xId~rz zKLlMi!ZYypr}Rq{klk4BTkn(8Hz$-Lmr>)T-9K;I+5!$p7UGQC2Pe8%I95GI3LVLH z``~u2ICuINCP@G#WoH7hyMO?MDMRudlhMO?Obv0Nnf$V`25iP$3v%U>8lq9 zOZx{0lT$Na>*{;|tXY&8?Y8jm1_s`86`B1$7U3A4OR`XumWF`xT3aj1qMhuV#3yi- z<@xzEOpKnB)UrD(cJF`B+^2Fm_oUnyGk$Gt{awr=IW*Kl+A2^^&*+Ut|ITHalViE- z;^+*bu(voW)Jo69Xc{s7&2|6!Qz@eL%J&k15s5KKo%)_L&VaJ6zCE84^3tn4SmMVo z+`zjwvUL5FU~c>&skHFE-fmr8-4s}w+N{5$(UVA*=Jk;;dZ~J3hJ}W5$CTkENy*P~ zHhOV8Y>aEhvLM1jLeE?Hek56~pCla)erpJSX=@pMX(5~bHQDLM5C!!N+^i)asHg6- zG|HywaA9xf02Kr8P$2gq$cr*Xl;9+i154iAk53t}%7U`7QP_KoTZ<<;`OEyhjGTl%GYe zFAkSgm620Zi)9D=7$3J^y7&a`&Tpvs_q zaJu`{!p7HRk5wS^r>$psIUDuNOh(41=2kzw86B`NSRbx8H#agdGc&V=0s6H0jJpqS zC{EYF1W++%A@1<}vGK`*Pw5#Jim%JrL>C}P6C?_#E0ngUNS3xMwq!0PLOAoe(5Fqo z;GCs^z0bt49PEey6#PRz?iUE;%p=g73$vV(NVti4FsSp_Of?j0$#M+2Jialo&to8yES3@&t)CBj(a8r(iBqqO9ui8 zyp;~B6mpJV>gRT@bcu^Ic-!b%L%Ba^2!SAbq`T>ol-hwDLuTtyK&x8=iD!8>2F`x88G_!`2mY-qbqwGGvjlk zQj7vqa&dA4EL5V!1lHr|c$53H94@~bKip4)4dYOIu+=8<1IW0ZVCa5F+#5jLoLdvA z;ykIZ7kCLWB&AZ8Qg9ZK_bS{Mq^SK|?a^$atbB9OCL;aLU`JjcvrWjFCGn))QTNs; zpp?UfBS6e8roC7w_yshF0{Z;=1LD&+n~7Rn+%tIHtFavMwyOrg_wV1UWvkJdge)tV z>~Al7fv>{pF_ z^n#xQ!2TIleS8E0mJ+r*u)9+R_NejhHbZ&c$)|DG#eE993L{e~2AqB6#a93NwxNFe zuQuebL5z+Nx*ZhrPC;Hiy5xSuU<`;y!1gg(K!Mh~EvStj4G>AbB&^lu=L~1HMas5>Cj7%1tCXTDs17q zm+3e|C)e6B`%QThi%bM_OvZDzNXH+%J^8N;&9$?{3BY5R-~g14vUCx6UqblDy-lHh z>*bQMoV>~UhK2@n|1&Q<{{>SV<#$WRb)yCqSxEy{_U&i`;*(H;Z5AW7U}Yd{Lv;tfn|ag|z>>Wiu;#^GL|&J;i>ULKkh`qN zB#^|~OwPjT;>s5Y`3iSfeV@w9w=>(L+cyrbt4NpI^4j4 zl90rleF)W)2oDC1qWVgis*lR_NtiYaq#MqJQjHCbt?mH$h7cDIk1-n@vvm3VO6PR& zTZXN8U#MIWEhv51r2x8hnv-+Tl`jbj$&NGKez&4#7HPuyaCNQzj4L;|pjd~IEOl#V zXM1-WE;#LQdmWvf9XRlAWwueTRwm&1&s7TBv#1RBNkpp(qlnL19}r7u6KONa+YP%9 z(>$LKdzq+ku(ky7J{8$81fVSan)IvpD~6|n%Ob33l9gXv zYNTnUM0~Sl8PKP;ohoO<$_F}vBN1VVqm}aD_ZaVMhgPRvX>*x3Gp7w1_Et7j5P?AM zYIfq zc?xhI6D?!u`~kA<1I%V4xBbK%c8Ri5tcvQejyGvkaVWY%d4WuCs@|Am+6()Y(HYaY4a>`#a&M!_yVwHoT`~Z2FY~WiRIeD>F7FEk5NV6X;GQ}4qjb8Ti~(pVC)E4%jIRnn#a-9J~_t>;0}G=g0C zZoKKDf2gait&1ESoFX`*#~C;YnMTXVpB;VFSe2>xAXQvx-c3SsthXf^v}sWcj_|7~Hzi?@ zJc4{WDk`dmKebxS#6UO;c93E^zek+QS|+jz98x}J9 zoB#azlb$eIg|Px+`vY~JXE@tgjbCY1#tQ$ed!>GO8vW!E5IO-`M{|FIybh1MECiM5 zuwl_sYj0P02_ZMs*`h07~&} zfcOb|w3KgMU=9YD_&*Q%aljsBDKbGG?+Lhy*&xYwH!}vz%%$cr*CJQyDB(=+<0CR3 z-JdZ5wZ;AHJOE-5v9icz(<&U#=0`g29*4u**dWutmOA;Q00)4J%O*nf#Ca^bjJe#>_%x z>%71ye9aT~{C}t^rs*K-LH|P8{a24MJn%!`qHiRBqF3-OV-b30@TrR0$s=Kp!&ie9aR4faS@iZ-{e zY!l8e5c5$5<50TuhTur78-5~&)<}UFnwO`L&&tA9R;p=Ve=)Mh3zd}iy$th&%WqZ`#!cVdJgoDuj`MG=DabeM*t_J?l^rk`rsj@V;!y59YJ`2Y@nEuZCJXU^EpSqjt!q+hy za7PQq*ySedj{al=R&hDeH&J*QzOXrl@-KnZnxrvl`QFZ#hnl&5Ptz3?Jjkx`MkY8k z$+;Pj*ZG>ilPDEIK>vh}K>2lV7r6BBS68|qq5h~Br-Kj{C{J~AMtyK{dmMw5f_F{X zXU&Bd1WDV6XSU@A?Cn0+DsoEY87&z@{fY0syziA=3ML>sLuSla^Iq*-VF!o>UuVq~ z_4I5$i0Yacl#W{Zs%E^l1R#OSdy6f|-bGGcb`w}WxX0Ue>+Clm?K+IsC7E~8p*aekTa4&pegL>=41^VKWf)GD(GbI@N6MXo|K zq-A4gmfU@MPHrn(dEoE^KC1Q7%C2q^k@1F;XXb0`HykFfUEI7kx@myH=n2ePx?5d- z83!PXh*J9|&6iK5(nhna92_|f+XfNSYtyx>|5O`2$}5JHlt|gliw9rdl7I6IN#9<9 zu?fxa^Jq?B(Ym_0_}G^wx87t$V4D%InYX@q+QCFRR#(TB3)$uMSo;8aU~<^@mU3N& z81R{kaxwJ zbAPwuc2LPX0;OiC$m)h^y2=KRC*|U7triU=1MHtlo%yBD7NAhDg$zt@&p4G=yNy>N z6Q(9j<>IDyCLYn&ThGMUl4>xol^(Tetq~q`zPoS{@ABtVM-?GVo5A@Ue^i&Zss$ zJ!@IVXIWUt#>VO>Oqnn7o8Ol%QQ|a5z~(MkUr%3`$B_LAtbFjby`$5z??1b0Gg+d~ zWh9{KaMMP%+svTu3MfH62U7(;O)lsC^dZ(acX2eQ>)o%Ws_)wl?eO-kVTU_d|fJBld z%=>O?7G>#?M05lnvR%l)M$NT~569GVv`~8}I6}(syJG}(W?Yknrmkk;yMp#T z->R(a)lB-Zsz~E1F3l+;=kRuC7T)kSG*C^RH5ILT$@J4L8f^+iW;aLmIL~&Z_aITI z1UKK#gZ`T+AV!(>z(1HvOZgZ@0KVu*{@HP5`{x5$mwpwXu@n>(HoWQYQ;SifiI3q_ zqODdvGIFrA)IYnI!AP8m!-v_A*JNZ2y}dAE62+p)j}>q=D)G?T=%3Ag_fl;&)Z)7w z+qE}Xm$#S~bPR+8QVA$2<@DtIxP#yPy_Z}b+mu{gPNcS6-4<}>y=o^=KTu? zdyUUpNWHN`o=$?pJ&7sXF>uh)1uH<7L9-AVDpjc8Zhv}eRxo7IR zxCV9oT{G+b_b*Trg{J+4a(>l*P*J@=KOlG#-V%6yIf~nvS^M14%G5;X)akbxz|2_o zWnTo|v7KJQ&d56WYcyUea6h`Hle7_Qkd^i8##k$KV{iTIW`Hw+cDuV6~GDpWkOvFcm;`3x~Dj(WF{8 z>xppbp6X#|uve?FZg_v56r@R9bAqcI?`LPTM;b=U6bO_!XV?|Xo}KZ5soXk^qPp?+ z@+Ds6P1w6})>?IRrYb1V69%E72GU;NXwuIkP{prHXsWjy%Qv671o&*o4e^AApkO_) zZZH*R9~m;j6rv7~b?LR4|3troIqB*I1h0H2OjK}A5aMWaBPeM`e?U}iLH*cPUWA7T zNn~*)2<2u^T@4q;_Z4cCQq|$0qDrYjyS4*jgtN!AM~FB9Pe~Mu*!Kp7O5_Rtbx8j| z|Mp*bzjmB09esd$@$+Le)bGoli3aTFXSfC(LD-8R)X)}F{(E9b&2wh^7sX|#rg|doIN@jATcMu;W;8RLg*3R16 zcy%s{o>yi0^<+^+;LW+ar)QV?U$;y{0S5RBl+&toG+wBF;*Li)sZSQJMMaf9UYv4` zFavPETUL3Fg?`@8WVH@E5^KMFDhr86&5=bnC>_Z*g~ z$Ui^X;Eaw{wO5iFO8o+qYu8p_GfY0}nSAbGDdxRVQ*XhsC4B0$3uEr?Ndd^+G1f&b z149uOEk6EXp#Qt0`9@};%h_SFduetTyV0W#k}#J;rbGp!A_e*+(1WaaB@&Smy0S`i zcSnlzwJsOpw0O2Fh(wCM3&R^ABa~uhV)CA=n-Q3er!MTn#5i!}#Q$b9)aYqf+r|J4 zK_uvQ+W(?}l*=f7-+?G?>tG{2DQVV>?r&t*asUngasB;!fR`7)`WQTuxze!pN1q*U zas=$m=;ZF2LQo3o zuWl}AK5MZAA_DtkV&1>U0J2`oTEw`7xw7$zD)0M9*-E3UN3lK7H#G^d$|kjzxTevr zb{DD@#AP}enVE2to8r<^pW}jc6V98lw>C#Qx6e%#ZW^3u|+opVl3PED->it|@_Q}+7|D?c&+ zTBprywYTTm0L07QK1A^K1JFH@-s~`z172U}a$CUKo~hW3`yDHvaNlV0(>_r&#gftSLMjk6$EN~^wbY3l2m=-pu zcJKRMhHg-?nT&F9{ZDWF8CF{$$E|CBrzBMx)?>VOT@#Z!=edGA%(uBB!IKL=_6A|Q zCY)R^UN^RiG$Kb-%yY9loT+%Nk1m{Qs65!&hr`0opOam^pqfawJ$C%K{@3?B#bGc)@ku^EYRm2?jm$jCj}s1#IF3mHIM`i z%B!LM6AbT5^>yZPMMw>dj1a~4JbA+5&BDn!(C_oZc6SDDMZv1U%<;8j9P)H*ZGA%e zqmHPkX24;YyID+(qTT0<&W_HDBmmFD{OoK?eSIZha<14oBNNQO9q*B z{i4z1d0vi{KRpd4Ok`$4r?sB$F!wQ#v7QbbqJ5CWLbg7OxTqJQfAuQ)s0K@4a1-d# zrwf1b#7sv=hy3}@s&CX-@X%Hpc#r$9j8Jm0YOK(1iOMk~;L^vh*9zP7E8<)DhtobV z7-C|Y-EaLTPm;8(Z2M%BgP(_|{mn9OsKgPa$P-#?=V@^ZEyxkcGg4;{P}s;Wi-tmwm4N$2DwZ}@m^;Y0F(b)qIhX%4h{ugVcT zJw45CCYn1kTR2gwsK}Bj=$8G;t~g5uD~d}@!AUZYMoIDK zk?c)*#$*y=;wRYHhw^T?*)QR=k_qV*8e=gjs@zUWrr#$ zQ9Ucaj5uRw{Fd18BBkkAN=u>Kb|1zlm7`^(GQSFNnd@;sFF(8|)l^dgxY(1+?te>W zEoEJai6slVUf2Glb#E3;SNXMJl_x_NcmkjN^0p%>8LL&Y)0LoxLI&>rPD59hho35h zri}p|J;FQs9f6kiZg&Nt$6}}tf7jTc3dr=-IzmSoajQ#+pm~p|wmwLADE_=^z%KYY5-WXzL$xJ=3Er<- z+~~olHfR*)=BfxhNupQOgcNx%ul`nhYN&3R)tm3;?bTF0v~%2Q%=M>hGhlJ%7(tcM z?$qb5u#z=K^0fK*)_;r&0(h;D*}h&rQpLl8uZ-pA;5 z^fF46cb?z*2hKU~hqc#le^`61z1DSK_jO+@Mn~%vB{>s0005v=RZ-N#_Xqd}BPGN? z(@e;40Kmg{s*3XZK3{gS$&8YFaJL(jWdD3z9aO&mLab~#78?6?S+Bk+oLOZ2+7N-L zo2>Ig)Hx!&j>|EVwZ0EG>#K?ZJkdeb?{@u#@An>q z+-==53WLO-O1z^|6cu5AA%9&S9U>R{;^kM)VH$f<5D^n0WoYDo`Fb1hbw-0XLZjOR zoTS1n7!g))u8#>YSJ44r9Fs^=)wr7$h54-W_>)wAnSeP-JFF@X4CB!AXnPQK%iW0? zC6B$E`ZBvS7{vy6rsn$DWMJ%H<5ld+^~9wu^S; zaY2|j2cF#!j3gylp$Gu^QPh-F2Mb51f6i_$VzkP0B|XI5V?t~-@@xB0c9;bx>6$8LOk@#cAs9kx;atA+1Z|1;9Sz+Ymw z$RJ#zXG;&S3uM1Ec(*Y~h~8UT4VaXp+W39aUZUE4f(gNxNC7A+L(X`gt5~_lDDn=8 z0`c1sAe{m7swpkSrefQc62QxD(;CFaM&pDY?ihu@1OC@Yo%J=w$?@3Cdyy{%MmBN1c57RQ9Ec+^TQQ z>6(k{Kt*iLr|We>(Ln{zaq=4Zd%flFJAB%uO0~Lyf2CLH=e+kx00&X7u2K2BkaI2^ zJ3t})&Le(QLm3O;pQO}q4wVIrEXoH>`;z3=ZK*1I>Pb1}{OyXa;Dj%1URYYEbS&=I zeKf%*Wt(jjN%arjinl-)$W+vjT)+-DCgxEtmJGm8M_x$`D4}!(YYy1*$_#Ot|I>ihYKZ#3K}>*XCt~yy=x3iLf-f!n-`Dix(P@hl~u%u2%s?}!ozKB!n^V++<={IX0V}o?aSSTR5NBaum z?h$u-lTfcfEX5wCx3;bCQcoF7jf-U85(7B6#W}RI*!(d46$4Ma^@4USO8jgvW z0E;WTk}m5fV*=?6t*CAM7+TWbS8vA-wFVxj6`ZoZ4|eK>%Q7L5o+aUV9uaEqD~(bF zCGqRR+#9^JN=^?UM-G=CkqaLjUoU1Cu<4f=3Cj8(I%+!a9<<*%W4(E_AI!-~TII6` z)dpje5f)PuGYJ&D36I_ya}ER=f7Nq>{lJ)=PQqEh{aIvXLH=YndKKP(>wH}hP)G44 z;OO~t)D3g-I#@remLIo~WXm_~dN7{ty0+v3Cal@j2EAq?~BV~hkHpT*T_ z_kck11GQAo@=V;pNXJuE-6bpXf}>N~&M~$hD{|z7*Rgl9Gi~OWSs`BAn_KQggw|pY zv-jeG4DQ$#ubtmZKVht;jSdM_cH^AzU6+t&qu}lzzz(jh*hJy z4(RZMNI2|l3Q55T090&GZ}0?f0=fBZ56Wq~Dm`s^Tdc=^dGTw%gXTbOBmAt1pXRyQC_iPg>RvGuby>L0Bxw6J8EsH3b zn-}m&(I2Pi5njRLg^f^OG@KvT(FNqq;CxxBo0 z44i6gs~hKO5ual6E-x=P$RaOu$1Ny855^aO9Tqoq9RF2f4t_KoWWE{SNf9IqT9~4^ zb|KL8;(M~0u$Epy&a5FAv)Up^3V5;Dd5^;LNE4W{uJzdK*RT(j1!xe9`@0QoE* z?BUka=Icc;f{HX1w!OniuJR&^3SO<7;m&V7Jg3hTE^=ywOO-v3H^!wvIW1T3&PGVi zvBscaweP*qKO#k4tQ;lvL$f?DeOVHDlb=eW0*<}gCMN0wlA6LR@`>-ZN!kJ6^0cb8 zx%)S=vW(65CNb!*H(HIuMWVV5&N?-gIw_0E*;3Uz@42ocQEi z26aPN>p4fM_)|{2wApx2w}>$}YUSI-CYrYe)xWz=U?ylCD7Nt{Km*0Vbuv;JZXTm4 z;fmZXlKwvv*hlZbI@MsAaNk&}S#u|*G5hjrlW`pmf&f9oV@w1EwZ$(v(zeLe3MPAg z^0()sw_6@R!8k}Ts0j$B%L%2+3Z>Jhs7XHC$yqp<{%W!RU|vg9h(C$#X6>+In#1X! z2m|p?fB+HtUr@M{!?CO>>u_U2Nw`$vUT>c5M%)LI5AHmpvS=5y5N*H5R-*y^grGLV z1Sh>K6Bvvxuk3BX7Wy01ZkM;Vbt(u1DxhZJ%ohPna7@Yu>?eGzP$WfZUHd`jtS>VEMjb|d{f;%$lVtAXQ#++J{n-A*{fe&scy(u z(nxu3ZFx}j^v;0o@o96H#g4WlT)5SIbJt_XOA5fzrl{t{%$f`iwA_HXDc>hL))~qdzUzBtU^r_mFunkNCg}YOu`B?47Z~f$>$plHvtxg z0dlwDh2j;&0Gs8P=85&$x-8Nc{8suyK~}BjMgvV3?jn2sE9kwaJ+~I48R!4(g`#WK zBNwxUjirU3t;8I!WvY3xGSDr`yVjbaVD>eWV&xBt{fUmDTWX}`$W~osNhuU_d;04d zrQkzlV!)t=J65PZn!EbCh=dXm6qc`MYS*HttZW=)sl>dBjh=g%X&C~ z#9d7Up3kK4>AgvUfOTx@&Eu)JWA^|**A{ZkE>Xi-wnk@;uCzhUBL3B~xNMbRo73XI zZ&TSt667j)LKVF3B3=P#Fr6}0=|eZk&W@{;q-V^M{11iLhAmmpL&0lTp-^6)yu!0- z&UrRD1OdPl^%?}?wNwed#sB78x=V9Zc=pNGNu+;b1jP^KyXRH-;NN~U@V9oC%+koa z{4%oJZq0cwSIz+wDFSC*87zo6J7ALnjc*?=jo4{!s&gjKQoz&RT2+SNxx!;9UudIS zb?ve&K-b?ryuMXt1+gy@;BnTi3QR$F$EhPr{`NFgOImMuE|{u{h!B0p46hC!4$f98 zGIktkJ4>D*63wuDDyvP}-t)ieT<1|>l+5Rd&%zAhUs>S;juJB}4|wM8|$KxkI3l z0tK5?9XUZ}d|#Ig^L^TBgnA7W`I5jj)^QyP(G*7yfbM!;dncvIgc6|<162?e^B``WSSljh>Gio( z^p2MG6MkxUL06IrqZjeNR3{#rnY8YH{+<0LDQR9+o)DMNdG;YHUw<}@i()w7GA&Ku zs(CU53N~xvW1GaJ1TCY~bikqJC^*^t9)A5XP zSV!mf8>#3MhW}^9y{Scd(jPdN5W=BLAm1La^VwY&v8n4&Ib-b*ER7cri1eaTyhz`1YsBja&5lp1g*}5p?fqe1b*p z#^{K0a_^Eh@0{>I{S=Ewih>0zXWs<$lV{NFGGqU$1D_{vXCp5ezc8DAlbIrC#m{rm z-QkQsbh|qALJkcr>Nq~4KY04K0qqrddpACWgPl)9JvxE2v7rdNJ^4l2O+vJOko3#< z_}9tH3JP{RSC^{vIM(+>@?dTF(>fRKkuIM6vUfA>frj5(GRv}EfSXGzCU#<19%neI z^f}Xym5{WAhhy)+?^9A|WuLTj=4!&%x-7w&8d67YQ#sOkQZ*M~cYmv%SBeNWshF4f zZ-nTvT5PB{`qS-bORD)TH+#Y`s7eN`@agy*-}oE}-~&V=(4=pMl5C8O)SCIy8eAI; zwe}d0)4pP9bDgh6?>MXWLbGhL8-haH84VGKHtwc)q1et4?5BbL7`^G8$dc8%Qi^05 zqUO_pd4&(Yw)<=vP1ibGwc9b%)v0`sYBw~>LHB#GrSjW;c70`<)wu7gEhT+c@F`J9 zg^UO{NWhB*L-vdmJNV97B_l{!%71(^-q)aG$Zp_AW3o&JGf~qR0V_R?;^X_fPRCBD z%a+Mf?c>*<9PTGQq+c}R;TPfdFu$rWH-o0zJxT%73qB?ya8QcakQn1(I#5Ps22tI8kY_f+QfcRfs};KvwWdv(_^s*dg`oINPB&P71lS>R(;cox+u|Kf!dD{+0)`nHY5Eg0t90m#uB}QdPLyETMc)rkt}BX|1_fvM5VSrR_Q%3KpgcXQAS$H!m(XqI^aD@j6c_V4U|#cI2K@m@6K zOiq}oD>f|nbV8jW@j-uAR$`W3F&;9PRwPyeeQSKi_%dI> zqi$QcZ=KKdSzm#TWb;l?gn5q=tNOL_1&M81s`L)zxFmvXJneYE_X>(ipiC|`7a^4T)VZL7|I(y5Cp>{M-E3{gBmfglj%^pEX zQ)<9EL`gW`7!ss!jGi6`aXxN3rH#7&nqOJGrR(qnZ%{-f?uT}%KYCE2!+VXpoX}I< z{X}qQD#u=6a&y0Tkk;@MrfKBTB{*>K(k&CgYu#hWnTk84o9^rJpx>k<&NQ^K?}&XC zbwO6P8gW6UR^aTIS>*r<<*PqU7;dUnqFLRj!BY^>urzpZP%D-dU&PyHj~-hIz5DEN zZBq<``GvQ`d+{_!FYe&)-WlGmX=OM2AWJxn(k`K#P0m3<5oEYh@uTT0u@FL>^ReIQ zxhnG?7H{caYZ4D-kmgxegOlSOSK5UG(uX*~5)*h>!Zl%dBG80(0ae(>cb5EXOB{g< zI_{lX9A;bL$~(~2N;x_oDS`yPI-$buV(U4AeAJGaHB2mmn-{lCxO(tNx9z4P#|o4_SKDc%na z8E2lm%4<(mxq{A?RW2n>ckm`7WnF(|WnLYu9~q}^hug?4-ywi2HyQ8k@IjaH zaAyD7m2QR&lst1)RJIzPAJygPIT{jL+O4(IcGJn5T#Tx)>Ex2j`sXL^Ym9!MWKSYm zG-$FN%`u$)U{mh;%>sW!*k=I+U-jO`IV?EP_Yi#?6CZB>uBwzm7wKLm-}&lMNmEng zMv%IRJV(`Axh+Mwrj*q=~~Zvjd{f_@K8tp$3)#3D>aGh zR?&~vn~V2s+o?JmgiPeyau1exx)uH}hI*UZf9bgYugv>P7lO-MY5=w;L8-u~X%v6$ O08mxZQba0PhW!UaGbGvo literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/token_counter-light.png b/testdata/snapshots/darwin/token_counter-light.png new file mode 100644 index 0000000000000000000000000000000000000000..79f791f57f705b096e30f7ca266f7715a00b2f94 GIT binary patch literal 6085 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/tool_toggle_menu-dark.png b/testdata/snapshots/darwin/tool_toggle_menu-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..8c301a138de9743a3c56b3c20902c076ed92a74f GIT binary patch literal 18313 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/tool_toggle_menu-light.png b/testdata/snapshots/darwin/tool_toggle_menu-light.png new file mode 100644 index 0000000000000000000000000000000000000000..930e1052ec4a49f316a865978201664c1b59415d GIT binary patch literal 19707 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 P2no4DJ)9cO1QY)Q^(vo6 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/voice_input_button-dark.png b/testdata/snapshots/darwin/voice_input_button-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..7b8bcc5f168430b6900c2e8b2291305081d028c9 GIT binary patch literal 6692 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 CJbN$z literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/voice_input_button-light.png b/testdata/snapshots/darwin/voice_input_button-light.png new file mode 100644 index 0000000000000000000000000000000000000000..b77288f4a8ec585b6f78fed058e6be138d7d4378 GIT binary patch literal 6423 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/voice_waveform-dark.png b/testdata/snapshots/darwin/voice_waveform-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..01742ab483851e18c962d2f5e387d100882e4497 GIT binary patch literal 3275 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 I4(f9MKb87?&j0`b literal 0 HcmV?d00001 diff --git a/text_area.go b/text_area.go index b9e82b8..c5f0fff 100644 --- a/text_area.go +++ b/text_area.go @@ -27,6 +27,8 @@ type TextAreaOptions struct { ReadOnly bool // Error marks the value invalid and shows the message below. Error string + // keys sees keys before the editor, for PromptComposer's menus. + keys func(ui.InputEvent) bool } // TextArea is a multi-line field editing *value. @@ -67,6 +69,9 @@ func TextArea(c *ui.Context, value *string, opts TextAreaOptions) InputResult { // Taken before the editor, which would make a plain Enter a newline. submit := ui.Local(frame, "submit", func() bool { return false }) in.HandleInput(func(ev ui.InputEvent) bool { + if opts.keys != nil && opts.keys(ev) { + return true + } if ev.Kind == ui.InputKeyDown && ev.Key == key && ev.Mods == mods { *submit = true return true diff --git a/token_counter.go b/token_counter.go new file mode 100644 index 0000000..d36043b --- /dev/null +++ b/token_counter.go @@ -0,0 +1,49 @@ +package mujica + +import ( + "fmt" + "strconv" + + "github.com/egoist/mygo/ui" + + "mujicaui/icons" + "mujicaui/theme" +) + +// tokenWarnShare is the share of the limit from which the count warns. +const tokenWarnShare = 0.9 + +// TokenCounter shows the caller's token estimate against the limit: muted, warning past 90%, danger over it. +func TokenCounter(c *ui.Context, used, limit int) *ui.Element { + if used < 0 || limit <= 0 { + panic("mujica: TokenCounter needs used >= 0 and limit > 0") + } + k := Tokens(c) + u := Density(c).Unit() + label := fmt.Sprintf(msg(c, "token_counter.label"), tokenThousands(used), tokenThousands(limit)) + color, icon := k.TextMuted, "" + switch { + case used > limit: + color, icon = k.Danger, "circle-alert" + label += ", " + fmt.Sprintf(msg(c, "token_counter.over"), tokenThousands(used-limit)) + case float64(used) >= tokenWarnShare*float64(limit): + color, icon = k.Warning, "triangle-alert" + } + row := ui.Row(c).Gap(u).AlignItems(ui.Center).Shrink(0).TextColor(color).Role(ui.RoleStatus).Label(label) + row.Children(func() { + if icon != "" { + ui.Icon(c, icons.Must(icon)).Size(12, 12) + } + ui.Text(c, "≈ "+tokenThousands(used)+" / "+tokenThousands(limit)).FontSize(FontSize(c, theme.CaptionSize)).FontFeatures("tnum").SingleLine() + }) + return row +} + +// tokenThousands writes n with comma thousands separators. +func tokenThousands(n int) string { + s := strconv.Itoa(n) + for i := len(s) - 3; i > 0; i -= 3 { + s = s[:i] + "," + s[i:] + } + return s +} diff --git a/token_counter_test.go b/token_counter_test.go new file mode 100644 index 0000000..1e62f71 --- /dev/null +++ b/token_counter_test.go @@ -0,0 +1,55 @@ +package mujica + +import ( + "testing" + + "github.com/egoist/mygo/ui" +) + +func TestTokenCounterLevels(t *testing.T) { + for _, tc := range []struct { + used int + text string + label string + }{ + {1234, "≈ 1,234 / 8,000", "About 1,234 of 8,000 tokens"}, + {7500, "≈ 7,500 / 8,000", "About 7,500 of 8,000 tokens"}, + {9100, "≈ 9,100 / 8,000", "About 9,100 of 8,000 tokens, 1,100 over the limit"}, + } { + tt := ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + TokenCounter(c, tc.used, 8000) + }, 300, 60) + if !tt.HasText(tc.text) { + t.Errorf("%d: texts %q", tc.used, tt.Texts()) + } + if _, ok := tt.Find(tc.label); !ok { + t.Errorf("%d: no %q", tc.used, tc.label) + } + } + if tokenThousands(1234567) != "1,234,567" || tokenThousands(12) != "12" { + t.Fatal("thousands separators") + } +} + +func TestTokenCounterBadLimit(t *testing.T) { + defer func() { + if recover() == nil { + t.Fatal("no panic for a zero limit") + } + }() + ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + TokenCounter(c, 1, 0) + }, 100, 100) +} + +func TestTokenCounterSnapshot(t *testing.T) { + snapshot(t, "token_counter", 240, 110, func(c *ui.Context) { + ui.Column(c).Padding(12).Gap(8).Children(func() { + TokenCounter(c, 1234, 8000) + TokenCounter(c, 7500, 8000) + TokenCounter(c, 9100, 8000) + }) + }) +} diff --git a/tool_toggle_menu.go b/tool_toggle_menu.go new file mode 100644 index 0000000..74d9e27 --- /dev/null +++ b/tool_toggle_menu.go @@ -0,0 +1,122 @@ +package mujica + +import ( + "fmt" + "log/slog" + + "github.com/egoist/mygo/ui" + + "mujicaui/icons" + "mujicaui/internal" + "mujicaui/theme" +) + +// ToolItem is one tool a ToolToggleMenu turns on or off. +type ToolItem struct { + // ID and On are required. + ID string + Label string + Description string + On *bool + // NeedsAuth marks a tool the user must authorize before turning it on. + NeedsAuth, Authorized bool +} + +// ToolToggleResult is the menu's button and what the user did this frame. +type ToolToggleResult struct { + Element *ui.Element + changed, authorize string +} + +// Changed returns the ID of the tool turned on or off. +func (r ToolToggleResult) Changed() (string, bool) { return r.changed, r.changed != "" } + +// Authorize returns the ID of a tool whose authorization the user asked for. +func (r ToolToggleResult) Authorize() (string, bool) { return r.authorize, r.authorize != "" } + +// ToolToggleMenu is a button opening a panel of tool switches; tools needing authorization show a mark and an authorize action. +func ToolToggleMenu(c *ui.Context, tools []ToolItem) ToolToggleResult { + on := 0 + for _, t := range tools { + if t.ID == "" || t.On == nil { + panic("mujica: ToolItem needs ID and On") + } + if *t.On { + on++ + } + } + k := Tokens(c) + u := Density(c).Unit() + label := fmt.Sprintf(msg(c, "tool_toggle_menu.count"), on) + var r ToolToggleResult + b := ui.ButtonBase(c).MinHeight(theme.MinHitSize).Padding(0, u*2).Gap(u).Radius(theme.ControlRadius).Label(label).TextColor(k.TextMuted) + r.Element = b + internal.Ring(b, k.Focus, theme.ControlRadius) + open := ui.Local(b, "open", func() bool { return false }) + switch { + case *open: + b.Background(k.Selection).TextColor(k.Text) + case b.Hovered(): + b.Background(k.SurfaceHover).TextColor(k.Text) + } + b.Children(func() { + ui.Icon(c, icons.Must("sliders-horizontal")).Size(16, 16) + if on > 0 { + ui.Text(c, fmt.Sprint(on)).FontFeatures("tnum").FontWeight(600).TextColor(k.AccentText).SingleLine() + } + }) + disabled := b.IsDisabled() + if b.Clicked() && !disabled { + *open = !*open + } + if disabled { + *open = false + } + Popover(c, b, open, PopoverOptions{Title: msg(c, "tool_toggle_menu.label"), Width: 320}, func() { + for _, t := range tools { + toolToggleRow(c, t, &r) + } + }) + if r.changed != "" || r.authorize != "" { + slog.Debug("mujica: tool_toggle_menu", "changed", r.changed, "authorize", r.authorize) + } + return r +} + +// toolToggleRow shows one tool: its switch, or its authorization mark and action. +func toolToggleRow(c *ui.Context, t ToolItem, r *ToolToggleResult) { + k := Tokens(c) + u := Density(c).Unit() + small := FontSize(c, theme.CaptionSize) + locked := t.NeedsAuth && !t.Authorized + ui.Row(c).Key(t.ID).Gap(u * 3).AlignItems(ui.Center).Children(func() { + ui.Column(c).Grow(1).MinWidth(0).Children(func() { + ui.Row(c).Gap(u).AlignItems(ui.Center).MinHeight(Density(c).ControlHeight()).Children(func() { + if locked { + ui.Text(c, t.Label).FontWeight(600).SingleLine() + } else if Switch(c, t.On, t.Label, SwitchOptions{}).Changed() { + r.changed = t.ID + } + if t.NeedsAuth { + icon := "key-round" + if t.Authorized { + icon = "shield-check" + } + ui.Icon(c, icons.Must(icon)).Size(14, 14).TextColor(k.Warning).Label(msg(c, "tool_toggle_menu.needs_auth")) + } + }) + if t.Description != "" { + ui.Text(c, t.Description).FontSize(small).TextColor(k.TextMuted) + } + if locked { + ui.Text(c, msg(c, "tool_toggle_menu.needs_auth")).FontSize(small).TextColor(k.Warning) + } + }) + if locked { + full := fmt.Sprintf(msg(c, "tool_toggle_menu.authorize"), t.Label) + if Button(c, msg(c, "tool_toggle_menu.authorize_short"), ButtonOptions{Variant: Outline, Label: full}).Clicked() { + r.authorize = t.ID + } + } + }) +} diff --git a/tool_toggle_menu_test.go b/tool_toggle_menu_test.go new file mode 100644 index 0000000..74e69be --- /dev/null +++ b/tool_toggle_menu_test.go @@ -0,0 +1,78 @@ +package mujica + +import ( + "testing" + + "github.com/egoist/mygo/ui" +) + +// toolMenuApp holds tools and what the menu reported. +type toolMenuApp struct { + web, code, mail bool + authorized bool + changed, auth []string + off bool +} + +func (a *toolMenuApp) view(c *ui.Context) { + Use(c, Settings{}) + ui.Column(c).Padding(16).AlignItems(ui.Start).Disabled(a.off).Children(func() { + r := ToolToggleMenu(c, []ToolItem{ + {ID: "web", Label: "Web search", Description: "Search the open web", On: &a.web}, + {ID: "code", Label: "Code execution", On: &a.code}, + {ID: "mail", Label: "Mail", Description: "Read your inbox", On: &a.mail, NeedsAuth: true, Authorized: a.authorized}, + }) + if id, ok := r.Changed(); ok { + a.changed = append(a.changed, id) + } + if id, ok := r.Authorize(); ok { + a.auth = append(a.auth, id) + } + }) +} + +func TestToolToggleMenuSwitchesAndAuthorization(t *testing.T) { + a := &toolMenuApp{web: true} + tt := ui.NewTester(a.view, 500, 500) + if err := tt.Click("Tools, 1 on"); err != nil { + t.Fatal(err) + } + _ = tt.Click("Code execution") + if !a.code || len(a.changed) != 1 || a.changed[0] != "code" { + t.Fatalf("code %v changed %v", a.code, a.changed) + } + if !tt.HasText("Needs authorization") { + t.Fatalf("auth mark missing: %q", tt.Texts()) + } + _ = tt.Click("Authorize Mail") + if a.mail || len(a.auth) != 1 { + t.Fatalf("mail %v auth %v", a.mail, a.auth) + } + a.authorized = true + tt.Frame() + _ = tt.Click("Mail") + if !a.mail { + t.Fatal("authorized tool did not turn on") + } + tt.Key(0, ui.KeyEscape) + if tt.HasText("Search the open web") { + t.Fatal("Escape did not close the panel") + } +} + +func TestToolToggleMenuClosesWhenDisabled(t *testing.T) { + a := &toolMenuApp{} + tt := ui.NewTester(a.view, 500, 500) + _ = tt.Click("Tools, 0 on") + a.off = true + tt.Frame() + if tt.HasText("Search the open web") { + t.Fatal("panel stayed open under a disabled control") + } +} + +func TestToolToggleMenuSnapshot(t *testing.T) { + snapshotAfter(t, "tool_toggle_menu", 400, 360, func(c *ui.Context) { + (*ui.Local(c.Root(), "a", func() *toolMenuApp { return &toolMenuApp{web: true} })).view(c) + }, func(tt *ui.Tester) { _ = tt.Click("Tools, 1 on") }) +} diff --git a/voice_input_button.go b/voice_input_button.go new file mode 100644 index 0000000..4eea543 --- /dev/null +++ b/voice_input_button.go @@ -0,0 +1,77 @@ +package mujica + +import ( + "fmt" + "log/slog" + "time" + + "github.com/egoist/mygo/ui" + + "mujicaui/icons" + "mujicaui/internal" + "mujicaui/theme" +) + +// VoiceInputOptions describe the caller's recording. +type VoiceInputOptions struct { + // Recording shows the stop state and the time since Started. + Recording bool + Started time.Time + // Denied shows that microphone access failed; the button then retries. + Denied bool + Disabled bool +} + +// VoiceInputButton asks the caller to start or stop recording; while recording it shows the time. +// Clicked reports a press: start when idle or denied, stop when recording. +func VoiceInputButton(c *ui.Context, opts VoiceInputOptions) ChoiceResult { + if opts.Recording && (opts.Started.IsZero() || opts.Denied) { + panic("mujica: VoiceInputButton recording needs Started and no Denied") + } + k := Tokens(c) + u := Density(c).Unit() + var r ChoiceResult + r.Element = ui.Row(c).Gap(u * 2).AlignItems(ui.Center).Shrink(0).Disabled(opts.Disabled) + r.Element.Children(func() { + elapsed := "" + label := msg(c, "voice_input_button.start") + icon := "mic" + if opts.Recording { + d := max(c.Now().Sub(opts.Started), 0) + elapsed = audioClock(d.Truncate(time.Second)) + label, icon = fmt.Sprintf(msg(c, "voice_input_button.stop"), elapsed), "square" + c.After(time.Second - d%time.Second) + } + h := Density(c).ControlHeight() + b := ui.ButtonBase(c).Size(h, h).Radius(h / 2).Label(label).Tooltip(label).Transition(colorFade) + internal.Ring(b, k.Focus, h/2) + switch { + case opts.Recording: + b.Background(k.DangerFill).TextColor(k.OnDanger) + case b.Pressed(): + b.Background(k.Selection).TextColor(k.Text) + case b.Hovered(): + b.Background(k.SurfaceHover).TextColor(k.Text) + default: + b.TextColor(k.TextMuted) + } + b.Children(func() { ui.Icon(c, icons.Must(icon)).Size(16, 16) }) + if b.Clicked() && !b.IsDisabled() { + r.changed = true + slog.Debug("mujica: voice_input_button press", "recording", opts.Recording) + } + switch { + case opts.Recording: + ui.Row(c).Gap(u).AlignItems(ui.Center).Children(func() { + ui.Box(c).Size(8, 8).Radius(4).Background(k.Danger) + ui.Text(c, elapsed).FontFeatures("tnum").TextColor(k.Danger).SingleLine() + }) + case opts.Denied: + ui.Row(c).Gap(u).AlignItems(ui.Center).TextColor(k.Danger).Role(ui.RoleStatus).Children(func() { + ui.Icon(c, icons.Must("mic-off")).Size(14, 14) + ui.Text(c, msg(c, "voice_input_button.denied")).FontSize(FontSize(c, theme.CaptionSize)).SingleLine() + }) + } + }) + return r +} diff --git a/voice_input_button_test.go b/voice_input_button_test.go new file mode 100644 index 0000000..bf94b0c --- /dev/null +++ b/voice_input_button_test.go @@ -0,0 +1,76 @@ +package mujica + +import ( + "testing" + "time" + + "github.com/egoist/mygo/ui" +) + +func TestVoiceInputButtonStartStopAndTime(t *testing.T) { + var opts VoiceInputOptions + presses := 0 + tt := ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + if VoiceInputButton(c, opts).Changed() { + presses++ + if opts.Recording { + opts = VoiceInputOptions{} + } else { + opts = VoiceInputOptions{Recording: true, Started: c.Now().Add(-65 * time.Second)} + } + } + }, 300, 100) + _ = tt.Click("Start voice input") + tt.Frame() + if !opts.Recording || !tt.HasText("1:05") { + t.Fatalf("recording %v texts %q", opts.Recording, tt.Texts()) + } + tt.Key(0, ui.KeyTab) + tt.Key(0, ui.KeySpace) + if opts.Recording || presses != 2 { + t.Fatalf("stop: recording %v presses %d", opts.Recording, presses) + } +} + +func TestVoiceInputButtonDeniedAndDisabled(t *testing.T) { + opts := VoiceInputOptions{Denied: true} + presses := 0 + tt := ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + if VoiceInputButton(c, opts).Changed() { + presses++ + } + }, 400, 100) + if !tt.HasText("Microphone access denied") { + t.Fatalf("texts %q", tt.Texts()) + } + _ = tt.Click("Start voice input") + opts.Disabled = true + _ = tt.Click("Start voice input") + if presses != 1 { + t.Fatalf("presses %d, want 1 (retry once, then disabled)", presses) + } +} + +func TestVoiceInputButtonRecordingNeedsStart(t *testing.T) { + defer func() { + if recover() == nil { + t.Fatal("no panic for recording without Started") + } + }() + ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + VoiceInputButton(c, VoiceInputOptions{Recording: true}) + }, 100, 100) +} + +func TestVoiceInputButtonSnapshot(t *testing.T) { + snapshot(t, "voice_input_button", 360, 170, func(c *ui.Context) { + ui.Column(c).Padding(12).Gap(8).Children(func() { + VoiceInputButton(c, VoiceInputOptions{}) + VoiceInputButton(c, VoiceInputOptions{Recording: true, Started: c.Now().Add(-12 * time.Second)}) + VoiceInputButton(c, VoiceInputOptions{Denied: true}) + }) + }) +} diff --git a/voice_waveform.go b/voice_waveform.go new file mode 100644 index 0000000..5526c60 --- /dev/null +++ b/voice_waveform.go @@ -0,0 +1,75 @@ +package mujica + +import ( + "github.com/egoist/mygo/ui" + + "mujicaui/icons" + "mujicaui/theme" +) + +// VoiceWaveformOptions configure a VoiceWaveform. +type VoiceWaveformOptions struct { + // Silence is the level below which input counts as silent; zero means 0.05. + Silence float32 + // SilentFor is how many trailing samples under Silence show the hint; zero means 20. + SilentFor int + // Width is the bar area width in DIPs; zero means 200. + Width float32 +} + +// VoiceWaveform draws recent input levels, 0 to 1, newest at the right, and hints at silence. +func VoiceWaveform(c *ui.Context, levels []float32, opts VoiceWaveformOptions) *ui.Element { + if opts.Silence < 0 || opts.Silence >= 1 || opts.SilentFor < 0 || opts.Width < 0 { + panic("mujica: VoiceWaveform needs 0 <= Silence < 1 and non-negative SilentFor and Width") + } + for _, v := range levels { + if !(v >= 0 && v <= 1) { + panic("mujica: VoiceWaveform levels must be from 0 to 1") + } + } + silence, need, w := opts.Silence, opts.SilentFor, opts.Width + if silence == 0 { + silence = 0.05 + } + if need == 0 { + need = 20 + } + if w == 0 { + w = 200 + } + k := Tokens(c) + u := Density(c).Unit() + silent := len(levels) >= need + for _, v := range levels[max(0, len(levels)-need):] { + silent = silent && v < silence + } + row := ui.Row(c).Gap(u * 2).AlignItems(ui.Center).Shrink(0).Role(ui.RoleMeter).Label(msg(c, "voice_waveform.label")) + row.Children(func() { + ui.Box(c).Size(w, 28).Shrink(0).Draw(func(p *ui.Painter, b ui.Rect) { + n := int((b.W + audioBarGap) / (audioBarWidth + audioBarGap)) + cy := b.Y + b.H/2 + for i := range n { + // The newest sample sits at the right edge. + j := len(levels) - n + i + v := float32(0) + if j >= 0 { + v = levels[j] + } + h := max(2, v*(b.H-4)) + col := k.AccentText + if v < silence { + col = k.TextMuted.Alpha(0.55) + } + x := b.X + float32(i)*(audioBarWidth+audioBarGap) + p.Fill(ui.Rect{X: x, Y: cy - h/2, W: audioBarWidth, H: h}, col, 1) + } + }) + if silent { + ui.Row(c).Gap(u).AlignItems(ui.Center).TextColor(k.Warning).Role(ui.RoleStatus).Children(func() { + ui.Icon(c, icons.Must("mic-off")).Size(14, 14) + ui.Text(c, msg(c, "voice_waveform.silent")).FontSize(FontSize(c, theme.CaptionSize)).SingleLine() + }) + } + }) + return row +} diff --git a/voice_waveform_test.go b/voice_waveform_test.go new file mode 100644 index 0000000..3de0f8e --- /dev/null +++ b/voice_waveform_test.go @@ -0,0 +1,63 @@ +package mujica + +import ( + "testing" + + "github.com/egoist/mygo/ui" +) + +func voiceLevels(n int, v float32) []float32 { + out := make([]float32, n) + for i := range out { + out[i] = v + } + return out +} + +func TestVoiceWaveformSilenceHint(t *testing.T) { + levels := append(voiceLevels(30, 0.6), voiceLevels(10, 0.01)...) + tt := ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + VoiceWaveform(c, levels, VoiceWaveformOptions{SilentFor: 12}) + }, 400, 100) + if tt.HasText("No sound detected") { + t.Fatal("hint before 12 silent samples") + } + levels = append(levels, voiceLevels(2, 0.02)...) + tt.Frame() + if !tt.HasText("No sound detected") { + t.Fatal("no hint after 12 silent samples") + } + if _, ok := tt.Find("Input level"); !ok { + t.Fatal("meter not named") + } +} + +func TestVoiceWaveformBadLevels(t *testing.T) { + for _, l := range [][]float32{{-0.1}, {1.5}} { + func() { + defer func() { + if recover() == nil { + t.Errorf("%v: no panic", l) + } + }() + ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + VoiceWaveform(c, l, VoiceWaveformOptions{}) + }, 100, 100) + }() + } +} + +func TestVoiceWaveformSnapshot(t *testing.T) { + levels := make([]float32, 60) + for i := range levels { + levels[i] = float32((i*7)%10) / 10 + } + snapshot(t, "voice_waveform", 420, 110, func(c *ui.Context) { + ui.Column(c).Padding(12).Gap(12).Children(func() { + VoiceWaveform(c, levels, VoiceWaveformOptions{}) + VoiceWaveform(c, voiceLevels(40, 0), VoiceWaveformOptions{Width: 160}) + }) + }) +}