diff --git a/examples/gallery/apis/stocks_altair.ipynb b/examples/gallery/apis/stocks_altair.ipynb index 1dde0c64f8..5c348231da 100644 --- a/examples/gallery/apis/stocks_altair.ipynb +++ b/examples/gallery/apis/stocks_altair.ipynb @@ -12,7 +12,7 @@ "\n", "from bokeh.sampledata import stocks\n", "\n", - "pn.extension('vega', template='fast-list')" + "pn.extension('vega', template='fast')" ] }, { diff --git a/examples/gallery/apis/stocks_hvplot.ipynb b/examples/gallery/apis/stocks_hvplot.ipynb index 167f380076..caa7013667 100644 --- a/examples/gallery/apis/stocks_hvplot.ipynb +++ b/examples/gallery/apis/stocks_hvplot.ipynb @@ -12,7 +12,7 @@ "\n", "from bokeh.sampledata import stocks\n", "\n", - "pn.extension(template='fast-list')" + "pn.extension(template='fast')" ] }, { diff --git a/examples/gallery/apis/stocks_matplotlib.ipynb b/examples/gallery/apis/stocks_matplotlib.ipynb index ccd79754a0..c92aa67ab5 100644 --- a/examples/gallery/apis/stocks_matplotlib.ipynb +++ b/examples/gallery/apis/stocks_matplotlib.ipynb @@ -14,7 +14,7 @@ "\n", "from bokeh.sampledata import stocks\n", "\n", - "pn.extension(template='fast-list')" + "pn.extension(template='fast')" ] }, { diff --git a/examples/gallery/apis/stocks_plotly.ipynb b/examples/gallery/apis/stocks_plotly.ipynb index b363cd4e7e..e2def8c870 100644 --- a/examples/gallery/apis/stocks_plotly.ipynb +++ b/examples/gallery/apis/stocks_plotly.ipynb @@ -12,7 +12,7 @@ "\n", "from bokeh.sampledata import stocks\n", "\n", - "pn.extension('plotly', template='fast-list')" + "pn.extension('plotly', template='fast')" ] }, { diff --git a/examples/gallery/components/LeafletHeatMap.ipynb b/examples/gallery/components/LeafletHeatMap.ipynb index 41a807d2ab..082518ca4a 100644 --- a/examples/gallery/components/LeafletHeatMap.ipynb +++ b/examples/gallery/components/LeafletHeatMap.ipynb @@ -103,7 +103,7 @@ "metadata": {}, "outputs": [], "source": [ - "url=\"http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_month.csv\"\n", + "url=\"https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_month.csv\"\n", "earthquakes = pd.read_csv(url)\n", "\n", "heatmap = LeafletHeatMap(\n", diff --git a/examples/reference/indicators/Tqdm.ipynb b/examples/reference/indicators/Tqdm.ipynb index 1a56c06ac7..7b09a21572 100644 --- a/examples/reference/indicators/Tqdm.ipynb +++ b/examples/reference/indicators/Tqdm.ipynb @@ -57,10 +57,12 @@ "\n", "def run_loop(*events, timeout=0.2):\n", " for i in tqdm(range(0,10), desc=\"My loop bar\", leave=True, colour='#666666'):\n", - " time.sleep(timeout)\n", + " if pn.state._is_pyodide:\n", + " # time.sleep does not work in pyodide\n", + " np.random.random((10**6, 30)) \n", + " else:\n", + " time.sleep(timeout)\n", " \n", - "run_loop(timeout=0.01)\n", - "\n", "tqdm" ] }, @@ -105,7 +107,11 @@ "def run_nested_loop(*events, timeout=0.05):\n", " for i in tqdm_outer(range(10)):\n", " for j in tqdm_inner(range(10)):\n", - " time.sleep(timeout)\n", + " if pn.state._is_pyodide:\n", + " # time.sleep does not work in pyodide\n", + " np.random.random((10**6, 30)) \n", + " else:\n", + " time.sleep(timeout)\n", " \n", "run_nested_loop(timeout=0.01)\n", "\n", diff --git a/examples/reference/panes/DataFrame.ipynb b/examples/reference/panes/DataFrame.ipynb index 087d2a485b..fd18537922 100644 --- a/examples/reference/panes/DataFrame.ipynb +++ b/examples/reference/panes/DataFrame.ipynb @@ -148,7 +148,12 @@ "source": [ "## Streamz DataFrames\n", "\n", - "In addition to rendering standard pandas `DataFrame` and `Series` types the `DataFrame` pane will also render updating `streamz` types (Note: in a live kernel you should see the dataframe update every 0.5 seconds):" + "In addition to rendering standard pandas `DataFrame` and `Series` types the `DataFrame` pane will also render updating `streamz` types.", + "\n", + "Note:\n", + "\n", + "- In a live kernel you should see the dataframe update every 0.5 seconds.\n", + "- `streamz` does currently not work in Pyodide/PyScript." ] }, { diff --git a/examples/reference/panes/ECharts.ipynb b/examples/reference/panes/ECharts.ipynb index ac03207149..c255e0c608 100644 --- a/examples/reference/panes/ECharts.ipynb +++ b/examples/reference/panes/ECharts.ipynb @@ -100,7 +100,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The ECharts pane also hass support for pyecharts. For example, we can pass a `pyecharts.charts.Bar` chart directly the `ECharts` pane. " + "The ECharts pane also hass support for pyecharts. For example, we can pass a `pyecharts.charts.Bar` chart directly the `ECharts` pane." ] }, { diff --git a/examples/reference/panes/JPG.ipynb b/examples/reference/panes/JPG.ipynb index 4ca3ce0f6c..78a16d2eeb 100644 --- a/examples/reference/panes/JPG.ipynb +++ b/examples/reference/panes/JPG.ipynb @@ -43,7 +43,10 @@ "metadata": {}, "outputs": [], "source": [ - "jpg_pane = pn.pane.JPG('https://www.gstatic.com/webp/gallery/4.sm.jpg')\n", + "jpg_pane = pn.pane.JPG(\n", + " 'https://assets.holoviz.org/panel/samples/jpeg_sample.jpg',\n", + " link_url='https://blog.holoviz.org/panel_0.13.0.html',\n", + " width=500)\n", "\n", "jpg_pane" ] @@ -61,7 +64,10 @@ "metadata": {}, "outputs": [], "source": [ - "jpg_pane.object = 'https://www.gstatic.com/webp/gallery/1.sm.jpg'" + "jpg_pane.param.update(\n", + " object='https://assets.holoviz.org/panel/samples/jpeg_sample2.jpg',\n", + " link_url='https://blog.holoviz.org/panel_0.14.html'\n", + ")" ] } ], diff --git a/examples/reference/panes/PDF.ipynb b/examples/reference/panes/PDF.ipynb index 3a4fa83314..6c0db7bd1d 100644 --- a/examples/reference/panes/PDF.ipynb +++ b/examples/reference/panes/PDF.ipynb @@ -42,9 +42,7 @@ "metadata": {}, "outputs": [], "source": [ - "pdf_pane = pn.pane.PDF(\n", - " 'https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf', width=700, height=1024\n", - ")\n", + "pdf_pane = pn.pane.PDF('https://assets.holoviz.org/panel/samples/pdf_sample.pdf', width=700, height=1000)\n", "\n", "pdf_pane" ] @@ -62,7 +60,7 @@ "metadata": {}, "outputs": [], "source": [ - "pdf_pane.object = 'http://www.africau.edu/images/default/sample.pdf'" + "pdf_pane.object = 'https://assets.holoviz.org/panel/samples/pdf_sample2.pdf'" ] } ], diff --git a/examples/reference/panes/VTKJS.ipynb b/examples/reference/panes/VTKJS.ipynb index 7490859b54..3df2b93ebb 100644 --- a/examples/reference/panes/VTKJS.ipynb +++ b/examples/reference/panes/VTKJS.ipynb @@ -80,7 +80,7 @@ "metadata": {}, "outputs": [], "source": [ - "vtk_pane.object = \"https://github.com/Kitware/vtk-js-datasets/raw/master/data/vtkjs/TBarAssembly.vtkjs\"" + "vtk_pane.object = \"https://raw.githubusercontent.com/Kitware/vtk-js-datasets/master/data/vtkjs/TBarAssembly.vtkjs\"" ] }, { diff --git a/examples/reference/panes/Video.ipynb b/examples/reference/panes/Video.ipynb index e256516671..84496f9d05 100644 --- a/examples/reference/panes/Video.ipynb +++ b/examples/reference/panes/Video.ipynb @@ -47,10 +47,7 @@ "metadata": {}, "outputs": [], "source": [ - "video = pn.pane.Video(\n", - " 'http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4',\n", - " width=640, height=360, loop=True, time=18\n", - ")\n", + "video = pn.pane.Video('https://assets.holoviz.org/panel/samples/video_sample.mp4', width=640, loop=True)\n", "\n", "video" ] diff --git a/examples/reference/widgets/TextToSpeech.ipynb b/examples/reference/widgets/TextToSpeech.ipynb index 07b5d9a39b..f4212237ea 100644 --- a/examples/reference/widgets/TextToSpeech.ipynb +++ b/examples/reference/widgets/TextToSpeech.ipynb @@ -77,6 +77,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "Please note this does not visually display any widget. But you still need to add it to your notebook or server app.\n", + "\n", "As long as `auto_speak` is true setting the `value` will cause it to speak:" ] }, diff --git a/examples/reference/widgets/VideoStream.ipynb b/examples/reference/widgets/VideoStream.ipynb index cea4399eee..fdbdc20deb 100644 --- a/examples/reference/widgets/VideoStream.ipynb +++ b/examples/reference/widgets/VideoStream.ipynb @@ -22,7 +22,7 @@ "\n", "For layout and styling related parameters see the [customization user guide](../../user_guide/Customization.ipynb).\n", "\n", - "* **``format``** (str): Format of the captured images, either 'png' or 'jpeg'\n", + "* **``format``** (str): Format of the captured images, either 'png' (default) or 'jpeg'. Choose `jpeg` if you want the `VideoStream` to take high frequent snapshots as the image size is much smaller.\n", "* **``paused``** (boolean): Whether the video stream is paused\n", "* **``timeout``** (int): Interval between snapshots (if None then snapshot only taken if snapshot method is called)\n", "* **``value``** (string): String representation of the current snapshot\n", diff --git a/scripts/generate_panelite_content.py b/scripts/generate_panelite_content.py index 368da9c12b..3626d70f01 100644 --- a/scripts/generate_panelite_content.py +++ b/scripts/generate_panelite_content.py @@ -14,34 +14,79 @@ EXAMPLES_DIR = PANEL_BASE / 'examples' # Add piplite command to notebooks -DEPENDENCIES = [repr(d) for d in ['panel', 'pyodide-http', 'altair', 'hvplot', 'matplotlib', 'plotly', 'pydeck', 'scikit-learn']] - -nbs = list(EXAMPLES_DIR.glob('*/*/*.ipynb')) + list(EXAMPLES_DIR.glob('*/*.*')) -install = nbformat.v4.new_code_cell(source=f"import piplite\nawait piplite.install([{', '.join(DEPENDENCIES)}])") -del install['id'] - -for nb in nbs: - nbpath = pathlib.Path(nb) - out = (PANEL_BASE / 'lite/files') / nbpath.relative_to(EXAMPLES_DIR) - out.parent.mkdir(parents=True, exist_ok=True) - if nb.suffix == '.ipynb': - with open(nb, encoding='utf-8') as fin: - nb = nbformat.read(fin, 4) - nb['cells'].insert(0, install) - with open(out, 'w', encoding='utf-8') as fout: - nbformat.write(nb, fout) - elif not nb.is_dir(): - shutil.copyfile(nb, out) - -# Copy assets -shutil.copytree( - EXAMPLES_DIR / 'assets', - PANEL_BASE / 'lite' / 'files' / 'assets', - dirs_exist_ok=True -) - -# Download sampledata -def download(): +DEFAULT_DEPENDENCIES = ['panel', 'pyodide-http', 'altair', 'hvplot', 'matplotlib', 'plotly', 'pydeck', 'scikit-learn'] +with open(PANEL_BASE/"scripts"/"panelite_dependencies.json", "r", encoding="utf8") as file: + DEPENDENCIES = json.load(file) +DEPENDENCY_NOT_IMPORTABLE = [ + "streamz", # https://github.com/python-streamz/streamz/issues/467, + "vtk", # https://gitlab.kitware.com/vtk/vtk/-/issues/18806 +] +NOTEBOOK_ISSUES = { + "Getting_Started.ipynb": ["https://github.com/holoviz/panel/issues/4416"], + "reference/panes/DataFrame.ipynb": ["https://github.com/python-streamz/streamz/issues/467"], + "reference/panes/HoloViews.ipynb": ["https://github.com/holoviz/panel/issues/4393"], + "reference/panes/IPyWidget.ipynb": ["https://github.com/holoviz/panel/issues/4394", "https://github.com/widgetti/ipyvolume/issues/427"], + "reference/panes/Matplotlib.ipynb": ["https://github.com/holoviz/panel/issues/4394"], + "reference/panes/Param.ipynb": ["https://github.com/holoviz/panel/issues/4393"], + "reference/panes/Reacton.ipynb": ["https://github.com/holoviz/panel/issues/4394"], + "reference/panes/Str.ipynb": ["https://github.com/holoviz/panel/issues/4396"], + "reference/panes/Streamz.ipynb": ["https://github.com/python-streamz/streamz/issues/467"], + "reference/panes/VTK.ipynb": ["https://gitlab.kitware.com/vtk/vtk/-/issues/18806"], + "reference/panes/VTKVolume.ipynb": ["https://gitlab.kitware.com/vtk/vtk/-/issues/18806"], + "reference/widgets/CrossSelector.ipynb": ["https://github.com/holoviz/panel/issues/4398"], + "reference/widgets/Debugger.ipynb": ["https://github.com/holoviz/panel/issues/4399"], + "reference/widgets/EditableIntSlider.ipynb": ["https://github.com/holoviz/panel/issues/4400"], + "reference/widgets/FileDownload.ipynb": ["https://github.com/holoviz/panel/issues/4401"], + "reference/widgets/IntRangeSlider.ipynb": ["https://github.com/holoviz/panel/issues/4402"], + "reference/widgets/MultiChoice.ipynb": ["https://github.com/holoviz/panel/issues/4403"], + "reference/widgets/RangeSlider.ipynb": ["https://github.com/holoviz/panel/issues/4402"], + "reference/widgets/SpeechToText.ipynb": ["https://github.com/holoviz/panel/issues/4404"], + "reference/widgets/Terminal.ipynb": ["https://github.com/holoviz/panel/issues/4407"], + "gallery/components/VuePdbInput.ipynb": ["https://github.com/holoviz/panel/issues/4417"], +} + +def _get_dependencies(nbpath: pathlib.Path): + key = str(nbpath).split("examples/")[-1] + dependencies = DEPENDENCIES.get(key, DEFAULT_DEPENDENCIES) + dependencies = [repr(d) for d in dependencies if not d in DEPENDENCY_NOT_IMPORTABLE] + return dependencies + + +def _to_source(dependencies): + return f"import piplite\nawait piplite.install([{', '.join(dependencies)}])" + + +def _get_install_code_cell(nbpath: pathlib.Path): + dependencies = _get_dependencies(nbpath) + source = _to_source(dependencies) + install = nbformat.v4.new_code_cell(source=source) + del install['id'] + return install + +def copy_examples(): + nbs = list(EXAMPLES_DIR.glob('*/*/*.ipynb')) + list(EXAMPLES_DIR.glob('*/*.*')) + for nb in nbs: + nbpath = pathlib.Path(nb) + out = (PANEL_BASE / 'lite/files') / nbpath.relative_to(EXAMPLES_DIR) + out.parent.mkdir(parents=True, exist_ok=True) + if nb.suffix == '.ipynb': + with open(nb, encoding='utf-8') as fin: + nb = nbformat.read(fin, 4) + install = _get_install_code_cell(nbpath) + nb['cells'].insert(0, install) + with open(out, 'w', encoding='utf-8') as fout: + nbformat.write(nb, fout) + elif not nb.is_dir(): + shutil.copyfile(nb, out) + +def copy_assets(): + shutil.copytree( + EXAMPLES_DIR / 'assets', + PANEL_BASE / 'lite' / 'files' / 'assets', + dirs_exist_ok=True + ) + +def download_sample_data(): """ Download larger data sets for various Bokeh examples. """ @@ -71,4 +116,7 @@ def download(): print(f"Re-fetching {filename!r} (checksum mismatch)") _download_file(s3, filename, data_dir, progress=False) -download() +if __name__=="__main__": + copy_examples() + copy_assets() + download_sample_data() diff --git a/scripts/panelite_dependencies.json b/scripts/panelite_dependencies.json new file mode 100644 index 0000000000..97b26a0530 --- /dev/null +++ b/scripts/panelite_dependencies.json @@ -0,0 +1,122 @@ +{ + "developer_guide/Developing_Custom_Models.ipynb": [], + "reference/global/Notifications.ipynb": ["panel"], + "reference/indicators/BooleanStatus.ipynb": ["panel"], + "reference/indicators/Dial.ipynb": ["panel"], + "reference/indicators/Gauge.ipynb": ["panel"], + "reference/indicators/LinearGauge.ipynb": ["panel"], + "reference/indicators/LoadingSpinner.ipynb": ["panel"], + "reference/indicators/Number.ipynb": ["panel"], + "reference/indicators/Progress.ipynb": ["panel"], + "reference/indicators/Tqdm.ipynb": ["panel"], + "reference/indicators/Trend.ipynb": ["panel"], + "reference/layouts/Accordion.ipynb": ["panel"], + "reference/layouts/Card.ipynb": ["panel"], + "reference/layouts/Column.ipynb": ["panel"], + "reference/layouts/Divider.ipynb": ["panel"], + "reference/layouts/FlexBox.ipynb": ["panel"], + "reference/layouts/GridBox.ipynb": ["panel"], + "reference/layouts/GridSpec.ipynb": ["panel", "holoviews"], + "reference/layouts/GridStack.ipynb": ["panel", "holoviews"], + "reference/layouts/Row.ipynb": ["panel"], + "reference/layouts/Tabs.ipynb": ["panel"], + "reference/layouts/WidgetBox.ipynb": ["panel"], + "reference/panes/Alert.ipynb": ["panel"], + "reference/panes/Audio.ipynb": ["panel", "scipy"], + "reference/panes/Bokeh.ipynb": ["panel"], + "reference/panes/DataFrame.ipynb": ["panel", "streamz"], + "reference/panes/DeckGL.ipynb": ["panel", "pydeck"], + "reference/panes/ECharts.ipynb": ["panel", "pyecharts"], + "reference/panes/Folium.ipynb": ["panel", "folium"], + "reference/panes/GIF.ipynb": ["panel"], + "reference/panes/HoloViews.ipynb": ["panel", "holoviews", "hvplot", "matplotlib", "plotly", "scipy"], + "reference/panes/HTML.ipynb": ["panel"], + "reference/panes/IPyWidget.ipynb": ["panel", "ipywidgets", "ipyvolume", "ipyleaflet"], + "reference/panes/JSON.ipynb": ["panel"], + "reference/panes/LaTeX.ipynb": ["panel"], + "reference/panes/Markdown.ipynb": ["panel"], + "reference/panes/Matplotlib.ipynb": ["panel", "matplotlib", "ipywidgets", "ipympl"], + "reference/panes/Param.ipynb": ["panel", "hvplot"], + "reference/panes/PDF.ipynb": ["panel"], + "reference/panes/Perspective.ipynb": ["panel"], + "reference/panes/Plotly.ipynb": ["panel", "plotly"], + "reference/panes/PNG.ipynb": ["panel"], + "reference/panes/Reacton.ipynb": ["panel", "reacton", "pandas", "jupyter_bokeh"], + "reference/panes/Str.ipynb": ["panel"], + "reference/panes/Streamz.ipynb": ["panel", "streamz", "altair", "pandas"], + "reference/panes/SVG.ipynb": ["panel"], + "reference/panes/Vega.ipynb": ["panel", "altair", "vega_datasets"], + "reference/panes/Video.ipynb": ["panel"], + "reference/panes/VTK.ipynb": ["panel", "vtk", "pyvista"], + "reference/panes/VTKJS.ipynb": ["panel", "pyodide-http"], + "reference/panes/VTKVolume.ipynb": ["panel", "pyvista"], + "reference/templates/Bootstrap.ipynb": ["panel", "holoviews"], + "reference/templates/FastGridTemplate.ipynb": ["panel", "holoviews"], + "reference/templates/FastListTemplate.ipynb": ["panel", "holoviews"], + "reference/templates/GoldenLayout.ipynb": ["panel", "holoviews"], + "reference/templates/Material.ipynb": ["panel", "holoviews"], + "reference/templates/React.ipynb": ["panel", "holoviews"], + "reference/templates/Vanilla.ipynb": ["panel", "holoviews"], + "reference/widgets/Ace.ipynb": ["panel"], + "reference/widgets/ArrayInput.ipynb": ["panel"], + "reference/widgets/AutocompleteInput.ipynb": ["panel"], + "reference/widgets/Button.ipynb": ["panel"], + "reference/widgets/Checkbox.ipynb": ["panel"], + "reference/widgets/CheckBoxGroup.ipynb": ["panel"], + "reference/widgets/CheckButtonGroup.ipynb": ["panel"], + "reference/widgets/ColorPicker.ipynb": ["panel"], + "reference/widgets/CrossSelector.ipynb": ["panel"], + "reference/widgets/DataFrame.ipynb": ["panel"], + "reference/widgets/DatePicker.ipynb": ["panel"], + "reference/widgets/DateRangeSlider.ipynb": ["panel"], + "reference/widgets/DateSlider.ipynb": ["panel"], + "reference/widgets/DatetimeInput.ipynb": ["panel"], + "reference/widgets/DatetimePicker.ipynb": ["panel"], + "reference/widgets/DatetimeRangeInput.ipynb": ["panel"], + "reference/widgets/DatetimeRangePicker.ipynb": ["panel"], + "reference/widgets/DatetimeRangeSlider.ipynb": ["panel"], + "reference/widgets/Debugger.ipynb": ["panel"], + "reference/widgets/DiscretePlayer.ipynb": ["panel"], + "reference/widgets/DiscreteSlider.ipynb": ["panel"], + "reference/widgets/EditableFloatSlider.ipynb": ["panel"], + "reference/widgets/EditableIntSlider.ipynb": ["panel"], + "reference/widgets/EditableRangeSlider.ipynb": ["panel"], + "reference/widgets/FileDownload.ipynb": ["panel", "pandas"], + "reference/widgets/FileInput.ipynb": ["panel"], + "reference/widgets/FileSelector.ipynb": ["panel"], + "reference/widgets/FloatInput.ipynb": ["panel"], + "reference/widgets/FloatSlider.ipynb": ["panel"], + "reference/widgets/IntInput.ipynb": ["panel"], + "reference/widgets/IntRangeSlider.ipynb": ["panel"], + "reference/widgets/IntSlider.ipynb": ["panel"], + "reference/widgets/JSONEditor.ipynb": ["panel"], + "reference/widgets/LiteralInput.ipynb": ["panel"], + "reference/widgets/MenuButton.ipynb": ["panel"], + "reference/widgets/MultiChoice.ipynb": ["panel"], + "reference/widgets/MultiSelect.ipynb": ["panel"], + "reference/widgets/PasswordInput.ipynb": ["panel"], + "reference/widgets/Player.ipynb": ["panel"], + "reference/widgets/RadioBoxGroup.ipynb": ["panel"], + "reference/widgets/RadioButtonGroup.ipynb": ["panel"], + "reference/widgets/RangeSlider.ipynb": ["panel"], + "reference/widgets/Select.ipynb": ["panel"], + "reference/widgets/SpeechToText.ipynb": ["panel"], + "reference/widgets/StaticText.ipynb": ["panel"], + "reference/widgets/Tabulator.ipynb": ["panel", "pandas"], + "reference/widgets/Terminal.ipynb": ["panel"], + "reference/widgets/TextAreaInput.ipynb": ["panel"], + "reference/widgets/TextEditor.ipynb": ["panel"], + "reference/widgets/TextInput.ipynb": ["panel"], + "reference/widgets/TextToSpeech.ipynb": ["panel"], + "reference/widgets/Toggle.ipynb": ["panel"], + "reference/widgets/ToggleGroup.ipynb": ["panel"], + "reference/widgets/VideoStream.ipynb": ["panel"], + "gallery/apis/stocks_altair.ipynb": ["panel"], + "gallery/apis/stocks_hvplot.ipynb": ["panel", "hvplot"], + "gallery/apis/stocks_matplotlib.ipynb": ["panel"], + "gallery/apis/stocks_plotly.ipynb": ["panel", "plotly"], + "gallery/components/CanvasDraw.ipynb": ["panel"], + "gallery/components/LeafletHeatMap.ipynb": ["panel"], + "gallery/components/MaterialUI.ipynb": ["panel"], + "gallery/components/VuePdbInput.ipynb": ["panel", "pyodide-http"] +}