private renderValueBarGradients()

in packages/timebrush/src/TimeBrush.ts [414:463]


    private renderValueBarGradients() {
        if (this._data) {
            const gradients =
                this.defs.selectAll("linearGradient")
                    .data(this._data);
            gradients.enter()
                .append("linearGradient")
                .attr("id", (d, i) => "rect_gradient_" + i)
                .attr({
                    x1: 0,
                    x2: 0,
                    y1: 1,
                    y2: 0,
                });

            gradients.exit().remove();
            gradients
                .attr("id", (d, i) => "rect_gradient_" + i);

            const stopSel = gradients.selectAll("stop")
                .data((d) => {
                    const stops: any[] = [];
                    const segments = (d.value >= 0) ? d.valueSegments : d.valueSegments.slice().reverse();
                    let offset = 0;
                    segments.forEach((n, i) => {
                        stops.push({
                            offset: (offset + (i > 0 ? .0001 : 0)) + "%",
                            color: n.color,
                        });

                        offset += n.value;

                        if (i < segments.length - 1) {
                            stops.push({
                                offset: offset + "%",
                                color: n.color,
                            });
                        }
                    });
                    return stops;
                });
            stopSel.enter().append("stop");
            stopSel
                .attr({
                    "offset": (d) => d.offset,
                    "stop-color": (d) => d.color,
                });
            stopSel.exit().remove();
        }
    }