solara 1.30.0__py2.py3-none-any.whl → 1.31.0__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (439) hide show
  1. {solara-1.30.0.dist-info → solara-1.31.0.dist-info}/METADATA +7 -42
  2. solara-1.31.0.dist-info/RECORD +5 -0
  3. {solara-1.30.0.dist-info → solara-1.31.0.dist-info}/WHEEL +1 -1
  4. {solara/template/portal → solara-1.31.0.dist-info/licenses}/LICENSE +1 -1
  5. solara/__init__.py +0 -123
  6. solara/__main__.py +0 -734
  7. solara/alias.py +0 -6
  8. solara/autorouting.py +0 -554
  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 -109
  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 -87
  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 -393
  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/notebook.py +0 -172
  187. solara/website/pages/__init__.py +0 -564
  188. solara/website/pages/apps/__init__.py +0 -16
  189. solara/website/pages/apps/authorization/__init__.py +0 -118
  190. solara/website/pages/apps/authorization/admin.py +0 -12
  191. solara/website/pages/apps/authorization/users.py +0 -12
  192. solara/website/pages/apps/jupyter-dashboard-1.py +0 -116
  193. solara/website/pages/apps/layout-demo.py +0 -40
  194. solara/website/pages/apps/multipage/__init__.py +0 -38
  195. solara/website/pages/apps/multipage/page1.py +0 -26
  196. solara/website/pages/apps/multipage/page2.py +0 -34
  197. solara/website/pages/apps/scatter.py +0 -136
  198. solara/website/pages/apps/scrolling.py +0 -63
  199. solara/website/pages/apps/tutorial-streamlit.py +0 -18
  200. solara/website/pages/changelog/__init__.py +0 -8
  201. solara/website/pages/changelog/changelog.md +0 -180
  202. solara/website/pages/contact/__init__.py +0 -8
  203. solara/website/pages/contact/contact.md +0 -17
  204. solara/website/pages/doc_use_download.py +0 -85
  205. solara/website/pages/documentation/__init__.py +0 -184
  206. solara/website/pages/documentation/advanced/__init__.py +0 -36
  207. solara/website/pages/documentation/advanced/content/00-overview.md +0 -1
  208. solara/website/pages/documentation/advanced/content/10-howto/00-overview.md +0 -1
  209. solara/website/pages/documentation/advanced/content/10-howto/10-multipage.md +0 -191
  210. solara/website/pages/documentation/advanced/content/10-howto/20-layout.md +0 -120
  211. solara/website/pages/documentation/advanced/content/10-howto/30-testing.md +0 -149
  212. solara/website/pages/documentation/advanced/content/10-howto/31-debugging.md +0 -66
  213. solara/website/pages/documentation/advanced/content/10-howto/40-embed.md +0 -43
  214. solara/website/pages/documentation/advanced/content/10-howto/50-ipywidget_libraries.md +0 -120
  215. solara/website/pages/documentation/advanced/content/20-understanding/00-introduction.md +0 -4
  216. solara/website/pages/documentation/advanced/content/20-understanding/05-ipywidgets.md +0 -30
  217. solara/website/pages/documentation/advanced/content/20-understanding/06-ipyvuetify.md +0 -38
  218. solara/website/pages/documentation/advanced/content/20-understanding/10-reacton.md +0 -24
  219. solara/website/pages/documentation/advanced/content/20-understanding/12-reacton-basics.md +0 -104
  220. solara/website/pages/documentation/advanced/content/20-understanding/15-anatomy.md +0 -19
  221. solara/website/pages/documentation/advanced/content/20-understanding/17-rules-of-hooks.md +0 -3
  222. solara/website/pages/documentation/advanced/content/20-understanding/18-containers.md +0 -160
  223. solara/website/pages/documentation/advanced/content/20-understanding/20-solara.md +0 -13
  224. solara/website/pages/documentation/advanced/content/20-understanding/40-routing.md +0 -236
  225. solara/website/pages/documentation/advanced/content/20-understanding/50-solara-server.md +0 -81
  226. solara/website/pages/documentation/advanced/content/20-understanding/60-voila.md +0 -7
  227. solara/website/pages/documentation/advanced/content/30-enterprise/00-overview.md +0 -1
  228. solara/website/pages/documentation/advanced/content/30-enterprise/10-oauth.md +0 -167
  229. solara/website/pages/documentation/advanced/content/40-development/00-overview.md +0 -0
  230. solara/website/pages/documentation/advanced/content/40-development/01-contribute.md +0 -41
  231. solara/website/pages/documentation/advanced/content/40-development/10-setup.md +0 -72
  232. solara/website/pages/documentation/advanced/content/__init__.py +0 -0
  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 -11
  379. solara/website/pages/documentation/faq/content/99-faq.md +0 -73
  380. solara/website/pages/documentation/getting_started/__init__.py +0 -15
  381. solara/website/pages/documentation/getting_started/content/00-quickstart.md +0 -84
  382. solara/website/pages/documentation/getting_started/content/01-introduction.md +0 -121
  383. solara/website/pages/documentation/getting_started/content/02-installing.md +0 -81
  384. solara/website/pages/documentation/getting_started/content/04-tutorials/00-overview.md +0 -9
  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 -84
  387. solara/website/pages/documentation/getting_started/content/04-tutorials/30-ipywidgets.md +0 -120
  388. solara/website/pages/documentation/getting_started/content/04-tutorials/40-streamlit.md +0 -141
  389. solara/website/pages/documentation/getting_started/content/04-tutorials/50-dash.md +0 -140
  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 -7
  395. solara/website/pages/documentation/getting_started/content/05-fundamentals/10-components.md +0 -218
  396. solara/website/pages/documentation/getting_started/content/05-fundamentals/50-state-management.md +0 -83
  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 -27
  399. solara/website/pages/documentation/getting_started/content/06-reference/41-asset-files.md +0 -32
  400. solara/website/pages/documentation/getting_started/content/06-reference/60-static-site-generation.md +0 -55
  401. solara/website/pages/documentation/getting_started/content/06-reference/70-search.md +0 -30
  402. solara/website/pages/documentation/getting_started/content/06-reference/80-reloading.md +0 -30
  403. solara/website/pages/documentation/getting_started/content/06-reference/90-notebook-support.md +0 -4
  404. solara/website/pages/documentation/getting_started/content/06-reference/95-caching.md +0 -143
  405. solara/website/pages/documentation/getting_started/content/07-deploying/00-overview.md +0 -3
  406. solara/website/pages/documentation/getting_started/content/07-deploying/10-self-hosted.md +0 -269
  407. solara/website/pages/documentation/getting_started/content/07-deploying/20-cloud-hosted.md +0 -76
  408. solara/website/pages/documentation/getting_started/content/08-lab/00-what-is-lab.md +0 -3
  409. solara/website/pages/documentation/getting_started/content/90-troubleshoot.md +0 -22
  410. solara/website/pages/documentation/getting_started/content/__init__.py +0 -0
  411. solara/website/pages/docutils.py +0 -38
  412. solara/website/pages/showcase/__init__.py +0 -105
  413. solara/website/pages/showcase/domino_code_assist.py +0 -60
  414. solara/website/pages/showcase/planeto_tessa.py +0 -19
  415. solara/website/pages/showcase/solara_dev.py +0 -54
  416. solara/website/pages/showcase/solarathon_2023_team_2.py +0 -22
  417. solara/website/pages/showcase/solarathon_2023_team_4.py +0 -22
  418. solara/website/pages/showcase/solarathon_2023_team_5.py +0 -23
  419. solara/website/pages/showcase/solarathon_2023_team_6.py +0 -34
  420. solara/website/pages/showcase/wanderlust.py +0 -27
  421. solara/website/public/beach.jpeg +0 -0
  422. solara/website/public/logo.svg +0 -6
  423. solara/website/public/social/discord.svg +0 -1
  424. solara/website/public/social/github.svg +0 -1
  425. solara/website/public/social/twitter.svg +0 -3
  426. solara/website/public/success.html +0 -25
  427. solara/website/templates/index.html.j2 +0 -117
  428. solara/website/utils.py +0 -51
  429. solara/widgets/__init__.py +0 -1
  430. solara/widgets/vue/gridlayout.vue +0 -110
  431. solara/widgets/vue/html.vue +0 -4
  432. solara/widgets/vue/navigator.vue +0 -104
  433. solara/widgets/vue/vegalite.vue +0 -115
  434. solara/widgets/widgets.py +0 -65
  435. solara-1.30.0.data/data/etc/jupyter/jupyter_notebook_config.d/solara.json +0 -7
  436. solara-1.30.0.data/data/etc/jupyter/jupyter_server_config.d/solara.json +0 -7
  437. solara-1.30.0.dist-info/RECORD +0 -438
  438. solara-1.30.0.dist-info/entry_points.txt +0 -5
  439. /solara-1.30.0.dist-info/licenses/LICENSE → /LICENSE +0 -0
solara/components/card.py DELETED
@@ -1,87 +0,0 @@
1
- from typing import Dict, List, Optional, Union
2
-
3
- import reacton.ipyvuetify as v
4
- import solara
5
- from solara.util import _combine_classes
6
-
7
-
8
- @solara.component
9
- def Card(
10
- title: Optional[str] = None,
11
- subtitle: Optional[str] = None,
12
- elevation: int = 2,
13
- margin=2,
14
- children: List[solara.Element] = [],
15
- classes: List[str] = [],
16
- style: Union[str, Dict[str, str], None] = None,
17
- ):
18
- """A card combines a title, subtitle, content and actions into a single unit.
19
-
20
-
21
- ## Example
22
- ```solara
23
- import solara
24
-
25
- @solara.component
26
- def Page():
27
- with solara.Card(title="Card title", subtitle="Card subtitle"):
28
- solara.Markdown(
29
- "Lorem ipsum dolor sit amet consectetur adipisicing elit. "\\
30
- "Commodi, ratione debitis quis est labore voluptatibus! "\\
31
- "Eaque cupiditate minima, at placeat totam, magni doloremque "\\
32
- "veniam neque porro libero rerum unde voluptatem!"
33
- )
34
- with solara.CardActions():
35
- solara.Button("Action 1", text=True)
36
- solara.Button("Action 2", text=True)
37
- ```
38
-
39
-
40
- ## Arguments
41
-
42
- * `title`: Title of the card.
43
- * `subtitle`: Subtitle of the card.
44
- * `elevation`: Elevation of the card, gives the appearance of hovering above the page.
45
- * `margin`: Margin of the card.
46
- * `children`: Children are placed as the main content of the card.
47
- * `style`: CSS style to apply to the top level element.
48
- """
49
- class_ = _combine_classes([f"ma-{margin}", *classes])
50
- style_flat = solara.util._flatten_style(style)
51
- children_actions = []
52
- children_text = []
53
- for child in children:
54
- if isinstance(child, solara.Element) and child.component == solara.CardActions:
55
- children_actions.extend(child.kwargs.get("children", []))
56
- else:
57
- children_text.append(child)
58
- with v.Card(elevation=elevation, class_=class_, style_=style_flat) as main:
59
- if title:
60
- with v.CardTitle(
61
- children=[title],
62
- ):
63
- pass
64
- if subtitle:
65
- with v.CardSubtitle(
66
- children=[subtitle],
67
- ):
68
- pass
69
- with v.CardText(children=children_text):
70
- pass
71
- if children_actions:
72
- with v.CardActions(children=children_actions):
73
- pass
74
- return main
75
-
76
-
77
- @solara.component
78
- def CardActions(children: List[solara.Element] = []):
79
- """Container for actions in a card.
80
-
81
- See [Card](/documentation/components/layout/card) for an example.
82
-
83
- # Arguments
84
-
85
- * `children`: Children are placed as the action area of the card.
86
- """
87
- solara.Error("You should not see this if you add a CardActions as a child component of a Card")
@@ -1,50 +0,0 @@
1
- from typing import Callable, Union
2
-
3
- import reacton
4
- import reacton.ipyvuetify as v
5
-
6
- import solara
7
-
8
-
9
- @reacton.value_component(bool)
10
- def Checkbox(
11
- *,
12
- label=None,
13
- value: Union[bool, solara.Reactive[bool]] = True,
14
- on_value: Callable[[bool], None] = None,
15
- disabled=False,
16
- style: str = None,
17
- ):
18
- """A checkbox is a widget that allows the user to toggle a boolean state.
19
-
20
- Basic examples
21
-
22
- ```solara
23
- import solara
24
-
25
- turbo_boost = solara.reactive(True)
26
-
27
- @solara.component
28
- def Page():
29
- checkbox = solara.Checkbox(label="Turbo boost", value=turbo_boost)
30
- if turbo_boost.value:
31
- solara.Success("Turbo boost is on")
32
- else:
33
- solara.Warning("Turbo boost is off, you might want to turn it on")
34
- ```
35
-
36
-
37
- ## Arguments
38
-
39
- * `label`: The label to display next to the checkbox.
40
- * `value`: The current value of the checkbox (True or False).
41
- * `on_value`: A callback that is called when the checkbox is toggled.
42
- * `disabled`: If True, the checkbox is disabled and cannot be used.
43
- * `style`: A string of CSS styles to apply to the checkbox.
44
- """
45
- reactive_value = solara.use_reactive(value, on_value)
46
- del value, on_value
47
- children = []
48
- if label is not None:
49
- children = [label]
50
- return v.Checkbox(label=label, v_model=reactive_value.value, on_v_model=reactive_value.set, disabled=disabled, style_=style, children=children)
@@ -1,11 +0,0 @@
1
- import ipyvuetify as vy
2
- import solara
3
-
4
-
5
- class CodeHighlightCssWidget(vy.VuetifyTemplate):
6
- template_file = (__file__, "code_highlight_css.vue")
7
-
8
-
9
- @solara.component
10
- def CodeHighlightCss():
11
- return CodeHighlightCssWidget.element()
@@ -1,63 +0,0 @@
1
- <template>
2
- </template>
3
-
4
- <style id="solara-code-highlight">
5
-
6
- .solara-code-highlight__box {
7
- border: var(--jp-border-width, 1px) solid var(--jp-cell-editor-border-color, #e0e0e0);
8
- border-radius: 0;
9
- background: var(--jp-cell-editor-background, #f5f5f5);
10
- padding: 5px;
11
- }
12
-
13
- div.output_area .solara-code-highlight pre {
14
- padding: 0;
15
- }
16
-
17
- .solara-code-highlight .highlight .hll { background-color: var(--jp-cell-editor-active-background) }
18
- .solara-code-highlight .highlight {
19
- color: var(--jp-mirror-editor-variable-color);
20
- background: var(--jp-cell-editor-background);
21
- -webkit-font-smoothing: initial;
22
- }
23
- .solara-code-highlight .highlight .c { color: var(--jp-mirror-editor-comment-color, #408080FF); font-style: italic } /* Comment */
24
- .solara-code-highlight .highlight .err { color: var(--jp-mirror-editor-error-color, #FF0000FF) } /* Error */
25
- .solara-code-highlight .highlight .k { color: var(--jp-mirror-editor-keyword-color, #008000FF); font-weight: bold } /* Keyword */
26
- .solara-code-highlight .highlight .o { color: var(--jp-mirror-editor-operator-color, #AA22FFFF); font-weight: bold } /* Operator */
27
- .solara-code-highlight .highlight .p { color: var(--jp-mirror-editor-punctuation-color, #0055AAFF) } /* Punctuation */
28
- .solara-code-highlight .highlight .ch { color: var(--jp-mirror-editor-comment-color, #408080FF); font-style: italic } /* Comment.Hashbang */
29
- .solara-code-highlight .highlight .cm { color: var(--jp-mirror-editor-comment-color, #408080FF); font-style: italic } /* Comment.Multiline */
30
- .solara-code-highlight .highlight .cp { color: var(--jp-mirror-editor-comment-color, #408080FF); font-style: italic } /* Comment.Preproc */
31
- .solara-code-highlight .highlight .cpf { color: var(--jp-mirror-editor-comment-color, #408080FF); font-style: italic } /* Comment.PreprocFile */
32
- .solara-code-highlight .highlight .c1 { color: var(--jp-mirror-editor-comment-color, #408080FF); font-style: italic } /* Comment.Single */
33
- .solara-code-highlight .highlight .cs { color: var(--jp-mirror-editor-comment-color, #408080FF); font-style: italic } /* Comment.Special */
34
- .solara-code-highlight .highlight .kc { color: var(--jp-mirror-editor-keyword-color, #008000FF); font-weight: bold } /* Keyword.Constant */
35
- .solara-code-highlight .highlight .kd { color: var(--jp-mirror-editor-keyword-color, #008000FF); font-weight: bold } /* Keyword.Declaration */
36
- .solara-code-highlight .highlight .kn { color: var(--jp-mirror-editor-keyword-color, #008000FF); font-weight: bold } /* Keyword.Namespace */
37
- .solara-code-highlight .highlight .kp { color: var(--jp-mirror-editor-keyword-color, #008000FF); font-weight: bold } /* Keyword.Pseudo */
38
- .solara-code-highlight .highlight .kr { color: var(--jp-mirror-editor-keyword-color, #008000FF); font-weight: bold } /* Keyword.Reserved */
39
- .solara-code-highlight .highlight .kt { color: var(--jp-mirror-editor-keyword-color, #008000FF); font-weight: bold } /* Keyword.Type */
40
- .solara-code-highlight .highlight .m { color: var(--jp-mirror-editor-number-color, #008000FF) } /* Literal.Number */
41
- .solara-code-highlight .highlight .s { color: var(--jp-mirror-editor-string-color, #008000FF) } /* Literal.String */
42
- .solara-code-highlight .highlight .ow { color: var(--jp-mirror-editor-operator-color, #AA22FFFF); font-weight: bold } /* Operator.Word */
43
- .solara-code-highlight .highlight .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */
44
- .solara-code-highlight .highlight .mb { color: var(--jp-mirror-editor-number-color, #008000FF) } /* Literal.Number.Bin */
45
- .solara-code-highlight .highlight .mf { color: var(--jp-mirror-editor-number-color, #008000FF) } /* Literal.Number.Float */
46
- .solara-code-highlight .highlight .mh { color: var(--jp-mirror-editor-number-color, #008000FF) } /* Literal.Number.Hex */
47
- .solara-code-highlight .highlight .mi { color: var(--jp-mirror-editor-number-color, #008000FF) } /* Literal.Number.Integer */
48
- .solara-code-highlight .highlight .mo { color: var(--jp-mirror-editor-number-color, #008000FF) } /* Literal.Number.Oct */
49
- .solara-code-highlight .highlight .sa { color: var(--jp-mirror-editor-string-color, #BA2121FF) } /* Literal.String.Affix */
50
- .solara-code-highlight .highlight .sb { color: var(--jp-mirror-editor-string-color, #BA2121FF) } /* Literal.String.Backtick */
51
- .solara-code-highlight .highlight .sc { color: var(--jp-mirror-editor-string-color, #BA2121FF) } /* Literal.String.Char */
52
- .solara-code-highlight .highlight .dl { color: var(--jp-mirror-editor-string-color, #BA2121FF) } /* Literal.String.Delimiter */
53
- .solara-code-highlight .highlight .sd { color: var(--jp-mirror-editor-string-color, #BA2121FF) } /* Literal.String.Doc */
54
- .solara-code-highlight .highlight .s2 { color: var(--jp-mirror-editor-string-color, #BA2121FF) } /* Literal.String.Double */
55
- .solara-code-highlight .highlight .se { color: var(--jp-mirror-editor-string-color, #BA2121FF) } /* Literal.String.Escape */
56
- .solara-code-highlight .highlight .sh { color: var(--jp-mirror-editor-string-color, #BA2121FF) } /* Literal.String.Heredoc */
57
- .solara-code-highlight .highlight .si { color: var(--jp-mirror-editor-string-color, #BA2121FF) } /* Literal.String.Interpol */
58
- .solara-code-highlight .highlight .sx { color: var(--jp-mirror-editor-string-color, #BA2121FF) } /* Literal.String.Other */
59
- .solara-code-highlight .highlight .sr { color: var(--jp-mirror-editor-string-color, #BA2121FF) } /* Literal.String.Regex */
60
- .solara-code-highlight .highlight .s1 { color: var(--jp-mirror-editor-string-color, #BA2121FF) } /* Literal.String.Single */
61
- .solara-code-highlight .highlight .ss { color: var(--jp-mirror-editor-string-color, #BA2121FF) } /* Literal.String.Symbol */
62
- .solara-code-highlight .highlight .il { color: var(--jp-mirror-editor-number-color, #008000FF) } /* Literal.Number.Integer.Long */
63
- </style>
@@ -1,159 +0,0 @@
1
- import itertools
2
- from typing import Dict, List, Union
3
-
4
- import reacton.ipyvuetify as rv
5
-
6
- import solara
7
- from solara.util import _combine_classes
8
-
9
-
10
- def cycle(value):
11
- if value is None:
12
- return itertools.cycle([None])
13
- elif isinstance(value, int):
14
- return itertools.cycle([value])
15
- elif isinstance(value, (list, tuple)):
16
- return itertools.cycle(value)
17
- else:
18
- raise ValueError(f"Invalid value for columns: {value}, should be None, int, or list/tuple.")
19
-
20
-
21
- @solara.component
22
- def Columns(
23
- widths: List[Union[float, int]] = [1],
24
- wrap=True,
25
- gutters=True,
26
- gutters_dense=False,
27
- children=[],
28
- classes: List[str] = [],
29
- style: Union[str, Dict[str, str], None] = None,
30
- ):
31
- """Lays out children in columns, with relative widths specified as a list of floats or ints.
32
-
33
- Widths are relative to each other, so [1, 2, 1] will result in 1/4, 1/2, 1/4 width columns.
34
- Columns with a width of 0 will take up the minimal amount of space.
35
-
36
- If there are more children than widths, the width list will be cycled.
37
-
38
- ```python
39
- with solara.Columns([1, 2, 1]):
40
- solara.Text("I am on the left")
41
- with solara.Card("Middle"):
42
- ...
43
- with solara.Column():
44
- ...
45
- ```
46
-
47
- When three children are added to this component, they will be laid out in three columns,
48
- with the first and last column taking up 1/4 of the width, and the middle column taking up 1/2 of the width.
49
-
50
- ```solara
51
- import solara
52
-
53
- @solara.component
54
- def Page():
55
- with solara.Columns([0, 1, 2]):
56
- solara.Text("I am as small as possible")
57
- solara.Select("I stretch", values=["a", "b", "c"], value="a")
58
- solara.Select("I stretch twice the amount", values=["a", "b", "c"], value="a")
59
- ```
60
-
61
-
62
- # Arguments
63
-
64
- * `widths`: List of floats or ints, specifying the relative widths of the columns.
65
- * `wrap`: Whether to wrap the columns to the next row if there is not enough space available. This only happens when using widths of 0.
66
- * `gutters`: Whether to add gutters between the columns.
67
- * `gutters_dense`: Make gutters smaller.
68
- * `children`: List of children to be laid out in columns.
69
- * `style`: CSS style to apply to the top level element.
70
- * `classes`: List of CSS classes to be applied to the top level element.
71
-
72
- """
73
- class_ = _combine_classes([*(["flex-nowrap"] if not wrap else []), *classes])
74
- style_flat = solara.util._flatten_style(style)
75
- with rv.Row(class_=class_, no_gutters=not gutters, dense=gutters_dense, style_=style_flat) as main:
76
- for child, width in zip(children, cycle(widths)):
77
- # we add height: 100% because this will trigger a chain of height set if it is set on the parent
78
- # via the style. If we do not set the height, it will have no effect. Furthermore, we only have
79
- # a single child, so this cannot interfere with other siblings.
80
- with rv.Col(children=[child], style_=f"height: 100%; flex-grow: {width}; overflow: auto" if width != 0 else "flex-grow: 0"):
81
- pass
82
- return main
83
-
84
-
85
- @solara.component
86
- def ColumnsResponsive(
87
- default=None,
88
- small=None,
89
- medium=None,
90
- large=None,
91
- xlarge=None,
92
- children=[],
93
- wrap=True,
94
- gutters=True,
95
- gutters_dense=False,
96
- classes: List[str] = [],
97
- style: Union[str, Dict[str, str], None] = None,
98
- ):
99
- """Lay our children in columns, on a 12 point grid system that is responsive to screen size.
100
-
101
- If a single number is specified, or less values than children, the values will be cycled.
102
- The total width of this system is 12, so if you want to have 3 columns, each taking up 4 points, you would specify [4, 4, 4] or 4.
103
-
104
-
105
- ```python
106
- with ColumnsResponsive([4, 4, 4]):
107
- ...
108
- with ColumnsResponsive(4): # same effect
109
- ...
110
- ```
111
-
112
- If you want the first column to take up 4 points, and the second column to take up the remaining 8 points, you would specify [4, 8].
113
-
114
- ```python
115
- with ColumnsResponsive([4, 8]):
116
- ...
117
- ```
118
-
119
- If you want your columns to be full width on large screen, and next to each other on larger screens.
120
-
121
- ```python
122
- with ColumnsResponsive(12, large=[4, 8]):
123
- ...
124
- ```
125
-
126
- # Arguments
127
-
128
- * default: Width of column for >= 0 px.
129
- * small: Width of column for >= 600 px.
130
- * medium: Width of column >= 960 px.
131
- * large: Width of column for >= 1264 px.
132
- * xlarge: Width of column for >= 1904 px.
133
-
134
- """
135
-
136
- def cycle(value):
137
- if value is None:
138
- return itertools.cycle([None])
139
- elif isinstance(value, int):
140
- return itertools.cycle([value])
141
- elif isinstance(value, (list, tuple)):
142
- return itertools.cycle(value)
143
- else:
144
- raise ValueError(f"Invalid value for columns: {value}, should be None, int, or list/tuple.")
145
-
146
- class_ = _combine_classes([*(["flex-nowrap"] if not wrap else []), *classes])
147
- style_flat = solara.util._flatten_style(style)
148
- with rv.Row(class_=class_ if not wrap else "", style_=style_flat, no_gutters=not gutters, dense=gutters_dense) as main:
149
- for child, xsmall, small, medium, large, xlarge in zip(children, cycle(default), cycle(small), cycle(medium), cycle(large), cycle(xlarge)):
150
- with rv.Col(
151
- cols=xsmall,
152
- sm=small,
153
- md=medium,
154
- lg=large,
155
- xl=xlarge,
156
- children=[child],
157
- ):
158
- pass
159
- return main
@@ -1,109 +0,0 @@
1
- import inspect
2
- from typing import Any, Callable, Dict, Type
3
-
4
- import ipyvue as vue
5
- import ipyvuetify as v
6
- import ipywidgets as widgets
7
- import traitlets
8
- import typing_extensions
9
-
10
- import solara
11
-
12
- P = typing_extensions.ParamSpec("P")
13
-
14
-
15
- def _widget_from_signature(classname, base_class: Type[widgets.Widget], func: Callable[..., None], event_prefix: str) -> Type[widgets.Widget]:
16
- classprops: Dict[str, Any] = {}
17
-
18
- parameters = inspect.signature(func).parameters
19
- for name, param in parameters.items():
20
- if name.startswith("event_"):
21
- event_name = name[6:]
22
-
23
- def event_handler(self, data, buffers=None, event_name=event_name):
24
- callback = self._event_callbacks.get(event_name)
25
- if callback:
26
- if buffers:
27
- callback(data, buffers)
28
- else:
29
- callback(data)
30
-
31
- classprops[f"vue_{event_name}"] = event_handler
32
- if name.startswith("on_") and name[3:] in parameters:
33
- # callback, will be handled by reacton
34
- continue
35
- if param.default == inspect.Parameter.empty:
36
- trait = traitlets.Any()
37
- else:
38
- trait = traitlets.Any(default_value=param.default)
39
- classprops[name] = trait.tag(sync=True, **widgets.widget_serialization)
40
- # maps event_foo to a callable
41
- classprops["_event_callbacks"] = traitlets.Dict(default_value={})
42
-
43
- widget_class = type(classname, (base_class,), classprops)
44
- return widget_class
45
-
46
-
47
- def _widget_vue(vue_path: str, vuetify=True) -> Callable[[Callable[P, None]], Type[v.VuetifyTemplate]]:
48
- def decorator(func: Callable[P, None]):
49
- class VuetifyWidgetSolara(v.VuetifyTemplate):
50
- template_file = (inspect.getfile(func), vue_path)
51
-
52
- class VueWidgetSolara(vue.VueTemplate):
53
- template_file = (inspect.getfile(func), vue_path)
54
-
55
- base_class = VuetifyWidgetSolara if vuetify else VueWidgetSolara
56
- widget_class = _widget_from_signature("VueWidgetSolaraSub", base_class, func, "vue_")
57
-
58
- return widget_class
59
-
60
- return decorator
61
-
62
-
63
- def component_vue(vue_path: str, vuetify=True) -> Callable[[Callable[P, None]], Callable[P, solara.Element]]:
64
- """Decorator to create a component backed by a Vue template.
65
-
66
- Although many components can be made from the Python side, sometimes it is easier to write components using Vue directly.
67
- It can also be beneficial for performance, since instead of creating many widgets from the Python side we only send data to
68
- the frontend. If event handling is also done on the frontend, this reduces latency and makes you app feel much smoother.
69
-
70
-
71
- All arguments of the function are exposed as Vue properties. Argument pairs of the form `foo`, and `on_foo`
72
- are assumed by refer to the same vue property, with `on_foo` being the event handler when `foo` changes from
73
- the vue template.
74
-
75
- Arguments or the form `event_foo` should be callbacks that can be called from the vue template. They are
76
- available as the function `foo` in the vue template.
77
-
78
- [See the vue v2 api](https://v2.vuejs.org/v2/api/) for more information on how to use Vue, like `watch`,
79
- `methods` and lifecycle hooks such as `mounted` and `destroyed`.
80
-
81
- See the [Vue component example](/documentation/examples/general/vue_component) for an example of how to use this decorator.
82
-
83
- ## Arguments
84
-
85
- * `vue_path`: The path to the Vue template file.
86
- * `vuetify`: Whether the Vue template uses Vuetify components.
87
-
88
- """
89
-
90
- def decorator(func: Callable[P, None]):
91
- VueWidgetSolaraSub = _widget_vue(vue_path, vuetify=vuetify)(func)
92
-
93
- def wrapper(*args, **kwargs):
94
- event_callbacks = {}
95
- kwargs = kwargs.copy()
96
- # take out all events named like event_foo and put them in a separate dict
97
- for name in list(kwargs):
98
- if name.startswith("event_"):
99
- event_callbacks[name[6:]] = kwargs.pop(name)
100
- if event_callbacks:
101
- kwargs["_event_callbacks"] = event_callbacks
102
- return VueWidgetSolaraSub.element(*args, **kwargs) # type: ignore
103
-
104
- return wrapper
105
-
106
- return decorator
107
-
108
-
109
- _component_vue = component_vue