P4: gitea-renderable parity-gallery-grid.md (markdown with inline images)
Gitea serves raw .html with Content-Type: text/plain for security, so the HTML gallery only renders via `open` locally or external static hosting. Add a parallel markdown version that gitea's /src/ view renders natively with inline images. View: https://gitea.treytartt.com/admin/honeyDueKMP/src/branch/rc/android-ios-parity/docs/parity-gallery-grid.md Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
531
docs/parity-gallery-grid.md
Normal file
531
docs/parity-gallery-grid.md
Normal file
@@ -0,0 +1,531 @@
|
|||||||
|
# honeyDue parity gallery
|
||||||
|
|
||||||
|
*93 Android · 58 iOS · 37 screens*
|
||||||
|
|
||||||
|
Auto-generated by `scripts/build_parity_gallery.py` — do not hand-edit.
|
||||||
|
|
||||||
|
See [parity-gallery.md](parity-gallery.md) for the workflow guide.
|
||||||
|
|
||||||
|
## Screens
|
||||||
|
|
||||||
|
- [add_residence](#add-residence)
|
||||||
|
- [add_task](#add-task)
|
||||||
|
- [add_task_with_residence](#add-task-with-residence)
|
||||||
|
- [all_tasks](#all-tasks)
|
||||||
|
- [contractors_list](#contractors-list)
|
||||||
|
- [documents_warranties](#documents-warranties)
|
||||||
|
- [edit_residence](#edit-residence)
|
||||||
|
- [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_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)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## add_residence<a id='add-residence'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light |  |  |
|
||||||
|
| **empty** / dark |  |  |
|
||||||
|
| **populated** / light |  | _missing_ |
|
||||||
|
| **populated** / dark |  | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## add_task<a id='add-task'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light | _missing_ |  |
|
||||||
|
| **empty** / dark | _missing_ |  |
|
||||||
|
| **populated** / light | _missing_ | _missing_ |
|
||||||
|
| **populated** / dark | _missing_ | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## add_task_with_residence<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_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## all_tasks<a id='all-tasks'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light |  |  |
|
||||||
|
| **empty** / dark | _missing_ |  |
|
||||||
|
| **populated** / light | _missing_ | _missing_ |
|
||||||
|
| **populated** / dark | _missing_ | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## contractors_list<a id='contractors-list'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light | _missing_ |  |
|
||||||
|
| **empty** / dark | _missing_ |  |
|
||||||
|
| **populated** / light | _missing_ | _missing_ |
|
||||||
|
| **populated** / dark | _missing_ | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## documents_warranties<a id='documents-warranties'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light | _missing_ |  |
|
||||||
|
| **empty** / dark | _missing_ |  |
|
||||||
|
| **populated** / light | _missing_ | _missing_ |
|
||||||
|
| **populated** / dark | _missing_ | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## edit_residence<a id='edit-residence'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light |  | _missing_ |
|
||||||
|
| **empty** / dark |  | _missing_ |
|
||||||
|
| **populated** / light |  | _missing_ |
|
||||||
|
| **populated** / dark |  | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## feature_comparison<a id='feature-comparison'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light | _missing_ |  |
|
||||||
|
| **empty** / dark | _missing_ |  |
|
||||||
|
| **populated** / light | _missing_ | _missing_ |
|
||||||
|
| **populated** / dark | _missing_ | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## forgot_password<a id='forgot-password'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light |  |  |
|
||||||
|
| **empty** / dark |  |  |
|
||||||
|
| **populated** / light |  | _missing_ |
|
||||||
|
| **populated** / dark |  | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## home<a id='home'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light |  | _missing_ |
|
||||||
|
| **empty** / dark |  | _missing_ |
|
||||||
|
| **populated** / light |  | _missing_ |
|
||||||
|
| **populated** / dark |  | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## join_residence<a id='join-residence'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light |  |  |
|
||||||
|
| **empty** / dark |  |  |
|
||||||
|
| **populated** / light |  | _missing_ |
|
||||||
|
| **populated** / dark |  | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## login<a id='login'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light |  |  |
|
||||||
|
| **empty** / dark |  |  |
|
||||||
|
| **populated** / light |  | _missing_ |
|
||||||
|
| **populated** / dark |  | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## manage_users<a id='manage-users'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light |  | _missing_ |
|
||||||
|
| **empty** / dark |  | _missing_ |
|
||||||
|
| **populated** / light |  | _missing_ |
|
||||||
|
| **populated** / dark |  | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## notification_preferences<a id='notification-preferences'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light | _missing_ |  |
|
||||||
|
| **empty** / dark | _missing_ |  |
|
||||||
|
| **populated** / light | _missing_ | _missing_ |
|
||||||
|
| **populated** / dark | _missing_ | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## onboarding_create_account<a id='onboarding-create-account'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light |  |  |
|
||||||
|
| **empty** / dark |  |  |
|
||||||
|
| **populated** / light |  | _missing_ |
|
||||||
|
| **populated** / dark |  | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## onboarding_first_task<a id='onboarding-first-task'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light | _missing_ |  |
|
||||||
|
| **empty** / dark | _missing_ |  |
|
||||||
|
| **populated** / light | _missing_ | _missing_ |
|
||||||
|
| **populated** / dark | _missing_ | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## onboarding_home_profile<a id='onboarding-home-profile'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light |  | _missing_ |
|
||||||
|
| **empty** / dark |  | _missing_ |
|
||||||
|
| **populated** / light |  | _missing_ |
|
||||||
|
| **populated** / dark |  | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## onboarding_join_residence<a id='onboarding-join-residence'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light |  |  |
|
||||||
|
| **empty** / dark |  |  |
|
||||||
|
| **populated** / light |  | _missing_ |
|
||||||
|
| **populated** / dark |  | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## onboarding_location<a id='onboarding-location'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light |  | _missing_ |
|
||||||
|
| **empty** / dark |  | _missing_ |
|
||||||
|
| **populated** / light |  | _missing_ |
|
||||||
|
| **populated** / dark |  | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## onboarding_name_residence<a id='onboarding-name-residence'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light |  |  |
|
||||||
|
| **empty** / dark |  |  |
|
||||||
|
| **populated** / light |  | _missing_ |
|
||||||
|
| **populated** / dark |  | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## onboarding_subscription<a id='onboarding-subscription'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light |  |  |
|
||||||
|
| **empty** / dark |  |  |
|
||||||
|
| **populated** / light |  | _missing_ |
|
||||||
|
| **populated** / dark |  | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## onboarding_value_props<a id='onboarding-value-props'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light |  |  |
|
||||||
|
| **empty** / dark |  |  |
|
||||||
|
| **populated** / light |  | _missing_ |
|
||||||
|
| **populated** / dark |  | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## onboarding_verify_email<a id='onboarding-verify-email'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light |  |  |
|
||||||
|
| **empty** / dark |  |  |
|
||||||
|
| **populated** / light |  | _missing_ |
|
||||||
|
| **populated** / dark |  | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## onboarding_welcome<a id='onboarding-welcome'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light |  |  |
|
||||||
|
| **empty** / dark |  |  |
|
||||||
|
| **populated** / light |  | _missing_ |
|
||||||
|
| **populated** / dark |  | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## profile_edit<a id='profile-edit'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light | _missing_ |  |
|
||||||
|
| **empty** / dark | _missing_ |  |
|
||||||
|
| **populated** / light | _missing_ | _missing_ |
|
||||||
|
| **populated** / dark | _missing_ | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## profile_tab<a id='profile-tab'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light | _missing_ |  |
|
||||||
|
| **empty** / dark | _missing_ |  |
|
||||||
|
| **populated** / light | _missing_ | _missing_ |
|
||||||
|
| **populated** / dark | _missing_ | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## register<a id='register'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light |  |  |
|
||||||
|
| **empty** / dark |  |  |
|
||||||
|
| **populated** / light |  | _missing_ |
|
||||||
|
| **populated** / dark |  | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## reset_password<a id='reset-password'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light |  |  |
|
||||||
|
| **empty** / dark |  |  |
|
||||||
|
| **populated** / light |  | _missing_ |
|
||||||
|
| **populated** / dark |  | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## residence_detail<a id='residence-detail'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light |  | _missing_ |
|
||||||
|
| **empty** / dark |  | _missing_ |
|
||||||
|
| **populated** / light |  | _missing_ |
|
||||||
|
| **populated** / dark |  | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## residences<a id='residences'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light |  | _missing_ |
|
||||||
|
| **empty** / dark |  | _missing_ |
|
||||||
|
| **populated** / light |  | _missing_ |
|
||||||
|
| **populated** / dark |  | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## residences_list<a id='residences-list'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light | _missing_ |  |
|
||||||
|
| **empty** / dark | _missing_ |  |
|
||||||
|
| **populated** / light | _missing_ | _missing_ |
|
||||||
|
| **populated** / dark | _missing_ | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## task_suggestions<a id='task-suggestions'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light | _missing_ |  |
|
||||||
|
| **empty** / dark | _missing_ |  |
|
||||||
|
| **populated** / light | _missing_ | _missing_ |
|
||||||
|
| **populated** / dark | _missing_ | _missing_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## task_templates_browser<a id='task-templates-browser'></a>
|
||||||
|
|
||||||
|
| State / Mode | Android | iOS |
|
||||||
|
|---|---|---|
|
||||||
|
| **empty** / light | _missing_ |  |
|
||||||
|
| **empty** / dark | _missing_ |  |
|
||||||
|
| **populated** / light | _missing_ | _missing_ |
|
||||||
|
| **populated** / dark | _missing_ | _missing_ |
|
||||||
|
|
||||||
|
[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 | _missing_ |  |
|
||||||
|
| **empty** / dark | _missing_ |  |
|
||||||
|
| **populated** / light | _missing_ | _missing_ |
|
||||||
|
| **populated** / dark | _missing_ | _missing_ |
|
||||||
|
|
||||||
|
[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_ |
|
||||||
|
|
||||||
|
[top](#honeydue-parity-gallery)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
border-radius: 4px; color: #8b949e; font-size: 12px; }
|
border-radius: 4px; color: #8b949e; font-size: 12px; }
|
||||||
</style></head><body>
|
</style></head><body>
|
||||||
<h1>honeyDue parity gallery</h1>
|
<h1>honeyDue parity gallery</h1>
|
||||||
<div class='meta'>91 Android · 58 iOS · 37 screens</div>
|
<div class='meta'>93 Android · 58 iOS · 37 screens</div>
|
||||||
<div class='nav'><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='#contractors_list'>contractors_list</a> <a href='#documents_warranties'>documents_warranties</a> <a href='#edit_residence'>edit_residence</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_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='nav'><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='#contractors_list'>contractors_list</a> <a href='#documents_warranties'>documents_warranties</a> <a href='#edit_residence'>edit_residence</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_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='grid-header'><div class='label'></div><div>Android</div><div>iOS</div></div>
|
<div class='grid-header'><div class='label'></div><div>Android</div><div>iOS</div></div>
|
||||||
<div class='screen' id='add_residence'>
|
<div class='screen' id='add_residence'>
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class='screen' id='all_tasks'>
|
<div class='screen' id='all_tasks'>
|
||||||
<h2>all_tasks</h2>
|
<h2>all_tasks</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_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'>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><div class='missing'>Android missing</div><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'>empty<br><span class='mode'>dark</span></div><div class='missing'>Android missing</div><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><div class='missing'>Android missing</div><div class='missing'>iOS missing</div></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 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>
|
||||||
@@ -266,7 +266,7 @@
|
|||||||
<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'>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'>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'>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><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><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>
|
||||||
<div class='screen' id='theme_selection'>
|
<div class='screen' id='theme_selection'>
|
||||||
<h2>theme_selection</h2>
|
<h2>theme_selection</h2>
|
||||||
|
|||||||
@@ -25,7 +25,8 @@ import sys
|
|||||||
REPO_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
REPO_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||||
ANDROID_DIR = "composeApp/src/androidUnitTest/roborazzi"
|
ANDROID_DIR = "composeApp/src/androidUnitTest/roborazzi"
|
||||||
IOS_DIR = "iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests"
|
IOS_DIR = "iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests"
|
||||||
OUT = "docs/parity-gallery.html"
|
OUT_HTML = "docs/parity-gallery.html"
|
||||||
|
OUT_MD = "docs/parity-gallery-grid.md"
|
||||||
|
|
||||||
# swift-snapshot-testing names files "test_<func>.<name>.png" — strip prefix
|
# swift-snapshot-testing names files "test_<func>.<name>.png" — strip prefix
|
||||||
IOS_NAME_RE = re.compile(r"^test_[^.]+\.(.+)\.png$")
|
IOS_NAME_RE = re.compile(r"^test_[^.]+\.(.+)\.png$")
|
||||||
@@ -63,13 +64,51 @@ def parse_key(key: str) -> tuple[str, str, str]:
|
|||||||
return key, "?", "?"
|
return key, "?", "?"
|
||||||
|
|
||||||
|
|
||||||
|
def write_markdown(android: dict[str, str], ios: dict[str, str], screens: list[str]) -> None:
|
||||||
|
"""Emit a gitea-renderable grid as markdown tables.
|
||||||
|
|
||||||
|
Gitea serves .html as text/plain (security), but renders .md natively at
|
||||||
|
its /src/ URL with inline images. This output is the browser-viewable one.
|
||||||
|
"""
|
||||||
|
out = os.path.join(REPO_ROOT, OUT_MD)
|
||||||
|
os.makedirs(os.path.dirname(out), exist_ok=True)
|
||||||
|
# Markdown image paths are relative to the .md file, which lives in docs/.
|
||||||
|
# We already compute relative-to-docs paths in load(); those apply here too.
|
||||||
|
with open(out, "w", encoding="utf-8") as f:
|
||||||
|
f.write("# honeyDue parity gallery\n\n")
|
||||||
|
f.write(f"*{len(android)} Android · {len(ios)} iOS · {len(screens)} screens*\n\n")
|
||||||
|
f.write("Auto-generated by `scripts/build_parity_gallery.py` — do not hand-edit.\n\n")
|
||||||
|
f.write("See [parity-gallery.md](parity-gallery.md) for the workflow guide.\n\n")
|
||||||
|
f.write("## Screens\n\n")
|
||||||
|
for s in screens:
|
||||||
|
f.write(f"- [{s}](#{s.replace('_', '-')})\n")
|
||||||
|
f.write("\n---\n\n")
|
||||||
|
for screen in screens:
|
||||||
|
anchor = screen.replace("_", "-")
|
||||||
|
f.write(f"## {screen}<a id='{anchor}'></a>\n\n")
|
||||||
|
f.write("| State / Mode | Android | iOS |\n")
|
||||||
|
f.write("|---|---|---|\n")
|
||||||
|
for state in ("empty", "populated"):
|
||||||
|
for mode in ("light", "dark"):
|
||||||
|
key = f"{screen}_{state}_{mode}"
|
||||||
|
a = android.get(key)
|
||||||
|
i = ios.get(key)
|
||||||
|
a_cell = f"" if a else "_missing_"
|
||||||
|
i_cell = f"" if i else "_missing_"
|
||||||
|
f.write(f"| **{state}** / {mode} | {a_cell} | {i_cell} |\n")
|
||||||
|
f.write("\n[top](#honeydue-parity-gallery)\n\n---\n\n")
|
||||||
|
print(f"wrote {OUT_MD}")
|
||||||
|
|
||||||
|
|
||||||
def main() -> int:
|
def main() -> int:
|
||||||
android = load("android", ANDROID_DIR)
|
android = load("android", ANDROID_DIR)
|
||||||
ios = load("ios", IOS_DIR)
|
ios = load("ios", IOS_DIR)
|
||||||
keys = sorted(set(android) | set(ios))
|
keys = sorted(set(android) | set(ios))
|
||||||
screens = sorted({parse_key(k)[0] for k in keys})
|
screens = sorted({parse_key(k)[0] for k in keys})
|
||||||
|
|
||||||
out_path = os.path.join(REPO_ROOT, OUT)
|
write_markdown(android, ios, screens)
|
||||||
|
|
||||||
|
out_path = os.path.join(REPO_ROOT, OUT_HTML)
|
||||||
os.makedirs(os.path.dirname(out_path), exist_ok=True)
|
os.makedirs(os.path.dirname(out_path), exist_ok=True)
|
||||||
with open(out_path, "w", encoding="utf-8") as f:
|
with open(out_path, "w", encoding="utf-8") as f:
|
||||||
f.write(PAGE_HEAD)
|
f.write(PAGE_HEAD)
|
||||||
@@ -111,7 +150,7 @@ def main() -> int:
|
|||||||
f.write("</div>\n")
|
f.write("</div>\n")
|
||||||
f.write(PAGE_FOOT)
|
f.write(PAGE_FOOT)
|
||||||
|
|
||||||
print(f"wrote {OUT}: {len(screens)} screens, {len(android)} Android + {len(ios)} iOS images")
|
print(f"wrote {OUT_HTML}: {len(screens)} screens, {len(android)} Android + {len(ios)} iOS images")
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user