Resizing grid template

I am trying to build something where the user uses their own data file to plot something, and therefore I can plot anything on load. I would like to use the FastGridTemplate or the React template for the resizability and moving around, but if you say template.main[0:1, :] = plot when plot is empty (to not take up much space), then when it is populated, it doesn’t expand. I know the docs say that you can’t resize the template gridspec after rendering, but if you need a dynamic resizing layout, you should use something like a column or row that resizes and put it in your gridspec. I tried that, and it isn’t working, nomatter where I put sizing_mode=“stretch_whatever” or height_policy=“max” or responzive=True. Is this possible? Am I just doing it wrong?

Here is a simplified example showing my problem.

import holoviews as hv
import hvplot.pandas  # noqa
import panel as pn
from bokeh.sampledata.iris import flowers

pn.extension(sizing_mode="stretch_width")
hv.extension("bokeh")


chbox = pn.widgets.Checkbox()


@pn.depends(chbox)
def get_plots(val):
    scatter = flowers.hvplot.scatter(x="sepal_length", y="sepal_width", responsive=True, height=300)
    hist = flowers.hvplot.hist("petal_width", responsive=True, height=300)

    if val:
        return pn.Column((scatter + hist).cols(1), height_policy="max")
    else:
        return scatter


template = pn.template.FastGridTemplate()
template.main[0:1, :] = chbox
template.main[1:4, :] = get_plots
template.servable()

When you click on the check box the plot box gets a second plot but it doesn’t get taller, so it just adds a scroll bar. Any advice would super be appreciated!!!

I think resizing the movable grid is impossible in the current code design, but it would be possible with some javascript code. However, it is going to be a hacky solution.

If you don’t specify the height of the plot and put the sizing mode in “stretch_both” it works something like the following

resize

import holoviews as hv
import hvplot.pandas  # noqa
import panel as pn
from bokeh.sampledata.iris import flowers

pn.extension(sizing_mode="stretch_both")
hv.extension("bokeh")


chbox = pn.widgets.Checkbox()


@pn.depends(chbox)
def get_plots(val):
    scatter = flowers.hvplot.scatter(x="sepal_length", y="sepal_width", responsive=True)
    hist = flowers.hvplot.hist("petal_width", responsive=True)

    if val:
        return pn.Column((scatter + hist).cols(1), height_policy="max")
    else:
        return scatter


template = pn.template.FastGridTemplate()
template.main[0:1, :] = chbox
template.main[1:4, :] = get_plots
template.servable()