Правки по замечаниям на windows11-sale.png (VM 1280×800 maximized — высоты меньше, чем в headless): 1. Адаптив правой панели по высоте (SaleView.axaml.cs, подписка на Bounds): уровни normal/compact/tiny — сжимаются отступы, ИТОГО, кнопки; скрывается блок «Последний чек»; ClipToBounds, чтобы ничего не уходило под полосу клавиш. 2. Шапка — Grid вместо StackPanel: чипы в отдельной колонке и не обрезаются; адаптив по ширине (MainWindow.axaml.cs): <1400 короткие чипы, <1100 без «Магазин…». BadgesCompact во VM переключает тексты ShiftBadge/QueueBadge. 3. Иконка «Выплата» (одиночная горизонталь) схлопывалась при Stretch=Uniform → Stretch=None; «Внесение» выровнял так же. 4. Hover строки корзины — светлый #F7FBF8 вместо тёмного из темы. 5. Плитки избранного — Grid *,Auto: цена прибита к низу, у всех на одной линии. 6. Полоса горячих клавиш — выравнивание влево (как в макете). 7. --density: рендер экрана продажи в 1280×720/800, 1366×768, 1920×1080 для проверки. --uitest OK, 82 unit зелёные, smoke OK, скорость не хуже. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
42 lines
2 KiB
C#
42 lines
2 KiB
C#
using Avalonia;
|
||
using foodmarket.Pos.Tooling;
|
||
|
||
namespace foodmarket.Pos;
|
||
|
||
internal static class Program
|
||
{
|
||
[STAThread]
|
||
public static int Main(string[] args)
|
||
{
|
||
PosFormat.Apply(); // единый формат чисел (KZ/RU: «3 422 ₸», «1,235 кг»)
|
||
// CLI-режимы (без интерактивного окна):
|
||
// --smoke : прогон сценария кассы через логику (без UI), печать результатов.
|
||
// --screenshots : headless-рендер экранов в docs/pos-screenshots (1920×1080 + 1366×768).
|
||
// --uitest : headless UI-автотест экрана продажи (Avalonia.Headless, для CI/xvfb).
|
||
if (args.Contains("--smoke")) return SmokeRunner.Run(args);
|
||
if (args.Contains("--screenshots")) return ScreenshotRunner.Run(args);
|
||
if (args.Contains("--compare")) return CompareRunner.Run(args);
|
||
if (args.Contains("--density")) return ScreenshotRunner.RunDensity(args);
|
||
if (args.Contains("--uitest")) return UiTestRunner.Run(args);
|
||
|
||
// --demo : показать реальное окно с примерами данных (для скриншота на Windows).
|
||
if (args.Contains("--demo") || args.Contains("--demo-pay")) App.DemoMode = true;
|
||
if (args.Contains("--demo-pay")) App.DemoPay = true;
|
||
|
||
BuildAvaloniaApp().StartWithClassicDesktopLifetime(args);
|
||
return 0;
|
||
}
|
||
|
||
public static AppBuilder BuildAvaloniaApp()
|
||
{
|
||
var b = AppBuilder.Configure<App>().UsePlatformDetect();
|
||
// Демо-скриншот на headless VM (без GPU) — ПО-рендеринг, иначе окно чёрное.
|
||
if (App.DemoMode && OperatingSystem.IsWindows())
|
||
b = b.With(new Avalonia.Win32PlatformOptions
|
||
{
|
||
RenderingMode = new[] { Avalonia.Win32RenderingMode.Software },
|
||
});
|
||
return b.WithInterFont().LogToTrace();
|
||
}
|
||
}
|