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,84 +0,0 @@
1
- # Tutorial: Web app
2
-
3
- In this tutorial, you will learn how to use Solara to create a tiny web app using only Python.
4
-
5
- ## You should know
6
- This tutorial will assume you have successfully installed Solara.
7
-
8
- If not, please follow the [Installation guide](/documentation/getting_started/installing).
9
-
10
- ## Generate a script file
11
- The simplest way to get started is to run the command
12
-
13
- ```bash
14
- $ solara create button
15
- Wrote: /Users/maartenbreddels/github/widgetti/solara/sol.py
16
- Run as:
17
- $ solara run /Users/maartenbreddels/github/widgetti/solara/sol.py
18
- ```
19
-
20
- This will create the `sol.py` file with the following content.
21
- ```solara
22
- import solara
23
-
24
- clicks = solara.reactive(0)
25
-
26
-
27
- @solara.component
28
- def Page():
29
- color = "green"
30
- if clicks.value >= 5:
31
- color = "red"
32
-
33
- def increment():
34
- clicks.value += 1
35
- print("clicks", clicks)
36
-
37
- solara.Button(label=f"Clicked: {clicks}", on_click=increment, color=color)
38
- ```
39
-
40
-
41
- ## Run the script
42
-
43
- Using [Solara server](/documentation/advanced/understanding/solara-server), we can now run our Python script using:
44
-
45
- ```bash
46
- $ solara run sol.py
47
- Solara server is starting at http://localhost:8765
48
- ```
49
-
50
- If you open the URL in your browser ([or click here](http://localhost:8765)), you should see the same example as above.
51
-
52
- Solara will run your script once, and will look for the `Page` component. Solara expects this component to exist
53
- and be a [Reacton](/documentation/advanced/understanding/reacton) component. (See the [IPywidget tutorial](/documentation/getting_started/tutorials/ipywidgets) to learn how to render a regular ipywidget).
54
-
55
- Since your script is only run once, you could put in the main body of your script code that only needs to run once (e.g. loading data from disk)
56
-
57
- Every browser/user that connects will get an independent version of the state (in this case the number of clicks), so
58
- you do not share the number of clicks with other people.
59
-
60
- ## Modify the script
61
-
62
- Lets modify the script a little bit, possibly in this way:
63
-
64
- ```diff
65
- - solara.Button(label=f"Clicked: {clicks}", on_click=increment, color=color)
66
- + label = "Not clicked yet" if clicks.value == 0 else f"Clicked: {clicks}"
67
- + solara.Button(label=label, on_click=increment, color=color)
68
- ```
69
-
70
- If we save the script, Solara will automatically reload your script and update
71
- your browser (we call this feature [hot reloading](/documentation/getting_started/reference/reloading)).
72
-
73
- Note that Solara will remember your state (e.g., the number of buttons clicked) when the app reloads.
74
-
75
- (*Note: Upgrade to solara 1.14.0 for a fix in hot reloading using `pip install "solara>=1.14.0"`*)
76
-
77
- ## What you have learned
78
-
79
- * How to create a Python script `sol.py` by running `solara create button`
80
- * How to run the script with Solara server by running `solara run sol.py`
81
- * Your script is executed once, which is useful for loading data in the main body of your script only once.
82
- * Your script should have a component called `Page`.
83
- * Every user has its own state (in the above example, the number of clicks)
84
- * If you save your script, Solara will automatically re-execute your script, and all attached users will see the changes directly (hot reloading).
@@ -1,120 +0,0 @@
1
- # Tutorial: IPywidgets
2
-
3
- If you are already using [ipywidgets](/documentation/advanced/understanding/ipywidgets) in the notebook, possibly using [Voila](/documentation/advanced/understanding/voila), you might be pleased to know that you
4
- can also use the [Solara server](/documentation/advanced/understanding/solara-server) to render your regular ipywidget application.
5
-
6
- We recommend you learn how to write applications using [Reacton](/documentation/advanced/understanding/reacton). However, if you have already written an application in
7
- pure [ipywidgets](/documentation/advanced/understanding/ipywidgets), this approach will let you gradually move from pure ipywidgets to Reacton.
8
-
9
- ## You should know
10
- This tutorial will assume you have successfully installed Solara.
11
-
12
- If not, please follow the [Installation guide](/documentation/getting_started/installing).
13
-
14
- ## Your first ipywidget based Solara app
15
-
16
- Put the following code in a file called `sol-ipywidgets.py`:
17
-
18
- ```python
19
- import ipywidgets as widgets
20
-
21
- clicks = 0
22
-
23
- print("I get run at startup, and for every page request")
24
-
25
- def on_click(button):
26
- global clicks
27
- clicks += 1
28
- button.description = f"Clicked {clicks} times"
29
-
30
-
31
- button = widgets.Button(description="Clicked 0 times")
32
- button.on_click(on_click)
33
- ```
34
-
35
- And run the following command in your shell
36
- ```bash
37
- $ solara run sol-ipywidgets.py:button
38
- Solara server is starting at http://localhost:8765
39
- I get run at startup, and for every page request
40
- ...
41
- # your browser opens http://localhost:8765
42
- I get run at startup, and for every page request
43
- ...
44
- ```
45
-
46
- The Solara server will execute your script once before any browser connects,
47
- as demonstrated by the `"I get run at startup, and for every page request"` output.
48
-
49
- The `:button` part on the command line tells the Solara server the variable name of
50
- the widget it should render. The default name for a widget variable Solara will look
51
- for is `page`.
52
-
53
- For every page request (for instance, you open a second tab, or do a page refresh)
54
- you will see the same text printed out in the terminal.
55
- This tell you that each "tab" gets its own run, and its own namespace, which means
56
- that the `clicks` variable is not shared between multiple users.
57
-
58
- If you refresh the page, the script is executed again, and the `clicks` is set to
59
- `0` again.
60
-
61
- ## Hot reloading
62
-
63
- If you edit your script, and save it, Solara server will re-execute it for all connected users without you having to manually refresh your browser.
64
-
65
- Try making the following code change (remove the first, add the last), and watch your browser page instantly refresh.
66
- ```diff
67
- - button = widgets.Button(description="Clicked 0 times")
68
- + button = widgets.Button(description="Did not click yet!")
69
- ```
70
-
71
- ## Using Solara components
72
-
73
- There are a lot of [valuable components in Solara](/documentation/components), but they are written as [Reacton/Solara components](/documentation/advanced/understanding/reacton-basics), not
74
- classic ipywidgets.
75
-
76
- Use the [.widget(...)](/documentation/api/utilities/widget) method on a component to create a widget that can be used in your existing classic ipywidget application.
77
-
78
- ```python
79
-
80
- import ipywidgets as widgets
81
-
82
- import solara
83
-
84
- clicks = 0
85
-
86
-
87
- def on_click(button):
88
- global clicks
89
- clicks += 1
90
- button.description = f"Clicked {clicks} times"
91
-
92
-
93
- button = widgets.Button(description="Clicked 0 times")
94
- button.on_click(on_click)
95
-
96
- page = widgets.VBox(
97
- [
98
- button,
99
- # using .widget(..) we can create a classic ipywidget from a solara component
100
- solara.FileDownload.widget(data="some text data", filename="solara-demo.txt"),
101
- ]
102
- )
103
- ```
104
-
105
- Now we can run this app using:
106
- ```
107
- $ solara run sol-ipywidgets.py
108
- ```
109
-
110
- Note that we did not include the `:page` here, since solara will automatically look for that.
111
-
112
- ## What you have learned
113
-
114
- * [Solara server](/documentation/advanced/understanding/solara-server) can render [ipywidgets](/documentation/advanced/understanding/ipywidgets).
115
- * Running `$ solara run filename.py:variablename` tells Solara which script to execute and which variable name from the script to render.
116
- * The script is executed:
117
- * Once, when the solara server starts.
118
- * On each page request.
119
- * For each open browser page/tab, when the script is saved (hot reloading).
120
- * Using the [.widget(...)](/documentation/api/utilities/widget) method we can start using Solara components in classic ipywidget app.
@@ -1,141 +0,0 @@
1
- # Tutorial: Streamlit
2
-
3
- If you are coming from [Streamlit](https://streamlit.io/) you may be happy to know Solara does not re-execute your whole script. We execute components (starting with the `Page` component), and only need to re-execute what needs to.
4
-
5
-
6
- ## Streamlit example
7
- Let us start with a typical streamlit example:
8
-
9
- ```python
10
- import streamlit as st
11
-
12
- with st.sidebar:
13
- st.markdown("## My First Solara tutorial ☀️")
14
- x = st.slider("x")
15
- x_squared = x**2
16
- st.markdown(f"{x} squared = {x_squared}")
17
- ```
18
-
19
- ## Translated to Solara
20
-
21
- We now translate this to the equivalent in Solara. The largest difference is we need to explicitly create (application) state using [`solara.reactive`](/documentation/api/utilities/reactive). By passing the
22
- reactive variable to the [SliderInt](/documentation/components/input/slider) via `value=x` we set up a two way binding between the component and the reactive variable. The generated text is passed down to the [Markdown](/documentation/components/output/markdown) component.
23
-
24
-
25
- ```solara
26
- import solara
27
-
28
- x = solara.reactive(2)
29
-
30
-
31
- @solara.component
32
- def Page():
33
- x_squared = x.value**2
34
-
35
- with solara.Sidebar():
36
- solara.Markdown("## My First Solara app ☀️")
37
- solara.SliderInt(label="x", value=x)
38
- solara.Markdown(f"{x.value} squared = {x_squared}")
39
- ```
40
-
41
- ### Running this example using Solara server
42
-
43
- If you put this script in a file called `sol.py` and run
44
- ```
45
- $ solara run sol.py
46
- ```
47
- You will see:
48
- ![app screenshot](https://dxhl76zpt6fap.cloudfront.net/public/docs/app-squared.webp)
49
-
50
- Because we do some styling and because the sidebar is already used up, our preview on this page looks slightly different.
51
-
52
- [Navigate to /apps/tutorial-streamlit](/documentation/examples/fullscreen/tutorial_streamlit) to see this app fullscreen.
53
-
54
-
55
- ### Running this example in the notebook
56
-
57
- If you add the above code snippet to your notebook, and include `Page()` at the end of your notebook cell, you should see:
58
- ![app screenshot](https://dxhl76zpt6fap.cloudfront.net/public/docs/app-squared-notebook.webp)
59
-
60
- Again, slightly different for a different environment.
61
-
62
- ## Hot reloading
63
-
64
- If you are using [Solara server](/documentation/advanced/understanding/solara-server), try editing `sol.py`, and watch the page reload automatically after you save your file. Notebook users can simply edit and re-run.
65
-
66
- (*Note: Upgrade to solara 1.14.0 for a fix in hot reloading using `pip install "solara>=1.14.0"`*)
67
-
68
- ## How are streamlit and Solara different?
69
-
70
- ### Execution model
71
- As the introduction says, Solara does not re-execute your whole script after user interactions.
72
- The main script is executed only once. With Solara you can use your main script to read large dataframes, or do some pre-calculations without the need for [caching](/documentation/getting_started/reference/caching).
73
-
74
- When a user navigates to a Solara server, the `Page` component (basically a function) will get executed. The `Page` component will call (lazily) new components like [solara.Markdown](/documentation/components/output/markdown) to build up the page. If state changes due to user input, Solara will trigger a cascade of re-excecutions of components which inputs or state changed, but never your whole script, nor every component.
75
-
76
- ### State
77
- With Solara (and [Reacton](/documentation/advanced/understanding/reacton)) state does not live in a UI component (like a slider). Application state created with [`solara.reactive`](/documentation/api/utilities/reactive) lives on its own. Connecting the state to the UI component (in this case a slider) is a separate step, done via `value=x` in the above example. In general we recommend organising your components
78
- similarly as in the example: [First use_state and other hooks, then calculations, at last the UI components](/documentation/advanced/understanding/anatomy).
79
-
80
- For complex situations, it is important to separate the state and the UI. Especially when you need the state of a UI component as input of the UI component itself, you can get stuck with streamlit. In Solara this follows naturally.
81
-
82
-
83
- ## Creating a reusable component
84
-
85
-
86
- A big advantage of Solara is that you can create reusable components. A single component can be seen as the equivalent of a single streamlit script. However, in that case, we need to modify our component to have its own state, rather than using global application state, for this you can use the [`use_reactive`](/documentation/api/hooks/use_reactive), or [`use_state`](/documentation/api/hooks/use_state) hook.
87
- Read more about state management in the [state management](/documentation/getting_started/fundamentals/state-management) section.
88
-
89
- ```solara
90
- import solara
91
-
92
-
93
- @solara.component
94
- def Square(name: str):
95
- # x = solara.use_reactive(2) # another possibility
96
- x, set_x = solara.use_state(2)
97
- y = x**2
98
- with solara.Sidebar():
99
- solara.SliderInt(label=name, value=x, on_value=set_x)
100
- solara.Markdown(f'{name}: {x} squared = {y}')
101
-
102
-
103
- @solara.component
104
- def Page():
105
- Square('a')
106
- Square('b')
107
- ```
108
-
109
- In this example, each instance of the `Square` component, calls `use_state`, and therefore has its own private
110
- x variable. Truly reusable UI components!
111
-
112
- In streamlit, this is trickier. While this would work:
113
-
114
- ```python
115
- import streamlit as st
116
-
117
-
118
- def square(name):
119
- with st.sidebar:
120
- x = st.slider(name)
121
- x_squared = x**2
122
- st.markdown(f"{name}: {x} squared = {x_squared}")
123
-
124
- square("x")
125
- square("y")
126
- ```
127
-
128
- Changing that "y" to "x" will lead to an error, however. If this is a problem in practice depends on the situation.
129
-
130
- ### Long running function
131
-
132
- In Streamlit, it is normal for your main script to block execution. In Solara, the functions bodies of your components ([called render functions](/documentation/advanced/understanding/anatomy)) should not block. Functions that block, or take a long time to execute, should be executed in a thread, such that rendering can continue. Using threads may sound scary, but using the
133
- [use_thread](/documentation/api/hooks/use_thread) hook will help a lot.
134
-
135
- ## What you have learned
136
-
137
- * Solara will not continuously re-execute your script as Streamlit does.
138
- * Solara will re-execute components instead, only what needs to.
139
- * State in Solara is separate from the UI components, unlike streamlit, where they are strongly linked.
140
- * State can be on the application level (global) for simplicity or on the component level (local) for creating reusable components.
141
- * Solara should not block the render loop. Long-running functions should be executed in a thread using [use_thread](/documentation/api/hooks/use_thread).
@@ -1,140 +0,0 @@
1
- # Tutorial: Dash users
2
-
3
- Dash is quite different from Solara. In Dash, state lives in your browser, and via callbacks your app will change from 1 state to another. In Solara, the state lives on the server, and also state transitions happen at the server.
4
-
5
- ## Dash example
6
- To see how Dash and Solara are different, let us start with a typical Dash example:
7
-
8
- ```python
9
- from dash import Dash, Input, Output, callback, dcc, html
10
-
11
- app = Dash(__name__)
12
-
13
- app.layout = html.Div(
14
- children=[
15
- dcc.Dropdown(id="dropdown", options=["red", "green", "blue", "orange"]),
16
- dcc.Markdown(id="markdown", children=["## Hello World"]),
17
- ]
18
- )
19
-
20
-
21
- @callback(
22
- Output("markdown", "style"),
23
- Input("dropdown", "value"),
24
- )
25
- def update_markdown_style(color):
26
- return {"color": color}
27
-
28
-
29
- if __name__ == "__main__":
30
- app.run_server(debug=True)
31
- ```
32
-
33
- *This example is inspired on [a dash example](https://dash.plotly.com/all-in-one-components).*
34
-
35
- This small app creates a dropdown (what we call Select in Solara), and some markdown text. The dropdown will trigger the callback at the server, which will update the markdown's style, which will cause the color of the text to change.
36
-
37
- ## Translated to Solara
38
-
39
- In Solara, we need to explicitly create application state using [`solara.reactive`](/documentation/api/utilities/reactive). We wire this up with the [Select][/documentation/components/input/select] via `value=color` and pass the color value down to the [Markdown](/documentation/components/output/markdown) component.
40
-
41
- ```solara
42
- import solara
43
-
44
- color = solara.reactive("red")
45
-
46
-
47
- @solara.component
48
- def Page():
49
- solara.Select(label="Color", values=["red", "green", "blue", "orange"], value=color)
50
- solara.Markdown("## Hello World", style={"color": color.value})
51
- ```
52
-
53
- Since this component combines two components, we have to put them together in a [container](/documentation/advanced/understanding/containers) component, here implicitly a [Column](/documentation/components/layout/column).
54
-
55
- ## Making a re-usable component
56
-
57
- ### In dash
58
-
59
- Following the [All in one component documentation](https://dash.plotly.com/all-in-one-components), we get:
60
-
61
- ```python
62
- import uuid
63
-
64
- from dash import MATCH, Dash, Input, Output, State, callback, dcc, html
65
-
66
-
67
- class MarkdownWithColorAIO(html.Div):
68
- class ids:
69
- dropdown = lambda aio_id: {"component": "MarkdownWithColorAIO", "subcomponent": "dropdown", "aio_id": aio_id}
70
- markdown = lambda aio_id: {"component": "MarkdownWithColorAIO", "subcomponent": "markdown", "aio_id": aio_id}
71
-
72
- ids = ids
73
-
74
- def __init__(self, text, colors=None, markdown_props=None, dropdown_props=None, aio_id=None):
75
- colors = colors if colors else ["red", "green", "blue", "orange"]
76
-
77
- if aio_id is None:
78
- aio_id = str(uuid.uuid4())
79
-
80
- dropdown_props = dropdown_props.copy() if dropdown_props else {}
81
- if "options" not in dropdown_props:
82
- dropdown_props["options"] = [{"label": i, "value": i} for i in colors]
83
- dropdown_props["value"] = dropdown_props["options"][0]["value"]
84
-
85
- markdown_props = markdown_props.copy() if markdown_props else {}
86
- if "style" not in markdown_props:
87
- markdown_props["style"] = {"color": dropdown_props["value"]}
88
- if "children" not in markdown_props:
89
- markdown_props["children"] = text
90
- super().__init__([dcc.Dropdown(id=self.ids.dropdown(aio_id), **dropdown_props), dcc.Markdown(id=self.ids.markdown(aio_id), **markdown_props)])
91
-
92
- @callback(
93
- Output(ids.markdown(MATCH), "style"),
94
- Input(ids.dropdown(MATCH), "value"),
95
- State(ids.markdown(MATCH), "style"),
96
- )
97
- def update_markdown_style(color, existing_style):
98
- existing_style["color"] = color
99
- return existing_style
100
-
101
-
102
- app = Dash(__name__)
103
-
104
- app.layout = html.Div(
105
- children=[
106
- MarkdownWithColorAIO("## Hello World1"),
107
- MarkdownWithColorAIO("## Hello World2"),
108
- ]
109
- )
110
-
111
- if __name__ == "__main__":
112
- app.run_server(debug=True)
113
-
114
- ```
115
-
116
- ### In Solara
117
-
118
- A big advantage of Solara is that components are reusable by default. However, we need to modify our component to have its own state, rather than using global application state. Creating local component state with [`use_reactive`](/documentation/api/hooks/use_reactive), or [`use_state`](/documentation/api/hooks/use_state) hook. Read more about state management in the [state management](/documentation/getting_started/fundamentals/state-management) section.
119
-
120
- We will rename (from `Page` to `MarkdownWithColor`) the component, add local state, and put in the markdown text as an argument.
121
-
122
- ```solara
123
- import solara
124
-
125
-
126
- @solara.component
127
- def MarkdownWithColor(markdown_text : str):
128
- # color = solara.use_reactive() # another possibility
129
- color, set_color = solara.use_state("red") # local state
130
- solara.Select(label="Color",values=["red", "green", "blue", "orange"],
131
- value=color, on_value=set_color)
132
- solara.Markdown(markdown_text, style={"color": color})
133
-
134
-
135
- @solara.component
136
- def Page():
137
- with solara.Columns():
138
- MarkdownWithColor("## Re-use is simple")
139
- MarkdownWithColor("## With solara")
140
- ```
@@ -1,64 +0,0 @@
1
- from pathlib import Path
2
-
3
- import solara
4
- from solara.website.components.mailchimp import MailChimp
5
- from solara.website.components.notebook import Notebook
6
-
7
- HERE = Path(__file__).parent
8
- title = "Jupyter Dashboard (1/3)"
9
-
10
-
11
- @solara.component
12
- def Page():
13
- title = "Build your Jupyter dashboard using Solara"
14
- solara.Meta(property="og:title", content=title)
15
- solara.Meta(name="twitter:title", content=title)
16
- solara.Title(title)
17
-
18
- img = "https://dxhl76zpt6fap.cloudfront.net/public/docs/tutorial/jupyter-dashboard1.webp"
19
- solara.Meta(name="twitter:image", content=img)
20
- solara.Meta(property="og:image", content=img)
21
-
22
- description = "Learn how to build a Jupyter dashboard and deploy it as a web app using Solara."
23
- solara.Meta(name="description", property="og:description", content=description)
24
- solara.Meta(name="twitter:description", content=description)
25
- tags = [
26
- "jupyter",
27
- "jupyter dashboard",
28
- "dashboard",
29
- "web app",
30
- "deploy",
31
- "solara",
32
- ]
33
- solara.Meta(name="keywords", content=", ".join(tags))
34
-
35
- Notebook(
36
- Path(HERE / "_jupyter_dashboard_1.ipynb"),
37
- show_last_expressions=True,
38
- execute=False,
39
- outputs={
40
- "a7d17a84": None, # empty output (7)
41
- # original: https://github.com/widgetti/solara/assets/1765949/e844acdb-c77d-4df4-ba4c-a629f92f18a3
42
- "82f1d2f7": solara.Image("https://dxhl76zpt6fap.cloudfront.net/pages/docs/content/60-jupyter-dashboard-part1/map.webp"), # map (11)
43
- "3e7ea361": None, # (13)
44
- # original: https://github.com/widgetti/solara/assets/1765949/daaa3a46-61f5-431f-8003-b42b5915da4b
45
- "56055643": solara.Image("https://dxhl76zpt6fap.cloudfront.net/pages/docs/content/60-jupyter-dashboard-part1/view.webp"), # View (15)
46
- # original: https://github.com/widgetti/solara/assets/1765949/2f4daf0f-b7d8-4f70-b04a-c27542cffdb0
47
- "c78010ec": solara.Image("https://dxhl76zpt6fap.cloudfront.net/pages/docs/content/60-jupyter-dashboard-part1/page.webp"), # Page (20)
48
- # original: https://github.com/widgetti/solara/assets/1765949/a691d9f1-f07b-4e06-b21b-20980476ad64
49
- "18290364": solara.Image("https://dxhl76zpt6fap.cloudfront.net/pages/docs/content/60-jupyter-dashboard-part1/controls.webp"), # Controls
50
- "0ca68fe8": None,
51
- "fef5d187": None,
52
- # original: https://github.com/widgetti/solara/assets/1765949/f0075ad1-808d-458c-8797-e460ce4dc06d
53
- "af686391": solara.Image("https://dxhl76zpt6fap.cloudfront.net/pages/docs/content/60-jupyter-dashboard-part1/full-app.webp"), # Full app
54
- },
55
- )
56
- solara.Markdown(
57
- """
58
- Explore this app live at [solara.dev](/apps/jupyter-dashboard-1).
59
-
60
- Don’t miss the next tutorial and stay updated with the latest techniques and insights by subscribing to our newsletter.
61
- """
62
- )
63
- location = solara.use_router().path
64
- MailChimp(location=location)