solara-ui 1.45.0__py3-none-any.whl
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.
- prefix/etc/jupyter/jupyter_notebook_config.d/solara.json +7 -0
- prefix/etc/jupyter/jupyter_server_config.d/solara.json +7 -0
- solara/__init__.py +124 -0
- solara/__main__.py +765 -0
- solara/_stores.py +297 -0
- solara/alias.py +6 -0
- solara/autorouting.py +555 -0
- solara/cache.py +305 -0
- solara/checks.html +71 -0
- solara/checks.py +227 -0
- solara/comm.py +28 -0
- solara/components/__init__.py +77 -0
- solara/components/alert.py +155 -0
- solara/components/applayout.py +397 -0
- solara/components/button.py +85 -0
- solara/components/card.py +87 -0
- solara/components/checkbox.py +50 -0
- solara/components/code_highlight_css.py +11 -0
- solara/components/code_highlight_css.vue +63 -0
- solara/components/columns.py +159 -0
- solara/components/component_vue.py +134 -0
- solara/components/cross_filter.py +335 -0
- solara/components/dataframe.py +546 -0
- solara/components/datatable.py +214 -0
- solara/components/datatable.vue +175 -0
- solara/components/details.py +56 -0
- solara/components/download.vue +35 -0
- solara/components/echarts.py +86 -0
- solara/components/echarts.vue +139 -0
- solara/components/figure_altair.py +39 -0
- solara/components/file_browser.py +181 -0
- solara/components/file_download.py +199 -0
- solara/components/file_drop.py +159 -0
- solara/components/file_drop.vue +83 -0
- solara/components/file_list_widget.vue +78 -0
- solara/components/head.py +27 -0
- solara/components/head_tag.py +49 -0
- solara/components/head_tag.vue +60 -0
- solara/components/image.py +173 -0
- solara/components/input.py +456 -0
- solara/components/input_text_area.py +86 -0
- solara/components/link.py +55 -0
- solara/components/markdown.py +441 -0
- solara/components/markdown_editor.py +33 -0
- solara/components/markdown_editor.vue +359 -0
- solara/components/matplotlib.py +74 -0
- solara/components/meta.py +47 -0
- solara/components/misc.py +333 -0
- solara/components/pivot_table.py +258 -0
- solara/components/pivot_table.vue +158 -0
- solara/components/progress.py +47 -0
- solara/components/select.py +182 -0
- solara/components/select.vue +27 -0
- solara/components/slider.py +442 -0
- solara/components/slider_date.vue +56 -0
- solara/components/spinner-solara.vue +105 -0
- solara/components/spinner.py +45 -0
- solara/components/sql_code.py +41 -0
- solara/components/sql_code.vue +125 -0
- solara/components/style.py +105 -0
- solara/components/switch.py +71 -0
- solara/components/tab_navigation.py +37 -0
- solara/components/title.py +90 -0
- solara/components/title.vue +38 -0
- solara/components/togglebuttons.py +200 -0
- solara/components/tooltip.py +61 -0
- solara/core.py +42 -0
- solara/datatypes.py +143 -0
- solara/express.py +241 -0
- solara/hooks/__init__.py +4 -0
- solara/hooks/dataframe.py +99 -0
- solara/hooks/misc.py +263 -0
- solara/hooks/use_reactive.py +151 -0
- solara/hooks/use_thread.py +129 -0
- solara/kitchensink.py +8 -0
- solara/lab/__init__.py +34 -0
- solara/lab/components/__init__.py +7 -0
- solara/lab/components/chat.py +215 -0
- solara/lab/components/confirmation_dialog.py +163 -0
- solara/lab/components/cross_filter.py +7 -0
- solara/lab/components/input_date.py +339 -0
- solara/lab/components/input_time.py +133 -0
- solara/lab/components/menu.py +181 -0
- solara/lab/components/menu.vue +38 -0
- solara/lab/components/tabs.py +274 -0
- solara/lab/components/theming.py +98 -0
- solara/lab/components/theming.vue +72 -0
- solara/lab/hooks/__init__.py +0 -0
- solara/lab/hooks/dataframe.py +2 -0
- solara/lab/toestand.py +3 -0
- solara/lab/utils/__init__.py +2 -0
- solara/lab/utils/cookies.py +5 -0
- solara/lab/utils/dataframe.py +165 -0
- solara/lab/utils/headers.py +5 -0
- solara/layout.py +44 -0
- solara/lifecycle.py +46 -0
- solara/minisettings.py +141 -0
- solara/py.typed +0 -0
- solara/reactive.py +99 -0
- solara/routing.py +268 -0
- solara/scope/__init__.py +88 -0
- solara/scope/types.py +55 -0
- solara/server/__init__.py +0 -0
- solara/server/app.py +527 -0
- solara/server/assets/custom.css +1 -0
- solara/server/assets/custom.js +1 -0
- solara/server/assets/favicon.png +0 -0
- solara/server/assets/favicon.svg +5 -0
- solara/server/assets/style.css +1681 -0
- solara/server/assets/theme-dark.css +437 -0
- solara/server/assets/theme-light.css +420 -0
- solara/server/assets/theme.js +3 -0
- solara/server/cdn_helper.py +91 -0
- solara/server/esm.py +71 -0
- solara/server/fastapi.py +5 -0
- solara/server/flask.py +297 -0
- solara/server/jupyter/__init__.py +2 -0
- solara/server/jupyter/cdn_handler.py +28 -0
- solara/server/jupyter/server_extension.py +40 -0
- solara/server/jupyter/solara.py +91 -0
- solara/server/jupytertools.py +46 -0
- solara/server/kernel.py +388 -0
- solara/server/kernel_context.py +467 -0
- solara/server/patch.py +564 -0
- solara/server/pyinstaller/__init__.py +9 -0
- solara/server/pyinstaller/hook-ipyreact.py +5 -0
- solara/server/pyinstaller/hook-ipyvuetify.py +5 -0
- solara/server/pyinstaller/hook-solara.py +9 -0
- solara/server/qt.py +113 -0
- solara/server/reload.py +251 -0
- solara/server/server.py +484 -0
- solara/server/settings.py +249 -0
- solara/server/shell.py +269 -0
- solara/server/starlette.py +770 -0
- solara/server/static/ansi.js +270 -0
- solara/server/static/highlight-dark.css +82 -0
- solara/server/static/highlight.css +43 -0
- solara/server/static/main-vuetify.js +272 -0
- solara/server/static/main.js +163 -0
- solara/server/static/solara_bootstrap.py +129 -0
- solara/server/static/sun.svg +23 -0
- solara/server/static/webworker.js +42 -0
- solara/server/telemetry.py +212 -0
- solara/server/templates/index.html.j2 +1 -0
- solara/server/templates/loader-plain.css +11 -0
- solara/server/templates/loader-plain.html +20 -0
- solara/server/templates/loader-solara.css +111 -0
- solara/server/templates/loader-solara.html +40 -0
- solara/server/templates/plain.html +82 -0
- solara/server/templates/solara.html.j2 +486 -0
- solara/server/threaded.py +84 -0
- solara/server/utils.py +44 -0
- solara/server/websocket.py +45 -0
- solara/settings.py +86 -0
- solara/tasks.py +893 -0
- solara/template/button.py +16 -0
- solara/template/markdown.py +42 -0
- solara/template/portal/.flake8 +6 -0
- solara/template/portal/.pre-commit-config.yaml +28 -0
- solara/template/portal/LICENSE +21 -0
- solara/template/portal/Procfile +7 -0
- solara/template/portal/mypy.ini +3 -0
- solara/template/portal/pyproject.toml +26 -0
- solara/template/portal/solara_portal/__init__.py +4 -0
- solara/template/portal/solara_portal/components/__init__.py +2 -0
- solara/template/portal/solara_portal/components/article.py +28 -0
- solara/template/portal/solara_portal/components/data.py +28 -0
- solara/template/portal/solara_portal/components/header.py +6 -0
- solara/template/portal/solara_portal/components/layout.py +6 -0
- solara/template/portal/solara_portal/content/articles/equis-in-vidi.md +85 -0
- solara/template/portal/solara_portal/content/articles/substiterat-vati.md +70 -0
- solara/template/portal/solara_portal/data.py +60 -0
- solara/template/portal/solara_portal/pages/__init__.py +67 -0
- solara/template/portal/solara_portal/pages/article/__init__.py +26 -0
- solara/template/portal/solara_portal/pages/tabular.py +29 -0
- solara/template/portal/solara_portal/pages/viz/__init__.py +70 -0
- solara/template/portal/solara_portal/pages/viz/overview.py +14 -0
- solara/test/__init__.py +0 -0
- solara/test/pytest_plugin.py +783 -0
- solara/toestand.py +998 -0
- solara/util.py +348 -0
- solara/validate_hooks.py +258 -0
- solara/website/__init__.py +0 -0
- solara/website/assets/custom.css +444 -0
- solara/website/assets/images/logo-small.png +0 -0
- solara/website/assets/images/logo.svg +17 -0
- solara/website/assets/images/logo_white.svg +50 -0
- solara/website/assets/theme.js +8 -0
- solara/website/components/__init__.py +5 -0
- solara/website/components/algolia.py +6 -0
- solara/website/components/algolia.vue +24 -0
- solara/website/components/algolia_api.vue +202 -0
- solara/website/components/breadcrumbs.py +28 -0
- solara/website/components/contact.py +144 -0
- solara/website/components/docs.py +143 -0
- solara/website/components/header.py +75 -0
- solara/website/components/mailchimp.py +12 -0
- solara/website/components/mailchimp.vue +47 -0
- solara/website/components/markdown.py +99 -0
- solara/website/components/markdown_nav.vue +34 -0
- solara/website/components/notebook.py +171 -0
- solara/website/components/sidebar.py +105 -0
- solara/website/pages/__init__.py +370 -0
- solara/website/pages/about/__init__.py +9 -0
- solara/website/pages/about/about.md +3 -0
- solara/website/pages/apps/__init__.py +16 -0
- solara/website/pages/apps/authorization/__init__.py +119 -0
- solara/website/pages/apps/authorization/admin.py +12 -0
- solara/website/pages/apps/authorization/users.py +12 -0
- solara/website/pages/apps/jupyter-dashboard-1.py +116 -0
- solara/website/pages/apps/layout-demo.py +40 -0
- solara/website/pages/apps/multipage/__init__.py +38 -0
- solara/website/pages/apps/multipage/page1.py +26 -0
- solara/website/pages/apps/multipage/page2.py +34 -0
- solara/website/pages/apps/scatter.py +136 -0
- solara/website/pages/apps/scrolling.py +63 -0
- solara/website/pages/apps/tutorial-streamlit.py +18 -0
- solara/website/pages/careers/__init__.py +27 -0
- solara/website/pages/changelog/__init__.py +10 -0
- solara/website/pages/changelog/changelog.md +372 -0
- solara/website/pages/contact/__init__.py +34 -0
- solara/website/pages/doc_use_download.py +85 -0
- solara/website/pages/documentation/__init__.py +90 -0
- solara/website/pages/documentation/advanced/__init__.py +9 -0
- solara/website/pages/documentation/advanced/content/00-overview.md +1 -0
- solara/website/pages/documentation/advanced/content/10-howto/00-overview.md +6 -0
- solara/website/pages/documentation/advanced/content/10-howto/10-multipage.md +196 -0
- solara/website/pages/documentation/advanced/content/10-howto/20-layout.md +125 -0
- solara/website/pages/documentation/advanced/content/10-howto/30-testing.md +417 -0
- solara/website/pages/documentation/advanced/content/10-howto/31-debugging.md +69 -0
- solara/website/pages/documentation/advanced/content/10-howto/40-embed.md +50 -0
- solara/website/pages/documentation/advanced/content/10-howto/50-ipywidget_libraries.md +124 -0
- solara/website/pages/documentation/advanced/content/15-reference/00-overview.md +3 -0
- solara/website/pages/documentation/advanced/content/15-reference/40-static_files.md +31 -0
- solara/website/pages/documentation/advanced/content/15-reference/41-asset-files.md +72 -0
- solara/website/pages/documentation/advanced/content/15-reference/60-static-site-generation.md +59 -0
- solara/website/pages/documentation/advanced/content/15-reference/70-search.md +34 -0
- solara/website/pages/documentation/advanced/content/15-reference/80-reloading.md +34 -0
- solara/website/pages/documentation/advanced/content/15-reference/90-notebook-support.md +7 -0
- solara/website/pages/documentation/advanced/content/15-reference/95-caching.md +148 -0
- solara/website/pages/documentation/advanced/content/20-understanding/00-introduction.md +10 -0
- solara/website/pages/documentation/advanced/content/20-understanding/05-ipywidgets.md +35 -0
- solara/website/pages/documentation/advanced/content/20-understanding/06-ipyvuetify.md +42 -0
- solara/website/pages/documentation/advanced/content/20-understanding/10-reacton.md +28 -0
- solara/website/pages/documentation/advanced/content/20-understanding/12-reacton-basics.md +108 -0
- solara/website/pages/documentation/advanced/content/20-understanding/15-anatomy.md +23 -0
- solara/website/pages/documentation/advanced/content/20-understanding/17-rules-of-hooks.md +192 -0
- solara/website/pages/documentation/advanced/content/20-understanding/18-containers.md +166 -0
- solara/website/pages/documentation/advanced/content/20-understanding/20-solara.md +18 -0
- solara/website/pages/documentation/advanced/content/20-understanding/40-routing.md +256 -0
- solara/website/pages/documentation/advanced/content/20-understanding/50-solara-server.md +108 -0
- solara/website/pages/documentation/advanced/content/20-understanding/60-voila.md +12 -0
- solara/website/pages/documentation/advanced/content/30-enterprise/00-overview.md +7 -0
- solara/website/pages/documentation/advanced/content/30-enterprise/10-oauth.md +187 -0
- solara/website/pages/documentation/advanced/content/40-development/00-overview.md +0 -0
- solara/website/pages/documentation/advanced/content/40-development/01-contribute.md +45 -0
- solara/website/pages/documentation/advanced/content/40-development/10-setup.md +76 -0
- solara/website/pages/documentation/api/__init__.py +19 -0
- solara/website/pages/documentation/api/cross_filter/__init__.py +9 -0
- solara/website/pages/documentation/api/cross_filter/cross_filter_dataframe.py +22 -0
- solara/website/pages/documentation/api/cross_filter/cross_filter_report.py +20 -0
- solara/website/pages/documentation/api/cross_filter/cross_filter_select.py +20 -0
- solara/website/pages/documentation/api/cross_filter/cross_filter_slider.py +20 -0
- solara/website/pages/documentation/api/hooks/__init__.py +9 -0
- solara/website/pages/documentation/api/hooks/use_cross_filter.py +23 -0
- solara/website/pages/documentation/api/hooks/use_dark_effective.py +12 -0
- solara/website/pages/documentation/api/hooks/use_effect.md +43 -0
- solara/website/pages/documentation/api/hooks/use_effect.py +9 -0
- solara/website/pages/documentation/api/hooks/use_exception.py +31 -0
- solara/website/pages/documentation/api/hooks/use_memo.md +16 -0
- solara/website/pages/documentation/api/hooks/use_memo.py +9 -0
- solara/website/pages/documentation/api/hooks/use_previous.py +30 -0
- solara/website/pages/documentation/api/hooks/use_reactive.py +16 -0
- solara/website/pages/documentation/api/hooks/use_state.py +10 -0
- solara/website/pages/documentation/api/hooks/use_state_or_update.py +66 -0
- solara/website/pages/documentation/api/hooks/use_thread.md +64 -0
- solara/website/pages/documentation/api/hooks/use_thread.py +42 -0
- solara/website/pages/documentation/api/hooks/use_trait_observe.py +12 -0
- solara/website/pages/documentation/api/routing/__init__.py +9 -0
- solara/website/pages/documentation/api/routing/generate_routes.py +10 -0
- solara/website/pages/documentation/api/routing/generate_routes_directory.py +10 -0
- solara/website/pages/documentation/api/routing/resolve_path.py +35 -0
- solara/website/pages/documentation/api/routing/route.py +29 -0
- solara/website/pages/documentation/api/routing/use_route.py +76 -0
- solara/website/pages/documentation/api/routing/use_router.py +16 -0
- solara/website/pages/documentation/api/utilities/__init__.py +9 -0
- solara/website/pages/documentation/api/utilities/component_vue.py +10 -0
- solara/website/pages/documentation/api/utilities/computed.py +16 -0
- solara/website/pages/documentation/api/utilities/display.py +16 -0
- solara/website/pages/documentation/api/utilities/get_kernel_id.py +16 -0
- solara/website/pages/documentation/api/utilities/get_session_id.py +16 -0
- solara/website/pages/documentation/api/utilities/memoize.py +35 -0
- solara/website/pages/documentation/api/utilities/on_kernel_start.py +44 -0
- solara/website/pages/documentation/api/utilities/reactive.py +16 -0
- solara/website/pages/documentation/api/utilities/widget.py +104 -0
- solara/website/pages/documentation/components/__init__.py +12 -0
- solara/website/pages/documentation/components/advanced/__init__.py +9 -0
- solara/website/pages/documentation/components/advanced/link.py +25 -0
- solara/website/pages/documentation/components/advanced/meta.py +17 -0
- solara/website/pages/documentation/components/advanced/style.py +43 -0
- solara/website/pages/documentation/components/common.py +9 -0
- solara/website/pages/documentation/components/data/__init__.py +9 -0
- solara/website/pages/documentation/components/data/dataframe.py +44 -0
- solara/website/pages/documentation/components/data/pivot_table.py +81 -0
- solara/website/pages/documentation/components/enterprise/__init__.py +9 -0
- solara/website/pages/documentation/components/enterprise/avatar.py +24 -0
- solara/website/pages/documentation/components/enterprise/avatar_menu.py +25 -0
- solara/website/pages/documentation/components/input/__init__.py +9 -0
- solara/website/pages/documentation/components/input/button.py +23 -0
- solara/website/pages/documentation/components/input/checkbox.py +10 -0
- solara/website/pages/documentation/components/input/file_browser.py +30 -0
- solara/website/pages/documentation/components/input/file_drop.py +76 -0
- solara/website/pages/documentation/components/input/input.py +43 -0
- solara/website/pages/documentation/components/input/select.py +22 -0
- solara/website/pages/documentation/components/input/slider.py +29 -0
- solara/website/pages/documentation/components/input/switch.py +10 -0
- solara/website/pages/documentation/components/input/togglebuttons.py +21 -0
- solara/website/pages/documentation/components/lab/__init__.py +9 -0
- solara/website/pages/documentation/components/lab/chat.py +109 -0
- solara/website/pages/documentation/components/lab/confirmation_dialog.py +55 -0
- solara/website/pages/documentation/components/lab/cookies_headers.py +48 -0
- solara/website/pages/documentation/components/lab/input_date.py +20 -0
- solara/website/pages/documentation/components/lab/input_time.py +15 -0
- solara/website/pages/documentation/components/lab/menu.py +22 -0
- solara/website/pages/documentation/components/lab/tab.py +25 -0
- solara/website/pages/documentation/components/lab/tabs.py +45 -0
- solara/website/pages/documentation/components/lab/task.py +11 -0
- solara/website/pages/documentation/components/lab/theming.py +74 -0
- solara/website/pages/documentation/components/lab/use_task.py +11 -0
- solara/website/pages/documentation/components/layout/__init__.py +9 -0
- solara/website/pages/documentation/components/layout/app_bar.py +16 -0
- solara/website/pages/documentation/components/layout/app_bar_title.py +16 -0
- solara/website/pages/documentation/components/layout/app_layout.py +24 -0
- solara/website/pages/documentation/components/layout/card.py +15 -0
- solara/website/pages/documentation/components/layout/card_actions.py +16 -0
- solara/website/pages/documentation/components/layout/column.py +30 -0
- solara/website/pages/documentation/components/layout/columns.py +27 -0
- solara/website/pages/documentation/components/layout/columns_responsive.py +66 -0
- solara/website/pages/documentation/components/layout/details.py +13 -0
- solara/website/pages/documentation/components/layout/griddraggable.py +62 -0
- solara/website/pages/documentation/components/layout/gridfixed.py +19 -0
- solara/website/pages/documentation/components/layout/hbox.py +18 -0
- solara/website/pages/documentation/components/layout/row.py +30 -0
- solara/website/pages/documentation/components/layout/sidebar.py +24 -0
- solara/website/pages/documentation/components/layout/vbox.py +19 -0
- solara/website/pages/documentation/components/output/__init__.py +9 -0
- solara/website/pages/documentation/components/output/file_download.py +11 -0
- solara/website/pages/documentation/components/output/html.py +19 -0
- solara/website/pages/documentation/components/output/image.py +11 -0
- solara/website/pages/documentation/components/output/markdown.py +57 -0
- solara/website/pages/documentation/components/output/markdown_editor.py +51 -0
- solara/website/pages/documentation/components/output/sql_code.py +83 -0
- solara/website/pages/documentation/components/output/tooltip.py +11 -0
- solara/website/pages/documentation/components/page/__init__.py +9 -0
- solara/website/pages/documentation/components/page/head.py +15 -0
- solara/website/pages/documentation/components/page/title.py +25 -0
- solara/website/pages/documentation/components/status/__init__.py +9 -0
- solara/website/pages/documentation/components/status/error.py +39 -0
- solara/website/pages/documentation/components/status/info.py +39 -0
- solara/website/pages/documentation/components/status/progress.py +10 -0
- solara/website/pages/documentation/components/status/spinner.py +11 -0
- solara/website/pages/documentation/components/status/success.py +40 -0
- solara/website/pages/documentation/components/status/warning.py +47 -0
- solara/website/pages/documentation/components/viz/__init__.py +9 -0
- solara/website/pages/documentation/components/viz/altair.py +42 -0
- solara/website/pages/documentation/components/viz/echarts.py +77 -0
- solara/website/pages/documentation/components/viz/matplotlib.py +30 -0
- solara/website/pages/documentation/components/viz/plotly.py +63 -0
- solara/website/pages/documentation/components/viz/plotly_express.py +41 -0
- solara/website/pages/documentation/examples/__init__.py +54 -0
- solara/website/pages/documentation/examples/ai/__init__.py +11 -0
- solara/website/pages/documentation/examples/ai/chatbot.py +113 -0
- solara/website/pages/documentation/examples/ai/tokenizer.py +107 -0
- solara/website/pages/documentation/examples/basics/__init__.py +10 -0
- solara/website/pages/documentation/examples/basics/sine.py +28 -0
- solara/website/pages/documentation/examples/fullscreen/__init__.py +10 -0
- solara/website/pages/documentation/examples/fullscreen/authorization.py +3 -0
- solara/website/pages/documentation/examples/fullscreen/layout_demo.py +3 -0
- solara/website/pages/documentation/examples/fullscreen/multipage.py +3 -0
- solara/website/pages/documentation/examples/fullscreen/scatter.py +3 -0
- solara/website/pages/documentation/examples/fullscreen/scrolling.py +3 -0
- solara/website/pages/documentation/examples/fullscreen/tutorial_streamlit.py +3 -0
- solara/website/pages/documentation/examples/general/__init__.py +10 -0
- solara/website/pages/documentation/examples/general/custom_storage.py +70 -0
- solara/website/pages/documentation/examples/general/deploy_model.py +115 -0
- solara/website/pages/documentation/examples/general/live_update.py +32 -0
- solara/website/pages/documentation/examples/general/login_oauth.py +81 -0
- solara/website/pages/documentation/examples/general/mycard.vue +58 -0
- solara/website/pages/documentation/examples/general/pokemon_search.py +51 -0
- solara/website/pages/documentation/examples/general/vue_component.py +50 -0
- solara/website/pages/documentation/examples/ipycanvas.py +49 -0
- solara/website/pages/documentation/examples/libraries/__init__.py +10 -0
- solara/website/pages/documentation/examples/libraries/altair.py +65 -0
- solara/website/pages/documentation/examples/libraries/bqplot.py +39 -0
- solara/website/pages/documentation/examples/libraries/ipyleaflet.py +33 -0
- solara/website/pages/documentation/examples/libraries/ipyleaflet_advanced.py +66 -0
- solara/website/pages/documentation/examples/utilities/__init__.py +10 -0
- solara/website/pages/documentation/examples/utilities/calculator.py +157 -0
- solara/website/pages/documentation/examples/utilities/countdown_timer.py +62 -0
- solara/website/pages/documentation/examples/utilities/todo.py +196 -0
- solara/website/pages/documentation/examples/visualization/__init__.py +6 -0
- solara/website/pages/documentation/examples/visualization/annotator.py +67 -0
- solara/website/pages/documentation/examples/visualization/linked_views.py +81 -0
- solara/website/pages/documentation/examples/visualization/plotly.py +44 -0
- solara/website/pages/documentation/faq/__init__.py +12 -0
- solara/website/pages/documentation/faq/content/99-faq.md +112 -0
- solara/website/pages/documentation/getting_started/__init__.py +9 -0
- solara/website/pages/documentation/getting_started/content/00-quickstart.md +107 -0
- solara/website/pages/documentation/getting_started/content/01-introduction.md +125 -0
- solara/website/pages/documentation/getting_started/content/02-installing.md +134 -0
- solara/website/pages/documentation/getting_started/content/04-tutorials/00-overview.md +14 -0
- solara/website/pages/documentation/getting_started/content/04-tutorials/10_data_science.py +13 -0
- solara/website/pages/documentation/getting_started/content/04-tutorials/20-web-app.md +89 -0
- solara/website/pages/documentation/getting_started/content/04-tutorials/30-ipywidgets.md +124 -0
- solara/website/pages/documentation/getting_started/content/04-tutorials/40-streamlit.md +146 -0
- solara/website/pages/documentation/getting_started/content/04-tutorials/50-dash.md +144 -0
- solara/website/pages/documentation/getting_started/content/04-tutorials/60-jupyter-dashboard-part1.py +65 -0
- solara/website/pages/documentation/getting_started/content/04-tutorials/SF_crime_sample.csv.gz +0 -0
- solara/website/pages/documentation/getting_started/content/04-tutorials/_data_science.ipynb +445 -0
- solara/website/pages/documentation/getting_started/content/04-tutorials/_jupyter_dashboard_1.ipynb +1021 -0
- solara/website/pages/documentation/getting_started/content/05-fundamentals/00-overview.md +11 -0
- solara/website/pages/documentation/getting_started/content/05-fundamentals/10-components.md +228 -0
- solara/website/pages/documentation/getting_started/content/05-fundamentals/50-state-management.md +278 -0
- solara/website/pages/documentation/getting_started/content/07-deploying/00-overview.md +7 -0
- solara/website/pages/documentation/getting_started/content/07-deploying/10-self-hosted.md +305 -0
- solara/website/pages/documentation/getting_started/content/07-deploying/20-cloud-hosted.md +80 -0
- solara/website/pages/documentation/getting_started/content/80-what-is-lab.md +7 -0
- solara/website/pages/documentation/getting_started/content/90-troubleshoot.md +26 -0
- solara/website/pages/docutils.py +38 -0
- solara/website/pages/home.vue +1199 -0
- solara/website/pages/our_team/__init__.py +83 -0
- solara/website/pages/pricing/__init__.py +31 -0
- solara/website/pages/roadmap/__init__.py +11 -0
- solara/website/pages/roadmap/roadmap.md +47 -0
- solara/website/pages/scale_ipywidgets.py +45 -0
- solara/website/pages/showcase/__init__.py +105 -0
- solara/website/pages/showcase/domino_code_assist.py +60 -0
- solara/website/pages/showcase/planeto_tessa.py +19 -0
- solara/website/pages/showcase/solara_dev.py +54 -0
- solara/website/pages/showcase/solarathon_2023_team_2.py +22 -0
- solara/website/pages/showcase/solarathon_2023_team_4.py +22 -0
- solara/website/pages/showcase/solarathon_2023_team_5.py +23 -0
- solara/website/pages/showcase/solarathon_2023_team_6.py +34 -0
- solara/website/pages/showcase/wanderlust.py +27 -0
- solara/website/public/beach.jpeg +0 -0
- solara/website/public/logo.svg +6 -0
- solara/website/public/social/discord.svg +1 -0
- solara/website/public/social/github.svg +1 -0
- solara/website/public/social/twitter.svg +3 -0
- solara/website/public/success.html +25 -0
- solara/website/templates/index.html.j2 +117 -0
- solara/website/utils.py +51 -0
- solara/widgets/__init__.py +1 -0
- solara/widgets/vue/gridlayout.vue +107 -0
- solara/widgets/vue/html.vue +4 -0
- solara/widgets/vue/navigator.vue +134 -0
- solara/widgets/vue/vegalite.vue +130 -0
- solara/widgets/widgets.py +74 -0
- solara_ui-1.45.0.data/data/etc/jupyter/jupyter_notebook_config.d/solara.json +7 -0
- solara_ui-1.45.0.data/data/etc/jupyter/jupyter_server_config.d/solara.json +7 -0
- solara_ui-1.45.0.dist-info/METADATA +162 -0
- solara_ui-1.45.0.dist-info/RECORD +464 -0
- solara_ui-1.45.0.dist-info/WHEEL +4 -0
- solara_ui-1.45.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"""
|
|
2
|
+
# Columns
|
|
3
|
+
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import solara
|
|
7
|
+
import solara.lab
|
|
8
|
+
from solara.website.utils import apidoc
|
|
9
|
+
|
|
10
|
+
gutters = solara.reactive(True)
|
|
11
|
+
gutters_dense = solara.reactive(True)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@solara.component
|
|
15
|
+
def Page():
|
|
16
|
+
with solara.Columns([1, 2, 1], gutters=gutters.value, gutters_dense=gutters_dense.value) as main:
|
|
17
|
+
with solara.Card("Left", margin=0):
|
|
18
|
+
solara.Checkbox(label="Gutters").connect(gutters)
|
|
19
|
+
solara.Checkbox(label="Dense gutters").connect(gutters_dense)
|
|
20
|
+
with solara.Card("Middle", margin=0):
|
|
21
|
+
solara.Markdown("This column has a relative width of 2, the columns to the left and right have a relative width of 1.")
|
|
22
|
+
with solara.Card("Right", margin=0):
|
|
23
|
+
solara.Markdown("This column has a relative width of 1, the columns to the left has a relative width of 2.")
|
|
24
|
+
return main
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
__doc__ += apidoc(solara.Columns.f) # type: ignore
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"""
|
|
2
|
+
# ColumnsResponsive
|
|
3
|
+
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import solara
|
|
7
|
+
import solara.lab
|
|
8
|
+
from solara.website.utils import apidoc
|
|
9
|
+
|
|
10
|
+
title = "ColumnsResponsive"
|
|
11
|
+
|
|
12
|
+
gutters = solara.reactive(True)
|
|
13
|
+
gutters_dense = solara.reactive(True)
|
|
14
|
+
wrap = solara.reactive(True)
|
|
15
|
+
|
|
16
|
+
children_count = solara.reactive(12)
|
|
17
|
+
columns_default = solara.reactive(6)
|
|
18
|
+
columns_small = solara.reactive(4)
|
|
19
|
+
columns_medium = solara.reactive(3)
|
|
20
|
+
columns_large = solara.reactive(2)
|
|
21
|
+
columns_xlarge = solara.reactive(1)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@solara.component
|
|
25
|
+
def Page():
|
|
26
|
+
with solara.Card("Controls"):
|
|
27
|
+
solara.Checkbox(label="Wrap").connect(wrap)
|
|
28
|
+
solara.Checkbox(label="Gutters").connect(gutters)
|
|
29
|
+
solara.Checkbox(label="Dense gutters").connect(gutters_dense)
|
|
30
|
+
solara.IntSlider("Children", max=20).connect(children_count)
|
|
31
|
+
|
|
32
|
+
solara.Select("columns default", values=[1, 2, 3, 4, 6, 12]).connect(columns_default) # type: ignore
|
|
33
|
+
solara.Select("columns small", values=[1, 2, 3, 4, 6, 12]).connect(columns_small) # type: ignore
|
|
34
|
+
solara.Select("columns medium", values=[1, 2, 3, 4, 6, 12]).connect(columns_medium) # type: ignore
|
|
35
|
+
solara.Select("columns large", values=[1, 2, 3, 4, 6, 12]).connect(columns_large) # type: ignore
|
|
36
|
+
solara.Select("columns xlarge", values=[1, 2, 3, 4, 6, 12]).connect(columns_xlarge) # type: ignore
|
|
37
|
+
# taken from https://v2.vuetifyjs.com/en/styles/display/#display
|
|
38
|
+
solara.HTML(
|
|
39
|
+
"h2", unsafe_innerHTML=f"Current screensize is xsmall/default, each child is {columns_default.value} points wide", class_="ma-2 d-flex d-sm-none ma"
|
|
40
|
+
)
|
|
41
|
+
solara.HTML(
|
|
42
|
+
"h2", unsafe_innerHTML=f"Current screensize is small, each child is {columns_small.value} points wide", class_="ma-2 d-none d-sm-flex d-md-none"
|
|
43
|
+
)
|
|
44
|
+
solara.HTML(
|
|
45
|
+
"h2", unsafe_innerHTML=f"Current screensize is medium, each child is {columns_medium.value} points wide", class_="ma-2 d-none d-md-flex d-lg-none"
|
|
46
|
+
)
|
|
47
|
+
solara.HTML(
|
|
48
|
+
"h2", unsafe_innerHTML=f"Current screensize is large, each child is {columns_large.value} points wide", class_="ma-2 d-none d-lg-flex d-xl-none"
|
|
49
|
+
)
|
|
50
|
+
solara.HTML("h2", unsafe_innerHTML=f"Current screensize is xlarge, each child is {columns_xlarge.value} points wide", class_="ma-2 d-none d-xl-flex")
|
|
51
|
+
solara.Markdown("Change the screen size to see the effect of the different columns sizes.")
|
|
52
|
+
with solara.ColumnsResponsive(
|
|
53
|
+
default=columns_default.value,
|
|
54
|
+
small=columns_small.value,
|
|
55
|
+
medium=columns_medium.value,
|
|
56
|
+
large=columns_large.value,
|
|
57
|
+
xlarge=columns_xlarge.value,
|
|
58
|
+
wrap=wrap.value,
|
|
59
|
+
gutters=gutters.value,
|
|
60
|
+
gutters_dense=gutters_dense.value,
|
|
61
|
+
):
|
|
62
|
+
for i in range(children_count.value):
|
|
63
|
+
solara.Text(f"{i}")
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
__doc__ += apidoc(solara.ColumnsResponsive.f) # type: ignore
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"""
|
|
2
|
+
# GridDraggable
|
|
3
|
+
|
|
4
|
+
Child components are laid out on a grid, which can be dragged and resized.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import pprint
|
|
8
|
+
import textwrap
|
|
9
|
+
|
|
10
|
+
import solara
|
|
11
|
+
|
|
12
|
+
from ..common import ColorCard
|
|
13
|
+
|
|
14
|
+
title = "GridDraggable"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@solara.component
|
|
18
|
+
def Page():
|
|
19
|
+
grid_layout_initial = [
|
|
20
|
+
{"h": 5, "i": "0", "moved": False, "w": 3, "x": 0, "y": 0},
|
|
21
|
+
{"h": 5, "i": "1", "moved": False, "w": 5, "x": 3, "y": 0},
|
|
22
|
+
{"h": 11, "i": "2", "moved": False, "w": 4, "x": 8, "y": 0},
|
|
23
|
+
{"h": 12, "i": "3", "moved": False, "w": 5, "x": 0, "y": 5},
|
|
24
|
+
{"h": 6, "i": "4", "moved": False, "w": 3, "x": 5, "y": 5},
|
|
25
|
+
{"h": 6, "i": "5", "moved": False, "w": 7, "x": 5, "y": 11},
|
|
26
|
+
]
|
|
27
|
+
|
|
28
|
+
colors = "green red orange brown yellow pink".split()
|
|
29
|
+
|
|
30
|
+
# we need to store the state of the grid_layout ourselves, otherwise it will 'reset'
|
|
31
|
+
# each time we change resizable or draggable
|
|
32
|
+
grid_layout, set_grid_layout = solara.use_state(grid_layout_initial)
|
|
33
|
+
|
|
34
|
+
# some placeholders
|
|
35
|
+
items = [ColorCard(title=f"Child {i}", color=colors[i]) for i in range(len(grid_layout))]
|
|
36
|
+
with solara.VBox() as main:
|
|
37
|
+
resizable = solara.ui_checkbox("Allow resizing", value=True)
|
|
38
|
+
draggable = solara.ui_checkbox("Allow dragging", value=True)
|
|
39
|
+
|
|
40
|
+
def reset_layout():
|
|
41
|
+
set_grid_layout(grid_layout_initial)
|
|
42
|
+
|
|
43
|
+
solara.Button("Reset to initial layout", on_click=reset_layout)
|
|
44
|
+
|
|
45
|
+
solara.GridDraggable(items=items, grid_layout=grid_layout, resizable=resizable, draggable=draggable, on_grid_layout=set_grid_layout)
|
|
46
|
+
|
|
47
|
+
# some string kung fu to make this print nicely
|
|
48
|
+
grid_layout_formatted = pprint.pformat(grid_layout, indent=4)
|
|
49
|
+
grid_layout_formatted = textwrap.indent(grid_layout_formatted, " " * len("grid_layout = "))
|
|
50
|
+
grid_layout_formatted = grid_layout_formatted[len("grid_layout = ") :]
|
|
51
|
+
solara.Markdown(
|
|
52
|
+
f"""
|
|
53
|
+
# Resulting layout
|
|
54
|
+
|
|
55
|
+
This layout can be copy pasted to put in your code as an initial layout:
|
|
56
|
+
|
|
57
|
+
```python
|
|
58
|
+
grid_layout = {grid_layout_formatted}
|
|
59
|
+
```
|
|
60
|
+
"""
|
|
61
|
+
)
|
|
62
|
+
return main
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"""
|
|
2
|
+
# GridFixed
|
|
3
|
+
|
|
4
|
+
Lays out children in a grid with a fixed number of columns.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import solara
|
|
8
|
+
|
|
9
|
+
from ..common import ColorCard
|
|
10
|
+
|
|
11
|
+
title = "GridFixed"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@solara.component
|
|
15
|
+
def Page():
|
|
16
|
+
colors = "green red orange brown yellow pink".split()
|
|
17
|
+
with solara.GridFixed(columns=3):
|
|
18
|
+
for color in colors:
|
|
19
|
+
ColorCard(color, color)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"""
|
|
2
|
+
# HBox
|
|
3
|
+
Lays out children in horizontal direction.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import solara
|
|
7
|
+
|
|
8
|
+
from ..common import ColorCard
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@solara.component
|
|
12
|
+
def Page():
|
|
13
|
+
with solara.VBox() as main:
|
|
14
|
+
colors = "green red orange brown yellow pink".split()
|
|
15
|
+
with solara.HBox():
|
|
16
|
+
for color in colors:
|
|
17
|
+
ColorCard(color, color)
|
|
18
|
+
return main
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"""
|
|
2
|
+
# Row
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import solara
|
|
6
|
+
import solara.lab
|
|
7
|
+
from solara.website.utils import apidoc
|
|
8
|
+
|
|
9
|
+
gap_size = solara.reactive("12px")
|
|
10
|
+
justify = solara.reactive("space-around")
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@solara.component
|
|
14
|
+
def Page():
|
|
15
|
+
with solara.Card("Row demo") as main:
|
|
16
|
+
with solara.Column():
|
|
17
|
+
solara.Text("Justify:")
|
|
18
|
+
solara.ToggleButtonsSingle(justify, values=["start", "center", "end", "space-around", "space-between", "space-evenly"])
|
|
19
|
+
solara.Select(
|
|
20
|
+
label="Gap size",
|
|
21
|
+
values=["0px", "4px", "8px", "12px", "16px", "20px", "24px"],
|
|
22
|
+
).connect(gap_size)
|
|
23
|
+
with solara.Row(gap=gap_size.value, justify=justify.value):
|
|
24
|
+
colors = "green red orange brown yellow pink".split()
|
|
25
|
+
for color in colors:
|
|
26
|
+
solara.Button(label="Solara", color=color)
|
|
27
|
+
return main
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
__doc__ += apidoc(solara.Row.f) # type: ignore
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"""
|
|
2
|
+
# Sidebar
|
|
3
|
+
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import solara
|
|
7
|
+
import solara.lab
|
|
8
|
+
from solara.website.utils import apidoc
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@solara.component
|
|
12
|
+
def Page():
|
|
13
|
+
return solara.Markdown(
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
The sidebar can only be shown in embedded mode on this page.
|
|
17
|
+
Visit the [Scatter app demo](/apps/scatter) to see an example of a full sidebar used in Soalra server.
|
|
18
|
+
|
|
19
|
+
[](/apps/scatter)
|
|
20
|
+
"""
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
__doc__ += apidoc(solara.Sidebar.f) # type: ignore
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"""
|
|
2
|
+
# VBox
|
|
3
|
+
|
|
4
|
+
Lays out children in a vertical direction.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import solara
|
|
8
|
+
|
|
9
|
+
from ..common import ColorCard
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@solara.component
|
|
13
|
+
def Page():
|
|
14
|
+
with solara.VBox() as main:
|
|
15
|
+
colors = "green red orange brown yellow pink".split()
|
|
16
|
+
with solara.VBox():
|
|
17
|
+
for color in colors:
|
|
18
|
+
ColorCard(color, color)
|
|
19
|
+
return main
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"""# HTML"""
|
|
2
|
+
|
|
3
|
+
import solara
|
|
4
|
+
from solara.website.utils import apidoc
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@solara.component
|
|
8
|
+
def Page():
|
|
9
|
+
html = """
|
|
10
|
+
<h1>Custom html</h1>
|
|
11
|
+
<ul>
|
|
12
|
+
<li>Item 1
|
|
13
|
+
<li>Item 2
|
|
14
|
+
</ul>
|
|
15
|
+
"""
|
|
16
|
+
solara.HTML(tag="div", unsafe_innerHTML=html)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
__doc__ += apidoc(solara.HTML.f) # type: ignore
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"""# Markdown"""
|
|
2
|
+
|
|
3
|
+
import solara
|
|
4
|
+
from solara.alias import rv
|
|
5
|
+
from solara.website.utils import apidoc
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@solara.component
|
|
9
|
+
def Page():
|
|
10
|
+
markdown_initial = """
|
|
11
|
+
# Large
|
|
12
|
+
## Smaller
|
|
13
|
+
|
|
14
|
+
## List items
|
|
15
|
+
|
|
16
|
+
* item 1
|
|
17
|
+
* item 2
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
## Code highlight support
|
|
21
|
+
```python
|
|
22
|
+
code = "formatted" and "supports highlighting"
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
## Mermaid support!
|
|
27
|
+
See [Mermaid docs](https://mermaid-js.github.io/)
|
|
28
|
+
|
|
29
|
+
```mermaid
|
|
30
|
+
graph TD;
|
|
31
|
+
A-->B;
|
|
32
|
+
A-->C;
|
|
33
|
+
B-->D;
|
|
34
|
+
C-->D;
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
""".strip()
|
|
39
|
+
|
|
40
|
+
markdown_text, set_markdown_text = solara.use_state(markdown_initial)
|
|
41
|
+
# with solara.GridFixed(columns=2) as main:
|
|
42
|
+
with solara.HBox(grow=True) as main:
|
|
43
|
+
with solara.VBox():
|
|
44
|
+
solara.Markdown("# Input text")
|
|
45
|
+
with solara.Padding(2):
|
|
46
|
+
with rv.Sheet(elevation=2):
|
|
47
|
+
rv.Textarea(v_model=markdown_text, on_v_model=set_markdown_text, rows=30)
|
|
48
|
+
with solara.VBox():
|
|
49
|
+
solara.Markdown("# Renders like")
|
|
50
|
+
with solara.Padding(2):
|
|
51
|
+
with rv.Sheet(elevation=2):
|
|
52
|
+
solara.Markdown(markdown_text)
|
|
53
|
+
|
|
54
|
+
return main
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
__doc__ += apidoc(solara.Markdown.f) # type: ignore
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"""# MarkdownEditor"""
|
|
2
|
+
|
|
3
|
+
import solara
|
|
4
|
+
from solara.alias import rv
|
|
5
|
+
from solara.website.utils import apidoc
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@solara.component
|
|
9
|
+
def Page():
|
|
10
|
+
markdown_initial = """
|
|
11
|
+
# Large heading
|
|
12
|
+
## Medium heading
|
|
13
|
+
### Small heading
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
## List items
|
|
17
|
+
|
|
18
|
+
* item 1
|
|
19
|
+
* item 2
|
|
20
|
+
|
|
21
|
+
## Numbered items
|
|
22
|
+
|
|
23
|
+
1. item 1
|
|
24
|
+
2. item 2
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
**bold** and *italic*, [GitHub link](https://github.com/widgetti/solara/)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
preformatted code
|
|
32
|
+
which respecs spaces
|
|
33
|
+
and line breaks
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
""".strip()
|
|
37
|
+
|
|
38
|
+
markdown_text, set_markdown_text = solara.use_state(markdown_initial)
|
|
39
|
+
with solara.HBox(grow=True) as main:
|
|
40
|
+
with solara.VBox():
|
|
41
|
+
with solara.Padding(2):
|
|
42
|
+
with rv.Sheet(elevation=2):
|
|
43
|
+
solara.MarkdownEditor(markdown_text, on_value=set_markdown_text)
|
|
44
|
+
with rv.Sheet(elevation=2):
|
|
45
|
+
solara.Markdown("# Raw markdown")
|
|
46
|
+
solara.Preformatted(markdown_text)
|
|
47
|
+
|
|
48
|
+
return main
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
__doc__ += apidoc(solara.MarkdownEditor.f) # type: ignore
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"""
|
|
2
|
+
# SqlCode
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import os
|
|
6
|
+
import sqlite3
|
|
7
|
+
import threading
|
|
8
|
+
from typing import Optional, cast
|
|
9
|
+
|
|
10
|
+
import pandas as pd
|
|
11
|
+
|
|
12
|
+
try:
|
|
13
|
+
import vaex.datasets
|
|
14
|
+
except ImportError:
|
|
15
|
+
vaex = None
|
|
16
|
+
|
|
17
|
+
import solara
|
|
18
|
+
from solara.website.utils import apidoc
|
|
19
|
+
|
|
20
|
+
if vaex is not None:
|
|
21
|
+
df_iris = vaex.datasets.iris().to_pandas_df()
|
|
22
|
+
df_titanic = vaex.datasets.titanic().to_pandas_df()
|
|
23
|
+
|
|
24
|
+
def create_db():
|
|
25
|
+
conn = sqlite3.connect(filename)
|
|
26
|
+
df_iris.to_sql("iris", conn, if_exists="replace", index=False)
|
|
27
|
+
df_titanic.to_sql("titanic", conn, if_exists="replace", index=False)
|
|
28
|
+
conn.close()
|
|
29
|
+
|
|
30
|
+
filename = "solara-sql.db"
|
|
31
|
+
if not os.path.exists(filename):
|
|
32
|
+
create_db()
|
|
33
|
+
|
|
34
|
+
conn = sqlite3.connect(filename)
|
|
35
|
+
conn.row_factory = sqlite3.Row
|
|
36
|
+
table_names = [k[0] for k in conn.execute("SELECT name FROM sqlite_master WHERE type='table' ORDER BY name").fetchall()]
|
|
37
|
+
table_hints = {table_name: conn.execute(f"SELECT * from {table_name} LIMIT 1").fetchone().keys() for table_name in table_names}
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@solara.component
|
|
41
|
+
def Page():
|
|
42
|
+
if vaex is None:
|
|
43
|
+
return solara.Error("Vaex is not installed, run pip install vaex-core vaex-hdf5")
|
|
44
|
+
query, set_query = solara.use_state("SELECT * from titanic") # noqa: SH101
|
|
45
|
+
query_executed, set_query_executed = solara.use_state(cast(Optional[str], None)) # noqa: SH101
|
|
46
|
+
|
|
47
|
+
def run_query(cancel: threading.Event) -> pd.DataFrame:
|
|
48
|
+
if not query_executed:
|
|
49
|
+
return
|
|
50
|
+
conn = sqlite3.connect(filename)
|
|
51
|
+
cursor = conn.cursor()
|
|
52
|
+
cursor.execute(query_executed)
|
|
53
|
+
|
|
54
|
+
df = pd.DataFrame(cursor.fetchall(), columns=[k[0] for k in cursor.description])
|
|
55
|
+
return df
|
|
56
|
+
|
|
57
|
+
result: solara.Result[pd.DataFrame] = solara.use_thread(run_query, dependencies=[query_executed]) # noqa: SH101
|
|
58
|
+
|
|
59
|
+
solara.SqlCode(query=query, tables=table_hints, on_query=set_query)
|
|
60
|
+
enable_execute = (query != query_executed) or result.error is not None
|
|
61
|
+
|
|
62
|
+
def execute():
|
|
63
|
+
set_query_executed(query)
|
|
64
|
+
if query == query_executed and result.error:
|
|
65
|
+
result.retry() # type: ignore
|
|
66
|
+
|
|
67
|
+
solara.Button("Execute", on_click=execute, disabled=not enable_execute)
|
|
68
|
+
if result.error:
|
|
69
|
+
solara.Error(f"Ooops {result.error}")
|
|
70
|
+
elif not query:
|
|
71
|
+
solara.Info("No query")
|
|
72
|
+
|
|
73
|
+
elif result.value is not None:
|
|
74
|
+
solara.Markdown(f"Result for query: `{query_executed}`")
|
|
75
|
+
df = result.value
|
|
76
|
+
solara.DataFrame(df)
|
|
77
|
+
elif query_executed is not None:
|
|
78
|
+
with solara.Div():
|
|
79
|
+
solara.Text("Loading data...")
|
|
80
|
+
solara.v.ProgressCircular(indeterminate=True, class_="solara-progress")
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
__doc__ += apidoc(solara.SqlCode.f) # type: ignore
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"""# Head"""
|
|
2
|
+
|
|
3
|
+
import solara
|
|
4
|
+
from solara.website.utils import apidoc
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@solara.component
|
|
8
|
+
def Page():
|
|
9
|
+
solara.Info("A Head component does not render somesome visual on the page, but it is used to avoid duplicate tags, such as titles.")
|
|
10
|
+
with solara.Head():
|
|
11
|
+
# title should always occur inside a Head component
|
|
12
|
+
solara.Title("Custom title")
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
__doc__ += apidoc(solara.Head.f) # type: ignore
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""# Title"""
|
|
2
|
+
|
|
3
|
+
from typing import Optional, cast
|
|
4
|
+
|
|
5
|
+
import solara
|
|
6
|
+
from solara.website.utils import apidoc
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
@solara.component
|
|
10
|
+
def Page():
|
|
11
|
+
title = solara.use_reactive(cast(Optional[str], "Custom title!"))
|
|
12
|
+
|
|
13
|
+
solara.ToggleButtonsSingle(value=title, values=[None, "Custom title!", "Different custom title"])
|
|
14
|
+
|
|
15
|
+
if title is not None:
|
|
16
|
+
# if the title is not set in a child component, the parent's title will be used
|
|
17
|
+
with solara.Head():
|
|
18
|
+
# title should always occur inside a Head component
|
|
19
|
+
solara.Title(title)
|
|
20
|
+
solara.Info(f"Your browser tab title should say {title}", classes=["mt-4"])
|
|
21
|
+
else:
|
|
22
|
+
solara.Warning("If no title is set, the parent title is used.", classes=["mt-4"])
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
__doc__ += apidoc(solara.Title.f) # type: ignore
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"""# Error
|
|
2
|
+
|
|
3
|
+
Solara has 4 types of alerts:
|
|
4
|
+
|
|
5
|
+
* [Success](/documentation/components/status/success)
|
|
6
|
+
* [Info](/documentation/components/status/info)
|
|
7
|
+
* [Warning](/documentation/components/status/warning)
|
|
8
|
+
* Error (this page)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
import solara
|
|
15
|
+
from solara.website.utils import apidoc
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@solara.component
|
|
19
|
+
def Page():
|
|
20
|
+
icon = solara.use_reactive(True)
|
|
21
|
+
dense = solara.use_reactive(False)
|
|
22
|
+
outlined = solara.use_reactive(True)
|
|
23
|
+
text = solara.use_reactive(True)
|
|
24
|
+
|
|
25
|
+
with solara.GridFixed(4):
|
|
26
|
+
solara.Checkbox(label="Use icon", value=icon)
|
|
27
|
+
solara.Checkbox(label="Show dense", value=dense)
|
|
28
|
+
solara.Checkbox(label="Show as text", value=text)
|
|
29
|
+
solara.Checkbox(label="Show outlined", value=outlined)
|
|
30
|
+
solara.Error(
|
|
31
|
+
f"This is solara.Error(label='...', text={text.value}, dense={dense.value}, outlined={outlined.value}, icon={icon.value})",
|
|
32
|
+
text=text.value,
|
|
33
|
+
dense=dense.value,
|
|
34
|
+
outlined=outlined.value,
|
|
35
|
+
icon=icon.value,
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
__doc__ += apidoc(solara.Error.f) # type: ignore
|