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
+96
View File
@@ -0,0 +1,96 @@
# Please Pay Me — Widgetbook
Portable component catalog for the mobile UI kit. Lives as a **separate package**
under `mobile/widgetbook/` and depends on the app package via path — no changes
required in production `lib/main.dart`.
## Run
```powershell
cd mobile\widgetbook
.\run.ps1 # chrome по умолчанию
.\run.ps1 -Device windows
```
Или из `mobile/`:
```powershell
.\run.ps1 -Target widgetbook -Device chrome
```
```bash
cd mobile/widgetbook
flutter pub get
flutter run -d chrome
# or
flutter run -d windows
```
## Structure
```
widgetbook/
├── lib/
│ ├── main.dart
│ ├── app.dart # WidgetbookRoot + addons
│ ├── catalog.dart # directory tree (also used by smoke tests)
│ ├── addons/ # theme / locale / device frame
│ ├── knobs/ # shared knob helpers
│ ├── support/preview.dart # iOS grouped-background canvas for use-cases
│ ├── support/demo_scope.dart # real screens on the in-memory DemoBackend
│ └── use_cases/ # Atoms → Molecules → Navigation → Feedback → Screens
└── test/catalog_smoke_test.dart
```
## iOS kit
Компоненты построены на Cupertino и следуют Apple HIG:
- семантические цвета (`label` / `separator` / `groupedBackground`) объявлены как
`CupertinoDynamicColor`, поэтому light/dark резолвится автоматически;
- типографика — шкала SF Pro (`largeTitle` 34 … `caption2` 11), в качестве
кросс-платформенной замены SF используется Inter;
- списки — inset-grouped секции с hairline-разделителями (0.5pt) и отступом
под leading-бейдж, как в Settings;
- контролы — `CupertinoButton`, `CupertinoTextField`, `CupertinoSwitch`,
`CupertinoSlidingSegmentedControl`, `CupertinoTabBar`, `CupertinoAlertDialog`,
`CupertinoActionSheet`, `CupertinoActivityIndicator`;
- вместо Material SnackBar — `AppToast`: плавающая blur-капсула поверх контента.
Бренд-тинт остался зелёным (`AppColors.accent`) и подменяет `systemBlue`.
Use-cases render **real widgets** from `package:please_pay_me/ui/...` and themes from
`package:please_pay_me/theme/...`.
Addons:
- **Theme** — Light / Dark (`CupertinoThemeAddon`, `buildLightTheme` / `buildDarkTheme`)
- **Locale** — `ru` / `en`
- **Viewport** — iPhone / Android frames
## Reuse in another Flutter project
1. Copy `widgetbook/` folder (or this package).
2. Point `please_pay_me` path dependency to your UI package (or rename dependency).
3. Keep exporting widgets from that package; use-cases only import them.
4. Run `flutter pub get && flutter run`.
Optional codegen (annotations already in `pubspec.yaml`):
```bash
dart run build_runner build --delete-conflicting-outputs
```
Current catalog is **manual** via `catalog.dart` so it stays easy to copy without
a generator step.
## Tests
```bash
cd mobile/widgetbook
flutter test
```
Smoke-тесты проверяют, что структура каталога на месте, и **рендерят каждый use-case
в светлой и тёмной теме** внутри `WidgetbookScope` (knobs читают состояние из контекста),
падая на любом исключении при построении.