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,181 +0,0 @@
1
- from typing import Callable, Dict, List, Optional, Union
2
-
3
- import solara
4
- from solara.components.component_vue import component_vue
5
-
6
-
7
- @component_vue("menu.vue")
8
- def MenuWidget(
9
- activator: List[solara.Element],
10
- show_menu: bool,
11
- on_show_menu: Optional[Callable] = None,
12
- close_on_content_click: bool = True,
13
- children: List[solara.Element] = [],
14
- style: Optional[str] = None,
15
- context: bool = False,
16
- use_absolute: bool = True,
17
- use_activator_width: bool = True,
18
- ):
19
- pass
20
-
21
-
22
- @solara.component
23
- def ClickMenu(
24
- activator: Union[solara.Element, List[solara.Element]],
25
- open_value: Union[solara.Reactive[bool], bool] = False,
26
- on_open_value: Optional[Callable] = None,
27
- children: List[solara.Element] = [],
28
- style: Optional[Union[str, Dict[str, str]]] = None,
29
- ):
30
- """
31
- Show a pop-up menu by clicking on the `activator` element. The menu appears at the cursor position.
32
-
33
- ```solara
34
- import solara
35
-
36
-
37
- @solara.component
38
- def Page():
39
- image_url = "/static/public/beach.jpeg"
40
- image = solara.Image(image=image_url)
41
-
42
- with solara.lab.ClickMenu(activator=image):
43
- with solara.Column(gap="0px"):
44
- [solara.Button(f"Click me {i}!", text=True) for i in range(5)]
45
-
46
- ```
47
-
48
-
49
- ## Arguments
50
-
51
- * activator: Clicking on this element will open the menu. Accepts either a `solara.Element`, or a list of elements.
52
- * open_value: Controls and communicates the state of the menu. If True, the menu is open. If False, the menu is closed.
53
- * on_open_value: Function to call when the menu is opened or closed.
54
- * menu_contents: List of Elements to be contained in the menu.
55
- * style: CSS style to apply. Applied directly onto the `v-menu` component.
56
- """
57
- open_reactive = solara.use_reactive(open_value, on_open_value)
58
- del open_value
59
-
60
- style_flat = solara.util._flatten_style(style)
61
-
62
- if not isinstance(activator, list):
63
- activator = [activator]
64
-
65
- return MenuWidget(
66
- activator=activator,
67
- children=children,
68
- show_menu=open_reactive.value,
69
- on_show_menu=open_reactive.set,
70
- style=style_flat,
71
- )
72
-
73
-
74
- @solara.component
75
- def ContextMenu(
76
- activator: Union[solara.Element, List[solara.Element]],
77
- open_value: Union[solara.Reactive[bool], bool] = False,
78
- on_open_value: Optional[Callable] = None,
79
- children: List[solara.Element] = [],
80
- style: Optional[Union[str, Dict[str, str]]] = None,
81
- ):
82
- """
83
- Show a context menu by triggering the contextmenu event on the `activator` element. The menu appears at the cursor position.
84
-
85
- A contextmenu event is typically triggered by clicking the right mouse button, or by pressing the context menu key.
86
-
87
- ```solara
88
- import solara
89
-
90
-
91
- @solara.component
92
- def Page():
93
- image_url = "/static/public/beach.jpeg"
94
- image = solara.Image(image=image_url)
95
-
96
- with solara.lab.ContextMenu(activator=image):
97
- with solara.Column(gap="0px"):
98
- [solara.Button(f"Click me {i}!", text=True) for i in range(5)]
99
-
100
- ```
101
-
102
- ## Arguments
103
-
104
- * activator: Clicking on this element will open the menu. Accepts either a `solara.Element`, or a list of elements.
105
- * open_value: Controls and communicates the state of the menu. If True, the menu is open. If False, the menu is closed.
106
- * on_open_value: Function to call when the menu is opened or closed.
107
- * children: List of Elements to be contained in the menu
108
- * style: CSS style to apply. Applied directly onto the `v-menu` component.
109
- """
110
- open_reactive = solara.use_reactive(open_value, on_open_value)
111
- del open_value
112
- style_flat = solara.util._flatten_style(style)
113
-
114
- if not isinstance(activator, list):
115
- activator = [activator]
116
-
117
- return MenuWidget(
118
- activator=activator,
119
- children=children,
120
- show_menu=open_reactive.value,
121
- on_show_menu=open_reactive.set,
122
- style=style_flat,
123
- context=True,
124
- )
125
-
126
-
127
- @solara.component
128
- def Menu(
129
- activator: Union[solara.Element, List[solara.Element]],
130
- open_value: Union[solara.Reactive[bool], bool] = False,
131
- on_open_value: Optional[Callable] = None,
132
- close_on_content_click: bool = True,
133
- children: List[solara.Element] = [],
134
- style: Optional[Union[str, Dict[str, str]]] = None,
135
- use_activator_width: bool = True,
136
- ):
137
- """
138
- Show a pop-up menu by clicking on the `activator` element. The menu appears below the `activator` element.
139
-
140
- ```solara
141
- import solara
142
-
143
-
144
- @solara.component
145
- def Page():
146
- btn = solara.Button("Show suboptions")
147
-
148
- with solara.lab.Menu(activator=btn):
149
- with solara.Column(gap="0px"):
150
- [solara.Button(f"Click me {str(i)}!", text=True) for i in range(5)]
151
-
152
- ```
153
-
154
- ## Arguments
155
-
156
- * activator: Clicking on this element will open the menu. Accepts either a `solara.Element`, or a list of elements.
157
- * open_value: Controls and communicates the state of the menu. If True, the menu is open. If False, the menu is closed.
158
- * on_open_value: Function to call when the menu is opened or closed.
159
- * children: List of Elements to be contained in the menu
160
- * style: CSS style to apply. Applied directly onto the `v-menu` component.
161
- * use_activator_width: If True, the menu will have a minimum width equal to the activator element.
162
- If False, the menu width will be determined by the content.
163
- """
164
- open_reactive = solara.use_reactive(open_value, on_open_value)
165
- del open_value
166
-
167
- style_flat = solara.util._flatten_style(style)
168
-
169
- if not isinstance(activator, list):
170
- activator = [activator]
171
-
172
- return MenuWidget(
173
- activator=activator,
174
- children=children,
175
- show_menu=open_reactive.value,
176
- on_show_menu=open_reactive.set,
177
- close_on_content_click=close_on_content_click,
178
- style=style_flat,
179
- use_absolute=False,
180
- use_activator_width=use_activator_width,
181
- )
@@ -1,38 +0,0 @@
1
- <template>
2
- <v-menu
3
- v-model="show_menu"
4
- :absolute="use_absolute"
5
- offset-y
6
- :close-on-content-click="close_on_content_click"
7
- :min-width="use_activator_width ? null : 'auto'"
8
- >
9
- <template v-if="context" v-slot:activator="{ on }">
10
- <div v-for="(element, index) in activator"
11
- :key="index"
12
- @contextmenu.prevent="show($event, on)">
13
- <jupyter-widget :widget="element"></jupyter-widget>
14
- </div>
15
- </template>
16
- <template v-else v-slot:activator="{ on }">
17
- <jupyter-widget :widget="element" v-for="(element, index) in activator" :key="index" @click.native="on.click"></jupyter-widget>
18
- </template>
19
- <v-list v-for="(element, index) in children" :key="index" style="padding: 0;">
20
- <jupyter-widget :widget="element" :style="style" ></jupyter-widget>
21
- </v-list>
22
- </v-menu>
23
- </template>
24
-
25
- <script>
26
- module.exports = {
27
- methods: {
28
- show(e, on) {
29
- // hide menu, and trigger the event on the next tick, otherwise vue does not see
30
- // `show_menu` changing and will no do any animation
31
- this.show_menu = false;
32
- this.$nextTick(() => {
33
- on.click(e)
34
- })
35
- }
36
- }
37
- }
38
- </script>
@@ -1,274 +0,0 @@
1
- from typing import Callable, Dict, List, Optional, TypeVar, Union
2
-
3
- import solara
4
- from solara import v
5
-
6
-
7
- @solara.component
8
- def Tab(
9
- label: Union[None, str, solara.Element] = None,
10
- icon_name: Optional[str] = None,
11
- path_or_route: Union[None, str, "solara.Route"] = None,
12
- disabled=False,
13
- classes: List[str] = [],
14
- style: Union[str, Dict[str, str], None] = None,
15
- children: List[solara.Element] = [],
16
- tab_children: List[Union[solara.Element, str]] = [],
17
- ):
18
- """An item in a Tabs component.
19
-
20
- (*Note: [This component is experimental and its API may change in the future](/documentation/getting_started/lab).*)
21
-
22
- Should be a direct child of a [Tabs](/documentation/components/lab/tabs).
23
-
24
- ## Arguments
25
- * `label`: The label of the tab.
26
- * `icon_name`: The name of the icon to display in the tab.
27
- * `path_or_route`: The path or route to navigate to when the tab is clicked.
28
- * `disabled`: Whether the tab is disabled.
29
- * `classes`: Additional CSS classes to apply.
30
- * `style`: CSS style to apply.
31
- * `children`: The children of the tab. These will be displayed when the tab is active.
32
- * `tab_children`: The children of the tab header. These will be displayed in the tab
33
- header, if a label or icon_name is provided they are prepended to the `tab_children`.
34
-
35
- """
36
- if label is not None:
37
- tab_children = [label] + tab_children
38
- if icon_name:
39
- tab_children = [v.Icon(left=bool(label), children=[icon_name])] + tab_children
40
- style_flat = solara.util._flatten_style(style)
41
- class_ = solara.util._combine_classes(classes)
42
- # note: children is not used, it is only used in the Tabs component
43
- return v.Tab(children=tab_children, disabled=disabled, class_=class_, style_=style_flat)
44
-
45
-
46
- T = TypeVar("T")
47
-
48
-
49
- @solara.component
50
- def Tabs(
51
- value: Union[None, int, "solara.Reactive[int]"] = None,
52
- on_value: Optional[Callable[[int], None]] = None,
53
- color: Optional[str] = None,
54
- background_color: Optional[str] = None,
55
- slider_color: Optional[str] = None,
56
- dark: bool = False,
57
- grow: bool = False,
58
- vertical=False,
59
- align: str = "left",
60
- lazy=False,
61
- children: List[solara.Element] = [],
62
- ):
63
- """A tabbed container showing one tab at a time.
64
-
65
- (*Note: [This component is experimental and its API may change in the future](/documentation/getting_started/lab).*)
66
-
67
- Note that if Tabs are used as a child of the [AppBar](/documentation/components/layout/app_bar) component, the tabs
68
- will be placed under the app bar. See our [authorization app](/apps/authorization) for an example.
69
-
70
- If the children [Tab](/documentation/components/lab/tab) elements are passed a `path_or_route` argument, the active tab
71
- will be based on the path of the current page.
72
-
73
-
74
- ## Examples
75
-
76
- ### Only tabs headers
77
-
78
- ```solara
79
- import solara
80
- import solara.lab
81
-
82
-
83
- @solara.component
84
- def Page():
85
- with solara.lab.Tabs():
86
- solara.lab.Tab("Tab 1")
87
- solara.lab.Tab("Tab 2")
88
- ```
89
-
90
- ### Tabs with content
91
-
92
- This is usually only used when the tabs are placed in the [AppBar](/documentation/components/layout/app_bar) component.
93
-
94
- ```solara
95
- import solara
96
- import solara.lab
97
-
98
-
99
- @solara.component
100
- def Page():
101
- with solara.lab.Tabs():
102
- with solara.lab.Tab("Tab 1"):
103
- solara.Markdown("Hello")
104
- with solara.lab.Tab("Tab 2"):
105
- solara.Markdown("World")
106
- ```
107
-
108
-
109
- ### Tabs events
110
-
111
- The `value` on the Tabs component is a reactive value that can be used to
112
- listen to changes in the selected tab and make the UI respond to it.
113
-
114
- ```solara
115
- import solara
116
- import solara.lab
117
-
118
- tab_index = solara.reactive(0)
119
-
120
-
121
- @solara.component
122
- def Page():
123
-
124
- def next_tab():
125
- tab_index.value = (tab_index.value + 1) % 2
126
-
127
- solara.Title(f"Tab {tab_index.value + 1}")
128
- solara.Button('Next Tab', on_click=next_tab)
129
-
130
- with solara.lab.Tabs(value=tab_index):
131
- with solara.lab.Tab("Tab 1"):
132
- solara.Markdown("Hello")
133
- with solara.lab.Tab("Tab 2"):
134
- solara.Markdown("World")
135
- with solara.lab.Tab("Disabled", disabled=True):
136
- solara.Markdown("World")
137
-
138
- ```
139
-
140
- ### Advanced tabs
141
-
142
- Tabs can be nested, styled and placed vertically.
143
-
144
- ```solara
145
- import solara
146
- import solara.lab
147
-
148
-
149
- @solara.component
150
- def Page():
151
- with solara.lab.Tabs(background_color="primary", dark=True):
152
- with solara.lab.Tab("Home", icon_name="mdi-home"):
153
- solara.Markdown("Hello")
154
- with solara.lab.Tab("Advanced", icon_name="mdi-apps"):
155
- with solara.lab.Tabs(grow=True, background_color="primary", dark=True, slider_color="green"):
156
- with solara.lab.Tab("Settings", icon_name="mdi-cogs"):
157
- with solara.lab.Tabs(vertical=True, slider_color="green"):
158
- with solara.lab.Tab("User", icon_name="mdi-account"):
159
- solara.Markdown("User settings")
160
- with solara.lab.Tab("System", icon_name="mdi-access-point"):
161
- solara.Markdown("System settings")
162
- with solara.lab.Tab("Analytics", icon_name="mdi-chart-line"):
163
- with solara.lab.Tabs(vertical=True):
164
- with solara.lab.Tab("User", icon_name="mdi-account"):
165
- solara.Markdown("User analytics")
166
- with solara.lab.Tab("System", icon_name="mdi-access-point"):
167
- solara.Markdown("System analytics")
168
-
169
- ```
170
-
171
-
172
- ### Many tabs
173
-
174
- If many tabs are shown, paginations arrows are shown.
175
-
176
- ```solara
177
- import solara
178
- import solara.lab
179
-
180
- tab_count = 30
181
-
182
-
183
- @solara.component
184
- def Page():
185
- with solara.lab.Tabs():
186
- for i in range(tab_count):
187
- with solara.lab.Tab(f"Tab {i+1}"):
188
- solara.Markdown(f"Content for tab {i+1}")
189
- ```
190
-
191
-
192
- ## Arguments
193
-
194
- * `value`: The index of the selected tab. If `None`, the first tab is selected or it is based in the route/path.
195
- * `on_value`: A callback that is called when the selected tab changes.
196
- * `color`: The color of text in the tab headers (only for dark=False).
197
- * `background_color`: The background color of the tab headers.
198
- * `slider_color`: The color of the slider.
199
- * `dark`: Apply a dark theme.
200
- * `grow`: Whether the tabs should grow to fill the available space.
201
- * `vertical`: Whether the tabs are vertical.
202
- * `align`: The alignment of the tabs, possible values are 'left', 'start', 'center', 'right' or 'end'.
203
- * `lazy`: Whether the child components of the inactive tabs are rendered or not. If lazy=True, components of inactive tabs are not rendered.
204
- * `classes`: Additional CSS classes to apply.
205
- * `style`: CSS style to apply.
206
- """
207
-
208
- paths_of_routes = [child.kwargs.get("path_or_route") for child in children]
209
- paths = [solara.resolve_path(path_or_route, level=0) if path_or_route else None for path_or_route in paths_of_routes]
210
- router = solara.use_router()
211
- if value is None:
212
- if router.path in paths:
213
- value = paths.index(router.path)
214
- else:
215
- value = 0
216
-
217
- def safe_on_value(index: Optional[int]):
218
- if on_value and index is not None:
219
- on_value(index)
220
-
221
- reactive_value = solara.use_reactive(value, safe_on_value)
222
- del value
223
-
224
- has_content = False
225
- for i, child in enumerate(children):
226
- if not child.component == Tab:
227
- raise ValueError(f"Tabs children must be Tab components, but child {i} is {child.component}")
228
- if child.kwargs.get("children"):
229
- has_content = True
230
-
231
- def on_v_model(index: Optional[int]):
232
- if index is not None:
233
- path = paths[index]
234
- if path:
235
- router.push(path)
236
- reactive_value.value = index
237
-
238
- if align not in ["left", "start", "center", "right", "end"]:
239
- raise ValueError(f"Tabs align must be one of 'left', 'start', 'center', 'right', 'end', but is {align}")
240
-
241
- with v.Tabs(
242
- v_model=reactive_value.value,
243
- on_v_model=on_v_model,
244
- centered=align == "center",
245
- right=align in ["right", "end"],
246
- children=children,
247
- vertical=vertical,
248
- color=color,
249
- background_color=background_color,
250
- show_arrows=True,
251
- grow=grow,
252
- dark=dark,
253
- ) as tabs:
254
- v.TabsSlider(color=slider_color)
255
- if has_content:
256
- with v.TabsItems(v_model=reactive_value.value, on_v_model=on_v_model):
257
- for i, child in enumerate(children):
258
- if not lazy or reactive_value.value == i:
259
- v.TabItem(children=child.kwargs.get("children", []), value=i)
260
- else:
261
- v.TabItem(
262
- value=i,
263
- children=[
264
- # Nice idea, but by using the widget interface the tab does not change without binding using
265
- # v-model. So we would need to implement this using a vuetify template.
266
- # v.SkeletonLoader(
267
- # class_="mx-auto",
268
- # max_width="300",
269
- # type="card",
270
- # )
271
- ],
272
- )
273
-
274
- return tabs
@@ -1,98 +0,0 @@
1
- from typing import Callable, Dict, Union, cast
2
-
3
- import ipyvuetify.Themes
4
- from ipyvuetify.Themes import Theme
5
-
6
- import solara
7
- from solara.components.component_vue import component_vue
8
- from solara.tasks import Proxy
9
-
10
- theme = Proxy(Theme)
11
- ipyvuetify.Themes.theme = cast(ipyvuetify.Themes.Theme, theme)
12
-
13
-
14
- def use_dark_effective():
15
- """Return True if the frontend is using a dark theme.
16
-
17
- Equivalent of
18
-
19
- ```python
20
- solara.use_trait_observe(solara.lab.theme, "dark_effective")
21
- ```
22
-
23
- See [use_trait_observe](/api/use_trait_observe).
24
- """
25
- return solara.use_trait_observe(theme, "dark_effective")
26
-
27
-
28
- def _set_theme(themes: Union[Dict[str, Dict[str, str]], None]):
29
- if themes is None:
30
- return
31
-
32
- for theme_type in themes.keys():
33
- widget = getattr(theme.themes, theme_type)
34
- with widget.hold_trait_notifications():
35
- for k, v in themes[theme_type].items():
36
- setattr(widget, k, v)
37
-
38
-
39
- def _get_theme(theme: Theme) -> Dict[str, Dict[str, str]]:
40
- theme_dict: Dict[str, Dict[str, str]] = cast(Dict[str, Dict[str, str]], {})
41
- for theme_type, theme_value in theme.themes.__dict__.items():
42
- theme_traits = theme_value.keys
43
- theme_dict[theme_type] = {}
44
- for trait in theme_traits:
45
- if not trait.startswith("_"):
46
- theme_dict[theme_type][trait] = getattr(theme_value, trait)
47
- return theme_dict
48
-
49
-
50
- @component_vue("theming.vue")
51
- def _ThemeToggle(
52
- theme_dark: str,
53
- event_sync_themes: Callable[[str], None],
54
- enable_auto: bool,
55
- on_icon: str,
56
- off_icon: str,
57
- auto_icon: str,
58
- clicks: int = 1,
59
- ):
60
- pass
61
-
62
-
63
- @solara.component
64
- def ThemeToggle(
65
- on_icon: str = "mdi-weather-night",
66
- off_icon: str = "mdi-weather-sunny",
67
- auto_icon: str = "mdi-brightness-auto",
68
- enable_auto: bool = True,
69
- ):
70
- """
71
- Insert a toggle switch for user to switch between light and dark themes.
72
-
73
- ```solara
74
- import solara.lab
75
-
76
- @solara.component
77
- def Page():
78
- solara.lab.ThemeToggle()
79
- ```
80
-
81
- ## Arguments
82
- - `on_icon`: The icon to display when the dark theme is enabled.
83
- - `off_icon`: The icon to display when the dark theme is disabled.
84
- - `auto_icon`: The icon to display when the theme is set to auto. Only visible if `enable_auto` is `True`.
85
- - `enable_auto`: Whether to enable the auto detection of dark mode.
86
- """
87
-
88
- def sync_themes(selected_theme: str):
89
- theme.dark = selected_theme
90
-
91
- return _ThemeToggle(
92
- theme_dark=theme.dark,
93
- event_sync_themes=sync_themes,
94
- enable_auto=enable_auto,
95
- on_icon=on_icon,
96
- off_icon=off_icon,
97
- auto_icon=auto_icon,
98
- )
@@ -1,72 +0,0 @@
1
- <template>
2
- <v-btn
3
- icon
4
- @click="countClicks"
5
- >
6
- <v-icon>
7
- {{ this.clicks === 1 ? this.on_icon : this.clicks === 2 ? this.off_icon : this.auto_icon }}
8
- </v-icon>
9
- </v-btn>
10
- </template>
11
- <script>
12
- module.exports = {
13
- mounted() {
14
- if (window.solara) {
15
- if (localStorage.getItem(':solara:theme.variant')) {
16
- this.theme_dark = this.initTheme();
17
- }
18
- }
19
-
20
- if ( this.theme_dark === false ) {
21
- this.clicks = 2;
22
- } else if ( this.theme_dark === null ) {
23
- this.clicks = 3;
24
- }
25
- this.lim = this.enable_auto ? 3 : 2;
26
- },
27
- methods: {
28
- countClicks() {
29
- if ( this.clicks < this.lim ) {
30
- this.clicks++;
31
- } else {
32
- this.clicks = 1;
33
- }
34
- this.theme_dark = this.get_theme_bool( this.clicks );
35
- },
36
- get_theme_bool( clicks ) {
37
- if ( clicks === 3 ) {
38
- return null;
39
- } else if ( clicks === 2 ) {
40
- return false;
41
- } else {
42
- return true;
43
- }
44
- },
45
- stringifyTheme() {
46
- return this.theme_dark === true ? 'dark' : this.theme_dark === false ? 'light' : 'auto';
47
- },
48
- initTheme() {
49
- storedTheme = JSON.parse(localStorage.getItem(':solara:theme.variant'));
50
- return storedTheme === 'dark' ? true : storedTheme === 'light' ? false : null;
51
- },
52
- setTheme() {
53
- if ( window.solara && this.theme_dark === null ) {
54
- this.$vuetify.theme.dark = this.prefersDarkScheme();
55
- return;
56
- }
57
- this.$vuetify.theme.dark = this.theme_dark;
58
- },
59
- prefersDarkScheme() {
60
- return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
61
- },
62
- },
63
- watch: {
64
- clicks (val) {
65
- if ( window.solara ) {theme.variant = this.stringifyTheme();}
66
- this.setTheme();
67
- if ( window.solara ) {localStorage.setItem(':solara:theme.variant', JSON.stringify(theme.variant));}
68
- this.sync_themes(this.theme_dark);
69
- },
70
- }
71
- }
72
- </script>
File without changes
@@ -1,12 +0,0 @@
1
- from ..utils.dataframe import df_type
2
-
3
-
4
- def use_df_column_names(df):
5
- if df_type(df) == "vaex":
6
- return df.get_column_names()
7
- elif df_type(df) == "pandas":
8
- return df.columns.tolist()
9
- elif df_type(df) == "polars":
10
- return df.columns
11
- else:
12
- raise TypeError(f"{type(df)} not supported")
solara/lab/toestand.py DELETED
@@ -1,3 +0,0 @@
1
- # for backwards compatibility
2
- from solara.toestand import KernelStoreValue as ConnectionStore # noqa: F401
3
- from solara.toestand import Reactive, Ref, State, use_sync_external_store # noqa: F401
@@ -1,2 +0,0 @@
1
- from .cookies import cookies # noqa: F401
2
- from .headers import headers # noqa: F401
@@ -1,5 +0,0 @@
1
- from typing import Dict, Optional, cast
2
-
3
- from solara.toestand import Reactive
4
-
5
- cookies: Reactive[Optional[Dict[str, str]]] = Reactive(cast(Optional[Dict[str, str]], None), key="solara.lab.cookies")