Skip to content

Conversation

@arielmelendez
Copy link
Collaborator

Release Notes

  • Introduces in-app markdown note authoring, editing, and upload
  • Removes most redundant signature requests and associated redundant streaming of data and metadata

vilenarios and others added 25 commits October 31, 2025 10:04
- Add note creation feature with markdown editor and live preview
- Implement three view modes: Edit Only, Split View, and Preview Only
- Add markdown rendering with flutter_markdown package for uploaded files
- Add responsive modal design (900px desktop, 700px tablet, full-width mobile)
- Add markdown/plain text toggle for large file performance
- Add image error handling for unsupported formats (SVG, broken links)
- Integrate view mode controls into editor toolbar
- Add comprehensive tests for note creation cubit and form
- Fix button colors to use brand red (themeAccentEmphasis)

New components:
- NoteCreateCubit and NoteCreateState for state management
- NoteCreateForm modal dialog with validation
- NoteEditorWidget with formatting toolbar and preview
- Integration with existing upload flow

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add dart:convert import for UTF-8 decoding in cubit test
- Fix unicode content test to use utf8.decode() instead of String.fromCharCodes()
- Add proper test setup with AppLocalizations and ArDriveTheme
- Update button text expectation from "CREATE NOTE" to "NEXT"
- Increase test viewport size for error message display test

All 23 note_create tests now pass:
- 17 cubit unit tests
- 6 widget tests

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
When createNoteFile encounters an error, save the current editing state
and restore it after emitting the error. This keeps the UI interactive
so users can correct issues without losing their work.

Previously, emitting NoteCreateError would leave the cubit out of the
editing state, making the form non-interactive.

Addresses CodeRabbit PR review feedback.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Replace hard-coded English error messages in validation with
localization-safe error keys (enum) that the UI layer resolves via
AppLocalizations.

Changes:
- Add NoteNameValidationError enum with 'empty' and 'invalidCharacters' keys
- Update _ValidationResult to use errorKey instead of errorMessage
- Change NoteCreateEditing.nameError from String? to NoteNameValidationError?
- Add _getErrorMessage() method in NoteCreateForm to resolve keys
- Add noteNameEmptyError and noteNameInvalidCharactersError to app_en.arb

This enables proper internationalization and follows i18n best practices
by keeping validation logic separate from localized strings.

Addresses CodeRabbit PR review feedback.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Add GlobalCupertinoLocalizations.delegate to the test MaterialApp
to fully support iOS-style localizations in tests, completing
the localization setup.

Addresses CodeRabbit PR review feedback.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Address CodeRabbit feedback to ensure test verifies widget presence
before accessing its properties.

Changes:
- Add Key to note name text field for better widget identification
- Update test to assert widget exists before accessing autofocus property
- Use finder variable to avoid duplicate widget lookups

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Address CodeRabbit feedback to avoid exposing raw exceptions to users.

Changes:
- Create NoteCreateErrorKey enum with createFileFailed value
- Update NoteCreateError state to use enum instead of String message
- Log exceptions internally with logger.e() before emitting error state
- Add _getCreateErrorMessage() helper to resolve error keys via AppLocalizations
- Add noteCreateFileFailed localization string to app_en.arb
- Preserve existing emit(editingState) logic to keep UI interactive

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Address CodeRabbit feedback to fix library cycle.

Changes:
- Move NoteNameValidationError and NoteCreateErrorKey enums from note_create_cubit.dart to note_create_state.dart
- Remove circular import of note_create_cubit.dart from note_create_state.dart
- Cubit continues to access enums via existing state file import

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Implement Obsidian-like mobile experience and prepare for markdown editing.

Mobile UX Improvements:
- Add full-page Scaffold layout for mobile (<600px) instead of modal
- Move Cancel/Next actions to AppBar for native app feel
- Make toolbar horizontally scrollable on mobile (no wrapping)
- Hide Split view mode on mobile (only Edit/Preview toggle)
- Use Expanded editor for maximum writing space
- Keep desktop/tablet modal layout unchanged

Edit Mode Foundation:
- Extend NoteCreateCubit with edit mode support (existingFileId parameter)
- Add initialName and initialContent parameters for pre-loading content
- Update mobile/desktop layouts to show "Edit Note" vs "Create New Note"
- Change button text from "NEXT" to "SAVE" in edit mode
- Add localization strings: editNote, saveEmphasized

Benefits:
- Mobile: Full-screen writing with no cramped modal
- Mobile: Single-row scrollable toolbar (no 3-row wrap)
- Desktop: No changes (already works well)
- Ready for full edit implementation in next commit

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Clean up markdown editor toolbar for better UX and consistency.

Toolbar Improvements:
- Add Underline button (U) - was missing!
- Replace H1, H2, H3 buttons with single H dropdown menu
- Replace Edit/Split/Preview with single icon toggle button
- Toggle shows eye icon (preview) or pencil icon (edit)
- Desktop keeps split view, mobile shows edit/preview only

Benefits:
- Cleaner, more compact toolbar
- Fewer buttons = less visual clutter
- H dropdown saves horizontal space
- Single toggle is more intuitive
- Matches modern note apps (Obsidian, Typora)
- Icon-based toggle (no emoji text)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Auto-replace existing file when editing markdown notes (skip conflict modal)
- Add autoReplaceConflicts parameter to upload flow for seamless note updates
- Enhance scroll bar visibility with increased opacity (0.9/0.5) and theme-aware colors
- Apply white/light background to edit and preview modes for better contrast
- Fix double scroll bar issue by removing redundant wrapper
- Change preview icon from eye to book for better visual clarity
- Update view mode default from splitView to editOnly
- Increase test viewport size to accommodate modal layout
- Update all tests to reflect UI changes (23/23 passing)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add noteFileTooLarge localization with fileSizeMB placeholder
- Add noteLargeFileWarningTitle and noteLargeFileWarningDescription
- Add continueEmphasized button text
- Remove unused splitView localization strings
- Update note_create_form.dart to use localized strings
- Regenerate AppLocalizations

Addresses CodeRabbit review feedback for proper i18n support.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
…orWidget

- Remove showEditor and showPreview boolean parameters
- Use viewMode enum directly in _buildEditorArea with exhaustive switch
- Simplify NoteEditorWidget constructor to only use viewMode
- Update all call sites to remove redundant flag calculations
- Makes code intent clearer and eliminates ambiguity about split view support

This refactoring addresses CodeRabbit feedback by making it explicit that
split view is not supported and the editor only operates in two mutually
exclusive modes (editOnly or previewOnly).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add 18 new localization keys for markdown editor strings
- Localize toolbar tooltips (Bold, Italic, Strikethrough, etc.)
- Localize heading dropdown items (Heading 1, 2, 3)
- Localize view toggle button (Preview, Edit)
- Localize placeholder texts for editor and preview
- Localize image alt text fallback
- Import app_localizations_wrapper for string access
- Regenerate AppLocalizations from ARB files

All UI strings now support internationalization. English translations
provided; other languages show as untranslated pending translation.

Addresses CodeRabbit review feedback for proper i18n support.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
The continueEmphasized key was accidentally duplicated when adding
file size dialog localizations. Removed the duplicate at line 1475
and kept the original definition at line 265.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
When editing a markdown note, changing the filename would create a new
file instead of replacing the existing one. This happened because the
upload system's autoReplaceConflicts flag only works when filenames
match - renamed files are treated as new uploads.

Solution: Make the filename field read-only when editing. The field is
now disabled in edit mode, preventing accidental renames and ensuring
the file is properly replaced. This follows common UX patterns where
file renaming is a separate operation from content editing.

Changes:
- Set isEnabled=false on filename text field in edit mode
- Disable onChanged callback in edit mode
- Remove autofocus from filename field in edit mode (focus on content)
- Applied to both mobile and desktop layouts

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
…eation

PE-8691: feat: add markdown note creation and preview enhancements
PE-8723: stop redundantly signing and streaming data items
PE-8727: bump app version number to v2.76.0
@coderabbitai
Copy link

coderabbitai bot commented Nov 18, 2025

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch dev

Tip

📝 Customizable high-level summaries are now available in beta!

You can now customize how CodeRabbit generates the high-level summary in your pull requests — including its content, structure, tone, and formatting.

  • Provide your own instructions using the high_level_summary_instructions setting.
  • Format the summary however you like (bullet lists, tables, multi-section layouts, contributor stats, etc.).
  • Use high_level_summary_in_walkthrough to move the summary from the description to the walkthrough section.

Example instruction:

"Divide the high-level summary into five sections:

  1. 📝 Description — Summarize the main change in 50–60 words, explaining what was done.
  2. 📓 References — List relevant issues, discussions, documentation, or related PRs.
  3. 📦 Dependencies & Requirements — Mention any new/updated dependencies, environment variable changes, or configuration updates.
  4. 📊 Contributor Summary — Include a Markdown table showing contributions:
    | Contributor | Lines Added | Lines Removed | Files Changed |
  5. ✔️ Additional Notes — Add any extra reviewer context.
    Keep each section concise (under 200 words) and use bullet or numbered lists for clarity."

Note: This feature is currently in beta for Pro-tier users, and pricing will be announced later.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link

⚠️ Your PR title does not match the required pattern. Please update the title in the format PE-{number}: {description}.

@arielmelendez arielmelendez changed the title Release v2.76.0 PE-8727: Release v2.76.0 Nov 18, 2025
@arielmelendez arielmelendez merged commit a8a58fc into master Nov 18, 2025
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants