From b4798a6287a63fc5dd2f6ee3b65c5b732f20caa2 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:51:57 -0400 Subject: [PATCH] WIP components (as built) --- asset_allocation_chart.go | 104 ++++--- asset_allocation_chart_test.go | 62 +++++ currency_converter.go | 60 +++-- currency_converter_test.go | 42 +++ docs/components/181-option-chain.md | 40 +++ docs/components/182-greeks-table.md | 38 +++ docs/components/183-payoff-diagram.md | 39 +++ docs/components/184-watchlist.md | 40 +++ docs/components/185-symbol-search.md | 40 +++ docs/components/186-symbol-badge.md | 39 +++ docs/components/187-market-heatmap.md | 42 +++ docs/components/188-screener.md | 41 +++ docs/components/189-market-overview.md | 39 +++ docs/components/190-index-card.md | 39 +++ docs/components/191-market-status.md | 36 +++ docs/components/192-trading-session-clock.md | 37 +++ docs/components/193-economic-calendar.md | 40 +++ docs/components/194-earnings-calendar.md | 40 +++ docs/components/195-news-feed.md | 42 +++ docs/components/196-sentiment-gauge.md | 36 +++ docs/components/197-portfolio-summary.md | 40 +++ docs/components/198-asset-allocation-chart.md | 41 +++ docs/components/199-performance-chart.md | 46 ++++ docs/components/200-currency-converter.md | 44 +++ earnings_calendar.go | 11 +- earnings_calendar_test.go | 38 +++ economic_calendar.go | 38 ++- economic_calendar_test.go | 38 +++ example_markets_test.go | 255 ++++++++++++++++++ examples/gallery/pages_markets.go | 232 +++++++++++++++- examples/gallery/pages_markets_1.go | 165 ++++++++++++ examples/gallery/pages_markets_2.go | 140 ++++++++++ examples/gallery/pages_markets_3.go | 119 ++++++++ examples/gallery/pages_markets_4.go | 160 +++++++++++ examples/gallery/pages_markets_test.go | 67 +++++ greeks_table.go | 21 +- greeks_table_test.go | 54 ++++ index_card.go | 4 +- index_card_test.go | 39 +++ market_heatmap.go | 95 +++++-- market_heatmap_test.go | 46 ++++ market_overview.go | 6 +- market_overview_test.go | 45 ++++ market_status.go | 12 +- market_status_test.go | 29 ++ markets_fixture_test.go | 71 +++++ markets_regression_test.go | 218 +++++++++++++++ messages_markets.go | 3 + news_feed.go | 52 ++-- news_feed_test.go | 49 ++++ option_chain.go | 86 ++++-- option_chain_test.go | 130 +++++++++ payoff_diagram.go | 62 +++-- payoff_diagram_test.go | 108 ++++++++ performance_chart.go | 37 +-- performance_chart_test.go | 69 +++++ portfolio_summary.go | 18 +- portfolio_summary_test.go | 45 ++++ screener.go | 30 ++- screener_test.go | 59 ++++ sentiment_gauge.go | 48 +++- sentiment_gauge_test.go | 62 +++++ symbol_badge.go | 3 +- symbol_badge_test.go | 41 +++ symbol_search.go | 55 ++-- symbol_search_test.go | 82 ++++++ .../darwin/asset_allocation_chart-dark.png | Bin 0 -> 48248 bytes .../darwin/asset_allocation_chart-light.png | Bin 0 -> 47161 bytes .../darwin/currency_converter-dark.png | Bin 0 -> 17972 bytes .../darwin/currency_converter-light.png | Bin 0 -> 17339 bytes .../darwin/earnings_calendar-dark.png | Bin 0 -> 25608 bytes .../darwin/earnings_calendar-light.png | Bin 0 -> 24784 bytes .../darwin/economic_calendar-dark.png | Bin 0 -> 30226 bytes .../darwin/economic_calendar-light.png | Bin 0 -> 28924 bytes .../snapshots/darwin/greeks_table-dark.png | Bin 0 -> 36492 bytes .../snapshots/darwin/greeks_table-light.png | Bin 0 -> 34452 bytes testdata/snapshots/darwin/index_card-dark.png | Bin 0 -> 8924 bytes .../snapshots/darwin/index_card-light.png | Bin 0 -> 8596 bytes .../snapshots/darwin/market_heatmap-dark.png | Bin 0 -> 18483 bytes .../snapshots/darwin/market_heatmap-light.png | Bin 0 -> 18076 bytes .../snapshots/darwin/market_overview-dark.png | Bin 0 -> 26218 bytes .../darwin/market_overview-light.png | Bin 0 -> 25723 bytes .../snapshots/darwin/market_status-dark.png | Bin 0 -> 8366 bytes .../snapshots/darwin/market_status-light.png | Bin 0 -> 8136 bytes testdata/snapshots/darwin/news_feed-dark.png | Bin 0 -> 18443 bytes testdata/snapshots/darwin/news_feed-light.png | Bin 0 -> 18090 bytes .../snapshots/darwin/option_chain-dark.png | Bin 0 -> 38005 bytes .../snapshots/darwin/option_chain-light.png | Bin 0 -> 35776 bytes .../snapshots/darwin/payoff_diagram-dark.png | Bin 0 -> 17676 bytes .../snapshots/darwin/payoff_diagram-light.png | Bin 0 -> 17295 bytes .../darwin/performance_chart-dark.png | Bin 0 -> 41392 bytes .../darwin/performance_chart-light.png | Bin 0 -> 40389 bytes .../darwin/portfolio_summary-dark.png | Bin 0 -> 20654 bytes .../darwin/portfolio_summary-light.png | Bin 0 -> 20061 bytes testdata/snapshots/darwin/screener-dark.png | Bin 0 -> 24320 bytes testdata/snapshots/darwin/screener-light.png | Bin 0 -> 23786 bytes .../snapshots/darwin/sentiment_gauge-dark.png | Bin 0 -> 12791 bytes .../darwin/sentiment_gauge-light.png | Bin 0 -> 12310 bytes .../snapshots/darwin/symbol_badge-dark.png | Bin 0 -> 5035 bytes .../snapshots/darwin/symbol_badge-light.png | Bin 0 -> 4944 bytes .../snapshots/darwin/symbol_search-dark.png | Bin 0 -> 10761 bytes .../snapshots/darwin/symbol_search-light.png | Bin 0 -> 10604 bytes .../darwin/trading_session_clock-dark.png | Bin 0 -> 16534 bytes .../darwin/trading_session_clock-light.png | Bin 0 -> 15914 bytes testdata/snapshots/darwin/watchlist-dark.png | Bin 0 -> 24791 bytes testdata/snapshots/darwin/watchlist-light.png | Bin 0 -> 24466 bytes trading_session_clock.go | 12 +- trading_session_clock_test.go | 55 ++++ watchlist.go | 35 ++- watchlist_test.go | 137 ++++++++++ 110 files changed, 3975 insertions(+), 273 deletions(-) create mode 100644 asset_allocation_chart_test.go create mode 100644 currency_converter_test.go create mode 100644 docs/components/181-option-chain.md create mode 100644 docs/components/182-greeks-table.md create mode 100644 docs/components/183-payoff-diagram.md create mode 100644 docs/components/184-watchlist.md create mode 100644 docs/components/185-symbol-search.md create mode 100644 docs/components/186-symbol-badge.md create mode 100644 docs/components/187-market-heatmap.md create mode 100644 docs/components/188-screener.md create mode 100644 docs/components/189-market-overview.md create mode 100644 docs/components/190-index-card.md create mode 100644 docs/components/191-market-status.md create mode 100644 docs/components/192-trading-session-clock.md create mode 100644 docs/components/193-economic-calendar.md create mode 100644 docs/components/194-earnings-calendar.md create mode 100644 docs/components/195-news-feed.md create mode 100644 docs/components/196-sentiment-gauge.md create mode 100644 docs/components/197-portfolio-summary.md create mode 100644 docs/components/198-asset-allocation-chart.md create mode 100644 docs/components/199-performance-chart.md create mode 100644 docs/components/200-currency-converter.md create mode 100644 earnings_calendar_test.go create mode 100644 economic_calendar_test.go create mode 100644 example_markets_test.go create mode 100644 examples/gallery/pages_markets_1.go create mode 100644 examples/gallery/pages_markets_2.go create mode 100644 examples/gallery/pages_markets_3.go create mode 100644 examples/gallery/pages_markets_4.go create mode 100644 examples/gallery/pages_markets_test.go create mode 100644 greeks_table_test.go create mode 100644 index_card_test.go create mode 100644 market_heatmap_test.go create mode 100644 market_overview_test.go create mode 100644 market_status_test.go create mode 100644 markets_fixture_test.go create mode 100644 markets_regression_test.go create mode 100644 news_feed_test.go create mode 100644 option_chain_test.go create mode 100644 payoff_diagram_test.go create mode 100644 performance_chart_test.go create mode 100644 portfolio_summary_test.go create mode 100644 screener_test.go create mode 100644 sentiment_gauge_test.go create mode 100644 symbol_badge_test.go create mode 100644 symbol_search_test.go create mode 100644 testdata/snapshots/darwin/asset_allocation_chart-dark.png create mode 100644 testdata/snapshots/darwin/asset_allocation_chart-light.png create mode 100644 testdata/snapshots/darwin/currency_converter-dark.png create mode 100644 testdata/snapshots/darwin/currency_converter-light.png create mode 100644 testdata/snapshots/darwin/earnings_calendar-dark.png create mode 100644 testdata/snapshots/darwin/earnings_calendar-light.png create mode 100644 testdata/snapshots/darwin/economic_calendar-dark.png create mode 100644 testdata/snapshots/darwin/economic_calendar-light.png create mode 100644 testdata/snapshots/darwin/greeks_table-dark.png create mode 100644 testdata/snapshots/darwin/greeks_table-light.png create mode 100644 testdata/snapshots/darwin/index_card-dark.png create mode 100644 testdata/snapshots/darwin/index_card-light.png create mode 100644 testdata/snapshots/darwin/market_heatmap-dark.png create mode 100644 testdata/snapshots/darwin/market_heatmap-light.png create mode 100644 testdata/snapshots/darwin/market_overview-dark.png create mode 100644 testdata/snapshots/darwin/market_overview-light.png create mode 100644 testdata/snapshots/darwin/market_status-dark.png create mode 100644 testdata/snapshots/darwin/market_status-light.png create mode 100644 testdata/snapshots/darwin/news_feed-dark.png create mode 100644 testdata/snapshots/darwin/news_feed-light.png create mode 100644 testdata/snapshots/darwin/option_chain-dark.png create mode 100644 testdata/snapshots/darwin/option_chain-light.png create mode 100644 testdata/snapshots/darwin/payoff_diagram-dark.png create mode 100644 testdata/snapshots/darwin/payoff_diagram-light.png create mode 100644 testdata/snapshots/darwin/performance_chart-dark.png create mode 100644 testdata/snapshots/darwin/performance_chart-light.png create mode 100644 testdata/snapshots/darwin/portfolio_summary-dark.png create mode 100644 testdata/snapshots/darwin/portfolio_summary-light.png create mode 100644 testdata/snapshots/darwin/screener-dark.png create mode 100644 testdata/snapshots/darwin/screener-light.png create mode 100644 testdata/snapshots/darwin/sentiment_gauge-dark.png create mode 100644 testdata/snapshots/darwin/sentiment_gauge-light.png create mode 100644 testdata/snapshots/darwin/symbol_badge-dark.png create mode 100644 testdata/snapshots/darwin/symbol_badge-light.png create mode 100644 testdata/snapshots/darwin/symbol_search-dark.png create mode 100644 testdata/snapshots/darwin/symbol_search-light.png create mode 100644 testdata/snapshots/darwin/trading_session_clock-dark.png create mode 100644 testdata/snapshots/darwin/trading_session_clock-light.png create mode 100644 testdata/snapshots/darwin/watchlist-dark.png create mode 100644 testdata/snapshots/darwin/watchlist-light.png create mode 100644 trading_session_clock_test.go create mode 100644 watchlist_test.go diff --git a/asset_allocation_chart.go b/asset_allocation_chart.go index 78eaf94..cd26015 100644 --- a/asset_allocation_chart.go +++ b/asset_allocation_chart.go @@ -3,6 +3,7 @@ package mujica import ( "fmt" "math" + "slices" "github.com/egoist/mygo/ui" @@ -11,7 +12,6 @@ import ( "mujicaui/theme" ) -// AllocationItem is an asset class's value and target weight in percent. type AllocationItem struct { Name string Value float64 @@ -20,13 +20,12 @@ type AllocationItem struct { // AssetAllocationChartOptions configure an AssetAllocationChart. type AssetAllocationChartOptions struct { - Frame ChartFrame - // Tolerance is the drift in points that warns; zero means 5. + Frame ChartFrame + Version int Tolerance float64 Format func(v float64) string } -// AssetAllocationChart shows holdings as a donut and lists each weight against its target. func AssetAllocationChart(c *ui.Context, items []AllocationItem, opts AssetAllocationChartOptions) ChartResult { if opts.Tolerance < 0 { panic("mujica: AssetAllocationChart Tolerance is negative") @@ -35,62 +34,93 @@ func AssetAllocationChart(c *ui.Context, items []AllocationItem, opts AssetAlloc if tol == 0 { tol = 5 } - total, targets := 0.0, 0.0 - for _, it := range items { - if it.Name == "" || it.Value < 0 || it.Target < 0 || math.IsNaN(it.Value) || math.IsNaN(it.Target) { - panic("mujica: AllocationItem needs a Name and values ≥ 0") - } - total += it.Value - targets += it.Target - } - if len(items) > 0 && math.Abs(targets-100) > 0.01 && targets != 0 { - panic(fmt.Sprintf("mujica: AllocationItem targets sum to %v, not 100", targets)) - } k := Tokens(c) u := Density(c).Unit() pal := internal.Palette(k) var res ChartResult row := ui.Row(c).Gap(u * 6).AlignItems(ui.Start).Wrap() row.Children(func() { - slices := make([]ChartSlice, len(items)) - for i, it := range items { - slices[i] = ChartSlice{Label: it.Name, Value: it.Value} + memo := ui.Local(row, "mujica.allocation", func() allocationSlices { return allocationSlices{} }) + if id := chartID(items) + fmt.Sprint(opts.Version) + msg(c, "pie_chart.other"); id != memo.id { + total, targets := 0.0, 0.0 + for _, it := range items { + if it.Name == "" || it.Value < 0 || it.Target < 0 || math.IsNaN(it.Value) || math.IsNaN(it.Target) || math.IsInf(it.Value, 0) || math.IsInf(it.Target, 0) { + panic("mujica: AllocationItem needs a Name and values ≥ 0") + } + total += it.Value + targets += it.Target + } + if len(items) > 0 && math.Abs(targets-100) > 0.01 && targets != 0 { + panic(fmt.Sprintf("mujica: AllocationItem targets sum to %v, not 100", targets)) + } + + memo.total = total + memo.id, memo.slices = id, make([]ChartSlice, len(items)) + for i, it := range items { + memo.slices[i] = ChartSlice{Label: it.Name, Value: it.Value} + } + memo.parts = pieMerge(memo.slices, 1, msg(c, "pie_chart.other")) + memo.markers = make([]int, len(items)) + for i, it := range items { + at := slices.IndexFunc(memo.parts, func(part ChartSlice) bool { return part.Label == it.Name }) + if at < 0 { + at = len(memo.parts) - 1 + } + memo.markers[i] = at + } } + parts := memo.parts + total := memo.total frame := opts.Frame if frame.Height == 0 { frame.Height = 220 } - ui.Column(c).Width(frame.Height + 40).Children(func() { - res = PieChart(c, slices, PieChartOptions{Frame: frame, Donut: true, Format: opts.Format}) + ui.Column(c).Width(max(frame.Height+40, 300)).Children(func() { + res = PieChart(c, parts, PieChartOptions{Frame: frame, Donut: true, Format: opts.Format}) }) if total == 0 { return } size := FontSize(c, theme.CaptionSize) - g := ui.Grid(c).ColumnTracks(ui.FitContent(), ui.FitContent(), ui.FitContent(), ui.FitContent()).GapX(u * 4).GapY(u * 2). - Role(ui.RoleTable).Label(frame.Label) - g.Children(func() { - for _, h := range []string{"asset_allocation_chart.asset", "asset_allocation_chart.weight", "asset_allocation_chart.target", "asset_allocation_chart.drift"} { - ui.Text(c, msg(c, h)).FontSize(size).TextColor(k.TextMuted).Role(ui.RoleColumnHeader) - } - for i, it := range items { - w := it.Value / total * 100 - drift := w - it.Target - ui.Row(c).Key(it.Name).Gap(u * 2).AlignItems(ui.Center).Children(func() { - ui.Box(c).Size(12, 12).Draw(func(p *ui.Painter, r ui.Rect) { internal.Marker(p, i, r.X+6, r.Y+6, 10, pal[i%len(pal)]) }) - ui.Text(c, it.Name).SingleLine() + ui.Column(c).MinWidth(340).Grow(1).Children(func() { + g := ui.Grid(c).ColumnTracks(ui.Fr(2), ui.Fr(1), ui.Fr(1), ui.Fr(2)).GapX(u * 2).GapY(u * 2). + Role(ui.RoleTable).Label(frame.Label) + g.Children(func() { + for _, h := range []string{"asset_allocation_chart.asset", "asset_allocation_chart.weight", "asset_allocation_chart.target", "asset_allocation_chart.drift"} { + ui.Text(c, msg(c, h)).FontSize(size).TextColor(k.TextMuted).Role(ui.RoleColumnHeader) + } + }) + state := ui.Local(row, "mujica.allocation.rows", func() ui.ListState { return ui.ListState{} }) + ui.List(c, state, len(items), func(i int) { + it := items[i] + ui.Grid(c).ColumnTracks(ui.Fr(2), ui.Fr(1), ui.Fr(1), ui.Fr(2)).GapX(u * 2).MinHeight(Density(c).ControlHeight()).Children(func() { + w := it.Value / total * 100 + drift := w - it.Target + ui.Row(c).Key(it.Name).Gap(u * 2).AlignItems(ui.Center).Children(func() { + ui.Box(c).Size(12, 12).Draw(func(p *ui.Painter, r ui.Rect) { + internal.Marker(p, memo.markers[i], r.X+6, r.Y+6, 10, pal[memo.markers[i]%len(pal)]) + }) + ui.Text(c, it.Name).SingleLine() + }) + ui.Text(c, fmt.Sprintf("%.1f%%", w)).FontFeatures("tnum").JustifySelf(ui.End) + ui.Text(c, fmt.Sprintf("%.1f%%", it.Target)).FontFeatures("tnum").TextColor(k.TextMuted).JustifySelf(ui.End) + allocationDrift(c, drift, tol) }) - ui.Text(c, fmt.Sprintf("%.1f%%", w)).FontFeatures("tnum").JustifySelf(ui.End) - ui.Text(c, fmt.Sprintf("%.1f%%", it.Target)).FontFeatures("tnum").TextColor(k.TextMuted).JustifySelf(ui.End) - allocationDrift(c, drift, tol) - } + }).Height(min(float32(len(items))*Density(c).ControlHeight(), 240)) }) }) res.Element = row return res } -// allocationDrift shows the drift in points; beyond tolerance it warns with an icon and a word. +type allocationSlices struct { + id string + slices []ChartSlice + total float64 + parts []ChartSlice + markers []int +} + func allocationDrift(c *ui.Context, drift, tol float64) { k := Tokens(c) text := statisticSigned(drift, 1) + " pt" diff --git a/asset_allocation_chart_test.go b/asset_allocation_chart_test.go new file mode 100644 index 0000000..9e513dc --- /dev/null +++ b/asset_allocation_chart_test.go @@ -0,0 +1,62 @@ +package mujica + +import ( + "github.com/egoist/mygo/ui" + "mujicaui/internal" + "mujicaui/theme" + "testing" +) + +func TestAssetAllocationChartWeightsDriftAndKeys(t *testing.T) { + items := []AllocationItem{{"Stocks", 60, 50}, {"Bonds", 30, 40}, {"Cash", 10, 10}} + var last ChartResult + tt := chatTester(960, 420, func(c *ui.Context) { + last = AssetAllocationChart(c, items, AssetAllocationChartOptions{Frame: ChartFrame{Label: "Allocation"}}) + }) + if !tt.HasText("60.0%") || !tt.HasText("+10.0 pt") || !tt.HasText("−10.0 pt") || !tt.HasText("Over") || !tt.HasText("Under") { + t.Fatalf("weights %q", tt.Texts()) + } + tt.Key(0, ui.KeyTab) + tt.Key(0, ui.KeyHome) + if last.Point != 0 { + t.Fatalf("point %d", last.Point) + } + tt.Key(0, ui.KeyEnd) + if last.Point != 2 { + t.Fatalf("point %d", last.Point) + } + marketsPanic(t, func(c *ui.Context) { + AssetAllocationChart(c, []AllocationItem{{"Bad", 1, 101}}, AssetAllocationChartOptions{Frame: ChartFrame{Label: "x"}}) + }) +} +func TestAssetAllocationChartSnapshot(t *testing.T) { + + snapshot(t, "asset_allocation_chart", 760, 380, func(c *ui.Context) { + ui.Column(c).Padding(16).Gap(12).Fill().Children(func() { + AssetAllocationChart(c, []AllocationItem{{"Stocks", 62000, 55}, {"Bonds", 25000, 30}, {"Cash", 8000, 10}, {"Gold", 5000, 5}}, AssetAllocationChartOptions{Frame: ChartFrame{Label: "Allocation"}}) + + }) + }) +} + +func TestAssetAllocationChartMergedMarkers(t *testing.T) { + items := []AllocationItem{{"Tiny A", 0.1, 0}, {"Tiny B", 0.1, 0}, {"Stocks", 99.8, 0}} + tt := chatTester(960, 420, func(c *ui.Context) { + AssetAllocationChart(c, items, AssetAllocationChartOptions{Frame: ChartFrame{Label: "Allocation"}}) + }) + r, _ := tt.Find("99.8%") + asset, _ := tt.Find("Asset") + palette := internal.Palette(theme.Light()) + found := false + for y := int(r.Y); y < int(r.Y+r.H); y++ { + for x := int(asset.X); x < int(r.X); x++ { + pixel := tt.Image().RGBAAt(x, y) + if pixel.R == palette[0].R && pixel.G == palette[0].G && pixel.B == palette[0].B { + found = true + } + } + } + if !found { + t.Fatal("Stocks list marker differs from its donut marker") + } +} diff --git a/currency_converter.go b/currency_converter.go index b61303d..7c0ac34 100644 --- a/currency_converter.go +++ b/currency_converter.go @@ -12,7 +12,6 @@ import ( "mujicaui/theme" ) -// Currency is a currency the converter offers; Decimals is its minor-unit precision. type Currency struct { Code, Name string Decimals int @@ -20,29 +19,29 @@ type Currency struct { // CurrencyConverterState is the amount and the pair being converted. type CurrencyConverterState struct { - Amount float64 - From, To string + Amount float64 + From, To string + rate float64 + rateFrom, rateTo string + rateBound bool } // CurrencyConverterOptions configure a CurrencyConverter. type CurrencyConverterOptions struct { - // Rate converts one From into To; zero shows it is unavailable. Rate float64 - // RateTime is when the caller's rate was quoted; zero hides it. - RateTime time.Time - Disabled bool + // RateFrom and RateTo identify refreshed rates, including equal rates. + RateFrom, RateTo string + RateTime time.Time + Disabled bool } -// CurrencyConverterView is a built converter, the result, and whether the pair changed. type CurrencyConverterView struct { Element *ui.Element - // Result is Amount in To, rounded to its decimals; NaN without a rate. - Result float64 + Result float64 // PairChanged asks the caller for the new pair's rate. PairChanged bool } -// CurrencyConverter picks and swaps two currencies and converts at the caller's rate. func CurrencyConverter(c *ui.Context, s *CurrencyConverterState, currencies []Currency, opts CurrencyConverterOptions) CurrencyConverterView { if s == nil || len(currencies) < 2 { panic("mujica: CurrencyConverter needs a state and two currencies") @@ -50,7 +49,27 @@ func CurrencyConverter(c *ui.Context, s *CurrencyConverterState, currencies []Cu if opts.Rate < 0 || math.IsNaN(opts.Rate) || math.IsInf(opts.Rate, 0) { panic("mujica: CurrencyConverter Rate must be finite and not negative") } + seen := map[string]bool{} + for _, cur := range currencies { + if cur.Code == "" || seen[cur.Code] || cur.Decimals < 0 || cur.Decimals > 12 { + panic("mujica: currencies need unique codes and decimals in 0..12") + } + seen[cur.Code] = true + } + if s.Amount < 0 || math.IsNaN(s.Amount) || math.IsInf(s.Amount, 0) { + panic("mujica: currency amount must be finite and nonnegative") + } from, to := currencyFind(currencies, s.From), currencyFind(currencies, s.To) + rate := opts.Rate + if !s.rateBound || s.rate != rate || opts.RateFrom != "" || opts.RateTo != "" { + s.rate, s.rateFrom, s.rateTo, s.rateBound = rate, s.From, s.To, true + if opts.RateFrom != "" || opts.RateTo != "" { + s.rateFrom, s.rateTo = opts.RateFrom, opts.RateTo + } + } + if s.From != s.rateFrom || s.To != s.rateTo { + rate = 0 + } k := Tokens(c) u := Density(c).Unit() options := make([]SelectOption[string], len(currencies)) @@ -58,11 +77,16 @@ func CurrencyConverter(c *ui.Context, s *CurrencyConverterState, currencies []Cu options[i] = SelectOption[string]{Value: cur.Code, Label: cur.Code + " · " + cur.Name} } v := CurrencyConverterView{Result: math.NaN()} - if opts.Rate > 0 { - v.Result = numberInputSpec{decimals: to.Decimals}.round(s.Amount * opts.Rate) + if rate > 0 { + v.Result = numberInputSpec{decimals: to.Decimals}.round(s.Amount * rate) } v.Element = ui.Column(c).Gap(u*3).Padding(u*4).Background(k.Surface).Border(theme.BorderWidth, k.Border). Radius(theme.CardRadius).Disabled(opts.Disabled) + opts.Disabled = v.Element.IsDisabled() + if opts.Disabled { + copy := *s + s = © + } v.Element.Children(func() { ui.Row(c).Gap(u * 2).AlignItems(ui.End).Wrap().Children(func() { FormField(c, msg(c, "currency_converter.amount"), FormFieldOptions{}, func() *ui.Element { @@ -85,7 +109,13 @@ func CurrencyConverter(c *ui.Context, s *CurrencyConverterState, currencies []Cu return r.Element }) }) - if opts.Rate == 0 { + from, to = currencyFind(currencies, s.From), currencyFind(currencies, s.To) + if v.PairChanged { + v.Result = math.NaN() + } else if rate > 0 { + v.Result = numberInputSpec{decimals: to.Decimals}.round(s.Amount * rate) + } + if rate == 0 || v.PairChanged { ui.Text(c, msg(c, "currency_converter.no_rate")).TextColor(k.TextMuted).Role(ui.RoleStatus) return } @@ -95,7 +125,7 @@ func CurrencyConverter(c *ui.Context, s *CurrencyConverterState, currencies []Cu ui.Text(c, statisticFormat(v.Result, to.Decimals)+" "+to.Code).Font(theme.SerifFont).FontSize(FontSize(c, theme.H2Size)). TextColor(k.Text).FontFeatures("tnum") }) - note := fmt.Sprintf(msg(c, "currency_converter.rate"), from.Code, opts.Rate, to.Code) + note := fmt.Sprintf(msg(c, "currency_converter.rate"), from.Code, rate, to.Code) if !opts.RateTime.IsZero() { note += " · " + opts.RateTime.Format("2006-01-02 15:04") } diff --git a/currency_converter_test.go b/currency_converter_test.go new file mode 100644 index 0000000..fa2d927 --- /dev/null +++ b/currency_converter_test.go @@ -0,0 +1,42 @@ +package mujica + +import ( + "github.com/egoist/mygo/ui" + "math" + "testing" +) + +func TestCurrencyConverterPrecisionAmountAndNoRate(t *testing.T) { + s := CurrencyConverterState{Amount: 1.23, From: "USD", To: "JPY"} + var last CurrencyConverterView + rate := 149.37 + disabled := false + currencies := []Currency{{"USD", "Dollar", 2}, {"JPY", "Yen", 0}} + tt := chatTester(960, 300, func(c *ui.Context) { + last = CurrencyConverter(c, &s, currencies, CurrencyConverterOptions{Rate: rate, Disabled: disabled}) + }) + if last.Result != 184 || !tt.HasText("184 JPY") { + t.Fatalf("result %v text %q", last.Result, tt.Texts()) + } + rate = 0 + tt.Frame() + if !math.IsNaN(last.Result) || !tt.HasText("Rate unavailable") { + t.Fatal("missing rate") + } + disabled = true + tt.Frame() + _ = tt.Click("Swap currencies") + if s.From != "USD" { + t.Fatal("disabled swapped") + } + marketsPanic(t, func(c *ui.Context) { CurrencyConverter(c, &s, currencies, CurrencyConverterOptions{Rate: -1}) }) +} +func TestCurrencyConverterSnapshot(t *testing.T) { + cs := CurrencyConverterState{Amount: 100, From: "USD", To: "JPY"} + snapshot(t, "currency_converter", 760, 260, func(c *ui.Context) { + ui.Column(c).Padding(16).Gap(12).Fill().Children(func() { + CurrencyConverter(c, &cs, []Currency{{"USD", "US Dollar", 2}, {"JPY", "Yen", 0}, {"EUR", "Euro", 2}}, CurrencyConverterOptions{Rate: 149.37, RateTime: mktNow}) + + }) + }) +} diff --git a/docs/components/181-option-chain.md b/docs/components/181-option-chain.md new file mode 100644 index 0000000..7052dac --- /dev/null +++ b/docs/components/181-option-chain.md @@ -0,0 +1,40 @@ +# 181 OptionChain + +## 用途 + +期权链。 + +## 最小示例 + +```go +var state mujica.OptionChainState +rows := []mujica.OptionStrike{{Strike: 100, Call: mujica.OptionQuote{Bid: 3, Ask: 3.2, Last: 3.1}, Put: mujica.OptionQuote{Bid: 2, Ask: 2.2, Last: 2.1}}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.OptionChain(c, &state, []string{"Oct 17", "Nov 21"}, rows, mujica.OptionChainOptions{Spot: 100.4}) + if r.Changed || r.Submitted || r.ExpiryChanged { + fmt.Println(state.Expiry, state.Strike, state.Side) + } +} +ui.Render(view, 960, 440, 1) +``` + +## 参数 + +`s` 保存到期日和合约;`expiries` 至少一个;`strikes` 升序。`Spot` 默认 0 隐藏现价;`Decimals` 默认 2;`Disabled` 默认 false。 + +## 状态 + +默认;交互区域支持聚焦与选中,Disabled 参数控制禁用。 + +## 事件 + +if r.Changed || r.Submitted || r.ExpiryChanged { 调用方回调(state.Expiry, state.Strike, state.Side) } + +## 键盘操作 + +Tab 切换到期日或列表;上下、Home/End 选择行;左右切换认购认沽;Enter 确认。 + +## 限制 + +到期日切换后,由调用方更换对应报价;排序与稳定合约标识由调用方保证。 diff --git a/docs/components/182-greeks-table.md b/docs/components/182-greeks-table.md new file mode 100644 index 0000000..d78cefd --- /dev/null +++ b/docs/components/182-greeks-table.md @@ -0,0 +1,38 @@ +# 182 GreeksTable + +## 用途 + +希腊值表。 + +## 最小示例 + +```go +rows := []mujica.GreeksRow{{Label: "AAPL 100 C", Greeks: mujica.OptionGreeks{Delta: 0.5, Gamma: 0.03, Theta: -0.1, Vega: 0.2, Rho: 0.05}}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + mujica.GreeksTable(c, rows, mujica.GreeksTableOptions{Notes: true}) +} +ui.Render(view, 960, 440, 1) +``` + +## 参数 + +小数位范围 0—12;0 表示默认 4 位。 + +`rows` 为合约与五个数值;NaN 显示破折号。`Decimals` 默认 4;`Notes` 默认 false。 + +## 状态 + +默认与数据边界。 + +## 事件 + +展示组件;数据由调用方更新。 + +## 键盘操作 + +展示组件;表头提供说明和悬停提示。 + +## 限制 + +通过虚拟列表构建可见行;精度为显示规则,数值计算由调用方提供。 diff --git a/docs/components/183-payoff-diagram.md b/docs/components/183-payoff-diagram.md new file mode 100644 index 0000000..4094ea1 --- /dev/null +++ b/docs/components/183-payoff-diagram.md @@ -0,0 +1,39 @@ +# 183 PayoffDiagram + +## 用途 + +到期损益图。 + +## 最小示例 + +```go +legs := []mujica.OptionLeg{{Kind: mujica.LegCall, Strike: 100, Premium: 3, Quantity: 1}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.PayoffDiagram(c, legs, mujica.PayoffDiagramOptions{Frame: mujica.ChartFrame{Label: "Call payoff"}, Spot: 103}) + if r.Changed() || r.Retried() { + fmt.Println(r.Point) + } +} +ui.Render(view, 960, 440, 1) +``` + +## 参数 + +`legs` 为认购、认沽或标的组合;负数量表示卖出。`Frame.Label` 必填,`Height` 默认 240;`Spot` 默认 0;`Low/High` 默认行权价上下 30%;`Points` 默认 101;`Format` 可覆盖读数。 + +## 状态 + +默认与数据边界;图表的 Frame 支持加载、空、失败占位。 + +## 事件 + +if r.Changed() || r.Retried() { 调用方回调(r.Point) } + +## 键盘操作 + +Tab 聚焦;方向键、Home/End 逐点读数;Escape 清除。 + +## 限制 + +计算到期损益,合约乘数由 Quantity 表达;价格采样数量由 Points 指定。 diff --git a/docs/components/184-watchlist.md b/docs/components/184-watchlist.md new file mode 100644 index 0000000..d3ae8c4 --- /dev/null +++ b/docs/components/184-watchlist.md @@ -0,0 +1,40 @@ +# 184 Watchlist + +## 用途 + +自选列表。 + +## 最小示例 + +```go +var state mujica.WatchlistState +groups := []mujica.WatchGroup{{Name: "Technology", Items: []mujica.WatchItem{{Symbol: "AAPL", Name: "Apple", Price: 227.5, Change: 2.7, ChangePercent: 1.2}}}, {Name: "Energy", Items: []mujica.WatchItem{{Symbol: "XOM", Price: 117.4}}}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.Watchlist(c, &state, groups, mujica.WatchlistOptions{}) + if r.Changed || r.Submitted || r.Moved { + fmt.Println(state.Selected, r.Rows, r.To) + } +} +ui.Render(view, 960, 440, 1) +``` + +## 参数 + +`s` 保存分组、代码和隐藏列;`groups` 至少一个;`Decimals` 默认 2;`Disabled` 默认 false。 + +## 状态 + +默认;交互区域支持聚焦与选中,Disabled 参数控制禁用。 + +## 事件 + +if r.Changed || r.Submitted || r.Moved { 调用方回调(state.Selected, r.Rows, r.To) } + +## 键盘操作 + +Tab 切换分组或列菜单;上下、Home/End 选择;Enter 确认;菜单 Space 开关列。 + +## 限制 + +拖动仅返回 Moved;调用方应用 Rows/To 调整顺序;刷新采用稳定 Symbol。 diff --git a/docs/components/185-symbol-search.md b/docs/components/185-symbol-search.md new file mode 100644 index 0000000..9879e92 --- /dev/null +++ b/docs/components/185-symbol-search.md @@ -0,0 +1,40 @@ +# 185 SymbolSearch + +## 用途 + +代码搜索。 + +## 最小示例 + +```go +var state mujica.SymbolSearchState +rows := []mujica.MarketSymbol{{Code: "AAPL", Name: "Apple", Market: "NASDAQ", Type: "Stock"}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.SymbolSearch(c, &state, rows, mujica.SymbolSearchOptions{Markets: []string{"NASDAQ", "NYSE"}, Recent: rows}) + if r.Changed || r.Picked || r.Retry { + fmt.Println(state.Query, state.Market, r.Chosen.Code) + } +} +ui.Render(view, 960, 440, 1) +``` + +## 参数 + +`s.Query/Market` 为调用方搜索条件;`results` 是调用方异步结果。`Markets` nil 隐藏过滤;`Recent` 为空查询时显示;`Loading/Error/Disabled` 默认零值。 + +## 状态 + +默认、聚焦、禁用;异步结果支持加载、失败和空。 + +## 事件 + +if r.Changed || r.Picked || r.Retry { 调用方回调(state.Query, state.Market, r.Chosen.Code) } + +## 键盘操作 + +Tab 聚焦输入与市场;Down 进入结果;Tab 到达结果按钮,Enter 选择。 + +## 限制 + +调用方处理搜索、市场过滤和最近记录;组件提供异步加载、失败和重试界面。 diff --git a/docs/components/186-symbol-badge.md b/docs/components/186-symbol-badge.md new file mode 100644 index 0000000..0f9edba --- /dev/null +++ b/docs/components/186-symbol-badge.md @@ -0,0 +1,39 @@ +# 186 SymbolBadge + +## 用途 + +代码徽标。 + +## 最小示例 + +```go +symbol := mujica.MarketSymbol{Code: "AAPL", Name: "Apple", Market: "NASDAQ", Type: "Stock"} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.SymbolBadge(c, symbol, mujica.SymbolBadgeOptions{Clickable: true}) + if r.Changed() { + fmt.Println(symbol.Code) + } +} +ui.Render(view, 960, 440, 1) +``` + +## 参数 + +`MarketSymbol.Code` 必填,Name、Market、Type 为调用方标签。`Clickable/Disabled` 默认 false。 + +## 状态 + +默认;交互区域支持聚焦与选中,Disabled 参数控制禁用。 + +## 事件 + +if r.Changed() { 调用方回调(symbol.Code) } + +## 键盘操作 + +Clickable 开启时 Tab 聚焦,Enter/Space 激活。 + +## 限制 + +市场和类型属于业务标签,由调用方本地化。 diff --git a/docs/components/187-market-heatmap.md b/docs/components/187-market-heatmap.md new file mode 100644 index 0000000..9e36f9a --- /dev/null +++ b/docs/components/187-market-heatmap.md @@ -0,0 +1,42 @@ +# 187 MarketHeatmap + +## 用途 + +市场热力图。 + +## 最小示例 + +```go +var path []string +root := mujica.HeatNode{Name: "Market", Children: []mujica.HeatNode{{Name: "Technology", Children: []mujica.HeatNode{{Name: "AAPL", Cap: 3000, Change: 1.2}, {Name: "MSFT", Cap: 2800, Change: -0.6}}}, {Name: "Energy", Cap: 450, Change: -2.1}}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.MarketHeatmap(c, &path, root, mujica.MarketHeatmapOptions{Frame: mujica.ChartFrame{Label: "Market"}}) + if r.Changed() || r.ValueChanged() || r.Retried() { + fmt.Println(path, r.Point) + } +} +ui.Render(view, 960, 440, 1) +``` + +## 参数 + +`Version` 在原地修改数据时递增。小于 4 DIP 的瓦片按屏幕网格汇总绘制,键盘仍逐项读取原始数据。 + +`path` 保存下钻路径;`root` 名称必填,子项名称唯一;`Cap` 为面积,`Change` 为百分比。`Frame.Label` 必填;`Scale` 默认 3。 + +## 状态 + +默认与数据边界;图表的 Frame 支持加载、空、失败占位。 + +## 事件 + +if r.Changed() || r.ValueChanged() || r.Retried() { 调用方回调(path, r.Point) } + +## 键盘操作 + +Tab 聚焦图;方向键逐块读数;Enter 下钻;Backspace 返回;路径按钮可用 Tab。 + +## 限制 + +市场数据由调用方提供;原地修改数据后更换 Children 切片或递增 Version。 diff --git a/docs/components/188-screener.md b/docs/components/188-screener.md new file mode 100644 index 0000000..0eedfe4 --- /dev/null +++ b/docs/components/188-screener.md @@ -0,0 +1,41 @@ +# 188 Screener + +## 用途 + +选股器。 + +## 最小示例 + +```go +var state mujica.ScreenerState +fields := []mujica.ScreenerField{{ID: "pe", Label: "P/E", Decimals: 1}} +rows := []mujica.ScreenerRow{{Symbol: "AAPL", Values: map[string]float64{"pe": 34}}, {Symbol: "XOM", Values: map[string]float64{"pe": 13}}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.Screener(c, &state, fields, rows, mujica.ScreenerOptions{}) + if r.Changed || r.Save || r.Table.Changed() || r.Table.Submitted() || r.Table.SortChanged() || r.Table.Retried() { + fmt.Println(state.Conditions) + } +} +ui.Render(view, 960, 440, 1) +``` + +## 参数 + +`s.Conditions` 保存条件;`fields` 至少一项,ID 唯一;`rows.Values` 为字段值。`Version` 原地更新递增;`Status/Error/Disabled` 默认零值。 + +## 状态 + +默认、聚焦、禁用;异步结果支持加载、失败和空。 + +## 事件 + +if r.Changed || r.Save || r.Table.Changed() || r.Table.Submitted() || r.Table.SortChanged() || r.Table.Retried() { 调用方回调(state.Conditions) } + +## 键盘操作 + +Tab 到达字段、比较、数值和保存;Select 方向键选择;NumberInput 方向键步进;表格方向键选择。 + +## 限制 + +全部条件取交集;保存由调用方处理;缺失值无法通过条件。 diff --git a/docs/components/189-market-overview.md b/docs/components/189-market-overview.md new file mode 100644 index 0000000..d51df94 --- /dev/null +++ b/docs/components/189-market-overview.md @@ -0,0 +1,39 @@ +# 189 MarketOverview + +## 用途 + +市场概览。 + +## 最小示例 + +```go +indices := []mujica.IndexQuote{{Name: "S&P 500", Price: 5751.07, Change: 51.13, ChangePercent: 0.9, Series: []float64{5700, 5730, 5720, 5751}}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.MarketOverview(c, indices, mujica.MarketOverviewOptions{Breadth: mujica.MarketBreadth{Advancing: 2100, Declining: 1400, Unchanged: 300}}) + if r.Chosen >= 0 { + fmt.Println(indices[r.Chosen].Name) + } +} +ui.Render(view, 960, 440, 1) +``` + +## 参数 + +`indices` 为指数报价组;`Breadth` 是非负涨跌家数;`AsOf` 零值隐藏时间戳;`Decimals` 默认 2;`Disabled` 默认 false。 + +## 状态 + +默认;交互区域支持聚焦与选中,Disabled 参数控制禁用。 + +## 事件 + +if r.Chosen >= 0 { 调用方回调(indices[r.Chosen].Name) } + +## 键盘操作 + +Tab 到达指数卡片;Enter/Space 选择。 + +## 限制 + +提供展示与点击事件;行情获取由调用方负责。 diff --git a/docs/components/190-index-card.md b/docs/components/190-index-card.md new file mode 100644 index 0000000..1ee8e95 --- /dev/null +++ b/docs/components/190-index-card.md @@ -0,0 +1,39 @@ +# 190 IndexCard + +## 用途 + +指数卡片。 + +## 最小示例 + +```go +quote := mujica.IndexQuote{Name: "S&P 500", Price: 5751.07, Change: 51.13, ChangePercent: 0.9, Series: []float64{5700, 5730, 5720, 5751}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.IndexCard(c, quote, mujica.IndexCardOptions{Clickable: true}) + if r.Changed() { + fmt.Println(quote.Name) + } +} +ui.Render(view, 960, 440, 1) +``` + +## 参数 + +`q.Name` 必填;Price、Change、ChangePercent 和 Series 来自调用方。`Decimals` 默认 2;`Clickable/Disabled` 默认 false。 + +## 状态 + +默认;交互区域支持聚焦与选中,Disabled 参数控制禁用。 + +## 事件 + +if r.Changed() { 调用方回调(quote.Name) } + +## 键盘操作 + +Tab 聚焦卡片或迷你图;Enter/Space 激活卡片,图表方向键读数。 + +## 限制 + +迷你图复用 Sparkline;行情获取由调用方负责。 diff --git a/docs/components/191-market-status.md b/docs/components/191-market-status.md new file mode 100644 index 0000000..1bee179 --- /dev/null +++ b/docs/components/191-market-status.md @@ -0,0 +1,36 @@ +# 191 MarketStatus + +## 用途 + +市场状态。 + +## 最小示例 + +```go +now := time.Date(2026, 10, 5, 14, 30, 0, 0, time.UTC) +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + mujica.MarketStatus(c, mujica.MarketOpen, mujica.MarketStatusOptions{Market: "NYSE", Now: now, Next: now.Add(5 * time.Hour), NextPhase: mujica.MarketAfterHours}) +} +ui.Render(view, 960, 440, 1) +``` + +## 参数 + +`phase` 支持五个 MarketPhase;`Market` 默认空;`Next` 零值隐藏;`NextPhase` 默认 Closed;`Now` 零值使用窗口时间。 + +## 状态 + +默认与数据边界。 + +## 事件 + +展示组件;数据由调用方更新。 + +## 键盘操作 + +展示组件。 + +## 限制 + +使用窗口时间时每分钟刷新;传入 Now 时由调用方推进时间。 diff --git a/docs/components/192-trading-session-clock.md b/docs/components/192-trading-session-clock.md new file mode 100644 index 0000000..67239a0 --- /dev/null +++ b/docs/components/192-trading-session-clock.md @@ -0,0 +1,37 @@ +# 192 TradingSessionClock + +## 用途 + +交易时段时钟。 + +## 最小示例 + +```go +now := time.Date(2026, 10, 5, 14, 30, 0, 0, time.UTC) +markets := []mujica.SessionMarket{{Name: "NYSE", Location: time.FixedZone("EDT", -4*3600), Sessions: []mujica.TradingSession{{Phase: mujica.MarketOpen, Start: 570, End: 960}}}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + mujica.TradingSessionClock(c, markets, mujica.TradingSessionClockOptions{Now: now}) +} +ui.Render(view, 960, 440, 1) +``` + +## 参数 + +`markets` 每项包含 Name、Location 与有序时段;Start/End 是本地午夜后的分钟;`Holiday` 默认 false;`Now` 零值使用窗口时间。 + +## 状态 + +默认与数据边界。 + +## 事件 + +展示组件;数据由调用方更新。 + +## 键盘操作 + +展示组件。 + +## 限制 + +每天重复时段由调用方指定;节假日由 Holiday 指定;跨午夜时段拆分为两个日期的时段。 diff --git a/docs/components/193-economic-calendar.md b/docs/components/193-economic-calendar.md new file mode 100644 index 0000000..6f1a6d4 --- /dev/null +++ b/docs/components/193-economic-calendar.md @@ -0,0 +1,40 @@ +# 193 EconomicCalendar + +## 用途 + +经济日历。 + +## 最小示例 + +```go +var state mujica.EconomicCalendarState +rows := []mujica.EconomicEvent{{ID: "jobs", Country: "US", Title: "Payrolls", Time: time.Date(2026, 10, 5, 14, 30, 0, 0, time.UTC), Importance: 3, Forecast: "150K", Previous: "142K", Actual: "254K"}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.EconomicCalendar(c, &state, rows, mujica.EconomicCalendarOptions{}) + if r.Changed() || r.Submitted() || r.SortChanged() || r.Retried() { + fmt.Println(state.Table.Selected()) + } +} +ui.Render(view, 960, 440, 1) +``` + +## 参数 + +`s` 保存国家、重要性和表格状态;`events` 的 ID 稳定且重要性 1—3。`Version` 原地更新递增;`Status/Error/Disabled` 默认零值。 + +## 状态 + +默认、聚焦、禁用;异步结果支持加载、失败和空。 + +## 事件 + +if r.Changed() || r.Submitted() || r.SortChanged() || r.Retried() { 调用方回调(state.Table.Selected()) } + +## 键盘操作 + +Tab 到达国家过滤、重要性和表格;方向键选择;Enter 提交行。 + +## 限制 + +事件数据与发布结果由调用方提供;过滤与排序缓存直到数据或条件变更。 diff --git a/docs/components/194-earnings-calendar.md b/docs/components/194-earnings-calendar.md new file mode 100644 index 0000000..9efde0e --- /dev/null +++ b/docs/components/194-earnings-calendar.md @@ -0,0 +1,40 @@ +# 194 EarningsCalendar + +## 用途 + +财报日历。 + +## 最小示例 + +```go +var state mujica.DataTableState[string] +rows := []mujica.EarningsEvent{{ID: "a", Symbol: "AAPL", Name: "Apple", Date: mujica.Date{Year: 2026, Month: 10, Day: 30}, Timing: mujica.EarningsAfterClose, EPSEstimate: 1.6, EPSActual: 1.64}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.EarningsCalendar(c, &state, rows, mujica.EarningsCalendarOptions{}) + if r.Changed() || r.Submitted() || r.SortChanged() || r.Retried() { + fmt.Println(state.Selected()) + } +} +ui.Render(view, 960, 440, 1) +``` + +## 参数 + +`s` 保存表格状态;`events` 使用稳定 ID、Date 和盘前盘后时段;EPSActual 的 NaN 表示待公布。`Version` 原地更新递增;`Status/Error/Disabled` 默认零值。 + +## 状态 + +默认、聚焦、禁用;异步结果支持加载、失败和空。 + +## 事件 + +if r.Changed() || r.Submitted() || r.SortChanged() || r.Retried() { 调用方回调(state.Selected()) } + +## 键盘操作 + +Tab 聚焦表格;方向键及 Home/End 选择;Enter 提交;表头支持键盘排序。 + +## 限制 + +NaN 表示待公布;零预期仅显示金额差;财报数据由调用方提供。 diff --git a/docs/components/195-news-feed.md b/docs/components/195-news-feed.md new file mode 100644 index 0000000..7d340db --- /dev/null +++ b/docs/components/195-news-feed.md @@ -0,0 +1,42 @@ +# 195 NewsFeed + +## 用途 + +新闻流。 + +## 最小示例 + +```go +var state mujica.NewsFeedState +rows := []mujica.NewsItem{{ID: "a", Title: "Apple unveils new chips", Source: "Wire", Time: time.Date(2026, 10, 5, 14, 30, 0, 0, time.UTC), Symbols: []string{"AAPL"}}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.NewsFeed(c, &state, rows, mujica.NewsFeedOptions{}) + if r.Opened != "" || r.Symbol != "" || r.Retry { + fmt.Println(r.Opened, r.Symbol) + } +} +ui.Render(view, 960, 440, 1) +``` + +## 参数 + +`Version` 在调用方原地修改新闻或已读映射时递增;`ReadChanged` 报告已读状态变化。 + +`s.Read` 以 ID 保存已读;`items` 按调用方给定顺序显示。`Today` 默认窗口日期;`Status/Error/Disabled` 默认零值。 + +## 状态 + +默认、聚焦、禁用;异步结果支持加载、失败和空。 + +## 事件 + +if r.Opened != "" || r.Symbol != "" || r.Retry { 调用方回调(r.Opened, r.Symbol) } + +## 键盘操作 + +Tab 聚焦列表或相关代码;上下选择;Enter 打开并标记已读。 + +## 限制 + +虚拟化构建可见行;读取状态以稳定 ID 保存;链接打开由调用方负责。 diff --git a/docs/components/196-sentiment-gauge.md b/docs/components/196-sentiment-gauge.md new file mode 100644 index 0000000..43c5d1f --- /dev/null +++ b/docs/components/196-sentiment-gauge.md @@ -0,0 +1,36 @@ +# 196 SentimentGauge + +## 用途 + +情绪仪表。 + +## 最小示例 + +```go +value := 72.0 +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + mujica.SentimentGauge(c, value, mujica.SentimentGaugeOptions{Label: "Fear & Greed"}) +} +ui.Render(view, 960, 440, 1) +``` + +## 参数 + +`value` 范围 0—100;`Label` 默认空;`Size` 默认 240 DIP,指定值至少 48 DIP。`Status/Error/Empty` 默认就绪、空文本、false,保留同一尺寸的加载、失败与空占位。 + +## 状态 + +默认与数据边界。 + +## 事件 + +`Retry` 回调报告错误占位的重试请求;数值由调用方更新。 + +## 键盘操作 + +Tab 聚焦仪表;方向键和 Home/End 朗读当前数值与区间文字。 + +## 限制 + +区间边界为 20、40、60、80;值域错误触发 panic。 diff --git a/docs/components/197-portfolio-summary.md b/docs/components/197-portfolio-summary.md new file mode 100644 index 0000000..f911137 --- /dev/null +++ b/docs/components/197-portfolio-summary.md @@ -0,0 +1,40 @@ +# 197 PortfolioSummary + +## 用途 + +资产总览。 + +## 最小示例 + +```go +account := "" +accounts := []mujica.PortfolioAccount{{ID: "a", Name: "Brokerage", Total: 120000, DayPnL: 1250, TotalReturn: 20000, Cost: 100000}, {ID: "b", Name: "Retirement", Total: 80000, DayPnL: -300, TotalReturn: 5000, Cost: 75000}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.PortfolioSummary(c, &account, accounts, mujica.PortfolioSummaryOptions{}) + if r.Changed() { + fmt.Println(account) + } +} +ui.Render(view, 960, 440, 1) +``` + +## 参数 + +`account` 空值汇总全部账户;`accounts` 使用稳定 ID。`Currency` 默认 $;`Decimals` 默认 2;`Disabled` 默认 false。 + +## 状态 + +默认;交互区域支持聚焦与选中,Disabled 参数控制禁用。 + +## 事件 + +if r.Changed() { 调用方回调(account) } + +## 键盘操作 + +Tab 聚焦账户组;方向键切换账户。 + +## 限制 + +收益、成本与资产数值由调用方计算;基数为 0 时隐藏比例。 diff --git a/docs/components/198-asset-allocation-chart.md b/docs/components/198-asset-allocation-chart.md new file mode 100644 index 0000000..48080f9 --- /dev/null +++ b/docs/components/198-asset-allocation-chart.md @@ -0,0 +1,41 @@ +# 198 AssetAllocationChart + +## 用途 + +资产配置图。 + +## 最小示例 + +```go +items := []mujica.AllocationItem{{Name: "Stocks", Value: 60, Target: 50}, {Name: "Bonds", Value: 30, Target: 40}, {Name: "Cash", Value: 10, Target: 10}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.AssetAllocationChart(c, items, mujica.AssetAllocationChartOptions{Frame: mujica.ChartFrame{Label: "Allocation"}}) + if r.Changed() || r.Retried() { + fmt.Println(r.Point) + } +} +ui.Render(view, 960, 440, 1) +``` + +## 参数 + +`Version` 在原地修改数据时递增。环形图合并小于 1 度的多个扇区;列表虚拟化保留每项的占比、目标与偏离。 + +`items` 包含 Name、Value、Target;目标总和为 100 或全部 0。`Frame.Label` 必填;`Tolerance` 默认 5 个百分点;`Format` 可覆盖数值。 + +## 状态 + +默认与数据边界;图表的 Frame 支持加载、空、失败占位。 + +## 事件 + +if r.Changed() || r.Retried() { 调用方回调(r.Point) } + +## 键盘操作 + +Tab 聚焦环形图;方向键逐项读数;Home/End 到首尾。 + +## 限制 + +列表同时提供占比、目标、偏离;负资产值触发 panic。 diff --git a/docs/components/199-performance-chart.md b/docs/components/199-performance-chart.md new file mode 100644 index 0000000..5140744 --- /dev/null +++ b/docs/components/199-performance-chart.md @@ -0,0 +1,46 @@ +# 199 PerformanceChart + +## 用途 + +收益曲线。 + +## 最小示例 + +```go +values := []float64{100, 110, 95, 120} +benchmark := []float64{100, 105, 108, 112} +times := []time.Time{time.Date(2026, 1, 1, 0, 0, 0, 0, time.UTC), time.Date(2026, 2, 1, 0, 0, 0, 0, time.UTC), time.Date(2026, 3, 1, 0, 0, 0, 0, time.UTC), time.Date(2026, 4, 1, 0, 0, 0, 0, time.UTC)} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.PerformanceChart(c, values, mujica.PerformanceChartOptions{Frame: mujica.ChartFrame{Label: "Performance"}, Times: times, Benchmark: benchmark}) + if r.Changed() || r.Retried() { + fmt.Println(r.Point) + } + if name, ok := r.Toggled(); ok { + fmt.Println(name) + } +} +ui.Render(view, 960, 440, 1) +``` + +## 参数 + +`Version` 在原地修改净值或基准时递增。 + +`values` 为正净值;`Times` 必填且递增;`Benchmark` nil 隐藏或与净值等长。`Frame.Label` 必填;`Name/BenchmarkName` 默认本地化名称。 + +## 状态 + +默认与数据边界;图表的 Frame 支持加载、空、失败占位。 + +## 事件 + +if r.Changed() || r.Retried() { 调用方回调(r.Point) }; if name, ok := r.Toggled(); ok { 调用方回调(name) } + +## 键盘操作 + +Tab 聚焦图和图例;方向键读数;Space 切换序列。 + +## 限制 + +净值先归一化为累计收益;最大回撤取峰值到谷值;日期与报价由调用方提供。 diff --git a/docs/components/200-currency-converter.md b/docs/components/200-currency-converter.md new file mode 100644 index 0000000..b580f81 --- /dev/null +++ b/docs/components/200-currency-converter.md @@ -0,0 +1,44 @@ +# 200 CurrencyConverter + +## 用途 + +货币换算。 + +## 最小示例 + +```go +state := mujica.CurrencyConverterState{Amount: 100, From: "USD", To: "JPY"} +currencies := []mujica.Currency{{Code: "USD", Name: "Dollar", Decimals: 2}, {Code: "JPY", Name: "Yen", Decimals: 0}} +rate := 149.37 +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.CurrencyConverter(c, &state, currencies, mujica.CurrencyConverterOptions{Rate: rate}) + if r.PairChanged { + rate = 0 + fmt.Println(state.From, state.To) + } +} +ui.Render(view, 960, 440, 1) +``` + +## 参数 + +`RateFrom/RateTo` 指定汇率所属货币对,支持数值相同的刷新结果;货币小数位范围 0—12。 + +`s` 保存金额及货币对;`currencies` 至少两种,Decimals 为最小单位精度。`Rate` 默认 0 表示待提供;`RateTime` 零值隐藏;`Disabled` 默认 false。 + +## 状态 + +默认;交互区域支持聚焦与选中,Disabled 参数控制禁用。 + +## 事件 + +if r.PairChanged { rate = 0; 调用方回调(state.From, state.To) } + +## 键盘操作 + +Tab 到达金额、币种和互换;方向键步进、选择;Enter/Space 互换。 + +## 限制 + +币种切换产生 PairChanged,调用方立即将 Rate 置 0 并获取新汇率;结果按目标货币精度取整。 diff --git a/earnings_calendar.go b/earnings_calendar.go index b1133bc..87092ed 100644 --- a/earnings_calendar.go +++ b/earnings_calendar.go @@ -10,7 +10,6 @@ import ( "mujicaui/theme" ) -// EarningsTiming is when a report comes. The zero value is EarningsUnknown. type EarningsTiming int const ( @@ -19,7 +18,6 @@ const ( EarningsAfterClose ) -// EarningsEvent is a scheduled report; NaN actuals are not yet reported. type EarningsEvent struct { ID, Symbol, Name string Date Date @@ -36,7 +34,6 @@ type EarningsCalendarOptions struct { Disabled bool } -// EarningsCalendar lists reports with before-open or after-close timing, estimate, actual and surprise. func EarningsCalendar(c *ui.Context, s *DataTableState[string], events []EarningsEvent, opts EarningsCalendarOptions) DataTableView { if s == nil { panic("mujica: EarningsCalendar needs a state") @@ -59,7 +56,7 @@ func EarningsCalendar(c *ui.Context, s *DataTableState[string], events []Earning {ID: "actual", Title: msg(c, "earnings_calendar.actual"), Width: 90, Align: ui.End, Sortable: true, Compare: func(a, b EarningsEvent) int { return cmp.Compare(a.EPSActual, b.EPSActual) }, Text: func(e EarningsEvent) string { return earningsValue(e.EPSActual) }}, - {ID: "surprise", Title: msg(c, "earnings_calendar.surprise"), Width: 110, Align: ui.End, + {ID: "surprise", Title: msg(c, "earnings_calendar.surprise"), Width: 150, Align: ui.End, Text: func(e EarningsEvent) string { return earningsSurpriseText(e) }, Cell: func(e EarningsEvent) { if d := e.EPSActual - e.EPSEstimate; !math.IsNaN(d) { @@ -71,6 +68,11 @@ func EarningsCalendar(c *ui.Context, s *DataTableState[string], events []Earning } var v DataTableView col := ui.Column(c).MinHeight(0).Grow(1).Disabled(opts.Disabled) + opts.Disabled = col.IsDisabled() + if opts.Disabled { + copy := *s + s = © + } col.Children(func() { v = DataTable(c, s, events, DataTableOptions[EarningsEvent, string]{Columns: cols, Key: func(e EarningsEvent) string { return e.ID }, Version: opts.Version, Status: opts.Status, Error: opts.Error, Empty: msg(c, "earnings_calendar.empty")}) @@ -108,7 +110,6 @@ func earningsValue(v float64) string { return statisticFormat(v, 2) } -// earningsSurpriseText is actual minus estimate, with the percent of the estimate. func earningsSurpriseText(e EarningsEvent) string { d := e.EPSActual - e.EPSEstimate if math.IsNaN(d) { diff --git a/earnings_calendar_test.go b/earnings_calendar_test.go new file mode 100644 index 0000000..56ec7fa --- /dev/null +++ b/earnings_calendar_test.go @@ -0,0 +1,38 @@ +package mujica + +import ( + "github.com/egoist/mygo/ui" + "math" + "testing" +) + +func TestEarningsCalendarTimingActualAndKeys(t *testing.T) { + var s DataTableState[string] + rows := []EarningsEvent{{ID: "a", Symbol: "AAPL", Date: Date{2026, 10, 30}, Timing: EarningsAfterClose, EPSEstimate: 1.6, EPSActual: 1.64}, {ID: "b", Symbol: "JPM", Date: Date{2026, 10, 11}, Timing: EarningsBeforeOpen, EPSEstimate: 4, EPSActual: math.NaN()}} + tt := chatTester(960, 420, func(c *ui.Context) { EarningsCalendar(c, &s, rows, EarningsCalendarOptions{}).Element.Height(380) }) + if !tt.HasText("Before open") || !tt.HasText("After close") || !tt.HasText("+0.04 (+2.5%)") || !tt.HasText("—") { + t.Fatalf("texts %q", tt.Texts()) + } + _ = tt.Click("AAPL") + tt.Key(0, ui.KeyDown) + id, ok := s.Selected() + if !ok || id != "b" { + t.Fatalf("selected %s %v", id, ok) + } + if earningsSurpriseText(EarningsEvent{EPSEstimate: 0, EPSActual: 2}) != "+2.00" { + t.Fatal("zero estimate") + } + marketsPanic(t, func(c *ui.Context) { + EarningsCalendar(c, &s, []EarningsEvent{{ID: "x", Timing: 99}}, EarningsCalendarOptions{}) + }) +} +func TestEarningsCalendarSnapshot(t *testing.T) { + snapshot(t, "earnings_calendar", 900, 300, func(c *ui.Context) { + es := ui.Local(c.Root(), "snapshot.earnings_calendar", func() DataTableState[string] { return DataTableState[string]{} }) + ui.Column(c).Padding(16).Gap(12).Fill().Children(func() { + EarningsCalendar(c, es, []EarningsEvent{{ID: "1", Symbol: "AAPL", Name: "Apple", Date: Date{2026, 10, 30}, Timing: EarningsAfterClose, EPSEstimate: 1.6, EPSActual: 1.64}, + {ID: "2", Symbol: "JPM", Name: "JPMorgan", Date: Date{2026, 10, 11}, Timing: EarningsBeforeOpen, EPSEstimate: 4.0, EPSActual: math.NaN()}}, EarningsCalendarOptions{}).Element.Height(240) + + }) + }) +} diff --git a/economic_calendar.go b/economic_calendar.go index c6643b1..adf2e71 100644 --- a/economic_calendar.go +++ b/economic_calendar.go @@ -23,7 +23,6 @@ type EconomicEvent struct { Forecast, Previous, Actual string } -// EconomicCalendarState is the country filter (empty shows all) and the table's state. type EconomicCalendarState struct { Countries []string // MinImportance hides events below it; zero shows all. @@ -33,8 +32,10 @@ type EconomicCalendarState struct { } type economicCache struct { - key string - rows []EconomicEvent + key string + rows []EconomicEvent + data string + countries []SelectOption[string] } // EconomicCalendarOptions configure an EconomicCalendar. @@ -45,7 +46,6 @@ type EconomicCalendarOptions struct { Disabled bool } -// EconomicCalendar lists economic events with importance, forecast, previous and actual, filtered by country. func EconomicCalendar(c *ui.Context, s *EconomicCalendarState, events []EconomicEvent, opts EconomicCalendarOptions) DataTableView { if s == nil { panic("mujica: EconomicCalendar needs a state") @@ -56,17 +56,28 @@ func EconomicCalendar(c *ui.Context, s *EconomicCalendarState, events []Economic u := Density(c).Unit() var v DataTableView col := ui.Column(c).Gap(u * 2).MinHeight(0).Grow(1).Disabled(opts.Disabled) + opts.Disabled = col.IsDisabled() + if opts.Disabled { + copy := *s + s = © + } col.Children(func() { - var countries []SelectOption[string] - for _, e := range events { - if e.ID == "" || e.Importance < 1 || e.Importance > 3 { - panic("mujica: EconomicEvent needs an ID and Importance 1..3") - } - if !slices.ContainsFunc(countries, func(o SelectOption[string]) bool { return o.Value == e.Country }) { - countries = append(countries, SelectOption[string]{Value: e.Country, Label: e.Country}) + if data := chartID(events) + fmt.Sprint(opts.Version); data != s.cache.data { + s.cache.data, s.cache.countries = data, nil + seen := map[string]bool{} + for _, e := range events { + if e.ID == "" || seen[e.ID] || e.Importance < 1 || e.Importance > 3 { + + panic("mujica: EconomicEvent needs an ID and Importance 1..3") + } + seen[e.ID] = true + if !slices.ContainsFunc(s.cache.countries, func(o SelectOption[string]) bool { return o.Value == e.Country }) { + s.cache.countries = append(s.cache.countries, SelectOption[string]{Value: e.Country, Label: e.Country}) + } } + slices.SortFunc(s.cache.countries, func(a, b SelectOption[string]) int { return cmp.Compare(a.Value, b.Value) }) } - slices.SortFunc(countries, func(a, b SelectOption[string]) int { return cmp.Compare(a.Value, b.Value) }) + countries := s.cache.countries ui.Row(c).Gap(u * 3).AlignItems(ui.Center).Wrap().Children(func() { MultiSelect(c, &s.Countries, countries, MultiSelectOptions{Placeholder: msg(c, "economic_calendar.all_countries"), Label: msg(c, "economic_calendar.countries"), Disabled: opts.Disabled}).Element.MinWidth(220) @@ -96,7 +107,7 @@ func EconomicCalendar(c *ui.Context, s *EconomicCalendarState, events []Economic {ID: "previous", Title: msg(c, "economic_calendar.previous"), Width: 90, Align: ui.End, Text: func(e EconomicEvent) string { return cmp.Or(e.Previous, "—") }}, } v = DataTable(c, &s.Table, rows, DataTableOptions[EconomicEvent, string]{Columns: cols, Key: func(e EconomicEvent) string { return e.ID }, - Status: opts.Status, Error: opts.Error, Empty: msg(c, "economic_calendar.empty")}) + Version: opts.Version, Status: opts.Status, Error: opts.Error, Empty: msg(c, "economic_calendar.empty")}) v.Element.Grow(1) }) v.Element = col @@ -122,7 +133,6 @@ func economicImportance(c *ui.Context, level int) { }) } -// economicFilter keeps events of the chosen countries and importance, only refiltering on change. func economicFilter(s *EconomicCalendarState, events []EconomicEvent, version int) []EconomicEvent { key := fmt.Sprint(chartID(events), version, s.MinImportance, strings.Join(s.Countries, "\x00")) if key == s.cache.key { diff --git a/economic_calendar_test.go b/economic_calendar_test.go new file mode 100644 index 0000000..07b2f5a --- /dev/null +++ b/economic_calendar_test.go @@ -0,0 +1,38 @@ +package mujica + +import ( + "github.com/egoist/mygo/ui" + "testing" +) + +func TestEconomicCalendarCountryAndImportance(t *testing.T) { + s := EconomicCalendarState{} + rows := []EconomicEvent{{ID: "us", Country: "US", Title: "Payrolls", Time: mktNow, Importance: 3, Forecast: "150K", Previous: "142K", Actual: "254K"}, {ID: "eu", Country: "EU", Title: "CPI", Time: mktNow, Importance: 1}} + tt := chatTester(960, 420, func(c *ui.Context) { EconomicCalendar(c, &s, rows, EconomicCalendarOptions{}).Element.Height(380) }) + if s.Table.Rows() != 2 || !tt.HasText("254K") || !tt.HasText("150K") || !tt.HasText("142K") { + t.Fatalf("rows %d texts %q", s.Table.Rows(), tt.Texts()) + } + _ = tt.Click("High") + if s.MinImportance != 3 || s.Table.Rows() != 1 { + t.Fatalf("importance %d rows %d", s.MinImportance, s.Table.Rows()) + } + s.MinImportance = 0 + s.Countries = []string{"EU"} + tt.Frame() + if s.Table.Rows() != 1 || !tt.HasText("CPI") || tt.HasText("Payrolls") { + t.Fatalf("country %q", tt.Texts()) + } + marketsPanic(t, func(c *ui.Context) { + EconomicCalendar(c, &s, []EconomicEvent{{ID: "x", Importance: 4}}, EconomicCalendarOptions{}) + }) +} +func TestEconomicCalendarSnapshot(t *testing.T) { + snapshot(t, "economic_calendar", 900, 360, func(c *ui.Context) { + ec := ui.Local(c.Root(), "snapshot.economic_calendar", func() EconomicCalendarState { return EconomicCalendarState{} }) + ui.Column(c).Padding(16).Gap(12).Fill().Children(func() { + EconomicCalendar(c, ec, []EconomicEvent{{ID: "1", Country: "US", Title: "Nonfarm payrolls", Time: mktNow, Importance: 3, Forecast: "150K", Previous: "142K", Actual: "254K"}, + {ID: "2", Country: "EU", Title: "CPI", Time: mktNow, Importance: 2, Forecast: "1.8%", Previous: "2.2%"}}, EconomicCalendarOptions{}).Element.Height(300) + + }) + }) +} diff --git a/example_markets_test.go b/example_markets_test.go new file mode 100644 index 0000000..0051779 --- /dev/null +++ b/example_markets_test.go @@ -0,0 +1,255 @@ +package mujica_test + +import ( + "fmt" + "github.com/egoist/mygo/ui" + mujica "mujicaui" + "time" +) + +func ExampleOptionChain() { + var state mujica.OptionChainState + rows := []mujica.OptionStrike{{Strike: 100, Call: mujica.OptionQuote{Bid: 3, Ask: 3.2, Last: 3.1}, Put: mujica.OptionQuote{Bid: 2, Ask: 2.2, Last: 2.1}}} + view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.OptionChain(c, &state, []string{"Oct 17", "Nov 21"}, rows, mujica.OptionChainOptions{Spot: 100.4}) + if r.Changed || r.Submitted || r.ExpiryChanged { + fmt.Println(state.Expiry, state.Strike, state.Side) + } + } + ui.Render(view, 960, 440, 1) +} + +func ExampleGreeksTable() { + rows := []mujica.GreeksRow{{Label: "AAPL 100 C", Greeks: mujica.OptionGreeks{Delta: 0.5, Gamma: 0.03, Theta: -0.1, Vega: 0.2, Rho: 0.05}}} + view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + mujica.GreeksTable(c, rows, mujica.GreeksTableOptions{Notes: true}) + } + ui.Render(view, 960, 440, 1) +} + +func ExamplePayoffDiagram() { + legs := []mujica.OptionLeg{{Kind: mujica.LegCall, Strike: 100, Premium: 3, Quantity: 1}} + view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.PayoffDiagram(c, legs, mujica.PayoffDiagramOptions{Frame: mujica.ChartFrame{Label: "Call payoff"}, Spot: 103}) + if r.Changed() || r.Retried() { + fmt.Println(r.Point) + } + } + ui.Render(view, 960, 440, 1) +} + +func ExampleWatchlist() { + var state mujica.WatchlistState + groups := []mujica.WatchGroup{{Name: "Technology", Items: []mujica.WatchItem{{Symbol: "AAPL", Name: "Apple", Price: 227.5, Change: 2.7, ChangePercent: 1.2}}}, {Name: "Energy", Items: []mujica.WatchItem{{Symbol: "XOM", Price: 117.4}}}} + view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.Watchlist(c, &state, groups, mujica.WatchlistOptions{}) + if r.Changed || r.Submitted || r.Moved { + fmt.Println(state.Selected, r.Rows, r.To) + } + } + ui.Render(view, 960, 440, 1) +} + +func ExampleSymbolSearch() { + var state mujica.SymbolSearchState + rows := []mujica.MarketSymbol{{Code: "AAPL", Name: "Apple", Market: "NASDAQ", Type: "Stock"}} + view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.SymbolSearch(c, &state, rows, mujica.SymbolSearchOptions{Markets: []string{"NASDAQ", "NYSE"}, Recent: rows}) + if r.Changed || r.Picked || r.Retry { + fmt.Println(state.Query, state.Market, r.Chosen.Code) + } + } + ui.Render(view, 960, 440, 1) +} + +func ExampleSymbolBadge() { + symbol := mujica.MarketSymbol{Code: "AAPL", Name: "Apple", Market: "NASDAQ", Type: "Stock"} + view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.SymbolBadge(c, symbol, mujica.SymbolBadgeOptions{Clickable: true}) + if r.Changed() { + fmt.Println(symbol.Code) + } + } + ui.Render(view, 960, 440, 1) +} + +func ExampleMarketHeatmap() { + var path []string + root := mujica.HeatNode{Name: "Market", Children: []mujica.HeatNode{{Name: "Technology", Children: []mujica.HeatNode{{Name: "AAPL", Cap: 3000, Change: 1.2}, {Name: "MSFT", Cap: 2800, Change: -0.6}}}, {Name: "Energy", Cap: 450, Change: -2.1}}} + view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.MarketHeatmap(c, &path, root, mujica.MarketHeatmapOptions{Frame: mujica.ChartFrame{Label: "Market"}}) + if r.Changed() || r.ValueChanged() || r.Retried() { + fmt.Println(path, r.Point) + } + } + ui.Render(view, 960, 440, 1) +} + +func ExampleScreener() { + var state mujica.ScreenerState + fields := []mujica.ScreenerField{{ID: "pe", Label: "P/E", Decimals: 1}} + rows := []mujica.ScreenerRow{{Symbol: "AAPL", Values: map[string]float64{"pe": 34}}, {Symbol: "XOM", Values: map[string]float64{"pe": 13}}} + view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.Screener(c, &state, fields, rows, mujica.ScreenerOptions{}) + if r.Changed || r.Save || r.Table.Changed() || r.Table.Submitted() || r.Table.SortChanged() || r.Table.Retried() { + fmt.Println(state.Conditions) + } + } + ui.Render(view, 960, 440, 1) +} + +func ExampleMarketOverview() { + indices := []mujica.IndexQuote{{Name: "S&P 500", Price: 5751.07, Change: 51.13, ChangePercent: 0.9, Series: []float64{5700, 5730, 5720, 5751}}} + view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.MarketOverview(c, indices, mujica.MarketOverviewOptions{Breadth: mujica.MarketBreadth{Advancing: 2100, Declining: 1400, Unchanged: 300}}) + if r.Chosen >= 0 { + fmt.Println(indices[r.Chosen].Name) + } + } + ui.Render(view, 960, 440, 1) +} + +func ExampleIndexCard() { + quote := mujica.IndexQuote{Name: "S&P 500", Price: 5751.07, Change: 51.13, ChangePercent: 0.9, Series: []float64{5700, 5730, 5720, 5751}} + view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.IndexCard(c, quote, mujica.IndexCardOptions{Clickable: true}) + if r.Changed() { + fmt.Println(quote.Name) + } + } + ui.Render(view, 960, 440, 1) +} + +func ExampleMarketStatus() { + now := time.Date(2026, 10, 5, 14, 30, 0, 0, time.UTC) + view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + mujica.MarketStatus(c, mujica.MarketOpen, mujica.MarketStatusOptions{Market: "NYSE", Now: now, Next: now.Add(5 * time.Hour), NextPhase: mujica.MarketAfterHours}) + } + ui.Render(view, 960, 440, 1) +} + +func ExampleTradingSessionClock() { + now := time.Date(2026, 10, 5, 14, 30, 0, 0, time.UTC) + markets := []mujica.SessionMarket{{Name: "NYSE", Location: time.FixedZone("EDT", -4*3600), Sessions: []mujica.TradingSession{{Phase: mujica.MarketOpen, Start: 570, End: 960}}}} + view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + mujica.TradingSessionClock(c, markets, mujica.TradingSessionClockOptions{Now: now}) + } + ui.Render(view, 960, 440, 1) +} + +func ExampleEconomicCalendar() { + var state mujica.EconomicCalendarState + rows := []mujica.EconomicEvent{{ID: "jobs", Country: "US", Title: "Payrolls", Time: time.Date(2026, 10, 5, 14, 30, 0, 0, time.UTC), Importance: 3, Forecast: "150K", Previous: "142K", Actual: "254K"}} + view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.EconomicCalendar(c, &state, rows, mujica.EconomicCalendarOptions{}) + if r.Changed() || r.Submitted() || r.SortChanged() || r.Retried() { + fmt.Println(state.Table.Selected()) + } + } + ui.Render(view, 960, 440, 1) +} + +func ExampleEarningsCalendar() { + var state mujica.DataTableState[string] + rows := []mujica.EarningsEvent{{ID: "a", Symbol: "AAPL", Name: "Apple", Date: mujica.Date{Year: 2026, Month: 10, Day: 30}, Timing: mujica.EarningsAfterClose, EPSEstimate: 1.6, EPSActual: 1.64}} + view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.EarningsCalendar(c, &state, rows, mujica.EarningsCalendarOptions{}) + if r.Changed() || r.Submitted() || r.SortChanged() || r.Retried() { + fmt.Println(state.Selected()) + } + } + ui.Render(view, 960, 440, 1) +} + +func ExampleNewsFeed() { + var state mujica.NewsFeedState + rows := []mujica.NewsItem{{ID: "a", Title: "Apple unveils new chips", Source: "Wire", Time: time.Date(2026, 10, 5, 14, 30, 0, 0, time.UTC), Symbols: []string{"AAPL"}}} + view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.NewsFeed(c, &state, rows, mujica.NewsFeedOptions{}) + if r.Opened != "" || r.Symbol != "" || r.Retry { + fmt.Println(r.Opened, r.Symbol) + } + } + ui.Render(view, 960, 440, 1) +} + +func ExampleSentimentGauge() { + value := 72.0 + view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + mujica.SentimentGauge(c, value, mujica.SentimentGaugeOptions{Label: "Fear & Greed"}) + } + ui.Render(view, 960, 440, 1) +} + +func ExamplePortfolioSummary() { + account := "" + accounts := []mujica.PortfolioAccount{{ID: "a", Name: "Brokerage", Total: 120000, DayPnL: 1250, TotalReturn: 20000, Cost: 100000}, {ID: "b", Name: "Retirement", Total: 80000, DayPnL: -300, TotalReturn: 5000, Cost: 75000}} + view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.PortfolioSummary(c, &account, accounts, mujica.PortfolioSummaryOptions{}) + if r.Changed() { + fmt.Println(account) + } + } + ui.Render(view, 960, 440, 1) +} + +func ExampleAssetAllocationChart() { + items := []mujica.AllocationItem{{Name: "Stocks", Value: 60, Target: 50}, {Name: "Bonds", Value: 30, Target: 40}, {Name: "Cash", Value: 10, Target: 10}} + view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.AssetAllocationChart(c, items, mujica.AssetAllocationChartOptions{Frame: mujica.ChartFrame{Label: "Allocation"}}) + if r.Changed() || r.Retried() { + fmt.Println(r.Point) + } + } + ui.Render(view, 960, 440, 1) +} + +func ExamplePerformanceChart() { + values := []float64{100, 110, 95, 120} + benchmark := []float64{100, 105, 108, 112} + times := []time.Time{time.Date(2026, 1, 1, 0, 0, 0, 0, time.UTC), time.Date(2026, 2, 1, 0, 0, 0, 0, time.UTC), time.Date(2026, 3, 1, 0, 0, 0, 0, time.UTC), time.Date(2026, 4, 1, 0, 0, 0, 0, time.UTC)} + view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.PerformanceChart(c, values, mujica.PerformanceChartOptions{Frame: mujica.ChartFrame{Label: "Performance"}, Times: times, Benchmark: benchmark}) + if r.Changed() || r.Retried() { + fmt.Println(r.Point) + } + if name, ok := r.Toggled(); ok { + fmt.Println(name) + } + } + ui.Render(view, 960, 440, 1) +} + +func ExampleCurrencyConverter() { + state := mujica.CurrencyConverterState{Amount: 100, From: "USD", To: "JPY"} + currencies := []mujica.Currency{{Code: "USD", Name: "Dollar", Decimals: 2}, {Code: "JPY", Name: "Yen", Decimals: 0}} + rate := 149.37 + view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.CurrencyConverter(c, &state, currencies, mujica.CurrencyConverterOptions{Rate: rate}) + if r.PairChanged { + rate = 0 + fmt.Println(state.From, state.To) + } + } + ui.Render(view, 960, 440, 1) +} diff --git a/examples/gallery/pages_markets.go b/examples/gallery/pages_markets.go index 6e7e272..efe5759 100644 --- a/examples/gallery/pages_markets.go +++ b/examples/gallery/pages_markets.go @@ -1,3 +1,233 @@ package main -var marketsPages = []page{} +import ( + "fmt" + "github.com/egoist/mygo/ui" + mujica "mujicaui" +) + +var marketsPages = []page{ + {ID: "181", Name: "OptionChain", ZhName: "期权链", Category: "Markets", Demo: marketsOptionChainDemo, Code: `var state mujica.OptionChainState +rows := []mujica.OptionStrike{{Strike: 100, Call: mujica.OptionQuote{Bid: 3, Ask: 3.2, Last: 3.1}, Put: mujica.OptionQuote{Bid: 2, Ask: 2.2, Last: 2.1}}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.OptionChain(c, &state, []string{"Oct 17", "Nov 21"}, rows, mujica.OptionChainOptions{Spot: 100.4}) + if r.Changed || r.Submitted || r.ExpiryChanged { + fmt.Println(state.Expiry, state.Strike, state.Side) + } +} +ui.Render(view, 960, 440, 1) +`, Keys: "Tab 切换到期日或列表;上下、Home/End 选择行;左右切换认购认沽;Enter 确认。"}, + {ID: "182", Name: "GreeksTable", ZhName: "希腊值表", Category: "Markets", Demo: marketsGreeksTableDemo, Code: `rows := []mujica.GreeksRow{{Label: "AAPL 100 C", Greeks: mujica.OptionGreeks{Delta: 0.5, Gamma: 0.03, Theta: -0.1, Vega: 0.2, Rho: 0.05}}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + mujica.GreeksTable(c, rows, mujica.GreeksTableOptions{Notes: true}) +} +ui.Render(view, 960, 440, 1) +`, Keys: "展示组件;表头提供说明和悬停提示。"}, + {ID: "183", Name: "PayoffDiagram", ZhName: "到期损益图", Category: "Markets", Demo: marketsPayoffDiagramDemo, Code: `legs := []mujica.OptionLeg{{Kind: mujica.LegCall, Strike: 100, Premium: 3, Quantity: 1}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.PayoffDiagram(c, legs, mujica.PayoffDiagramOptions{Frame: mujica.ChartFrame{Label: "Call payoff"}, Spot: 103}) + if r.Changed() || r.Retried() { + fmt.Println(r.Point) + } +} +ui.Render(view, 960, 440, 1) +`, Keys: "Tab 聚焦;方向键、Home/End 逐点读数;Escape 清除。"}, + {ID: "184", Name: "Watchlist", ZhName: "自选列表", Category: "Markets", Demo: marketsWatchlistDemo, Code: `var state mujica.WatchlistState +groups := []mujica.WatchGroup{{Name: "Technology", Items: []mujica.WatchItem{{Symbol: "AAPL", Name: "Apple", Price: 227.5, Change: 2.7, ChangePercent: 1.2}}}, {Name: "Energy", Items: []mujica.WatchItem{{Symbol: "XOM", Price: 117.4}}}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.Watchlist(c, &state, groups, mujica.WatchlistOptions{}) + if r.Changed || r.Submitted || r.Moved { + fmt.Println(state.Selected, r.Rows, r.To) + } +} +ui.Render(view, 960, 440, 1) +`, Keys: "Tab 切换分组或列菜单;上下、Home/End 选择;Enter 确认;菜单 Space 开关列。"}, + {ID: "185", Name: "SymbolSearch", ZhName: "代码搜索", Category: "Markets", Demo: marketsSymbolSearchDemo, Code: `var state mujica.SymbolSearchState +rows := []mujica.MarketSymbol{{Code: "AAPL", Name: "Apple", Market: "NASDAQ", Type: "Stock"}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.SymbolSearch(c, &state, rows, mujica.SymbolSearchOptions{Markets: []string{"NASDAQ", "NYSE"}, Recent: rows}) + if r.Changed || r.Picked || r.Retry { + fmt.Println(state.Query, state.Market, r.Chosen.Code) + } +} +ui.Render(view, 960, 440, 1) +`, Keys: "Tab 聚焦输入与市场;Down 进入结果;Tab 到达结果按钮,Enter 选择。"}, + {ID: "186", Name: "SymbolBadge", ZhName: "代码徽标", Category: "Markets", Demo: marketsSymbolBadgeDemo, Code: `symbol := mujica.MarketSymbol{Code: "AAPL", Name: "Apple", Market: "NASDAQ", Type: "Stock"} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.SymbolBadge(c, symbol, mujica.SymbolBadgeOptions{Clickable: true}) + if r.Changed() { + fmt.Println(symbol.Code) + } +} +ui.Render(view, 960, 440, 1) +`, Keys: "Clickable 开启时 Tab 聚焦,Enter/Space 激活。"}, + {ID: "187", Name: "MarketHeatmap", ZhName: "市场热力图", Category: "Markets", Demo: marketsMarketHeatmapDemo, Code: `var path []string +root := mujica.HeatNode{Name: "Market", Children: []mujica.HeatNode{{Name: "Technology", Children: []mujica.HeatNode{{Name: "AAPL", Cap: 3000, Change: 1.2}, {Name: "MSFT", Cap: 2800, Change: -0.6}}}, {Name: "Energy", Cap: 450, Change: -2.1}}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.MarketHeatmap(c, &path, root, mujica.MarketHeatmapOptions{Frame: mujica.ChartFrame{Label: "Market"}}) + if r.Changed() || r.ValueChanged() || r.Retried() { + fmt.Println(path, r.Point) + } +} +ui.Render(view, 960, 440, 1) +`, Keys: "Tab 聚焦图;方向键逐块读数;Enter 下钻;Backspace 返回;路径按钮可用 Tab。"}, + {ID: "188", Name: "Screener", ZhName: "选股器", Category: "Markets", Demo: marketsScreenerDemo, Code: `var state mujica.ScreenerState +fields := []mujica.ScreenerField{{ID: "pe", Label: "P/E", Decimals: 1}} +rows := []mujica.ScreenerRow{{Symbol: "AAPL", Values: map[string]float64{"pe": 34}}, {Symbol: "XOM", Values: map[string]float64{"pe": 13}}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.Screener(c, &state, fields, rows, mujica.ScreenerOptions{}) + if r.Changed || r.Save || r.Table.Changed() || r.Table.Submitted() || r.Table.SortChanged() || r.Table.Retried() { + fmt.Println(state.Conditions) + } +} +ui.Render(view, 960, 440, 1) +`, Keys: "Tab 到达字段、比较、数值和保存;Select 方向键选择;NumberInput 方向键步进;表格方向键选择。"}, + {ID: "189", Name: "MarketOverview", ZhName: "市场概览", Category: "Markets", Demo: marketsMarketOverviewDemo, Code: `indices := []mujica.IndexQuote{{Name: "S&P 500", Price: 5751.07, Change: 51.13, ChangePercent: 0.9, Series: []float64{5700, 5730, 5720, 5751}}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.MarketOverview(c, indices, mujica.MarketOverviewOptions{Breadth: mujica.MarketBreadth{Advancing: 2100, Declining: 1400, Unchanged: 300}}) + if r.Chosen >= 0 { + fmt.Println(indices[r.Chosen].Name) + } +} +ui.Render(view, 960, 440, 1) +`, Keys: "Tab 到达指数卡片;Enter/Space 选择。"}, + {ID: "190", Name: "IndexCard", ZhName: "指数卡片", Category: "Markets", Demo: marketsIndexCardDemo, Code: `quote := mujica.IndexQuote{Name: "S&P 500", Price: 5751.07, Change: 51.13, ChangePercent: 0.9, Series: []float64{5700, 5730, 5720, 5751}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.IndexCard(c, quote, mujica.IndexCardOptions{Clickable: true}) + if r.Changed() { + fmt.Println(quote.Name) + } +} +ui.Render(view, 960, 440, 1) +`, Keys: "Tab 聚焦卡片或迷你图;Enter/Space 激活卡片,图表方向键读数。"}, + {ID: "191", Name: "MarketStatus", ZhName: "市场状态", Category: "Markets", Demo: marketsMarketStatusDemo, Code: `now := time.Date(2026, 10, 5, 14, 30, 0, 0, time.UTC) +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + mujica.MarketStatus(c, mujica.MarketOpen, mujica.MarketStatusOptions{Market: "NYSE", Now: now, Next: now.Add(5 * time.Hour), NextPhase: mujica.MarketAfterHours}) +} +ui.Render(view, 960, 440, 1) +`, Keys: "展示组件。"}, + {ID: "192", Name: "TradingSessionClock", ZhName: "交易时段时钟", Category: "Markets", Demo: marketsTradingSessionClockDemo, Code: `now := time.Date(2026, 10, 5, 14, 30, 0, 0, time.UTC) +markets := []mujica.SessionMarket{{Name: "NYSE", Location: time.FixedZone("EDT", -4*3600), Sessions: []mujica.TradingSession{{Phase: mujica.MarketOpen, Start: 570, End: 960}}}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + mujica.TradingSessionClock(c, markets, mujica.TradingSessionClockOptions{Now: now}) +} +ui.Render(view, 960, 440, 1) +`, Keys: "展示组件。"}, + {ID: "193", Name: "EconomicCalendar", ZhName: "经济日历", Category: "Markets", Demo: marketsEconomicCalendarDemo, Code: `var state mujica.EconomicCalendarState +rows := []mujica.EconomicEvent{{ID: "jobs", Country: "US", Title: "Payrolls", Time: time.Date(2026, 10, 5, 14, 30, 0, 0, time.UTC), Importance: 3, Forecast: "150K", Previous: "142K", Actual: "254K"}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.EconomicCalendar(c, &state, rows, mujica.EconomicCalendarOptions{}) + if r.Changed() || r.Submitted() || r.SortChanged() || r.Retried() { + fmt.Println(state.Table.Selected()) + } +} +ui.Render(view, 960, 440, 1) +`, Keys: "Tab 到达国家过滤、重要性和表格;方向键选择;Enter 提交行。"}, + {ID: "194", Name: "EarningsCalendar", ZhName: "财报日历", Category: "Markets", Demo: marketsEarningsCalendarDemo, Code: `var state mujica.DataTableState[string] +rows := []mujica.EarningsEvent{{ID: "a", Symbol: "AAPL", Name: "Apple", Date: mujica.Date{Year: 2026, Month: 10, Day: 30}, Timing: mujica.EarningsAfterClose, EPSEstimate: 1.6, EPSActual: 1.64}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.EarningsCalendar(c, &state, rows, mujica.EarningsCalendarOptions{}) + if r.Changed() || r.Submitted() || r.SortChanged() || r.Retried() { + fmt.Println(state.Selected()) + } +} +ui.Render(view, 960, 440, 1) +`, Keys: "Tab 聚焦表格;方向键及 Home/End 选择;Enter 提交;表头支持键盘排序。"}, + {ID: "195", Name: "NewsFeed", ZhName: "新闻流", Category: "Markets", Demo: marketsNewsFeedDemo, Code: `var state mujica.NewsFeedState +rows := []mujica.NewsItem{{ID: "a", Title: "Apple unveils new chips", Source: "Wire", Time: time.Date(2026, 10, 5, 14, 30, 0, 0, time.UTC), Symbols: []string{"AAPL"}}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.NewsFeed(c, &state, rows, mujica.NewsFeedOptions{}) + if r.Opened != "" || r.Symbol != "" || r.Retry { + fmt.Println(r.Opened, r.Symbol) + } +} +ui.Render(view, 960, 440, 1) +`, Keys: "Tab 聚焦列表或相关代码;上下选择;Enter 打开并标记已读。"}, + {ID: "196", Name: "SentimentGauge", ZhName: "情绪仪表", Category: "Markets", Demo: marketsSentimentGaugeDemo, Code: `value := 72.0 +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + mujica.SentimentGauge(c, value, mujica.SentimentGaugeOptions{Label: "Fear & Greed"}) +} +ui.Render(view, 960, 440, 1) +`, Keys: "展示组件,数值与文字同时呈现。"}, + {ID: "197", Name: "PortfolioSummary", ZhName: "资产总览", Category: "Markets", Demo: marketsPortfolioSummaryDemo, Code: `account := "" +accounts := []mujica.PortfolioAccount{{ID: "a", Name: "Brokerage", Total: 120000, DayPnL: 1250, TotalReturn: 20000, Cost: 100000}, {ID: "b", Name: "Retirement", Total: 80000, DayPnL: -300, TotalReturn: 5000, Cost: 75000}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.PortfolioSummary(c, &account, accounts, mujica.PortfolioSummaryOptions{}) + if r.Changed() { + fmt.Println(account) + } +} +ui.Render(view, 960, 440, 1) +`, Keys: "Tab 聚焦账户组;方向键切换账户。"}, + {ID: "198", Name: "AssetAllocationChart", ZhName: "资产配置图", Category: "Markets", Demo: marketsAssetAllocationChartDemo, Code: `items := []mujica.AllocationItem{{Name: "Stocks", Value: 60, Target: 50}, {Name: "Bonds", Value: 30, Target: 40}, {Name: "Cash", Value: 10, Target: 10}} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.AssetAllocationChart(c, items, mujica.AssetAllocationChartOptions{Frame: mujica.ChartFrame{Label: "Allocation"}}) + if r.Changed() || r.Retried() { + fmt.Println(r.Point) + } +} +ui.Render(view, 960, 440, 1) +`, Keys: "Tab 聚焦环形图;方向键逐项读数;Home/End 到首尾。"}, + {ID: "199", Name: "PerformanceChart", ZhName: "收益曲线", Category: "Markets", Demo: marketsPerformanceChartDemo, Code: `values := []float64{100, 110, 95, 120} +benchmark := []float64{100, 105, 108, 112} +times := []time.Time{time.Date(2026, 1, 1, 0, 0, 0, 0, time.UTC), time.Date(2026, 2, 1, 0, 0, 0, 0, time.UTC), time.Date(2026, 3, 1, 0, 0, 0, 0, time.UTC), time.Date(2026, 4, 1, 0, 0, 0, 0, time.UTC)} +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.PerformanceChart(c, values, mujica.PerformanceChartOptions{Frame: mujica.ChartFrame{Label: "Performance"}, Times: times, Benchmark: benchmark}) + if r.Changed() || r.Retried() { + fmt.Println(r.Point) + } + if name, ok := r.Toggled(); ok { + fmt.Println(name) + } +} +ui.Render(view, 960, 440, 1) +`, Keys: "Tab 聚焦图和图例;方向键读数;Space 切换序列。"}, + {ID: "200", Name: "CurrencyConverter", ZhName: "货币换算", Category: "Markets", Demo: marketsCurrencyConverterDemo, Code: `state := mujica.CurrencyConverterState{Amount: 100, From: "USD", To: "JPY"} +currencies := []mujica.Currency{{Code: "USD", Name: "Dollar", Decimals: 2}, {Code: "JPY", Name: "Yen", Decimals: 0}} +rate := 149.37 +view := func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + r := mujica.CurrencyConverter(c, &state, currencies, mujica.CurrencyConverterOptions{Rate: rate}) + if r.PairChanged { + rate = 0 + fmt.Println(state.From, state.To) + } +} +ui.Render(view, 960, 440, 1) +`, Keys: "Tab 到达金额、币种和互换;方向键步进、选择;Enter/Space 互换。"}, +} + +func marketsDataState(c *ui.Context, id string, log func(string)) (mujica.DataStatus, bool, string) { + state := ui.Local(c.Root(), id+".status", func() int { return 0 }) + if mujica.RadioGroup(c, state, []mujica.RadioItem[int]{{Value: 0, Label: "Ready"}, {Value: 1, Label: "Loading"}, {Value: 2, Label: "Empty"}, {Value: 3, Label: "Error"}}, mujica.RadioGroupOptions{Horizontal: true}).Changed() { + log(fmt.Sprint("status ", *state)) + } + switch *state { + case 1: + return mujica.DataLoading, false, "" + case 2: + return mujica.DataReady, true, "" + case 3: + return mujica.DataFailed, false, "Sample failed" + } + return mujica.DataReady, false, "" +} diff --git a/examples/gallery/pages_markets_1.go b/examples/gallery/pages_markets_1.go new file mode 100644 index 0000000..0e0311a --- /dev/null +++ b/examples/gallery/pages_markets_1.go @@ -0,0 +1,165 @@ +package main + +import ( + "fmt" + "github.com/egoist/mygo/ui" + mujica "mujicaui" + "slices" + "strings" +) + +func marketsOptionChainDemo(c *ui.Context, log func(string)) { + disabled := ui.Local(c.Root(), "181.disabled", func() bool { return false }) + if mujica.Checkbox(c, disabled, "Disabled", mujica.CheckboxOptions{}).Changed() { + log(fmt.Sprint("disabled ", *disabled)) + } + state := ui.Local(c.Root(), "181.state", func() mujica.OptionChainState { return mujica.OptionChainState{} }) + rows := *ui.Local(c.Root(), "markets.OptionChain.rows.pages_markets_1", func() []mujica.OptionStrike { + return []mujica.OptionStrike{{Strike: 100, Call: mujica.OptionQuote{Bid: 3, Ask: 3.2, Last: 3.1}, Put: mujica.OptionQuote{Bid: 2, Ask: 2.2, Last: 2.1}}} + }) + + precision := ui.Local(c.Root(), "markets.OptionChain.precision", func() float64 { return 2 }) + if mujica.Slider(c, precision, mujica.SliderOptions{Min: 1, Max: 8, Step: 1, Label: "Decimals", ShowValue: true}).Changed() { + log(fmt.Sprint("decimals ", *precision)) + } + spot := ui.Local(c.Root(), "181.spot", func() float64 { return 100.4 }) + if mujica.Slider(c, spot, mujica.SliderOptions{Min: 95, Max: 105, Step: 0.1, Label: "Spot", ShowValue: true}).Changed() { + log(fmt.Sprint("spot ", *spot)) + } + ui.Column(c).Disabled(*disabled).MinHeight(0).Height(400).Children(func() { + r := mujica.OptionChain(c, state, []string{"Oct 17", "Nov 21"}, rows, mujica.OptionChainOptions{Decimals: int(*precision), Spot: *spot}) + if r.Changed || r.Submitted || r.ExpiryChanged { + log(fmt.Sprint(state.Expiry, state.Strike, state.Side)) + } + }) +} + +func marketsGreeksTableDemo(c *ui.Context, log func(string)) { + disabled := ui.Local(c.Root(), "182.disabled", func() bool { return false }) + if mujica.Checkbox(c, disabled, "Disabled", mujica.CheckboxOptions{}).Changed() { + log(fmt.Sprint("disabled ", *disabled)) + } + rows := *ui.Local(c.Root(), "markets.GreeksTable.rows.pages_markets_1", func() []mujica.GreeksRow { + return []mujica.GreeksRow{{Label: "AAPL 100 C", Greeks: mujica.OptionGreeks{Delta: 0.5, Gamma: 0.03, Theta: -0.1, Vega: 0.2, Rho: 0.05}}} + }) + + precision := ui.Local(c.Root(), "markets.GreeksTable.precision", func() float64 { return 2 }) + if mujica.Slider(c, precision, mujica.SliderOptions{Min: 1, Max: 8, Step: 1, Label: "Decimals", ShowValue: true}).Changed() { + log(fmt.Sprint("decimals ", *precision)) + } + notes := ui.Local(c.Root(), "182.notes", func() bool { return true }) + if mujica.Checkbox(c, notes, "Notes", mujica.CheckboxOptions{}).Changed() { + log(fmt.Sprint("notes ", *notes)) + } + ui.Column(c).Disabled(*disabled).MinHeight(0).Height(400).Children(func() { + mujica.GreeksTable(c, rows, mujica.GreeksTableOptions{Decimals: int(*precision), Notes: *notes}) + }) +} + +func marketsPayoffDiagramDemo(c *ui.Context, log func(string)) { + disabled := ui.Local(c.Root(), "183.disabled", func() bool { return false }) + if mujica.Checkbox(c, disabled, "Disabled", mujica.CheckboxOptions{}).Changed() { + log(fmt.Sprint("disabled ", *disabled)) + } + legs := *ui.Local(c.Root(), "markets.PayoffDiagram.legs.pages_markets_1", func() []mujica.OptionLeg { + return []mujica.OptionLeg{{Kind: mujica.LegCall, Strike: 100, Premium: 3, Quantity: 1}} + }) + + status := ui.Local(c.Root(), "183.status", func() int { return 0 }) + if mujica.RadioGroup(c, status, []mujica.RadioItem[int]{{Value: 0, Label: "Ready"}, {Value: 1, Label: "Loading"}, {Value: 2, Label: "Empty"}, {Value: 3, Label: "Error"}}, mujica.RadioGroupOptions{Horizontal: true}).Changed() { + log(fmt.Sprint("status ", *status)) + } + frame := mujica.ChartFrame{Label: "PayoffDiagram"} + if *status == 1 { + frame.Status = mujica.DataLoading + } + if *status == 3 { + frame.Status = mujica.DataFailed + frame.Error = "Sample failed" + } + if *status == 2 { + legs = nil + } + ui.Column(c).Disabled(*disabled).MinHeight(0).Height(400).Children(func() { + r := mujica.PayoffDiagram(c, legs, mujica.PayoffDiagramOptions{Frame: frame, Spot: 103}) + if r.Changed() || r.Retried() { + log(fmt.Sprint(r.Point)) + } + }) +} + +func marketsWatchlistDemo(c *ui.Context, log func(string)) { + disabled := ui.Local(c.Root(), "184.disabled", func() bool { return false }) + if mujica.Checkbox(c, disabled, "Disabled", mujica.CheckboxOptions{}).Changed() { + log(fmt.Sprint("disabled ", *disabled)) + } + state := ui.Local(c.Root(), "184.state", func() mujica.WatchlistState { return mujica.WatchlistState{} }) + groups := *ui.Local(c.Root(), "markets.Watchlist.groups.pages_markets_1", func() []mujica.WatchGroup { + return []mujica.WatchGroup{{Name: "Technology", Items: []mujica.WatchItem{{Symbol: "AAPL", Name: "Apple", Price: 227.5, Change: 2.7, ChangePercent: 1.2}, {Symbol: "MSFT", Name: "Microsoft", Price: 418.2, Change: -2.5, ChangePercent: -0.6}}}, {Name: "Energy", Items: []mujica.WatchItem{{Symbol: "XOM", Price: 117.4}}}} + }) + + precision := ui.Local(c.Root(), "markets.Watchlist.precision", func() float64 { return 2 }) + if mujica.Slider(c, precision, mujica.SliderOptions{Min: 1, Max: 8, Step: 1, Label: "Decimals", ShowValue: true}).Changed() { + log(fmt.Sprint("decimals ", *precision)) + } + if mujica.Button(c, "Refresh quotes", mujica.ButtonOptions{Variant: mujica.Secondary}).Clicked() { + groups[0].Items = slices.Clone(groups[0].Items) + groups[0].Items[0].Price += 0.1 + log("quotes refreshed") + } + beforeGroup, beforeColumns := state.Group, fmt.Sprint(state.Hidden) + ui.Column(c).Disabled(*disabled).MinHeight(0).Height(400).Children(func() { + r := mujica.Watchlist(c, state, groups, mujica.WatchlistOptions{Decimals: int(*precision)}) + if r.Changed || r.Submitted || r.Moved { + log(fmt.Sprint(state.Selected, r.Rows, r.To)) + } + if r.Moved { + items := groups[state.Group].Items + var moving []mujica.WatchItem + var rest []mujica.WatchItem + at := r.To + for j, item := range items { + if slices.Contains(r.Rows, j) { + moving = append(moving, item) + if j < r.To { + at-- + } + } else { + rest = append(rest, item) + } + } + groups[state.Group].Items = slices.Insert(rest, at, moving...) + } + }) + if state.Group != beforeGroup || fmt.Sprint(state.Hidden) != beforeColumns { + log(fmt.Sprint("group/columns ", state.Group, state.Hidden)) + } +} + +func marketsSymbolSearchDemo(c *ui.Context, log func(string)) { + disabled := ui.Local(c.Root(), "185.disabled", func() bool { return false }) + if mujica.Checkbox(c, disabled, "Disabled", mujica.CheckboxOptions{}).Changed() { + log(fmt.Sprint("disabled ", *disabled)) + } + state := ui.Local(c.Root(), "185.state", func() mujica.SymbolSearchState { return mujica.SymbolSearchState{} }) + rows := *ui.Local(c.Root(), "markets.SymbolSearch.rows.pages_markets_1", func() []mujica.MarketSymbol { + return []mujica.MarketSymbol{{Code: "AAPL", Name: "Apple", Market: "NASDAQ", Type: "Stock"}} + }) + + status, empty, err := marketsDataState(c, "185", log) + if empty || status != mujica.DataReady { + rows = nil + } + results := []mujica.MarketSymbol{} + for _, row := range rows { + if (state.Market == "" || state.Market == row.Market) && strings.Contains(strings.ToUpper(row.Code+" "+row.Name), strings.ToUpper(state.Query)) { + results = append(results, row) + } + } + ui.Column(c).Disabled(*disabled).MinHeight(0).Height(400).Children(func() { + r := mujica.SymbolSearch(c, state, results, mujica.SymbolSearchOptions{Loading: status == mujica.DataLoading, Error: err, Markets: []string{"NASDAQ", "NYSE"}, Recent: rows}) + if r.Changed || r.Picked || r.Retry { + log(fmt.Sprint(state.Query, state.Market, r.Chosen.Code)) + } + }) +} diff --git a/examples/gallery/pages_markets_2.go b/examples/gallery/pages_markets_2.go new file mode 100644 index 0000000..0a3efbc --- /dev/null +++ b/examples/gallery/pages_markets_2.go @@ -0,0 +1,140 @@ +package main + +import ( + "fmt" + "github.com/egoist/mygo/ui" + mujica "mujicaui" +) + +func marketsSymbolBadgeDemo(c *ui.Context, log func(string)) { + disabled := ui.Local(c.Root(), "186.disabled", func() bool { return false }) + if mujica.Checkbox(c, disabled, "Disabled", mujica.CheckboxOptions{}).Changed() { + log(fmt.Sprint("disabled ", *disabled)) + } + symbol := *ui.Local(c.Root(), "markets.SymbolBadge.symbol.pages_markets_2", func() mujica.MarketSymbol { + return mujica.MarketSymbol{Code: "AAPL", Name: "Apple", Market: "NASDAQ", Type: "Stock"} + }) + + kind := ui.Local(c.Root(), "186.kind", func() string { return "Stock" }) + if mujica.RadioGroup(c, kind, []mujica.RadioItem[string]{{Value: "Stock", Label: "Stock"}, {Value: "ETF", Label: "ETF"}}, mujica.RadioGroupOptions{Horizontal: true}).Changed() { + log(*kind) + } + symbol.Type = *kind + ui.Column(c).Disabled(*disabled).MinHeight(0).Height(400).Children(func() { + r := mujica.SymbolBadge(c, symbol, mujica.SymbolBadgeOptions{Clickable: true}) + if r.Changed() { + log(fmt.Sprint(symbol.Code)) + } + }) +} + +func marketsMarketHeatmapDemo(c *ui.Context, log func(string)) { + disabled := ui.Local(c.Root(), "187.disabled", func() bool { return false }) + if mujica.Checkbox(c, disabled, "Disabled", mujica.CheckboxOptions{}).Changed() { + log(fmt.Sprint("disabled ", *disabled)) + } + path := ui.Local(c.Root(), "187.path", func() []string { return []string{} }) + root := *ui.Local(c.Root(), "markets.MarketHeatmap.root.pages_markets_2", func() mujica.HeatNode { + return mujica.HeatNode{Name: "Market", Children: []mujica.HeatNode{{Name: "Technology", Children: []mujica.HeatNode{{Name: "AAPL", Cap: 3000, Change: 1.2}, {Name: "MSFT", Cap: 2800, Change: -0.6}}}, {Name: "Energy", Cap: 450, Change: -2.1}}} + }) + + status := ui.Local(c.Root(), "187.status", func() int { return 0 }) + if mujica.RadioGroup(c, status, []mujica.RadioItem[int]{{Value: 0, Label: "Ready"}, {Value: 1, Label: "Loading"}, {Value: 2, Label: "Empty"}, {Value: 3, Label: "Error"}}, mujica.RadioGroupOptions{Horizontal: true}).Changed() { + log(fmt.Sprint("status ", *status)) + } + frame := mujica.ChartFrame{Label: "MarketHeatmap"} + if *status == 1 { + frame.Status = mujica.DataLoading + } + if *status == 3 { + frame.Status = mujica.DataFailed + frame.Error = "Sample failed" + } + if *status == 2 { + root.Children = nil + if len(*path) > 0 { + *path = nil + log("path reset: empty data") + } + } + scale := ui.Local(c.Root(), "187.scale", func() float64 { return 3 }) + if mujica.Slider(c, scale, mujica.SliderOptions{Min: 1, Max: 10, Step: 1, Label: "Color scale", ShowValue: true}).Changed() { + log(fmt.Sprint(*scale)) + } + ui.Column(c).Disabled(*disabled).MinHeight(0).Height(400).Children(func() { + r := mujica.MarketHeatmap(c, path, root, mujica.MarketHeatmapOptions{Frame: frame, Scale: *scale}) + if r.Changed() || r.ValueChanged() || r.Retried() { + log(fmt.Sprint(path, r.Point)) + } + }) +} + +func marketsScreenerDemo(c *ui.Context, log func(string)) { + disabled := ui.Local(c.Root(), "188.disabled", func() bool { return false }) + if mujica.Checkbox(c, disabled, "Disabled", mujica.CheckboxOptions{}).Changed() { + log(fmt.Sprint("disabled ", *disabled)) + } + state := ui.Local(c.Root(), "188.state", func() mujica.ScreenerState { return mujica.ScreenerState{} }) + fields := *ui.Local(c.Root(), "markets.Screener.fields.pages_markets_2", func() []mujica.ScreenerField { return []mujica.ScreenerField{{ID: "pe", Label: "P/E", Decimals: 1}} }) + rows := *ui.Local(c.Root(), "markets.Screener.rows.pages_markets_2", func() []mujica.ScreenerRow { + return []mujica.ScreenerRow{{Symbol: "AAPL", Values: map[string]float64{"pe": 34}}, {Symbol: "XOM", Values: map[string]float64{"pe": 13}}} + }) + + status, empty, err := marketsDataState(c, "188", log) + if empty || status != mujica.DataReady { + rows = nil + } + ui.Column(c).Disabled(*disabled).MinHeight(0).Height(400).Children(func() { + r := mujica.Screener(c, state, fields, rows, mujica.ScreenerOptions{Status: status, Error: err}) + if r.Changed || r.Save || r.Table.Changed() || r.Table.Submitted() || r.Table.SortChanged() || r.Table.Retried() { + log(fmt.Sprint(state.Conditions)) + } + }) +} + +func marketsMarketOverviewDemo(c *ui.Context, log func(string)) { + disabled := ui.Local(c.Root(), "189.disabled", func() bool { return false }) + if mujica.Checkbox(c, disabled, "Disabled", mujica.CheckboxOptions{}).Changed() { + log(fmt.Sprint("disabled ", *disabled)) + } + indices := *ui.Local(c.Root(), "markets.MarketOverview.indices.pages_markets_2", func() []mujica.IndexQuote { + return []mujica.IndexQuote{{Name: "S&P 500", Price: 5751.07, Change: 51.13, ChangePercent: 0.9, Series: []float64{5700, 5730, 5720, 5751}}} + }) + + advancing := ui.Local(c.Root(), "189.advancing", func() float64 { return 2100 }) + if mujica.Slider(c, advancing, mujica.SliderOptions{Min: 0, Max: 4000, Step: 100, Label: "Advancing", ShowValue: true}).Changed() { + log(fmt.Sprint(*advancing)) + } + ui.Column(c).Disabled(*disabled).MinHeight(0).Height(400).Children(func() { + r := mujica.MarketOverview(c, indices, mujica.MarketOverviewOptions{Breadth: mujica.MarketBreadth{Advancing: int(*advancing), Declining: 1400, Unchanged: 300}}) + if r.Chosen >= 0 { + log(fmt.Sprint(indices[r.Chosen].Name)) + } + }) +} + +func marketsIndexCardDemo(c *ui.Context, log func(string)) { + disabled := ui.Local(c.Root(), "190.disabled", func() bool { return false }) + if mujica.Checkbox(c, disabled, "Disabled", mujica.CheckboxOptions{}).Changed() { + log(fmt.Sprint("disabled ", *disabled)) + } + quote := *ui.Local(c.Root(), "markets.IndexCard.quote.pages_markets_2", func() mujica.IndexQuote { + return mujica.IndexQuote{Name: "S&P 500", Price: 5751.07, Change: 51.13, ChangePercent: 0.9, Series: []float64{5700, 5730, 5720, 5751}} + }) + + precision := ui.Local(c.Root(), "markets.IndexCard.precision", func() float64 { return 2 }) + if mujica.Slider(c, precision, mujica.SliderOptions{Min: 1, Max: 8, Step: 1, Label: "Decimals", ShowValue: true}).Changed() { + log(fmt.Sprint("decimals ", *precision)) + } + price := ui.Local(c.Root(), "190.price", func() float64 { return 5751.07 }) + if mujica.NumberInput(c, price, mujica.NumberInputOptions{Min: 1, Max: 10000, Step: 0.01, Precision: 2, Label: "Price"}).Changed() { + log(fmt.Sprint(*price)) + } + quote.Price = *price + ui.Column(c).Disabled(*disabled).MinHeight(0).Height(400).Children(func() { + r := mujica.IndexCard(c, quote, mujica.IndexCardOptions{Decimals: int(*precision), Clickable: true}) + if r.Changed() { + log(fmt.Sprint(quote.Name)) + } + }) +} diff --git a/examples/gallery/pages_markets_3.go b/examples/gallery/pages_markets_3.go new file mode 100644 index 0000000..8bf7b00 --- /dev/null +++ b/examples/gallery/pages_markets_3.go @@ -0,0 +1,119 @@ +package main + +import ( + "fmt" + "github.com/egoist/mygo/ui" + mujica "mujicaui" + "time" +) + +func marketsMarketStatusDemo(c *ui.Context, log func(string)) { + disabled := ui.Local(c.Root(), "191.disabled", func() bool { return false }) + if mujica.Checkbox(c, disabled, "Disabled", mujica.CheckboxOptions{}).Changed() { + log(fmt.Sprint("disabled ", *disabled)) + } + now := time.Date(2026, 10, 5, 14, 30, 0, 0, time.UTC) + + phase := ui.Local(c.Root(), "191.phase", func() mujica.MarketPhase { return mujica.MarketOpen }) + if mujica.RadioGroup(c, phase, []mujica.RadioItem[mujica.MarketPhase]{{Value: mujica.MarketClosed, Label: "Closed"}, {Value: mujica.MarketPreMarket, Label: "Pre-market"}, {Value: mujica.MarketOpen, Label: "Open"}, {Value: mujica.MarketAfterHours, Label: "After hours"}, {Value: mujica.MarketHoliday, Label: "Holiday"}}, mujica.RadioGroupOptions{Horizontal: true}).Changed() { + log(fmt.Sprint(*phase)) + } + ui.Column(c).Disabled(*disabled).MinHeight(0).Height(400).Children(func() { + mujica.MarketStatus(c, *phase, mujica.MarketStatusOptions{Market: "NYSE", Now: now, Next: now.Add(5 * time.Hour), NextPhase: mujica.MarketAfterHours}) + }) +} + +func marketsTradingSessionClockDemo(c *ui.Context, log func(string)) { + disabled := ui.Local(c.Root(), "192.disabled", func() bool { return false }) + if mujica.Checkbox(c, disabled, "Disabled", mujica.CheckboxOptions{}).Changed() { + log(fmt.Sprint("disabled ", *disabled)) + } + now := time.Date(2026, 10, 5, 14, 30, 0, 0, time.UTC) + markets := *ui.Local(c.Root(), "markets.TradingSessionClock.markets.pages_markets_3", func() []mujica.SessionMarket { + return []mujica.SessionMarket{{Name: "NYSE", Location: time.FixedZone("EDT", -4*3600), Sessions: []mujica.TradingSession{{Phase: mujica.MarketOpen, Start: 570, End: 960}}}} + }) + + holiday := ui.Local(c.Root(), "192.holiday", func() bool { return false }) + if mujica.Checkbox(c, holiday, "Holiday", mujica.CheckboxOptions{}).Changed() { + log(fmt.Sprint(*holiday)) + } + markets[0].Holiday = *holiday + minute := ui.Local(c.Root(), "192.minute", func() float64 { return 870 }) + if mujica.Slider(c, minute, mujica.SliderOptions{Min: 0, Max: 1439, Step: 1, Label: "UTC minute", ShowValue: true}).Changed() { + log(fmt.Sprint(*minute)) + } + now = now.Truncate(24 * time.Hour).Add(time.Duration(*minute) * time.Minute) + ui.Column(c).Disabled(*disabled).MinHeight(0).Height(400).Children(func() { + mujica.TradingSessionClock(c, markets, mujica.TradingSessionClockOptions{Now: now}) + }) +} + +func marketsEconomicCalendarDemo(c *ui.Context, log func(string)) { + disabled := ui.Local(c.Root(), "193.disabled", func() bool { return false }) + if mujica.Checkbox(c, disabled, "Disabled", mujica.CheckboxOptions{}).Changed() { + log(fmt.Sprint("disabled ", *disabled)) + } + state := ui.Local(c.Root(), "193.state", func() mujica.EconomicCalendarState { return mujica.EconomicCalendarState{} }) + rows := *ui.Local(c.Root(), "markets.EconomicCalendar.rows.pages_markets_3", func() []mujica.EconomicEvent { + return []mujica.EconomicEvent{{ID: "jobs", Country: "US", Title: "Payrolls", Time: time.Date(2026, 10, 5, 14, 30, 0, 0, time.UTC), Importance: 3, Forecast: "150K", Previous: "142K", Actual: "254K"}} + }) + + status, empty, err := marketsDataState(c, "193", log) + if empty || status != mujica.DataReady { + rows = nil + } + beforeFilter := fmt.Sprint(state.Countries, state.MinImportance) + ui.Column(c).Disabled(*disabled).MinHeight(0).Height(400).Children(func() { + r := mujica.EconomicCalendar(c, state, rows, mujica.EconomicCalendarOptions{Status: status, Error: err}) + if r.Changed() || r.Submitted() || r.SortChanged() || r.Retried() { + log(fmt.Sprint(state.Table.Selected())) + } + }) + if fmt.Sprint(state.Countries, state.MinImportance) != beforeFilter { + log(fmt.Sprint("filter ", state.Countries, state.MinImportance)) + } +} + +func marketsEarningsCalendarDemo(c *ui.Context, log func(string)) { + disabled := ui.Local(c.Root(), "194.disabled", func() bool { return false }) + if mujica.Checkbox(c, disabled, "Disabled", mujica.CheckboxOptions{}).Changed() { + log(fmt.Sprint("disabled ", *disabled)) + } + state := ui.Local(c.Root(), "194.state", func() mujica.DataTableState[string] { return mujica.DataTableState[string]{} }) + rows := *ui.Local(c.Root(), "markets.EarningsCalendar.rows.pages_markets_3", func() []mujica.EarningsEvent { + return []mujica.EarningsEvent{{ID: "a", Symbol: "AAPL", Name: "Apple", Date: mujica.Date{Year: 2026, Month: 10, Day: 30}, Timing: mujica.EarningsAfterClose, EPSEstimate: 1.6, EPSActual: 1.64}} + }) + + status, empty, err := marketsDataState(c, "194", log) + if empty || status != mujica.DataReady { + rows = nil + } + ui.Column(c).Disabled(*disabled).MinHeight(0).Height(400).Children(func() { + r := mujica.EarningsCalendar(c, state, rows, mujica.EarningsCalendarOptions{Status: status, Error: err}) + if r.Changed() || r.Submitted() || r.SortChanged() || r.Retried() { + log(fmt.Sprint(state.Selected())) + } + }) +} + +func marketsNewsFeedDemo(c *ui.Context, log func(string)) { + disabled := ui.Local(c.Root(), "195.disabled", func() bool { return false }) + if mujica.Checkbox(c, disabled, "Disabled", mujica.CheckboxOptions{}).Changed() { + log(fmt.Sprint("disabled ", *disabled)) + } + state := ui.Local(c.Root(), "195.state", func() mujica.NewsFeedState { return mujica.NewsFeedState{} }) + rows := *ui.Local(c.Root(), "markets.NewsFeed.rows.pages_markets_3", func() []mujica.NewsItem { + return []mujica.NewsItem{{ID: "a", Title: "Apple unveils new chips", Source: "Wire", Time: time.Date(2026, 10, 5, 14, 30, 0, 0, time.UTC), Symbols: []string{"AAPL"}}} + }) + + status, empty, err := marketsDataState(c, "195", log) + if empty || status != mujica.DataReady { + rows = nil + } + ui.Column(c).Disabled(*disabled).MinHeight(0).Height(400).Children(func() { + r := mujica.NewsFeed(c, state, rows, mujica.NewsFeedOptions{Status: status, Error: err}) + if r.Opened != "" || r.Symbol != "" || r.Retry || r.ReadChanged { + log(fmt.Sprint(r.Opened, r.Symbol)) + } + }) +} diff --git a/examples/gallery/pages_markets_4.go b/examples/gallery/pages_markets_4.go new file mode 100644 index 0000000..a29ccfa --- /dev/null +++ b/examples/gallery/pages_markets_4.go @@ -0,0 +1,160 @@ +package main + +import ( + "fmt" + "github.com/egoist/mygo/ui" + mujica "mujicaui" + "time" +) + +func marketsSentimentGaugeDemo(c *ui.Context, log func(string)) { + disabled := ui.Local(c.Root(), "196.disabled", func() bool { return false }) + if mujica.Checkbox(c, disabled, "Disabled", mujica.CheckboxOptions{}).Changed() { + log(fmt.Sprint("disabled ", *disabled)) + } + value := 72.0 + + level := ui.Local(c.Root(), "196.value", func() float64 { return 72 }) + if mujica.Slider(c, level, mujica.SliderOptions{Min: 0, Max: 100, Step: 1, Label: "Sentiment", ShowValue: true}).Changed() { + log(fmt.Sprint(*level)) + } + value = *level + status, empty, err := marketsDataState(c, "196", log) + ui.Column(c).Disabled(*disabled).MinHeight(0).Height(400).Children(func() { + mujica.SentimentGauge(c, value, mujica.SentimentGaugeOptions{Label: "Fear & Greed", Status: status, Empty: empty, Error: err, Retry: func() { log("retry requested") }}) + }) +} + +func marketsPortfolioSummaryDemo(c *ui.Context, log func(string)) { + disabled := ui.Local(c.Root(), "197.disabled", func() bool { return false }) + if mujica.Checkbox(c, disabled, "Disabled", mujica.CheckboxOptions{}).Changed() { + log(fmt.Sprint("disabled ", *disabled)) + } + account := ui.Local(c.Root(), "197.account", func() string { return "" }) + accounts := *ui.Local(c.Root(), "markets.PortfolioSummary.accounts.pages_markets_4", func() []mujica.PortfolioAccount { + return []mujica.PortfolioAccount{{ID: "a", Name: "Brokerage", Total: 120000, DayPnL: 1250, TotalReturn: 20000, Cost: 100000}, {ID: "b", Name: "Retirement", Total: 80000, DayPnL: -300, TotalReturn: 5000, Cost: 75000}} + }) + + assets := ui.Local(c.Root(), "197.assets", func() float64 { return 120000 }) + if mujica.NumberInput(c, assets, mujica.NumberInputOptions{Min: 0, Max: 1000000, Step: 100, Precision: 2, Label: "Brokerage assets"}).Changed() { + log(fmt.Sprint(*assets)) + } + accounts[0].Total = *assets + ui.Column(c).Disabled(*disabled).MinHeight(0).Height(400).Children(func() { + r := mujica.PortfolioSummary(c, account, accounts, mujica.PortfolioSummaryOptions{}) + if r.Changed() { + log(fmt.Sprint(account)) + } + }) +} + +func marketsAssetAllocationChartDemo(c *ui.Context, log func(string)) { + disabled := ui.Local(c.Root(), "198.disabled", func() bool { return false }) + if mujica.Checkbox(c, disabled, "Disabled", mujica.CheckboxOptions{}).Changed() { + log(fmt.Sprint("disabled ", *disabled)) + } + items := *ui.Local(c.Root(), "markets.AssetAllocationChart.items.pages_markets_4", func() []mujica.AllocationItem { + return []mujica.AllocationItem{{Name: "Stocks", Value: 60, Target: 50}, {Name: "Bonds", Value: 30, Target: 40}, {Name: "Cash", Value: 10, Target: 10}} + }) + + status := ui.Local(c.Root(), "198.status", func() int { return 0 }) + if mujica.RadioGroup(c, status, []mujica.RadioItem[int]{{Value: 0, Label: "Ready"}, {Value: 1, Label: "Loading"}, {Value: 2, Label: "Empty"}, {Value: 3, Label: "Error"}}, mujica.RadioGroupOptions{Horizontal: true}).Changed() { + log(fmt.Sprint("status ", *status)) + } + frame := mujica.ChartFrame{Label: "AssetAllocationChart"} + if *status == 1 { + frame.Status = mujica.DataLoading + } + if *status == 3 { + frame.Status = mujica.DataFailed + frame.Error = "Sample failed" + } + if *status == 2 { + items = nil + } + tolerance := ui.Local(c.Root(), "198.tolerance", func() float64 { return 5 }) + if mujica.Slider(c, tolerance, mujica.SliderOptions{Min: 1, Max: 15, Step: 1, Label: "Drift tolerance", ShowValue: true}).Changed() { + log(fmt.Sprint(*tolerance)) + } + ui.Column(c).Disabled(*disabled).MinHeight(0).Height(400).Children(func() { + r := mujica.AssetAllocationChart(c, items, mujica.AssetAllocationChartOptions{Frame: frame, Tolerance: *tolerance}) + if r.Changed() || r.Retried() { + log(fmt.Sprint(r.Point)) + } + }) +} + +func marketsPerformanceChartDemo(c *ui.Context, log func(string)) { + disabled := ui.Local(c.Root(), "199.disabled", func() bool { return false }) + if mujica.Checkbox(c, disabled, "Disabled", mujica.CheckboxOptions{}).Changed() { + log(fmt.Sprint("disabled ", *disabled)) + } + values := *ui.Local(c.Root(), "markets.PerformanceChart.values.pages_markets_4", func() []float64 { return []float64{100, 110, 95, 120} }) + benchmark := *ui.Local(c.Root(), "markets.PerformanceChart.benchmark.pages_markets_4", func() []float64 { return []float64{100, 105, 108, 112} }) + times := *ui.Local(c.Root(), "markets.PerformanceChart.times.pages_markets_4", func() []time.Time { + return []time.Time{time.Date(2026, 1, 1, 0, 0, 0, 0, time.UTC), time.Date(2026, 2, 1, 0, 0, 0, 0, time.UTC), time.Date(2026, 3, 1, 0, 0, 0, 0, time.UTC), time.Date(2026, 4, 1, 0, 0, 0, 0, time.UTC)} + }) + + status := ui.Local(c.Root(), "199.status", func() int { return 0 }) + if mujica.RadioGroup(c, status, []mujica.RadioItem[int]{{Value: 0, Label: "Ready"}, {Value: 1, Label: "Loading"}, {Value: 2, Label: "Empty"}, {Value: 3, Label: "Error"}}, mujica.RadioGroupOptions{Horizontal: true}).Changed() { + log(fmt.Sprint("status ", *status)) + } + frame := mujica.ChartFrame{Label: "PerformanceChart"} + if *status == 1 { + frame.Status = mujica.DataLoading + } + if *status == 3 { + frame.Status = mujica.DataFailed + frame.Error = "Sample failed" + } + if *status == 2 { + values = nil + benchmark = nil + times = nil + } + ui.Column(c).Disabled(*disabled).MinHeight(0).Height(400).Children(func() { + r := mujica.PerformanceChart(c, values, mujica.PerformanceChartOptions{Frame: frame, Times: times, Benchmark: benchmark}) + if r.Changed() || r.Retried() { + log(fmt.Sprint(r.Point)) + } + if name, ok := r.Toggled(); ok { + log(fmt.Sprint(name)) + } + }) +} + +func marketsCurrencyConverterDemo(c *ui.Context, log func(string)) { + disabled := ui.Local(c.Root(), "200.disabled", func() bool { return false }) + if mujica.Checkbox(c, disabled, "Disabled", mujica.CheckboxOptions{}).Changed() { + log(fmt.Sprint("disabled ", *disabled)) + } + state := ui.Local(c.Root(), "200.state", func() mujica.CurrencyConverterState { + return mujica.CurrencyConverterState{Amount: 100, From: "USD", To: "JPY"} + }) + currencies := *ui.Local(c.Root(), "markets.CurrencyConverter.currencies.pages_markets_4", func() []mujica.Currency { + return []mujica.Currency{{Code: "USD", Name: "Dollar", Decimals: 2}, {Code: "JPY", Name: "Yen", Decimals: 0}} + }) + rate := ui.Local(c.Root(), "200.rate", func() float64 { return 149.37 }) + + if mujica.NumberInput(c, rate, mujica.NumberInputOptions{Min: 0, Max: 1000, Step: 0.0001, Precision: 4, Label: "Caller rate"}).Changed() { + log(fmt.Sprint("rate ", *rate)) + } + if mujica.Button(c, "Load pair rate", mujica.ButtonOptions{Variant: mujica.Secondary}).Clicked() { + *rate = 149.37 + if state.From == "JPY" { + *rate = 1 / 149.37 + } + log("pair rate loaded") + } + beforeAmount := state.Amount + ui.Column(c).Disabled(*disabled).MinHeight(0).Height(400).Children(func() { + r := mujica.CurrencyConverter(c, state, currencies, mujica.CurrencyConverterOptions{Rate: *rate, RateFrom: state.From, RateTo: state.To}) + if r.PairChanged { + *rate = 0 + log(fmt.Sprint(state.From, state.To)) + } + }) + if state.Amount != beforeAmount { + log(fmt.Sprint("amount ", state.Amount)) + } +} diff --git a/examples/gallery/pages_markets_test.go b/examples/gallery/pages_markets_test.go new file mode 100644 index 0000000..2d48730 --- /dev/null +++ b/examples/gallery/pages_markets_test.go @@ -0,0 +1,67 @@ +package main + +import ( + "github.com/egoist/mygo/ui" + mujica "mujicaui" + "slices" + "strings" + "testing" +) + +func marketsDemo(t *testing.T, id string) (*ui.Tester, *[]string) { + t.Helper() + i := slices.IndexFunc(marketsPages, func(p page) bool { return p.ID == id }) + if i < 0 { + t.Fatalf("missing page %s", id) + } + events := &[]string{} + tt := ui.NewTester(func(c *ui.Context) { + mujica.Use(c, mujica.Settings{}) + ui.Scroll(c).Fill().Padding(24).Children(func() { marketsPages[i].Demo(c, func(s string) { *events = append(*events, s) }) }) + }, 1000, 800) + tt.SetPreferences(ui.Preferences{ReduceMotion: true, TextScale: 1}) + tt.Frame() + return tt, events +} + +func TestMarketsGalleryControls(t *testing.T) { + if len(marketsPages) != 20 { + t.Fatalf("pages %d", len(marketsPages)) + } + for _, p := range marketsPages { + t.Run(p.ID, func(t *testing.T) { + if p.Category != "Markets" || p.Code == "" || p.Keys == "" { + t.Fatalf("incomplete page %+v", p) + } + tt, events := marketsDemo(t, p.ID) + if err := tt.Click("Disabled"); err != nil { + t.Fatal(err) + } + if len(*events) == 0 || !strings.Contains((*events)[len(*events)-1], "disabled true") { + t.Fatalf("toggle events %v", *events) + } + _ = tt.Click("Disabled") + if tt.HasText("Error") { + _ = tt.Click("Error") + if !tt.HasText("Sample failed") { + t.Fatalf("error state %q", tt.Texts()) + } + _ = tt.Click("Empty") + _ = tt.Click("Ready") + } + }) + } +} + +func TestMarketsGalleryInteractionLogs(t *testing.T) { + for _, tc := range []struct{ id, label string }{{"186", "AAPL"}, {"188", "Add condition"}, {"189", "S&P 500"}, {"190", "S&P 500"}, {"195", "Mark all read"}, {"197", "Retirement"}, {"200", "Swap currencies"}} { + tt, events := marketsDemo(t, tc.id) + before := len(*events) + if err := tt.Click(tc.label); err != nil { + t.Fatal(err) + } + if len(*events) == before { + t.Fatalf("%s %s not logged", tc.id, tc.label) + } + } +} diff --git a/greeks_table.go b/greeks_table.go index 282385c..c2367ff 100644 --- a/greeks_table.go +++ b/greeks_table.go @@ -31,9 +31,8 @@ type GreeksTableOptions struct { var greekNames = [5]string{"Delta", "Gamma", "Theta", "Vega", "Rho"} -// GreeksTable lists Delta, Gamma, Theta, Vega and Rho per contract; headers explain each. func GreeksTable(c *ui.Context, rows []GreeksRow, opts GreeksTableOptions) *ui.Element { - if opts.Decimals < 0 { + if opts.Decimals < 0 || opts.Decimals > 12 { panic("mujica: GreeksTable Decimals is negative") } dec := cmp.Or(opts.Decimals, 4) @@ -42,8 +41,8 @@ func GreeksTable(c *ui.Context, rows []GreeksRow, opts GreeksTableOptions) *ui.E u := d.Unit() col := ui.Column(c).Gap(u * 2) col.Children(func() { - g := ui.Grid(c).ColumnTracks(ui.Fr(1), ui.FitContent(), ui.FitContent(), ui.FitContent(), ui.FitContent(), ui.FitContent()). - GapX(u*5).Padding(u*2, u*3).Background(k.Surface).Border(theme.BorderWidth, k.Border).Radius(theme.CardRadius). + g := ui.Grid(c).ColumnTracks(ui.Fr(2), ui.Fr(1), ui.Fr(1), ui.Fr(1), ui.Fr(1), ui.Fr(1)). + GapX(u*2).Padding(u*2, u*3).Background(k.Surface).Border(theme.BorderWidth, k.Border).Radius(theme.CardRadius). Role(ui.RoleTable).Label(msg(c, "greeks_table.title")) g.Children(func() { ui.Text(c, msg(c, "greeks_table.contract")).TextColor(k.TextMuted).FontSize(FontSize(c, theme.CaptionSize)). @@ -53,11 +52,16 @@ func GreeksTable(c *ui.Context, rows []GreeksRow, opts GreeksTableOptions) *ui.E Role(ui.RoleColumnHeader).Label(name).Description(msg(c, "greeks_table.note_"+greekKey(i))) h.Tooltip(msg(c, "greeks_table.note_"+greekKey(i))) h.Children(func() { - ui.Text(c, name).Font(theme.SerifFont).TextColor(k.Text) + ui.Text(c, name).SingleLine().Font(theme.SerifFont).TextColor(k.Text) ui.Icon(c, icons.Must("info")).Size(12, 12).TextColor(k.TextMuted) }) } - for ri, r := range rows { + + }) + state := ui.Local(col, "mujica.greeks.rows", func() ui.ListState { return ui.ListState{} }) + ui.List(c, state, len(rows), func(ri int) { + ui.Grid(c).ColumnTracks(ui.Fr(2), ui.Fr(1), ui.Fr(1), ui.Fr(1), ui.Fr(1), ui.Fr(1)).GapX(u*2).Padding(0, u*3).MinHeight(d.ControlHeight()).Children(func() { + r := rows[ri] vals := [5]float64{r.Greeks.Delta, r.Greeks.Gamma, r.Greeks.Theta, r.Greeks.Vega, r.Greeks.Rho} ui.Text(c, r.Label).Key(ri).SingleLine().MinHeight(d.ControlHeight()).Role(ui.RoleCell) for i, v := range vals { @@ -68,8 +72,9 @@ func GreeksTable(c *ui.Context, rows []GreeksRow, opts GreeksTableOptions) *ui.E ui.Text(c, s).Key([2]int{ri, i}).JustifySelf(ui.End).FontFeatures("tnum").TextColor(k.Text). Role(ui.RoleCell).Label(greekNames[i] + " " + s) } - } - }) + }) + }).Height(min(float32(len(rows))*d.ControlHeight(), 240)).Background(k.Surface).Border(theme.BorderWidth, k.Border).Radius(theme.CardRadius) + if opts.Notes { ui.Column(c).Gap(u).Children(func() { for i, name := range greekNames { diff --git a/greeks_table_test.go b/greeks_table_test.go new file mode 100644 index 0000000..217e132 --- /dev/null +++ b/greeks_table_test.go @@ -0,0 +1,54 @@ +package mujica + +import ( + "math" + "testing" + + "github.com/egoist/mygo/ui" +) + +func greeksRows() []GreeksRow { + return []GreeksRow{ + {Label: "AAPL 230 C", Greeks: OptionGreeks{0.52, 0.031, -0.12, 0.21, 0.05}}, + {Label: "AAPL 220 P", Greeks: OptionGreeks{-0.38, 0.028, -0.10, 0.19, math.NaN()}}, + } +} + +func TestGreeksTableValuesAndPrecision(t *testing.T) { + tt := chatTester(640, 320, func(c *ui.Context) { GreeksTable(c, greeksRows(), GreeksTableOptions{}) }) + for _, s := range []string{"Delta", "Rho", "+0.5200", "−0.1200", "+0.0310", "—"} { + if !tt.HasText(s) { + t.Errorf("%q missing from %q", s, tt.Texts()) + } + } + tt = chatTester(640, 320, func(c *ui.Context) { GreeksTable(c, greeksRows(), GreeksTableOptions{Decimals: 2}) }) + if !tt.HasText("+0.52") || tt.HasText("+0.5200") { + t.Fatalf("decimals: %q", tt.Texts()) + } +} + +func TestGreeksTableNotes(t *testing.T) { + tt := chatTester(640, 320, func(c *ui.Context) { GreeksTable(c, greeksRows(), GreeksTableOptions{}) }) + if tt.HasText("Price change per day as time passes.") { + t.Fatal("notes shown without Notes") + } + tt = chatTester(640, 420, func(c *ui.Context) { GreeksTable(c, greeksRows(), GreeksTableOptions{Notes: true}) }) + if !tt.HasText("Price change per day as time passes.") { + t.Fatal("notes missing") + } + defer func() { + if recover() == nil { + t.Fatal("no panic") + } + }() + ui.Render(func(c *ui.Context) { + Use(c, Settings{}) + GreeksTable(c, nil, GreeksTableOptions{Decimals: -1}) + }, 100, 100, 1) +} + +func TestGreeksTableSnapshot(t *testing.T) { + snapshot(t, "greeks_table", 640, 300, func(c *ui.Context) { + ui.Column(c).Padding(16).Children(func() { GreeksTable(c, greeksRows(), GreeksTableOptions{Notes: true}) }) + }) +} diff --git a/index_card.go b/index_card.go index b7c5773..dc682cf 100644 --- a/index_card.go +++ b/index_card.go @@ -9,7 +9,6 @@ import ( "mujicaui/theme" ) -// IndexQuote is an index level, its change and recent values for the mini chart. type IndexQuote struct { Name string Price float64 @@ -28,7 +27,6 @@ type IndexCardOptions struct { Disabled bool } -// IndexCard shows an index level, its change and a mini chart. func IndexCard(c *ui.Context, q IndexQuote, opts IndexCardOptions) ChoiceResult { if q.Name == "" { panic("mujica: IndexCard needs a Name") @@ -57,7 +55,7 @@ func IndexCard(c *ui.Context, q IndexQuote, opts IndexCardOptions) ChoiceResult PriceChangeBadge(c, q.Change, q.ChangePercent, PriceChangeBadgeOptions{Decimals: dec}) }) if len(q.Series) > 0 { - Sparkline(c, q.Series, SparklineOptions{Frame: ChartFrame{Label: q.Name}, Width: 172}) + Sparkline(c, q.Series, SparklineOptions{Frame: ChartFrame{Label: q.Name}, Width: 120}) } }) clicked := opts.Clickable && e.Clicked() && !e.IsDisabled() diff --git a/index_card_test.go b/index_card_test.go new file mode 100644 index 0000000..b1c9e4e --- /dev/null +++ b/index_card_test.go @@ -0,0 +1,39 @@ +package mujica + +import ( + "github.com/egoist/mygo/ui" + "testing" +) + +func TestIndexCardQuoteAndKeyboard(t *testing.T) { + count := 0 + disabled := false + q := IndexQuote{Name: "Index", Price: 5751.07, Change: 51.13, ChangePercent: 0.9, Series: []float64{100, 110, 105}} + tt := chatTester(500, 300, func(c *ui.Context) { + if IndexCard(c, q, IndexCardOptions{Clickable: true, Disabled: disabled}).Changed() { + count++ + } + }) + if !tt.HasText("5,751.07") || !tt.HasText("+51.13 (+0.90%)") { + t.Fatalf("texts %q", tt.Texts()) + } + tt.Key(0, ui.KeyTab) + tt.Key(0, ui.KeySpace) + if count != 1 { + t.Fatalf("count %d", count) + } + disabled = true + tt.Frame() + _ = tt.Click("Index") + if count != 1 { + t.Fatal("disabled click") + } + marketsPanic(t, func(c *ui.Context) { IndexCard(c, IndexQuote{}, IndexCardOptions{}) }) +} +func TestIndexCardSnapshot(t *testing.T) { + snapshot(t, "index_card", 260, 220, func(c *ui.Context) { + ui.Column(c).Padding(16).Children(func() { + IndexCard(c, IndexQuote{Name: "S&P 500", Price: 5751.07, Change: 51.13, ChangePercent: 0.9, Series: mktSeries(30, 0)}, IndexCardOptions{}) + }) + }) +} diff --git a/market_heatmap.go b/market_heatmap.go index 8fb2944..64bb2ee 100644 --- a/market_heatmap.go +++ b/market_heatmap.go @@ -13,7 +13,6 @@ import ( "mujicaui/theme" ) -// HeatNode is a sector or a stock: market cap sizes it, Change (percent) colors it. type HeatNode struct { Name string Cap float64 @@ -23,9 +22,19 @@ type HeatNode struct { // MarketHeatmapOptions configure a MarketHeatmap. type MarketHeatmapOptions struct { - Frame ChartFrame - // Scale is the change in percent at full color; zero means 3. - Scale float64 + Frame ChartFrame + Version int + Scale float64 +} + +type marketHeatMemo struct { + id string + tiles []marketHeatTile + caps []float64 + width, height float32 + rects []ui.Rect + visible []int + small []marketHeatCell } type marketHeatTile struct { @@ -34,13 +43,11 @@ type marketHeatTile struct { branch bool } -// MarketHeatmap tiles sectors and stocks by market cap, colored by change; branches drill in. func MarketHeatmap(c *ui.Context, path *[]string, root HeatNode, opts MarketHeatmapOptions) ChartResult { - if opts.Scale < 0 { + if opts.Scale < 0 || math.IsNaN(opts.Scale) || math.IsInf(opts.Scale, 0) || path == nil { panic("mujica: MarketHeatmap Scale is negative") } scale := cmp.Or(opts.Scale, 3) - marketHeatCheck(root) k := Tokens(c) u := Density(c).Unit() size := FontSize(c, theme.CaptionSize) @@ -49,18 +56,23 @@ func MarketHeatmap(c *ui.Context, path *[]string, root HeatNode, opts MarketHeat wrap.Children(func() { res.value = chartPath(c, root.Name, path, wrap.IsDisabled()) node := marketHeatDescend(root, *path) - var tiles []marketHeatTile - for _, ch := range node.Children { - t := marketHeatTile{ch.Name, ch.total(), ch.change(), len(ch.Children) > 0} - if t.cap > 0 { - tiles = append(tiles, t) + memo := ui.Local(wrap, "mujica.heat", func() marketHeatMemo { return marketHeatMemo{} }) + if id := strings.Join(*path, "/") + "|" + chartID(node.Children) + fmt.Sprint(opts.Version); id != memo.id { + marketHeatCheck(root) + memo.id, memo.tiles, memo.caps = id, nil, nil + memo.rects = nil + for _, ch := range node.Children { + t := marketHeatTile{ch.Name, ch.total(), ch.change(), len(ch.Children) > 0} + if t.cap > 0 { + memo.tiles = append(memo.tiles, t) + } + } + slices.SortStableFunc(memo.tiles, func(a, b marketHeatTile) int { return cmp.Compare(b.cap, a.cap) }) + for _, t := range memo.tiles { + memo.caps = append(memo.caps, t.cap) } } - slices.SortStableFunc(tiles, func(a, b marketHeatTile) int { return cmp.Compare(b.cap, a.cap) }) - caps := make([]float64, len(tiles)) - for i, t := range tiles { - caps[i] = t.cap - } + tiles, caps := memo.tiles, memo.caps color := func(ch float64) ui.Color { return k.Surface.Mix(trendColor(c, trendSign(ch)), float32(0.15+0.85*min(math.Abs(ch)/scale, 1))) } @@ -75,7 +87,8 @@ func MarketHeatmap(c *ui.Context, path *[]string, root HeatNode, opts MarketHeat return s } spec.pick = func(r ui.Rect, x, y float32) int { - for i, t := range squarify(caps, r) { + memo.layout(caps, r) + for i, t := range memo.rects { if t.Contains(x, y) { return i } @@ -90,7 +103,13 @@ func MarketHeatmap(c *ui.Context, path *[]string, root HeatNode, opts MarketHeat } } spec.draw = func(p *ui.Painter, r ui.Rect, active int) { - for i, t := range squarify(caps, r) { + memo.layout(caps, r) + for _, cell := range memo.small { + p.Fill(ui.Rect{X: r.X + cell.x, Y: r.Y + cell.y, W: 4, H: 4}, color(cell.change), 0) + } + for _, i := range memo.visible { + t := memo.rects[i] + t.X, t.Y = t.X+r.X, t.Y+r.Y bg := color(tiles[i].change) p.Fill(t, bg, 2) p.Stroke(t, k.Surface, 2, 2) @@ -116,7 +135,6 @@ func MarketHeatmap(c *ui.Context, path *[]string, root HeatNode, opts MarketHeat return res } -// marketHeatLegend is the color scale from −Scale to +Scale with signed labels. func marketHeatLegend(c *ui.Context, scale float64, color func(float64) ui.Color) { k := Tokens(c) size := FontSize(c, theme.CaptionSize) @@ -142,7 +160,6 @@ func (n HeatNode) total() float64 { return s } -// change is the node's own change, or its children's cap-weighted mean. func (n HeatNode) change() float64 { if len(n.Children) == 0 { return n.Change @@ -184,3 +201,39 @@ func marketHeatDescend(root HeatNode, path []string) HeatNode { } return n } + +type marketHeatCell struct { + x, y float32 + change float64 +} + +func (m *marketHeatMemo) layout(caps []float64, r ui.Rect) { + if m.rects != nil && m.width == r.W && m.height == r.H { + return + } + m.width, m.height = r.W, r.H + m.rects = squarify(caps, ui.Rect{W: r.W, H: r.H}) + m.visible, m.small = nil, nil + type aggregate struct{ weight, change float64 } + bins := map[[2]int]aggregate{} + for i, t := range m.rects { + if t.W >= 4 && t.H >= 4 { + m.visible = append(m.visible, i) + continue + } + key := [2]int{int((t.X + t.W/2) / 4), int((t.Y + t.H/2) / 4)} + a := bins[key] + a.weight += caps[i] + a.change += caps[i] * m.tiles[i].change + bins[key] = a + } + for key, a := range bins { + m.small = append(m.small, marketHeatCell{float32(key[0]) * 4, float32(key[1]) * 4, a.change / a.weight}) + } + slices.SortFunc(m.small, func(a, b marketHeatCell) int { + if a.y != b.y { + return cmp.Compare(a.y, b.y) + } + return cmp.Compare(a.x, b.x) + }) +} diff --git a/market_heatmap_test.go b/market_heatmap_test.go new file mode 100644 index 0000000..6bf5ad1 --- /dev/null +++ b/market_heatmap_test.go @@ -0,0 +1,46 @@ +package mujica + +import ( + "github.com/egoist/mygo/ui" + "testing" +) + +func TestMarketHeatmapAreaDrillAndKeys(t *testing.T) { + root := mktHeat() + var path []string + var got ChartResult + tt := chatTester(640, 400, func(c *ui.Context) { + got = MarketHeatmap(c, &path, root, MarketHeatmapOptions{Frame: ChartFrame{Label: "Market"}}) + }) + tt.Key(0, ui.KeyTab) + tt.Key(0, ui.KeyHome) + if !tt.HasText("Technology · up +1.18% · 8,000 · Enter opens") { + t.Fatalf("readout %q", tt.Texts()) + } + tt.Key(0, ui.KeyEnter) + if len(path) != 1 || path[0] != "Technology" { + t.Fatalf("path %v", path) + } + tt.Key(0, ui.KeyBackspace) + if len(path) != 0 { + t.Fatalf("back %v", path) + } + if got.Element == nil { + t.Fatal("element missing") + } + if root.total() != 9830 { + t.Fatalf("cap %v", root.total()) + } + marketsPanic(t, func(c *ui.Context) { + MarketHeatmap(c, &path, HeatNode{Name: "Bad", Cap: -1}, MarketHeatmapOptions{Frame: ChartFrame{Label: "x"}}) + }) +} +func TestMarketHeatmapSnapshot(t *testing.T) { + var path []string + snapshot(t, "market_heatmap", 640, 400, func(c *ui.Context) { + ui.Column(c).Padding(16).Gap(12).Fill().Children(func() { + MarketHeatmap(c, &path, mktHeat(), MarketHeatmapOptions{Frame: ChartFrame{Label: "S&P 500", Height: 280}}) + + }) + }) +} diff --git a/market_overview.go b/market_overview.go index 1da1f6b..41c8ba0 100644 --- a/market_overview.go +++ b/market_overview.go @@ -15,20 +15,17 @@ type MarketBreadth struct{ Advancing, Declining, Unchanged int } // MarketOverviewOptions configure a MarketOverview. type MarketOverviewOptions struct { - Breadth MarketBreadth - // AsOf is when the data was taken; zero hides the stamp. + Breadth MarketBreadth AsOf time.Time Decimals int Disabled bool } -// MarketOverviewView is a built overview and the index clicked, -1 for none. type MarketOverviewView struct { Element *ui.Element Chosen int } -// MarketOverview shows index cards, advancers against decliners, and a time stamp. func MarketOverview(c *ui.Context, indices []IndexQuote, opts MarketOverviewOptions) MarketOverviewView { b := opts.Breadth if b.Advancing < 0 || b.Declining < 0 || b.Unchanged < 0 { @@ -62,7 +59,6 @@ func MarketOverview(c *ui.Context, indices []IndexQuote, opts MarketOverviewOpti return v } -// marketBreadthBar splits a bar by counts; each part has an arrow and a number. func marketBreadthBar(c *ui.Context, b MarketBreadth, total int) { k := Tokens(c) u := Density(c).Unit() diff --git a/market_overview_test.go b/market_overview_test.go new file mode 100644 index 0000000..f988965 --- /dev/null +++ b/market_overview_test.go @@ -0,0 +1,45 @@ +package mujica + +import ( + "github.com/egoist/mygo/ui" + "testing" +) + +func TestMarketOverviewBreadthStampAndChoice(t *testing.T) { + var got MarketOverviewView + disabled := false + tt := chatTester(760, 360, func(c *ui.Context) { + v := MarketOverview(c, []IndexQuote{{Name: "S&P 500", Price: 5751.07, Change: 51.13, ChangePercent: 0.9}}, MarketOverviewOptions{Breadth: MarketBreadth{2100, 1400, 300}, AsOf: mktNow, Disabled: disabled}) + if v.Chosen >= 0 { + got = v + } + }) + if !tt.HasText("2100 up") || !tt.HasText("1400 down") || !tt.HasText("As of 2026-10-05 14:30") { + t.Fatalf("texts %q", tt.Texts()) + } + _ = tt.Click("S&P 500") + if got.Chosen != 0 { + t.Fatalf("chosen %d", got.Chosen) + } + got.Chosen = -1 + disabled = true + tt.Frame() + _ = tt.Click("S&P 500") + if got.Chosen != -1 { + t.Fatal("disabled chose") + } + marketsPanic(t, func(c *ui.Context) { + MarketOverview(c, nil, MarketOverviewOptions{Breadth: MarketBreadth{Advancing: -1}}) + }) +} +func TestMarketOverviewSnapshot(t *testing.T) { + + snapshot(t, "market_overview", 760, 360, func(c *ui.Context) { + ui.Column(c).Padding(16).Gap(12).Fill().Children(func() { + MarketOverview(c, []IndexQuote{{Name: "S&P 500", Price: 5751.07, Change: 51.13, ChangePercent: 0.9, Series: mktSeries(30, 0)}, + {Name: "Nasdaq", Price: 18137.85, Change: -219.22, ChangePercent: -1.2, Series: mktSeries(30, 2)}}, + MarketOverviewOptions{Breadth: MarketBreadth{2100, 1400, 300}, AsOf: mktNow}) + + }) + }) +} diff --git a/market_status.go b/market_status.go index 77a1357..446cf20 100644 --- a/market_status.go +++ b/market_status.go @@ -10,7 +10,6 @@ import ( "mujicaui/theme" ) -// MarketPhase is a market's trading state. The zero value is MarketClosed. type MarketPhase int const ( @@ -29,15 +28,13 @@ var marketPhases = [5]struct{ key, icon string }{ // MarketStatusOptions configure a MarketStatus. type MarketStatusOptions struct { // Market names the venue, such as "NYSE". - Market string - // Next and NextPhase say when the phase changes; zero Next hides it. + Market string Next time.Time NextPhase MarketPhase // Now counts down to Next; zero uses the window clock. Now time.Time } -// MarketStatus shows a market's phase with an icon and word, and when it changes next. func MarketStatus(c *ui.Context, phase MarketPhase, opts MarketStatusOptions) *ui.Element { marketPhaseCheck(phase) marketPhaseCheck(opts.NextPhase) @@ -61,8 +58,7 @@ func MarketStatus(c *ui.Context, phase MarketPhase, opts MarketStatusOptions) *u next = fmt.Sprintf(msg(c, "market_status.next"), msg(c, marketPhases[opts.NextPhase].key), opts.Next.Format("15:04"), marketStatusIn(c, opts.Next.Sub(now))) label += ", " + next - // The countdown changes once a minute. - c.After(time.Minute - time.Duration(now.Second())*time.Second) + } row := ui.Row(c).Gap(u * 2).AlignItems(ui.Center).Role(ui.RoleStatus).Label(label) row.Children(func() { @@ -77,6 +73,9 @@ func MarketStatus(c *ui.Context, phase MarketPhase, opts MarketStatusOptions) *u ui.Text(c, next).FontSize(FontSize(c, theme.CaptionSize)).TextColor(k.TextMuted).SingleLine() } }) + if opts.Now.IsZero() && opts.Next.After(now) { + row.DrawOver(func(p *ui.Painter, _ ui.Rect) { c.After(time.Minute - time.Duration(p.Now().Second())*time.Second) }) + } return row } @@ -86,7 +85,6 @@ func marketPhaseCheck(p MarketPhase) { } } -// marketStatusIn writes a duration as "2h 05m" or "12m"; past times read "now". func marketStatusIn(c *ui.Context, d time.Duration) string { if d <= 0 { return msg(c, "market_status.now") diff --git a/market_status_test.go b/market_status_test.go new file mode 100644 index 0000000..103e048 --- /dev/null +++ b/market_status_test.go @@ -0,0 +1,29 @@ +package mujica + +import ( + "github.com/egoist/mygo/ui" + "testing" + "time" +) + +func TestMarketStatusPhasesAndNext(t *testing.T) { + for phase, word := range []string{"Closed", "Pre-market", "Open", "After hours", "Holiday"} { + tt := chatTester(760, 150, func(c *ui.Context) { + MarketStatus(c, MarketPhase(phase), MarketStatusOptions{Market: "NYSE", Now: mktNow, Next: mktNow.Add(90 * time.Minute), NextPhase: MarketAfterHours}) + }) + if !tt.HasText(word) || !tt.HasText("After hours at 16:00 (in 1h 30m)") { + t.Fatalf("phase %d texts %q", phase, tt.Texts()) + } + } + marketsPanic(t, func(c *ui.Context) { MarketStatus(c, MarketPhase(99), MarketStatusOptions{}) }) +} +func TestMarketStatusSnapshot(t *testing.T) { + + snapshot(t, "market_status", 520, 160, func(c *ui.Context) { + ui.Column(c).Padding(16).Gap(12).Fill().Children(func() { + MarketStatus(c, MarketOpen, MarketStatusOptions{Market: "NYSE", Next: mktNow.Add(5*3600e9 + 30*60e9), NextPhase: MarketAfterHours, Now: mktNow}) + MarketStatus(c, MarketHoliday, MarketStatusOptions{}) + + }) + }) +} diff --git a/markets_fixture_test.go b/markets_fixture_test.go new file mode 100644 index 0000000..1e3251d --- /dev/null +++ b/markets_fixture_test.go @@ -0,0 +1,71 @@ +package mujica + +import ( + "github.com/egoist/mygo/ui" + "math" + "testing" + "time" +) + +// mktNow is the fixed clock of the markets tests: 10:30 in New York. +var mktNow = time.Date(2026, time.October, 5, 14, 30, 0, 0, time.UTC) + +func mktNewYork() *time.Location { return time.FixedZone("EDT", -4*3600) } + +func mktStrikes() []OptionStrike { + var out []OptionStrike + for i := range 21 { + k := 90 + float64(i) + call := math.Max(100-k, 0) + 1.2 + float64(20-i)*0.05 + put := math.Max(k-100, 0) + 1.2 + float64(i)*0.05 + out = append(out, OptionStrike{Strike: k, + Call: OptionQuote{Bid: call - 0.05, Ask: call + 0.05, Last: call}, + Put: OptionQuote{Bid: put - 0.05, Ask: put + 0.05, Last: put}}) + } + return out +} + +func mktSeries(n int, seed float64) []float64 { + out := make([]float64, n) + for i := range out { + out[i] = 100 + 10*math.Sin(float64(i)/6+seed) + float64(i)*0.3 + } + return out +} + +func mktTimes(n int) []time.Time { + out := make([]time.Time, n) + for i := range out { + out[i] = time.Date(2026, 1, 1, 0, 0, 0, 0, time.UTC).AddDate(0, 0, i) + } + return out +} + +func mktHeat() HeatNode { + return HeatNode{Name: "Market", Children: []HeatNode{ + {Name: "Technology", Children: []HeatNode{{Name: "AAPL", Cap: 3000, Change: 1.2}, {Name: "MSFT", Cap: 2800, Change: -0.6}, {Name: "NVDA", Cap: 2200, Change: 3.4}}}, + {Name: "Energy", Children: []HeatNode{{Name: "XOM", Cap: 450, Change: -2.1}, {Name: "CVX", Cap: 300, Change: -1.4}}}, + {Name: "Health", Children: []HeatNode{{Name: "LLY", Cap: 700, Change: 0.4}, {Name: "JNJ", Cap: 380, Change: 0}}}, + }} +} + +func mktWatch() []WatchGroup { + return []WatchGroup{ + {Name: "Tech", Items: []WatchItem{ + {Symbol: "AAPL", Name: "Apple", Price: 227.5, Change: 2.7, ChangePercent: 1.2, Volume: 51e6}, + {Symbol: "MSFT", Name: "Microsoft", Price: 418.2, Change: -2.5, ChangePercent: -0.6, Volume: 21e6}, + {Symbol: "NVDA", Name: "Nvidia", Price: 124.9, Change: 4.1, ChangePercent: 3.4, Volume: 310e6}, + }}, + {Name: "Energy", Items: []WatchItem{{Symbol: "XOM", Name: "Exxon", Price: 117.4, Change: -2.5, ChangePercent: -2.1, Volume: 18e6}}}, + } +} + +func marketsPanic(t *testing.T, view func(*ui.Context)) { + t.Helper() + defer func() { + if recover() == nil { + t.Fatal("expected panic") + } + }() + ui.Render(func(c *ui.Context) { Use(c, Settings{}); view(c) }, 960, 500, 1) +} diff --git a/markets_regression_test.go b/markets_regression_test.go new file mode 100644 index 0000000..17b14d8 --- /dev/null +++ b/markets_regression_test.go @@ -0,0 +1,218 @@ +package mujica + +import ( + "fmt" + "github.com/egoist/mygo/ui" + "math" + "mujicaui/internal" + "mujicaui/theme" + "strings" + "testing" + "time" +) + +func TestMarketsAncestorDisabled(t *testing.T) { + s := NewsFeedState{} + disabled := false + var last NewsFeedView + items := []NewsItem{{ID: "a", Title: "Alpha", Source: "Wire", Time: mktNow}, {ID: "b", Title: "Beta", Source: "Wire", Time: mktNow}} + tt := ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + ui.Column(c).Height(360).Disabled(disabled).Children(func() { last = NewsFeed(c, &s, items, NewsFeedOptions{Today: DateOf(mktNow)}) }) + }, 640, 400) + tt.Frame() + _ = tt.Click("Alpha") + disabled = true + tt.Key(0, ui.KeyDown) + tt.Key(0, ui.KeyEnter) + if s.Read["b"] || last.Opened != "" { + t.Fatal("ancestor-disabled feed changed reads") + } +} +func TestCurrencyConverterSwapInvalidatesRate(t *testing.T) { + s := CurrencyConverterState{Amount: 100, From: "USD", To: "JPY"} + var last CurrencyConverterView + tt := chatTester(760, 300, func(c *ui.Context) { + last = CurrencyConverter(c, &s, []Currency{{"USD", "Dollar", 2}, {"JPY", "Yen", 0}}, CurrencyConverterOptions{Rate: 150}) + }) + _ = tt.Click("Swap currencies") + if s.From != "JPY" || s.To != "USD" || !math.IsNaN(last.Result) { + t.Fatalf("swapped pair %s/%s result %v", s.From, s.To, last.Result) + } +} +func TestGreeksTableLarge(t *testing.T) { + rows := make([]GreeksRow, 100000) + for i := range rows { + rows[i] = GreeksRow{Label: "Contract", Greeks: OptionGreeks{Delta: 0.5}} + } + tt := chatTester(640, 400, func(c *ui.Context) { GreeksTable(c, rows, GreeksTableOptions{}) }) + if n := len(tt.Texts()); n > 200 { + t.Fatalf("built %d texts", n) + } +} +func TestSymbolSearchLarge(t *testing.T) { + rows := make([]MarketSymbol, 100000) + for i := range rows { + rows[i] = MarketSymbol{Code: statisticFormat(float64(i), 0), Name: "Company"} + } + s := SymbolSearchState{Query: "company"} + tt := chatTester(640, 400, func(c *ui.Context) { SymbolSearch(c, &s, rows, SymbolSearchOptions{}) }) + if n := len(tt.Texts()); n > 200 { + t.Fatalf("built %d texts", n) + } +} + +func TestMarketsLargeViews(t *testing.T) { + const n = 100000 + news := make([]NewsItem, n) + econ := make([]EconomicEvent, n) + earn := make([]EarningsEvent, n) + rows := make([]ScreenerRow, n) + strikes := make([]OptionStrike, n) + for i := range n { + id := fmt.Sprint(i) + news[i] = NewsItem{ID: id, Title: "Headline " + id, Time: mktNow} + econ[i] = EconomicEvent{ID: id, Country: "US", Title: "Event " + id, Importance: 3} + earn[i] = EarningsEvent{ID: id, Symbol: "S" + id} + rows[i] = ScreenerRow{Symbol: "S" + id, Values: map[string]float64{"pe": 10}} + strikes[i] = OptionStrike{Strike: float64(i)} + } + for _, tc := range []struct { + name string + view func(*ui.Context) + }{ + {"news", func(c *ui.Context) { + s := ui.Local(c.Root(), "large.news", func() NewsFeedState { return NewsFeedState{} }) + NewsFeed(c, s, news, NewsFeedOptions{}).Element.Height(350) + }}, + {"economic", func(c *ui.Context) { + s := ui.Local(c.Root(), "large.econ", func() EconomicCalendarState { return EconomicCalendarState{} }) + EconomicCalendar(c, s, econ, EconomicCalendarOptions{}).Element.Height(350) + }}, + {"earnings", func(c *ui.Context) { + s := ui.Local(c.Root(), "large.earn", func() DataTableState[string] { return DataTableState[string]{} }) + EarningsCalendar(c, s, earn, EarningsCalendarOptions{}).Element.Height(350) + }}, + {"screener", func(c *ui.Context) { + s := ui.Local(c.Root(), "large.screen", func() ScreenerState { return ScreenerState{} }) + Screener(c, s, []ScreenerField{{ID: "pe", Label: "P/E"}}, rows, ScreenerOptions{}).Element.Height(350) + }}, + {"chain", func(c *ui.Context) { + s := ui.Local(c.Root(), "large.chain", func() OptionChainState { return OptionChainState{} }) + OptionChain(c, s, []string{"Oct"}, strikes, OptionChainOptions{Spot: 50000}).Element.Height(350) + }}, + } { + t.Run(tc.name, func(t *testing.T) { + tt := chatTester(960, 400, tc.view) + tt.Frame() + if count := len(tt.Texts()); count > 300 { + t.Fatalf("built %d texts", count) + } + }) + } +} +func TestMarketHeatmapLargeGeometry(t *testing.T) { + m := marketHeatMemo{} + for i := range 100000 { + m.tiles = append(m.tiles, marketHeatTile{name: fmt.Sprint(i), cap: 1, change: 1}) + m.caps = append(m.caps, 1) + } + m.layout(m.caps, ui.Rect{W: 640, H: 240}) + if count := len(m.visible) + len(m.small); count > 640*240/16+640/4+240/4 { + t.Fatalf("built %d marks", count) + } + if len(m.rects) != 100000 { + t.Fatalf("keyboard points %d", len(m.rects)) + } + first := &m.rects[0] + m.layout(m.caps, ui.Rect{W: 640, H: 240}) + if first != &m.rects[0] { + t.Fatal("idle layout recomputed") + } +} +func TestMarketsPaletteContrast(t *testing.T) { + for _, k := range []theme.Tokens{theme.Light(), theme.Dark()} { + for i, col := range internal.Palette(k) { + if ratio := theme.Contrast(col, k.Surface); ratio < 3 { + t.Fatalf("color %d ratio %v", i, ratio) + } + } + } +} +func TestMarketsChartStatesAndDisabled(t *testing.T) { + for _, name := range []string{"payoff", "heatmap", "allocation", "performance"} { + t.Run(name, func(t *testing.T) { + for _, status := range []DataStatus{DataLoading, DataFailed} { + frame := ChartFrame{Label: "Chart", Height: 180, Status: status, Error: "Caller failed"} + retry := false + tt := chatTester(960, 420, func(c *ui.Context) { + var r ChartResult + switch name { + case "payoff": + r = PayoffDiagram(c, bullSpread(), PayoffDiagramOptions{Frame: frame}) + case "heatmap": + path := ui.Local(c.Root(), "path", func() []string { return nil }) + r = MarketHeatmap(c, path, mktHeat(), MarketHeatmapOptions{Frame: frame}) + case "allocation": + r = AssetAllocationChart(c, []AllocationItem{{"Stocks", 1, 100}}, AssetAllocationChartOptions{Frame: frame}) + case "performance": + r = PerformanceChart(c, []float64{100, 110}, PerformanceChartOptions{Frame: frame, Times: mktTimes(2)}) + } + retry = retry || r.Retried() + }) + if status == DataFailed { + _ = tt.Click("Retry") + if !retry { + t.Fatal("retry missing") + } + } else if !strings.Contains(strings.Join(tt.Texts(), "|"), "Loading") { + t.Fatalf("loading %q", tt.Texts()) + } + } + }) + } +} + +func TestMarketsLargeChartGeometry(t *testing.T) { + values := mktSeries(100000, 0) + times := make([]time.Time, 100000) + items := make([]AllocationItem, 100000) + for i := range times { + times[i] = mktNow.Add(time.Duration(i) * time.Minute) + items[i] = AllocationItem{Name: fmt.Sprint("Asset ", i), Value: 1} + } + for _, name := range []string{"payoff", "performance", "allocation"} { + t.Run(name, func(t *testing.T) { + var geometry *chartMemoEntry + tt := chatTester(960, 600, func(c *ui.Context) { + var r ChartResult + frame := ChartFrame{Label: "Large"} + switch name { + case "payoff": + r = PayoffDiagram(c, bullSpread(), PayoffDiagramOptions{Frame: frame, Points: 100000}) + geometry = ui.Local(r.Element, "mujica.memo.payoff.geometry", func() chartMemoEntry { return chartMemoEntry{} }) + case "performance": + r = PerformanceChart(c, values, PerformanceChartOptions{Frame: frame, Times: times}) + geometry = ui.Local(r.Element, "mujica.memo.performance.geometry.Portfolio", func() chartMemoEntry { return chartMemoEntry{} }) + case "allocation": + r = AssetAllocationChart(c, items, AssetAllocationChartOptions{Frame: frame}) + } + }) + tt.Frame() + if len(tt.Texts()) > 300 { + t.Fatalf("built %d texts", len(tt.Texts())) + } + if geometry != nil { + points := geometry.val.([]int) + if len(points) > 4*960 { + t.Fatalf("built %d points", len(points)) + } + first := &points[0] + tt.Frame() + if first != &geometry.val.([]int)[0] { + t.Fatal("idle geometry recomputed") + } + } + }) + } +} diff --git a/messages_markets.go b/messages_markets.go index baeb6bb..cf1e5d4 100644 --- a/messages_markets.go +++ b/messages_markets.go @@ -25,6 +25,9 @@ func init() { "payoff_diagram.readout": {"Price %s · %s %s", "价格 %s · %s %s"}, "payoff_diagram.spot": {"Spot", "现价"}, + "payoff_diagram.profit": {"profit", "盈利"}, + "payoff_diagram.loss": {"loss", "亏损"}, + "payoff_diagram.even": {"break even", "持平"}, "payoff_diagram.breakevens": {"Breakeven:", "盈亏平衡点:"}, "watchlist.groups": {"Watchlists", "自选分组"}, diff --git a/news_feed.go b/news_feed.go index 118ffa4..7cc72ab 100644 --- a/news_feed.go +++ b/news_feed.go @@ -11,27 +11,25 @@ import ( "mujicaui/theme" ) -// NewsItem is a headline with its source, time and related symbols. type NewsItem struct { ID, Title, Source string Time time.Time Symbols []string } -// NewsFeedState holds which items were read, by ID, and the list's place. type NewsFeedState struct { - Read map[string]bool - rows ui.ListState - cursor int - count struct { + Read map[string]bool + rows ui.ListState + cursor int + readVersion int + count struct { key string unread int } } -// newsFeedUnread counts unread items, recounting only when items or reads change. -func newsFeedUnread(s *NewsFeedState, items []NewsItem) int { - key := fmt.Sprint(chartID(items), len(s.Read)) +func newsFeedUnread(s *NewsFeedState, items []NewsItem, version int) int { + key := fmt.Sprint(chartID(items), version, s.readVersion) if key != s.count.key { s.count.key, s.count.unread = key, 0 for _, it := range items { @@ -47,6 +45,7 @@ func newsFeedUnread(s *NewsFeedState, items []NewsItem) int { type NewsFeedOptions struct { // Today decides the time stamps; zero uses the window clock. Today Date + Version int Status DataStatus Error string Disabled bool @@ -55,21 +54,18 @@ type NewsFeedOptions struct { // NewsFeedView is a built NewsFeed and this frame's events. type NewsFeedView struct { Element *ui.Element - // Opened is the item opened, which is now read; empty for none. - Opened string + Opened string // Symbol is the related code clicked; empty for none. - Symbol string - Retry bool + Symbol string + Retry bool + ReadChanged bool } -// NewsFeed lists headlines newest first as given, marking unread ones; only rows in view are built. func NewsFeed(c *ui.Context, s *NewsFeedState, items []NewsItem, opts NewsFeedOptions) NewsFeedView { if s == nil { panic("mujica: NewsFeed needs a state") } - if s.Read == nil { - s.Read = map[string]bool{} - } + today := opts.Today if today.IsZero() { today = DateOf(c.Now()) @@ -77,15 +73,25 @@ func NewsFeed(c *ui.Context, s *NewsFeedState, items []NewsItem, opts NewsFeedOp k := Tokens(c) d := Density(c) var v NewsFeedView - v.Element = ui.Column(c).Gap(d.Unit() * 2).MinHeight(0).Disabled(opts.Disabled) + v.Element = ui.Column(c).Gap(d.Unit() * 2).Grow(1).MinHeight(0).Disabled(opts.Disabled) + opts.Disabled = v.Element.IsDisabled() + if opts.Disabled { + copy := *s + s = © + } + if s.Read == nil { + s.Read = map[string]bool{} + } v.Element.Children(func() { - unread := newsFeedUnread(s, items) + unread := newsFeedUnread(s, items, opts.Version) ui.Row(c).Gap(d.Unit() * 2).AlignItems(ui.Center).Children(func() { ui.Text(c, fmt.Sprintf(msg(c, "news_feed.unread"), unread)).TextColor(k.TextMuted).Grow(1).Role(ui.RoleStatus) if Button(c, msg(c, "news_feed.mark_all"), ButtonOptions{Variant: Ghost, Disabled: opts.Disabled || unread == 0}).Clicked() { for _, it := range items { s.Read[it.ID] = true } + s.readVersion++ + v.ReadChanged = true slog.Debug("mujica: news_feed mark_all", "count", unread) } }) @@ -137,15 +143,19 @@ func NewsFeed(c *ui.Context, s *NewsFeedState, items []NewsItem, opts NewsFeedOp }).Grow(1).MinHeight(0).Padding(d.Unit()).Background(k.Surface).Border(theme.BorderWidth, k.Border).Radius(theme.ControlRadius) restore() internal.Ring(list, k.Focus, theme.ControlRadius) - if !opts.Disabled && list.Submitted() && s.cursor >= 0 && s.cursor < len(items) { + if !list.IsDisabled() && list.Submitted() && s.cursor >= 0 && s.cursor < len(items) { v.Opened = items[s.cursor].ID } if v.Opened != "" && !opts.Disabled { + if !s.Read[v.Opened] { + s.readVersion++ + v.ReadChanged = true + } s.Read[v.Opened] = true } }) if v.Element.IsDisabled() { - v.Opened, v.Symbol, v.Retry = "", "", false + v.Opened, v.Symbol, v.Retry, v.ReadChanged = "", "", false, false } if v.Opened != "" || v.Symbol != "" { slog.Debug("mujica: news_feed open", "item", v.Opened, "symbol", v.Symbol) diff --git a/news_feed_test.go b/news_feed_test.go new file mode 100644 index 0000000..2c2c87d --- /dev/null +++ b/news_feed_test.go @@ -0,0 +1,49 @@ +package mujica + +import ( + "github.com/egoist/mygo/ui" + "testing" +) + +func TestNewsFeedReadSourceSymbolsAndKeyboard(t *testing.T) { + var s NewsFeedState + var got NewsFeedView + rows := []NewsItem{{ID: "a", Title: "Alpha", Source: "Wire", Time: mktNow, Symbols: []string{"AAPL"}}, {ID: "b", Title: "Beta", Source: "Wire", Time: mktNow}} + tt := chatTester(640, 420, func(c *ui.Context) { + v := NewsFeed(c, &s, rows, NewsFeedOptions{Today: DateOf(mktNow)}) + v.Element.Height(380) + if v.Opened != "" || v.Symbol != "" { + got = v + } + }) + if !tt.HasText("2 unread") { + t.Fatalf("count %q", tt.Texts()) + } + _ = tt.Click("AAPL") + if got.Symbol != "AAPL" || s.Read["a"] { + t.Fatalf("symbol %+v read %v", got, s.Read) + } + _ = tt.Click("Alpha") + if !s.Read["a"] || got.Opened != "a" { + t.Fatalf("read %v", s.Read) + } + tt.Key(0, ui.KeyDown) + tt.Key(0, ui.KeyEnter) + if !s.Read["b"] { + t.Fatal("keyboard read missing") + } + tt.Frame() + if !tt.HasText("0 unread") { + t.Fatalf("count %q", tt.Texts()) + } +} +func TestNewsFeedSnapshot(t *testing.T) { + snapshot(t, "news_feed", 560, 360, func(c *ui.Context) { + ns := ui.Local(c.Root(), "snapshot.news_feed", func() NewsFeedState { return NewsFeedState{} }) + ui.Column(c).Padding(16).Gap(12).Fill().Children(func() { + NewsFeed(c, ns, []NewsItem{{ID: "1", Title: "Apple unveils new chips", Source: "Reuters", Time: mktNow, Symbols: []string{"AAPL"}}, + {ID: "2", Title: "Oil falls as supply grows", Source: "Bloomberg", Time: mktNow.Add(-26 * 3600e9), Symbols: []string{"XOM", "CVX"}}}, NewsFeedOptions{Today: DateOf(mktNow)}).Element.Height(300) + + }) + }) +} diff --git a/option_chain.go b/option_chain.go index 09a883a..efc11f7 100644 --- a/option_chain.go +++ b/option_chain.go @@ -4,6 +4,7 @@ import ( "cmp" "fmt" "log/slog" + "math" "slices" "github.com/egoist/mygo/ui" @@ -23,7 +24,6 @@ type OptionStrike struct { Call, Put OptionQuote } -// OptionSide is a call or a put. The zero value is OptionCall. type OptionSide int const ( @@ -34,7 +34,6 @@ const ( // OptionChainState is the expiry shown and the chosen contract. type OptionChainState struct { Expiry string - // Strike and Side are the chosen contract when Chosen is set. Strike float64 Side OptionSide Chosen bool @@ -45,7 +44,6 @@ type OptionChainState struct { // OptionChainOptions configure an OptionChain. type OptionChainOptions struct { - // Spot is the underlying price; it centers the strikes and marks in-the-money contracts. Spot float64 Decimals int Disabled bool @@ -55,27 +53,46 @@ type OptionChainOptions struct { type OptionChainView struct { Element *ui.Element // ExpiryChanged asks the caller for the strikes of State.Expiry. - ExpiryChanged bool - // Changed reports a newly chosen contract; Submitted is Enter or a double click. + ExpiryChanged bool Changed, Submitted bool } -// OptionChain shows calls and puts around ascending strikes, centered on the spot, for the chosen expiry. func OptionChain(c *ui.Context, s *OptionChainState, expiries []string, strikes []OptionStrike, opts OptionChainOptions) OptionChainView { if s == nil || len(expiries) == 0 { panic("mujica: OptionChain needs a state and an expiry") } + if opts.Spot < 0 || math.IsNaN(opts.Spot) || math.IsInf(opts.Spot, 0) || s.Side < OptionCall || s.Side > OptionPut { + panic("mujica: OptionChain price or side is invalid") + } + for i, o := range strikes { + if i > 0 && o.Strike == strikes[i-1].Strike { + panic("mujica: OptionChain strikes must be unique") + } + for _, v := range []float64{o.Strike, o.Call.Bid, o.Call.Ask, o.Call.Last, o.Put.Bid, o.Put.Ask, o.Put.Last} { + if v < 0 || math.IsNaN(v) || math.IsInf(v, 0) { + panic("mujica: OptionChain quotes must be finite and nonnegative") + } + } + } if !slices.IsSortedFunc(strikes, func(a, b OptionStrike) int { return cmp.Compare(a.Strike, b.Strike) }) { panic("mujica: OptionChain strikes must ascend") } - if !slices.Contains(expiries, s.Expiry) { - s.Expiry = expiries[0] - } + dec := priceDecimals("OptionChain", opts.Decimals) k := Tokens(c) d := Density(c) var v OptionChainView - v.Element = ui.Column(c).Gap(d.Unit() * 2).MinHeight(0).Disabled(opts.Disabled) + v.Element = ui.Column(c).Gap(d.Unit() * 2).Grow(1).MinHeight(0).Disabled(opts.Disabled) + opts.Disabled = v.Element.IsDisabled() + if opts.Disabled { + copy := *s + s = © + } + if s.Expiry == "" { + s.Expiry = expiries[0] + } else if !slices.Contains(expiries, s.Expiry) { + panic("mujica: OptionChain expiry is not listed") + } v.Element.Children(func() { ui.Row(c).Gap(d.Unit() * 3).AlignItems(ui.Center).Children(func() { items := make([]SelectOption[string], len(expiries)) @@ -105,6 +122,11 @@ func optionChainHeader(c *ui.Context) { t := Tokens(c) d := Density(c) size := FontSize(c, theme.CaptionSize) + ui.Row(c).Padding(0, d.Unit()*3).Children(func() { + ui.Text(c, msg(c, "option_chain.calls")).Grow(1).Basis(0).TextAlign(ui.Center).FontSize(size).TextColor(t.TextMuted) + ui.Box(c).Width(90) + ui.Text(c, msg(c, "option_chain.puts")).Grow(1).Basis(0).TextAlign(ui.Center).FontSize(size).TextColor(t.TextMuted) + }) ui.Row(c).Padding(0, d.Unit()*3).Children(func() { for side, title := range []string{"option_chain.calls", "option_chain.puts"} { if side == 1 { @@ -137,6 +159,9 @@ func optionChainRows(c *ui.Context, s *OptionChainState, strikes []OptionStrike, cursor = &cp } atm, _ := slices.BinarySearchFunc(strikes, opts.Spot, func(o OptionStrike, v float64) int { return cmp.Compare(o.Strike, v) }) + if atm == len(strikes) || atm > 0 && opts.Spot-strikes[atm-1].Strike < strikes[atm].Strike-opts.Spot { + atm-- + } if key := fmt.Sprint(s.Expiry, len(strikes)); key != s.center { s.center = key s.rows.ScrollTo(min(atm, len(strikes)-1), ui.Center) @@ -144,6 +169,8 @@ func optionChainRows(c *ui.Context, s *OptionChainState, strikes []OptionStrike, s.rows.Key = func(i int) any { return strikes[i].Strike } s.rows.Label = func(i int) string { return statisticFormat(strikes[i].Strike, dec) } s.rows.Selected = cursor + clickedRow, clickedSide := -1, OptionCall + double := false restore := dataSelectTheme(c, 0) list := ui.List(c, &s.rows, len(strikes), func(i int) { o := strikes[i] @@ -156,15 +183,20 @@ func optionChainRows(c *ui.Context, s *OptionChainState, strikes []OptionStrike, itm := opts.Spot > 0 && (sd == 0 && o.Strike < opts.Spot || sd == 1 && o.Strike > opts.Spot) half := ui.Row(c).Grow(1).Basis(0).AlignItems(ui.Center).Radius(theme.ControlRadius). Label(optionChainName(c, o.Strike, OptionSide(sd), q, dec, itm)) - if itm { - half.Background(k.Ornament.Alpha(0.14)) - } - if chosen && OptionSide(sd) == s.Side { - half.DrawOver(func(p *ui.Painter, r ui.Rect) { internal.Frame(p, r, 1, 5, k.AccentText) }) - } if half.Clicked() && !half.IsDisabled() { - *cursor, s.Side = i, OptionSide(sd) + clickedRow, clickedSide, double = i, OptionSide(sd), half.DoubleClicked() } + if itm { + half.Background(k.Selection) + } + half.DrawOver(func(p *ui.Painter, r ui.Rect) { + if itm { + p.FillPath(internal.Diamond(internal.Snap(p, r.X+5), internal.Snap(p, r.Y+r.H/2), 6), k.AccentText) + } + if chosen && OptionSide(sd) == s.Side { + internal.Frame(p, r, 1, 5, k.AccentText) + } + }) half.Children(func() { for _, v := range []float64{q.Bid, q.Ask, q.Last} { ui.Text(c, statisticFormat(v, dec)).Grow(1).Basis(0).TextAlign(ui.End).FontFeatures("tnum").SingleLine() @@ -175,8 +207,21 @@ func optionChainRows(c *ui.Context, s *OptionChainState, strikes []OptionStrike, }).Grow(1).MinHeight(0).Padding(d.Unit()).Background(k.Surface).Border(theme.BorderWidth, k.Border).Radius(theme.ControlRadius) restore() internal.Ring(list, k.Focus, theme.ControlRadius) - if !opts.Disabled { + pointed := OptionSide(-1) + if x, _, over := list.PointerPosition(); over { + pointed = OptionCall + if x > list.Bounds().W/2 { + pointed = OptionPut + } + } + if !list.IsDisabled() { + if clickedRow >= 0 { + s.cursor, s.Side = clickedRow, clickedSide + list.Focus() + } switch { + case clickedRow < 0 && s.cursor != before && pointed >= 0: + s.Side = pointed case list.Shortcut(0, ui.KeyLeft): s.Side = OptionCall case list.Shortcut(0, ui.KeyRight): @@ -185,17 +230,16 @@ func optionChainRows(c *ui.Context, s *OptionChainState, strikes []OptionStrike, if s.cursor >= 0 && (s.cursor != before || s.Side != side) { s.Strike, s.Chosen, changed = strikes[s.cursor].Strike, true, true } - submitted = list.Submitted() && s.Chosen + submitted = (list.Submitted() || double) && s.Chosen } return changed, submitted } -// optionChainStrike is the middle strike cell; the one at the spot carries a diamond. func optionChainStrike(c *ui.Context, strike float64, dec int, atm bool) { k := Tokens(c) ui.Row(c).Width(90).Gap(4).Justify(ui.Center).AlignItems(ui.Center).Background(k.Background).Children(func() { if atm { - ui.Box(c).Size(8, 8).Draw(func(p *ui.Painter, r ui.Rect) { p.FillPath(internal.Diamond(r.X+4, r.Y+4, 8), k.Ornament) }) + ui.Box(c).Size(8, 8).Draw(func(p *ui.Painter, r ui.Rect) { p.FillPath(internal.Diamond(r.X+4, r.Y+4, 8), k.AccentText) }) } ui.Text(c, statisticFormat(strike, dec)).FontWeight(700).FontFeatures("tnum") }) diff --git a/option_chain_test.go b/option_chain_test.go new file mode 100644 index 0000000..05736be --- /dev/null +++ b/option_chain_test.go @@ -0,0 +1,130 @@ +package mujica + +import ( + "testing" + + "github.com/egoist/mygo/ui" +) + +func optionChainTester(s *OptionChainState, strikes []OptionStrike, opts OptionChainOptions, got *OptionChainView) *ui.Tester { + tt := ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + ui.Column(c).Padding(10).Height(420).Children(func() { + v := OptionChain(c, s, []string{"Oct 17", "Nov 21"}, strikes, opts) + if v.Changed || v.Submitted || v.ExpiryChanged { + *got = v + } + }) + }, 780, 440) + // Rows show once the list has been laid out. + tt.Frame() + return tt +} + +func TestOptionChainChooseByClickAndKeys(t *testing.T) { + var s OptionChainState + var got OptionChainView + tt := optionChainTester(&s, mktStrikes(), OptionChainOptions{Spot: 100.4}, &got) + tt.Frame() + optionChainClick(t, tt, "102.00", OptionPut) + if !s.Chosen || s.Strike != 102 || s.Side != OptionPut || !got.Changed { + t.Fatalf("state %+v", s) + } + tt.Key(0, ui.KeyLeft) + if s.Side != OptionCall || s.Strike != 102 { + t.Fatalf("Left kept side %v", s.Side) + } + tt.Key(0, ui.KeyDown) + if s.Strike != 103 { + t.Fatalf("Down chose %v", s.Strike) + } + tt.Key(0, ui.KeyEnter) + if !got.Submitted { + t.Fatal("Enter did not submit") + } +} + +func TestOptionChainMarksInTheMoneyAndCenters(t *testing.T) { + var strikes []OptionStrike + for i := range 300 { + strikes = append(strikes, OptionStrike{Strike: float64(i) + 0.5}) + } + var s OptionChainState + var got OptionChainView + tt := optionChainTester(&s, strikes, OptionChainOptions{Spot: 200}, &got) + tt.Frame() + if !tt.HasText("200.50") || tt.HasText("Call 5.50") { + t.Fatalf("not centered on the spot: %q", tt.Texts()) + } + if n := len(tt.Texts()); n > 400 { + t.Fatalf("built %d texts for 300 strikes", n) + } + if !tt.HasText("Call 199.50: bid 0.00, ask 0.00, last 0.00, in the money") || tt.HasText("Put 199.50: bid 0.00, ask 0.00, last 0.00, in the money") { + t.Fatal("in-the-money marks wrong") + } +} + +func TestOptionChainExpiryAndDisabled(t *testing.T) { + var s OptionChainState + var got OptionChainView + tt := optionChainTester(&s, mktStrikes(), OptionChainOptions{Spot: 100}, &got) + _ = tt.Click("Oct 17") + _ = tt.Click("Nov 21") + if s.Expiry != "Nov 21" || !got.ExpiryChanged { + t.Fatalf("expiry %q", s.Expiry) + } + var d OptionChainState + got = OptionChainView{} + tt = optionChainTester(&d, mktStrikes(), OptionChainOptions{Spot: 100, Disabled: true}, &got) + optionChainClick(t, tt, "102.00", OptionPut) + if d.Chosen || got.Changed { + t.Fatal("disabled chain chose") + } +} + +func TestOptionChainRejectsUnsortedStrikes(t *testing.T) { + defer func() { + if recover() == nil { + t.Fatal("no panic") + } + }() + var s OptionChainState + ui.Render(func(c *ui.Context) { + Use(c, Settings{}) + OptionChain(c, &s, []string{"x"}, []OptionStrike{{Strike: 2}, {Strike: 1}}, OptionChainOptions{}) + }, 100, 100, 1) +} + +func TestOptionChainSnapshot(t *testing.T) { + snapshot(t, "option_chain", 760, 400, func(c *ui.Context) { + s := &OptionChainState{Strike: 99, Side: OptionCall, Chosen: true} + ui.Column(c).Padding(16).Height(400).Children(func() { + OptionChain(c, s, []string{"Oct 17", "Nov 21"}, mktStrikes(), OptionChainOptions{Spot: 100.4}) + }) + }) +} + +// optionChainClick clicks the call or put half of the row for strike. +func optionChainClick(t *testing.T, tt *ui.Tester, strike string, side OptionSide) { + t.Helper() + r, ok := tt.Find(strike) + if !ok { + t.Fatalf("%q not shown", strike) + } + x := r.X + r.W*0.2 + if side == OptionPut { + x = r.X + r.W*0.8 + } + tt.ClickAt(x, r.Y+r.H/2) +} + +func TestOptionChainSameStrikeOtherSide(t *testing.T) { + var s OptionChainState + var got OptionChainView + tt := optionChainTester(&s, mktStrikes(), OptionChainOptions{Spot: 100}, &got) + optionChainClick(t, tt, "102.00", OptionCall) + optionChainClick(t, tt, "102.00", OptionPut) + if s.Strike != 102 || s.Side != OptionPut { + t.Fatalf("contract %+v", s) + } +} diff --git a/payoff_diagram.go b/payoff_diagram.go index 17f59c1..8b9c338 100644 --- a/payoff_diagram.go +++ b/payoff_diagram.go @@ -12,7 +12,6 @@ import ( "mujicaui/theme" ) -// OptionLegKind is what a leg holds. The zero value is LegCall. type OptionLegKind int const ( @@ -22,7 +21,6 @@ const ( LegStock ) -// OptionLeg is one position of a strategy; Quantity is negative for short. type OptionLeg struct { Kind OptionLegKind Strike float64 @@ -30,7 +28,6 @@ type OptionLeg struct { Quantity float64 } -// PayoffAt is the strategy's profit at expiry with the underlying at price. func PayoffAt(legs []OptionLeg, price float64) float64 { sum := 0.0 for _, l := range legs { @@ -48,7 +45,6 @@ func PayoffAt(legs []OptionLeg, price float64) float64 { return sum } -// Breakevens are the prices in lo..hi where the strategy's payoff crosses zero, ascending. func Breakevens(legs []OptionLeg, lo, hi float64) []float64 { kinks := []float64{lo, hi} for _, l := range legs { @@ -76,17 +72,13 @@ func Breakevens(legs []OptionLeg, lo, hi float64) []float64 { // PayoffDiagramOptions configure a PayoffDiagram. type PayoffDiagramOptions struct { - Frame ChartFrame - // Spot is the current price, marked on the chart; zero hides it. - Spot float64 - // Low and High bound the price axis; both zero span the strikes ±30%. + Frame ChartFrame + Spot float64 Low, High float64 - // Points is how many prices the keys step through; zero means 101. - Points int - Format func(v float64) string + Points int + Format func(v float64) string } -// PayoffDiagram plots a strategy's profit at expiry with breakevens and the current price. func PayoffDiagram(c *ui.Context, legs []OptionLeg, opts PayoffDiagramOptions) ChartResult { lo, hi := payoffRange(legs, opts) n := opts.Points @@ -101,6 +93,7 @@ func PayoffDiagram(c *ui.Context, legs []OptionLeg, opts PayoffDiagramOptions) C size := FontSize(c, theme.CaptionSize) type data struct { px, pl, be []float64 + gx, gp []float64 ylo, yhi float64 } d := chartMemo(ch, "payoff", fmt.Sprint(legs, lo, hi, n), func() data { @@ -112,6 +105,20 @@ func PayoffDiagram(c *ui.Context, legs []OptionLeg, opts PayoffDiagramOptions) C v.px, v.pl = append(v.px, x), append(v.pl, PayoffAt(legs, x)) v.ylo, v.yhi = min(v.ylo, v.pl[i]), max(v.yhi, v.pl[i]) } + v.gx = slices.Clone(v.px) + for _, l := range legs { + if l.Kind != LegStock && l.Strike > lo && l.Strike < hi { + v.gx = append(v.gx, l.Strike) + } + } + v.gx = append(v.gx, v.be...) + slices.Sort(v.gx) + v.gx = slices.Compact(v.gx) + for _, x := range v.gx { + value := PayoffAt(legs, x) + v.gp = append(v.gp, value) + v.ylo, v.yhi = min(v.ylo, value), max(v.yhi, value) + } return v }) if len(legs) == 0 { @@ -128,7 +135,8 @@ func PayoffDiagram(c *ui.Context, legs []OptionLeg, opts PayoffDiagramOptions) C up, down := trendColor(c, 1), trendColor(c, -1) spec := chartSpec{n: n} spec.readout = func(i int) string { - return fmt.Sprintf(msg(c, "payoff_diagram.readout"), format(d.px[i]), trendWord(c, trendSign(d.pl[i])), format(d.pl[i])) + word := [3]string{"payoff_diagram.loss", "payoff_diagram.even", "payoff_diagram.profit"}[trendSign(d.pl[i])+1] + return fmt.Sprintf(msg(c, "payoff_diagram.readout"), format(d.px[i]), msg(c, word), format(d.pl[i])) } spec.pick = func(r ui.Rect, x, y float32) int { plot, xs, _ := geom(r) @@ -152,17 +160,14 @@ func PayoffDiagram(c *ui.Context, legs []OptionLeg, opts PayoffDiagramOptions) C zero := internal.Snap(p, ys.Map(0)) pt := func(x, v float64) (float32, float32) { return internal.Snap(p, xs.Map(x)), internal.Snap(p, ys.Map(v)) } // Exact corners: the grid plus strikes and breakevens. - xsAll := slices.Clone(d.px) - for _, l := range legs { - if l.Kind != LegStock && l.Strike > lo && l.Strike < hi { - xsAll = append(xsAll, l.Strike) - } - } - xsAll = append(xsAll, d.be...) - slices.Sort(xsAll) - for i := 1; i < len(xsAll); i++ { - a, b := xsAll[i-1], xsAll[i] - fa, fb := PayoffAt(legs, a), PayoffAt(legs, b) + indices := chartMemo(ch, "payoff.geometry", [2]any{chartID(d.gx), plot.W}, func() []int { + return internal.Columns(len(d.gx), func(i int) float32 { return float32((d.gx[i]-lo)/(hi-lo)) * plot.W }, func(i int) float64 { return d.gp[i] }) + }) + + for j := 1; j < len(indices); j++ { + prev, i := indices[j-1], indices[j] + a, b := d.gx[prev], d.gx[i] + fa, fb := d.gp[prev], d.gp[i] col := up if fa+fb < 0 { col = down @@ -175,11 +180,11 @@ func PayoffDiagram(c *ui.Context, legs []OptionLeg, opts PayoffDiagramOptions) C } p.Line(plot.X, zero, plot.X+plot.W, zero, 1, k.ControlBorder) var line ui.Path - for i, x := range xsAll { - if i == 0 { - line.MoveTo(pt(x, PayoffAt(legs, x))) + for j, i := range indices { + if j == 0 { + line.MoveTo(pt(d.gx[i], d.gp[i])) } else { - line.LineTo(pt(x, PayoffAt(legs, x))) + line.LineTo(pt(d.gx[i], d.gp[i])) } } p.StrokePath(&line, 2, k.AccentText) @@ -215,7 +220,6 @@ func PayoffDiagram(c *ui.Context, legs []OptionLeg, opts PayoffDiagramOptions) C return res } -// payoffRange is the price axis: the options' range, or the strikes ±30%. func payoffRange(legs []OptionLeg, opts PayoffDiagramOptions) (lo, hi float64) { if opts.Low != 0 || opts.High != 0 { if !(opts.High > opts.Low) || opts.Low < 0 { diff --git a/payoff_diagram_test.go b/payoff_diagram_test.go new file mode 100644 index 0000000..4467156 --- /dev/null +++ b/payoff_diagram_test.go @@ -0,0 +1,108 @@ +package mujica + +import ( + "mujicaui/theme" + "slices" + "strings" + "testing" + + "github.com/egoist/mygo/ui" +) + +func bullSpread() []OptionLeg { + return []OptionLeg{{Kind: LegCall, Strike: 100, Premium: 3, Quantity: 1}, {Kind: LegCall, Strike: 110, Premium: 1, Quantity: -1}} +} + +func TestPayoffMath(t *testing.T) { + legs := bullSpread() + for _, tc := range []struct{ price, want float64 }{{90, -2}, {100, -2}, {102, 0}, {110, 8}, {130, 8}} { + if got := PayoffAt(legs, tc.price); got != tc.want { + t.Errorf("payoff at %v = %v, want %v", tc.price, got, tc.want) + } + } + if got := Breakevens(legs, 70, 140); !slices.Equal(got, []float64{102}) { + t.Fatalf("breakevens %v", got) + } + straddle := []OptionLeg{{Kind: LegCall, Strike: 100, Premium: 4, Quantity: 1}, {Kind: LegPut, Strike: 100, Premium: 3, Quantity: 1}} + if got := Breakevens(straddle, 50, 150); !slices.Equal(got, []float64{93, 107}) { + t.Fatalf("straddle breakevens %v", got) + } + covered := []OptionLeg{{Kind: LegStock, Premium: 50, Quantity: 100}, {Kind: LegCall, Strike: 55, Premium: 2, Quantity: -100}} + if got := PayoffAt(covered, 60); got != 700 { + t.Fatalf("covered call at 60 = %v", got) + } +} + +func TestPayoffDiagramKeysAndText(t *testing.T) { + var last ChartResult + tt := chatTester(640, 380, func(c *ui.Context) { + last = PayoffDiagram(c, bullSpread(), PayoffDiagramOptions{Frame: ChartFrame{Label: "Spread"}, Spot: 103, Low: 90, High: 120, Points: 31}) + }) + if !tt.HasText("Breakeven: 102") { + t.Fatalf("texts %q", tt.Texts()) + } + tt.Key(0, ui.KeyTab) + tt.Key(0, ui.KeyEnd) + if last.Point != 30 || !tt.HasText("Price 120 · profit 8") { + t.Fatalf("End: point %d texts %q", last.Point, tt.Texts()) + } + tt.Key(0, ui.KeyHome) + if !tt.HasText("Price 90 · loss -2") { + t.Fatalf("Home: %q", tt.Texts()) + } + ann := strings.Join(tt.Announcements(), "|") + if !strings.Contains(ann, "Price 90") { + t.Fatalf("announcements %q", ann) + } +} + +func TestPayoffDiagramEmptyAndBadRange(t *testing.T) { + tt := chatTester(640, 380, func(c *ui.Context) { + PayoffDiagram(c, nil, PayoffDiagramOptions{Frame: ChartFrame{Label: "Empty"}}) + }) + if !tt.HasText("No data") { + t.Fatalf("texts %q", tt.Texts()) + } + defer func() { + if recover() == nil { + t.Fatal("no panic") + } + }() + ui.Render(func(c *ui.Context) { + Use(c, Settings{}) + PayoffDiagram(c, bullSpread(), PayoffDiagramOptions{Frame: ChartFrame{Label: "x"}, Low: 10, High: 5}) + }, 100, 100, 1) +} + +func TestPayoffDiagramSnapshot(t *testing.T) { + snapshot(t, "payoff_diagram", 640, 360, func(c *ui.Context) { + ui.Column(c).Padding(16).Children(func() { + PayoffDiagram(c, bullSpread(), PayoffDiagramOptions{Frame: ChartFrame{Label: "Bull call spread"}, Spot: 103}) + }) + }) +} + +func TestPayoffDiagramSparseGridKeepsPeak(t *testing.T) { + legs := []OptionLeg{{Kind: LegCall, Strike: 90, Premium: 1, Quantity: 1}, {Kind: LegCall, Strike: 100, Quantity: -2}, {Kind: LegCall, Strike: 110, Quantity: 1}} + tt := chatTester(640, 380, func(c *ui.Context) { + PayoffDiagram(c, legs, PayoffDiagramOptions{Frame: ChartFrame{Label: "Butterfly"}, Low: 80, High: 120, Points: 2}) + }) + r, ok := tt.Find("Butterfly") + if !ok { + t.Fatal("plot missing") + } + x := int(r.X + 56 + (r.W-68)/2) + found := false + ink := theme.Light().AccentText + for y := int(r.Y + 8); y < int(r.Y+r.H/2); y++ { + for dx := -2; dx <= 2; dx++ { + pixel := tt.Image().RGBAAt(x+dx, y) + if pixel.R == ink.R && pixel.G == ink.G && pixel.B == ink.B { + found = true + } + } + } + if !found { + t.Fatal("profit peak falls outside the plot") + } +} diff --git a/performance_chart.go b/performance_chart.go index 5ba745e..dcbda0b 100644 --- a/performance_chart.go +++ b/performance_chart.go @@ -14,7 +14,8 @@ import ( // PerformanceChartOptions configure a PerformanceChart. type PerformanceChartOptions struct { - Frame ChartFrame + Frame ChartFrame + Version int // Times dates each value; required, ascending. Times []time.Time // Benchmark is compared against the portfolio; nil shows none. @@ -22,13 +23,11 @@ type PerformanceChartOptions struct { Name, BenchmarkName string } -// Drawdown is the deepest fall from a peak: indices and the fall in percent. type Drawdown struct { Peak, Trough int Percent float64 } -// MaxDrawdown finds the largest peak-to-trough fall of positive values; Percent ≤ 0. func MaxDrawdown(values []float64) Drawdown { var dd Drawdown peak := 0 @@ -43,18 +42,13 @@ func MaxDrawdown(values []float64) Drawdown { return dd } -// PerformanceChart plots cumulative return against a benchmark and shades the maximum drawdown. func PerformanceChart(c *ui.Context, values []float64, opts PerformanceChartOptions) ChartResult { - for _, vs := range [][]float64{values, opts.Benchmark} { - for _, v := range vs { - if !(v > 0) || math.IsInf(v, 0) { - panic("mujica: PerformanceChart values must be positive") - } - } - } if opts.Benchmark != nil && len(opts.Benchmark) != len(values) { panic("mujica: PerformanceChart Benchmark length differs") } + if len(opts.Times) != len(values) { + panic("mujica: PerformanceChart Times length differs") + } ch := newChart(c, opts.Frame) k := Tokens(c) pal := internal.Palette(k) @@ -67,7 +61,18 @@ func PerformanceChart(c *ui.Context, values []float64, opts PerformanceChartOpti if bname == "" { bname = msg(c, "performance_chart.benchmark") } - series := chartMemo(ch, "returns", [4]string{chartID(values), chartID(opts.Benchmark), name, bname}, func() []ChartSeries { + if opts.Benchmark != nil && name == bname { + panic("mujica: PerformanceChart series names must differ") + } + series := chartMemo(ch, "returns", [4]string{chartID(values), chartID(opts.Benchmark), name + fmt.Sprint(opts.Version), bname}, func() []ChartSeries { + for _, vs := range [][]float64{values, opts.Benchmark} { + for _, v := range vs { + if !(v > 0) || math.IsInf(v, 0) { + panic("mujica: PerformanceChart values must be positive") + } + } + } + out := []ChartSeries{{Name: name, Values: performanceReturns(values)}} if opts.Benchmark != nil { out = append(out, ChartSeries{Name: bname, Values: performanceReturns(opts.Benchmark)}) @@ -75,8 +80,8 @@ func PerformanceChart(c *ui.Context, values []float64, opts PerformanceChartOpti return out }) n := len(values) - ax := chartMemo(ch, "x", chartID(opts.Times), func() chartX { return newChartX(n, nil, opts.Times) }) - dd := chartMemo(ch, "dd", chartID(values), func() Drawdown { return MaxDrawdown(values) }) + ax := chartMemo(ch, "x", chartID(opts.Times)+fmt.Sprint(opts.Version), func() chartX { return newChartX(n, nil, opts.Times) }) + dd := chartMemo(ch, "dd", chartID(values)+fmt.Sprint(opts.Version), func() Drawdown { return MaxDrawdown(values) }) lo, hi, ok := chartYRange(ch, series, true, nil) if !ok { n = 0 @@ -133,7 +138,9 @@ func PerformanceChart(c *ui.Context, values []float64, opts PerformanceChartOpti continue } var line ui.Path - idx := internal.Columns(n, func(i int) float32 { return xs.Map(ax.vals[i]) }, func(i int) float64 { return s.Values[i] }) + idx := chartMemo(ch, "performance.geometry."+s.Name, [3]any{chartID(s.Values), chartID(ax.vals), plot.W}, func() []int { + return internal.Columns(n, func(i int) float32 { return xs.Map(ax.vals[i]) - plot.X }, func(i int) float64 { return s.Values[i] }) + }) for j, i := range idx { if j == 0 { line.MoveTo(x(i), internal.Snap(p, ys.Map(s.Values[i]))) diff --git a/performance_chart_test.go b/performance_chart_test.go new file mode 100644 index 0000000..9bfe10f --- /dev/null +++ b/performance_chart_test.go @@ -0,0 +1,69 @@ +package mujica + +import ( + "github.com/egoist/mygo/ui" + "math" + "testing" +) + +func TestPerformanceChartBenchmarkDrawdownAndKeys(t *testing.T) { + values := []float64{100, 110, 88, 120} + times := mktTimes(4) + var last ChartResult + tt := chatTester(760, 420, func(c *ui.Context) { + last = PerformanceChart(c, values, PerformanceChartOptions{Frame: ChartFrame{Label: "Performance"}, Times: times, Benchmark: []float64{100, 105, 108, 112}}) + }) + if dd := MaxDrawdown(values); dd.Peak != 1 || dd.Trough != 2 || math.Abs(dd.Percent+20) > 1e-9 { + t.Fatalf("drawdown %+v", dd) + } + tt.Key(0, ui.KeyTab) + tt.Key(0, ui.KeyTab) + tt.Key(0, ui.KeyTab) + tt.Key(0, ui.KeyEnd) + if last.Point != 3 || !tt.HasText("2026-01-04 · Portfolio +20.00% · Benchmark +12.00%") { + t.Fatalf("point %d text %q", last.Point, tt.Texts()) + } + _ = tt.Click("Benchmark") + tt.Key(0, ui.KeyTab) + tt.Key(0, ui.KeyEnd) + if !tt.HasText("2026-01-04 · Portfolio +20.00%") { + t.Fatalf("legend %q", tt.Texts()) + } + marketsPanic(t, func(c *ui.Context) { + PerformanceChart(c, []float64{-1}, PerformanceChartOptions{Frame: ChartFrame{Label: "x"}}) + }) +} +func TestPerformanceChartSnapshot(t *testing.T) { + + snapshot(t, "performance_chart", 720, 380, func(c *ui.Context) { + ui.Column(c).Padding(16).Gap(12).Fill().Children(func() { + PerformanceChart(c, mktSeries(120, 0), PerformanceChartOptions{Frame: ChartFrame{Label: "Performance"}, Times: mktTimes(120), Benchmark: mktSeries(120, 1)}) + + }) + }) +} + +func TestPerformanceChartRequiresTimes(t *testing.T) { + marketsPanic(t, func(c *ui.Context) { + PerformanceChart(c, []float64{100, 110}, PerformanceChartOptions{Frame: ChartFrame{Label: "x"}}) + }) +} + +func TestPerformanceChartDateVersion(t *testing.T) { + values := []float64{100, 105, 110} + times := mktTimes(3) + version := 0 + var axis chartX + tt := chatTester(760, 420, func(c *ui.Context) { + r := PerformanceChart(c, values, PerformanceChartOptions{Frame: ChartFrame{Label: "Performance"}, Times: times, Version: version}) + memo := ui.Local(r.Element, "mujica.memo.x", func() chartMemoEntry { return chartMemoEntry{} }) + axis = memo.val.(chartX) + }) + times[2] = times[0].AddDate(0, 0, 9) + values[2] = 120 + version++ + tt.Frame() + if got := axis.vals[2]; got != float64(times[2].UnixNano())/1e9 { + t.Fatalf("axis time %v", got) + } +} diff --git a/portfolio_summary.go b/portfolio_summary.go index 26f97c0..219e4d5 100644 --- a/portfolio_summary.go +++ b/portfolio_summary.go @@ -18,8 +18,7 @@ type PortfolioAccount struct { Total float64 // DayPnL is today's profit; TotalReturn the profit since inception. DayPnL, TotalReturn float64 - // Cost is what went in; it turns TotalReturn into a percent. - Cost float64 + Cost float64 } // PortfolioSummaryOptions configure a PortfolioSummary. @@ -32,13 +31,8 @@ type PortfolioSummaryOptions struct { } // PortfolioSummaryView is a built summary; Changed reports another account chosen. -type PortfolioSummaryView struct { - Element *ui.Element - Changed bool -} -// PortfolioSummary shows total assets, today's profit and total return, for all accounts or one. -func PortfolioSummary(c *ui.Context, account *string, accounts []PortfolioAccount, opts PortfolioSummaryOptions) PortfolioSummaryView { +func PortfolioSummary(c *ui.Context, account *string, accounts []PortfolioAccount, opts PortfolioSummaryOptions) ChoiceResult { if account == nil { panic("mujica: PortfolioSummary needs an account") } @@ -64,7 +58,7 @@ func PortfolioSummary(c *ui.Context, account *string, accounts []PortfolioAccoun panic("mujica: PortfolioSummary account " + *account + " is not listed") } before := *account - v := PortfolioSummaryView{} + v := ChoiceResult{} v.Element = ui.Column(c).Gap(u*3).Padding(u*4).Background(k.Surface).Border(theme.BorderWidth, k.Border). Radius(theme.CardRadius).Disabled(opts.Disabled) v.Element.Children(func() { @@ -89,8 +83,8 @@ func PortfolioSummary(c *ui.Context, account *string, accounts []PortfolioAccoun }) }) }) - v.Changed = *account != before && !v.Element.IsDisabled() - if v.Changed { + v.changed = *account != before && !v.Element.IsDisabled() + if v.Changed() { slog.Debug("mujica: portfolio_summary account", "id", *account) } return v @@ -103,7 +97,6 @@ func portfolioFigure(c *ui.Context, title string, value func()) { }) } -// portfolioSigned shows a signed amount and percent with the trend arrow. func portfolioSigned(c *ui.Context, v float64, cur string, dec int, pct float64) { sign := trendSign(v) text := cur + statisticFormat(math.Abs(v), dec) @@ -121,7 +114,6 @@ func portfolioSigned(c *ui.Context, v float64, cur string, dec int, pct float64) }) } -// portfolioPercent is part of base in percent, NaN when base is zero. func portfolioPercent(part, base float64) float64 { if base == 0 { return math.NaN() diff --git a/portfolio_summary_test.go b/portfolio_summary_test.go new file mode 100644 index 0000000..b939b52 --- /dev/null +++ b/portfolio_summary_test.go @@ -0,0 +1,45 @@ +package mujica + +import ( + "github.com/egoist/mygo/ui" + "math" + "testing" +) + +func TestPortfolioSummaryAccountsAndTotals(t *testing.T) { + account := "" + disabled := false + changed := false + rows := []PortfolioAccount{{ID: "a", Name: "Brokerage", Total: 120000, DayPnL: 1250, TotalReturn: 20000, Cost: 100000}, {ID: "b", Name: "Retirement", Total: 80000, DayPnL: -300, TotalReturn: 5000, Cost: 75000}} + tt := chatTester(960, 300, func(c *ui.Context) { + r := PortfolioSummary(c, &account, rows, PortfolioSummaryOptions{Disabled: disabled}) + changed = changed || r.Changed() + }) + if !tt.HasText("$200,000.00") || !tt.HasText("+$950.00") || !tt.HasText("+$25,000.00") { + t.Fatalf("totals %q", tt.Texts()) + } + _ = tt.Click("Retirement") + tt.Frame() + if account != "b" || !changed || !tt.HasText("$80,000.00") { + t.Fatalf("account %s texts %q", account, tt.Texts()) + } + disabled = true + tt.Frame() + _ = tt.Click("Brokerage") + if account != "b" { + t.Fatal("disabled changed") + } + if !math.IsNaN(portfolioPercent(2, 0)) { + t.Fatal("zero base") + } +} +func TestPortfolioSummarySnapshot(t *testing.T) { + acct := "" + snapshot(t, "portfolio_summary", 760, 260, func(c *ui.Context) { + ui.Column(c).Padding(16).Gap(12).Fill().Children(func() { + PortfolioSummary(c, &acct, []PortfolioAccount{{ID: "a", Name: "Brokerage", Total: 120000, DayPnL: 1250, TotalReturn: 20000, Cost: 100000}, + {ID: "b", Name: "Retirement", Total: 80000, DayPnL: -300, TotalReturn: 5000, Cost: 75000}}, PortfolioSummaryOptions{}) + + }) + }) +} diff --git a/screener.go b/screener.go index 84db81d..9da5112 100644 --- a/screener.go +++ b/screener.go @@ -13,13 +13,11 @@ import ( "mujicaui/theme" ) -// ScreenerField is a numeric field conditions test, such as P/E or market cap. type ScreenerField struct { ID, Label string Decimals int } -// ScreenerOp compares a field with a value. The zero value is ScreenerAbove. type ScreenerOp int const ( @@ -39,7 +37,6 @@ type ScreenerCondition struct { Value float64 } -// ScreenerRow is a symbol and its field values by field ID; missing values fail every test. type ScreenerRow struct { Symbol, Name string Values map[string]float64 @@ -86,22 +83,38 @@ type ScreenerOptions struct { // ScreenerView is a built Screener and this frame's events. type ScreenerView struct { - Element *ui.Element - // Changed reports edited conditions; Save asks the caller to store them. + Element *ui.Element Changed, Save bool Table DataTableView } -// Screener builds field, comparison and value conditions and lists the rows that pass them. func Screener(c *ui.Context, s *ScreenerState, fields []ScreenerField, rows []ScreenerRow, opts ScreenerOptions) ScreenerView { if s == nil || len(fields) == 0 { panic("mujica: Screener needs a state and fields") } + seen := map[string]bool{} + for _, f := range fields { + if f.ID == "" || seen[f.ID] || f.Decimals < 0 || f.Decimals > 12 { + panic("mujica: Screener fields need unique IDs and decimals in 0..12") + } + seen[f.ID] = true + } + for _, cd := range s.Conditions { + if cd.Op < ScreenerAbove || cd.Op > ScreenerEqual || math.IsNaN(cd.Value) || math.IsInf(cd.Value, 0) { + panic("mujica: Screener condition is invalid") + } + } k := Tokens(c) u := Density(c).Unit() before := fmt.Sprint(s.Conditions) var v ScreenerView - v.Element = ui.Column(c).Gap(u * 3).MinHeight(0).Disabled(opts.Disabled) + v.Element = ui.Column(c).Gap(u * 3).Grow(1).MinHeight(0).Disabled(opts.Disabled) + opts.Disabled = v.Element.IsDisabled() + if opts.Disabled { + copy := *s + copy.Conditions = slices.Clone(s.Conditions) + s = © + } v.Element.Children(func() { fieldItems := make([]SelectOption[string], len(fields)) for i, f := range fields { @@ -152,7 +165,7 @@ func Screener(c *ui.Context, s *ScreenerState, fields []ScreenerField, rows []Sc Text: func(r ScreenerRow) string { return statisticFormat(r.Values[f.ID], f.Decimals) }}) } v.Table = DataTable(c, &s.Table, matched, DataTableOptions[ScreenerRow, string]{Columns: cols, Key: func(r ScreenerRow) string { return r.Symbol }, - Status: opts.Status, Error: opts.Error, Empty: msg(c, "screener.empty")}) + Version: opts.Version, Status: opts.Status, Error: opts.Error, Empty: msg(c, "screener.empty")}) v.Table.Element.Grow(1) }) v.Changed = fmt.Sprint(s.Conditions) != before @@ -177,7 +190,6 @@ func screenerField(fields []ScreenerField, id string) ScreenerField { panic("mujica: Screener condition on unknown field " + id) } -// screenerFilter keeps passing rows, refiltering only when rows, version or conditions change. func screenerFilter(s *ScreenerState, rows []ScreenerRow, version int) []ScreenerRow { key := fmt.Sprint(chartID(rows), version, s.Conditions) if key != s.cache.key { diff --git a/screener_test.go b/screener_test.go new file mode 100644 index 0000000..cc95661 --- /dev/null +++ b/screener_test.go @@ -0,0 +1,59 @@ +package mujica + +import ( + "github.com/egoist/mygo/ui" + "testing" +) + +func TestScreenerConditionsResultsSave(t *testing.T) { + s := ScreenerState{Conditions: []ScreenerCondition{{Field: "pe", Op: ScreenerBelow, Value: 30}}} + fields := []ScreenerField{{ID: "pe", Label: "P/E", Decimals: 1}} + rows := []ScreenerRow{{Symbol: "AAPL", Values: map[string]float64{"pe": 34}}, {Symbol: "XOM", Values: map[string]float64{"pe": 13}}} + var got ScreenerView + disabled := false + tt := chatTester(800, 500, func(c *ui.Context) { + v := Screener(c, &s, fields, rows, ScreenerOptions{Disabled: disabled}) + v.Element.Height(460) + if v.Changed || v.Save { + got = v + } + }) + if s.Table.Rows() != 1 || !tt.HasText("XOM") { + t.Fatalf("rows %d", s.Table.Rows()) + } + _ = tt.Click("Save conditions") + if !got.Save { + t.Fatal("save missing") + } + _ = tt.Click("Add condition") + if len(s.Conditions) != 2 || !got.Changed { + t.Fatalf("conditions %v", s.Conditions) + } + disabled = true + tt.Frame() + _ = tt.Click("Add condition") + if len(s.Conditions) != 2 { + t.Fatal("disabled added") + } + for op := ScreenerAbove; op <= ScreenerEqual; op++ { + want := []bool{false, true, false, true, true}[op] + if got := ScreenerMatch(ScreenerRow{Values: map[string]float64{"x": 10}}, []ScreenerCondition{{Field: "x", Op: op, Value: 10}}); got != want { + t.Fatalf("op %d %v", op, got) + } + } + if ScreenerMatch(ScreenerRow{}, []ScreenerCondition{{Field: "x", Op: ScreenerAbove, Value: 0}}) { + t.Fatal("missing passed") + } +} +func TestScreenerSnapshot(t *testing.T) { + snapshot(t, "screener", 820, 480, func(c *ui.Context) { + sc := ui.Local(c.Root(), "snapshot.screener", func() ScreenerState { + return ScreenerState{Conditions: []ScreenerCondition{{Field: "pe", Op: ScreenerBelow, Value: 30}}} + }) + ui.Column(c).Padding(16).Gap(12).Fill().Children(func() { + Screener(c, sc, []ScreenerField{{ID: "pe", Label: "P/E", Decimals: 1}, {ID: "cap", Label: "Market cap (B)"}}, + []ScreenerRow{{Symbol: "AAPL", Values: map[string]float64{"pe": 34, "cap": 3000}}, {Symbol: "XOM", Values: map[string]float64{"pe": 13, "cap": 450}}}, ScreenerOptions{}).Element.Height(440) + + }) + }) +} diff --git a/sentiment_gauge.go b/sentiment_gauge.go index 94b34d1..6cc1c23 100644 --- a/sentiment_gauge.go +++ b/sentiment_gauge.go @@ -15,21 +15,23 @@ type SentimentGaugeOptions struct { // Label names the index, such as "Fear & Greed". Label string // Size is the dial width; zero is 240 DIPs. - Size float32 + Size float32 + Status DataStatus + Error string + Empty bool + Retry func() } var sentimentBands = [5]string{"sentiment_gauge.extreme_fear", "sentiment_gauge.fear", "sentiment_gauge.neutral", "sentiment_gauge.greed", "sentiment_gauge.extreme_greed"} -// sentimentBand is the band index of a 0 to 100 value. func sentimentBand(v float64) int { return min(4, int(v/20)) } -// SentimentGauge is a half dial from extreme fear to extreme greed, with the value and its word. func SentimentGauge(c *ui.Context, value float64, opts SentimentGaugeOptions) *ui.Element { if math.IsNaN(value) || value < 0 || value > 100 { panic("mujica: SentimentGauge value must be in 0..100") } - if opts.Size < 0 { + if math.IsNaN(float64(opts.Size)) || math.IsInf(float64(opts.Size), 0) || opts.Size != 0 && opts.Size < 48 { panic("mujica: SentimentGauge Size is negative") } w := opts.Size @@ -38,22 +40,48 @@ func SentimentGauge(c *ui.Context, value float64, opts SentimentGaugeOptions) *u } k := Tokens(c) u := Density(c).Unit() + dialHeight := max(w/2+8, u*30) band := sentimentBand(value) word := msg(c, sentimentBands[band]) label := fmt.Sprintf("%.0f, %s", value, word) + if opts.Status == DataLoading || opts.Status == DataLoadingMore || opts.Status == DataUnloaded { + label = msg(c, "list.loading") + } else if opts.Status == DataFailed { + label = dataError(c, opts.Error) + } else if opts.Empty { + label = msg(c, "chart.empty") + } if opts.Label != "" { label = opts.Label + ": " + label } - // Fear to greed runs from the fall color to the rise color. - fear, greed := trendColor(c, -1), trendColor(c, 1) - cols := [5]ui.Color{fear, fear.Mix(k.Surface, 0.45), k.TextMuted, greed.Mix(k.Surface, 0.45), greed} + pal := internal.Palette(k) + cols := [5]ui.Color{pal[0], pal[3], pal[5], pal[1], pal[2]} size := FontSize(c, theme.CaptionSize) - col := ui.Column(c).Gap(u).AlignItems(ui.Center).Role(ui.RoleMeter).Label(label) + col := ui.Column(c).Gap(u).AlignItems(ui.Center).Role(ui.RoleMeter).Label(label).Focusable() + internal.Ring(col, k.Focus, theme.ControlRadius) + if !col.IsDisabled() { + for _, key := range []ui.Key{ui.KeyLeft, ui.KeyRight, ui.KeyUp, ui.KeyDown, ui.KeyHome, ui.KeyEnd} { + if col.Shortcut(0, key) { + c.Announce(label) + } + } + } col.Children(func() { if opts.Label != "" { ui.Text(c, opts.Label).Font(theme.SerifFont).TextColor(k.TextMuted) } - ui.Box(c).Size(w, w/2+8).Draw(func(p *ui.Painter, r ui.Rect) { + if opts.Status != DataReady || opts.Empty { + ui.Box(c).Size(w, dialHeight).Children(func() { + ui.Column(c).Fill().Children(func() { + if dataPlaceholder(c, opts.Status, opts.Error, "", msg(c, "chart.empty")) && opts.Retry != nil { + opts.Retry() + } + }) + }) + ui.Box(c).Height(FontSize(c, theme.H1Size)*theme.LineHeight + u + FontSize(c, theme.BodySize)*theme.LineHeight) + return + } + ui.Box(c).Size(w, dialHeight).Draw(func(p *ui.Painter, r ui.Rect) { cx, cy := r.X+r.W/2, r.Y+r.W/2 outer, inner := r.W/2-2, r.W/2-18 for i := range 5 { @@ -70,7 +98,7 @@ func SentimentGauge(c *ui.Context, value float64, opts SentimentGaugeOptions) *u chartText(p, "100", r.X+r.W-2, cy+4, size, k.TextMuted, 1, 0) }) ui.Text(c, fmt.Sprintf("%.0f", value)).Font(theme.SerifFont).FontSize(FontSize(c, theme.H1Size)).TextColor(k.Text).FontFeatures("tnum") - ui.Text(c, word).FontWeight(600).TextColor(cols[band].Mix(k.Text, 0.25)) + ui.Text(c, word).FontWeight(600).TextColor(k.Text) }) return col } diff --git a/sentiment_gauge_test.go b/sentiment_gauge_test.go new file mode 100644 index 0000000..d2466be --- /dev/null +++ b/sentiment_gauge_test.go @@ -0,0 +1,62 @@ +package mujica + +import ( + "github.com/egoist/mygo/ui" + "testing" +) + +func TestSentimentGaugeBandsAndBoundary(t *testing.T) { + for i, value := range []float64{0, 20, 40, 60, 80, 100} { + tt := chatTester(400, 300, func(c *ui.Context) { SentimentGauge(c, value, SentimentGaugeOptions{Label: "Sentiment"}) }) + words := []string{"Extreme fear", "Fear", "Neutral", "Greed", "Extreme greed", "Extreme greed"} + if !tt.HasText(words[i]) { + t.Fatalf("value %v texts %q", value, tt.Texts()) + } + } + marketsPanic(t, func(c *ui.Context) { SentimentGauge(c, 101, SentimentGaugeOptions{}) }) +} +func TestSentimentGaugeSnapshot(t *testing.T) { + + snapshot(t, "sentiment_gauge", 320, 280, func(c *ui.Context) { + ui.Column(c).Padding(16).Gap(12).Fill().Children(func() { + SentimentGauge(c, 72, SentimentGaugeOptions{Label: "Fear & Greed"}) + }) + }) +} + +func TestSentimentGaugeKeyboardReadout(t *testing.T) { + tt := chatTester(400, 300, func(c *ui.Context) { SentimentGauge(c, 72, SentimentGaugeOptions{Label: "Sentiment"}) }) + tt.Key(0, ui.KeyTab) + tt.Key(0, ui.KeyRight) + if len(tt.Announcements()) == 0 { + t.Fatal("missing keyboard readout") + } +} + +func TestSentimentGaugeStatesKeepSize(t *testing.T) { + status := DataReady + empty := false + retried := 0 + var element *ui.Element + tt := chatTester(400, 300, func(c *ui.Context) { + element = SentimentGauge(c, 72, SentimentGaugeOptions{Label: "Sentiment", Status: status, Empty: empty, Error: "Caller failed", Retry: func() { retried++ }}) + }) + height := element.Bounds().H + status = DataLoading + tt.Frame() + if element.Bounds().H != height { + t.Fatalf("loading height %v, ready %v", element.Bounds().H, height) + } + status = DataFailed + tt.Frame() + _ = tt.Click("Retry") + if retried != 1 { + t.Fatalf("retries %d", retried) + } + status = DataReady + empty = true + tt.Frame() + if !tt.HasText("No data") || element.Bounds().H != height { + t.Fatalf("empty height %v, ready %v", element.Bounds().H, height) + } +} diff --git a/symbol_badge.go b/symbol_badge.go index 4aaa8c0..fd46479 100644 --- a/symbol_badge.go +++ b/symbol_badge.go @@ -15,8 +15,7 @@ type MarketSymbol struct { Code, Name string // Market is the venue, such as NASDAQ or SSE. Market string - // Type is the asset kind, such as Stock, ETF or Option. - Type string + Type string } // SymbolBadgeOptions configure a SymbolBadge. diff --git a/symbol_badge_test.go b/symbol_badge_test.go new file mode 100644 index 0000000..1a8ae62 --- /dev/null +++ b/symbol_badge_test.go @@ -0,0 +1,41 @@ +package mujica + +import ( + "github.com/egoist/mygo/ui" + "testing" +) + +func TestSymbolBadgeClickKeysAndDisabled(t *testing.T) { + disabled := false + count := 0 + tt := chatTester(500, 150, func(c *ui.Context) { + if SymbolBadge(c, MarketSymbol{Code: "AAPL", Name: "Apple", Market: "NASDAQ", Type: "Stock"}, SymbolBadgeOptions{Clickable: true, Disabled: disabled}).Changed() { + count++ + } + }) + _ = tt.Click("AAPL") + tt.Key(0, ui.KeyEnter) + if count != 2 { + t.Fatalf("clicks %d", count) + } + disabled = true + tt.Frame() + _ = tt.Click("AAPL") + tt.Key(0, ui.KeyEnter) + if count != 2 { + t.Fatal("disabled activated") + } + marketsPanic(t, func(c *ui.Context) { SymbolBadge(c, MarketSymbol{}, SymbolBadgeOptions{}) }) +} +func TestSymbolBadgeSnapshot(t *testing.T) { + + snapshot(t, "symbol_badge", 420, 100, func(c *ui.Context) { + ui.Column(c).Padding(16).Gap(12).Fill().Children(func() { + ui.Row(c).Gap(8).Children(func() { + SymbolBadge(c, MarketSymbol{Code: "AAPL", Market: "NASDAQ", Type: "Stock"}, SymbolBadgeOptions{Clickable: true}) + SymbolBadge(c, MarketSymbol{Code: "600519", Market: "SSE"}, SymbolBadgeOptions{}) + }) + + }) + }) +} diff --git a/symbol_search.go b/symbol_search.go index b65c69e..2a3a2c5 100644 --- a/symbol_search.go +++ b/symbol_search.go @@ -10,10 +10,10 @@ import ( "mujicaui/theme" ) -// SymbolSearchState is the query and the market filter, empty for all markets. type SymbolSearchState struct { Query, Market string focusFirst bool + cursor int } // SymbolSearchOptions configure a SymbolSearch. @@ -31,7 +31,6 @@ type SymbolSearchOptions struct { // SymbolSearchView is a built SymbolSearch and this frame's events. type SymbolSearchView struct { Element *ui.Element - // Changed asks the caller to search again for State.Query and State.Market. Changed bool // Chosen is the symbol picked when Picked is set. Chosen MarketSymbol @@ -39,7 +38,6 @@ type SymbolSearchView struct { Retry bool } -// SymbolSearch finds symbols by code or name, filtered by market, with recent picks; the caller supplies results. func SymbolSearch(c *ui.Context, s *SymbolSearchState, results []MarketSymbol, opts SymbolSearchOptions) SymbolSearchView { if s == nil { panic("mujica: SymbolSearch needs a state") @@ -48,6 +46,11 @@ func SymbolSearch(c *ui.Context, s *SymbolSearchState, results []MarketSymbol, o u := Density(c).Unit() var v SymbolSearchView v.Element = ui.Column(c).Gap(u * 2).Disabled(opts.Disabled) + opts.Disabled = v.Element.IsDisabled() + if opts.Disabled { + copy := *s + s = © + } v.Element.Children(func() { ui.Row(c).Gap(u * 2).AlignItems(ui.Center).Children(func() { in := SearchInput(c, &s.Query, SearchInputOptions{Placeholder: msg(c, "symbol_search.placeholder"), Disabled: opts.Disabled}) @@ -75,11 +78,11 @@ func SymbolSearch(c *ui.Context, s *SymbolSearchState, results []MarketSymbol, o v.Retry = Button(c, msg(c, "symbol_search.retry"), ButtonOptions{Variant: Secondary}).Clicked() }) return - case s.Query == "": - list, title = opts.Recent, msg(c, "symbol_search.recent") case opts.Loading && len(results) == 0: Spinner(c, SpinnerOptions{Label: msg(c, "symbol_search.searching"), ShowLabel: true}) return + case s.Query == "": + list, title = opts.Recent, msg(c, "symbol_search.recent") case len(results) == 0: ui.Text(c, msg(c, "symbol_search.no_results")).TextColor(k.TextMuted).Role(ui.RoleStatus) return @@ -87,15 +90,30 @@ func SymbolSearch(c *ui.Context, s *SymbolSearchState, results []MarketSymbol, o if title != "" && len(list) > 0 { ui.Text(c, title).Font(theme.SerifFont).FontSize(FontSize(c, theme.CaptionSize)).TextColor(k.TextMuted) } - ui.Scroll(c).MaxHeight(320).Children(func() { - ui.Column(c).Gap(2).FocusGroup(ui.Vertical).Role(ui.RoleList).Children(func() { - for i, sym := range list { - if symbolSearchRow(c, sym, i == 0 && s.focusFirst) { - v.Chosen, v.Picked = sym, true - } - } - }) - }) + rows := ui.Local(v.Element, "mujica.symbol.rows", func() ui.ListState { return ui.ListState{} }) + rows.Key = func(i int) any { return list[i].Market + ":" + list[i].Code } + rows.Label = func(i int) string { return symbolBadgeName(list[i]) } + rows.Selected = &s.cursor + if s.focusFirst { + s.cursor = 0 + rows.ScrollTo(0, ui.Start) + } + restore := dataSelectTheme(c, 0) + resultList := ui.List(c, rows, len(list), func(i int) { + if symbolSearchRow(c, list[i], i == s.cursor) { + s.cursor = i + v.Chosen, v.Picked = list[i], true + } + }).Height(320).MaxHeight(320) + restore() + internal.Ring(resultList, k.Focus, theme.ControlRadius) + if s.focusFirst || v.Picked { + resultList.Focus() + } + if !resultList.IsDisabled() && resultList.Submitted() && s.cursor >= 0 && s.cursor < len(list) { + v.Chosen, v.Picked = list[s.cursor], true + } + s.focusFirst = false }) if v.Element.IsDisabled() { @@ -107,21 +125,22 @@ func SymbolSearch(c *ui.Context, s *SymbolSearchState, results []MarketSymbol, o return v } -func symbolSearchRow(c *ui.Context, sym MarketSymbol, focus bool) bool { +func symbolSearchRow(c *ui.Context, sym MarketSymbol, selected bool) bool { k := Tokens(c) d := Density(c) b := ui.ButtonBase(c).Key(sym.Market+":"+sym.Code).MinHeight(d.ControlHeight()).Padding(0, d.Unit()*2).Gap(d.Unit() * 3). Justify(ui.Start).Radius(theme.ControlRadius).Label(symbolBadgeName(sym)).Role(ui.RoleListItem) internal.Ring(b, k.Focus, theme.ControlRadius) - if focus { - b.Focus() - } + if b.Hovered() { b.Background(k.SurfaceHover) } b.Children(func() { ui.Text(c, sym.Code).Font(theme.MonoFont).FontWeight(700).Width(80).SingleLine() ui.Text(c, sym.Name).SingleLine().Grow(1).MinWidth(0).TextColor(k.Text) + if selected { + ui.Icon(c, icons.Must("check")).Size(14, 14).TextColor(k.AccentText) + } if sym.Market != "" { ui.Text(c, sym.Market).FontSize(FontSize(c, theme.CaptionSize)).TextColor(k.TextMuted) } diff --git a/symbol_search_test.go b/symbol_search_test.go new file mode 100644 index 0000000..014a01e --- /dev/null +++ b/symbol_search_test.go @@ -0,0 +1,82 @@ +package mujica + +import ( + "github.com/egoist/mygo/ui" + "testing" +) + +func TestSymbolSearchResultsAndAsync(t *testing.T) { + s := SymbolSearchState{} + rows := []MarketSymbol{{Code: "AAPL", Name: "Apple", Market: "NASDAQ"}} + var got SymbolSearchView + opts := SymbolSearchOptions{Markets: []string{"NASDAQ", "NYSE"}, Recent: rows} + tt := chatTester(640, 450, func(c *ui.Context) { + v := SymbolSearch(c, &s, rows, opts) + if v.Picked || v.Changed || v.Retry { + got = v + } + }) + if !tt.HasText("Recent") { + t.Fatal("recent missing") + } + _ = tt.Click("AAPL") + if !got.Picked || got.Chosen.Code != "AAPL" { + t.Fatalf("pick %+v", got) + } + tt.Key(0, ui.KeyTab) + s.Query = "apple" + opts.Loading = true + rows = nil + tt.Frame() + if !tt.HasText("Searching") { + t.Fatal("loading missing") + } + opts.Loading = false + opts.Error = "Caller failed" + tt.Frame() + _ = tt.Click("Retry") + if !got.Retry { + t.Fatal("retry missing") + } + opts.Error = "" + tt.Frame() + if !tt.HasText("No symbols match") { + t.Fatal("empty missing") + } + opts.Disabled = true + rows = []MarketSymbol{{Code: "AAPL"}} + got = SymbolSearchView{} + tt.Frame() + _ = tt.Click("AAPL") + if got.Picked { + t.Fatal("disabled pick") + } +} +func TestSymbolSearchSnapshot(t *testing.T) { + var ss SymbolSearchState + snapshot(t, "symbol_search", 520, 300, func(c *ui.Context) { + ui.Column(c).Padding(16).Gap(12).Fill().Children(func() { + SymbolSearch(c, &ss, nil, SymbolSearchOptions{Markets: []string{"NASDAQ", "NYSE"}, Recent: []MarketSymbol{{Code: "AAPL", Name: "Apple", Market: "NASDAQ"}}}) + + }) + }) +} + +func TestSymbolSearchArrowNavigation(t *testing.T) { + s := SymbolSearchState{Query: "tech"} + rows := []MarketSymbol{{Code: "AAPL", Name: "Apple"}, {Code: "MSFT", Name: "Microsoft"}} + var chosen string + tt := chatTester(640, 450, func(c *ui.Context) { + r := SymbolSearch(c, &s, rows, SymbolSearchOptions{}) + if r.Picked { + chosen = r.Chosen.Code + } + }) + tt.Key(0, ui.KeyTab) + tt.Key(0, ui.KeyDown) + tt.Key(0, ui.KeyDown) + tt.Key(0, ui.KeyEnter) + if chosen != "MSFT" { + t.Fatalf("chosen %q", chosen) + } +} diff --git a/testdata/snapshots/darwin/asset_allocation_chart-dark.png b/testdata/snapshots/darwin/asset_allocation_chart-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..12cd420cc3e8e46583563b1de4c9b570939d1371 GIT binary patch literal 48248 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�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 RU-kPl--^kKR>1Up{}0mL$NB&O literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/asset_allocation_chart-light.png b/testdata/snapshots/darwin/asset_allocation_chart-light.png new file mode 100644 index 0000000000000000000000000000000000000000..3246d3d1051041ed29f124407795a7541517ea44 GIT binary patch literal 47161 zcmeFZbx>sAvNc#ZjW>p;|AF{|2Du}RWNwy?W>Ai$DjHPT4ZMp> z-QrCg=VfKfPW2?d=P6KwhYS=VL4)6~#v$Z`nua(AxBz$ngaIf*a5?|~pZ_1MktvAp z5`6GiU5j47O|Y^~U8xbCsdoi;qJECSmXVPm*?rWJToiw%j}>flZn?W$3$bFOzC+}e zt0&rVCX;VCO>Rvs09^6awN-cj4)5EC30bT!q`%)(oC1sT`BK;`QnohcAf2iQ?pzRygtc zaOv#mYN%6(jD+0a_6G4^?s3!_8mr4#jir8ed@6}wSaev_^7e;zoW8-m2JV=T$i;$+ z4K|Uq49hY{g|@`T(#|reaTfP3_5npJYCP6BY^jsl9<*mmn7PBB1w6YL<4W3LUJyYP zZ1|{u15bLPKmhH6d7*Dl3^n*yeEerSVoM4msmTL^3z0CA@Wy!Sm1G;sL^eTA&{bgH z*_N(7|0G`XmcLuSs}WDo$LXoYXW zy*o~5!ufGhg9sZMh~@rjB$%u@F0c>%) zj%*KW7iEYKr%b|3iWow##?-5Kuc1yHG4Ojab$54X?#B6iY}u!(p^?J!tApONY0vh8 z%MAme@WgB`Zbq<(Kw-z=fb|bjGA;e1ligx##rpaB-lrj`BWRS>6hXJ{V1tCTjMdG> ztn|#Y^IaPgo4epgzvB#k-^H<|DAUnA)?-FH#$6sqTe-^iFmDO(A&vHKbr>_xH*vVZVedDgO@m1aW#U? zF_X*2cDW&S&M)${v^LlAp<_jTQC+1-K?}VN+MmzF!*QD@+-iQ$vMg9_?_yBFAze{R zDFO|BA)F1V5?#HJqVNgsIjjolEB)8G4)oLW^YhC~_3jI4NxS%_tHtY%w+==V{T5cN z0(n()GrK{ZskwzYIo^12s>Hs8=D)g zKX}f$AJXdg&QH$?wP!37?$6LlI(ldL$5Ci>Ul}vmJZJl{=a-WFe}NV<$^)GtfgMt`-TIR{ zLtxj}h|`UqmpP?4g$>4$6`x)w37$r(#s%+ENs5Hl5N_e&`SJPXWzDrrf+wc8N{5(F zG#I0W6*723nk$-?S=z`8Dc{=_Saah?Oc0x3KF()8WlGs6HI}K;vHcnt!vgP=^>8F) zWI0(`8k0yfL5cS#D3?&U%ySTh9^dbPlwZfvwcwX~|4r%{k&}k|j_^Ym@kRU?=KK45 zRh4`;@Hu>fgNX?{Ss$Ch)00&HEZ&Km7kJcgM;_MQ8&aGg_d0id&acHjl*#Fiu8&8N zSPW}9SaEWuLe;``@#IinS&3{%;D$mFeSM!=yPHI*ttda9+91&otEmg>joqN6G^I<5 zv=d(Iy2$JiB3^&GI^QC`00Q5oE#MjXMpUn+4zgoR~O0Z`5bD{0}dmlBc<@9EUDvDM{CQg9?xD8XZ_$9&zhU=@#66U z{Z#XH1)?4beGff?>+i&d?appUc<{c{Gb-oMF)(QhX9sT_=9J)4g!`&AP%~{?1Nj zX2+fQboqDmDI*rxt!)K-KY^`*iGhsDuGRuY8nF;DL@cInEF9YSt?Hy27?@b^8E>p> zkr&&?-^@QUdbk4@{+|BcqwOww$E#xq&Qtj0&-xZ8!t_aWT_X^Q9wioqd*w7G$VTR# zRk-TQqwXO0eI=;J*goyk1a*(O-<40t3y_(Ojjaf8X>s0)h+A`pvH{q?PxXu4DM0G;}m|4Nd(a5~CJ`{y6!p9n3tQ5-P;` zpGYZ^IOs8&-+cI8U0h03_xvx{2X*e7=ZdF%JApq!YP>Ex4%qW}f)$OFPZLb7-`;}q zn=XHkVK&=Ohp2sy2TtClVYiWW)YL%x7kF9O12qS{ZzW|3glPnJ`a589vo;a)nl4po zFpe+p8;Fd{m}58=7Z$ildfHoCO>;t_G1YcHr}K3lReRbRfB#;4STmm4%=a=}+oMHF z|CemaT(9jtsK2|(X#t;=&tSFbJ#lk$b1fZ_P9s=MKAoA0ex-^4#(euh9 zGa~~swc@^Bp-D$u``5^Rp-hm*t?<|=J(_S*5_`vjyA(Y&^U z+%vvTY#VP-;>U;I+X^|dAboA6R)rtx0>hy>~>FK4*Z3ph> z)@S5##&&FiYtOF>P9mfP&vE z0wQ4sB0p@yA%C)c7xF^*l?CFIrGhlladmXxYJC=91$L%#;r`)X_rC0`W8tjc`W@?k zqua*s>*@I%`VvY+D?hh7J8D)N6&0yKz^$aE#J%qOWR6vQvH~PV&txL!DPcU4DFy(% zym-XLU4W(^AYR8q*8zN2*9AY{Nr^%dxOsN?Lb>o z(`ps@Lc{EJR*&mElGl&?K8b{cgem#-$bK$uoi!gH$cDz!2!Fe#IyRkJmXfYqB@&Fq z`T4{Bj%9RWLqj|Cc1MZVz4`%nHJVKMwM-ldszf6G(eK3B_1F5}quT1^grJ^DXkVAiWC7?^{)Dq~|GzJHH5s(lhkIh-xD-jq2C zgMKwL+iY{VrgJN(hAd9<1kL){Ag*^eWY3NEHwlENFd1-jb(E|B9NG(l(m-*vd?M?)Em%41Vj9J~C5h@=gCPquu67d%8`Vh?Sqd@cr0*!^`k-L+%tj;psyK%@inh_SV++=`CNGhnbF_ z>yPC7GHTw@oL$`sS^ba_dsUYdCB(S(0{Tp>SXfvDk>5{rM_b2EHYE1D5gh;x{sLlw zyKLhp)0-ls%0)bi2ABM-L)ge_~u;2xhUiYH5g=gd==CMU!div1!XT(` zNAu!5Yitkqo<&xm7W;LaNM!f25BeuVP_MG$FAb}>jYDjVIvs7{pYJB7rj?Zw_UkRT zPuHyY_=tc2;HVf|T31z-+i2;07mN_voLH|*k$wNLA-M=aQ&G;eu!9UPGfGMnx6g{G38xS|-J$a7-4^5UEE=eZ6 zK%u{>&qstB)|bnIxbJDR>Mb{%W`F$a6%{W+HZs~9dsInPIeHU4#+H;R&XFj8Fm~6e zbrzi=$_J|vgji+JDxa(Pk6Z0sqg)Dv3%JAap!{C^!+dIs(L$>D0=0d)6H9mx?3qoH zscr5t&Io(8aF5p%r9huy>&#^oQR=;ym@HhIqehR2N@2o62m!m%@}@sr-fn(Pb7oFn z+3ayTzM#!~Vbs)M&`g-dIR^0Q=HbR|mh;zvJM-Q;Feh zY}L4AJEy3Tn3QB|ZB5Tq{j2JCe0)4Y>QdFU=hgQ0x0LJI;iaYJjL$^Qq5g{DtmZ94 z5+*z^UOY)jYI?9rGBVwKc7GYxAgbny$fdB1;*UjALZy>b%jXvJZam)PC7xxDIn*g* zOnmzrO7M`8W6(jZL77288*9z3rU#f4NM~YDskjrJo~2X~*JMx86FQQSpf4QUnfp(;y~D$oa_`Xlz7!Lb2QsPrYB^ z9WHvBKJ13kO(H~%9-WE#Q|uH#*-t7<^;?1zJlQfX=lnxP_T4`a0E)`mey42c@_+ZP z!BI~pWt@qrTIkDd!6^eFVdd(omlR1w6H45WwYAdyor~4xqM?kCoZMGB_-|}%;SnfO z%dG}wt6FtWkNBxa9JadIuYCTm5B$qS{L!Q$1OrBnmMhkTdKara5t?ujcMFRr4c5Y2 zoL_Cr?!1MhBNwFQ{jYw!&fg9xCp=nPSyfyie|YJwg|$o$X`x8d-y-U>v$GpRZC}L~ zL`RP&Cole*{$r^^z25H3%zux=@yw~0wsz!(5b}mYsFI8+gqYmt6Y*AOZ-Ja4vnP z^=`XW=uGQXJ5R*@cyFH_X3YzZx|)`lsZfLrz3(q)aiIZLglJ`@ttEC<&Lj?|X<=j} zC%B{m0K8v6j#QX1F)$h%8Ytd8dqziP!f&hh~HCaB)ZPmwhHIgmB2;IEo%yS~4e$SaHTRs-^du&mjStnt!yl(i$5Z z3Aq!-53XltnNogtT`pC>LYv7TvbxF8x7~=&;?BGOJ-YQz@1(eWu{AbsyG0war`-0> zKJ!U9000OGZ0_$}A%Bw5(Uk`a8(L|Lza@))?Pu;2nXSKf{RF)t5|&7@Q_y`dtD16% zB`|SrmdC%=(Z<$1r)WN&&bueRxBs~;6TeR*LerQCSv(M?bWqAU{# zt~dn>KyaimU(5VF`!f)XGjd7&;+1rkDz|7b5Kcm2@r~oBlk)RBm6-Z=?7k$*pX2WB zJe;bXyoJz%0RaPpET^p~77abU?Pdch8JV5LUjY~xX~~-GvN8lW)tdDodg>!Fp&z0? zx_`>b>RwAqDbVBPiz{_WBNF^#2EMxWZMywTJ}r)lWxCQ{xjdrA!JTOyl*rj>lB+!< z&)?l^I?q#P|J%1Xi*#3J&9gvZ<8HkRUcEk!r=fnkEdr4FmVkOmY?u&9G!Z}FHyX&W zzAq8MJ&gwI=Z7L3=D|bl6*p5qxGnw|Tl)n23oW-?*E?`!WDsz(Ems=|7A&qaOwkIA zL0x;i;h>H*FI87B3^7e`Iv$khD z<84OgzNkVJ=$)lyxx-_nu7~H4fdI_v9BVFust%u}aE7RX4-i6bv2C!5_rECim9YBFMf)a#_Bq@v2^+1ZOHVc;Z>;nw76NH%?oT?!tLc5hxTqzmA3SZc(XtrgOdr!6M_a zS!_*RT_q#gkNmIUEq^_MbS6*~4xLcah2;P3%`+1^VZ7uW8PL>MWbf5kO^uxiF{+TT zNzf!jY+!biLD{%=+155gUgW}SRDtN?Ol}!>RskbwVEGR;@yMNSo-MuIf$@fTn2E3E6~GbQK_!>X)?)~0qJ&5v5b!(p zuyicdWLR8S$~@&(lff?yP}5WEG#?@&iZfprvU;(fD=eTR707M21lsWy|A(FbWpI9R z7ciJ65=dxR9~xUQmDJJ_Q`bbx~5Ljuf((we&>vR@VreS!#c){VpVcp{3cUcSB*pQA8*2m1woW|mr(bdHW_%T}G*lcIo?Wywhf;y;+QMW@pcNh+~ zqG#{=<)w|?-n!XF>h4x=eR;Y6=(e(QoPB=b^bCKdN;#q(^%mxDq0FI-J4k-es1^V? zOg{YmIO_(h;bVIX4bA6CiR4>dzTIs_$>MW~@$sG? ze4wkHf*?3|v1E0>Xy0v~@oCcFh}7(R%p%j-kStWENbXF;ngmZI(RKHp&eg7OIUtV6BZ>0p|^ZjPV#2nk)H%*|4 z6N6lYndLtR5RTD)vTw7>Fr8^w$QTL37zd{#dmHFf|CBQcT58)TN_e(o_kV@zA|c-OIo z#y}-Qfxgk|I#iS$6I(Tz6s0kl&BK&A>L0%~YS&0?66Z3%;$CoU`nf3^8oaqh$!d+i zD4MF7swSQ99xAJ9HgG%DZwT>zC9I6TL(KC^*FG-*EyaEBqIFJ;aQ1~ zC*hK(ZMFT&o{5Qx8HnRPPRws8E<3@^;JfD7*{E9iQfnJhs=$SY%{d_r!tX^CPc_?0 zTL1tik`MhNjnD2J$Grn7OO(QHy&;G}LcirlvcHgrr6o5}nD-qQwVyLi(-tSJSfCN- z^kqs!cTVM`nyMNLlX)x=XPOYn@yXfDaRX^zC;*TV%6+k3$NK8l6p{L=iQb5U<&zw8 zqF0%RE>VQ6Ff@M}ULZasw=Ds;XX|Xj>^bj>j5_1U*n|vsypfHO5AcD1tFa3>G?pU) z=jHOBLopm5k5`+di`mr=?|C(FEtQc0i`n5rDK}{L?T<{y`~AHOI19S1$;XP%RiA7R z3h4l6YPe!E2vS8U1bluwvrw{=F#y8)OieeCb%4a5i9Bu(JAo;2wl+q5mM;{)4@d~( zE5Cw)hny=i;K%ZnAuA5=;RC=39Gt>R zsDq}Cs_&3tjjm%aW=x!l2c4DA#EK8FF{ILG^xNHJ^z_uEq&}y^f#Dx%?o1T+1Up9& zID$F0>dKYDCY6EnT$jP!soUbk2Ctj3PEKj=CqPb75iDT2+ZuFVzEq1ly}V2_F`ke{ zrS>JPkKg}6Hvv7{fMy%9L|fH{$g?n8K|@g$=adCwM9jP%Gbvt0U0un}(Df_TyoyDc zZ|8=)=3ly{qBaDZ^B^>Y=kvoh#-J_K3$?H(J^f`94fv;y)yNd1+LAdMB)#5g%zuW3 zM?}4iHSbe5BbFwZ(Yov;Q$gpOv|TQLGLA)laEN+3HfSViW;xdOIA-woxzs5M=PV z-J@=Wuukb__wVU=k#4j!cLMumFiyaUjhn%zJ{!2ZegtEAk^;5F zI20SReAtqihIiUMk@i#cHw^}uS%O0)8XFy@qo*$|p)oG+Vn#X%wKSh)%;?_UKcAmp z{_Vyw(K8K*p|L!(+G=qUQBj$zNip2K?Z_D72G_H~_2Ul|=eS%JIeiK!(xcK3u@6g3 z21^B22_yS=wB%e-PB|1Uqx_pLyN>u%4Y@MUsbzH-5i~J)$hMm zQ4Xx4W>aECu_SWJ>((LTUm|eif6VUOt5I^3k?@#4 zX1khjE3eDTF4i*V^4|5rwgrOIF-N;8@X~{v+{;kOQFff8dm$I@fwXzM^EDQQkmafR zGhujjZ;OGrn!39E`fs!^?U`U0O1RgwK7{CdmCft_34liQIjj9i*_z-BQhEuYACY=3FiJTP(8vGF0RdR7coocSur* zl0CVNp+er%%7nW5p3oz=BuwCND&>?tz80@xBCzMEDRbq7yf}wr3>2QwCag6lH(R@i3_u14<;8^9IS*`SCX*8wDYSl}hbU9P z%qiJOwZd5>S)1Btg&a2EWz=~?x46rXN2ldZ0yicQ(2Yp~Qf*}euIxDIMRt=2zAY0< zhz0|NVE?kw;o&b#f`q)9nw*l-$S=~M!Pr|c=AcZJ8Xc7elbra+XGO&Z+`d$m$7-dm zT0n5I+R`E^idkq{?S8oqI(Cfx`Sa)4lsuSF92*`M9kQ7iqv!LXfdDvw(_2JAz0&8v z!NJZv=ZQ$+u8ypC-p`k&&tF#FJG*PmEQDp zFlKBIqV|bZ@Yq_G0)1g&k(Q2bRHaSed#kRUu`jt=`sy_UPgxwL0b;ut4F(-8y&)8F zuqMNy0~g_!MlUpBQjo)wOG;@uz7<;UFT5nTch$G^fIW}YD!<6xbsb!Z#VH;4GzKQ_ zp$whkOLGEEoUCMDN8<8UxBk0E$pE13$_aF~mUY}Hy5v#<2iDQ1s^TKSF~{1t9dx=9 zs9WxqfsilDEYl?&*J2iEe!dKJ*i-dUxj6e2wObn~Z(+=Nft>kmxo>RpKo3)59z{%+ z^IM~H>N)j26m6MROjbQay2SbY7@WojHowhoZ+(->UzfRN|A82UE-dNJtU8ft5~JdXWm?V#G)RwpNeu01;9 z9wF7#Fm=`h1U3=pRn_b^JFqd(3k${WZ}nuAaw;CSuAZ2ME7Net!F=@qr71Y#JGg5)6hpz!|gzyp#gIzD|FoipF$pf_Sk3PS!&M)R4F0}_KM$OC81 zSkc@!;~D}$&m8_pnRaOCAyjLntQ~!#-APGa?&F;q0tX1iH7P_D%9(cT`}~2~12`ja zxYc(>T#QMiD4mR#XE2x|^Cx5&EuK``8yv-C65HO+Jw@l^pO!}skU^B6T&&%6)FS2y zZY|AzeqpJH7KOhCB{`yf&*Z`#DXDru^(o*@G2tuoV93%WQoT}uOSATagsR5Qv50`vZn$ejU z_lmoANM|u6h>&z~e&ybodUp{?Yv;|g=knWa$ka1vKQrnl}ASUcV#gV`*vr$@!c4@ov+V`+$qrK)kZL zEQeY}klKVkW0d#}cJHlRLHUgs>w&yI{Kub|g~&4PWvm-zRWZL-9AveZ!FNfMkjTFh zE>YhHTAM3iW4`l*@V6dvuxhSNE3Zx8sL88)`Zbk)y`ewkv5l$oS~5z=hEi9No4jBZ zRL~}sA#qC+DzXZJ%*q?(MQ+JMXw0dyjwG-O;>XHUl^W}L6J7sVmOzk}+SwMXB$*M!r{9OyM# z0|Fw8zH9k$G=<>g6B(kHsX_(xrLM-%__-yP*=y@uJN?b$lBcgvT5#c*!PY@kWuw>+ z&6{U;Mg}f(upvNw;0>~0}3caLB8uK zP>qZa@Ug?^c@pr_LV>-QWVG_;-FJ3_f1=j(ta)seOE7n8{8ptxYYx zUgw@8&u;?zh=z`i!o{?j5(Cz)2cIPj#(uRjdi>Z9sgn{>_OxL~J~NK24C37Ud^ByM zA2X|n&qfw2b!sY}L5m0b``@H@xLA;Y{UHkwm?Z;=tUaaet9D(Uf$#j2@&wZJkqJQ3 zzZv-i2cT<+!ljJk_9>q3gN{f2^gu2~!3JRp6whZU&g3L9tVqCiuW1a&{ez-7cbeo! zQj*&y+H-^@(B;MCJ00ELnC*|PB>*wy3xF@-_X<;!DR9|~TLG*Mu_c?U6(uP=ay__O3rqPjvbz%=&)8`ed z)s6O;!jaR7`y|_QGdVru2u7VAU>*8@mp4aWhzR!;`kueI+Q@zYE$GSwiqd8-_=o&5 zz^rI=G?LD8WiP3cAAQOlOJ36N-}Y-=#n_oe`9YG<;6|0YdSU_Jm-W$6n|aA4a0pve zHv>~uEp8W!o#$a-TqTJPL>mgud|i67*X*#c)AJRPw1~c)?oC`xOugpfOO=gXYcO0z zs?OOSermZ|aZaJ5rK>{JlcP!m%bv5y_q^}+V0*?KZwx)}EaW@N5VpzxfS|JcCUe6@ zjW+Z(y3>Q^&SKmqUXrA`G&HJFT|SAhfv}5g}Wjn3V}~Nejx4oU*F5%L$xdl!AJRZdIDRx2Cu(tj=CY_DHga zaKHIr9k<~1-T&sog^U+1GRa&KS6ZBAzl?(2*4B!FL1jgnfE%SPaa(~YO6j|E`lF9B zH`cDe1fmhRF6!tovK4BXFEzHct!1XdSXf_gfAq)aq{hHb$>jDOE=k#$6hzJ7Nz&e$ zE~%8u5ucvT73X5|xGH%AiN&=UFZ+CM&HTNH2_ykr1Z*QYe2t{wos`T1hXPNr# z4|WB7D}_ajrN{L59JrjF6Tx>~}SRae-6TeLGim!BcXX zW1Y^)6D4QLVOQhX^x8PcS=K0lla*qV=ejehuU>Y;QojKk?KMXuF%P=Cn*EK zcK^ui4ZddYq}yOq_qoR_Pg}gULGq&Ng_97~{oSTomB*KE+DTk6rg6OUu|fTJbjk#Z zyHEtWVZBbITlxCxg*85MbR@5W7tn z?|$csYd_?T1})r4nACs)%NY61fu#Vhwi%UuZI^Ur;kCegKNRaK9xdOFtP)hv!FScUxE0#K7J%Ne4 z&r+Jguj9A!2ozy+69*4mKBBljFjjTT?ja+WF=0K0_NfXO!o1>M4OIsOwBp_Vy6tTxFFpvL<28Il4$qF)%Wf@&g|J>*9MzCIx5U1LIH9|y$Vinq!HW-T6iR`b>0TlM?)=l zYs`8YnPrA`WRi5aaj^{DZQkpplkLt-4)1XWe_8zJ)pq20wW;B;UIJ~8pF{49zOig&5mcDbNP8#>Vn0VaJNVOQy z;i38Be}UA7!v2RC@WCw#M=e6KYZ_j6A?2b$Y)-A${nSwbkJ+-H+*!w3tD?9FcG#MG z5CvOjRonB?OnQ6lj7{ZBtb08kfAsujdB~9MXR^+f{(rQH{}v^nA||^Nk4fkVAU{!y zfJI>1(ki}q&z)J&#-W?tM4HR{EZ?-Y;-jWlAD^-zAkT}~~_j&ksGB^;%Wbh*~)8TeS zgecqGQ1CQc&gI(`_qsC#{u;jNqjLuDib+Xl1%nh)zmGg3!yr`Db&nBW4G!wR-ueKI z_S@z|9&^)MG%{Xnx!#lK)+5fCuzf9+YMA2 z%4|D*9?_I2k+`3}fcy|&{gKnQIy!3%z5gD2PBE?jBK;L% zLP@5TyJpt(KbI&@%mwV6KQqVzDGb)uTRf~am*WMu=9i2Tv!gWZ_2(*K6ZbLNqe1D@ zcWtNRWhEP5K4?JQ<}7uh+>vF`NIUI5=>JCH{}!X}Md2dU;xQ$iA{!^<=t0rA_$^OL zJ5g~LSBAX4uW8Xpy#-rS%RSv#_6ErWsqHW0X~%;%oTA)fWKs}eL4wI!H$&+E7qO}f zVumyUa~K0NAaTX>qkkT`%RNi5*X#pfw$2_t1o9RFw0f+DJ;v{UF;#n8ZO;qe&qb!C zlq@u8_RlgP*|^Er+4)&p<8uW3QKZ>-hvk?{k(Qa$XH2g=>(&K$XfQF1e1`boB zMGeFt$Jk~nNZ5xY@d=a$d^53i>~;_tm3q z!rBh#v@913AU|Ziho;ipS62fgviOpg7dc?pBy<8n_S!?QD~JsK`KOLQk$0A#uS-pH z?HmA7Dr;^ufWQ976vHy>*{!!3Sj(xonlPWz!-x>|;Pc!0xrO!440n;*X!kyNTbfc6 z5^lQHNkP4I&lFiv(awzD3>ISKDA2(bN|^0cN|G4Sm;WJ>-B5s^lb;{^V&%(La~!5y z0Pv@|LRKcfXH#P%CO{~Ej_=3|%wjZ71%P!U)JuVFr&feW1iSooSQMi0i#rq>tksxcsDBE`{Z9@Kf++QKtlm1&A#jwE<^HpL|PZZe8))7W=|QupeyVRY|DTq?q6Ce69CGGoNWO?go(`1s+- zS*&7k=zJ|8) z-vo;dH1P#h%KlJeb(Ab_U zZsJo?1nYqCDPv+~vj%Oe_Cno_XNy=JG#+{nZNA*Y9T~LSi0k65hHwGkIGYLjHq*Oj z`s>^R{owoe%lU8JQK)u?tXr_fKwaB7{Z{biCpEEKA?7r(8p)J^Mh}q;Eh8*h4J^x? zQoh)Bcrx8YB!EL!RLmLAV2%(a>-4y;^Mz%b=hW6oe+1f-`|e!p`B(n85I4QF3krZUf#eJ28wn|7;0+z~wA- z%=>Qsqe~ONxGY%6z-`wJokTyzI_QLesrTx8wjWEJM7Ib8T+Zv^YKRdgFc8&p@Vr5P zCv$38k0p46CT}vLJ7E;E_MKXF>FHU=^XHc5`=5;C4b<*+c-I6FvEPdF^A`s4RsKuc zqZFd*jA`N1my@e(;!u;1^?7}GKTXrdlT#2EKYYG@>kCUnAzJ@V;rA#jMW{yzet|I$ z8oabYl7Q!($?%lO>e_fX{wcm6-piLJG>bE)-fjJ?mMXw*SwuA$pFd(|*153}y3vtz(KsA;p9SBXw;Pk3Ow|O_&`=5p_}|h4 zfyAfjdq$@N+iJb9UmhP%mX3~gBzdfyRqBOE6xEdmlL4lf2cd0MyMduEuw?Nx)YM_f zfd5@3&<6D%888!+An`A}hk>hQ^zxowOa0*JVX$pcoAh-3!GggtwxY@RL&WO0u;#-ak@qG z>cc9Kp>x`;eorQ6()~6jNYc^JKoHl*@0IbTn;U5j*#2W$AxL&YE($RUxYf>tfj}*n zElNc$ZAApsQ!yb*ksxzdyN@5HU}KkkktlLW1&bitp+fTb67u?04Fznk@(&3~GB-}Q zV6q-39cQcEcgnqzNi6Uu;iuhfgg0#9HF0P(L%ggK=HAr|XsvzcYO=e>3FCk!9~R|P zYU45MI}aZOP);N>H4{H=_C7o0*HGN~Q9KrU925(50wfAk(1ehXkc$|&|6nN2x!Eov zN10uSci6;9)dX$S2><{$9792Mc612apnkGodrw2Li$2BM=SPm(8y<<565Z{S;HFkl zCjSfRz@-cBy8su4pLYT|?KfXHpO>vpt-wN0dz>Tj%k4BZYIZ|o)5yr!h{}F?`X)QH zjh)@%^zV$ic{Vn7aJxs;NJ3GmyKZRT&i?*^hwkQxF}2=?UZZQntunPTL?MF)z-jX zA~wpz!vTv-JTB&~EPlqx<4vz;4e~Z({`-5<>k~2*}pg#(YZOBkh)8?dKB< z0e^CW6P>HEY)NAy3?wk_5J)Whi4P^}t zHDxc2?9Rr-$OD7I5L*Wp(XAz*v);=FRr%|233 zp%`BlNAP8MW*-b+{JNr?v#|>b4N!F333xe-()Zk~tV%!}*3z$H#UgwuR zT2h5U>W6D-5E~@7(ud&IgBR4}DYIIpLjBq4c_DsIa`Bkuc4y!{{gUm=%6f}e(9lt? zNl4$$xzsYN!?aLXHo@=TN#}$Y)dpQvQVSG`BPU05-sumQrt65jeBe_eUN`;<$(7on zAJ?V1rAjYl4GJKE1^Y6+b=?{@G~zxUkSn2#VwzUkgdP|6npfBqt=AoC2cx&%Ym-|* zAHW8Ho@p=b0x!y~mA9UGqyYJ7Yq{sxops>zdC798VS$Z34cVdFgG=;|m}zlEzamjf z#r?-&WB|3LqylpuU-r_fDMbGkZ1d+nvxzh^^hhucdpzggt>^pp+^=tgo(Jb}gOPxo zmE}jt|1SLsaBwBWYqo?!30rF=Hw&@9Dxkepe5j`s_&YrfnCV$y|DB@o?a#Q|C0QJp zirA%=%@CnV9E!tdcih!HU;d}V{|-?jA@M<~b7su9gCp1$5>TOa5mWi{P*YQf!)dv` zAfr)js@u1B4L+tZXC?=AacsNl{WQD-KFcsJIRy^zS>H^5mZj0{ZtUEgTA$(LQ)(UO z`{QoRFS|HAey`QE`C)N&Hg8aCOir)z|0p_=_QUlaI6V7&?Bgabu+Oi-1$1=yq_EHC zNp#D;4a~3Kf$Bg&n^7&~vcV(&KBij(fesKFdL~fV1snx%wRTh2G>j7;{AXWpG8t|i zn~uV3+2#UGpC7>|&IA5A(y^V^w)!|SF+m1x0v}F>p(yk#Hz%hh{=S$bvIKKL$y`j3 zGd5DX{3n*}KpULvOd9}>v4V@H3h0cACI-<5Pabui4gw~u!+-w#m1Ng5>tl7F|7bH9 zVgH&R_}a03_7SJc5aD`xiX|&Hj2PKA>k|p|m92m+LvW zY+r>j#s0#--Ss0bn~NfMv97DA+7~FV7cXXOW452s^2G{S z0$Ma^bQlORg>^5Sd@*e%2j~+jfPlc<-d)TnaP#qn_}6gQo};}~*H^m-WNbTY**H~y zD^G4uPEczprAyWkpWw&QbS{eHBmog-ik{ zBkgxvgcApOb!N}Y!dibgk;&|SdB@uf9IRHL(8t~VVrXWjtaDI;h&Hm%GX+u8&@ipc z4J40|wzW&j56tSyN*R zH!7$7a>k!u9w$EhgHCjFkV{3imGm9Yub7vzss#K5V5$*O&iP4F zMmE+rY}%Hmaa}+p{%ciD{ce9|o|kY5)lRNU&&Pd_l*5;cg$i98P-^h1ogCWXA-bbA z4z_pvKZGijS4w2M(DgsQN~sP!MrDD2)`4O{?W^uKtS8rV|IYrGCvreV1p}2rY!9kV z$lv+-yW@d+i8zD-R%jyrP-NolOkeL|vok=-c_r!WsX%_iyJ> zrUHZQ+b2>((taL~>XVrZuv8TWi*kQ{_6cxoG2?hvt#fN|xaQW#e(^*5s;y^bB6S%i zWU?EJN41SnxaiHt!CQNAOSEF7VN#-$;GX(rBYg+zop-ej^Kf$py4$JDV=rzG-O%+) z;r2upDn17tP~xgBe}+V~Pe>$yM3Xc?Stt=(ASVAO$;U#%a0Yx}cx7lzgggMeVYB!q z)IMd}ZOn^z%FClj7uL13s4@(mZN5Ax0fCzv-{%hZSWS9fkR!;&<N_7@-Z98R8a9mwp4RkxcVh2AJ)vQNI&azwTCq56%_}==>%AwoOzADv?_tb zhNs4$q;YNS_h=a@Orc!5=r^$!UTf&4XFFM7z~_7TH>)#@N&%0T*9xH)5fU=*;D@1Q zE+J%3%V5b!QB;f^Ha;0FK?VV1fdP#fwvLORw-mWt+^ z5q*+S<(!kYL{J%Bm2#;n%{N}&H{kz4*;@d`(Y61ABv^uba0?Crf`-9@yK8WF3GNI8 zcL?qQg1fr~3+@^uSa5d+X14R*?|%PxcW>3!c0n`M1x%lwBhT}b=NMp;3%xHVqEsH( z#mDP#syPz1o0Ck1?stati9d9y5xq)E7fV)XS)%wJ2rYbsTVink9+(M%~;%mO945Bdanm`m)ICaDpm z5R_q5B+@IUq$Vq+f%0C=7I>t)3!oQ%YdKIkv`!%(y(E$A7^?5A4Pa~W*>iZ)&Pu_b z3XhWAEE*J;Hb%Jbo)^{OmX`6cFO8ADIOdvWs2hSx0 zoCq_=4O({%E+=jT1aaHIkivoR>9>mH!d|;G_&5=B%Vk$B!`pL~*oCBuL{ht;3n8G< zn}R(M0K8Bwoofg>Xpz}guM)se#AwpD2ZSY{Da&th-I%q_DwG!^8MJN}1K5RA3|tn6 z^I=ZN9Bsc`mjoO?gc_qZ4QzPd)=YFwM!Goh2ZXnqZx&~|Ns3djb9+Rek*$P|gZ2y| zQPyUZiRz=~CMVoK3BJqICCZx17fm4FV&kENm~lL;Rapdn45ti_#jv}xw`*rZ5Fdr_ ztErpeAc!hdJCZV(f34eoWtgXIl}Ar&;7Ju^H-D(L64L-QPU)@)n)z@7mhrOPs%r1TqzKmy_zrQ-+tOTiYiG z6|1ge)81r|cgk_3KUIyWbdDfbhlm!F=ZQ&{sv|KMf3tgt&;Boi%CDzTy2u39q9j%NjoWjE%zP-;Ad|58*Jy|Z&KQ$$0F^U3v z1I-#Dz>eS((J*o9Qk3{TM@4*@^$8kyxEj6=6=AvyiLYrFoPCeYC|X-jU#YvKmnya3 zfHqNZB;220@0zgYiq1bEJYc>Cj^#@(4xU5dmTn7oWIT|boc0Qf1HH~B}x=1Hx?kIyM|K9`KZRRZohSgv*q@Pw3B(@MYwO?NB5(azP?5sgU0w3lnuG zM9ZhPeF=WBQ%wU@h%#EcpGb(kXR_cdwEGrnISR6^S48cje+idWd2-CJ8>b^Uncw+| z&1aQ&IIrHVf68$?(Sw)0p0Sv+TZiRKu@;3ur|NTJLJb5wG&5|*^b$2u*w&cif8Q5y zgYTGJrC+5F8g(*NMGMD^^b>y}?HjBVx~GgIJ3Ohk5yjK-SYnHjowYp7Y4>~nBm$j> zcsQe6Dxk;MU_!`NW|^q1GU>lihO#_6JDB?qXKu;HzL1OilFvLi zDc|jMlRI=5esnmLy-H67;^aBbLMHz>S^Dy|K}-%@)@Q zTM-qvp83uZH;B?%g=2ZO=6Q5W)WvjGdL!O(4Ag1%MgfDc*JR%g)Rfz@-?;>)sx-XI zxjpq?K4=eL(v6o6&oM?ebs?#SW$NhMM@ud?9`Pj&8YRE!7FQ|ja*~4UIgW;RuI*oH zhIc@ zJ^9vE8Rc}o_U%pXB5m@DEydQC{<$<6|E|t8|LjJy^@V$zT4_#>ACsMDcY(&QBGmPI z8LNEx{c^tKKgw$s1{CMO{}`emZ02l%JRMZcN+Gr02&Fm6GNs1cp&PXL^=apRbL>P~ z2WG>--rT#(oCq2do-k&de85KuJ!Y5W!MJ#^EEQ3 zqP_4#>I*qG|HG%H2$i>5;~JKDJD0LAlx7{xzb|3{R?UK7_hO2TZ2zn;`7%+9S?zAm zZjAiKgIg^-Yn)<|KKwURG=b~8ogJ1rYkGQ*A?eynw*4_UeaJb+X`)oPrfH%P#_|~vAAZc%TY-dlOJSxkyZXrweh`DHaNK2|v zXSI>{Wm3@pM$}=GIqLS%t5Qc?ng)}fK8Sc3kISnvZ1TfXqApdU`c?nDUcxs~)$!y} znl#aM&*Y#e8ro3C9p`j$CW3GTeD1r=VRIa~kJaJv;et-1r^RfYK93|yyf~MInr(KN z*`abiOwXPCMv}-DuK#oD+Kr%$S|I=v;JzRqS1qXNa zgZeH<(70y?lj3)-S{hq|4E9cz+uI1hSj6!mg3RALkX^CVMmz)fG z=B$pFMRNCRDPF6P{F#DG|l-7#$YlR@11QnE!5#@1>mR$GuK4;Tg z#fD3FO8q$>$_-dm-@^(x4F1|Mx@uU6D z>Dm#-==!VFlvJ-|^WMHfEX6k9@3W|**u{yeBtyy`xBPxWL-mmFR=BFINI2C!bIi;BZ{srX1R_nBj(nKK$n3g&mHnh*3x@_gq= z*M8i@#Z4z=OFmf{J_OdrymcY67zOrLb*4YtpGXVqa!_@0WNC}yjZqjyi{i1q@BQq# zZA!^XMf`EeWFmDGk~TWDgF@nn373>6iopqDFM$8=X_kNkgx6+Zo%~sT%s*W(uW^oM zf2H;LR$`OptMf%{aD^1??T_4-NHIdw!dx@F-|3>>CdicQHrAp?i04hIFu?63bJ&c@3QxL z*A-uMLONOfuD<9?SNM`rKZn||6~@aQu{6sXp|py!QWeZ8PTaEgg7G$;h6QKZT%b&LHAAVIfx+|dr>~ipBj$71fqj#f|r_y7+a&JoTzevoYl{3A% zLjByQYFd!|9u?x{W8?Uel9Q9!;rUNKHBYka1rZ0OyBk;J)`*3n>gAd4-Ag#lK^8Q$ z^XdJ(@Ngo24+mE#cN&K&z28YrsHhX` zHcHzI^@ZVQhJ&fmj#SygnU2JVl5mwGiy}BUAkCiW&j!+g>1C&}`}f4}8qK!}06+zZ zMElXd#bI1eTdxU$T#H^1iSRt9%OGT6n`?YY82#GfJ3UjYHiYq-`Ui!iHh3e7#2w<} zIa)}a@NEmVk_?#GBM4Ki+6F^sXWg~iJRHYyPPQJi%gSu1;a*HzP$ftgO==riTRT1N zcg@mcq7yH9+-4QpH8qL#mun%)r9AKK9{4}*H@BL-q#4?B$68V zaihB-=&*&s!7?@atMJ;l@6niX5%aO zUk>X$-1cY7?R$Uv^(D-hW(}?V-yu88=$AcjB6tVd7{(sQJKqI zaOo$Z4#y2Z`+M6Og}Zd^bd{COY*unSk>tna;oz!KBe4+Dc|8Wd77EikEOT4laz%*O zJqVXSGB*rb-(>}BS_27-{I^Rmrljw3vy$eHf z6~c({j3ag+0b*$2ux%n3GI+8eOsmUo`A)(%3oGdl76!p65D&kV_|iR!rTUxhb?Mn;bOjHpLLzup_qRxD73 zfxbRI&$S}oIo8+KQaAlJJLD+0T^0*3yGV4^r&}+=6XMwUMJXH{JykMyLxOXF_BhA5 zou3N51_;ey@wTfC9};i`ZIvz6)WQ8KsPy{eOsP~{wqQ2g(q?L(t5wgSJxaEI90+{s z=12Rf-;0G^Tn>yLA1w=yK{hXfhNKeXR$OZz_EvFV5YW9Gu4C31Dkaqlo1NBYWV)5FC8zc-3!?VmF|k*142pFWvm6q^j)2KT__Qi(mn zx@dDs3tX<3WK8s9CbIeQ7iCRrqArHABV0(4;LkpE`|YhK6wrfX^<}9O0DRs=O9J*Z zTgR*gRlz@PpdkdIkrgRw?CR#ul$9}U-wyV3a!3CnF(n+_yWmDPXlw=wT!vzZF(r`m zd76c9VAW$-0MOv+_L}9>&IJerVl(WZarh^xu2kBea=pe5Za5noe@xYlAN9zRX@8tr zn_zUhbtVWpFfoN)nXSg?=#3As5A1mXyx-;G zntw=nRunhPw_~BSq{R37K3$z@*1(F?asA2haT#rkNW2~>Baz3Du4o2u_8i$F)dbef zLcXT+55u#13cQ+3J}Mbb_Kj|zU4i!m#=Wv(kFG1$Kzy*V7&0C5Cmg)!T{8oLaHkVSKfcZ0kXDiq%<=$6X{P z>r8^L`04YEF$I`{&9VCH)>n8R%q$r}PLu0bCi>{f2P)^`zpHNb9nCjn`7!{D{^~uf zZ!$-q-EX_e$I*lOe4hWU+JQHsc?Xab(Z9^4phIeFPmSi8v5YMD8flu5gubRsm^)eR z#vmUxPsQ1sjKf!A^$nS=Uf19wmOp>!4sD$9z@9}%|3wRJihUIThPF03%{CeOM>Ou6 z`5#_C_{j`At|z%3&KYk7zkdN0JBM{rU$otC)YUndpi~sMAIraX`cdK14hY;p@F|qH|}FKP-9Zx0xv-bI#JrfxY#WgUf$yxSLs6jA!zjo~|Bv zIBdii=9Z{7$B_%S` zS@A-DgX98l7+n#a&NG4z6Y`|i0S8He^Bn$&@-CMmpvLa1h0<{esNcX0SyQ{me3pkr ze}$JM6iKN@G~{<|Ep3`s3F`Yj`Jx!SAzkwM$eP&R+P>^so5#5i6@dbDLd1#T#WcQb zUIa~DJ#P+9;3OK(>nt5%L^#UCSKVI^w?iZDj3e$(+O3EX5iOUv&#TgnD3_#Zd*wKY=m5{SlCum z*Zb~X&xKlnVuFyZpe2xw>+0jt!c*!4aQh1UX#^dtC4zsBkMMz%K~&QEF1NFcpgE=K zq_*omJzt*b2VNc6t$+tXo+?pJqUl+Hj(oMjQocMbmknQ281&qHRg-r=7Rh6=eotPe zSR{0^FWYSKbORx_UuouLWvgDTzf%_JB@xPvqd=HzslP`fs__@w3Qxd=++AIgfu?FR zS0ra1GbhTPUPR{K-s+bL&9wk-lj$En$9|4=LbSp^0m034Y`oN2F0l7HckI2s#9}?t}fO{dkoQv7sfewv#k$)4@3RJte?FM5zKe1gc|Z`9UTy?q*H(4b13>)tM(22rp~z31Ry=ivA` zI_n;w&Xi1pb1<{9NWc!c?BjjQ{xh|GSACpZM zLeI~LCksEs062tl$pAjCzpuGuEjb0k#e1V&7T2xRDUEbR8!0nGVe+B4PGJGZa= z3(@^-dr7DvqMR;n=9Bc9s!gRPJH)(Z*H7b?;=eh!g$s~MioC$IQdATQg{rKT7U{%n zZBAca`B|uU_+R12c4e?%!|3jxHUI)2t|vdF{yWDq_z!FM^*&IQy+r!;*Va%uD8PiYxrlrm; z1m}nzXRG)q!G>;8M|^iqxYtRw#)Htj%T!VuBd=M;4`#MLbs zAB@LxXKRb&2lvDAC0Y zu`x2%*VUEi+Z05ql_q(#Cn3J1`a%h+9M*#aGy{C!M*b{7%jG(Yq=<$5&+p^b!2N?m z)Mnx=1f1zBxEk-#Ai>?JjoEmDuc-i7cwix6A{}c#kV5PS=IEfG_J}!kO6f(G9CAd@ zUVkF07B=z=* z(I2BukbWgQZxHbJuu@EOXGcfFpeayT^fE{C>^uhY2tfW~@Zij=g zS05H?IXfB&$K90=tUgy@FEyp$UjS@F1u$v+Wg%hhRSU}dB_S9er;fv_!|8L;Z&Ql6 z_rfEqKilnf=cz^*JInCGUg#rx*}QAyN|G&7;SZKC1>@rY$7PfW2{!27ml>h;=9(M( z-YyMqPA;#9hT0&TLHsRcxwR|tvkwb!UHTL0UE_G?mwyo@$*5$Js-+#z-veIxl7IM> z=EJXRit?IkqIBa!vGMOF(7jh~Y4**K{?eSU|4oW&X|N30Ur_O%Q#MchoHes3vWN@H zNXw7OW4}84X=%8gMT_2^_SKkws^wjqSEHn!!- z{e6U2+$d!8$TNX1%|I^@krt+>6)Nn=c=gd2MZH)n_60m}wYU5iru3_qqpn8j7%YG| z5L6?-C&xBxO(KdcY|?UZ@6x1~fV~586ifyvnqG_YIIAY_R6;tfpM?OV`W0)2em$S@ z{E$Zoj-pW1kbmD6+3#eftD5XDW7*)HCq}1rSmuq|?T~#@<=h$#ygLZbxise! z#K9lFVe4JQAxf2`nApGR*NHtmknBhQEJINNhydYSA3-0xr^5|EW^suErRb=Q)9Efh z-Cu9HeTZ)i46OKfUkRTAo|oC>tX5(F)g&B>EcskP6i(1V7M=8-RYPopPVl!}&OFtO ztGXh|J(rwsA|HKO{zLRN(YgM71?0gwewull7FL*aL1pn`d9z8PVP$N+1Zqv&gT^bEN=(1`utqT%rz(7ufe`48vX#mS}&$ zpMSJ8f8TG96NL=GmJ*o_-e>`lO~5G+navE}l+YgTiOb(&D?mnd+^w^XUz^sZ}ypA8!T7;T35!k zHfF+aQG=7s!+!B9oQ)7AL{#%lzpUWT;c;A)Mu_%ik6$qsK_OC zrUA>J0Za4KRticzUEg;$nokGLaO>IGd!!1&sHrWES6inCmJ?b;qNw*|Cf3P(A}sHP zjZJ^7`m_T#hjoq^_7$UZ%m>(CVw^ucE|SpP#sUS-sN48Vew8s4)8q`;ea^O?H(?<3#7vQS(DWg&9;u3XBVyT-~wtR-d`xAqxE6XlHo*%&*m3R zTQ$s<7T=w%Q#4XWN*3q~_)O2QxrLv_-!I(*Dk^^6O?Ru*3B#|WJ6$ij06hI~=cz~e z`^S>;yjhcsuE#72I$da=s1tTNJ!x?w>?$f(8fWQ$D6|IZ>#3f%{hXTWSy{mmiC0>h zqETiNE}rG84i1VR4iNuxH7exgPh`ey%vWsk5hmo|uom%A@Izuwuh}7sF6fO&ykhoP zl$-^dWYW-1xKsN0_Fy;78vQ=%UA5J7_i|D zwKC?1!mKxwhVq$$3XS&a{Uy0tPg$vni-Lt^qf$YWi=a#bILbmGt2&i8TFAwTbrD6pZiAzZAMkYIHRa;<^uR3nC)ru49 zb!L#&GgWnvR(DIPa5+Df0D|H00lFp1chLB(oA(ZdMymj}#xLosz}Mq4|B*lJyJ z_HyNh#CS8Y%3yr3p19HGd1T~+Tq=wOOFaw&(oHl=Pe?*?y6$og=t}#&aqX7c?9T?G znf2S3fZDmHQ$1Y|)hPL?{R^!6PrpNp@^RFZ-3U)W84KO3PdoT7=fe6ksZi6G7ma|j zYDD%F3J+dhUVePQ=y2xtS&2q`@`(HlBv|qa8%>~$jC43SgEx3ouQ(h}qk%+IcD2rS z;@BF{m_5YV(knhy)k_Qog~gJ8@Vs8rZA7~lfF?>Ql_Aapv;yEcf}K9MPC7?Oa0970 zkQnrO@;57Pd^FTZ7FhE5?4WqcX6t{jTwZLAJnK?Cna2QH@;EPm#Qhae8iOtR{Qg-o z1qupo`AdJ}Vv-~J_ekLHfdTC%d}-_{3; zv{R%`#yuarp^kRBQR)V&JZij;3PtZj-4zXc-e{)67Oq~~+1#|SvN}KG74W?`GgPgU zpuZABZdPGP`gu{XF!1dD;o&|u8~nuX!U6X?h$JJv3@H*=ma853#rt*eI&hw<{meK} z+7B~2$}#F_f$8b_87YpKdu)CHsDt)f*vxaO-*(Xv;U1IfKPdH$Mnsu}=iXa2WH_w< zPn5c`e&StdY&Hn!N2`uT0C#xz@oa%Yv?Rr|X|N0E&q9K8qv$c%_kKVL`LE7kb$3oZdtMS$oBr zde;pTwEBvkt_AI7w_B(kKt!=J6|9`>DHohSsj;Q6KOB@3 zIK^3m?uj&WaNTH|Qm&5SziMZ14xnuS#`Ax`u!8`g-*KbWV`qOj*EIF3^mkx^S<;vm zhBX|IB!h+Igl|9Q1~Mh9UA@7n%kI=S7NM#w33c)@MeDm4xY-CxmNf?o%R2eEjdK8{ z$oJX5;~XReNrm2{zdtg%z3<%?TK5}NBCjqexVjvWt8D+P5L1*xCHqLtC|o{uan;}$ z`(-))cR;1?R!mI8J2RB1CBo3w5BxSzo0o8(T?WcguMF|IhC{WgQMs}4e;pk80U-2E zxoEQPATlo(6#zn(svi=QSPkf+&DbOWN?j8}i9khY;_(yxa<1~XzCBcO0Z(c?9-I7= z@l2S4aHfcWPgEJxDX?BLu_`fROw;_FWPA0R?Cv-nWcn^~7#R84AUDc|`TN1LtHk0~ zJJBOEGd*q&j;UEw?4xgOIt|noYhy&X_I4G(1|s6r){X$KXTp*?Dm;2HpJVR>?Yif^ zKvP#&CnO>PXe}$pnH+Iy!48=6YyxZQFfd(lksZJV%vu+_eQJ9~z8mtHMtqqf1f>Pm zwl|lJ=BDS81AB@uHp@3*Q)|13Obi0Xtbj zBBFTdo4Mzmy={|$)egn+$kx_$i&93O4!XqQlV6Ju=Ee>VMP)K}W1&TeK%tVIl^D;3 zEoG)%698BgsyP`A!|AKax<46-*brh8^n%>3Ic;0sQV^29_m|x8hw+-PbkuPuKI^_V zc!V5o_6ND9z0!>w_)$Vvm9p|mu=s{n& zxe@3PfC|ApCT6pM#a^j6yXnLR5;M-*FZl6vb``evXn4Q$d42;E7`5HLP*qB-ny95S zo^r9dDEhb@zySgyhS?rpF6}%IpUItND+-de3%Fl}jtf`cKUgd%P_Hs{Oo06$gZ2Q2 ztzK}oTrLjtO4}IidV5i^ocD z!2!qTpC8?^A^nE*6W_BRc&<-8Vk19k)z?*u|yjDZP19S_$7 zOhoq)((-Kx22ml0(2>?RV2_iXja&Y?7BA;RXk~N7pVCjrvvey)mpj%~BlJPq$XOW} zh@6~>gLYOrMksuH54Ky&mI3lKMMsSnarWuzNp3dnkEzq8C+>n_swET)?%j@Svwf95 zPi^=a6$Zj*>-DhuWA6opjXd~W=Z7N0X2Z$0fjw03+s`><+=Zr6CqZA4F>~yGb)Bt0 zOJ(zWpimHr22*7KWwkU*>2HB*Te9YL69kShZyteb7_bisx9~)#_YHtZ!+?)RZT8mH zn{31E|K*8l6u#BLVL$}-Xc;?K>0|zYPiH}wQ7x)u$Yx<5Eg28Mr^B=KsEDF~2cWoG zN-ri+wt)3hYp`c1pb9X$h#WAfZE-Ik2u1>E4Q6KM%nvvAWoM_^?OdRDu4W7o;v8HY z6=h|z!s+B(EYe4MTmM^yaL@9B0-W2C)sYEXox=f5y5vy6t~`~krk2$#flAyll`*hp zsN|qzsg&B;dMk5+^p@#%C$i_=fnl-tO_2DZ0AwbBaYy56QnNIY_p_gAXgs5v==f_n zxeliIaaOvQAFt*{X7VF=w2cTgb#(UNw$R&y6^qLs6@^>!tbtkj)g#|PMT5>N%bmSK zi{C{+Ksgj1|1)1R8##^UIx1RUj-b!!?yd;JIXF%J&uMn1Zx{vwTt77HGq6nc1W*Cd zrOzXa$HFnKj)cJOZZa&rxuYS8^GW+BxBVrNqw=W|QuOpT`FF`zLR)_^_qk%{Ly1q;>80tVk_%~W?1`g0 z8p&>woQ%mM&Wf#r{{I=GZU?vO|A;}klVzj(p7%{^rPv}<9fTEtMF@D++dhq% zM;lcJaz75p--ki(zPXF;E>yxw{oivBBPHXsxk13a8)d)hKJ4NHaYkKTow6SV__NsT zS8>s3dyp-nE)Jc3MaI!WWzY|gr16s|Q^azXEm#LQwL zn}*}n#&S0s8}I9_II(%{5-i zv(n~p161?nw?IF`H+b37dwAN9*DKt7gU^d(ErZ9D;1Q@|TJ zRAlJU4^4{y>iy@Seh(0_VJ4i_*443>^IgzX4W=h1-i`C7FeSso?f)u%Q~MIY`VT+T zoye~qwzSLxMdnw%6Ck2D_rDFE&ZN0O3QT?wK8A$fFncj!_VtGf^ANbK&&3;kahST*o(3i9eXOYRK|xX`SR%@syC>^iLKBYw@4{7fT9x; z+GtzMhP~ZAQ8L%e`PQ1NOk1`13`iMfZ0x^*Pq#6Fj~&Tqb|7@PzY~{2*jMjeg(g1Y zQDdL5CLmr|T%ax!V>aCeF&YEXg|JdJh(LK$W&**K&Mpc=&fA9 z2(9rEz?&vcTS7%{uH)^OfjE6y~8wUh^3v6t+X2?hwnqc!0q3cU@ zEDnPkk@|@h>I`6lyd!T$LSZgDjA)|NnPEDR3kK46k2onnkCw4neYOp$`diSY?%V+= zSri#8PuE?|Rm=m-%k50X20q^h&qtxUNvfsaRTy_B?>u_T?+maoe_=2&GhG?(;7$s0 z{$wcZj49Nt8TcrAo~zobe!Wiik26U@{J*v;RHUxsXbfd08Mqo(D~&JB6cUn;^54`` zuF8Z(PZOjqB)uI!=urnGiWEqjM~2deS_qGw?U^W0Q;q9G0 zB56DET>4eMy01kZCt&Hbc^b;8^jTe9TNOC3>h@LxJEuR1J|gmZG%uVvDV7b-3kqe* zAm|Xw7r2kFX(RvR3aWUj3yD2^I?Kce4Jq^_8hUyk^wZ4jhf>(e0f&DM6pZ^)(4WtD zSy>5LM4H*XsJtI5l+m_4OOft`z?XObaP1A);>pn_eDU(NSa;O&B!1-3t^aNq2- zO+V${kWUmNgV%C!9$?U_taLtSg=M_JV+di@@Ksdf@33k{@^nWLvEs@AHfolg{Z6Xj z^|;TNEpm5$4Y=3=;`!P9gbgkLSm{rAYYbt%&yE`{et=x}h2a!nc?5*bEP^SwmBJKQ z2ueoI1_U^PDM+(5WMlh1(HQ?ZHONaAr=OcI?i&$0Q1pK*Ehj^y9-e3bJEM#^2zfnI z#@U-&yn*N45^mou@2=%gHi~ahSC(Wl%gr$XQ*lUCo>&W-iYv zK!jbJpTWZZ&okM2TS(s$W!k^YF!^&kC>p8{?xGB2E1>V7RMb@1%wh4iPtY~z5-jOv z#NHgWT8+vC0$Wmb9#S6ruaiiPPTJ|*3kkKstmc+fc=YYgUu;V_k_&q7%=8U3ShOhv z=xJHSpK#Z|h z1l8tfVqdfoiM&kM`TfAplqV)K%uCU|o|D1tTyr!s4CO;KFDqdE#$@)V`<+?Ujt0rm zb{!-1ci~x(cdGh1rs4hBAYUIK)zo09*_q!iAE-;yKS1o?1xj1<;!p7W>95xewlQv0 zrnGY`BQQQuSP}Mliq=*aV@=HkIUV+{Af($AQQ*Dg7f@**ZbUlN3WQ<1nBVr0MO;E z`;Lo5h#w1qmP&eaZ8F{L#|}z}o+drQzb#fkI~ufOFxD>+lCo`HXNPQ{pUziaeXT48 z#(>Sso`HqcwO&y{Ap<5YBSKk!h{l^F%};4fwnIN4aa{*SKWFmhCl;36c!>7S$UWG_ zl;72|+o$F{?_9zzLFscByubV|k)SYaYqzfeRQ2hXj-h}@ZChK0+TdSN?Sg*A#jGrf zY@Vt?r*DXoW}>tT9ybRM4oYxyy(4aF6N<9cJp~HHsp?h~wXU<$oFr%e_5Zj#C*DxH zCdrQdnEO@)L6LuTj6XAZpuS)V2RM-?%5Z6egMn+@&hc`VYC(t_==tAvV7qv3%?CAZ zBHF;Eat}kJG-v3(NbE-1I0a`(7IVjyyndy;$nYpVTIXlZy~pR&G9+dnIkonQ6F!X} zE9jbl;Q?^zRQ?o5{jSKdi9fUv!nhNe3x0ZNM(^hPz~_nC!>kC@m)d~(sl^rL2>Y!M z&zEM4wCAS4l4@8t{cx{@-vClHd6rU74RK(aeU-jiRZv=nfkv+1Tfpq;iWpb*dm3M$ z?NLBViw0*s(9WR(7>ek(?l0kjZ_mhAy4z*H1hcIB9Vj|rwkx{)K&E^pLz7S`?0K-8 zd6`GQvQY#4qKI^PJhR)qT8-iQcnZl{A0SF6R@p~jC48U z?8BCfs>w+E(B$yI*T==9ui}!Dv{iE@r1Qew7AI1)RW$QV0x)e&eEjXApR%<7vI{Hk z`%31)OMl!nvVJ5A!GNPYG8XzmiB|@A+h7KOpbJHmPWVH*2yl&{EMP{g~GX6(EmM!ZmO(EZfqWLUY!MGz;>LzFOz z9s2hfr_n!8nH~{6$VM{*hqx)kp*f#?^iAQlv*F8KjNC9PCIaXA3?1AQNpL`fQ0tu| zV<~_&$0KawJfR4V_F2V#AFdR52sVO_`^4lvQEpud8+i$}W;F53oaOLa+7(!x)@rT}2P`#uW96fGF`6L)APLa2qW(yu2o=hE-5j5|_N zF4H##Q{_<5tN-|W{&A$9(gtc&f*nrI@|kiT`^zFdfS2jIx41_X$Qf0!f28qV0>@UA zBne~A03HWU^7QQb)=c&!AMwHR(Twe#p(mfti?4(|O*?V+a&()ov-h+dghqc-i&6xV zfU{cs?!V`m)5ConDF5M&Sx+o;BqZpx2q(jh9q=!C$=`0>K}3cqR5{z1#|emEmRt_$ z(xaz{yv5=2YdH3 z@=rr=TIXNbpbzgQ0FgQ2Hu-F zc?ye&m|9HC%qkoWJ)!&mYVWI~;%b(C32wm&?k)*#gHIp?4-O%?2MaJj@F0Ub!5u!_ zf;$9v3+@oy-DU31Ip==&-1p!6YMbEW576`-XT|x51TK-VB)rYjMXKY= z&Mhw71zc_5p3uRD0V0@u{&+uge6S=hVnBE-OU;3BoWZKwEz7I`i%4J8&kKLY|IG0I zN2<4#B3P!Vo4|4Y19tPwX<+Q=(l5bBuy=G#N^CxxE;bONftL8eKt!~#dmqSO{P#eP z3v`M{`*rkW4U{f>5HWBga<+EU7x|QJDdegbIef6N@{@ZtMm+q=F=Vf(lA6yB+>Bm;J5nM!Rmdgh#A|CH~ z>25KmCLdv`kOyVC5a6Wz-z2Vv6!3YBlfcJ|B^qh^FW`VYyAUcvE^Rn>hS`I71=f_Dp?A%J={vKTWK3o7`@r-O76>WsII^Nvkd>)~h?;-z=Pwc{A)DmC{aH*; zm(VkGJDk|Q+98dVE%Y{O0HKr(GaZ|+7>_=_mF0%}X7D<>T}T5B#jw=^E@9tisOP0H zgXj9gbG_j0b!wc0A&{RlQLh?UrYn`71qavnQ!>mxe;AZV;3YibGmlOGS7anT4X_81 z$led)hwW$LW7`?;Zd3y)>Aa3Uoxf9A;$TbRc;}XO;6U>sTP0+(13E_L7&lx5KwPM$a=Fvq01--x3@c;X9ZqcS@e@W=YI5 zHrOgxkEwbsljsMP_$mqih59h#jv>|T`ZKRy`uJ^+@~FY$A(5Nefv-Mp7yEL02-}zI zP*i7h(lpBEyS1sjBiq*q-r+#e+siN9u7~FjFh%Z~L(8KrWH?UO{RIoh+vMqXE0I!< zDD0lGG6L2AE?{|Jl#|w2*}w+ZiR}7>nPdMQ`x09pqe?85QvZJ#r^&F{@*@RC6SztJG3anNxIQYmDFMX_3ANndYBh zCow#3vvw9o&n2k_;&>!Rq$H<9tb!cq4Tq}v*)Nj)0!#J2ieLS{D5;;a4^eW$Bo4+l zg;ooTx%@%)_*;}-GeXp5DM0bRPpp&?#dyBU;RyPmXi)>H5~yItP6G~{fYL$xJgEwM zZ4F{C6PnUO(stJ;fK?bUp%pX3lj5A%UrUc&lZhAdg2f9)a6eN~#)8?tkm|UwH{GZo zSwUcEemMXS9nSShAp7I4gS*%K31)5;_haNT7JC^6^$`uI5NuLRxaiP3seeT5{4+QU zn4=%_#ydEHY+h`#T`(f4|F)Mp1CI1Fq%f8vXK&YM>tliW6oT5%qFd)v?V?izy(NV% zmv@@!QX(Ns0A=GDR%gaW0z-n^Cjixe(y_{&xpx>+zWdeT3@EUp0_mM z;50pQV=Xwi@nK(1k8Z{?=+KKwPrj=Z81uU+k_rj%2=Ts235XS?lVRTE{)dZV=!?ZZ z?u!JnEs`j(MW<*P`$SW@Z@Bv_53o&-%w+__Pp^^eA15YYpZg4f(8%<8EXfIkxK~c| zc~ZBn(em`@MTcWl#u?_Hly#pmcBFkH>ODr#Ie+YOnja`L2yrNv%@y*^RyX+#@!AE6 zzmS+E7SQ-jxKZH@2&o>OPyf=nO#cED$OL5_<2V#}Y6f%_gk-9D^*a|JtVUWwhpa(* zTR%$3UE=GL%g^iHKum9$W@eC#q_Q;D+-P>hQv`4%fwcMzw-XqLwoBS!KOli=7(B(Lr^5pYGmkLe%^ec@g z^YCe|aq;GDSGu9d&htUxfr8M?O(A5g?oCJNC-C9FMN|T?8k+2o&!MpnYy=o_F3z2q zWCEEj&tv%n+$4ECi!nIr*0nDY#4B_5SpPcr!o4`A6qgAQ{|2bReu6`X>G2y$S&Tu@+S;p90ye|hqbo*e;BM9^)Z&Zib7gGg;}t5UkjGUlkV?Dzp4EN&T-2kk3alT7p}u0ID|W$%#JG{hfs5fCEq4(RGB? z%yGL?#iO&yv zQ6dIl9jc(?ly(-;h>QDxc{^6<`$8X!I zeIb>V$Hmuey-A%YfSm#4!XyP-ZFuiPZ&$K!)Ht%#k>AcnhkM7URpM|%~D=N!g-|h}XYc znCJN1`Eg4CNGonAAq+c+G z!5x3zwI|BXLnqjYA9)%;C$f&JEZA8c5pnwH4#g7VOzl{3JY49wa1GYJ=K*8z(mVb<^tzjCg4 z!oGJ-vYP3=lxL};F!8@3OkEJ7QNY2yCCWS@ZZcJtm9B<~t_%&ZJ_p(7`R$LiZS*WD z`!r%j>LEXJmLE`8q&U3_`NXJdoZ0S}5J1fvC>A0Gh{lC={RyS;!|f8Gab@k>)uqcI z9*_5^(Q;X?SeK)|D?;PKDDFEoiYI9m>bulmvFld=d@}$IjKO#We)bK8&yzAUW4!Il zw0^dAoOR_O#nlWG*Rn1Gbi|Glmrd?U%#+|}Of<^x;J5t*OB4mYR~8<-HL(R8!95%Z zY#D2GlHHxGb2dn+Wro#+Hg$d@nzjw|a$Oac<@EW{L-f=7N}90Qg2lbkKBgIw}l5 zR~6@rH{Ry^uh&VhW1_pA>@r_(>_|1R_(l(Cw(6zBqclaHqVRp_&r1TAcM~WI^I%B! z18846_MhFCdpy^}4qWG=9ILJ=Rao2J$N%K!%W!Zcf=WX9`hOsk%usicnrizmZCgjT z>u0|O5dVe#sE3NlBD|7+X_{S0LthUGmq+*z&FR&RWwKWz+)HlayFtx-` zc5y05(!O{UcMQSnBF(I)j=>2~c!z^d{Q@tflAyv@B!L5Gx#QlOelJG*jV@b6j~iD9 ztQ5{BMN-~e%=a7shUi>=C}h!d{tFd8c>}E+BkrJCY_Hyn|59RrHZ#Z{p8&9zLhd#+ z92jsPAiF$!xw;~ z*7&7s{+L8}`PiXUQnzY#1>|Ua+69oKprfqJTT1$=?6Hp}zg___w?i$sdZ7CD20Ptr zs=g3TDeD(N5K5~D>7S8ob5=;gWrhXQvy)a=&Jo`ViR2g<6E$^HNZ84RlY+g_EeRl9 zrEBHsiw2ACIK^q2g#h}yFW2qq%jCaE|0#Tbq%f^Qam%w6T#(N{GtZtwD;?5rekU-HLgaJ<|D#VpXUMTK2u`o7i%lH|E^1|aX}3i8R~yU54{Q} z*#yGmx=Aqtr0yMZ>@$xwv6alzp4>2S11+U@Hy1{H_OO9 z@jMt<*6tI5_?SrH5ov67d4Ijnlw7~X#8PbVas?yJ_e_)h z5^u^hS>p|QQv?4iy8-a;7>PivsU$_gt9fx}%4!G${XwuGDdewGw^!^VZjCq1FdQ!6 zf50OlIUA}<$(7|oZhet0Kz)fEu<~u3?6l+zIRISXo$YT;0abX@(`N|mvqlF`N3A2I z7rZ=B)9GK~G6v!LTk74mCkeUux0>Q*D|}S!{!=38BiD0gt5ZZo&VJWza{AD5o!3Kx zuKY@yVc9D==5g&G0dp7(HQKKb(O6zm&whi}7?Y}zH_TicnN6)aNUn7s>ZWi( zYYt5!G}a8(p)n_{;$r(Y+U|!%)4k{(hhtL7=Is74*4bRl1V8Beo1tlueg0Xz{ay)r zViekBX^i}GFUcKDF1GGcoNDkeI#fnr;?2bUCPir; zX=BectvS!y(R(xkDY*fst@78u!&PgcH~|B=j50~&MvegkZv_-0RmXt$u}CN#_&dR5 z!SHS5PN=mH$bMNu@-L>Hv9v08q#c5hO-n`@9-)+h2?ff}Bb&E5PEiJs1z2wJBFRK1 zj;iw|A~Ta93zLto75E+NEc2D0ql8cv`3Ed!lsTsE-}k>~2>AA2BPLn43?a_-6Y^v}CJ;H)f;$R}*-v`SZH$8(jJW5(PMzc_4H{JRth0T1#J8%ZlRd3ys6w zZXw-S;apn2g<_`>P#`s`U)HEum;C-c!(Eg3qN8Y-i=EPdlTP1xQ*iLY zeUPt`BP2FAjy!#Hmmd2_$?;ocyF@`(Rjwez{Dihfb@P|ytNo7$#OGl-_`l78B39zZ zFaA`mZ?egw8zCes@+BebK?!!5y%(EWGQ^1vUGpKNgtdaY5Q`Y-^=};oc1s&Ib&JHEH5F7=}PYLBXxQbp_O1Aud z{jwuMm#pM7Kpp%Z`re(EPdJGw!^yqLgCuPMSBLV%5-5LD=mk>xBBNOk3o3XSD&LGT z%V+Sk>hqz>GbD4ZN8{j=$8 z6Eopd>x0svXiasS;Q$6VlZyge@WLz{skYQ+rnD5m3ao$q?kxs{eW^0JmqLXLGdJgP z{Kl*~rTo!cFE9m#i^cu;_BKMktDq0RP4z@_h-c{<}B>|)A7M9h68zF zf@bJ~t7t<*nFng7bKRym!UWVaZ|9r5-e0!=WyIoEPOp`4_`@lGFU|3tub>1uH5Lv^ zFhVyP=5IL2Jq`p!naW&?G(iY{uQpO!{ScM53e$T#UC~A*5^FEFxSDOI~B8pn7S zv_m@E!uk7WFajM`xZt18hBzIT1k-!Tf{hai9Gh6$&?@FZDV%){O@q6$rFk!z&q|qB zPmH&jy8#WjLVI+Xqr}AGQ-_X3h@;F`by>5^%B{y=;jbPCR+f8to$DOn+D{%Xp|47b z(SMzvs)lilnP7IHghWM|#tLz71mo684x7KK?q)EjI`t1@d@!%V?#A}k9yWeeFu-eM z{*A;*jvfOwyptaJ<4{=3$0UvxlPKFUAUP)#g=CW5gkSv;cG8>naCvzxk$NgW=3M&? zD+^&44)kqQ+<(-Q+01YBCt_>XBtF>uSbX2svUPE8W_9U}lJo|VZp!c1B#kF!@RRnEPP_PLBY3?{Nw3nIpUABWMM#PJBElkjbKbJ3>JL4`hVG=cSnmA?Z z6v@kJra>7{v&FIaFRV|2-HfI4(e0uW$=h?4d{(V*kMI)B7*SPELkPfhgrr5|@1gHl zc~!GxSbs;Te;Z}PPKWxVff#qMkmKt7MJO{bm#-rskP#7LGMiS>^#{cmx?T*q4Ye6Y zdq+kX6OWr(zU{@mhAi5?hd`Rs8;3U+r@Dd*6R3XFsCarWAUPBu3~(|vXTFJF*1gO) zt{fVTs1mbY`gxg@ttHeTc>(Sk1ac?h#;alRSGFYM)Sci#)F5 zHhyQqOb9_P_8vpb4KH#U>_q;^Nx-m16j5mo?(bT80cA^b>TFygh+BLAQWOo*{Ha&4 zdc`t{XVSBQJxF{+*~m``3u$Wm%bU0S(JxIA<|X)}6)%T?Z)O>H(`PmdM^n~qWX6EW z?}$a}B>0U*<^-U*zbTo`n8Gubc3U8mMoR>LTDOb`mk}i~3FOm8h2Ac4} zN^?>Ul8L3am4TR98d`eVd`fLC);U+keOd8V0%iOK1dc+&f(xQVF6z*7c>7q^x0t(( zA5#Nc5StSxUZEG&6P@*L$X~9$WOqx4GF5-tIZcc)yX&nb%VEX?`*o~AD>#C^9VWO` zVh_aiZ`@lJ4)e@5SAt9C^G0Yh7BWAdG@Mvg7k+(d_~$kJGQI9hAcuJ{TN!I!)n=W9 zD_LPd6j#>6`k`sqc`p)T+vmtwth6ot7G1Vh%evaBitcGj%GUG7^R?pZM%d7_%O6%( zSS7#%Ud_BsWLVgw`TiHaMp80Ti+l@i0n=CU1U=o|g~F+N5mynDag(DjM}Nl}$IYu7 zXo>R)X=tmzN8M{#b}PA>>4?Hc_U{-Bm8)2^<|I8ozi?@*RMU-D_tc$mt+%%{EId$} zU022~vDf-?_X{eoUq72-`C3#vCF%QnRI8`F+Vvge2@bn~1y$fXS*Bl6kBLU?l;fiZ zmV5g2EU&*pq!DKFP+q5$+qJm9L!K z*gxL%0*_`At`hs#{?K#=RuscZ)xn6Kj&Aif5gM|8L7Sj7s*uyY!b*9|62(51hgNk- zUJ+Ea>EUR3vCf_@AUraBMtvF+`(=T}Und@}27Y{!x)Kz&uWg-Y56mshC%J#gi81S# z>1=&=yt=*&^{#BMfSKM6K-&|3Vav;SDQb@_K)6L@q8BSkt#PHq+4wAYKjrW;va zZ*$+;pV*KgG2zqT+tzk^*1cPRU9h(5`8ok zH^!Y!XLD#AK7)|twwQTZt@oK7HkVUy(qf5?q0JQ4ySfHJ4 zS%)=lNRWx?A|)f``5fCIUo>In(nPHz42ey%{M4n?TfxBXFGq-}I&I9O@dXE-CL?u# z9rj9jML87}g|dQD&EnxPR`M)SrdOrQ(?Yx~8!i}Fe^8N;ENZrlES4N!&^RL%vAx%m z+(%c{iu$l0suO5Cb2saGCUY{fvTri2>-0qWtLFBAG$w$IQ*NUC+>#P zI&zvi;C(FbNOF=Ab7)F(h9oMV0Dlx_)Zt@aI$7rO+=tau!^W=3F_E$ltiLFg*}i7~ z)WgPQ#P+zWO?30re>!sy_yEB9k5r~iA859Jcm&@>90N6h+)J}oy4DU0%JOWp?6bbg zoNfD!MC_10cs$^Od3bmz5``Tv95V;K20b|6u%9{@>B=wm?(lDKZ)FHO*_nPtq)~S& zeJ5V-W7Q|Gye;BZbcVO+EAP_m_1STdfG+q466q*25to|BLT`n!YhOfoNflXKu;oygt}2y$x;RiF6eUb9G}d`QL#CKHwCZCi z$~8rFpq#vG!u{O?#p5=$N3Hdd#bcw%4puC^vX@V2qeD7H`ovJKfyV(KcD**U{QRsL zZDrwQnJQGy!En_#d5^>@81lmhhXzvpknhkbD8d_#b6@mOaN7Un+UeN(tL5$Z^V=~S zPexVTJud-5Iq3A~qsI9zf?CXL>|(xs>Fsbv$++Y=5?Txvw_GVa+V!+FJ10SMwK%nK z9+M4YAqriu(vPIHUK>;^ZPP~QBJu*YvlH{ zLn9p{f8b;Z&V+9;mK20K2LU%-hBxP8ddFY{7KZ9~yLLkbads(_Gw2CGKd;|}Iowbk zxjaNz3qY(uj5!}}<<{r=i9Koy(x&Nob0{FO{4BDm-IOjVQmiznw9L%R>aX@6#lgRD z_L?#)-lB@e+;tbljq=?BI(8yy{6S7W%! zcUrk@s@al_Y1Hh)>3M}6RGO#`&h3NF@I%aPMR_&()e$kM>V#LThwfROpki8FjU6^g zFQyHZ*cN2elb=m_ zbgYl2qqiuxVcoR85;&CW0j#3~0~=>^lj#ZVdLmel4%d9l}%Hi1sLIfU6j(}Zbg?2=7dJEQuu*rihjNG z-=Y=XR4*R6M!3FofBP8vRiL6_R>gj3cz~RebmeK!u2SmJ^g3?dx@!Iv7Eo?>maH;( zUcq#n?B3&HQFkGEM9Ta51|J`l<_{nH1dU1`%N=)TqPx~5Q1eRVlI>-DB{5ZlXDFw6Y-?hfKAgXez`reeCD!QIrQ5;I&B{V5 zdR4EB>F&>~KA43NXq0V~joeBjo#=SKxi{bu$EzqFbJd+3$P*L#Ui!P=Dcu~_r_W8} zn*n(Izq;H6YKs=^Z@dqdBwbqN6Z0RaMo2~nSmK7}Tz0|+XpD2--OG(o0_9)VjtU|LP^b72 z-duqlS6NxH8J~(cFob>-pYcSoX-27J#FQH;%#RC`Ct0tEEv$zd#({^7Zs2t>-8kP^ zqE$YlF)htZnL`vsSI*?}sepIaZlU__9*QA-Bsnt7h2jf2LM#q&0*6cjoV*`51~?90q2( z4Gb~wms~RkJVO|alRx!tT%?etPNVJbZcUibnRtnMeID^!9Bgr%*;Y_gqFC_RJ@RoU z>vI@wE(%q_Mf@|JcdtJf$*!wzW9AU0rj^%0w@*$^j%MIe&_Qy_Hr*RFN8qDl|W!9uvT=^vi5|N8h z?+QWAlMC5s0O>EUEQpElDyU4wbjh$jtNY@hqrD^{B~KX_rb9nAIAXF^p3$5Jh*q$x zirRTWr;lkcyn6cU% z+MAr2lm67*+rv%P5BQmFcQ^K+1>rfdv|gf9qz1zn+fzVC4VVH_YFfVtm`HKhdYguZ+F;VcBg}JP?O4V1 z2B*NpR+CI|k|vu*MC{~o{^FROQZ{y2%dTns(oiE=7trcE)1%poZ$kz`u&?$nryzP7 z6w<0r)lRh&s~-j$Hr@e$71$ezl~+wZ&bXkU_7`3^2J^mejV ztKG=mcxYRYi8cLddV8H%PZxlvhNqkQQT$<(hrDm&_eRoA1HXo@zUIoWDL5;JuJ6BUU7&fFx(VGMMNIm&5FJXgU*AuDp$T@`&Vc3DOU(R9<2jR zJPrObnxbRi@3sp)j+#6FolsRVB=&d}1kUC(GV9#b(<%h)e>ld>lc(O(+5N)cM@C?y zN&E8L(kSaR4qI&f;*Ps99L?Egx$SE0*`KQQCZ=os{R{(-e37mQB?k{vbyLoQCFgeO zkP-G6Ss-Ts8UhqrL7=InKC3x{{zcMGznt>}06!56kv%Fq0*2$R%M|i`KIxAO3IH1! zg;dw$Pcs1)XN*W}>~LMRucV?z&j>x17cIrN?S)2oXse~~7kCc$yxlNyp!_I#;`3L~ z&hk|LXCJ{Qgle~=Y^QhCVEk8<*JtgXEr3Bxi*sN@q^DDQ*}6|QI`MU(9BTpw zHu}jec>ER}+w5~`NU7C^PBR8oLKvwTy9W33VSt!uh7mHodi<1cwE)%;VdY_t{f%); ziIhz*`&+QhhQu{`p!wU>TZLbJvj&mtI?81bi$ z*wuSTvDomZb{(Idmh~6|1+Q4h&tAnfonNt(%UQ(DkF7>skXO$u-~?1GcCf_KQ!O<< zCH4dLC?PlBVKR3W-WMe(=|3)ox`c$hlIsB(PW5;B8sKM{!YKP|_WQ;Zt-iA$`LM%@ z0I(7JuPX|1_nYriMCtKYJtq?YiGYl|ihIt48V3~-Ui8zSn_$=yJCSFR64a*}(pd1m z64cQgXRwrXU*9L&;SFp7f8Rf^*AodHlLQ(0r@YVt77;}ly0RJ^#s6IYn-oYFCxbkv zE`x}HYOfO1+xE+J;i)|mD3Jeo|KFhi6IS|Li^I7NfE{q~Ts{YsMoYZ!Ai-D@G$5&< zT^x#>xBv6U|3frjdIKU#uQcg{|HH4&$Fi>7&>0BYn|@ZT}Nu~s^9+YU3E^FvZ6E!5F9? z2(N%&CT?axFJ4IA%Swo*7Rwegy@V^B0_` zr$5f`?eOLr1=hApgh-S`e^BgUdnO6{q3-@)P#!YJiq1k%E|-qSju!HZO8A1&O@>!w zeo#Etz?}8PlP3ifug~q9kQ*KpSa&a$j%$UZCoi_HI2ngFgg={`n`@e~_TG747CpM{ z$B+e&LHz zw6Wb2oV}~M^?Tq^ExpIoDZ2c>eyYWgw4A2Wkmca4;v_1$9Pgz->fw+w`C-{xoXmx7 z;zcUCkro(aiV;eR5XyilLj3B!@!I9M9DXb;kqf!B>-qU;H^UQZ;JTghZ6(7=Qv`nO zCHMu={}~?z(qaYNo)g#(PEIJugaZ!g!|WP;qfQMz<-Rf*bElSFZQs8(b$4Lu7( zlQYnex_MO<6&)R&9$i1wEV$hld}v}8E}Nw*k6am{+Y-!-v~4}8uFhPx+9ov)di7M* za5C4X*X7(xOH10I(oLo4wyGl{nAmsQA%DEboY^lh%b{-_&rY75wy;MS`AK#Mv zDRYj@(y;5wLLYFp&Mq-V9Qv%uqcJk_w2`YBeVdPK^L1WV??s#0_jZ`3rPe^|CRNqBDdwuTIyy*5evpJNXX(+>{`$=BU&?`ppf58GXNdv*H+8*d9= z%ik!yl0v0#*Gcucnt&%EHf8QKH?@}PHQ&r=`@qX4mOjdx>bP$iye91xEEaD>` zLbqYOlOnI-ec#9&9;LW=DotKo-c&MO$o*u5f`LN9MM3M}v>Qp=V5f!TkB#}+%v3qKUlji*+ZjY4ofiqWHS?OUtDS`kr zAz`V!q{QL`)gcj?FiRQbG?SZqaKY1F#Q_oe4sn5dKQqGKIUy;2F;#$;XYB|@)I`eJ zeltrMqW8{tyS3iDiSM(Uk59H--lrz7)4{EXIobbaWDhPd7=!(dC{LV=(B&|0^fbMT zRH=fV3xh$m2Xq-uB0kO2d-(x3Gv?MA6v0dSS-ZmE$6QU<{pEq@pRo>{-kyUUrjd~r z;zD9pqX)dJed+D823N+&2t$mH=+F!w4@+DVVE=PH_Dr=6ZD%Q8dqN>#k{N-KS~4P4M1~EybYXV71?<4gIH6 zHH#GVymK(g(D1G^m2$|SO4sH*^EpL=+-T?JUtHKL8v7u4N1HbRH7!QM(a zP^Yue<7x4tj0?40Y?PJIF*Mw8e_C#%QZq}4h8fR}gM;1GRvb+<;DzyG>j2jk&npMKt%g?^tbU zmUkq*ag8c7y!%-So}Ew7L8`#@WO=Pd?2V{)$J&V2jID?B5mjG(yNo{G!I|NYBrOq% z>}<6|MkI)ktU$8i>Wy>Zbnyw4;42)7&(_DmX^rDwSnHbuBe-^twMAs8J;9^seIh@)oBDGds{a$ z3wVV>y>6#x-fcruxHx|rcC?qyZ2U;Q>RH_F-(v2K!Yjw;__F%*`)Pt}`w#~n0X}|O znqKQ$&*Nu3RY^&++2OrI>==-WLzsEIhsAng%oS0)U_2_YKs{eNm$fRL@g{HGc5~D2E)nk*_M}H)f?kuV{V*Xq;ay;N~ymb(n%2rshRkAo@(cgpQkDv2<;4e2L}gl zAMb1$1{In^Q?LR8939U#3_aS)%QJRv74$Ii@$sdt;KVKDn@pc!RVIwNk7hme3ym-m zDH0!WVP&P;V&nMl-=bx9h|`xn4xjFW3Seo=KB9xxTos{)7X56NoZp~QL0U6YPkT|2 z=rS#$54;Fxa2t5)WmYR;vM1EOj>8&ElhAQ@w+rDX_xbHI#8PH|(owvyiX`YqB_Bho zn2gU1&7->d5TRq+R#Fb`hDx~gTrK7>v9z(JVej|iR{pP4mH!CEv zfWGHmzTT^sp}-8v>3FP3^y9y#SmK?EGc*Y?ZeuSgyFg(Yv4MVov`acU5u2s{J5_A)FEorSHEDvy36ucWE_VpMe zFlEVWH`$IGK7~XsB!6J+co+%k}Ek+X9FS zfb9;E^zyZ;(toAhVcOKWNp?1?ekf^ttn6>>P?>m20)qJX_%<1N8!M}>X}sIeXf9bb zwMTa`M^RDM@?-zsr9@xHU{fLpd1j_-NZ38ljqi%TNaim z*;raCf}nH^48N&eK7Z~-M+n>?9%ZdUG+K+XfiY=)&-5CkenIjYfiN&AsIE?yvd3&{ zp3gley>#*CsGR^ccjka8Szv7~M>4WG*A|h^M5DtGwSwaK#P*`1q8?`wzZ`NEDJi~> z0iB;&?1?7Esp`h|czNG6zIsK3045#7=ogVzRbBsH)7AOLoI`g*;9ZFe(fq;Zj^DPN zE`iFHIta%;_B_YcUD*PQj3q{T%k>o5cQp}*X(r3y)})#=pK@s zmcLrFsyf9JH--Ig?(;9TQlCQ1p--KoF4IGszNI!U4~Iw0A3tunSo_{1+!>uD?oDbi z>$lfCUM6;Y%+S{TuEn4iT0wBA`^(}b8CkZ8G|^sJSv3424wJ#o=K8=|DoGK$m~p*O#{+Gdx5-lcFQsWM_SzH1AW;ySh&oGSt+pvS?__ z{+6-hARIUr+vOP)$YM3H$-8YXrDVK*PqIZC=>Oc9VyJ9w(IO`)8FugG_RGOjTs#-L zcYgE!mnZ8d0C-Se^J!=0vPp&o@GQ9SP*UZs^VNR&#+x?cazBvtBhGhY`?2!R7jZa2 z+9Jfo?2C(1;HGci^bq$!r>3Ww4NSxSp^0w;j&VQpsCs)SrG&#ON{hoH!<_|P*e+~m zcgKl}1|R&_H{)w7|MV>vjPf{n zw8>*{h8|2NGq;bO@gJS?oJsALfkO1JLc^nf<2u8C6Pf+ovVRq|vSEC@{BXX`mxf(P zB-}(KaNxUM8>2V8u|Qz0wKf^@va_?(1*VCUFV*-8>z&$1eyftv7x5=KG)l;Sc-uX0 z8ya85eWe@h(??sk=<=J=s!&s#tO#Cwnp+?tGqwJi87tfLw6m0wx=&x$j)hIM;b`yb zqyXZ0y;2heRGsR!)vk@T}|6^S2RNg@*?Z z2&B->CUUND5@ayfc5u(%z}zPll7YrklqJ$FY~5|7{eUH>rQEzvqYuE9j!j!xQ}77?PtlTA%cJ@9?hi<{cIbz`v# z!JSXV*FCAC7L4m$nZP`$o60wK{#B<55*n|&VcNphxU3ECiC`!$w(RUA!F`|DEeMMA zObm^26_r0ck3=4nANkOj^RCu>^mElb-#etoq~XI)n6gKaG56C}*+mr-^mN6qM&UOC zPTo|o(y6_F^jhL21YkovouOsI^7N;y>it#Anp4ZK3IA4C=(e?-!R}H=WYop=$%0h& zCM8uHIi}eq*tu}3IkX>d`Kdlz+RM1Qv2k{gQhSYRUzYHisoHTMC+(WJmzrv$<_1yH zeZ8IN3W3b&?31Mp(RB_&HW0}=om_OG+6JI`3(YC5~QGj)^?us9sT!xw~=^P1$nOV z2jpIVyWs@vt&WvL9-{{yNy(g}=7eWY^lUashbyfb>(ZpCS+?D=d+OJG=)0}&z<9{! zP*ep<%G=gfu?J)g_0Js$a^Yu3WJtw@g`LusWF{ZI5gn@Xw-bL?yz#QnM) zvaN5Jv$hk@g9SYkc~jm%uP>d=&33+8#ci6J(Un-*6HyJyA^q0!F{_y~Pb|U5U)E5( zhkIUOf+}Z9Q9;S#c3AL+3mllm%7ds1egaS-S-|=ZH#vrgzR4sB)EV(Ua7>n23-qq~ zkRk=2u5JM{P+3K#sPB{=BbGHPN&$^T=mIgPVOiOT%LcJQA2E~t3CW@- z;`QowTL|P7-d9r8=L}FhrQIOsRDKUNl?m=vR$;P|V_8f>l?f%{YYr>eumV9DhS;Zy zFSfR~bN3DG?Z=?@`)0x4PVkw_Z|V<9U5*y*{-~F|4cQ-NN z$Ojo+>b+DctSFeXwI72~rF`E>9${zWW@jUV&ec!yQc@CS`rmO$iHk=`S#3)3B4h(y z8T5`V>?h8BZIVdHkGP8B;#Rwp#DO@oz8I3BrSoYaf20VxH)MlrZAqoN&3I(sjpG0% zS6tSyd$x|kO=J813WMXl4|70BOy#sA5boVOa*4{EA-KScUYusJ%tb1wr(78$_-F1E8TmMC>jW_Mb0*>2AM%i{>-@Nl^W=vXqVww0Cw zN?ozH-B(FT4NXm39i67)a5nR|%iO&!wB8gZUmmbhW3xXrf!G}@RF#z(7zJakOQCHl zjQVFNX(LQbv{qlU0nI=gIIwYX#Ss)VG+^W73^d)uR#H*;J&z$IzjV=G#?NRoM|fC# z25!gN*1X%ihIY=K$~53-V5J!dw>Bngdpi-hV+^sw*zaE=6>XK%_qnYpDHu_(M*C9_ zYFy|&8o7O)A2}1*p4y6}M=ysUXC^9rA|tZE4yRG)&1fK!-5&d<$Cv)gF}((o&CU17 z-!$fq_A)o)!LDeAu4pSOqfaZjyF5sgBqZ?QKJ**vzmd-QTIA^T_l2P(MuE*k5sKyH zyxgMve2?2f=VO!g+X&wWx2e+wQqrJ2%BOD0_3j&Ss5VoVlUDa&!!dN^(VPD;Tz za+>@`zE8w&zFS+`IiSlW=Aax_Z6@6p~D3` zBBDdfr z|JkzV0a%~;c_m7Tg2G4!^}~8*N4J*AL<8&Io=$mRtE=_O>P?p>Rotxr+3ju&H9u~( z_N*>W$;PU+$oJynGjmUdZp3GPkM=y;k}{K500)!iL3l0JfGnqkVrYNj6Ic{RmLkwM zE0ft{3_)oW8~Dve!>|aqLTzJXW6f1CGiCA|bU*EC5ISIbwCvg4wKU+;HeINa3n*GT z1~NRtI5s}93b_(p5D|GY6C)i|JkGg6N3I1=o(VHi*)P^kT%RdCSo)&KxBr^Q>K@tNiW>hZojop6gyb<-}C@yf7eBiYE~C0DskShi2}DVfBGPAPp_G zgM+V)(a*bGFEB7L-UJQEQ`MA~8vo)}M|5DNikK#GL6DV2L`{3FSft>2(YN~a<}RZV z4}7#$!tv_c>UJyhwod1Q$9y7+)pg@TW6x-QPW3+Q`Ds6W*pNL`LI=^|^vA>*3C437$oL`Rr{;PuLkWjT4NfoKHSqE9 zl=4Q}+SVw4B0fHHxer*|xF~v1mY7c%eZFCjVl_V!=x80?CedpfclLn_3{^jUzF}c( zCtkvv?5rC9hkWgn+S$GNDS*Q(*dfr;co*?3TK{i<{r4(G&bjAD%BWk)ibDx-d|5!5 zG~Epi{dXo0y@E#RdeJ*$NI>FPV%j~0*t(}p*cyCl78h#5YRA;O6!4H+(Nd1 zNsL~1IlL7cn_q2bx4v?pR-|7tbV;b$SQ)r1`9J-H6gx8|X}5O-10r|2G$E z=iSyS*JUFG$PtO}kMAs4q{ttP1``F}S2cQLbJvrihU=BUG`;II49jX@;qx;ZWw38B zjbhER+_G?gBqTQM*PW6(D_7r>Pf0tAP$%Nmix@ADn4Onn z|9f%I&B_(k_Y<*GPE6cxaVaer{}La-g50$|e1C00kJHr5rz+I+lgB`fo`H#pAJ?;~ zun>H?1M>1(ED~+vvRzI{NfET%{61HcuPoH*a>7fP`R98x-2ZZ6_pYn}XP52GO*8}~ z7LKVTUS%B}NlQzdA96rw%LPj$CN2-e&Az#z;0rijUteAQJR>~DEMWa`MRX66djseH zYIsB;>;nSgYiwCGH9b9D3^8Zt&cnmj-vM_Adwb-8XJ<%~IXL@${vxF4yU#6Ow)4%W zF6n8-KBj~L=xbqCk)71mp=+JPnGba81Ga+EO=*QLq(TPMsXm^Yrn^s6#^kj zCp^+&Ft@c8Ra7(pSrKr~Qc_EM^7C6^VdV}E?zgsfuK!@OeC@#FF|VsT1u35IUeC`r z-&c$Z>bmao}|EhH09cEuuKXtTN+nsWqtKe!a^X1Ub;JS za3xko-5gtRxh$q!Ht?ni5lE`_nT)=>lL{PL3m8X5b(sn+zIoGQ6t|<|>Z=L(&K^p$ zQN=b4F-$^fgsmOiC$BxJ-EQ>2vGpMKlSPGYhx8s}M#Fj$@>uJ|S`c}xvXb}=HdtTu zUv|^{bIzQ6re6-5#0h39NNJ^UmUpw>wuB8#g)Y~_hKFm@v>>1KiDC%njcm*Ym}xTj zyj5=E-ze2MU0#4)r7B2-81M#6t%sL7TuU0XG6Ox)x;}0*>sD`%=W+xp+uL_A!O4n21YQafwx^FZ$ip=Sc0vX!PounhYKv3b8NSkpqc1=G00M zsC%N4AQA>q=&pzaJUJiw__t703GniC=xA5SR|2jh2?T{SOu1ksK7Llq$}}OvrrCuB zq9P(SHa~FunNqy?#GitLI1n&{e&&{4Zf$EIzuoxt z8*ksD{jCBLk&Ur&AiAX$mW8P)J=-VYbRl6+s&VtnasR@CId}G4su{!sG?J%p9;hPl z{~|j?Zz21s^O?*`A_yo1cNqZzOA!;S7;)5ripUrUbhFl6A-U2`)BWKVvacp{H^Dy~ zL(M6T9*-LD$#R4LxNVC*KA!Ya?;q5dee4&>%ncn=*O<9trMg*)?uZUQZ*niX?MPcb>hP0LuycgL7pt$A z4i3e|MU2?-YC@cBoUGM#>syGQP5WRqOAb@wlccH(3n@FRWSbizhZjhW}SUK#TSUik-Q^RAu zUec_<@buK3Qflpf57awRz++bx*Tf|+EL^O*R<=spe{N*Qi|ldA{R9auHz`ubPx|h5 z)wz{aURsF_!Vwr45cJ_obR@;?TYhKZ+vt7$(nlo>5;g6gGI_~+rY!9(zVR)WIs)_t zA$u!ghnAcKFBm%s>3CU5PEIyA(LJDdBgO9C5+zE?@I12ufQ$J1AY;~)YTwxCXs)e~ zrS*y#;nghE^>{Qi3@L(kyqq$#wMB7YvzSlMmt1p-brvfamdfQR>{JK)`{^C_b)}^Q zl8?|U=ZmNC@cp~Hx8Jf`5fPvaEmZ;`z&-UX2+Y>@lTc znOTis!MJJY;7(SrjUeNSG~ zuwZUM2C#?Qu4|u?O3Waq?UcP1bqHw22P8X0$m#Xx`|8s}=lW)CB(Y{bv3HZXwA3n3 z`}NqVs%TJD!d7i%m=pO&n9Y)`luotNdBu}U+Q3xhn$FuBkC9~j{IW8lq(36g2{V?> zeDf=Zi-l05lR4K-TQBmhW7(jdJQ*rqVP>3&xp6Wyxw`s6{-*i)?x|0muO8ZZBZ+P8 z>^7GBKJ=ZI%-GsIopnro=1xh)lMakI+1(Ym@W)KadU`rh!jFT*T|dT7Zh~^h4OE{q z($h1b%sIzXC1ncfkT{an6Uk$AnI=&nMgCfKT5rF39Up&pZ~sup?E~uA$aCSu!u7Zb8}07^uaA$bZ&$#-1lodw&r3yo++v7(^Fhwn;L~pw{HUc?=IO` zX=$;Pl|C{uDxju$ry*H`jkS$ri^{Mob`lI#a<*}dyv6O6SEy9ZbEhum`HVzWWJP1| zJQiSFrw~us$u4ns9CJxI{=+CD-r<$LxaPQ$%0_iwovZy+VQ$CI_Mc&K76jZ!IbN0$ z1(U69i*NjqehBmN@io{kfQUIcdA%O|vi#=xvTM}rY;1U)-oJMl@`VUFv9hxE^!Hc# zW*P2we;0+jzjyQW;xUnx{W_B-ji95aqlhP5U8dl*Is0L7MgcgTu>=3DTEBRC<0m-G z*Rp?Jef!In6b=}_MXS>tsq4LCIIy7N&W)>^U5!#8SJP3e3ae6am&E48nC3=zl2?d~ z7wwx$PS#l&6X6a0+MaQYk1T~o-_eXpe7}~f6N@Dklg#1~SlLcSO9|Nj2AA_DJ^@RT z4kiFH8!IX=+i>ke2vn9d<8+>jy8t`)lT&c%DN)cTp(6Z|Lg3}UjBc6hku{AUS{Qot zdB{smZAOeU2hsx`-G9DehM6AJx9u>0l0;aFQu=gpy3bi6Tvf}maXQS%FkJ0)hK$UU zh$G>Qnz?esZEbBW2lDktZw4@%!8VhRGQMm49U4i&gmvAYT$;B54*SEr*_8*6^d)U= z`i7dl@la;DBu2d18LefpXPN|H!B>5KtB(vwuVmrZJ9+6V$I!9&Ga`BY`2Xr~Z30Fk zrj`}0gZd^+X<1~{;wTe&7Zw&cb7Uo-TkH=ohCcbHv|yBt0_(^Wx`Pc@b%=I3qH(&KAGd@IG~78k)| zzn&DMuQD=htF;l1ezjNFF15RIlf^#dCd;Exsa*;aLKG(_CMbrYmP|vw0iIx-Ok8$M z6oHaTkeHinu)ABvFjGxe*ES2!YBkF~Jq%5!onHTt15IDd?d|UeM&hp@A5Zi}@!-89tF<{uH7s9>Y&j>Trw>Ve zlLhxrIk)vw)If>VV`bwYjo~3}FRrT_2n0DRFhVE%Q$r&ggTrr;N{X=7c}BNfG`Qm+ zYpO-HAqfd6T`ct(wljiarp#zkM+N~KZkjH(nl8sdhPK0D>4!(-Ar?lOs`=aev#?Z| z6l_=M2@66Ij@TOJr>dv(?bXi>XDjbCt~gzsovpDVaG7<^AC|k5n2Fh0S%G|+Zsiwj z+0U%hCOgomO-Gar;iTgH{PO&KRI*yfo}JXxRG>q8UNoH9yihu>sat!zTUc^FXi%Gs zHGY#obuIbMV(d$8a$HpoaYPHZ?Q-4MuEFcK7v6RvhU>)H0NKwhn^%?Q^a5fXAv}H- z9_6i=GAvlh8zNNclk)_UI5VlAm-}XHR#JiLbZ`D8c5~kmDNxlc!Pq?k<%nkq$Icg) zQnB%4Yj6r>9Jkq&-Bwp8i};ctcfBVX=fGE>OIYVI(AV2JIdZ?9KS`D_{*raF`8g@^ zvUVpSLE{shz02VUY*M4P#j~Zw2#>0;(9z{k(6_f1%feS~gmi)lFL(?4y}KuvA70Lg zOEd9f2#TdO<}}QiKb_5ZqH*=fJGS~=w#Dt6mMfC{V|8qj%uNCo)t;iU^LuzXjNhb< z>cu>?>wUBIbG)~#($9MOY9;0VA?;p!4?y(OFJx0Kx)f@)yZI#s{Vb21{^#vYzpKHh z*F+FTyAUxDV(uRhC}lRu+)jaLthFyrErDo^UynX;tj5BtCprk}9z2ITwKb%nqH?ri z_ud))FO-deE^q^)vvSxN&j)^GwRheHb5*$=_GeR?ZSCoF`#d`!qP=}{nI_~uk#N8b zcp{=h8)p6cs7P%FJr2O9-Sog95ImQy-Vxqd3>7sY8CfWy(5@hUl*>^=V+N1{ceD&{ z2w9j2aO-`QH5>*M5QgzI9_2`dMC+)$Kfivn;7?X({5H&P&1q1C{c80vOY zRu)dADrqRIi--$Qr(1e%+y8(dOZ(Lfs_`9x0Ka9a!}ef$$aF}`c%cp8Kq^8_4_<;h z(1?rc^LV*D>1fF9mEQv{4vZTi2<20`D3C9PD1LO!KRtDbNxym-8)NmAlG}>vXrreF zT@0xG)w}L7^xZps$Cp5dOs{ZQsc@q6avmhtoNHPex)pNjLFcnonhJa_r;o5xD$)D1_H6yIv{;JZ}v#~JtO&=DX=mp(# z>oRv>3|BW(@p5h$s8-7@hZlA+(hM@Y4V1G~%#@Zf#E?8n8D`cz|2pmd*%wa`h57*p z`-9Z+kHy*9THD8~o4}AM(jRhpdiBT4?MK1@H13#m_&)GVPEGMtW|BY@t*ote+g#H8 z)%^qR-QAmkwR%r@oAC>RO^-4{=Yc{mRvAP?irO8#E{W4;pw7krdI2i2gj0_MW0{rC>xP)ku zTOeUizGt*w%&8Z~Jun{ebQkdsx5A*sCoNTMHnQ+f<#iw6w_2U9MIGgW=h^A4ZOZZ$ z5S<+yIL0hM_N}$G0*prkDK)qW&wsFogpodQnnK%iahVKqz5a5#S8XWnv;36if|{34 zj3V&J|JX_`?ny*K%9l~z{$snk=KhzU;(x?i|Cw(PEx7;8;s4c+g}4%cIq;CNOg^HZ zpbVbk%7}{xSbY&G==h_*xBun2u464iB6mD8s!^UQ&apoax+d`ajy*-*9kvKPQNPO?Bm3+i?0O0DZmkQYg}G zWn}Jj2y#C-NKeC!KL+*n>i+|U`AYJR{kUbPFD~|Ny@_}mfN}bClhy76<|FDm?UpVo z@VWcYRSCp9r4_3QTdalfd&k)CtAg3Cr z@S}|XMrQfEh|fDkRHA!>&wjzd!P<*Y;)gxbF_T42ftU3)DZGq}$yT9%ed+Ny$!JPi z%9H1*fMt5+J(`+gMvKUj^FXpyqr>G{)Pn2G4EN!kBhind+?qH;ZLjsi+g_^iUX7vG z*c$NB84_#&)wS;azUpjv{KXnm#p;5B1S$lCXcc97K^r$CE!R-PcB%xqrr@{l%oQ89 zb!r=27Zn?QPm>J8Dv2RNTaTx3cej&!7m2X?6Qy+bI|ekeZrEg+ut{-S87D*$H(raF z$D=x5QHF74a_I12=kfOqI%=9eb*ZrXv6zdk5NAW$)Ds&%a__MXK_M;BbdrisGv_gC z_bZBXVCPy3#k9liLy>|>tNp;0Odd6L)vNsuYCqI}ilS1MiP_h7)2HF9D^$L0+m~>i zq87@ofvmgWU~REdoyIO%EmiH4z)vI#W8)t-&*}P8GA`Zd=b7j|?ZG z$#i*`&j{`kt2s=HS~7P$bV#jA7&jq)PFp7$pXOM*egXhQkj+mMF>po#cC<6o2Bg?us%3G6-tLLlwx)dBP z){ZP5`umiM0?*HWC+%IVlxF^DAD3g&1-?%A+8|^D%{kcHmpFMWudA~$n3@`h>pc<# zr{5tmd!>955BN$VFE8)&a1Zf}>y1uly$rZC^q!=`QBwlT9x->BAB^u^*tI{l*G0KW z&?Q_wY#3aujKWg6zaAE1?J!ME!J7weyW?g7&QF!}AN zJ*R|k+3%8#(>*@5>b@m6ej~y3t1WDn!XrInngWxuz>JW`LlpxFlam|JjhVmzuhY|6 z0s;3kC&kTeyad{hwKv{Q7q$sE-Ibzn@=;ODh8?oJ-vio?Y99RIV~DxA!hD*&P~v1B zyakFxyG<>-DJe2q>?O5VzNZTCzl|C~KD?t7uLASjiX>V;mQkFtkzg<&J&vpC342b^&+E6&#K+Jb$v%oT~ zXyGB|!opHITC8}aLC+@#<~zHBf)W#>WsqLPXIReq#D;|r9RpKY8P@jZ>45wq{Zq!j zB~bq@zHX(+iAzt7O;0_QrYCbeyZIRWnpux$$3XRL(&83qt;)wG@Uzk2Y;0GlI}WeA zmn7j<8goZh@7CS+!im#uP&FvfXm+LrP5Gnap3|(!6X(Um^h&%q6<#nf4gQ@BO93aM zDBGx;^XFR?Aj1woTVwFsWn%9|eFy-^vIAeINGHa|@OZ(W7u(=XP1mP;V3S=Gn59_a z2#_}W+X$$TJ`erGNRPuw_67tmpG^m(RufaA2Ai}vA|i^9VIdcFI%9AMQud29M*>`?UUcl3>=Z}P;Y)%E2iPP~>27_6(OE0?Eg$b2p7BqYHxKbhY8ams(t zf5T`jlR)+7^S0fjwaQCA{;KIA96g;>EsdEc@U3NUTspDO zV#L#enc2>h=Mm0X$5L0{9`f6+u92Rp?k_i4*S3qze|z^oVF}f56eP0aTSLv;B(3zw z;|PEREs0FtMCqZ0v@g%K0LK(Jha3ea;KJVQf?bU7JA|`U)$}wCWc7=+c4t+@jKmk) zB%ng&@o0G#X7JZ11VF~@(84|7?Q1qXWE&esOJyc*i@xi=5Fi7a_tS!li&Mq+!XT@o zKJjXV|C*)`w0XR3ZQWhhP<3^F+VA!wN|pkc_uyN*T-oT2!q51d7t$MX{p08J1W?I` zKN~$a@MyG#+&anEsb{|f`LBP_l@xmm+>-{Trs<*GkIPD02-O|GMc>N0_@H@tg zpHyyB3m=J)gC-~r8*qC?B=S6GUA!PCc9W0g)_kW2h;-_PrRC*{PEPF3Arjq6Yovj9 zjXbpB(dX}wP%d~aeLtY;#q=1P3k(SP-p-GGgWHx;(7)b_z6+MJY}0zQDsN46s6;$Q7afYv;4u97q5d(y z-=Bf>lQOD=Du(m5Ty@>{<@vdg+aWwo+<-CWiG&^qw78s+@OY?x2<>`{`sdQo_Xk8z zm8!6;d~Fv)d^Ej7{?Eq%R>$2eKwZFiUNY~Py}R>pb#bW& z+@g|P)1M*d!Kn3P%4h;k097Og#}#7OtHI#f1QX)Hi5+_!Xc!$6_QTCNGsSz%pf$q! z$_yHUb^D9>mz{l+g5bkKC)^5wA!gG4+`I&2+B`EMN=Ku+^tFH$afCP5Xn5#&A_9KO z504=`Oa|FF-$4|X$7aT*jng~3oc%t7As8nIyZ!8u&w}=wk{$AzS2Y!`Bs2_6lx~HU zZZnB>K;k~$M6u##MUgI{T3ep2QsO~#WaQbPMKZGs6^)3W+j74+YQf;b^VRN)e@ZJC z@R(=C%=9=H#~5|T<}SE7uSsWHZQaWAvvLOvR=-(`Y~(Sh?99^*OGSD@W*IHey zsI5fRLs8w2BDUK=xR@#V|D`<+bG2h5TAZMmJ(iYT^(X8<=7Ndq#M#qxH zO-m#rzIk1sI}^}nq!h6t^5F#=VTJ`uH8@^s zJ=j?+4}p(EF!-;0`k3huiTK$B>07c2e^$wYcMN`HCWSPm>_zw}{YyXqnR(0iMw0UA zh^Xcxb!N*SkhFzGf2AmJ3ErmeYrz?1-}Pi)BTQK%hp@7`gtoG}b^heC0t>4V_OYGD z7QPN#Jo~L)g{nq~t}5{qFzW_P{Z8Bl^;Cm4563(|_5T6Vy;fEScenTQ@6z1<%od#u z79)~!msVMd&FVlb!s#RvD?$vvmsd|=)u=E1%`iS}hEN|XXnbmpMF z(fFDw`bSd>qock16Ll-0mJV1OK{dh*wAeq*gzD&T4va}4#(#k4| zkdKACV^zbzdV4Zmc0;O7SZH%*;glp2t;p`nFg;Dq+m@+$D$V;L7QD!@s$Be33Erj$ zjDVF%)2g!@OJd(WUw#~5O*MCisHQ_t4U4O*vyjhS0j$10`}gBQ_xfOQD$t9yZUuoS zdjBZ~h~WMcnFKqzs>a6-_?Y2TA@|E_$!f6d(72lLk0>r6S9D}%%;wvxjvobZWA+Tw zXODZPrsx<85`a8IAdnzRvnpXjjX7!fIGJe3U2OA#tZGVsYj7yt49nO|A0W+|Nr8Rg<#xEyL8UFQ7kA{=ekoiD$Szkr5=$QwPC{3twX_NvAR`u;UJ}QI=Ub!R07*<{7amDtb?z!Q zlVEgm*h3RGa9e|_d87aqEHL&(&E%nK^fd%V{3*L|U4v_(`wOzV4tZd5q2)TxToDDZ z{rc4vmIZWX3Z|k|c>9-~XaRZrofZ>dr2@cop{Y3SmV09OQJVCn&sX(NW&MGt&BRXS2jsUYJ<5qx5t3B(>doQH`QX~RiwkgxRdc)TfFN=a|Id<=$+@{A z8hH1jua?z+WBq*sK7PZ?*cp0pxW_~oOzSr2D@SVfH=$r7g`90$IA$z};toFk6ykwl z_!nT*D&T+&GxhbfDjqVPe{yi@AoJzcl^yxs3;vy^xkwu7TBc<^V0FH3ctynWkF7G} z$oB1{Z ztQD1qm#|&XE^jloW89vzg#Qyy$Nz^PtN)h+dExl-;_u=qWK+x8(b)+3$hz?kC}n?e zNV4{_{buHCf_{ZffqqbY4c}H6^e&(IGB)QLvbEl90K5V~ZOVZ0YAM^GfXfQLI4`i; z(oSviq7Rze7X3fTXtE~+Z{wMx!zw8vVrb;J?%u5;Gkt1RIJ@4i1-2S5j8~Q?C{Hm-he1-%arEp5&JP z|7W}Yf7Gu38mEN_qe4jjZ+Iohzq2s$|LDI)NkT@^!0oeTCNKX!%4zfj`wAX5{=44t ee=eY1ju(d*k0v=6u62Ja%1SCql#6}#|9=3+?Jc?h literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/currency_converter-light.png b/testdata/snapshots/darwin/currency_converter-light.png new file mode 100644 index 0000000000000000000000000000000000000000..aae47c7a05ba4b0eab271535e9d0b2206e9e0a60 GIT binary patch literal 17339 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/earnings_calendar-dark.png b/testdata/snapshots/darwin/earnings_calendar-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..1f1b6b58b4f89a4163bbc836cebed8e410e794af GIT binary patch literal 25608 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�cA`PYEy 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/economic_calendar-dark.png b/testdata/snapshots/darwin/economic_calendar-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..9cc7adf53c579900860663da781258e99f758167 GIT binary patch literal 30226 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/economic_calendar-light.png b/testdata/snapshots/darwin/economic_calendar-light.png new file mode 100644 index 0000000000000000000000000000000000000000..986adf817f54e0cd6e6cf4f116c685883bcba332 GIT binary patch literal 28924 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 CLX2ks literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/greeks_table-dark.png b/testdata/snapshots/darwin/greeks_table-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..410b61e504917b9cc78f71d340ad0072d25d1e15 GIT binary patch literal 36492 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 T{67EhL6i`c5h)aY|LK1LdQ!R` literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/greeks_table-light.png b/testdata/snapshots/darwin/greeks_table-light.png new file mode 100644 index 0000000000000000000000000000000000000000..44c224cf024e3fe1fc223f47518708e6d42f1eb4 GIT binary patch literal 34452 zcmd?RWpEr@vn|+SSg6=E-qrIq@zhZyTrhjT_k*r+)`D%c$Z91-LP<9becLA^Qlb&e&5VNu6{AiM z)0THYVkWl{YG0MZJ>RJ9L9|lKHVwz}z)`UYtAyI*ylcejNw)jWQ{SbR+6U8%k@bZX z?+xuFQ^lEUBqsN)mYdN`^K%~OgH-Mbv9_BGWP()F|MU1rGsV6k20<|WKY4s4gUz$i z>>YB@fDpI-(pkyId6??UxE_=NAtdOkKc36!z^%=bGI_px+el#R*A=KTB}9!Av7{E3MOYL{*PoZFFz z48#b$JyWQv8c!Y021owUUF&SKf_~<6OiI33T2OBDQoYzBODh~Yx_t>?{D=qc&RTlr8NIsx+r&oLn* zA1a*deY^liLbG-bL$pp6WMN~+$IH`RVrwmGT7dFbb<621!9uM&Fi}V4<7jaN zNIv~EuKO^rqiZ0D2!Q>%v2ei5&HcSS!TsrUw4Ie!{qX37m7UE+gAOTH`rQxK;6G!t z65aqQnKpT-*QlnkkwY^iU4=9;tgoGj_Ywl+5yG3r;{`bj(`v))g?w zo-&*pJJpkr^!*P<2&jnn;*W~S%QE9ZFm8Rbh#lkB_a4 zjme;Y2qyV@HJHQK3&0=~b$V>oYS2mYVGfwE3~f*J`Qm^sl7w<$5p<~Ou>34-G0|#s z*Oy|B-o;I(gQzRf!pUD3e4SDeda4cc#n7yOwjYdzFFt5by3<;!99PGYoee~P*${*S z3z|{E8ymkm2|C=V3i?~szZh5aJ*lzrt+@u~;Wa{mitL?LN*B7-^@7hm&fiDHMM|l* zu#jTIJt@iS)_eDGswOT@`v)iV8;;aFs8}v%rRkzvw=TE3da$>5vA4JR_ip0%@15BG z&%Y(ni)Z`A?UESolBLR!f{96>`Af^nXleV}_hmo$v0=AkMX3{uTe$2$o)gR1@aCM8 zv4B?!ifPF+&4`E&-MM~?sUCl zbniQD@ZWg5wN_c@>{`Q~<>TXH(f991NAA=Z5nUgzreKkSt-9o(bz7wpmp`vxaB&}6 zT~9b{7B>fCvzbyyOO$mXz_DkJZh5`knq{0A8L;B#xLaQ&3M2$N?UM9N_)qy)0VC;B zp;0Z7=$)U*pE)wYeV1oQp0Qwq+j}$K>;*aXaHF;pmn$*jt-`9StFr5GM&%vCoPmK? zkS*REFlJ=xBs1J0!|EV_!eSy25fN`LQyRaS@M;!x%4NyuwVCyFy!cyKT9%yH`^INV zX4xoBKm`hWf1K>^G5e^Ty=8d8C$9`Se)5yXZrZ|Zwp;5TNvmwrI2C692Qd21?`r=Iu{sexJlZzoDni&kN zLiWaUH&o zot>=4#^_4Q6A7lot<$H`ihOSaWLMAT>3YDAD5E zJDwnY!9e;NS~8jYr3y4dG{m~m&(n7FlXSvAQ&~H1Zx=s?shKCUnS1J{x*#g-zsKzP zLDXoJJMIt=^9~P>cxx_XdR*~LjM=hi7PMr!#eghAQbw1<@wqbj{J{CbQxorkc%J?| z2c7%7fP{a{hj2_F>rZ61J@PL^6I*W>S-b6!^Qvyey;%KdD;)#!YX<={i7wa2{X z-AT+RgN=)O#%=vRn(9mu59i^^-C!n&dF&oP>q`J95TcZ zo#LJL$naQ2os7&!F+hV(^XU!wIBU%0BY32=%vu2>liPgDQ0Hm^y6^i(YG0r4c}6g|`#CQ2>bzf+v(@nvV31<|dlu&04Bw8T zo*x2Wkl(X-z5o2RPl~Q_=ECp`dVM=v1|O@bF(yo6xT#Wy1;N7V*x2iHBPV*WEdB9& zmB4R%dqJLymYIi#?o7VO7uRgEdp}}c(;xf4T(JXi0 z>YDuXW z=t#|c*Qfb;>2Lge!+%H3({gje2%;z}qt}9(a)n_gQno&U!XmjHk7t+k{XRv;#7IcD zIo`|ABucF{cx(Il{Yj*?6g*iFBj(RYeR2Sd=H}HbTUK&(eEgduDK2QU%c3(b*U;-( zm$vL3n<2}v&Q;x~ElsZI!|z??<2|X({UhQ755!^n9RA0E;A^w{pTHJF!>+Kt_o|oMpmkA|oPViK69X zc-Z^b-3mFgc_6a*#!|lyJ^k&QVXsZQ{L#>aXT4z4?EfKnd(~4@Bfiwy>U=;~UJ~c) z^k8V@fGv-3?p0V(p{t^zqjY`zH&}XoUGM1VQO=4W=1=Brmyd79kXC?Hfx?_Kfyg~~ z?7&+6H;Yl6mFZ~~xI|Knq@S24CtGhXAdsf(tl zyzkkZ-TH5E&(6-AoS}d@fk2ez17+$}iAhPgIEOIMbn}KsR2XpKB5)uoYU-)^c~X8Y z?gjzvrPY>B;M@til>NQE2Rvi!?5vh-IJ0%?gj66cI=EmK(}zZUR=wTKSh|06tK4#@ zF}!BfO3oh$@tEF+@6~m0UCsxWhCkG+L=MJvHL&Z`B(feZGu!}u!(XtEadsl#xV2mj zMO8(`vo)74KVR4S2KTd7@4I1kYinAh zP-PmLy&Lmv*{4h)K@_;@%Oa-15=PQUp$ljkxOg#Mn;|a_}lwS zANr>upU%*j7`FxZ03u$GP||w<8)WlkIz2hzX}&Ttry^`iHj9ipw=|4sA|hOlQAR`r zXRrD$LWJ;cj?Y4L`W#ugy59AM%Msi)%x(-j-JdS&*(-;m;e?RD0_RvJ{Rqh9ZjyDv z{peZV?All+?O**HD3))w+9@joj!3`~#Ph@a`?Q6MGdz54j;fPGwY2OL@3$j_8kgS1 z#XLf>AN1^+Zvke-aMaWz(ae&qa|~cmRW2SXcE0V9)0fS28|U%?R2_a zuT5Bjg={~t9wofQnP#Cx0dF{8?0%v50|r?}me=0I#Dj%-e=TNZ5upn(Cqu!l`Dzqe z+L1~;5Nx0gBD`z*c8i&-!gYzqP9d|Ui3u!-im`01g!*Mj`L(g<=flui(JW&CbVUzN zoVsfA>(im){Qj8s>MF&{vsZdr8Ul_5p(|aXjIZKaTXKt0pH(}5&^Bj#FPA|fbf;2* zz?!;WVP{VRkwJk1)%(LMRB8Fz7sTvSA(RPCJ^*3hHrb;KSM?sE*TDV(09?LuJbg8_ zvd-zLn7D`t8bpXkqXc57h+aXVh+SpCz>d?`jP~|qmQ?y&)!6M2oK_H8Q)wQ+K(o!3nkU9E4R>M~*DUY?+*LbO?;IX?;9U2*;A5X zDt+F0s?6nCbvdjTDzmeB(aSYE`1rdFCUd|Pr%?Muh4?m_3dQCJ+TArY4p+Zz0A2;i z61K=f2xG$P8}Q%mjsAFzTtc->@b$C!wCHr2PuMdL>;TfRH?qlyyTXngxY1|xzdiiu z9mrg5_l(RnM5d*cuF;53ePVKWiib%>p2*@Y%Fic6!vm6>+wON^7p}KZ*D@29rpT5^gt)jBMMX{K7f8}0jLR)hX_f$VcDLEcOnv&PQI1LQ+H<)je6jv!eOHs=ayI#>I(XXl}9dt3zQ2%0ZwB{emQQdZm7-Kv>Xpfr{e zl~#|dYyJ-jO0H*q`;Vc?>Vd*&elhU@$FCWv9Kwvc?Gbs0e}nxxydG9tO}#yztg(|n zb)6#6Qc>v;HOKc&Z#lKNpPRhavf2Ra<4X9(;n)Rr5--XC1rjSFdn+_l29nw%F!qq*9%?>pkIuXU$-rf{C3+ab{=E~0v z;7sT<+cuXYtM1y1O5HAj9IkIiG7b(F%MCY(j_`AhR$u{!Xjn3Tk7Xn^6ciLL<`-*_ z`1oGC11?-$HLEt-a}_NCk1F`=XY>4*&LRbB?XE5-Hz#MkjCj7{ukud?RpnUv@5i45 z_2om~y>bM9Kv$STAFcd3f(JwRud&JwhA?*p^`HI!KK}pz-&IM_Y9A5uCqz6p3&4ig zwLk+&AedOrc$Ht)E(@fwe9I6|ZPq7hozxH@i=*QiTp7qGgCJpR^cVm8PM*r}vX>WV5m;{6 zK)Aqwz#P&**suuEpI-#A9Ibt|$}d$EY#gyMF{?#rv@m?&Du`_xHkDK?8X`VRiPkXa z-qK66Lz*P0VhP_rpofHqnWQLGU*7o0zo&SQj}B!5Pwq|^nfQwVi2pnu-8n@_Nn&TF z?(=Fo3KV6P@zoQc3JT6Yb;@E9aI|$awB&b05A1x7!)XTK1webdga49?QczG)0>b)? z!f%?LB*7P`C={jNN|+@o?U4U`1|(oM2!;s$pV8UI1`CPsKWWIs1iai3G12vc!8>*f z5mckV{P)W>tnJCufomKVbf(ZTJ4-8txygA}rUZ3`fC4H*YAKBfw4}VCe_jr|yHQK= zC9f>&Y)r4_#E1259-V(vLy z>2?3dMR&I$sg5ZUp4oa>PQs=P>E6_C&MGOm+>lWY;1hbH_XW+eV74);@P=>ZVKSRzk`~>3K|;D9yUIF zp02-Ce%@qZ}vR$oMs!uxd-YYgNZuIJMDtccdQ%ihI z%pbJROkXIAG&Gluh)*o=w0>4yOiw)Y?Qq}6tUv`L)#+HQzn`DGG(oX_ zLUea=;ILcdSX(yCZJThh4&`k#e)91vf|^_4^tpU5{WcDd)$H}cprxd>{6b8Au)F&- z36V)~@bbdglzQH5ZSGPfg2WOa#KP9dnnC`}*wpf6h;r+3k1{H1m3L7z(Ovlg4MMVg@me^CiF3WoE59y)CPje_wyUHPKyp1H%NIw}7y z(|gu~arY~S6!wefJN#x*I#bg*+Vv$XWd!v^uhC|6lY2`<*XrMEZtc`f`x z)rLkBhf!_8Q#g9b!j0cLeg`Wjr~TWrY%}4dJP8VHT6+2w8YyvFV`F0s64DRUgd{ic z7n>!tDN8}h7=QOWsd3JMn00@JYS)#*p3vBJ07oo3<0dqa7@gRd4`i%L!yvQ3!JRX0 zBW>!lHyhM(du0#~4QISEoV_R?t&nl9HG8@Os@Uc}fQ9uQ!5a%xg`}*m4ooxM`>nR@ z!9`2JTbo;`{V`_RQHOquZetvwY!-bW9 zW!Y<)GP^u^GQ3=oVq;&J|D!Kf)Ag>?&t)i+g#IijFORgw9NfMqHXvBY&}?7cTIdI$ zTyk(!n3pGB^{~7 zUhnVS#N(01Q+Ixsm7VOJ$D50oXC;RAX!N zAHJibGHqg}ySp5AI{e;^`Dtm#p~Rh4zkfd-P8l0bXlf>_sH)zdE*V-_Z0?`8Qm}pH zeak54RebCD6VxluzZR8@@-+OrAXAgzkQnEX-z@6A^^%=~W8PfuW71RH7zV0hm6+Jt z(9q6+X?$WMbmCxPeqQQ1;@-FOptq@{Ii0V)!)WwM3!a{yo~^2K&p5oh;&XVwFH~Gv`NwNnWhnE{{J0pv=q<8-Z`u;? zhJtbj2vcmv`}B{jk>DFma@jS}_VFYMa{j>Cmto~XjsEkMir?gZ{erN22iP(!*K`wyjrZT8&%bnHWG9gXQOKq(dO}Xm&CN|uo3M;{@q{NQ{o>+U z-hr$6%FS(RmPyFJj-n2N#xW5h>+C;1!NkC*)ETr?;dcBfGs~Zb*TO+lU=(Z8Cc7#@D4=i zT|HVvHinFev~M$Rw-&l-P2zs<70=JmEEM6te!UW6y94fYv1w6BE-Dtqah`YmK%=6`5nJEp_3%bsCreGHuo> z$G-UJPwpfnQBFNR#$!lc@#TD5&_0^rCz5Tfc62Y|WM?n}s_ z`qYjXA9Z-(NIto~o|Tzd=d>5GorlKTF?D@?4cJ0ppc-0wbxF8#(P(dBo+8z+v$%A6 zx>3if-wFy2<`-EL!otG)Eu(*2jU**yfr7%s*cd$W1`cu8MEZViY3biRCrI$z-TvF_ zJ!w@{)mPY>;?nR)`ihF;HY_HTX77jfq%m$3A)QK(+mVqOWc)WS?{kdQ$MC@(FY?!YHV=X%*sM*4iu zipHSd8G#6P{nQS`3fSBdxOgYJF9oz06XqsHbkYVwuq9<>XA#RWcezVTOBPmE+W<-5 zTx?>i5tO{}_b&Usy}Cw%PNzBNT61nl*>ar?87RAc7kGSqay})IAV*VGU%OiNKWi!&=+JW?RC*?X6hk2rQ}x2L}rvul~&3QW{79 zv4jjz?Fp>`Ry$TQPI9W(J#FeK|kZ;<6~o+Vq+fy zp>9k~H`3CU=gNd_&unmBjLE|X&D=fcbY^`i7J4Pk*ypyFsL*Ai`eIj>bPLlt{Qz$U z)Z-pwbgR>ho_bo~5fP)C!A(tc*s@L5PFDIq@Ah>Y=tvBf{`{#L>2m~|t6KK{1Hke$ zLz4vjeolKZ#5-StWcitya42iC_bvwLd#m#?(gmC#C zb{n7bn4kVCl5N1VHwm+SdGtuAiUK}aw$$QLT6c3}Z+LLM`N#g;j%_F<_4{|QM5&6B z65lg}Ai!smPfg(lXF5H|J2;>K1>jUrFUu|ZXDW*?Zu2xW!wd}0HD}bybVCCGNDU75 zqd?1@oh7GH{iOatISetqFHHWCI$9fi&gcK8N^V)OyvzlJDWi$$c0^Y2%JTA7?+2o_ z0sNPz;(XTOu`^y<+lm|PT3DIKDIk&2^*x!l9V)7+DH*_jDC5^7LxD}Ahi`X2U})5~ zw#H8^H8Eh~;BfN?T1z7d5c4 z-iHmyXXp9+9X_@?eXr){l^Yrws?Cp^C%ST`+QniB!oNV={}kW+#xyA}Zmu$0dD!*g z7a!-ye6t<9bs~I)*I|pILctM&iq_ufj2;|X?;=smj;CPPM&>0OM zKfTdr{pxUHKt7u#KQC{|=Dyw2+3Ts$?&rSkAO+|oYUFv^SKpvWS)xL--jTaKSuL2wtV^wg;C7*&6gjRar|vfthMqmE$Ewi|8N8aU_zNA_rFX&JRdR$3cQFt^6i z$!M}wgCRo!qqIH&Xr8t!Vf{ag9!EviPfLjce1=^*;wO`N|;dq*ui%Q(@rapZwkx*3FgYrp16`)O!W&nV4Ju zR^a>`K8E}Yiiet_q9Kz}UY-%)cZ*fNe1J9zq_OkQUGdmbQd3JyI?`T+ba2gZ%c6$< z_8(_t5X@I--;8k%prfG;L``krcQ~&$*TCk+k%?#VxZ2DV4h95ZlEz8s>oZG)vwvAgug=k`BUK4ok_d-`bPYzusrDXqXw`A1#*qSa>EhtDK-Zz3hSyO?<(Qb&0{nk_Xn#mdSzADY3%WOA!3F_3 zddN7>8`Vt+InC{r3Z8ra(2a0Fb`UnQi% z;G_|vW#If^e-Q0L@^bRjXd4$xa|CQuF)$)wk!ZljtzMp4X32wcH^syTpF83mP;ryB z;cPEm`9k@xGn}1$vYh384k|$bVBH`CprHx}gaCpDLHuvAyUB>vO@IXC62|#{Alp)eY-#a4TW`Q# zsdio)Vr1j2b8~ab{x;M1XT1fp$9|(zd$Yj} z>ZsS+ax@|8%j>reSE-!=+;8J<-0#k$Sde$QdL3SGV|k`(NkCF5XXkv7oXFclnoZ5h zI^uHd!oBiMS(dJ2|E1kWlgugq`T2P>(HgNRWg_i}tFN1ff}-*cooY4GQ^!G(`}N{S8~QZFU&Y0|ZE4LYnxigTemZ#-a_!{t3nJ-@hfe6GZaAh>6(} zG8uF?Nxy2A!_kEmaoVpxKS3#$FhB)!R=v6j%E@tjH6cW^?0J?Q8yibz$Y!K#1xl~9 zbT%h92QFI&N#i}e+H$SD9y2!PqmeRK6>uB#w?!w&S;;fx3B&GASij@?L?M)IQr@gLj zvxA?Ah>PKtt|BBzxKfR+bj`G?F@qgUWfw#4#VqtFF=5wAvrz4`G>(_Syd+sOPZ01 z&EeKoqx%K}M|!3&I}H3bP#^X>*EwLf77jsBoSvW0Q__`|9tKt_c7XVs)9yZfu9p{= zlvISDpERnFeAa6)%JAUeuS7xu+!j?`-7&*LU4b0pXt%~0XBOi-m*}X%#pUtETJ})@ zebLi*ykQx1Sh;X@R9~LoU&{7VggieRKb%LJO{Th^V;Ejx#i3BUO^kO7d;qadCW~h( z(5Sz(7()~#LDA08(9Bd6m%}EdtSn(42a%$VfS>is@6eTS(cj|kSivSJOrC=MF4;5d zJS*#*Osp6>6cPsy@6~BPBjwQe?(Q!~CBPghtEy@qo;{tfwZSD-f2C9F11bzjbeg|Q zON}fnn5-K+npwUskvD?%9(1^!#mLBTg?vMK*8)}|V_$*MRELD+!wrCjogF`H=jU7q zb!|r}>+9=pQ(4bCutxE@Tn2A(lW4(xSXt|Oi@3ZLa6t|q5DtERg0^R6o;SrDjq}*k zEU+QVX#(UWU=U0&Srl>v#2vIkT3(;gs2Lgc?aR-*ze5!K9#rIROijTdiSwHnp^TG2 zr;HJY_Vb*UfPP2xH{Is#}xfFaQs9`D<`f<{S4D;~(>HxGLVvj_@7#4iNwsfcyi zj_lRwch$lE{@;U}^t8n$yR~tNE*V#6%+S@f12a?8Y;O15@>5M8pT9TeF4)+VucN#t zp?qj@LzhoJ6bbBD+L6_tja~b!*)z1iI zU&v)k`8s^$raq~R!W^SBk7%;6uv}j|r3g2>w=S~-Fh7IGvh?B_BtD=CteiIJlzE}w ztiLdNC39Z^nds544^H10UHEm>zlr!+MTA0G_bsobrRB`5G*k6R&d<=v$;x36j+&Y} zXtG$5tcQ%FsPO&x^b{4RT1wVdWpem~EK3#~KPP{yyg;9=n|}iv$gNshIC~G0%1TRP ziRFc0JA9sM%@e`yf}by$Dmy#*xVZ-g2HJi%tB9I5|N5mOCbmCa!1qXUh3Jt$0e97J zRwqe54Ok&yI5p)#zq0jFFk85pCjCPiRNKnv-u-CjX2rxrY*6)0;}Qv17Z=0&6oJe} zsCdU+GU#V)EMuw+*2a{rATvC|?Eq;`R$2LJYL`9=hZSnL$Z)5drkb0BbKT|j_g^X_ z3%vmOB&5oHsr-b3w8kxA?ucWy9 z8|{dMR1f~!r2F3UE~mZH=5H-JG0}H6L6bngCK6!`84IqXARgaF`5Fg;n5V>`7YqzH zF|mCdgsJ}6Qng=QXy{7$(mkX8ECClrmyf1^)9@$Ke>@=9xlf6=&DKC};2>eUFBw$J$!|+tKi6T{oh+j`%+8SXW`i%_G6o%WZ*k~;g(zrpB_`(qA*nz5&5>(<~ zSjfQRVVxZ-IoOHi3#9si~XKrst0LMVDu^En%#@ADuo4d6e zt_=8LM;7#p(DnG1mXf^q>K0~%VuTO;7t<@j9pAj%(AjlW|-1SuiU9Z zsf&%ShX;5S;tH%b%GNvbvvBkxDvX;oX2m?z=}Cf)#es)d@!04n#H%_<8weM+jA02C z2#;}h>})DNJpa+vRhPiS>6EN2yC&~OZG1Kh1*zfiyu6pbzAu1MVq)yp)mB2Yi z=vQZC5^nfEPMYG7=<*Vtntp&?2G=9d(n_6XS!{uF0qYBbtfHl6AS|m2MHhmVl$LI5 zC6tk!GyI6A?%urb1EGdEwc76SkN*`)`ID>E)FtvHW`z?qExj2UQ3DlRX_W49s~ zIy|1U9v&73e!J$8Qd3hgDhhGso8X56aO~|Z*)V^CO-x$ZgDNAl&f|(SXtE-`t8U5W zD)>hum&4}eOwmLv!MDk4#i==f`>@|=C%l{sa2sF%oRzGstPdYCQBL*u z;45h!a6NtQQV%(RAU)|*LOWiYMBi;@y-Ul>X=qvxwvT_8^QgQYY#MNzgefftBV?f5 zpEIZe^u)`3=6n}`o{Ug)=jMEGb&0xnuCVAX>8PmC?A6pMebV>PPY+`9i*vEeG7j;5i)jq*9L)IUvE`TLp?fj9Jmd`$5QCt!YQ19#LZ6D8f z>3e(Sb>=hi@k-?tMF~SD8KY=($X^q}*KtoSnv`zQf`cG=nm;Z>^Z5agsTkJ=a1TDd zU6{})%Z=>E0HrXJ#K^$FfZEjYXa=vXePX@f1XwQX;b>l-cRGh{azX+-JA3~GMJi%I ze&zhMK3-1Q)54suOA&*F>>Ct-$l2LBY}e49MpB(sRp*N0l`QJ(at*D$b#SXYt2?>C zJAcJJ-7V;Ie_b>}BLDJb@9--t*;{R1o{)MjQ#n5uX1GWzz&+4&V>{>cY+Pisj}YPK z{te6n;uCCc047Na^3*svF0QPkl#Cec+1iX#Mi7ctt;tkUg(1*t6%)ONOVsHcL#8Sw zw!GFeHgdxM!T~uyE+o95rl#`r0(Jca4)H^BYKmT-d46`5<#5#fVx26=#>Olt)Sl1h z@eruWe*PlLkz#~`-PE=xaxxTDJy}8fV;;Bz1Q$0|v+j(HtZB>q9r;C2TwGi3d}fUC zF(H>V1%XT12Qxv485s%b@#!Gp<$)NFS%}?gfa7XP+t_&K=>{8BXlsT4ZGP-Kgm*@U zISlk0arzivl7r92`VS?gUB{h)g6Vi@Bn&>jN!5R%J3)_TBqT>baIoeIe!j#0#^NG? zHu~g$ZCPYdHUR0-{TcV8PiK4kYMv-O5AWK)(q)ua0Sz`MTeqJN7`Cug_d#c7%(0roU_wM+b!T;ENE&ng`afb_t z$B!lMkK)2gp6?q$0%&N1_H^Wskb+Q{s0zhSQUx?zIY^6E+P^d-caFwei&&k#mU%O6 z4?GI}Pg~9RXXk9o)L_a^RQj_M)#&C#Q40nALLiyQ4G{Q+&_1JF@9ce9y76e2i9|zn z-Isat>wLdD_kHN__Vf&$XnVl-`D_4i9ypK);Lu<{0tCDN=j~32bR)kvt^L!Pz%-B= zOkhrCkUb%t_|LvU<<5=g2Nt*)B&#DrzSO@TS#WI2h%(s!HC)7KfECKkVO02E$7?i0 zH3%3~)2I=wj0+w9KIW5Q1)(G}!XX(>Tf|m4{L9~j5eq*0=rxU4)*(g5A_ZRstK6}A zlkf`-?m0xoMt>c!wQGWZf-UC#_m?PhWV>O_YQO5p;lvIh72NaG;W7z@4Vken*_8g< zR?=-O41*X5E%+lxaPqT-!?_j8{|Dmwzr7IrreNHe}c?i>{mZUJ5uQq@*EJN$G_7_Ue#j{=}N88fSm5 z&+c#ZGt?VO*WbrhgyI~M%v0&d5XX)=?mG1^@@WbSN^&KsF#1Ph1z~kxj?YE(VNJvP+Bhl#1A}ghfPNtuHI!`lf zN{8wV?8={4tWtIEJ-Tdt!x%R&Uhen^2G}#xBKNSNgan^UU931!;}qjwK8*P@`HIwM z$0%;%gvCh<;{2`0W-59zmxkG8#P?xaFG zdMY~LgtIN-9)~1ERR^O(tc0aVH6rcC3rLbdz0oa<*EKJ2m zNb^Zmr4oC#B=l1|-ziT}g^)sbRu|)7r46m)+D+ z!K;Lq+QrV#MX}7^`11V1T*Iv0Xp0&ynm<3)CBu0FY%Lowd z*>(M1m+wQI+GZggbg<=y4=^r()jLT)4f!scSNEmp&r30D>dnV=rH zvrRf)&+p8XD>G)tBOu03ugj9K1`7l0bI`KZGTsTkd*XRo+_Aat`-MY&$^b3%6|mWKv7oM8p60)rQ5|}DTyW| zu~6{xJW>_?*1u~y1W@9Rirc>qL}6jWz7d)594Y%;Pwy^1)eyy+=hzDrsOVC41?+fO zd08#2RqkXH46ON&HBBA4l*mM&z!`=N8t)-M=ijT@%DP4?kn3c$H;XSQ`?Y3R;lrMU zCH}es3O~-q&U$|9(w>Z-9eO8Wa|bu5BT)l#Avb@eH|V0nBcFES_*8uLbXBQ-4_LekF=?co zm~AQiIZiO%YlxR`%=v|)wEAq-zGuD9#j7va>Zq$~&P^|p zCQ33RkU6&ku2FmeJsU^gu_o};-E@BVnsu+=k8BPCl_7b=jLc7|Xl7}777w4e?It?2 zP!N47INKF}LDF=(Ue!{RJA#5nL0WkvB-@6{2e=2M)XL663>NBq@W^F(;Ot#)Ky0A! zq+WQ<@oso-6|to%v3)+r;<8B5%uh9cZ>nOf;+_3I<%#({J$iNW;n2OKhE@v8b?-0c z_R`4tSKn=y-)v43U8jaM8pCDRN~90 zujiMgLD$bzUej4q)f7v}^>qCH6X@`-vQcfM3MSpU-#&xQ-Lo9Qrl8-wd6Fxt(_UFy zSP{>3qDg^Q=Ad1(b8jnM%i-MJJIMW1>s*`6pf9E2u&vG{G?>Hr^)x1rP!wn;Woebn!380HcoE12x4C8pV+u;ou~GZKi+z_at)o<+wb-&V$=85G^*nmH;XEy zSkp(B7}2PIhz>=DjP_#Zs8p1mRoTbNhf%_mE1?PNHu|J$mFQ)(YpfN<$cG&`wG5l> zH7+y`?Xslm6k4gSoi%eaIuW@(6Qkf_N}7FPQ8Pu^r_FKuOpXGVB4Y-$S!s}F6${{| z;=(6jp|xyr%R;HjWsd@wEC}svNMDC7UROvKpgU02k&G8rP1T#LDjL;ec^yw*eU z@UTUpph@@c`W)U&@D<&E-U*1)0rR73WL{}u97j#N@)~kAvzkyLKoVCq#S{YC9WXB# zvWWRNy3pj%mCPlR`fhSm{E;pEDt0}@6Htk=OfQ`S)EzJ z(<}DD9j}*D_lQz5?;=_cQ)tik7N+kCOp2jETPXErcaH$9Bq{l>r~wm>Q0^p~#kE&E zQrpfCcmABT&vip|;XgkInO)1~Q9CpfY?C1yRcj>Z!oa{7GmP@t5jRCk?@PY+9ICjJ z1}Uli&UiijJ#nB+I|oF!Q@6G;Gg@vfu}tJoeKUMumyfgTsFzF#`K82bi$A=H%JPrK zh25-(*eDsKGKz(7veH$WExXxn%4lK}>lW#BlkEn1M0kRO9N*-S7@wjc`kU50BYU=ff}7Q70^FO* zill@$Nf1M3+pPJacflj3XVh!LkL;f(^~k{k2XEJz`oR4ru)#vW573}mD%#;B4;+|w zrF2-{P?SDTg(?&fD*)c4=qy~)#OeSp|kMpga`8{04Z{*DFT*o<7alh!wW(Evk~ z{DyZ|oc#QJAFz#`t4pX?cYcrLQi|s~&a+%nd~A=LyEWHS96G4y#q{s}(v>v_P;R+N00y#m|q1FG_w zHRi&27T?RDaB(I-sD}wD86Asg-nD5Yhf`q=nZ((3fA1!lmX>BBi?8e`@g85V1SiP#MYD;Hs zbwfJp%Gk+FsgSagvQO8q$>H$mnsiuGbbRM4!}f$o1B-`?SMo6lPs^Gp!=KJNHn`Wa zclm0`;xv9=%%?~7ip+QAT~3BYN7@1tzq|iNfW#6Tfa0}UmKL8jJ-_TG?;iU~qh^q| zH-&mb8sqD8`rL3bfJA)bNtw;cHJ90Bzh0>IX7S{IKh9HGLVNLX5FZ>wk8h2}p;`Yq za*&i1DGYvQ+W@m5Lc7Sy{OIxIRc|KsXy*P%hL}6k^Eqw)o?WZVqJV}b5Y8%<)Ekuv zO!0HTsn|W_-?TlmmI+!tJ26QKrR3Cc555h4iE-YCtP9?jUEi()pZ}x1w~C6hX}3ii zCrEI22@u>}f;$9vCpaMlcY;fR;10pvf(CaD?oMzGE;KnUd+&2`&c)f|+?;+h z7^Fwj{dUz;Pt7?WDTmiz{Y_v|s5UI|p|<#hi;*huWEo%i!38|SxasD)-PGzvi4hwa0MhI!jJCN0(REgI*zF(Q$CjsqeUJ3 zJ{zkrz@t(NQuFq*e?vE>WMX8eVL#Ph>*^qW92Mwb(^>Qu@5<@wCj3q7_Z%cwa1VD+ zu---xjYWXvVdVXC*42~pS`WAJ7c2Hln`h$4-jo%mGK(^Q=JOyt6$PRgO}yL5ss?Rw zJc|4#)>d$RH-g@~vSJNyW#UHm=wf6zxa(Hr)CA|zx1M4q_}oHVCmZ|5-(zb`@IxH> zu+mV};*=+`k@_;KsSQ6@J_WF+}7d25iL83We9{ zG6`QlyQ7vQ(6a~IJtNk37+f2d_ucVo-q1(nl9AoHi!Z_3QW__!y71jzLImO6=mE-AZQOkhxNd{>f6HzPpRRoRcrQb>0aFPv!h&e)Pre;^#zOkY#Fb8J|im6>k_tMD~I^q z{RsW%UjAjym{8(9ig}Y?<)lG969vgqYYx47-sDEl*n1J;p`DA=5`t*tfz8g&p2BYo z=IjLNJ-$-6$>^Q`d0j%||3`t1D2EyMx)<7iH5U2r79;=Xf7>AA^an8UJ&ujWELnbU z+a@5|e8Df>TY_41lXG9HsO{UF`3(TZ^tPoFG8pPNZ(D8aZ5il*NEPH|o@Dk4(9zKq z`-NTIIJ}UZFX@`#Ykt%EMDZZz;ppKZ>ychOI=?<&4S&`#kw%m*@^o4BW<4nZH!*@x zvPZmU4Y_sify5Zn8GMW!hPruh!Z*P)L2t9;aS_I}t{k$34);Qec^eV)d}1YTAnt6( zsd6)}Hdn()L`0MgCoJ*B+PZ$}$I%B;K{TY`T-6fchr8MZ9MFno?iuOItn9#5O~XUO zT!C8UECuh~s2dlT1{d3iSr{}vR1YHlKUU=%fY`L3o|{%m2usf9$da3 zHjBCZ;?fO?@AKaCTl;(B)nQQYs-f&Q9!^F3i)A5N&(G*(^f0}*Wlt=CP;~dV0&aS+ z$wG$W3vt`u79K23TJ+Q1M5&6OhVBLwTHsq)$mu3u^}qN9x+B1WMTr*6WXBUnsG*gh z{+=#j-tW3OG95X@BsG+yMWAI_!X9{pDAcGol5g_jRB+R;^YY0g`z2n#M#&O(3gX@t z3Q42)c6C8Pgu;RM{AVKUa~me!)?09d2nWp3W(i^*?6=_hNrgz@c@(BfwV~ zw7VL4uP+Y>a4{ur{lZX3<`>|{`78-0=}Qb6Is$}a8q`R<)B;&ziKt#;u^e_bpmL14 zKy`6?v6jwV#o6wv?-CFEfx6vHq=*Lwgmpp0o#|!i$?Nu~;Gd<0`gUY*`F5sM{OpC4 zc8t>qETgQ2m$_%h#XDllFx;yoA9ev}S*!iHiE=X?QhhX)c$u8{5>nEYKGsYsaNp_f z=VP9cAa|R!ESp%HdC5mqE}~Hz7T1cfqMEc-(Ym-FF3Q7U_D}ZLqiHH-QMB>>V?5j+ zJf#Pu((Tj>RCg@)8rJRITwQOjFWcXxh4N+o$b8>NjBb9)a_f6_APuI&EYHlcL%2+x zjw+YRqR{g5`0jAO`Cab2dLEnE;xw^>x(MAEQvP9Mc63;bIi%&~B_>S>BtyWZ^75ml zjCNRje0;U0wwi``lbKSqQnaD4;gio3#NRf#>N@HxGuS|$-9+d z-e}~#*?FT6j@m8(&A>27s!n896Fl=arL+d9A~l>F+;;bN2l@t1-0cUN>{`jIHbmK) zraxJ(${%rmT%@zXUajmvg$$05SUN3Ky&PWqOG1GTMgy!0MbnA^_<8jS7%dO&I8_-o zml_3WSMpxY5};)btnu6clv=o~NS`>|+5>?UsCqoi+4E<%@8NkZ5Z@eBDdo|XO3fBU zXPXMt-adMxMJWmRY;qdb9=OIgR^6@{9lyDm)7wmwV9u6r^^%Y)_)(L?X5~0BCL|!R z#Q%A0+s^ZY+VIF*uzRY8V{7E-r0Ss1m;ssKtkoU7XLu;J+BmZJz<*5Xz7cYlxF?L*Ba0%Dpt z*R7eE84WMDxRzZV%JAltzbfxL^KZKUd%HG)eYAoVWEX^n7z@;%Qsgef5J29yC2zw}FX9zN{+_j= zoioyA(K@(X*qDlx_1W9_hrE^B(?j)KK3or;g-PYrv{PJ0HE=f;p2`d;YkDgSvKM#ENJiyWhgE+& zLx;Q*Qx#hsZPu{WN>_1^W`aWh)jCy*z~{51q+{=z~+ znJ$cxbXjd*SglpVuQvZiZW^+YMg}pz%5-|cXrlWxXURQsCK;2R@C+B3GrJGdrPr~3KJ>#;w*KOizJg+mKrl67wg9>`1mhXT#@96@qMrm?XBv_GGt+HC7Sp}y9RTK z-04H?&wURae%Zy)SI!8Xljj&H+GcmG!tECACX#wj;l{@1?m;KN`sb&BXI`B3Fn5<2 z&wAr|^T}i7OZ%6;2V9=@kKC>n!p!XW5~pkgxO>Ov!=TO(z^c4SnGotZ9`iz#zh6O_ zdrR|AVLBL)lELdQ9U|S#-+a|Ng9k(C)4-!}W1}sxFl0u1y|^^W^jp3s+|<}RcB6=o zP1vNVtw%clpQ84Eu06Qw^iZMz@`~I!u<+sIYo3ahFUNMSZ?6Sfc;{EkZHpbkba8QR z^O_EaZA7E|7Y@QX`Pg(m)pU-o+8;evOixeun|-~swsSr|!CbJrCfEIcMSov}s2qEaC7+Hy_eLGH1Fi$7P$M}pPH5@TaJtvVhI(CRP zq9}a&7FlU|%b>Nu;dU?eYX|XL_LQ%8z3$!@%ek%It#VGdO>8*2b@U zpEoD+osWZKdUYx(j#cc8jdrAhUGG-y=KT5C?(`Vz7DK~ghiu=7 zrTi4@7O;wpqqN$I4`b+}0O)2SsuMH1IVG+B6P8aeBUenl#_ zA742{p+s%OV4e$lsMFWCHVN952zQ-W^NAOJd#fJtMYZ3eh604Oy^C~8)FZt5z$#M_ z)ItonV?2BN+@MXNg@XF}m2J?*mq+MF;Jkqr!=G8Xud6baN^FWYjTDL4;`z7K&;OY@ zh%Q}A-Ym(r&Mia4r5(J&M3h1WCE~@=GMBN*)rJLAu`me zE5l8XE8YiT&L5`aw%QvO-UIYs7323b(D<@{yjlM8F4lucaXBq1G4;AjfNWuTnFU3c zSGbVuFf1$rpBVq~;*v!L+r`z<_ro4TuWum^E{3L|{_`j1#+s{SME3N?`qSixKb$M6 zvEz0_3!k?ysod8(0mq@n92yyjT!2ABIuv<7n4do)QG?T6n+z74@ zZGvziY>F@8#jBuPx&ZP^5-t$0a^9ze8?&N_YZNn$c8`l%%@C3l0`@KOS z>B!GyE$Z@(a}VIZH;i8YS!-NoW#P^4`CsG(U;1q%!pxf)kpR9zb$Zn49*g4=-as_b zbdj*XAquVuvK$^zN6!3-a*{>UOop8&6(<0zKHQM46)veVy$~;~zE;WGFF<999ojC9 zC^RGuJu8P_dd~Z;NXV|&*{#=*AhP5A;i(*Y z?_)Ao06Fe~ZNYd0rygy{bdK_CK3;wWMJ1*v!{$yusG7-up1Tdc^9!=>_|>fX^2hJl z5geB$v-cst{J!IkkM#HV6W$xPd0+2FrLz>aTcLt}diuhR`?`||FV~nWz_6ic#mA}japHd3lW|88|fK4GaC7a^+fG0Jt%WU+Gsa3sG*(#Kg*h?1kW zww6Qm-hnJXAvAcX$3O_{KTSJCz1DugKezPwx!s*Uw?4M~)6wn!%q1cXc^0{8hbu2( zSoT8@lj&xl77Pl4Mfav8|E?a3B*|1kj-=_mVZ}7-xI5>#E7EqNu)HiFY_YU-YIyYG zDm9>4Ao-S#oQ|HH5=qJ1QNTa_8Z1UF|h{Tc=wQ`<%+g z%et_(q?Fb6?OTI95S<5WvtP%-4{dakdw>)KD5!JTETBYRvg{hMG(X>=F~UF$W4uT- z@`96*u^MRzZMGCB3DuprUP@s`OswxzRe8An%&&>~TwHBwU}&{B#I^E9udS`sT3fC* zeGC~s9DfUx;nj$imYZWr92QcfD(taT9@^s_R@HN=&5yGN-04hbm=FlFxe=l+Hg*kV zKr7-ad`yr%Bh&fKKReLhU`0Pn*Z0=;R8LoTEK>vzvax+kojfEPU-HFfA}$w`H2YQ^ z7UfgtXY;npm$fcdg(*5dznfO7Wj1Qgpw@Cc9=ArH>_34WA6}fElAgegtO>8dLY?|J zuy|AXR`Njq>!V%}Ub&l`bq9ALLqYuRpR)H+Jg1`b&)@D#!#=)y-iXX)frp2Ggn8P+ z+5&w)rSgVGf7ut?R@c>KoQn9ltk_^nc05+GyxI~+czxn&i5EZA`uRL!KTD=W{jBwo>8Us#zT#w3jUEZ8@+Sn|g=GqjV+)!;aGJm&GYvR`#W!=EI# zz0C1=SDDPrOtUSs@aA)zMg|b|4yTKSgF-glGK(5MPO;COwVrO5wMFMa-!aZK$lxlb z;bG8X#02BSjG}X=du)r1^k&CBBE2PDn_3E;+T0OQ1p`;~+pkmhH&K|hv_*WEdxG9) zpGMO4XwdQ=H9Y`ue?33DUgfsc+*clTj_!_cdX(UbBnantw8g8GVbXV&{POhSY}5F+ zqDglltcah;6vDpM(cs9C7r7s+Uzax%w=l)}^lE%!?3>d#0e=3S=n1BHpqiG zg`&NW*We?O4w7K z;l$^X%kP!s1GdBy!=RYc)VYpztHNA^Pe!T2$J)N)4@ z)L+#fksD^-Gi<1?-neMG*Y%p?Y^TkZD_CpxD67j)7&RHs6lrX$e*$R@`5i;w@m0~y z1=-nE)eNvmu-Yg+gO!TZP~Ki$d#YTeSGCu;RV%M$GM?dP-0!_bEwzrV+qT%1l904p zX|6HUH`3R(Q)gPJdsP#1xOw>FsR$8t^R%>YDy&QGaSUZKtX#UT6V`g_L(FVY(GGuWe4}Xzb(=V-UyX#t;7-uKiuk zgl6g5K~63rM%_fMXjZHL@Q^f!6AJyZRM|%Bo}2gmgVeG*(c)Uk?ne}`m*^-!xoc@{j9K26Iz-#&=BZA7|ZeWQPUbQ zlwb+9+IBD6sYgZFNDxL98tSve59gZY4jA!JdW&vAKe;`fg*_8PQq@D~VuPYyB_$;R zv47+3gcaweuH(D+5EFp9RXmC=5;dy6wU6>ZL8|$Vi?#9~5SHLJb@!j>kZSYAxHlt7 z8@!d8Wj{$*vJiwMUOm0}Egu&6*~G)itX5#Y4bXPI3+~+Bs#f{6H?y@D+a?gmG0E}P z+<*!lwp-RiJKBwlo6FHBl7N2{Uu@*zv>+}75q@4?RvGgM+jZ>`pt=-##<~o%qT*)b zD?8^K>Q~J}S6{BXVkSuCO%BTqOG!(?1i~nj3Y5&+02|w8|9jKe7%$u@u_}QsQ8o=Y zN7J=q{%>C5#pt=YIS`^!8dJ*uNGxw;c(`-2({)SNq>g@VgFPSE;y$zqG!aEhP6)&n za}Kc;7I^0hri$y^BOi;uDK~JU=>9PJp$~9(f8q9NVVZYVd)ozpuMj%@|n8)rNI8lyHPv&jvf#?=0BBYQ8sh3kE zjUEBvQ47z)EDPu6p|UC}#LrwW^br4^-_$2E7ikBQ>PC(AwQm&rCm*Vlw|-F|mFsG2 zqjN-|d672A=#~zb^~+ar?5lA@L3nw2zmioGv!cL2Kuq#Ofu-znfkY>8T8d06pxy~q zBQM%+K$^ePqV^SZmLQ5L2m9LaU6)BbjJYmD11-Zj3j`0*#WwYLSezr`y^!MZqpwVgQ*y04!4-c`bk{3bJc z3{)oy95P>8T6C>*K_{@$JGxUp+cw$H)9@ziKRaU`i7lA50bk=*#5Y_0=!4a#FhOr< zMqFEMHifK%hsusqm9p`I%t##~EKEWW9eKV#H@bGf3&uppeotF^bb89O@=0NBRL9Ap z?csNe5SnMiMWkwn($iUIs1%O^Zzn2`!gNm*KVwtR6qm#z{9tP5{FRdjem<~Fwd5ZZV$Et&^35F)e|jGwb*r}~ zUw4hJU34kHKNt$YG`BiebiEpy(?ZR%r-$Dik&>qK1eLw;?o_PyDF&Gay@FkwY&%vE z2oeiUsXDz*QF-By{^{juJ0oVJCU1%d=)j>fw5!I326zZ34;R_P%K-YDO@RRrj>Orx zCwhIFx+eKo5;5Q_N=yc?XKrC>{|pLbLVI4@HSepp&%YD1SYe)nKXhWhWAlog!19Y< zQ{V^a^tx=`g+DX0Y$PNfwO8GIrc9+<_4jq|QI1ItL#~#2zJ-4KC!LKq#(cuDZ9=u6 zb354U76}%CRO}2dB+RzfKSyJw^1iY4VIkIxE&@|8t;o)_4ngk)&3`a4)>0|6guW{6 zH@8{H1Ik4+!3gl#!1;mfGGbaK@KFF=fSh#Thwri;kxV3Ar5ZBZ3^tP_Or@MhZkYJ? zJ~NveROjkQ4oEC7EGZ;FEiWy8Txg}>VYme%Hoz1M682`cwTz}Z!&+|vspfd3rVD3{0m$H9XiRPzXX!%}IUP@~bDC^mz-xkJ?4eczAMR zoPd}A_{F#*I9O7~3K65#+6X!TdP;R_ICuxVF)Q!H@_=61?9#%L_eHXDv3hB38Aq&n zN6p`;nfMX}VZray2e`1z6C!HTP=yxPo1WI8S4AG~gwW8NMpy~I*Knz3W1z4l*-*^b zqmt)75z{tBEF6dzrR%(SDT$)@hUo$+4FtA!(q+?9kfOH`15$1V5$BOA7Z(K4(j;RuCXlWB2?+HpZKqOEke*}|BFDqY_e}0AfI3i)}ET&1yJo4$X=tpnm%<# zMn+cK*;Z7@@uN%~%IHRfptVac@mRwpBhS!t4TRVFPTwDdn#_sRVDpo_r^8lziNQ+o z&8=@g*I(iT8?EHe4nj@NvY`j|_Rx`SHHiXMMUmaYY$-L4!S-)H zAbx!FbiQy~G~)k~_{BsU5V-_13-eJy3no1*`CPb-^0W* z;3o>^sZKUe;(T27E!*ry%DG; z{zUATbYp(rtEJf{mPL>!Kj*SHm)R$e8y_)59zP5mj$VTU1&#>yAI+8Pn{%2!9180` zfx9LDHPstN{7{#7f?fz-ecy5$i{=++Q;ki1R5T#N4vEMkK`=frh8%5xUh*js=T;up zKiUE%6Zl7_INW-mSx9KY<7SB z`O;yiB|g(2b4ZJItF$@y-t7URr>S{C_6PBWHi&nIJh(5JA#U_Xk&iBS{SP zO~p-(MUN?VEJ-x@gU21g*-SVU=(4omP@!%fsv9ZZ3oo}Q*m zEcC^?`pfedj<=TPne19T^MGDR>q#3KkwG@*M)eBb6xhA?`t$hnAFWY2`^~B{eBbu~ zr6N6T?P7I$l_;5wH|`HS4locYDXAG7u87=q@9U_xKp(&;zcg;lh$vgXkNRI}=Eq)T zi*$74Zy>>Hd2P)?w*Hquw)BMdM~jaV>b-g`>#8N{Anh%Dsum2UkfrBGA6whgo;88S zKM)AW>i4_8m`$vzSZVcf(vVCvl>v#Ry3|Y(mr;5=bCE}p$dOTUzv)A;HQY)Y?A9@V zQeJ?4)s%w!)H_RoUVbUI4)745Sa~&jg^kUr&r1wQRD~Ie@=uK1D;`x;R1DRYWbRq) z$qD4AH`wd`T^cU?t97ce4g)EkJ)Bf|iaQw`l=Yau4rV z29I0Y!JtQOd3;G35L_4|^>?>7uXZbW$U5pTZqD1ae3Z*(p&`ALZ0S7~toRmGY%)p~ zuhVm9vff?TI{LY575O}JhrzQ`pucmSNtM=-@ znQZNcPS{ldC*$B{CvwSC)h%o-8O|{Ced0s5+?^Hb;^VO*asjQlVD=afBtDZO>$X0gmukMxl<1dv5mySnWdT!+V(tDv}M)Pf_?X zG>H^))Fx&D1qE+n#*$!fB1EQF&j4LU^u>Y>F%A?q`5LP zv3>sOX^&7bgx5w5b2N=ic>E7(0+T zfKcnw%98qe{`A2vQ;KxX`>@C3<*JT174N`2nR?O348TA>W$>cFiw9amAmDRS4^meR zR>A%^JiG_=!D3By{!G%F&)VC=gVOxQmX^|nWYVWShS40MbZ`zPCZZFvr-6nN;ogtW z1Nk^$yX8QyUZjCQ5D-GoVUl1%OzvOlp|qsLg_~%CV7ty2cZkW zhIPP@c-|LrU%0H6oXWMddLsDF@inp^27;2B8(AjrrPl)R2nmTIUzV65f?biL!+7=L z=)&KW&vwqgSfh@QH&?XhWtO0)Mai2jaHkzVK!U~2jrNUbOQ%^5N49+ho(k;@4O9&D zwO1ah=ZEEtzP+SsHT})<<_}z3TH&AIVV!o{jj1s~|4(h$&lwsBZz)GSjis%n#orMj z8;za7{D@u01G9j@R9{1|ej#T$0R$W$q-APg<~8MNAbL_^bze1^@r(GULOX>uj8UhE z=l1@#a;e=~g9ks64v2P}z8B3p2%nf6o9mkVvNP!UvUMwaJ)<~SOG{pgF*`TY{_{wY zIfj7|hfpzIm>IY$5_^(+D#()VG72#+DZ%r7+Po|S2f%(PG=aRvHQFffffkC(K*JIg z9v{3QFh0&00unE&CJNRqWk_I2U(j>boQCmxV*u^{2)Y5VqCkT+a4wrxHhbt~y=OYt z9~2Yto)Fv4PpJ5nP(555cowMc-njRZ>}Nd)Xa~;s zzjW?@O0O@r-`lhBC4*I*P^J3%d7ujfb;q&>Ffg#Pd+F z2t%ny0ha-^GCSw;3)eR#+<_Yt#*UtpOm+MRw4su%4>1qp|wgr{CzC);CA~ zK+YG^;AA8X`owZIO*NgZgA;J&#X-VPoGB0Ia_=gs|akeN7jQ)1HpGv;>ou?!>> zRW&MW(_h_O)7aC(#t$8z9`Q8mdFpBbh!!Q);(P7+?o(&NC>v_X7Vki~nQVQlig%zo zOd)D*S#4xWMv8AI6fz75Se#m&kT;le&2c5I(oxy}J8IH{awj?Hf9)(VkSvv#L&tCV zOdOz@+}`SJZ2bMg^@Eyte0{x(oi}4_1I?)tGhPxJDk>a2!fwV0#mz{0m|<*en&aQ@ z4_}h~cLoVHQR1VsNfc-}tff_5r2sF7$`p-J{z^+KviieE9v}^59lUZY%}KV&7?F5> z6)YGOr!C(vz8W|hfMyvhHr||HtI)NNrw=ee!3qA@xo8sbYq8m%jxfp{py#%CvXT+$eV2*?v7Yb_Uq121i%vmI^lZP8Z84$ zF0a$)vxPnGH>44mN|L^Ged%qttz|_CI3+epCSXQ*+1ki*yKVZ}5<8#WJ|AEiewUsJ+gF@KK%=#M_z-mncxZ_`Y(6 z{sTK?MG5}cQ^fc|Hh6{k*==ks<-Kihoo}}-c0OnDnXrVq)VZ2}F!y+H$6B`eM66Xd z>&)*XW;BijD;nmoFz|&AgFo=&M%)1>8(aW6P!;1voEWVW!fgA1AX}(f0ssjR%E(CW z!rTqOJ!qCG8d+I=+K=z>{_!&5>wlEoQ=+N7f|Elh2OKNTge9mD=PK@xv*GiI`TBj< z29<+g{J$zj*J{1U#RRzC%IMx52);uND zuI&FUNLr>_0IJ9ooq!QBzzjRv=RHe)kidIbMpl|VRV+IGmB^1Qm!>$`HpE?-lhJ?NRjx$G> zI=uG;LQ$pBHV2m#7lpuqcmACMjncs(q3}Oo3bgX47*xH+5(h@T`KMJbeJAF#5}iX; zX+{)t_Gm84aNmX{B*+Ut#-N>OA^s}N^m64-awm-1U4%&`cZ*|i-=%FFTgCNkI7s0^ z)2g-mb5&r{pT$eC_&fS0y1TV|qI%+P=e)8@NTL%RN*opi<4jo?+SPW+@g&T%SEMt0 zWb0Xo(F0cWYgBZsR=Oq3s{r!4t)+LaT+5g)z{r`8G>fzyc!UyL3d1xMsRw~_Smk}!e(>y8J zrUw~v7?Pf$nrZ2v()pFNTQ;g$mPp@3OMnv6U~AuYVOZMvF>_vE2sK9(^cdJK<$GbV zsvUZKc398O=ZV54#7%4F*GOQVinfg$!|tQ)jeo!#6Zd$DpPyPVjTyGC3mXjkT0sz< zc|tNbGcn^@aT4X{6G-2rB|9d+nLH3VC8^$}EPkPP@tENa5`gYIT9pzMJkkO}9Qc_$y8-y?2V7_L!$7zeG zo3&Q&>b6o^HT)Lxuc>2|=oC?fRaj{JMzP<1#i^oer++-L@m@zor=>iTU&IdsmO>7% z?RL`3q3u$0CbzhQ@$+*w4C_5lTub;m7Ts zgMC|sPX=bnZfMtI@#UIjVwDT^e#z5Pw+=5iCkOkH=!a@ovxX%FYfLE?>nFiBh+y(B zD8ylI zK*v)*+li8vms8tU-uG|%$SXA3Z^ZPx2IOy(={#||3&hCC$N=0`eXp9JHRD_#K4cyu z9i-NNB9+A?tfueuv)_(er0$L)Xkxax43R?i=XUE|>*x0b+2}DQ|76CLU==pGf}j z*9EKu9G%SXG;WiekT7UfL1+M@HiO$i3lFi8El|?0yTXSYHIz~#y2djq9 z?{zfwH4Sts2ChNZR-A3Dxayh>+y#F57SA5mCX#&IoYk zT>_>)l{*FY98&j#&i%pt#c9i-(Qq!aw1beFeXN)ZxW@#Iw*s!GpO#J*hHwJAc+aMw zf+oh=1TrgWZR>R}U?y$qucz)SmK!b1E%Zy9&0jF9)tf9<2@MfXgS8Ad&UiUquiLR_ z^ZP~+{qp%cn@pe}H5N`B^!~)H-Y246Yu(r7Xj<>hP8`Pdp!2HhJ+;B!d`Zq8K@c(P zwm$^|3f~4oJd7)7`4gQzWmDhQ=+)-aN+OVf5DMFIGhS5^I_oF+D2*vN8Z`^3wPp!B2`yUpZjQ3W@kvTs0)H0T!1iZ@?P(>x35pn97}568 z(Staf+>^%P)Lp?%tA2kqR`h}CNAGs;j_e4A z7!kKaaa9GaxS=ohOYB$aV%OTZvP;l?1BXE?|Ct_#!plKK;3D;?O-o693+~d}#|H)) z8l(%C(7QUhNTN%)H$BOT%UBK0RD92@*mr!C zw9PR4uR4uXPu9x$_V3%*G0|TSuRSHmyQQe90rsN#*5kHpU!*+c;>)K$HWQNd@(uE@ z&a-!-&K+ARK8#_1ioNo|%=*aI+e7w=h3JT_AqlKm9AJ0fEw)pjVa*$E86+GhR zvt`W?YG~1T?aKO;3d>xyfDZ>=MlHH|C6UzzE@i%sMKCq{9<`KH0r>_{{_EeKA zeG_uMT|m9q*_X1?-fyy4F=q$va5Zxkbt;4`0wZuJh1k8bP9}X!KeH@>ejw8k)Ou)^ zxd2)FoMGj46uoPbo)&TCLq@lH&EiZbaj)yO$kv%gAiYrK%f>2NF|L(1S1YjeV137J zH0c0d(OhSh`+n!cd?G%5kCgQxkwl$edZ5!<>2o}b6A;dSHNywVaZ&JjYT{ZL`^@Z%Rm4qBl9?GTbhjL@vqw!3 z90S&#HVjIQRau_5BAZ_sIGJ7kjB~A@XfY`?pf zY%{DPna{f0giW1r@#fH`)K}F}2|xODUCn>ARc<>vUmWi?WZHlZ+l9RA;o;?@_r#=e zETuB30+i+fVG+$YCHyxBZ0sa|eiG%+`f8OCt8VhQf{*UsWb00Wx9)lO;y-E;pCFI) z8M(OGDXHud2;e+2ME5vPQh_R9D#LJjKi`mk-5EGMI-z1Q=kLm1Zwjp&|z~&N!P$j^QaorotIl)l@kf4a>EuM$$b87H8dBc-xKJ z>Mmja6wo1v_>>!DLeTx_yJ5}*DE(>Iw#?oxzs353nUwiLSz^wZ#=)}?(aOHkX>l}k0>HAYqTr0$Ln!Fu2h9CimsOIRmIuN z+7*5>LSp{=1C_kVLA%F&OzB7WkTskIDRPWn_B{jbD( z#L+tZ?nd3#G92$fj=)3Kx|XgsJu~jZgb#oskB?87@mQBXF7vrmQF`K3;|7VUS6#hI z6?r<;h?>W~k6M(qsUGd@;5uwkY0sTLX+@pAnwBldON-cT$3E?|hg+>%p*cTp<6CKQ zC6fO8$WbV8=+pa*RvmC$E@*ez_;HUD+%x|uxM!z(rvJvyHn4&sJ*;+J2evQw{w7LS znfD3_dVeQ;RJnE0``*HVJ{>Wfxigs@PIBwxv#O<6W`kiG0Zy))};NAVRJI2|#wx_-b zKmYKK<7!;ztTPsWGs`L$yCM3j*4}?KH$%39Yl#~sDfsX^8TbE- z7UV^6XD>BI1JM8U^y+@BnBK?lM@;d5_5c6-e>ehnEF16;Nw#v>a~A5Pe+E%jQc0px I%sAkG05Kg&U;qFB literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/index_card-dark.png b/testdata/snapshots/darwin/index_card-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..66fb5a6d668cbac2ba522847e73587c24f838095 GIT binary patch literal 8924 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/index_card-light.png b/testdata/snapshots/darwin/index_card-light.png new file mode 100644 index 0000000000000000000000000000000000000000..7dc34f8e282b9c2d42bef0dee2c9799e0d3e8065 GIT binary patch literal 8596 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 PkWE@#L99|lKk$D54zNAJ literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/market_heatmap-light.png b/testdata/snapshots/darwin/market_heatmap-light.png new file mode 100644 index 0000000000000000000000000000000000000000..e95a740183e1e5d066dac77d53584a6c20eb62df GIT binary patch literal 18076 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 C@SXSo literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/market_overview-light.png b/testdata/snapshots/darwin/market_overview-light.png new file mode 100644 index 0000000000000000000000000000000000000000..1e2c40c9368af36b5dbb28fc0054d35664afd098 GIT binary patch literal 25723 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/market_status-dark.png b/testdata/snapshots/darwin/market_status-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..714289dfb018dfbaac52e136b6591fa8509b5e0e GIT binary patch literal 8366 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/news_feed-light.png b/testdata/snapshots/darwin/news_feed-light.png new file mode 100644 index 0000000000000000000000000000000000000000..9589315720063a9ab6627832bf92de29e181aba6 GIT binary patch literal 18090 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 V>q@gg{(J@ikd}}auN5^2`d^wko^${J literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/option_chain-dark.png b/testdata/snapshots/darwin/option_chain-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..06656573f1f2ad303c567de0d6aa87807eb40b8c GIT binary patch literal 38005 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

LEP_YP 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/option_chain-light.png b/testdata/snapshots/darwin/option_chain-light.png new file mode 100644 index 0000000000000000000000000000000000000000..71d14b937bca5f33d496439a4b37126163c2f457 GIT binary patch literal 35776 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Ð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 X!PXP($?$)7o|6_=5UUa~{PuqUV9@xB literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/payoff_diagram-dark.png b/testdata/snapshots/darwin/payoff_diagram-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..e4a1d8b483c7a9d43d25336f2d98cf90eede398f GIT binary patch literal 17676 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%0AGlZg$-*}p{U}-T-hMbr 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 b3Pu4SV8@EdJokqKAb*mgaw26Q{lNbN&bmM4 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/performance_chart-dark.png b/testdata/snapshots/darwin/performance_chart-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..4e767e954961543ce880d990fed51df02e2b0399 GIT binary patch literal 41392 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/portfolio_summary-dark.png b/testdata/snapshots/darwin/portfolio_summary-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..1ded3f154563411d565b668657d16dc198d26483 GIT binary patch literal 20654 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 Pe=7vpIoZ}8znJ(Zlm&xX literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/portfolio_summary-light.png b/testdata/snapshots/darwin/portfolio_summary-light.png new file mode 100644 index 0000000000000000000000000000000000000000..1fd4b204a78fde5fedd5e83cbe24e88ac97bad97 GIT binary patch literal 20061 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/screener-dark.png b/testdata/snapshots/darwin/screener-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..0bee2cf3b5b61d6208d9418ed08fdfbeba68bd65 GIT binary patch literal 24320 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/screener-light.png b/testdata/snapshots/darwin/screener-light.png new file mode 100644 index 0000000000000000000000000000000000000000..4b1467a3c7b5c01c0cc5528ed9d8b373acbaf71b GIT binary patch literal 23786 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 Zq3|a*Iy<4+2*5H_;Gv@jEB#Jg`v(cB{q+C< literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/sentiment_gauge-dark.png b/testdata/snapshots/darwin/sentiment_gauge-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..cedd18004502d9eee68415e6553d06b94b766962 GIT binary patch literal 12791 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/symbol_badge-dark.png b/testdata/snapshots/darwin/symbol_badge-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..96da4b4f5936a76707db464c05d9e069dd44b95a GIT binary patch literal 5035 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/trading_session_clock-dark.png b/testdata/snapshots/darwin/trading_session_clock-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..5f4622286f9e6c51afc56b27d6736f51ae8f5c75 GIT binary patch literal 16534 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 V+|sN?4Kgg0q^O)og|NQg{{Y_dXodg) literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/watchlist-dark.png b/testdata/snapshots/darwin/watchlist-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..731fd1285111e1aee469253783f4807fb0d83062 GIT binary patch literal 24791 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 R3>*Z#mQ{KAO~xqb-vBf8`Pl#f literal 0 HcmV?d00001 diff --git a/trading_session_clock.go b/trading_session_clock.go index bc56e6f..28cccef 100644 --- a/trading_session_clock.go +++ b/trading_session_clock.go @@ -9,13 +9,11 @@ import ( "mujicaui/theme" ) -// TradingSession is a phase from Start to End, in minutes after the market's local midnight. type TradingSession struct { Phase MarketPhase Start, End int } -// SessionMarket is a market, its time zone from the caller, and its daily sessions. type SessionMarket struct { Name string Location *time.Location @@ -30,7 +28,6 @@ type TradingSessionClockOptions struct { Now time.Time } -// TradingSessionClock shows each market's local time, phase, next change and a day bar of its sessions. func TradingSessionClock(c *ui.Context, markets []SessionMarket, opts TradingSessionClockOptions) *ui.Element { now := opts.Now if now.IsZero() { @@ -70,7 +67,9 @@ func TradingSessionClock(c *ui.Context, markets []SessionMarket, opts TradingSes } }) // Times and phases move on the minute. - c.After(time.Minute - time.Duration(now.Second())*time.Second) + if opts.Now.IsZero() && len(markets) > 0 { + g.DrawOver(func(p *ui.Painter, _ ui.Rect) { c.After(time.Minute - time.Duration(p.Now().Second())*time.Second) }) + } return g } @@ -88,13 +87,14 @@ func tradingSessionCheck(m SessionMarket) { } } -// tradingSessionPhase is the phase at local, the next change, and the phase it brings. func tradingSessionPhase(m SessionMarket, local time.Time) (MarketPhase, time.Time, MarketPhase) { if m.Holiday || len(m.Sessions) == 0 { return MarketHoliday, time.Time{}, MarketClosed } mid := time.Date(local.Year(), local.Month(), local.Day(), 0, 0, 0, 0, m.Location) - at := func(min int) time.Time { return mid.Add(time.Duration(min) * time.Minute) } + at := func(min int) time.Time { + return time.Date(mid.Year(), mid.Month(), mid.Day(), min/60, min%60, 0, 0, m.Location) + } cur := local.Hour()*60 + local.Minute() for i, s := range m.Sessions { switch { diff --git a/trading_session_clock_test.go b/trading_session_clock_test.go new file mode 100644 index 0000000..6e3c0c1 --- /dev/null +++ b/trading_session_clock_test.go @@ -0,0 +1,55 @@ +package mujica + +import ( + "github.com/egoist/mygo/ui" + "testing" + "time" +) + +func TestTradingSessionClockZonesBoundariesAndHoliday(t *testing.T) { + ny := SessionMarket{Name: "NYSE", Location: mktNewYork(), Sessions: []TradingSession{{MarketPreMarket, 240, 570}, {MarketOpen, 570, 960}, {MarketAfterHours, 960, 1200}}} + for _, tc := range []struct { + minute int + phase MarketPhase + }{{239, MarketClosed}, {240, MarketPreMarket}, {569, MarketPreMarket}, {570, MarketOpen}, {960, MarketAfterHours}, {1200, MarketClosed}} { + local := time.Date(2026, 10, 5, tc.minute/60, tc.minute%60, 0, 0, ny.Location) + phase, next, _ := tradingSessionPhase(ny, local) + if phase != tc.phase || !next.After(local) { + t.Fatalf("at %d phase %d next %v", tc.minute, phase, next) + } + } + tt := chatTester(960, 260, func(c *ui.Context) { + TradingSessionClock(c, []SessionMarket{ny, {Name: "SSE", Location: time.FixedZone("CST", 8*3600), Holiday: true}}, TradingSessionClockOptions{Now: mktNow}) + }) + if !tt.HasText("10:30 EDT") || !tt.HasText("22:30 CST") || !tt.HasText("Holiday") { + t.Fatalf("zones %q", tt.Texts()) + } + marketsPanic(t, func(c *ui.Context) { + TradingSessionClock(c, []SessionMarket{{Name: "Bad"}}, TradingSessionClockOptions{}) + }) +} +func TestTradingSessionClockSnapshot(t *testing.T) { + + snapshot(t, "trading_session_clock", 720, 220, func(c *ui.Context) { + ui.Column(c).Padding(16).Gap(12).Fill().Children(func() { + TradingSessionClock(c, []SessionMarket{ + {Name: "NYSE", Location: mktNewYork(), Sessions: []TradingSession{{MarketPreMarket, 240, 570}, {MarketOpen, 570, 960}, {MarketAfterHours, 960, 1200}}}, + {Name: "SSE", Location: time.FixedZone("CST", 8*3600), Sessions: []TradingSession{{MarketOpen, 570, 690}, {MarketOpen, 780, 900}}}, + }, TradingSessionClockOptions{Now: mktNow}) + + }) + }) +} + +func TestTradingSessionClockDST(t *testing.T) { + loc, err := time.LoadLocation("America/New_York") + if err != nil { + t.Fatal(err) + } + m := SessionMarket{Name: "NYSE", Location: loc, Sessions: []TradingSession{{MarketOpen, 570, 960}}} + local := time.Date(2026, 3, 8, 8, 0, 0, 0, loc) + _, next, _ := tradingSessionPhase(m, local) + if next.Hour() != 9 || next.Minute() != 30 { + t.Fatalf("DST open %v", next) + } +} diff --git a/watchlist.go b/watchlist.go index 1629eb5..1c6c104 100644 --- a/watchlist.go +++ b/watchlist.go @@ -7,6 +7,7 @@ import ( "github.com/egoist/mygo/ui" "mujicaui/icons" + "mujicaui/internal" "mujicaui/theme" ) @@ -36,7 +37,6 @@ const ( var watchColumns = [3]string{"watchlist.price", "watchlist.change", "watchlist.volume"} -// WatchlistState is the open group, the chosen symbol and the hidden columns. type WatchlistState struct { Group int Selected string @@ -54,28 +54,33 @@ type WatchlistOptions struct { // WatchlistView is a built Watchlist and this frame's events. type WatchlistView struct { - Element *ui.Element - // Changed reports a new State.Selected; Submitted is Enter or a double click. + Element *ui.Element Changed, Submitted bool - // Moved asks the caller to move rows Rows of the open group before index To. - Moved bool - Rows []int - To int + Moved bool + Rows []int + To int } -// Watchlist shows grouped watched symbols with chosen columns; rows reorder by dragging and keep the choice through updates. func Watchlist(c *ui.Context, s *WatchlistState, groups []WatchGroup, opts WatchlistOptions) WatchlistView { if s == nil || len(groups) == 0 { panic("mujica: Watchlist needs a state and a group") } dec := priceDecimals("Watchlist", opts.Decimals) + + if s.Group < 0 || s.Group >= len(groups) { + panic("mujica: Watchlist Group out of range") + } + d := Density(c) + var v WatchlistView + v.Element = ui.Column(c).Gap(d.Unit() * 2).Grow(1).MinHeight(0).Disabled(opts.Disabled) + opts.Disabled = v.Element.IsDisabled() + if opts.Disabled { + copy := *s + s = © + } if s.Hidden == nil { s.Hidden = map[WatchColumn]bool{} } - s.Group = max(0, min(s.Group, len(groups)-1)) - d := Density(c) - var v WatchlistView - v.Element = ui.Column(c).Gap(d.Unit() * 2).MinHeight(0).Disabled(opts.Disabled) v.Element.Children(func() { ui.Row(c).Gap(d.Unit() * 2).AlignItems(ui.Center).Children(func() { tabs := make([]Tab, len(groups)) @@ -122,7 +127,10 @@ func watchlistRows(c *ui.Context, s *WatchlistState, items []WatchItem, dec int, s.rows.Key = func(i int) any { return items[i].Symbol } s.rows.Label = func(i int) string { return items[i].Symbol } s.rows.Selected = cursor - s.rows.Reorder = func(rows []int, to int) { v.Moved, v.Rows, v.To = true, slices.Clone(rows), to } + s.rows.Reorder = nil + if !disabled { + s.rows.Reorder = func(rows []int, to int) { v.Moved, v.Rows, v.To = true, slices.Clone(rows), to } + } if len(items) == 0 { ui.Text(c, msg(c, "watchlist.empty")).TextColor(k.TextMuted).Padding(d.Unit() * 3) return false, false @@ -155,6 +163,7 @@ func watchlistRows(c *ui.Context, s *WatchlistState, items []WatchItem, dec int, }) }).Grow(1).MinHeight(0).Padding(d.Unit()).Background(k.Surface).Border(theme.BorderWidth, k.Border).Radius(theme.ControlRadius) restore() + internal.Ring(list, k.Focus, theme.ControlRadius) if !disabled && s.cursor != before && s.cursor >= 0 { s.Selected, changed = items[s.cursor].Symbol, true } diff --git a/watchlist_test.go b/watchlist_test.go new file mode 100644 index 0000000..389764a --- /dev/null +++ b/watchlist_test.go @@ -0,0 +1,137 @@ +package mujica + +import ( + "fmt" + "slices" + "testing" + + "github.com/egoist/mygo/ui" +) + +func watchlistTester(s *WatchlistState, groups *[]WatchGroup, opts WatchlistOptions, got *WatchlistView) *ui.Tester { + tt := ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + ui.Column(c).Padding(10).Height(400).Children(func() { + v := Watchlist(c, s, *groups, opts) + if v.Changed || v.Submitted || v.Moved { + *got = v + } + if v.Moved { + g := &(*groups)[s.Group] + g.Items = watchlistMove(g.Items, v.Rows, v.To) + } + }) + }, 700, 420) + tt.Frame() + return tt +} + +// watchlistMove is how a caller applies a Moved event. +func watchlistMove(items []WatchItem, rows []int, to int) []WatchItem { + var moved, rest []WatchItem + at := to + for i, it := range items { + if slices.Contains(rows, i) { + moved = append(moved, it) + if i < to { + at-- + } + } else { + rest = append(rest, it) + } + } + return slices.Insert(rest, at, moved...) +} + +func TestWatchlistSelectKeepsThroughUpdates(t *testing.T) { + var s WatchlistState + groups := mktWatch() + var got WatchlistView + tt := watchlistTester(&s, &groups, WatchlistOptions{}, &got) + if err := tt.Click("MSFT"); err != nil { + t.Fatal(err) + } + if s.Selected != "MSFT" || !got.Changed { + t.Fatalf("selected %q", s.Selected) + } + // A refresh with new prices in a new order keeps the choice on MSFT. + groups[0].Items = []WatchItem{groups[0].Items[2], groups[0].Items[1], groups[0].Items[0]} + groups[0].Items[1].Price = 420 + got = WatchlistView{} + tt.Frame() + tt.Key(0, ui.KeyDown) + if s.Selected != "AAPL" { + t.Fatalf("Down after refresh chose %q", s.Selected) + } + tt.Key(0, ui.KeyEnter) + if !got.Submitted { + t.Fatal("Enter did not submit") + } +} + +func TestWatchlistColumnsAndGroups(t *testing.T) { + var s WatchlistState + groups := mktWatch() + var got WatchlistView + tt := watchlistTester(&s, &groups, WatchlistOptions{}, &got) + if !tt.HasText("51,000,000") { + t.Fatalf("volume missing: %q", tt.Texts()) + } + _ = tt.Click("Columns") + _ = tt.Click("Volume") + tt.Key(0, ui.KeyEscape) + if tt.HasText("51,000,000") || !s.Hidden[WatchVolume] { + t.Fatal("volume column still shown") + } + _ = tt.Click("Energy") + if s.Group != 1 || !tt.HasText("XOM") || tt.HasText("AAPL") { + t.Fatalf("group %d texts %q", s.Group, tt.Texts()) + } +} + +func TestWatchlistDragReorders(t *testing.T) { + var s WatchlistState + groups := mktWatch() + var got WatchlistView + tt := watchlistTester(&s, &groups, WatchlistOptions{}, &got) + from, _ := tt.Find("NVDA") + to, _ := tt.Find("AAPL") + tt.Press(from.X, from.Y+from.H/2) + tt.Move(from.X, from.Y-10) + tt.Move(to.X, to.Y) + tt.Release(to.X, to.Y) + order := []string{} + for _, it := range groups[0].Items { + order = append(order, it.Symbol) + } + if !got.Moved || order[0] != "NVDA" { + t.Fatalf("moved %v order %v", got.Moved, order) + } +} + +func TestWatchlistDisabledAndLarge(t *testing.T) { + var s WatchlistState + groups := mktWatch() + var got WatchlistView + tt := watchlistTester(&s, &groups, WatchlistOptions{Disabled: true}, &got) + _ = tt.Click("MSFT") + if s.Selected != "" || got.Changed { + t.Fatalf("disabled list chose %q", s.Selected) + } + big := []WatchGroup{{Name: "All"}} + for i := range 100000 { + big[0].Items = append(big[0].Items, WatchItem{Symbol: fmt.Sprint("S", i), Price: 1}) + } + var b WatchlistState + tt = watchlistTester(&b, &big, WatchlistOptions{}, &got) + if n := len(tt.Texts()); n > 200 { + t.Fatalf("built %d texts for 100000 rows", n) + } +} + +func TestWatchlistSnapshot(t *testing.T) { + snapshot(t, "watchlist", 640, 260, func(c *ui.Context) { + s := &WatchlistState{Selected: "MSFT"} + ui.Column(c).Padding(16).Height(260).Children(func() { Watchlist(c, s, mktWatch(), WatchlistOptions{}) }) + }) +}