solara-ui 1.34.0__tar.gz → 1.35.0__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 (580) hide show
  1. {solara_ui-1.34.0 → solara_ui-1.35.0}/PKG-INFO +1 -1
  2. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/__init__.py +1 -1
  3. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/applayout.py +1 -1
  4. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/echarts.vue +2 -8
  5. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/file_browser.py +13 -14
  6. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/markdown.py +4 -6
  7. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/markdown_editor.vue +2 -5
  8. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/sql_code.vue +2 -5
  9. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/cdn_helper.py +11 -1
  10. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/esm.py +1 -1
  11. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/reload.py +24 -15
  12. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/static/solara_bootstrap.py +1 -1
  13. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/templates/solara.html.j2 +5 -0
  14. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/threaded.py +10 -1
  15. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/test/pytest_plugin.py +2 -1
  16. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/components/algolia_api.vue +2 -5
  17. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/components/sidebar.py +26 -20
  18. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/changelog/changelog.md +18 -0
  19. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/10-howto/30-testing.md +4 -0
  20. solara_ui-1.35.0/solara/website/pages/documentation/advanced/content/30-enterprise/00-overview.md +7 -0
  21. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/widgets/vue/gridlayout.vue +2 -5
  22. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/widgets/vue/vegalite.vue +2 -5
  23. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/api_test.py +2 -2
  24. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/server_test.py +2 -2
  25. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/cdn_helper_test.py +23 -0
  26. solara_ui-1.34.0/solara/website/pages/documentation/advanced/content/30-enterprise/00-overview.md +0 -1
  27. {solara_ui-1.34.0 → solara_ui-1.35.0}/.gitignore +0 -0
  28. {solara_ui-1.34.0 → solara_ui-1.35.0}/LICENSE +0 -0
  29. {solara_ui-1.34.0 → solara_ui-1.35.0}/README.md +0 -0
  30. {solara_ui-1.34.0 → solara_ui-1.35.0}/prefix/etc/jupyter/jupyter_notebook_config.d/solara.json +0 -0
  31. {solara_ui-1.34.0 → solara_ui-1.35.0}/prefix/etc/jupyter/jupyter_server_config.d/solara.json +0 -0
  32. {solara_ui-1.34.0 → solara_ui-1.35.0}/pyproject.toml +0 -0
  33. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/__main__.py +0 -0
  34. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/alias.py +0 -0
  35. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/autorouting.py +0 -0
  36. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/cache.py +0 -0
  37. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/checks.html +0 -0
  38. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/checks.py +0 -0
  39. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/comm.py +0 -0
  40. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/__init__.py +0 -0
  41. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/alert.py +0 -0
  42. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/button.py +0 -0
  43. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/card.py +0 -0
  44. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/checkbox.py +0 -0
  45. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/code_highlight_css.py +0 -0
  46. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/code_highlight_css.vue +0 -0
  47. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/columns.py +0 -0
  48. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/component_vue.py +0 -0
  49. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/cross_filter.py +0 -0
  50. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/dataframe.py +0 -0
  51. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/datatable.py +0 -0
  52. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/datatable.vue +0 -0
  53. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/details.py +0 -0
  54. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/download.vue +0 -0
  55. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/echarts.py +0 -0
  56. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/figure_altair.py +0 -0
  57. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/file_download.py +0 -0
  58. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/file_drop.py +0 -0
  59. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/file_drop.vue +0 -0
  60. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/file_list_widget.vue +0 -0
  61. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/head.py +0 -0
  62. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/head_tag.py +0 -0
  63. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/head_tag.vue +0 -0
  64. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/image.py +0 -0
  65. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/input.py +0 -0
  66. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/link.py +0 -0
  67. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/markdown_editor.py +0 -0
  68. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/matplotlib.py +0 -0
  69. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/meta.py +0 -0
  70. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/misc.py +0 -0
  71. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/pivot_table.py +0 -0
  72. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/pivot_table.vue +0 -0
  73. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/progress.py +0 -0
  74. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/select.py +0 -0
  75. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/select.vue +0 -0
  76. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/slider.py +0 -0
  77. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/slider_date.vue +0 -0
  78. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/spinner-solara.vue +0 -0
  79. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/spinner.py +0 -0
  80. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/sql_code.py +0 -0
  81. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/style.py +0 -0
  82. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/switch.py +0 -0
  83. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/tab_navigation.py +0 -0
  84. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/title.py +0 -0
  85. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/title.vue +0 -0
  86. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/togglebuttons.py +0 -0
  87. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/components/tooltip.py +0 -0
  88. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/datatypes.py +0 -0
  89. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/express.py +0 -0
  90. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/hooks/__init__.py +0 -0
  91. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/hooks/dataframe.py +0 -0
  92. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/hooks/misc.py +0 -0
  93. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/hooks/use_reactive.py +0 -0
  94. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/hooks/use_thread.py +0 -0
  95. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/kitchensink.py +0 -0
  96. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/lab/__init__.py +0 -0
  97. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/lab/components/__init__.py +0 -0
  98. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/lab/components/chat.py +0 -0
  99. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/lab/components/confirmation_dialog.py +0 -0
  100. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/lab/components/cross_filter.py +0 -0
  101. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/lab/components/input_date.py +0 -0
  102. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/lab/components/menu.py +0 -0
  103. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/lab/components/menu.vue +0 -0
  104. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/lab/components/tabs.py +0 -0
  105. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/lab/components/theming.py +0 -0
  106. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/lab/components/theming.vue +0 -0
  107. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/lab/hooks/__init__.py +0 -0
  108. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/lab/hooks/dataframe.py +0 -0
  109. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/lab/toestand.py +0 -0
  110. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/lab/utils/__init__.py +0 -0
  111. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/lab/utils/cookies.py +0 -0
  112. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/lab/utils/dataframe.py +0 -0
  113. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/lab/utils/headers.py +0 -0
  114. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/layout.py +0 -0
  115. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/lifecycle.py +0 -0
  116. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/minisettings.py +0 -0
  117. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/py.typed +0 -0
  118. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/reactive.py +0 -0
  119. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/routing.py +0 -0
  120. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/scope/__init__.py +0 -0
  121. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/scope/types.py +0 -0
  122. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/__init__.py +0 -0
  123. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/app.py +0 -0
  124. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/assets/custom.css +0 -0
  125. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/assets/custom.js +0 -0
  126. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/assets/favicon.png +0 -0
  127. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/assets/favicon.svg +0 -0
  128. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/assets/style.css +0 -0
  129. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/assets/theme-dark.css +0 -0
  130. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/assets/theme-light.css +0 -0
  131. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/assets/theme.js +0 -0
  132. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/fastapi.py +0 -0
  133. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/flask.py +0 -0
  134. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/jupyter/__init__.py +0 -0
  135. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/jupyter/cdn_handler.py +0 -0
  136. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/jupyter/server_extension.py +0 -0
  137. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/jupytertools.py +0 -0
  138. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/kernel.py +0 -0
  139. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/kernel_context.py +0 -0
  140. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/patch.py +0 -0
  141. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/server.py +0 -0
  142. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/settings.py +0 -0
  143. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/shell.py +0 -0
  144. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/starlette.py +0 -0
  145. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/static/ansi.js +0 -0
  146. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/static/highlight-dark.css +0 -0
  147. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/static/highlight.css +0 -0
  148. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/static/main-vuetify.js +0 -0
  149. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/static/main.js +0 -0
  150. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/static/sun.svg +0 -0
  151. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/static/webworker.js +0 -0
  152. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/telemetry.py +0 -0
  153. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/templates/index.html.j2 +0 -0
  154. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/templates/loader-plain.css +0 -0
  155. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/templates/loader-plain.html +0 -0
  156. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/templates/loader-solara.css +0 -0
  157. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/templates/loader-solara.html +0 -0
  158. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/templates/plain.html +0 -0
  159. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/utils.py +0 -0
  160. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/server/websocket.py +0 -0
  161. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/settings.py +0 -0
  162. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/tasks.py +0 -0
  163. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/template/button.py +0 -0
  164. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/template/markdown.py +0 -0
  165. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/template/portal/.flake8 +0 -0
  166. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/template/portal/.pre-commit-config.yaml +0 -0
  167. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/template/portal/LICENSE +0 -0
  168. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/template/portal/Procfile +0 -0
  169. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/template/portal/mypy.ini +0 -0
  170. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/template/portal/pyproject.toml +0 -0
  171. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/template/portal/solara_portal/__init__.py +0 -0
  172. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/template/portal/solara_portal/components/__init__.py +0 -0
  173. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/template/portal/solara_portal/components/article.py +0 -0
  174. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/template/portal/solara_portal/components/data.py +0 -0
  175. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/template/portal/solara_portal/components/header.py +0 -0
  176. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/template/portal/solara_portal/components/layout.py +0 -0
  177. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/template/portal/solara_portal/content/articles/equis-in-vidi.md +0 -0
  178. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/template/portal/solara_portal/content/articles/substiterat-vati.md +0 -0
  179. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/template/portal/solara_portal/data.py +0 -0
  180. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/template/portal/solara_portal/pages/__init__.py +0 -0
  181. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/template/portal/solara_portal/pages/article/__init__.py +0 -0
  182. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/template/portal/solara_portal/pages/tabular.py +0 -0
  183. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/template/portal/solara_portal/pages/viz/__init__.py +0 -0
  184. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/template/portal/solara_portal/pages/viz/overview.py +0 -0
  185. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/test/__init__.py +0 -0
  186. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/toestand.py +0 -0
  187. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/util.py +0 -0
  188. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/__init__.py +0 -0
  189. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/assets/custom.css +0 -0
  190. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/assets/images/logo-small.png +0 -0
  191. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/assets/images/logo.svg +0 -0
  192. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/assets/images/logo_white.svg +0 -0
  193. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/assets/theme.js +0 -0
  194. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/components/__init__.py +0 -0
  195. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/components/algolia.py +0 -0
  196. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/components/algolia.vue +0 -0
  197. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/components/docs.py +0 -0
  198. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/components/header.py +0 -0
  199. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/components/hero.py +0 -0
  200. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/components/mailchimp.py +0 -0
  201. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/components/mailchimp.vue +0 -0
  202. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/components/markdown.py +0 -0
  203. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/components/notebook.py +0 -0
  204. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/__init__.py +0 -0
  205. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/apps/__init__.py +0 -0
  206. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/apps/authorization/__init__.py +0 -0
  207. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/apps/authorization/admin.py +0 -0
  208. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/apps/authorization/users.py +0 -0
  209. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/apps/jupyter-dashboard-1.py +0 -0
  210. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/apps/layout-demo.py +0 -0
  211. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/apps/multipage/__init__.py +0 -0
  212. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/apps/multipage/page1.py +0 -0
  213. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/apps/multipage/page2.py +0 -0
  214. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/apps/scatter.py +0 -0
  215. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/apps/scrolling.py +0 -0
  216. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/apps/tutorial-streamlit.py +0 -0
  217. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/changelog/__init__.py +0 -0
  218. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/contact/__init__.py +0 -0
  219. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/contact/contact.md +0 -0
  220. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/doc_use_download.py +0 -0
  221. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/__init__.py +0 -0
  222. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/__init__.py +0 -0
  223. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/00-overview.md +0 -0
  224. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/10-howto/00-overview.md +0 -0
  225. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/10-howto/10-multipage.md +0 -0
  226. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/10-howto/20-layout.md +0 -0
  227. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/10-howto/31-debugging.md +0 -0
  228. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/10-howto/40-embed.md +0 -0
  229. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/10-howto/50-ipywidget_libraries.md +0 -0
  230. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/15-reference/00-overview.md +0 -0
  231. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/15-reference/40-static_files.md +0 -0
  232. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/15-reference/41-asset-files.md +0 -0
  233. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/15-reference/60-static-site-generation.md +0 -0
  234. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/15-reference/70-search.md +0 -0
  235. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/15-reference/80-reloading.md +0 -0
  236. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/15-reference/90-notebook-support.md +0 -0
  237. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/15-reference/95-caching.md +0 -0
  238. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/20-understanding/00-introduction.md +0 -0
  239. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/20-understanding/05-ipywidgets.md +0 -0
  240. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/20-understanding/06-ipyvuetify.md +0 -0
  241. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/20-understanding/10-reacton.md +0 -0
  242. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/20-understanding/12-reacton-basics.md +0 -0
  243. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/20-understanding/15-anatomy.md +0 -0
  244. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/20-understanding/17-rules-of-hooks.md +0 -0
  245. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/20-understanding/18-containers.md +0 -0
  246. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/20-understanding/20-solara.md +0 -0
  247. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/20-understanding/40-routing.md +0 -0
  248. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/20-understanding/50-solara-server.md +0 -0
  249. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/20-understanding/60-voila.md +0 -0
  250. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/30-enterprise/10-oauth.md +0 -0
  251. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/40-development/00-overview.md +0 -0
  252. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/40-development/01-contribute.md +0 -0
  253. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/advanced/content/40-development/10-setup.md +0 -0
  254. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/__init__.py +0 -0
  255. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/cross_filter/__init__.py +0 -0
  256. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/cross_filter/cross_filter_dataframe.py +0 -0
  257. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/cross_filter/cross_filter_report.py +0 -0
  258. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/cross_filter/cross_filter_select.py +0 -0
  259. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/cross_filter/cross_filter_slider.py +0 -0
  260. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/hooks/__init__.py +0 -0
  261. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/hooks/use_cross_filter.py +0 -0
  262. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/hooks/use_dark_effective.py +0 -0
  263. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/hooks/use_effect.md +0 -0
  264. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/hooks/use_effect.py +0 -0
  265. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/hooks/use_exception.py +0 -0
  266. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/hooks/use_memo.md +0 -0
  267. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/hooks/use_memo.py +0 -0
  268. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/hooks/use_previous.py +0 -0
  269. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/hooks/use_reactive.py +0 -0
  270. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/hooks/use_state.py +0 -0
  271. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/hooks/use_state_or_update.py +0 -0
  272. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/hooks/use_thread.md +0 -0
  273. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/hooks/use_thread.py +0 -0
  274. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/hooks/use_trait_observe.py +0 -0
  275. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/routing/__init__.py +0 -0
  276. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/routing/generate_routes.py +0 -0
  277. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/routing/generate_routes_directory.py +0 -0
  278. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/routing/resolve_path.py +0 -0
  279. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/routing/route.py +0 -0
  280. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/routing/use_route.py +0 -0
  281. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/routing/use_router.py +0 -0
  282. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/utilities/__init__.py +0 -0
  283. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/utilities/component_vue.py +0 -0
  284. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/utilities/computed.py +0 -0
  285. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/utilities/display.py +0 -0
  286. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/utilities/get_kernel_id.py +0 -0
  287. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/utilities/get_session_id.py +0 -0
  288. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/utilities/memoize.py +0 -0
  289. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/utilities/on_kernel_start.py +0 -0
  290. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/utilities/reactive.py +0 -0
  291. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/api/utilities/widget.py +0 -0
  292. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/__init__.py +0 -0
  293. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/advanced/__init__.py +0 -0
  294. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/advanced/link.py +0 -0
  295. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/advanced/meta.py +0 -0
  296. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/advanced/style.py +0 -0
  297. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/common.py +0 -0
  298. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/data/__init__.py +0 -0
  299. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/data/dataframe.py +0 -0
  300. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/data/pivot_table.py +0 -0
  301. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/enterprise/__init__.py +0 -0
  302. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/enterprise/avatar.py +0 -0
  303. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/enterprise/avatar_menu.py +0 -0
  304. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/input/__init__.py +0 -0
  305. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/input/button.py +0 -0
  306. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/input/checkbox.py +0 -0
  307. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/input/file_browser.py +0 -0
  308. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/input/file_drop.py +0 -0
  309. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/input/input.py +0 -0
  310. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/input/select.py +0 -0
  311. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/input/slider.py +0 -0
  312. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/input/switch.py +0 -0
  313. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/input/togglebuttons.py +0 -0
  314. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/lab/__init__.py +0 -0
  315. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/lab/chat.py +0 -0
  316. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/lab/confirmation_dialog.py +0 -0
  317. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/lab/cookies_headers.py +0 -0
  318. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/lab/input_date.py +0 -0
  319. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/lab/menu.py +0 -0
  320. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/lab/tab.py +0 -0
  321. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/lab/tabs.py +0 -0
  322. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/lab/task.py +0 -0
  323. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/lab/theming.py +0 -0
  324. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/lab/use_task.py +0 -0
  325. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/layout/__init__.py +0 -0
  326. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/layout/app_bar.py +0 -0
  327. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/layout/app_bar_title.py +0 -0
  328. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/layout/app_layout.py +0 -0
  329. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/layout/card.py +0 -0
  330. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/layout/card_actions.py +0 -0
  331. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/layout/column.py +0 -0
  332. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/layout/columns.py +0 -0
  333. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/layout/columns_responsive.py +0 -0
  334. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/layout/details.py +0 -0
  335. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/layout/griddraggable.py +0 -0
  336. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/layout/gridfixed.py +0 -0
  337. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/layout/hbox.py +0 -0
  338. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/layout/row.py +0 -0
  339. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/layout/sidebar.py +0 -0
  340. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/layout/vbox.py +0 -0
  341. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/output/__init__.py +0 -0
  342. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/output/file_download.py +0 -0
  343. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/output/html.py +0 -0
  344. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/output/image.py +0 -0
  345. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/output/markdown.py +0 -0
  346. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/output/markdown_editor.py +0 -0
  347. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/output/sql_code.py +0 -0
  348. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/output/tooltip.py +0 -0
  349. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/page/__init__.py +0 -0
  350. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/page/head.py +0 -0
  351. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/page/title.py +0 -0
  352. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/status/__init__.py +0 -0
  353. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/status/error.py +0 -0
  354. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/status/info.py +0 -0
  355. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/status/progress.py +0 -0
  356. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/status/spinner.py +0 -0
  357. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/status/success.py +0 -0
  358. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/status/warning.py +0 -0
  359. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/viz/__init__.py +0 -0
  360. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/viz/altair.py +0 -0
  361. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/viz/echarts.py +0 -0
  362. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/viz/matplotlib.py +0 -0
  363. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/viz/plotly.py +0 -0
  364. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/components/viz/plotly_express.py +0 -0
  365. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/__init__.py +0 -0
  366. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/ai/__init__.py +0 -0
  367. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/ai/chatbot.py +0 -0
  368. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/ai/tokenizer.py +0 -0
  369. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/basics/__init__.py +0 -0
  370. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/basics/sine.py +0 -0
  371. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/fullscreen/__init__.py +0 -0
  372. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/fullscreen/authorization.py +0 -0
  373. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/fullscreen/layout_demo.py +0 -0
  374. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/fullscreen/multipage.py +0 -0
  375. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/fullscreen/scatter.py +0 -0
  376. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/fullscreen/scrolling.py +0 -0
  377. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/fullscreen/tutorial_streamlit.py +0 -0
  378. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/general/__init__.py +0 -0
  379. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/general/custom_storage.py +0 -0
  380. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/general/deploy_model.py +0 -0
  381. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/general/live_update.py +0 -0
  382. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/general/login_oauth.py +0 -0
  383. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/general/mycard.vue +0 -0
  384. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/general/pokemon_search.py +0 -0
  385. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/general/vue_component.py +0 -0
  386. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/ipycanvas.py +0 -0
  387. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/libraries/__init__.py +0 -0
  388. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/libraries/altair.py +0 -0
  389. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/libraries/bqplot.py +0 -0
  390. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/libraries/ipyleaflet.py +0 -0
  391. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/libraries/ipyleaflet_advanced.py +0 -0
  392. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/utilities/__init__.py +0 -0
  393. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/utilities/calculator.py +0 -0
  394. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/utilities/countdown_timer.py +0 -0
  395. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/utilities/todo.py +0 -0
  396. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/visualization/__init__.py +0 -0
  397. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/visualization/annotator.py +0 -0
  398. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/visualization/linked_views.py +0 -0
  399. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/examples/visualization/plotly.py +0 -0
  400. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/faq/__init__.py +0 -0
  401. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/faq/content/99-faq.md +0 -0
  402. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/getting_started/__init__.py +0 -0
  403. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/getting_started/content/00-quickstart.md +0 -0
  404. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/getting_started/content/01-introduction.md +0 -0
  405. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/getting_started/content/02-installing.md +0 -0
  406. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/00-overview.md +0 -0
  407. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/10_data_science.py +0 -0
  408. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/20-web-app.md +0 -0
  409. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/30-ipywidgets.md +0 -0
  410. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/40-streamlit.md +0 -0
  411. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/50-dash.md +0 -0
  412. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/60-jupyter-dashboard-part1.py +0 -0
  413. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/SF_crime_sample.csv.gz +0 -0
  414. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/_data_science.ipynb +0 -0
  415. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/_jupyter_dashboard_1.ipynb +0 -0
  416. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/getting_started/content/05-fundamentals/00-overview.md +0 -0
  417. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/getting_started/content/05-fundamentals/10-components.md +0 -0
  418. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/getting_started/content/05-fundamentals/50-state-management.md +0 -0
  419. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/getting_started/content/07-deploying/00-overview.md +0 -0
  420. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/getting_started/content/07-deploying/10-self-hosted.md +0 -0
  421. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/getting_started/content/07-deploying/20-cloud-hosted.md +0 -0
  422. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/getting_started/content/80-what-is-lab.md +0 -0
  423. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/documentation/getting_started/content/90-troubleshoot.md +0 -0
  424. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/docutils.py +0 -0
  425. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/showcase/__init__.py +0 -0
  426. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/showcase/domino_code_assist.py +0 -0
  427. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/showcase/planeto_tessa.py +0 -0
  428. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/showcase/solara_dev.py +0 -0
  429. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/showcase/solarathon_2023_team_2.py +0 -0
  430. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/showcase/solarathon_2023_team_4.py +0 -0
  431. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/showcase/solarathon_2023_team_5.py +0 -0
  432. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/showcase/solarathon_2023_team_6.py +0 -0
  433. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/pages/showcase/wanderlust.py +0 -0
  434. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/public/beach.jpeg +0 -0
  435. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/public/logo.svg +0 -0
  436. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/public/social/discord.svg +0 -0
  437. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/public/social/github.svg +0 -0
  438. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/public/social/twitter.svg +0 -0
  439. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/public/success.html +0 -0
  440. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/templates/index.html.j2 +0 -0
  441. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/website/utils.py +0 -0
  442. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/widgets/__init__.py +0 -0
  443. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/widgets/vue/html.vue +0 -0
  444. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/widgets/vue/navigator.vue +0 -0
  445. {solara_ui-1.34.0 → solara_ui-1.35.0}/solara/widgets/widgets.py +0 -0
  446. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/__init__.py +0 -0
  447. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/conftest.py +0 -0
  448. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/docs/docs_howto_event_with_future_test.py +0 -0
  449. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/docs/docs_howto_event_with_polling_test.py +0 -0
  450. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/docs/docs_howto_no_browser_api_find_testing_test.py +0 -0
  451. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/docs/docs_howto_no_browser_testing_test.py +0 -0
  452. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/docs/docs_howto_no_browser_threaded_test.py +0 -0
  453. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/__init__.py +0 -0
  454. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/app_widget.py +0 -0
  455. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/assets/assets1/common.js +0 -0
  456. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/assets/assets1/unique1.js +0 -0
  457. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/assets/assets2/common.js +0 -0
  458. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/assets/assets2/custom.css +0 -0
  459. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/assets/assets2/custom.js +0 -0
  460. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/assets/assets2/unique2.js +0 -0
  461. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/assets_test.py +0 -0
  462. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/async_test.py +0 -0
  463. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/cdn_test.py +0 -0
  464. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/cmdline_test.py +0 -0
  465. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/conftest.py +0 -0
  466. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/create_test.py +0 -0
  467. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/enterprise/__init__.py +0 -0
  468. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/enterprise/oauth_test.py +0 -0
  469. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/error_test.py +0 -0
  470. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/esm_test.py +0 -0
  471. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/file_download_test.py +0 -0
  472. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/flask_test.py +0 -0
  473. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/input_date_test.py +0 -0
  474. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/latex_test.py +0 -0
  475. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/lifecycle_test.py +0 -0
  476. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/markdown_test.py +0 -0
  477. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/menu_test.py +0 -0
  478. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/popout_test.py +0 -0
  479. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/reconnect_test.py +0 -0
  480. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/reload/apps.py +0 -0
  481. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/router_test.py +0 -0
  482. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/ssg_test.py +0 -0
  483. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/starlette_test.py +0 -0
  484. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/test.vue +0 -0
  485. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/testapp.py +0 -0
  486. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/integration/widget_test.py +0 -0
  487. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-linux-ipywidgets-7-changed-reference.png +0 -0
  488. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-linux-ipywidgets-7-reference.png +0 -0
  489. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-linux-ipywidgets-8-changed-reference.png +0 -0
  490. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-linux-ipywidgets-8-reference.png +0 -0
  491. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_lab-chromium-linux-ipywidgets-7-reference.png +0 -0
  492. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_lab-chromium-linux-ipywidgets-8-reference.png +0 -0
  493. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_notebook-chromium-linux-ipywidgets-7-reference.png +0 -0
  494. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_notebook-chromium-linux-ipywidgets-8-reference.png +0 -0
  495. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-solara-chromium-linux-ipywidgets-7-reference.png +0 -0
  496. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-solara-chromium-linux-ipywidgets-8-reference.png +0 -0
  497. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-voila-chromium-linux-ipywidgets-7-reference.png +0 -0
  498. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-voila-chromium-linux-ipywidgets-8-reference.png +0 -0
  499. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-starlette-solara-chromium-linux-ipywidgets-7-reference.png +0 -0
  500. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-starlette-solara-chromium-linux-ipywidgets-8-reference.png +0 -0
  501. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-jupyter_lab-chromium-linux-reference.png +0 -0
  502. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-jupyter_notebook-chromium-linux-reference.png +0 -0
  503. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-solara-chromium-linux-reference.png +0 -0
  504. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-voila-chromium-linux-reference.png +0 -0
  505. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-starlette-solara-chromium-linux-reference.png +0 -0
  506. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_widget_button_solara-flask-chromium-linux-ipyvuetify3-reference.png +0 -0
  507. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_widget_button_solara-flask-chromium-linux-reference.png +0 -0
  508. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_widget_button_solara-starlette-chromium-linux-ipyvuetify3-reference.png +0 -0
  509. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_widget_button_solara-starlette-chromium-linux-reference.png +0 -0
  510. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/__init__.py +0 -0
  511. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/app_test.py +0 -0
  512. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/applayout_test.py +0 -0
  513. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/autorouting_test.py +0 -0
  514. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/cache_test.py +0 -0
  515. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/chat_test.py +0 -0
  516. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/checkbox_test.py +0 -0
  517. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/common.py +0 -0
  518. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/component_frontend_test.py +0 -0
  519. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/component_vue_test.vue +0 -0
  520. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/confirmation_dialog_test.py +0 -0
  521. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/conftest.py +0 -0
  522. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/cross_filter_component_test.py +0 -0
  523. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/cross_filter_test.py +0 -0
  524. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/dataframe_test.py +0 -0
  525. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/datatable_test.py +0 -0
  526. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/display_test.py +0 -0
  527. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/express_test.py +0 -0
  528. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/file_browser_test.py +0 -0
  529. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/file_download_test.py +0 -0
  530. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/hooks_test.py +0 -0
  531. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/input_date_test.py +0 -0
  532. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/input_test.py +0 -0
  533. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/kernel_test.py +0 -0
  534. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/lab/__init__.py +0 -0
  535. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/lifecycle_test.py +0 -0
  536. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/matplotlib_test.py +0 -0
  537. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/no_solara_test.py +0 -0
  538. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/output_widget_test.py +0 -0
  539. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/patch_test.py +0 -0
  540. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/pivottable_test.py +0 -0
  541. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/reload_test.py +0 -0
  542. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/router_test.py +0 -0
  543. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/select_test.py +0 -0
  544. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/settings_test.py +0 -0
  545. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/shell_test.py +0 -0
  546. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/slider_test.py +0 -0
  547. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/solara_test_apps/__init__.py +0 -0
  548. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/solara_test_apps/food/__init__.py +0 -0
  549. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/solara_test_apps/food/food.py +0 -0
  550. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/solara_test_apps/food/index.py +0 -0
  551. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/solara_test_apps/kernel_start.py +0 -0
  552. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/solara_test_apps/multipage/01-home.py +0 -0
  553. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/solara_test_apps/multipage/02-my_fruit.py +0 -0
  554. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/solara_test_apps/multipage/03-some-markdown.md +0 -0
  555. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/solara_test_apps/multipage/04-a_directory/00-another-markdown.md +0 -0
  556. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/solara_test_apps/multipage/04-a_directory/01-not-an-app.py +0 -0
  557. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/solara_test_apps/multipage/04-a_directory/__init__.py +0 -0
  558. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/solara_test_apps/multipage/05-and-notebooks.ipynb +0 -0
  559. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/solara_test_apps/multipage/06-custom-routes.py +0 -0
  560. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/solara_test_apps/multipage/10-single-file-directory/single-file.md +0 -0
  561. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/solara_test_apps/multipage/99-some_other_python_script.py +0 -0
  562. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/solara_test_apps/multipage/some_other_file.txt +0 -0
  563. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/solara_test_apps/multipage-widgets/00-overview.md +0 -0
  564. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/solara_test_apps/multipage-widgets/01-views.py +0 -0
  565. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/solara_test_apps/multipage-widgets/02-likes.py +0 -0
  566. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/solara_test_apps/multipage-widgets/03-volume.py +0 -0
  567. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/solara_test_apps/multipage-widgets/04-color.ipynb +0 -0
  568. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/solara_test_apps/notebookapp_component.ipynb +0 -0
  569. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/solara_test_apps/notebookapp_element.ipynb +0 -0
  570. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/solara_test_apps/notebookapp_widget.ipynb +0 -0
  571. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/solara_test_apps/single_file.py +0 -0
  572. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/solara_test_apps/single_file_multiple_routes.py +0 -0
  573. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/solara_test_apps/single_file_routes.py +0 -0
  574. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/switch_test.py +0 -0
  575. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/tabs_test.py +0 -0
  576. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/task_test.py +0 -0
  577. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/telemetry_tests.py +0 -0
  578. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/toestand_computed_reload.py +0 -0
  579. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/toestand_test.py +0 -0
  580. {solara_ui-1.34.0 → solara_ui-1.35.0}/tests/unit/toggle_button_test.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: solara-ui
3
- Version: 1.34.0
3
+ Version: 1.35.0
4
4
  Dynamic: Summary
5
5
  Project-URL: Home, https://www.github.com/widgetti/solara
6
6
  Project-URL: Documentation, https://solara.dev
@@ -1,6 +1,6 @@
1
1
  """Build webapps using IPywidgets"""
2
2
 
3
- __version__ = "1.34.0"
3
+ __version__ = "1.35.0"
4
4
  github_url = "https://github.com/widgetti/solara"
5
5
  git_branch = "master"
6
6
 
@@ -342,7 +342,7 @@ def AppLayout(
342
342
  ):
343
343
  if not show_app_bar:
344
344
  AppIcon(sidebar_open, on_click=lambda: set_sidebar_open(not sidebar_open))
345
- v.Html(tag="div", children=children_sidebar, style_="padding: 12px;").meta(ref="sidebar-content")
345
+ v.Html(tag="div", children=children_sidebar, style_="padding: 12px; height: 100%").meta(ref="sidebar-content")
346
346
  if show_app_bar:
347
347
  # if hide_on_scroll is True, and we have a little bit of scrolling, vuetify seems to act strangely
348
348
  # when scrolling (on @mariobuikhuizen/vuetify v2.2.26-rc.0
@@ -93,10 +93,7 @@ module.exports = {
93
93
  document.head.appendChild(script);
94
94
  });
95
95
  },
96
- getBaseUrl() {
97
- if (window.solara && window.solara.rootPath !== undefined) {
98
- return solara.rootPath + "/";
99
- }
96
+ getJupyterBaseUrl() {
100
97
  // if base url is set, we use ./ for relative paths compared to the base url
101
98
  if (document.getElementsByTagName("base").length) {
102
99
  return "./";
@@ -113,10 +110,7 @@ module.exports = {
113
110
  return base;
114
111
  },
115
112
  getCdn() {
116
- return (
117
- (typeof solara_cdn !== "undefined" && solara_cdn) ||
118
- `${this.getBaseUrl()}_solara/cdn`
119
- );
113
+ return window.solara ? window.solara.cdn : `${this.getJupyterBaseUrl()}_solara/cdn`
120
114
  },
121
115
  },
122
116
  };
@@ -51,12 +51,12 @@ class FileListWidget(vy.VuetifyTemplate):
51
51
  @solara.component
52
52
  def FileBrowser(
53
53
  directory: Union[None, str, Path, solara.Reactive[Path]] = None,
54
- on_directory_change: Callable[[Path], None] = None,
55
- on_path_select: Callable[[Optional[Path]], None] = None,
56
- on_file_open: Callable[[Path], None] = None,
54
+ on_directory_change: Optional[Callable[[Path], None]] = None,
55
+ on_path_select: Optional[Callable[[Optional[Path]], None]] = None,
56
+ on_file_open: Optional[Callable[[Path], None]] = None,
57
57
  filter: Callable[[Path], bool] = lambda x: True,
58
58
  directory_first: bool = False,
59
- on_file_name: Callable[[str], None] = None,
59
+ on_file_name: Optional[Callable[[str], None]] = None,
60
60
  start_directory=None,
61
61
  can_select=False,
62
62
  ):
@@ -98,11 +98,11 @@ def FileBrowser(
98
98
  scroll_pos, set_scroll_pos = solara.use_state(0)
99
99
  selected, set_selected = solara.use_state(None)
100
100
 
101
- def change_dir(new_dir: str):
101
+ def change_dir(new_dir: Path):
102
102
  if os.access(new_dir, os.R_OK):
103
- current_dir.value = Path(new_dir)
103
+ current_dir.value = new_dir
104
104
  if on_directory_change:
105
- on_directory_change(Path(new_dir))
105
+ on_directory_change(new_dir)
106
106
  set_warning(None)
107
107
  return True
108
108
  else:
@@ -114,8 +114,7 @@ def FileBrowser(
114
114
  on_path_select(None)
115
115
  return
116
116
  if item["name"] == "..":
117
- current_dir_str = str(current_dir.value)
118
- new_dir = current_dir_str[: current_dir_str.rfind(os.path.sep)]
117
+ new_dir = current_dir.value.parent
119
118
  action_change_directory = (can_select and double_click) or (not can_select and not double_click)
120
119
  if action_change_directory and change_dir(new_dir):
121
120
  if scroll_pos_stack:
@@ -128,17 +127,17 @@ def FileBrowser(
128
127
  on_path_select(None)
129
128
  if can_select and not double_click:
130
129
  if on_path_select:
131
- on_path_select(Path(new_dir))
130
+ on_path_select(new_dir)
132
131
  return
133
132
 
134
- path = os.path.join(current_dir.value, item["name"])
133
+ path = current_dir.value / item["name"]
135
134
  is_file = item["is_file"]
136
135
  if (can_select and double_click) or (not can_select and not double_click):
137
136
  if is_file:
138
137
  if on_file_open:
139
- on_file_open(Path(path))
138
+ on_file_open(path)
140
139
  if on_file_name is not None:
141
- on_file_name(path)
140
+ on_file_name(str(path))
142
141
  else:
143
142
  if change_dir(path):
144
143
  set_scroll_pos_stack(scroll_pos_stack + [scroll_pos])
@@ -149,7 +148,7 @@ def FileBrowser(
149
148
  on_path_select(None)
150
149
  elif can_select and not double_click:
151
150
  if on_path_select:
152
- on_path_select(Path(path))
151
+ on_path_select(path)
153
152
  else: # not can_select and double_click is ignored
154
153
  raise RuntimeError("Combination should not happen") # pragma: no cover
155
154
 
@@ -119,7 +119,8 @@ module.exports = {
119
119
  href = location.pathname + href.substr(1);
120
120
  a.attributes['href'].href = href;
121
121
  }
122
- if(href.startsWith("./") || href.startsWith("/")) {
122
+ let authLink = href.starswith("/_solara/auth/");
123
+ if( (href.startsWith("./") || href.startsWith("/")) && !authLink) {
123
124
  a.onclick = e => {
124
125
  console.log("clicked", href)
125
126
  if(href.startsWith("./")) {
@@ -184,10 +185,7 @@ module.exports = {
184
185
  document.head.appendChild(script);
185
186
  });
186
187
  },
187
- getBaseUrl() {
188
- if (window.solara && window.solara.rootPath !== undefined) {
189
- return solara.rootPath + "/";
190
- }
188
+ getJupyterBaseUrl() {
191
189
  // if base url is set, we use ./ for relative paths compared to the base url
192
190
  if (document.getElementsByTagName("base").length) {
193
191
  return "./";
@@ -204,7 +202,7 @@ module.exports = {
204
202
  return base
205
203
  },
206
204
  getCdn() {
207
- return this.cdn || (typeof solara_cdn !== "undefined" && solara_cdn) || `${this.getBaseUrl()}_solara/cdn`;
205
+ return this.cdn || (window.solara ? window.solara.cdn : `${this.getJupyterBaseUrl()}_solara/cdn`);
208
206
  }
209
207
  },
210
208
  updated() {
@@ -247,10 +247,7 @@ module.exports = {
247
247
  document.head.appendChild(script);
248
248
  });
249
249
  },
250
- getBaseUrl() {
251
- if (window.solara && window.solara.rootPath !== undefined) {
252
- return solara.rootPath + "/";
253
- }
250
+ getJupyterBaseUrl() {
254
251
  // if base url is set, we use ./ for relative paths compared to the base url
255
252
  if (document.getElementsByTagName("base").length) {
256
253
  return "./";
@@ -267,7 +264,7 @@ module.exports = {
267
264
  return base
268
265
  },
269
266
  getCdn() {
270
- return (typeof solara_cdn !== "undefined" && solara_cdn) || `${this.getBaseUrl()}_solara/cdn`;
267
+ return window.solara ? window.solara.cdn : `${this.getJupyterBaseUrl()}_solara/cdn`;
271
268
  },
272
269
  },
273
270
  };
@@ -83,10 +83,7 @@
83
83
  document.head.appendChild(script);
84
84
  });
85
85
  },
86
- getBaseUrl() {
87
- if (window.solara && window.solara.rootPath !== undefined) {
88
- return solara.rootPath + "/";
89
- }
86
+ getJupyterBaseUrl() {
90
87
  // if base url is set, we use ./ for relative paths compared to the base url
91
88
  if (document.getElementsByTagName("base").length) {
92
89
  return document.baseURI;
@@ -103,7 +100,7 @@
103
100
  return base
104
101
  },
105
102
  getCdn() {
106
- return (typeof solara_cdn !== "undefined" && solara_cdn) || `${this.getBaseUrl()}_solara/cdn`;
103
+ return window.solara ? window.solara.cdn : `${this.getJupyterBaseUrl()}_solara/cdn`;
107
104
  },
108
105
  }
109
106
  }
@@ -1,4 +1,5 @@
1
1
  import logging
2
+ import os
2
3
  import pathlib
3
4
  import shutil
4
5
 
@@ -22,7 +23,16 @@ def put_in_cache(base_cache_dir: pathlib.Path, path, data: bytes):
22
23
 
23
24
 
24
25
  def get_from_cache(base_cache_dir: pathlib.Path, path):
25
- cache_path = base_cache_dir / path
26
+ cache_path = pathlib.Path(base_cache_dir / path)
27
+ # Make sure cache_path is a subdirectory of base_cache_dir
28
+ # so we don't accidentally read files from the parent directory
29
+ # which is a security risk.
30
+ # We use os.path.normpath() because we do not want to follow symlinks
31
+ # in editable installs, since some packages are symlinked
32
+ if not os.path.normpath(cache_path).startswith(str(base_cache_dir.resolve())):
33
+ logger.warning("Trying to read from outside of cache directory: %s is not a subdir of %s", cache_path, base_cache_dir)
34
+ raise PermissionError("Trying to read from outside of cache directory")
35
+
26
36
  try:
27
37
  logger.info("Opening cache file: %s", cache_path)
28
38
  return cache_path.read_bytes()
@@ -40,7 +40,7 @@ def get_module_names():
40
40
  def create_modules():
41
41
  kernel_id = kernel_context.get_current_context().id
42
42
  _modules_added = _modules_added_per_kernel[kernel_id]
43
- logger.info("define modules %s", _modules)
43
+ logger.info("create modules %s", _modules)
44
44
  widgets = {}
45
45
  with lock:
46
46
  for name, (module, dependencies) in _modules.items():
@@ -15,6 +15,7 @@ NO_WATCHDOG = False
15
15
  try:
16
16
  from watchdog.events import FileSystemEventHandler
17
17
  from watchdog.observers import Observer
18
+ import watchdog.events
18
19
  except ImportError:
19
20
  pass
20
21
  NO_WATCHDOG = True
@@ -99,27 +100,35 @@ else:
99
100
  self.observers.append(observer)
100
101
  self.directories.add(directory)
101
102
 
103
+ def on_moved(self, event):
104
+ logger.debug("Moved event: %s", event)
105
+ if isinstance(event, watchdog.events.FileMovedEvent):
106
+ if event.dest_path in self.files:
107
+ self._handle_possible_change(event.dest_path)
108
+
102
109
  def on_modified(self, event):
103
- super().on_modified(event)
104
- logger.debug("Watch event: %s", event)
110
+ logger.debug("Modified event: %s", event)
105
111
  if not event.is_directory:
106
112
  if event.src_path in self.files:
107
- mtime_new = os.path.getmtime(event.src_path)
108
- changed = mtime_new > self.mtimes[event.src_path]
109
- self.mtimes[event.src_path] = mtime_new
110
- if changed:
111
- logger.debug("File modified: %s", event.src_path)
112
- try:
113
- self.on_change(event.src_path)
114
- except: # noqa
115
- # we are in the watchdog thread here, all we can do is report
116
- # and continue running (otherwise reload stops working)
117
- logger.exception("Error while executing on change handler")
118
- else:
119
- logger.debug("File reported modified, but mtime did not change: %s", event.src_path)
113
+ self._handle_possible_change(event.src_path)
120
114
  else:
121
115
  logger.debug("Ignore file modification: %s", event.src_path)
122
116
 
117
+ def _handle_possible_change(self, path: str):
118
+ mtime_new = os.path.getmtime(path)
119
+ changed = mtime_new > self.mtimes[path]
120
+ self.mtimes[path] = mtime_new
121
+ if changed:
122
+ logger.debug("File modified: %s", path)
123
+ try:
124
+ self.on_change(path)
125
+ except: # noqa
126
+ # we are in the watchdog thread here, all we can do is report
127
+ # and continue running (otherwise reload stops working)
128
+ logger.exception("Error while executing on change handler")
129
+ else:
130
+ logger.debug("File reported modified, but mtime did not change: %s", path)
131
+
123
132
  WatcherType = WatcherWatchdog # type: ignore
124
133
 
125
134
 
@@ -119,7 +119,7 @@ async def main():
119
119
  ]
120
120
  for dep in requirements:
121
121
  await micropip.install(dep, keep_going=True)
122
- await micropip.install("/wheels/solara-1.34.0-py2.py3-none-any.whl", keep_going=True)
122
+ await micropip.install("/wheels/solara-1.35.0-py2.py3-none-any.whl", keep_going=True)
123
123
  import solara
124
124
 
125
125
  el = solara.Warning("lala")
@@ -237,6 +237,11 @@
237
237
  {% endif %}
238
238
  <script>
239
239
  solara.rootPath = {{ root_path | tojson | safe}};
240
+ solara.cdn = {{ cdn | tojson | safe }};
241
+ // the vue templates expect it to not have a trailing slash
242
+ solara.cdn = solara.cdn.replace(/\/$/, '');
243
+ // keep this for backwards compatibility
244
+ window.solara_cdn = solara.cdn;
240
245
  console.log("rootPath", solara.rootPath);
241
246
 
242
247
  async function changeThemeCSS(theme) {
@@ -2,15 +2,24 @@ import logging
2
2
  import threading
3
3
  import time
4
4
  from typing import Optional
5
+ import socket
5
6
 
6
7
  logger = logging.getLogger("solara.server.threaded")
7
8
 
8
9
 
10
+ def get_free_port():
11
+ sock = socket.socket()
12
+ sock.bind(("", 0))
13
+ port = sock.getsockname()[1]
14
+ sock.close()
15
+ return port
16
+
17
+
9
18
  class ServerBase(threading.Thread):
10
19
  name = "not set"
11
20
 
12
21
  def __init__(self, port: int, host: str = "localhost", **kwargs):
13
- self.port = port
22
+ self.port = get_free_port() if port == 0 else port
14
23
  self.host = host
15
24
  self.base_url = f"http://{self.host}:{self.port}"
16
25
 
@@ -37,6 +37,7 @@ logger = logging.getLogger("solara.pytest_plugin")
37
37
  TEST_PORT_START = int(os.environ.get("PORT", "18765")) + 100 # do not interfere with the solara integration tests
38
38
  TEST_HOST = solara.server.settings.main.host
39
39
  TIMEOUT = float(os.environ.get("SOLARA_PW_TIMEOUT", "18"))
40
+ PYTEST_IPYWIDGETS_SOLARA_APP_WAIT_TIMEOUT = int(os.environ.get("PYTEST_IPYWIDGETS_SOLARA_APP_WAIT_TIMEOUT", "10"))
40
41
 
41
42
 
42
43
  @pytest.fixture(scope="session")
@@ -192,7 +193,7 @@ def _solara_test(solara_server, solara_app, page_session: "playwright.sync_api.P
192
193
  run_events[id] = run_event = threading.Event()
193
194
  page_session.goto(solara_server.base_url + f"?id={id}")
194
195
  try:
195
- assert run_event.wait(10)
196
+ assert run_event.wait(PYTEST_IPYWIDGETS_SOLARA_APP_WAIT_TIMEOUT)
196
197
  context = used_contexts[id]
197
198
  with context:
198
199
  test_output_warmup = widgets.Output()
@@ -151,10 +151,7 @@ module.exports = {
151
151
  document.head.appendChild(script);
152
152
  });
153
153
  },
154
- getBaseUrl() {
155
- if (window.solara && window.solara.rootPath !== undefined) {
156
- return solara.rootPath + "/";
157
- }
154
+ getJupyterBaseUrl() {
158
155
  // if base url is set, we use ./ for relative paths compared to the base url
159
156
  if (document.getElementsByTagName("base").length) {
160
157
  return document.baseURI;
@@ -171,7 +168,7 @@ module.exports = {
171
168
  return base
172
169
  },
173
170
  getCdn() {
174
- return (typeof solara_cdn !== "undefined" && solara_cdn) || `${this.getBaseUrl()}_solara/cdn`;
171
+ return window.solara ? window.solara.cdn : `${this.getJupyterBaseUrl()}_solara/cdn`;
175
172
  },
176
173
  },
177
174
  data(){
@@ -16,6 +16,7 @@ def Sidebar():
16
16
 
17
17
  with solara.v.List(expand=True, nav=True, style_="height: 100%; display: flex; flex-direction: column;") as main:
18
18
  with solara.v.ListItemGroup(v_model=router.path):
19
+ # e.g. getting_started, examples, components, api, advanced, faq
19
20
  for route in all_routes:
20
21
  if len(route.children) == 1 or route.path == "/":
21
22
  with solara.Link("/documentation/" + route.path if route.path != "/" else "/documentation"):
@@ -24,6 +25,8 @@ def Sidebar():
24
25
  solara.v.ListItemIcon(children=[solara.v.Icon(children=["mdi-home"])])
25
26
  solara.v.ListItemTitle(style_="padding: 0 20px;", children=[route.label])
26
27
  else:
28
+ path_top_level = "/documentation/" + route.path
29
+ top_level_expanded = router.path.startswith(path_top_level)
27
30
  with solara.v.ListGroup(
28
31
  v_slots=[
29
32
  {
@@ -34,57 +37,60 @@ def Sidebar():
34
37
  ),
35
38
  }
36
39
  ],
37
- value=router.path.startswith("/documentation/" + route.path),
40
+ value=top_level_expanded,
41
+ eager=True, # better for SEO
38
42
  ):
39
43
  for item in route.children:
40
- if item.path == "/":
41
- continue
44
+ label = item.label
45
+ if item.path == "/" and route.path in ["examples", "api", "components"]:
46
+ # the 'homepage' of the subpage are named Overview
47
+ label = "Overview"
48
+ path_sub = "/documentation/" + route.path + "/" + item.path
49
+ sub_should_be_expanded = router.path.startswith(path_sub)
42
50
  if item.children != [] and any([c.label is not None and c.path != "/" for c in item.children]):
43
51
  with solara.v.ListGroup(
44
52
  v_slots=[
45
53
  {
46
54
  "name": "activator",
47
55
  "children": solara.v.ListItemTitle(
48
- children=[item.label],
56
+ children=[label],
49
57
  ),
50
58
  }
51
59
  ],
52
60
  sub_group=True,
53
61
  no_action=True,
54
- value=router.path.startswith("/documentation/" + route.path + "/" + item.path),
62
+ eager=True, # better for SEO
63
+ value=sub_should_be_expanded,
55
64
  ):
56
65
  for subitem in item.children:
57
- # skip pages that are only used to demonstrate Link or Router usage
58
- if subitem.path == "/" or subitem.label is None:
66
+ # skip the 'homepage' of the examples only
67
+ if subitem.path == "/" and route.path not in ["getting_started", "advanced"]:
59
68
  continue
60
69
  path = (
61
- "/documentation/" + route.path + "/" + item.path + "/" + subitem.path
70
+ "/documentation/" + route.path + "/" + item.path + "/" + (subitem.path if subitem.path != "/" else "")
62
71
  if item.path != "fullscreen"
63
72
  else "/apps/" + subitem.path
64
73
  )
65
74
  with solara.Link(
66
75
  path,
67
76
  ):
68
- with solara.v.ListItem(dense=True, style_="padding: 0 20px;", value=path):
77
+ with solara.v.ListItem(dense=True, style_="margin-left: 40px; padding: 0 20px;", value=path):
69
78
  solara.v.ListItemContent(
70
79
  children=[subitem.label],
71
80
  )
72
81
  else:
73
- with solara.v.ListItemGroup(value="/documentation/" + route.path + "/" + item.path):
74
- with solara.Link(
75
- "/documentation/" + route.path + "/" + item.path,
76
- ):
77
- with solara.v.ListItem(dense=True, style_="padding: 0 20px;"):
78
- solara.v.ListItemContent(
79
- children=[item.label],
80
- )
81
- with solara.v.ListItemGroup():
82
+ path = "/documentation/" + route.path + ("/" + item.path if item.path != "/" else "")
83
+ with solara.Link(path):
84
+ with solara.v.ListItem(dense=True, style_="padding: 0 20px;", value=path):
85
+ solara.v.ListItemContent(
86
+ children=[label],
87
+ )
82
88
  with solara.Link("/contact"):
83
- with solara.v.ListItem():
89
+ with solara.v.ListItem(value="/contact"):
84
90
  solara.v.ListItemIcon(children=[solara.v.Icon(children=["mdi-email"])])
85
91
  solara.v.ListItemTitle(style_="padding: 0 20px;", children=["Contact"])
86
92
  with solara.Link("/changelog"):
87
- with solara.v.ListItem():
93
+ with solara.v.ListItem(value="/changelog"):
88
94
  solara.v.ListItemIcon(children=[solara.v.Icon(children=["mdi-history"])])
89
95
  solara.v.ListItemTitle(style_="padding: 0 20px;", children=["Changelog"])
90
96
 
@@ -1,5 +1,23 @@
1
1
  # Solara Changelog
2
2
 
3
+ ## Version 1.34.1
4
+
5
+ * Bug Fix: Using `SOLARA_ASSETS_PROXY=False` (default on [py.cafe](https://py.cafe)) would break grid layout. [#705](https://github.com/widgetti/solara/pull/705)
6
+ * Bug Fix: Hot reload work in more situations on Linux. [#702](https://github.com/widgetti/solara/pull/702)
7
+
8
+
9
+ ## Version 1.34.0
10
+
11
+ * Feature: Enhancements for Solara `InputDate` and `InputDateRange` components [#672](https://github.com/widgetti/solara/pull/672):
12
+ * Limiting allowed dates with `min_date` and `max_date` arguments.
13
+ * Monthly granularity with `date_picker_type="month"`.
14
+ * `InputDateRange` selection can be sorted in ascending order with `sort` argument.
15
+ * Bug Fix: Typo in `solara.Tooltip`. [#695](https://github.com/widgetti/solara/pull/695)
16
+ * Bug Fix: `ipywidgets.Accordion` content was not hidden when closed. [#694](https://github.com/widgetti/solara/pull/694)
17
+ * Bug Fix: `solara.Tooltip` would break any functionality in it's children that relied on the `blur`, `keydown`, or `focus` events. [#696](https://github.com/widgetti/solara/pull/696)
18
+ * Bug Fix: Raise an error instead of showing a custom page on 404. Enables custom 404 pages in Solara apps. [#670](https://github.com/widgetti/solara/pull/670)
19
+ * Bug Fix: Prevent broken installation by restricting Numpy version. [#687](https://github.com/widgetti/solara/pull/687) and [`286e196`](https://github.com/widgetti/solara/commit/286e196ee990af814768d0612b98b5138f5ceb51).
20
+
3
21
  ## Version 1.33.0
4
22
 
5
23
  ### Details
@@ -411,3 +411,7 @@ To configure the ports the socket is bound to when starting the test servers, us
411
411
  #### Vuetify warmup
412
412
 
413
413
  By default, we insert an ipyvuetify widget with an icon into the frontend to force loading all the vuetify assets, such as CSS and fonts. However, if you are using the solara test plugin to test pure ipywidgets or a 3rd ipywidget based party library you might not need this. Disable this vuetify warmup phase by passing the `--no-solara-vuetify-warmup` argument to pytest, or setting the environment variable `SOLARA_TEST_VUETIFY_WARMUP` to a falsey value (e.g. `SOLARA_TEST_VUETIFY_WARMUP=0`).
414
+
415
+ #### Changing the application wait timeout
416
+
417
+ By default, we wait for 10 seconds for the browser to connect to the server when the solara server is used for testing. On slower systems, this may be too short. To change this timeout, set the `PYTEST_IPYWIDGETS_SOLARA_APP_WAIT_TIMEOUT` environment variable to the desired value in seconds (e.g. `PYTEST_IPYWIDGETS_SOLARA_APP_WAIT_TIMEOUT=20`).
@@ -0,0 +1,7 @@
1
+ # Solara enterprise
2
+
3
+ Solara enterprise is a not Open Source, but the source code is visible, is free for non-commercial use and installable from pypi.
4
+
5
+ For commercial use, you require a license. Please [contact](/contact) us for more information.
6
+
7
+ Solara-enterprise will stay free for non-commercial use and features that are in solara will **not be moved to solara-enterprise**.
@@ -78,10 +78,7 @@ module.exports = {
78
78
  document.head.appendChild(script);
79
79
  });
80
80
  },
81
- getBaseUrl() {
82
- if (window.solara && window.solara.rootPath !== undefined) {
83
- return solara.rootPath + "/";
84
- }
81
+ getJupyterBaseUrl() {
85
82
  if (document.getElementsByTagName("base").length) {
86
83
  return "./";
87
84
  }
@@ -97,7 +94,7 @@ module.exports = {
97
94
  return base
98
95
  },
99
96
  getCdn() {
100
- return (typeof solara_cdn !== "undefined" && solara_cdn) || `${this.getBaseUrl()}_solara/cdn`;
97
+ return window.solara ? window.solara.cdn : `${this.getJupyterBaseUrl()}_solara/cdn`;
101
98
  },
102
99
  }
103
100
  }
@@ -88,10 +88,7 @@ module.exports = {
88
88
  document.head.appendChild(script);
89
89
  });
90
90
  },
91
- getBaseUrl() {
92
- if (window.solara && window.solara.rootPath !== undefined) {
93
- return solara.rootPath + "/";
94
- }
91
+ getJupyterBaseUrl() {
95
92
  // if base url is set, we use ./ for relative paths compared to the base url
96
93
  if (document.getElementsByTagName("base").length) {
97
94
  return "./";
@@ -108,7 +105,7 @@ module.exports = {
108
105
  return base
109
106
  },
110
107
  getCdn() {
111
- return this.cdn || (typeof solara_cdn !== "undefined" && solara_cdn) || `${this.getBaseUrl()}_solara/cdn`;
108
+ return this.cdn || (window.solara ? window.solara.cdn : `${this.getJupyterBaseUrl()}_solara/cdn`);
112
109
  }
113
110
  },
114
111
  }
@@ -21,14 +21,14 @@ from playwright.sync_api import expect
21
21
  def test_api_markdown_editor(page_session: playwright.sync_api.Page, solara_server, solara_app):
22
22
  with solara_app("solara.website.pages"):
23
23
  page_session.goto(solara_server.base_url + "/documentation/components/")
24
- page_session.locator("text=Markdown Editor").first.click()
24
+ page_session.locator(".v-card >> text=Markdown Editor").first.click()
25
25
  page_session.locator('h1:has-text("Large heading")').wait_for()
26
26
 
27
27
 
28
28
  def test_api_file_browser(page_session: playwright.sync_api.Page, solara_server, solara_app):
29
29
  with solara_app("solara.website.pages"):
30
30
  page_session.goto(solara_server.base_url + "/documentation/components/")
31
- page_session.locator("text=File Browser").first.click()
31
+ page_session.locator(".v-card >> text=File Browser").first.click()
32
32
  page_session.locator("text=You are in directory").wait_for()
33
33
 
34
34
 
@@ -28,7 +28,7 @@ def test_docs_basics(page_session: playwright.sync_api.Page, solara_server, sola
28
28
 
29
29
  page_session.locator("text=Search the Solara Documentation").wait_for()
30
30
  page_session.locator(".docs-card", has_text="Examples").first.click()
31
- page_session.locator("text=Calculator").first.click()
31
+ page_session.locator(".v-card >> text=Calculator").first.click()
32
32
  page_session.locator("text=+/-").wait_for()
33
33
  page_session.screenshot(path="tmp/screenshot_calculator.png")
34
34
 
@@ -39,7 +39,7 @@ def test_docs_basics(page_session: playwright.sync_api.Page, solara_server, sola
39
39
 
40
40
  page_session.locator("text=Visualization").first.click()
41
41
  page_session.locator("text=Scatter plot using Plotly").first.click()
42
- page_session.locator("text=plotly express").first.wait_for()
42
+ page_session.locator("text=This example shows how to use Plotly").wait_for()
43
43
  page_session.screenshot(path="tmp/screenshot_plotly.png")
44
44
 
45
45
  page_session.locator("text=Plotly Image Annotator").first.click()
@@ -2,6 +2,9 @@ import hashlib
2
2
  import os
3
3
  from pathlib import Path
4
4
 
5
+ from pytest import TempPathFactory
6
+ import pytest
7
+
5
8
  from solara.server.cdn_helper import get_cdn_url, get_data, get_from_cache, put_in_cache, get_path
6
9
 
7
10
 
@@ -68,6 +71,26 @@ def test_get_data(tmp_path_factory):
68
71
  assert data == b"test_cached_2"
69
72
 
70
73
 
74
+ def test_get_data_secure(tmp_path_factory: TempPathFactory):
75
+ # we should never be able to get data from the parent directory
76
+
77
+ root_dir = tmp_path_factory.mktemp("root")
78
+ base_cache_dir = root_dir / "cdn"
79
+ base_cache_dir.mkdir()
80
+
81
+ (root_dir / "secret").write_bytes(b"not allowed")
82
+
83
+ project_dir = base_cache_dir / "project"
84
+ project_dir.mkdir()
85
+
86
+ (project_dir / "file").write_bytes(b"a")
87
+
88
+ data = get_data(base_cache_dir, "project/file")
89
+ assert data == b"a"
90
+ with pytest.raises(PermissionError):
91
+ get_data(base_cache_dir, "project/../../secret")
92
+
93
+
71
94
  def test_redirect(tmp_path_factory):
72
95
  base_cache_dir = tmp_path_factory.mktemp("cdn")
73
96