<div style="font-family: Arial, sans-serif; font-size: 14px;">Hi,</div><div style="font-family: Arial, sans-serif; font-size: 14px;"><br></div><div style="font-family: Arial, sans-serif; font-size: 14px;"><br></div><div style="font-family: Arial, sans-serif; font-size: 14px;">Here is a new version of Mapiah - v0.3.2 - the <a href="https://en.wikipedia.org/wiki/Claude_(language_model)" title="Claude">Claude</a> release with lots of new features.</div><div style="font-family: Arial, sans-serif; font-size: 14px;"><br></div><div style="font-family: Arial, sans-serif; font-size: 14px;"><span># Changelog</span><div><br></div><div><span>## 0.3.2 - 2026-03-19 - The [Claude](<a target="_blank" rel="noreferrer nofollow noopener" href="https://en.wikipedia.org/wiki/Claude_(language_model)">https://en.wikipedia.org/wiki/Claude_(language_model)</a>) release</span></div><div><span>* New features:</span></div><div><span> * Copy/Paste functionality for elements (Ctrl+C / Ctrl+V or Meta+C / Meta+V) with cross-file support and automatic THID conflict resolution.</span></div><div><span> * Cut selected elements (Ctrl+X / Meta+X): copies elements to clipboard and deletes originals.</span></div><div><span> * Scrap duplication, copy, and cut from the available scraps panel.</span></div><div><span> * Multiple TH2 file open support with multi-selection in file dialog.</span></div><div><span> * Click-and-drag horizontal scrolling for tabs when many files are open.</span></div><div><span> * Mouse wheel scrolling support for tab bar.</span></div><div><span> * Tab drag-to-reorder: reorder file tabs by clicking and dragging them with visual insertion point indicator. [requested by Patrícia Finageiv]</span></div><div><span> * Command-line argument handling: positional arguments, --th2 (multiple), and --thconfig (single).</span></div><div><span> * Created enumeration-backed settings, including the new TH2Edit_newLineCreationMethod setting with localized enum values.</span></div><div><span> * Implemented selectable new line creation behavior for both the Mapiah quadratic mode and the xTherion cubic smooth mode with Ctrl-drag distance locking.</span></div><div><span> * Show Bézier control points during click-and-drag line creation: CP1 and CP2 visible while dragging, with the dragged handle painted black and others white; control points disappear on mouse release.</span></div><div><span> * Per-scrap visibility toggle in the available scraps panel: each scrap row shows a checkbox to hide/show the scrap on the canvas. Hidden scraps cannot be the active scrap. The checkbox is hidden for the active scrap.</span></div><div><span> * Added toggle-all scrap visibility button above the scrap list; hides all but the active scrap when all are visible, or shows all when any are hidden. Tooltip and icon update dynamically to describe what the button will do.</span></div><div><span> * Added toggle-all image visibility button above the image list; hides all images when all are visible, or shows all when any are hidden. Tooltip and icon update dynamically to describe what the button will do.</span></div><div><span> * Scrap reordering via drag-and-drop in the available scraps panel, with animated insertion indicator. Reordering is undoable with Ctrl+Z (MPReorderScrapsCommand).</span></div><div><span> * Pasted elements are now automatically selected after a paste; if a scrap was pasted, the selection is cleared instead.</span></div><div><span> * Available images panel now supports click-and-drag reordering; image order is persisted in the TH2File top-level children list.</span></div><div><span>* Fixed bugs:</span></div><div><span> * Parsing error dialog now shows the file's basename and full path above the error list so the user knows which file caused the errors.</span></div><div><span> * When a file fails to parse, its tab is now automatically closed once the user dismisses the error dialog.</span></div><div><span> * Drag-to-reorder (scraps and images): items dropped on a lower-index row landed one position below the visual indicator when dragging downward (off-by-one due to removeAt index shift). Fixed by decrementing newIndex when oldIndex < newIndex.</span></div><div><span> * Drag-to-reorder (scraps and images): no drop zone existed after the last row, making it impossible to drag an item to the last position. Fixed by adding a trailing DragTarget with an animated insertion indicator below the last row.</span></div><div><span> * Duplicate scrap throws "Bad state: No element": duplicateScrap() was relying on the selection to find the new scrap MPID after paste, but pasteElements() now clears selection after pasting a scrap. Fixed by having pasteElements() return the top-level pasted MPIDs, which duplicateScrap() now uses directly.</span></div><div><span> * Duplicate (elements and scrap) was overwriting the clipboard; now saves and restores the clipboard around the internal copy so duplicate never affects clipboard contents.</span></div><div><span> * Added tests for duplicate-scrap (3208) and clipboard preservation during duplicate (3210).</span></div><div><span> * THAreaBorderTHID.thID not updated when border line THID is conflict-resolved during paste: when pasting an area with a border line into the same file (cross-scrap), the border line's THID gets a conflict suffix but the THAreaBorderTHID reference was never updated, causing crashes in MPSelectedArea creation. Fixed by tracking old-THID → new-THID in MPTHElementPasteAux and applying it in step 6.</span></div><div><span> * Duplicate scrap icon looking ugly.</span></div><div><span> * Failure decoding "therion.log". [reported by CaverBruce (issue [#17](<a target="_blank" rel="noreferrer nofollow noopener" href="https://github.com/rsevero/mapiah/issues/17">https://github.com/rsevero/mapiah/issues/17</a>))]</span></div><div><span> * Regular loop error reports being treated as actual errors.</span></div><div><span> * Non actual error should not be marked in red.</span></div><div><span> * RenderFlex overflow error when resizing window smaller than tab bar width.</span></div><div><span> * Tab drag-to-reorder functionality now properly reorders tabs without overflow.</span></div><div><span> * Drag feedback image now has rounded corners matching the tab style.</span></div><div><span> * Unable to open multiple files at once from home screen (first time opening files).</span></div><div><span> * Exception "No element with index '0'" when opening TH2 file from command line.</span></div><div><span> * Tab names now display without .th2 extension for cleaner UI.</span></div><div><span> * Creating a new file while another file is already open caused a "Multiple widgets used the same GlobalKey" crash due to a duplicate TH2FileTabsPage being pushed onto the navigator.</span></div><div><span> * Overlay windows left open on a tab were not closed when switching to another tab.</span></div><div><span> * Cross-file scrap paste via Ctrl+V did nothing: switching tabs stole keyboard focus to the outgoing canvas because clearOverlayWindows called requestFocus for every MPWindowType even with no overlay open. Fixed by guarding the requestFocus call with wasOpen, giving focus to the incoming canvas in setActiveTab, and adding a post-frame focus reaction in TH2FileTabsPage.</span></div><div><span> * Overlay windows on the current tab were not closed when opening or creating a new file.</span></div><div><span> * Test 3100 assertions now correctly expect TH2FileTabsPage instead of TH2FileEditPage.</span></div><div><span> * Copy/Paste logic refined: parents (scraps, areas, lines) materialized with empty childrenMPIDs and added at end position; children automatically populate parent childrenMPIDs when added to th2File. Border lines processed before areas during copy. (3/4 duplicate tests now passing)</span></div><div><span> * THID conflict resolution for elements with THIDCommandOption: duplicate pasted lines now get new unique THIDs when conflicts exist (all 5/5 duplicate tests now passing).</span></div><div><span> * Phase 6 validation tests for multi-element copy/paste: same scrap, across scraps, and cross-file paste with point + line + area elements and implicit border line inclusion (3164-3166).</span></div><div><span> * XTherion mode line creation with drag throwing.</span></div><div><span> * Available images reordering is now undoable/redoable and uses a dedicated "Reorder images" undo/redo label instead of the generic move-elements message.</span></div><div><span>* Scripts:</span></div><div><span> * Added sort_arb_files.dart script to sort ARB localization files alphabetically; runs flutter gen-l10n automatically only when files change.</span></div><div><span> * Pre-commit hook now runs sort_arb_files.dart and re-stages ARB and generated l10n files whenever an ARB file is staged.</span></div><div><span>* Infrastructure maintenance:</span></div><div><span> * Extracted TH2FileEditAreaLineCreationController: separated all area and line creation logic from TH2FileEditElementEditController into a dedicated MobX controller for better separation of concerns.</span></div><div><span> * Extracted TH2FileEditCopyPasteController: separated copy/paste/duplicate logic from TH2FileEditElementEditController into a dedicated MobX controller for better separation of concerns.</span></div><div><span> * Updated packaging/README.md to mention release constant.</span></div><div><span> * Removed Flathub files from scripts/update_flutter_and_mapiah_version.dart.</span></div><div><span> * Test for scrap duplication.</span></div><div><span> * update_flutter_and_mapiah_version.dart script updating release name and URL constants.</span></div><div><span> * Migrated from "<a target="_blank" rel="noreferrer nofollow noopener" href="http://rsevero.github.io">rsevero.github.io</a>" to "<a target="_blank" rel="noreferrer nofollow noopener" href="http://flatpak.mapiah.org">flatpak.mapiah.org</a>" and updated all installation URLs in documentation and help files.</span></div><div><span> * Moved dart format from VSC to git hook.</span></div><div><span> * Including instructions to Claude update help pages when adding new features or changing existing ones.</span></div><div><span> * Added SPDX license identifiers to all Dart and Markdown source files.</span></div><div><span> * Updated pre-commit git hook to automatically add SPDX headers and copyright information to new Dart and Markdown files.</span></div><div><span> * Added comprehensive pre-commit hook documentation with examples and troubleshooting guide.</span></div><div><span> * Fixed pre-commit hook `sed -i` to `sed -i''` for Windows (Git Bash) compatibility; updated installation docs to mention Git Bash requirement on Windows.</span></div><div><span> * Renamed MPDuplicateElementResult parameters.</span></div><div><span> * Refactored THFile class rename: updated all variable names (thFile → th2File, _thFile → _th2File), related properties throughout the codebase, and THFile → TH2File in comments.</span></div><div><span> * Renamed `_filenameAndScrap` to `_currentScrapName` and updated to store only scrap name, not filename (filename is already shown in tab).</span></div><div><span> * Updated help pages (EN/PT) with documentation for scrap copy, cut, duplicate, and per-scrap visibility toggle.</span></div><div><span> * Added settings help pages (EN/PT) covering all settings and their sections; added help button to the settings page AppBar.</span></div><div><span> * Fixed help dialog rendering HTML comments (SPDX license headers) as visible text: markdown is now pre-processed to strip HTML comments before display.</span></div><div><span> * Fixed help dialog "Close" button being hidden when help content is long: the markdown body now scrolls independently while the Close button stays pinned in a visually separated footer.</span></div><div><span> * Improved image reorder drag feedback: dragged row disappears from the list while a semi-transparent row preview follows the cursor; an animated colored bar opens above the hovered drop target to indicate the insertion point.</span></div><span> * Updated help pages (EN/PT) with documentation for image visibility toggle and image reordering via drag-and-drop.</span></div><div style="font-family: Arial, sans-serif; font-size: 14px;"><br></div><div style="font-family: Arial, sans-serif; font-size: 14px;">Please report,</div><div style="font-family: Arial, sans-serif; font-size: 14px;"><br></div><div style="font-family: Arial, sans-serif; font-size: 14px;">Rodrigo</div><div style="font-family: Arial, sans-serif; font-size: 14px;"><br></div><div style="font-family: Arial, sans-serif; font-size: 14px;" class="protonmail_signature_block protonmail_signature_block-empty">
<div class="protonmail_signature_block-user protonmail_signature_block-empty">
</div>
<div class="protonmail_signature_block-proton protonmail_signature_block-empty">
</div>
</div>