Alonso Torres 217284b1e1
Improve path operations and edition (#10807)
*  Improve path operations and edition

* 🐛 Fix floating-point equality issues in path editing

Replace exact equality checks with tolerance-based comparisons
in path editing functions to handle floating-point rounding
differences after transforms, rotations, or curve fitting.

Changes:
- distribute-content: Round coordinates to 0.1 precision before
  grouping to ensure coincident nodes move together
- separate-node: Use gpt/close? instead of exact equality to
  find nodes with floating-point imprecision
- collision-step: Use mth/close? for tolerance-based comparison
  to detect paste collisions correctly
- resolve-edit-fills: Add cycle detection to prevent infinite
  loops with corrupted parent chains

Made collision-step, available-offset-step, and resolve-edit-fills
public for better testability.

Added comprehensive tests for all fixes covering both exact and
floating-point coordinate scenarios.

AI-assisted-by: qwen3.7-plus

* 🐛 Fix path editor code review findings

Fix issues identified during code review of path editor enhancements:

- Fix unused binding lint warning in distribute-content that blocked CI
- Fix collision-step floor comparison to use round instead of floor,
  correctly detecting collisions when coordinates drift slightly below
  integer boundaries
- Fix resolve-edit-fills to recurse through empty parent groups when
  searching for inherited fills in nested group hierarchies
- Fix expand-coincident-node-indices to use fuzzy comparison (gpt/close?)
  instead of exact equality, handling floating-point divergence after
  transforms or rotations
- Remove unreachable dead code in path-point* on-pointer-down handler
- Add tests for collision-step boundary cases, nested group fill
  inheritance, and coincident node alignment/flipping

AI-assisted-by: mimo-v2.5-pro

---------

Co-authored-by: Andrey Antukh <niwi@niwi.nz>
2026-08-27 10:51:10 +02:00
..
2020-11-24 08:35:01 +01:00
2020-06-02 12:10:10 +02:00
2020-06-02 12:10:10 +02:00
2020-06-02 12:10:10 +02:00
2021-01-28 13:33:53 +01:00
2020-06-02 12:10:10 +02:00
2020-06-02 12:10:10 +02:00
2020-06-02 12:10:10 +02:00
2020-06-02 12:10:10 +02:00
2020-11-23 17:44:02 +01:00
2020-06-02 12:10:10 +02:00
2020-06-02 12:10:10 +02:00
2020-09-11 09:54:15 +02:00
2020-06-02 12:10:10 +02:00
2020-11-23 17:44:02 +01:00
2020-11-23 17:44:02 +01:00
2020-06-02 12:10:10 +02:00
2020-06-02 12:10:10 +02:00
2022-01-25 14:17:13 +01:00
2020-06-02 12:10:10 +02:00
2020-06-02 12:10:10 +02:00
2023-02-22 12:38:55 +01:00
2020-06-02 12:10:10 +02:00
2022-02-07 15:18:30 +01:00
2022-02-07 15:18:30 +01:00
2022-02-07 15:18:30 +01:00