@progress/kendo-charts 2.7.2-dev.202502101310 → 2.7.2-develop.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.
- package/dist/cdn/js/kendo-charts.js +1 -1
- package/dist/cdn/main.js +1 -1
- package/dist/es/barcode/barcode-validator.js +10 -12
- package/dist/es/barcode/barcode.js +84 -96
- package/dist/es/barcode/encodings/code11.js +41 -57
- package/dist/es/barcode/encodings/code128.js +222 -354
- package/dist/es/barcode/encodings/code39-extended.js +20 -34
- package/dist/es/barcode/encodings/code39.js +49 -75
- package/dist/es/barcode/encodings/code93-extended.js +12 -24
- package/dist/es/barcode/encodings/code93.js +52 -70
- package/dist/es/barcode/encodings/ean13.js +28 -42
- package/dist/es/barcode/encodings/ean8.js +8 -18
- package/dist/es/barcode/encodings/encoding.js +18 -24
- package/dist/es/barcode/encodings/main.js +13 -10
- package/dist/es/barcode/encodings/msi.js +56 -112
- package/dist/es/barcode/encodings/postnet.js +31 -45
- package/dist/es/barcode/surface-size.js +2 -2
- package/dist/es/chart/aggregates/aggregates.js +23 -23
- package/dist/es/chart/aggregates/default-aggregates.js +10 -18
- package/dist/es/chart/aggregates/series-aggregator.js +42 -54
- package/dist/es/chart/animations/bar-chart-animation.js +15 -26
- package/dist/es/chart/animations/bubble-animation.js +7 -17
- package/dist/es/chart/animations/clip-animation.js +13 -23
- package/dist/es/chart/animations/fade-in-animation.js +6 -16
- package/dist/es/chart/animations/pie-animation.js +6 -16
- package/dist/es/chart/api-elements/chart-axis.js +14 -22
- package/dist/es/chart/api-elements/chart-pane.js +10 -8
- package/dist/es/chart/api-elements/chart-plotarea.js +4 -10
- package/dist/es/chart/api-elements/find-axis-by-name.js +1 -1
- package/dist/es/chart/area-chart/area-chart.js +46 -60
- package/dist/es/chart/area-chart/area-segment.js +46 -52
- package/dist/es/chart/area-chart/spline-area-segment.js +12 -21
- package/dist/es/chart/area-chart/step-area-segment.js +6 -15
- package/dist/es/chart/axis-group-range-tracker.js +14 -20
- package/dist/es/chart/bar-chart/bar-chart.js +65 -80
- package/dist/es/chart/bar-chart/bar-label.js +25 -32
- package/dist/es/chart/bar-chart/bar.js +76 -91
- package/dist/es/chart/box-plot-chart/box-plot-chart.js +33 -48
- package/dist/es/chart/box-plot-chart/box-plot.js +55 -68
- package/dist/es/chart/box-plot-chart/vertical-box-plot.js +13 -23
- package/dist/es/chart/bubble-chart/bubble-chart.js +51 -64
- package/dist/es/chart/bubble-chart/bubble.js +21 -27
- package/dist/es/chart/bullet-chart/bullet-chart.js +45 -57
- package/dist/es/chart/bullet-chart/bullet.js +48 -57
- package/dist/es/chart/bullet-chart/target.js +1 -11
- package/dist/es/chart/candlestick-chart/candlestick-chart.js +41 -55
- package/dist/es/chart/candlestick-chart/candlestick.js +60 -69
- package/dist/es/chart/categorical-chart.js +178 -206
- package/dist/es/chart/chart-container.js +30 -39
- package/dist/es/chart/chart.js +641 -701
- package/dist/es/chart/constants.js +103 -103
- package/dist/es/chart/crosshair/crosshair-tooltip.js +22 -34
- package/dist/es/chart/crosshair/crosshair.js +39 -47
- package/dist/es/chart/donut-chart/donut-chart.js +36 -48
- package/dist/es/chart/donut-chart/donut-segment.js +12 -24
- package/dist/es/chart/error-bars/categorical-error-bar.js +5 -15
- package/dist/es/chart/error-bars/error-bar-base.js +37 -49
- package/dist/es/chart/error-bars/error-range-calculator.js +46 -56
- package/dist/es/chart/error-bars/scatter-error-bar.js +6 -16
- package/dist/es/chart/funnel-chart/funnel-chart.js +86 -103
- package/dist/es/chart/funnel-chart/funnel-segment.js +46 -54
- package/dist/es/chart/funnel-chart/pyramid-chart.js +5 -11
- package/dist/es/chart/heatmap-chart/color-scale.js +7 -9
- package/dist/es/chart/heatmap-chart/heatmap-chart.js +87 -110
- package/dist/es/chart/heatmap-chart/heatmap-point.js +72 -78
- package/dist/es/chart/highlight.js +26 -36
- package/dist/es/chart/layout/cluster-layout.js +16 -25
- package/dist/es/chart/layout/radar-cluster-layout.js +15 -24
- package/dist/es/chart/layout/radar-stack-layout.js +10 -22
- package/dist/es/chart/layout/stack-wrap.js +12 -24
- package/dist/es/chart/layout/utils.js +2 -2
- package/dist/es/chart/legend/legend-item-line-area.js +8 -19
- package/dist/es/chart/legend/legend-item-line.js +21 -31
- package/dist/es/chart/legend/legend-item-marker.js +18 -28
- package/dist/es/chart/legend/legend-item-square.js +8 -18
- package/dist/es/chart/legend/legend-item.js +91 -105
- package/dist/es/chart/legend/legend-layout.js +18 -25
- package/dist/es/chart/legend/legend.js +68 -92
- package/dist/es/chart/line-chart/line-chart.js +35 -48
- package/dist/es/chart/line-chart/line-point.js +90 -103
- package/dist/es/chart/line-chart/line-segment.js +23 -34
- package/dist/es/chart/line-chart/spline-segment.js +10 -20
- package/dist/es/chart/line-chart/step-line-mixin.js +14 -17
- package/dist/es/chart/line-chart/step-line-segment.js +4 -14
- package/dist/es/chart/mixins/accessibility-attributes-mixin.js +7 -7
- package/dist/es/chart/mixins/clip-animation-mixin.js +7 -7
- package/dist/es/chart/mixins/line-chart-mixin.js +27 -31
- package/dist/es/chart/mixins/note-mixin.js +3 -3
- package/dist/es/chart/mixins/pie-chart-mixin.js +9 -9
- package/dist/es/chart/mixins/plotarea-events-mixin.js +1 -1
- package/dist/es/chart/mixins/point-events-mixin.js +1 -1
- package/dist/es/chart/ohlc-chart/ohlc-chart.js +4 -14
- package/dist/es/chart/ohlc-chart/ohlc-point.js +15 -28
- package/dist/es/chart/pan-and-zoom/accept-key.js +3 -3
- package/dist/es/chart/pan-and-zoom/mousewheel-zoom.js +25 -33
- package/dist/es/chart/pan-and-zoom/pannable.js +29 -37
- package/dist/es/chart/pan-and-zoom/to-chart-axis-ranges.js +3 -3
- package/dist/es/chart/pan-and-zoom/zoom-selection.js +61 -70
- package/dist/es/chart/pane.js +71 -79
- package/dist/es/chart/pie-chart/pie-chart.js +153 -183
- package/dist/es/chart/pie-chart/pie-segment.js +82 -98
- package/dist/es/chart/plotarea/categorical-plotarea.js +285 -318
- package/dist/es/chart/plotarea/donut-plotarea.js +12 -22
- package/dist/es/chart/plotarea/funnel-plotarea.js +17 -27
- package/dist/es/chart/plotarea/heatmap-plotarea.js +139 -167
- package/dist/es/chart/plotarea/pie-plotarea.js +15 -25
- package/dist/es/chart/plotarea/plotarea-base.js +423 -462
- package/dist/es/chart/plotarea/plotarea-factory.js +15 -20
- package/dist/es/chart/plotarea/polar-plotarea-base.js +37 -51
- package/dist/es/chart/plotarea/polar-plotarea.js +39 -49
- package/dist/es/chart/plotarea/radar-plotarea.js +55 -65
- package/dist/es/chart/plotarea/xy-plotarea.js +111 -128
- package/dist/es/chart/polar-area-chart/polar-area-chart.js +22 -36
- package/dist/es/chart/polar-area-chart/polar-area-segment.js +7 -17
- package/dist/es/chart/polar-area-chart/spline-polar-area-segment.js +15 -25
- package/dist/es/chart/polar-line-chart/polar-line-chart.js +2 -11
- package/dist/es/chart/polar-scatter-chart/polar-scatter-chart.js +6 -16
- package/dist/es/chart/radar-area-chart/radar-area-chart.js +11 -21
- package/dist/es/chart/radar-area-chart/radar-area-segment.js +3 -13
- package/dist/es/chart/radar-area-chart/spline-radar-area-segment.js +3 -13
- package/dist/es/chart/radar-bar-chart/radar-bar-chart.js +19 -29
- package/dist/es/chart/radar-bar-chart/radar-segment.js +6 -12
- package/dist/es/chart/radar-line-chart/radar-line-chart.js +26 -35
- package/dist/es/chart/range-area-chart/range-area-chart.js +46 -58
- package/dist/es/chart/range-area-chart/range-area-point.js +55 -66
- package/dist/es/chart/range-area-chart/range-area-segment.js +19 -28
- package/dist/es/chart/range-area-chart/range-line-point.js +4 -14
- package/dist/es/chart/range-area-chart/spline-range-area-segment.js +11 -18
- package/dist/es/chart/range-area-chart/step-range-area-segment.js +7 -16
- package/dist/es/chart/range-bar-chart/range-bar-chart.js +18 -29
- package/dist/es/chart/range-bar-chart/range-bar.js +10 -23
- package/dist/es/chart/register-charts.js +20 -16
- package/dist/es/chart/scatter-charts/scatter-chart.js +100 -122
- package/dist/es/chart/scatter-charts/scatter-line-chart.js +15 -25
- package/dist/es/chart/selection.js +176 -201
- package/dist/es/chart/series-binder.js +55 -66
- package/dist/es/chart/theme/base-theme.js +75 -79
- package/dist/es/chart/theme/load-theme.js +52 -52
- package/dist/es/chart/tooltip/base-tooltip.js +17 -24
- package/dist/es/chart/tooltip/shared-tooltip.js +25 -31
- package/dist/es/chart/tooltip/tooltip.js +10 -20
- package/dist/es/chart/trendlines/calculate-moving-average.js +11 -13
- package/dist/es/chart/trendlines/calculate-polynomial.js +24 -26
- package/dist/es/chart/trendlines/calculate-slope.js +12 -14
- package/dist/es/chart/trendlines/check-all-positive.js +2 -5
- package/dist/es/chart/trendlines/exponential-trendline.js +15 -24
- package/dist/es/chart/trendlines/get-scatter-trendline-data.js +6 -7
- package/dist/es/chart/trendlines/get-trendline-data.js +6 -6
- package/dist/es/chart/trendlines/linear-trendline.js +12 -21
- package/dist/es/chart/trendlines/logarithmic-trendline.js +14 -23
- package/dist/es/chart/trendlines/moving-average.js +15 -26
- package/dist/es/chart/trendlines/polynomial-trendline.js +13 -21
- package/dist/es/chart/trendlines/power-trendline.js +15 -24
- package/dist/es/chart/trendlines/scatter-exponential-trendline.js +15 -24
- package/dist/es/chart/trendlines/scatter-linear-trendline.js +10 -16
- package/dist/es/chart/trendlines/scatter-logarithmic-trendline.js +17 -27
- package/dist/es/chart/trendlines/scatter-moving-average.js +7 -10
- package/dist/es/chart/trendlines/scatter-polynomial-trendline.js +11 -16
- package/dist/es/chart/trendlines/scatter-power-trendline.js +15 -22
- package/dist/es/chart/trendlines/scatter-trendline-registry.js +1 -1
- package/dist/es/chart/trendlines/scatter-value-getter.js +2 -5
- package/dist/es/chart/trendlines/trendline-factory.js +1 -1
- package/dist/es/chart/trendlines/trendline-registry.js +1 -1
- package/dist/es/chart/trendlines/x-value-limits.js +6 -8
- package/dist/es/chart/utils/any-has-z-index.js +1 -1
- package/dist/es/chart/utils/bind-segments.js +8 -8
- package/dist/es/chart/utils/categories-count.js +3 -3
- package/dist/es/chart/utils/count-numbers.js +4 -4
- package/dist/es/chart/utils/create-out-of-range-points.js +13 -22
- package/dist/es/chart/utils/eval-options.js +7 -10
- package/dist/es/chart/utils/filter-series-by-type.js +4 -4
- package/dist/es/chart/utils/get-field.js +1 -1
- package/dist/es/chart/utils/has-gradient-overlay.js +1 -1
- package/dist/es/chart/utils/is-date-axis.js +2 -2
- package/dist/es/chart/utils/parse-date-category.js +2 -2
- package/dist/es/chart/utils/segment-visible.js +2 -2
- package/dist/es/chart/waterfall-chart/waterfall-chart.js +41 -55
- package/dist/es/chart/waterfall-chart/waterfall-segment.js +16 -24
- package/dist/es/chart-wizard/get-wizard-data-from-data-rows.js +5 -6
- package/dist/es/chart-wizard/messages.js +1 -1
- package/dist/es/chart-wizard/state.js +145 -137
- package/dist/es/chart-wizard.js +12 -12
- package/dist/es/common/add-class.js +3 -3
- package/dist/es/common/align-path-to-pixel.js +2 -2
- package/dist/es/common/auto-text-color.js +1 -1
- package/dist/es/common/constants.js +53 -53
- package/dist/es/common/create-hash-set.js +59 -65
- package/dist/es/common/cycleDown.js +1 -1
- package/dist/es/common/deep-extend.js +10 -12
- package/dist/es/common/element-scale.js +9 -9
- package/dist/es/common/element-styles.js +8 -8
- package/dist/es/common/event-map.js +4 -4
- package/dist/es/common/event-utils.js +13 -13
- package/dist/es/common/find.js +2 -2
- package/dist/es/common/font-loader.js +42 -44
- package/dist/es/common/get-aria-template.js +2 -4
- package/dist/es/common/get-spacing.js +2 -4
- package/dist/es/common/get-supported-features.js +7 -7
- package/dist/es/common/get-template.js +2 -4
- package/dist/es/common/getter.js +5 -5
- package/dist/es/common/grep.js +3 -3
- package/dist/es/common/has-classes.js +2 -2
- package/dist/es/common/hash-map.js +11 -11
- package/dist/es/common/instance-observer.js +28 -33
- package/dist/es/common/keys.js +1 -1
- package/dist/es/common/map.js +4 -4
- package/dist/es/common/matrix.js +142 -150
- package/dist/es/common/mousewheel-delta.js +2 -2
- package/dist/es/common/observable.js +40 -52
- package/dist/es/common/remove-class.js +1 -1
- package/dist/es/common/render-icon.js +50 -60
- package/dist/es/common/set-default-options.js +1 -1
- package/dist/es/common/sparse-array-limits.js +4 -4
- package/dist/es/common/user-events.js +124 -150
- package/dist/es/core/axis-label.js +38 -43
- package/dist/es/core/axis.js +293 -345
- package/dist/es/core/box-element.js +36 -46
- package/dist/es/core/box.js +75 -83
- package/dist/es/core/category-axis.js +265 -314
- package/dist/es/core/chart-element.js +98 -109
- package/dist/es/core/constants.js +3 -3
- package/dist/es/core/curve-processor.js +86 -93
- package/dist/es/core/date-category-axis.js +381 -413
- package/dist/es/core/date-value-axis.js +108 -118
- package/dist/es/core/float-element.js +54 -78
- package/dist/es/core/gradients.js +3 -3
- package/dist/es/core/logarithmic-axis.js +134 -186
- package/dist/es/core/mixins/grid-lines-mixin.js +18 -20
- package/dist/es/core/mixins/radar-numeric-axis-mixin.js +46 -51
- package/dist/es/core/note.js +58 -73
- package/dist/es/core/numeric-axis.js +111 -133
- package/dist/es/core/pattern.js +4 -8
- package/dist/es/core/point.js +25 -34
- package/dist/es/core/polar-axis.js +73 -91
- package/dist/es/core/radar-category-axis.js +90 -114
- package/dist/es/core/radar-logarithmic-axis.js +10 -20
- package/dist/es/core/radar-numeric-axis.js +10 -20
- package/dist/es/core/ring.js +61 -68
- package/dist/es/core/root-element.js +40 -48
- package/dist/es/core/sector.js +11 -17
- package/dist/es/core/shape-builder.js +13 -23
- package/dist/es/core/shape-element.js +27 -37
- package/dist/es/core/text-box.js +50 -59
- package/dist/es/core/text.js +13 -24
- package/dist/es/core/title.js +19 -25
- package/dist/es/core/utils/auto-axis-max.js +3 -3
- package/dist/es/core/utils/auto-axis-min.js +3 -3
- package/dist/es/core/utils/auto-major-unit.js +4 -4
- package/dist/es/core/utils/box-diff.js +9 -9
- package/dist/es/core/utils/create-axis-grid-line.js +2 -4
- package/dist/es/core/utils/create-axis-tick.js +2 -4
- package/dist/es/core/utils/guid.js +3 -3
- package/dist/es/core/utils/rect-to-box.js +2 -2
- package/dist/es/date-utils/absolute-date-diff.js +2 -2
- package/dist/es/date-utils/add-duration.js +5 -5
- package/dist/es/date-utils/ceil-date.js +1 -1
- package/dist/es/date-utils/constants.js +17 -17
- package/dist/es/date-utils/date-index.js +3 -3
- package/dist/es/date-utils/duration.js +1 -1
- package/dist/es/date-utils/lte-date-index.js +4 -4
- package/dist/es/date-utils/parse-date.js +1 -1
- package/dist/es/date-utils/parse-dates.js +2 -2
- package/dist/es/date-utils/start-of-week.js +3 -5
- package/dist/es/date-utils/to-date.js +1 -1
- package/dist/es/date-utils/to-time.js +2 -2
- package/dist/es/drawing-utils.js +18 -17
- package/dist/es/gauges/arc/arc-gauge.js +29 -38
- package/dist/es/gauges/arc/arc-scale.js +16 -29
- package/dist/es/gauges/arc/range-pointer-animation.js +16 -25
- package/dist/es/gauges/arc/range-pointer.js +25 -46
- package/dist/es/gauges/circular/circular-gauge.js +7 -17
- package/dist/es/gauges/constants.js +14 -14
- package/dist/es/gauges/gauge.js +84 -96
- package/dist/es/gauges/linear/arrow-linear-pointer-animation.js +13 -25
- package/dist/es/gauges/linear/arrow-linear-pointer.js +23 -35
- package/dist/es/gauges/linear/bar-linear-pointer-animation.js +15 -24
- package/dist/es/gauges/linear/bar-linear-pointer.js +38 -51
- package/dist/es/gauges/linear/linear-gauge.js +61 -83
- package/dist/es/gauges/linear/linear-pointer.js +25 -39
- package/dist/es/gauges/linear/linear-scale.js +57 -74
- package/dist/es/gauges/pointer.js +11 -21
- package/dist/es/gauges/radial/radial-gauge.js +58 -81
- package/dist/es/gauges/radial/radial-pointer-animation.js +9 -15
- package/dist/es/gauges/radial/radial-pointer.js +33 -48
- package/dist/es/gauges/radial/radial-scale.js +154 -186
- package/dist/es/gauges/utils/build-label-element.js +10 -12
- package/dist/es/gauges/utils/get-range.js +2 -2
- package/dist/es/gauges/utils/pad.js +3 -3
- package/dist/es/gauges/utils/unpad.js +1 -1
- package/dist/es/map/attribution.js +42 -52
- package/dist/es/map/constants.js +5 -5
- package/dist/es/map/crs.js +68 -112
- package/dist/es/map/datums.js +3 -3
- package/dist/es/map/extent.js +40 -54
- package/dist/es/map/layers/bubble.js +52 -70
- package/dist/es/map/layers/layer.js +50 -56
- package/dist/es/map/layers/marker.js +109 -129
- package/dist/es/map/layers/shape.js +111 -133
- package/dist/es/map/layers/tile.js +144 -170
- package/dist/es/map/location.js +70 -78
- package/dist/es/map/map.js +261 -291
- package/dist/es/map/navigator.js +33 -39
- package/dist/es/map/scroller/draggable.js +98 -134
- package/dist/es/map/scroller/fx.js +39 -46
- package/dist/es/map/scroller/scroller.js +144 -174
- package/dist/es/map/tooltip/tooltip.js +15 -25
- package/dist/es/map/utils.js +25 -26
- package/dist/es/map/zoom.js +30 -36
- package/dist/es/qrcode/encodings/data-modes/alpha-numeric-data-mode.js +14 -26
- package/dist/es/qrcode/encodings/data-modes/byte-data-mode.js +15 -25
- package/dist/es/qrcode/encodings/data-modes/data-mode-instances.js +8 -7
- package/dist/es/qrcode/encodings/data-modes/numeric-data-mode.js +14 -24
- package/dist/es/qrcode/encodings/data-modes/qr-data-mode.js +15 -21
- package/dist/es/qrcode/encodings/encoders/iso-encoder.js +6 -16
- package/dist/es/qrcode/encodings/encoders/utf8-encoder.js +28 -36
- package/dist/es/qrcode/encodings/encoding-result.js +4 -10
- package/dist/es/qrcode/encodings/encoding.js +68 -192
- package/dist/es/qrcode/encodings/free-cell-visitor.js +16 -24
- package/dist/es/qrcode/encodings/utils/choose-mode.js +44 -0
- package/dist/es/qrcode/encodings/utils/get-data-codewords-count.js +13 -0
- package/dist/es/qrcode/encodings/utils/get-data-string.js +13 -0
- package/dist/es/qrcode/encodings/utils/get-modes.js +35 -0
- package/dist/es/qrcode/encodings/utils/get-version.js +23 -0
- package/dist/es/qrcode/encodings/utils/index.js +5 -0
- package/dist/es/qrcode/encodings/version-codewords.js +1 -1
- package/dist/es/qrcode/qrcode-validator.js +3 -5
- package/dist/es/qrcode/qrcode.js +104 -114
- package/dist/es/qrcode/utils.js +4 -4
- package/dist/es/sankey/calculation.js +286 -307
- package/dist/es/sankey/element.js +15 -23
- package/dist/es/sankey/label.js +29 -44
- package/dist/es/sankey/legend.js +15 -29
- package/dist/es/sankey/link.js +80 -98
- package/dist/es/sankey/node.js +26 -37
- package/dist/es/sankey/sankey.js +318 -385
- package/dist/es/sankey/title.js +9 -20
- package/dist/es/sankey/utils.js +18 -23
- package/dist/es/services/chart-service.js +24 -28
- package/dist/es/services/dom-events-builder.js +15 -15
- package/dist/es/services/format-service.js +30 -35
- package/dist/es/services/intl-service.js +14 -18
- package/dist/es/services/map-service.js +11 -11
- package/dist/es/services/template-service.js +9 -9
- package/dist/es/sparkline/shared-tooltip.js +11 -21
- package/dist/es/sparkline/sparkline.js +50 -60
- package/dist/es/stock/constants.js +3 -3
- package/dist/es/stock/fade-out-animation.js +12 -21
- package/dist/es/stock/navigator-hint.js +37 -49
- package/dist/es/stock/navigator.js +130 -161
- package/dist/es/stock/stock-chart.js +58 -67
- package/dist/es2015/chart/legend/legend-item.js +1 -1
- package/dist/es2015/qrcode/encodings/encoders/iso-encoder.js +1 -1
- package/dist/es2015/qrcode/encodings/encoders/utf8-encoder.js +1 -1
- package/dist/es2015/qrcode/encodings/encoding.js +3 -127
- package/dist/es2015/qrcode/encodings/utils/choose-mode.js +44 -0
- package/dist/es2015/qrcode/encodings/utils/get-data-codewords-count.js +13 -0
- package/dist/es2015/qrcode/encodings/utils/get-data-string.js +13 -0
- package/dist/es2015/qrcode/encodings/utils/get-modes.js +35 -0
- package/dist/es2015/qrcode/encodings/utils/get-version.js +23 -0
- package/dist/es2015/qrcode/encodings/utils/index.js +5 -0
- package/dist/npm/main.js +3222 -3589
- package/dist/systemjs/kendo-charts.js +1 -1
- package/package.json +19 -57
package/dist/es/sankey/sankey.js
CHANGED
|
@@ -10,34 +10,33 @@ import { Box, rectToBox } from '../core';
|
|
|
10
10
|
import { Legend } from './legend';
|
|
11
11
|
import { defined } from '../drawing-utils';
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
var x1 = width - (node.x0 - 2 * startX);
|
|
13
|
+
const LINK = 'link';
|
|
14
|
+
const NODE = 'node';
|
|
15
|
+
|
|
16
|
+
const toRtl = sankey => {
|
|
17
|
+
const { nodes, links } = sankey;
|
|
18
|
+
const startX = Math.min(...nodes.map(node => node.x0));
|
|
19
|
+
const endX = Math.max(...nodes.map(node => node.x1));
|
|
20
|
+
const width = endX - startX;
|
|
21
|
+
|
|
22
|
+
nodes.forEach(node => {
|
|
23
|
+
const x0 = width - (node.x1 - 2 * startX);
|
|
24
|
+
const x1 = width - (node.x0 - 2 * startX);
|
|
26
25
|
node.x0 = x0;
|
|
27
26
|
node.x1 = x1;
|
|
28
27
|
});
|
|
29
28
|
|
|
30
|
-
links.forEach(
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
links.forEach(link => {
|
|
30
|
+
const x0 = width - (link.x1 - 2 * startX);
|
|
31
|
+
const x1 = width - (link.x0 - 2 * startX);
|
|
33
32
|
link.x1 = x0;
|
|
34
33
|
link.x0 = x1;
|
|
35
34
|
});
|
|
36
35
|
};
|
|
37
36
|
|
|
38
|
-
export
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
export class Sankey extends Observable {
|
|
38
|
+
constructor(element, options, theme) {
|
|
39
|
+
super();
|
|
41
40
|
|
|
42
41
|
this._initTheme(theme);
|
|
43
42
|
this._setOptions(options);
|
|
@@ -51,11 +50,7 @@ export var Sankey = (function (Observable) {
|
|
|
51
50
|
}
|
|
52
51
|
}
|
|
53
52
|
|
|
54
|
-
|
|
55
|
-
Sankey.prototype = Object.create( Observable && Observable.prototype );
|
|
56
|
-
Sankey.prototype.constructor = Sankey;
|
|
57
|
-
|
|
58
|
-
Sankey.prototype.destroy = function destroy () {
|
|
53
|
+
destroy() {
|
|
59
54
|
this.unbind();
|
|
60
55
|
this._destroySurface();
|
|
61
56
|
this._destroyResizeObserver();
|
|
@@ -71,15 +66,14 @@ export var Sankey = (function (Observable) {
|
|
|
71
66
|
this._focusState = null;
|
|
72
67
|
|
|
73
68
|
this.element = null;
|
|
74
|
-
}
|
|
69
|
+
}
|
|
75
70
|
|
|
76
|
-
|
|
71
|
+
_initElement(element) {
|
|
77
72
|
this.element = element;
|
|
78
73
|
addClass(element, [ "k-chart", "k-sankey" ]);
|
|
79
74
|
element.setAttribute('role', 'graphics-document');
|
|
80
75
|
|
|
81
|
-
|
|
82
|
-
var title = ref.title;
|
|
76
|
+
const { title } = this.options;
|
|
83
77
|
|
|
84
78
|
if (title.text) {
|
|
85
79
|
element.setAttribute('aria-label', title.text);
|
|
@@ -88,17 +82,17 @@ export var Sankey = (function (Observable) {
|
|
|
88
82
|
if (title.description) {
|
|
89
83
|
element.setAttribute("aria-roledescription", title.description);
|
|
90
84
|
}
|
|
91
|
-
}
|
|
85
|
+
}
|
|
92
86
|
|
|
93
|
-
|
|
87
|
+
_initSurface() {
|
|
94
88
|
if (!this.surface) {
|
|
95
89
|
this._destroySurface();
|
|
96
90
|
this._initSurfaceElement();
|
|
97
91
|
this.surface = this._createSurface();
|
|
98
92
|
}
|
|
99
|
-
}
|
|
93
|
+
}
|
|
100
94
|
|
|
101
|
-
|
|
95
|
+
_initNavigation(element) {
|
|
102
96
|
element.tabIndex = element.getAttribute("tabindex") || 0;
|
|
103
97
|
|
|
104
98
|
if (this.options.disableKeyboardNavigation) {
|
|
@@ -121,114 +115,103 @@ export var Sankey = (function (Observable) {
|
|
|
121
115
|
node: this.firstFocusableNode(),
|
|
122
116
|
link: null
|
|
123
117
|
};
|
|
124
|
-
}
|
|
118
|
+
}
|
|
125
119
|
|
|
126
|
-
|
|
120
|
+
firstFocusableNode() {
|
|
127
121
|
return this.columns[0][0];
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
var width = ref.width;
|
|
137
|
-
var height = ref.height;
|
|
138
|
-
if (entry.target !== this$1.element ||
|
|
139
|
-
(this$1.size && this$1.size.width === width && this$1.size.height === height)) {
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
_initResizeObserver() {
|
|
125
|
+
const observer = new ResizeObserver((entries) => {
|
|
126
|
+
entries.forEach(entry => {
|
|
127
|
+
const { width, height } = entry.contentRect;
|
|
128
|
+
if (entry.target !== this.element ||
|
|
129
|
+
(this.size && this.size.width === width && this.size.height === height)) {
|
|
140
130
|
return;
|
|
141
131
|
}
|
|
142
|
-
this
|
|
143
|
-
this
|
|
144
|
-
this
|
|
145
|
-
this
|
|
132
|
+
this.size = { width, height };
|
|
133
|
+
this.surface.setSize(this.size);
|
|
134
|
+
this.resize = true;
|
|
135
|
+
this._redraw();
|
|
146
136
|
});
|
|
147
137
|
});
|
|
148
138
|
this._resizeObserver = observer;
|
|
149
139
|
observer.observe(this.element);
|
|
150
|
-
}
|
|
140
|
+
}
|
|
151
141
|
|
|
152
|
-
|
|
142
|
+
_createSurface() {
|
|
153
143
|
return drawing.Surface.create(this.surfaceElement, {
|
|
154
144
|
mouseenter: this._mouseenter.bind(this),
|
|
155
145
|
mouseleave: this._mouseleave.bind(this),
|
|
156
146
|
mousemove: this._mousemove.bind(this),
|
|
157
147
|
click: this._click.bind(this)
|
|
158
148
|
});
|
|
159
|
-
}
|
|
149
|
+
}
|
|
160
150
|
|
|
161
|
-
|
|
162
|
-
|
|
151
|
+
_initTheme(theme) {
|
|
152
|
+
let currentTheme = theme || this.theme || {};
|
|
163
153
|
this.theme = currentTheme;
|
|
164
154
|
this.options = deepExtend({}, currentTheme, this.options);
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
Sankey.prototype.setLinksOpacity = function setLinksOpacity (opacity) {
|
|
168
|
-
var this$1 = this;
|
|
155
|
+
}
|
|
169
156
|
|
|
170
|
-
|
|
171
|
-
|
|
157
|
+
setLinksOpacity(opacity) {
|
|
158
|
+
this.linksVisuals.forEach(link => {
|
|
159
|
+
this.setOpacity(link, opacity, link.linkOptions.opacity);
|
|
172
160
|
});
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
Sankey.prototype.setLinksInactivityOpacity = function setLinksInactivityOpacity (inactiveOpacity) {
|
|
176
|
-
var this$1 = this;
|
|
161
|
+
}
|
|
177
162
|
|
|
178
|
-
|
|
179
|
-
|
|
163
|
+
setLinksInactivityOpacity(inactiveOpacity) {
|
|
164
|
+
this.linksVisuals.forEach(link => {
|
|
165
|
+
this.setOpacity(link, inactiveOpacity, link.linkOptions.highlight.inactiveOpacity);
|
|
180
166
|
});
|
|
181
|
-
}
|
|
167
|
+
}
|
|
182
168
|
|
|
183
|
-
|
|
169
|
+
setOpacity(link, opacity, linkValue) {
|
|
184
170
|
link.options.set('stroke', Object.assign({}, link.options.stroke,
|
|
185
171
|
{opacity: defined(linkValue) ? linkValue : opacity}));
|
|
186
|
-
}
|
|
172
|
+
}
|
|
187
173
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
174
|
+
trigger(name, ev) {
|
|
175
|
+
let dataItem = ev.element.dataItem;
|
|
176
|
+
const targetType = ev.element.type;
|
|
191
177
|
|
|
192
|
-
|
|
178
|
+
const event = Object.assign({}, ev,
|
|
193
179
|
{type: name,
|
|
194
|
-
targetType
|
|
180
|
+
targetType,
|
|
195
181
|
dataItem: dataItem});
|
|
196
182
|
|
|
197
|
-
return
|
|
198
|
-
}
|
|
183
|
+
return super.trigger(name, event);
|
|
184
|
+
}
|
|
199
185
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
186
|
+
_mouseenter(ev) {
|
|
187
|
+
const element = ev.element;
|
|
188
|
+
const isLink = element.type === LINK;
|
|
189
|
+
const isNode = element.type === NODE;
|
|
190
|
+
const isLegendItem = Boolean(element.chartElement && element.chartElement.options.node);
|
|
205
191
|
|
|
206
192
|
if ((isLink && this.trigger('linkEnter', ev)) ||
|
|
207
193
|
(isNode && this.trigger('nodeEnter', ev))) {
|
|
208
194
|
return;
|
|
209
195
|
}
|
|
210
196
|
|
|
211
|
-
|
|
212
|
-
var highlight = ref.highlight;
|
|
197
|
+
const { highlight } = this.options.links;
|
|
213
198
|
if (isLink) {
|
|
214
199
|
this.setLinksInactivityOpacity(highlight.inactiveOpacity);
|
|
215
200
|
this.setOpacity(element, highlight.opacity, element.linkOptions.highlight.opacity);
|
|
216
201
|
} else if (isNode) {
|
|
217
202
|
this.highlightLinks(element, highlight);
|
|
218
203
|
} else if (isLegendItem) {
|
|
219
|
-
|
|
204
|
+
const nodeVisual = this.nodesVisuals.get(element.chartElement.options.node.id);
|
|
220
205
|
this.highlightLinks(nodeVisual, highlight);
|
|
221
206
|
}
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
Sankey.prototype._mouseleave = function _mouseleave (ev) {
|
|
225
|
-
var this$1 = this;
|
|
207
|
+
}
|
|
226
208
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
209
|
+
_mouseleave(ev) {
|
|
210
|
+
const element = ev.element;
|
|
211
|
+
const isLink = element.type === LINK;
|
|
212
|
+
const isNode = element.type === NODE;
|
|
213
|
+
const isLegendItem = Boolean(element.chartElement && element.chartElement.options.node);
|
|
214
|
+
const target = ev.originalEvent.relatedTarget;
|
|
232
215
|
|
|
233
216
|
if (isLink && target && target.nodeName === 'text') {
|
|
234
217
|
return;
|
|
@@ -249,29 +232,25 @@ export var Sankey = (function (Observable) {
|
|
|
249
232
|
}
|
|
250
233
|
|
|
251
234
|
if (isLink || isNode || isLegendItem) {
|
|
252
|
-
this.linksVisuals.forEach(
|
|
253
|
-
this
|
|
235
|
+
this.linksVisuals.forEach(link => {
|
|
236
|
+
this.setOpacity(link, this.options.links.opacity, link.linkOptions.opacity);
|
|
254
237
|
});
|
|
255
238
|
}
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
Sankey.prototype._mousemove = function _mousemove (ev) {
|
|
259
|
-
var this$1 = this;
|
|
239
|
+
}
|
|
260
240
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
var tooltipElType = element.type;
|
|
241
|
+
_mousemove(ev) {
|
|
242
|
+
const { followPointer, delay } = this.options.tooltip;
|
|
243
|
+
const element = ev.element;
|
|
244
|
+
const tooltipElType = element.type;
|
|
266
245
|
|
|
267
246
|
if ((tooltipElType !== LINK && tooltipElType !== NODE) || (this.tooltipShown && !followPointer)) {
|
|
268
247
|
return;
|
|
269
248
|
}
|
|
270
249
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
250
|
+
const mouseEvent = ev.originalEvent;
|
|
251
|
+
const rect = this.element.getBoundingClientRect();
|
|
252
|
+
const isLeft = mouseEvent.clientX - rect.left < rect.width / 2;
|
|
253
|
+
const isTop = mouseEvent.clientY - rect.top < rect.height / 2;
|
|
275
254
|
|
|
276
255
|
ev.tooltipData = {
|
|
277
256
|
popupOffset: {
|
|
@@ -285,11 +264,9 @@ export var Sankey = (function (Observable) {
|
|
|
285
264
|
};
|
|
286
265
|
|
|
287
266
|
if (tooltipElType === NODE) {
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
var links = targetLinks.length ? targetLinks : sourceLinks;
|
|
292
|
-
ev.nodeValue = links.reduce(function (acc, link) { return acc + link.value; }, 0);
|
|
267
|
+
const { sourceLinks, targetLinks } = element.dataItem;
|
|
268
|
+
const links = targetLinks.length ? targetLinks : sourceLinks;
|
|
269
|
+
ev.nodeValue = links.reduce((acc, link) => acc + link.value, 0);
|
|
293
270
|
}
|
|
294
271
|
|
|
295
272
|
if (this.tooltipTimeOut) {
|
|
@@ -297,24 +274,24 @@ export var Sankey = (function (Observable) {
|
|
|
297
274
|
this.tooltipTimeOut = null;
|
|
298
275
|
}
|
|
299
276
|
|
|
300
|
-
|
|
277
|
+
const nextDelay = followPointer && this.tooltipShown ? 0 : delay;
|
|
301
278
|
|
|
302
|
-
this.tooltipTimeOut = setTimeout(
|
|
303
|
-
this
|
|
304
|
-
this
|
|
305
|
-
this
|
|
279
|
+
this.tooltipTimeOut = setTimeout(() => {
|
|
280
|
+
this.trigger('tooltipShow', ev);
|
|
281
|
+
this.tooltipShown = true;
|
|
282
|
+
this.tooltipTimeOut = null;
|
|
306
283
|
}, nextDelay);
|
|
307
|
-
}
|
|
284
|
+
}
|
|
308
285
|
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
286
|
+
_click(ev) {
|
|
287
|
+
const element = ev.element;
|
|
288
|
+
const dataItem = element.dataItem;
|
|
289
|
+
const isLink = element.type === LINK;
|
|
290
|
+
const isNode = element.type === NODE;
|
|
291
|
+
const focusState = this._focusState || {};
|
|
315
292
|
|
|
316
293
|
if (isNode) {
|
|
317
|
-
|
|
294
|
+
const focusedNodeClicked = !focusState.link && this.sameNode(focusState.node, dataItem);
|
|
318
295
|
|
|
319
296
|
if (!focusedNodeClicked) {
|
|
320
297
|
this._focusState = { node: dataItem, link: null };
|
|
@@ -323,12 +300,12 @@ export var Sankey = (function (Observable) {
|
|
|
323
300
|
|
|
324
301
|
this.trigger('nodeClick', ev);
|
|
325
302
|
} else if (isLink) {
|
|
326
|
-
|
|
303
|
+
const link = {
|
|
327
304
|
sourceId: dataItem.source.id,
|
|
328
305
|
targetId: dataItem.target.id,
|
|
329
306
|
value: dataItem.value
|
|
330
307
|
};
|
|
331
|
-
|
|
308
|
+
const focusedLinkClicked = this.sameLink(focusState.link, link);
|
|
332
309
|
|
|
333
310
|
if (!focusedLinkClicked) {
|
|
334
311
|
this._focusState = { node: dataItem.source, link: link };
|
|
@@ -337,109 +314,105 @@ export var Sankey = (function (Observable) {
|
|
|
337
314
|
|
|
338
315
|
this.trigger('linkClick', ev);
|
|
339
316
|
}
|
|
340
|
-
}
|
|
317
|
+
}
|
|
341
318
|
|
|
342
|
-
|
|
319
|
+
sameNode(node1, node2) {
|
|
343
320
|
return node1 && node2 && node1.id === node2.id;
|
|
344
|
-
}
|
|
321
|
+
}
|
|
345
322
|
|
|
346
|
-
|
|
323
|
+
sameLink(link1, link2) {
|
|
347
324
|
return link1 && link2 && link1.sourceId === link2.sourceId && link1.targetId === link2.targetId;
|
|
348
|
-
}
|
|
325
|
+
}
|
|
349
326
|
|
|
350
|
-
|
|
327
|
+
_focusNode(options) {
|
|
351
328
|
this._cleanFocusHighlight();
|
|
352
329
|
|
|
353
|
-
|
|
354
|
-
|
|
330
|
+
const nodeData = this._focusState.node;
|
|
331
|
+
const node = this.models.map.get(nodeData.id);
|
|
355
332
|
node.focus(options);
|
|
356
|
-
}
|
|
333
|
+
}
|
|
357
334
|
|
|
358
|
-
|
|
335
|
+
_focusLink(options) {
|
|
359
336
|
this._cleanFocusHighlight();
|
|
360
337
|
|
|
361
|
-
|
|
362
|
-
|
|
338
|
+
const linkData = this._focusState.link;
|
|
339
|
+
const link = this.models.map.get(`${linkData.sourceId}-${linkData.targetId}`);
|
|
363
340
|
link.focus(options);
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
Sankey.prototype._focusNextNode = function _focusNextNode (direction) {
|
|
367
|
-
if ( direction === void 0 ) direction = 1;
|
|
341
|
+
}
|
|
368
342
|
|
|
369
|
-
|
|
343
|
+
_focusNextNode(direction = 1) {
|
|
344
|
+
const current = this._focusState.node;
|
|
370
345
|
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
346
|
+
const columnIndex = this.columns.findIndex(column => column.find(n => n.id === current.id));
|
|
347
|
+
const columnNodes = this.columns[columnIndex];
|
|
348
|
+
const nodeIndex = columnNodes.findIndex(n => n.id === current.id);
|
|
374
349
|
|
|
375
|
-
|
|
350
|
+
const nextNode = columnNodes[nodeIndex + direction];
|
|
376
351
|
if (nextNode) {
|
|
377
352
|
this._focusState.node = nextNode;
|
|
378
353
|
this._focusNode();
|
|
379
354
|
}
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
Sankey.prototype._focusNextLink = function _focusNextLink (direction) {
|
|
383
|
-
if ( direction === void 0 ) direction = 1;
|
|
355
|
+
}
|
|
384
356
|
|
|
385
|
-
|
|
386
|
-
|
|
357
|
+
_focusNextLink(direction = 1) {
|
|
358
|
+
const node = this._focusState.node;
|
|
359
|
+
const link = this._focusState.link;
|
|
387
360
|
|
|
388
|
-
|
|
389
|
-
|
|
361
|
+
const sourceLinkIndex = node.sourceLinks.findIndex(l => l.sourceId === link.sourceId && l.targetId === link.targetId);
|
|
362
|
+
const targetLinkIndex = node.targetLinks.findIndex(l => l.sourceId === link.sourceId && l.targetId === link.targetId);
|
|
390
363
|
|
|
391
364
|
if (sourceLinkIndex !== -1) {
|
|
392
|
-
|
|
365
|
+
const nextLink = node.sourceLinks[sourceLinkIndex + direction];
|
|
393
366
|
|
|
394
367
|
if (nextLink) {
|
|
395
368
|
this._focusState.link = nextLink;
|
|
396
369
|
this._focusLink();
|
|
397
370
|
}
|
|
398
371
|
} else if (targetLinkIndex !== -1) {
|
|
399
|
-
|
|
372
|
+
const nextLink = node.targetLinks[targetLinkIndex + direction];
|
|
400
373
|
|
|
401
|
-
if (nextLink
|
|
402
|
-
this._focusState.link = nextLink
|
|
374
|
+
if (nextLink) {
|
|
375
|
+
this._focusState.link = nextLink;
|
|
403
376
|
this._focusLink();
|
|
404
377
|
}
|
|
405
378
|
}
|
|
406
|
-
}
|
|
379
|
+
}
|
|
407
380
|
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
381
|
+
_focusSourceNode() {
|
|
382
|
+
const linkData = this._focusState.link;
|
|
383
|
+
const sourceNode = this.models.map.get(linkData.sourceId);
|
|
411
384
|
this._focusState = { node: sourceNode.options.node, link: null };
|
|
412
385
|
this._focusNode();
|
|
413
|
-
}
|
|
386
|
+
}
|
|
414
387
|
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
388
|
+
_focusTargetNode() {
|
|
389
|
+
const linkData = this._focusState.link;
|
|
390
|
+
const targetNode = this.models.map.get(linkData.targetId);
|
|
418
391
|
this._focusState = { node: targetNode.options.node, link: null };
|
|
419
392
|
this._focusNode();
|
|
420
|
-
}
|
|
393
|
+
}
|
|
421
394
|
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
395
|
+
_focusSourceLink() {
|
|
396
|
+
const nodeData = this._focusState.node;
|
|
397
|
+
const sourceLinks = nodeData.sourceLinks;
|
|
398
|
+
const linkData = sourceLinks[0];
|
|
426
399
|
if (linkData) {
|
|
427
400
|
this._focusState.link = linkData;
|
|
428
401
|
this._focusLink();
|
|
429
402
|
}
|
|
430
|
-
}
|
|
403
|
+
}
|
|
431
404
|
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
405
|
+
_focusTargetLink() {
|
|
406
|
+
const nodeData = this._focusState.node;
|
|
407
|
+
const targetLinks = nodeData.targetLinks;
|
|
408
|
+
const linkData = targetLinks[0];
|
|
436
409
|
if (linkData) {
|
|
437
410
|
this._focusState.link = linkData;
|
|
438
411
|
this._focusLink();
|
|
439
412
|
}
|
|
440
|
-
}
|
|
413
|
+
}
|
|
441
414
|
|
|
442
|
-
|
|
415
|
+
_focus() {
|
|
443
416
|
if (!this._skipFocusHighlight) {
|
|
444
417
|
if (this._focusState.link) {
|
|
445
418
|
this._focusLink();
|
|
@@ -449,30 +422,30 @@ export var Sankey = (function (Observable) {
|
|
|
449
422
|
}
|
|
450
423
|
|
|
451
424
|
this._skipFocusHighlight = false;
|
|
452
|
-
}
|
|
425
|
+
}
|
|
453
426
|
|
|
454
|
-
|
|
427
|
+
_blur() {
|
|
455
428
|
this._cleanFocusHighlight();
|
|
456
|
-
}
|
|
429
|
+
}
|
|
457
430
|
|
|
458
|
-
|
|
431
|
+
_onDown() {
|
|
459
432
|
if (!this._hasFocus()) {
|
|
460
433
|
this._skipFocusHighlight = true;
|
|
461
434
|
}
|
|
462
|
-
}
|
|
435
|
+
}
|
|
463
436
|
|
|
464
|
-
|
|
437
|
+
_hasFocus() {
|
|
465
438
|
return this.element.ownerDocument.activeElement === this.element;
|
|
466
|
-
}
|
|
439
|
+
}
|
|
467
440
|
|
|
468
|
-
|
|
469
|
-
this.models.nodes.forEach(
|
|
470
|
-
this.models.links.forEach(
|
|
471
|
-
}
|
|
441
|
+
_cleanFocusHighlight() {
|
|
442
|
+
this.models.nodes.forEach(node => node.blur());
|
|
443
|
+
this.models.links.forEach(link => link.blur());
|
|
444
|
+
}
|
|
472
445
|
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
446
|
+
_keydown(ev) {
|
|
447
|
+
let handler = this['on' + ev.key];
|
|
448
|
+
const rtl = this.options.rtl;
|
|
476
449
|
|
|
477
450
|
if (rtl && ev.key === 'ArrowLeft') {
|
|
478
451
|
handler = this.onArrowRight;
|
|
@@ -483,16 +456,16 @@ export var Sankey = (function (Observable) {
|
|
|
483
456
|
if (handler) {
|
|
484
457
|
handler.call(this, ev);
|
|
485
458
|
}
|
|
486
|
-
}
|
|
459
|
+
}
|
|
487
460
|
|
|
488
|
-
|
|
461
|
+
onEscape(ev) {
|
|
489
462
|
ev.preventDefault();
|
|
490
463
|
|
|
491
464
|
this._focusState = { node: this.firstFocusableNode(), link: null };
|
|
492
465
|
this._focusNode();
|
|
493
|
-
}
|
|
466
|
+
}
|
|
494
467
|
|
|
495
|
-
|
|
468
|
+
onArrowDown(ev) {
|
|
496
469
|
ev.preventDefault();
|
|
497
470
|
|
|
498
471
|
if (this._focusState.link) {
|
|
@@ -500,9 +473,9 @@ export var Sankey = (function (Observable) {
|
|
|
500
473
|
} else {
|
|
501
474
|
this._focusNextNode(1);
|
|
502
475
|
}
|
|
503
|
-
}
|
|
476
|
+
}
|
|
504
477
|
|
|
505
|
-
|
|
478
|
+
onArrowUp(ev) {
|
|
506
479
|
ev.preventDefault();
|
|
507
480
|
|
|
508
481
|
if (this._focusState.link) {
|
|
@@ -510,9 +483,9 @@ export var Sankey = (function (Observable) {
|
|
|
510
483
|
} else {
|
|
511
484
|
this._focusNextNode(-1);
|
|
512
485
|
}
|
|
513
|
-
}
|
|
486
|
+
}
|
|
514
487
|
|
|
515
|
-
|
|
488
|
+
onArrowLeft(ev) {
|
|
516
489
|
ev.preventDefault();
|
|
517
490
|
|
|
518
491
|
if (this._focusState.link) {
|
|
@@ -520,9 +493,9 @@ export var Sankey = (function (Observable) {
|
|
|
520
493
|
} else {
|
|
521
494
|
this._focusTargetLink();
|
|
522
495
|
}
|
|
523
|
-
}
|
|
496
|
+
}
|
|
524
497
|
|
|
525
|
-
|
|
498
|
+
onArrowRight(ev) {
|
|
526
499
|
ev.preventDefault();
|
|
527
500
|
|
|
528
501
|
if (this._focusState.link) {
|
|
@@ -530,121 +503,109 @@ export var Sankey = (function (Observable) {
|
|
|
530
503
|
} else {
|
|
531
504
|
this._focusSourceLink();
|
|
532
505
|
}
|
|
533
|
-
}
|
|
534
|
-
|
|
535
|
-
Sankey.prototype.highlightLinks = function highlightLinks (node, highlight) {
|
|
536
|
-
var this$1 = this;
|
|
506
|
+
}
|
|
537
507
|
|
|
508
|
+
highlightLinks(node, highlight) {
|
|
538
509
|
if (node) {
|
|
539
510
|
this.setLinksInactivityOpacity(highlight.inactiveOpacity);
|
|
540
|
-
node.links.forEach(
|
|
541
|
-
this
|
|
511
|
+
node.links.forEach(link => {
|
|
512
|
+
this.setOpacity(link, highlight.opacity, link.linkOptions.highlight.opacity);
|
|
542
513
|
});
|
|
543
514
|
}
|
|
544
|
-
}
|
|
515
|
+
}
|
|
545
516
|
|
|
546
|
-
|
|
517
|
+
_destroySurface() {
|
|
547
518
|
if (this.surface) {
|
|
548
519
|
this.surface.destroy();
|
|
549
520
|
this.surface = null;
|
|
550
521
|
this._destroySurfaceElement();
|
|
551
522
|
}
|
|
552
|
-
}
|
|
523
|
+
}
|
|
553
524
|
|
|
554
|
-
|
|
525
|
+
_destroyResizeObserver() {
|
|
555
526
|
if (this._resizeObserver) {
|
|
556
527
|
this._resizeObserver.disconnect();
|
|
557
528
|
this._resizeObserver = null;
|
|
558
529
|
}
|
|
559
|
-
}
|
|
530
|
+
}
|
|
560
531
|
|
|
561
|
-
|
|
532
|
+
_initSurfaceElement() {
|
|
562
533
|
if (!this.surfaceElement) {
|
|
563
534
|
this.surfaceElement = document.createElement('div');
|
|
564
535
|
this.element.appendChild(this.surfaceElement);
|
|
565
536
|
}
|
|
566
|
-
}
|
|
537
|
+
}
|
|
567
538
|
|
|
568
|
-
|
|
539
|
+
_destroySurfaceElement() {
|
|
569
540
|
if (this.surfaceElement && this.surfaceElement.parentNode) {
|
|
570
541
|
this.surfaceElement.parentNode.removeChild(this.surfaceElement);
|
|
571
542
|
this.surfaceElement = null;
|
|
572
543
|
}
|
|
573
|
-
}
|
|
544
|
+
}
|
|
574
545
|
|
|
575
|
-
|
|
546
|
+
setOptions(options, theme) {
|
|
576
547
|
this._setOptions(options);
|
|
577
548
|
this._initTheme(theme);
|
|
578
549
|
this._initSurface();
|
|
579
550
|
this._redraw();
|
|
580
|
-
}
|
|
551
|
+
}
|
|
581
552
|
|
|
582
|
-
|
|
553
|
+
_redraw() {
|
|
583
554
|
this.surface.clear();
|
|
584
555
|
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
var height = ref.height;
|
|
588
|
-
this.size = { width: width, height: height };
|
|
556
|
+
const { width, height } = this._getSize();
|
|
557
|
+
this.size = { width, height };
|
|
589
558
|
this.surface.setSize(this.size);
|
|
590
559
|
|
|
591
560
|
this.createVisual();
|
|
592
561
|
|
|
593
562
|
this.surface.draw(this.visual);
|
|
594
|
-
}
|
|
563
|
+
}
|
|
595
564
|
|
|
596
|
-
|
|
565
|
+
_getSize() {
|
|
597
566
|
return this.element.getBoundingClientRect();
|
|
598
|
-
}
|
|
567
|
+
}
|
|
599
568
|
|
|
600
|
-
|
|
569
|
+
createVisual() {
|
|
601
570
|
this.visual = this._render();
|
|
602
|
-
}
|
|
571
|
+
}
|
|
603
572
|
|
|
604
|
-
|
|
573
|
+
titleBox(title, drawingRect) {
|
|
605
574
|
if (!title || title.visible === false || !title.text) {
|
|
606
575
|
return null;
|
|
607
576
|
}
|
|
608
577
|
|
|
609
|
-
|
|
610
|
-
|
|
578
|
+
const titleElement = new Title(Object.assign({}, {drawingRect}, title));
|
|
579
|
+
const titleVisual = titleElement.exportVisual();
|
|
611
580
|
return titleVisual.chartElement.box;
|
|
612
|
-
}
|
|
581
|
+
}
|
|
613
582
|
|
|
614
|
-
|
|
583
|
+
legendBox(options, nodes, drawingRect) {
|
|
615
584
|
if (!options || options.visible === false) {
|
|
616
585
|
return null;
|
|
617
586
|
}
|
|
618
587
|
|
|
619
|
-
|
|
620
|
-
|
|
588
|
+
const legend = new Legend(Object.assign({}, {nodes}, options, {drawingRect}));
|
|
589
|
+
const legendVisual = legend.exportVisual();
|
|
621
590
|
|
|
622
591
|
return legendVisual.chartElement.box;
|
|
623
|
-
}
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
var disableAutoLayout = sankeyOptions.disableAutoLayout;
|
|
633
|
-
var disableKeyboardNavigation = sankeyOptions.disableKeyboardNavigation;
|
|
634
|
-
var rtl = sankeyOptions.rtl;
|
|
635
|
-
var autoLayout = !disableAutoLayout;
|
|
636
|
-
var focusHighlightWidth = ((nodes.focusHighlight || {}).border || {}).width || 0;
|
|
637
|
-
var padding = disableKeyboardNavigation ? 0 : focusHighlightWidth / 2;
|
|
638
|
-
|
|
639
|
-
var sankeyBox = new Box(0, 0, calcOptions.width, calcOptions.height);
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
calculateSankey(calcOptions, sankeyOptions) {
|
|
595
|
+
const { title, legend, data, nodes, labels, nodeColors, disableAutoLayout, disableKeyboardNavigation, rtl } = sankeyOptions;
|
|
596
|
+
const autoLayout = !disableAutoLayout;
|
|
597
|
+
const focusHighlightWidth = ((nodes.focusHighlight || {}).border || {}).width || 0;
|
|
598
|
+
const padding = disableKeyboardNavigation ? 0 : focusHighlightWidth / 2;
|
|
599
|
+
|
|
600
|
+
const sankeyBox = new Box(0, 0, calcOptions.width, calcOptions.height);
|
|
640
601
|
sankeyBox.unpad(padding);
|
|
641
602
|
|
|
642
|
-
|
|
603
|
+
const titleBox = this.titleBox(title, sankeyBox);
|
|
643
604
|
|
|
644
|
-
|
|
605
|
+
let legendArea = sankeyBox.clone();
|
|
645
606
|
|
|
646
607
|
if (titleBox) {
|
|
647
|
-
|
|
608
|
+
const titleHeight = titleBox.height();
|
|
648
609
|
if (title.position === TOP) {
|
|
649
610
|
sankeyBox.unpad({ top: titleHeight });
|
|
650
611
|
legendArea = new Box(0, titleHeight, calcOptions.width, calcOptions.height);
|
|
@@ -654,8 +615,8 @@ export var Sankey = (function (Observable) {
|
|
|
654
615
|
}
|
|
655
616
|
}
|
|
656
617
|
|
|
657
|
-
|
|
658
|
-
|
|
618
|
+
const legendBox = this.legendBox(legend, data.nodes, legendArea);
|
|
619
|
+
const legendPosition = (legend && legend.position) || Legend.prototype.options.position;
|
|
659
620
|
|
|
660
621
|
if (legendBox) {
|
|
661
622
|
if (legendPosition === LEFT) {
|
|
@@ -675,42 +636,39 @@ export var Sankey = (function (Observable) {
|
|
|
675
636
|
}
|
|
676
637
|
}
|
|
677
638
|
|
|
678
|
-
|
|
679
|
-
var calculatedNodes = ref.nodes;
|
|
680
|
-
var circularLinks = ref.circularLinks;
|
|
639
|
+
const { nodes: calculatedNodes, circularLinks } = calculateSankey(Object.assign({}, calcOptions, {offsetX: 0, offsetY: 0, width: sankeyBox.width(), height: sankeyBox.height()}));
|
|
681
640
|
if (circularLinks) {
|
|
682
641
|
console.warn('Circular links detected. Kendo Sankey diagram does not support circular links.');
|
|
683
|
-
return { sankey: { nodes: [], links: [], columns: [[]], circularLinks
|
|
642
|
+
return { sankey: { nodes: [], links: [], columns: [[]], circularLinks }, legendBox, titleBox };
|
|
684
643
|
}
|
|
685
644
|
|
|
686
|
-
|
|
645
|
+
const box = new Box();
|
|
687
646
|
|
|
688
|
-
|
|
689
|
-
|
|
647
|
+
const diagramMinX = calculatedNodes.reduce((acc, node) => Math.min(acc, node.x0), Infinity);
|
|
648
|
+
const diagramMaxX = calculatedNodes.reduce((acc, node) => Math.max(acc, node.x1), 0);
|
|
690
649
|
|
|
691
|
-
calculatedNodes.forEach(
|
|
650
|
+
calculatedNodes.forEach((nodeEl, i) => {
|
|
692
651
|
if (rtl) {
|
|
693
|
-
|
|
694
|
-
var x1 = nodeEl.x1;
|
|
652
|
+
const { x0, x1 } = nodeEl;
|
|
695
653
|
nodeEl.x0 = diagramMaxX - x1;
|
|
696
654
|
nodeEl.x1 = diagramMaxX - x0;
|
|
697
655
|
}
|
|
698
|
-
|
|
699
|
-
|
|
656
|
+
const nodeOps = resolveNodeOptions(nodeEl, nodes, nodeColors, i);
|
|
657
|
+
const nodeInstance = new Node(nodeOps);
|
|
700
658
|
box.wrap(rectToBox(nodeInstance.exportVisual().rawBBox()));
|
|
701
659
|
|
|
702
|
-
|
|
703
|
-
|
|
660
|
+
const labelInstance = new Label(resolveLabelOptions(nodeEl, labels, rtl, diagramMinX, diagramMaxX));
|
|
661
|
+
const labelVisual = labelInstance.exportVisual();
|
|
704
662
|
if (labelVisual) {
|
|
705
663
|
box.wrap(rectToBox(labelVisual.rawBBox()));
|
|
706
664
|
}
|
|
707
665
|
});
|
|
708
666
|
|
|
709
|
-
|
|
710
|
-
|
|
667
|
+
let offsetX = sankeyBox.x1;
|
|
668
|
+
let offsetY = sankeyBox.y1;
|
|
711
669
|
|
|
712
|
-
|
|
713
|
-
|
|
670
|
+
let width = sankeyBox.width() + offsetX;
|
|
671
|
+
let height = sankeyBox.height() + offsetY;
|
|
714
672
|
|
|
715
673
|
width -= box.x2 > sankeyBox.width() ? box.x2 - sankeyBox.width() : 0;
|
|
716
674
|
height -= box.y2 > sankeyBox.height() ? box.y2 - sankeyBox.height() : 0;
|
|
@@ -720,29 +678,29 @@ export var Sankey = (function (Observable) {
|
|
|
720
678
|
|
|
721
679
|
if (autoLayout === false) {
|
|
722
680
|
return {
|
|
723
|
-
sankey: calculateSankey(Object.assign({}, calcOptions, {offsetX
|
|
724
|
-
legendBox
|
|
725
|
-
titleBox
|
|
681
|
+
sankey: calculateSankey(Object.assign({}, calcOptions, {offsetX, offsetY, width, height, autoLayout: false})),
|
|
682
|
+
legendBox,
|
|
683
|
+
titleBox
|
|
726
684
|
};
|
|
727
685
|
}
|
|
728
686
|
|
|
729
687
|
if (this.resize && autoLayout && this.permutation) {
|
|
730
688
|
this.resize = false;
|
|
731
689
|
return {
|
|
732
|
-
sankey: calculateSankey(Object.assign({}, calcOptions, {offsetX
|
|
733
|
-
legendBox
|
|
734
|
-
titleBox
|
|
690
|
+
sankey: calculateSankey(Object.assign({}, calcOptions, {offsetX, offsetY, width, height}, this.permutation)),
|
|
691
|
+
legendBox,
|
|
692
|
+
titleBox
|
|
735
693
|
};
|
|
736
694
|
}
|
|
737
695
|
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
696
|
+
const startColumn = 1;
|
|
697
|
+
const loops = 2;
|
|
698
|
+
const columnsLength = calculateSankey(Object.assign({}, calcOptions, {offsetX, offsetY, width, height, autoLayout: false})).columns.length;
|
|
699
|
+
const results = [];
|
|
742
700
|
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
701
|
+
const permutation = (targetColumnIndex, reverse) => {
|
|
702
|
+
let currPerm = calculateSankey(Object.assign({}, calcOptions, {offsetX, offsetY, width, height, loops: loops, targetColumnIndex, reverse}));
|
|
703
|
+
let crosses = crossesValue(currPerm.links);
|
|
746
704
|
results.push({
|
|
747
705
|
crosses: crosses,
|
|
748
706
|
reverse: reverse,
|
|
@@ -751,66 +709,52 @@ export var Sankey = (function (Observable) {
|
|
|
751
709
|
return crosses === 0;
|
|
752
710
|
};
|
|
753
711
|
|
|
754
|
-
for (
|
|
712
|
+
for (let index = startColumn; index <= columnsLength - 1; index++) {
|
|
755
713
|
if (permutation(index, false) || permutation(index, true)) {
|
|
756
714
|
break;
|
|
757
715
|
}
|
|
758
716
|
}
|
|
759
717
|
|
|
760
|
-
|
|
761
|
-
|
|
718
|
+
const minCrosses = Math.min.apply(null, results.map(r => r.crosses));
|
|
719
|
+
const bestResult = results.find(r => r.crosses === minCrosses);
|
|
762
720
|
this.permutation = { targetColumnIndex: bestResult.targetColumnIndex, reverse: bestResult.reverse };
|
|
763
|
-
|
|
721
|
+
const result = calculateSankey(Object.assign({}, calcOptions, {offsetX, offsetY, width, height}, this.permutation));
|
|
764
722
|
|
|
765
723
|
return {
|
|
766
724
|
sankey: result,
|
|
767
|
-
legendBox
|
|
768
|
-
titleBox
|
|
725
|
+
legendBox,
|
|
726
|
+
titleBox
|
|
769
727
|
};
|
|
770
|
-
}
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
var rtl = sankeyOptions.rtl;
|
|
783
|
-
var disableKeyboardNavigation = sankeyOptions.disableKeyboardNavigation;
|
|
784
|
-
var data = sankeyOptions.data;
|
|
785
|
-
var ref = sankeyContext.size;
|
|
786
|
-
var width = ref.width;
|
|
787
|
-
var height = ref.height;
|
|
788
|
-
|
|
789
|
-
var calcOptions = Object.assign({}, data, {width: width, height: height, nodesOptions: nodesOptions, title: title, legend: legend});
|
|
790
|
-
var ref$1 = this.calculateSankey(calcOptions, sankeyOptions);
|
|
791
|
-
var sankey = ref$1.sankey;
|
|
792
|
-
var titleBox = ref$1.titleBox;
|
|
793
|
-
var legendBox = ref$1.legendBox;
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
_render(options, context) {
|
|
731
|
+
const sankeyOptions = options || this.options;
|
|
732
|
+
const sankeyContext = context || this;
|
|
733
|
+
|
|
734
|
+
const { labels: labelOptions, nodes: nodesOptions, links: linkOptions, nodeColors, title, legend, rtl, disableKeyboardNavigation } = sankeyOptions;
|
|
735
|
+
let data = sankeyOptions.data;
|
|
736
|
+
const { width, height } = sankeyContext.size;
|
|
737
|
+
|
|
738
|
+
const calcOptions = Object.assign({}, data, {width, height, nodesOptions, title, legend});
|
|
739
|
+
const { sankey, titleBox, legendBox } = this.calculateSankey(calcOptions, sankeyOptions);
|
|
794
740
|
if (rtl) {
|
|
795
741
|
toRtl(sankey);
|
|
796
742
|
}
|
|
797
|
-
|
|
798
|
-
var links = sankey.links;
|
|
799
|
-
var columns = sankey.columns;
|
|
743
|
+
const { nodes, links, columns } = sankey;
|
|
800
744
|
|
|
801
|
-
sankeyContext.columns = columns.map(
|
|
802
|
-
|
|
803
|
-
newColumn.sort(
|
|
745
|
+
sankeyContext.columns = columns.map(column => {
|
|
746
|
+
const newColumn = column.slice();
|
|
747
|
+
newColumn.sort((a, b) => a.y0 - b.y0);
|
|
804
748
|
return newColumn;
|
|
805
749
|
});
|
|
806
750
|
|
|
807
|
-
|
|
751
|
+
const visual = new drawing.Group({
|
|
808
752
|
clip: drawing.Path.fromRect(new geometry.Rect([0, 0], [width, height]))
|
|
809
753
|
});
|
|
810
754
|
|
|
811
755
|
if (titleBox) {
|
|
812
|
-
|
|
813
|
-
|
|
756
|
+
const titleElement = new Title(Object.assign({}, title, {drawingRect: titleBox}));
|
|
757
|
+
const titleVisual = titleElement.exportVisual();
|
|
814
758
|
visual.append(titleVisual);
|
|
815
759
|
}
|
|
816
760
|
|
|
@@ -818,25 +762,25 @@ export var Sankey = (function (Observable) {
|
|
|
818
762
|
return visual;
|
|
819
763
|
}
|
|
820
764
|
|
|
821
|
-
|
|
765
|
+
const visualNodes = new Map();
|
|
822
766
|
sankeyContext.nodesVisuals = visualNodes;
|
|
823
767
|
|
|
824
|
-
|
|
768
|
+
const models = {
|
|
825
769
|
nodes: [],
|
|
826
770
|
links: [],
|
|
827
771
|
map: new Map()
|
|
828
772
|
};
|
|
829
773
|
sankeyContext.models = models;
|
|
830
774
|
|
|
831
|
-
|
|
775
|
+
const focusHighlights = [];
|
|
832
776
|
|
|
833
|
-
nodes.forEach(
|
|
834
|
-
|
|
835
|
-
nodeOps.root =
|
|
777
|
+
nodes.forEach((node, i) => {
|
|
778
|
+
const nodeOps = resolveNodeOptions(node, nodesOptions, nodeColors, i);
|
|
779
|
+
nodeOps.root = () => sankeyContext.element;
|
|
836
780
|
nodeOps.navigatable = disableKeyboardNavigation !== true;
|
|
837
781
|
|
|
838
|
-
|
|
839
|
-
|
|
782
|
+
const nodeInstance = new Node(nodeOps);
|
|
783
|
+
const nodeVisual = nodeInstance.exportVisual();
|
|
840
784
|
nodeVisual.links = [];
|
|
841
785
|
nodeVisual.type = NODE;
|
|
842
786
|
|
|
@@ -846,8 +790,8 @@ export var Sankey = (function (Observable) {
|
|
|
846
790
|
nodeVisual.dataItem = Object.assign({}, data.nodes[i],
|
|
847
791
|
{color: nodeOps.color,
|
|
848
792
|
opacity: nodeOps.opacity,
|
|
849
|
-
sourceLinks: node.sourceLinks.map(
|
|
850
|
-
targetLinks: node.targetLinks.map(
|
|
793
|
+
sourceLinks: node.sourceLinks.map(link => ({ sourceId: link.sourceId, targetId: link.targetId, value: link.value })),
|
|
794
|
+
targetLinks: node.targetLinks.map(link => ({ sourceId: link.sourceId, targetId: link.targetId, value: link.value }))});
|
|
851
795
|
visualNodes.set(node.id, nodeVisual);
|
|
852
796
|
|
|
853
797
|
models.nodes.push(nodeInstance);
|
|
@@ -862,22 +806,21 @@ export var Sankey = (function (Observable) {
|
|
|
862
806
|
}
|
|
863
807
|
});
|
|
864
808
|
|
|
865
|
-
|
|
809
|
+
const sortedLinks = links.slice().sort((a, b) => b.value - a.value);
|
|
866
810
|
|
|
867
|
-
|
|
811
|
+
const linksVisuals = [];
|
|
868
812
|
sankeyContext.linksVisuals = linksVisuals;
|
|
869
813
|
|
|
870
|
-
sortedLinks.forEach(
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
resolvedOptions.root = function () { return sankeyContext.element; };
|
|
814
|
+
sortedLinks.forEach(link => {
|
|
815
|
+
const { source, target } = link;
|
|
816
|
+
const sourceNode = visualNodes.get(source.id);
|
|
817
|
+
const targetNode = visualNodes.get(target.id);
|
|
818
|
+
const resolvedOptions = resolveLinkOptions(link, linkOptions, sourceNode, targetNode);
|
|
819
|
+
resolvedOptions.root = () => sankeyContext.element;
|
|
877
820
|
resolvedOptions.navigatable = disableKeyboardNavigation !== true;
|
|
878
821
|
resolvedOptions.rtl = rtl;
|
|
879
|
-
|
|
880
|
-
|
|
822
|
+
const linkInstance = new Link(resolvedOptions);
|
|
823
|
+
const linkVisual = linkInstance.exportVisual();
|
|
881
824
|
|
|
882
825
|
linkVisual.type = LINK;
|
|
883
826
|
linkVisual.dataItem = {
|
|
@@ -892,7 +835,7 @@ export var Sankey = (function (Observable) {
|
|
|
892
835
|
targetNode.links.push(linkVisual);
|
|
893
836
|
|
|
894
837
|
models.links.push(linkInstance);
|
|
895
|
-
models.map.set(
|
|
838
|
+
models.map.set(`${source.id}-${target.id}`, linkInstance);
|
|
896
839
|
|
|
897
840
|
linkInstance.createFocusHighlight();
|
|
898
841
|
|
|
@@ -903,13 +846,13 @@ export var Sankey = (function (Observable) {
|
|
|
903
846
|
visual.append(linkVisual);
|
|
904
847
|
});
|
|
905
848
|
|
|
906
|
-
|
|
907
|
-
|
|
849
|
+
const diagramMinX = nodes.reduce((acc, node) => Math.min(acc, node.x0), Infinity);
|
|
850
|
+
const diagramMaxX = nodes.reduce((acc, node) => Math.max(acc, node.x1), 0);
|
|
908
851
|
|
|
909
|
-
nodes.forEach(
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
852
|
+
nodes.forEach((node) => {
|
|
853
|
+
const textOps = resolveLabelOptions(node, labelOptions, rtl, diagramMinX, diagramMaxX);
|
|
854
|
+
const labelInstance = new Label(textOps);
|
|
855
|
+
const labelVisual = labelInstance.exportVisual();
|
|
913
856
|
|
|
914
857
|
if (labelVisual) {
|
|
915
858
|
visual.append(labelVisual);
|
|
@@ -917,25 +860,25 @@ export var Sankey = (function (Observable) {
|
|
|
917
860
|
});
|
|
918
861
|
|
|
919
862
|
if (legendBox) {
|
|
920
|
-
|
|
921
|
-
|
|
863
|
+
const legendElement = new Legend(Object.assign({}, legend, {rtl, drawingRect: legendBox, nodes}));
|
|
864
|
+
const legendVisual = legendElement.exportVisual();
|
|
922
865
|
visual.append(legendVisual);
|
|
923
866
|
}
|
|
924
867
|
|
|
925
868
|
if (focusHighlights.length !== 0) {
|
|
926
|
-
|
|
927
|
-
focusHighlight.append
|
|
869
|
+
const focusHighlight = new drawing.Group();
|
|
870
|
+
focusHighlight.append(...focusHighlights);
|
|
928
871
|
visual.append(focusHighlight);
|
|
929
872
|
}
|
|
930
873
|
|
|
931
874
|
return visual;
|
|
932
|
-
}
|
|
875
|
+
}
|
|
933
876
|
|
|
934
|
-
|
|
935
|
-
|
|
877
|
+
exportVisual(exportOptions) {
|
|
878
|
+
const options = (exportOptions && exportOptions.options) ?
|
|
936
879
|
deepExtend({}, this.options, exportOptions.options) : this.options;
|
|
937
880
|
|
|
938
|
-
|
|
881
|
+
const context = {
|
|
939
882
|
size: {
|
|
940
883
|
width: defined(exportOptions && exportOptions.width) ? exportOptions.width : this.size.width,
|
|
941
884
|
height: defined(exportOptions && exportOptions.height) ? exportOptions.height : this.size.height
|
|
@@ -943,16 +886,14 @@ export var Sankey = (function (Observable) {
|
|
|
943
886
|
};
|
|
944
887
|
|
|
945
888
|
return this._render(options, context);
|
|
946
|
-
}
|
|
889
|
+
}
|
|
947
890
|
|
|
948
|
-
|
|
891
|
+
_setOptions(options) {
|
|
949
892
|
this.options = deepExtend({}, this.options, options);
|
|
950
|
-
}
|
|
951
|
-
|
|
952
|
-
return Sankey;
|
|
953
|
-
}(Observable));
|
|
893
|
+
}
|
|
894
|
+
}
|
|
954
895
|
|
|
955
|
-
|
|
896
|
+
const highlightOptions = {
|
|
956
897
|
opacity: 1,
|
|
957
898
|
width: 2,
|
|
958
899
|
color: BLACK
|
|
@@ -989,11 +930,7 @@ setDefaultOptions(Sankey, {
|
|
|
989
930
|
border: Object.assign({}, highlightOptions)
|
|
990
931
|
},
|
|
991
932
|
labels: {
|
|
992
|
-
ariaTemplate:
|
|
993
|
-
var node = ref.node;
|
|
994
|
-
|
|
995
|
-
return node.label.text;
|
|
996
|
-
}
|
|
933
|
+
ariaTemplate: ({ node }) => node.label.text
|
|
997
934
|
}
|
|
998
935
|
},
|
|
999
936
|
links: {
|
|
@@ -1007,11 +944,7 @@ setDefaultOptions(Sankey, {
|
|
|
1007
944
|
border: Object.assign({}, highlightOptions)
|
|
1008
945
|
},
|
|
1009
946
|
labels: {
|
|
1010
|
-
ariaTemplate:
|
|
1011
|
-
var link = ref.link;
|
|
1012
|
-
|
|
1013
|
-
return ((link.source.label.text) + " to " + (link.target.label.text));
|
|
1014
|
-
}
|
|
947
|
+
ariaTemplate: ({ link }) => `${link.source.label.text} to ${link.target.label.text}`
|
|
1015
948
|
}
|
|
1016
949
|
},
|
|
1017
950
|
tooltip: {
|