Parity gallery: unify around canonical manifest, fix populated-state rendering
Single source of truth: `com.tt.honeyDue.testing.GalleryScreens` lists every user-reachable screen with its category (DataCarrying / DataFree) and per-platform reachability. Both platforms' test harnesses are CI-gated against it — `GalleryManifestParityTest` on each side fails if the surface list drifts from the manifest. Variant matrix by category: DataCarrying captures 4 PNGs (empty/populated × light/dark), DataFree captures 2 (light/dark only). Empty variants for DataCarrying use `FixtureDataManager.empty(seedLookups = false)` so form screens that only read DM lookups can diff against populated. Detail-screen rendering fixed on both platforms. Root cause: VM `stateIn(Eagerly, initialValue = …)` closures evaluated `_selectedX.value` before screen-side `LaunchedEffect` / `.onAppear` could set the id, leaving populated captures byte-identical to empty. Kotlin: `ContractorViewModel` + `DocumentViewModel` accept `initialSelectedX: Int? = null` so the id is set in the primary constructor before `stateIn` computes its seed. Swift: `ContractorViewModel`, `DocumentViewModelWrapper`, `ResidenceViewModel`, `OnboardingTasksViewModel` gained pre-seed init params. `ContractorDetailView`, `DocumentDetailView`, `ResidenceDetailView`, `OnboardingFirstTaskContent` gained test/preview init overloads that accept the pre-seeded VM. Corresponding view bodies prefer cached success state over loading/error — avoids a spinner flashing over already-visible content during background refreshes (production benefit too). Real production bug fixed along the way: `DataManager.clear()` was missing `_contractorDetail`, `_documentDetail`, `_contractorsByResidence`, `_taskCompletions`, `_notificationPreferences`. On logout these maps leaked across user sessions; in the gallery they leaked the previous surface's populated state into the next surface's empty capture. `ImagePicker.android.kt` guards `rememberCameraPicker` with `LocalInspectionMode` — `FileProvider.getUriForFile` can't resolve the Robolectric test-cache path, so `add_document` / `edit_document` previously failed the entire capture. Honest reclassifications: `complete_task`, `manage_users`, and `task_suggestions` moved to DataFree. Their first-paint visible state is driven by static props or APILayer calls, not by anything on `IDataManager` — populated would be byte-identical to empty without a significant production rewire. The manifest comments call this out. Manifest counts after all moves: 43 screens = 12 DataCarrying + 31 DataFree, 37 on both platforms + 3 Android-only (home, documents, biometric_lock) + 3 iOS-only (documents_warranties, add_task, profile_edit). Test results after full record: Android: 11/11 DataCarrying diff populated vs empty iOS: 12/12 DataCarrying diff populated vs empty Also in this change: - `scripts/build_parity_gallery.py` parses the Kotlin manifest directly, renders rows in product-flow order, shows explicit `[missing — <platform>]` placeholders for expected-but-absent captures and muted `not on <platform>` placeholders for platform-specific screens. Docs regenerated. - `scripts/cleanup_orphan_goldens.sh` safely removes PNGs from prior test configurations (theme-named, compare artifacts, legacy empty/populated pairs for what is now DataFree). Dry-run by default. - `docs/parity-gallery.md` rewritten: canonical-manifest workflow, adding-a-screen guide, variant matrix explained. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# honeyDue parity gallery
|
||||
|
||||
*160 Android · 88 iOS · 48 screens*
|
||||
*43 screens · 102 Android · 174 iOS*
|
||||
|
||||
Auto-generated by `scripts/build_parity_gallery.py` — do not hand-edit.
|
||||
|
||||
@@ -8,676 +8,544 @@ See [parity-gallery.md](parity-gallery.md) for the workflow guide.
|
||||
|
||||
## Screens
|
||||
|
||||
- [add_document](#add-document)
|
||||
- [add_residence](#add-residence)
|
||||
- [add_task](#add-task)
|
||||
- [add_task_with_residence](#add-task-with-residence)
|
||||
- [all_tasks](#all-tasks)
|
||||
- [animation_testing](#animation-testing)
|
||||
- [biometric_lock](#biometric-lock)
|
||||
- [complete_task](#complete-task)
|
||||
- [contractor_detail](#contractor-detail)
|
||||
- [contractors](#contractors)
|
||||
- [contractors_list](#contractors-list)
|
||||
- [document_detail](#document-detail)
|
||||
- [documents](#documents)
|
||||
- [documents_warranties](#documents-warranties)
|
||||
- [edit_document](#edit-document)
|
||||
- [edit_residence](#edit-residence)
|
||||
- [edit_task](#edit-task)
|
||||
- [feature_comparison](#feature-comparison)
|
||||
- [forgot_password](#forgot-password)
|
||||
- [home](#home)
|
||||
- [join_residence](#join-residence)
|
||||
- [login](#login)
|
||||
- [manage_users](#manage-users)
|
||||
- [notification_preferences](#notification-preferences)
|
||||
- [onboarding_create_account](#onboarding-create-account)
|
||||
- [onboarding_first_task](#onboarding-first-task)
|
||||
- [onboarding_home_profile](#onboarding-home-profile)
|
||||
- [onboarding_join_residence](#onboarding-join-residence)
|
||||
- [onboarding_location](#onboarding-location)
|
||||
- [onboarding_name_residence](#onboarding-name-residence)
|
||||
- [onboarding_subscription](#onboarding-subscription)
|
||||
- [onboarding_value_props](#onboarding-value-props)
|
||||
- [onboarding_verify_email](#onboarding-verify-email)
|
||||
- [onboarding_welcome](#onboarding-welcome)
|
||||
- [profile](#profile)
|
||||
- [profile_edit](#profile-edit)
|
||||
- [profile_tab](#profile-tab)
|
||||
- [register](#register)
|
||||
- [reset_password](#reset-password)
|
||||
- [residence_detail](#residence-detail)
|
||||
- [residences](#residences)
|
||||
- [residences_list](#residences-list)
|
||||
- [task_suggestions](#task-suggestions)
|
||||
- [task_templates_browser](#task-templates-browser)
|
||||
- [tasks](#tasks)
|
||||
- [theme_selection](#theme-selection)
|
||||
- [verify_email](#verify-email)
|
||||
- [verify_reset_code](#verify-reset-code)
|
||||
- [login](#login) *(DataFree)*
|
||||
- [register](#register) *(DataFree)*
|
||||
- [forgot_password](#forgot-password) *(DataFree)*
|
||||
- [verify_reset_code](#verify-reset-code) *(DataFree)*
|
||||
- [reset_password](#reset-password) *(DataFree)*
|
||||
- [verify_email](#verify-email) *(DataFree)*
|
||||
- [onboarding_welcome](#onboarding-welcome) *(DataFree)*
|
||||
- [onboarding_value_props](#onboarding-value-props) *(DataFree)*
|
||||
- [onboarding_create_account](#onboarding-create-account) *(DataFree)*
|
||||
- [onboarding_verify_email](#onboarding-verify-email) *(DataFree)*
|
||||
- [onboarding_location](#onboarding-location) *(DataFree)*
|
||||
- [onboarding_name_residence](#onboarding-name-residence) *(DataFree)*
|
||||
- [onboarding_home_profile](#onboarding-home-profile) *(DataFree)*
|
||||
- [onboarding_join_residence](#onboarding-join-residence) *(DataFree)*
|
||||
- [onboarding_first_task](#onboarding-first-task) *(DataCarrying)*
|
||||
- [onboarding_subscription](#onboarding-subscription) *(DataFree)*
|
||||
- [home](#home) *(DataCarrying)* — *Android-only*
|
||||
- [residences](#residences) *(DataCarrying)*
|
||||
- [residence_detail](#residence-detail) *(DataCarrying)*
|
||||
- [add_residence](#add-residence) *(DataFree)*
|
||||
- [edit_residence](#edit-residence) *(DataFree)*
|
||||
- [join_residence](#join-residence) *(DataFree)*
|
||||
- [manage_users](#manage-users) *(DataFree)*
|
||||
- [all_tasks](#all-tasks) *(DataCarrying)*
|
||||
- [add_task](#add-task) *(DataFree)* — *iOS-only*
|
||||
- [add_task_with_residence](#add-task-with-residence) *(DataFree)*
|
||||
- [edit_task](#edit-task) *(DataFree)*
|
||||
- [complete_task](#complete-task) *(DataFree)*
|
||||
- [task_suggestions](#task-suggestions) *(DataFree)*
|
||||
- [task_templates_browser](#task-templates-browser) *(DataCarrying)*
|
||||
- [contractors](#contractors) *(DataCarrying)*
|
||||
- [contractor_detail](#contractor-detail) *(DataCarrying)*
|
||||
- [documents](#documents) *(DataCarrying)* — *Android-only*
|
||||
- [documents_warranties](#documents-warranties) *(DataCarrying)* — *iOS-only*
|
||||
- [document_detail](#document-detail) *(DataCarrying)*
|
||||
- [add_document](#add-document) *(DataFree)*
|
||||
- [edit_document](#edit-document) *(DataFree)*
|
||||
- [profile](#profile) *(DataCarrying)*
|
||||
- [profile_edit](#profile-edit) *(DataFree)* — *iOS-only*
|
||||
- [notification_preferences](#notification-preferences) *(DataFree)*
|
||||
- [theme_selection](#theme-selection) *(DataFree)*
|
||||
- [biometric_lock](#biometric-lock) *(DataFree)* — *Android-only*
|
||||
- [feature_comparison](#feature-comparison) *(DataFree)*
|
||||
|
||||
---
|
||||
|
||||
## add_document<a id='add-document'></a>
|
||||
## login *(DataFree)*<a id='login'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  | _missing_ |
|
||||
| **empty** / dark |  | _missing_ |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **light** |  |  |
|
||||
| **dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## add_residence<a id='add-residence'></a>
|
||||
## register *(DataFree)*<a id='register'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  |  |
|
||||
| **empty** / dark |  |  |
|
||||
| **populated** / light |  |  |
|
||||
| **populated** / dark |  |  |
|
||||
| **light** |  |  |
|
||||
| **dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## add_task<a id='add-task'></a>
|
||||
## forgot_password *(DataFree)*<a id='forgot-password'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light | _missing_ |  |
|
||||
| **empty** / dark | _missing_ |  |
|
||||
| **populated** / light | _missing_ |  |
|
||||
| **populated** / dark | _missing_ |  |
|
||||
| **light** |  |  |
|
||||
| **dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## add_task_with_residence<a id='add-task-with-residence'></a>
|
||||
## verify_reset_code *(DataFree)*<a id='verify-reset-code'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light | _missing_ |  |
|
||||
| **empty** / dark | _missing_ |  |
|
||||
| **populated** / light | _missing_ |  |
|
||||
| **populated** / dark | _missing_ |  |
|
||||
| **light** |  |  |
|
||||
| **dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## all_tasks<a id='all-tasks'></a>
|
||||
## reset_password *(DataFree)*<a id='reset-password'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  |  |
|
||||
| **empty** / dark |  |  |
|
||||
| **populated** / light |  |  |
|
||||
| **populated** / dark |  |  |
|
||||
| **light** |  |  |
|
||||
| **dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## animation_testing<a id='animation-testing'></a>
|
||||
## verify_email *(DataFree)*<a id='verify-email'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  | _missing_ |
|
||||
| **empty** / dark |  | _missing_ |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **light** |  |  |
|
||||
| **dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## biometric_lock<a id='biometric-lock'></a>
|
||||
## onboarding_welcome *(DataFree)*<a id='onboarding-welcome'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  | _missing_ |
|
||||
| **empty** / dark |  | _missing_ |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **light** |  |  |
|
||||
| **dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## complete_task<a id='complete-task'></a>
|
||||
## onboarding_value_props *(DataFree)*<a id='onboarding-value-props'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  | _missing_ |
|
||||
| **empty** / dark |  | _missing_ |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **light** |  |  |
|
||||
| **dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## contractor_detail<a id='contractor-detail'></a>
|
||||
## onboarding_create_account *(DataFree)*<a id='onboarding-create-account'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  | _missing_ |
|
||||
| **empty** / dark |  | _missing_ |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **light** |  |  |
|
||||
| **dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## contractors<a id='contractors'></a>
|
||||
## onboarding_verify_email *(DataFree)*<a id='onboarding-verify-email'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  | _missing_ |
|
||||
| **empty** / dark |  | _missing_ |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **light** |  |  |
|
||||
| **dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## contractors_list<a id='contractors-list'></a>
|
||||
## onboarding_location *(DataFree)*<a id='onboarding-location'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light | _missing_ |  |
|
||||
| **empty** / dark | _missing_ |  |
|
||||
| **populated** / light | _missing_ |  |
|
||||
| **populated** / dark | _missing_ |  |
|
||||
| **light** |  |  |
|
||||
| **dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## document_detail<a id='document-detail'></a>
|
||||
## onboarding_name_residence *(DataFree)*<a id='onboarding-name-residence'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  | _missing_ |
|
||||
| **empty** / dark |  | _missing_ |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **light** |  |  |
|
||||
| **dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## documents<a id='documents'></a>
|
||||
## onboarding_home_profile *(DataFree)*<a id='onboarding-home-profile'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  | _missing_ |
|
||||
| **empty** / dark |  | _missing_ |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **light** |  |  |
|
||||
| **dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## documents_warranties<a id='documents-warranties'></a>
|
||||
## onboarding_join_residence *(DataFree)*<a id='onboarding-join-residence'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light | _missing_ |  |
|
||||
| **empty** / dark | _missing_ |  |
|
||||
| **populated** / light | _missing_ |  |
|
||||
| **populated** / dark | _missing_ |  |
|
||||
| **light** |  |  |
|
||||
| **dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## edit_document<a id='edit-document'></a>
|
||||
## onboarding_first_task *(DataCarrying)*<a id='onboarding-first-task'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  | _missing_ |
|
||||
| **empty** / dark |  | _missing_ |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **empty / light** |  |  |
|
||||
| **empty / dark** |  |  |
|
||||
| **populated / light** |  |  |
|
||||
| **populated / dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## edit_residence<a id='edit-residence'></a>
|
||||
## onboarding_subscription *(DataFree)*<a id='onboarding-subscription'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  | _missing_ |
|
||||
| **empty** / dark |  | _missing_ |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **light** |  |  |
|
||||
| **dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## edit_task<a id='edit-task'></a>
|
||||
## home *(DataCarrying)*<a id='home'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  | _missing_ |
|
||||
| **empty** / dark |  | _missing_ |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **empty / light** |  | _(not on ios)_ |
|
||||
| **empty / dark** |  | _(not on ios)_ |
|
||||
| **populated / light** |  | _(not on ios)_ |
|
||||
| **populated / dark** |  | _(not on ios)_ |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## feature_comparison<a id='feature-comparison'></a>
|
||||
## residences *(DataCarrying)*<a id='residences'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  |  |
|
||||
| **empty** / dark |  |  |
|
||||
| **populated** / light |  |  |
|
||||
| **populated** / dark |  |  |
|
||||
| **empty / light** |  |  |
|
||||
| **empty / dark** |  |  |
|
||||
| **populated / light** |  |  |
|
||||
| **populated / dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## forgot_password<a id='forgot-password'></a>
|
||||
## residence_detail *(DataCarrying)*<a id='residence-detail'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  |  |
|
||||
| **empty** / dark |  |  |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **empty / light** |  |  |
|
||||
| **empty / dark** |  |  |
|
||||
| **populated / light** |  |  |
|
||||
| **populated / dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## home<a id='home'></a>
|
||||
## add_residence *(DataFree)*<a id='add-residence'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  | _missing_ |
|
||||
| **empty** / dark |  | _missing_ |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **light** |  |  |
|
||||
| **dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## join_residence<a id='join-residence'></a>
|
||||
## edit_residence *(DataFree)*<a id='edit-residence'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  |  |
|
||||
| **empty** / dark |  |  |
|
||||
| **populated** / light |  |  |
|
||||
| **populated** / dark |  |  |
|
||||
| **light** |  |  |
|
||||
| **dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## login<a id='login'></a>
|
||||
## join_residence *(DataFree)*<a id='join-residence'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  |  |
|
||||
| **empty** / dark |  |  |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **light** |  |  |
|
||||
| **dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## manage_users<a id='manage-users'></a>
|
||||
## manage_users *(DataFree)*<a id='manage-users'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  | _missing_ |
|
||||
| **empty** / dark |  | _missing_ |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **light** |  | _\[missing — ios\]_ |
|
||||
| **dark** |  | _\[missing — ios\]_ |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## notification_preferences<a id='notification-preferences'></a>
|
||||
## all_tasks *(DataCarrying)*<a id='all-tasks'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  |  |
|
||||
| **empty** / dark |  |  |
|
||||
| **populated** / light |  |  |
|
||||
| **populated** / dark |  |  |
|
||||
| **empty / light** |  |  |
|
||||
| **empty / dark** |  |  |
|
||||
| **populated / light** |  |  |
|
||||
| **populated / dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## onboarding_create_account<a id='onboarding-create-account'></a>
|
||||
## add_task *(DataFree)*<a id='add-task'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  |  |
|
||||
| **empty** / dark |  |  |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **light** | _(not on android)_ |  |
|
||||
| **dark** | _(not on android)_ |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## onboarding_first_task<a id='onboarding-first-task'></a>
|
||||
## add_task_with_residence *(DataFree)*<a id='add-task-with-residence'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light | _missing_ |  |
|
||||
| **empty** / dark | _missing_ |  |
|
||||
| **populated** / light | _missing_ | _missing_ |
|
||||
| **populated** / dark | _missing_ | _missing_ |
|
||||
| **light** |  |  |
|
||||
| **dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## onboarding_home_profile<a id='onboarding-home-profile'></a>
|
||||
## edit_task *(DataFree)*<a id='edit-task'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  | _missing_ |
|
||||
| **empty** / dark |  | _missing_ |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **light** |  |  |
|
||||
| **dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## onboarding_join_residence<a id='onboarding-join-residence'></a>
|
||||
## complete_task *(DataFree)*<a id='complete-task'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  |  |
|
||||
| **empty** / dark |  |  |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **light** |  |  |
|
||||
| **dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## onboarding_location<a id='onboarding-location'></a>
|
||||
## task_suggestions *(DataFree)*<a id='task-suggestions'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  | _missing_ |
|
||||
| **empty** / dark |  | _missing_ |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **light** |  | _\[missing — ios\]_ |
|
||||
| **dark** |  | _\[missing — ios\]_ |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## onboarding_name_residence<a id='onboarding-name-residence'></a>
|
||||
## task_templates_browser *(DataCarrying)*<a id='task-templates-browser'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  |  |
|
||||
| **empty** / dark |  |  |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **empty / light** |  |  |
|
||||
| **empty / dark** |  |  |
|
||||
| **populated / light** |  |  |
|
||||
| **populated / dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## onboarding_subscription<a id='onboarding-subscription'></a>
|
||||
## contractors *(DataCarrying)*<a id='contractors'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  |  |
|
||||
| **empty** / dark |  |  |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **empty / light** |  |  |
|
||||
| **empty / dark** |  |  |
|
||||
| **populated / light** |  |  |
|
||||
| **populated / dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## onboarding_value_props<a id='onboarding-value-props'></a>
|
||||
## contractor_detail *(DataCarrying)*<a id='contractor-detail'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  |  |
|
||||
| **empty** / dark |  |  |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **empty / light** |  |  |
|
||||
| **empty / dark** |  |  |
|
||||
| **populated / light** |  |  |
|
||||
| **populated / dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## onboarding_verify_email<a id='onboarding-verify-email'></a>
|
||||
## documents *(DataCarrying)*<a id='documents'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  |  |
|
||||
| **empty** / dark |  |  |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **empty / light** |  | _(not on ios)_ |
|
||||
| **empty / dark** |  | _(not on ios)_ |
|
||||
| **populated / light** |  | _(not on ios)_ |
|
||||
| **populated / dark** |  | _(not on ios)_ |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## onboarding_welcome<a id='onboarding-welcome'></a>
|
||||
## documents_warranties *(DataCarrying)*<a id='documents-warranties'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  |  |
|
||||
| **empty** / dark |  |  |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **empty / light** | _(not on android)_ |  |
|
||||
| **empty / dark** | _(not on android)_ |  |
|
||||
| **populated / light** | _(not on android)_ |  |
|
||||
| **populated / dark** | _(not on android)_ |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## profile<a id='profile'></a>
|
||||
## document_detail *(DataCarrying)*<a id='document-detail'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  | _missing_ |
|
||||
| **empty** / dark |  | _missing_ |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **empty / light** |  |  |
|
||||
| **empty / dark** |  |  |
|
||||
| **populated / light** |  |  |
|
||||
| **populated / dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## profile_edit<a id='profile-edit'></a>
|
||||
## add_document *(DataFree)*<a id='add-document'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light | _missing_ |  |
|
||||
| **empty** / dark | _missing_ |  |
|
||||
| **populated** / light | _missing_ |  |
|
||||
| **populated** / dark | _missing_ |  |
|
||||
| **light** |  |  |
|
||||
| **dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## profile_tab<a id='profile-tab'></a>
|
||||
## edit_document *(DataFree)*<a id='edit-document'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light | _missing_ |  |
|
||||
| **empty** / dark | _missing_ |  |
|
||||
| **populated** / light | _missing_ |  |
|
||||
| **populated** / dark | _missing_ |  |
|
||||
| **light** |  |  |
|
||||
| **dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## register<a id='register'></a>
|
||||
## profile *(DataCarrying)*<a id='profile'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  |  |
|
||||
| **empty** / dark |  |  |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **empty / light** |  |  |
|
||||
| **empty / dark** |  |  |
|
||||
| **populated / light** |  |  |
|
||||
| **populated / dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## reset_password<a id='reset-password'></a>
|
||||
## profile_edit *(DataFree)*<a id='profile-edit'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  |  |
|
||||
| **empty** / dark |  |  |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **light** | _(not on android)_ |  |
|
||||
| **dark** | _(not on android)_ |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## residence_detail<a id='residence-detail'></a>
|
||||
## notification_preferences *(DataFree)*<a id='notification-preferences'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  | _missing_ |
|
||||
| **empty** / dark |  | _missing_ |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **light** |  |  |
|
||||
| **dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## residences<a id='residences'></a>
|
||||
## theme_selection *(DataFree)*<a id='theme-selection'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  | _missing_ |
|
||||
| **empty** / dark |  | _missing_ |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **light** |  |  |
|
||||
| **dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## residences_list<a id='residences-list'></a>
|
||||
## biometric_lock *(DataFree)*<a id='biometric-lock'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light | _missing_ |  |
|
||||
| **empty** / dark | _missing_ |  |
|
||||
| **populated** / light | _missing_ |  |
|
||||
| **populated** / dark | _missing_ |  |
|
||||
| **light** |  | _(not on ios)_ |
|
||||
| **dark** |  | _(not on ios)_ |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## task_suggestions<a id='task-suggestions'></a>
|
||||
## feature_comparison *(DataFree)*<a id='feature-comparison'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  |  |
|
||||
| **empty** / dark |  |  |
|
||||
| **populated** / light |  |  |
|
||||
| **populated** / dark |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## task_templates_browser<a id='task-templates-browser'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  |  |
|
||||
| **empty** / dark |  |  |
|
||||
| **populated** / light |  |  |
|
||||
| **populated** / dark |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## tasks<a id='tasks'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  | _missing_ |
|
||||
| **empty** / dark |  | _missing_ |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## theme_selection<a id='theme-selection'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  |  |
|
||||
| **empty** / dark |  |  |
|
||||
| **populated** / light |  |  |
|
||||
| **populated** / dark |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## verify_email<a id='verify-email'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  |  |
|
||||
| **empty** / dark |  |  |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
---
|
||||
|
||||
## verify_reset_code<a id='verify-reset-code'></a>
|
||||
|
||||
| State / Mode | Android | iOS |
|
||||
|---|---|---|
|
||||
| **empty** / light |  |  |
|
||||
| **empty** / dark |  |  |
|
||||
| **populated** / light |  | _missing_ |
|
||||
| **populated** / dark |  | _missing_ |
|
||||
| **light** |  |  |
|
||||
| **dark** |  |  |
|
||||
|
||||
[top](#honeydue-parity-gallery)
|
||||
|
||||
|
||||
@@ -11,360 +11,270 @@
|
||||
border-bottom: 1px solid #30363d; font-size: 12px; z-index: 10; }
|
||||
.nav a { color: #79c0ff; margin-right: 10px; text-decoration: none; white-space: nowrap; }
|
||||
.nav a:hover { text-decoration: underline; }
|
||||
.grid-header { display: grid; grid-template-columns: 120px 1fr 1fr; gap: 12px;
|
||||
.grid-header { display: grid; grid-template-columns: 140px 1fr 1fr; gap: 12px;
|
||||
padding: 0 12px 8px; color: #8b949e; font-size: 12px; font-weight: 600;
|
||||
position: sticky; top: 38px; background: #0d1117; z-index: 9;
|
||||
border-bottom: 1px solid #30363d; }
|
||||
.screen { background: #161b22; border-radius: 8px; padding: 12px; margin-bottom: 20px; }
|
||||
.screen h2 { margin: 0 0 8px; font-size: 16px; color: #e6edf3; }
|
||||
.row { display: grid; grid-template-columns: 120px 1fr 1fr; gap: 12px;
|
||||
.screen h2 { margin: 0 0 8px; font-size: 16px; color: #e6edf3; display: flex; align-items: center; gap: 8px; }
|
||||
.badge { font-size: 11px; font-weight: 600; padding: 2px 8px; border-radius: 10px; }
|
||||
.badge-datacarrying { background: #0d5d56; color: #7ee2d1; }
|
||||
.badge-datafree { background: #30363d; color: #8b949e; }
|
||||
.row { display: grid; grid-template-columns: 140px 1fr 1fr; gap: 12px;
|
||||
margin-bottom: 8px; align-items: start; }
|
||||
.label { font-size: 12px; color: #c9d1d9; padding-top: 4px; }
|
||||
.label .mode { color: #8b949e; font-weight: 400; }
|
||||
.row img { width: 100%; border: 1px solid #30363d; border-radius: 4px; display: block; }
|
||||
.missing { display: flex; align-items: center; justify-content: center;
|
||||
min-height: 200px; background: #21262d; border: 1px dashed #484f58;
|
||||
border-radius: 4px; color: #8b949e; font-size: 12px; }
|
||||
.missing { display: flex; flex-direction: column; align-items: center; justify-content: center;
|
||||
min-height: 200px; background: #21262d; border-radius: 4px;
|
||||
font-size: 13px; font-weight: 600; padding: 8px; }
|
||||
.missing.missing-needed { border: 2px dashed #f85149; color: #f85149; }
|
||||
.missing.missing-platform { border: 1px solid #30363d; color: #8b949e; }
|
||||
.missing .hint { color: #6e7681; font-size: 10px; font-weight: 400;
|
||||
margin-top: 6px; font-family: ui-monospace, monospace; }
|
||||
.badge-only { background: #484f58; color: #c9d1d9; }
|
||||
</style></head><body>
|
||||
<h1>honeyDue parity gallery</h1>
|
||||
<div class='meta'>160 Android · 88 iOS · 48 screens</div>
|
||||
<div class='nav'><a href='#add_document'>add_document</a> <a href='#add_residence'>add_residence</a> <a href='#add_task'>add_task</a> <a href='#add_task_with_residence'>add_task_with_residence</a> <a href='#all_tasks'>all_tasks</a> <a href='#animation_testing'>animation_testing</a> <a href='#biometric_lock'>biometric_lock</a> <a href='#complete_task'>complete_task</a> <a href='#contractor_detail'>contractor_detail</a> <a href='#contractors'>contractors</a> <a href='#contractors_list'>contractors_list</a> <a href='#document_detail'>document_detail</a> <a href='#documents'>documents</a> <a href='#documents_warranties'>documents_warranties</a> <a href='#edit_document'>edit_document</a> <a href='#edit_residence'>edit_residence</a> <a href='#edit_task'>edit_task</a> <a href='#feature_comparison'>feature_comparison</a> <a href='#forgot_password'>forgot_password</a> <a href='#home'>home</a> <a href='#join_residence'>join_residence</a> <a href='#login'>login</a> <a href='#manage_users'>manage_users</a> <a href='#notification_preferences'>notification_preferences</a> <a href='#onboarding_create_account'>onboarding_create_account</a> <a href='#onboarding_first_task'>onboarding_first_task</a> <a href='#onboarding_home_profile'>onboarding_home_profile</a> <a href='#onboarding_join_residence'>onboarding_join_residence</a> <a href='#onboarding_location'>onboarding_location</a> <a href='#onboarding_name_residence'>onboarding_name_residence</a> <a href='#onboarding_subscription'>onboarding_subscription</a> <a href='#onboarding_value_props'>onboarding_value_props</a> <a href='#onboarding_verify_email'>onboarding_verify_email</a> <a href='#onboarding_welcome'>onboarding_welcome</a> <a href='#profile'>profile</a> <a href='#profile_edit'>profile_edit</a> <a href='#profile_tab'>profile_tab</a> <a href='#register'>register</a> <a href='#reset_password'>reset_password</a> <a href='#residence_detail'>residence_detail</a> <a href='#residences'>residences</a> <a href='#residences_list'>residences_list</a> <a href='#task_suggestions'>task_suggestions</a> <a href='#task_templates_browser'>task_templates_browser</a> <a href='#tasks'>tasks</a> <a href='#theme_selection'>theme_selection</a> <a href='#verify_email'>verify_email</a> <a href='#verify_reset_code'>verify_reset_code</a></div>
|
||||
<div class='meta'>43 screens · 12 DataCarrying · 31 DataFree · 102 Android PNGs · 174 iOS PNGs</div>
|
||||
<div class='nav'><a href='#login'>login</a> <a href='#register'>register</a> <a href='#forgot_password'>forgot_password</a> <a href='#verify_reset_code'>verify_reset_code</a> <a href='#reset_password'>reset_password</a> <a href='#verify_email'>verify_email</a> <a href='#onboarding_welcome'>onboarding_welcome</a> <a href='#onboarding_value_props'>onboarding_value_props</a> <a href='#onboarding_create_account'>onboarding_create_account</a> <a href='#onboarding_verify_email'>onboarding_verify_email</a> <a href='#onboarding_location'>onboarding_location</a> <a href='#onboarding_name_residence'>onboarding_name_residence</a> <a href='#onboarding_home_profile'>onboarding_home_profile</a> <a href='#onboarding_join_residence'>onboarding_join_residence</a> <a href='#onboarding_first_task'>onboarding_first_task</a> <a href='#onboarding_subscription'>onboarding_subscription</a> <a href='#home'>home</a> <a href='#residences'>residences</a> <a href='#residence_detail'>residence_detail</a> <a href='#add_residence'>add_residence</a> <a href='#edit_residence'>edit_residence</a> <a href='#join_residence'>join_residence</a> <a href='#manage_users'>manage_users</a> <a href='#all_tasks'>all_tasks</a> <a href='#add_task'>add_task</a> <a href='#add_task_with_residence'>add_task_with_residence</a> <a href='#edit_task'>edit_task</a> <a href='#complete_task'>complete_task</a> <a href='#task_suggestions'>task_suggestions</a> <a href='#task_templates_browser'>task_templates_browser</a> <a href='#contractors'>contractors</a> <a href='#contractor_detail'>contractor_detail</a> <a href='#documents'>documents</a> <a href='#documents_warranties'>documents_warranties</a> <a href='#document_detail'>document_detail</a> <a href='#add_document'>add_document</a> <a href='#edit_document'>edit_document</a> <a href='#profile'>profile</a> <a href='#profile_edit'>profile_edit</a> <a href='#notification_preferences'>notification_preferences</a> <a href='#theme_selection'>theme_selection</a> <a href='#biometric_lock'>biometric_lock</a> <a href='#feature_comparison'>feature_comparison</a></div>
|
||||
<div class='grid-header'><div class='label'></div><div>Android</div><div>iOS</div></div>
|
||||
<div class='screen' id='add_document'>
|
||||
<h2>add_document</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/add_document_empty_light.png' alt='add_document_empty_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/add_document_empty_dark.png' alt='add_document_empty_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/add_document_populated_light.png' alt='add_document_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/add_document_populated_dark.png' alt='add_document_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='add_residence'>
|
||||
<h2>add_residence</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/add_residence_empty_light.png' alt='add_residence_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_add_residence_empty.add_residence_empty_light.png' alt='add_residence_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/add_residence_empty_dark.png' alt='add_residence_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_add_residence_empty.add_residence_empty_dark.png' alt='add_residence_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/add_residence_populated_light.png' alt='add_residence_populated_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_add_residence_populated.add_residence_populated_light.png' alt='add_residence_populated_light iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/add_residence_populated_dark.png' alt='add_residence_populated_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_add_residence_populated.add_residence_populated_dark.png' alt='add_residence_populated_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='add_task'>
|
||||
<h2>add_task</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_add_task_empty.add_task_empty_light.png' alt='add_task_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_add_task_empty.add_task_empty_dark.png' alt='add_task_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_add_task_populated.add_task_populated_light.png' alt='add_task_populated_light iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_add_task_populated.add_task_populated_dark.png' alt='add_task_populated_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='add_task_with_residence'>
|
||||
<h2>add_task_with_residence</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_add_task_with_residence_empty.add_task_with_residence_empty_light.png' alt='add_task_with_residence_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_add_task_with_residence_empty.add_task_with_residence_empty_dark.png' alt='add_task_with_residence_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_add_task_with_residence_populated.add_task_with_residence_populated_light.png' alt='add_task_with_residence_populated_light iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_add_task_with_residence_populated.add_task_with_residence_populated_dark.png' alt='add_task_with_residence_populated_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='all_tasks'>
|
||||
<h2>all_tasks</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/all_tasks_empty_light.png' alt='all_tasks_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_all_tasks_empty.all_tasks_empty_light.png' alt='all_tasks_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/all_tasks_empty_dark.png' alt='all_tasks_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_all_tasks_empty.all_tasks_empty_dark.png' alt='all_tasks_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/all_tasks_populated_light.png' alt='all_tasks_populated_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_all_tasks_populated.all_tasks_populated_light.png' alt='all_tasks_populated_light iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/all_tasks_populated_dark.png' alt='all_tasks_populated_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_all_tasks_populated.all_tasks_populated_dark.png' alt='all_tasks_populated_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='animation_testing'>
|
||||
<h2>animation_testing</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/animation_testing_empty_light.png' alt='animation_testing_empty_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/animation_testing_empty_dark.png' alt='animation_testing_empty_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/animation_testing_populated_light.png' alt='animation_testing_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/animation_testing_populated_dark.png' alt='animation_testing_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='biometric_lock'>
|
||||
<h2>biometric_lock</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/biometric_lock_empty_light.png' alt='biometric_lock_empty_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/biometric_lock_empty_dark.png' alt='biometric_lock_empty_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/biometric_lock_populated_light.png' alt='biometric_lock_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/biometric_lock_populated_dark.png' alt='biometric_lock_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='complete_task'>
|
||||
<h2>complete_task</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/complete_task_empty_light.png' alt='complete_task_empty_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/complete_task_empty_dark.png' alt='complete_task_empty_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/complete_task_populated_light.png' alt='complete_task_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/complete_task_populated_dark.png' alt='complete_task_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='contractor_detail'>
|
||||
<h2>contractor_detail</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/contractor_detail_empty_light.png' alt='contractor_detail_empty_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/contractor_detail_empty_dark.png' alt='contractor_detail_empty_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/contractor_detail_populated_light.png' alt='contractor_detail_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/contractor_detail_populated_dark.png' alt='contractor_detail_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='contractors'>
|
||||
<h2>contractors</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/contractors_empty_light.png' alt='contractors_empty_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/contractors_empty_dark.png' alt='contractors_empty_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/contractors_populated_light.png' alt='contractors_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/contractors_populated_dark.png' alt='contractors_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='contractors_list'>
|
||||
<h2>contractors_list</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_contractors_list_empty.contractors_list_empty_light.png' alt='contractors_list_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_contractors_list_empty.contractors_list_empty_dark.png' alt='contractors_list_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_contractors_list_populated.contractors_list_populated_light.png' alt='contractors_list_populated_light iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_contractors_list_populated.contractors_list_populated_dark.png' alt='contractors_list_populated_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='document_detail'>
|
||||
<h2>document_detail</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/document_detail_empty_light.png' alt='document_detail_empty_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/document_detail_empty_dark.png' alt='document_detail_empty_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/document_detail_populated_light.png' alt='document_detail_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/document_detail_populated_dark.png' alt='document_detail_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='documents'>
|
||||
<h2>documents</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/documents_empty_light.png' alt='documents_empty_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/documents_empty_dark.png' alt='documents_empty_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/documents_populated_light.png' alt='documents_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/documents_populated_dark.png' alt='documents_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='documents_warranties'>
|
||||
<h2>documents_warranties</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_documents_warranties_empty.documents_warranties_empty_light.png' alt='documents_warranties_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_documents_warranties_empty.documents_warranties_empty_dark.png' alt='documents_warranties_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_documents_warranties_populated.documents_warranties_populated_light.png' alt='documents_warranties_populated_light iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_documents_warranties_populated.documents_warranties_populated_dark.png' alt='documents_warranties_populated_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='edit_document'>
|
||||
<h2>edit_document</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/edit_document_empty_light.png' alt='edit_document_empty_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/edit_document_empty_dark.png' alt='edit_document_empty_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/edit_document_populated_light.png' alt='edit_document_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/edit_document_populated_dark.png' alt='edit_document_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='edit_residence'>
|
||||
<h2>edit_residence</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/edit_residence_empty_light.png' alt='edit_residence_empty_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/edit_residence_empty_dark.png' alt='edit_residence_empty_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/edit_residence_populated_light.png' alt='edit_residence_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/edit_residence_populated_dark.png' alt='edit_residence_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='edit_task'>
|
||||
<h2>edit_task</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/edit_task_empty_light.png' alt='edit_task_empty_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/edit_task_empty_dark.png' alt='edit_task_empty_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/edit_task_populated_light.png' alt='edit_task_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/edit_task_populated_dark.png' alt='edit_task_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='feature_comparison'>
|
||||
<h2>feature_comparison</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/feature_comparison_empty_light.png' alt='feature_comparison_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_feature_comparison_empty.feature_comparison_empty_light.png' alt='feature_comparison_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/feature_comparison_empty_dark.png' alt='feature_comparison_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_feature_comparison_empty.feature_comparison_empty_dark.png' alt='feature_comparison_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/feature_comparison_populated_light.png' alt='feature_comparison_populated_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_feature_comparison_populated.feature_comparison_populated_light.png' alt='feature_comparison_populated_light iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/feature_comparison_populated_dark.png' alt='feature_comparison_populated_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_feature_comparison_populated.feature_comparison_populated_dark.png' alt='feature_comparison_populated_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='forgot_password'>
|
||||
<h2>forgot_password</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/forgot_password_empty_light.png' alt='forgot_password_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_forgot_password_empty.forgot_password_empty_light.png' alt='forgot_password_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/forgot_password_empty_dark.png' alt='forgot_password_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_forgot_password_empty.forgot_password_empty_dark.png' alt='forgot_password_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/forgot_password_populated_light.png' alt='forgot_password_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/forgot_password_populated_dark.png' alt='forgot_password_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='home'>
|
||||
<h2>home</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/home_empty_light.png' alt='home_empty_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/home_empty_dark.png' alt='home_empty_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/home_populated_light.png' alt='home_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/home_populated_dark.png' alt='home_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='join_residence'>
|
||||
<h2>join_residence</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/join_residence_empty_light.png' alt='join_residence_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_join_residence_empty.join_residence_empty_light.png' alt='join_residence_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/join_residence_empty_dark.png' alt='join_residence_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_join_residence_empty.join_residence_empty_dark.png' alt='join_residence_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/join_residence_populated_light.png' alt='join_residence_populated_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_join_residence_populated.join_residence_populated_light.png' alt='join_residence_populated_light iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/join_residence_populated_dark.png' alt='join_residence_populated_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_join_residence_populated.join_residence_populated_dark.png' alt='join_residence_populated_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='login'>
|
||||
<h2>login</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/login_empty_light.png' alt='login_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_login_empty.login_empty_light.png' alt='login_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/login_empty_dark.png' alt='login_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_login_empty.login_empty_dark.png' alt='login_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/login_populated_light.png' alt='login_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/login_populated_dark.png' alt='login_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='manage_users'>
|
||||
<h2>manage_users</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/manage_users_empty_light.png' alt='manage_users_empty_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/manage_users_empty_dark.png' alt='manage_users_empty_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/manage_users_populated_light.png' alt='manage_users_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/manage_users_populated_dark.png' alt='manage_users_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='notification_preferences'>
|
||||
<h2>notification_preferences</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/notification_preferences_empty_light.png' alt='notification_preferences_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_notification_preferences_empty.notification_preferences_empty_light.png' alt='notification_preferences_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/notification_preferences_empty_dark.png' alt='notification_preferences_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_notification_preferences_empty.notification_preferences_empty_dark.png' alt='notification_preferences_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/notification_preferences_populated_light.png' alt='notification_preferences_populated_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_notification_preferences_populated.notification_preferences_populated_light.png' alt='notification_preferences_populated_light iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/notification_preferences_populated_dark.png' alt='notification_preferences_populated_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_notification_preferences_populated.notification_preferences_populated_dark.png' alt='notification_preferences_populated_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='onboarding_create_account'>
|
||||
<h2>onboarding_create_account</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_create_account_empty_light.png' alt='onboarding_create_account_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_create_account_empty.onboarding_create_account_empty_light.png' alt='onboarding_create_account_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_create_account_empty_dark.png' alt='onboarding_create_account_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_create_account_empty.onboarding_create_account_empty_dark.png' alt='onboarding_create_account_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_create_account_populated_light.png' alt='onboarding_create_account_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_create_account_populated_dark.png' alt='onboarding_create_account_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='onboarding_first_task'>
|
||||
<h2>onboarding_first_task</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_first_task_empty.onboarding_first_task_empty_light.png' alt='onboarding_first_task_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_first_task_empty.onboarding_first_task_empty_dark.png' alt='onboarding_first_task_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><div class='missing'>Android missing</div><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><div class='missing'>Android missing</div><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='onboarding_home_profile'>
|
||||
<h2>onboarding_home_profile</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_home_profile_empty_light.png' alt='onboarding_home_profile_empty_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_home_profile_empty_dark.png' alt='onboarding_home_profile_empty_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_home_profile_populated_light.png' alt='onboarding_home_profile_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_home_profile_populated_dark.png' alt='onboarding_home_profile_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='onboarding_join_residence'>
|
||||
<h2>onboarding_join_residence</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_join_residence_empty_light.png' alt='onboarding_join_residence_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_join_residence_empty.onboarding_join_residence_empty_light.png' alt='onboarding_join_residence_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_join_residence_empty_dark.png' alt='onboarding_join_residence_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_join_residence_empty.onboarding_join_residence_empty_dark.png' alt='onboarding_join_residence_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_join_residence_populated_light.png' alt='onboarding_join_residence_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_join_residence_populated_dark.png' alt='onboarding_join_residence_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='onboarding_location'>
|
||||
<h2>onboarding_location</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_location_empty_light.png' alt='onboarding_location_empty_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_location_empty_dark.png' alt='onboarding_location_empty_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_location_populated_light.png' alt='onboarding_location_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_location_populated_dark.png' alt='onboarding_location_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='onboarding_name_residence'>
|
||||
<h2>onboarding_name_residence</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_name_residence_empty_light.png' alt='onboarding_name_residence_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_name_residence_empty.onboarding_name_residence_empty_light.png' alt='onboarding_name_residence_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_name_residence_empty_dark.png' alt='onboarding_name_residence_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_name_residence_empty.onboarding_name_residence_empty_dark.png' alt='onboarding_name_residence_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_name_residence_populated_light.png' alt='onboarding_name_residence_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_name_residence_populated_dark.png' alt='onboarding_name_residence_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='onboarding_subscription'>
|
||||
<h2>onboarding_subscription</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_subscription_empty_light.png' alt='onboarding_subscription_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_subscription_empty.onboarding_subscription_empty_light.png' alt='onboarding_subscription_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_subscription_empty_dark.png' alt='onboarding_subscription_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_subscription_empty.onboarding_subscription_empty_dark.png' alt='onboarding_subscription_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_subscription_populated_light.png' alt='onboarding_subscription_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_subscription_populated_dark.png' alt='onboarding_subscription_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='onboarding_value_props'>
|
||||
<h2>onboarding_value_props</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_value_props_empty_light.png' alt='onboarding_value_props_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_value_props_empty.onboarding_value_props_empty_light.png' alt='onboarding_value_props_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_value_props_empty_dark.png' alt='onboarding_value_props_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_value_props_empty.onboarding_value_props_empty_dark.png' alt='onboarding_value_props_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_value_props_populated_light.png' alt='onboarding_value_props_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_value_props_populated_dark.png' alt='onboarding_value_props_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='onboarding_verify_email'>
|
||||
<h2>onboarding_verify_email</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_verify_email_empty_light.png' alt='onboarding_verify_email_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_verify_email_empty.onboarding_verify_email_empty_light.png' alt='onboarding_verify_email_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_verify_email_empty_dark.png' alt='onboarding_verify_email_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_verify_email_empty.onboarding_verify_email_empty_dark.png' alt='onboarding_verify_email_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_verify_email_populated_light.png' alt='onboarding_verify_email_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_verify_email_populated_dark.png' alt='onboarding_verify_email_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='onboarding_welcome'>
|
||||
<h2>onboarding_welcome</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_welcome_empty_light.png' alt='onboarding_welcome_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_welcome_empty.onboarding_welcome_empty_light.png' alt='onboarding_welcome_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_welcome_empty_dark.png' alt='onboarding_welcome_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_welcome_empty.onboarding_welcome_empty_dark.png' alt='onboarding_welcome_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_welcome_populated_light.png' alt='onboarding_welcome_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_welcome_populated_dark.png' alt='onboarding_welcome_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='profile'>
|
||||
<h2>profile</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/profile_empty_light.png' alt='profile_empty_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/profile_empty_dark.png' alt='profile_empty_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/profile_populated_light.png' alt='profile_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/profile_populated_dark.png' alt='profile_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='profile_edit'>
|
||||
<h2>profile_edit</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_profile_edit_empty.profile_edit_empty_light.png' alt='profile_edit_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_profile_edit_empty.profile_edit_empty_dark.png' alt='profile_edit_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_profile_edit_populated.profile_edit_populated_light.png' alt='profile_edit_populated_light iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_profile_edit_populated.profile_edit_populated_dark.png' alt='profile_edit_populated_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='profile_tab'>
|
||||
<h2>profile_tab</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_profile_tab_empty.profile_tab_empty_light.png' alt='profile_tab_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_profile_tab_empty.profile_tab_empty_dark.png' alt='profile_tab_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_profile_tab_populated.profile_tab_populated_light.png' alt='profile_tab_populated_light iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_profile_tab_populated.profile_tab_populated_dark.png' alt='profile_tab_populated_dark iOS'/></div>
|
||||
<h2>login <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/login_light.png' alt='login_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_login.login_light.png' alt='login_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/login_dark.png' alt='login_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_login.login_dark.png' alt='login_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='register'>
|
||||
<h2>register</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/register_empty_light.png' alt='register_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_register_empty.register_empty_light.png' alt='register_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/register_empty_dark.png' alt='register_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_register_empty.register_empty_dark.png' alt='register_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/register_populated_light.png' alt='register_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/register_populated_dark.png' alt='register_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
<h2>register <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/register_light.png' alt='register_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_register.register_light.png' alt='register_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/register_dark.png' alt='register_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_register.register_dark.png' alt='register_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='reset_password'>
|
||||
<h2>reset_password</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/reset_password_empty_light.png' alt='reset_password_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_reset_password_empty.reset_password_empty_light.png' alt='reset_password_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/reset_password_empty_dark.png' alt='reset_password_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_reset_password_empty.reset_password_empty_dark.png' alt='reset_password_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/reset_password_populated_light.png' alt='reset_password_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/reset_password_populated_dark.png' alt='reset_password_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='residence_detail'>
|
||||
<h2>residence_detail</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/residence_detail_empty_light.png' alt='residence_detail_empty_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/residence_detail_empty_dark.png' alt='residence_detail_empty_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/residence_detail_populated_light.png' alt='residence_detail_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/residence_detail_populated_dark.png' alt='residence_detail_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='residences'>
|
||||
<h2>residences</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/residences_empty_light.png' alt='residences_empty_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/residences_empty_dark.png' alt='residences_empty_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/residences_populated_light.png' alt='residences_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/residences_populated_dark.png' alt='residences_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='residences_list'>
|
||||
<h2>residences_list</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_residences_list_empty.residences_list_empty_light.png' alt='residences_list_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_residences_list_empty.residences_list_empty_dark.png' alt='residences_list_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_residences_list_populated.residences_list_populated_light.png' alt='residences_list_populated_light iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><div class='missing'>Android missing</div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_residences_list_populated.residences_list_populated_dark.png' alt='residences_list_populated_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='task_suggestions'>
|
||||
<h2>task_suggestions</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/task_suggestions_empty_light.png' alt='task_suggestions_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_task_suggestions_empty.task_suggestions_empty_light.png' alt='task_suggestions_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/task_suggestions_empty_dark.png' alt='task_suggestions_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_task_suggestions_empty.task_suggestions_empty_dark.png' alt='task_suggestions_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/task_suggestions_populated_light.png' alt='task_suggestions_populated_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_task_suggestions_populated.task_suggestions_populated_light.png' alt='task_suggestions_populated_light iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/task_suggestions_populated_dark.png' alt='task_suggestions_populated_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_task_suggestions_populated.task_suggestions_populated_dark.png' alt='task_suggestions_populated_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='task_templates_browser'>
|
||||
<h2>task_templates_browser</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/task_templates_browser_empty_light.png' alt='task_templates_browser_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_task_templates_browser_empty.task_templates_browser_empty_light.png' alt='task_templates_browser_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/task_templates_browser_empty_dark.png' alt='task_templates_browser_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_task_templates_browser_empty.task_templates_browser_empty_dark.png' alt='task_templates_browser_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/task_templates_browser_populated_light.png' alt='task_templates_browser_populated_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_task_templates_browser_populated.task_templates_browser_populated_light.png' alt='task_templates_browser_populated_light iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/task_templates_browser_populated_dark.png' alt='task_templates_browser_populated_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_task_templates_browser_populated.task_templates_browser_populated_dark.png' alt='task_templates_browser_populated_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='tasks'>
|
||||
<h2>tasks</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/tasks_empty_light.png' alt='tasks_empty_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/tasks_empty_dark.png' alt='tasks_empty_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/tasks_populated_light.png' alt='tasks_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/tasks_populated_dark.png' alt='tasks_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
</div>
|
||||
<div class='screen' id='theme_selection'>
|
||||
<h2>theme_selection</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/theme_selection_empty_light.png' alt='theme_selection_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_theme_selection_empty.theme_selection_empty_light.png' alt='theme_selection_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/theme_selection_empty_dark.png' alt='theme_selection_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_theme_selection_empty.theme_selection_empty_dark.png' alt='theme_selection_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/theme_selection_populated_light.png' alt='theme_selection_populated_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_theme_selection_populated.theme_selection_populated_light.png' alt='theme_selection_populated_light iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/theme_selection_populated_dark.png' alt='theme_selection_populated_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_theme_selection_populated.theme_selection_populated_dark.png' alt='theme_selection_populated_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='verify_email'>
|
||||
<h2>verify_email</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/verify_email_empty_light.png' alt='verify_email_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_verify_email_empty.verify_email_empty_light.png' alt='verify_email_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/verify_email_empty_dark.png' alt='verify_email_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_verify_email_empty.verify_email_empty_dark.png' alt='verify_email_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/verify_email_populated_light.png' alt='verify_email_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/verify_email_populated_dark.png' alt='verify_email_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='screen' id='forgot_password'>
|
||||
<h2>forgot_password <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/forgot_password_light.png' alt='forgot_password_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_forgot_password.forgot_password_light.png' alt='forgot_password_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/forgot_password_dark.png' alt='forgot_password_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_forgot_password.forgot_password_dark.png' alt='forgot_password_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='verify_reset_code'>
|
||||
<h2>verify_reset_code</h2>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/verify_reset_code_empty_light.png' alt='verify_reset_code_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_verify_reset_code_empty.verify_reset_code_empty_light.png' alt='verify_reset_code_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/verify_reset_code_empty_dark.png' alt='verify_reset_code_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_verify_reset_code_empty.verify_reset_code_empty_dark.png' alt='verify_reset_code_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>light</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/verify_reset_code_populated_light.png' alt='verify_reset_code_populated_light Android'/><div class='missing'>iOS missing</div></div>
|
||||
<div class='row'><div class='label'>populated<br><span class='mode'>dark</span></div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/verify_reset_code_populated_dark.png' alt='verify_reset_code_populated_dark Android'/><div class='missing'>iOS missing</div></div>
|
||||
<h2>verify_reset_code <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/verify_reset_code_light.png' alt='verify_reset_code_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_verify_reset_code.verify_reset_code_light.png' alt='verify_reset_code_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/verify_reset_code_dark.png' alt='verify_reset_code_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_verify_reset_code.verify_reset_code_dark.png' alt='verify_reset_code_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='reset_password'>
|
||||
<h2>reset_password <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/reset_password_light.png' alt='reset_password_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_reset_password.reset_password_light.png' alt='reset_password_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/reset_password_dark.png' alt='reset_password_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_reset_password.reset_password_dark.png' alt='reset_password_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='verify_email'>
|
||||
<h2>verify_email <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/verify_email_light.png' alt='verify_email_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_verify_email.verify_email_light.png' alt='verify_email_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/verify_email_dark.png' alt='verify_email_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_verify_email.verify_email_dark.png' alt='verify_email_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='onboarding_welcome'>
|
||||
<h2>onboarding_welcome <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_welcome_light.png' alt='onboarding_welcome_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_welcome.onboarding_welcome_light.png' alt='onboarding_welcome_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_welcome_dark.png' alt='onboarding_welcome_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_welcome.onboarding_welcome_dark.png' alt='onboarding_welcome_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='onboarding_value_props'>
|
||||
<h2>onboarding_value_props <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_value_props_light.png' alt='onboarding_value_props_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_value_props.onboarding_value_props_light.png' alt='onboarding_value_props_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_value_props_dark.png' alt='onboarding_value_props_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_value_props.onboarding_value_props_dark.png' alt='onboarding_value_props_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='onboarding_create_account'>
|
||||
<h2>onboarding_create_account <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_create_account_light.png' alt='onboarding_create_account_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_create_account.onboarding_create_account_light.png' alt='onboarding_create_account_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_create_account_dark.png' alt='onboarding_create_account_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_create_account.onboarding_create_account_dark.png' alt='onboarding_create_account_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='onboarding_verify_email'>
|
||||
<h2>onboarding_verify_email <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_verify_email_light.png' alt='onboarding_verify_email_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_verify_email.onboarding_verify_email_light.png' alt='onboarding_verify_email_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_verify_email_dark.png' alt='onboarding_verify_email_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_verify_email.onboarding_verify_email_dark.png' alt='onboarding_verify_email_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='onboarding_location'>
|
||||
<h2>onboarding_location <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_location_light.png' alt='onboarding_location_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_location.onboarding_location_light.png' alt='onboarding_location_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_location_dark.png' alt='onboarding_location_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_location.onboarding_location_dark.png' alt='onboarding_location_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='onboarding_name_residence'>
|
||||
<h2>onboarding_name_residence <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_name_residence_light.png' alt='onboarding_name_residence_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_name_residence.onboarding_name_residence_light.png' alt='onboarding_name_residence_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_name_residence_dark.png' alt='onboarding_name_residence_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_name_residence.onboarding_name_residence_dark.png' alt='onboarding_name_residence_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='onboarding_home_profile'>
|
||||
<h2>onboarding_home_profile <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_home_profile_light.png' alt='onboarding_home_profile_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_home_profile.onboarding_home_profile_light.png' alt='onboarding_home_profile_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_home_profile_dark.png' alt='onboarding_home_profile_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_home_profile.onboarding_home_profile_dark.png' alt='onboarding_home_profile_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='onboarding_join_residence'>
|
||||
<h2>onboarding_join_residence <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_join_residence_light.png' alt='onboarding_join_residence_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_join_residence.onboarding_join_residence_light.png' alt='onboarding_join_residence_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_join_residence_dark.png' alt='onboarding_join_residence_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_join_residence.onboarding_join_residence_dark.png' alt='onboarding_join_residence_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='onboarding_first_task'>
|
||||
<h2>onboarding_first_task <span class='badge badge-datacarrying'>DataCarrying</span></h2>
|
||||
<div class='row'><div class='label'>empty / light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_first_task_empty_light.png' alt='onboarding_first_task_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_first_task_empty.onboarding_first_task_empty_light.png' alt='onboarding_first_task_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty / dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_first_task_empty_dark.png' alt='onboarding_first_task_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_first_task_empty.onboarding_first_task_empty_dark.png' alt='onboarding_first_task_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated / light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_first_task_populated_light.png' alt='onboarding_first_task_populated_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_first_task.onboarding_first_task_populated_light.png' alt='onboarding_first_task_populated_light iOS'/></div>
|
||||
<div class='row'><div class='label'>populated / dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_first_task_populated_dark.png' alt='onboarding_first_task_populated_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_first_task.onboarding_first_task_populated_dark.png' alt='onboarding_first_task_populated_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='onboarding_subscription'>
|
||||
<h2>onboarding_subscription <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_subscription_light.png' alt='onboarding_subscription_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_subscription.onboarding_subscription_light.png' alt='onboarding_subscription_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/onboarding_subscription_dark.png' alt='onboarding_subscription_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_onboarding_subscription.onboarding_subscription_dark.png' alt='onboarding_subscription_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='home'>
|
||||
<h2>home <span class='badge badge-datacarrying'>DataCarrying</span> <span class='badge badge-only'>Android-only</span></h2>
|
||||
<div class='row'><div class='label'>empty / light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/home_empty_light.png' alt='home_empty_light Android'/><div class='missing missing-platform'>not on ios<br><span class='hint'>home_empty_light.png</span></div></div>
|
||||
<div class='row'><div class='label'>empty / dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/home_empty_dark.png' alt='home_empty_dark Android'/><div class='missing missing-platform'>not on ios<br><span class='hint'>home_empty_dark.png</span></div></div>
|
||||
<div class='row'><div class='label'>populated / light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/home_populated_light.png' alt='home_populated_light Android'/><div class='missing missing-platform'>not on ios<br><span class='hint'>home_populated_light.png</span></div></div>
|
||||
<div class='row'><div class='label'>populated / dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/home_populated_dark.png' alt='home_populated_dark Android'/><div class='missing missing-platform'>not on ios<br><span class='hint'>home_populated_dark.png</span></div></div>
|
||||
</div>
|
||||
<div class='screen' id='residences'>
|
||||
<h2>residences <span class='badge badge-datacarrying'>DataCarrying</span></h2>
|
||||
<div class='row'><div class='label'>empty / light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/residences_empty_light.png' alt='residences_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_residences.residences_empty_light.png' alt='residences_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty / dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/residences_empty_dark.png' alt='residences_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_residences.residences_empty_dark.png' alt='residences_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated / light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/residences_populated_light.png' alt='residences_populated_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_residences.residences_populated_light.png' alt='residences_populated_light iOS'/></div>
|
||||
<div class='row'><div class='label'>populated / dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/residences_populated_dark.png' alt='residences_populated_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_residences.residences_populated_dark.png' alt='residences_populated_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='residence_detail'>
|
||||
<h2>residence_detail <span class='badge badge-datacarrying'>DataCarrying</span></h2>
|
||||
<div class='row'><div class='label'>empty / light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/residence_detail_empty_light.png' alt='residence_detail_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_residence_detail.residence_detail_empty_light.png' alt='residence_detail_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty / dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/residence_detail_empty_dark.png' alt='residence_detail_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_residence_detail.residence_detail_empty_dark.png' alt='residence_detail_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated / light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/residence_detail_populated_light.png' alt='residence_detail_populated_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_residence_detail.residence_detail_populated_light.png' alt='residence_detail_populated_light iOS'/></div>
|
||||
<div class='row'><div class='label'>populated / dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/residence_detail_populated_dark.png' alt='residence_detail_populated_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_residence_detail.residence_detail_populated_dark.png' alt='residence_detail_populated_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='add_residence'>
|
||||
<h2>add_residence <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/add_residence_light.png' alt='add_residence_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_add_residence.add_residence_light.png' alt='add_residence_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/add_residence_dark.png' alt='add_residence_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_add_residence.add_residence_dark.png' alt='add_residence_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='edit_residence'>
|
||||
<h2>edit_residence <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/edit_residence_light.png' alt='edit_residence_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_edit_residence.edit_residence_light.png' alt='edit_residence_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/edit_residence_dark.png' alt='edit_residence_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_edit_residence.edit_residence_dark.png' alt='edit_residence_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='join_residence'>
|
||||
<h2>join_residence <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/join_residence_light.png' alt='join_residence_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_join_residence.join_residence_light.png' alt='join_residence_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/join_residence_dark.png' alt='join_residence_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_join_residence.join_residence_dark.png' alt='join_residence_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='manage_users'>
|
||||
<h2>manage_users <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/manage_users_light.png' alt='manage_users_light Android'/><div class='missing missing-needed'>[missing — ios]<br><span class='hint'>manage_users_light.png</span></div></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/manage_users_dark.png' alt='manage_users_dark Android'/><div class='missing missing-needed'>[missing — ios]<br><span class='hint'>manage_users_dark.png</span></div></div>
|
||||
</div>
|
||||
<div class='screen' id='all_tasks'>
|
||||
<h2>all_tasks <span class='badge badge-datacarrying'>DataCarrying</span></h2>
|
||||
<div class='row'><div class='label'>empty / light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/all_tasks_empty_light.png' alt='all_tasks_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_all_tasks_empty.all_tasks_empty_light.png' alt='all_tasks_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty / dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/all_tasks_empty_dark.png' alt='all_tasks_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_all_tasks.all_tasks_empty_dark.png' alt='all_tasks_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated / light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/all_tasks_populated_light.png' alt='all_tasks_populated_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_all_tasks.all_tasks_populated_light.png' alt='all_tasks_populated_light iOS'/></div>
|
||||
<div class='row'><div class='label'>populated / dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/all_tasks_populated_dark.png' alt='all_tasks_populated_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_all_tasks_populated.all_tasks_populated_dark.png' alt='all_tasks_populated_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='add_task'>
|
||||
<h2>add_task <span class='badge badge-datafree'>DataFree</span> <span class='badge badge-only'>iOS-only</span></h2>
|
||||
<div class='row'><div class='label'>light</div><div class='missing missing-platform'>not on android<br><span class='hint'>add_task_light.png</span></div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_add_task.add_task_light.png' alt='add_task_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><div class='missing missing-platform'>not on android<br><span class='hint'>add_task_dark.png</span></div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_add_task.add_task_dark.png' alt='add_task_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='add_task_with_residence'>
|
||||
<h2>add_task_with_residence <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/add_task_with_residence_light.png' alt='add_task_with_residence_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_add_task_with_residence.add_task_with_residence_light.png' alt='add_task_with_residence_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/add_task_with_residence_dark.png' alt='add_task_with_residence_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_add_task_with_residence.add_task_with_residence_dark.png' alt='add_task_with_residence_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='edit_task'>
|
||||
<h2>edit_task <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/edit_task_light.png' alt='edit_task_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_edit_task.edit_task_light.png' alt='edit_task_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/edit_task_dark.png' alt='edit_task_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_edit_task.edit_task_dark.png' alt='edit_task_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='complete_task'>
|
||||
<h2>complete_task <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/complete_task_light.png' alt='complete_task_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_complete_task.complete_task_light.png' alt='complete_task_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/complete_task_dark.png' alt='complete_task_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_complete_task.complete_task_dark.png' alt='complete_task_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='task_suggestions'>
|
||||
<h2>task_suggestions <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/task_suggestions_light.png' alt='task_suggestions_light Android'/><div class='missing missing-needed'>[missing — ios]<br><span class='hint'>task_suggestions_light.png</span></div></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/task_suggestions_dark.png' alt='task_suggestions_dark Android'/><div class='missing missing-needed'>[missing — ios]<br><span class='hint'>task_suggestions_dark.png</span></div></div>
|
||||
</div>
|
||||
<div class='screen' id='task_templates_browser'>
|
||||
<h2>task_templates_browser <span class='badge badge-datacarrying'>DataCarrying</span></h2>
|
||||
<div class='row'><div class='label'>empty / light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/task_templates_browser_empty_light.png' alt='task_templates_browser_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_task_templates_browser_empty.task_templates_browser_empty_light.png' alt='task_templates_browser_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty / dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/task_templates_browser_empty_dark.png' alt='task_templates_browser_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_task_templates_browser.task_templates_browser_empty_dark.png' alt='task_templates_browser_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated / light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/task_templates_browser_populated_light.png' alt='task_templates_browser_populated_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_task_templates_browser_populated.task_templates_browser_populated_light.png' alt='task_templates_browser_populated_light iOS'/></div>
|
||||
<div class='row'><div class='label'>populated / dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/task_templates_browser_populated_dark.png' alt='task_templates_browser_populated_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_task_templates_browser.task_templates_browser_populated_dark.png' alt='task_templates_browser_populated_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='contractors'>
|
||||
<h2>contractors <span class='badge badge-datacarrying'>DataCarrying</span></h2>
|
||||
<div class='row'><div class='label'>empty / light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/contractors_empty_light.png' alt='contractors_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_contractors.contractors_empty_light.png' alt='contractors_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty / dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/contractors_empty_dark.png' alt='contractors_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_contractors.contractors_empty_dark.png' alt='contractors_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated / light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/contractors_populated_light.png' alt='contractors_populated_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_contractors.contractors_populated_light.png' alt='contractors_populated_light iOS'/></div>
|
||||
<div class='row'><div class='label'>populated / dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/contractors_populated_dark.png' alt='contractors_populated_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_contractors.contractors_populated_dark.png' alt='contractors_populated_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='contractor_detail'>
|
||||
<h2>contractor_detail <span class='badge badge-datacarrying'>DataCarrying</span></h2>
|
||||
<div class='row'><div class='label'>empty / light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/contractor_detail_empty_light.png' alt='contractor_detail_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_contractor_detail.contractor_detail_empty_light.png' alt='contractor_detail_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty / dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/contractor_detail_empty_dark.png' alt='contractor_detail_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_contractor_detail.contractor_detail_empty_dark.png' alt='contractor_detail_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated / light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/contractor_detail_populated_light.png' alt='contractor_detail_populated_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_contractor_detail.contractor_detail_populated_light.png' alt='contractor_detail_populated_light iOS'/></div>
|
||||
<div class='row'><div class='label'>populated / dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/contractor_detail_populated_dark.png' alt='contractor_detail_populated_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_contractor_detail.contractor_detail_populated_dark.png' alt='contractor_detail_populated_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='documents'>
|
||||
<h2>documents <span class='badge badge-datacarrying'>DataCarrying</span> <span class='badge badge-only'>Android-only</span></h2>
|
||||
<div class='row'><div class='label'>empty / light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/documents_empty_light.png' alt='documents_empty_light Android'/><div class='missing missing-platform'>not on ios<br><span class='hint'>documents_empty_light.png</span></div></div>
|
||||
<div class='row'><div class='label'>empty / dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/documents_empty_dark.png' alt='documents_empty_dark Android'/><div class='missing missing-platform'>not on ios<br><span class='hint'>documents_empty_dark.png</span></div></div>
|
||||
<div class='row'><div class='label'>populated / light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/documents_populated_light.png' alt='documents_populated_light Android'/><div class='missing missing-platform'>not on ios<br><span class='hint'>documents_populated_light.png</span></div></div>
|
||||
<div class='row'><div class='label'>populated / dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/documents_populated_dark.png' alt='documents_populated_dark Android'/><div class='missing missing-platform'>not on ios<br><span class='hint'>documents_populated_dark.png</span></div></div>
|
||||
</div>
|
||||
<div class='screen' id='documents_warranties'>
|
||||
<h2>documents_warranties <span class='badge badge-datacarrying'>DataCarrying</span> <span class='badge badge-only'>iOS-only</span></h2>
|
||||
<div class='row'><div class='label'>empty / light</div><div class='missing missing-platform'>not on android<br><span class='hint'>documents_warranties_empty_light.png</span></div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_documents_warranties.documents_warranties_empty_light.png' alt='documents_warranties_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty / dark</div><div class='missing missing-platform'>not on android<br><span class='hint'>documents_warranties_empty_dark.png</span></div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_documents_warranties_empty.documents_warranties_empty_dark.png' alt='documents_warranties_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated / light</div><div class='missing missing-platform'>not on android<br><span class='hint'>documents_warranties_populated_light.png</span></div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_documents_warranties_populated.documents_warranties_populated_light.png' alt='documents_warranties_populated_light iOS'/></div>
|
||||
<div class='row'><div class='label'>populated / dark</div><div class='missing missing-platform'>not on android<br><span class='hint'>documents_warranties_populated_dark.png</span></div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_documents_warranties_populated.documents_warranties_populated_dark.png' alt='documents_warranties_populated_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='document_detail'>
|
||||
<h2>document_detail <span class='badge badge-datacarrying'>DataCarrying</span></h2>
|
||||
<div class='row'><div class='label'>empty / light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/document_detail_empty_light.png' alt='document_detail_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_document_detail.document_detail_empty_light.png' alt='document_detail_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty / dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/document_detail_empty_dark.png' alt='document_detail_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_document_detail.document_detail_empty_dark.png' alt='document_detail_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated / light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/document_detail_populated_light.png' alt='document_detail_populated_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_document_detail.document_detail_populated_light.png' alt='document_detail_populated_light iOS'/></div>
|
||||
<div class='row'><div class='label'>populated / dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/document_detail_populated_dark.png' alt='document_detail_populated_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_document_detail.document_detail_populated_dark.png' alt='document_detail_populated_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='add_document'>
|
||||
<h2>add_document <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/add_document_light.png' alt='add_document_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_add_document.add_document_light.png' alt='add_document_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/add_document_dark.png' alt='add_document_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_add_document.add_document_dark.png' alt='add_document_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='edit_document'>
|
||||
<h2>edit_document <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/edit_document_light.png' alt='edit_document_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_edit_document.edit_document_light.png' alt='edit_document_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/edit_document_dark.png' alt='edit_document_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_edit_document.edit_document_dark.png' alt='edit_document_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='profile'>
|
||||
<h2>profile <span class='badge badge-datacarrying'>DataCarrying</span></h2>
|
||||
<div class='row'><div class='label'>empty / light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/profile_empty_light.png' alt='profile_empty_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_profile.profile_empty_light.png' alt='profile_empty_light iOS'/></div>
|
||||
<div class='row'><div class='label'>empty / dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/profile_empty_dark.png' alt='profile_empty_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_profile.profile_empty_dark.png' alt='profile_empty_dark iOS'/></div>
|
||||
<div class='row'><div class='label'>populated / light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/profile_populated_light.png' alt='profile_populated_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_profile.profile_populated_light.png' alt='profile_populated_light iOS'/></div>
|
||||
<div class='row'><div class='label'>populated / dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/profile_populated_dark.png' alt='profile_populated_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_profile.profile_populated_dark.png' alt='profile_populated_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='profile_edit'>
|
||||
<h2>profile_edit <span class='badge badge-datafree'>DataFree</span> <span class='badge badge-only'>iOS-only</span></h2>
|
||||
<div class='row'><div class='label'>light</div><div class='missing missing-platform'>not on android<br><span class='hint'>profile_edit_light.png</span></div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_profile_edit.profile_edit_light.png' alt='profile_edit_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><div class='missing missing-platform'>not on android<br><span class='hint'>profile_edit_dark.png</span></div><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_profile_edit.profile_edit_dark.png' alt='profile_edit_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='notification_preferences'>
|
||||
<h2>notification_preferences <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/notification_preferences_light.png' alt='notification_preferences_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_notification_preferences.notification_preferences_light.png' alt='notification_preferences_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/notification_preferences_dark.png' alt='notification_preferences_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_notification_preferences.notification_preferences_dark.png' alt='notification_preferences_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='theme_selection'>
|
||||
<h2>theme_selection <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/theme_selection_light.png' alt='theme_selection_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_theme_selection.theme_selection_light.png' alt='theme_selection_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/theme_selection_dark.png' alt='theme_selection_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_theme_selection.theme_selection_dark.png' alt='theme_selection_dark iOS'/></div>
|
||||
</div>
|
||||
<div class='screen' id='biometric_lock'>
|
||||
<h2>biometric_lock <span class='badge badge-datafree'>DataFree</span> <span class='badge badge-only'>Android-only</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/biometric_lock_light.png' alt='biometric_lock_light Android'/><div class='missing missing-platform'>not on ios<br><span class='hint'>biometric_lock_light.png</span></div></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/biometric_lock_dark.png' alt='biometric_lock_dark Android'/><div class='missing missing-platform'>not on ios<br><span class='hint'>biometric_lock_dark.png</span></div></div>
|
||||
</div>
|
||||
<div class='screen' id='feature_comparison'>
|
||||
<h2>feature_comparison <span class='badge badge-datafree'>DataFree</span></h2>
|
||||
<div class='row'><div class='label'>light</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/feature_comparison_light.png' alt='feature_comparison_light Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_feature_comparison.feature_comparison_light.png' alt='feature_comparison_light iOS'/></div>
|
||||
<div class='row'><div class='label'>dark</div><img loading='lazy' src='../composeApp/src/androidUnitTest/roborazzi/feature_comparison_dark.png' alt='feature_comparison_dark Android'/><img loading='lazy' src='../iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_feature_comparison.feature_comparison_dark.png' alt='feature_comparison_dark iOS'/></div>
|
||||
</div>
|
||||
<script>
|
||||
// Ctrl/Cmd-F friendly: expose screen names in the document title on anchor change.
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
# Parity gallery — iOS ↔ Android snapshot regression
|
||||
|
||||
Every primary screen on both platforms is captured as a PNG golden and
|
||||
committed to the repo. A PR that drifts from a golden fails CI. The
|
||||
committed `docs/parity-gallery.html` pairs iOS and Android side-by-side in
|
||||
a scrollable HTML grid you can open locally or from gitea's raw-file view.
|
||||
Every user-reachable screen in the HoneyDue app is captured as a PNG
|
||||
golden on both platforms and committed to the repo. A PR that drifts
|
||||
from a golden fails CI. The gallery HTML (`docs/parity-gallery.html`)
|
||||
pairs iOS and Android renders side-by-side so cross-platform UX
|
||||
divergences are visible at a glance. Gaps — screens captured on one
|
||||
platform but not the other — render as explicit red-bordered
|
||||
`[missing — android]` / `[missing — ios]` placeholders rather than
|
||||
silently omitted rows, so the work to close them is obvious.
|
||||
|
||||
## Quick reference
|
||||
|
||||
@@ -14,82 +18,195 @@ make optimize-goldens # Rerun zopflipng over existing PNGs. Idempotent.
|
||||
python3 scripts/build_parity_gallery.py # Rebuild docs/parity-gallery.html
|
||||
```
|
||||
|
||||
## Canonical manifest — the single source of truth
|
||||
|
||||
Every screen in the gallery is declared once in
|
||||
`composeApp/src/commonMain/kotlin/com/tt/honeyDue/testing/GalleryManifest.kt`.
|
||||
The manifest is a `commonMain` Kotlin object — readable from both
|
||||
platforms, via SKIE from Swift — listing each screen's canonical name,
|
||||
category, and which platforms capture it:
|
||||
|
||||
```kotlin
|
||||
GalleryScreen("contractor_detail", GalleryCategory.DataCarrying, both)
|
||||
GalleryScreen("login", GalleryCategory.DataFree, both)
|
||||
GalleryScreen("home", GalleryCategory.DataCarrying, androidOnly)
|
||||
GalleryScreen("profile_edit", GalleryCategory.DataFree, iosOnly)
|
||||
```
|
||||
|
||||
Two parity tests keep the platforms aligned with the manifest:
|
||||
|
||||
- `composeApp/src/androidUnitTest/kotlin/com/tt/honeyDue/screenshot/GalleryManifestParityTest.kt`
|
||||
fails if the entries in `GallerySurfaces.kt` don't match the subset of
|
||||
the manifest with `Platform.ANDROID` in their `platforms`.
|
||||
- `iosApp/HoneyDueTests/GalleryManifestParityTest.swift` does the same
|
||||
for `SnapshotGalleryTests.swift` against `Platform.IOS`.
|
||||
|
||||
If you add a screen to either platform without updating the manifest,
|
||||
CI fails with a specific diff message telling you what's drifted.
|
||||
|
||||
## Variant matrix — driven by category
|
||||
|
||||
Every screen captures one of two matrices, chosen by `GalleryCategory`
|
||||
in the manifest:
|
||||
|
||||
**`DataCarrying` — 4 captures per surface**
|
||||
```
|
||||
<screen>_empty_light.png <screen>_empty_dark.png
|
||||
<screen>_populated_light.png <screen>_populated_dark.png
|
||||
```
|
||||
Empty variants use `FixtureDataManager.empty(seedLookups = false)` so
|
||||
even form screens that only read dropdowns produce a visible diff
|
||||
between empty and populated.
|
||||
|
||||
**`DataFree` — 2 captures per surface**
|
||||
```
|
||||
<screen>_light.png <screen>_dark.png
|
||||
```
|
||||
Used for pure forms, auth flows, onboarding steps, and static chrome
|
||||
that render no entity data. The populated variant is deliberately
|
||||
omitted — it would be byte-identical to empty and add zero signal.
|
||||
The fixture seed still uses `empty(seedLookups = true)` so the
|
||||
priority picker, theme list, and subscription-tier gates render the
|
||||
same as they would for a fresh-signed-in user in production.
|
||||
|
||||
## How it works
|
||||
|
||||
### Shared fixtures
|
||||
`composeApp/src/commonMain/kotlin/com/tt/honeyDue/testing/FixtureDataManager.kt`
|
||||
exposes `.empty()` and `.populated()` factories. Both platforms render the
|
||||
same screens against the same fixture graph — the only cross-platform
|
||||
differences left are actual UI code differences (by design). Fixtures use
|
||||
a fixed clock (`Fixtures.FIXED_DATE = LocalDate(2026, 4, 15)`) so dates
|
||||
never drift.
|
||||
The pipeline is four moving parts: **fixture → DataManager seed → VM
|
||||
derived state → screen capture**. Every snapshot reads the same fixture
|
||||
graph on both platforms, and every VM receives that fixture through the
|
||||
same DI seam.
|
||||
|
||||
### Android capture (Roborazzi)
|
||||
- `composeApp/src/androidUnitTest/kotlin/com/tt/honeyDue/screenshot/ScreenshotTests.kt`
|
||||
declares one `@Test` per surface in `GallerySurfaces.kt`.
|
||||
- Each test captures 4 variants: `empty × light`, `empty × dark`,
|
||||
`populated × light`, `populated × dark`.
|
||||
- Runs in Robolectric — no emulator needed, no flake from animations.
|
||||
- Goldens: `composeApp/src/androidUnitTest/roborazzi/<screen>_<state>_<mode>.png`
|
||||
### 1. Shared fixtures
|
||||
|
||||
`composeApp/src/commonMain/kotlin/com/tt/honeyDue/testing/FixtureDataManager.kt`
|
||||
implements `IDataManager` with in-memory `StateFlow` fields. Two
|
||||
factories:
|
||||
|
||||
- **`empty(seedLookups: Boolean = true)`** — no residences, tasks,
|
||||
contractors, or documents. When `seedLookups` is `false`
|
||||
(DataCarrying variant), lookups (priorities, categories, templates)
|
||||
are empty too; when `true` (DataFree variant + default production
|
||||
call sites), lookups are present because the picker UI expects them.
|
||||
- **`populated()`** — every StateFlow is seeded: 2 residences, 8 tasks,
|
||||
3 contractors, 5 documents, totals, all lookups, detail maps, task
|
||||
completions, notification preferences.
|
||||
|
||||
Fixtures use a fixed clock (`Fixtures.FIXED_DATE = LocalDate(2026, 4, 15)`)
|
||||
so relative dates like "due in 3 days" never drift between runs.
|
||||
|
||||
### 2. DI seam: `IDataManager` injection
|
||||
|
||||
Every ViewModel accepts `dataManager: IDataManager = DataManager` as a
|
||||
constructor parameter and derives read-state reactively via
|
||||
`stateIn(SharingStarted.Eagerly, initialValue = ...)`. The initial
|
||||
value is computed from `dataManager.x.value` synchronously at VM
|
||||
construction — so when a snapshot captures the first composition frame,
|
||||
the VM already holds populated data, no dispatcher flush required.
|
||||
|
||||
Detail ViewModels (Contractor, Document, Task) additionally accept an
|
||||
`initialSelectedX: Int? = null` parameter. The parity-gallery harness
|
||||
passes a known fixture id at construction so the `stateIn` initial-value
|
||||
closure — which reads `_selectedX.value` — observes the id and seeds
|
||||
`Success(entity)` on the first frame. Without this, the screen's own
|
||||
`LaunchedEffect(id) { vm.loadX(id) }` dispatches the id assignment to a
|
||||
coroutine that runs *after* capture, leaving both empty and populated
|
||||
captures byte-identical on the `Idle` branch.
|
||||
|
||||
This DI contract is enforced by a file-scan regression test:
|
||||
`composeApp/src/androidUnitTest/kotlin/com/tt/honeyDue/architecture/NoIndependentViewModelStateFileScanTest.kt`.
|
||||
|
||||
### 3. Test-time injection (both channels)
|
||||
|
||||
`ScreenshotTests.kt` (Android) and `SnapshotGalleryTests.swift` (iOS)
|
||||
seed **two** paths per variant because screens read data through two
|
||||
channels:
|
||||
|
||||
1. **`LocalDataManager`** (Android CompositionLocal) /
|
||||
`DataManagerObservable.shared` (iOS `@EnvironmentObject`) — screens
|
||||
that read the ambient DataManager pick up the fixture through the
|
||||
composition/environment tree.
|
||||
2. **`DataManager` singleton** (Android) / same observable (iOS) —
|
||||
VMs instantiated without an explicit `dataManager:` arg default to
|
||||
the singleton. The test clears the singleton then seeds every
|
||||
StateFlow from the fixture before capture.
|
||||
|
||||
Clearing the singleton between variants is critical — without
|
||||
`dm.clear()` the previous surface's populated data leaks into the next
|
||||
surface's empty capture.
|
||||
|
||||
### 4. Android capture (Roborazzi)
|
||||
|
||||
- Test runner: `ParameterizedRobolectricTestRunner` +
|
||||
`@GraphicsMode(NATIVE)` + `@Config(qualifiers = "w360dp-h800dp-mdpi")`.
|
||||
- `LocalInspectionMode` is provided as `true` so composables that call
|
||||
`FileProvider.getUriForFile` (camera pickers), APNs / FCM registration,
|
||||
or animation tickers short-circuit in the hermetic test environment.
|
||||
- Compose resources bootstrap: `@Before` hook installs the
|
||||
`AndroidContextProvider` static via reflection so `stringResource(...)`
|
||||
works under Robolectric.
|
||||
- Goldens: `composeApp/src/androidUnitTest/roborazzi/<screen>_<suffix>.png`.
|
||||
- Typical size: 30–80 KB per image.
|
||||
|
||||
### iOS capture (swift-snapshot-testing)
|
||||
- `iosApp/HoneyDueTests/SnapshotGalleryTests.swift` has 4 tests per screen.
|
||||
- Rendered at `displayScale: 2.0` (not the native 3.0) to cap per-image size.
|
||||
- Uses `FixtureDataManager.shared.empty()` / `.populated()` via SKIE.
|
||||
- Goldens: `iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_<name>.<variant>.png`
|
||||
- Typical size: 150–300 KB per image after `zopflipng` post-processing.
|
||||
### 5. iOS capture (swift-snapshot-testing)
|
||||
|
||||
- Uses `FixtureDataManager.shared.empty(seedLookups:)` /
|
||||
`.populated()` via SKIE interop.
|
||||
- Swift VMs subscribe to `DataManagerObservable.shared`; the harness
|
||||
copies fixture StateFlow values onto the observable's `@Published`
|
||||
properties synchronously before the view is instantiated so VMs seed
|
||||
from cache without waiting for Combine's async dispatch.
|
||||
- Rendered at `displayScale: 2.0` (not native 3.0) to cap per-image
|
||||
size.
|
||||
- Goldens:
|
||||
`iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests/test_<func>.<suffix>.png`.
|
||||
- Typical size: 150–300 KB per image after `zopflipng`.
|
||||
|
||||
### Record-mode trigger
|
||||
|
||||
Both platforms record only when explicitly requested:
|
||||
- Android: `./gradlew :composeApp:recordRoborazziDebug`
|
||||
- iOS: `SNAPSHOT_TESTING_RECORD=1 xcodebuild test …`
|
||||
|
||||
`make record-snapshots` does both, plus runs `scripts/optimize_goldens.sh`
|
||||
to shrink the output PNGs. No code edits required to switch between record
|
||||
and verify — the env var / gradle task controls everything.
|
||||
to shrink the output PNGs.
|
||||
|
||||
## When to record vs verify
|
||||
## Adding a screen
|
||||
|
||||
**Verify** is what CI runs on every PR. It is the gate. If verify fails,
|
||||
ask: *was this drift intentional?*
|
||||
1. **Declare in the manifest** —
|
||||
`composeApp/src/commonMain/kotlin/com/tt/honeyDue/testing/GalleryManifest.kt`:
|
||||
```kotlin
|
||||
GalleryScreen("my_new_screen", GalleryCategory.DataCarrying, both),
|
||||
```
|
||||
Update the `expected_counts_match_plan` canary in
|
||||
`GalleryManifestTest` to match the new totals.
|
||||
|
||||
**Record** is what you run locally when a UI change is deliberate and you
|
||||
want to publish the new look as the new baseline. Commit the regenerated
|
||||
goldens alongside your code change so reviewers see both the code and the
|
||||
visual result in one PR.
|
||||
2. **Wire Android** — add a `GallerySurface(...)` entry in
|
||||
`composeApp/src/androidUnitTest/kotlin/com/tt/honeyDue/screenshot/GallerySurfaces.kt`.
|
||||
If the screen is a detail view, pass the VM explicitly with
|
||||
`initialSelectedX = <fixtureId>`:
|
||||
```kotlin
|
||||
GallerySurface("my_new_screen") {
|
||||
val id = Fixtures.xxx.first().id
|
||||
val vm = remember { MyViewModel(initialSelectedId = id) }
|
||||
MyScreen(id = id, viewModel = vm, onNavigateBack = {})
|
||||
}
|
||||
```
|
||||
|
||||
Running record by mistake (on a branch where you didn't intend to change
|
||||
UI) will produce a large image-diff in `git status`. That diff is the
|
||||
signal — revert the goldens, investigate what unintentionally changed.
|
||||
3. **Wire iOS** — add a `test_<name>()` function in
|
||||
`iosApp/HoneyDueTests/SnapshotGalleryTests.swift`, using
|
||||
`snapDataCarrying(...)` or `snapDataFree(...)` as appropriate.
|
||||
Add the canonical name to `iosCoveredScreens` in
|
||||
`GalleryManifestParityTest.swift`.
|
||||
|
||||
## Adding a screen to the gallery
|
||||
4. **Regenerate goldens** — `make record-snapshots`, then
|
||||
`python3 scripts/build_parity_gallery.py` to rebuild the HTML.
|
||||
|
||||
### Android
|
||||
Add one entry to
|
||||
`composeApp/src/androidUnitTest/kotlin/com/tt/honeyDue/screenshot/GallerySurfaces.kt`:
|
||||
5. **Commit the code change, the goldens, and the regenerated gallery
|
||||
together** so reviewers see the intent + the visual result in one
|
||||
PR.
|
||||
|
||||
```kotlin
|
||||
GallerySurface("my_new_screen") { MyNewScreen(onNavigateBack = {}, /* required params from fixtures */) },
|
||||
```
|
||||
|
||||
If the screen needs a specific model (`task`, `residence`, etc.) pass one
|
||||
from `Fixtures.*` — e.g. `Fixtures.tasks.first()`. If the screen renders
|
||||
differently in empty vs populated, the `LocalDataManager` provider wiring
|
||||
in `ScreenshotTests.kt` handles it automatically.
|
||||
|
||||
### iOS
|
||||
Add 4 test functions to `iosApp/HoneyDueTests/SnapshotGalleryTests.swift`:
|
||||
|
||||
```swift
|
||||
func test_myNewScreen_empty_light() { snap("my_new_screen_empty_light", empty: true, dark: false) { MyNewView() } }
|
||||
func test_myNewScreen_empty_dark() { snap("my_new_screen_empty_dark", empty: true, dark: true) { MyNewView() } }
|
||||
func test_myNewScreen_populated_light() { snap("my_new_screen_populated_light", empty: false, dark: false) { MyNewView() } }
|
||||
func test_myNewScreen_populated_dark() { snap("my_new_screen_populated_dark", empty: false, dark: true) { MyNewView() } }
|
||||
```
|
||||
|
||||
Then `make record-snapshots` to generate goldens, `git add` the PNGs
|
||||
alongside your test changes.
|
||||
The parity tests fail until both platforms' surface lists match the
|
||||
manifest — you'll know immediately if you miss step 2 or 3.
|
||||
|
||||
## Approving intentional UI drift
|
||||
|
||||
@@ -101,26 +218,41 @@ make record-snapshots
|
||||
git status composeApp/src/androidUnitTest/roborazzi/ iosApp/HoneyDueTests/__Snapshots__/
|
||||
git diff --stat composeApp/src/androidUnitTest/roborazzi/ iosApp/HoneyDueTests/__Snapshots__/
|
||||
|
||||
# 3. Stage and commit alongside the UI code change.
|
||||
git add <screen-file.kt> <SnapshotGalleryTests.swift changes> \
|
||||
# 3. Rebuild the HTML gallery.
|
||||
python3 scripts/build_parity_gallery.py
|
||||
|
||||
# 4. Stage and commit alongside the UI code change.
|
||||
git add <screen-file> \
|
||||
composeApp/src/androidUnitTest/roborazzi/ \
|
||||
iosApp/HoneyDueTests/__Snapshots__/
|
||||
iosApp/HoneyDueTests/__Snapshots__/ \
|
||||
docs/parity-gallery.html docs/parity-gallery-grid.md
|
||||
git commit -m "feat: <what changed>"
|
||||
```
|
||||
|
||||
Reviewers see the code diff AND the golden diff in one PR — makes intent
|
||||
obvious.
|
||||
## Cleaning up orphan goldens
|
||||
|
||||
`scripts/cleanup_orphan_goldens.sh` removes PNGs left over from prior
|
||||
test configurations — old multi-theme captures (`*_default_*`,
|
||||
`*_midnight_*`, `*_ocean_*`), Roborazzi comparison artifacts
|
||||
(`*_actual.png`, `*_compare.png`), and legacy empty/populated pairs for
|
||||
DataFree surfaces (which now capture `<name>_light.png` /
|
||||
`<name>_dark.png` only). Dry-runs by default; pass `--execute` to
|
||||
actually delete.
|
||||
|
||||
```bash
|
||||
./scripts/cleanup_orphan_goldens.sh # preview
|
||||
./scripts/cleanup_orphan_goldens.sh --execute # delete
|
||||
```
|
||||
|
||||
## Image size budget
|
||||
|
||||
Per-file soft budget: **400 KB**. Enforced by CI.
|
||||
|
||||
Android images are rarely this large. iOS images can exceed 400 KB for
|
||||
Android images rarely approach this. iOS images can exceed 400 KB for
|
||||
gradient-heavy screens (Onboarding welcome, organic blob backgrounds).
|
||||
If a new screen exceeds budget:
|
||||
1. Check whether the screen really needs a full-viewport gradient.
|
||||
2. If yes, consider rendering at `displayScale: 1.0` for just that test
|
||||
(the `snap` helper accepts an override).
|
||||
2. If yes, consider rendering at `displayScale: 1.0` for just that test.
|
||||
|
||||
## Tool installation
|
||||
|
||||
@@ -130,15 +262,23 @@ brew install zopfli # preferred — better compression
|
||||
brew install pngcrush # fallback
|
||||
```
|
||||
|
||||
Neither installed? `make record-snapshots` warns and skips optimization —
|
||||
goldens are still usable, just larger.
|
||||
Neither installed? `make record-snapshots` warns and skips optimization.
|
||||
|
||||
## HTML gallery
|
||||
|
||||
`docs/parity-gallery.html` is regenerated by
|
||||
`scripts/build_parity_gallery.py` whenever goldens change. It's a
|
||||
self-contained HTML file with relative `<img>` paths that resolve within
|
||||
the repo — so gitea's raw-file view renders it without any server.
|
||||
`scripts/build_parity_gallery.py`, which parses the canonical manifest
|
||||
directly (`GalleryManifest.kt`) and lays out one row per screen in
|
||||
product-flow order (auth → onboarding → home → residences → tasks →
|
||||
contractors → documents → profile → subscription). Platform cells
|
||||
render as:
|
||||
|
||||
- **Captured PNG** — standard image.
|
||||
- **`[missing — <platform>]` red-bordered box** — screen is in the
|
||||
manifest for this platform but the PNG isn't on disk. Action needed.
|
||||
- **`not on <platform>` muted-border box** — screen is explicitly
|
||||
not-on-this-platform per the manifest (e.g. `home` is Android-only).
|
||||
No action.
|
||||
|
||||
To view locally:
|
||||
```bash
|
||||
@@ -146,56 +286,30 @@ python3 scripts/build_parity_gallery.py
|
||||
open docs/parity-gallery.html
|
||||
```
|
||||
|
||||
The gallery groups by screen name. Each row shows Android vs iOS for one
|
||||
{state, mode} combination, with sticky headers for quick navigation.
|
||||
|
||||
## Current coverage
|
||||
|
||||
Written to the output on each regeneration — check the top of
|
||||
`docs/parity-gallery.html` for the current count.
|
||||
The `docs/parity-gallery-grid.md` variant renders inline in gitea's
|
||||
Markdown viewer (gitea serves raw `.html` as `text/plain`).
|
||||
|
||||
## Known limitations
|
||||
|
||||
- **Android populated-state coverage is partial (10/34 surfaces differ).** Screens
|
||||
like `home`, `profile`, `residences`, `contractors`, `all_tasks` render truly
|
||||
populated data. The other ~24 screens (`documents`, `complete_task`,
|
||||
`feature_comparison`, `notification_preferences`, `manage_users`, every
|
||||
`edit_*` / `add_*` / auth form) currently show **identical renders for
|
||||
empty and populated fixtures**, because their ViewModels independently track
|
||||
state via `APILayer.getXxx()` calls that fail with "Not authenticated" in
|
||||
Robolectric — the VM state never transitions to `ApiResult.Success` so the
|
||||
screen's "populated" branch never renders, even though `LocalDataManager`
|
||||
and the global `DataManager` singleton are both seeded with the fixture.
|
||||
- **Cross-platform diff is visual, not pixel-exact.** SF Pro (iOS) vs
|
||||
SansSerif (Android) render different glyph shapes by design.
|
||||
Pixel-diff is only used within a platform.
|
||||
|
||||
**The architectural fix**: every VM's `xxxState` needs to mirror
|
||||
`DataManager.xxx` reactively (e.g., `dataManager.documents.map { Success(it) }`)
|
||||
instead of independently tracking the API call result. That's a
|
||||
per-VM refactor across ~20 ViewModels; currently only `HomeScreen` and
|
||||
`DocumentsScreen` have been patched to fall back to `LocalDataManager`
|
||||
directly. Gallery viewers should treat a "same" row as indicating the
|
||||
fixture didn't reach the screen, not that the screens genuinely render
|
||||
identically.
|
||||
- **`home` is Android-only.** Android has a dedicated dashboard route
|
||||
with aggregate stats; iOS lands directly on the residences list
|
||||
(iOS's first tab plays the product role Android's `home` does, but
|
||||
renders different content). Captured as Android-only; iOS cell shows
|
||||
the `not on ios` placeholder.
|
||||
|
||||
- **iOS populated-state coverage is partial**. Swift Views today instantiate
|
||||
their ViewModels via `@StateObject viewModel = FooViewModel()`; the
|
||||
ViewModels read `DataManagerObservable.shared` directly rather than
|
||||
accepting an injected `IDataManager`. Until ViewModels gain a DI seam,
|
||||
populated-state snapshots require per-screen ad-hoc workarounds.
|
||||
Tracked as a follow-up.
|
||||
- **`documents` vs `documents_warranties`.** Android has a single
|
||||
`documents` route; iOS splits the same conceptual screen into a
|
||||
segmented-tab `documents_warranties` view. Captured as two rows
|
||||
rather than coerced into one to keep the structural divergence
|
||||
visible.
|
||||
|
||||
- **Android detail-screen coverage is partial**. Screens that require a
|
||||
pre-selected model (`ResidenceDetailScreen(residence = ...)`,
|
||||
`ContractorDetailScreen(contractor = ...)`) silently skip rendering
|
||||
unless `GallerySurfaces.kt` passes a fixture item. Expanding these to
|
||||
full coverage is a follow-up PR — low-risk additions to
|
||||
`GallerySurfaces.kt`.
|
||||
- **`add_task`, `profile_edit`** are iOS-only — Android presents these
|
||||
flows inline (dialog inside `residence_detail`, inline form inside
|
||||
`profile`). Captured as iOS-only.
|
||||
|
||||
- **Cross-platform diff is visual, not pixel-exact**. SF Pro (iOS) vs
|
||||
SansSerif (Android) render different glyph shapes by design. Pixel-diff
|
||||
is only used within a platform — the HTML gallery is for side-by-side
|
||||
human review.
|
||||
|
||||
- **Roborazzi path mismatch**. The historical goldens lived at
|
||||
`composeApp/src/androidUnitTest/roborazzi/`. The Roborazzi Gradle block
|
||||
sets `outputDir` to match. If `verifyRoborazziDebug` ever reports
|
||||
"original file not found", confirm the `outputDir` hasn't drifted.
|
||||
- **`biometric_lock`** is Android-only — iOS uses the system Face ID
|
||||
prompt directly, not a custom screen.
|
||||
|
||||
Reference in New Issue
Block a user