solara-ui 1.31.0__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (439) hide show
  1. prefix/etc/jupyter/jupyter_notebook_config.d/solara.json +7 -0
  2. prefix/etc/jupyter/jupyter_server_config.d/solara.json +7 -0
  3. solara/__init__.py +124 -0
  4. solara/__main__.py +734 -0
  5. solara/alias.py +6 -0
  6. solara/autorouting.py +546 -0
  7. solara/cache.py +303 -0
  8. solara/checks.html +71 -0
  9. solara/checks.py +224 -0
  10. solara/comm.py +28 -0
  11. solara/components/__init__.py +59 -0
  12. solara/components/alert.py +155 -0
  13. solara/components/applayout.py +393 -0
  14. solara/components/button.py +85 -0
  15. solara/components/card.py +87 -0
  16. solara/components/checkbox.py +50 -0
  17. solara/components/code_highlight_css.py +11 -0
  18. solara/components/code_highlight_css.vue +63 -0
  19. solara/components/columns.py +159 -0
  20. solara/components/component_vue.py +110 -0
  21. solara/components/cross_filter.py +335 -0
  22. solara/components/dataframe.py +546 -0
  23. solara/components/datatable.py +221 -0
  24. solara/components/datatable.vue +175 -0
  25. solara/components/details.py +21 -0
  26. solara/components/download.vue +35 -0
  27. solara/components/echarts.py +75 -0
  28. solara/components/echarts.vue +128 -0
  29. solara/components/figure_altair.py +39 -0
  30. solara/components/file_browser.py +182 -0
  31. solara/components/file_download.py +199 -0
  32. solara/components/file_drop.py +139 -0
  33. solara/components/file_drop.vue +83 -0
  34. solara/components/file_list_widget.vue +78 -0
  35. solara/components/head.py +27 -0
  36. solara/components/head_tag.py +49 -0
  37. solara/components/head_tag.vue +60 -0
  38. solara/components/image.py +173 -0
  39. solara/components/input.py +436 -0
  40. solara/components/link.py +55 -0
  41. solara/components/markdown.py +378 -0
  42. solara/components/markdown_editor.py +25 -0
  43. solara/components/markdown_editor.vue +362 -0
  44. solara/components/matplotlib.py +74 -0
  45. solara/components/meta.py +47 -0
  46. solara/components/misc.py +333 -0
  47. solara/components/pivot_table.py +258 -0
  48. solara/components/pivot_table.vue +158 -0
  49. solara/components/progress.py +47 -0
  50. solara/components/select.py +182 -0
  51. solara/components/select.vue +27 -0
  52. solara/components/slider.py +442 -0
  53. solara/components/slider_date.vue +56 -0
  54. solara/components/spinner-solara.vue +105 -0
  55. solara/components/spinner.py +30 -0
  56. solara/components/sql_code.py +33 -0
  57. solara/components/sql_code.vue +128 -0
  58. solara/components/style.py +105 -0
  59. solara/components/switch.py +68 -0
  60. solara/components/tab_navigation.py +37 -0
  61. solara/components/title.py +90 -0
  62. solara/components/title.vue +38 -0
  63. solara/components/togglebuttons.py +200 -0
  64. solara/components/tooltip.py +61 -0
  65. solara/datatypes.py +143 -0
  66. solara/express.py +241 -0
  67. solara/hooks/__init__.py +4 -0
  68. solara/hooks/dataframe.py +99 -0
  69. solara/hooks/misc.py +263 -0
  70. solara/hooks/use_reactive.py +129 -0
  71. solara/hooks/use_thread.py +129 -0
  72. solara/kitchensink.py +8 -0
  73. solara/lab/__init__.py +34 -0
  74. solara/lab/components/__init__.py +6 -0
  75. solara/lab/components/chat.py +203 -0
  76. solara/lab/components/confirmation_dialog.py +163 -0
  77. solara/lab/components/cross_filter.py +7 -0
  78. solara/lab/components/input_date.py +298 -0
  79. solara/lab/components/menu.py +181 -0
  80. solara/lab/components/menu.vue +38 -0
  81. solara/lab/components/tabs.py +274 -0
  82. solara/lab/components/theming.py +98 -0
  83. solara/lab/components/theming.vue +72 -0
  84. solara/lab/hooks/__init__.py +0 -0
  85. solara/lab/hooks/dataframe.py +12 -0
  86. solara/lab/toestand.py +3 -0
  87. solara/lab/utils/__init__.py +2 -0
  88. solara/lab/utils/cookies.py +5 -0
  89. solara/lab/utils/dataframe.py +115 -0
  90. solara/lab/utils/headers.py +5 -0
  91. solara/layout.py +44 -0
  92. solara/lifecycle.py +46 -0
  93. solara/minisettings.py +133 -0
  94. solara/py.typed +0 -0
  95. solara/reactive.py +93 -0
  96. solara/routing.py +268 -0
  97. solara/scope/__init__.py +88 -0
  98. solara/scope/types.py +55 -0
  99. solara/server/__init__.py +0 -0
  100. solara/server/app.py +491 -0
  101. solara/server/assets/custom.css +1 -0
  102. solara/server/assets/custom.js +1 -0
  103. solara/server/assets/favicon.png +0 -0
  104. solara/server/assets/favicon.svg +5 -0
  105. solara/server/assets/style.css +1665 -0
  106. solara/server/assets/theme-dark.css +437 -0
  107. solara/server/assets/theme-light.css +420 -0
  108. solara/server/assets/theme.js +3 -0
  109. solara/server/cdn_helper.py +77 -0
  110. solara/server/esm.py +69 -0
  111. solara/server/fastapi.py +5 -0
  112. solara/server/flask.py +286 -0
  113. solara/server/jupyter/__init__.py +2 -0
  114. solara/server/jupyter/cdn_handler.py +28 -0
  115. solara/server/jupyter/server_extension.py +29 -0
  116. solara/server/jupytertools.py +46 -0
  117. solara/server/kernel.py +338 -0
  118. solara/server/kernel_context.py +357 -0
  119. solara/server/patch.py +552 -0
  120. solara/server/reload.py +242 -0
  121. solara/server/server.py +456 -0
  122. solara/server/settings.py +215 -0
  123. solara/server/shell.py +251 -0
  124. solara/server/starlette.py +601 -0
  125. solara/server/static/ansi.js +270 -0
  126. solara/server/static/highlight-dark.css +82 -0
  127. solara/server/static/highlight.css +43 -0
  128. solara/server/static/main-vuetify.js +260 -0
  129. solara/server/static/main.js +163 -0
  130. solara/server/static/solara_bootstrap.py +129 -0
  131. solara/server/static/sun.svg +23 -0
  132. solara/server/static/webworker.js +42 -0
  133. solara/server/telemetry.py +212 -0
  134. solara/server/templates/index.html.j2 +1 -0
  135. solara/server/templates/loader-plain.css +11 -0
  136. solara/server/templates/loader-plain.html +20 -0
  137. solara/server/templates/loader-solara.css +111 -0
  138. solara/server/templates/loader-solara.html +40 -0
  139. solara/server/templates/plain.html +82 -0
  140. solara/server/templates/solara.html.j2 +446 -0
  141. solara/server/threaded.py +75 -0
  142. solara/server/utils.py +30 -0
  143. solara/server/websocket.py +45 -0
  144. solara/settings.py +56 -0
  145. solara/tasks.py +837 -0
  146. solara/template/button.py +16 -0
  147. solara/template/markdown.py +42 -0
  148. solara/template/portal/.flake8 +6 -0
  149. solara/template/portal/.pre-commit-config.yaml +28 -0
  150. solara/template/portal/LICENSE +21 -0
  151. solara/template/portal/Procfile +7 -0
  152. solara/template/portal/mypy.ini +3 -0
  153. solara/template/portal/pyproject.toml +26 -0
  154. solara/template/portal/solara_portal/__init__.py +4 -0
  155. solara/template/portal/solara_portal/components/__init__.py +2 -0
  156. solara/template/portal/solara_portal/components/article.py +28 -0
  157. solara/template/portal/solara_portal/components/data.py +28 -0
  158. solara/template/portal/solara_portal/components/header.py +6 -0
  159. solara/template/portal/solara_portal/components/layout.py +6 -0
  160. solara/template/portal/solara_portal/content/articles/equis-in-vidi.md +85 -0
  161. solara/template/portal/solara_portal/content/articles/substiterat-vati.md +70 -0
  162. solara/template/portal/solara_portal/data.py +60 -0
  163. solara/template/portal/solara_portal/pages/__init__.py +67 -0
  164. solara/template/portal/solara_portal/pages/article/__init__.py +26 -0
  165. solara/template/portal/solara_portal/pages/tabular.py +29 -0
  166. solara/template/portal/solara_portal/pages/viz/__init__.py +70 -0
  167. solara/template/portal/solara_portal/pages/viz/overview.py +14 -0
  168. solara/test/__init__.py +0 -0
  169. solara/test/pytest_plugin.py +697 -0
  170. solara/toestand.py +772 -0
  171. solara/util.py +308 -0
  172. solara/website/__init__.py +0 -0
  173. solara/website/assets/custom.css +468 -0
  174. solara/website/assets/images/logo-small.png +0 -0
  175. solara/website/assets/images/logo.svg +17 -0
  176. solara/website/assets/images/logo_white.svg +50 -0
  177. solara/website/assets/theme.js +8 -0
  178. solara/website/components/__init__.py +5 -0
  179. solara/website/components/algolia.vue +24 -0
  180. solara/website/components/algolia_api.vue +187 -0
  181. solara/website/components/docs.py +118 -0
  182. solara/website/components/header.py +72 -0
  183. solara/website/components/hero.py +15 -0
  184. solara/website/components/mailchimp.py +12 -0
  185. solara/website/components/mailchimp.vue +47 -0
  186. solara/website/components/markdown.py +30 -0
  187. solara/website/components/notebook.py +171 -0
  188. solara/website/pages/__init__.py +575 -0
  189. solara/website/pages/apps/__init__.py +16 -0
  190. solara/website/pages/apps/authorization/__init__.py +119 -0
  191. solara/website/pages/apps/authorization/admin.py +12 -0
  192. solara/website/pages/apps/authorization/users.py +12 -0
  193. solara/website/pages/apps/jupyter-dashboard-1.py +116 -0
  194. solara/website/pages/apps/layout-demo.py +40 -0
  195. solara/website/pages/apps/multipage/__init__.py +38 -0
  196. solara/website/pages/apps/multipage/page1.py +26 -0
  197. solara/website/pages/apps/multipage/page2.py +34 -0
  198. solara/website/pages/apps/scatter.py +136 -0
  199. solara/website/pages/apps/scrolling.py +63 -0
  200. solara/website/pages/apps/tutorial-streamlit.py +18 -0
  201. solara/website/pages/changelog/__init__.py +8 -0
  202. solara/website/pages/changelog/changelog.md +204 -0
  203. solara/website/pages/contact/__init__.py +8 -0
  204. solara/website/pages/contact/contact.md +17 -0
  205. solara/website/pages/doc_use_download.py +85 -0
  206. solara/website/pages/documentation/__init__.py +184 -0
  207. solara/website/pages/documentation/advanced/__init__.py +9 -0
  208. solara/website/pages/documentation/advanced/content/00-overview.md +1 -0
  209. solara/website/pages/documentation/advanced/content/10-howto/00-overview.md +6 -0
  210. solara/website/pages/documentation/advanced/content/10-howto/10-multipage.md +196 -0
  211. solara/website/pages/documentation/advanced/content/10-howto/20-layout.md +125 -0
  212. solara/website/pages/documentation/advanced/content/10-howto/30-testing.md +162 -0
  213. solara/website/pages/documentation/advanced/content/10-howto/31-debugging.md +69 -0
  214. solara/website/pages/documentation/advanced/content/10-howto/40-embed.md +49 -0
  215. solara/website/pages/documentation/advanced/content/10-howto/50-ipywidget_libraries.md +124 -0
  216. solara/website/pages/documentation/advanced/content/15-reference/00-overview.md +3 -0
  217. solara/website/pages/documentation/advanced/content/15-reference/40-static_files.md +31 -0
  218. solara/website/pages/documentation/advanced/content/15-reference/41-asset-files.md +36 -0
  219. solara/website/pages/documentation/advanced/content/15-reference/60-static-site-generation.md +59 -0
  220. solara/website/pages/documentation/advanced/content/15-reference/70-search.md +34 -0
  221. solara/website/pages/documentation/advanced/content/15-reference/80-reloading.md +34 -0
  222. solara/website/pages/documentation/advanced/content/15-reference/90-notebook-support.md +7 -0
  223. solara/website/pages/documentation/advanced/content/15-reference/95-caching.md +148 -0
  224. solara/website/pages/documentation/advanced/content/20-understanding/00-introduction.md +10 -0
  225. solara/website/pages/documentation/advanced/content/20-understanding/05-ipywidgets.md +35 -0
  226. solara/website/pages/documentation/advanced/content/20-understanding/06-ipyvuetify.md +42 -0
  227. solara/website/pages/documentation/advanced/content/20-understanding/10-reacton.md +28 -0
  228. solara/website/pages/documentation/advanced/content/20-understanding/12-reacton-basics.md +108 -0
  229. solara/website/pages/documentation/advanced/content/20-understanding/15-anatomy.md +23 -0
  230. solara/website/pages/documentation/advanced/content/20-understanding/17-rules-of-hooks.md +7 -0
  231. solara/website/pages/documentation/advanced/content/20-understanding/18-containers.md +166 -0
  232. solara/website/pages/documentation/advanced/content/20-understanding/20-solara.md +18 -0
  233. solara/website/pages/documentation/advanced/content/20-understanding/40-routing.md +240 -0
  234. solara/website/pages/documentation/advanced/content/20-understanding/50-solara-server.md +97 -0
  235. solara/website/pages/documentation/advanced/content/20-understanding/60-voila.md +12 -0
  236. solara/website/pages/documentation/advanced/content/30-enterprise/00-overview.md +1 -0
  237. solara/website/pages/documentation/advanced/content/30-enterprise/10-oauth.md +171 -0
  238. solara/website/pages/documentation/advanced/content/40-development/00-overview.md +0 -0
  239. solara/website/pages/documentation/advanced/content/40-development/01-contribute.md +45 -0
  240. solara/website/pages/documentation/advanced/content/40-development/10-setup.md +76 -0
  241. solara/website/pages/documentation/api/__init__.py +19 -0
  242. solara/website/pages/documentation/api/cross_filter/__init__.py +9 -0
  243. solara/website/pages/documentation/api/cross_filter/cross_filter_dataframe.py +23 -0
  244. solara/website/pages/documentation/api/cross_filter/cross_filter_report.py +22 -0
  245. solara/website/pages/documentation/api/cross_filter/cross_filter_select.py +22 -0
  246. solara/website/pages/documentation/api/cross_filter/cross_filter_slider.py +22 -0
  247. solara/website/pages/documentation/api/hooks/__init__.py +9 -0
  248. solara/website/pages/documentation/api/hooks/use_cross_filter.py +25 -0
  249. solara/website/pages/documentation/api/hooks/use_dark_effective.py +12 -0
  250. solara/website/pages/documentation/api/hooks/use_effect.md +43 -0
  251. solara/website/pages/documentation/api/hooks/use_effect.py +9 -0
  252. solara/website/pages/documentation/api/hooks/use_exception.py +33 -0
  253. solara/website/pages/documentation/api/hooks/use_memo.md +16 -0
  254. solara/website/pages/documentation/api/hooks/use_memo.py +9 -0
  255. solara/website/pages/documentation/api/hooks/use_previous.py +33 -0
  256. solara/website/pages/documentation/api/hooks/use_reactive.py +16 -0
  257. solara/website/pages/documentation/api/hooks/use_state.py +10 -0
  258. solara/website/pages/documentation/api/hooks/use_state_or_update.py +69 -0
  259. solara/website/pages/documentation/api/hooks/use_thread.md +58 -0
  260. solara/website/pages/documentation/api/hooks/use_thread.py +44 -0
  261. solara/website/pages/documentation/api/hooks/use_trait_observe.py +12 -0
  262. solara/website/pages/documentation/api/routing/__init__.py +9 -0
  263. solara/website/pages/documentation/api/routing/generate_routes.py +10 -0
  264. solara/website/pages/documentation/api/routing/generate_routes_directory.py +10 -0
  265. solara/website/pages/documentation/api/routing/resolve_path.py +35 -0
  266. solara/website/pages/documentation/api/routing/route.py +31 -0
  267. solara/website/pages/documentation/api/routing/use_route.py +80 -0
  268. solara/website/pages/documentation/api/routing/use_router.py +16 -0
  269. solara/website/pages/documentation/api/utilities/__init__.py +9 -0
  270. solara/website/pages/documentation/api/utilities/component_vue.py +10 -0
  271. solara/website/pages/documentation/api/utilities/computed.py +16 -0
  272. solara/website/pages/documentation/api/utilities/display.py +16 -0
  273. solara/website/pages/documentation/api/utilities/get_kernel_id.py +16 -0
  274. solara/website/pages/documentation/api/utilities/get_session_id.py +16 -0
  275. solara/website/pages/documentation/api/utilities/memoize.py +35 -0
  276. solara/website/pages/documentation/api/utilities/on_kernel_start.py +27 -0
  277. solara/website/pages/documentation/api/utilities/reactive.py +16 -0
  278. solara/website/pages/documentation/api/utilities/widget.py +104 -0
  279. solara/website/pages/documentation/components/__init__.py +12 -0
  280. solara/website/pages/documentation/components/advanced/__init__.py +9 -0
  281. solara/website/pages/documentation/components/advanced/link.py +27 -0
  282. solara/website/pages/documentation/components/advanced/meta.py +20 -0
  283. solara/website/pages/documentation/components/advanced/style.py +45 -0
  284. solara/website/pages/documentation/components/common.py +9 -0
  285. solara/website/pages/documentation/components/data/__init__.py +9 -0
  286. solara/website/pages/documentation/components/data/dataframe.py +44 -0
  287. solara/website/pages/documentation/components/data/pivot_table.py +81 -0
  288. solara/website/pages/documentation/components/enterprise/__init__.py +9 -0
  289. solara/website/pages/documentation/components/enterprise/avatar.py +24 -0
  290. solara/website/pages/documentation/components/enterprise/avatar_menu.py +25 -0
  291. solara/website/pages/documentation/components/input/__init__.py +9 -0
  292. solara/website/pages/documentation/components/input/button.py +23 -0
  293. solara/website/pages/documentation/components/input/checkbox.py +10 -0
  294. solara/website/pages/documentation/components/input/file_browser.py +32 -0
  295. solara/website/pages/documentation/components/input/file_drop.py +76 -0
  296. solara/website/pages/documentation/components/input/input.py +19 -0
  297. solara/website/pages/documentation/components/input/select.py +22 -0
  298. solara/website/pages/documentation/components/input/slider.py +29 -0
  299. solara/website/pages/documentation/components/input/switch.py +10 -0
  300. solara/website/pages/documentation/components/input/togglebuttons.py +21 -0
  301. solara/website/pages/documentation/components/lab/__init__.py +9 -0
  302. solara/website/pages/documentation/components/lab/chat.py +109 -0
  303. solara/website/pages/documentation/components/lab/confirmation_dialog.py +55 -0
  304. solara/website/pages/documentation/components/lab/cookies_headers.py +48 -0
  305. solara/website/pages/documentation/components/lab/input_date.py +20 -0
  306. solara/website/pages/documentation/components/lab/menu.py +22 -0
  307. solara/website/pages/documentation/components/lab/tab.py +25 -0
  308. solara/website/pages/documentation/components/lab/tabs.py +45 -0
  309. solara/website/pages/documentation/components/lab/task.py +11 -0
  310. solara/website/pages/documentation/components/lab/theming.py +72 -0
  311. solara/website/pages/documentation/components/lab/use_task.py +11 -0
  312. solara/website/pages/documentation/components/layout/__init__.py +9 -0
  313. solara/website/pages/documentation/components/layout/app_bar.py +16 -0
  314. solara/website/pages/documentation/components/layout/app_bar_title.py +16 -0
  315. solara/website/pages/documentation/components/layout/app_layout.py +24 -0
  316. solara/website/pages/documentation/components/layout/card.py +15 -0
  317. solara/website/pages/documentation/components/layout/card_actions.py +16 -0
  318. solara/website/pages/documentation/components/layout/column.py +30 -0
  319. solara/website/pages/documentation/components/layout/columns.py +27 -0
  320. solara/website/pages/documentation/components/layout/columns_responsive.py +68 -0
  321. solara/website/pages/documentation/components/layout/griddraggable.py +62 -0
  322. solara/website/pages/documentation/components/layout/gridfixed.py +21 -0
  323. solara/website/pages/documentation/components/layout/hbox.py +18 -0
  324. solara/website/pages/documentation/components/layout/row.py +30 -0
  325. solara/website/pages/documentation/components/layout/sidebar.py +24 -0
  326. solara/website/pages/documentation/components/layout/vbox.py +19 -0
  327. solara/website/pages/documentation/components/output/__init__.py +9 -0
  328. solara/website/pages/documentation/components/output/file_download.py +11 -0
  329. solara/website/pages/documentation/components/output/html.py +21 -0
  330. solara/website/pages/documentation/components/output/image.py +11 -0
  331. solara/website/pages/documentation/components/output/markdown.py +57 -0
  332. solara/website/pages/documentation/components/output/markdown_editor.py +51 -0
  333. solara/website/pages/documentation/components/output/sql_code.py +85 -0
  334. solara/website/pages/documentation/components/output/tooltip.py +11 -0
  335. solara/website/pages/documentation/components/page/__init__.py +9 -0
  336. solara/website/pages/documentation/components/page/head.py +18 -0
  337. solara/website/pages/documentation/components/page/title.py +27 -0
  338. solara/website/pages/documentation/components/status/__init__.py +9 -0
  339. solara/website/pages/documentation/components/status/error.py +40 -0
  340. solara/website/pages/documentation/components/status/info.py +40 -0
  341. solara/website/pages/documentation/components/status/progress.py +10 -0
  342. solara/website/pages/documentation/components/status/spinner.py +11 -0
  343. solara/website/pages/documentation/components/status/success.py +40 -0
  344. solara/website/pages/documentation/components/status/warning.py +47 -0
  345. solara/website/pages/documentation/components/viz/__init__.py +9 -0
  346. solara/website/pages/documentation/components/viz/altair.py +42 -0
  347. solara/website/pages/documentation/components/viz/echarts.py +75 -0
  348. solara/website/pages/documentation/components/viz/matplotlib.py +30 -0
  349. solara/website/pages/documentation/components/viz/plotly.py +63 -0
  350. solara/website/pages/documentation/components/viz/plotly_express.py +41 -0
  351. solara/website/pages/documentation/examples/__init__.py +52 -0
  352. solara/website/pages/documentation/examples/ai/__init__.py +11 -0
  353. solara/website/pages/documentation/examples/ai/chatbot.py +95 -0
  354. solara/website/pages/documentation/examples/ai/tokenizer.py +107 -0
  355. solara/website/pages/documentation/examples/basics/__init__.py +10 -0
  356. solara/website/pages/documentation/examples/basics/sine.py +28 -0
  357. solara/website/pages/documentation/examples/fullscreen/__init__.py +10 -0
  358. solara/website/pages/documentation/examples/fullscreen/authorization.py +3 -0
  359. solara/website/pages/documentation/examples/fullscreen/layout_demo.py +3 -0
  360. solara/website/pages/documentation/examples/fullscreen/multipage.py +3 -0
  361. solara/website/pages/documentation/examples/fullscreen/scatter.py +3 -0
  362. solara/website/pages/documentation/examples/fullscreen/scrolling.py +3 -0
  363. solara/website/pages/documentation/examples/fullscreen/tutorial_streamlit.py +3 -0
  364. solara/website/pages/documentation/examples/general/__init__.py +10 -0
  365. solara/website/pages/documentation/examples/general/custom_storage.py +70 -0
  366. solara/website/pages/documentation/examples/general/deploy_model.py +115 -0
  367. solara/website/pages/documentation/examples/general/live_update.py +38 -0
  368. solara/website/pages/documentation/examples/general/login_oauth.py +81 -0
  369. solara/website/pages/documentation/examples/general/mycard.vue +58 -0
  370. solara/website/pages/documentation/examples/general/pokemon_search.py +51 -0
  371. solara/website/pages/documentation/examples/general/vue_component.py +50 -0
  372. solara/website/pages/documentation/examples/ipycanvas.py +49 -0
  373. solara/website/pages/documentation/examples/libraries/__init__.py +10 -0
  374. solara/website/pages/documentation/examples/libraries/altair.py +64 -0
  375. solara/website/pages/documentation/examples/libraries/bqplot.py +39 -0
  376. solara/website/pages/documentation/examples/libraries/ipyleaflet.py +33 -0
  377. solara/website/pages/documentation/examples/libraries/ipyleaflet_advanced.py +66 -0
  378. solara/website/pages/documentation/examples/utilities/__init__.py +10 -0
  379. solara/website/pages/documentation/examples/utilities/calculator.py +157 -0
  380. solara/website/pages/documentation/examples/utilities/countdown_timer.py +64 -0
  381. solara/website/pages/documentation/examples/utilities/todo.py +196 -0
  382. solara/website/pages/documentation/examples/visualization/__init__.py +6 -0
  383. solara/website/pages/documentation/examples/visualization/annotator.py +69 -0
  384. solara/website/pages/documentation/examples/visualization/linked_views.py +84 -0
  385. solara/website/pages/documentation/examples/visualization/plotly.py +44 -0
  386. solara/website/pages/documentation/faq/__init__.py +12 -0
  387. solara/website/pages/documentation/faq/content/99-faq.md +76 -0
  388. solara/website/pages/documentation/getting_started/__init__.py +9 -0
  389. solara/website/pages/documentation/getting_started/content/00-quickstart.md +89 -0
  390. solara/website/pages/documentation/getting_started/content/01-introduction.md +125 -0
  391. solara/website/pages/documentation/getting_started/content/02-installing.md +134 -0
  392. solara/website/pages/documentation/getting_started/content/04-tutorials/00-overview.md +14 -0
  393. solara/website/pages/documentation/getting_started/content/04-tutorials/10_data_science.py +13 -0
  394. solara/website/pages/documentation/getting_started/content/04-tutorials/20-web-app.md +89 -0
  395. solara/website/pages/documentation/getting_started/content/04-tutorials/30-ipywidgets.md +124 -0
  396. solara/website/pages/documentation/getting_started/content/04-tutorials/40-streamlit.md +146 -0
  397. solara/website/pages/documentation/getting_started/content/04-tutorials/50-dash.md +144 -0
  398. solara/website/pages/documentation/getting_started/content/04-tutorials/60-jupyter-dashboard-part1.py +64 -0
  399. solara/website/pages/documentation/getting_started/content/04-tutorials/SF_crime_sample.csv.gz +0 -0
  400. solara/website/pages/documentation/getting_started/content/04-tutorials/_data_science.ipynb +445 -0
  401. solara/website/pages/documentation/getting_started/content/04-tutorials/_jupyter_dashboard_1.ipynb +1000 -0
  402. solara/website/pages/documentation/getting_started/content/05-fundamentals/00-overview.md +11 -0
  403. solara/website/pages/documentation/getting_started/content/05-fundamentals/10-components.md +223 -0
  404. solara/website/pages/documentation/getting_started/content/05-fundamentals/50-state-management.md +88 -0
  405. solara/website/pages/documentation/getting_started/content/07-deploying/00-overview.md +7 -0
  406. solara/website/pages/documentation/getting_started/content/07-deploying/10-self-hosted.md +273 -0
  407. solara/website/pages/documentation/getting_started/content/07-deploying/20-cloud-hosted.md +80 -0
  408. solara/website/pages/documentation/getting_started/content/80-what-is-lab.md +7 -0
  409. solara/website/pages/documentation/getting_started/content/90-troubleshoot.md +26 -0
  410. solara/website/pages/docutils.py +38 -0
  411. solara/website/pages/showcase/__init__.py +105 -0
  412. solara/website/pages/showcase/domino_code_assist.py +60 -0
  413. solara/website/pages/showcase/planeto_tessa.py +19 -0
  414. solara/website/pages/showcase/solara_dev.py +54 -0
  415. solara/website/pages/showcase/solarathon_2023_team_2.py +22 -0
  416. solara/website/pages/showcase/solarathon_2023_team_4.py +22 -0
  417. solara/website/pages/showcase/solarathon_2023_team_5.py +23 -0
  418. solara/website/pages/showcase/solarathon_2023_team_6.py +34 -0
  419. solara/website/pages/showcase/wanderlust.py +27 -0
  420. solara/website/public/beach.jpeg +0 -0
  421. solara/website/public/logo.svg +6 -0
  422. solara/website/public/social/discord.svg +1 -0
  423. solara/website/public/social/github.svg +1 -0
  424. solara/website/public/social/twitter.svg +3 -0
  425. solara/website/public/success.html +25 -0
  426. solara/website/templates/index.html.j2 +117 -0
  427. solara/website/utils.py +51 -0
  428. solara/widgets/__init__.py +1 -0
  429. solara/widgets/vue/gridlayout.vue +110 -0
  430. solara/widgets/vue/html.vue +4 -0
  431. solara/widgets/vue/navigator.vue +104 -0
  432. solara/widgets/vue/vegalite.vue +115 -0
  433. solara/widgets/widgets.py +66 -0
  434. solara_ui-1.31.0.data/data/etc/jupyter/jupyter_notebook_config.d/solara.json +7 -0
  435. solara_ui-1.31.0.data/data/etc/jupyter/jupyter_server_config.d/solara.json +7 -0
  436. solara_ui-1.31.0.dist-info/METADATA +158 -0
  437. solara_ui-1.31.0.dist-info/RECORD +439 -0
  438. solara_ui-1.31.0.dist-info/WHEEL +5 -0
  439. solara_ui-1.31.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,171 @@
1
+ ---
2
+ title: Using OAuth in your Solara app
3
+ description: Open Authorization can be readily integrated into your Solara applications via the Solara-Enterprise package.
4
+ ---
5
+ # OAuth: authentication and authorization support
6
+
7
+ ## What is OAuth
8
+
9
+ OAuth (Open Authorization) is an open standard for token-based authentication and authorization. It enables third-party applications to obtain limited access to a user's resources on another service without exposing their credentials. The user can grant access to their resources on one site to another site without sharing their credentials, providing a secure and efficient way to authenticate users.
10
+
11
+ You have probably used OAuth without realizing it when signing into various online services and applications. For example, when you use "Sign in with Google" or "Log in with Facebook" to access a third-party website or application, you are using OAuth. By leveraging OAuth, these services allow users to authenticate themselves using their existing Google or Facebook credentials, simplifying the login process and reducing the need for users to remember multiple usernames and passwords. OAuth has become an essential aspect of online identity management and is widely used by companies and developers to provide a seamless and secure authentication experience.
12
+
13
+ ## Installing
14
+
15
+ To install Solara with OAuth support, make sure you have [Solara Enterprise](/documentation/advanced/enterprise) install by run the following command:
16
+
17
+ ```bash
18
+ $ pip install solara solara-enterprise[auth]
19
+ ```
20
+
21
+
22
+ ## OAuth support in Solara
23
+
24
+ Solara offers two modes for enabling OAuth: private mode and application controlled mode.
25
+
26
+ ### Private mode
27
+
28
+ In private mode, Solara pages or any static resources are not accessible without being authenticated. This mode is suitable for web servers that should not be publicly accessible. To enable private mode, set the following environment variable:
29
+ ```bash
30
+ SOLARA_OAUTH_PRIVATE=True
31
+ ```
32
+
33
+
34
+ ### Application controlled mode
35
+
36
+ In application controlled mode, the application is responsible for checking if a user is authenticated. The application can show a login or logout link and provide user information when the user is logged in. Solara comes preconfigured to run on localhost out of the box, and no additional setup is required to enable OAuth for local development and testing.
37
+
38
+ Here's an example of how to implement OAuth in application controlled mode:
39
+
40
+ ```solara
41
+ import solara
42
+ from solara_enterprise import auth
43
+
44
+ @solara.component
45
+ def Page():
46
+ if not auth.user.value:
47
+ solara.Button("Login", icon_name="mdi-login", href=auth.get_login_url())
48
+ else:
49
+ userinfo = auth.user.value['userinfo']
50
+ if 'name' in userinfo:
51
+ solara.Markdown(f"### Welcome {userinfo['name']}")
52
+ solara.Button("Logout", icon_name="mdi-logout", href=auth.get_logout_url())
53
+ ```
54
+ ## How to configure OAuth
55
+
56
+ Solara supports the following OAuth providers: [Auth0](https://auth0.com/) and [Fief](https://fief.dev/).
57
+
58
+
59
+ ### Configuring Auth0
60
+
61
+ By default, Solara is configured with a test Auth0 account. This is useful for testing, but you should not use this in production. This account does limit solara running on localhost, port 8765 to 8770 (and 18765 to 18770 for running the tests).
62
+
63
+ To configure your own Auth0 provider, you need to change the following environment variables from their defaults:
64
+
65
+ ```bash
66
+ # required if you don't use the default test account
67
+ SOLARA_SESSION_SECRET_KEY="change me"
68
+ # found in the Auth0 dashboard Applications->Applications->Client ID
69
+ SOLARA_OAUTH_CLIENT_ID="cW7owP5Q52YHMZAnJwT8FPlH2ZKvvL3U"
70
+ # found in the Auth0 dashboard Applications->Applications->Client secret
71
+ SOLARA_OAUTH_CLIENT_SECRET="zxITXxoz54OjuSmdn-PluQgAwbeYyoB7ALlnLoodftvAn81usDXW0quchvoNvUYD"
72
+ # found in the Auth0 dashboard Applications->Applications->Domain
73
+ SOLARA_OAUTH_API_BASE_URL="dev-y02f02f2bpr8skxu785.us.auth0.com"
74
+ ```
75
+
76
+ You can optionally set the following environment variables:
77
+
78
+ ```bash
79
+ SOLARA_OAUTH_SCOPE = "openid profile email"
80
+ ```
81
+
82
+ ### Create your own Auth0 Application
83
+
84
+
85
+ To create your own Auth0 application, follow these steps:
86
+
87
+ 1. Go to the [Auth0 dashboard](https://manage.auth0.com/dashboard/) and click on "Applications" on the left side navigation menu.
88
+
89
+ ![Auth0 dashboard](https://dxhl76zpt6fap.cloudfront.net/public/docs/enterprise/oauth/goto-applications.webp)
90
+
91
+ 2. Click on "Create Application".
92
+
93
+ ![Create Application](https://dxhl76zpt6fap.cloudfront.net/public/docs/enterprise/oauth/click-create-application.webp)
94
+
95
+ 3. Enter a name for your application and select "Regular Web Applications" as the application type. Click on "Create".
96
+
97
+ ![Create Application](https://dxhl76zpt6fap.cloudfront.net/public/docs/enterprise/oauth/name-type-create.webp)
98
+
99
+ 4. Click "Skip Integration" to skip the integration step.
100
+
101
+ 5. Click on the "Settings" tabs and enter the following information:
102
+
103
+ - Allowed Callback URLs: `http://localhost:8765/_solara/auth/authorize, https://yourdomain.com/_solara/auth/authorize`
104
+ - Allowed Logout URLs: `http://localhost:8765/_solara/auth/logout, https://yourdomain.com/_solara/auth/logout`
105
+
106
+ Note that the localhost URLs are only meant for testing. You can remove them once you are ready to deploy your application.
107
+ We recommend setting up a new application for each environment (e.g. development, staging, production).
108
+
109
+ ![Callback URLs](https://dxhl76zpt6fap.cloudfront.net/public/docs/enterprise/oauth/callbacks.webp)
110
+
111
+ 6. Configure Solara.
112
+
113
+ At the top of the "Settings" tab, you should see your "Domain", "Client ID" and "Client Secret". You will need to set the following environment variables to these values:
114
+
115
+ ```bash
116
+ SOLARA_OAUTH_API_BASE_URL="dev-y02f2bpr8skxu785.us.auth0.com" # replace with your domain
117
+ SOLARA_OAUTH_CLIENT_ID="ELOFERLovc7e7dPwkxO6WFAljtYj9UzJ" # replace with your client ID
118
+ SOLARA_OAUTH_CLIENT_SECRET="..." # not shown here, replace with your client secret
119
+ ```
120
+
121
+ ![Settings](https://dxhl76zpt6fap.cloudfront.net/public/docs/enterprise/oauth/configuration-values.webp)
122
+
123
+ Set your `SOLARA_SESSION_SECRET_KEY` to a random string. See the [Generating a secret key](#generating-a-secret-key) for a convenient way to generate a secret key.
124
+
125
+ If you want to test on localhost, you might also want to set `SOLARA_SESSION_HTTPS_ONLY="false"`
126
+
127
+ Now you can run the above solara example using your own auth0 provider.
128
+
129
+
130
+ ### Configuring Fief
131
+
132
+ You can also configure Solara to use our Fief test account. To do this, you need to set the following environment variables:
133
+
134
+ ```bash
135
+ SOLARA_SESSION_SECRET_KEY="change me" # required if you don't use the default test account
136
+ SOLARA_OAUTH_CLIENT_ID="x2np62qgwp6hnEGTP4JYUE3igdZWhT-AvjpjwwDyKXU" # found in the Auth0 dashboard Clients->General Tab->Secret
137
+ SOLARA_OAUTH_CLIENT_SECRET="XQlByE1pVIz5h2SBN2GYDwT_ziqArHJgLD3KqMlCHjg" # found in the Auth0 dashboard Clients->General Tab->ID
138
+ SOLARA_OAUTH_API_BASE_URL="solara-dev.fief.dev" # found in the Fief dashboard Tenants->Base URL
139
+ # different from Solara's default
140
+ SOLARA_OAUTH_LOGOUT_PATH="logout"
141
+ ```
142
+
143
+ ### Generating a secret key
144
+
145
+ To generate a secret key, you can use the following code:
146
+
147
+ ```bash
148
+ $ python -c "import secrets; print(secrets.token_urlsafe(32))"
149
+ ZgrzSLUyft-JvnNMNJ2LgbCFVqcxPOatANAQhMD5EYU
150
+ ```
151
+
152
+ *Note: do not copy this key, run this yourself in a terminal.*
153
+
154
+
155
+ ## OAuth Component
156
+
157
+ Solara provides two convenient components for creating a user interface for login and logout:
158
+
159
+ 1. [Avatar](/documentation/components/enterprise/avatar): This component shows the user's avatar.
160
+ 2. [AvatarMenu](/documentation/components/enterprise/avatar_menu): This component shows a menu with the user's avatar and a logout button.
161
+
162
+ ## Python version support
163
+
164
+ Please note that Python 3.6 is not supported for Solara OAuth.
165
+
166
+
167
+ ## Possible issues
168
+
169
+ ### Wrong redirection
170
+
171
+ If the redirection back to solara return to the wrong address, it might be due to solara not choosing the right default for `SOLARA_BASE_URL`. For instance this variable could be set to `SOLARA_BASE_URL=https://solara.dev` for the solara.dev server. If you application runs behind a subpath, e.g. `/myapp`, you might have to set `SOLARA_ROOT_PATH=/myapp`.
@@ -0,0 +1,45 @@
1
+ ---
2
+ title: Contributing to Solara
3
+ description: You do not need to be a developer to contribute to Solara. We welcome all contributions, bug reports, documentation improvements and code contributions.
4
+ ---
5
+ # Contributing to Solara
6
+
7
+ You do not need to be a developer to contribute to Solara. We welcome all contributions, bug reports, documentation improvements and code contributions.
8
+
9
+
10
+ ## Bug reports
11
+
12
+ We use [GitHub to manage issues](https://github.com/widgetti/solara/issues/new) and you should not hesitate to report any bug you find. Please include as much information as possible for us to be able to reproduce the bug. Yes, reporting a bug/issue is a contribution!
13
+
14
+ It might take a while for us to get back to you. If the bug is urgent, and you are able to provide financial support for its rapid resolution, please [contact us](/contact).
15
+ If you can fix the bug yourself, please consider submitting a pull request instead, see [the development guide](/documentation/advanced/development/setup) for more information.
16
+
17
+ If you are unable to address the bug yourself and find it challenging to provide financial support, please be assured we are still committed to rectifying bugs and resolving issues. However, please understand that our ability to address these issues may be impacted by our resources at hand, as sustaining this project also entails financial obligations. Your patience and understanding in this matter is highly appreciated 🙇.
18
+
19
+ ## Documentation
20
+
21
+ The documentation is mostly written in Markdown, and can be found at [in the main repository](https://github.com/widgetti/solara/tree/master/solara/website/pages).
22
+
23
+ You can use the GitHub web interface to edit the files, or clone the repository and edit them locally. See [the development guide](/documentation/advanced/development/setup) for more information.
24
+
25
+ If you locally want to render the documentation, run:
26
+
27
+ ```bash
28
+ $ solara run solara.website.pages
29
+ ```
30
+
31
+ ## Examples or showcase
32
+
33
+ If you have a complete program you want to share, and you think it would be cool to be listed at [our showcase page](/showcase), [please contact us](/contact).
34
+
35
+ If you want to show a particular way of using Solara that you think is very useful
36
+ for others, but it is not a complete program, consider adding to [the examples](/documentation/examples/). See [the development guide](/documentation/advanced/development/setup) for more information.
37
+
38
+ ## Share your experiences and ideas
39
+
40
+ If you want to share your thoughts, share your experiences, or just want to talk
41
+ to other people using and developing on Solara, consider using [GitHub discussions](https://github.com/widgetti/solara/discussions) for asynchronous discussions
42
+ or consider joining discord for more synchronous discussions.
43
+
44
+
45
+ [![Discord Shield](https://discordapp.com/api/guilds/1106593685241614489/widget.png?style=banner2)](https://discord.gg/dm4GKNDjXN)
@@ -0,0 +1,76 @@
1
+ ---
2
+ title: Development setup for Solara
3
+ description: Learn how to set up your installation for developing on the Solara itself.
4
+ ---
5
+ # Development
6
+
7
+ See also [the contributing guide](/documentation/advanced/development/contribute) for more information on how to contribute to Solara.
8
+ ## Development setup
9
+
10
+ Assuming you have created a virtual environment as described in [the installation guide](/documentation/getting_started/installing), you can install a development install of Solara using:
11
+
12
+ $ git clone git@github.com:widgetti/solara.git
13
+ $ cd solara
14
+ $ pip install ".[dev,documentation]" # documentation is optional
15
+
16
+
17
+ ## Running Solara server in auto restart mode
18
+
19
+ By passing the `--auto-restart/-a` flag, the solara server will automatically restart when the sourcecode of the solara server changes, which makes it friendlier for development
20
+
21
+ $ solara run myscript.py -a
22
+
23
+ This will:
24
+
25
+ * Automatically restart the server if any of the source code of solara changes (excluding solara.website)
26
+
27
+ ## Contributing
28
+
29
+ If you plan to contribute, also run the following:
30
+
31
+ $ pre-commit install
32
+
33
+ This will cause a test of linters/formatters and mypy to run so the code is in good quality before you git commit.
34
+
35
+ $ playwright install
36
+
37
+ This will install playwright, for when you want to run the integration tests.
38
+
39
+ ### Test suite
40
+
41
+ If you want to run the unit tests (quick run when doing development, or when you do test driven development)
42
+
43
+ $ py.test tests/unit
44
+
45
+
46
+ If you want to run the integration tests (uses playwright to open a browser to test the live server with a real browser)
47
+
48
+ $ py.test tests/integration
49
+
50
+ Pass the `--headed` flag to see what is going on, [or check out the docs](https://playwright.dev/python/docs/intro)
51
+
52
+
53
+ ### Creating a PR
54
+
55
+ Make sure you forked the repository, and set up the remote and origin correctly.
56
+
57
+ ```
58
+ # rename origin to upstream
59
+ $ git remote rename origin upstream
60
+ # add your fork as origin
61
+ $ git remote add origin https://github.com/yourusername/solara.git
62
+ ```
63
+
64
+ Now we will create a branch, push it, and open a PR
65
+
66
+ ```
67
+ # create a branch
68
+ $ git checkout -b fix_some_thing
69
+ # add whatever changes you want to make
70
+ $ git add -p
71
+ # commit your changes
72
+ $ git commit -m "fix: some thing"
73
+ # push your changes
74
+ $ git push
75
+ # click the link that is printed to open a PR
76
+ ```
@@ -0,0 +1,19 @@
1
+ """
2
+ # Overview
3
+ Click on one of the items on the left.
4
+ """
5
+
6
+ import solara
7
+ from solara.website.components import CategoryLayout, Gallery
8
+
9
+ _title = "API"
10
+
11
+
12
+ @solara.component
13
+ def Page(route_external=None):
14
+ Gallery(route_external)
15
+
16
+
17
+ @solara.component
18
+ def Layout(children=[]):
19
+ CategoryLayout(children=children)
@@ -0,0 +1,9 @@
1
+ import solara
2
+ from solara.website.components import NoPage, SubCategoryLayout
3
+
4
+ Page = NoPage
5
+
6
+
7
+ @solara.component
8
+ def Layout(children=[]):
9
+ SubCategoryLayout(children=children)
@@ -0,0 +1,23 @@
1
+ """# CrossFilterDataFrame"""
2
+
3
+ import plotly
4
+
5
+ import solara
6
+ import solara.lab
7
+ from solara.website.utils import apidoc
8
+
9
+ title = "CrossFilterDataFrame"
10
+ df = plotly.data.gapminder()
11
+
12
+
13
+ @solara.component
14
+ def Page():
15
+ solara.provide_cross_filter()
16
+ with solara.VBox() as main:
17
+ solara.CrossFilterReport(df, classes=["py-2"])
18
+ solara.CrossFilterSelect(df, "country")
19
+ solara.CrossFilterDataFrame(df)
20
+ return main
21
+
22
+
23
+ __doc__ += apidoc(solara.CrossFilterDataFrame.f) # type: ignore
@@ -0,0 +1,22 @@
1
+ """# CrossFilterReport"""
2
+
3
+ import plotly
4
+
5
+ import solara
6
+ import solara.lab
7
+ from solara.website.utils import apidoc
8
+
9
+ df = plotly.data.gapminder()
10
+
11
+
12
+ @solara.component
13
+ def Page():
14
+ solara.provide_cross_filter()
15
+ with solara.VBox() as main:
16
+ solara.CrossFilterReport(df, classes=["py-2"])
17
+ solara.CrossFilterSelect(df, "country")
18
+ solara.CrossFilterSlider(df, "gdpPercap", mode=">")
19
+ return main
20
+
21
+
22
+ __doc__ += apidoc(solara.CrossFilterReport.f) # type: ignore
@@ -0,0 +1,22 @@
1
+ """# CrossFilterSelect"""
2
+
3
+ import plotly
4
+
5
+ import solara
6
+ import solara.lab
7
+ from solara.website.utils import apidoc
8
+
9
+ df = plotly.data.tips()
10
+
11
+
12
+ @solara.component
13
+ def Page():
14
+ solara.provide_cross_filter()
15
+ with solara.VBox() as main:
16
+ solara.CrossFilterReport(df, classes=["py-2"])
17
+ solara.CrossFilterSelect(df, "sex")
18
+ solara.CrossFilterSelect(df, "time")
19
+ return main
20
+
21
+
22
+ __doc__ += apidoc(solara.CrossFilterSelect.f) # type: ignore
@@ -0,0 +1,22 @@
1
+ """# CrossFilterSlider"""
2
+
3
+ import plotly
4
+
5
+ import solara
6
+ import solara.lab
7
+ from solara.website.utils import apidoc
8
+
9
+ df = plotly.data.gapminder()
10
+
11
+
12
+ @solara.component
13
+ def Page():
14
+ solara.provide_cross_filter()
15
+ with solara.VBox() as main:
16
+ solara.CrossFilterReport(df, classes=["py-2"])
17
+ solara.CrossFilterSlider(df, "pop", mode=">")
18
+ solara.CrossFilterSlider(df, "gdpPercap", mode="<")
19
+ return main
20
+
21
+
22
+ __doc__ += apidoc(solara.CrossFilterSlider.f) # type: ignore
@@ -0,0 +1,9 @@
1
+ import solara
2
+ from solara.website.components import NoPage, SubCategoryLayout
3
+
4
+ Page = NoPage
5
+
6
+
7
+ @solara.component
8
+ def Layout(children=[]):
9
+ SubCategoryLayout(children=children)
@@ -0,0 +1,25 @@
1
+ """# use_cross_filter"""
2
+
3
+ import plotly
4
+
5
+ import solara
6
+ import solara.lab
7
+ from solara.website.utils import apidoc
8
+
9
+ title = "use_cross_filter"
10
+
11
+
12
+ df = plotly.data.gapminder()
13
+
14
+
15
+ @solara.component
16
+ def Page():
17
+ solara.provide_cross_filter()
18
+ with solara.VBox() as main:
19
+ solara.CrossFilterReport(df, classes=["py-2"])
20
+ solara.CrossFilterSelect(df, "continent")
21
+ solara.CrossFilterSlider(df, "gdpPercap", mode=">")
22
+ return main
23
+
24
+
25
+ __doc__ += apidoc(solara.use_cross_filter) # type: ignore
@@ -0,0 +1,12 @@
1
+ """# use_dark_effective"""
2
+
3
+ import solara
4
+ import solara.autorouting
5
+ import solara.lab
6
+ from solara.website.utils import apidoc
7
+
8
+ from . import NoPage
9
+
10
+ title = "use_dark_effective"
11
+ Page = NoPage
12
+ __doc__ += apidoc(solara.lab.use_dark_effective) # type: ignore
@@ -0,0 +1,43 @@
1
+ # use_effect
2
+
3
+ ```python
4
+ def use_effect(
5
+ effect: EffectCallable,
6
+ dependencies: Any | None = None
7
+ ) -> None
8
+ ...
9
+ ```
10
+
11
+ Execute non-declarative code within a callback, for instance to add event handlers. `effect` is executed *after* page render, letting us fetch the actual underlying widget object using `solara.get_widget` on an element. `dependencies` should be a list of variables, which when changed trigger re-execution of `effect`. If left empty, `effect` will never re-execute.
12
+
13
+ `effect` can return a cleanup function, which will be called before re-execution of `effect`, or when the component containing `use_effect` is removed.
14
+
15
+ Example use of `use_effect` to attach an event handler to a solara component:
16
+
17
+ ```python
18
+ def use_event(el: solara.Element, callback: Callable):
19
+ def add_event_handler():
20
+ def on_enter(widget, event, data):
21
+ callback(widget.v_model)
22
+
23
+ widget = cast(ipyvue.VueWidget, solara.get_widget(el))
24
+ widget.on_event("keyup.enter", on_enter)
25
+
26
+ def cleanup():
27
+ widget.on_event("keyup.enter", on_enter, remove=True)
28
+
29
+ return cleanup
30
+
31
+ solara.use_effect(add_event_handler, dependencies=[])
32
+
33
+ @solara.component
34
+ def Page():
35
+ def function():
36
+ #Do something...
37
+
38
+ input = solara.InputText():
39
+ use_event(input, function)
40
+ ...
41
+ ```
42
+
43
+ See also the [Reacton docs](https://reacton.solara.dev/en/latest/api/#use_effect).
@@ -0,0 +1,9 @@
1
+ from pathlib import Path
2
+
3
+ from solara.website.components import NoPage
4
+
5
+ HERE = Path(__file__).parent
6
+ __doc__ = open(HERE / "use_effect.md").read()
7
+
8
+ Page = NoPage
9
+ title = "use_effect"
@@ -0,0 +1,33 @@
1
+ import solara
2
+
3
+ title = "use_exception"
4
+ set_fail = None
5
+ clear = None
6
+
7
+
8
+ @solara.component
9
+ def UnstableComponent(number: int):
10
+ if number == 3:
11
+ raise Exception("I do not like 3")
12
+ return solara.Text(f"You picked {number}")
13
+
14
+
15
+ @solara.component
16
+ def Page():
17
+ value, set_value = solara.use_state(1)
18
+ value_previous = solara.use_previous(value)
19
+ exception, clear_exception = solara.use_exception()
20
+ # print(exception)
21
+ with solara.VBox() as main:
22
+ if exception:
23
+
24
+ def reset():
25
+ set_value(value_previous)
26
+ clear_exception()
27
+
28
+ solara.Text("Exception: " + str(exception))
29
+ solara.Button(label="Go to previous state", on_click=reset)
30
+ else:
31
+ solara.IntSlider(value=value, min=0, max=10, on_value=set_value, label="Pick a number, except 3")
32
+ UnstableComponent(value)
33
+ return main
@@ -0,0 +1,16 @@
1
+ # use_memo
2
+
3
+ ```python
4
+ def use_memo(
5
+ f: Any,
6
+ dependencies: Any | None = None,
7
+ debug_name: str = None
8
+ ) -> Any:
9
+ ...
10
+ ```
11
+
12
+ `use_memo` stores ([memoize](https://en.wikipedia.org/wiki/Memoization)) the function return on first render, and then excludes it from being re-executed, except when one of the `dependencies` changes. `dependencies` can take the value `None`, in which case dependencies are automatically obtained from nonlocal variables. If an empty list is passed as `dependencies` instead, the function is only executed once over the entire lifetime of the component.
13
+
14
+ Not to be confused with [memorize](https://solara.dev/documentation/api/utilities/memoize) which can cache multiple return values and which can be used outside of component.
15
+
16
+ See also the [Reacton docs](https://reacton.solara.dev/en/latest/api/#use_memo).
@@ -0,0 +1,9 @@
1
+ from pathlib import Path
2
+
3
+ from solara.website.components import NoPage
4
+
5
+ HERE = Path(__file__).parent
6
+ __doc__ = open(HERE / "use_memo.md").read()
7
+
8
+ Page = NoPage
9
+ title = "use_memo"
@@ -0,0 +1,33 @@
1
+ """
2
+ # use_previous
3
+
4
+ ```python
5
+ def use_previous(value: T) -> T:
6
+ ...
7
+ ```
8
+
9
+ Returns the value from a previous render phase, or the current value on the first render.
10
+
11
+
12
+ """
13
+
14
+ import solara
15
+
16
+ title = "use_previous"
17
+
18
+
19
+ @solara.component
20
+ def Page():
21
+ value, set_value = solara.use_state(4)
22
+ value_previous = solara.use_previous(value)
23
+ with solara.VBox() as main:
24
+ solara.IntSlider("value", value=value, on_value=set_value)
25
+ solara.Markdown(
26
+ f"""
27
+ **Current**: `{value}`
28
+
29
+ **Previous**: `{value_previous}`
30
+ """
31
+ )
32
+
33
+ return main
@@ -0,0 +1,16 @@
1
+ """
2
+ # use_reactive
3
+
4
+ """
5
+
6
+ import solara
7
+ from solara.website.components import NoPage
8
+ from solara.website.utils import apidoc
9
+
10
+ title = "use_reactive"
11
+
12
+
13
+ Page = NoPage
14
+
15
+
16
+ __doc__ += apidoc(solara.use_reactive) # type: ignore
@@ -0,0 +1,10 @@
1
+ """# use_state"""
2
+
3
+ import solara
4
+ import solara.autorouting
5
+ from solara.website.components import NoPage
6
+ from solara.website.utils import apidoc
7
+
8
+ title = "use_state"
9
+ Page = NoPage
10
+ __doc__ += apidoc(solara.use_state) # type: ignore