@eclipse-scout/chart 11.0.39 → 22.0.0-beta.1

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.
Files changed (30) hide show
  1. package/README.md +2 -2
  2. package/dist/eclipse-scout-chart-theme-dark.css +3806 -1606
  3. package/dist/eclipse-scout-chart-theme-dark.css.map +1 -1
  4. package/dist/eclipse-scout-chart-theme.css +3689 -1489
  5. package/dist/eclipse-scout-chart-theme.css.map +1 -1
  6. package/dist/eclipse-scout-chart.js +23316 -6685
  7. package/dist/eclipse-scout-chart.js.map +1 -1
  8. package/dist/file-list +0 -6
  9. package/package.json +21 -21
  10. package/src/chart/AbstractChartRenderer.js +7 -1
  11. package/src/chart/AbstractSvgChartRenderer.js +3 -3
  12. package/src/chart/Chart.js +40 -9
  13. package/src/chart/Chart.less +121 -78
  14. package/src/chart/ChartJsRenderer.js +1092 -580
  15. package/src/chart/FulfillmentChartRenderer.js +7 -5
  16. package/src/chart/SalesfunnelChartRenderer.js +16 -15
  17. package/src/chart/SpeedoChartRenderer.js +11 -9
  18. package/src/chart/VennAsync3Calculator.js +2 -9
  19. package/src/chart/VennChartRenderer.js +6 -17
  20. package/src/style/colors-dark.less +49 -11
  21. package/src/style/colors.less +74 -56
  22. package/src/table/controls/ChartTableControl.js +103 -156
  23. package/src/table/controls/ChartTableControl.less +177 -112
  24. package/src/table/controls/ChartTableControlLayout.js +4 -1
  25. package/dist/eclipse-scout-chart-4f219da36ee28808d3bf.min.js +0 -2
  26. package/dist/eclipse-scout-chart-4f219da36ee28808d3bf.min.js.map +0 -1
  27. package/dist/eclipse-scout-chart-theme-dark-e356c56e246c4f8f5ff3.min.css +0 -1
  28. package/dist/eclipse-scout-chart-theme-e85ee1f9c7c3e6d5af5d.min.css +0 -1
  29. package/dist/texts.json +0 -64
  30. package/src/chart/ChartJsTooltipDelay.js +0 -127
package/dist/file-list CHANGED
@@ -1,12 +1,6 @@
1
- eclipse-scout-chart-4f219da36ee28808d3bf.min.js
2
- eclipse-scout-chart-4f219da36ee28808d3bf.min.js.map
3
- eclipse-scout-chart-theme-dark-e356c56e246c4f8f5ff3.min.css
4
1
  eclipse-scout-chart-theme-dark.css
5
2
  eclipse-scout-chart-theme-dark.css.map
6
- eclipse-scout-chart-theme-e85ee1f9c7c3e6d5af5d.min.css
7
3
  eclipse-scout-chart-theme.css
8
4
  eclipse-scout-chart-theme.css.map
9
5
  eclipse-scout-chart.js
10
6
  eclipse-scout-chart.js.map
11
- file-list
12
- texts.json
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eclipse-scout/chart",
3
- "version": "11.0.39",
3
+ "version": "22.0.0-beta.1",
4
4
  "description": "Eclipse Scout chart",
5
5
  "author": "BSI Business Systems Integration AG",
6
6
  "homepage": "https://www.eclipse.org/scout",
@@ -10,9 +10,9 @@
10
10
  },
11
11
  "license": "EPL-1.0",
12
12
  "engines": {
13
- "node": ">=12.1.0",
14
- "npm": ">=6.9.0",
15
- "pnpm": ">=5"
13
+ "node": ">=16.13.0",
14
+ "npm": ">=8.1.0",
15
+ "pnpm": ">=6.22.2"
16
16
  },
17
17
  "keywords": [
18
18
  "scout",
@@ -24,6 +24,18 @@
24
24
  "dist",
25
25
  "src"
26
26
  ],
27
+ "devDependencies": {
28
+ "@eclipse-scout/cli": "22.0.0-beta.1",
29
+ "@eclipse-scout/releng": "^22.0.0",
30
+ "jasmine-core": "3.10.1",
31
+ "karma": "6.3.9"
32
+ },
33
+ "dependencies": {
34
+ "@eclipse-scout/core": "22.0.0-beta.1",
35
+ "jquery": "3.6.0",
36
+ "chart.js": "3.7.0",
37
+ "chartjs-plugin-datalabels": "2.0.0"
38
+ },
27
39
  "scripts": {
28
40
  "testserver:start": "scout-scripts test-server:start",
29
41
  "testserver:stop": "scout-scripts test-server:stop",
@@ -32,22 +44,10 @@
32
44
  "build:prod": "scout-scripts build:prod",
33
45
  "build:all": "scout-scripts build:dev && scout-scripts build:prod",
34
46
  "build:dev:watch": "scout-scripts build:dev:watch",
35
- "snapshot-cleanup": "releng-scripts snapshot-cleanup",
36
- "snapshot-predependency": "releng-scripts snapshot-install-dependency",
37
- "snapshot-postdependency": "releng-scripts snapshot-publish-dependency",
38
- "release-predependency": "releng-scripts release-install-dependency",
39
- "release-postdependency": "releng-scripts release-publish-dependency"
40
- },
41
- "devDependencies": {
42
- "@eclipse-scout/cli": "11.0.39",
43
- "@eclipse-scout/releng": "^10.0.0",
44
- "jasmine-core": "3.6.0",
45
- "karma": "5.2.2"
46
- },
47
- "dependencies": {
48
- "jquery": "3.5.1",
49
- "@eclipse-scout/core": "11.0.39",
50
- "chart.js": "2.9.4",
51
- "chartjs-plugin-datalabels": "0.7.0"
47
+ "cleanup:snapshots": "releng-scripts cleanup:snapshots",
48
+ "version:snapshot:dependencies": "releng-scripts version:snapshot:dependencies",
49
+ "version:snapshot": "releng-scripts version:snapshot",
50
+ "version:release:dependencies": "releng-scripts version:release:dependencies",
51
+ "version:release": "releng-scripts version:release"
52
52
  }
53
53
  }
@@ -8,7 +8,6 @@
8
8
  * Contributors:
9
9
  * BSI Business Systems Integration AG - initial API and implementation
10
10
  */
11
- import {Chart} from '../index';
12
11
 
13
12
  export default class AbstractChartRenderer {
14
13
 
@@ -139,6 +138,13 @@ export default class AbstractChartRenderer {
139
138
  return false;
140
139
  }
141
140
 
141
+ refresh() {
142
+ if (this.rendered) {
143
+ this.remove(false);
144
+ }
145
+ this.render(false);
146
+ }
147
+
142
148
  /**
143
149
  * @param requestAnimation
144
150
  * Whether animations should be used while removing the chart. Note that his
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (c) 2010-2020 BSI Business Systems Integration AG.
2
+ * Copyright (c) 2010-2021 BSI Business Systems Integration AG.
3
3
  * All rights reserved. This program and the accompanying materials
4
4
  * are made available under the terms of the Eclipse Public License v1.0
5
5
  * which accompanies this distribution, and is available at
@@ -10,7 +10,7 @@
10
10
  */
11
11
  import {ObjectFactory, strings, styles} from '@eclipse-scout/core';
12
12
  import $ from 'jquery';
13
- import {Chart, AbstractChartRenderer} from '../index';
13
+ import {AbstractChartRenderer, Chart} from '../index';
14
14
 
15
15
  export default class AbstractSvgChartRenderer extends AbstractChartRenderer {
16
16
 
@@ -243,7 +243,7 @@ export default class AbstractSvgChartRenderer extends AbstractChartRenderer {
243
243
  removeFunc: () => {
244
244
  }
245
245
  };
246
- if (!this.chart.config.options.tooltips.enabled) {
246
+ if (!this.chart.config.options.plugins.tooltip.enabled) {
247
247
  return legend;
248
248
  }
249
249
  let padding = 5,
@@ -138,17 +138,17 @@ export default class Chart extends Widget {
138
138
  animation: {
139
139
  duration: Chart.DEFAULT_ANIMATION_DURATION
140
140
  },
141
- tooltips: {
142
- enabled: true
143
- },
144
- legend: {
145
- display: true,
146
- clickable: false,
147
- position: Chart.Position.RIGHT
148
- },
149
141
  plugins: {
150
142
  datalabels: {
151
143
  display: false
144
+ },
145
+ tooltip: {
146
+ enabled: true
147
+ },
148
+ legend: {
149
+ display: true,
150
+ clickable: false,
151
+ position: Chart.Position.RIGHT
152
152
  }
153
153
  }
154
154
  }
@@ -161,7 +161,35 @@ export default class Chart extends Widget {
161
161
 
162
162
  // check if only data has changed
163
163
  let oldConfigWithNewData = $.extend(true, {}, this.config);
164
- oldConfigWithNewData.data = config.data;
164
+ if (config.data) {
165
+ oldConfigWithNewData.data = config.data;
166
+ } else {
167
+ delete oldConfigWithNewData.data;
168
+ }
169
+
170
+ // the label map is technically part of the config, but it is handled as data. Therefore it is excluded from this check.
171
+ let transferLabelMap = (source, target, identifier) => {
172
+ if (!source || !target || !identifier) {
173
+ return;
174
+ }
175
+ // Property not set on source -> remove from target
176
+ if (!source.options || !source.options[identifier]) {
177
+ if (target.options) {
178
+ delete target.options[identifier];
179
+ }
180
+ if (target.options && objects.isEmpty(target.options.scales) && !(source.options && source.options.scales)) {
181
+ delete target.options.scales;
182
+ }
183
+ if (objects.isEmpty(target.options) && !source.options) {
184
+ delete target.options;
185
+ }
186
+ return;
187
+ }
188
+ target.options[identifier] = source.options[identifier];
189
+ };
190
+ transferLabelMap(config, oldConfigWithNewData, 'xLabelMap');
191
+ transferLabelMap(config, oldConfigWithNewData, 'yLabelMap');
192
+
165
193
  if (objects.equalsRecursive(oldConfigWithNewData, config)) {
166
194
  this._setProperty('config', config);
167
195
  if (this.rendered) {
@@ -246,6 +274,7 @@ export default class Chart extends Widget {
246
274
  * [requestAnimation] default false
247
275
  * [debounce] default 0
248
276
  * [onlyUpdateData] default false
277
+ * [onlyRefresh] default false
249
278
  */
250
279
  updateChart(opts) {
251
280
  opts = opts || {};
@@ -281,6 +310,8 @@ export default class Chart extends Widget {
281
310
  this._updateChartOpts = null;
282
311
  if (opts.onlyUpdateData && this.chartRenderer && this.chartRenderer.isDataUpdatable()) {
283
312
  this.chartRenderer.updateData(opts.requestAnimation);
313
+ } else if (opts.onlyRefresh && this.chartRenderer) {
314
+ this.chartRenderer.refresh();
284
315
  } else if (this.chartRenderer) {
285
316
  this.chartRenderer.remove(this.chartRenderer.shouldAnimateRemoveOnUpdate(opts), chartAnimationStopping => {
286
317
  if (this.removing || chartAnimationStopping) {
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (c) 2010-2020 BSI Business Systems Integration AG.
2
+ * Copyright (c) 2010-2021 BSI Business Systems Integration AG.
3
3
  * All rights reserved. This program and the accompanying materials
4
4
  * are made available under the terms of the Eclipse Public License v1.0
5
5
  * which accompanies this distribution, and is available at
@@ -361,32 +361,29 @@
361
361
  fill: @chart-legend-label-color;
362
362
 
363
363
  .inverted > & {
364
- fill: @palette-white;
364
+ fill: @chart-legend-label-inverted-color;
365
365
  }
366
366
  }
367
367
 
368
368
  > .datalabel {
369
- fill: @palette-white;
369
+ fill: @chart-data-label-color;
370
370
  }
371
371
 
372
372
  > .axis-label {
373
373
  fill: @chart-axis-label-color;
374
374
 
375
375
  .inverted > & {
376
- fill: @palette-white;
376
+ fill: @chart-axis-label-color-inverted;
377
377
  }
378
378
  }
379
379
 
380
- > .grid {
380
+ > .grid,
381
+ > .scale-ticks {
381
382
  fill: @chart-axis-line-color;
382
- }
383
-
384
- > .tooltip-background {
385
- fill: @chart-tooltip-background-color;
386
- }
387
383
 
388
- > .tooltip-border {
389
- fill: @chart-tooltip-border-color;
384
+ .inverted > & {
385
+ fill: @chart-axis-line-color-inverted;
386
+ }
390
387
  }
391
388
  }
392
389
  }
@@ -426,12 +423,6 @@
426
423
  #scout.chart-auto-stroke-colors-schemes();
427
424
  #scout.chart-auto-colors-schemes(@darken: 10, @additional-classes: ~".hover");
428
425
  #scout.chart-auto-stroke-colors-schemes(@darken: 10, @additional-classes: ~".hover");
429
-
430
- > .point {
431
- &.hover {
432
- fill: @palette-white;
433
- }
434
- }
435
426
  }
436
427
 
437
428
  .bar-chart,
@@ -476,8 +467,12 @@
476
467
  & > .elements {
477
468
  #scout.chart-label-grid-colors();
478
469
 
479
- :not(.inverted) > & > .grid {
470
+ & > .grid {
480
471
  fill: darken(@chart-axis-line-color, 15);
472
+
473
+ .inverted > & {
474
+ fill: lighten(@chart-axis-line-color-inverted, 25);
475
+ }
481
476
  }
482
477
 
483
478
  #scout.chart-auto-colors-schemes(@opacity: 70);
@@ -498,17 +493,20 @@
498
493
 
499
494
  & > .elements {
500
495
  #scout.chart-label-grid-colors();
496
+
497
+ & > .scale-ticks {
498
+ fill: darken(@chart-axis-line-color, 15);
499
+
500
+ .inverted > & {
501
+ fill: lighten(@chart-axis-line-color-inverted, 25);
502
+ }
503
+ }
504
+
501
505
  #scout.chart-auto-colors-schemes(@opacity: 20);
502
506
  #scout.chart-auto-stroke-colors-schemes();
503
507
  #scout.chart-auto-colors-schemes(@opacity: 35, @additional-classes: ~".hover");
504
508
 
505
509
  #scout.chart-auto-colors-schemes(@additional-classes: ~".legend");
506
-
507
- > .point {
508
- &.hover {
509
- fill: @palette-white;
510
- }
511
- }
512
510
  }
513
511
  }
514
512
 
@@ -536,13 +534,12 @@ text.line-label {
536
534
  font-size: @font-size-normal;
537
535
 
538
536
  .inverted & {
539
- fill: @palette-white;
537
+ fill: @chart-axis-label-color-inverted;
540
538
  }
541
539
  }
542
540
 
543
541
  text.line-label-background {
544
542
  font-size: @font-size-normal;
545
-
546
543
  fill: @chart-line-label-background-color;
547
544
 
548
545
  .inverted & {
@@ -560,7 +557,11 @@ text.line-label-background {
560
557
 
561
558
  line.label-line {
562
559
  stroke-width: 1px;
563
- stroke: @chart-axis-line-color;
560
+ stroke: @chart-line-label-border-color;
561
+
562
+ .inverted & {
563
+ stroke: @chart-line-label-inverted-border-color;
564
+ }
564
565
  }
565
566
 
566
567
  /* --- Wire labels default ---*/
@@ -591,58 +592,58 @@ path.fulfillment-chart {
591
592
  }
592
593
 
593
594
  &.auto-color {
594
- fill: @chart-data-color-2;
595
+ fill: @chart-data-color;
595
596
 
596
597
  .clickable &:hover {
597
- fill: @chart-data-color-3;
598
+ fill: @chart-data-hover-color;
598
599
  }
599
600
 
600
601
  &.selected {
601
- fill: @chart-data-color-3;
602
+ fill: @chart-data-selected-color;
602
603
  }
603
604
  }
604
605
 
605
606
  .color-alternative &.auto-color {
606
- fill: @chart-data-color-2-alternative;
607
+ fill: @chart-data-color-alternative;
607
608
 
608
609
  .clickable &:hover {
609
- fill: @chart-data-color-3-alternative;
610
+ fill: @chart-data-hover-color-alternative;
610
611
  }
611
612
 
612
613
  &.selected {
613
- fill: @chart-data-color-3-alternative;
614
+ fill: @chart-data-selected-color-alternative;
614
615
  }
615
616
  }
616
617
 
617
618
  .inverted & {
618
619
  &.auto-color {
619
- fill: @chart-data-color-1-inverted;
620
+ fill: @chart-data-color-inverted;
620
621
 
621
- .clickable &:hover {
622
- fill: @chart-data-color-2-inverted;
622
+ .clickable&:hover {
623
+ fill: @chart-data-hover-color-inverted;
623
624
  }
624
625
 
625
626
  &.selected {
626
- fill: @chart-data-color-2-inverted;
627
+ fill: @chart-data-selected-color-inverted;
627
628
  }
628
629
  }
629
630
 
630
631
  .color-alternative&.auto-color {
631
- fill: @chart-data-color-2-alternative-inverted;
632
+ fill: @chart-data-color-alternative-inverted;
632
633
 
633
- .clickable &:hover {
634
- fill: @chart-data-color-3-alternative-inverted;
634
+ .clickable&:hover {
635
+ fill: @chart-data-hover-color-alternative-inverted;
635
636
  }
636
637
 
637
638
  &.selected {
638
- fill: @chart-data-color-3-alternative-inverted;
639
+ fill: @chart-data-selected-color-alternative-inverted;
639
640
  }
640
641
  }
641
642
  }
642
643
  }
643
644
 
644
645
  path.fulfillment-chart-inner-circle {
645
- fill: @palette-gray-3;
646
+ fill: @fufillment-chart-inner-circle-color;
646
647
  }
647
648
 
648
649
  text.fulfillment-chart-label {
@@ -689,7 +690,7 @@ path.speedo-chart-arc, path.pointer {
689
690
  /* --- Salesfunnel --- */
690
691
 
691
692
  line.label-separator {
692
- stroke: @chart-axis-line-color;
693
+ stroke: @palette-gray-7;
693
694
 
694
695
  .inverted & {
695
696
  stroke: @palette-white;
@@ -712,23 +713,23 @@ polygon.salesfunnel-chart-bar {
712
713
  }
713
714
 
714
715
  &.auto-color:hover {
715
- fill: @chart-data-active-color;
716
+ fill: @chart-data-hover-color;
716
717
  }
717
718
 
718
719
  .inverted &.auto-color:hover {
719
- fill: @chart-data-active-color-inverted;
720
+ fill: @chart-data-white-hover-color;
720
721
  }
721
722
 
722
723
  .color-alternative &.auto-color:hover {
723
- fill: @chart-data-active-color-alternative;
724
+ fill: @chart-data-hover-color-alternative;
724
725
  }
725
726
 
726
727
  .color-alternative.inverted &.auto-color:hover {
727
- fill: @chart-data-active-color-alternative-inverted;
728
+ fill: @chart-data-white-hover-color;
728
729
  }
729
730
 
730
731
  .color-rainbow &.auto-color:hover {
731
- fill: @chart-data-active-color-rainbow;
732
+ fill: @chart-data-hover-color-rainbow;
732
733
  }
733
734
  }
734
735
 
@@ -753,11 +754,7 @@ text.salesfunnel-bar-label {
753
754
  }
754
755
 
755
756
  text.salesfunnel-label {
756
- fill: @salesfunnel-label-color;
757
-
758
- .color-alternative & {
759
- fill: @salesfunnel-alternative-label-color;
760
- }
757
+ fill: @chart-axis-text-color;
761
758
 
762
759
  text-anchor: end;
763
760
  dominant-baseline: central;
@@ -789,18 +786,18 @@ circle.venn-circle {
789
786
  }
790
787
 
791
788
  &.auto-color {
792
- fill: @chart-data-color-2;
789
+ fill: @chart-data-color;
793
790
 
794
791
  .inverted & {
795
- fill: @chart-data-text-color;
792
+ fill: @chart-data-color-inverted;
796
793
  }
797
794
 
798
795
  .color-alternative & {
799
- fill: @chart-data-color-2-alternative;
796
+ fill: @chart-data-color-alternative;
800
797
  }
801
798
 
802
799
  .color-alternative.inverted & {
803
- fill: @chart-data-color-2-alternative-inverted;
800
+ fill: @chart-data-color-alternative-inverted;
804
801
  }
805
802
  }
806
803
  }
@@ -823,24 +820,70 @@ text.venn-legend {
823
820
  text-anchor: start;
824
821
  }
825
822
 
826
- .venn-chart-loading-indicator {
827
- @loading-animation-size: 30px;
828
- display: inline-block;
829
- position: absolute;
830
- top: 50%;
831
- left: 50%;
832
- margin-top: -(@loading-animation-size / 2);
833
- margin-left: -(@loading-animation-size / 2);
834
- #scout.animation(fade-in 0.15s);
835
-
836
- &::before {
837
- #scout.animation(pulsate 2.0s linear infinite);
838
- content: '';
839
- display: inline-block;
840
- vertical-align: middle;
841
- border-radius: 50%;
842
- border: 1px solid @border-color;
843
- width: @loading-animation-size;
844
- height: @loading-animation-size;
823
+ /*** chart tooltip ***/
824
+ .tooltip.chart-tooltip {
825
+ --chart-tooltip-font-family: @font-default-family;
826
+ --chart-tooltip-label-width: 70px;
827
+
828
+ & > .tooltip-content > .attribute {
829
+ display: flex;
830
+ flex-wrap: nowrap;
831
+ justify-content: flex-start;
832
+ align-content: center;
833
+ align-items: center;
834
+ padding-top: 2px;
835
+ padding-bottom: 2px;
836
+
837
+ &:first-child {
838
+ padding-top: 0;
839
+ }
840
+
841
+ &:last-child {
842
+ padding-bottom: 0;
843
+ }
844
+
845
+ & > .color {
846
+ height: 10px;
847
+ width: 10px;
848
+ border-radius: 50%;
849
+ margin-right: 5px;
850
+ }
851
+
852
+ & > label {
853
+ width: var(--chart-tooltip-label-width);
854
+ overflow: hidden;
855
+ text-overflow: ellipsis;
856
+ padding-right: 10px;
857
+ white-space: nowrap;
858
+ font-size: @field-label-font-size;
859
+ padding-top: @font-size-normal - @field-label-font-size;
860
+
861
+ &:first-child {
862
+ width: calc(var(--chart-tooltip-label-width) + 15px); // compensate missing color bubble
863
+
864
+ &:last-child {
865
+ width: 100%;
866
+ padding-right: 0;
867
+ font-size: @font-size-normal;
868
+ font-family: var(--chart-tooltip-font-family);
869
+ }
870
+ }
871
+ }
872
+
873
+ & > .value {
874
+ flex-grow: 1;
875
+ max-width: calc(100% - 15px - var(--chart-tooltip-label-width));
876
+ text-overflow: ellipsis;
877
+ overflow: hidden;
878
+ white-space: nowrap;
879
+ text-align: right;
880
+ font-size: @font-size-normal;
881
+ font-weight: @font-weight-normal;
882
+ font-family: var(--chart-tooltip-font-family);
883
+ }
884
+
885
+ &.title > .value {
886
+ text-align: left;
887
+ }
845
888
  }
846
- }
889
+ }