@@ -10,6 +10,46 @@ Fragment files in ``upcoming_changes/`` are assembled into this file by
1010
1111.. towncrier release notes start
1212
13+ 0.3.0b1 (2026-07-13)
14+ ====================
15+
16+ New Features
17+ ------------
18+
19+ - Added :class: `~anyplotlib.widgets.ArrowWidget ` (draggable arrow overlay, tail
20+ at ``(x, y) `` and head at ``(x + u, y + v) ``) via ``Plot2D.add_arrow_widget `` /
21+ ``add_widget("arrow") ``, and a ``show_handles `` option (default ``True ``) on
22+ every 2-D overlay widget to hide the grab-handle dots without affecting drag.
23+ - Added figure-level edit-mode chrome to :class: `~anyplotlib.Figure `: the
24+ ``edit_chrome `` and ``selected_panel `` traits (per-panel hover / selection
25+ outlines), figure-background click events, and a figure-level annotation layer
26+ (``set_figure_markers `` / ``figure_markers ``, positioned in figure fractions and
27+ always included in ``exportPNG ``) with figure-level callbacks via
28+ ``add_event_handler ``.
29+ - Extended :class: `~anyplotlib.Figure ` edit-mode interaction:
30+
31+ * Circle and rectangle overlay widgets are now **resizable via visible nodes ** —
32+ a circle draws a centre (move) node and an east-point radius node; a rectangle
33+ draws all four corner nodes (opposite corner anchored on drag). Drawn only
34+ when ``show_handles `` is ``True ``, with matching resize cursors.
35+ * :class: `~anyplotlib.widgets.ArrowWidget ` **tail is now a reshape node **:
36+ dragging the tail moves it while the head stays anchored (dragging the shaft
37+ still moves the whole arrow; the head node still re-aims it).
38+ * The selected-panel and hover **outlines are fully inset ** (``outline-offset:
39+ -2px ``) so an edge/corner panel's ring is no longer clipped at the figure's
40+ right/bottom edge.
41+ * **Panel drag-swap ** under ``edit_chrome ``: each grid panel shows a move grip
42+ in its top-left corner; dragging it over a *different * panel emits a
43+ figure-level ``pointer_up `` event with ``panel_swap: true `` and
44+ ``source_panel_id `` / ``target_panel_id `` (new :class: `~anyplotlib.Event `
45+ fields). anyplotlib performs no layout change itself — the host swaps and
46+ rebuilds. Releasing on the source panel or empty space cancels cleanly; the
47+ grip is inert when ``edit_chrome `` is off.
48+ * The JS ``mount() `` embedding entry point accepts an ``onResize({width,
49+ height}) `` callback, fired (debounced) when the **root container resizes **, so
50+ an embedding host can relayout the figure to its new box.
51+
52+
13530.2.0 (2026-07-10)
1454==================
1555
0 commit comments