Widget now works in Shiny and with several widgets on one page; each widget sends its boundary to input$<outputId>_coords
Fixed drawing bugs: clicking near the line no longer corrupts the spline, points can no longer be dragged past their neighbours, and touch input works
Shading outside the first/last point now matches how create_data() extends the boundary
create_data() no longer returns an empty data frame when gap removes no points
create_data(type = "normal") now respects seed
create_data() gains xlim and ylim to set the sampling region, and gives a clear error for an unknown type, a negative gap, or a flat boundary with no ylim
add_noise_vars() now works for n_vars of 0 or 1 and gains a seed argument