feat(proj): init

This commit is contained in:
vl.arkhangelskii
2026-09-21 04:06:43 +03:00
commit c956b94983
1076 changed files with 50876 additions and 0 deletions
@@ -0,0 +1,130 @@
import 'package:please_pay_me/app/home_tabs.dart';
import 'package:please_pay_me/features/auth/login_screen.dart';
import 'package:please_pay_me/features/budgets/budgets_screen.dart';
import 'package:please_pay_me/features/journal/journal_screen.dart';
import 'package:please_pay_me/features/overview/overview_screen.dart';
import 'package:please_pay_me/features/profile/profile_screen.dart';
import 'package:please_pay_me/features/splash/splash_screen.dart';
import 'package:please_pay_me/features/work/work_screen.dart';
import 'package:please_pay_me_widgetbook/support/demo_scope.dart';
import 'package:widgetbook/widgetbook.dart';
WidgetbookComponent overviewScreenComponent() {
return WidgetbookComponent(
name: 'OverviewScreen',
useCases: [
WidgetbookUseCase(
name: 'С активным бюджетом',
builder: (context) => const DemoScope(child: OverviewScreen()),
),
WidgetbookUseCase(
name: 'Без бюджетов',
builder: (context) => const DemoScope(seeded: false, child: OverviewScreen()),
),
],
);
}
WidgetbookComponent journalScreenComponent() {
return WidgetbookComponent(
name: 'JournalScreen',
useCases: [
WidgetbookUseCase(
name: 'С операциями',
builder: (context) => const DemoScope(child: JournalScreen()),
),
WidgetbookUseCase(
name: 'Пустой',
builder: (context) => const DemoScope(seeded: false, child: JournalScreen()),
),
],
);
}
WidgetbookComponent budgetsScreenComponent() {
return WidgetbookComponent(
name: 'BudgetsScreen',
useCases: [
WidgetbookUseCase(
name: 'Активные и завершённые',
builder: (context) => const DemoScope(child: BudgetsScreen()),
),
WidgetbookUseCase(
name: 'Пустой',
builder: (context) => const DemoScope(seeded: false, child: BudgetsScreen()),
),
],
);
}
WidgetbookComponent workScreenComponent() {
return WidgetbookComponent(
name: 'WorkScreen',
useCases: [
WidgetbookUseCase(
name: 'С работой',
builder: (context) => const DemoScope(child: WorkScreen()),
),
WidgetbookUseCase(
name: 'Пустой',
builder: (context) => const DemoScope(seeded: false, child: WorkScreen()),
),
],
);
}
WidgetbookComponent profileScreenComponent() {
return WidgetbookComponent(
name: 'ProfileScreen',
useCases: [
WidgetbookUseCase(
name: 'Демо-сессия',
builder: (context) => const DemoScope(child: ProfileScreen()),
),
],
);
}
WidgetbookComponent splashScreenComponent() {
return WidgetbookComponent(
name: 'SplashScreen',
useCases: [
WidgetbookUseCase(
name: 'Запуск',
builder: (context) => const SplashScreen(),
),
],
);
}
WidgetbookComponent loginScreenComponent() {
return WidgetbookComponent(
name: 'LoginScreen',
useCases: [
WidgetbookUseCase(
name: 'Вход через Telegram',
builder: (context) => DemoScope(
// Desktop has no WebView, so the catalog stubs the launcher to show
// the mobile layout.
child: LoginScreen(launchTelegramLogin: (_, __) async => null),
),
),
WidgetbookUseCase(
name: 'Вход по токену',
builder: (context) => const DemoScope(child: LoginScreen()),
),
],
);
}
WidgetbookComponent homeTabsComponent() {
return WidgetbookComponent(
name: 'HomeTabs',
useCases: [
WidgetbookUseCase(
name: 'Полное приложение',
builder: (context) => const DemoScope(child: HomeTabs()),
),
],
);
}
@@ -0,0 +1,64 @@
import 'package:please_pay_me/data/demo/demo_backend.dart';
import 'package:please_pay_me/features/budgets/budget_form_sheet.dart';
import 'package:please_pay_me/features/expenses/expense_form_sheet.dart';
import 'package:please_pay_me/features/work/job_form_sheet.dart';
import 'package:please_pay_me_widgetbook/support/demo_scope.dart';
import 'package:widgetbook/widgetbook.dart';
WidgetbookComponent sheetsComponent() {
return WidgetbookComponent(
name: 'Формы',
useCases: [
WidgetbookUseCase(
name: 'Новая трата',
builder: (context) => DemoScope(
child: ExpenseFormSheet(
budgetName: 'До аванса',
remainingToday: 1420,
onSubmit: ({required amount, note, required spentAt}) async => null,
),
),
),
WidgetbookUseCase(
name: 'Новый бюджет',
builder: (context) => DemoScope(
child: BudgetFormSheet(
onSubmit: ({
required name,
required totalAmount,
required startDate,
required endDate,
required resetExpenses,
}) async =>
null,
),
),
),
WidgetbookUseCase(
name: 'Новая работа',
builder: (context) => DemoScope(
child: JobFormSheet(
onSubmit: ({
required name,
required salaryAmount,
required payDays,
required firstPayPercent,
required weekendPolicy,
}) async =>
null,
),
),
),
WidgetbookUseCase(
name: 'Ошибка сохранения',
builder: (context) => DemoScope(
child: ExpenseFormSheet(
budgetName: DemoBackend.user.displayName,
onSubmit: ({required amount, note, required spentAt}) async =>
'Бюджет уже завершён',
),
),
),
],
);
}