forked from NorthwoodsSoftware/GoJS
-
Notifications
You must be signed in to change notification settings - Fork 0
/
changelog.html
1888 lines (1806 loc) · 86 KB
/
changelog.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="GoJS changelog." />
<meta http-equiv="cache-control" content="no-cache">
<title>GoJS Change Log</title>
<!-- Copyright 1998-2021 by Northwoods Software Corporation. -->
<script>
(function (i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date(); a = s.createElement(o),
m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m)
})(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');
ga('create', 'UA-1506307-5', 'auto');
ga('send', 'pageview');
</script>
<link rel="stylesheet" href="assets/css/bootstrap.min.css">
<!-- custom CSS after bootstrap -->
<link href="assets/css/main.css" rel="stylesheet" type="text/css" />
<script src="release/go.js"></script>
<script src="assets/js/goDoc.js"></script>
</head>
<body onload="goDoc()">
<!-- fixed navbar -->
<nav id="fixed-nav" class="navbar navbar-inverse navbar-fixed-top">
<div class="container-fluid">
<div class="navbar-header">
<div class="navheader-container">
<div class="navheader-collapse" data-toggle="collapse" data-target="#navbar">
<a id="toplogo" class="navbar-brand" href="index.html">GoJS</a>
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
</div>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav navbar-right">
<li><a href="index.html">Home</a></li>
<li><a href="learn/index.html">Learn</a></li>
<li><a href="samples/index.html">Samples</a></li>
<li><a href="intro/index.html">Intro</a></li>
<li><a href="api/index.html">API</a></li>
<li><a href="https://www.nwoods.com/components/evalform.htm">Register</a></li>
<li><a href="download.html">Download</a></li>
<li><a href="https://forum.nwoods.com/c/gojs">Forum</a></li>
<li><a href="https://www.nwoods.com/contact.html" onclick="ga('send','event','Outbound Link','click','contact');">Contact</a></li>
<li class="buy"><a href="https://www.nwoods.com/sales/index.html" onclick="ga('send','event','Outbound Link','click','buy');">Buy</a></li>
<li class="activate"><a href="https://www.nwoods.com/app/activate.aspx?sku=gojs">Activate</a></li>
</ul>
</div>
<!--/.nav-collapse -->
</div>
</nav>
<div class="container-fluid mt70 plr15">
<h2>GoJS Change Log</h2>
<p id="ver"></p>
<script>
if (go && go.version) {
var p = document.getElementById('ver');
if (p !== null) p.textContent = ("Version: " + go.version);
}
</script>
<p>
We maintain a <a href="https://github.com/NorthwoodsSoftware/GoJS">GitHub Repository</a>,
which you can star to follow version updates.
We also notify of changes on <a href="https://twitter.com/NorthwoodsGo">Twitter</a>.
</p>
<hr>
<h2 id="2.1">GoJS 2.1</h2>
<h3>New Animation Capabilities</h3>
<p>GoJS 2.1 contains a number of new features to animate different components of your Diagram.</p>
<div style="margin-top: 30px; margin-bottom: 30px;">
<img src="assets/images/changelog/2.1nodeAnimation.gif" style="width: 150px;">
<img src="assets/images/changelog/2.1linkAnimation.gif" style="margin-left: 100px; width: 200px;">
</div>
<p>
See the <a href="intro/animation.html" target="_blank">Intro page on Animation</a>
and the <a href="samples/customAnimations.html" target="_blank">Custom Animation sample</a> for more details and examples.
</p>
<ul>
<li>
New default GoJS animation "fades up", instead of animating Node locations. Added <a>AnimationManager.initialAnimationStyle</a>
to control this behavior.
Here is an example of:
<ul>
<li>
(top) The new initial animation, the Diagram position animating upwards and Diagram opacity animating
from 0 to 1.
<li>
(middle) A custom "zoom in" animation, animating Diagram scale, which is demonstrated in
the new <a href="samples/stateChart.html" target="_blank">State Chart</a> sample,
<li>
(bottom) <a>AnimationManager.initialAnimationStyle</a> set to <a>AnimationManager.AnimateLocations</a> to
perform the GoJS 2.0 and previous style of animation.
The <a href="samples/dataVisualization.html" target="_blank">Data Visualization</a> sample uses this
option.
</ul>
<p>
<img src="assets/images/changelog/2.1initalAnimation.gif" style="margin-left: 10px; width: 250px;">
</p>
</li>
<li>
Added <code>"InitialAnimationStarting"</code> <a>DiagramEvent</a> to more easily customize initial animations.
See <a>AnimationManager.initialAnimationStyle</a> for details.
</li>
<li>
New class: <a>AnimationTrigger</a>. These describe how to automatically animate a property on a GraphObject
when it changes value.
</li>
<li>
New class: <a>Animation</a>. This class lets you declaratively setup custom animations, with options for
indefinite animations.
</li>
<li>
New <a>AnimationManager</a> options, including the ability to define custom animation effects to animate with
<a>AnimationManager,defineAnimationEffect</a>
</li>
<li>
New Animation samples and samples modified to use new Animation features:
<ul>
<li>
<a href="samples/customAnimations.html" target="_blank">Custom Animation</a> - <strong>New Sample:</strong>
Demonstrating a number of Node creation/deletion animations, linking animations, and more.
</li>
<li>
<a href="samples/treeLoadAnimation.html" target="_blank">Tree Load Animation</a> - <strong>New Sample:</strong>
recursive animation upon model load.
</li>
<li>
<a href="samples/flowchart.html" target="_blank">Flowchart</a> - In the Palette only, initial animation
is disabled in favor of a custom fade-in animation.
</li>
<li>
<a href="samples/stateChart.html" target="_blank">State Chart</a> - Initial animation is disabled in
favor of a custom zoom fade-in animation.
</li>
<li>
<a href="samples/dataVisualization.html" target="_blank">Data Visualization</a> - Nodes now move using an
<a>AnimationTrigger</a>.
</li>
<li><a href="samples/kittenMonitor.html" target="_blank">Kitten Monitor</a> - Kittens now move using an <a>AnimationTrigger</a>.</li>
<li>
<a href="samples/processFlow.html" target="_blank">Process Flow</a> - An indefinite Animation of the
Links' strokeDashArray.
</li>
<li>
<a href="samples/shopFloorMonitor.html" target="_blank">Shop Floor Monitor</a> - Link color changes now
use an <a>AnimationTrigger</a>.
</li>
</ul>
</li>
</ul>
<h3>Improved Support For Data Synchronization</h3>
<p>
GoJS 2.1 contains some new methods to ease integration of GoJS diagrams in applications that maintain their own
data, particularly React apps.
</p>
<p>
See the <a href="intro/react.html" target="_blank">Intro page on using GoJS with React</a> and
the <a href="https://github.com/NorthwoodsSoftware/gojs-react-basic" target="_blank">gojs-react example project</a> for details and examples.
Also see <a href="https://github.com/NorthwoodsSoftware/gojs-react" target="_blank">gojs-react</a>, a package
containing React Components for GoJS Diagrams, Palettes, and Overviews.
</p>
<ul>
<li>
New method: <a>Model.toIncrementalData</a>. This method outputs an <a>IncrementalData</a> object containing
changes that occurred within a <a>Transaction</a>,
similar to the existing method, <a>Model.toIncrementalJson</a>. It can be used to keep outside data
synchronized with the GoJS model.
</li>
<li>
New methods: <a>Model.mergeNodeDataArray</a> and <a>GraphLinksModel.mergeLinkDataArray</a>. These methods are
used to merge outside data changes into the GoJS model.
</li>
<li>
New method: <a>Model.cloneDeep</a>. This method can be used to make a deep copy of an object, which may be
useful to ensure GoJS doesn't share references with outside state.
It is also used within <a>Model.toIncrementalData</a> to ensure <a>IncrementalData</a>'s list of modified
objects won't contain references to the model's data objects, if the external data is required to be immutable.
</li>
</ul>
<hr />
<h4 id="2.1.34">Changes for 2.1.34</h4>
<ul>
<li>
Improved performance for off-screen Adornments and Parts.
</li>
<li>
Fixed exception regarding Workers when running in a web Worker.
</li>
</ul>
<h4 id="2.1.33">Changes for 2.1.33</h4>
<ul>
<li>
Improved AvoidsNodes routing performance for many common cases.
</li>
<li>
Improved <a>ContextMenuTool.canStart</a> to return false for double or triple context clicks.
</li>
</ul>
<h4 id="2.1.32">Changes for 2.1.32</h4>
<ul>
<li>
Fixed auto-scrolling not to do so in the directions in which <a>Diagram.allowHorizontalScroll</a> and
<a>Diagram.allowVerticalScroll</a> disallow it.
</li>
<li>
Fixed the positioning of nodes and links when an animation is stopped during a drag that operates on the same Parts.
</li>
<li>
Fixed <a>Diagram.makeSvg</a> where the SVG would not include <a>Picture.source</a> in some environments, such as headless browsers.
</li>
<li>
Fixed Diagram initialization when no Diagram DIV is specified, but setting some properties expected one (such as <a>Diagram.scrollMargin</a>).
</li>
</ul>
<h4 id="2.1.31">Changes for 2.1.31</h4>
<ul>
<li>
Fixed a regression since 2.1.30 where the library might not load in React or Angular environments, and a TypeError would be thrown.
</li>
<li>
Fixed dragging of links connected with snapped nodes when the grid cell size was not an integer,
causing the links to slowly shift over time.
</li>
<li>
Fixed rendering of background in images drawn by <a>Diagram.makeImageData</a> when the whole page has been scaled to be less than 100%.
</li>
<li>
Fixed <a>Diagram.delayInitialization</a> when calling code that prompts the Diagram to update immediately afterwards.
</li>
<li>
Fixed premature routing of links in Groups that start off collapsed (with <a>Group.isSubGraphExpanded</a> set or bound to false).
</li>
<li>
Fixed animation that might revert some routes when the initial animation was turned off.
</li>
<li>
<a>Link.computeAdjusting</a> now only returns <a>Link,End</a> during animation only when routing is AvoidsNodes.
</li>
<li>
Fixed a regression since 2.1.29 where an <a>Overview</a> would not update with a newly set <a>Overview.observed</a> Diagram
and a newly displayed HTMLDivElement until some activity happened on that observed Diagram.
</li>
</ul>
<h4 id="2.1.30">Changes for 2.1.30</h4>
<ul>
<li>
Changed the behavior of <a>GraphLinksModel</a> so that the use of a key of a non-existent node
can be resolved by adding a node with that key in a later transaction, not just in the same transaction.
</li>
<li>
Fixed routing of duplicate orthogonal links between ports with "...Side" Spots to avoid producing little loops
when the ports are close to each other.
</li>
<li>
Fixed <a>ContextMenuTool</a> to automatically stop running if the newly shown context menu is
a not-<a>GraphObject.visible</a> <a>Adornment</a>.
</li>
<li>
Fixed exception on expanding a <a>Group</a> whose member nodes had partly disconnected links.
</li>
</ul>
<h4 id="2.1.29">Changes for 2.1.29</h4>
<ul>
<li>
Overviews now wait for the Diagram to draw first before attempting to draw.
This solves timing issues with <a>Diagram.delayInitialization</a>.
</li>
<li>
Fixed delays in updating the <a>Link.geometry</a> after changing properties such as <a>Link.corner</a>.
</li>
<li>
Fixed setting <a>Diagram.scrollMargin</a> during Diagram initialization, which would interrupt the initial transaction.
</li>
</ul>
<h4 id="2.1.28">Changes for 2.1.28</h4>
<ul>
<li>
Added the <a>Diagram.ensureBounds</a> method.
Like <a>Part.ensureBounds</a>, this is useful when you need the document bounds computed immediately.
It is rare that you will need to call either method, because the normal updating process will
perform the computations for you as part of a transaction, asynchronously.
</li>
<li>
Fixed some parsing issues when using <a>Geometry.parse</a> or <a>Shape.geometryString</a> with SVG arcs.
</li>
<li>
Fixed the <a>Picture.source</a> setter from failing in non-DOM environments.
</li>
<li>
Fix for DOM-less environments that do not have <code>setImmediate</code> defined.
</li>
<li>
Fix for Link routing when connecting to the edge of an arc segment.
</li>
</ul>
<h4 id="2.1.27">Changes for 2.1.27</h4>
<ul>
<li>
Fixed the routing of links connected with nodes that are members of expanded groups inside collapsed groups.
</li>
<li>
Fixed some Shapes in Link Selection Adornments inheriting their <code>strokeWidth</code> from the Link.
Only the main path Shapes of Link "Selection" Adornments with a <code>strokeWidth</code> of 0 will inherit
the <code>strokeWidth</code> from the adorned <a>Link.path</a> Shape.
</li>
<li>
Fixed changing <a>Picture.source</a> back to an empty string not to throw an unnecessary error.
</li>
</ul>
<h4 id="2.1.26">Changes for 2.1.26</h4>
<ul>
<li>
Added a <code>ResizeObserver</code> to automatically detect changes in the size of the
HTMLDivElement (the <a>Diagram.div</a>) in recent browsers.
You will still need to call <a>Diagram.requestUpdate</a> when running in older browsers or in Internet Explorer.
</li>
<li>
Added the <a>ResizingTool.dragsMembers</a> property, for controlling whether resizing a
<a>Group</a> may move its <a>Group.memberParts</a> if it has no <a>Placeholder</a>.
</li>
<li>
Fixed regression since 2.1.24 causing some diagrams not to be drawn even after calling <a>Diagram.requestUpdate</a>.
</li>
<li>
Fixed some cases of finding the nearest intersection point of Bezier curves with a straight finite line.
</li>
</ul>
<h4 id="2.1.25">Changes for 2.1.25</h4>
<ul>
<li>
Added the <a href="samples/connectionBoxNode.html">Connection Box Node</a> sample,
showing nodes that allow links between ports within a node.
</li>
<li>
In order to avoid possible errors caused by loading the GoJS library more than once,
an Error is thrown when a second load is detected, even if the version number is the same.
This helps avoid problems where there are multiple definitions for each of the classes, causing errors such as:
<code>Error: Unknown type of binding target: Node#241</code>, where the object is a GoJS <a>Node</a>,
but not the same GoJS Node class as the code expects.
It also helps avoid situations when both the release library and the debug library are loaded.
</li>
<li>
Fixed raising an extraneous <a>Diagram.mouseOver</a> event during initialization.
</li>
<li>
Fixed a regression since 2.1.0 that would prevent a Diagram or Overview from re-scaling or aligning when its DIV changed size.
</li>
<li>
Fixed invalidating routes of external links when nested groups change their visibility in ways
other than expanding trees or subgraphs.
</li>
<li>
Fixed <a>Model.mergeNodeDataArray</a>, <a>GraphLinksModel.mergeLinkDataArray</a>, and <a>Model.applyIncrementalJson</a>
to set known properties, eg. <a>GraphLinksModel.nodeGroupKeyProperty</a>, even when the property is not present on the new data.
</li>
</ul>
<h4 id="2.1.24">Changes for 2.1.24</h4>
<ul>
<li>
Added the <a href="samples/multiColorLinks.html">Multi-color Links</a> sample,
showing links whose paths can be stroked with multiple colors specified in an Array
as the value of the link's <code>data.colors</code>.
</li>
<li>
Associating a <a>Diagram</a> instance with an HTMLDivElement now causes that Div element to get two new properties:
"goDiagram" to refer to that Diagram instance, and "go" to refer to the "go" namespace if it exists.
This makes it easier to examine or set Diagram properties or to call Diagram methods or methods on GraphObjects
in existing apps without access to the app's source code.
</li>
<li>
Fixed using subclasses of <a>GraphLinksModel</a> or <a>TreeModel</a>.
</li>
<li>
Fixed <a>AnimationTrigger</a>s incorrectly starting when <a>AnimationManager.isEnabled</a> is set to <code>false</code>.
</li>
<li>
Fixed extraneous Transaction <a>ChangedEvent</a>s when modifying a group invalidated a layout.
</li>
</ul>
<h4 id="2.1.23">Changes for 2.1.23</h4>
<ul>
<li>
Added the <a href="extensions/ArrangingLayout.js" target="_blank">Arranging Layout</a> extension,
demonstrated in the <a href="extensions/Arranging.html" target="_blank">Arranging</a> sample.
This layout is basically a layout of layouts, so that you can have a <a>CircularLayout</a> of <a>CircularLayout</a>s,
as shown in the sample, or a <a>PackedLayout</a> of <a>TableLayout</a>s, or whatever.
The <a>ArrangingLayout</a> also has a third layout that is used to position nodes not arranged by the main layout.
This is normally a <a>GridLayout</a> that only positions singleton (disconnected) nodes.
</li>
<li>
Improved the <a>ParallelLayout</a> extension and rewrote the
<a href="samples/flowgrammer.html" target="_blank">Flowgrammer</a> sample to use that <b>ParallelLayout</b>.
</li>
<li>
Fixed <a>UndoManager</a> sometimes adding a duplicate "Layout" transaction to the <a>UndoManager.history</a>.
</li>
</ul>
<h4 id="2.1.22">Changes for 2.1.22</h4>
<ul>
<li>
Added the <a href="extensions/RescalingTool.js" target="_blank">Rescaling Tool</a> extension,
demonstrated in the <a href="extensions/Rescaling.html" target="_blank">Rescaling</a> sample.
This tool modifies the <a>GraphObject.scale</a> property,
unlike the <a>ResizingTool</a> which modifies the <a>GraphObject.desiredSize</a> property.
</li>
<li>
Improved performance of <a>Model.mergeNodeDataArray</a>, <a>GraphLinksModel.mergeLinkDataArray</a>, and <a>Model.toIncrementalData</a>.
The merge methods require that references are not shared between the the GoJS model and the external data provided and will now make deep copies
of any new data objects before adding them to the model. This means <a>Model.cloneDeep</a> doesn't need to be called on the arrays passed in,
as the merge methods will make the necessary calls.
</li>
<li>
Fixed `go-module.js` to work when treated as an ES6 module in Node.js.
At the same time we have added `go.mjs` and `go-debug.mjs` as copies of `go-module.js` and `go-debug-module.js`.
For compatibility the kit will contain both sets of files.
</li>
<li>
Fixed automatically performing layouts of outer groups after inner nested groups changed size.
</li>
</ul>
<h4 id="2.1.21">Changes for 2.1.21</h4>
<ul>
<li>
Added the <a href="extensions/SwimLaneLayout.js" target="_blank">Swim Lane Layout</a> extension,
demonstrated in the <a href="extensions/SwimLaneLayout.html" target="_blank">Swim Lane Layout</a> sample.
This layout is a version of <a>LayeredDigraphLayout</a> that positions each node in the lane in which it is supposed to be.
</li>
<li>
Fixed parts that have their location or position set when not in the Diagram.
This issue affected temporary parts, such as Adornments created by Tools that were repeatedly added and removed from the Diagram.
</li>
<li>
Fixed ordering of links on a <a>Spot,TopSide</a> or <a>Spot,BottomSide</a> port when linking with a node to the right.
</li>
<li>
Fixed some scaling animations when <a>Diagram.autoScale</a> is set.
</li>
</ul>
<h4 id="2.1.20">Changes for 2.1.20</h4>
<ul>
<li>
Fixed <a>GraphLinksModel.setLabelKeysForLinkData</a> sometimes disassociating a link's label nodes that existed in both the old and new array.
</li>
<li>
Fixed the recording of model changes bound to a Part's <code>position</code> or <code>location</code>, where they may not have been recorded
in the UndoManager when modifying the <code>position</code>, <code>location</code>, or <code>desiredSize</code>.
This also fixes a regression from 2.1.14.
</li>
<li>
Fixed <a>LinearGradient</a> painting when used as a <a>Shape.stroke</a>.
This drawing issue was most apparent when the Shape's geometry was one-dimensional.
</li>
<li>
Fixed warning messages in Chrome about passive touch event listeners.
</li>
<li>
Fixed JumpOver and AvoidsNodes issues where ongoing animations might stop them from updating.
</li>
</ul>
<h4 id="2.1.19">Changes for 2.1.19</h4>
<ul>
<li>
Fixed changing <a>Placeholder.padding</a> to remeasure its <a>Group</a> or <a>Adornment</a>.
</li>
<li>
Fixed <a>Diagram.initialPosition</a> and <a>Diagram.initialScale</a> sometimes not showing scrollbars on initialization.
</li>
<li>
Fixed not recording a transaction that was empty until a "CommittingTransaction" Transaction-type <a>ChangedEvent</a>
caused some <a>ChangedEvent</a>s to made, a regression from 2.1.16.
</li>
</ul>
<h4 id="2.1.18">Changes for 2.1.18</h4>
<ul>
<li>
Added the <a href="samples/belts.html">Belts and Rollers</a> sample,
showing belts or chains wending around rollers or gears.
</li>
<li>
Fixed finding a node by key after undoing a call to <a>Model.setKeyForNodeData</a>.
</li>
<li>
Fixed Diagram initialization without DIVs or with delayed initialization,
where setting some properties like <a>Diagram.scaleComputation</a> would cause measuring errors.
</li>
<li>
Improved handling of numeric large arc flag values when creating SVG arc <a>PathSegment</a>s via <a>PathSegment.constructor</a>.
</li>
<li>
Fixed the TypeScript declaration for <a>GraphObject,make</a> to handle <a>AnimationTrigger</a>s.
</li>
</ul>
<h4 id="2.1.17">Changes for 2.1.17</h4>
<ul>
<li>
Added the <a href="samples/radialAdornment.html">Radial Adornment Buttons</a> sample,
showing a selection <a>Adornment</a>, only on one node, that is like a context menu
with buttons arranged in a circle around the selected node.
</li>
<li>
Added the <a href="samples/donutCharts.html">Donut Charts</a> sample,
showing a simple circular bar chart in each node.
</li>
<li>
Fixed exporting the <a>Picture.reloadSource</a> and <a>Picture.redraw</a> methods.
</li>
<li>
Fixed the <a>LinkingBaseTool.temporaryFromPort</a> and <a>LinkingBaseTool.temporaryToPort</a> property setters
to replace the port of the corresponding temporary node. This allows customization of a <a>LinkingTool</a>
by setting either or both of those two properties.
</li>
<li>
Fixed <a>Diagram.makeImage</a> with a Picture SVG data URI source, in the same manner as in 2.1.16.
</li>
<li>
Fixed undo of a <a>Shape.geometry</a> setting, after its <a>GraphObject.desiredSize</a> had been set.
This particular sequence of events was discovered in the use of the <a>GeometryReshapingTool</a> extension.
</li>
</ul>
<h4 id="2.1.16">Changes for 2.1.16</h4>
<ul>
<li>
Added the <a href="samples/animatedFocus.html">Animated Focus</a> sample,
which demonstrates how to scroll to a node and really make it obvious where the node is
and what it looks like.
</li>
<li>
Added the <a href="samples/addToPalette.html">Add To Palette</a> sample,
which allows the user to add items from the palette by selecting a node,
customizing it, and then executing a command to copy it to the palette's model.
The user can also remove selected items from the palette via a command,
even though <a>Palette.isReadOnly</a> is true.
</li>
<li>
Fixed <a>Diagram.makeImage</a> when a Picture has an SVG source that has a different size than its viewbox.
In some browsers the SVGs had been drawn with the incorrect aspect ratio.
</li>
<li>
Fixed <a>Diagram.delayInitialization</a> incorrectly resetting the <a>Diagram.position</a> when animation is enabled.
</li>
</ul>
<h4 id="2.1.15">Changes for 2.1.15</h4>
<ul>
<li>
Added the <a href="samples/singlePage.html">Single Page Diagram</a> sample,
demonstrating how to show a sheet of paper behind the diagram and how to limit
dragging and resizing to stay within the margins of the page.
</li>
<li>
Fixed label TextBlocks in <a href="intro/graduatedPanels.html">Graduated Panels</a> not respecting their assigned <a>GraphObject.angle</a>.
The angle will now be used when the label's <a>GraphObject.segmentOrientation</a> is <a>Link.None</a>, <a>Link.OrientAlong</a>,
or <a>Link.OrientUpright</a>.
</li>
<li>
Fixed expand and collapse animations, where collapsed objects would temporarily receive NaN locations.
</li>
</ul>
<h4 id="2.1.14">Changes for 2.1.14</h4>
<ul>
<li>
Added the <a href="samples/blockEditor.html">Simple Block Editor</a> sample,
demonstrating how to let users easily build block diagrams.
</li>
<li>
Changing <a>Link.fromShortLength</a> or <a>Link.toShortLength</a> no longer invalidates the link's route.
</li>
<li>
Improved the corner curves of orthogonal links when needing to make consecutive turns within double the corner radius.
</li>
<li>
Fixed an incorrect optimization introduced in 2.1.13 updating initial scrollbars when animating.
</li>
<li>
Fixed undo and redo of <a>ResizingTool</a> operations when the <a>Part.locationSpot</a> is not TopLeft.
</li>
</ul>
<h4 id="2.1.13">Changes for 2.1.13</h4>
<ul>
<li>
Fixed the cursor shown during a drag in an <a>Overview</a> if some external HTML element changed the cursor.
</li>
<li>
Fixed <a>Diagram.makeSvg</a> when rendering a fill or a stroke that is translucent not to make the opacity too small.
</li>
<li>
Added wait spinners to three of the "Virtualized" samples:
<a href="samples/virtualized.html" target="_blank">Virtualized</a>,
<a href="samples/virtualizedForceLayout.html" target="_blank">VirtualizedForceDirectedLayout</a>,
<a href="samples/virtualizedTreeLayout.html" target="_blank">VirtualizedTreeLayout</a>.
These use an image rotated using CSS animation that is positioned in front of the Diagram.
</li>
</ul>
<h4 id="2.1.12">Changes for 2.1.12</h4>
<ul>
<li>
Added the <a href="samples/controlGauges.html">Meter and Gauge Controls</a> sample,
demonstrating several different kinds of meter and gauge instruments whose values
can also be modified by the user by dragging their indicators.
</li>
<li>
Added the <a href="samples/productionEditor.html">Production process editor</a> sample,
which edits diagrams that can be shown by the
<a href="samples/productionProcess.html">Production process</a> sample.
</li>
<li>
Added the <a>SnapLinkReshapingTool.avoidsNodes</a> property in the extensions directories.
</li>
</ul>
<h4 id="2.1.11">Changes for 2.1.11</h4>
<ul>
<li>
Fixed "Grid" Panels to ignore the order of shapes in the panel when considering whether a larger <a>Shape.interval</a>
shape should suppress a smaller interval shape, or should be suppressed by a larger interval shape.
Changed "Grid" Panels to allow multiple shapes with the same <a>Shape.interval</a> to be drawn in the same orientation
(horizontal or vertical).
</li>
<li>
Fixed documentation by undocumenting the useless <a>AnimationManager.animationReasons</a> property that was accidentally documented.
See the updated documentation for <a>AnimationManager.canStart</a>.
</li>
<li>
Fixed <a>Brush.isDark</a> sometimes using an incorrect ordering of <a>Brush.colorStops</a>
when determining darkness near the middle of a Brush.
</li>
</ul>
<h4 id="2.1.10">Changes for 2.1.10</h4>
<ul>
<li>
Added <a>DrawCommandHandler.pullToFront</a> and <a>DrawCommandHandler.pushToBack</a> commands in the extensions directories.
</li>
</ul>
<h4 id="2.1.9">Changes for 2.1.9</h4>
<ul>
<li>
Fixed breadth computations for some cases of <a>TreeLayout.arrangement</a> of separate trees
when <a>TreeLayout.compaction</a> is <code>go.TreeLayout.CompactionNone</code>.
</li>
<li>
Fixed type declarations of <a>Binding.converter</a> and <a>Binding.backConverter</a>
to return <code>any</code> instead of <code>void</code>.
</li>
</ul>
<h4 id="2.1.8">Changes for 2.1.8</h4>
<ul>
<li>
Added the <a href="samples/gameOfLife.html">Game of Life cellular automation</a> sample.
</li>
<li>
You can improve the performance of an <a>Overview</a> that is observing a large diagram with a visible <a>Diagram.grid</a>
by setting <a>Overview.drawsTemporaryLayers</a> to false.
</li>
<li>
Improved the behavior from 2.1.7 when trying to open text editors in multiple diagrams.
A new text editor can be started only if the previous one was able to be accepted.
If <a>TextBlock.textValidation</a> or <a>TextEditingTool.textValidation</a> fails,
focus remains in that older editor and a new one cannot be started.
</li>
<li>
Fixed exception during copy-dragging when some parts are not <a>Part.copyable</a>.
</li>
</ul>
<h4 id="2.1.7">Changes for 2.1.7</h4>
<ul>
<li>
Added the <a href="extensions/PackedHierarchy.html">Packed Hierarchy</a> sample,
which demonstrates a custom <a>PackedLayout</a> for nested circular groups.
</li>
<li>
Added an optional argument to <a>Diagram.clearSelection</a>, and allowed that method to be overridden.
</li>
<li>
The <a>TextEditingTool</a> now only allows one active text editor globally, instead of one per Diagram.
This avoids some focus problems in various browsers.
</li>
</ul>
<h4 id="2.1.6">Changes for 2.1.6</h4>
<ul>
<li>
The <code>release/go-module.js</code> file now exports every class, so that you can import only specific classes, instead of <code>go</code>.
For example: <code>import { Diagram, Node, Link, Point, Shape, TextBlock } from ...</code>.
</li>
<li>
Added a sample demonstrating generating a PDF file for a Diagram, in the <code>projects/pdf</code> subdirectory.
The sample is at <a href="projects/pdf/minimalPDF.html" target="_blank">minimalPDF</a>.
</li>
<li>
Fixed <a>AnimationTrigger</a>s erroneously starting when dragging and dropping Parts from another Diagram or Palette.
</li>
<li>
Fixed <a>LinkingTool</a> not deselecting other parts when a new link is created.
</li>
</ul>
<h4 id="2.1.5">Changes for 2.1.5</h4>
<ul>
<li>
Added <a href="extensionsTS/VirtualizedPacked.html">VirtualizedPacked</a> sample,
which demonstrates a custom layout for large graphs of nested groups,
defined in <a href="extensionsTS/VirtualizedPackedLayout.ts">VirtualizedPackedLayout.ts</a>.
(Source is TS only)
</li>
<li>
Fixed setting a node key reference in either a node or link via <a>GraphLinksModel.setGroupKeyForNodeData</a>,
<a>GraphLinksModel.setFromKeyForLinkData</a>, or <a>GraphLinksModel.setToKeyForLinkData</a> where it could fail to resolve
if the node did not yet exist. This issue did not exist during typical model loading.
</li>
<li>
Fixed a regression since 2.1.1 with <a>Diagram.clear</a> failing to clear internal Parts lists (like <a>Diagram.nodes</a>).
</li>
</ul>
<h4 id="2.1.4">Changes for 2.1.4</h4>
<ul>
<li>
Added <a>Link.computeAdjusting</a> to conditionally change the value of <a>Link.adjusting</a> used. As a new default,
links will use the adjusting value <a>Link,End</a> during animation. <a>Link.computeAdjusting</a> can be overridden to change this behavior.
</li>
<li>
Added <a>Geometry.getPointAlongPath</a>, <a>Geometry.getAngleAlongPath</a>, and <a>Geometry.getFractionForPoint</a>.
These methods can be used to find a point or angle for a given fractional distance along a Geometry's path,
or to find the fractional distance along the Geometry's path given a nearby point.
</li>
<li>
Setting <a>GraphObject.segmentIndex</a> to NaN, which was previously an error,
will now treat the entire link path as the segment for the purpose of <a>GraphObject.segmentFraction</a>.
This allows for using fractional distances along the entire link rather than just one segment.
</li>
<li>
Fixed object picking during Diagram's InitialLayoutCompleted DiagramEvent.
</li>
<li>
Fixed GoCloudStorage where a null defaultModel would fail.
</li>
<li>
Fixed <a>Panel.graduatedValueForPoint</a> in cases where the main shape was a diagonal line
and the provided point didn't fall on the line.
</li>
</ul>
<h4 id="2.1.3">Changes for 2.1.3</h4>
<ul>
<li>
Fixed a regression from 2.0.0 with AvoidsNodes links improperly re-routing when using the DraggingTool.
</li>
<li>
Fixed a undo (redo) bug with <a>AnimationTrigger</a>s that used location or position on Parts.
</li>
<li>
Improved routing of duplicate links that have <a>Link.adjusting</a> set to a value other than None and have
more than the standard number of points in their route.
</li>
</ul>
<h4 id="2.1.2">Changes for 2.1.2</h4>
<ul>
<li>
Fixed a regression in 2.1.1 with the timing of <code>InitialAnimationStarting</code> that would prevent custom
initial animations.
</li>
<li>
CTRL + Mouse-wheel will still stop the event from bubbling,
even if <a>CommandHandler.canIncreaseZoom</a> or <a>CommandHandler.canDecreaseZoom</a> return false.
These are potentially false if a <a>Diagram.minScale</a> or <a>Diagram.maxScale</a> are set.
This change stops the entire page from accidentally zooming during a zoom-wheel operation.
</li>
<li>
Fixed a measuring bug with Link Geometry when the Link is smaller than the <a>Link.toShortLength</a> or <a>Link.fromShortLength</a>.
</li>
</ul>
<h4 id="2.1.1">Changes for 2.1.1</h4>
<ul>
<li>
Fixed updating of <a>Adornment</a>s when there are <a>Binding</a>s from <a>Model.modelData</a>
and that shared object has been modified by calling <a>Model.set</a>.
</li>
<li>
Improved performance when replacing <a>Diagram.model</a> when cleaning up the old model,
which had infrequently resulted in obscure warnings in debug mode about <a>Node.isTreeLeaf</a>.
</li>
<li>
Fixes for loading Models with serialized EnumValues.
</li>
<li>
Performance improvements for concurrent animations.
</li>
<li>
Fixes for consistency of animation state.
This includes modifying when <code>AnimationStarting</code> and <code>InitialAnimationStarting</code> are
called,
and fixes when default animations are stopped and another is immediately started, such as when loading a new
model in the middle of animation.
</li>
<li>
Fixed <a>Model.fromJson</a> loading models with serialized EnumValues.
</li>
<li>
Improved showing non-default cursors when dragging between diagrams.
</li>
<li>
Fixed the operation of <a>Diagram.handlesDragDropForTopLevelParts</a> when dragging on the elements of a <a>Group</a>.
</li>
<li>
Fixed <a>Diagram.scrollHorizontalLineChange</a> and <a>Diagram.scrollVerticalLineChange</a> would
not affect scrolling size in some browsers.
</li>
<li>
Fixed AvoidsNodes Links routing in nested groups.
</li>
</ul>
<h4 id="2.1.0">Other Changes for 2.1.0:</h4>
<p>
See the major changes <a href="#2.1">above</a>.
</p>
<ul>
<li>
Added <a>DoubleTreeLayout</a> to the extensions and extensionsTS directories. This is now used by the
<a href="samples/doubleTree.html">Double Tree</a> sample.
</li>
<li>
Updated the sequencing of "ChangingSelection" and "ChangedSelection" <a>DiagramEvent</a>s to be outside of
transactions for commands and tools.
Exceptions include "ChangingSelection" being called during "Drag" and "Linking" operations when drag-copying or
inserting a link.
With "ChangedSelection" occuring after a transaction completes, any changes will be complete and can be used in
the listener.
</li>
<li>
<a>CommandHandler.zoomToFit</a> now animates by default.
</li>
<li>
Improved the <a>ContextMenuTool.defaultTouchContextMenu</a>'s "Paste" command to use the <a>ContextMenuTool.mouseDownPoint</a>
rather than the <a>Diagram.lastInput</a>'s <a>InputEvent.documentPoint</a>.
</li>
<li>
Added new property, <a>Diagram.opacity</a>. This may be useful for fade-in/out animations, or visual indication
of a disabled Diagram.
</li>
<li>
Added new method, <a>Diagram.findLinkForKey</a>, which will look for a link corresponding to a model's link
data object's unique key.
This will only return a link when using a <a>GraphLinksModel</a> with <a>GraphLinksModel.linkKeyProperty</a>
set to a non-empty string.
</li>
<li>
<a>Model.applyIncrementalJson</a> now throws an error if model properties (eg. nodeKeyProperty) included in the
JSON don't match the existing model.
This check only includes properties included in the output from <a>Model.toIncrementalJson</a>.
</li>
<li>
Added new methods, <a>Picture.reloadSource</a>, which reloads a Picture source in case the file on the server has
changed,
and <a>Picture.redraw</a> which redraws the picture, and can be useful to update the Picture if the source is
backed by an HTML Canvas or HTML Video Element.
</li>
<li>
Added new sample: <a href="samples/svgDataUrl.html" target="_blank">SVG Data URL</a> - Export SVG with Base64 hrefs instead
of the <a>Picture.source</a> URL.
</li>
</ul>
<hr />
<h2 id="2.0">GoJS 2.0</h2>
<p>
For 2.0, GoJS has been rewritten in TypeScript, with improvements to stability and documentation.
All customers (with or without source code license) can take advantage of the TypeScript definitions <code>.d.ts</code>
file, which is much more comprehensive in 2.0.
</p>
<p>
A source license will now include TypeScript source files as well as JavaScript sources,
and examples of how to build the library into your project with Webpack or Browserify,
should you wish to. This will allow you to remove unused modules from the source code,
such as Layouts, Models, and Tools that you are not using. Note that unless you have strong minification,
you may not see size improvements over the pre-built <code>go.js</code> library, which is highly optimized.
</p>
<p>
The size of the <code>go.js</code> library has been slightly reduced (both uncompressed and gzipped), from the 1.8 versions.
</p>
<p>
The main library has been reduced by removing many of the uncommon figures.
These are now an extension. (<a href="extensions/Figures.js" target="_blank">Figures.js</a>)
</p>
<p>
GoJS can now be run DOM-less, in Node.
</p>
<p>
We have added the ability to create your own Panels, with the new PanelLayout class.
See an example <a href="samples/panelLayout.html" target="_blank">here</a>.
</p>
<hr />
<h4 id="2.0.18">Changes for 2.0.18</h4>
<ul>
<li>
Shapes with a shadow and a <a>Shape.fill</a> value of <code>"transparent"</code> now apply the shadow to the <a>Shape.stroke</a>,
instead of the invisible <a>Shape.fill</a>.
</li>
<li>
Minor scrollbar fixes.
</li>
<li>
Fixed "PanelExpanderButton" click event handler to set <a>InputEvent.handled</a> to true, so that other click
event handlers in containing panels will not run.
</li>
<li>
Improved the <a>Map</a> constructor and <a>Map.addAll</a> method to accept an instance of <a>Map</a>.
</li>
</ul>
<h4 id="2.0.17">Changes for 2.0.17</h4>
<ul>
<li>
Fixed scrollbars when setting invisible/hidden Diagram DIVs to visible/unhidden while modifying
their size.
</li>
<li>
Improved orthogonal link segment overlap avoidance in <a>LayeredDigraphLayout</a>.
</li>
<li>
Optimizations for Puppeteer.
</li>
</ul>
<h4 id="2.0.16">Changes for 2.0.16</h4>
<ul>
<li>
IE bugfix when dragging from a Diagram or Palette and dropping on a non-Diagram page element.
</li>
<li>
Fixed the <a>DraggingTool</a>, when moving or copying between diagrams, to update the <a>Diagram.currentCursor</a>
to be the <a>Diagram.defaultCursor</a>, not to "default".
</li>
<li>
Fixed a bug when setting <a>AnimationManager.isInitial</a> to <code>false</code> when there are no Parts in the
initial model.
</li>
</ul>
<h4 id="2.0.15">Changes for 2.0.15</h4>
<ul>