solara 1.29.1__tar.gz → 1.30.1__tar.gz

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 (578) hide show
  1. {solara-1.29.1 → solara-1.30.1}/PKG-INFO +8 -7
  2. {solara-1.29.1 → solara-1.30.1}/README.md +4 -4
  3. {solara-1.29.1 → solara-1.30.1}/pyproject.toml +1 -1
  4. {solara-1.29.1 → solara-1.30.1}/solara/__init__.py +5 -5
  5. {solara-1.29.1 → solara-1.30.1}/solara/__main__.py +6 -2
  6. {solara-1.29.1 → solara-1.30.1}/solara/autorouting.py +88 -56
  7. {solara-1.29.1 → solara-1.30.1}/solara/cache.py +2 -2
  8. {solara-1.29.1 → solara-1.30.1}/solara/checks.html +1 -1
  9. {solara-1.29.1 → solara-1.30.1}/solara/components/__init__.py +1 -1
  10. {solara-1.29.1 → solara-1.30.1}/solara/components/applayout.py +5 -5
  11. {solara-1.29.1 → solara-1.30.1}/solara/components/button.py +4 -4
  12. {solara-1.29.1 → solara-1.30.1}/solara/components/card.py +1 -2
  13. {solara-1.29.1 → solara-1.30.1}/solara/components/component_vue.py +9 -8
  14. {solara-1.29.1 → solara-1.30.1}/solara/components/cross_filter.py +6 -7
  15. {solara-1.29.1 → solara-1.30.1}/solara/components/datatable.py +2 -3
  16. {solara-1.29.1 → solara-1.30.1}/solara/components/figure_altair.py +1 -1
  17. {solara-1.29.1 → solara-1.30.1}/solara/components/file_download.py +2 -2
  18. {solara-1.29.1 → solara-1.30.1}/solara/components/file_drop.py +76 -33
  19. {solara-1.29.1 → solara-1.30.1}/solara/components/file_drop.vue +24 -10
  20. {solara-1.29.1 → solara-1.30.1}/solara/components/head.py +1 -2
  21. {solara-1.29.1 → solara-1.30.1}/solara/components/head_tag.py +2 -3
  22. {solara-1.29.1 → solara-1.30.1}/solara/components/image.py +1 -1
  23. {solara-1.29.1 → solara-1.30.1}/solara/components/link.py +3 -4
  24. {solara-1.29.1 → solara-1.30.1}/solara/components/meta.py +1 -1
  25. {solara-1.29.1 → solara-1.30.1}/solara/components/misc.py +5 -9
  26. {solara-1.29.1 → solara-1.30.1}/solara/datatypes.py +2 -2
  27. {solara-1.29.1 → solara-1.30.1}/solara/hooks/use_reactive.py +2 -2
  28. {solara-1.29.1 → solara-1.30.1}/solara/lab/components/confirmation_dialog.py +1 -1
  29. {solara-1.29.1 → solara-1.30.1}/solara/lab/components/tabs.py +6 -6
  30. {solara-1.29.1 → solara-1.30.1}/solara/reactive.py +1 -1
  31. {solara-1.29.1 → solara-1.30.1}/solara/routing.py +9 -8
  32. {solara-1.29.1 → solara-1.30.1}/solara/scope/__init__.py +3 -2
  33. {solara-1.29.1 → solara-1.30.1}/solara/server/app.py +44 -1
  34. {solara-1.29.1 → solara-1.30.1}/solara/server/assets/style.css +6 -0
  35. solara-1.30.1/solara/server/esm.py +69 -0
  36. {solara-1.29.1 → solara-1.30.1}/solara/server/kernel_context.py +78 -7
  37. {solara-1.29.1 → solara-1.30.1}/solara/server/patch.py +3 -0
  38. {solara-1.29.1 → solara-1.30.1}/solara/server/server.py +3 -3
  39. {solara-1.29.1 → solara-1.30.1}/solara/server/settings.py +1 -0
  40. {solara-1.29.1 → solara-1.30.1}/solara/server/starlette.py +66 -33
  41. {solara-1.29.1 → solara-1.30.1}/solara/server/static/solara_bootstrap.py +1 -1
  42. {solara-1.29.1 → solara-1.30.1}/solara/server/templates/solara.html.j2 +62 -42
  43. {solara-1.29.1 → solara-1.30.1}/solara/tasks.py +1 -6
  44. {solara-1.29.1 → solara-1.30.1}/solara/util.py +23 -1
  45. {solara-1.29.1 → solara-1.30.1}/solara/website/assets/custom.css +56 -0
  46. solara-1.30.1/solara/website/components/__init__.py +5 -0
  47. solara-1.30.1/solara/website/components/algolia_api.vue +157 -0
  48. solara-1.30.1/solara/website/components/docs.py +118 -0
  49. {solara-1.29.1 → solara-1.30.1}/solara/website/components/header.py +20 -10
  50. {solara-1.29.1 → solara-1.30.1}/solara/website/components/hero.py +1 -1
  51. solara-1.30.1/solara/website/components/markdown.py +30 -0
  52. {solara-1.29.1 → solara-1.30.1}/solara/website/pages/__init__.py +234 -20
  53. {solara-1.29.1 → solara-1.30.1}/solara/website/pages/apps/jupyter-dashboard-1.py +1 -1
  54. {solara-1.29.1 → solara-1.30.1}/solara/website/pages/apps/multipage/__init__.py +1 -1
  55. {solara-1.29.1 → solara-1.30.1}/solara/website/pages/apps/multipage/page2.py +1 -1
  56. {solara-1.29.1 → solara-1.30.1}/solara/website/pages/apps/scatter.py +21 -7
  57. solara-1.30.1/solara/website/pages/changelog/__init__.py +8 -0
  58. solara-1.29.1/solara/website/pages/docs/content/95-changelog.md → solara-1.30.1/solara/website/pages/changelog/changelog.md +43 -2
  59. solara-1.30.1/solara/website/pages/contact/__init__.py +8 -0
  60. solara-1.30.1/solara/website/pages/documentation/__init__.py +184 -0
  61. {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/advanced}/__init__.py +2 -2
  62. solara-1.30.1/solara/website/pages/documentation/advanced/content/00-overview.md +1 -0
  63. {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/advanced}/content/10-howto/00-overview.md +5 -0
  64. solara-1.29.1/solara/website/pages/docs/content/10-howto/20-multipage.md → solara-1.30.1/solara/website/pages/documentation/advanced/content/10-howto/10-multipage.md +9 -5
  65. solara-1.29.1/solara/website/pages/docs/content/10-howto/30-layout.md → solara-1.30.1/solara/website/pages/documentation/advanced/content/10-howto/20-layout.md +26 -21
  66. solara-1.29.1/solara/website/pages/docs/content/10-howto/50-testing.md → solara-1.30.1/solara/website/pages/documentation/advanced/content/10-howto/30-testing.md +5 -0
  67. solara-1.29.1/solara/website/pages/docs/content/10-howto/51-debugging.md → solara-1.30.1/solara/website/pages/documentation/advanced/content/10-howto/31-debugging.md +4 -1
  68. solara-1.29.1/solara/website/pages/docs/content/10-howto/80-embed.md → solara-1.30.1/solara/website/pages/documentation/advanced/content/10-howto/40-embed.md +7 -1
  69. solara-1.29.1/solara/website/pages/docs/content/10-howto/ipywidget_libraries.md → solara-1.30.1/solara/website/pages/documentation/advanced/content/10-howto/50-ipywidget_libraries.md +4 -0
  70. solara-1.30.1/solara/website/pages/documentation/advanced/content/20-understanding/00-introduction.md +10 -0
  71. {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/advanced}/content/20-understanding/05-ipywidgets.md +5 -0
  72. {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/advanced}/content/20-understanding/06-ipyvuetify.md +5 -1
  73. {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/advanced}/content/20-understanding/10-reacton.md +4 -0
  74. {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/advanced}/content/20-understanding/12-reacton-basics.md +5 -1
  75. {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/advanced}/content/20-understanding/15-anatomy.md +6 -2
  76. solara-1.30.1/solara/website/pages/documentation/advanced/content/20-understanding/17-rules-of-hooks.md +7 -0
  77. {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/advanced}/content/20-understanding/18-containers.md +9 -3
  78. {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/advanced}/content/20-understanding/20-solara.md +5 -0
  79. {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/advanced}/content/20-understanding/40-routing.md +13 -9
  80. {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/advanced}/content/20-understanding/50-solara-server.md +6 -1
  81. {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/advanced}/content/20-understanding/60-voila.md +5 -0
  82. {solara-1.29.1/solara/website/pages/docs/content/50-enterprise → solara-1.30.1/solara/website/pages/documentation/advanced/content/30-enterprise}/10-oauth.md +7 -3
  83. {solara-1.29.1/solara/website/pages/docs/content/10-howto → solara-1.30.1/solara/website/pages/documentation/advanced/content/40-development}/01-contribute.md +9 -5
  84. {solara-1.29.1/solara/website/pages/docs/content/90-development → solara-1.30.1/solara/website/pages/documentation/advanced/content/40-development}/10-setup.md +6 -2
  85. solara-1.30.1/solara/website/pages/documentation/api/__init__.py +19 -0
  86. solara-1.30.1/solara/website/pages/documentation/api/cross_filter/__init__.py +9 -0
  87. solara-1.30.1/solara/website/pages/documentation/api/hooks/__init__.py +9 -0
  88. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_effect.md +3 -3
  89. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_effect.py +2 -1
  90. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_memo.md +2 -2
  91. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_memo.py +2 -1
  92. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_reactive.py +1 -2
  93. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_state.py +1 -2
  94. solara-1.30.1/solara/website/pages/documentation/api/routing/__init__.py +9 -0
  95. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/routing}/generate_routes.py +1 -2
  96. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/routing}/generate_routes_directory.py +1 -2
  97. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/routing}/use_route.py +2 -2
  98. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/routing}/use_router.py +1 -2
  99. solara-1.30.1/solara/website/pages/documentation/api/utilities/__init__.py +9 -0
  100. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/utilities}/component_vue.py +1 -2
  101. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/utilities}/computed.py +2 -2
  102. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/utilities}/display.py +1 -2
  103. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/utilities}/get_kernel_id.py +2 -2
  104. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/utilities}/get_session_id.py +2 -2
  105. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/utilities}/on_kernel_start.py +9 -3
  106. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/utilities}/reactive.py +1 -2
  107. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/utilities}/widget.py +2 -2
  108. solara-1.30.1/solara/website/pages/documentation/components/__init__.py +12 -0
  109. solara-1.30.1/solara/website/pages/documentation/components/advanced/__init__.py +9 -0
  110. solara-1.30.1/solara/website/pages/documentation/components/data/__init__.py +9 -0
  111. solara-1.30.1/solara/website/pages/documentation/components/enterprise/__init__.py +9 -0
  112. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/enterprise}/avatar.py +1 -2
  113. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/enterprise}/avatar_menu.py +1 -2
  114. solara-1.30.1/solara/website/pages/documentation/components/input/__init__.py +9 -0
  115. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/input}/checkbox.py +1 -2
  116. solara-1.30.1/solara/website/pages/documentation/components/input/file_drop.py +75 -0
  117. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/input}/input.py +1 -2
  118. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/input}/select.py +1 -2
  119. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/input}/slider.py +1 -2
  120. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/input}/switch.py +1 -2
  121. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/input}/togglebuttons.py +1 -2
  122. solara-1.30.1/solara/website/pages/documentation/components/lab/__init__.py +9 -0
  123. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/lab}/chat.py +2 -3
  124. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/lab}/cookies_headers.py +1 -1
  125. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/lab}/input_date.py +1 -2
  126. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/lab}/menu.py +1 -2
  127. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/lab}/task.py +1 -2
  128. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/lab}/theming.py +1 -2
  129. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/lab}/use_task.py +1 -2
  130. solara-1.30.1/solara/website/pages/documentation/components/layout/__init__.py +9 -0
  131. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/app_bar.py +1 -2
  132. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/app_bar_title.py +1 -2
  133. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/card.py +1 -2
  134. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/card_actions.py +1 -2
  135. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/griddraggable.py +1 -1
  136. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/gridfixed.py +1 -1
  137. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/hbox.py +1 -1
  138. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/vbox.py +1 -1
  139. solara-1.30.1/solara/website/pages/documentation/components/output/__init__.py +9 -0
  140. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/output}/file_download.py +1 -2
  141. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/output}/image.py +1 -2
  142. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/output}/tooltip.py +1 -2
  143. solara-1.30.1/solara/website/pages/documentation/components/page/__init__.py +9 -0
  144. solara-1.30.1/solara/website/pages/documentation/components/status/__init__.py +9 -0
  145. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/status}/error.py +3 -3
  146. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/status}/info.py +3 -3
  147. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/status}/progress.py +1 -2
  148. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/status}/spinner.py +1 -2
  149. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/status}/success.py +3 -3
  150. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/status}/warning.py +3 -3
  151. solara-1.30.1/solara/website/pages/documentation/components/viz/__init__.py +9 -0
  152. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/viz}/plotly.py +1 -0
  153. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/__init__.py +3 -43
  154. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/general/custom_storage.py +1 -1
  155. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/general/deploy_model.py +3 -3
  156. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/general/login_oauth.py +1 -1
  157. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/general/vue_component.py +1 -2
  158. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/libraries/altair.py +2 -3
  159. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/libraries/ipyleaflet_advanced.py +1 -1
  160. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/utilities/countdown_timer.py +1 -1
  161. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/visualization/plotly.py +1 -2
  162. solara-1.30.1/solara/website/pages/documentation/faq/__init__.py +12 -0
  163. {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/faq}/content/99-faq.md +4 -1
  164. solara-1.30.1/solara/website/pages/documentation/getting_started/__init__.py +9 -0
  165. solara-1.29.1/solara/website/pages/docs/content/03-quickstart.md → solara-1.30.1/solara/website/pages/documentation/getting_started/content/00-quickstart.md +7 -2
  166. solara-1.29.1/solara/website/pages/docs/content/00-introduction.md → solara-1.30.1/solara/website/pages/documentation/getting_started/content/01-introduction.md +20 -16
  167. {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/getting_started}/content/02-installing.md +5 -1
  168. solara-1.30.1/solara/website/pages/documentation/getting_started/content/04-tutorials/00-overview.md +14 -0
  169. {solara-1.29.1/solara/website/pages/docs/content/04-tutorial → solara-1.30.1/solara/website/pages/documentation/getting_started/content/04-tutorials}/20-web-app.md +9 -4
  170. {solara-1.29.1/solara/website/pages/docs/content/04-tutorial → solara-1.30.1/solara/website/pages/documentation/getting_started/content/04-tutorials}/30-ipywidgets.md +13 -9
  171. {solara-1.29.1/solara/website/pages/docs/content/04-tutorial → solara-1.30.1/solara/website/pages/documentation/getting_started/content/04-tutorials}/40-streamlit.md +17 -12
  172. {solara-1.29.1/solara/website/pages/docs/content/04-tutorial → solara-1.30.1/solara/website/pages/documentation/getting_started/content/04-tutorials}/50-dash.md +7 -3
  173. {solara-1.29.1/solara/website/pages/docs/content/04-tutorial → solara-1.30.1/solara/website/pages/documentation/getting_started/content/04-tutorials}/_data_science.ipynb +5 -5
  174. solara-1.30.1/solara/website/pages/documentation/getting_started/content/05-fundamentals/00-overview.md +11 -0
  175. {solara-1.29.1/solara/website/pages/docs/content/07-fundamentals → solara-1.30.1/solara/website/pages/documentation/getting_started/content/05-fundamentals}/10-components.md +7 -2
  176. {solara-1.29.1/solara/website/pages/docs/content/07-fundamentals → solara-1.30.1/solara/website/pages/documentation/getting_started/content/05-fundamentals}/50-state-management.md +8 -3
  177. solara-1.30.1/solara/website/pages/documentation/getting_started/content/06-reference/00-overview.md +3 -0
  178. {solara-1.29.1/solara/website/pages/docs/content/15-reference → solara-1.30.1/solara/website/pages/documentation/getting_started/content/06-reference}/40-static_files.md +4 -0
  179. {solara-1.29.1/solara/website/pages/docs/content/15-reference → solara-1.30.1/solara/website/pages/documentation/getting_started/content/06-reference}/41-asset-files.md +5 -1
  180. {solara-1.29.1/solara/website/pages/docs/content/15-reference → solara-1.30.1/solara/website/pages/documentation/getting_started/content/06-reference}/60-static-site-generation.md +5 -1
  181. {solara-1.29.1/solara/website/pages/docs/content/15-reference → solara-1.30.1/solara/website/pages/documentation/getting_started/content/06-reference}/70-search.md +5 -1
  182. {solara-1.29.1/solara/website/pages/docs/content/15-reference → solara-1.30.1/solara/website/pages/documentation/getting_started/content/06-reference}/80-reloading.md +7 -3
  183. {solara-1.29.1/solara/website/pages/docs/content/15-reference → solara-1.30.1/solara/website/pages/documentation/getting_started/content/06-reference}/90-notebook-support.md +4 -1
  184. {solara-1.29.1/solara/website/pages/docs/content/15-reference → solara-1.30.1/solara/website/pages/documentation/getting_started/content/06-reference}/95-caching.md +6 -1
  185. solara-1.30.1/solara/website/pages/documentation/getting_started/content/07-deploying/00-overview.md +7 -0
  186. {solara-1.29.1/solara/website/pages/docs/content/30-deploying → solara-1.30.1/solara/website/pages/documentation/getting_started/content/07-deploying}/10-self-hosted.md +7 -3
  187. {solara-1.29.1/solara/website/pages/docs/content/30-deploying → solara-1.30.1/solara/website/pages/documentation/getting_started/content/07-deploying}/20-cloud-hosted.md +5 -1
  188. solara-1.30.1/solara/website/pages/documentation/getting_started/content/80-what-is-lab.md +7 -0
  189. {solara-1.29.1/solara/website/pages/docs → solara-1.30.1/solara/website/pages/documentation/getting_started}/content/90-troubleshoot.md +4 -0
  190. {solara-1.29.1 → solara-1.30.1}/solara/website/pages/showcase/__init__.py +1 -1
  191. {solara-1.29.1 → solara-1.30.1}/solara/website/pages/showcase/domino_code_assist.py +1 -1
  192. {solara-1.29.1 → solara-1.30.1}/solara/website/pages/showcase/solara_dev.py +1 -1
  193. solara-1.30.1/solara/website/public/social/discord.svg +1 -0
  194. solara-1.30.1/solara/website/public/social/github.svg +1 -0
  195. solara-1.30.1/solara/website/public/social/twitter.svg +3 -0
  196. {solara-1.29.1 → solara-1.30.1}/tests/integration/api_test.py +6 -6
  197. {solara-1.29.1 → solara-1.30.1}/tests/integration/enterprise/oauth_test.py +4 -4
  198. {solara-1.29.1 → solara-1.30.1}/tests/integration/file_download_test.py +1 -1
  199. {solara-1.29.1 → solara-1.30.1}/tests/integration/router_test.py +3 -3
  200. {solara-1.29.1 → solara-1.30.1}/tests/integration/server_test.py +61 -1
  201. {solara-1.29.1 → solara-1.30.1}/tests/unit/autorouting_test.py +64 -11
  202. solara-1.30.1/tests/unit/reload_test.py +56 -0
  203. solara-1.30.1/tests/unit/solara_test_apps/kernel_start.py +14 -0
  204. solara-1.30.1/tests/unit/solara_test_apps/multipage/01-home.py +3 -0
  205. solara-1.30.1/tests/unit/solara_test_apps/multipage/02-my_fruit.py +4 -0
  206. solara-1.30.1/tests/unit/solara_test_apps/multipage/04-a_directory/01-not-an-app.py +3 -0
  207. solara-1.30.1/tests/unit/solara_test_apps/single_file_routes.py +25 -0
  208. solara-1.29.1/solara/server/esm.py +0 -45
  209. solara-1.29.1/solara/website/components/__init__.py +0 -4
  210. solara-1.29.1/solara/website/pages/api/__init__.py +0 -292
  211. solara-1.29.1/solara/website/pages/api/default_layout.py +0 -16
  212. solara-1.29.1/solara/website/pages/api/file_drop.py +0 -36
  213. solara-1.29.1/solara/website/pages/docs/content/04-tutorial/00-overview.md +0 -9
  214. solara-1.29.1/solara/website/pages/docs/content/07-fundamentals/00-overview.md +0 -7
  215. solara-1.29.1/solara/website/pages/docs/content/15-reference/00-overview.md +0 -6
  216. solara-1.29.1/solara/website/pages/docs/content/20-understanding/00-introduction.md +0 -4
  217. solara-1.29.1/solara/website/pages/docs/content/20-understanding/17-rules-of-hooks.md +0 -3
  218. solara-1.29.1/solara/website/pages/docs/content/30-deploying/00-overview.md +0 -3
  219. solara-1.29.1/solara/website/pages/docs/content/lab/00-what-is-lab.md +0 -3
  220. solara-1.29.1/tests/unit/solara_test_apps/multipage/01-home.py +0 -3
  221. solara-1.29.1/tests/unit/solara_test_apps/multipage/02-my_fruit.py +0 -4
  222. solara-1.29.1/tests/unit/solara_test_apps/multipage/04-a_directory/01-not-an-app.py +0 -3
  223. {solara-1.29.1 → solara-1.30.1}/.gitignore +0 -0
  224. {solara-1.29.1 → solara-1.30.1}/LICENSE +0 -0
  225. {solara-1.29.1 → solara-1.30.1}/prefix/etc/jupyter/jupyter_notebook_config.d/solara.json +0 -0
  226. {solara-1.29.1 → solara-1.30.1}/prefix/etc/jupyter/jupyter_server_config.d/solara.json +0 -0
  227. {solara-1.29.1 → solara-1.30.1}/solara/alias.py +0 -0
  228. {solara-1.29.1 → solara-1.30.1}/solara/checks.py +0 -0
  229. {solara-1.29.1 → solara-1.30.1}/solara/comm.py +0 -0
  230. {solara-1.29.1 → solara-1.30.1}/solara/components/alert.py +0 -0
  231. {solara-1.29.1 → solara-1.30.1}/solara/components/checkbox.py +0 -0
  232. {solara-1.29.1 → solara-1.30.1}/solara/components/code_highlight_css.py +0 -0
  233. {solara-1.29.1 → solara-1.30.1}/solara/components/code_highlight_css.vue +0 -0
  234. {solara-1.29.1 → solara-1.30.1}/solara/components/columns.py +0 -0
  235. {solara-1.29.1 → solara-1.30.1}/solara/components/dataframe.py +0 -0
  236. {solara-1.29.1 → solara-1.30.1}/solara/components/datatable.vue +0 -0
  237. {solara-1.29.1 → solara-1.30.1}/solara/components/details.py +0 -0
  238. {solara-1.29.1 → solara-1.30.1}/solara/components/download.vue +0 -0
  239. {solara-1.29.1 → solara-1.30.1}/solara/components/echarts.py +0 -0
  240. {solara-1.29.1 → solara-1.30.1}/solara/components/echarts.vue +0 -0
  241. {solara-1.29.1 → solara-1.30.1}/solara/components/file_browser.py +0 -0
  242. {solara-1.29.1 → solara-1.30.1}/solara/components/file_list_widget.vue +0 -0
  243. {solara-1.29.1 → solara-1.30.1}/solara/components/head_tag.vue +0 -0
  244. {solara-1.29.1 → solara-1.30.1}/solara/components/input.py +0 -0
  245. {solara-1.29.1 → solara-1.30.1}/solara/components/markdown.py +0 -0
  246. {solara-1.29.1 → solara-1.30.1}/solara/components/markdown_editor.py +0 -0
  247. {solara-1.29.1 → solara-1.30.1}/solara/components/markdown_editor.vue +0 -0
  248. {solara-1.29.1 → solara-1.30.1}/solara/components/matplotlib.py +0 -0
  249. {solara-1.29.1 → solara-1.30.1}/solara/components/pivot_table.py +0 -0
  250. {solara-1.29.1 → solara-1.30.1}/solara/components/pivot_table.vue +0 -0
  251. {solara-1.29.1 → solara-1.30.1}/solara/components/progress.py +0 -0
  252. {solara-1.29.1 → solara-1.30.1}/solara/components/select.py +0 -0
  253. {solara-1.29.1 → solara-1.30.1}/solara/components/select.vue +0 -0
  254. {solara-1.29.1 → solara-1.30.1}/solara/components/slider.py +0 -0
  255. {solara-1.29.1 → solara-1.30.1}/solara/components/slider_date.vue +0 -0
  256. {solara-1.29.1 → solara-1.30.1}/solara/components/spinner-solara.vue +0 -0
  257. {solara-1.29.1 → solara-1.30.1}/solara/components/spinner.py +0 -0
  258. {solara-1.29.1 → solara-1.30.1}/solara/components/sql_code.py +0 -0
  259. {solara-1.29.1 → solara-1.30.1}/solara/components/sql_code.vue +0 -0
  260. {solara-1.29.1 → solara-1.30.1}/solara/components/style.py +0 -0
  261. {solara-1.29.1 → solara-1.30.1}/solara/components/switch.py +0 -0
  262. {solara-1.29.1 → solara-1.30.1}/solara/components/tab_navigation.py +0 -0
  263. {solara-1.29.1 → solara-1.30.1}/solara/components/title.py +0 -0
  264. {solara-1.29.1 → solara-1.30.1}/solara/components/title.vue +0 -0
  265. {solara-1.29.1 → solara-1.30.1}/solara/components/togglebuttons.py +0 -0
  266. {solara-1.29.1 → solara-1.30.1}/solara/components/tooltip.py +0 -0
  267. {solara-1.29.1 → solara-1.30.1}/solara/express.py +0 -0
  268. {solara-1.29.1 → solara-1.30.1}/solara/hooks/__init__.py +0 -0
  269. {solara-1.29.1 → solara-1.30.1}/solara/hooks/dataframe.py +0 -0
  270. {solara-1.29.1 → solara-1.30.1}/solara/hooks/misc.py +0 -0
  271. {solara-1.29.1 → solara-1.30.1}/solara/hooks/use_thread.py +0 -0
  272. {solara-1.29.1 → solara-1.30.1}/solara/kitchensink.py +0 -0
  273. {solara-1.29.1 → solara-1.30.1}/solara/lab/__init__.py +0 -0
  274. {solara-1.29.1 → solara-1.30.1}/solara/lab/components/__init__.py +0 -0
  275. {solara-1.29.1 → solara-1.30.1}/solara/lab/components/chat.py +0 -0
  276. {solara-1.29.1 → solara-1.30.1}/solara/lab/components/cross_filter.py +0 -0
  277. {solara-1.29.1 → solara-1.30.1}/solara/lab/components/input_date.py +0 -0
  278. {solara-1.29.1 → solara-1.30.1}/solara/lab/components/menu.py +0 -0
  279. {solara-1.29.1 → solara-1.30.1}/solara/lab/components/menu.vue +0 -0
  280. {solara-1.29.1 → solara-1.30.1}/solara/lab/components/theming.py +0 -0
  281. {solara-1.29.1 → solara-1.30.1}/solara/lab/components/theming.vue +0 -0
  282. {solara-1.29.1 → solara-1.30.1}/solara/lab/hooks/__init__.py +0 -0
  283. {solara-1.29.1 → solara-1.30.1}/solara/lab/hooks/dataframe.py +0 -0
  284. {solara-1.29.1 → solara-1.30.1}/solara/lab/toestand.py +0 -0
  285. {solara-1.29.1 → solara-1.30.1}/solara/lab/utils/__init__.py +0 -0
  286. {solara-1.29.1 → solara-1.30.1}/solara/lab/utils/cookies.py +0 -0
  287. {solara-1.29.1 → solara-1.30.1}/solara/lab/utils/dataframe.py +0 -0
  288. {solara-1.29.1 → solara-1.30.1}/solara/lab/utils/headers.py +0 -0
  289. {solara-1.29.1 → solara-1.30.1}/solara/layout.py +0 -0
  290. {solara-1.29.1 → solara-1.30.1}/solara/minisettings.py +0 -0
  291. {solara-1.29.1 → solara-1.30.1}/solara/py.typed +0 -0
  292. {solara-1.29.1 → solara-1.30.1}/solara/scope/types.py +0 -0
  293. {solara-1.29.1 → solara-1.30.1}/solara/server/__init__.py +0 -0
  294. {solara-1.29.1 → solara-1.30.1}/solara/server/assets/custom.css +0 -0
  295. {solara-1.29.1 → solara-1.30.1}/solara/server/assets/custom.js +0 -0
  296. {solara-1.29.1 → solara-1.30.1}/solara/server/assets/favicon.png +0 -0
  297. {solara-1.29.1 → solara-1.30.1}/solara/server/assets/favicon.svg +0 -0
  298. {solara-1.29.1 → solara-1.30.1}/solara/server/assets/theme-dark.css +0 -0
  299. {solara-1.29.1 → solara-1.30.1}/solara/server/assets/theme-light.css +0 -0
  300. {solara-1.29.1 → solara-1.30.1}/solara/server/assets/theme.js +0 -0
  301. {solara-1.29.1 → solara-1.30.1}/solara/server/cdn_helper.py +0 -0
  302. {solara-1.29.1 → solara-1.30.1}/solara/server/fastapi.py +0 -0
  303. {solara-1.29.1 → solara-1.30.1}/solara/server/flask.py +0 -0
  304. {solara-1.29.1 → solara-1.30.1}/solara/server/jupyter/__init__.py +0 -0
  305. {solara-1.29.1 → solara-1.30.1}/solara/server/jupyter/cdn_handler.py +0 -0
  306. {solara-1.29.1 → solara-1.30.1}/solara/server/jupyter/server_extension.py +0 -0
  307. {solara-1.29.1 → solara-1.30.1}/solara/server/jupytertools.py +0 -0
  308. {solara-1.29.1 → solara-1.30.1}/solara/server/kernel.py +0 -0
  309. {solara-1.29.1 → solara-1.30.1}/solara/server/reload.py +2 -2
  310. {solara-1.29.1 → solara-1.30.1}/solara/server/shell.py +0 -0
  311. {solara-1.29.1 → solara-1.30.1}/solara/server/static/ansi.js +0 -0
  312. {solara-1.29.1 → solara-1.30.1}/solara/server/static/highlight-dark.css +0 -0
  313. {solara-1.29.1 → solara-1.30.1}/solara/server/static/highlight.css +0 -0
  314. {solara-1.29.1 → solara-1.30.1}/solara/server/static/main-vuetify.js +0 -0
  315. {solara-1.29.1 → solara-1.30.1}/solara/server/static/main.js +0 -0
  316. {solara-1.29.1 → solara-1.30.1}/solara/server/static/sun.svg +0 -0
  317. {solara-1.29.1 → solara-1.30.1}/solara/server/static/webworker.js +0 -0
  318. {solara-1.29.1 → solara-1.30.1}/solara/server/telemetry.py +0 -0
  319. {solara-1.29.1 → solara-1.30.1}/solara/server/templates/index.html.j2 +0 -0
  320. {solara-1.29.1 → solara-1.30.1}/solara/server/templates/loader-plain.css +0 -0
  321. {solara-1.29.1 → solara-1.30.1}/solara/server/templates/loader-plain.html +0 -0
  322. {solara-1.29.1 → solara-1.30.1}/solara/server/templates/loader-solara.css +0 -0
  323. {solara-1.29.1 → solara-1.30.1}/solara/server/templates/loader-solara.html +0 -0
  324. {solara-1.29.1 → solara-1.30.1}/solara/server/templates/plain.html +0 -0
  325. {solara-1.29.1 → solara-1.30.1}/solara/server/threaded.py +0 -0
  326. {solara-1.29.1 → solara-1.30.1}/solara/server/utils.py +0 -0
  327. {solara-1.29.1 → solara-1.30.1}/solara/server/websocket.py +0 -0
  328. {solara-1.29.1 → solara-1.30.1}/solara/settings.py +0 -0
  329. {solara-1.29.1 → solara-1.30.1}/solara/template/button.py +0 -0
  330. {solara-1.29.1 → solara-1.30.1}/solara/template/markdown.py +0 -0
  331. {solara-1.29.1 → solara-1.30.1}/solara/template/portal/.flake8 +0 -0
  332. {solara-1.29.1 → solara-1.30.1}/solara/template/portal/.pre-commit-config.yaml +0 -0
  333. {solara-1.29.1 → solara-1.30.1}/solara/template/portal/LICENSE +0 -0
  334. {solara-1.29.1 → solara-1.30.1}/solara/template/portal/Procfile +0 -0
  335. {solara-1.29.1 → solara-1.30.1}/solara/template/portal/mypy.ini +0 -0
  336. {solara-1.29.1 → solara-1.30.1}/solara/template/portal/pyproject.toml +0 -0
  337. {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/__init__.py +0 -0
  338. {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/components/__init__.py +0 -0
  339. {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/components/article.py +0 -0
  340. {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/components/data.py +0 -0
  341. {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/components/header.py +0 -0
  342. {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/components/layout.py +0 -0
  343. {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/content/articles/equis-in-vidi.md +0 -0
  344. {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/content/articles/substiterat-vati.md +0 -0
  345. {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/data.py +0 -0
  346. {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/pages/__init__.py +0 -0
  347. {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/pages/article/__init__.py +0 -0
  348. {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/pages/tabular.py +0 -0
  349. {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/pages/viz/__init__.py +0 -0
  350. {solara-1.29.1 → solara-1.30.1}/solara/template/portal/solara_portal/pages/viz/overview.py +0 -0
  351. {solara-1.29.1 → solara-1.30.1}/solara/test/__init__.py +0 -0
  352. {solara-1.29.1 → solara-1.30.1}/solara/test/pytest_plugin.py +0 -0
  353. {solara-1.29.1 → solara-1.30.1}/solara/toestand.py +0 -0
  354. {solara-1.29.1 → solara-1.30.1}/solara/website/__init__.py +0 -0
  355. {solara-1.29.1 → solara-1.30.1}/solara/website/assets/images/logo-small.png +0 -0
  356. {solara-1.29.1 → solara-1.30.1}/solara/website/assets/images/logo.svg +0 -0
  357. {solara-1.29.1 → solara-1.30.1}/solara/website/assets/images/logo_white.svg +0 -0
  358. {solara-1.29.1 → solara-1.30.1}/solara/website/assets/theme.js +0 -0
  359. {solara-1.29.1 → solara-1.30.1}/solara/website/components/algolia.vue +0 -0
  360. {solara-1.29.1 → solara-1.30.1}/solara/website/components/mailchimp.py +0 -0
  361. {solara-1.29.1 → solara-1.30.1}/solara/website/components/mailchimp.vue +0 -0
  362. {solara-1.29.1 → solara-1.30.1}/solara/website/components/notebook.py +0 -0
  363. {solara-1.29.1 → solara-1.30.1}/solara/website/pages/apps/__init__.py +0 -0
  364. {solara-1.29.1 → solara-1.30.1}/solara/website/pages/apps/authorization/__init__.py +0 -0
  365. {solara-1.29.1 → solara-1.30.1}/solara/website/pages/apps/authorization/admin.py +0 -0
  366. {solara-1.29.1 → solara-1.30.1}/solara/website/pages/apps/authorization/users.py +0 -0
  367. {solara-1.29.1 → solara-1.30.1}/solara/website/pages/apps/layout-demo.py +0 -0
  368. {solara-1.29.1 → solara-1.30.1}/solara/website/pages/apps/multipage/page1.py +0 -0
  369. {solara-1.29.1 → solara-1.30.1}/solara/website/pages/apps/scrolling.py +0 -0
  370. {solara-1.29.1 → solara-1.30.1}/solara/website/pages/apps/tutorial-streamlit.py +0 -0
  371. /solara-1.29.1/solara/website/pages/docs/content/99-contact.md → /solara-1.30.1/solara/website/pages/contact/contact.md +0 -0
  372. {solara-1.29.1 → solara-1.30.1}/solara/website/pages/doc_use_download.py +0 -0
  373. {solara-1.29.1/solara/website/pages/docs/content/50-enterprise → solara-1.30.1/solara/website/pages/documentation/advanced/content/30-enterprise}/00-overview.md +0 -0
  374. /solara-1.29.1/solara/website/pages/docs/content/__init__.py → /solara-1.30.1/solara/website/pages/documentation/advanced/content/40-development/00-overview.md +0 -0
  375. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/cross_filter}/cross_filter_dataframe.py +0 -0
  376. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/cross_filter}/cross_filter_report.py +0 -0
  377. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/cross_filter}/cross_filter_select.py +0 -0
  378. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/cross_filter}/cross_filter_slider.py +0 -0
  379. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_cross_filter.py +0 -0
  380. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_dark_effective.py +0 -0
  381. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_exception.py +0 -0
  382. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_previous.py +0 -0
  383. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_state_or_update.py +0 -0
  384. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_thread.md +0 -0
  385. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_thread.py +0 -0
  386. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/hooks}/use_trait_observe.py +0 -0
  387. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/routing}/resolve_path.py +0 -0
  388. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/routing}/route.py +0 -0
  389. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/api/utilities}/memoize.py +0 -0
  390. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/advanced}/link.py +0 -0
  391. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/advanced}/meta.py +0 -0
  392. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/advanced}/style.py +0 -0
  393. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components}/common.py +0 -0
  394. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/data}/dataframe.py +0 -0
  395. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/data}/pivot_table.py +0 -0
  396. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/input}/button.py +0 -0
  397. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/input}/file_browser.py +0 -0
  398. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/lab}/confirmation_dialog.py +0 -0
  399. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/lab}/tab.py +0 -0
  400. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/lab}/tabs.py +0 -0
  401. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/app_layout.py +0 -0
  402. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/column.py +0 -0
  403. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/columns.py +0 -0
  404. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/columns_responsive.py +0 -0
  405. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/row.py +0 -0
  406. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/layout}/sidebar.py +0 -0
  407. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/output}/html.py +0 -0
  408. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/output}/markdown.py +0 -0
  409. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/output}/markdown_editor.py +0 -0
  410. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/output}/sql_code.py +0 -0
  411. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/page}/head.py +0 -0
  412. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/page}/title.py +0 -0
  413. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/viz}/altair.py +0 -0
  414. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/viz}/echarts.py +0 -0
  415. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/viz}/matplotlib.py +0 -0
  416. {solara-1.29.1/solara/website/pages/api → solara-1.30.1/solara/website/pages/documentation/components/viz}/plotly_express.py +0 -0
  417. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/ai/__init__.py +0 -0
  418. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/ai/chatbot.py +0 -0
  419. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/ai/tokenizer.py +0 -0
  420. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/basics/__init__.py +0 -0
  421. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/basics/sine.py +0 -0
  422. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/fullscreen/__init__.py +0 -0
  423. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/fullscreen/authorization.py +0 -0
  424. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/fullscreen/layout_demo.py +0 -0
  425. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/fullscreen/multipage.py +0 -0
  426. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/fullscreen/scatter.py +0 -0
  427. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/fullscreen/scrolling.py +0 -0
  428. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/fullscreen/tutorial_streamlit.py +0 -0
  429. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/general/__init__.py +0 -0
  430. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/general/live_update.py +0 -0
  431. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/general/mycard.vue +0 -0
  432. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/general/pokemon_search.py +0 -0
  433. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/ipycanvas.py +0 -0
  434. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/libraries/__init__.py +0 -0
  435. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/libraries/bqplot.py +0 -0
  436. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/libraries/ipyleaflet.py +0 -0
  437. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/utilities/__init__.py +0 -0
  438. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/utilities/calculator.py +0 -0
  439. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/utilities/todo.py +0 -0
  440. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/visualization/__init__.py +0 -0
  441. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/visualization/annotator.py +0 -0
  442. {solara-1.29.1/solara/website/pages → solara-1.30.1/solara/website/pages/documentation}/examples/visualization/linked_views.py +0 -0
  443. {solara-1.29.1/solara/website/pages/docs/content/04-tutorial → solara-1.30.1/solara/website/pages/documentation/getting_started/content/04-tutorials}/10_data_science.py +0 -0
  444. {solara-1.29.1/solara/website/pages/docs/content/04-tutorial → solara-1.30.1/solara/website/pages/documentation/getting_started/content/04-tutorials}/60-jupyter-dashboard-part1.py +0 -0
  445. {solara-1.29.1/solara/website/pages/docs/content/04-tutorial → solara-1.30.1/solara/website/pages/documentation/getting_started/content/04-tutorials}/SF_crime_sample.csv.gz +0 -0
  446. {solara-1.29.1/solara/website/pages/docs/content/04-tutorial → solara-1.30.1/solara/website/pages/documentation/getting_started/content/04-tutorials}/_jupyter_dashboard_1.ipynb +0 -0
  447. {solara-1.29.1 → solara-1.30.1}/solara/website/pages/docutils.py +0 -0
  448. {solara-1.29.1 → solara-1.30.1}/solara/website/pages/showcase/planeto_tessa.py +0 -0
  449. {solara-1.29.1 → solara-1.30.1}/solara/website/pages/showcase/solarathon_2023_team_2.py +0 -0
  450. {solara-1.29.1 → solara-1.30.1}/solara/website/pages/showcase/solarathon_2023_team_4.py +0 -0
  451. {solara-1.29.1 → solara-1.30.1}/solara/website/pages/showcase/solarathon_2023_team_5.py +0 -0
  452. {solara-1.29.1 → solara-1.30.1}/solara/website/pages/showcase/solarathon_2023_team_6.py +0 -0
  453. {solara-1.29.1 → solara-1.30.1}/solara/website/pages/showcase/wanderlust.py +0 -0
  454. {solara-1.29.1 → solara-1.30.1}/solara/website/public/beach.jpeg +0 -0
  455. {solara-1.29.1 → solara-1.30.1}/solara/website/public/logo.svg +0 -0
  456. {solara-1.29.1 → solara-1.30.1}/solara/website/public/success.html +0 -0
  457. {solara-1.29.1 → solara-1.30.1}/solara/website/templates/index.html.j2 +0 -0
  458. {solara-1.29.1 → solara-1.30.1}/solara/website/utils.py +0 -0
  459. {solara-1.29.1 → solara-1.30.1}/solara/widgets/__init__.py +0 -0
  460. {solara-1.29.1 → solara-1.30.1}/solara/widgets/vue/gridlayout.vue +0 -0
  461. {solara-1.29.1 → solara-1.30.1}/solara/widgets/vue/html.vue +0 -0
  462. {solara-1.29.1 → solara-1.30.1}/solara/widgets/vue/navigator.vue +0 -0
  463. {solara-1.29.1 → solara-1.30.1}/solara/widgets/vue/vegalite.vue +0 -0
  464. {solara-1.29.1 → solara-1.30.1}/solara/widgets/widgets.py +0 -0
  465. {solara-1.29.1 → solara-1.30.1}/tests/__init__.py +0 -0
  466. {solara-1.29.1 → solara-1.30.1}/tests/conftest.py +0 -0
  467. {solara-1.29.1 → solara-1.30.1}/tests/integration/__init__.py +0 -0
  468. {solara-1.29.1 → solara-1.30.1}/tests/integration/app_widget.py +0 -0
  469. {solara-1.29.1 → solara-1.30.1}/tests/integration/async_test.py +0 -0
  470. {solara-1.29.1 → solara-1.30.1}/tests/integration/cdn_test.py +0 -0
  471. {solara-1.29.1 → solara-1.30.1}/tests/integration/cmdline_test.py +0 -0
  472. {solara-1.29.1 → solara-1.30.1}/tests/integration/conftest.py +0 -0
  473. {solara-1.29.1 → solara-1.30.1}/tests/integration/create_test.py +0 -0
  474. {solara-1.29.1 → solara-1.30.1}/tests/integration/enterprise/__init__.py +0 -0
  475. {solara-1.29.1 → solara-1.30.1}/tests/integration/error_test.py +0 -0
  476. {solara-1.29.1 → solara-1.30.1}/tests/integration/esm_test.py +0 -0
  477. {solara-1.29.1 → solara-1.30.1}/tests/integration/flask_test.py +0 -0
  478. {solara-1.29.1 → solara-1.30.1}/tests/integration/input_date_test.py +0 -0
  479. {solara-1.29.1 → solara-1.30.1}/tests/integration/latex_test.py +0 -0
  480. {solara-1.29.1 → solara-1.30.1}/tests/integration/lifecycle_test.py +0 -0
  481. {solara-1.29.1 → solara-1.30.1}/tests/integration/markdown_test.py +0 -0
  482. {solara-1.29.1 → solara-1.30.1}/tests/integration/menu_test.py +0 -0
  483. {solara-1.29.1 → solara-1.30.1}/tests/integration/popout_test.py +0 -0
  484. {solara-1.29.1 → solara-1.30.1}/tests/integration/reconnect_test.py +0 -0
  485. {solara-1.29.1 → solara-1.30.1}/tests/integration/reload/apps.py +0 -0
  486. {solara-1.29.1 → solara-1.30.1}/tests/integration/ssg_test.py +0 -0
  487. {solara-1.29.1 → solara-1.30.1}/tests/integration/starlette_test.py +0 -0
  488. {solara-1.29.1 → solara-1.30.1}/tests/integration/test.vue +0 -0
  489. {solara-1.29.1 → solara-1.30.1}/tests/integration/testapp.py +0 -0
  490. {solara-1.29.1 → solara-1.30.1}/tests/integration/widget_test.py +0 -0
  491. {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-linux-ipywidgets-7-changed-reference.png +0 -0
  492. {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-linux-ipywidgets-7-reference.png +0 -0
  493. {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-linux-ipywidgets-8-changed-reference.png +0 -0
  494. {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-linux-ipywidgets-8-reference.png +0 -0
  495. {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_lab-chromium-linux-ipywidgets-7-reference.png +0 -0
  496. {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_lab-chromium-linux-ipywidgets-8-reference.png +0 -0
  497. {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_notebook-chromium-linux-ipywidgets-7-reference.png +0 -0
  498. {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_notebook-chromium-linux-ipywidgets-8-reference.png +0 -0
  499. {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-solara-chromium-linux-ipywidgets-7-reference.png +0 -0
  500. {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-solara-chromium-linux-ipywidgets-8-reference.png +0 -0
  501. {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-voila-chromium-linux-ipywidgets-7-reference.png +0 -0
  502. {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-voila-chromium-linux-ipywidgets-8-reference.png +0 -0
  503. {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-starlette-solara-chromium-linux-ipywidgets-7-reference.png +0 -0
  504. {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-starlette-solara-chromium-linux-ipywidgets-8-reference.png +0 -0
  505. {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-jupyter_lab-chromium-linux-reference.png +0 -0
  506. {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-jupyter_notebook-chromium-linux-reference.png +0 -0
  507. {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-solara-chromium-linux-reference.png +0 -0
  508. {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-voila-chromium-linux-reference.png +0 -0
  509. {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-starlette-solara-chromium-linux-reference.png +0 -0
  510. {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_widget_button_solara-flask-chromium-linux-ipyvuetify3-reference.png +0 -0
  511. {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_widget_button_solara-flask-chromium-linux-reference.png +0 -0
  512. {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_widget_button_solara-starlette-chromium-linux-ipyvuetify3-reference.png +0 -0
  513. {solara-1.29.1 → solara-1.30.1}/tests/ui/snapshots/tests/integration/widget_test.py/test_widget_button_solara-starlette-chromium-linux-reference.png +0 -0
  514. {solara-1.29.1 → solara-1.30.1}/tests/unit/__init__.py +0 -0
  515. {solara-1.29.1 → solara-1.30.1}/tests/unit/app_test.py +0 -0
  516. {solara-1.29.1 → solara-1.30.1}/tests/unit/applayout_test.py +0 -0
  517. {solara-1.29.1 → solara-1.30.1}/tests/unit/cache_test.py +0 -0
  518. {solara-1.29.1 → solara-1.30.1}/tests/unit/cdn_helper_test.py +0 -0
  519. {solara-1.29.1 → solara-1.30.1}/tests/unit/chat_test.py +0 -0
  520. {solara-1.29.1 → solara-1.30.1}/tests/unit/checkbox_test.py +0 -0
  521. {solara-1.29.1 → solara-1.30.1}/tests/unit/common.py +0 -0
  522. {solara-1.29.1 → solara-1.30.1}/tests/unit/component_frontend_test.py +0 -0
  523. {solara-1.29.1 → solara-1.30.1}/tests/unit/component_vue_test.vue +0 -0
  524. {solara-1.29.1 → solara-1.30.1}/tests/unit/confirmation_dialog_test.py +0 -0
  525. {solara-1.29.1 → solara-1.30.1}/tests/unit/conftest.py +0 -0
  526. {solara-1.29.1 → solara-1.30.1}/tests/unit/cross_filter_component_test.py +0 -0
  527. {solara-1.29.1 → solara-1.30.1}/tests/unit/cross_filter_test.py +0 -0
  528. {solara-1.29.1 → solara-1.30.1}/tests/unit/dataframe_test.py +0 -0
  529. {solara-1.29.1 → solara-1.30.1}/tests/unit/datatable_test.py +0 -0
  530. {solara-1.29.1 → solara-1.30.1}/tests/unit/display_test.py +0 -0
  531. {solara-1.29.1 → solara-1.30.1}/tests/unit/express_test.py +0 -0
  532. {solara-1.29.1 → solara-1.30.1}/tests/unit/file_browser_test.py +0 -0
  533. {solara-1.29.1 → solara-1.30.1}/tests/unit/file_download_test.py +0 -0
  534. {solara-1.29.1 → solara-1.30.1}/tests/unit/hooks_test.py +0 -0
  535. {solara-1.29.1 → solara-1.30.1}/tests/unit/input_date_test.py +0 -0
  536. {solara-1.29.1 → solara-1.30.1}/tests/unit/input_test.py +0 -0
  537. {solara-1.29.1 → solara-1.30.1}/tests/unit/kernel_test.py +0 -0
  538. {solara-1.29.1 → solara-1.30.1}/tests/unit/lab/__init__.py +0 -0
  539. {solara-1.29.1 → solara-1.30.1}/tests/unit/lifecycle_test.py +0 -0
  540. {solara-1.29.1 → solara-1.30.1}/tests/unit/matplotlib_test.py +0 -0
  541. {solara-1.29.1 → solara-1.30.1}/tests/unit/no_solara_test.py +0 -0
  542. {solara-1.29.1 → solara-1.30.1}/tests/unit/output_widget_test.py +0 -0
  543. {solara-1.29.1 → solara-1.30.1}/tests/unit/patch_test.py +0 -0
  544. {solara-1.29.1 → solara-1.30.1}/tests/unit/pivottable_test.py +0 -0
  545. {solara-1.29.1 → solara-1.30.1}/tests/unit/router_test.py +0 -0
  546. {solara-1.29.1 → solara-1.30.1}/tests/unit/select_test.py +0 -0
  547. {solara-1.29.1 → solara-1.30.1}/tests/unit/settings_test.py +0 -0
  548. {solara-1.29.1 → solara-1.30.1}/tests/unit/shell_test.py +0 -0
  549. {solara-1.29.1 → solara-1.30.1}/tests/unit/slider_test.py +0 -0
  550. {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/__init__.py +0 -0
  551. {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/food/__init__.py +0 -0
  552. {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/food/food.py +0 -0
  553. {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/food/index.py +0 -0
  554. {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/multipage/03-some-markdown.md +0 -0
  555. {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/multipage/04-a_directory/00-another-markdown.md +0 -0
  556. {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/multipage/04-a_directory/__init__.py +0 -0
  557. {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/multipage/05-and-notebooks.ipynb +0 -0
  558. {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/multipage/06-custom-routes.py +0 -0
  559. {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/multipage/10-single-file-directory/single-file.md +0 -0
  560. {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/multipage/99-some_other_python_script.py +0 -0
  561. {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/multipage/some_other_file.txt +0 -0
  562. {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/multipage-widgets/00-overview.md +0 -0
  563. {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/multipage-widgets/01-views.py +0 -0
  564. {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/multipage-widgets/02-likes.py +0 -0
  565. {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/multipage-widgets/03-volume.py +0 -0
  566. {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/multipage-widgets/04-color.ipynb +0 -0
  567. {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/notebookapp_component.ipynb +0 -0
  568. {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/notebookapp_element.ipynb +0 -0
  569. {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/notebookapp_widget.ipynb +0 -0
  570. {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/single_file.py +0 -0
  571. {solara-1.29.1 → solara-1.30.1}/tests/unit/solara_test_apps/single_file_multiple_routes.py +0 -0
  572. {solara-1.29.1 → solara-1.30.1}/tests/unit/switch_test.py +0 -0
  573. {solara-1.29.1 → solara-1.30.1}/tests/unit/tabs_test.py +0 -0
  574. {solara-1.29.1 → solara-1.30.1}/tests/unit/task_test.py +0 -0
  575. {solara-1.29.1 → solara-1.30.1}/tests/unit/telemetry_tests.py +0 -0
  576. {solara-1.29.1 → solara-1.30.1}/tests/unit/toestand_computed_reload.py +0 -0
  577. {solara-1.29.1 → solara-1.30.1}/tests/unit/toestand_test.py +0 -0
  578. {solara-1.29.1 → solara-1.30.1}/tests/unit/toggle_button_test.py +0 -0
@@ -1,6 +1,7 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: solara
3
- Version: 1.29.1
3
+ Version: 1.30.1
4
+ Dynamic: Summary
4
5
  Project-URL: Home, https://www.github.com/widgetti/solara
5
6
  Author-email: "Maarten A. Breddels" <maartenbreddels@gmail.com>
6
7
  License: The MIT License (MIT)
@@ -49,7 +50,7 @@ Requires-Dist: watchdog
49
50
  Requires-Dist: watchfiles; python_version > '3.6'
50
51
  Requires-Dist: websockets
51
52
  Provides-Extra: assets
52
- Requires-Dist: solara-assets==1.29.1; extra == 'assets'
53
+ Requires-Dist: solara-assets==1.30.1; extra == 'assets'
53
54
  Provides-Extra: dev
54
55
  Requires-Dist: black; extra == 'dev'
55
56
  Requires-Dist: bqplot; extra == 'dev'
@@ -138,7 +139,7 @@ Run:
138
139
  pip install solara
139
140
  ```
140
141
 
141
- Or follow the [Installation instructions](https://solara.dev/docs/installing) for more detailed instructions.
142
+ Or follow the [Installation instructions](https://solara.dev/documentation/getting_started/installing) for more detailed instructions.
142
143
 
143
144
  ## First script
144
145
 
@@ -184,7 +185,7 @@ Solara server is starting at http://localhost:8765
184
185
  Or copy-paste this to a Jupyter notebook cell and execute it (the `Page()` expression at the end
185
186
  will cause it to automatically render the component in the notebook).
186
187
 
187
- See this snippet run live at https://solara.dev/docs/quickstart
188
+ See this snippet run live at https://solara.dev/documentation/getting_started
188
189
 
189
190
  ## Demo
190
191
 
@@ -211,7 +212,7 @@ By building on top of ipywidgets, we automatically leverage an existing ecosyste
211
212
 
212
213
  Visit our main website or jump directly to the introduction
213
214
 
214
- [![Introduction](https://dabuttonfactory.com/button.png?t=Introduction&f=Open+Sans-Bold&ts=20&tc=fff&hp=45&vp=12&c=8&bgt=unicolored&bgc=f19f41)](https://solara.dev/docs)
215
- [![Quickstart](https://dabuttonfactory.com/button.png?t=Quickstart&f=Open+Sans-Bold&ts=20&tc=fff&hp=45&vp=12&c=8&bgt=unicolored&bgc=f19f41)](https://solara.dev/docs/quickstart)
215
+ [![Introduction](https://dabuttonfactory.com/button.png?t=Introduction&f=Open+Sans-Bold&ts=20&tc=fff&hp=45&vp=12&c=8&bgt=unicolored&bgc=f19f41)](https://solara.dev/documentation)
216
+ [![Quickstart](https://dabuttonfactory.com/button.png?t=Quickstart&f=Open+Sans-Bold&ts=20&tc=fff&hp=45&vp=12&c=8&bgt=unicolored&bgc=f19f41)](https://solara.dev/documentation/getting_started)
216
217
 
217
218
  *Note that the solara.dev website is created using Solara*
@@ -27,7 +27,7 @@ Run:
27
27
  pip install solara
28
28
  ```
29
29
 
30
- Or follow the [Installation instructions](https://solara.dev/docs/installing) for more detailed instructions.
30
+ Or follow the [Installation instructions](https://solara.dev/documentation/getting_started/installing) for more detailed instructions.
31
31
 
32
32
  ## First script
33
33
 
@@ -73,7 +73,7 @@ Solara server is starting at http://localhost:8765
73
73
  Or copy-paste this to a Jupyter notebook cell and execute it (the `Page()` expression at the end
74
74
  will cause it to automatically render the component in the notebook).
75
75
 
76
- See this snippet run live at https://solara.dev/docs/quickstart
76
+ See this snippet run live at https://solara.dev/documentation/getting_started
77
77
 
78
78
  ## Demo
79
79
 
@@ -100,7 +100,7 @@ By building on top of ipywidgets, we automatically leverage an existing ecosyste
100
100
 
101
101
  Visit our main website or jump directly to the introduction
102
102
 
103
- [![Introduction](https://dabuttonfactory.com/button.png?t=Introduction&f=Open+Sans-Bold&ts=20&tc=fff&hp=45&vp=12&c=8&bgt=unicolored&bgc=f19f41)](https://solara.dev/docs)
104
- [![Quickstart](https://dabuttonfactory.com/button.png?t=Quickstart&f=Open+Sans-Bold&ts=20&tc=fff&hp=45&vp=12&c=8&bgt=unicolored&bgc=f19f41)](https://solara.dev/docs/quickstart)
103
+ [![Introduction](https://dabuttonfactory.com/button.png?t=Introduction&f=Open+Sans-Bold&ts=20&tc=fff&hp=45&vp=12&c=8&bgt=unicolored&bgc=f19f41)](https://solara.dev/documentation)
104
+ [![Quickstart](https://dabuttonfactory.com/button.png?t=Quickstart&f=Open+Sans-Bold&ts=20&tc=fff&hp=45&vp=12&c=8&bgt=unicolored&bgc=f19f41)](https://solara.dev/documentation/getting_started)
105
105
 
106
106
  *Note that the solara.dev website is created using Solara*
@@ -99,7 +99,7 @@ dev = [
99
99
  "polars",
100
100
  ]
101
101
  assets = [
102
- "solara-assets==1.29.1"
102
+ "solara-assets==1.30.1"
103
103
  ]
104
104
  flask = [
105
105
  "flask",
@@ -1,5 +1,5 @@
1
1
  """Build webapps using IPywidgets"""
2
- __version__ = "1.29.1"
2
+ __version__ = "1.30.1"
3
3
  github_url = "https://github.com/widgetti/solara"
4
4
  git_branch = "master"
5
5
 
@@ -77,10 +77,10 @@ def display(*objs, **kwargs):
77
77
 
78
78
  However, if you require callback functions, use the specific Solara components, e.g.:
79
79
 
80
- * [Plotly](/api/plotly)
81
- * [Altair](/api/altair)
82
- * [Matplotlib](/api/matplotlib)
83
- * [Dataframe](/api/dataframe)
80
+ * [Plotly](/documentation/components/viz/plotly)
81
+ * [Altair](/documentation/components/viz/altair)
82
+ * [Matplotlib](/documentation/components/viz/matplotlib)
83
+ * [Dataframe](/documentation/components/data/dataframe)
84
84
 
85
85
  ```solara
86
86
  import solara
@@ -489,7 +489,7 @@ def deploy():
489
489
 
490
490
  time.sleep(1)
491
491
  rprint("Want your app to run instantly on awesomeapp-mystartup-gh.solara.run?")
492
- rprint("\tCheck out https://solara.dev/docs/deploying/cloud-hosted")
492
+ rprint("\tCheck out https://solara.dev/documentation/getting_started/deploying/cloud-hosted")
493
493
 
494
494
 
495
495
  @cli.command()
@@ -723,7 +723,11 @@ cli.add_command(ssg)
723
723
 
724
724
 
725
725
  def main():
726
- cli()
726
+ args = sys.argv
727
+ # skip everything after -- if it exists
728
+ if "--" in args:
729
+ args = args[: args.index("--")]
730
+ cli(args[1:])
727
731
 
728
732
 
729
733
  if __name__ == "__main__":
@@ -24,6 +24,7 @@ DEBUG = False
24
24
  solara_root = Path(solara.__file__).parent
25
25
 
26
26
  DefaultLayout = solara.AppLayout
27
+ _redirects: Dict[str, str] = {}
27
28
 
28
29
 
29
30
  def source_to_module(path: Path, initial_namespace={}) -> ModuleType:
@@ -89,12 +90,17 @@ def arg_cast(args: List[str], f: Callable):
89
90
  def RoutingProvider(children: List[reacton.core.Element] = [], routes: List[solara.Route] = [], pathname: str = ""):
90
91
  """Wraps the app, adds extra context, like navigation/routing."""
91
92
  path, set_path = solara.use_state(pathname, key="solara-context-path")
93
+
94
+ def set_path_with_redirect(path):
95
+ path = _redirects.get(path, path)
96
+ set_path(path)
97
+
92
98
  # TODO: since we provide a cross filter context here, I don't think name `RoutingProvider` is a good name
93
99
  # we might want to change/refactor this.
94
100
  solara.provide_cross_filter()
95
- nav = solara.Navigator(location=path, on_location=set_path)
96
- solara.routing._location_context.provide(solara.routing._Location(path, set_path))
97
- solara.routing.router_context.provide(solara.routing.Router(path, routes=routes, set_path=set_path))
101
+ nav = solara.Navigator(location=path, on_location=set_path_with_redirect)
102
+ solara.routing._location_context.provide(solara.routing._Location(path, set_path_with_redirect))
103
+ solara.routing.router_context.provide(solara.routing.Router(path, routes=routes, set_path=set_path_with_redirect))
98
104
 
99
105
  def get_nav_widget():
100
106
  # not sure why get_widget(nav) does not work
@@ -123,15 +129,14 @@ def RoutingProvider(children: List[reacton.core.Element] = [], routes: List[sola
123
129
  @solara.component
124
130
  def RenderPage(main_name: str = "Page"):
125
131
  """Renders the page that matches the route."""
126
- level_start = solara.use_route_level()
127
132
  router = solara.use_context(solara.routing.router_context)
128
133
  # we use these to cache script runs that use regular ipywidgets
129
134
  modules = cast(Dict[str, ModuleType], solara.use_memo(dict, dependencies=[]))
130
- modules_modified_times = solara.use_memo(dict, dependencies=[])
135
+ modules_modified_times = cast(Dict[str, float], solara.use_memo(dict, dependencies=[]))
131
136
 
132
- if len(router.path_routes) <= level_start:
137
+ if not router.path_routes:
133
138
  with solara.VBox() as main:
134
- solara.Error(f"Page not found: {router.path}, len(router.path_routes)={len(router.path_routes)} <= level_start={level_start}")
139
+ solara.Error(f"Page not found: {router.path}")
135
140
  parent = "/" + "/".join(router.parts[:-1])
136
141
  with solara.Link(parent):
137
142
  solara.Button(f"Go to parent: {parent}", text=True)
@@ -144,10 +149,9 @@ def RenderPage(main_name: str = "Page"):
144
149
  pp(router.routes)
145
150
  return main
146
151
 
147
- level_max = level_start
148
152
  layouts = [] # nested layouts
149
- # find the 'RenderPage' sentinel value to find the deepest level we should render
150
- for level in range(level_start, len(router.path_routes)):
153
+ level_max = len(router.path_routes) - 1
154
+ for level in range(len(router.path_routes)):
151
155
  # we always level_start the 'package'/'root' layout
152
156
  roots = [k for k in router.path_routes_siblings[level] if k.path == "/"]
153
157
  if len(roots) == 1:
@@ -158,16 +162,21 @@ def RenderPage(main_name: str = "Page"):
158
162
  # and, if not the root layout, include the layout for the current route
159
163
  if route.path != "/" and route.layout:
160
164
  layouts.append(route.layout)
161
- if route.component is RenderPage:
165
+ # We found the leaf (or node) that defines a component or markdown file
166
+ if (route.file and route.file.suffix == ".md") or route.component:
162
167
  level_max = level
168
+ break
169
+
163
170
  route_current = router.path_routes[level_max]
164
171
  routes_siblings = router.path_routes_siblings[level_max]
165
172
  routes_siblings_index = routes_siblings.index(route_current)
173
+
166
174
  # if no layouts are found, we use the default layout
167
175
  if layouts == []:
168
176
  layouts = [DefaultLayout]
169
- if route_current.data is None and route_current.module is None and route_current.component is None:
170
- return solara.Error(f"Page not found: {router.path}, route does not link to a path or module or component")
177
+
178
+ if route_current.component is None and route_current.module is None and (route_current.file is None or route_current.file.suffix != ".md"):
179
+ return solara.Error(f"Page not found: {router.path}, route does not link to a (markdown) path or module or component")
171
180
 
172
181
  def wrap_in_layouts(element: reacton.core.Element, layouts):
173
182
  for Layout in reversed(layouts):
@@ -182,9 +191,10 @@ def RenderPage(main_name: str = "Page"):
182
191
  else:
183
192
  return []
184
193
 
185
- if isinstance(route_current.data, Path):
194
+ if str(route_current.file).endswith(".md") or isinstance(route_current.data, Path):
186
195
  path = cast(Path, route_current.data)
187
196
  if path.suffix == ".md":
197
+ component = route_current.component or solara.Markdown
188
198
  with solara.HBox() as navigation:
189
199
  if routes_siblings_index > 0:
190
200
  prev = routes_siblings[routes_siblings_index - 1]
@@ -204,9 +214,11 @@ def RenderPage(main_name: str = "Page"):
204
214
  solara.Button(
205
215
  icon_name="mdi-pencil", icon=True, href=url, target="_blank", style={"position": "absolute", "top": "0px", "right": "0px"}
206
216
  )
207
- solara.Markdown(path.read_text(), unsafe_solara_execute=True)
217
+ # solara.Markdown(path.read_text(), unsafe_solara_execute=True)
218
+ component(path.read_text(), unsafe_solara_execute=True)
208
219
  else:
209
- content = solara.Markdown(path.read_text(), unsafe_solara_execute=True)
220
+ # content = solara.Markdown(path.read_text(), unsafe_solara_execute=True)
221
+ content = component(path.read_text(), unsafe_solara_execute=True)
210
222
 
211
223
  main = solara.Div(
212
224
  classes=["solara-autorouter-content"],
@@ -224,9 +236,6 @@ def RenderPage(main_name: str = "Page"):
224
236
  title_element = solara.Title(title)
225
237
  module = None
226
238
  Page = route_current.component
227
- # translate the default RenderPage as no value given (None)
228
- if Page is RenderPage:
229
- Page = None
230
239
  if route_current.module is not None and (Page is None):
231
240
  # if not a custom component is given, we try to find a Page component
232
241
  # in the module
@@ -239,9 +248,6 @@ def RenderPage(main_name: str = "Page"):
239
248
  Page = namespace.get("page", namespace.get("app", Page))
240
249
  Page = nested_get(namespace, main_name, Page)
241
250
 
242
- if Page is None and route_current.children:
243
- # we we did not get a component, but we recursively render
244
- Page = RenderPage
245
251
  if isinstance(Page, ipywidgets.Widget):
246
252
  # If we have a widget, we need to execute this again for each
247
253
  # connection, since we cannot share widgets between connections/users.
@@ -291,12 +297,12 @@ def RenderPage(main_name: str = "Page"):
291
297
  main = wrap_in_layouts(main, layouts)
292
298
  else:
293
299
  if route_current.module:
294
- path = route_current.module.__file__
300
+ path_str = route_current.module.__file__
295
301
  local_scope = route_current.module.__dict__
296
302
  ignore = ["display"]
297
303
  options = [k for k in list(local_scope) if k not in ignore and not k.startswith("_")]
298
304
  matches = difflib.get_close_matches(main_name, options)
299
- msg = f"No object with name {main_name} found for {path}"
305
+ msg = f"No object with name {main_name} found for {path_str}"
300
306
  if matches:
301
307
  msg += " Did you mean: " + " or ".join(map(repr, matches))
302
308
  else:
@@ -347,17 +353,22 @@ def get_title(module: ModuleType, required=True):
347
353
  return title
348
354
 
349
355
 
350
- def fix_route(route: solara.Route, new_file: Path) -> solara.Route:
356
+ def fix_route(route: solara.Route, new_file: Path, new_layout=None) -> solara.Route:
351
357
  file = route.file or new_file
358
+ layout = route.layout or new_layout
352
359
  children = fix_routes(route.children, new_file) if route.children else []
353
360
 
354
- return dataclasses.replace(route, file=file, children=children)
361
+ return dataclasses.replace(route, file=file, children=children, layout=layout)
355
362
 
356
363
 
357
- def fix_routes(routes: List[solara.Route], new_file: Path):
364
+ def fix_routes(routes: List[solara.Route], new_file: Path, new_layout=None):
358
365
  new_routes = []
359
366
  for route in routes:
360
- new_routes.append(fix_route(route, new_file))
367
+ if route.path == "/":
368
+ route = fix_route(route, new_file, new_layout)
369
+ else:
370
+ route = fix_route(route, new_file)
371
+ new_routes.append(route)
361
372
  return new_routes
362
373
 
363
374
 
@@ -370,7 +381,7 @@ def generate_routes(module: ModuleType) -> List[solara.Route]:
370
381
  files are not Python modules.
371
382
 
372
383
 
373
- See [our multipage guide](/docs/howto/multipage#as-a-package) for more details.
384
+ See [our multipage guide](/documentation/advanced/howto/multipage#as-a-package) for more details.
374
385
 
375
386
 
376
387
  """
@@ -378,6 +389,7 @@ def generate_routes(module: ModuleType) -> List[solara.Route]:
378
389
 
379
390
  assert module.__file__ is not None
380
391
  routes = []
392
+ children: List[solara.Route]
381
393
  file = Path(module.__file__)
382
394
 
383
395
  if module.__file__.endswith("__init__.py"):
@@ -391,13 +403,14 @@ def generate_routes(module: ModuleType) -> List[solara.Route]:
391
403
  title = get_title(module)
392
404
  children = getattr(module, "routes", [])
393
405
  if hasattr(module, "Page"):
394
- routes.append(solara.Route(path="/", component=RenderPage, data=module, module=module, layout=layout, children=children, label=title, file=file))
406
+ routes.append(
407
+ solara.Route(path="/", component=get_page(module), data=module, module=module, layout=layout, children=children, label=title, file=file)
408
+ )
395
409
 
396
410
  assert module.__file__ is not None
397
411
  reload.reloader.watcher.add_file(module.__file__)
398
412
  for info in pkgutil.iter_modules([str(Path(module.__file__).parent)]):
399
413
  submod = importlib.import_module(module.__name__ + f".{info.name}")
400
- subfile = Path(submod.__file__) if submod.__file__ is not None else None
401
414
  title = get_title(submod)
402
415
 
403
416
  name = info.name
@@ -405,7 +418,11 @@ def generate_routes(module: ModuleType) -> List[solara.Route]:
405
418
  # however, this may break things.
406
419
  # name = name.replace("_", "-")
407
420
  if info.ispkg:
408
- route = solara.Route(name, component=RenderPage, children=generate_routes(submod), module=submod, layout=None, label=title)
421
+ # we are in a package, like 'portal/solara_portal/pages', not the module itself
422
+ # (e.g. portal/solara_portal/pages/__init__.py)
423
+ # so here name='pages', and the children will come from the submodules
424
+ children = generate_routes(submod)
425
+ route = solara.Route(name, component=None, children=children, module=submod, layout=None, label=title)
409
426
  # skip empty subpackages
410
427
  if len(route.children) == 0:
411
428
  continue
@@ -413,11 +430,7 @@ def generate_routes(module: ModuleType) -> List[solara.Route]:
413
430
  # skip empty modules
414
431
  if get_renderable(submod) is None and not hasattr(submod, "routes"):
415
432
  continue
416
- children = getattr(submod, "routes", [])
417
- if subfile:
418
- children = fix_routes(children, subfile)
419
- module_layout = getattr(submod, "Layout", None)
420
- route = solara.Route(name, component=RenderPage, module=submod, layout=module_layout, children=children, label=title, file=subfile)
433
+ route = _generate_route(name, submod)
421
434
  routes.append(route)
422
435
  if route_order:
423
436
  lookup = {k.path: k for k in routes}
@@ -429,17 +442,12 @@ def generate_routes(module: ModuleType) -> List[solara.Route]:
429
442
  warnings.warn(f"Some routes are not in route_order: {set(lookup) - set(route_order)}")
430
443
 
431
444
  else:
432
- children = getattr(module, "routes", [])
433
- children = fix_routes(children, file)
434
- layout = getattr(module, "Layout", None)
435
- # children = []
436
- # single module, single route
437
- return [solara.Route(path="/", component=RenderPage, data=None, module=module, label=get_title(module), layout=layout, children=children, file=file)]
445
+ return [_generate_route("/", module)]
438
446
 
439
447
  return routes
440
448
 
441
449
 
442
- def generate_routes_directory(path: Path) -> List[solara.Route]:
450
+ def generate_routes_directory(path: Path, markdown_component=None) -> List[solara.Route]:
443
451
  """Generate routes for a directory.
444
452
 
445
453
  This is a recursive function that will generate routes for all
@@ -451,7 +459,7 @@ def generate_routes_directory(path: Path) -> List[solara.Route]:
451
459
  Python files ending in .py, or Jupyter notebooks ending in .ipynb
452
460
  will be executed and its `Page` component will be rendered.
453
461
 
454
- Automatic titles will be [generated as explained in the multipage guide](/docs/howto/multipage).
462
+ Automatic titles will be [generated as explained in the multipage guide](/documentation/advanced/howto/multipage).
455
463
 
456
464
  """
457
465
 
@@ -472,13 +480,13 @@ def generate_routes_directory(path: Path) -> List[solara.Route]:
472
480
  continue
473
481
  if subpath.stem.startswith("_") or subpath.stem.startswith("."):
474
482
  continue
475
- route = _generate_route_path(subpath, layout=layout, first=first, has_index=has_index)
483
+ route = _generate_route_path(subpath, layout=layout, first=first, has_index=has_index, markdown_component=markdown_component)
476
484
  first = False
477
485
  routes.append(route)
478
486
  return routes
479
487
 
480
488
 
481
- def _generate_route_path(subpath: Path, layout=None, first=False, has_index=False, initial_namespace={}) -> solara.Route:
489
+ def _generate_route_path(subpath: Path, layout=None, first=False, has_index=False, initial_namespace={}, markdown_component=None) -> solara.Route:
482
490
  from .server import reload
483
491
 
484
492
  name = subpath.stem
@@ -491,23 +499,47 @@ def _generate_route_path(subpath: Path, layout=None, first=False, has_index=Fals
491
499
  route_path = "/"
492
500
  else:
493
501
  route_path = "-".join([k.lower() for k in title_parts])
494
- # used as a 'sentinel' to find the deepest level of the route tree we need to render in 'RenderPage'
495
- component = RenderPage
496
- children = []
502
+ component = None
503
+ children: List[solara.Route] = []
497
504
  module: Optional[ModuleType] = None
498
505
  data: Any = None
499
506
  module_layout = layout if first else None
500
507
  if subpath.suffix == ".md":
501
508
  data = subpath
509
+ component = markdown_component
502
510
  reload.reloader.watcher.add_file(subpath)
503
511
  elif subpath.is_dir():
504
- children = generate_routes_directory(subpath)
512
+ children = generate_routes_directory(subpath, markdown_component=markdown_component)
505
513
  else:
506
514
  reload.reloader.watcher.add_file(subpath)
507
515
  module = source_to_module(subpath, initial_namespace=initial_namespace)
508
- title = get_title(module)
509
- children = getattr(module, "routes", children)
510
- children = fix_routes(children, subpath)
511
- module_layout = getattr(module, "Layout", module_layout)
512
- route = solara.Route(route_path, component=component, module=module, label=title, children=children, data=data, layout=module_layout, file=subpath)
516
+ return _generate_route(route_path, module, default_layout=module_layout)
517
+ route = solara.Route(route_path, component=component, module=module, label=title, children=children, data=data, layout=layout, file=subpath)
513
518
  return route
519
+
520
+
521
+ def _generate_route(route_path: str, module: ModuleType, default_layout=None, data=None) -> solara.Route:
522
+ path = Path(module.__file__) if module.__file__ is not None else None
523
+ title = get_title(module)
524
+ layout = getattr(module, "Layout", default_layout)
525
+ if inspect.isclass(layout) and issubclass(layout, ipywidgets.Layout):
526
+ layout = None
527
+ component = None
528
+ children = getattr(module, "routes", [])
529
+ root_route = get_root(children)
530
+ # if we have no children or the children have no explicit root component (at '/')
531
+ if not children or (root_route and root_route.component is None):
532
+ component = get_page(module, required=False)
533
+ if root_route and component and root_route.component and component is not root_route.component:
534
+ warnings.warn(
535
+ f"In {path}, you defined a Page component, but also a component on the root route (with path='/') "
536
+ "which is not equal to the Page component at the module level. This is not recommended."
537
+ )
538
+ return solara.Route(route_path, component=component, module=module, label=title, children=children, data=data, layout=layout, file=path)
539
+
540
+
541
+ def get_root(routes: List[solara.Route]) -> Optional[solara.Route]:
542
+ for route in routes:
543
+ if route.path == "/":
544
+ return route
545
+ return None
@@ -221,7 +221,7 @@ def memoize(
221
221
  memory content.
222
222
 
223
223
  The storage can be any object that implements the MutableMapping interface, for instance a dict or
224
- a cachetools.LRUCache. Or a new instance of `solara.cache.Memory`, see [caching](/docs/reference/caching)
224
+ a cachetools.LRUCache. Or a new instance of `solara.cache.Memory`, see [caching](/documentation/getting_started/reference/caching)
225
225
  for cache storage options.
226
226
 
227
227
  The return value of the decorator behaves like the original function, but also has a few attributes:
@@ -233,7 +233,7 @@ def memoize(
233
233
  If the value is already cached, the function will not be executed in a thread.
234
234
 
235
235
 
236
- See also the [reference on caching](/docs/reference/caching) for more caching details.
236
+ See also the [reference on caching](/documentation/getting_started/reference/caching) for more caching details.
237
237
 
238
238
  """
239
239
 
@@ -60,7 +60,7 @@
60
60
  const div = document.createElement("div")
61
61
  const div2 = document.createElement("div")
62
62
  div.innerHTML = `Run <code>${jupyter_python_executable} -m pip install ${needsInstall.join(" ")}</code>. Refresh the page after installation.`
63
- div2.innerHTML = `Visit <a href="https://solara.dev/docs/troubleshoot" target="_blank">https://solara/dev/docs/troubleshoot</a> for more information.`
63
+ div2.innerHTML = `Visit <a href="https://solara.dev/documentation/getting_started/troubleshoot" target="_blank">https://solara/dev/documentation/getting_started/troubleshoot</a> for more information.`
64
64
  rootEl.appendChild(div)
65
65
  rootEl.appendChild(div2)
66
66
  }
@@ -46,7 +46,7 @@ from .echarts import FigureEcharts # noqa: #F401 F403
46
46
  from .figure_altair import FigureAltair, AltairChart # noqa: #F401 F403
47
47
  from .meta import Meta # noqa: #F401 F403
48
48
  from .columns import Columns, ColumnsResponsive # noqa: #F401 F403
49
- from .file_drop import FileDrop # noqa: #F401 F403
49
+ from .file_drop import FileDrop, FileDropMultiple # noqa: #F401 F403
50
50
  from .file_download import FileDownload # noqa: #F401 F403
51
51
  from .tooltip import Tooltip # noqa: #F401 F403
52
52
  from .card import Card, CardActions # noqa: #F401 F403
@@ -90,7 +90,7 @@ def AppBar(children=[]):
90
90
 
91
91
  This component does not need to be a direct child of the AppLayout, it can be at any level in your component tree.
92
92
 
93
- If a [Tabs](/api/tabs) component is used as direct child of the app bar, it will be shown under the app bar.
93
+ If a [Tabs](/documentation/components/lab/tabs) component is used as direct child of the app bar, it will be shown under the app bar.
94
94
 
95
95
  ## Example showing an app bar
96
96
  ```solara
@@ -204,11 +204,11 @@ def AppLayout(
204
204
  ):
205
205
  """The default layout for Solara apps. It consists of an toolbar bar, a sidebar and a main content area.
206
206
 
207
- * The title of the app is set using the [Title](/api/title) component.
208
- * The sidebar content is set using the [Sidebar](/api/sidebar) component.
207
+ * The title of the app is set using the [Title](/documentation/components/page/title) component.
208
+ * The sidebar content is set using the [Sidebar](/documentation/components/layout/sidebar) component.
209
209
  * The content is set by the `Page` component provided by the user.
210
210
 
211
- This component is usually not used directly, but rather through via the [Layout system](/docs/howto/layout).
211
+ This component is usually not used directly, but rather through via the [Layout system](/documentation/advanced/howto/layout).
212
212
 
213
213
  The sidebar is only added when the AppLayout has more than one child.
214
214
 
@@ -224,7 +224,7 @@ def AppLayout(
224
224
 
225
225
  * `children`: The children of the AppLayout. The first child is used as the sidebar content, the rest as the main content.
226
226
  * `sidebar_open`: Whether the sidebar is open or not.
227
- * `title`: The title of the app shown in the app bar, can also be set using the [Title](/api/title) component.
227
+ * `title`: The title of the app shown in the app bar, can also be set using the [Title](/documentation/components/page/title) component.
228
228
  * `toolbar_dark`: Whether the toolbar should be dark or not.
229
229
  * `navigation`: Whether the navigation tabs based on routing should be shown.
230
230
  * `color`: The color of the toolbar.
@@ -1,10 +1,9 @@
1
1
  from typing import Callable, Dict, List, Optional, Union
2
2
 
3
- from reacton import ipyvue
4
- from reacton import ipyvuetify as v
5
-
6
3
  import solara
7
4
  import solara.util
5
+ from reacton import ipyvue
6
+ from reacton import ipyvuetify as v
8
7
 
9
8
 
10
9
  @solara.component
@@ -51,7 +50,8 @@ def Button(
51
50
  - `disabled`: Whether the button is disabled.
52
51
  - `text`: Whether the button should be displayed as text, it has no shadow and no background.
53
52
  - `outlined`: Whether the button should be displayed as outlined, it has no background.
54
- - `value`: (Optional) When used as a child of a ToggleButtons component, the value of the selected button, see [ToggleButtons](/api/togglebuttons).
53
+ - `value`: (Optional) When used as a child of a ToggleButtons component, the value of the selected button, see
54
+ [ToggleButtons](/documentation/components/input/togglebuttons).
55
55
  - `classes`: Additional CSS classes to apply.
56
56
  - `style`: CSS style to apply.
57
57
 
@@ -1,7 +1,6 @@
1
1
  from typing import Dict, List, Optional, Union
2
2
 
3
3
  import reacton.ipyvuetify as v
4
-
5
4
  import solara
6
5
  from solara.util import _combine_classes
7
6
 
@@ -79,7 +78,7 @@ def Card(
79
78
  def CardActions(children: List[solara.Element] = []):
80
79
  """Container for actions in a card.
81
80
 
82
- See [Card](/api/card) for an example.
81
+ See [Card](/documentation/components/layout/card) for an example.
83
82
 
84
83
  # Arguments
85
84
 
@@ -20,8 +20,8 @@ def _widget_from_signature(classname, base_class: Type[widgets.Widget], func: Ca
20
20
  if name.startswith("event_"):
21
21
  event_name = name[6:]
22
22
 
23
- def event_handler(self, data, buffers=None, event_name=event_name):
24
- callback = self._event_callbacks.get(event_name)
23
+ def event_handler(self, data, buffers=None, event_name=event_name, param=param):
24
+ callback = self._event_callbacks.get(event_name, param.default)
25
25
  if callback:
26
26
  if buffers:
27
27
  callback(data, buffers)
@@ -29,14 +29,15 @@ def _widget_from_signature(classname, base_class: Type[widgets.Widget], func: Ca
29
29
  callback(data)
30
30
 
31
31
  classprops[f"vue_{event_name}"] = event_handler
32
- if name.startswith("on_") and name[3:] in parameters:
32
+ elif name.startswith("on_") and name[3:] in parameters:
33
33
  # callback, will be handled by reacton
34
34
  continue
35
- if param.default == inspect.Parameter.empty:
36
- trait = traitlets.Any()
37
35
  else:
38
- trait = traitlets.Any(default_value=param.default)
39
- classprops[name] = trait.tag(sync=True, **widgets.widget_serialization)
36
+ if param.default == inspect.Parameter.empty:
37
+ trait = traitlets.Any()
38
+ else:
39
+ trait = traitlets.Any(default_value=param.default)
40
+ classprops[name] = trait.tag(sync=True, **widgets.widget_serialization)
40
41
  # maps event_foo to a callable
41
42
  classprops["_event_callbacks"] = traitlets.Dict(default_value={})
42
43
 
@@ -78,7 +79,7 @@ def component_vue(vue_path: str, vuetify=True) -> Callable[[Callable[P, None]],
78
79
  [See the vue v2 api](https://v2.vuejs.org/v2/api/) for more information on how to use Vue, like `watch`,
79
80
  `methods` and lifecycle hooks such as `mounted` and `destroyed`.
80
81
 
81
- See the [Vue component example](/examples/general/vue_component) for an example of how to use this decorator.
82
+ See the [Vue component example](/documentation/examples/general/vue_component) for an example of how to use this decorator.
82
83
 
83
84
  ## Arguments
84
85