solara 1.30.0__py2.py3-none-any.whl → 1.31.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 (439) hide show
  1. {solara-1.30.0.dist-info → solara-1.31.0.dist-info}/METADATA +7 -42
  2. solara-1.31.0.dist-info/RECORD +5 -0
  3. {solara-1.30.0.dist-info → solara-1.31.0.dist-info}/WHEEL +1 -1
  4. {solara/template/portal → solara-1.31.0.dist-info/licenses}/LICENSE +1 -1
  5. solara/__init__.py +0 -123
  6. solara/__main__.py +0 -734
  7. solara/alias.py +0 -6
  8. solara/autorouting.py +0 -554
  9. solara/cache.py +0 -294
  10. solara/checks.html +0 -71
  11. solara/checks.py +0 -224
  12. solara/comm.py +0 -28
  13. solara/components/__init__.py +0 -59
  14. solara/components/alert.py +0 -155
  15. solara/components/applayout.py +0 -393
  16. solara/components/button.py +0 -85
  17. solara/components/card.py +0 -87
  18. solara/components/checkbox.py +0 -50
  19. solara/components/code_highlight_css.py +0 -11
  20. solara/components/code_highlight_css.vue +0 -63
  21. solara/components/columns.py +0 -159
  22. solara/components/component_vue.py +0 -109
  23. solara/components/cross_filter.py +0 -335
  24. solara/components/dataframe.py +0 -546
  25. solara/components/datatable.py +0 -221
  26. solara/components/datatable.vue +0 -175
  27. solara/components/details.py +0 -21
  28. solara/components/download.vue +0 -35
  29. solara/components/echarts.py +0 -75
  30. solara/components/echarts.vue +0 -128
  31. solara/components/figure_altair.py +0 -39
  32. solara/components/file_browser.py +0 -182
  33. solara/components/file_download.py +0 -199
  34. solara/components/file_drop.py +0 -139
  35. solara/components/file_drop.vue +0 -83
  36. solara/components/file_list_widget.vue +0 -78
  37. solara/components/head.py +0 -27
  38. solara/components/head_tag.py +0 -49
  39. solara/components/head_tag.vue +0 -60
  40. solara/components/image.py +0 -173
  41. solara/components/input.py +0 -440
  42. solara/components/link.py +0 -55
  43. solara/components/markdown.py +0 -371
  44. solara/components/markdown_editor.py +0 -25
  45. solara/components/markdown_editor.vue +0 -362
  46. solara/components/matplotlib.py +0 -74
  47. solara/components/meta.py +0 -47
  48. solara/components/misc.py +0 -333
  49. solara/components/pivot_table.py +0 -258
  50. solara/components/pivot_table.vue +0 -158
  51. solara/components/progress.py +0 -47
  52. solara/components/select.py +0 -186
  53. solara/components/select.vue +0 -27
  54. solara/components/slider.py +0 -442
  55. solara/components/slider_date.vue +0 -56
  56. solara/components/spinner-solara.vue +0 -105
  57. solara/components/spinner.py +0 -30
  58. solara/components/sql_code.py +0 -33
  59. solara/components/sql_code.vue +0 -128
  60. solara/components/style.py +0 -105
  61. solara/components/switch.py +0 -68
  62. solara/components/tab_navigation.py +0 -37
  63. solara/components/title.py +0 -90
  64. solara/components/title.vue +0 -38
  65. solara/components/togglebuttons.py +0 -202
  66. solara/components/tooltip.py +0 -61
  67. solara/datatypes.py +0 -143
  68. solara/express.py +0 -241
  69. solara/hooks/__init__.py +0 -4
  70. solara/hooks/dataframe.py +0 -99
  71. solara/hooks/misc.py +0 -263
  72. solara/hooks/use_reactive.py +0 -129
  73. solara/hooks/use_thread.py +0 -129
  74. solara/kitchensink.py +0 -8
  75. solara/lab/__init__.py +0 -34
  76. solara/lab/components/__init__.py +0 -6
  77. solara/lab/components/chat.py +0 -203
  78. solara/lab/components/confirmation_dialog.py +0 -165
  79. solara/lab/components/cross_filter.py +0 -7
  80. solara/lab/components/input_date.py +0 -298
  81. solara/lab/components/menu.py +0 -181
  82. solara/lab/components/menu.vue +0 -38
  83. solara/lab/components/tabs.py +0 -274
  84. solara/lab/components/theming.py +0 -98
  85. solara/lab/components/theming.vue +0 -72
  86. solara/lab/hooks/__init__.py +0 -0
  87. solara/lab/hooks/dataframe.py +0 -12
  88. solara/lab/toestand.py +0 -3
  89. solara/lab/utils/__init__.py +0 -2
  90. solara/lab/utils/cookies.py +0 -5
  91. solara/lab/utils/dataframe.py +0 -115
  92. solara/lab/utils/headers.py +0 -5
  93. solara/layout.py +0 -44
  94. solara/minisettings.py +0 -133
  95. solara/py.typed +0 -0
  96. solara/reactive.py +0 -93
  97. solara/routing.py +0 -268
  98. solara/scope/__init__.py +0 -87
  99. solara/scope/types.py +0 -55
  100. solara/server/__init__.py +0 -0
  101. solara/server/app.py +0 -490
  102. solara/server/assets/custom.css +0 -1
  103. solara/server/assets/custom.js +0 -1
  104. solara/server/assets/favicon.png +0 -0
  105. solara/server/assets/favicon.svg +0 -5
  106. solara/server/assets/style.css +0 -1665
  107. solara/server/assets/theme-dark.css +0 -437
  108. solara/server/assets/theme-light.css +0 -420
  109. solara/server/assets/theme.js +0 -3
  110. solara/server/cdn_helper.py +0 -77
  111. solara/server/esm.py +0 -69
  112. solara/server/fastapi.py +0 -5
  113. solara/server/flask.py +0 -286
  114. solara/server/jupyter/__init__.py +0 -2
  115. solara/server/jupyter/cdn_handler.py +0 -28
  116. solara/server/jupyter/server_extension.py +0 -29
  117. solara/server/jupytertools.py +0 -46
  118. solara/server/kernel.py +0 -319
  119. solara/server/kernel_context.py +0 -393
  120. solara/server/patch.py +0 -552
  121. solara/server/reload.py +0 -242
  122. solara/server/server.py +0 -437
  123. solara/server/settings.py +0 -212
  124. solara/server/shell.py +0 -240
  125. solara/server/starlette.py +0 -597
  126. solara/server/static/ansi.js +0 -270
  127. solara/server/static/highlight-dark.css +0 -82
  128. solara/server/static/highlight.css +0 -43
  129. solara/server/static/main-vuetify.js +0 -260
  130. solara/server/static/main.js +0 -163
  131. solara/server/static/solara_bootstrap.py +0 -129
  132. solara/server/static/sun.svg +0 -23
  133. solara/server/static/webworker.js +0 -42
  134. solara/server/telemetry.py +0 -212
  135. solara/server/templates/index.html.j2 +0 -1
  136. solara/server/templates/loader-plain.css +0 -11
  137. solara/server/templates/loader-plain.html +0 -20
  138. solara/server/templates/loader-solara.css +0 -111
  139. solara/server/templates/loader-solara.html +0 -40
  140. solara/server/templates/plain.html +0 -82
  141. solara/server/templates/solara.html.j2 +0 -446
  142. solara/server/threaded.py +0 -75
  143. solara/server/utils.py +0 -30
  144. solara/server/websocket.py +0 -44
  145. solara/settings.py +0 -56
  146. solara/tasks.py +0 -847
  147. solara/template/button.py +0 -16
  148. solara/template/markdown.py +0 -42
  149. solara/template/portal/.flake8 +0 -6
  150. solara/template/portal/.pre-commit-config.yaml +0 -28
  151. solara/template/portal/Procfile +0 -7
  152. solara/template/portal/mypy.ini +0 -3
  153. solara/template/portal/pyproject.toml +0 -26
  154. solara/template/portal/solara_portal/__init__.py +0 -3
  155. solara/template/portal/solara_portal/components/__init__.py +0 -2
  156. solara/template/portal/solara_portal/components/article.py +0 -28
  157. solara/template/portal/solara_portal/components/data.py +0 -28
  158. solara/template/portal/solara_portal/components/header.py +0 -6
  159. solara/template/portal/solara_portal/components/layout.py +0 -6
  160. solara/template/portal/solara_portal/content/articles/equis-in-vidi.md +0 -85
  161. solara/template/portal/solara_portal/content/articles/substiterat-vati.md +0 -70
  162. solara/template/portal/solara_portal/data.py +0 -60
  163. solara/template/portal/solara_portal/pages/__init__.py +0 -67
  164. solara/template/portal/solara_portal/pages/article/__init__.py +0 -26
  165. solara/template/portal/solara_portal/pages/tabular.py +0 -29
  166. solara/template/portal/solara_portal/pages/viz/__init__.py +0 -69
  167. solara/template/portal/solara_portal/pages/viz/overview.py +0 -14
  168. solara/test/__init__.py +0 -0
  169. solara/test/pytest_plugin.py +0 -698
  170. solara/toestand.py +0 -772
  171. solara/util.py +0 -308
  172. solara/website/__init__.py +0 -0
  173. solara/website/assets/custom.css +0 -462
  174. solara/website/assets/images/logo-small.png +0 -0
  175. solara/website/assets/images/logo.svg +0 -17
  176. solara/website/assets/images/logo_white.svg +0 -50
  177. solara/website/assets/theme.js +0 -8
  178. solara/website/components/__init__.py +0 -5
  179. solara/website/components/algolia.vue +0 -24
  180. solara/website/components/algolia_api.vue +0 -157
  181. solara/website/components/docs.py +0 -118
  182. solara/website/components/header.py +0 -72
  183. solara/website/components/hero.py +0 -15
  184. solara/website/components/mailchimp.py +0 -12
  185. solara/website/components/mailchimp.vue +0 -47
  186. solara/website/components/notebook.py +0 -172
  187. solara/website/pages/__init__.py +0 -564
  188. solara/website/pages/apps/__init__.py +0 -16
  189. solara/website/pages/apps/authorization/__init__.py +0 -118
  190. solara/website/pages/apps/authorization/admin.py +0 -12
  191. solara/website/pages/apps/authorization/users.py +0 -12
  192. solara/website/pages/apps/jupyter-dashboard-1.py +0 -116
  193. solara/website/pages/apps/layout-demo.py +0 -40
  194. solara/website/pages/apps/multipage/__init__.py +0 -38
  195. solara/website/pages/apps/multipage/page1.py +0 -26
  196. solara/website/pages/apps/multipage/page2.py +0 -34
  197. solara/website/pages/apps/scatter.py +0 -136
  198. solara/website/pages/apps/scrolling.py +0 -63
  199. solara/website/pages/apps/tutorial-streamlit.py +0 -18
  200. solara/website/pages/changelog/__init__.py +0 -8
  201. solara/website/pages/changelog/changelog.md +0 -180
  202. solara/website/pages/contact/__init__.py +0 -8
  203. solara/website/pages/contact/contact.md +0 -17
  204. solara/website/pages/doc_use_download.py +0 -85
  205. solara/website/pages/documentation/__init__.py +0 -184
  206. solara/website/pages/documentation/advanced/__init__.py +0 -36
  207. solara/website/pages/documentation/advanced/content/00-overview.md +0 -1
  208. solara/website/pages/documentation/advanced/content/10-howto/00-overview.md +0 -1
  209. solara/website/pages/documentation/advanced/content/10-howto/10-multipage.md +0 -191
  210. solara/website/pages/documentation/advanced/content/10-howto/20-layout.md +0 -120
  211. solara/website/pages/documentation/advanced/content/10-howto/30-testing.md +0 -149
  212. solara/website/pages/documentation/advanced/content/10-howto/31-debugging.md +0 -66
  213. solara/website/pages/documentation/advanced/content/10-howto/40-embed.md +0 -43
  214. solara/website/pages/documentation/advanced/content/10-howto/50-ipywidget_libraries.md +0 -120
  215. solara/website/pages/documentation/advanced/content/20-understanding/00-introduction.md +0 -4
  216. solara/website/pages/documentation/advanced/content/20-understanding/05-ipywidgets.md +0 -30
  217. solara/website/pages/documentation/advanced/content/20-understanding/06-ipyvuetify.md +0 -38
  218. solara/website/pages/documentation/advanced/content/20-understanding/10-reacton.md +0 -24
  219. solara/website/pages/documentation/advanced/content/20-understanding/12-reacton-basics.md +0 -104
  220. solara/website/pages/documentation/advanced/content/20-understanding/15-anatomy.md +0 -19
  221. solara/website/pages/documentation/advanced/content/20-understanding/17-rules-of-hooks.md +0 -3
  222. solara/website/pages/documentation/advanced/content/20-understanding/18-containers.md +0 -160
  223. solara/website/pages/documentation/advanced/content/20-understanding/20-solara.md +0 -13
  224. solara/website/pages/documentation/advanced/content/20-understanding/40-routing.md +0 -236
  225. solara/website/pages/documentation/advanced/content/20-understanding/50-solara-server.md +0 -81
  226. solara/website/pages/documentation/advanced/content/20-understanding/60-voila.md +0 -7
  227. solara/website/pages/documentation/advanced/content/30-enterprise/00-overview.md +0 -1
  228. solara/website/pages/documentation/advanced/content/30-enterprise/10-oauth.md +0 -167
  229. solara/website/pages/documentation/advanced/content/40-development/00-overview.md +0 -0
  230. solara/website/pages/documentation/advanced/content/40-development/01-contribute.md +0 -41
  231. solara/website/pages/documentation/advanced/content/40-development/10-setup.md +0 -72
  232. solara/website/pages/documentation/advanced/content/__init__.py +0 -0
  233. solara/website/pages/documentation/api/__init__.py +0 -19
  234. solara/website/pages/documentation/api/cross_filter/__init__.py +0 -9
  235. solara/website/pages/documentation/api/cross_filter/cross_filter_dataframe.py +0 -23
  236. solara/website/pages/documentation/api/cross_filter/cross_filter_report.py +0 -22
  237. solara/website/pages/documentation/api/cross_filter/cross_filter_select.py +0 -22
  238. solara/website/pages/documentation/api/cross_filter/cross_filter_slider.py +0 -22
  239. solara/website/pages/documentation/api/hooks/__init__.py +0 -9
  240. solara/website/pages/documentation/api/hooks/use_cross_filter.py +0 -25
  241. solara/website/pages/documentation/api/hooks/use_dark_effective.py +0 -13
  242. solara/website/pages/documentation/api/hooks/use_effect.md +0 -43
  243. solara/website/pages/documentation/api/hooks/use_effect.py +0 -9
  244. solara/website/pages/documentation/api/hooks/use_exception.py +0 -33
  245. solara/website/pages/documentation/api/hooks/use_memo.md +0 -16
  246. solara/website/pages/documentation/api/hooks/use_memo.py +0 -9
  247. solara/website/pages/documentation/api/hooks/use_previous.py +0 -32
  248. solara/website/pages/documentation/api/hooks/use_reactive.py +0 -15
  249. solara/website/pages/documentation/api/hooks/use_state.py +0 -11
  250. solara/website/pages/documentation/api/hooks/use_state_or_update.py +0 -68
  251. solara/website/pages/documentation/api/hooks/use_thread.md +0 -58
  252. solara/website/pages/documentation/api/hooks/use_thread.py +0 -44
  253. solara/website/pages/documentation/api/hooks/use_trait_observe.py +0 -13
  254. solara/website/pages/documentation/api/routing/__init__.py +0 -9
  255. solara/website/pages/documentation/api/routing/generate_routes.py +0 -11
  256. solara/website/pages/documentation/api/routing/generate_routes_directory.py +0 -11
  257. solara/website/pages/documentation/api/routing/resolve_path.py +0 -36
  258. solara/website/pages/documentation/api/routing/route.py +0 -32
  259. solara/website/pages/documentation/api/routing/use_route.py +0 -80
  260. solara/website/pages/documentation/api/routing/use_router.py +0 -15
  261. solara/website/pages/documentation/api/utilities/__init__.py +0 -9
  262. solara/website/pages/documentation/api/utilities/component_vue.py +0 -11
  263. solara/website/pages/documentation/api/utilities/computed.py +0 -16
  264. solara/website/pages/documentation/api/utilities/display.py +0 -15
  265. solara/website/pages/documentation/api/utilities/get_kernel_id.py +0 -16
  266. solara/website/pages/documentation/api/utilities/get_session_id.py +0 -16
  267. solara/website/pages/documentation/api/utilities/memoize.py +0 -36
  268. solara/website/pages/documentation/api/utilities/on_kernel_start.py +0 -27
  269. solara/website/pages/documentation/api/utilities/reactive.py +0 -15
  270. solara/website/pages/documentation/api/utilities/widget.py +0 -104
  271. solara/website/pages/documentation/components/__init__.py +0 -12
  272. solara/website/pages/documentation/components/advanced/__init__.py +0 -9
  273. solara/website/pages/documentation/components/advanced/link.py +0 -28
  274. solara/website/pages/documentation/components/advanced/meta.py +0 -21
  275. solara/website/pages/documentation/components/advanced/style.py +0 -44
  276. solara/website/pages/documentation/components/common.py +0 -9
  277. solara/website/pages/documentation/components/data/__init__.py +0 -9
  278. solara/website/pages/documentation/components/data/dataframe.py +0 -44
  279. solara/website/pages/documentation/components/data/pivot_table.py +0 -81
  280. solara/website/pages/documentation/components/enterprise/__init__.py +0 -9
  281. solara/website/pages/documentation/components/enterprise/avatar.py +0 -19
  282. solara/website/pages/documentation/components/enterprise/avatar_menu.py +0 -20
  283. solara/website/pages/documentation/components/input/__init__.py +0 -9
  284. solara/website/pages/documentation/components/input/button.py +0 -22
  285. solara/website/pages/documentation/components/input/checkbox.py +0 -12
  286. solara/website/pages/documentation/components/input/file_browser.py +0 -33
  287. solara/website/pages/documentation/components/input/file_drop.py +0 -75
  288. solara/website/pages/documentation/components/input/input.py +0 -18
  289. solara/website/pages/documentation/components/input/select.py +0 -21
  290. solara/website/pages/documentation/components/input/slider.py +0 -28
  291. solara/website/pages/documentation/components/input/switch.py +0 -12
  292. solara/website/pages/documentation/components/input/togglebuttons.py +0 -20
  293. solara/website/pages/documentation/components/lab/__init__.py +0 -9
  294. solara/website/pages/documentation/components/lab/chat.py +0 -108
  295. solara/website/pages/documentation/components/lab/confirmation_dialog.py +0 -55
  296. solara/website/pages/documentation/components/lab/cookies_headers.py +0 -48
  297. solara/website/pages/documentation/components/lab/input_date.py +0 -19
  298. solara/website/pages/documentation/components/lab/menu.py +0 -21
  299. solara/website/pages/documentation/components/lab/tab.py +0 -24
  300. solara/website/pages/documentation/components/lab/tabs.py +0 -44
  301. solara/website/pages/documentation/components/lab/task.py +0 -12
  302. solara/website/pages/documentation/components/lab/theming.py +0 -72
  303. solara/website/pages/documentation/components/lab/use_task.py +0 -12
  304. solara/website/pages/documentation/components/layout/__init__.py +0 -9
  305. solara/website/pages/documentation/components/layout/app_bar.py +0 -15
  306. solara/website/pages/documentation/components/layout/app_bar_title.py +0 -15
  307. solara/website/pages/documentation/components/layout/app_layout.py +0 -23
  308. solara/website/pages/documentation/components/layout/card.py +0 -14
  309. solara/website/pages/documentation/components/layout/card_actions.py +0 -15
  310. solara/website/pages/documentation/components/layout/column.py +0 -29
  311. solara/website/pages/documentation/components/layout/columns.py +0 -26
  312. solara/website/pages/documentation/components/layout/columns_responsive.py +0 -67
  313. solara/website/pages/documentation/components/layout/griddraggable.py +0 -61
  314. solara/website/pages/documentation/components/layout/gridfixed.py +0 -21
  315. solara/website/pages/documentation/components/layout/hbox.py +0 -17
  316. solara/website/pages/documentation/components/layout/row.py +0 -29
  317. solara/website/pages/documentation/components/layout/sidebar.py +0 -23
  318. solara/website/pages/documentation/components/layout/vbox.py +0 -19
  319. solara/website/pages/documentation/components/output/__init__.py +0 -9
  320. solara/website/pages/documentation/components/output/file_download.py +0 -12
  321. solara/website/pages/documentation/components/output/html.py +0 -22
  322. solara/website/pages/documentation/components/output/image.py +0 -12
  323. solara/website/pages/documentation/components/output/markdown.py +0 -59
  324. solara/website/pages/documentation/components/output/markdown_editor.py +0 -53
  325. solara/website/pages/documentation/components/output/sql_code.py +0 -84
  326. solara/website/pages/documentation/components/output/tooltip.py +0 -12
  327. solara/website/pages/documentation/components/page/__init__.py +0 -9
  328. solara/website/pages/documentation/components/page/head.py +0 -19
  329. solara/website/pages/documentation/components/page/title.py +0 -28
  330. solara/website/pages/documentation/components/status/__init__.py +0 -9
  331. solara/website/pages/documentation/components/status/error.py +0 -40
  332. solara/website/pages/documentation/components/status/info.py +0 -40
  333. solara/website/pages/documentation/components/status/progress.py +0 -10
  334. solara/website/pages/documentation/components/status/spinner.py +0 -10
  335. solara/website/pages/documentation/components/status/success.py +0 -40
  336. solara/website/pages/documentation/components/status/warning.py +0 -47
  337. solara/website/pages/documentation/components/viz/__init__.py +0 -9
  338. solara/website/pages/documentation/components/viz/altair.py +0 -44
  339. solara/website/pages/documentation/components/viz/echarts.py +0 -78
  340. solara/website/pages/documentation/components/viz/matplotlib.py +0 -32
  341. solara/website/pages/documentation/components/viz/plotly.py +0 -63
  342. solara/website/pages/documentation/components/viz/plotly_express.py +0 -41
  343. solara/website/pages/documentation/examples/__init__.py +0 -52
  344. solara/website/pages/documentation/examples/ai/__init__.py +0 -10
  345. solara/website/pages/documentation/examples/ai/chatbot.py +0 -96
  346. solara/website/pages/documentation/examples/ai/tokenizer.py +0 -106
  347. solara/website/pages/documentation/examples/basics/__init__.py +0 -2
  348. solara/website/pages/documentation/examples/basics/sine.py +0 -28
  349. solara/website/pages/documentation/examples/fullscreen/__init__.py +0 -9
  350. solara/website/pages/documentation/examples/fullscreen/authorization.py +0 -3
  351. solara/website/pages/documentation/examples/fullscreen/layout_demo.py +0 -3
  352. solara/website/pages/documentation/examples/fullscreen/multipage.py +0 -3
  353. solara/website/pages/documentation/examples/fullscreen/scatter.py +0 -3
  354. solara/website/pages/documentation/examples/fullscreen/scrolling.py +0 -3
  355. solara/website/pages/documentation/examples/fullscreen/tutorial_streamlit.py +0 -3
  356. solara/website/pages/documentation/examples/general/__init__.py +0 -9
  357. solara/website/pages/documentation/examples/general/custom_storage.py +0 -69
  358. solara/website/pages/documentation/examples/general/deploy_model.py +0 -114
  359. solara/website/pages/documentation/examples/general/live_update.py +0 -38
  360. solara/website/pages/documentation/examples/general/login_oauth.py +0 -76
  361. solara/website/pages/documentation/examples/general/mycard.vue +0 -58
  362. solara/website/pages/documentation/examples/general/pokemon_search.py +0 -51
  363. solara/website/pages/documentation/examples/general/vue_component.py +0 -50
  364. solara/website/pages/documentation/examples/ipycanvas.py +0 -49
  365. solara/website/pages/documentation/examples/libraries/__init__.py +0 -9
  366. solara/website/pages/documentation/examples/libraries/altair.py +0 -63
  367. solara/website/pages/documentation/examples/libraries/bqplot.py +0 -39
  368. solara/website/pages/documentation/examples/libraries/ipyleaflet.py +0 -32
  369. solara/website/pages/documentation/examples/libraries/ipyleaflet_advanced.py +0 -65
  370. solara/website/pages/documentation/examples/utilities/__init__.py +0 -9
  371. solara/website/pages/documentation/examples/utilities/calculator.py +0 -157
  372. solara/website/pages/documentation/examples/utilities/countdown_timer.py +0 -64
  373. solara/website/pages/documentation/examples/utilities/todo.py +0 -195
  374. solara/website/pages/documentation/examples/visualization/__init__.py +0 -6
  375. solara/website/pages/documentation/examples/visualization/annotator.py +0 -68
  376. solara/website/pages/documentation/examples/visualization/linked_views.py +0 -84
  377. solara/website/pages/documentation/examples/visualization/plotly.py +0 -43
  378. solara/website/pages/documentation/faq/__init__.py +0 -11
  379. solara/website/pages/documentation/faq/content/99-faq.md +0 -73
  380. solara/website/pages/documentation/getting_started/__init__.py +0 -15
  381. solara/website/pages/documentation/getting_started/content/00-quickstart.md +0 -84
  382. solara/website/pages/documentation/getting_started/content/01-introduction.md +0 -121
  383. solara/website/pages/documentation/getting_started/content/02-installing.md +0 -81
  384. solara/website/pages/documentation/getting_started/content/04-tutorials/00-overview.md +0 -9
  385. solara/website/pages/documentation/getting_started/content/04-tutorials/10_data_science.py +0 -13
  386. solara/website/pages/documentation/getting_started/content/04-tutorials/20-web-app.md +0 -84
  387. solara/website/pages/documentation/getting_started/content/04-tutorials/30-ipywidgets.md +0 -120
  388. solara/website/pages/documentation/getting_started/content/04-tutorials/40-streamlit.md +0 -141
  389. solara/website/pages/documentation/getting_started/content/04-tutorials/50-dash.md +0 -140
  390. solara/website/pages/documentation/getting_started/content/04-tutorials/60-jupyter-dashboard-part1.py +0 -64
  391. solara/website/pages/documentation/getting_started/content/04-tutorials/SF_crime_sample.csv.gz +0 -0
  392. solara/website/pages/documentation/getting_started/content/04-tutorials/_data_science.ipynb +0 -445
  393. solara/website/pages/documentation/getting_started/content/04-tutorials/_jupyter_dashboard_1.ipynb +0 -1000
  394. solara/website/pages/documentation/getting_started/content/05-fundamentals/00-overview.md +0 -7
  395. solara/website/pages/documentation/getting_started/content/05-fundamentals/10-components.md +0 -218
  396. solara/website/pages/documentation/getting_started/content/05-fundamentals/50-state-management.md +0 -83
  397. solara/website/pages/documentation/getting_started/content/06-reference/00-overview.md +0 -3
  398. solara/website/pages/documentation/getting_started/content/06-reference/40-static_files.md +0 -27
  399. solara/website/pages/documentation/getting_started/content/06-reference/41-asset-files.md +0 -32
  400. solara/website/pages/documentation/getting_started/content/06-reference/60-static-site-generation.md +0 -55
  401. solara/website/pages/documentation/getting_started/content/06-reference/70-search.md +0 -30
  402. solara/website/pages/documentation/getting_started/content/06-reference/80-reloading.md +0 -30
  403. solara/website/pages/documentation/getting_started/content/06-reference/90-notebook-support.md +0 -4
  404. solara/website/pages/documentation/getting_started/content/06-reference/95-caching.md +0 -143
  405. solara/website/pages/documentation/getting_started/content/07-deploying/00-overview.md +0 -3
  406. solara/website/pages/documentation/getting_started/content/07-deploying/10-self-hosted.md +0 -269
  407. solara/website/pages/documentation/getting_started/content/07-deploying/20-cloud-hosted.md +0 -76
  408. solara/website/pages/documentation/getting_started/content/08-lab/00-what-is-lab.md +0 -3
  409. solara/website/pages/documentation/getting_started/content/90-troubleshoot.md +0 -22
  410. solara/website/pages/documentation/getting_started/content/__init__.py +0 -0
  411. solara/website/pages/docutils.py +0 -38
  412. solara/website/pages/showcase/__init__.py +0 -105
  413. solara/website/pages/showcase/domino_code_assist.py +0 -60
  414. solara/website/pages/showcase/planeto_tessa.py +0 -19
  415. solara/website/pages/showcase/solara_dev.py +0 -54
  416. solara/website/pages/showcase/solarathon_2023_team_2.py +0 -22
  417. solara/website/pages/showcase/solarathon_2023_team_4.py +0 -22
  418. solara/website/pages/showcase/solarathon_2023_team_5.py +0 -23
  419. solara/website/pages/showcase/solarathon_2023_team_6.py +0 -34
  420. solara/website/pages/showcase/wanderlust.py +0 -27
  421. solara/website/public/beach.jpeg +0 -0
  422. solara/website/public/logo.svg +0 -6
  423. solara/website/public/social/discord.svg +0 -1
  424. solara/website/public/social/github.svg +0 -1
  425. solara/website/public/social/twitter.svg +0 -3
  426. solara/website/public/success.html +0 -25
  427. solara/website/templates/index.html.j2 +0 -117
  428. solara/website/utils.py +0 -51
  429. solara/widgets/__init__.py +0 -1
  430. solara/widgets/vue/gridlayout.vue +0 -110
  431. solara/widgets/vue/html.vue +0 -4
  432. solara/widgets/vue/navigator.vue +0 -104
  433. solara/widgets/vue/vegalite.vue +0 -115
  434. solara/widgets/widgets.py +0 -65
  435. solara-1.30.0.data/data/etc/jupyter/jupyter_notebook_config.d/solara.json +0 -7
  436. solara-1.30.0.data/data/etc/jupyter/jupyter_server_config.d/solara.json +0 -7
  437. solara-1.30.0.dist-info/RECORD +0 -438
  438. solara-1.30.0.dist-info/entry_points.txt +0 -5
  439. /solara-1.30.0.dist-info/licenses/LICENSE → /LICENSE +0 -0
@@ -1,6 +0,0 @@
1
- import solara
2
-
3
-
4
- @solara.component
5
- def Page():
6
- return solara.Markdown("Click an example on the left")
@@ -1,68 +0,0 @@
1
- """# Image annotation with Solara
2
-
3
- This example displays how to annotate images with different drawing tools in plotly figures. Use the canvas
4
- below to draw shapes and visualize the canvas callback.
5
-
6
-
7
- Check [plotly docs](https://dash.plotly.com/annotations) for more information about image annotation.
8
- """
9
- import json
10
-
11
- import plotly.graph_objects as go
12
-
13
- import solara
14
-
15
- title = "Plotly Image Annotator"
16
- shapes = solara.reactive(None)
17
-
18
-
19
- class CustomEncoder(json.JSONEncoder):
20
- """
21
- Custom JSON encoder for Plotly objects.
22
-
23
- Plotly may return objects that the standard JSON encoder can't handle. This
24
- encoder converts such objects to str, allowing serialization by json.dumps
25
- """
26
-
27
- def default(self, o):
28
- if isinstance(o, object):
29
- return str(o)
30
- return super().default(o)
31
-
32
-
33
- @solara.component
34
- def Page():
35
- def on_relayout(data):
36
- if data is None:
37
- return
38
-
39
- relayout_data = data["relayout_data"]
40
-
41
- if "shapes" in relayout_data:
42
- shapes.value = relayout_data["shapes"]
43
-
44
- fig = go.FigureWidget(
45
- layout=go.Layout(
46
- showlegend=False,
47
- autosize=False,
48
- width=600,
49
- height=600,
50
- dragmode="drawrect",
51
- modebar={
52
- "add": [
53
- "drawclosedpath",
54
- "drawcircle",
55
- "drawrect",
56
- "eraseshape",
57
- ]
58
- },
59
- )
60
- )
61
-
62
- solara.FigurePlotly(fig, on_relayout=on_relayout)
63
- if not shapes.value:
64
- solara.Markdown("## Draw on the canvas")
65
- else:
66
- solara.Markdown("## Data returned by drawing")
67
- formatted_shapes = str(json.dumps(shapes.value, indent=2, cls=CustomEncoder))
68
- solara.Preformatted(formatted_shapes)
@@ -1,84 +0,0 @@
1
- """# Linked views
2
-
3
- This example shows how to create linked views. The clicked row information is passed up to the parent component using an event,
4
- and then passed down to both child components.
5
-
6
- """
7
-
8
- import dataclasses
9
- from typing import Callable, cast
10
-
11
- import plotly.express as px
12
-
13
- import solara
14
-
15
- df = px.data.iris()
16
- columns = list(df.columns)
17
-
18
-
19
- @dataclasses.dataclass
20
- class ClickPoint:
21
- row_index: int
22
- x_column: str
23
- y_column: str
24
-
25
-
26
- def find_row_index(fig, click_data):
27
- # goes from trace index and point index to row index in a dataframe
28
- # requires passing df.index as to custom_data
29
- trace_index = click_data["points"]["trace_indexes"][0]
30
- point_index = click_data["points"]["point_indexes"][0]
31
- trace = fig.data[trace_index]
32
- return trace.customdata[point_index][0]
33
-
34
-
35
- @solara.component
36
- def ClickScatter(df, x, y, color, click_row, on_click: Callable[[ClickPoint], None]):
37
- x, set_x = solara.use_state(x)
38
- y, set_y = solara.use_state(y)
39
- fig = px.scatter(df, x, y, color=color, custom_data=[df.index])
40
-
41
- def on_click_trace(click_data):
42
- # sanity checks
43
- assert click_data["event_type"] == "plotly_click"
44
- row_index = find_row_index(fig, click_data)
45
- on_click(ClickPoint(row_index, x, y))
46
-
47
- if click_row:
48
- click_x = df[x].values[click_row]
49
- click_y = df[y].values[click_row]
50
- fig.add_trace(px.scatter(x=[click_x], y=[click_y], text=["⭐️"]).data[0])
51
- # make the figure a bit smaller
52
- fig.update_layout(width=400)
53
- with solara.VBox() as main:
54
- solara.FigurePlotly(fig, on_click=on_click_trace)
55
- solara.Select(label="X-axis", value=x, values=columns, on_value=set_x)
56
- solara.Select(label="Y-axis", value=y, values=columns, on_value=set_y)
57
- return main
58
-
59
-
60
- @solara.component
61
- def Page():
62
- click_point, set_click_point = solara.use_state(cast(ClickPoint, None))
63
- if click_point:
64
- clicked_row = click_point.row_index
65
- else:
66
- clicked_row = None
67
-
68
- with solara.VBox() as main:
69
- with solara.HBox():
70
- ClickScatter(df, "sepal_length", "sepal_width", "species", clicked_row, on_click=set_click_point)
71
- ClickScatter(df, "petal_length", "petal_width", "species", clicked_row, on_click=set_click_point)
72
- if click_point is not None:
73
- clicked_row = click_point.row_index
74
- solara.Success(f"Clicked on row {clicked_row}. Which is highlighted in the both plots.")
75
- solara.Markdown(
76
- f"""
77
- ```python
78
- row_data = {df.iloc[clicked_row].to_dict()}
79
- ```"""
80
- )
81
- else:
82
- solara.Info("Click to select a point")
83
-
84
- return main
@@ -1,43 +0,0 @@
1
- """# Scatter plot using Plotly
2
-
3
- This example shows how to use Plotly to create a scatter plot and a slider to do some filtering.
4
-
5
- Inspired by the dash documentation.
6
-
7
-
8
- ## Note
9
-
10
- Solara supports plotly and plotly express. Create your figure (not a figure widget)
11
- and pass it to the [FigurePlotly](/documentation/components/viz/plotly) component.
12
-
13
- """
14
- import pandas as pd
15
- import plotly.express as px
16
- import solara
17
-
18
- title = "Scatter plot using Plotly"
19
-
20
- try:
21
- df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv")
22
- except Exception:
23
- df = None
24
-
25
- if df is not None:
26
- year_min = df["year"].min()
27
- year_max = df["year"].max()
28
- years = df["year"].unique().tolist()
29
-
30
-
31
- @solara.component
32
- def Page():
33
- with solara.Div() as main:
34
- index = solara.ui_slider(value=0, min=0, max=len(years) - 1, tick_labels=years, key="year slider index")
35
- selected_year = years[index]
36
-
37
- filtered_df = df[df.year == selected_year].copy()
38
-
39
- fig = px.scatter(filtered_df, x="gdpPercap", y="lifeExp", size="pop", color="continent", hover_name="country", log_x=True, size_max=55)
40
- fig.update_layout(transition_duration=1500)
41
-
42
- solara.FigurePlotly(fig, dependencies=[selected_year])
43
- return main
@@ -1,11 +0,0 @@
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,73 +0,0 @@
1
-
2
- # FAQ
3
-
4
- ## I am not interested in the server, I'm happy with Jupyter/Voila, what's in it for me?
5
-
6
- That means you simply do not use or install the server component, just use the Reacton components and run it with Voila.
7
-
8
- ## Is the Solara server better than Voilà?
9
-
10
- No, they are different, and there are situations where I would recommend Voila instead of Solara.
11
-
12
- If your app is compute-heavy, and a lot of the compute is happening in pure Python, the GIL (Global Interpreter Lock) can become a bottleneck with Solara, and Voila might give you better performance per client.
13
-
14
- If you have a lot of users with short sessions, Solara spares you from having to start up a kernel for each request. Since Solara can use multiple workers in the near future, you can still scale up using multiple processes. Voila will have one process per user, while Solara can share a process with many users.
15
-
16
-
17
- ## Can Solara run a normal Python script?
18
-
19
- Yes, this is the preferred way of using Solara. You edit a Python script, save it, Solara will detect the file change and reload the page in your browser (no interaction is needed).
20
-
21
- ```bash
22
- $ solara myapp.py
23
- Solara server is starting at http://localhost:8766
24
- ... file change detected ...
25
- (server refreshes, your page will reload)
26
-
27
- ```
28
-
29
- ## Can Solara run from a Python package/module?
30
-
31
- Over time, when your application becomes larger, you probably want to structure your application into a Python package. Instead of a filename, you pass in the package name on the command line
32
-
33
- ```bash
34
- $ solara mystartup.killerapp --dev
35
- ....
36
- ```
37
-
38
- ## Can Solara run Jupyter notebook?
39
-
40
- Yes, Solara will execute each cell, and after that will look for a variable or component called `Page`, like with a normal script. All other output, Markdown or other types of cells will be ignored.
41
-
42
-
43
-
44
- ## Can I use Solara in my existing FastAPI/Starlette/Flask server?
45
-
46
- Yes, take a look at the `solara.server.starlette` and `solara.server.fastapi` and `solara.server.flask` module. The usage will change over time, so read the source and be ready to change this in the future. We do plan to provide a stable API for this in the future.
47
-
48
-
49
- ## How to fix: inotify watch limit reached?
50
-
51
- Add the line
52
-
53
- fs.inotify.max_user_watches=524288
54
-
55
- To your /etc/sysctl.conf file, and run `sudo sysctl -p.`
56
-
57
- Or if you are using visual studio code, please read: https://code.visualstudio.com/docs/setup/linux#_visual-studio-code-is-unable-to-watch-for-file-changes-in-this-large-workspace-error-enospc
58
-
59
-
60
- ## How can I recognize if I run in Solara, Voila or Jupyter Notebook/Lab
61
-
62
- Voila and Solara set the following environment variables (based on the CGI spec):
63
-
64
- * SERVER_SOFTWARE
65
- * Solara: e.g. 'solara/1.2.3'
66
- * Voila: e.g. 'voila/1.2.3'
67
- * SERVER_PORT (e.g. '8765')
68
- * SERVER_NAME (e.g. 'killerapp.com')
69
- * SCRIPT_NAME (only Voila, e.g. 'voila/render/notebook.ipynb')
70
- * PATH_TRANSLATED (only Solara e.g. '/mnt/someapp/app.py')
71
-
72
- Jupyter Notebook/Lab/Server do not set these variables. With this information,
73
- it should be possible to recognize in which environment you are running in.
@@ -1,15 +0,0 @@
1
- from pathlib import Path
2
-
3
- import solara
4
- from solara.autorouting import generate_routes_directory
5
-
6
- title = "Getting Started"
7
- HERE = Path(__file__)
8
- # if we didn't put the content in the subdirectory, but pointed to the current file
9
- # we would include the current file recursively, causing an infinite loop
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())
@@ -1,84 +0,0 @@
1
- # Quickstart
2
-
3
- This 1-minute quickstart will get you to:
4
-
5
- * Install Solara.
6
- * Write your first Solara script.
7
- * Run your script using Solara server.
8
- * (Optional) Reuse your code in the Jupyter notebook.
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](/documentation/getting_started/tutorials/ipywidgets).
11
-
12
- ## Installation
13
-
14
-
15
- Run `pip install solara`, or follow the [Installation instructions](/documentation/getting_started/installing) for more detailed instructions.
16
-
17
-
18
- ## First script
19
-
20
- Put the following Python snippet in a file (we suggest `sol.py`), or put it in a Jupyter notebook cell:
21
-
22
- ```solara
23
- import solara
24
-
25
- # Declare reactive variables at the top level. Components using these variables
26
- # will be re-executed when their values change.
27
- sentence = solara.reactive("Solara makes our team more productive.")
28
- word_limit = solara.reactive(10)
29
-
30
-
31
- @solara.component
32
- def Page():
33
- # Calculate word_count within the component to ensure re-execution when reactive variables change.
34
- word_count = len(sentence.value.split())
35
-
36
- solara.SliderInt("Word limit", value=word_limit, min=2, max=20)
37
- solara.InputText(label="Your sentence", value=sentence, continuous_update=True)
38
-
39
- # Display messages based on the current word count and word limit.
40
- if word_count >= int(word_limit.value):
41
- solara.Error(f"With {word_count} words, you passed the word limit of {word_limit.value}.")
42
- elif word_count >= int(0.8 * word_limit.value):
43
- solara.Warning(f"With {word_count} words, you are close to the word limit of {word_limit.value}.")
44
- else:
45
- solara.Success("Great short writing!")
46
-
47
-
48
- # The following line is required only when running the code in a Jupyter notebook:
49
- Page()
50
- ```
51
-
52
- Yes, the above example is running live on the Solara documentation web server. If you change the slider the output updates.
53
-
54
- ## Run the script using Solara server
55
-
56
- Run from the command line in the same directory where you put your file (`sol.py`):
57
-
58
- ```bash
59
- $ solara run sol.py
60
- Solara server is starting at http://localhost:8765
61
- ```
62
-
63
- If you open the URL in your browser ([http://localhost:8765](http://localhost:8765)), you should see the same graph in your browser, now running on your computer.
64
-
65
- ## Reuse your code in the Jupyter notebook.
66
-
67
- From Jupyter Notebook (classic) or Jupyter Lab, navigate to the same directory as `sol.py`. Enter the following code in a notebook cell:
68
-
69
- ```python
70
- from sol import Page
71
- display(Page())
72
- ```
73
-
74
- You should see the following output:
75
-
76
- <img src="https://dxhl76zpt6fap.cloudfront.net/public/quickstart-notebook.webp" alt="Markdown Monster icon" style="border: 1px solid #ccc;" />
77
-
78
- In case you forgot how to start a notebook server:
79
-
80
- $ jupyter notebook
81
-
82
- Or the more modern Jupyter lab:
83
-
84
- $ jupyter lab
@@ -1,121 +0,0 @@
1
- # Introduction
2
-
3
-
4
- ## What is Solara?
5
-
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
-
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
-
10
- We care about developer experience. Solara will give your hot code reloading and type hints for faster development.
11
-
12
- ## Why is Solara created?
13
-
14
- How much time have you wasted investing in a web framework only to find out that what you need is impossible to do?
15
-
16
- Many frameworks only solve a specific set of problems. Once you step outside of the paved path, you get stuck.
17
-
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
-
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
-
22
- ## Why use Solara?
23
-
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
-
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
-
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
-
30
- Solara plays a similar role as NextJS. It builds on top of Reacton but handles things like routing for you.
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 [Documentation](/documentation)).
33
-
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
-
36
- ## A quick Solara example
37
-
38
- For your understanding, it might be good just to run an example.
39
-
40
- Follow the [installation instructions](/documentation/getting_started/installing) or do the TLDR:
41
-
42
- $ pip install solara
43
-
44
-
45
- Create a file `myapp.py`, or put the following code in the Jupyter notebook:
46
-
47
- ```solara
48
- import solara
49
-
50
- clicks = solara.reactive(0)
51
-
52
-
53
- @solara.component
54
- def Page():
55
- def increase_clicks():
56
- clicks.value += 1
57
-
58
- solara.Button(label=f"Clicked {clicks} times", on_click=increase_clicks)
59
-
60
- # in the Jupyter notebook, uncomment the next line:
61
- # display(Page())
62
- ```
63
-
64
- *Note that the above output is __live__, you can click the button and see the behaviour*.
65
-
66
- Run solara-server (if *not* using the Jupyter notebook)
67
-
68
- $ solara run myapp.py
69
- Solara server is starting at http://localhost:8765
70
-
71
- The browser should open http://127.0.0.1:8765
72
-
73
-
74
-
75
-
76
- ## How does Solara fit into the big picture?
77
-
78
- Solara is actually two things.
79
-
80
- ### Solara server
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
-
84
- ### Solara UI
85
-
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
- 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
- easier.
89
-
90
-
91
- ### Overview
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
-
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
-
96
- ![Solara stack](https://dxhl76zpt6fap.cloudfront.net/public/docs/solara-stack.webp)
97
-
98
- ## How do I learn Solara?
99
-
100
- We recommend going through the documentation linearly following the arrows on the bottom, meaning you will go through:
101
-
102
- * [Installing](/documentation/getting_started/installing)
103
- * [Quick start](/documentation/getting_started)
104
- * [Tutorials](/documentation/getting_started/tutorials)
105
-
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
-
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 [Documentation](/documentation) which includes live code examples. Other reference documentation can be found at the [reference section](/documentation/getting_started/reference)
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](/documentation/advanced/understanding).
112
-
113
-
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
-
116
-
117
- ## Where can I hire an expert?
118
-
119
- If you need consulting, training or development, you can reach us at:
120
-
121
- contact@solara.dev
@@ -1,81 +0,0 @@
1
- # Installation
2
-
3
- ## Create a virtual environment
4
-
5
- It is best to install Solara into a virtual environment unless you know what you are doing (you already have a virtual environment, or you are using conda or docker).
6
-
7
- See also [The Python Packaging User Guide](https://packaging.python.org/en/latest/guides/installing-using-pip-and-virtual-environments/#creating-a-virtual-environment) for more information about virtual environments.
8
-
9
-
10
- ### OSX/Unix/Linux
11
-
12
- Setting up a virtual environment on OSX/Unix/Linux:
13
-
14
- $ python -m venv solara-env
15
- $ source ./solara-env/bin/activate
16
-
17
- ### Windows
18
-
19
- Setting up a virtual environment on Windows:
20
-
21
- > py -m venv solara-env
22
- > solara-env\Scripts\activate
23
-
24
-
25
- ## Install Solara as a user
26
-
27
- Now install Solara using pip:
28
-
29
- $ pip install solara
30
-
31
- ## Bleeding edge
32
-
33
- If you want to install an unreleased version of Solara (e.g. because we just merged a feature you need)
34
-
35
-
36
- ```
37
- $ pip install "solara @ git+https://github.com/widgetti/solara"
38
- ```
39
-
40
- Or put the following in your `requirements.txt`:
41
-
42
- ```
43
- solara @ https://github.com/widgetti/solara/package/archive/master.tar.gz
44
-
45
- ```
46
-
47
- If you want to do development on Solara, read the [development documentation](/documentation/advanced/development/setup).
48
-
49
- ## Air-gapped installation / Firewalled network
50
-
51
- If you want to have Solara running in an air-gapped environment or where access to a CDN is not possible due to firewall rules, you have two options
52
-
53
-
54
- ### Pre-install assets
55
-
56
- Normally, Solara fetches assets (CSS, JavaScript and fonts) from a CDN on the fly, if that is not possible, you can pre-install the assets by running
57
-
58
- ```
59
- $ pip install "solara[assets]"
60
- ```
61
-
62
- ### Airgapped install
63
-
64
- If you cannot install `solara` or `solara-assets` from pypi because the server is not connected to the internet, you can
65
- follow the following steps to install Solara:
66
-
67
- ```bash
68
- # Download the required wheels from pypi.
69
- $ pip wheel --wheel-dir solara-air-gapped "solara[assets]"
70
- # Zip them in a tarball.
71
- $ tar zcfv solara-air-gapped.tar.gz solara-air-gapped
72
- # Copy the tarball to your server.
73
- $ scp solara-air-gapped.tar.gz yourusername@youmachine:~/solara-air-gapped.tar.gz
74
- # ssh into your server.
75
- $ ssh yourusername@yourmachine
76
- ...
77
- # Unzip the tarball.
78
- $ tar zxfv solara-air-gapped.tar.gz
79
- # Install all wheels.
80
- $ pip install solara-air-gapped/*.whl
81
- ```
@@ -1,9 +0,0 @@
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.
@@ -1,13 +0,0 @@
1
- from pathlib import Path
2
-
3
- import solara
4
- import solara.components.applayout
5
- from solara.website.components.notebook import Notebook
6
-
7
- HERE = Path(__file__).parent
8
-
9
-
10
- @solara.component
11
- def Page():
12
- # only execute once, other
13
- Notebook(HERE / "_data_science.ipynb")