solara 1.29.1__tar.gz → 1.30.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {solara-1.29.1 → solara-1.30.1}/PKG-INFO +8 -7
- {solara-1.29.1 → solara-1.30.1}/README.md +4 -4
- {solara-1.29.1 → solara-1.30.1}/pyproject.toml +1 -1
- {solara-1.29.1 → solara-1.30.1}/solara/__init__.py +5 -5
- {solara-1.29.1 → solara-1.30.1}/solara/__main__.py +6 -2
- {solara-1.29.1 → solara-1.30.1}/solara/autorouting.py +88 -56
- {solara-1.29.1 → solara-1.30.1}/solara/cache.py +2 -2
- {solara-1.29.1 → solara-1.30.1}/solara/checks.html +1 -1
- {solara-1.29.1 → solara-1.30.1}/solara/components/__init__.py +1 -1
- {solara-1.29.1 → solara-1.30.1}/solara/components/applayout.py +5 -5
- {solara-1.29.1 → solara-1.30.1}/solara/components/button.py +4 -4
- {solara-1.29.1 → solara-1.30.1}/solara/components/card.py +1 -2
- {solara-1.29.1 → solara-1.30.1}/solara/components/component_vue.py +9 -8
- {solara-1.29.1 → solara-1.30.1}/solara/components/cross_filter.py +6 -7
- {solara-1.29.1 → solara-1.30.1}/solara/components/datatable.py +2 -3
- {solara-1.29.1 → solara-1.30.1}/solara/components/figure_altair.py +1 -1
- {solara-1.29.1 → solara-1.30.1}/solara/components/file_download.py +2 -2
- {solara-1.29.1 → solara-1.30.1}/solara/components/file_drop.py +76 -33
- {solara-1.29.1 → solara-1.30.1}/solara/components/file_drop.vue +24 -10
- {solara-1.29.1 → solara-1.30.1}/solara/components/head.py +1 -2
- {solara-1.29.1 → solara-1.30.1}/solara/components/head_tag.py +2 -3
- {solara-1.29.1 → solara-1.30.1}/solara/components/image.py +1 -1
- {solara-1.29.1 → solara-1.30.1}/solara/components/link.py +3 -4
- {solara-1.29.1 → solara-1.30.1}/solara/components/meta.py +1 -1
- {solara-1.29.1 → solara-1.30.1}/solara/components/misc.py +5 -9
- {solara-1.29.1 → solara-1.30.1}/solara/datatypes.py +2 -2
- {solara-1.29.1 → solara-1.30.1}/solara/hooks/use_reactive.py +2 -2
- {solara-1.29.1 → solara-1.30.1}/solara/lab/components/confirmation_dialog.py +1 -1
- {solara-1.29.1 → solara-1.30.1}/solara/lab/components/tabs.py +6 -6
- {solara-1.29.1 → solara-1.30.1}/solara/reactive.py +1 -1
- {solara-1.29.1 → solara-1.30.1}/solara/routing.py +9 -8
- {solara-1.29.1 → solara-1.30.1}/solara/scope/__init__.py +3 -2
- {solara-1.29.1 → solara-1.30.1}/solara/server/app.py +44 -1
- {solara-1.29.1 → solara-1.30.1}/solara/server/assets/style.css +6 -0
- solara-1.30.1/solara/server/esm.py +69 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/kernel_context.py +78 -7
- {solara-1.29.1 → solara-1.30.1}/solara/server/patch.py +3 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/server.py +3 -3
- {solara-1.29.1 → solara-1.30.1}/solara/server/settings.py +1 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/starlette.py +66 -33
- {solara-1.29.1 → solara-1.30.1}/solara/server/static/solara_bootstrap.py +1 -1
- {solara-1.29.1 → solara-1.30.1}/solara/server/templates/solara.html.j2 +62 -42
- {solara-1.29.1 → solara-1.30.1}/solara/tasks.py +1 -6
- {solara-1.29.1 → solara-1.30.1}/solara/util.py +23 -1
- {solara-1.29.1 → solara-1.30.1}/solara/website/assets/custom.css +56 -0
- solara-1.30.1/solara/website/components/__init__.py +5 -0
- solara-1.30.1/solara/website/components/algolia_api.vue +157 -0
- solara-1.30.1/solara/website/components/docs.py +118 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/components/header.py +20 -10
- {solara-1.29.1 → solara-1.30.1}/solara/website/components/hero.py +1 -1
- solara-1.30.1/solara/website/components/markdown.py +30 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/pages/__init__.py +234 -20
- {solara-1.29.1 → solara-1.30.1}/solara/website/pages/apps/jupyter-dashboard-1.py +1 -1
- {solara-1.29.1 → solara-1.30.1}/solara/website/pages/apps/multipage/__init__.py +1 -1
- {solara-1.29.1 → solara-1.30.1}/solara/website/pages/apps/multipage/page2.py +1 -1
- {solara-1.29.1 → solara-1.30.1}/solara/website/pages/apps/scatter.py +21 -7
- solara-1.30.1/solara/website/pages/changelog/__init__.py +8 -0
- solara-1.29.1/solara/website/pages/docs/content/95-changelog.md → solara-1.30.1/solara/website/pages/changelog/changelog.md +43 -2
- solara-1.30.1/solara/website/pages/contact/__init__.py +8 -0
- solara-1.30.1/solara/website/pages/documentation/__init__.py +184 -0
- {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/advanced}/__init__.py +2 -2
- solara-1.30.1/solara/website/pages/documentation/advanced/content/00-overview.md +1 -0
- {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/advanced}/content/10-howto/00-overview.md +5 -0
- solara-1.29.1/solara/website/pages/docs/content/10-howto/20-multipage.md → solara-1.30.1/solara/website/pages/documentation/advanced/content/10-howto/10-multipage.md +9 -5
- solara-1.29.1/solara/website/pages/docs/content/10-howto/30-layout.md → solara-1.30.1/solara/website/pages/documentation/advanced/content/10-howto/20-layout.md +26 -21
- solara-1.29.1/solara/website/pages/docs/content/10-howto/50-testing.md → solara-1.30.1/solara/website/pages/documentation/advanced/content/10-howto/30-testing.md +5 -0
- solara-1.29.1/solara/website/pages/docs/content/10-howto/51-debugging.md → solara-1.30.1/solara/website/pages/documentation/advanced/content/10-howto/31-debugging.md +4 -1
- solara-1.29.1/solara/website/pages/docs/content/10-howto/80-embed.md → solara-1.30.1/solara/website/pages/documentation/advanced/content/10-howto/40-embed.md +7 -1
- solara-1.29.1/solara/website/pages/docs/content/10-howto/ipywidget_libraries.md → solara-1.30.1/solara/website/pages/documentation/advanced/content/10-howto/50-ipywidget_libraries.md +4 -0
- solara-1.30.1/solara/website/pages/documentation/advanced/content/20-understanding/00-introduction.md +10 -0
- {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/advanced}/content/20-understanding/05-ipywidgets.md +5 -0
- {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/advanced}/content/20-understanding/06-ipyvuetify.md +5 -1
- {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/advanced}/content/20-understanding/10-reacton.md +4 -0
- {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/advanced}/content/20-understanding/12-reacton-basics.md +5 -1
- {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/advanced}/content/20-understanding/15-anatomy.md +6 -2
- solara-1.30.1/solara/website/pages/documentation/advanced/content/20-understanding/17-rules-of-hooks.md +7 -0
- {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/advanced}/content/20-understanding/18-containers.md +9 -3
- {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/advanced}/content/20-understanding/20-solara.md +5 -0
- {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/advanced}/content/20-understanding/40-routing.md +13 -9
- {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/advanced}/content/20-understanding/50-solara-server.md +6 -1
- {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/advanced}/content/20-understanding/60-voila.md +5 -0
- {solara-1.29.1/solara/website/pages/docs/content/50-enterprise → solara-1.30.1/solara/website/pages/documentation/advanced/content/30-enterprise}/10-oauth.md +7 -3
- {solara-1.29.1/solara/website/pages/docs/content/10-howto → solara-1.30.1/solara/website/pages/documentation/advanced/content/40-development}/01-contribute.md +9 -5
- {solara-1.29.1/solara/website/pages/docs/content/90-development → solara-1.30.1/solara/website/pages/documentation/advanced/content/40-development}/10-setup.md +6 -2
- solara-1.30.1/solara/website/pages/documentation/api/__init__.py +19 -0
- solara-1.30.1/solara/website/pages/documentation/api/cross_filter/__init__.py +9 -0
- solara-1.30.1/solara/website/pages/documentation/api/hooks/__init__.py +9 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_effect.md +3 -3
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_effect.py +2 -1
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_memo.md +2 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_memo.py +2 -1
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_reactive.py +1 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_state.py +1 -2
- solara-1.30.1/solara/website/pages/documentation/api/routing/__init__.py +9 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/routing}/generate_routes.py +1 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/routing}/generate_routes_directory.py +1 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/routing}/use_route.py +2 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/routing}/use_router.py +1 -2
- solara-1.30.1/solara/website/pages/documentation/api/utilities/__init__.py +9 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/utilities}/component_vue.py +1 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/utilities}/computed.py +2 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/utilities}/display.py +1 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/utilities}/get_kernel_id.py +2 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/utilities}/get_session_id.py +2 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/utilities}/on_kernel_start.py +9 -3
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/utilities}/reactive.py +1 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/utilities}/widget.py +2 -2
- solara-1.30.1/solara/website/pages/documentation/components/__init__.py +12 -0
- solara-1.30.1/solara/website/pages/documentation/components/advanced/__init__.py +9 -0
- solara-1.30.1/solara/website/pages/documentation/components/data/__init__.py +9 -0
- solara-1.30.1/solara/website/pages/documentation/components/enterprise/__init__.py +9 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/enterprise}/avatar.py +1 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/enterprise}/avatar_menu.py +1 -2
- solara-1.30.1/solara/website/pages/documentation/components/input/__init__.py +9 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/input}/checkbox.py +1 -2
- solara-1.30.1/solara/website/pages/documentation/components/input/file_drop.py +75 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/input}/input.py +1 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/input}/select.py +1 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/input}/slider.py +1 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/input}/switch.py +1 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/input}/togglebuttons.py +1 -2
- solara-1.30.1/solara/website/pages/documentation/components/lab/__init__.py +9 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/lab}/chat.py +2 -3
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/lab}/cookies_headers.py +1 -1
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/lab}/input_date.py +1 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/lab}/menu.py +1 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/lab}/task.py +1 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/lab}/theming.py +1 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/lab}/use_task.py +1 -2
- solara-1.30.1/solara/website/pages/documentation/components/layout/__init__.py +9 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/app_bar.py +1 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/app_bar_title.py +1 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/card.py +1 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/card_actions.py +1 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/griddraggable.py +1 -1
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/gridfixed.py +1 -1
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/hbox.py +1 -1
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/vbox.py +1 -1
- solara-1.30.1/solara/website/pages/documentation/components/output/__init__.py +9 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/output}/file_download.py +1 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/output}/image.py +1 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/output}/tooltip.py +1 -2
- solara-1.30.1/solara/website/pages/documentation/components/page/__init__.py +9 -0
- solara-1.30.1/solara/website/pages/documentation/components/status/__init__.py +9 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/status}/error.py +3 -3
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/status}/info.py +3 -3
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/status}/progress.py +1 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/status}/spinner.py +1 -2
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/status}/success.py +3 -3
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/status}/warning.py +3 -3
- solara-1.30.1/solara/website/pages/documentation/components/viz/__init__.py +9 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/viz}/plotly.py +1 -0
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/__init__.py +3 -43
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/general/custom_storage.py +1 -1
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/general/deploy_model.py +3 -3
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/general/login_oauth.py +1 -1
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/general/vue_component.py +1 -2
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/libraries/altair.py +2 -3
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/libraries/ipyleaflet_advanced.py +1 -1
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/utilities/countdown_timer.py +1 -1
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/visualization/plotly.py +1 -2
- solara-1.30.1/solara/website/pages/documentation/faq/__init__.py +12 -0
- {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/faq}/content/99-faq.md +4 -1
- solara-1.30.1/solara/website/pages/documentation/getting_started/__init__.py +9 -0
- solara-1.29.1/solara/website/pages/docs/content/03-quickstart.md → solara-1.30.1/solara/website/pages/documentation/getting_started/content/00-quickstart.md +7 -2
- solara-1.29.1/solara/website/pages/docs/content/00-introduction.md → solara-1.30.1/solara/website/pages/documentation/getting_started/content/01-introduction.md +20 -16
- {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/getting_started}/content/02-installing.md +5 -1
- solara-1.30.1/solara/website/pages/documentation/getting_started/content/04-tutorials/00-overview.md +14 -0
- {solara-1.29.1/solara/website/pages/docs/content/04-tutorial → solara-1.30.1/solara/website/pages/documentation/getting_started/content/04-tutorials}/20-web-app.md +9 -4
- {solara-1.29.1/solara/website/pages/docs/content/04-tutorial → solara-1.30.1/solara/website/pages/documentation/getting_started/content/04-tutorials}/30-ipywidgets.md +13 -9
- {solara-1.29.1/solara/website/pages/docs/content/04-tutorial → solara-1.30.1/solara/website/pages/documentation/getting_started/content/04-tutorials}/40-streamlit.md +17 -12
- {solara-1.29.1/solara/website/pages/docs/content/04-tutorial → solara-1.30.1/solara/website/pages/documentation/getting_started/content/04-tutorials}/50-dash.md +7 -3
- {solara-1.29.1/solara/website/pages/docs/content/04-tutorial → solara-1.30.1/solara/website/pages/documentation/getting_started/content/04-tutorials}/_data_science.ipynb +5 -5
- solara-1.30.1/solara/website/pages/documentation/getting_started/content/05-fundamentals/00-overview.md +11 -0
- {solara-1.29.1/solara/website/pages/docs/content/07-fundamentals → solara-1.30.1/solara/website/pages/documentation/getting_started/content/05-fundamentals}/10-components.md +7 -2
- {solara-1.29.1/solara/website/pages/docs/content/07-fundamentals → solara-1.30.1/solara/website/pages/documentation/getting_started/content/05-fundamentals}/50-state-management.md +8 -3
- solara-1.30.1/solara/website/pages/documentation/getting_started/content/06-reference/00-overview.md +3 -0
- {solara-1.29.1/solara/website/pages/docs/content/15-reference → solara-1.30.1/solara/website/pages/documentation/getting_started/content/06-reference}/40-static_files.md +4 -0
- {solara-1.29.1/solara/website/pages/docs/content/15-reference → solara-1.30.1/solara/website/pages/documentation/getting_started/content/06-reference}/41-asset-files.md +5 -1
- {solara-1.29.1/solara/website/pages/docs/content/15-reference → solara-1.30.1/solara/website/pages/documentation/getting_started/content/06-reference}/60-static-site-generation.md +5 -1
- {solara-1.29.1/solara/website/pages/docs/content/15-reference → solara-1.30.1/solara/website/pages/documentation/getting_started/content/06-reference}/70-search.md +5 -1
- {solara-1.29.1/solara/website/pages/docs/content/15-reference → solara-1.30.1/solara/website/pages/documentation/getting_started/content/06-reference}/80-reloading.md +7 -3
- {solara-1.29.1/solara/website/pages/docs/content/15-reference → solara-1.30.1/solara/website/pages/documentation/getting_started/content/06-reference}/90-notebook-support.md +4 -1
- {solara-1.29.1/solara/website/pages/docs/content/15-reference → solara-1.30.1/solara/website/pages/documentation/getting_started/content/06-reference}/95-caching.md +6 -1
- solara-1.30.1/solara/website/pages/documentation/getting_started/content/07-deploying/00-overview.md +7 -0
- {solara-1.29.1/solara/website/pages/docs/content/30-deploying → solara-1.30.1/solara/website/pages/documentation/getting_started/content/07-deploying}/10-self-hosted.md +7 -3
- {solara-1.29.1/solara/website/pages/docs/content/30-deploying → solara-1.30.1/solara/website/pages/documentation/getting_started/content/07-deploying}/20-cloud-hosted.md +5 -1
- solara-1.30.1/solara/website/pages/documentation/getting_started/content/80-what-is-lab.md +7 -0
- {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/getting_started}/content/90-troubleshoot.md +4 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/pages/showcase/__init__.py +1 -1
- {solara-1.29.1 → solara-1.30.1}/solara/website/pages/showcase/domino_code_assist.py +1 -1
- {solara-1.29.1 → solara-1.30.1}/solara/website/pages/showcase/solara_dev.py +1 -1
- solara-1.30.1/solara/website/public/social/discord.svg +1 -0
- solara-1.30.1/solara/website/public/social/github.svg +1 -0
- solara-1.30.1/solara/website/public/social/twitter.svg +3 -0
- {solara-1.29.1 → solara-1.30.1}/tests/integration/api_test.py +6 -6
- {solara-1.29.1 → solara-1.30.1}/tests/integration/enterprise/oauth_test.py +4 -4
- {solara-1.29.1 → solara-1.30.1}/tests/integration/file_download_test.py +1 -1
- {solara-1.29.1 → solara-1.30.1}/tests/integration/router_test.py +3 -3
- {solara-1.29.1 → solara-1.30.1}/tests/integration/server_test.py +61 -1
- {solara-1.29.1 → solara-1.30.1}/tests/unit/autorouting_test.py +64 -11
- solara-1.30.1/tests/unit/reload_test.py +56 -0
- solara-1.30.1/tests/unit/solara_test_apps/kernel_start.py +14 -0
- solara-1.30.1/tests/unit/solara_test_apps/multipage/01-home.py +3 -0
- solara-1.30.1/tests/unit/solara_test_apps/multipage/02-my_fruit.py +4 -0
- solara-1.30.1/tests/unit/solara_test_apps/multipage/04-a_directory/01-not-an-app.py +3 -0
- solara-1.30.1/tests/unit/solara_test_apps/single_file_routes.py +25 -0
- solara-1.29.1/solara/server/esm.py +0 -45
- solara-1.29.1/solara/website/components/__init__.py +0 -4
- solara-1.29.1/solara/website/pages/api/__init__.py +0 -292
- solara-1.29.1/solara/website/pages/api/default_layout.py +0 -16
- solara-1.29.1/solara/website/pages/api/file_drop.py +0 -36
- solara-1.29.1/solara/website/pages/docs/content/04-tutorial/00-overview.md +0 -9
- solara-1.29.1/solara/website/pages/docs/content/07-fundamentals/00-overview.md +0 -7
- solara-1.29.1/solara/website/pages/docs/content/15-reference/00-overview.md +0 -6
- solara-1.29.1/solara/website/pages/docs/content/20-understanding/00-introduction.md +0 -4
- solara-1.29.1/solara/website/pages/docs/content/20-understanding/17-rules-of-hooks.md +0 -3
- solara-1.29.1/solara/website/pages/docs/content/30-deploying/00-overview.md +0 -3
- solara-1.29.1/solara/website/pages/docs/content/lab/00-what-is-lab.md +0 -3
- solara-1.29.1/tests/unit/solara_test_apps/multipage/01-home.py +0 -3
- solara-1.29.1/tests/unit/solara_test_apps/multipage/02-my_fruit.py +0 -4
- solara-1.29.1/tests/unit/solara_test_apps/multipage/04-a_directory/01-not-an-app.py +0 -3
- {solara-1.29.1 → solara-1.30.1}/.gitignore +0 -0
- {solara-1.29.1 → solara-1.30.1}/LICENSE +0 -0
- {solara-1.29.1 → solara-1.30.1}/prefix/etc/jupyter/jupyter_notebook_config.d/solara.json +0 -0
- {solara-1.29.1 → solara-1.30.1}/prefix/etc/jupyter/jupyter_server_config.d/solara.json +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/alias.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/checks.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/comm.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/alert.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/checkbox.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/code_highlight_css.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/code_highlight_css.vue +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/columns.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/dataframe.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/datatable.vue +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/details.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/download.vue +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/echarts.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/echarts.vue +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/file_browser.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/file_list_widget.vue +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/head_tag.vue +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/input.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/markdown.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/markdown_editor.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/markdown_editor.vue +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/matplotlib.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/pivot_table.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/pivot_table.vue +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/progress.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/select.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/select.vue +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/slider.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/slider_date.vue +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/spinner-solara.vue +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/spinner.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/sql_code.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/sql_code.vue +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/style.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/switch.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/tab_navigation.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/title.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/title.vue +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/togglebuttons.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/components/tooltip.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/express.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/hooks/__init__.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/hooks/dataframe.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/hooks/misc.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/hooks/use_thread.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/kitchensink.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/lab/__init__.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/lab/components/__init__.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/lab/components/chat.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/lab/components/cross_filter.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/lab/components/input_date.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/lab/components/menu.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/lab/components/menu.vue +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/lab/components/theming.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/lab/components/theming.vue +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/lab/hooks/__init__.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/lab/hooks/dataframe.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/lab/toestand.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/lab/utils/__init__.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/lab/utils/cookies.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/lab/utils/dataframe.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/lab/utils/headers.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/layout.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/minisettings.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/py.typed +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/scope/types.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/__init__.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/assets/custom.css +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/assets/custom.js +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/assets/favicon.png +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/assets/favicon.svg +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/assets/theme-dark.css +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/assets/theme-light.css +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/assets/theme.js +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/cdn_helper.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/fastapi.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/flask.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/jupyter/__init__.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/jupyter/cdn_handler.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/jupyter/server_extension.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/jupytertools.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/kernel.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/reload.py +2 -2
- {solara-1.29.1 → solara-1.30.1}/solara/server/shell.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/static/ansi.js +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/static/highlight-dark.css +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/static/highlight.css +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/static/main-vuetify.js +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/static/main.js +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/static/sun.svg +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/static/webworker.js +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/telemetry.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/templates/index.html.j2 +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/templates/loader-plain.css +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/templates/loader-plain.html +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/templates/loader-solara.css +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/templates/loader-solara.html +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/templates/plain.html +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/threaded.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/utils.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/server/websocket.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/settings.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/template/button.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/template/markdown.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/template/portal/.flake8 +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/template/portal/.pre-commit-config.yaml +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/template/portal/LICENSE +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/template/portal/Procfile +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/template/portal/mypy.ini +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/template/portal/pyproject.toml +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/__init__.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/components/__init__.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/components/article.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/components/data.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/components/header.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/components/layout.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/content/articles/equis-in-vidi.md +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/content/articles/substiterat-vati.md +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/data.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/pages/__init__.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/pages/article/__init__.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/pages/tabular.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/pages/viz/__init__.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/pages/viz/overview.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/test/__init__.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/test/pytest_plugin.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/toestand.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/__init__.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/assets/images/logo-small.png +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/assets/images/logo.svg +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/assets/images/logo_white.svg +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/assets/theme.js +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/components/algolia.vue +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/components/mailchimp.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/components/mailchimp.vue +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/components/notebook.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/pages/apps/__init__.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/pages/apps/authorization/__init__.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/pages/apps/authorization/admin.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/pages/apps/authorization/users.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/pages/apps/layout-demo.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/pages/apps/multipage/page1.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/pages/apps/scrolling.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/pages/apps/tutorial-streamlit.py +0 -0
- /solara-1.29.1/solara/website/pages/docs/content/99-contact.md → /solara-1.30.1/solara/website/pages/contact/contact.md +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/pages/doc_use_download.py +0 -0
- {solara-1.29.1/solara/website/pages/docs/content/50-enterprise → solara-1.30.1/solara/website/pages/documentation/advanced/content/30-enterprise}/00-overview.md +0 -0
- /solara-1.29.1/solara/website/pages/docs/content/__init__.py → /solara-1.30.1/solara/website/pages/documentation/advanced/content/40-development/00-overview.md +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/cross_filter}/cross_filter_dataframe.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/cross_filter}/cross_filter_report.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/cross_filter}/cross_filter_select.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/cross_filter}/cross_filter_slider.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_cross_filter.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_dark_effective.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_exception.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_previous.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_state_or_update.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_thread.md +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_thread.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_trait_observe.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/routing}/resolve_path.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/routing}/route.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/utilities}/memoize.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/advanced}/link.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/advanced}/meta.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/advanced}/style.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components}/common.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/data}/dataframe.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/data}/pivot_table.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/input}/button.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/input}/file_browser.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/lab}/confirmation_dialog.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/lab}/tab.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/lab}/tabs.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/app_layout.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/column.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/columns.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/columns_responsive.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/row.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/sidebar.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/output}/html.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/output}/markdown.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/output}/markdown_editor.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/output}/sql_code.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/page}/head.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/page}/title.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/viz}/altair.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/viz}/echarts.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/viz}/matplotlib.py +0 -0
- {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/viz}/plotly_express.py +0 -0
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/ai/__init__.py +0 -0
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/ai/chatbot.py +0 -0
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/ai/tokenizer.py +0 -0
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/basics/__init__.py +0 -0
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/basics/sine.py +0 -0
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/fullscreen/__init__.py +0 -0
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/fullscreen/authorization.py +0 -0
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/fullscreen/layout_demo.py +0 -0
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/fullscreen/multipage.py +0 -0
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/fullscreen/scatter.py +0 -0
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/fullscreen/scrolling.py +0 -0
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/fullscreen/tutorial_streamlit.py +0 -0
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/general/__init__.py +0 -0
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/general/live_update.py +0 -0
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/general/mycard.vue +0 -0
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/general/pokemon_search.py +0 -0
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/ipycanvas.py +0 -0
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/libraries/__init__.py +0 -0
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/libraries/bqplot.py +0 -0
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/libraries/ipyleaflet.py +0 -0
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/utilities/__init__.py +0 -0
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/utilities/calculator.py +0 -0
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/utilities/todo.py +0 -0
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/visualization/__init__.py +0 -0
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/visualization/annotator.py +0 -0
- {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/visualization/linked_views.py +0 -0
- {solara-1.29.1/solara/website/pages/docs/content/04-tutorial → solara-1.30.1/solara/website/pages/documentation/getting_started/content/04-tutorials}/10_data_science.py +0 -0
- {solara-1.29.1/solara/website/pages/docs/content/04-tutorial → solara-1.30.1/solara/website/pages/documentation/getting_started/content/04-tutorials}/60-jupyter-dashboard-part1.py +0 -0
- {solara-1.29.1/solara/website/pages/docs/content/04-tutorial → solara-1.30.1/solara/website/pages/documentation/getting_started/content/04-tutorials}/SF_crime_sample.csv.gz +0 -0
- {solara-1.29.1/solara/website/pages/docs/content/04-tutorial → solara-1.30.1/solara/website/pages/documentation/getting_started/content/04-tutorials}/_jupyter_dashboard_1.ipynb +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/pages/docutils.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/pages/showcase/planeto_tessa.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/pages/showcase/solarathon_2023_team_2.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/pages/showcase/solarathon_2023_team_4.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/pages/showcase/solarathon_2023_team_5.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/pages/showcase/solarathon_2023_team_6.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/pages/showcase/wanderlust.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/public/beach.jpeg +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/public/logo.svg +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/public/success.html +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/templates/index.html.j2 +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/website/utils.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/widgets/__init__.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/widgets/vue/gridlayout.vue +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/widgets/vue/html.vue +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/widgets/vue/navigator.vue +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/widgets/vue/vegalite.vue +0 -0
- {solara-1.29.1 → solara-1.30.1}/solara/widgets/widgets.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/__init__.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/conftest.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/integration/__init__.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/integration/app_widget.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/integration/async_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/integration/cdn_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/integration/cmdline_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/integration/conftest.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/integration/create_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/integration/enterprise/__init__.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/integration/error_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/integration/esm_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/integration/flask_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/integration/input_date_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/integration/latex_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/integration/lifecycle_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/integration/markdown_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/integration/menu_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/integration/popout_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/integration/reconnect_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/integration/reload/apps.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/integration/ssg_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/integration/starlette_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/integration/test.vue +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/integration/testapp.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/integration/widget_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-linux-ipywidgets-7-changed-reference.png +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-linux-ipywidgets-7-reference.png +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-linux-ipywidgets-8-changed-reference.png +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-linux-ipywidgets-8-reference.png +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_lab-chromium-linux-ipywidgets-7-reference.png +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_lab-chromium-linux-ipywidgets-8-reference.png +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_notebook-chromium-linux-ipywidgets-7-reference.png +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_notebook-chromium-linux-ipywidgets-8-reference.png +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-solara-chromium-linux-ipywidgets-7-reference.png +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-solara-chromium-linux-ipywidgets-8-reference.png +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-voila-chromium-linux-ipywidgets-7-reference.png +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-voila-chromium-linux-ipywidgets-8-reference.png +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-starlette-solara-chromium-linux-ipywidgets-7-reference.png +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-starlette-solara-chromium-linux-ipywidgets-8-reference.png +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-jupyter_lab-chromium-linux-reference.png +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-jupyter_notebook-chromium-linux-reference.png +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-solara-chromium-linux-reference.png +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-voila-chromium-linux-reference.png +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-starlette-solara-chromium-linux-reference.png +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_widget_button_solara-flask-chromium-linux-ipyvuetify3-reference.png +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_widget_button_solara-flask-chromium-linux-reference.png +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_widget_button_solara-starlette-chromium-linux-ipyvuetify3-reference.png +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_widget_button_solara-starlette-chromium-linux-reference.png +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/__init__.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/app_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/applayout_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/cache_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/cdn_helper_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/chat_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/checkbox_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/common.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/component_frontend_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/component_vue_test.vue +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/confirmation_dialog_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/conftest.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/cross_filter_component_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/cross_filter_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/dataframe_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/datatable_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/display_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/express_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/file_browser_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/file_download_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/hooks_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/input_date_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/input_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/kernel_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/lab/__init__.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/lifecycle_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/matplotlib_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/no_solara_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/output_widget_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/patch_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/pivottable_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/router_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/select_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/settings_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/shell_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/slider_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/__init__.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/food/__init__.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/food/food.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/food/index.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/multipage/03-some-markdown.md +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/multipage/04-a_directory/00-another-markdown.md +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/multipage/04-a_directory/__init__.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/multipage/05-and-notebooks.ipynb +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/multipage/06-custom-routes.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/multipage/10-single-file-directory/single-file.md +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/multipage/99-some_other_python_script.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/multipage/some_other_file.txt +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/multipage-widgets/00-overview.md +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/multipage-widgets/01-views.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/multipage-widgets/02-likes.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/multipage-widgets/03-volume.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/multipage-widgets/04-color.ipynb +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/notebookapp_component.ipynb +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/notebookapp_element.ipynb +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/notebookapp_widget.ipynb +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/single_file.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/single_file_multiple_routes.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/switch_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/tabs_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/task_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/telemetry_tests.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/toestand_computed_reload.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/toestand_test.py +0 -0
- {solara-1.29.1 → solara-1.30.1}/tests/unit/toggle_button_test.py +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
2
|
Name: solara
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.30.1
|
|
4
|
+
Dynamic: Summary
|
|
4
5
|
Project-URL: Home, https://www.github.com/widgetti/solara
|
|
5
6
|
Author-email: "Maarten A. Breddels" <maartenbreddels@gmail.com>
|
|
6
7
|
License: The MIT License (MIT)
|
|
@@ -49,7 +50,7 @@ Requires-Dist: watchdog
|
|
|
49
50
|
Requires-Dist: watchfiles; python_version > '3.6'
|
|
50
51
|
Requires-Dist: websockets
|
|
51
52
|
Provides-Extra: assets
|
|
52
|
-
Requires-Dist: solara-assets==1.
|
|
53
|
+
Requires-Dist: solara-assets==1.30.1; extra == 'assets'
|
|
53
54
|
Provides-Extra: dev
|
|
54
55
|
Requires-Dist: black; extra == 'dev'
|
|
55
56
|
Requires-Dist: bqplot; extra == 'dev'
|
|
@@ -138,7 +139,7 @@ Run:
|
|
|
138
139
|
pip install solara
|
|
139
140
|
```
|
|
140
141
|
|
|
141
|
-
Or follow the [Installation instructions](https://solara.dev/
|
|
142
|
+
Or follow the [Installation instructions](https://solara.dev/documentation/getting_started/installing) for more detailed instructions.
|
|
142
143
|
|
|
143
144
|
## First script
|
|
144
145
|
|
|
@@ -184,7 +185,7 @@ Solara server is starting at http://localhost:8765
|
|
|
184
185
|
Or copy-paste this to a Jupyter notebook cell and execute it (the `Page()` expression at the end
|
|
185
186
|
will cause it to automatically render the component in the notebook).
|
|
186
187
|
|
|
187
|
-
See this snippet run live at https://solara.dev/
|
|
188
|
+
See this snippet run live at https://solara.dev/documentation/getting_started
|
|
188
189
|
|
|
189
190
|
## Demo
|
|
190
191
|
|
|
@@ -211,7 +212,7 @@ By building on top of ipywidgets, we automatically leverage an existing ecosyste
|
|
|
211
212
|
|
|
212
213
|
Visit our main website or jump directly to the introduction
|
|
213
214
|
|
|
214
|
-
[](https://solara.dev/
|
|
215
|
-
[](https://solara.dev/
|
|
215
|
+
[](https://solara.dev/documentation)
|
|
216
|
+
[](https://solara.dev/documentation/getting_started)
|
|
216
217
|
|
|
217
218
|
*Note that the solara.dev website is created using Solara*
|
|
@@ -27,7 +27,7 @@ Run:
|
|
|
27
27
|
pip install solara
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
Or follow the [Installation instructions](https://solara.dev/
|
|
30
|
+
Or follow the [Installation instructions](https://solara.dev/documentation/getting_started/installing) for more detailed instructions.
|
|
31
31
|
|
|
32
32
|
## First script
|
|
33
33
|
|
|
@@ -73,7 +73,7 @@ Solara server is starting at http://localhost:8765
|
|
|
73
73
|
Or copy-paste this to a Jupyter notebook cell and execute it (the `Page()` expression at the end
|
|
74
74
|
will cause it to automatically render the component in the notebook).
|
|
75
75
|
|
|
76
|
-
See this snippet run live at https://solara.dev/
|
|
76
|
+
See this snippet run live at https://solara.dev/documentation/getting_started
|
|
77
77
|
|
|
78
78
|
## Demo
|
|
79
79
|
|
|
@@ -100,7 +100,7 @@ By building on top of ipywidgets, we automatically leverage an existing ecosyste
|
|
|
100
100
|
|
|
101
101
|
Visit our main website or jump directly to the introduction
|
|
102
102
|
|
|
103
|
-
[](https://solara.dev/
|
|
104
|
-
[](https://solara.dev/
|
|
103
|
+
[](https://solara.dev/documentation)
|
|
104
|
+
[](https://solara.dev/documentation/getting_started)
|
|
105
105
|
|
|
106
106
|
*Note that the solara.dev website is created using Solara*
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"""Build webapps using IPywidgets"""
|
|
2
|
-
__version__ = "1.
|
|
2
|
+
__version__ = "1.30.1"
|
|
3
3
|
github_url = "https://github.com/widgetti/solara"
|
|
4
4
|
git_branch = "master"
|
|
5
5
|
|
|
@@ -77,10 +77,10 @@ def display(*objs, **kwargs):
|
|
|
77
77
|
|
|
78
78
|
However, if you require callback functions, use the specific Solara components, e.g.:
|
|
79
79
|
|
|
80
|
-
* [Plotly](/
|
|
81
|
-
* [Altair](/
|
|
82
|
-
* [Matplotlib](/
|
|
83
|
-
* [Dataframe](/
|
|
80
|
+
* [Plotly](/documentation/components/viz/plotly)
|
|
81
|
+
* [Altair](/documentation/components/viz/altair)
|
|
82
|
+
* [Matplotlib](/documentation/components/viz/matplotlib)
|
|
83
|
+
* [Dataframe](/documentation/components/data/dataframe)
|
|
84
84
|
|
|
85
85
|
```solara
|
|
86
86
|
import solara
|
|
@@ -489,7 +489,7 @@ def deploy():
|
|
|
489
489
|
|
|
490
490
|
time.sleep(1)
|
|
491
491
|
rprint("Want your app to run instantly on awesomeapp-mystartup-gh.solara.run?")
|
|
492
|
-
rprint("\tCheck out https://solara.dev/
|
|
492
|
+
rprint("\tCheck out https://solara.dev/documentation/getting_started/deploying/cloud-hosted")
|
|
493
493
|
|
|
494
494
|
|
|
495
495
|
@cli.command()
|
|
@@ -723,7 +723,11 @@ cli.add_command(ssg)
|
|
|
723
723
|
|
|
724
724
|
|
|
725
725
|
def main():
|
|
726
|
-
|
|
726
|
+
args = sys.argv
|
|
727
|
+
# skip everything after -- if it exists
|
|
728
|
+
if "--" in args:
|
|
729
|
+
args = args[: args.index("--")]
|
|
730
|
+
cli(args[1:])
|
|
727
731
|
|
|
728
732
|
|
|
729
733
|
if __name__ == "__main__":
|
|
@@ -24,6 +24,7 @@ DEBUG = False
|
|
|
24
24
|
solara_root = Path(solara.__file__).parent
|
|
25
25
|
|
|
26
26
|
DefaultLayout = solara.AppLayout
|
|
27
|
+
_redirects: Dict[str, str] = {}
|
|
27
28
|
|
|
28
29
|
|
|
29
30
|
def source_to_module(path: Path, initial_namespace={}) -> ModuleType:
|
|
@@ -89,12 +90,17 @@ def arg_cast(args: List[str], f: Callable):
|
|
|
89
90
|
def RoutingProvider(children: List[reacton.core.Element] = [], routes: List[solara.Route] = [], pathname: str = ""):
|
|
90
91
|
"""Wraps the app, adds extra context, like navigation/routing."""
|
|
91
92
|
path, set_path = solara.use_state(pathname, key="solara-context-path")
|
|
93
|
+
|
|
94
|
+
def set_path_with_redirect(path):
|
|
95
|
+
path = _redirects.get(path, path)
|
|
96
|
+
set_path(path)
|
|
97
|
+
|
|
92
98
|
# TODO: since we provide a cross filter context here, I don't think name `RoutingProvider` is a good name
|
|
93
99
|
# we might want to change/refactor this.
|
|
94
100
|
solara.provide_cross_filter()
|
|
95
|
-
nav = solara.Navigator(location=path, on_location=
|
|
96
|
-
solara.routing._location_context.provide(solara.routing._Location(path,
|
|
97
|
-
solara.routing.router_context.provide(solara.routing.Router(path, routes=routes, set_path=
|
|
101
|
+
nav = solara.Navigator(location=path, on_location=set_path_with_redirect)
|
|
102
|
+
solara.routing._location_context.provide(solara.routing._Location(path, set_path_with_redirect))
|
|
103
|
+
solara.routing.router_context.provide(solara.routing.Router(path, routes=routes, set_path=set_path_with_redirect))
|
|
98
104
|
|
|
99
105
|
def get_nav_widget():
|
|
100
106
|
# not sure why get_widget(nav) does not work
|
|
@@ -123,15 +129,14 @@ def RoutingProvider(children: List[reacton.core.Element] = [], routes: List[sola
|
|
|
123
129
|
@solara.component
|
|
124
130
|
def RenderPage(main_name: str = "Page"):
|
|
125
131
|
"""Renders the page that matches the route."""
|
|
126
|
-
level_start = solara.use_route_level()
|
|
127
132
|
router = solara.use_context(solara.routing.router_context)
|
|
128
133
|
# we use these to cache script runs that use regular ipywidgets
|
|
129
134
|
modules = cast(Dict[str, ModuleType], solara.use_memo(dict, dependencies=[]))
|
|
130
|
-
modules_modified_times = solara.use_memo(dict, dependencies=[])
|
|
135
|
+
modules_modified_times = cast(Dict[str, float], solara.use_memo(dict, dependencies=[]))
|
|
131
136
|
|
|
132
|
-
if
|
|
137
|
+
if not router.path_routes:
|
|
133
138
|
with solara.VBox() as main:
|
|
134
|
-
solara.Error(f"Page not found: {router.path}
|
|
139
|
+
solara.Error(f"Page not found: {router.path}")
|
|
135
140
|
parent = "/" + "/".join(router.parts[:-1])
|
|
136
141
|
with solara.Link(parent):
|
|
137
142
|
solara.Button(f"Go to parent: {parent}", text=True)
|
|
@@ -144,10 +149,9 @@ def RenderPage(main_name: str = "Page"):
|
|
|
144
149
|
pp(router.routes)
|
|
145
150
|
return main
|
|
146
151
|
|
|
147
|
-
level_max = level_start
|
|
148
152
|
layouts = [] # nested layouts
|
|
149
|
-
|
|
150
|
-
for level in range(
|
|
153
|
+
level_max = len(router.path_routes) - 1
|
|
154
|
+
for level in range(len(router.path_routes)):
|
|
151
155
|
# we always level_start the 'package'/'root' layout
|
|
152
156
|
roots = [k for k in router.path_routes_siblings[level] if k.path == "/"]
|
|
153
157
|
if len(roots) == 1:
|
|
@@ -158,16 +162,21 @@ def RenderPage(main_name: str = "Page"):
|
|
|
158
162
|
# and, if not the root layout, include the layout for the current route
|
|
159
163
|
if route.path != "/" and route.layout:
|
|
160
164
|
layouts.append(route.layout)
|
|
161
|
-
|
|
165
|
+
# We found the leaf (or node) that defines a component or markdown file
|
|
166
|
+
if (route.file and route.file.suffix == ".md") or route.component:
|
|
162
167
|
level_max = level
|
|
168
|
+
break
|
|
169
|
+
|
|
163
170
|
route_current = router.path_routes[level_max]
|
|
164
171
|
routes_siblings = router.path_routes_siblings[level_max]
|
|
165
172
|
routes_siblings_index = routes_siblings.index(route_current)
|
|
173
|
+
|
|
166
174
|
# if no layouts are found, we use the default layout
|
|
167
175
|
if layouts == []:
|
|
168
176
|
layouts = [DefaultLayout]
|
|
169
|
-
|
|
170
|
-
|
|
177
|
+
|
|
178
|
+
if route_current.component is None and route_current.module is None and (route_current.file is None or route_current.file.suffix != ".md"):
|
|
179
|
+
return solara.Error(f"Page not found: {router.path}, route does not link to a (markdown) path or module or component")
|
|
171
180
|
|
|
172
181
|
def wrap_in_layouts(element: reacton.core.Element, layouts):
|
|
173
182
|
for Layout in reversed(layouts):
|
|
@@ -182,9 +191,10 @@ def RenderPage(main_name: str = "Page"):
|
|
|
182
191
|
else:
|
|
183
192
|
return []
|
|
184
193
|
|
|
185
|
-
if isinstance(route_current.data, Path):
|
|
194
|
+
if str(route_current.file).endswith(".md") or isinstance(route_current.data, Path):
|
|
186
195
|
path = cast(Path, route_current.data)
|
|
187
196
|
if path.suffix == ".md":
|
|
197
|
+
component = route_current.component or solara.Markdown
|
|
188
198
|
with solara.HBox() as navigation:
|
|
189
199
|
if routes_siblings_index > 0:
|
|
190
200
|
prev = routes_siblings[routes_siblings_index - 1]
|
|
@@ -204,9 +214,11 @@ def RenderPage(main_name: str = "Page"):
|
|
|
204
214
|
solara.Button(
|
|
205
215
|
icon_name="mdi-pencil", icon=True, href=url, target="_blank", style={"position": "absolute", "top": "0px", "right": "0px"}
|
|
206
216
|
)
|
|
207
|
-
solara.Markdown(path.read_text(), unsafe_solara_execute=True)
|
|
217
|
+
# solara.Markdown(path.read_text(), unsafe_solara_execute=True)
|
|
218
|
+
component(path.read_text(), unsafe_solara_execute=True)
|
|
208
219
|
else:
|
|
209
|
-
content = solara.Markdown(path.read_text(), unsafe_solara_execute=True)
|
|
220
|
+
# content = solara.Markdown(path.read_text(), unsafe_solara_execute=True)
|
|
221
|
+
content = component(path.read_text(), unsafe_solara_execute=True)
|
|
210
222
|
|
|
211
223
|
main = solara.Div(
|
|
212
224
|
classes=["solara-autorouter-content"],
|
|
@@ -224,9 +236,6 @@ def RenderPage(main_name: str = "Page"):
|
|
|
224
236
|
title_element = solara.Title(title)
|
|
225
237
|
module = None
|
|
226
238
|
Page = route_current.component
|
|
227
|
-
# translate the default RenderPage as no value given (None)
|
|
228
|
-
if Page is RenderPage:
|
|
229
|
-
Page = None
|
|
230
239
|
if route_current.module is not None and (Page is None):
|
|
231
240
|
# if not a custom component is given, we try to find a Page component
|
|
232
241
|
# in the module
|
|
@@ -239,9 +248,6 @@ def RenderPage(main_name: str = "Page"):
|
|
|
239
248
|
Page = namespace.get("page", namespace.get("app", Page))
|
|
240
249
|
Page = nested_get(namespace, main_name, Page)
|
|
241
250
|
|
|
242
|
-
if Page is None and route_current.children:
|
|
243
|
-
# we we did not get a component, but we recursively render
|
|
244
|
-
Page = RenderPage
|
|
245
251
|
if isinstance(Page, ipywidgets.Widget):
|
|
246
252
|
# If we have a widget, we need to execute this again for each
|
|
247
253
|
# connection, since we cannot share widgets between connections/users.
|
|
@@ -291,12 +297,12 @@ def RenderPage(main_name: str = "Page"):
|
|
|
291
297
|
main = wrap_in_layouts(main, layouts)
|
|
292
298
|
else:
|
|
293
299
|
if route_current.module:
|
|
294
|
-
|
|
300
|
+
path_str = route_current.module.__file__
|
|
295
301
|
local_scope = route_current.module.__dict__
|
|
296
302
|
ignore = ["display"]
|
|
297
303
|
options = [k for k in list(local_scope) if k not in ignore and not k.startswith("_")]
|
|
298
304
|
matches = difflib.get_close_matches(main_name, options)
|
|
299
|
-
msg = f"No object with name {main_name} found for {
|
|
305
|
+
msg = f"No object with name {main_name} found for {path_str}"
|
|
300
306
|
if matches:
|
|
301
307
|
msg += " Did you mean: " + " or ".join(map(repr, matches))
|
|
302
308
|
else:
|
|
@@ -347,17 +353,22 @@ def get_title(module: ModuleType, required=True):
|
|
|
347
353
|
return title
|
|
348
354
|
|
|
349
355
|
|
|
350
|
-
def fix_route(route: solara.Route, new_file: Path) -> solara.Route:
|
|
356
|
+
def fix_route(route: solara.Route, new_file: Path, new_layout=None) -> solara.Route:
|
|
351
357
|
file = route.file or new_file
|
|
358
|
+
layout = route.layout or new_layout
|
|
352
359
|
children = fix_routes(route.children, new_file) if route.children else []
|
|
353
360
|
|
|
354
|
-
return dataclasses.replace(route, file=file, children=children)
|
|
361
|
+
return dataclasses.replace(route, file=file, children=children, layout=layout)
|
|
355
362
|
|
|
356
363
|
|
|
357
|
-
def fix_routes(routes: List[solara.Route], new_file: Path):
|
|
364
|
+
def fix_routes(routes: List[solara.Route], new_file: Path, new_layout=None):
|
|
358
365
|
new_routes = []
|
|
359
366
|
for route in routes:
|
|
360
|
-
|
|
367
|
+
if route.path == "/":
|
|
368
|
+
route = fix_route(route, new_file, new_layout)
|
|
369
|
+
else:
|
|
370
|
+
route = fix_route(route, new_file)
|
|
371
|
+
new_routes.append(route)
|
|
361
372
|
return new_routes
|
|
362
373
|
|
|
363
374
|
|
|
@@ -370,7 +381,7 @@ def generate_routes(module: ModuleType) -> List[solara.Route]:
|
|
|
370
381
|
files are not Python modules.
|
|
371
382
|
|
|
372
383
|
|
|
373
|
-
See [our multipage guide](/
|
|
384
|
+
See [our multipage guide](/documentation/advanced/howto/multipage#as-a-package) for more details.
|
|
374
385
|
|
|
375
386
|
|
|
376
387
|
"""
|
|
@@ -378,6 +389,7 @@ def generate_routes(module: ModuleType) -> List[solara.Route]:
|
|
|
378
389
|
|
|
379
390
|
assert module.__file__ is not None
|
|
380
391
|
routes = []
|
|
392
|
+
children: List[solara.Route]
|
|
381
393
|
file = Path(module.__file__)
|
|
382
394
|
|
|
383
395
|
if module.__file__.endswith("__init__.py"):
|
|
@@ -391,13 +403,14 @@ def generate_routes(module: ModuleType) -> List[solara.Route]:
|
|
|
391
403
|
title = get_title(module)
|
|
392
404
|
children = getattr(module, "routes", [])
|
|
393
405
|
if hasattr(module, "Page"):
|
|
394
|
-
routes.append(
|
|
406
|
+
routes.append(
|
|
407
|
+
solara.Route(path="/", component=get_page(module), data=module, module=module, layout=layout, children=children, label=title, file=file)
|
|
408
|
+
)
|
|
395
409
|
|
|
396
410
|
assert module.__file__ is not None
|
|
397
411
|
reload.reloader.watcher.add_file(module.__file__)
|
|
398
412
|
for info in pkgutil.iter_modules([str(Path(module.__file__).parent)]):
|
|
399
413
|
submod = importlib.import_module(module.__name__ + f".{info.name}")
|
|
400
|
-
subfile = Path(submod.__file__) if submod.__file__ is not None else None
|
|
401
414
|
title = get_title(submod)
|
|
402
415
|
|
|
403
416
|
name = info.name
|
|
@@ -405,7 +418,11 @@ def generate_routes(module: ModuleType) -> List[solara.Route]:
|
|
|
405
418
|
# however, this may break things.
|
|
406
419
|
# name = name.replace("_", "-")
|
|
407
420
|
if info.ispkg:
|
|
408
|
-
|
|
421
|
+
# we are in a package, like 'portal/solara_portal/pages', not the module itself
|
|
422
|
+
# (e.g. portal/solara_portal/pages/__init__.py)
|
|
423
|
+
# so here name='pages', and the children will come from the submodules
|
|
424
|
+
children = generate_routes(submod)
|
|
425
|
+
route = solara.Route(name, component=None, children=children, module=submod, layout=None, label=title)
|
|
409
426
|
# skip empty subpackages
|
|
410
427
|
if len(route.children) == 0:
|
|
411
428
|
continue
|
|
@@ -413,11 +430,7 @@ def generate_routes(module: ModuleType) -> List[solara.Route]:
|
|
|
413
430
|
# skip empty modules
|
|
414
431
|
if get_renderable(submod) is None and not hasattr(submod, "routes"):
|
|
415
432
|
continue
|
|
416
|
-
|
|
417
|
-
if subfile:
|
|
418
|
-
children = fix_routes(children, subfile)
|
|
419
|
-
module_layout = getattr(submod, "Layout", None)
|
|
420
|
-
route = solara.Route(name, component=RenderPage, module=submod, layout=module_layout, children=children, label=title, file=subfile)
|
|
433
|
+
route = _generate_route(name, submod)
|
|
421
434
|
routes.append(route)
|
|
422
435
|
if route_order:
|
|
423
436
|
lookup = {k.path: k for k in routes}
|
|
@@ -429,17 +442,12 @@ def generate_routes(module: ModuleType) -> List[solara.Route]:
|
|
|
429
442
|
warnings.warn(f"Some routes are not in route_order: {set(lookup) - set(route_order)}")
|
|
430
443
|
|
|
431
444
|
else:
|
|
432
|
-
|
|
433
|
-
children = fix_routes(children, file)
|
|
434
|
-
layout = getattr(module, "Layout", None)
|
|
435
|
-
# children = []
|
|
436
|
-
# single module, single route
|
|
437
|
-
return [solara.Route(path="/", component=RenderPage, data=None, module=module, label=get_title(module), layout=layout, children=children, file=file)]
|
|
445
|
+
return [_generate_route("/", module)]
|
|
438
446
|
|
|
439
447
|
return routes
|
|
440
448
|
|
|
441
449
|
|
|
442
|
-
def generate_routes_directory(path: Path) -> List[solara.Route]:
|
|
450
|
+
def generate_routes_directory(path: Path, markdown_component=None) -> List[solara.Route]:
|
|
443
451
|
"""Generate routes for a directory.
|
|
444
452
|
|
|
445
453
|
This is a recursive function that will generate routes for all
|
|
@@ -451,7 +459,7 @@ def generate_routes_directory(path: Path) -> List[solara.Route]:
|
|
|
451
459
|
Python files ending in .py, or Jupyter notebooks ending in .ipynb
|
|
452
460
|
will be executed and its `Page` component will be rendered.
|
|
453
461
|
|
|
454
|
-
Automatic titles will be [generated as explained in the multipage guide](/
|
|
462
|
+
Automatic titles will be [generated as explained in the multipage guide](/documentation/advanced/howto/multipage).
|
|
455
463
|
|
|
456
464
|
"""
|
|
457
465
|
|
|
@@ -472,13 +480,13 @@ def generate_routes_directory(path: Path) -> List[solara.Route]:
|
|
|
472
480
|
continue
|
|
473
481
|
if subpath.stem.startswith("_") or subpath.stem.startswith("."):
|
|
474
482
|
continue
|
|
475
|
-
route = _generate_route_path(subpath, layout=layout, first=first, has_index=has_index)
|
|
483
|
+
route = _generate_route_path(subpath, layout=layout, first=first, has_index=has_index, markdown_component=markdown_component)
|
|
476
484
|
first = False
|
|
477
485
|
routes.append(route)
|
|
478
486
|
return routes
|
|
479
487
|
|
|
480
488
|
|
|
481
|
-
def _generate_route_path(subpath: Path, layout=None, first=False, has_index=False, initial_namespace={}) -> solara.Route:
|
|
489
|
+
def _generate_route_path(subpath: Path, layout=None, first=False, has_index=False, initial_namespace={}, markdown_component=None) -> solara.Route:
|
|
482
490
|
from .server import reload
|
|
483
491
|
|
|
484
492
|
name = subpath.stem
|
|
@@ -491,23 +499,47 @@ def _generate_route_path(subpath: Path, layout=None, first=False, has_index=Fals
|
|
|
491
499
|
route_path = "/"
|
|
492
500
|
else:
|
|
493
501
|
route_path = "-".join([k.lower() for k in title_parts])
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
children = []
|
|
502
|
+
component = None
|
|
503
|
+
children: List[solara.Route] = []
|
|
497
504
|
module: Optional[ModuleType] = None
|
|
498
505
|
data: Any = None
|
|
499
506
|
module_layout = layout if first else None
|
|
500
507
|
if subpath.suffix == ".md":
|
|
501
508
|
data = subpath
|
|
509
|
+
component = markdown_component
|
|
502
510
|
reload.reloader.watcher.add_file(subpath)
|
|
503
511
|
elif subpath.is_dir():
|
|
504
|
-
children = generate_routes_directory(subpath)
|
|
512
|
+
children = generate_routes_directory(subpath, markdown_component=markdown_component)
|
|
505
513
|
else:
|
|
506
514
|
reload.reloader.watcher.add_file(subpath)
|
|
507
515
|
module = source_to_module(subpath, initial_namespace=initial_namespace)
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
children = fix_routes(children, subpath)
|
|
511
|
-
module_layout = getattr(module, "Layout", module_layout)
|
|
512
|
-
route = solara.Route(route_path, component=component, module=module, label=title, children=children, data=data, layout=module_layout, file=subpath)
|
|
516
|
+
return _generate_route(route_path, module, default_layout=module_layout)
|
|
517
|
+
route = solara.Route(route_path, component=component, module=module, label=title, children=children, data=data, layout=layout, file=subpath)
|
|
513
518
|
return route
|
|
519
|
+
|
|
520
|
+
|
|
521
|
+
def _generate_route(route_path: str, module: ModuleType, default_layout=None, data=None) -> solara.Route:
|
|
522
|
+
path = Path(module.__file__) if module.__file__ is not None else None
|
|
523
|
+
title = get_title(module)
|
|
524
|
+
layout = getattr(module, "Layout", default_layout)
|
|
525
|
+
if inspect.isclass(layout) and issubclass(layout, ipywidgets.Layout):
|
|
526
|
+
layout = None
|
|
527
|
+
component = None
|
|
528
|
+
children = getattr(module, "routes", [])
|
|
529
|
+
root_route = get_root(children)
|
|
530
|
+
# if we have no children or the children have no explicit root component (at '/')
|
|
531
|
+
if not children or (root_route and root_route.component is None):
|
|
532
|
+
component = get_page(module, required=False)
|
|
533
|
+
if root_route and component and root_route.component and component is not root_route.component:
|
|
534
|
+
warnings.warn(
|
|
535
|
+
f"In {path}, you defined a Page component, but also a component on the root route (with path='/') "
|
|
536
|
+
"which is not equal to the Page component at the module level. This is not recommended."
|
|
537
|
+
)
|
|
538
|
+
return solara.Route(route_path, component=component, module=module, label=title, children=children, data=data, layout=layout, file=path)
|
|
539
|
+
|
|
540
|
+
|
|
541
|
+
def get_root(routes: List[solara.Route]) -> Optional[solara.Route]:
|
|
542
|
+
for route in routes:
|
|
543
|
+
if route.path == "/":
|
|
544
|
+
return route
|
|
545
|
+
return None
|
|
@@ -221,7 +221,7 @@ def memoize(
|
|
|
221
221
|
memory content.
|
|
222
222
|
|
|
223
223
|
The storage can be any object that implements the MutableMapping interface, for instance a dict or
|
|
224
|
-
a cachetools.LRUCache. Or a new instance of `solara.cache.Memory`, see [caching](/
|
|
224
|
+
a cachetools.LRUCache. Or a new instance of `solara.cache.Memory`, see [caching](/documentation/getting_started/reference/caching)
|
|
225
225
|
for cache storage options.
|
|
226
226
|
|
|
227
227
|
The return value of the decorator behaves like the original function, but also has a few attributes:
|
|
@@ -233,7 +233,7 @@ def memoize(
|
|
|
233
233
|
If the value is already cached, the function will not be executed in a thread.
|
|
234
234
|
|
|
235
235
|
|
|
236
|
-
See also the [reference on caching](/
|
|
236
|
+
See also the [reference on caching](/documentation/getting_started/reference/caching) for more caching details.
|
|
237
237
|
|
|
238
238
|
"""
|
|
239
239
|
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
const div = document.createElement("div")
|
|
61
61
|
const div2 = document.createElement("div")
|
|
62
62
|
div.innerHTML = `Run <code>${jupyter_python_executable} -m pip install ${needsInstall.join(" ")}</code>. Refresh the page after installation.`
|
|
63
|
-
div2.innerHTML = `Visit <a href="https://solara.dev/
|
|
63
|
+
div2.innerHTML = `Visit <a href="https://solara.dev/documentation/getting_started/troubleshoot" target="_blank">https://solara/dev/documentation/getting_started/troubleshoot</a> for more information.`
|
|
64
64
|
rootEl.appendChild(div)
|
|
65
65
|
rootEl.appendChild(div2)
|
|
66
66
|
}
|
|
@@ -46,7 +46,7 @@ from .echarts import FigureEcharts # noqa: #F401 F403
|
|
|
46
46
|
from .figure_altair import FigureAltair, AltairChart # noqa: #F401 F403
|
|
47
47
|
from .meta import Meta # noqa: #F401 F403
|
|
48
48
|
from .columns import Columns, ColumnsResponsive # noqa: #F401 F403
|
|
49
|
-
from .file_drop import FileDrop # noqa: #F401 F403
|
|
49
|
+
from .file_drop import FileDrop, FileDropMultiple # noqa: #F401 F403
|
|
50
50
|
from .file_download import FileDownload # noqa: #F401 F403
|
|
51
51
|
from .tooltip import Tooltip # noqa: #F401 F403
|
|
52
52
|
from .card import Card, CardActions # noqa: #F401 F403
|
|
@@ -90,7 +90,7 @@ def AppBar(children=[]):
|
|
|
90
90
|
|
|
91
91
|
This component does not need to be a direct child of the AppLayout, it can be at any level in your component tree.
|
|
92
92
|
|
|
93
|
-
If a [Tabs](/
|
|
93
|
+
If a [Tabs](/documentation/components/lab/tabs) component is used as direct child of the app bar, it will be shown under the app bar.
|
|
94
94
|
|
|
95
95
|
## Example showing an app bar
|
|
96
96
|
```solara
|
|
@@ -204,11 +204,11 @@ def AppLayout(
|
|
|
204
204
|
):
|
|
205
205
|
"""The default layout for Solara apps. It consists of an toolbar bar, a sidebar and a main content area.
|
|
206
206
|
|
|
207
|
-
* The title of the app is set using the [Title](/
|
|
208
|
-
* The sidebar content is set using the [Sidebar](/
|
|
207
|
+
* The title of the app is set using the [Title](/documentation/components/page/title) component.
|
|
208
|
+
* The sidebar content is set using the [Sidebar](/documentation/components/layout/sidebar) component.
|
|
209
209
|
* The content is set by the `Page` component provided by the user.
|
|
210
210
|
|
|
211
|
-
This component is usually not used directly, but rather through via the [Layout system](/
|
|
211
|
+
This component is usually not used directly, but rather through via the [Layout system](/documentation/advanced/howto/layout).
|
|
212
212
|
|
|
213
213
|
The sidebar is only added when the AppLayout has more than one child.
|
|
214
214
|
|
|
@@ -224,7 +224,7 @@ def AppLayout(
|
|
|
224
224
|
|
|
225
225
|
* `children`: The children of the AppLayout. The first child is used as the sidebar content, the rest as the main content.
|
|
226
226
|
* `sidebar_open`: Whether the sidebar is open or not.
|
|
227
|
-
* `title`: The title of the app shown in the app bar, can also be set using the [Title](/
|
|
227
|
+
* `title`: The title of the app shown in the app bar, can also be set using the [Title](/documentation/components/page/title) component.
|
|
228
228
|
* `toolbar_dark`: Whether the toolbar should be dark or not.
|
|
229
229
|
* `navigation`: Whether the navigation tabs based on routing should be shown.
|
|
230
230
|
* `color`: The color of the toolbar.
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
from typing import Callable, Dict, List, Optional, Union
|
|
2
2
|
|
|
3
|
-
from reacton import ipyvue
|
|
4
|
-
from reacton import ipyvuetify as v
|
|
5
|
-
|
|
6
3
|
import solara
|
|
7
4
|
import solara.util
|
|
5
|
+
from reacton import ipyvue
|
|
6
|
+
from reacton import ipyvuetify as v
|
|
8
7
|
|
|
9
8
|
|
|
10
9
|
@solara.component
|
|
@@ -51,7 +50,8 @@ def Button(
|
|
|
51
50
|
- `disabled`: Whether the button is disabled.
|
|
52
51
|
- `text`: Whether the button should be displayed as text, it has no shadow and no background.
|
|
53
52
|
- `outlined`: Whether the button should be displayed as outlined, it has no background.
|
|
54
|
-
- `value`: (Optional) When used as a child of a ToggleButtons component, the value of the selected button, see
|
|
53
|
+
- `value`: (Optional) When used as a child of a ToggleButtons component, the value of the selected button, see
|
|
54
|
+
[ToggleButtons](/documentation/components/input/togglebuttons).
|
|
55
55
|
- `classes`: Additional CSS classes to apply.
|
|
56
56
|
- `style`: CSS style to apply.
|
|
57
57
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from typing import Dict, List, Optional, Union
|
|
2
2
|
|
|
3
3
|
import reacton.ipyvuetify as v
|
|
4
|
-
|
|
5
4
|
import solara
|
|
6
5
|
from solara.util import _combine_classes
|
|
7
6
|
|
|
@@ -79,7 +78,7 @@ def Card(
|
|
|
79
78
|
def CardActions(children: List[solara.Element] = []):
|
|
80
79
|
"""Container for actions in a card.
|
|
81
80
|
|
|
82
|
-
See [Card](/
|
|
81
|
+
See [Card](/documentation/components/layout/card) for an example.
|
|
83
82
|
|
|
84
83
|
# Arguments
|
|
85
84
|
|
|
@@ -20,8 +20,8 @@ def _widget_from_signature(classname, base_class: Type[widgets.Widget], func: Ca
|
|
|
20
20
|
if name.startswith("event_"):
|
|
21
21
|
event_name = name[6:]
|
|
22
22
|
|
|
23
|
-
def event_handler(self, data, buffers=None, event_name=event_name):
|
|
24
|
-
callback = self._event_callbacks.get(event_name)
|
|
23
|
+
def event_handler(self, data, buffers=None, event_name=event_name, param=param):
|
|
24
|
+
callback = self._event_callbacks.get(event_name, param.default)
|
|
25
25
|
if callback:
|
|
26
26
|
if buffers:
|
|
27
27
|
callback(data, buffers)
|
|
@@ -29,14 +29,15 @@ def _widget_from_signature(classname, base_class: Type[widgets.Widget], func: Ca
|
|
|
29
29
|
callback(data)
|
|
30
30
|
|
|
31
31
|
classprops[f"vue_{event_name}"] = event_handler
|
|
32
|
-
|
|
32
|
+
elif name.startswith("on_") and name[3:] in parameters:
|
|
33
33
|
# callback, will be handled by reacton
|
|
34
34
|
continue
|
|
35
|
-
if param.default == inspect.Parameter.empty:
|
|
36
|
-
trait = traitlets.Any()
|
|
37
35
|
else:
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
if param.default == inspect.Parameter.empty:
|
|
37
|
+
trait = traitlets.Any()
|
|
38
|
+
else:
|
|
39
|
+
trait = traitlets.Any(default_value=param.default)
|
|
40
|
+
classprops[name] = trait.tag(sync=True, **widgets.widget_serialization)
|
|
40
41
|
# maps event_foo to a callable
|
|
41
42
|
classprops["_event_callbacks"] = traitlets.Dict(default_value={})
|
|
42
43
|
|
|
@@ -78,7 +79,7 @@ def component_vue(vue_path: str, vuetify=True) -> Callable[[Callable[P, None]],
|
|
|
78
79
|
[See the vue v2 api](https://v2.vuejs.org/v2/api/) for more information on how to use Vue, like `watch`,
|
|
79
80
|
`methods` and lifecycle hooks such as `mounted` and `destroyed`.
|
|
80
81
|
|
|
81
|
-
See the [Vue component example](/examples/general/vue_component) for an example of how to use this decorator.
|
|
82
|
+
See the [Vue component example](/documentation/examples/general/vue_component) for an example of how to use this decorator.
|
|
82
83
|
|
|
83
84
|
## Arguments
|
|
84
85
|
|