solara 1.29.1__py2.py3-none-any.whl → 1.30.0__py2.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.
Files changed (282) hide show
  1. solara/__init__.py +5 -5
  2. solara/__main__.py +6 -2
  3. solara/autorouting.py +79 -38
  4. solara/cache.py +2 -2
  5. solara/checks.html +1 -1
  6. solara/components/__init__.py +1 -1
  7. solara/components/applayout.py +5 -5
  8. solara/components/button.py +4 -4
  9. solara/components/card.py +1 -2
  10. solara/components/component_vue.py +1 -1
  11. solara/components/cross_filter.py +6 -7
  12. solara/components/datatable.py +2 -3
  13. solara/components/figure_altair.py +1 -1
  14. solara/components/file_download.py +2 -2
  15. solara/components/file_drop.py +76 -33
  16. solara/components/file_drop.vue +24 -10
  17. solara/components/head.py +1 -2
  18. solara/components/head_tag.py +2 -3
  19. solara/components/link.py +3 -4
  20. solara/components/meta.py +1 -1
  21. solara/components/misc.py +5 -9
  22. solara/datatypes.py +2 -2
  23. solara/hooks/use_reactive.py +2 -2
  24. solara/lab/components/confirmation_dialog.py +1 -1
  25. solara/lab/components/tabs.py +6 -6
  26. solara/reactive.py +1 -1
  27. solara/routing.py +9 -8
  28. solara/server/app.py +44 -1
  29. solara/server/assets/style.css +6 -0
  30. solara/server/esm.py +28 -4
  31. solara/server/kernel_context.py +75 -7
  32. solara/server/patch.py +3 -0
  33. solara/server/reload.py +2 -2
  34. solara/server/server.py +3 -3
  35. solara/server/settings.py +1 -0
  36. solara/server/starlette.py +66 -33
  37. solara/server/static/solara_bootstrap.py +1 -1
  38. solara/server/templates/solara.html.j2 +62 -42
  39. solara/tasks.py +1 -6
  40. solara/util.py +23 -1
  41. solara/website/assets/custom.css +56 -0
  42. solara/website/components/__init__.py +1 -0
  43. solara/website/components/algolia_api.vue +157 -0
  44. solara/website/components/docs.py +118 -0
  45. solara/website/components/header.py +20 -10
  46. solara/website/components/hero.py +1 -1
  47. solara/website/pages/__init__.py +223 -20
  48. solara/website/pages/apps/jupyter-dashboard-1.py +1 -1
  49. solara/website/pages/apps/multipage/__init__.py +1 -1
  50. solara/website/pages/apps/multipage/page2.py +1 -1
  51. solara/website/pages/apps/scatter.py +21 -7
  52. solara/website/pages/changelog/__init__.py +8 -0
  53. solara/website/pages/{docs/content/95-changelog.md → changelog/changelog.md} +28 -2
  54. solara/website/pages/contact/__init__.py +8 -0
  55. solara/website/pages/documentation/__init__.py +184 -0
  56. solara/website/pages/documentation/advanced/__init__.py +36 -0
  57. solara/website/pages/documentation/advanced/content/00-overview.md +1 -0
  58. solara/website/pages/{docs/content/10-howto/20-multipage.md → documentation/advanced/content/10-howto/10-multipage.md} +4 -5
  59. solara/website/pages/{docs/content/10-howto/30-layout.md → documentation/advanced/content/10-howto/20-layout.md} +21 -21
  60. solara/website/pages/{docs/content/10-howto/80-embed.md → documentation/advanced/content/10-howto/40-embed.md} +1 -1
  61. solara/website/pages/{docs → documentation/advanced}/content/20-understanding/06-ipyvuetify.md +1 -1
  62. solara/website/pages/{docs → documentation/advanced}/content/20-understanding/12-reacton-basics.md +1 -1
  63. solara/website/pages/{docs → documentation/advanced}/content/20-understanding/15-anatomy.md +2 -2
  64. solara/website/pages/{docs → documentation/advanced}/content/20-understanding/18-containers.md +3 -3
  65. solara/website/pages/{docs → documentation/advanced}/content/20-understanding/40-routing.md +9 -9
  66. solara/website/pages/{docs → documentation/advanced}/content/20-understanding/50-solara-server.md +1 -1
  67. solara/website/pages/{docs/content/50-enterprise → documentation/advanced/content/30-enterprise}/10-oauth.md +3 -3
  68. solara/website/pages/{docs/content/10-howto → documentation/advanced/content/40-development}/01-contribute.md +5 -5
  69. solara/website/pages/{docs/content/90-development → documentation/advanced/content/40-development}/10-setup.md +2 -2
  70. solara/website/pages/documentation/advanced/content/__init__.py +0 -0
  71. solara/website/pages/documentation/api/__init__.py +19 -0
  72. solara/website/pages/documentation/api/cross_filter/__init__.py +9 -0
  73. solara/website/pages/documentation/api/hooks/__init__.py +9 -0
  74. solara/website/pages/{api → documentation/api/hooks}/use_effect.md +3 -3
  75. solara/website/pages/{api → documentation/api/hooks}/use_effect.py +2 -1
  76. solara/website/pages/{api → documentation/api/hooks}/use_memo.md +2 -2
  77. solara/website/pages/{api → documentation/api/hooks}/use_memo.py +2 -1
  78. solara/website/pages/{api → documentation/api/hooks}/use_reactive.py +1 -2
  79. solara/website/pages/{api → documentation/api/hooks}/use_state.py +1 -2
  80. solara/website/pages/documentation/api/routing/__init__.py +9 -0
  81. solara/website/pages/{api → documentation/api/routing}/generate_routes.py +1 -2
  82. solara/website/pages/{api → documentation/api/routing}/generate_routes_directory.py +1 -2
  83. solara/website/pages/{api → documentation/api/routing}/use_route.py +2 -2
  84. solara/website/pages/{api → documentation/api/routing}/use_router.py +1 -2
  85. solara/website/pages/documentation/api/utilities/__init__.py +9 -0
  86. solara/website/pages/{api → documentation/api/utilities}/component_vue.py +1 -2
  87. solara/website/pages/{api → documentation/api/utilities}/computed.py +2 -2
  88. solara/website/pages/{api → documentation/api/utilities}/display.py +1 -2
  89. solara/website/pages/{api → documentation/api/utilities}/get_kernel_id.py +2 -2
  90. solara/website/pages/{api → documentation/api/utilities}/get_session_id.py +2 -2
  91. solara/website/pages/{api → documentation/api/utilities}/on_kernel_start.py +9 -3
  92. solara/website/pages/{api → documentation/api/utilities}/reactive.py +1 -2
  93. solara/website/pages/{api → documentation/api/utilities}/widget.py +2 -2
  94. solara/website/pages/documentation/components/__init__.py +12 -0
  95. solara/website/pages/documentation/components/advanced/__init__.py +9 -0
  96. solara/website/pages/documentation/components/data/__init__.py +9 -0
  97. solara/website/pages/documentation/components/enterprise/__init__.py +9 -0
  98. solara/website/pages/{api → documentation/components/enterprise}/avatar.py +1 -2
  99. solara/website/pages/{api → documentation/components/enterprise}/avatar_menu.py +1 -2
  100. solara/website/pages/documentation/components/input/__init__.py +9 -0
  101. solara/website/pages/{api → documentation/components/input}/checkbox.py +1 -2
  102. solara/website/pages/documentation/components/input/file_drop.py +75 -0
  103. solara/website/pages/{api → documentation/components/input}/input.py +1 -2
  104. solara/website/pages/{api → documentation/components/input}/select.py +1 -2
  105. solara/website/pages/{api → documentation/components/input}/slider.py +1 -2
  106. solara/website/pages/{api → documentation/components/input}/switch.py +1 -2
  107. solara/website/pages/{api → documentation/components/input}/togglebuttons.py +1 -2
  108. solara/website/pages/documentation/components/lab/__init__.py +9 -0
  109. solara/website/pages/{api → documentation/components/lab}/chat.py +2 -3
  110. solara/website/pages/{api → documentation/components/lab}/cookies_headers.py +1 -1
  111. solara/website/pages/{api → documentation/components/lab}/input_date.py +1 -2
  112. solara/website/pages/{api → documentation/components/lab}/menu.py +1 -2
  113. solara/website/pages/{api → documentation/components/lab}/task.py +1 -2
  114. solara/website/pages/{api → documentation/components/lab}/theming.py +1 -2
  115. solara/website/pages/{api → documentation/components/lab}/use_task.py +1 -2
  116. solara/website/pages/documentation/components/layout/__init__.py +9 -0
  117. solara/website/pages/{api → documentation/components/layout}/app_bar.py +1 -2
  118. solara/website/pages/{api → documentation/components/layout}/app_bar_title.py +1 -2
  119. solara/website/pages/{api → documentation/components/layout}/card.py +1 -2
  120. solara/website/pages/{api → documentation/components/layout}/card_actions.py +1 -2
  121. solara/website/pages/{api → documentation/components/layout}/griddraggable.py +1 -1
  122. solara/website/pages/{api → documentation/components/layout}/gridfixed.py +1 -1
  123. solara/website/pages/{api → documentation/components/layout}/hbox.py +1 -1
  124. solara/website/pages/{api → documentation/components/layout}/vbox.py +1 -1
  125. solara/website/pages/documentation/components/output/__init__.py +9 -0
  126. solara/website/pages/{api → documentation/components/output}/file_download.py +1 -2
  127. solara/website/pages/{api → documentation/components/output}/image.py +1 -2
  128. solara/website/pages/{api → documentation/components/output}/tooltip.py +1 -2
  129. solara/website/pages/documentation/components/page/__init__.py +9 -0
  130. solara/website/pages/documentation/components/status/__init__.py +9 -0
  131. solara/website/pages/{api → documentation/components/status}/error.py +3 -3
  132. solara/website/pages/{api → documentation/components/status}/info.py +3 -3
  133. solara/website/pages/{api → documentation/components/status}/progress.py +1 -2
  134. solara/website/pages/{api → documentation/components/status}/spinner.py +1 -2
  135. solara/website/pages/{api → documentation/components/status}/success.py +3 -3
  136. solara/website/pages/{api → documentation/components/status}/warning.py +3 -3
  137. solara/website/pages/documentation/components/viz/__init__.py +9 -0
  138. solara/website/pages/{api → documentation/components/viz}/plotly.py +1 -0
  139. solara/website/pages/{examples → documentation/examples}/__init__.py +3 -43
  140. solara/website/pages/{examples → documentation/examples}/general/deploy_model.py +3 -3
  141. solara/website/pages/{examples → documentation/examples}/general/login_oauth.py +1 -1
  142. solara/website/pages/{examples → documentation/examples}/general/vue_component.py +1 -2
  143. solara/website/pages/{examples → documentation/examples}/libraries/altair.py +2 -3
  144. solara/website/pages/{examples → documentation/examples}/libraries/ipyleaflet_advanced.py +1 -1
  145. solara/website/pages/{examples → documentation/examples}/utilities/countdown_timer.py +1 -1
  146. solara/website/pages/{examples → documentation/examples}/visualization/plotly.py +1 -2
  147. solara/website/pages/documentation/faq/__init__.py +11 -0
  148. solara/website/pages/{docs → documentation/getting_started}/__init__.py +7 -1
  149. solara/website/pages/{docs/content/03-quickstart.md → documentation/getting_started/content/00-quickstart.md} +2 -2
  150. solara/website/pages/{docs/content/00-introduction.md → documentation/getting_started/content/01-introduction.md} +16 -16
  151. solara/website/pages/{docs → documentation/getting_started}/content/02-installing.md +1 -1
  152. solara/website/pages/documentation/getting_started/content/04-tutorials/00-overview.md +9 -0
  153. solara/website/pages/{docs/content/04-tutorial → documentation/getting_started/content/04-tutorials}/20-web-app.md +4 -4
  154. solara/website/pages/{docs/content/04-tutorial → documentation/getting_started/content/04-tutorials}/30-ipywidgets.md +9 -9
  155. solara/website/pages/{docs/content/04-tutorial → documentation/getting_started/content/04-tutorials}/40-streamlit.md +13 -13
  156. solara/website/pages/{docs/content/04-tutorial → documentation/getting_started/content/04-tutorials}/50-dash.md +3 -3
  157. solara/website/pages/{docs/content/04-tutorial → documentation/getting_started/content/04-tutorials}/_data_science.ipynb +5 -5
  158. solara/website/pages/documentation/getting_started/content/05-fundamentals/00-overview.md +7 -0
  159. solara/website/pages/{docs/content/07-fundamentals → documentation/getting_started/content/05-fundamentals}/10-components.md +2 -2
  160. solara/website/pages/{docs/content/07-fundamentals → documentation/getting_started/content/05-fundamentals}/50-state-management.md +3 -3
  161. solara/website/pages/documentation/getting_started/content/06-reference/00-overview.md +3 -0
  162. solara/website/pages/{docs/content/15-reference → documentation/getting_started/content/06-reference}/41-asset-files.md +1 -1
  163. solara/website/pages/{docs/content/15-reference → documentation/getting_started/content/06-reference}/60-static-site-generation.md +1 -1
  164. solara/website/pages/{docs/content/15-reference → documentation/getting_started/content/06-reference}/70-search.md +1 -1
  165. solara/website/pages/{docs/content/15-reference → documentation/getting_started/content/06-reference}/80-reloading.md +3 -3
  166. solara/website/pages/{docs/content/15-reference → documentation/getting_started/content/06-reference}/95-caching.md +1 -1
  167. solara/website/pages/documentation/getting_started/content/07-deploying/00-overview.md +3 -0
  168. solara/website/pages/{docs/content/30-deploying → documentation/getting_started/content/07-deploying}/10-self-hosted.md +3 -3
  169. solara/website/pages/{docs/content/30-deploying → documentation/getting_started/content/07-deploying}/20-cloud-hosted.md +1 -1
  170. solara/website/pages/documentation/getting_started/content/__init__.py +0 -0
  171. solara/website/pages/showcase/__init__.py +1 -1
  172. solara/website/pages/showcase/domino_code_assist.py +1 -1
  173. solara/website/pages/showcase/solara_dev.py +1 -1
  174. solara/website/public/social/discord.svg +1 -0
  175. solara/website/public/social/github.svg +1 -0
  176. solara/website/public/social/twitter.svg +3 -0
  177. {solara-1.29.1.dist-info → solara-1.30.0.dist-info}/METADATA +8 -7
  178. solara-1.30.0.dist-info/RECORD +438 -0
  179. {solara-1.29.1.dist-info → solara-1.30.0.dist-info}/WHEEL +1 -1
  180. solara/website/pages/api/__init__.py +0 -292
  181. solara/website/pages/api/default_layout.py +0 -16
  182. solara/website/pages/api/file_drop.py +0 -36
  183. solara/website/pages/docs/content/04-tutorial/00-overview.md +0 -9
  184. solara/website/pages/docs/content/07-fundamentals/00-overview.md +0 -7
  185. solara/website/pages/docs/content/15-reference/00-overview.md +0 -6
  186. solara/website/pages/docs/content/30-deploying/00-overview.md +0 -3
  187. solara-1.29.1.dist-info/RECORD +0 -411
  188. /solara/website/pages/{docs/content/99-contact.md → contact/contact.md} +0 -0
  189. /solara/website/pages/{docs → documentation/advanced}/content/10-howto/00-overview.md +0 -0
  190. /solara/website/pages/{docs/content/10-howto/50-testing.md → documentation/advanced/content/10-howto/30-testing.md} +0 -0
  191. /solara/website/pages/{docs/content/10-howto/51-debugging.md → documentation/advanced/content/10-howto/31-debugging.md} +0 -0
  192. /solara/website/pages/{docs/content/10-howto/ipywidget_libraries.md → documentation/advanced/content/10-howto/50-ipywidget_libraries.md} +0 -0
  193. /solara/website/pages/{docs → documentation/advanced}/content/20-understanding/00-introduction.md +0 -0
  194. /solara/website/pages/{docs → documentation/advanced}/content/20-understanding/05-ipywidgets.md +0 -0
  195. /solara/website/pages/{docs → documentation/advanced}/content/20-understanding/10-reacton.md +0 -0
  196. /solara/website/pages/{docs → documentation/advanced}/content/20-understanding/17-rules-of-hooks.md +0 -0
  197. /solara/website/pages/{docs → documentation/advanced}/content/20-understanding/20-solara.md +0 -0
  198. /solara/website/pages/{docs → documentation/advanced}/content/20-understanding/60-voila.md +0 -0
  199. /solara/website/pages/{docs/content/50-enterprise → documentation/advanced/content/30-enterprise}/00-overview.md +0 -0
  200. /solara/website/pages/{docs/content/__init__.py → documentation/advanced/content/40-development/00-overview.md} +0 -0
  201. /solara/website/pages/{api → documentation/api/cross_filter}/cross_filter_dataframe.py +0 -0
  202. /solara/website/pages/{api → documentation/api/cross_filter}/cross_filter_report.py +0 -0
  203. /solara/website/pages/{api → documentation/api/cross_filter}/cross_filter_select.py +0 -0
  204. /solara/website/pages/{api → documentation/api/cross_filter}/cross_filter_slider.py +0 -0
  205. /solara/website/pages/{api → documentation/api/hooks}/use_cross_filter.py +0 -0
  206. /solara/website/pages/{api → documentation/api/hooks}/use_dark_effective.py +0 -0
  207. /solara/website/pages/{api → documentation/api/hooks}/use_exception.py +0 -0
  208. /solara/website/pages/{api → documentation/api/hooks}/use_previous.py +0 -0
  209. /solara/website/pages/{api → documentation/api/hooks}/use_state_or_update.py +0 -0
  210. /solara/website/pages/{api → documentation/api/hooks}/use_thread.md +0 -0
  211. /solara/website/pages/{api → documentation/api/hooks}/use_thread.py +0 -0
  212. /solara/website/pages/{api → documentation/api/hooks}/use_trait_observe.py +0 -0
  213. /solara/website/pages/{api → documentation/api/routing}/resolve_path.py +0 -0
  214. /solara/website/pages/{api → documentation/api/routing}/route.py +0 -0
  215. /solara/website/pages/{api → documentation/api/utilities}/memoize.py +0 -0
  216. /solara/website/pages/{api → documentation/components/advanced}/link.py +0 -0
  217. /solara/website/pages/{api → documentation/components/advanced}/meta.py +0 -0
  218. /solara/website/pages/{api → documentation/components/advanced}/style.py +0 -0
  219. /solara/website/pages/{api → documentation/components}/common.py +0 -0
  220. /solara/website/pages/{api → documentation/components/data}/dataframe.py +0 -0
  221. /solara/website/pages/{api → documentation/components/data}/pivot_table.py +0 -0
  222. /solara/website/pages/{api → documentation/components/input}/button.py +0 -0
  223. /solara/website/pages/{api → documentation/components/input}/file_browser.py +0 -0
  224. /solara/website/pages/{api → documentation/components/lab}/confirmation_dialog.py +0 -0
  225. /solara/website/pages/{api → documentation/components/lab}/tab.py +0 -0
  226. /solara/website/pages/{api → documentation/components/lab}/tabs.py +0 -0
  227. /solara/website/pages/{api → documentation/components/layout}/app_layout.py +0 -0
  228. /solara/website/pages/{api → documentation/components/layout}/column.py +0 -0
  229. /solara/website/pages/{api → documentation/components/layout}/columns.py +0 -0
  230. /solara/website/pages/{api → documentation/components/layout}/columns_responsive.py +0 -0
  231. /solara/website/pages/{api → documentation/components/layout}/row.py +0 -0
  232. /solara/website/pages/{api → documentation/components/layout}/sidebar.py +0 -0
  233. /solara/website/pages/{api → documentation/components/output}/html.py +0 -0
  234. /solara/website/pages/{api → documentation/components/output}/markdown.py +0 -0
  235. /solara/website/pages/{api → documentation/components/output}/markdown_editor.py +0 -0
  236. /solara/website/pages/{api → documentation/components/output}/sql_code.py +0 -0
  237. /solara/website/pages/{api → documentation/components/page}/head.py +0 -0
  238. /solara/website/pages/{api → documentation/components/page}/title.py +0 -0
  239. /solara/website/pages/{api → documentation/components/viz}/altair.py +0 -0
  240. /solara/website/pages/{api → documentation/components/viz}/echarts.py +0 -0
  241. /solara/website/pages/{api → documentation/components/viz}/matplotlib.py +0 -0
  242. /solara/website/pages/{api → documentation/components/viz}/plotly_express.py +0 -0
  243. /solara/website/pages/{examples → documentation/examples}/ai/__init__.py +0 -0
  244. /solara/website/pages/{examples → documentation/examples}/ai/chatbot.py +0 -0
  245. /solara/website/pages/{examples → documentation/examples}/ai/tokenizer.py +0 -0
  246. /solara/website/pages/{examples → documentation/examples}/basics/__init__.py +0 -0
  247. /solara/website/pages/{examples → documentation/examples}/basics/sine.py +0 -0
  248. /solara/website/pages/{examples → documentation/examples}/fullscreen/__init__.py +0 -0
  249. /solara/website/pages/{examples → documentation/examples}/fullscreen/authorization.py +0 -0
  250. /solara/website/pages/{examples → documentation/examples}/fullscreen/layout_demo.py +0 -0
  251. /solara/website/pages/{examples → documentation/examples}/fullscreen/multipage.py +0 -0
  252. /solara/website/pages/{examples → documentation/examples}/fullscreen/scatter.py +0 -0
  253. /solara/website/pages/{examples → documentation/examples}/fullscreen/scrolling.py +0 -0
  254. /solara/website/pages/{examples → documentation/examples}/fullscreen/tutorial_streamlit.py +0 -0
  255. /solara/website/pages/{examples → documentation/examples}/general/__init__.py +0 -0
  256. /solara/website/pages/{examples → documentation/examples}/general/custom_storage.py +0 -0
  257. /solara/website/pages/{examples → documentation/examples}/general/live_update.py +0 -0
  258. /solara/website/pages/{examples → documentation/examples}/general/mycard.vue +0 -0
  259. /solara/website/pages/{examples → documentation/examples}/general/pokemon_search.py +0 -0
  260. /solara/website/pages/{examples → documentation/examples}/ipycanvas.py +0 -0
  261. /solara/website/pages/{examples → documentation/examples}/libraries/__init__.py +0 -0
  262. /solara/website/pages/{examples → documentation/examples}/libraries/bqplot.py +0 -0
  263. /solara/website/pages/{examples → documentation/examples}/libraries/ipyleaflet.py +0 -0
  264. /solara/website/pages/{examples → documentation/examples}/utilities/__init__.py +0 -0
  265. /solara/website/pages/{examples → documentation/examples}/utilities/calculator.py +0 -0
  266. /solara/website/pages/{examples → documentation/examples}/utilities/todo.py +0 -0
  267. /solara/website/pages/{examples → documentation/examples}/visualization/__init__.py +0 -0
  268. /solara/website/pages/{examples → documentation/examples}/visualization/annotator.py +0 -0
  269. /solara/website/pages/{examples → documentation/examples}/visualization/linked_views.py +0 -0
  270. /solara/website/pages/{docs → documentation/faq}/content/99-faq.md +0 -0
  271. /solara/website/pages/{docs/content/04-tutorial → documentation/getting_started/content/04-tutorials}/10_data_science.py +0 -0
  272. /solara/website/pages/{docs/content/04-tutorial → documentation/getting_started/content/04-tutorials}/60-jupyter-dashboard-part1.py +0 -0
  273. /solara/website/pages/{docs/content/04-tutorial → documentation/getting_started/content/04-tutorials}/SF_crime_sample.csv.gz +0 -0
  274. /solara/website/pages/{docs/content/04-tutorial → documentation/getting_started/content/04-tutorials}/_jupyter_dashboard_1.ipynb +0 -0
  275. /solara/website/pages/{docs/content/15-reference → documentation/getting_started/content/06-reference}/40-static_files.md +0 -0
  276. /solara/website/pages/{docs/content/15-reference → documentation/getting_started/content/06-reference}/90-notebook-support.md +0 -0
  277. /solara/website/pages/{docs/content/lab → documentation/getting_started/content/08-lab}/00-what-is-lab.md +0 -0
  278. /solara/website/pages/{docs → documentation/getting_started}/content/90-troubleshoot.md +0 -0
  279. {solara-1.29.1.data → solara-1.30.0.data}/data/etc/jupyter/jupyter_notebook_config.d/solara.json +0 -0
  280. {solara-1.29.1.data → solara-1.30.0.data}/data/etc/jupyter/jupyter_server_config.d/solara.json +0 -0
  281. {solara-1.29.1.dist-info → solara-1.30.0.dist-info}/entry_points.txt +0 -0
  282. {solara-1.29.1.dist-info → solara-1.30.0.dist-info}/licenses/LICENSE +0 -0
@@ -4,10 +4,9 @@
4
4
  import solara
5
5
  import solara.autorouting
6
6
  import solara.lab
7
+ from solara.website.components import NoPage
7
8
  from solara.website.utils import apidoc
8
9
 
9
- from . import NoPage
10
-
11
10
  title = "use_task"
12
11
  Page = NoPage
13
12
  __doc__ += apidoc(solara.lab.use_task) # type: ignore
@@ -0,0 +1,9 @@
1
+ import solara
2
+ from solara.website.components import NoPage, SubCategoryLayout
3
+
4
+ Page = NoPage
5
+
6
+
7
+ @solara.component
8
+ def Layout(children=[]):
9
+ SubCategoryLayout(children=children)
@@ -4,10 +4,9 @@
4
4
  """
5
5
  import solara
6
6
  import solara.lab
7
+ from solara.website.components import NoPage
7
8
  from solara.website.utils import apidoc
8
9
 
9
- from . import NoPage
10
-
11
10
  title = "AppBar"
12
11
 
13
12
  Page = NoPage
@@ -4,10 +4,9 @@
4
4
  """
5
5
  import solara
6
6
  import solara.lab
7
+ from solara.website.components import NoPage
7
8
  from solara.website.utils import apidoc
8
9
 
9
- from . import NoPage
10
-
11
10
  title = "AppBarTitle"
12
11
 
13
12
  Page = NoPage
@@ -4,10 +4,9 @@
4
4
  """
5
5
  import solara
6
6
  import solara.lab
7
+ from solara.website.components import NoPage
7
8
  from solara.website.utils import apidoc
8
9
 
9
- from . import NoPage
10
-
11
10
  title = "Card"
12
11
 
13
12
  Page = NoPage
@@ -4,10 +4,9 @@
4
4
  """
5
5
  import solara
6
6
  import solara.lab
7
+ from solara.website.components import NoPage
7
8
  from solara.website.utils import apidoc
8
9
 
9
- from . import NoPage
10
-
11
10
  title = "CardActions"
12
11
 
13
12
  Page = NoPage
@@ -8,7 +8,7 @@ import textwrap
8
8
 
9
9
  import solara
10
10
 
11
- from .common import ColorCard
11
+ from ..common import ColorCard
12
12
 
13
13
  title = "GridDraggable"
14
14
 
@@ -6,7 +6,7 @@ Lays out children in a grid with a fixed number of columns.
6
6
 
7
7
  import solara
8
8
 
9
- from .common import ColorCard
9
+ from ..common import ColorCard
10
10
 
11
11
  title = "GridFixed"
12
12
 
@@ -4,7 +4,7 @@ Lays out children in horizontal direction.
4
4
  """
5
5
  import solara
6
6
 
7
- from .common import ColorCard
7
+ from ..common import ColorCard
8
8
 
9
9
 
10
10
  @solara.component
@@ -6,7 +6,7 @@ Lays out children in a vertical direction.
6
6
 
7
7
  import solara
8
8
 
9
- from .common import ColorCard
9
+ from ..common import ColorCard
10
10
 
11
11
 
12
12
  @solara.component
@@ -0,0 +1,9 @@
1
+ import solara
2
+ from solara.website.components import NoPage, SubCategoryLayout
3
+
4
+ Page = NoPage
5
+
6
+
7
+ @solara.component
8
+ def Layout(children=[]):
9
+ SubCategoryLayout(children=children)
@@ -2,10 +2,9 @@
2
2
 
3
3
  """
4
4
  import solara
5
+ from solara.website.components import NoPage
5
6
  from solara.website.utils import apidoc
6
7
 
7
- from . import NoPage
8
-
9
8
  Page = NoPage
10
9
  title = "FileDownload"
11
10
 
@@ -2,10 +2,9 @@
2
2
 
3
3
  """
4
4
  import solara
5
+ from solara.website.components import NoPage
5
6
  from solara.website.utils import apidoc
6
7
 
7
- from . import NoPage
8
-
9
8
  Page = NoPage
10
9
  title = "Image"
11
10
 
@@ -2,10 +2,9 @@
2
2
 
3
3
  """
4
4
  import solara
5
+ from solara.website.components import NoPage
5
6
  from solara.website.utils import apidoc
6
7
 
7
- from . import NoPage
8
-
9
8
  Page = NoPage
10
9
  title = "Tooltip"
11
10
 
@@ -0,0 +1,9 @@
1
+ import solara
2
+ from solara.website.components import NoPage, SubCategoryLayout
3
+
4
+ Page = NoPage
5
+
6
+
7
+ @solara.component
8
+ def Layout(children=[]):
9
+ SubCategoryLayout(children=children)
@@ -0,0 +1,9 @@
1
+ import solara
2
+ from solara.website.components import NoPage, SubCategoryLayout
3
+
4
+ Page = NoPage
5
+
6
+
7
+ @solara.component
8
+ def Layout(children=[]):
9
+ SubCategoryLayout(children=children)
@@ -2,9 +2,9 @@
2
2
 
3
3
  Solara has 4 types of alerts:
4
4
 
5
- * [Success](/api/success)
6
- * [Info](/api/info)
7
- * [Warning](/api/warning)
5
+ * [Success](/documentation/components/status/success)
6
+ * [Info](/documentation/components/status/info)
7
+ * [Warning](/documentation/components/status/warning)
8
8
  * Error (this page)
9
9
 
10
10
 
@@ -2,10 +2,10 @@
2
2
 
3
3
  Solara has 4 types of alerts:
4
4
 
5
- * [Success](/api/success)
5
+ * [Success](/documentation/components/status/success)
6
6
  * Info (this page)
7
- * [Warning](/api/warning)
8
- * [Error](/api/error)
7
+ * [Warning](/documentation/components/status/warning)
8
+ * [Error](/documentation/components/status/error)
9
9
 
10
10
 
11
11
 
@@ -1,10 +1,9 @@
1
1
  """# ProgressLinear
2
2
  """
3
3
  import solara
4
+ from solara.website.components import NoPage
4
5
  from solara.website.utils import apidoc
5
6
 
6
- from . import NoPage
7
-
8
7
  Page = NoPage
9
8
 
10
9
 
@@ -2,10 +2,9 @@
2
2
  # SpinnerSolara
3
3
  """
4
4
  import solara
5
+ from solara.website.components import NoPage
5
6
  from solara.website.utils import apidoc
6
7
 
7
- from . import NoPage
8
-
9
8
  Page = NoPage
10
9
 
11
10
  __doc__ += apidoc(solara.SpinnerSolara.f) # type: ignore
@@ -3,9 +3,9 @@
3
3
  Solara has 4 types of alerts:
4
4
 
5
5
  * Success (this page)
6
- * [Info](/api/info)
7
- * [Warning](/api/warning)
8
- * [Error](/api/error)
6
+ * [Info](/documentation/components/status/info)
7
+ * [Warning](/documentation/components/status/warning)
8
+ * [Error](/documentation/components/status/error)
9
9
 
10
10
 
11
11
 
@@ -2,10 +2,10 @@
2
2
 
3
3
  Solara has 4 types of alerts:
4
4
 
5
- * [Success](/api/success)
6
- * [Info](/api/info)
5
+ * [Success](/documentation/components/status/success)
6
+ * [Info](/documentation/components/status/info)
7
7
  * Warning (this page)
8
- * [Error](/api/error)
8
+ * [Error](/documentation/components/status/error)
9
9
 
10
10
 
11
11
 
@@ -0,0 +1,9 @@
1
+ import solara
2
+ from solara.website.components import NoPage, SubCategoryLayout
3
+
4
+ Page = NoPage
5
+
6
+
7
+ @solara.component
8
+ def Layout(children=[]):
9
+ SubCategoryLayout(children=children)
@@ -10,6 +10,7 @@ This can be significantly faster than comparing he figure data directly.
10
10
  """
11
11
 
12
12
  import plotly.express as px
13
+
13
14
  import solara
14
15
 
15
16
  df = px.data.iris()
@@ -1,52 +1,12 @@
1
- # import inspect
2
- # import urllib.parse
3
-
4
1
  import solara
2
+ from solara.website.components import Gallery
5
3
 
6
4
  title = "Examples"
7
5
 
8
6
 
9
7
  @solara.component
10
- def Page():
11
- # show a gallery of all the examples
12
- router = solara.use_router()
13
- route_current = router.path_routes[-2]
14
-
15
- for route in route_current.children:
16
- if route.children:
17
- solara.Markdown(f"## {route.label}\n" + (route.module.__doc__ or ""))
18
- with solara.ColumnsResponsive(12, 6, 6, 6, 4):
19
- for child in route.children:
20
- path = route.path + "/" + child.path
21
- if child.path in [
22
- "tokenizer",
23
- "sine",
24
- "authorization",
25
- "layout_demo",
26
- "multipage",
27
- "scatter",
28
- "scrolling",
29
- "tutorial_streamlit",
30
- "login_oauth",
31
- "pokemon_search",
32
- "altair",
33
- "bqplot",
34
- "ipyleaflet",
35
- "calculator",
36
- "countdown_timer",
37
- "todo",
38
- ]:
39
- image = route.path + "/" + child.path + ".png"
40
- image_url = "https://dxhl76zpt6fap.cloudfront.net/public/examples/" + image
41
- else:
42
- image_url = "https://dxhl76zpt6fap.cloudfront.net/public/logo.svg"
43
-
44
- path = getattr(child.module, "redirect", path)
45
- if path:
46
- with solara.Card(child.label, style="height: 100%;"):
47
- with solara.Link(path):
48
- with solara.Column(align="center"):
49
- solara.Image(image_url, width="120px" if image_url.endswith(".svg") else "100%")
8
+ def Page(route_external=None):
9
+ Gallery(route_external)
50
10
 
51
11
 
52
12
  @solara.component
@@ -1,7 +1,8 @@
1
1
  """# Deploy model demo
2
2
 
3
- This show off a combination of [solara.lab.Menu](/api/menu) and [solara.lab.ConfirmationDialog](/api/confirmation_dialog)
4
- and [solara.use_thread](/api/use_thread) to demonstrate how to tune, fit and deploy a model.
3
+ This show off a combination of [solara.lab.Menu](/documentation/components/lab/menu) and
4
+ [solara.lab.ConfirmationDialog](/documentation/components/lab/confirmation_dialog)
5
+ and [solara.use_thread](/documentation/api/hooks/use_thread) to demonstrate how to tune, fit and deploy a model.
5
6
  The actually deployment is not real, but simulated by a thread that returns a boolean value on success and sleep for a while to
6
7
  similate the deployment taking time.
7
8
 
@@ -15,7 +16,6 @@ import time
15
16
  import numpy as np
16
17
  import pandas as pd
17
18
  import plotly.express as px
18
-
19
19
  import solara
20
20
  import solara.lab
21
21
 
@@ -54,7 +54,7 @@ def Page():
54
54
 
55
55
  This is the raw user data from the auth provider.
56
56
 
57
- We use the `picture` field to display an avatar in the [AppBar](/api/appbar).
57
+ We use the `picture` field to display an avatar in the [AppBar](/documentation/components/layout/app_bar).
58
58
  """
59
59
  )
60
60
  sl.Preformatted(pprint.pformat(auth.user.value))
@@ -4,7 +4,7 @@ Although many components can be made from the Python side, sometimes it is easie
4
4
  It can also be beneficial for performance, since instead of creating many widgets from the Python side we only send data to
5
5
  the frontend. If event handling is also done on the frontend, this reduces latency and makes you app feel much smoother.
6
6
 
7
- See [the API documentation on component_vue](/api/component_vue) for more information.
7
+ See [the API documentation on component_vue](/documentation/api/utilities/component_vue) for more information.
8
8
 
9
9
  This example is based on [the vuetify docs](https://v2.vuetifyjs.com/en/components/sparklines/#custom-labels),
10
10
  Note that the "Go to report" button does not do anything yet.
@@ -14,7 +14,6 @@ Note that the "Go to report" button does not do anything yet.
14
14
  from typing import Callable
15
15
 
16
16
  import numpy as np
17
-
18
17
  import solara
19
18
 
20
19
  seed = solara.reactive(42)
@@ -2,16 +2,15 @@
2
2
 
3
3
  [Altair](https://altair-viz.github.io/index.html) is a declarative statistical visualization library for Python.
4
4
 
5
- This example show how to use the [on_click handler](/api/altair) to display data for a specific day in the chart.
5
+ This example show how to use the [on_click handler](/documentation/components/viz/altair) to display data for a specific day in the chart.
6
6
 
7
7
  Based on [an Altair example](https://altair-viz.github.io/gallery/annual_weather_heatmap.html)
8
8
 
9
9
  """
10
10
  import altair as alt
11
11
  import pandas as pd
12
- from vega_datasets import data
13
-
14
12
  import solara
13
+ from vega_datasets import data
15
14
 
16
15
  # title = "Altair visualization"
17
16
  source = data.seattle_weather()
@@ -1,7 +1,7 @@
1
1
  """
2
2
  # ipyleaflet advanced
3
3
 
4
- Extends the [basic ipyleaflet example](/examples/libraries/ipyleaflet) with a marker that can be dragged around, and a
4
+ Extends the [basic ipyleaflet example](/documentation/examples/libraries/ipyleaflet) with a marker that can be dragged around, and a
5
5
  dropdown to select the map style. Two buttons allow to reset the map to the default zoom and center and to zoom
6
6
  to the marker.
7
7
  """
@@ -1,6 +1,6 @@
1
1
  """# Countdown timer.
2
2
 
3
- This example shows how to use [use_thread](/api/use_thread) to create a countdown timer.
3
+ This example shows how to use [use_thread](/documentation/api/hooks/use_thread) to create a countdown timer.
4
4
 
5
5
  The UI code demonstrates a lot of conditional rendering.
6
6
 
@@ -8,12 +8,11 @@ Inspired by the dash documentation.
8
8
  ## Note
9
9
 
10
10
  Solara supports plotly and plotly express. Create your figure (not a figure widget)
11
- and pass it to the [FigurePlotly](/api/plotly) component.
11
+ and pass it to the [FigurePlotly](/documentation/components/viz/plotly) component.
12
12
 
13
13
  """
14
14
  import pandas as pd
15
15
  import plotly.express as px
16
-
17
16
  import solara
18
17
 
19
18
  title = "Scatter plot using Plotly"
@@ -0,0 +1,11 @@
1
+ from pathlib import Path
2
+
3
+ import solara
4
+
5
+ title = "FAQ"
6
+ HERE = Path(__file__)
7
+
8
+
9
+ @solara.component
10
+ def Page(route_external=None):
11
+ solara.Markdown(Path(HERE.parent / "content" / "99-faq.md").read_text())
@@ -1,9 +1,15 @@
1
1
  from pathlib import Path
2
2
 
3
+ import solara
3
4
  from solara.autorouting import generate_routes_directory
4
5
 
5
- title = "Docs"
6
+ title = "Getting Started"
6
7
  HERE = Path(__file__)
7
8
  # if we didn't put the content in the subdirectory, but pointed to the current file
8
9
  # we would include the current file recursively, causing an infinite loop
9
10
  routes = generate_routes_directory(HERE.parent / "content")
11
+
12
+
13
+ @solara.component
14
+ def Page(route_external=None):
15
+ solara.Markdown(Path(HERE.parent / "content" / "00-introduction.md").read_text())
@@ -7,12 +7,12 @@ This 1-minute quickstart will get you to:
7
7
  * Run your script using Solara server.
8
8
  * (Optional) Reuse your code in the Jupyter notebook.
9
9
 
10
- If you are an existing ipywidget user and do not want to learn the component based method, you might want to skip the quickstart and directly go to the [IPywidgets user tutorial](/docs/tutorial/ipywidgets).
10
+ If you are an existing ipywidget user and do not want to learn the component based method, you might want to skip the quickstart and directly go to the [IPywidgets user tutorial](/documentation/getting_started/tutorials/ipywidgets).
11
11
 
12
12
  ## Installation
13
13
 
14
14
 
15
- Run `pip install solara`, or follow the [Installation instructions](/docs/installing) for more detailed instructions.
15
+ Run `pip install solara`, or follow the [Installation instructions](/documentation/getting_started/installing) for more detailed instructions.
16
16
 
17
17
 
18
18
  ## First script
@@ -5,7 +5,7 @@
5
5
 
6
6
  Solara is an Open Source library that lets you use and build data-focused web apps (data apps) using reusable UI components. Your app will work in the Jupyter notebook and production-grade web frameworks (FastAPI, Starlette, Flask, ...).
7
7
 
8
- Solara uses proven technologies and mature standards. Grow from a one-off experiment in the Jupyter notebook to a dynamic data portal in production. Built on top of [Reacton](/docs/understanding/reacton) to keep your code complexity under control and [IPywidgets](/docs/understanding/ipywidgets) to access a rich set of UI libraries without having to write Javascript or CSS.
8
+ Solara uses proven technologies and mature standards. Grow from a one-off experiment in the Jupyter notebook to a dynamic data portal in production. Built on top of [Reacton](/documentation/advanced/understanding/reacton) to keep your code complexity under control and [IPywidgets](/documentation/advanced/understanding/ipywidgets) to access a rich set of UI libraries without having to write Javascript or CSS.
9
9
 
10
10
  We care about developer experience. Solara will give your hot code reloading and type hints for faster development.
11
11
 
@@ -17,19 +17,19 @@ Many frameworks only solve a specific set of problems. Once you step outside of
17
17
 
18
18
  On the other extreme, you might be working with a library with no clear patterns that let you do anything. You may only be weeks away from a total code complexity nightmare, which slowly kills your project.
19
19
 
20
- At the same time, starting a new framework from scratch would be unwise. We prefer to build on top of solid, battle-tested libraries, such as [IPywidgets](/docs/understanding/ipywidgets).
20
+ At the same time, starting a new framework from scratch would be unwise. We prefer to build on top of solid, battle-tested libraries, such as [IPywidgets](/documentation/advanced/understanding/ipywidgets).
21
21
 
22
22
  ## Why use Solara?
23
23
 
24
24
  Instead of inventing a new API with an unknown track record, we take a different approach. We look at the JavaScript world. React is a technology that has proven itself for many years. It has shown to be a good all-around model for building complex UIs.
25
25
 
26
- [Reacton](/docs/understanding/reacton) is the equivalent of ReactJS for Python (and IPywidgets). It allows us to use the same reusable components and hooks as in the ReactJS ecosystem. Using Reacton, we build web/data applications without suffering from complex code bases.
26
+ [Reacton](/documentation/advanced/understanding/reacton) is the equivalent of ReactJS for Python (and IPywidgets). It allows us to use the same reusable components and hooks as in the ReactJS ecosystem. Using Reacton, we build web/data applications without suffering from complex code bases.
27
27
 
28
28
  Looking again at the JavaScript world, we see software such as NextJS is putting a framework around ReactJS. NextJS is more opinionated than ReactJS and adds more "batteries" such as routing.
29
29
 
30
30
  Solara plays a similar role as NextJS. It builds on top of Reacton but handles things like routing for you.
31
31
 
32
- But Solara is also different and is even more opinionated than NextJS. The reason for this is its focus on the data-heavy Python ecosystem. For this reason, it comes with many components and hooks that make building beautiful data apps easier (see our [API](/api)).
32
+ But Solara is also different and is even more opinionated than NextJS. The reason for this is its focus on the data-heavy Python ecosystem. For this reason, it comes with many components and hooks that make building beautiful data apps easier (see our [Documentation](/documentation)).
33
33
 
34
34
  Solara is a clear, systematic, Python-based web framework using industry-trusted technology. Smooth developer experience and enforced code modularity will allow you to build a data app at any scale while maintaining simple code.
35
35
 
@@ -37,7 +37,7 @@ Solara is a clear, systematic, Python-based web framework using industry-trusted
37
37
 
38
38
  For your understanding, it might be good just to run an example.
39
39
 
40
- Follow the [installation instructions](/docs/installing) or do the TLDR:
40
+ Follow the [installation instructions](/documentation/getting_started/installing) or do the TLDR:
41
41
 
42
42
  $ pip install solara
43
43
 
@@ -78,18 +78,18 @@ The browser should open http://127.0.0.1:8765
78
78
  Solara is actually two things.
79
79
 
80
80
  ### Solara server
81
- [Solara server](/docs/understanding/solara-server) renders ipywidgets in the browser in a very efficient manner and takes care of many other things
82
- such as [routing](/docs/understanding/routing) and [Static Site Generation](/docs/reference/static-site-generation).
81
+ [Solara server](/documentation/advanced/understanding/solara-server) renders ipywidgets in the browser in a very efficient manner and takes care of many other things
82
+ such as [routing](/documentation/advanced/understanding/routing) and [Static Site Generation](/documentation/getting_started/reference/static-site-generation).
83
83
 
84
84
  ### Solara UI
85
85
 
86
- The UI part is built on top of [Reacton](/docs/understanding/reacton), which uses the existing IPyWidgets stack. It gives a consistent set
86
+ The UI part is built on top of [Reacton](/documentation/advanced/understanding/reacton), which uses the existing IPyWidgets stack. It gives a consistent set
87
87
  of modern UI components with the Material Design look, as well as a set of routines to make application development of data heavy web apps
88
88
  easier.
89
89
 
90
90
 
91
91
  ### Overview
92
- If you use Jupyter, then you probably use the Jupyter notebook, Lab, or [Voila](/docs/understanding/voila) to get your widgets into the browser. You may not care about [Solara server](/docs/understanding/solara-server) and can focus on just the UI part.
92
+ If you use Jupyter, then you probably use the Jupyter notebook, Lab, or [Voila](/documentation/advanced/understanding/voila) to get your widgets into the browser. You may not care about [Solara server](/documentation/advanced/understanding/solara-server) and can focus on just the UI part.
93
93
 
94
94
  If you don't use Jupyter, don't know what it is, or are an ML Ops, Dev Ops, or Sys Admin, you are probably more interested in the Solara server.
95
95
 
@@ -99,19 +99,19 @@ If you don't use Jupyter, don't know what it is, or are an ML Ops, Dev Ops, or S
99
99
 
100
100
  We recommend going through the documentation linearly following the arrows on the bottom, meaning you will go through:
101
101
 
102
- * [Installing](/docs/installing)
103
- * [Quick start](/docs/quickstart)
104
- * [Tutorials](/docs/tutorial)
102
+ * [Installing](/documentation/getting_started/installing)
103
+ * [Quick start](/documentation/getting_started)
104
+ * [Tutorials](/documentation/getting_started/tutorials)
105
105
 
106
- If you want to know more about specific parts, you can go through the [How-to section](/docs/howto) to learn more. Feel free to skip chapters, and go back to topics when you need to.
106
+ If you want to know more about specific parts, you can go through the [How-to section](/documentation/advanced/howto) to learn more. Feel free to skip chapters, and go back to topics when you need to.
107
107
 
108
108
 
109
- If you want to know what components or hooks are available, or want to know more about a specific component, check out the [API](/api) which includes live code examples. Other reference documentation can be found at the [reference section](/docs/reference)
109
+ If you want to know what components or hooks are available, or want to know more about a specific component, check out the [Documentation](/documentation) which includes live code examples. Other reference documentation can be found at the [reference section](/documentation/getting_started/reference)
110
110
 
111
- If you feel like you miss some basic understanding and want to give a bit deeper into the what and why feel free to explore the [Understanding section](/docs/understanding).
111
+ If you feel like you miss some basic understanding and want to give a bit deeper into the what and why feel free to explore the [Understanding section](/documentation/advanced/understanding).
112
112
 
113
113
 
114
- [Our examples](/examples) may help you see how particular problems can be solved using Solara, or as inspiration. If you want to contribute an example, contact us on GitHub or directly open a [Pull Request](https://github.com/widgetti/solara/).
114
+ [Our examples](/documentation/examples) may help you see how particular problems can be solved using Solara, or as inspiration. If you want to contribute an example, contact us on GitHub or directly open a [Pull Request](https://github.com/widgetti/solara/).
115
115
 
116
116
 
117
117
  ## Where can I hire an expert?
@@ -44,7 +44,7 @@ solara @ https://github.com/widgetti/solara/package/archive/master.tar.gz
44
44
 
45
45
  ```
46
46
 
47
- If you want to do development on Solara, read the [development documentation](/docs/development).
47
+ If you want to do development on Solara, read the [development documentation](/documentation/advanced/development/setup).
48
48
 
49
49
  ## Air-gapped installation / Firewalled network
50
50
 
@@ -0,0 +1,9 @@
1
+ # Tutorials
2
+
3
+ Instead of having one tutorial, we have tutorials for different audiences.
4
+
5
+ * [Jupyter Dashboard](/documentation/getting_started/tutorials/jupyter-dashboard-part1): Learn to create a dashboard in the Jupyter notebook.
6
+ * [Data science](/documentation/getting_started/tutorials/data-science): In this tutorial, we will introduce Solara from the perspective of a data scientist or when you are thinking of using Solara for a data science app.
7
+ * [Web app](/documentation/getting_started/tutorials/web-app): You are not a data scientist, but you are interested in using Solara to create a web app using Pure Python.
8
+ * [IPywidgets user](/documentation/getting_started/tutorials/ipywidgets): If you are already using [ipywidgets](/documentation/advanced/understanding/ipywidgets) you will learn how to use the [Solara server](/documentation/advanced/understanding/solara-server) to render your regular ipywidget applications.
9
+ * [Streamlit](/documentation/getting_started/tutorials/streamlit): If you are an existing Streamlit user, this might appeal more to you.