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,118 +0,0 @@
1
- """# Authorization
2
-
3
- Authorization is a common requirement for web applications. This example shows how to implement a simple login form and
4
- how to use `use_route` to implement authorization.
5
-
6
- The `Layout` component checks if the current route requires authorization and if the user is logged in. If not, it
7
- redirects to the login form.
8
- """
9
- import dataclasses
10
- from typing import Optional, cast
11
-
12
- import solara
13
- import solara.lab
14
-
15
- github_url = solara.util.github_url(__file__)
16
-
17
- route_order = ["/", "users", "admin"]
18
-
19
-
20
- def check_auth(route, children):
21
- # This can be replaced by a custom function that checks if the user is
22
- # logged in and has the required permissions.
23
-
24
- # routes that are public or only for admin
25
- # the rest only requires login
26
- public_paths = ["/"]
27
- admin_paths = ["admin"]
28
-
29
- if route.path in public_paths:
30
- children_auth = children
31
- else:
32
- if user.value is None:
33
- children_auth = [LoginForm()]
34
- else:
35
- if route.path in admin_paths and not user.value.admin:
36
- children_auth = [solara.Error("You are not an admin")]
37
- else:
38
- children_auth = children
39
- return children_auth
40
-
41
-
42
- @dataclasses.dataclass
43
- class User:
44
- username: str
45
- admin: bool = False
46
-
47
-
48
- user = solara.reactive(cast(Optional[User], None))
49
- login_failed = solara.reactive(False)
50
-
51
-
52
- def login(username: str, password: str):
53
- # this function can be replace by a custom username/password check
54
- if username == "test" and password == "test":
55
- user.value = User(username, admin=False)
56
- login_failed.value = False
57
- elif username == "admin" and password == "admin":
58
- user.value = User(username, admin=True)
59
- login_failed.value = False
60
- else:
61
- login_failed.value = True
62
-
63
-
64
- @solara.component
65
- def Page():
66
- solara.Markdown("This page is visible for everyone")
67
-
68
- solara.Markdown(__doc__)
69
- solara.Button(label="View source", icon_name="mdi-github-circle", attributes={"href": github_url, "target": "_blank"}, text=True, outlined=True)
70
-
71
-
72
- @solara.component
73
- def LoginForm():
74
- username = solara.use_reactive("")
75
- password = solara.use_reactive("")
76
- with solara.Card("Login"):
77
- solara.Markdown(
78
- """
79
- This is an example login form.
80
-
81
- * use admin/admin to login as admin.
82
- * use test/test to login as a normal user.
83
- """
84
- )
85
- solara.InputText(label="Username", value=username)
86
- solara.InputText(label="Password", password=True, value=password)
87
- solara.Button(label="Login", on_click=lambda: login(username.value, password.value))
88
- if login_failed.value:
89
- solara.Error("Wrong username or password")
90
-
91
-
92
- @solara.component
93
- def Layout(children=[]):
94
- route, routes = solara.use_route(peek=True)
95
- if route is None:
96
- return solara.Error("Route not found")
97
-
98
- children = check_auth(route, children)
99
-
100
- with solara.AppLayout(children=children, navigation=True):
101
- with solara.AppBar():
102
- with solara.lab.Tabs(align="center"):
103
- for route in routes:
104
- name = route.path if route.path != "/" else "Home"
105
- is_admin = user.value and user.value.admin
106
- # we could skip the admin tab if the user is not an admin
107
- # if route.path == "admin" and not is_admin:
108
- # continue
109
- # in this case we disable the tab
110
- disabled = route.path == "admin" and not is_admin
111
- solara.lab.Tab(name, path_or_route=route, disabled=disabled)
112
- if user.value:
113
- solara.Text(f"Logged in as {user.value.username} as {'admin' if user.value.admin else 'user'}")
114
- with solara.Tooltip("Logout"):
115
- solara.Button(icon_name="mdi-logout", icon=True, on_click=lambda: user.set(None))
116
- else:
117
- with solara.AppBar():
118
- solara.Text("Not logged in")
@@ -1,12 +0,0 @@
1
- import solara
2
-
3
- from . import user
4
-
5
- github_url = solara.util.github_url(__file__)
6
-
7
-
8
- @solara.component
9
- def Page():
10
- assert user.value is not None
11
- solara.Markdown(f"Hi {user.value.username}, you are an admin")
12
- solara.Button(label="View source", icon_name="mdi-github-circle", attributes={"href": github_url, "target": "_blank"}, text=True, outlined=True)
@@ -1,12 +0,0 @@
1
- import solara
2
-
3
- from . import user
4
-
5
- github_url = solara.util.github_url(__file__)
6
-
7
-
8
- @solara.component
9
- def Page():
10
- assert user.value is not None
11
- solara.Markdown(f"Hi {user.value.username}!")
12
- solara.Button(label="View source", icon_name="mdi-github-circle", attributes={"href": github_url, "target": "_blank"}, text=True, outlined=True)
@@ -1,116 +0,0 @@
1
- from pathlib import Path
2
-
3
- import folium
4
- import folium.plugins
5
- import matplotlib.pyplot as plt
6
- import pandas as pd
7
-
8
- import solara
9
-
10
- districts = solara.reactive(
11
- ["Bayview", "Northern"],
12
- )
13
- categories = solara.reactive(["Vandalism", "Assault", "Robbery"])
14
- limit = solara.reactive(100)
15
-
16
-
17
- ROOT = Path(solara.__file__).parent / "website" / "pages" / "documentation" / "getting_started" / "content" / "04-tutorials"
18
- path = ROOT / Path("SF_crime_sample.csv.gz")
19
- url = "https://raw.githubusercontent.com/widgetti/solara/master/solara/website/pages/docs/content/04-tutorial/SF_crime_sample.csv"
20
-
21
- if path.exists():
22
- df_crime = pd.read_csv(path)
23
- else:
24
- df_crime = pd.read_csv(url)
25
-
26
- df_crime
27
-
28
-
29
- df_crime["Category"] = df_crime["Category"].str.title()
30
- df_crime["PdDistrict"] = df_crime["PdDistrict"].str.title()
31
-
32
-
33
- def crime_filter(df, district_values, category_values):
34
- df_dist = df.loc[df["PdDistrict"].isin(district_values)]
35
- df_category = df_dist.loc[df_dist["Category"].isin(category_values)]
36
- return df_category
37
-
38
-
39
- def crime_charts(df):
40
- cat_unique = df["Category"].value_counts()
41
- cat_unique = cat_unique.reset_index()
42
-
43
- dist_unique = df["PdDistrict"].value_counts()
44
- dist_unique = dist_unique.reset_index()
45
-
46
- fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(20, 10))
47
-
48
- ax1.bar(cat_unique["Category"], cat_unique["count"])
49
- ax1.set_title("Amount of Criminal Case Based on Category")
50
- ax2.bar(dist_unique["PdDistrict"], dist_unique["count"])
51
- ax2.set_title("Amount of Criminal Case in Selected District")
52
-
53
- # this does not work on solara yet: https://github.com/widgetti/solara/issues/399
54
- # display(fig)
55
- # plt.close(fig)
56
- solara.FigureMatplotlib(fig)
57
-
58
-
59
- def crime_map(df):
60
- latitude = 37.77
61
- longitude = -122.42
62
-
63
- sanfran_map = folium.Map(height=400, location=[latitude, longitude], zoom_start=12)
64
-
65
- incidents = folium.plugins.MarkerCluster().add_to(sanfran_map)
66
-
67
- # loop through the dataframe and add each data point to the mark cluster
68
- for (
69
- lat,
70
- lng,
71
- label,
72
- ) in zip(df.Y, df.X, df.Category):
73
- folium.Marker(
74
- location=[lat, lng],
75
- icon=None,
76
- popup=label,
77
- ).add_to(incidents)
78
-
79
- # show map
80
- solara.display(sanfran_map)
81
-
82
-
83
- @solara.component
84
- def View():
85
- dff = crime_filter(df_crime, districts.value, categories.value)
86
- row_count = len(dff)
87
- if row_count > limit.value:
88
- solara.Warning(f"Only showing the first {limit.value} of {row_count:,} crimes on map")
89
- with solara.Column(style={"max-height": "400px"}):
90
- crime_map(dff.iloc[: limit.value])
91
- if row_count > 0:
92
- crime_charts(dff)
93
- else:
94
- solara.Warning("You filtered out all the data, no charts shown")
95
-
96
-
97
- @solara.component
98
- def Controls():
99
- solara.SelectMultiple("District", all_values=[str(k) for k in df_crime["PdDistrict"].unique().tolist()], values=districts) # type: ignore
100
- solara.SelectMultiple("Category", all_values=[str(k) for k in df_crime["Category"].unique().tolist()], values=categories) # type: ignore
101
- solara.Text("Maximum number of rows to show on map")
102
- solara.SliderInt("", value=limit, min=1, max=1000)
103
-
104
-
105
- @solara.component
106
- def Page():
107
- with solara.Sidebar():
108
- Controls()
109
- View()
110
-
111
-
112
- # only needed on the solara website itself
113
- @solara.component
114
- def Layout(children):
115
- route, routes = solara.use_route()
116
- return solara.AppLayout(children=children)
@@ -1,40 +0,0 @@
1
- import solara
2
- import solara.lab
3
-
4
- github_url = solara.util.github_url(__file__)
5
-
6
-
7
- @solara.component
8
- def Page():
9
- with solara.Column():
10
- solara.Title("I'm in the browser tab and the toolbar bar")
11
- with solara.Sidebar():
12
- with solara.Card("I am in the sidebar"):
13
- with solara.Column():
14
- solara.SliderInt(label="Ideal for placing controls")
15
- solara.Button(
16
- label="View source", icon_name="mdi-github-circle", attributes={"href": github_url, "target": "_blank"}, text=True, outlined=True
17
- )
18
-
19
- solara.Info("I'm in the main content area, put your main content here")
20
- with solara.Card("Use solara.Columns to create relatively sized columns"):
21
- with solara.Columns([1, 2]):
22
- solara.Success("I'm in the first column")
23
- solara.Warning("I'm in the second column, I am twice as wide")
24
-
25
- with solara.Card("Use solara.Column to create a full width column"):
26
- with solara.Column():
27
- solara.Success("I'm first in this full with column")
28
- solara.Warning("I'm second in this full with column")
29
- solara.Error("I'm third in this full with column")
30
-
31
- with solara.Card("Use solara.ColumnsResponsive to response to screen size"):
32
- with solara.ColumnsResponsive(6, large=4):
33
- for i in range(6):
34
- solara.Info("two per column on small screens, three per column on large screens")
35
-
36
-
37
- @solara.component
38
- def Layout(children):
39
- route, routes = solara.use_route()
40
- return solara.AppLayout(children=children)
@@ -1,38 +0,0 @@
1
- import solara
2
-
3
- github_url = solara.util.github_url(__file__)
4
- # some app state that outlives a single page
5
- app_state = solara.reactive(0)
6
-
7
-
8
- @solara.component
9
- def SharedComponent():
10
- with solara.Card("Shown on each page", style={"max-width": "500px"}, margin=0, classes=["my-2"]):
11
- solara.Markdown(
12
- f"""
13
- This component will be used on each page.
14
-
15
- It uses the `app_state` [reactive variable](https://solara.dev/documentation/api/utilities/reactive)
16
- so that the state outlives each page
17
-
18
-
19
- app_state: {app_state.value}
20
- """
21
- )
22
- solara.Button(label="Increment app_state", icon_name="mdi-plus", on_click=lambda: app_state.set(app_state.value + 1), outlined=True)
23
-
24
-
25
- @solara.component
26
- def Page():
27
- with solara.Sidebar():
28
- solara.Markdown("This is the sidebar at the home page!")
29
- with solara.Card("Home"):
30
- solara.Markdown("This is the home page")
31
- solara.Button(label="View source", icon_name="mdi-github-circle", attributes={"href": github_url, "target": "_blank"}, text=True, outlined=True)
32
-
33
- SharedComponent()
34
-
35
-
36
- @solara.component
37
- def Layout(children):
38
- return solara.AppLayout(children=children)
@@ -1,26 +0,0 @@
1
- import solara
2
-
3
- from . import SharedComponent
4
-
5
- github_url = solara.util.github_url(__file__)
6
-
7
-
8
- @solara.component
9
- def Sub():
10
- with solara.Card("Sub component", margin=0, classes=["my-2"]):
11
- solara.Markdown("This sub component is the best")
12
- with solara.Sidebar():
13
- with solara.Card("Sidebar of sub component", margin=0, elevation=0):
14
- solara.Markdown("*Markdown* **is** 👍")
15
- SharedComponent()
16
-
17
-
18
- @solara.component
19
- def Page():
20
- with solara.Sidebar():
21
- with solara.Card("Sidebar of page 1", margin=0, elevation=0):
22
- solara.Markdown("Hi there 👋!")
23
- solara.Button(label="View source", icon_name="mdi-github-circle", attributes={"href": github_url, "target": "_blank"}, text=True, outlined=True)
24
- with solara.Card("Page 1"):
25
- Sub()
26
- solara.Markdown("Page 1 is the best")
@@ -1,34 +0,0 @@
1
- import solara
2
-
3
- from . import SharedComponent
4
-
5
- github_url = solara.util.github_url(__file__)
6
-
7
-
8
- @solara.component
9
- def Page():
10
- component_state = solara.use_reactive(0)
11
- solara.Title("Page 2 set with title")
12
- with solara.Card("Page 2"):
13
- solara.Markdown("Page 2 is even better, even though it has no sidebar.")
14
- solara.Button(label="View source", icon_name="mdi-github-circle", attributes={"href": github_url, "target": "_blank"}, text=True, outlined=True)
15
- SharedComponent()
16
-
17
- with solara.Card("Shown only on page2", style={"max-width": "500px"}, margin=0, classes=["my-2"]):
18
- solara.Markdown(
19
- f"""
20
- The lifetime of `component_state` if bound to this page. If you navigate away from it,
21
- the state will be reset.
22
-
23
- It creates the `component_state` [using the use_reactive hook](https://solara.dev/api/use_reactive)
24
- so that the state is bound to the component.
25
-
26
- See also [about state management](https://solara.dev/documentation/getting_started/fundamentals/state-management) for more information.
27
-
28
-
29
- component_state: {component_state.value}
30
- """
31
- )
32
- solara.Button(
33
- label="Increment component_state", icon_name="mdi-plus", on_click=lambda: component_state.set(component_state.value + 1), outlined=True
34
- )
@@ -1,136 +0,0 @@
1
- import pathlib
2
- import sys
3
- from typing import Optional, cast
4
-
5
- import pandas as pd
6
-
7
- import solara
8
- import solara.express as solara_px # similar to plotly express, but comes with cross filters
9
- import solara.lab
10
- from solara.components.columns import Columns
11
- from solara.components.file_drop import FileDrop
12
-
13
- github_url = solara.util.github_url(__file__)
14
- if sys.platform != "emscripten":
15
- pycafe_url = solara.util.pycafe_url(path=pathlib.Path(__file__), requirements=["solara", "pandas", "plotly"])
16
- else:
17
- pycafe_url = None
18
- df_sample = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv")
19
-
20
-
21
- class State:
22
- size_max = solara.reactive(40.0)
23
- size = solara.reactive(cast(Optional[str], None))
24
- color = solara.reactive(cast(Optional[str], None))
25
- x = solara.reactive(cast(Optional[str], None))
26
- y = solara.reactive(cast(Optional[str], None))
27
- logx = solara.reactive(False)
28
- logy = solara.reactive(False)
29
- df = solara.reactive(cast(Optional[pd.DataFrame], None))
30
-
31
- @staticmethod
32
- def load_sample():
33
- State.x.value = "gdpPercap"
34
- State.y.value = "lifeExp"
35
- State.size.value = "pop"
36
- State.color.value = "continent"
37
- State.logx.value = True
38
- State.df.value = df_sample
39
-
40
- @staticmethod
41
- def load_from_file(file):
42
- df = pd.read_csv(file["file_obj"])
43
- State.x.value = str(df.columns[0])
44
- State.y.value = str(df.columns[1])
45
- State.size.value = str(df.columns[2])
46
- State.color.value = str(df.columns[3])
47
- State.df.value = df
48
-
49
- @staticmethod
50
- def reset():
51
- State.df.value = None
52
-
53
-
54
- @solara.component
55
- def Page():
56
- df = State.df.value
57
- dark_effective = solara.lab.use_dark_effective()
58
-
59
- # the .scatter will set this cross filter
60
- filter, _set_filter = solara.use_cross_filter(id(df))
61
-
62
- # only apply the filter if the filter or dataframe changes
63
- def filter_df():
64
- if filter is not None and df is not None:
65
- return df.loc[filter]
66
-
67
- dff = solara.use_memo(filter_df, dependencies=[df, filter])
68
-
69
- with solara.AppBar():
70
- solara.lab.ThemeToggle()
71
- with solara.Sidebar():
72
- with solara.Card("Controls", margin=0, elevation=0):
73
- with solara.Column():
74
- with solara.Row():
75
- solara.Button("Sample dataset", color="primary", text=True, outlined=True, on_click=State.load_sample, disabled=df is not None)
76
- solara.Button("Clear dataset", color="primary", text=True, outlined=True, on_click=State.reset)
77
- if sys.platform != "emscripten":
78
- FileDrop(on_file=State.load_from_file, on_total_progress=lambda *args: None, label="Drag file here")
79
- else:
80
- solara.Info("File upload not supported in this environment")
81
-
82
- if df is not None:
83
- solara.SliderFloat(label="Size", value=State.size_max, min=1, max=100)
84
- solara.Checkbox(label="Log x", value=State.logx)
85
- solara.Checkbox(label="Log y", value=State.logy)
86
- columns = list(map(str, df.columns))
87
- solara.Select("Column x", values=columns, value=State.x)
88
- solara.Select("Column y", values=columns, value=State.y)
89
- solara.Select("Size", values=columns, value=State.size)
90
- solara.Select("Color", values=columns, value=State.color)
91
- if filter is None:
92
- solara.Info("If you select points in the scatter plot, you can download the points here.")
93
- else:
94
-
95
- def get_data():
96
- return dff.to_csv(index=False)
97
-
98
- solara.FileDownload(get_data, label=f"Download {len(dff):,} selected points", filename="selected.csv")
99
-
100
- if df is not None:
101
- with Columns(widths=[2, 4]):
102
- if State.x.value and State.y.value:
103
- solara_px.scatter(
104
- df,
105
- State.x.value,
106
- State.y.value,
107
- size=State.size.value,
108
- color=State.color.value,
109
- size_max=State.size_max.value,
110
- log_x=State.logx.value,
111
- log_y=State.logy.value,
112
- template="plotly_dark" if dark_effective else "plotly_white",
113
- )
114
- else:
115
- solara.Warning("Select x and y columns")
116
-
117
- else:
118
- solara.Info("No data loaded, click on the sample dataset button to load a sample dataset, or upload a file.")
119
-
120
- with solara.Column(style={"max-width": "400px"}):
121
- solara.Button(label="View source", icon_name="mdi-github-circle", attributes={"href": github_url, "target": "_blank"}, text=True, outlined=True)
122
- if sys.platform != "emscripten":
123
- solara.Button(
124
- label="Edit this example live on py.cafe",
125
- icon_name="mdi-coffee-to-go-outline",
126
- attributes={"href": pycafe_url, "target": "_blank"},
127
- text=True,
128
- outlined=True,
129
- )
130
-
131
-
132
- @solara.component
133
- def Layout(children):
134
- route, routes = solara.use_route()
135
- dark_effective = solara.lab.use_dark_effective()
136
- return solara.AppLayout(children=children, toolbar_dark=dark_effective, color=None) # if dark_effective else "primary")
@@ -1,63 +0,0 @@
1
- import solara
2
-
3
- github_url = solara.util.github_url(__file__)
4
-
5
- # list of nice soft colors
6
- colors = [
7
- "#e6194b",
8
- "#3cb44b",
9
- "#ffe119",
10
- "#4363d8",
11
- "#f58231",
12
- "#911eb4",
13
- ]
14
-
15
-
16
- @solara.component
17
- def Page1():
18
- with solara.Sidebar():
19
- solara.Button(label="View source", icon_name="mdi-github-circle", attributes={"href": github_url, "target": "_blank"}, text=True, outlined=True)
20
- solara.Markdown("The sidebar will get scrollbars automatically, independently of the main content.")
21
- for i in range(10):
22
- with solara.Card(f"Card {i}"):
23
- solara.Info(f"Text {i}", color=colors[i % len(colors)])
24
-
25
- solara.Markdown("The main content will get scrollbars automatically, independently of the sidebar.")
26
- for i in range(10):
27
- with solara.Card(f"Card {i}"):
28
- solara.Info(f"Text {i}", color=colors[i % len(colors)])
29
-
30
-
31
- @solara.component
32
- def Page2():
33
- # it is important we do not interrupt the height 100% chain
34
- limit_content_height = solara.use_reactive(True)
35
- # warning: if we add "margin": "10px" to the style, we will trigger
36
- # scrollbars in the parent div, if you really need to add margins,
37
- # you should correct for that in the height using "calc(100% - 20px)"
38
- with solara.Column(style={"height": "100%"}):
39
- with solara.Sidebar():
40
- solara.Button(label="View source", icon_name="mdi-github-circle", attributes={"href": github_url, "target": "_blank"}, text=True, outlined=True)
41
- solara.Markdown("Main content columns will scroll together, or independently if we limit height to 100%")
42
- solara.Checkbox(label="Limit content height", value=limit_content_height)
43
-
44
- # if we do not limit height to 100%, solara's AppLayout will add a scroll bar
45
- # to the main content, which will be independent of the sidebar's scroll bar
46
- # but both columns will scroll together
47
- with solara.Columns([2, 4], style={"height": "100%"} if limit_content_height.value else {}):
48
- with solara.Card("I have my own scroll bar"):
49
- solara.Markdown("")
50
- for i in range(10):
51
- with solara.Card(f"Card {i}"):
52
- solara.Info(f"Text {i}", color=colors[i % len(colors)])
53
- with solara.Card("I also have my own scroll bar"):
54
- solara.Markdown("")
55
- for i in range(20):
56
- with solara.Card(f"Card {i}"):
57
- solara.Info(f"Text {i}", color=colors[i % len(colors)])
58
-
59
-
60
- routes = [
61
- solara.Route(path="/", component=Page1, label="Scrolling"),
62
- solara.Route(path="custom", component=Page2, label="Custom scrolling"),
63
- ]
@@ -1,18 +0,0 @@
1
- import solara
2
-
3
-
4
- @solara.component
5
- def Page():
6
- x, set_x = solara.use_state(2)
7
- x_squared = x**2
8
-
9
- with solara.Sidebar():
10
- solara.Markdown("## My First Solara app ☀️")
11
- solara.SliderInt(label="x", value=x, on_value=set_x)
12
- solara.Markdown(f"{x} squared = {x_squared}")
13
-
14
-
15
- @solara.component
16
- def Layout(children):
17
- route, routes = solara.use_route()
18
- return solara.AppLayout(children=children)
@@ -1,8 +0,0 @@
1
- from pathlib import Path
2
-
3
- import solara
4
-
5
- title = "Changelog"
6
- HERE = Path(__file__)
7
-
8
- Page = solara.Markdown(Path(HERE.parent / "changelog.md").read_text())