Hi,
Here is a new version of Mapiah - v0.3.2 - the
[Claude](https://en.wikipedia.org/wiki/Claude_(language_model)) release with
lots of new features.
# Changelog
## 0.3.2 - 2026-03-19 - The
[Claude](https://en.wikipedia.org/wiki/Claude_(language_model)) release
* New features:
* Copy/Paste functionality for elements (Ctrl+C / Ctrl+V or Meta+C / Meta+V)
with cross-file support and automatic THID conflict resolution.
* Cut selected elements (Ctrl+X / Meta+X): copies elements to clipboard and
deletes originals.
* Scrap duplication, copy, and cut from the available scraps panel.
* Multiple TH2 file open support with multi-selection in file dialog.
* Click-and-drag horizontal scrolling for tabs when many files are open.
* Mouse wheel scrolling support for tab bar.
* Tab drag-to-reorder: reorder file tabs by clicking and dragging them with
visual insertion point indicator. [requested by Patrícia Finageiv]
* Command-line argument handling: positional arguments, --th2 (multiple), and
--thconfig (single).
* Created enumeration-backed settings, including the new
TH2Edit_newLineCreationMethod setting with localized enum values.
* Implemented selectable new line creation behavior for both the Mapiah
quadratic mode and the xTherion cubic smooth mode with Ctrl-drag distance
locking.
* 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.
* 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.
* 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.
* 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.
* Scrap reordering via drag-and-drop in the available scraps panel, with
animated insertion indicator. Reordering is undoable with Ctrl+Z
(MPReorderScrapsCommand).
* Pasted elements are now automatically selected after a paste; if a scrap was
pasted, the selection is cleared instead.
* Available images panel now supports click-and-drag reordering; image order is
persisted in the TH2File top-level children list.
* Fixed bugs:
* 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.
* When a file fails to parse, its tab is now automatically closed once the user
dismisses the error dialog.
* 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.
* 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.
* 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.
* Duplicate (elements and scrap) was overwriting the clipboard; now saves and
restores the clipboard around the internal copy so duplicate never affects
clipboard contents.
* Added tests for duplicate-scrap (3208) and clipboard preservation during
duplicate (3210).
* 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.
* Duplicate scrap icon looking ugly.
* Failure decoding "therion.log". [reported by CaverBruce (issue
[#17](https://github.com/rsevero/mapiah/issues/17))]
* Regular loop error reports being treated as actual errors.
* Non actual error should not be marked in red.
* RenderFlex overflow error when resizing window smaller than tab bar width.
* Tab drag-to-reorder functionality now properly reorders tabs without overflow.
* Drag feedback image now has rounded corners matching the tab style.
* Unable to open multiple files at once from home screen (first time opening
files).
* Exception "No element with index '0'" when opening TH2 file from command line.
* Tab names now display without .th2 extension for cleaner UI.
* 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.
* Overlay windows left open on a tab were not closed when switching to another
tab.
* 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.
* Overlay windows on the current tab were not closed when opening or creating a
new file.
* Test 3100 assertions now correctly expect TH2FileTabsPage instead of
TH2FileEditPage.
* 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)
* 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).
* 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).
* XTherion mode line creation with drag throwing.
* Available images reordering is now undoable/redoable and uses a dedicated
"Reorder images" undo/redo label instead of the generic move-elements message.
* Scripts:
* Added sort_arb_files.dart script to sort ARB localization files
alphabetically; runs flutter gen-l10n automatically only when files change.
* Pre-commit hook now runs sort_arb_files.dart and re-stages ARB and generated
l10n files whenever an ARB file is staged.
* Infrastructure maintenance:
* Extracted TH2FileEditAreaLineCreationController: separated all area and line
creation logic from TH2FileEditElementEditController into a dedicated MobX
controller for better separation of concerns.
* Extracted TH2FileEditCopyPasteController: separated copy/paste/duplicate
logic from TH2FileEditElementEditController into a dedicated MobX controller
for better separation of concerns.
* Updated packaging/README.md to mention release constant.
* Removed Flathub files from scripts/update_flutter_and_mapiah_version.dart.
* Test for scrap duplication.
* update_flutter_and_mapiah_version.dart script updating release name and URL
constants.
* Migrated from "rsevero.github.io" to "flatpak.mapiah.org" and updated all
installation URLs in documentation and help files.
* Moved dart format from VSC to git hook.
* Including instructions to Claude update help pages when adding new features
or changing existing ones.
* Added SPDX license identifiers to all Dart and Markdown source files.
* Updated pre-commit git hook to automatically add SPDX headers and copyright
information to new Dart and Markdown files.
* Added comprehensive pre-commit hook documentation with examples and
troubleshooting guide.
* Fixed pre-commit hook `sed -i` to `sed -i''` for Windows (Git Bash)
compatibility; updated installation docs to mention Git Bash requirement on
Windows.
* Renamed MPDuplicateElementResult parameters.
* Refactored THFile class rename: updated all variable names (thFile → th2File,
_thFile → _th2File), related properties throughout the codebase, and THFile →
TH2File in comments.
* Renamed `_filenameAndScrap` to `_currentScrapName` and updated to store only
scrap name, not filename (filename is already shown in tab).
* Updated help pages (EN/PT) with documentation for scrap copy, cut, duplicate,
and per-scrap visibility toggle.
* Added settings help pages (EN/PT) covering all settings and their sections;
added help button to the settings page AppBar.
* Fixed help dialog rendering HTML comments (SPDX license headers) as visible
text: markdown is now pre-processed to strip HTML comments before display.
* 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.
* 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. *
Updated help pages (EN/PT) with documentation for image visibility toggle and
image reordering via drag-and-drop.
Please report,
Rodrigo
_______________________________________________
Therion mailing list
[email protected]
https://mailman.speleo.sk/listinfo/therion