solara 1.30.1__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 (438) hide show
  1. {solara-1.30.1.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.1.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 -545
  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 -110
  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 -88
  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 -396
  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/markdown.py +0 -30
  187. solara/website/components/notebook.py +0 -172
  188. solara/website/pages/__init__.py +0 -575
  189. solara/website/pages/apps/__init__.py +0 -16
  190. solara/website/pages/apps/authorization/__init__.py +0 -118
  191. solara/website/pages/apps/authorization/admin.py +0 -12
  192. solara/website/pages/apps/authorization/users.py +0 -12
  193. solara/website/pages/apps/jupyter-dashboard-1.py +0 -116
  194. solara/website/pages/apps/layout-demo.py +0 -40
  195. solara/website/pages/apps/multipage/__init__.py +0 -38
  196. solara/website/pages/apps/multipage/page1.py +0 -26
  197. solara/website/pages/apps/multipage/page2.py +0 -34
  198. solara/website/pages/apps/scatter.py +0 -136
  199. solara/website/pages/apps/scrolling.py +0 -63
  200. solara/website/pages/apps/tutorial-streamlit.py +0 -18
  201. solara/website/pages/changelog/__init__.py +0 -8
  202. solara/website/pages/changelog/changelog.md +0 -195
  203. solara/website/pages/contact/__init__.py +0 -8
  204. solara/website/pages/contact/contact.md +0 -17
  205. solara/website/pages/doc_use_download.py +0 -85
  206. solara/website/pages/documentation/__init__.py +0 -184
  207. solara/website/pages/documentation/advanced/__init__.py +0 -9
  208. solara/website/pages/documentation/advanced/content/00-overview.md +0 -1
  209. solara/website/pages/documentation/advanced/content/10-howto/00-overview.md +0 -6
  210. solara/website/pages/documentation/advanced/content/10-howto/10-multipage.md +0 -196
  211. solara/website/pages/documentation/advanced/content/10-howto/20-layout.md +0 -125
  212. solara/website/pages/documentation/advanced/content/10-howto/30-testing.md +0 -154
  213. solara/website/pages/documentation/advanced/content/10-howto/31-debugging.md +0 -69
  214. solara/website/pages/documentation/advanced/content/10-howto/40-embed.md +0 -49
  215. solara/website/pages/documentation/advanced/content/10-howto/50-ipywidget_libraries.md +0 -124
  216. solara/website/pages/documentation/advanced/content/20-understanding/00-introduction.md +0 -10
  217. solara/website/pages/documentation/advanced/content/20-understanding/05-ipywidgets.md +0 -35
  218. solara/website/pages/documentation/advanced/content/20-understanding/06-ipyvuetify.md +0 -42
  219. solara/website/pages/documentation/advanced/content/20-understanding/10-reacton.md +0 -28
  220. solara/website/pages/documentation/advanced/content/20-understanding/12-reacton-basics.md +0 -108
  221. solara/website/pages/documentation/advanced/content/20-understanding/15-anatomy.md +0 -23
  222. solara/website/pages/documentation/advanced/content/20-understanding/17-rules-of-hooks.md +0 -7
  223. solara/website/pages/documentation/advanced/content/20-understanding/18-containers.md +0 -166
  224. solara/website/pages/documentation/advanced/content/20-understanding/20-solara.md +0 -18
  225. solara/website/pages/documentation/advanced/content/20-understanding/40-routing.md +0 -240
  226. solara/website/pages/documentation/advanced/content/20-understanding/50-solara-server.md +0 -86
  227. solara/website/pages/documentation/advanced/content/20-understanding/60-voila.md +0 -12
  228. solara/website/pages/documentation/advanced/content/30-enterprise/00-overview.md +0 -1
  229. solara/website/pages/documentation/advanced/content/30-enterprise/10-oauth.md +0 -171
  230. solara/website/pages/documentation/advanced/content/40-development/00-overview.md +0 -0
  231. solara/website/pages/documentation/advanced/content/40-development/01-contribute.md +0 -45
  232. solara/website/pages/documentation/advanced/content/40-development/10-setup.md +0 -76
  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 -12
  379. solara/website/pages/documentation/faq/content/99-faq.md +0 -76
  380. solara/website/pages/documentation/getting_started/__init__.py +0 -9
  381. solara/website/pages/documentation/getting_started/content/00-quickstart.md +0 -89
  382. solara/website/pages/documentation/getting_started/content/01-introduction.md +0 -125
  383. solara/website/pages/documentation/getting_started/content/02-installing.md +0 -85
  384. solara/website/pages/documentation/getting_started/content/04-tutorials/00-overview.md +0 -14
  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 -89
  387. solara/website/pages/documentation/getting_started/content/04-tutorials/30-ipywidgets.md +0 -124
  388. solara/website/pages/documentation/getting_started/content/04-tutorials/40-streamlit.md +0 -146
  389. solara/website/pages/documentation/getting_started/content/04-tutorials/50-dash.md +0 -144
  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 -11
  395. solara/website/pages/documentation/getting_started/content/05-fundamentals/10-components.md +0 -223
  396. solara/website/pages/documentation/getting_started/content/05-fundamentals/50-state-management.md +0 -88
  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 -31
  399. solara/website/pages/documentation/getting_started/content/06-reference/41-asset-files.md +0 -36
  400. solara/website/pages/documentation/getting_started/content/06-reference/60-static-site-generation.md +0 -59
  401. solara/website/pages/documentation/getting_started/content/06-reference/70-search.md +0 -34
  402. solara/website/pages/documentation/getting_started/content/06-reference/80-reloading.md +0 -34
  403. solara/website/pages/documentation/getting_started/content/06-reference/90-notebook-support.md +0 -7
  404. solara/website/pages/documentation/getting_started/content/06-reference/95-caching.md +0 -148
  405. solara/website/pages/documentation/getting_started/content/07-deploying/00-overview.md +0 -7
  406. solara/website/pages/documentation/getting_started/content/07-deploying/10-self-hosted.md +0 -273
  407. solara/website/pages/documentation/getting_started/content/07-deploying/20-cloud-hosted.md +0 -80
  408. solara/website/pages/documentation/getting_started/content/80-what-is-lab.md +0 -7
  409. solara/website/pages/documentation/getting_started/content/90-troubleshoot.md +0 -26
  410. solara/website/pages/docutils.py +0 -38
  411. solara/website/pages/showcase/__init__.py +0 -105
  412. solara/website/pages/showcase/domino_code_assist.py +0 -60
  413. solara/website/pages/showcase/planeto_tessa.py +0 -19
  414. solara/website/pages/showcase/solara_dev.py +0 -54
  415. solara/website/pages/showcase/solarathon_2023_team_2.py +0 -22
  416. solara/website/pages/showcase/solarathon_2023_team_4.py +0 -22
  417. solara/website/pages/showcase/solarathon_2023_team_5.py +0 -23
  418. solara/website/pages/showcase/solarathon_2023_team_6.py +0 -34
  419. solara/website/pages/showcase/wanderlust.py +0 -27
  420. solara/website/public/beach.jpeg +0 -0
  421. solara/website/public/logo.svg +0 -6
  422. solara/website/public/social/discord.svg +0 -1
  423. solara/website/public/social/github.svg +0 -1
  424. solara/website/public/social/twitter.svg +0 -3
  425. solara/website/public/success.html +0 -25
  426. solara/website/templates/index.html.j2 +0 -117
  427. solara/website/utils.py +0 -51
  428. solara/widgets/__init__.py +0 -1
  429. solara/widgets/vue/gridlayout.vue +0 -110
  430. solara/widgets/vue/html.vue +0 -4
  431. solara/widgets/vue/navigator.vue +0 -104
  432. solara/widgets/vue/vegalite.vue +0 -115
  433. solara/widgets/widgets.py +0 -65
  434. solara-1.30.1.data/data/etc/jupyter/jupyter_notebook_config.d/solara.json +0 -7
  435. solara-1.30.1.data/data/etc/jupyter/jupyter_server_config.d/solara.json +0 -7
  436. solara-1.30.1.dist-info/RECORD +0 -437
  437. solara-1.30.1.dist-info/entry_points.txt +0 -5
  438. /solara-1.30.1.dist-info/licenses/LICENSE → /LICENSE +0 -0
@@ -1,23 +0,0 @@
1
- """# CrossFilterDataFrame
2
- """
3
- import plotly
4
-
5
- import solara
6
- import solara.lab
7
- from solara.website.utils import apidoc
8
-
9
- title = "CrossFilterDataFrame"
10
- df = plotly.data.gapminder()
11
-
12
-
13
- @solara.component
14
- def Page():
15
- solara.provide_cross_filter()
16
- with solara.VBox() as main:
17
- solara.CrossFilterReport(df, classes=["py-2"])
18
- solara.CrossFilterSelect(df, "country")
19
- solara.CrossFilterDataFrame(df)
20
- return main
21
-
22
-
23
- __doc__ += apidoc(solara.CrossFilterDataFrame.f) # type: ignore
@@ -1,22 +0,0 @@
1
- """# CrossFilterReport
2
- """
3
- import plotly
4
-
5
- import solara
6
- import solara.lab
7
- from solara.website.utils import apidoc
8
-
9
- df = plotly.data.gapminder()
10
-
11
-
12
- @solara.component
13
- def Page():
14
- solara.provide_cross_filter()
15
- with solara.VBox() as main:
16
- solara.CrossFilterReport(df, classes=["py-2"])
17
- solara.CrossFilterSelect(df, "country")
18
- solara.CrossFilterSlider(df, "gdpPercap", mode=">")
19
- return main
20
-
21
-
22
- __doc__ += apidoc(solara.CrossFilterReport.f) # type: ignore
@@ -1,22 +0,0 @@
1
- """# CrossFilterSelect
2
- """
3
- import plotly
4
-
5
- import solara
6
- import solara.lab
7
- from solara.website.utils import apidoc
8
-
9
- df = plotly.data.tips()
10
-
11
-
12
- @solara.component
13
- def Page():
14
- solara.provide_cross_filter()
15
- with solara.VBox() as main:
16
- solara.CrossFilterReport(df, classes=["py-2"])
17
- solara.CrossFilterSelect(df, "sex")
18
- solara.CrossFilterSelect(df, "time")
19
- return main
20
-
21
-
22
- __doc__ += apidoc(solara.CrossFilterSelect.f) # type: ignore
@@ -1,22 +0,0 @@
1
- """# CrossFilterSlider
2
- """
3
- import plotly
4
-
5
- import solara
6
- import solara.lab
7
- from solara.website.utils import apidoc
8
-
9
- df = plotly.data.gapminder()
10
-
11
-
12
- @solara.component
13
- def Page():
14
- solara.provide_cross_filter()
15
- with solara.VBox() as main:
16
- solara.CrossFilterReport(df, classes=["py-2"])
17
- solara.CrossFilterSlider(df, "pop", mode=">")
18
- solara.CrossFilterSlider(df, "gdpPercap", mode="<")
19
- return main
20
-
21
-
22
- __doc__ += apidoc(solara.CrossFilterSlider.f) # type: ignore
@@ -1,9 +0,0 @@
1
- import solara
2
- from solara.website.components import NoPage, SubCategoryLayout
3
-
4
- Page = NoPage
5
-
6
-
7
- @solara.component
8
- def Layout(children=[]):
9
- SubCategoryLayout(children=children)
@@ -1,25 +0,0 @@
1
- """# use_cross_filter
2
- """
3
- import plotly
4
-
5
- import solara
6
- import solara.lab
7
- from solara.website.utils import apidoc
8
-
9
- title = "use_cross_filter"
10
-
11
-
12
- df = plotly.data.gapminder()
13
-
14
-
15
- @solara.component
16
- def Page():
17
- solara.provide_cross_filter()
18
- with solara.VBox() as main:
19
- solara.CrossFilterReport(df, classes=["py-2"])
20
- solara.CrossFilterSelect(df, "continent")
21
- solara.CrossFilterSlider(df, "gdpPercap", mode=">")
22
- return main
23
-
24
-
25
- __doc__ += apidoc(solara.use_cross_filter) # type: ignore
@@ -1,13 +0,0 @@
1
- """# use_dark_effective
2
-
3
- """
4
- import solara
5
- import solara.autorouting
6
- import solara.lab
7
- from solara.website.utils import apidoc
8
-
9
- from . import NoPage
10
-
11
- title = "use_dark_effective"
12
- Page = NoPage
13
- __doc__ += apidoc(solara.lab.use_dark_effective) # type: ignore
@@ -1,43 +0,0 @@
1
- # use_effect
2
-
3
- ```python
4
- def use_effect(
5
- effect: EffectCallable,
6
- dependencies: Any | None = None
7
- ) -> None
8
- ...
9
- ```
10
-
11
- Execute non-declarative code within a callback, for instance to add event handlers. `effect` is executed *after* page render, letting us fetch the actual underlying widget object using `solara.get_widget` on an element. `dependencies` should be a list of variables, which when changed trigger re-execution of `effect`. If left empty, `effect` will never re-execute.
12
-
13
- `effect` can return a cleanup function, which will be called before re-execution of `effect`, or when the component containing `use_effect` is removed.
14
-
15
- Example use of `use_effect` to attach an event handler to a solara component:
16
-
17
- ```python
18
- def use_event(el: solara.Element, callback: Callable):
19
- def add_event_handler():
20
- def on_enter(widget, event, data):
21
- callback(widget.v_model)
22
-
23
- widget = cast(ipyvue.VueWidget, solara.get_widget(el))
24
- widget.on_event("keyup.enter", on_enter)
25
-
26
- def cleanup():
27
- widget.on_event("keyup.enter", on_enter, remove=True)
28
-
29
- return cleanup
30
-
31
- solara.use_effect(add_event_handler, dependencies=[])
32
-
33
- @solara.component
34
- def Page():
35
- def function():
36
- #Do something...
37
-
38
- input = solara.InputText():
39
- use_event(input, function)
40
- ...
41
- ```
42
-
43
- See also the [Reacton docs](https://reacton.solara.dev/en/latest/api/#use_effect).
@@ -1,9 +0,0 @@
1
- from pathlib import Path
2
-
3
- from solara.website.components import NoPage
4
-
5
- HERE = Path(__file__).parent
6
- __doc__ = open(HERE / "use_effect.md").read()
7
-
8
- Page = NoPage
9
- title = "use_effect"
@@ -1,33 +0,0 @@
1
- import solara
2
-
3
- title = "use_exception"
4
- set_fail = None
5
- clear = None
6
-
7
-
8
- @solara.component
9
- def UnstableComponent(number: int):
10
- if number == 3:
11
- raise Exception("I do not like 3")
12
- return solara.Text(f"You picked {number}")
13
-
14
-
15
- @solara.component
16
- def Page():
17
- value, set_value = solara.use_state(1)
18
- value_previous = solara.use_previous(value)
19
- exception, clear_exception = solara.use_exception()
20
- # print(exception)
21
- with solara.VBox() as main:
22
- if exception:
23
-
24
- def reset():
25
- set_value(value_previous)
26
- clear_exception()
27
-
28
- solara.Text("Exception: " + str(exception))
29
- solara.Button(label="Go to previous state", on_click=reset)
30
- else:
31
- solara.IntSlider(value=value, min=0, max=10, on_value=set_value, label="Pick a number, except 3")
32
- UnstableComponent(value)
33
- return main
@@ -1,16 +0,0 @@
1
- # use_memo
2
-
3
- ```python
4
- def use_memo(
5
- f: Any,
6
- dependencies: Any | None = None,
7
- debug_name: str = None
8
- ) -> Any:
9
- ...
10
- ```
11
-
12
- `use_memo` stores ([memoize](https://en.wikipedia.org/wiki/Memoization)) the function return on first render, and then excludes it from being re-executed, except when one of the `dependencies` changes. `dependencies` can take the value `None`, in which case dependencies are automatically obtained from nonlocal variables. If an empty list is passed as `dependencies` instead, the function is only executed once over the entire lifetime of the component.
13
-
14
- Not to be confused with [memorize](https://solara.dev/documentation/api/utilities/memoize) which can cache multiple return values and which can be used outside of component.
15
-
16
- See also the [Reacton docs](https://reacton.solara.dev/en/latest/api/#use_memo).
@@ -1,9 +0,0 @@
1
- from pathlib import Path
2
-
3
- from solara.website.components import NoPage
4
-
5
- HERE = Path(__file__).parent
6
- __doc__ = open(HERE / "use_memo.md").read()
7
-
8
- Page = NoPage
9
- title = "use_memo"
@@ -1,32 +0,0 @@
1
- """
2
- # use_previous
3
-
4
- ```python
5
- def use_previous(value: T) -> T:
6
- ...
7
- ```
8
-
9
- Returns the value from a previous render phase, or the current value on the first render.
10
-
11
-
12
- """
13
- import solara
14
-
15
- title = "use_previous"
16
-
17
-
18
- @solara.component
19
- def Page():
20
- value, set_value = solara.use_state(4)
21
- value_previous = solara.use_previous(value)
22
- with solara.VBox() as main:
23
- solara.IntSlider("value", value=value, on_value=set_value)
24
- solara.Markdown(
25
- f"""
26
- **Current**: `{value}`
27
-
28
- **Previous**: `{value_previous}`
29
- """
30
- )
31
-
32
- return main
@@ -1,15 +0,0 @@
1
- """
2
- # use_reactive
3
-
4
- """
5
- import solara
6
- from solara.website.components import NoPage
7
- from solara.website.utils import apidoc
8
-
9
- title = "use_reactive"
10
-
11
-
12
- Page = NoPage
13
-
14
-
15
- __doc__ += apidoc(solara.use_reactive) # type: ignore
@@ -1,11 +0,0 @@
1
- """# use_state
2
-
3
- """
4
- import solara
5
- import solara.autorouting
6
- from solara.website.components import NoPage
7
- from solara.website.utils import apidoc
8
-
9
- title = "use_state"
10
- Page = NoPage
11
- __doc__ += apidoc(solara.use_state) # type: ignore
@@ -1,68 +0,0 @@
1
- """
2
- # use_state_or_update
3
-
4
- Like `solara.use_state`, except it will update the value if the input value changes.
5
-
6
- This is useful to give a component state *or* allow the state to be controlled by the parent component
7
-
8
-
9
- """
10
- import solara
11
-
12
- title = "use_state_or_update"
13
-
14
-
15
- @solara.component
16
- def SliderWithoutState(value: int):
17
- # Note that this is a very bad practice, if value is an input change and the slider
18
- # can change it, this component should have a on_value callback to allow the parent
19
- # component to manage its state.
20
- # This component is only for demoing/understanding.
21
- return solara.IntSlider("value", value=value)
22
-
23
-
24
- @solara.component
25
- def SliderWithState(value: int):
26
- # effectively, because of use_state, the value prop passed in is
27
- # only a default value.
28
- value, set_value = solara.use_state(value)
29
- return solara.IntSlider("value", value=value, on_value=set_value)
30
-
31
-
32
- @solara.component
33
- def SliderWithStateOrUpdate(value: int):
34
- value, set_value = solara.use_state_or_update(value)
35
- return solara.IntSlider("value", value=value, on_value=set_value)
36
-
37
-
38
- @solara.component
39
- def Page():
40
- parent_value, set_parent_value = solara.use_state(4)
41
- # used to force rerenders
42
- rerender_counter, set_rerender_counter = solara.use_state(4)
43
- with solara.VBox() as main:
44
- with solara.Card("Parent value selection"):
45
- solara.Info("This slider value gets passed down to the child components")
46
- solara.IntSlider("parent value", value=parent_value, on_value=set_parent_value)
47
- solara.Button("Force redraw", on_click=lambda: set_rerender_counter(rerender_counter + 1))
48
-
49
- with solara.Card("Child without state"):
50
- solara.Info("This child will simply render the value passed into the argument, a redraw will reset it to its parent value.")
51
- SliderWithoutState(parent_value)
52
-
53
- with solara.Card("Child with state"):
54
- solara.Info("This child will not care about the value passed into the prop, it manages its own state.")
55
- SliderWithState(parent_value)
56
-
57
- with solara.Card("Child with state (or update)"):
58
- solara.Info("This child will update when the passes in a new value, but a redraw will not reset it.")
59
- SliderWithStateOrUpdate(parent_value)
60
-
61
- with solara.Card("Child with state + key"):
62
- solara.Info(
63
- "We can also use the `.key(...)` method to force the component to forget its state, this will however cause the widget to be re-created"
64
- "(a performance penalty)."
65
- )
66
- SliderWithState(parent_value).key(f"slider-{parent_value}")
67
-
68
- return main
@@ -1,58 +0,0 @@
1
- # use_thread
2
-
3
- ```python
4
- def use_thread(
5
- callback=Union[
6
- Callable[[threading.Event], T],
7
- Iterator[Callable[[threading.Event], T]],
8
- Callable[[], T],
9
- Iterator[Callable[[], T]],
10
- ],
11
- intrusive_cancel=True,
12
- dependencies=[],
13
- ) -> Result[T]:
14
- ...
15
- ```
16
-
17
- `use_thread` can be used to run medium or long running jobs in a separate thread to avoid blocking the render loop.
18
-
19
- `use_thread` takes a function as argument that takes a `threading.Event` object as argument to check whether it should stop,
20
- and should return it's resulting value, or yield it multiple times (thus an iterator).
21
-
22
- The return value of `use_thread` is a `Result[T]`, making it easy to have the UI reflect the state of the work being done.
23
-
24
- When an iterator is passed, the state only enters the `FINISHED` state after the last element is yielded. Partial, or incremental results can be detected when the state is still in `RUNNING`, but `Result[T].value` is not None.
25
-
26
-
27
-
28
- From any state the `.cancel()` or `.retry()` may be called, which will stop the current thread, and start all over.
29
- Note that at no time, two threads will run, since the new thread will always wait for the previous to finish.
30
-
31
- When `intrusive_cancel=True`, a tracer is installed into the thread, which will throw a special exception to cancel the thread. This gives some runtime overhead, and a more performant way would be to set this to false and manually inspect the `threading.Event` regularly. When this is not possible (e.g. usage of an external library), this is the only way to cancel a thread while executing.
32
-
33
-
34
- Note that `.value` and `.error` of the result object will only be set when a new result is returned. This makes is possible for a component to render the "previous" result (or previous error) while the new job is running.
35
-
36
- ## State diagram
37
-
38
- The possible values for `Result[T].state` are stored in the dataclass `solara.ResultState`, with the possible options being
39
-
40
- * `STARTING`
41
- * `WAITING`
42
- * `RUNNING`
43
- * `ERROR`
44
- * `FINISHED`
45
- * `CANCELLED`
46
-
47
- These states are reflected in the below state diagram
48
-
49
- ```mermaid
50
- graph TD;
51
- INITIAL-- "Thread.start()" -->STARTING;
52
- STARTING-- "previous thread running" -->WAITING;
53
- STARTING-- "no previous thread" -->RUNNING;
54
- WAITING-- "thread.join()" -->RUNNING;
55
- RUNNING-- "on exception" -->ERROR
56
- RUNNING-- "work finished" -->FINISHED
57
- RUNNING-- "cancel()" -->CANCELLED
58
- ```
@@ -1,44 +0,0 @@
1
- import time
2
- from pathlib import Path
3
- from typing import Optional, cast
4
-
5
- import solara
6
- from solara.alias import rv, rw
7
-
8
- HERE = Path(__file__).parent
9
- title = "use_thread"
10
- __doc__ = open(HERE / "use_thread.md").read()
11
-
12
-
13
- @solara.component
14
- def Page():
15
- number, set_number = solara.use_state(17)
16
- # the number that proofs it is not a prime
17
- proof, set_proof = solara.use_state(cast(Optional[int], None))
18
-
19
- def work():
20
- for i in range(3, number):
21
- reminder = number % i
22
- if reminder == 0:
23
- set_proof(i)
24
- return False
25
- # make it always take ~4 seconds
26
- time.sleep(4 / number)
27
- return True
28
-
29
- # work will be cancelled/restarted every time the dependency changes
30
- result: solara.Result[bool] = solara.use_thread(work, dependencies=[number])
31
-
32
- with solara.VBox() as main:
33
- rw.IntText(value=number, on_value=set_number)
34
- if result.state == solara.ResultState.FINISHED:
35
- if result.value:
36
- solara.Success(f"{number} is a prime!")
37
- else:
38
- solara.Error(f"{number} is not a prime, it can be divided by {proof} ")
39
- elif result.state == solara.ResultState.ERROR:
40
- solara.Error(f"Error occurred: {result.error}")
41
- else:
42
- solara.Info(f"Running... (status = {result.state})")
43
- rv.ProgressLinear(indeterminate=True)
44
- return main
@@ -1,13 +0,0 @@
1
- """# use_trait_observe
2
-
3
- """
4
- import solara
5
- import solara.autorouting
6
- import solara.lab
7
- from solara.website.utils import apidoc
8
-
9
- from . import NoPage
10
-
11
- title = "use_trait_observe"
12
- Page = NoPage
13
- __doc__ += apidoc(solara.use_trait_observe) # type: ignore
@@ -1,9 +0,0 @@
1
- import solara
2
- from solara.website.components import NoPage, SubCategoryLayout
3
-
4
- Page = NoPage
5
-
6
-
7
- @solara.component
8
- def Layout(children=[]):
9
- SubCategoryLayout(children=children)
@@ -1,11 +0,0 @@
1
- """# generate_routes
2
-
3
- """
4
- import solara
5
- import solara.autorouting
6
- from solara.website.components import NoPage
7
- from solara.website.utils import apidoc
8
-
9
- title = "generate_routes"
10
- Page = NoPage
11
- __doc__ += apidoc(solara.autorouting.generate_routes) # type: ignore
@@ -1,11 +0,0 @@
1
- """# generate_routes_directory
2
-
3
- """
4
- import solara
5
- import solara.autorouting
6
- from solara.website.components import NoPage
7
- from solara.website.utils import apidoc
8
-
9
- title = "generate_routes_directory"
10
- Page = NoPage
11
- __doc__ += apidoc(solara.autorouting.generate_routes_directory) # type: ignore
@@ -1,36 +0,0 @@
1
- """# resolve_route
2
-
3
- """
4
- import solara
5
- from solara.website.utils import apidoc
6
-
7
- title = "resolve_route"
8
- routes = [
9
- solara.Route(path="/"),
10
- solara.Route(path="kiwi"),
11
- solara.Route(path="banana"),
12
- solara.Route(path="apple"),
13
- ]
14
-
15
-
16
- @solara.component
17
- def Page():
18
- route_current, routes = solara.use_route()
19
- with solara.VBox() as main:
20
- # solara.Warning("Note the address bar in the browser. It should change to the path of the link.")
21
- solara.Markdown("*Click on one of the links below to change the route and see the url in your browser change, and match the text.*")
22
- with solara.VBox():
23
- for route in routes:
24
- path = solara.resolve_path(route)
25
- # we could have passed the route object directly to Link, but we want to show the path
26
- # can also be used.
27
- with solara.Link(path):
28
- current = route_current is route
29
- if current:
30
- solara.Success(f"You are at {path}")
31
- else:
32
- solara.Info(f"{route.path} will navigate to {path}")
33
- return main
34
-
35
-
36
- __doc__ += apidoc(solara.resolve_path) # type: ignore
@@ -1,32 +0,0 @@
1
- """# Route
2
-
3
- """
4
- import solara
5
- from solara.website.utils import apidoc
6
-
7
- routes = [
8
- solara.Route(path="/"),
9
- solara.Route(path="kiwi"),
10
- solara.Route(path="banana"),
11
- solara.Route(path="apple"),
12
- ]
13
-
14
-
15
- @solara.component
16
- def Page():
17
- route_current, routes = solara.use_route()
18
- with solara.VBox() as main:
19
- # solara.Warning("Note the address bar in the browser. It should change to the path of the link.")
20
- solara.Markdown("*Click on one of the links below to change the route and see the url in your browser change, and match the route.*")
21
- with solara.VBox():
22
- for route in routes:
23
- with solara.Link(route):
24
- current = route_current is route
25
- if current:
26
- solara.Success(f"You are at solara.Route(path={route.path!r})")
27
- else:
28
- solara.Info(f"Go to solara.Route(path={route.path!r})")
29
- return main
30
-
31
-
32
- __doc__ += apidoc(solara.Route, full=True) # type: ignore