18 Commits
Author SHA1 Message Date
Mubarak AuwalandGitHub bc32a14ed9 fix: reset Whitenoise lifecycle after deleting data (#662)
* fix: reset Whitenoise lifecycle after deleting data

* fix: preserve global instance on failed delete

* docs: clarify delete reset recovery

* fix: await delete all data completion

* fix: ignore stale dm group ids

* fix: repair delete data test assertion

* fix: serialize whitenoise initialization

* fix: reset Whitenoise lifecycle after deleting data

* fix: satisfy delete reset CI checks

* test(reset_marker): cover default FlutterSecureStorage.deleteAll fallback

* fix: keep start dm errors visible
2026-05-19 17:29:15 +01:00
PepiandGitHub 1f26b38edb Show offline notice in auth flows (#586)
* feat: show no internet notice in add profile screen

* feat: show no internet notice in switch profile screen

* feat: show no internet notice in login screen

* feat: show no internet notice in sign up screen

* feat: show no internet notice in edit profile screen

* docs: update changelog
2026-04-24 14:24:18 -04:00
PepiandGitHub 11de8fbfc5 Detect offline state and show notice in chat list (#565)
* chore: add connectivity plus

* feat: add provider to detect offline state

* test: improve coverage of add logs screen

* feat: add waiting for internet translations

* feat: show no internet notice in chat list

* docs: update changelog
2026-04-14 10:05:59 -04:00
PepiandGitHub 239ef9b4da Fix base design size (#433)
* fix base design size

* docs: update changelog

* chore: add widgetbook inspector addon
2026-03-04 11:23:06 -03:00
Danny MandGitHub d7dfbc1239 Shard CI tests 4-way, fix coverage crash, add Rust tests (#419) 2026-03-02 14:48:19 -03:00
PepiandGitHub 781370cd67 feat: add wn message quote (#260) 2026-02-14 21:38:44 -03:00
PepiandGitHub db83f18ff6 Invite screen improvements: show replies, use chat stream and use fixed avatar color (#232)
* refactor: rename use chat avatar to use chat profile and move color logic inside

* refactor: receive avatar color in wn avatar header

* refactor: use renamed hook in chat screen

* feat: show replies, use chat stream and use fixed avatar color in chat invite screen

* docs: updat change log
2026-02-13 10:10:41 -03:00
e3be0184b1 feat(chat-list): add pull-to-reveal search and filters header (#195)
* feat: Add WnChatListItem and refactor ChatListTile to use it

- Create WnChatListItem widget matching Figma specs
- Refactor ChatListTile to use WnChatListItem
- Add "you" localization key
- Add tests for WnChatListItem and update ChatListTile tests
- Update test_helpers to support provider overrides

* fix(widgets): improve WnChatListItem design to match Figma

- Use medium14Compact typography for message preview (was medium14)
- Support 2-line message preview with ellipsis truncation
- Center status icon vertically relative to message text
- Add colored status icons: red for failed, blue for request
- Add widgetbook showcase with 'Is From You' knob
- Add two-line message examples to widgetbook
- Wrap widgetbook in DesignWidthContainer (390px)

* feat(widgets): add WnChatList container with scroll edge effect

Extract reusable WnChatList widget from ChatListScreen that handles
loading, empty, and list states. The chat list extends full-screen
behind the WnSlate header using a Stack layout, with a scroll-aware
gradient fade effect at the top so items visually dissolve as they
scroll up behind the slate and into the status bar area.

* feat(chat-list): add pull-to-reveal search and filters header

Add search/filter bar that slides down from behind the slate when
pulling down on the chat list. The header commits to open once the
user drags past 50% and dismisses when scrolling up. Includes
WnSearchAndFilters widget with search field and filter chips.

Closes #148

* add scroll animations for chat list

* fix(test): address PR review feedback and improve widget test coverage

- Rename misleading test description to 'renders chat status widget when status is provided'
- Remove weak 'renders selected state background' test that asserted nothing meaningful
- Add test for pending group with name to cover chat_list_tile.dart avatarName path
- Clean up unnecessary comments in wn_chat_list_item_test.dart

* fix(test): improve test style and use byKey for icon lookup

- Extract finder variable in chat_list_tile_test to keep lines under 100 chars
- Add Key('notification_off_icon') to WnChatListItem notification icon
- Replace widget predicate with find.byKey in notification off test
- Reformat long testWidgets declaration to wrap under 100 chars
- Remove unused wn_icon.dart import from test

* fix: translate l10n strings, remove unused isTyping param, fix test pubkeys

- Translate search/filterChats/filterArchive into de/es/fr/it/pt/ru/tr
- Remove unused isTyping parameter from WnChatListItem
- Use valid 64-char hex pubkeys in chat_list_tile tests
- Remove unnecessary comments from ChatListTile

* fix: restore reversed chat list ordering and extract magic constants

Restore reversed indexing in ChatListScreen itemBuilder so newest/updated
chats appear at the top, aligning with useChatList hook behavior.

Extract repeated values in WnChatList into named constants:
- _kAnimationDuration for the four Duration(milliseconds: 200) usages
- horizontalPadding for the duplicated 10.w ListView/header padding
- _kDismissThreshold (0.7) and _kOpenThreshold (0.5) for header reveal

Fix test pubkeys in chat_list_tile_test to use valid 64-char hex constants
and update chat_list_screen_test expectations for reversed ordering.

---------

Co-authored-by: emir yorulmaz <emiryorulmaz@ikmail.com>
2026-02-07 13:20:06 +01:00
PepiandGitHub 2cec4e850b Migrate to white noise app bundle id (#163)
* chore: use whitenoise app team and bundle id

* chore: add apk commands

* chore: rename package from sloth to whitenoise

* docs: remove sloth word from readme and agents.md

* chore: replace sloth texts with whitenoise

* chore: remove unused error screen

* docs: copy LICENSE file from whitenoise repo

* chore: upgrade version to 0.3.0+15 so that android apk can replace old whitenoise ones

* refactor: rename MyApp to WnApp

* chore: use new staging bundle id

* chore: rename org.parres to IPF

* chore: remove .so file

* fix: make android signer work after bundle id change

* core: replace org.parres with dev.ipf for widgebtook

* test: improve coverage
2026-02-05 14:45:04 -03:00
PepiandGitHub 5bb46fd4d9 Copy card (#157)
* feat: add text widget that has ellipsis in middle

* feat: add wn copy card

* docs: add wn copy card story and rename wn avatar story

* refactor: move use system notice to hook

* feat: add translation for on copy pubkey error

* feat: use wn copy card and use system notice in screens

* test: add tests for uncovered back navigaiton in user search screen

* feat: change pubkey formatting to 4 chars groups

* test: improve formatting tests by moving hex to npub mapping to base mock
2026-02-04 09:58:36 -03:00
emir yorulmazandGitHub d44ef064a8 Scan QR for nsec (#164)
* Add tests

* use_scan

* routes

* screens

* widgets

* Translations and permissions

* scanner service

* Update CHANGELOG

* Make scanner start/stop return bool

* Design update
2026-02-03 15:29:18 +03:00
PepiandGitHub 3f8209fd88 Avatar colors (#108)
* feat: change formatting initials to just one

* feat: calculate accent color from pubkey

* refactor: extract image picker logic to hook, to be able to then replace wn image picker with wn avatar

* feat: adjust avatar design

* feat: use avatar colors

* feat: handle pick error case and replace image picker with avatar in signup an edit profile screens

* docs: add avatar widgetbook story

* test: fix dropdown tests warnings

* docs: update changelog

* test: use hex pubkeys in tests

* fix: overflow in settings screen
2026-01-30 11:04:29 -03:00
JeffGandGitHub a1530b708d feat(widgets): add input components (#115)
* feat(widgets): add slate design input components

Replace WnTextFormField with new slate design input widgets:

- WnInput: Single-line text input with optional label, helper text,
  inline action, and trailing action support
- WnInputPassword: Password input with visibility toggle, scan QR
  button, and paste/clear actions
- WnInputTextArea: Multi-line text input with configurable minimum
  height based on size variant

All components support two sizes (44px and 56px) matching the Figma
design system, with consistent typography (Manrope Medium 14px) and
semantic colors.

Closes #65

* fix: add .toInt() to clamp result and improve password input test coverage

- Fix type error in wn_copyable_field.dart (clamp returns num, need int)
- Add tests for labelHelpIcon callback in WnInputPassword
- All input widgets now have 100% test coverage

* fix: improve input widgets and test reliability

- Add obscurable to useEffect deps in WnCopyableField
- Use .h for height sizing in WnCopyableField Container
- Add key to password field container for testability
- Add second toggle check in visibility test
- Update size tests to assert actual rendered heights
- Fix mountWidget/mountStackedWidget to call setUpTestView

* fix: improve WnInputPassword responsive sizing and disabled state

- Use backgroundSecondary for disabled background (visual distinction)
- Split inlineActionSize into separate width (.w) and height (.h) vars
- Apply same pattern to _buildInlineAction and _buildTrailingAction
- Fix labelHelpIcon SizedBox to use .h for height

* fix(widgets): align input background color with Figma design

Remove redundant ternary for background color in WnInput and
WnInputPassword. Per Figma design, both enabled and disabled states
use backgroundPrimary - disabled state is distinguished by text color.

* refactor(widgets): clean up WnInput code

- Remove redundant Padding with EdgeInsets.all(0.w) around help icon
- Use spread operator to combine inlineAction SizedBox and Gap into
  single conditional block

* refactor(widgets): improve WnInput tap target and deduplicate styles

- Add HitTestBehavior.opaque to label help icon GestureDetector so
  full 18.w SizedBox is tappable, not just the 14.w icon
- Extract _baseInfoTextStyle getter to deduplicate TextStyle in
  _buildHelperText and _buildErrorText methods

* feat(widgets): add focus/hover states and disable interactions for WnInput

- Convert WnInput to HookWidget to track focus and hover state
- Add _getBorderColor method that computes border based on enabled,
  focused, hovered, and error states
- Add MouseRegion for hover detection and Focus wrapper for focus tracking
- Wrap inlineAction and trailingAction with IgnorePointer when disabled
  to prevent interactions on disabled inputs

* fix(widgets): always register MouseRegion callbacks in WnInput

Keep onEnter and onExit callbacks always registered but change behavior:
- onEnter only sets hover state when enabled
- onExit always clears hover state to prevent stale state on disabled widgets

* fix(widgets): use backgroundSecondary for disabled WnInputTextArea

* fix(widgets): use .h for height values in WnInput components

Per AGENTS.md guidelines, use .w for width-based values and .h for
height-based values with flutter_screenutil.

* test(widgets): add hover state tests for WnInput to achieve 100% coverage

* test(widgets): improve WnInput tests to verify actual visual behavior

- Add 'input_field_container' key to WnInput for testability
- Update size tests to verify actual rendered height (56px vs 44px)
- Update hover tests to verify border color changes:
  - tertiary -> secondary on hover
  - secondary -> tertiary on exit
  - tertiary stays tertiary when disabled and hovered

* Update formatting

* refactor(widgets): improve input widget consistency and accessibility

- Extract shared _baseInfoTextStyle in WnInputPassword for helper/error text
- Add HitTestBehavior.opaque to labelHelpIcon GestureDetector for full tap area
- Gate inline action buttons by enabled state in WnInputPassword
- Fix height unit from .w to .h in WnInputTextArea help icon SizedBox
- Add height assertions to WnInputTextArea size tests

* fix(widgets): use correct semantic color for error text

Change error text color from fillDestructive to backgroundContentDestructive
to match Figma design specifications.

Fixes PR #115 review comments.
2026-01-30 08:30:16 +01:00
923fadbc4d Add internationalization support with 8 languages (#83)
* Add internationalization support with 8 languages

- Add locale provider with system/manual language selection
- Add ARB translation files for EN, ES, FR, DE, IT, PT, RU, TR
- Localize all 19 screens and 23 widgets
- Add locale-aware date/number/currency formatters
- Add comprehensive locale provider tests (40+ tests)
- Add language selector in app settings
- Include proper ICU plural forms for all languages

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Formatting

* Regenerate flutter_rust_bridge bindings after rebase

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Formatting

* Improve locale persistence and add profile error strings

- Refactor LocaleNotifier to use secure storage for locale preference
- Add profileLoadError and profileSaveError localization strings
- Update tests for new locale provider implementation
- Fix various test issues and remove unused imports

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Improve test coverage and fix CI l10n validation

- Fix CI workflow to use jq for reliable ARB key extraction instead of grep
- Add error handling tests for LocaleProvider storage failures
- Add failure simulation flags to MockWnApi and MockSecureStorage
- Add tests for LocaleFormatters, LocalePersistenceException, and edge cases
- Add UI error handling tests for language update and npub conversion failures

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Improve dropdown scroll UX and fix test reliability

- Add scroll fade indicators to dropdown when options exceed visible items
- Refactor dropdown list into _ScrollableDropdownList widget
- Improve CI l10n validation with better jq error handling
- Remove unused _resolveSystemLanguageCode method
- Fix async test expectations in locale provider tests

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Add atomic locale storage rollback and CI orphaned key detection

- Locale provider now captures previous preference before changes and
  restores it atomically if the rust API call fails
- CI l10n validation now detects extra/orphaned keys in locale files
  (not just missing keys), with improved error messaging
- Added tests for storage rollback behavior on API failure

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Remove unused import

* refactor: move l10n keys validation to scrip folder

* Update spanish localizations

* fix(l10n): improve Spanish key terminology (clave → llave)

Use 'llave' instead of 'clave' for cryptographic keys in Spanish
translations, which is more commonly used in technical contexts.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* ci: add pub cache to l10n-validation and locale validation to precommit

- Add Flutter pub cache step to l10n-validation CI job for faster runs
- Add validate-locales-keys to precommit and precommit-check recipes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(ci): use correct github.workspace context in l10n cache

Replace runner.workspace with github.workspace for the pub-cache
path in l10n-validation job. runner.workspace is not a valid
GitHub Actions context.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: josefinalliende <mariajosefinaalliende@gmail.com>
2026-01-27 09:38:01 +01:00
PepiandGitHub dbdb530899 Welcomes and invite acceptance flow (#9)
* feat: improve use user metadata hook

* feat: add hook to fetch and sort pending welcomes

* feat: add animated avatar for welcome tiles

* feat: add chat list welcome tile

* feat: skip onboarding on login

* feat: show welcomes in chat list with pull to refresh

* feat: refresh welcomes in chat list navigation

* feat: add welcome screen

* chore: run check coverage script on coverage report comand

* chore: change coderabbit to assertive mode

* feat: improve go back
2025-12-23 12:50:21 -03:00
PepiandGitHub d42846b39a Feat/developer settings (#8)
* refactor: extract repeated screen header to component

* feat: add developers settings screen

* chore: ignore back rust/.cargo/config.toml

* chore: remove code comments that are not really necessary

* test: add tests to improve coverage

* fix: replace gesture detector with icon button for better accesibility
2025-12-18 18:34:11 -03:00
PepiandGitHub 754842417f Feat/auth-and-navigation (#6)
* feat: add auth providers, hooks and services

* feat: add more base components

* feat: add routing and main screens

* chore: add coverage-report just command

* docs: improve readme

* chore: add android buidl scrips from whitenoise repo
2025-12-18 12:36:03 -03:00
josefinalliende f9c2c662a3 feat: add base shared buttons and container 2025-12-09 07:09:29 -03:00