chalkbridge 1.1.2 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +106 -0
- package/dist/cli.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,111 @@
|
|
|
1
1
|
# chalkbridge
|
|
2
2
|
|
|
3
|
+
## 1.1.2
|
|
4
|
+
|
|
5
|
+
**Arrows stay attached when you drag the box they point at.**
|
|
6
|
+
|
|
7
|
+
Reported as arrows never being attached to icons and some rectangles: drag the shape and
|
|
8
|
+
the arrow stays put, its endpoints sitting exactly where they were drawn. The dividing line
|
|
9
|
+
was not the shape type — it was which arrows were *elbowed*.
|
|
10
|
+
|
|
11
|
+
`arrowType: "elbow"` set upstream's `elbowed` flag, and that flag is not decoration.
|
|
12
|
+
`ExcalidrawElbowArrowElement` narrows **both** bindings to `FixedPointBinding`, which adds
|
|
13
|
+
a `fixedPoint`. Every binding Chalkbridge produces comes from
|
|
14
|
+
`convertToExcalidrawElements`, which derives the plain `focus`/`gap` form and no
|
|
15
|
+
`fixedPoint` — so an elbow arrow carried a binding the renderer could not use, and moving
|
|
16
|
+
the shape did nothing to it.
|
|
17
|
+
|
|
18
|
+
- **Right angles are recorded as `customData.chalk.route`**, and the arrow ships as a plain
|
|
19
|
+
multi-point arrow with `roundness: null`. The same square corners, with a binding the
|
|
20
|
+
renderer honours.
|
|
21
|
+
- **Old scenes repair on contact.** An arrow still carrying the flag loses it the first time
|
|
22
|
+
anything moves under it, so nothing needs migrating.
|
|
23
|
+
- The `boundElements` half was correct throughout — measured across rectangle, ellipse,
|
|
24
|
+
diamond and image, every shape listed its arrows and no arrow had an unbound end.
|
|
25
|
+
|
|
26
|
+
Verified on a scene built from scratch with an icon among the shapes, then moving the icon
|
|
27
|
+
and two others: all seven endpoints on moved shapes followed, each still inside the binding
|
|
28
|
+
gap.
|
|
29
|
+
|
|
30
|
+
## 1.1.1
|
|
31
|
+
|
|
32
|
+
**Layouts that read, and arrows that meet the boxes they name.**
|
|
33
|
+
|
|
34
|
+
Everything here came from one rendered diagram — nineteen boxes, twenty-four bound arrows —
|
|
35
|
+
and every claim was measured before and after rather than eyeballed.
|
|
36
|
+
|
|
37
|
+
- **`layout-layered` no longer scatters a graph containing a cycle.** Ranking is a
|
|
38
|
+
fixed-point iteration and a ring has no fixed point, so the loop spent its whole pass
|
|
39
|
+
budget instead of settling: nineteen boxes with four small rings reached a **maximum rank
|
|
40
|
+
of 61**, and the drawing came out **11,072 px wide with a 5,824 px hole in it**. Cycles
|
|
41
|
+
are broken before ranking now — which the function had documented since it was written
|
|
42
|
+
and no code ever did. The same boxes land **1,760 px wide in six even columns**, and the
|
|
43
|
+
dropped edge is still drawn, running backwards against the flow.
|
|
44
|
+
- **Arrows route around what is in the way.** Both previous routes were computed from the
|
|
45
|
+
two boxes at the ends and nothing else, so both drew through whatever sat between them —
|
|
46
|
+
five of thirteen arrows in one sample, and two of sixteen in another *while already
|
|
47
|
+
elbowed*. `domain/scene/route.ts` searches a sparse grid with A\* and a turn penalty, and
|
|
48
|
+
only detours when the direct line actually hits something. Both samples now measure **0
|
|
49
|
+
through a box**.
|
|
50
|
+
- **Every bound endpoint is a fixed point of the renderer's own rule.** Excalidraw
|
|
51
|
+
re-derives a bound endpoint on every paint from the *adjacent* point, discarding what the
|
|
52
|
+
file said — so being on the boundary was not enough. Seventeen of twenty-nine arrows
|
|
53
|
+
drifted between file and canvas, by 8 to 105 px, while every stored endpoint sat
|
|
54
|
+
correctly on its box. Now **zero of twenty-nine**.
|
|
55
|
+
- **`layout-radial` and `layout-tree` are new.** Radial rings a hub; tree puts it on the
|
|
56
|
+
left and fans the rest out, which reads better whenever labels are wide, because a ring
|
|
57
|
+
long enough to seat its members crosses its own middle.
|
|
58
|
+
- **`chalk_describe_scene` ends with a `layout:` line** naming which of the three the graph
|
|
59
|
+
wants and what decided it, since Claude cannot see the canvas.
|
|
60
|
+
- **A resize refits its container's caption**, which was translated by the container's
|
|
61
|
+
*origin* delta — a quantity a resize does not change.
|
|
62
|
+
- **A free-standing note wraps.** 261 characters came out 2,651 px wide and 25 px tall, one
|
|
63
|
+
line. `chalk_annotate` also looks for somewhere clear instead of landing on whatever ran
|
|
64
|
+
under its anchor.
|
|
65
|
+
- **Arrow captions stop printing through each other**, and `layout-tree` sizes its column
|
|
66
|
+
gaps to the captions crossing them.
|
|
67
|
+
|
|
68
|
+
`@dagrejs/dagre` was evaluated behind a port and not adopted: benchmarked over five graph
|
|
69
|
+
shapes with edge labels given to both engines it is a tie, and 18% wider on the shape
|
|
70
|
+
closest to the reported diagram. ELK is the stronger engine and is EPL-2.0, which the
|
|
71
|
+
licence suite forbids by name.
|
|
72
|
+
|
|
73
|
+
## 1.1.0
|
|
74
|
+
|
|
75
|
+
**Diagrams that come out readable the first time.**
|
|
76
|
+
|
|
77
|
+
Drawing an eight-box architecture diagram used to take about 27 minutes and end with boxes
|
|
78
|
+
resized by hand and elements dragged out from under their frames. The same diagram is now
|
|
79
|
+
sixteen tool calls with nothing repositioned afterwards.
|
|
80
|
+
|
|
81
|
+
- **Shapes are sized to their labels.** Node has no canvas, so every shape was a flat
|
|
82
|
+
180×80 whatever it said — and a long label wrapped past the bottom of an 80 px box, where
|
|
83
|
+
the container clipped it away entirely. Advance widths for the bundled font are now
|
|
84
|
+
measured (`adr/0006`, superseding `adr/0004`).
|
|
85
|
+
- **Collisions are reported instead of photographed.** `chalk_describe_scene` ends with an
|
|
86
|
+
`overlaps:` section, and every write tool returns `overlapWarning`. Previously the only
|
|
87
|
+
way to ask "did that land badly?" was a rendered image.
|
|
88
|
+
- **Frames follow what they hold.** A frame was sized to its contents once, when it was
|
|
89
|
+
created; every later move slid the children out and left the box behind.
|
|
90
|
+
- **Icons belong to a box.** `chalk_place_icon` takes `attachTo` and `placement`, so an
|
|
91
|
+
attached icon travels with its element through every layout.
|
|
92
|
+
- **Elbow arrows actually bend**, and arrows leaving the same face of a box fan out rather
|
|
93
|
+
than stacking in one lane.
|
|
94
|
+
- **`layout-layered` leaves room for what it draws.** Edges spanning more than one rank get
|
|
95
|
+
a reserved corridor, and the gap between ranks is sized to the widest caption crossing it.
|
|
96
|
+
|
|
97
|
+
## 1.0.4
|
|
98
|
+
|
|
99
|
+
**Icons that render, and arrows that will bind to them.**
|
|
100
|
+
|
|
101
|
+
- **An icon reached the canvas as an invisible element.** The image and its file have to
|
|
102
|
+
land in the same commit; they did not, so the element was there and nothing was drawn.
|
|
103
|
+
- **An arrow would not bind to an icon.** Upstream's binding switch covers exactly
|
|
104
|
+
`rectangle | ellipse | diamond`, and Chalkbridge produces three types it does not —
|
|
105
|
+
`image`, `embeddable`, `frame`. Each now gets a rectangular stand-in during expansion, so
|
|
106
|
+
the binding is still *derived* rather than hand-written (invariant 16).
|
|
107
|
+
- A README that explains what the thing is before explaining how to build it.
|
|
108
|
+
|
|
3
109
|
## 1.0.3
|
|
4
110
|
|
|
5
111
|
**An upgrade now actually arrives, a bridge can be stopped, and it ends when you are
|
package/dist/cli.js
CHANGED