solara 1.30.1__py2.py3-none-any.whl → 1.32.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.32.0.dist-info}/METADATA +12 -42
  2. solara-1.32.0.dist-info/RECORD +5 -0
  3. {solara-1.30.1.dist-info → solara-1.32.0.dist-info}/WHEEL +1 -1
  4. {solara/template/portal → solara-1.32.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,10 +0,0 @@
1
- """Large Language Models and Generative AI examples."""
2
- import solara
3
-
4
- title = "AI"
5
- redirect = None
6
-
7
-
8
- @solara.component
9
- def Page():
10
- return solara.Markdown("Click an example on the left")
@@ -1,96 +0,0 @@
1
- """
2
- # Chatbot
3
-
4
- A way to create a chatbot using OpenAI's GPT-4 API, utilizing their new API, and the streaming feature.
5
- """
6
-
7
-
8
- import os
9
- from typing import List
10
-
11
- from openai import OpenAI
12
- from typing_extensions import TypedDict
13
-
14
- import solara
15
- import solara.lab
16
-
17
-
18
- class MessageDict(TypedDict):
19
- role: str
20
- content: str
21
-
22
-
23
- if os.getenv("OPENAI_API_KEY") is None and "OPENAI_API_KEY" not in os.environ:
24
- openai = None
25
- else:
26
- openai = OpenAI()
27
- openai.api_key = os.getenv("OPENAI_API_KEY") # type: ignore
28
-
29
- messages: solara.Reactive[List[MessageDict]] = solara.reactive([])
30
-
31
-
32
- def no_api_key_message():
33
- messages.value = [
34
- {
35
- "role": "assistant",
36
- "content": "No OpenAI API key found. Please set your OpenAI API key in the environment variable `OPENAI_API_KEY`.",
37
- },
38
- ]
39
-
40
-
41
- def add_chunk_to_ai_message(chunk: str):
42
- messages.value = [
43
- *messages.value[:-1],
44
- {
45
- "role": "assistant",
46
- "content": messages.value[-1]["content"] + chunk,
47
- },
48
- ]
49
-
50
-
51
- @solara.component
52
- def Page():
53
- user_message_count = len([m for m in messages.value if m["role"] == "user"])
54
-
55
- def send(message):
56
- messages.value = [
57
- *messages.value,
58
- {"role": "user", "content": message},
59
- ]
60
-
61
- def call_openai():
62
- if user_message_count == 0:
63
- return
64
- if openai is None:
65
- no_api_key_message()
66
- return
67
- response = openai.chat.completions.create(
68
- model="gpt-4-1106-preview",
69
- messages=messages.value, # type: ignore
70
- stream=True,
71
- )
72
- messages.value = [*messages.value, {"role": "assistant", "content": ""}]
73
- for chunk in response:
74
- if chunk.choices[0].finish_reason == "stop": # type: ignore
75
- return
76
- add_chunk_to_ai_message(chunk.choices[0].delta.content) # type: ignore
77
-
78
- task = solara.lab.use_task(call_openai, dependencies=[user_message_count]) # type: ignore
79
-
80
- with solara.Column(
81
- style={"width": "700px", "height": "50vh"},
82
- ):
83
- with solara.lab.ChatBox():
84
- for item in messages.value:
85
- with solara.lab.ChatMessage(
86
- user=item["role"] == "user",
87
- avatar=False,
88
- name="ChatGPT" if item["role"] == "assistant" else "User",
89
- color="rgba(0,0,0, 0.06)" if item["role"] == "assistant" else "#ff991f",
90
- avatar_background_color="primary" if item["role"] == "assistant" else None,
91
- border_radius="20px",
92
- ):
93
- solara.Markdown(item["content"])
94
- if task.pending:
95
- solara.Text("I'm thinking...", style={"font-size": "1rem", "padding-left": "20px"})
96
- solara.lab.ChatInput(send_callback=send, disabled=task.pending)
@@ -1,106 +0,0 @@
1
- """# GPT-4 token encoder and decoder
2
-
3
- This example shows how to use a language model tokenizer to encode and decode and how to search for a token
4
-
5
- Inspired by: [Understanding GPT tokenizers by Simon Willison](https://simonwillison.net/2023/Jun/8/gpt-tokenizers/)
6
-
7
-
8
- ## Note
9
-
10
- Install pandas and tiktoken with `pip install pandas tiktoken`
11
-
12
- """
13
- import random
14
-
15
- import pandas as pd
16
- import tiktoken
17
-
18
- import solara
19
- import solara.lab
20
-
21
- # Get tokenizer for gpt-4
22
- tokenizer = tiktoken.encoding_for_model("gpt-4")
23
-
24
- # Create dataframe mapping token IDs and tokens
25
- MAX_TOKENS = 50257
26
- df = pd.DataFrame()
27
- df["token ID"] = range(MAX_TOKENS)
28
- df["token"] = [tokenizer.decode([i]) for i in range(MAX_TOKENS)]
29
-
30
- sentence = solara.reactive("Example text is here")
31
- tokens_ids_to_lookup = solara.reactive("")
32
- tokens_filter = solara.reactive("")
33
-
34
-
35
- @solara.component
36
- def GithubAvatar(name: str, handle: str, img: str):
37
- with solara.v.Html(tag="a", attributes={"href": f"https://github.com/{handle}/", "target": "_blank"}):
38
- with solara.v.ListItem(class_="pa-0"):
39
- with solara.v.ListItemAvatar(color="grey darken-3"):
40
- solara.v.Img(
41
- class_="elevation-6",
42
- src=img,
43
- )
44
- with solara.v.ListItemContent():
45
- solara.v.ListItemTitle(children=["By " + name])
46
-
47
-
48
- @solara.component
49
- def Token(token: int):
50
- # create random color dependent on the position
51
- random.seed(token)
52
- random_color = "".join([random.choice("0123456789ABCDEF") for k in range(6)])
53
- with solara.Div(style="display: inline;"):
54
- with solara.Div(
55
- style={
56
- "display": "inline",
57
- "padding": "6px",
58
- "border-right": "3px solid white",
59
- "line-height": "3em",
60
- "font-family": "courier",
61
- "background-color": f"#{random_color}",
62
- "color": "white",
63
- "position": "relative",
64
- },
65
- ):
66
- solara.Text(
67
- " " + str(token),
68
- style={
69
- "display": "inline",
70
- "position": "absolute",
71
- "top": "5.5ch",
72
- "line-height": "1em",
73
- "left": "-0.5px",
74
- "font-size": "0.45em",
75
- },
76
- )
77
- solara.Text(str(tokenizer.decode([token])))
78
-
79
-
80
- @solara.component
81
- def Page():
82
- with solara.Column(margin=10):
83
- solara.Markdown("# GPT-4 token encoder and decoder")
84
- solara.Markdown("This is an educational tool for understanding how tokenization works.")
85
- GithubAvatar(
86
- "Alonso Silva Allende",
87
- "alonsosilvaallende",
88
- "https://avatars.githubusercontent.com/u/30263736?v=4",
89
- )
90
-
91
- solara.InputText("Enter text to tokenize it:", value=sentence, continuous_update=True)
92
- tokens = tokenizer.encode(sentence.value)
93
- with solara.Div(style="display: inline;"):
94
- for token in tokens:
95
- Token(token)
96
-
97
- solara.InputText("Or convert space separated tokens to text:", value=tokens_ids_to_lookup, continuous_update=True)
98
- token_input = [int(span) for span in tokens_ids_to_lookup.value.split(" ") if span != ""]
99
- text_output = tokenizer.decode(token_input)
100
- solara.Markdown(f"{text_output}")
101
-
102
- solara.Markdown("## Search tokens")
103
- solara.InputText("Search for a token:", value=tokens_filter, continuous_update=True)
104
- df_subset = df[df["token"].str.startswith(tokens_filter.value)]
105
- solara.Markdown(f"{df_subset.shape[0]:,} results")
106
- solara.DataFrame(df_subset, items_per_page=10)
@@ -1,2 +0,0 @@
1
- """Demonstrates very basic usage of Solara."""
2
- redirect = None
@@ -1,28 +0,0 @@
1
- """# Interactive sine wave
2
-
3
-
4
- This example shows how to have two slider control a visualization.
5
-
6
- """
7
-
8
- import numpy as np
9
- import plotly.express as px
10
-
11
- import solara
12
-
13
- x = np.linspace(0, 2, 100)
14
-
15
- title = "Interactive sine wave"
16
- freq = solara.reactive(2.0)
17
- phase = solara.reactive(0.1)
18
-
19
-
20
- @solara.component
21
- def Page():
22
- y = np.sin(x * freq.value + phase.value)
23
-
24
- solara.FloatSlider("Frequency", value=freq, min=0, max=10)
25
- solara.FloatSlider("Phase", value=phase, min=0, max=np.pi, step=0.1)
26
-
27
- fig = px.line(x=x, y=y)
28
- solara.FigurePlotly(fig)
@@ -1,9 +0,0 @@
1
- """Apps that run fullscreen"""
2
- import solara
3
-
4
- redirect = None
5
-
6
-
7
- @solara.component
8
- def Page():
9
- return solara.Markdown("Should not see me")
@@ -1,3 +0,0 @@
1
- redirect = "/apps/authorization"
2
-
3
- Page = True
@@ -1,3 +0,0 @@
1
- redirect = "/apps/layout-demo"
2
-
3
- Page = True
@@ -1,3 +0,0 @@
1
- redirect = "/apps/multipage"
2
-
3
- Page = True
@@ -1,3 +0,0 @@
1
- redirect = "/apps/scatter"
2
-
3
- Page = True
@@ -1,3 +0,0 @@
1
- redirect = "/apps/scrolling"
2
-
3
- Page = True
@@ -1,3 +0,0 @@
1
- redirect = "/apps/tutorial-streamlit"
2
-
3
- Page = True
@@ -1,9 +0,0 @@
1
- """"""
2
- import solara
3
-
4
- redirect = None
5
-
6
-
7
- @solara.component
8
- def Page():
9
- return solara.Markdown("Should not see me")
@@ -1,69 +0,0 @@
1
- """# Custom state storage
2
-
3
- Solara makes it easy to store state/data on the server side, scoped to a kernel, using [reactive variables](/api/reactive).
4
-
5
- However, sometimes you want to store state yourself in an external system (i.e. not Solara), and for this you can use the
6
- [get_kernel_id()](/api/get_kernel_id) function to get a unique id for each kernel.
7
-
8
- If you want to store state/data scoped to a browser session, you can use the [get_session_id()](/api/get_session_id)
9
- function to get a unique id tied to the users browser. This can be used to store state that outlives a page refresh.
10
-
11
- In case you want to store state/data scoped to a user, you can use a similar strategy, but use a unique identifier based on the user,
12
- instead of the session id. You can take a look at [Our oauth example](examples/general/login_oauth) or
13
- [the authorization example](/apps/authorization) for inspiration.
14
-
15
- """
16
- from typing import Dict
17
-
18
- import solara
19
- import solara.lab
20
-
21
- # used only to force updating of the page
22
- force_update_counter = solara.reactive(0)
23
-
24
- # Kernel storage is scoped to the kernel, and will be cleared when the kernel is stopped.
25
- kernel_storage: Dict[str, str] = {}
26
-
27
-
28
- def store_in_kernel_storage(value):
29
- kernel_storage[solara.get_kernel_id()] = value
30
- force_update_counter.value += 1
31
-
32
-
33
- @solara.lab.on_kernel_start
34
- def initialize_kernel_storage():
35
- # when a kernel gets started, we initialize the dict entry
36
- kernel_storage[solara.get_kernel_id()] = "This does not"
37
-
38
- def cleanup():
39
- # when a kernel gets stopped, we remove the dict entry
40
- del kernel_storage[solara.get_kernel_id()]
41
-
42
- # cleaning up kernel storage, we prevent memory leaks
43
- return cleanup
44
-
45
-
46
- # session storage has no lifecycle management, and will only be cleared when the server is restarted.
47
- session_storage: Dict[str, str] = {}
48
-
49
-
50
- def store_in_session_storage(value):
51
- session_storage[solara.get_session_id()] = value
52
- force_update_counter.value += 1
53
-
54
-
55
- @solara.component
56
- def Page():
57
- solara.InputText(
58
- "Stored under the kernel id key",
59
- value=kernel_storage[solara.get_kernel_id()],
60
- on_value=store_in_kernel_storage,
61
- continuous_update=True,
62
- )
63
-
64
- solara.InputText(
65
- "Stored under the session id key",
66
- value=session_storage.get(solara.get_session_id(), "This outlives a page refresh"),
67
- on_value=store_in_session_storage,
68
- continuous_update=True,
69
- )
@@ -1,114 +0,0 @@
1
- """# Deploy model demo
2
-
3
- This show off a combination of [solara.lab.Menu](/documentation/components/lab/menu) and
4
- [solara.lab.ConfirmationDialog](/documentation/components/lab/confirmation_dialog)
5
- and [solara.use_thread](/documentation/api/hooks/use_thread) to demonstrate how to tune, fit and deploy a model.
6
- The actually deployment is not real, but simulated by a thread that returns a boolean value on success and sleep for a while to
7
- similate the deployment taking time.
8
-
9
- * Right click on the plot to either fit or reset the model parameters.
10
- * Clicking on the button shows a custom menu to deploy to several environments.
11
- * A confirmation dialog is used before executing the deployment.
12
- * If the deployment fails, a confirmation dialog is shown to retry the deployment.
13
- """
14
- import time
15
-
16
- import numpy as np
17
- import pandas as pd
18
- import plotly.express as px
19
- import solara
20
- import solara.lab
21
-
22
- slope = solara.reactive(1.5)
23
- intercept = solara.reactive(0.5)
24
-
25
- x = np.arange(0, 100, 2) / 10
26
- # fake data with noise
27
- y_data = (slope.value * 0.8) * x + (intercept.value + 0.4) + np.random.normal(0, 0.5, len(x))
28
-
29
-
30
- @solara.component
31
- def Page():
32
- deploy_environment_request = solara.use_reactive("")
33
- deploy_environment = solara.use_reactive("")
34
- fake_failed = solara.use_reactive(False)
35
-
36
- def deploy_model():
37
- if deploy_environment.value == "":
38
- return
39
-
40
- # 'dummy' deployment
41
- time.sleep(1.5)
42
-
43
- # fake a failure the first time
44
- if not fake_failed.value:
45
- fake_failed.value = True
46
- return False
47
- else:
48
- return True
49
-
50
- deploy_state: solara.Result[bool] = solara.use_thread(deploy_model, dependencies=[deploy_environment.value])
51
-
52
- x_model = x
53
- y_model = (slope.value) * x_model + (intercept.value)
54
- df1 = pd.DataFrame({"x": x, "y": y_data})
55
- df2 = pd.DataFrame({"x": x_model, "y": y_model})
56
- df = pd.concat([df1, df2], keys=["data", "model"], names=["type"]).reset_index()
57
- fig = px.line(df, x="x", y="y", color="type")
58
- with solara.Card("My fancy model"):
59
- fig_element = solara.FigurePlotly(fig)
60
-
61
- def reset():
62
- slope.set(1.5)
63
- intercept.set(0.5)
64
-
65
- def fit():
66
- slope.set(1.5 * 0.8)
67
- intercept.set(0.9)
68
-
69
- with solara.lab.ContextMenu(activator=fig_element):
70
- solara.Button("Reset", text=True, icon_name="mdi-refresh", on_click=reset)
71
- solara.Button("Fit", text=True, icon_name="mdi-brain", on_click=fit)
72
-
73
- solara.FloatSlider("Slope", value=slope, min=-2, max=5, step=0.1)
74
- solara.FloatSlider("Intercept", value=intercept, min=-10, max=10, step=0.1)
75
-
76
- solara.lab.ConfirmationDialog(
77
- deploy_environment_request.value != "",
78
- title="Confirm deployment",
79
- content=solara.Markdown(f"Are you sure you want to deploy to **{deploy_environment_request.value}**?"),
80
- ok=f"Deploy to {deploy_environment_request.value}",
81
- on_ok=lambda: deploy_environment.set(deploy_environment_request.value),
82
- on_close=lambda: deploy_environment_request.set(""),
83
- )
84
-
85
- solara.lab.ConfirmationDialog(
86
- deploy_state.value is False and deploy_state.state == solara.ResultState.FINISHED,
87
- title="Deployment failed",
88
- on_close=lambda: None,
89
- on_ok=lambda: deploy_state.retry(),
90
- content=solara.Error(solara.Markdown(f"Deployment to **{deploy_environment.value}** failed. Do you want to try again?")),
91
- ok="Retry deployment",
92
- cancel="Ignore the failure",
93
- )
94
-
95
- def request_deploy(environment):
96
- deploy_environment.value = ""
97
- deploy_environment_request.set(environment)
98
-
99
- deploying = bool(deploy_environment.value and deploy_state.state == solara.ResultState.RUNNING)
100
- deploy_button = solara.Button("Deploy model", color="primary", icon_name="mdi-rocket", loading=deploying)
101
- with solara.lab.Menu(activator=deploy_button):
102
- with solara.Column(gap="0px"):
103
- solara.Button("Deploy to testing environment", text=True, icon_name="mdi-bug", on_click=lambda: request_deploy("testing"))
104
- solara.Button("Deploy to staging environment", text=True, icon_name="mdi-test-tube", on_click=lambda: request_deploy("staging"))
105
- solara.Button(
106
- "Deploy to production",
107
- text=True,
108
- icon_name="mdi-rocket",
109
- style={"justify-content": "left"}, # make the icon appear on the left
110
- on_click=lambda: request_deploy("production"),
111
- )
112
- if deploy_state.value is True and deploy_state.state == solara.ResultState.FINISHED:
113
- # add some margin in the y direction using my-4
114
- solara.Success(solara.Markdown(f"Model deployed successfully to **{deploy_environment.value}**!"), classes=["my-4"])
@@ -1,38 +0,0 @@
1
- from time import sleep
2
-
3
- import numpy as np
4
- from matplotlib import pyplot as plt
5
-
6
- import solara
7
-
8
-
9
- @solara.component
10
- def Page():
11
- # define some state which will be updated regularly in a separate thread
12
- counter = solara.use_reactive(0)
13
-
14
- def render():
15
- """Infinite loop regularly mutating counter state"""
16
- while True:
17
- sleep(0.2)
18
- counter.value += 1
19
-
20
- # run the render loop in a separate thread
21
- result: solara.Result[bool] = solara.use_thread(render)
22
- if result.error:
23
- raise result.error
24
-
25
- # create the LiveUpdatingComponent, this component depends on the counter
26
- # value so will be redrawn whenever counter value changes
27
- LiveUpdatingComponent(counter.value)
28
-
29
-
30
- @solara.component
31
- def LiveUpdatingComponent(counter):
32
- """Component which will be redrawn whenever the counter value changes."""
33
- fig, ax = plt.subplots()
34
- ax.plot(np.arange(10), np.random.random(10))
35
- solara.FigureMatplotlib(fig)
36
-
37
-
38
- Page()
@@ -1,76 +0,0 @@
1
- import pprint
2
-
3
- import reacton.ipyvuetify as v
4
-
5
- try:
6
- from solara_enterprise import auth
7
- except ImportError:
8
- auth = None
9
- import solara as sl
10
-
11
-
12
- @sl.component
13
- def UserCard():
14
- user = auth.user.value
15
- if user:
16
- user_info = user.get("userinfo")
17
- if user_info:
18
- # based on https://v2.vuetifyjs.com/en/components/cards/#props
19
- with v.Card(width="400px"):
20
- with v.ListItem(three_line=True):
21
- with v.ListItemContent():
22
- sl.Div("Logged in", class_="text-overline mb-4")
23
- v.ListItemTitle(children=[user_info["email"]])
24
- v.ListItemSubtitle(children=["You are now logged in, log out via the app bar, or the button below"])
25
- with v.ListItemAvatar():
26
- auth.Avatar()
27
-
28
- with v.CardActions():
29
- sl.Button("logout", icon_name="mdi-logout", href=auth.get_logout_url(), text=True)
30
- else:
31
- sl.Error("No user info")
32
- else:
33
- sl.Error("No user")
34
-
35
-
36
- @sl.component
37
- def Page():
38
- sl.Title("Login demo using OAuth")
39
- with sl.AppBar():
40
- if auth.user.value:
41
- auth.AvatarMenu()
42
- else:
43
- sl.Button(icon_name="mdi-login", href=auth.get_login_url(), icon=True)
44
-
45
- with sl.Column():
46
- if auth.user.value:
47
- UserCard()
48
- with sl.Details("Raw data"):
49
- sl.Markdown(
50
- """
51
- ### Raw user data
52
-
53
- *Note: do not share this data with anyone, it contains sensitive information.*
54
-
55
- This is the raw user data from the auth provider.
56
-
57
- We use the `picture` field to display an avatar in the [AppBar](/documentation/components/layout/app_bar).
58
- """
59
- )
60
- sl.Preformatted(pprint.pformat(auth.user.value))
61
- else:
62
- sl.Markdown(
63
- """
64
- ### Login demo
65
-
66
- This is a demo of a login system using OAuth. You can login with your google account, github account or with a username and password.
67
- We are using [Auth0](https://auth0.com/) as an OAuth provider.
68
-
69
- """
70
- )
71
- with sl.Row():
72
- sl.Button("login", icon_name="mdi-login", href=auth.get_login_url())
73
-
74
-
75
- if auth is None:
76
- del Page
@@ -1,58 +0,0 @@
1
- <template>
2
- <v-card class="text-center" :color="color" dark>
3
- <v-card-text>
4
- <v-sheet color="rgba(0, 0, 0, .12)">
5
- <v-sparkline :value="value" color="rgba(255, 255, 255, .7)" height="100" padding="24" stroke-linecap="round"
6
- smooth>
7
- <template v-slot:label="item">
8
- ${{ item.value }}
9
- </template>
10
- </v-sparkline>
11
- </v-sheet>
12
- </v-card-text>
13
-
14
- <v-card-text>
15
- <h1 class="solara-some-class">{{ caption }}</h1>
16
- </v-card-text>
17
-
18
- <v-divider></v-divider>
19
-
20
- <v-card-actions class="justify-center">
21
- <v-btn block text @click="goto_report">
22
- Go to Report
23
- </v-btn>
24
- </v-card-actions>
25
- </v-card>
26
- </template>
27
- <style id="mycard">
28
- .solara-some-class {
29
- font-weight: lighter;
30
- }
31
- </style>
32
-
33
- <script>
34
- export default {
35
- data: () => ({
36
- value: [
37
- 423,
38
- 446,
39
- 675,
40
- 510,
41
- 590,
42
- 610,
43
- 760,
44
- ],
45
- }),
46
- mounted: () => {
47
- console.log('mounted');
48
- },
49
- destroyed: () => {
50
- console.log('destroyed');
51
- },
52
- watch: {
53
- value: function (val) {
54
- console.log('value changed to', val);
55
- }
56
- }
57
- }
58
- </script>