function cashflows_spec_patch() {
return (spec) => {
spec.legends[0].encode.symbols.update.shape = { value: "square" };
spec.legends[0].encode.symbols.update.stroke = null;
spec.legends[0].encode.symbols.update.opacity = { value: 1 };
spec.signals.push({ name: "panOffset", value: 0 });
spec.marks[0].marks[0].signals;
const a = spec.marks[0].marks[0].signals.findIndex(
(d) => d.name == "grid_t_in"
);
const b = spec.marks[0].marks[0].signals.findIndex(
(d) => d.name == "grid_translate_anchor"
);
const c = spec.marks[0].marks[0].signals.findIndex(
(d) => d.name == "grid_zoom_anchor"
);
const d = spec.scales.findIndex((d) => d.name == "concat_0_concat_0_x");
spec.scales[d].domainRaw.signal =
'grid["t_in"] ? [grid["t_in"][0]+panOffset,grid["t_in"][1]+panOffset] : null';
spec.marks[0].marks[0].signals[a].on[2] .update =
'zoomLinear([domain("concat_0_concat_0_x")[0]-panOffset,domain("concat_0_concat_0_x")[1]-panOffset], grid_zoom_anchor.x, grid_zoom_delta)';
spec.marks[0].marks[0].signals[b].on[0] .update =
'{x: x(unit), y: y(unit), extent_x: [domain("concat_0_concat_0_x")[0]-panOffset,domain("concat_0_concat_0_x")[1]-panOffset], extent_y: domain("concat_0_concat_0_y")}';
spec.marks[0].marks[0].signals[c].on[0] .update =
'{x: invert("concat_0_concat_0_x", x(unit))-panOffset, y: invert("concat_0_concat_0_y", y(unit))}';
return spec;
};
}