solara-ui 1.43.0__tar.gz → 1.44.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 (655) hide show
  1. {solara_ui-1.43.0 → solara_ui-1.44.0}/PKG-INFO +1 -1
  2. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/__init__.py +1 -1
  3. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/__main__.py +2 -2
  4. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/_stores.py +114 -6
  5. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/cache.py +6 -4
  6. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/checks.py +1 -1
  7. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/select.py +1 -1
  8. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/style.py +1 -1
  9. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/hooks/use_reactive.py +16 -1
  10. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/lab/components/chat.py +12 -6
  11. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/app.py +4 -1
  12. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/kernel_context.py +2 -2
  13. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/patch.py +3 -1
  14. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/server.py +1 -1
  15. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/starlette.py +39 -9
  16. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/static/solara_bootstrap.py +1 -1
  17. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/tasks.py +12 -1
  18. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/test/pytest_plugin.py +4 -3
  19. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/toestand.py +86 -26
  20. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/components/docs.py +20 -1
  21. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/changelog/changelog.md +17 -0
  22. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/10-howto/20-layout.md +1 -1
  23. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/30-enterprise/10-oauth.md +4 -2
  24. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/lab/theming.py +6 -4
  25. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/output/sql_code.py +23 -25
  26. solara_ui-1.44.0/solara/website/pages/documentation/components/page/title.py +25 -0
  27. solara_ui-1.44.0/solara/website/pages/documentation/components/status/error.py +39 -0
  28. solara_ui-1.44.0/solara/website/pages/documentation/components/status/info.py +39 -0
  29. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/__init__.py +1 -0
  30. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/ai/chatbot.py +3 -1
  31. solara_ui-1.44.0/solara/website/pages/documentation/examples/general/live_update.py +32 -0
  32. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/general/pokemon_search.py +1 -1
  33. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/enterprise/oauth_test.py +1 -1
  34. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/starlette_test.py +1 -1
  35. solara_ui-1.44.0/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-linux-ipywidgets-7-changed-reference.png +0 -0
  36. solara_ui-1.44.0/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-linux-ipywidgets-7-reference.png +0 -0
  37. solara_ui-1.44.0/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-linux-ipywidgets-8-changed-reference.png +0 -0
  38. solara_ui-1.44.0/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-linux-ipywidgets-8-reference.png +0 -0
  39. solara_ui-1.44.0/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_lab-chromium-linux-ipywidgets-7-reference.png +0 -0
  40. solara_ui-1.44.0/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_lab-chromium-linux-ipywidgets-8-reference.png +0 -0
  41. solara_ui-1.44.0/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_notebook-chromium-linux-ipywidgets-7-reference.png +0 -0
  42. solara_ui-1.44.0/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_notebook-chromium-linux-ipywidgets-8-reference.png +0 -0
  43. solara_ui-1.44.0/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-solara-chromium-linux-ipywidgets-7-reference.png +0 -0
  44. solara_ui-1.44.0/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-solara-chromium-linux-ipywidgets-8-reference.png +0 -0
  45. solara_ui-1.44.0/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-voila-chromium-linux-ipywidgets-7-reference.png +0 -0
  46. solara_ui-1.44.0/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-voila-chromium-linux-ipywidgets-8-reference.png +0 -0
  47. solara_ui-1.44.0/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-starlette-solara-chromium-linux-ipywidgets-7-reference.png +0 -0
  48. solara_ui-1.44.0/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-starlette-solara-chromium-linux-ipywidgets-8-reference.png +0 -0
  49. solara_ui-1.44.0/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-jupyter_lab-chromium-linux-reference.png +0 -0
  50. solara_ui-1.44.0/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-jupyter_notebook-chromium-linux-reference.png +0 -0
  51. solara_ui-1.44.0/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-solara-chromium-linux-reference.png +0 -0
  52. solara_ui-1.44.0/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-voila-chromium-linux-reference.png +0 -0
  53. solara_ui-1.44.0/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-starlette-solara-chromium-linux-reference.png +0 -0
  54. solara_ui-1.44.0/tests/ui/snapshots/tests/integration/widget_test.py/test_widget_button_solara-flask-chromium-linux-reference.png +0 -0
  55. solara_ui-1.44.0/tests/ui/snapshots/tests/integration/widget_test.py/test_widget_button_solara-starlette-chromium-linux-reference.png +0 -0
  56. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/pivottable_test.py +1 -1
  57. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/task_test.py +22 -1
  58. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/toestand_test.py +140 -1
  59. solara_ui-1.43.0/solara/website/pages/documentation/components/page/title.py +0 -27
  60. solara_ui-1.43.0/solara/website/pages/documentation/components/status/error.py +0 -40
  61. solara_ui-1.43.0/solara/website/pages/documentation/components/status/info.py +0 -40
  62. solara_ui-1.43.0/solara/website/pages/documentation/examples/general/live_update.py +0 -39
  63. solara_ui-1.43.0/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-linux-ipywidgets-7-changed-reference.png +0 -0
  64. solara_ui-1.43.0/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-linux-ipywidgets-7-reference.png +0 -0
  65. solara_ui-1.43.0/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-linux-ipywidgets-8-changed-reference.png +0 -0
  66. solara_ui-1.43.0/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-linux-ipywidgets-8-reference.png +0 -0
  67. solara_ui-1.43.0/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_lab-chromium-linux-ipywidgets-7-reference.png +0 -0
  68. solara_ui-1.43.0/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_lab-chromium-linux-ipywidgets-8-reference.png +0 -0
  69. solara_ui-1.43.0/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_notebook-chromium-linux-ipywidgets-7-reference.png +0 -0
  70. solara_ui-1.43.0/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_notebook-chromium-linux-ipywidgets-8-reference.png +0 -0
  71. solara_ui-1.43.0/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-solara-chromium-linux-ipywidgets-7-reference.png +0 -0
  72. solara_ui-1.43.0/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-solara-chromium-linux-ipywidgets-8-reference.png +0 -0
  73. solara_ui-1.43.0/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-voila-chromium-linux-ipywidgets-7-reference.png +0 -0
  74. solara_ui-1.43.0/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-voila-chromium-linux-ipywidgets-8-reference.png +0 -0
  75. solara_ui-1.43.0/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-starlette-solara-chromium-linux-ipywidgets-7-reference.png +0 -0
  76. solara_ui-1.43.0/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-starlette-solara-chromium-linux-ipywidgets-8-reference.png +0 -0
  77. solara_ui-1.43.0/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-jupyter_lab-chromium-linux-reference.png +0 -0
  78. solara_ui-1.43.0/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-jupyter_notebook-chromium-linux-reference.png +0 -0
  79. solara_ui-1.43.0/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-solara-chromium-linux-reference.png +0 -0
  80. solara_ui-1.43.0/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-voila-chromium-linux-reference.png +0 -0
  81. solara_ui-1.43.0/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-starlette-solara-chromium-linux-reference.png +0 -0
  82. solara_ui-1.43.0/tests/ui/snapshots/tests/integration/widget_test.py/test_widget_button_solara-flask-chromium-linux-reference.png +0 -0
  83. solara_ui-1.43.0/tests/ui/snapshots/tests/integration/widget_test.py/test_widget_button_solara-starlette-chromium-linux-reference.png +0 -0
  84. {solara_ui-1.43.0 → solara_ui-1.44.0}/.gitignore +0 -0
  85. {solara_ui-1.43.0 → solara_ui-1.44.0}/LICENSE +0 -0
  86. {solara_ui-1.43.0 → solara_ui-1.44.0}/README.md +0 -0
  87. {solara_ui-1.43.0 → solara_ui-1.44.0}/prefix/etc/jupyter/jupyter_notebook_config.d/solara.json +0 -0
  88. {solara_ui-1.43.0 → solara_ui-1.44.0}/prefix/etc/jupyter/jupyter_server_config.d/solara.json +0 -0
  89. {solara_ui-1.43.0 → solara_ui-1.44.0}/pyproject.toml +0 -0
  90. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/alias.py +0 -0
  91. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/autorouting.py +0 -0
  92. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/checks.html +0 -0
  93. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/comm.py +0 -0
  94. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/__init__.py +0 -0
  95. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/alert.py +0 -0
  96. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/applayout.py +0 -0
  97. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/button.py +0 -0
  98. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/card.py +0 -0
  99. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/checkbox.py +0 -0
  100. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/code_highlight_css.py +0 -0
  101. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/code_highlight_css.vue +0 -0
  102. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/columns.py +0 -0
  103. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/component_vue.py +0 -0
  104. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/cross_filter.py +0 -0
  105. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/dataframe.py +0 -0
  106. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/datatable.py +0 -0
  107. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/datatable.vue +0 -0
  108. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/details.py +0 -0
  109. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/download.vue +0 -0
  110. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/echarts.py +0 -0
  111. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/echarts.vue +0 -0
  112. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/figure_altair.py +0 -0
  113. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/file_browser.py +0 -0
  114. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/file_download.py +0 -0
  115. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/file_drop.py +0 -0
  116. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/file_drop.vue +0 -0
  117. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/file_list_widget.vue +0 -0
  118. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/head.py +0 -0
  119. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/head_tag.py +0 -0
  120. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/head_tag.vue +0 -0
  121. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/image.py +0 -0
  122. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/input.py +0 -0
  123. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/input_text_area.py +0 -0
  124. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/link.py +0 -0
  125. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/markdown.py +0 -0
  126. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/markdown_editor.py +0 -0
  127. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/markdown_editor.vue +0 -0
  128. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/matplotlib.py +0 -0
  129. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/meta.py +0 -0
  130. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/misc.py +0 -0
  131. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/pivot_table.py +0 -0
  132. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/pivot_table.vue +0 -0
  133. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/progress.py +0 -0
  134. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/select.vue +0 -0
  135. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/slider.py +0 -0
  136. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/slider_date.vue +0 -0
  137. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/spinner-solara.vue +0 -0
  138. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/spinner.py +0 -0
  139. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/sql_code.py +0 -0
  140. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/sql_code.vue +0 -0
  141. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/switch.py +0 -0
  142. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/tab_navigation.py +0 -0
  143. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/title.py +0 -0
  144. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/title.vue +0 -0
  145. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/togglebuttons.py +0 -0
  146. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/components/tooltip.py +0 -0
  147. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/core.py +0 -0
  148. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/datatypes.py +0 -0
  149. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/express.py +0 -0
  150. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/hooks/__init__.py +0 -0
  151. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/hooks/dataframe.py +0 -0
  152. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/hooks/misc.py +0 -0
  153. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/hooks/use_thread.py +0 -0
  154. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/kitchensink.py +0 -0
  155. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/lab/__init__.py +0 -0
  156. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/lab/components/__init__.py +0 -0
  157. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/lab/components/confirmation_dialog.py +0 -0
  158. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/lab/components/cross_filter.py +0 -0
  159. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/lab/components/input_date.py +0 -0
  160. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/lab/components/input_time.py +0 -0
  161. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/lab/components/menu.py +0 -0
  162. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/lab/components/menu.vue +0 -0
  163. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/lab/components/tabs.py +0 -0
  164. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/lab/components/theming.py +0 -0
  165. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/lab/components/theming.vue +0 -0
  166. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/lab/hooks/__init__.py +0 -0
  167. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/lab/hooks/dataframe.py +0 -0
  168. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/lab/toestand.py +0 -0
  169. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/lab/utils/__init__.py +0 -0
  170. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/lab/utils/cookies.py +0 -0
  171. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/lab/utils/dataframe.py +0 -0
  172. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/lab/utils/headers.py +0 -0
  173. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/layout.py +0 -0
  174. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/lifecycle.py +0 -0
  175. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/minisettings.py +0 -0
  176. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/py.typed +0 -0
  177. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/reactive.py +0 -0
  178. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/routing.py +0 -0
  179. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/scope/__init__.py +0 -0
  180. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/scope/types.py +0 -0
  181. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/__init__.py +0 -0
  182. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/assets/custom.css +0 -0
  183. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/assets/custom.js +0 -0
  184. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/assets/favicon.png +0 -0
  185. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/assets/favicon.svg +0 -0
  186. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/assets/style.css +0 -0
  187. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/assets/theme-dark.css +0 -0
  188. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/assets/theme-light.css +0 -0
  189. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/assets/theme.js +0 -0
  190. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/cdn_helper.py +0 -0
  191. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/esm.py +0 -0
  192. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/fastapi.py +0 -0
  193. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/flask.py +0 -0
  194. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/jupyter/__init__.py +0 -0
  195. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/jupyter/cdn_handler.py +0 -0
  196. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/jupyter/server_extension.py +0 -0
  197. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/jupyter/solara.py +0 -0
  198. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/jupytertools.py +0 -0
  199. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/kernel.py +0 -0
  200. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/pyinstaller/__init__.py +0 -0
  201. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/pyinstaller/hook-ipyreact.py +0 -0
  202. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/pyinstaller/hook-ipyvuetify.py +0 -0
  203. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/pyinstaller/hook-solara.py +0 -0
  204. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/qt.py +0 -0
  205. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/reload.py +0 -0
  206. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/settings.py +0 -0
  207. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/shell.py +0 -0
  208. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/static/ansi.js +0 -0
  209. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/static/highlight-dark.css +0 -0
  210. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/static/highlight.css +0 -0
  211. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/static/main-vuetify.js +0 -0
  212. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/static/main.js +0 -0
  213. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/static/sun.svg +0 -0
  214. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/static/webworker.js +0 -0
  215. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/telemetry.py +0 -0
  216. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/templates/index.html.j2 +0 -0
  217. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/templates/loader-plain.css +0 -0
  218. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/templates/loader-plain.html +0 -0
  219. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/templates/loader-solara.css +0 -0
  220. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/templates/loader-solara.html +0 -0
  221. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/templates/plain.html +0 -0
  222. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/templates/solara.html.j2 +0 -0
  223. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/threaded.py +0 -0
  224. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/utils.py +0 -0
  225. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/server/websocket.py +0 -0
  226. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/settings.py +0 -0
  227. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/template/button.py +0 -0
  228. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/template/markdown.py +0 -0
  229. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/template/portal/.flake8 +0 -0
  230. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/template/portal/.pre-commit-config.yaml +0 -0
  231. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/template/portal/LICENSE +0 -0
  232. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/template/portal/Procfile +0 -0
  233. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/template/portal/mypy.ini +0 -0
  234. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/template/portal/pyproject.toml +0 -0
  235. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/template/portal/solara_portal/__init__.py +0 -0
  236. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/template/portal/solara_portal/components/__init__.py +0 -0
  237. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/template/portal/solara_portal/components/article.py +0 -0
  238. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/template/portal/solara_portal/components/data.py +0 -0
  239. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/template/portal/solara_portal/components/header.py +0 -0
  240. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/template/portal/solara_portal/components/layout.py +0 -0
  241. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/template/portal/solara_portal/content/articles/equis-in-vidi.md +0 -0
  242. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/template/portal/solara_portal/content/articles/substiterat-vati.md +0 -0
  243. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/template/portal/solara_portal/data.py +0 -0
  244. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/template/portal/solara_portal/pages/__init__.py +0 -0
  245. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/template/portal/solara_portal/pages/article/__init__.py +0 -0
  246. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/template/portal/solara_portal/pages/tabular.py +0 -0
  247. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/template/portal/solara_portal/pages/viz/__init__.py +0 -0
  248. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/template/portal/solara_portal/pages/viz/overview.py +0 -0
  249. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/test/__init__.py +0 -0
  250. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/util.py +0 -0
  251. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/validate_hooks.py +0 -0
  252. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/__init__.py +0 -0
  253. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/assets/custom.css +0 -0
  254. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/assets/images/logo-small.png +0 -0
  255. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/assets/images/logo.svg +0 -0
  256. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/assets/images/logo_white.svg +0 -0
  257. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/assets/theme.js +0 -0
  258. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/components/__init__.py +0 -0
  259. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/components/algolia.py +0 -0
  260. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/components/algolia.vue +0 -0
  261. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/components/algolia_api.vue +0 -0
  262. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/components/breadcrumbs.py +0 -0
  263. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/components/contact.py +0 -0
  264. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/components/header.py +0 -0
  265. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/components/mailchimp.py +0 -0
  266. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/components/mailchimp.vue +0 -0
  267. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/components/markdown.py +0 -0
  268. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/components/markdown_nav.vue +0 -0
  269. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/components/notebook.py +0 -0
  270. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/components/sidebar.py +0 -0
  271. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/__init__.py +0 -0
  272. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/about/__init__.py +0 -0
  273. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/about/about.md +0 -0
  274. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/apps/__init__.py +0 -0
  275. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/apps/authorization/__init__.py +0 -0
  276. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/apps/authorization/admin.py +0 -0
  277. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/apps/authorization/users.py +0 -0
  278. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/apps/jupyter-dashboard-1.py +0 -0
  279. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/apps/layout-demo.py +0 -0
  280. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/apps/multipage/__init__.py +0 -0
  281. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/apps/multipage/page1.py +0 -0
  282. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/apps/multipage/page2.py +0 -0
  283. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/apps/scatter.py +0 -0
  284. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/apps/scrolling.py +0 -0
  285. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/apps/tutorial-streamlit.py +0 -0
  286. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/careers/__init__.py +0 -0
  287. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/changelog/__init__.py +0 -0
  288. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/contact/__init__.py +0 -0
  289. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/doc_use_download.py +0 -0
  290. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/__init__.py +0 -0
  291. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/__init__.py +0 -0
  292. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/00-overview.md +0 -0
  293. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/10-howto/00-overview.md +0 -0
  294. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/10-howto/10-multipage.md +0 -0
  295. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/10-howto/30-testing.md +0 -0
  296. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/10-howto/31-debugging.md +0 -0
  297. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/10-howto/40-embed.md +0 -0
  298. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/10-howto/50-ipywidget_libraries.md +0 -0
  299. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/15-reference/00-overview.md +0 -0
  300. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/15-reference/40-static_files.md +0 -0
  301. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/15-reference/41-asset-files.md +0 -0
  302. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/15-reference/60-static-site-generation.md +0 -0
  303. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/15-reference/70-search.md +0 -0
  304. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/15-reference/80-reloading.md +0 -0
  305. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/15-reference/90-notebook-support.md +0 -0
  306. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/15-reference/95-caching.md +0 -0
  307. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/20-understanding/00-introduction.md +0 -0
  308. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/20-understanding/05-ipywidgets.md +0 -0
  309. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/20-understanding/06-ipyvuetify.md +0 -0
  310. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/20-understanding/10-reacton.md +0 -0
  311. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/20-understanding/12-reacton-basics.md +0 -0
  312. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/20-understanding/15-anatomy.md +0 -0
  313. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/20-understanding/17-rules-of-hooks.md +0 -0
  314. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/20-understanding/18-containers.md +0 -0
  315. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/20-understanding/20-solara.md +0 -0
  316. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/20-understanding/40-routing.md +0 -0
  317. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/20-understanding/50-solara-server.md +0 -0
  318. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/20-understanding/60-voila.md +0 -0
  319. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/30-enterprise/00-overview.md +0 -0
  320. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/40-development/00-overview.md +0 -0
  321. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/40-development/01-contribute.md +0 -0
  322. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/advanced/content/40-development/10-setup.md +0 -0
  323. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/__init__.py +0 -0
  324. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/cross_filter/__init__.py +0 -0
  325. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/cross_filter/cross_filter_dataframe.py +0 -0
  326. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/cross_filter/cross_filter_report.py +0 -0
  327. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/cross_filter/cross_filter_select.py +0 -0
  328. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/cross_filter/cross_filter_slider.py +0 -0
  329. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/hooks/__init__.py +0 -0
  330. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/hooks/use_cross_filter.py +0 -0
  331. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/hooks/use_dark_effective.py +0 -0
  332. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/hooks/use_effect.md +0 -0
  333. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/hooks/use_effect.py +0 -0
  334. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/hooks/use_exception.py +0 -0
  335. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/hooks/use_memo.md +0 -0
  336. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/hooks/use_memo.py +0 -0
  337. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/hooks/use_previous.py +0 -0
  338. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/hooks/use_reactive.py +0 -0
  339. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/hooks/use_state.py +0 -0
  340. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/hooks/use_state_or_update.py +0 -0
  341. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/hooks/use_thread.md +0 -0
  342. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/hooks/use_thread.py +0 -0
  343. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/hooks/use_trait_observe.py +0 -0
  344. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/routing/__init__.py +0 -0
  345. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/routing/generate_routes.py +0 -0
  346. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/routing/generate_routes_directory.py +0 -0
  347. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/routing/resolve_path.py +0 -0
  348. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/routing/route.py +0 -0
  349. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/routing/use_route.py +0 -0
  350. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/routing/use_router.py +0 -0
  351. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/utilities/__init__.py +0 -0
  352. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/utilities/component_vue.py +0 -0
  353. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/utilities/computed.py +0 -0
  354. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/utilities/display.py +0 -0
  355. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/utilities/get_kernel_id.py +0 -0
  356. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/utilities/get_session_id.py +0 -0
  357. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/utilities/memoize.py +0 -0
  358. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/utilities/on_kernel_start.py +0 -0
  359. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/utilities/reactive.py +0 -0
  360. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/api/utilities/widget.py +0 -0
  361. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/__init__.py +0 -0
  362. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/advanced/__init__.py +0 -0
  363. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/advanced/link.py +0 -0
  364. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/advanced/meta.py +0 -0
  365. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/advanced/style.py +0 -0
  366. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/common.py +0 -0
  367. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/data/__init__.py +0 -0
  368. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/data/dataframe.py +0 -0
  369. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/data/pivot_table.py +0 -0
  370. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/enterprise/__init__.py +0 -0
  371. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/enterprise/avatar.py +0 -0
  372. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/enterprise/avatar_menu.py +0 -0
  373. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/input/__init__.py +0 -0
  374. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/input/button.py +0 -0
  375. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/input/checkbox.py +0 -0
  376. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/input/file_browser.py +0 -0
  377. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/input/file_drop.py +0 -0
  378. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/input/input.py +0 -0
  379. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/input/select.py +0 -0
  380. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/input/slider.py +0 -0
  381. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/input/switch.py +0 -0
  382. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/input/togglebuttons.py +0 -0
  383. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/lab/__init__.py +0 -0
  384. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/lab/chat.py +0 -0
  385. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/lab/confirmation_dialog.py +0 -0
  386. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/lab/cookies_headers.py +0 -0
  387. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/lab/input_date.py +0 -0
  388. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/lab/input_time.py +0 -0
  389. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/lab/menu.py +0 -0
  390. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/lab/tab.py +0 -0
  391. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/lab/tabs.py +0 -0
  392. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/lab/task.py +0 -0
  393. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/lab/use_task.py +0 -0
  394. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/layout/__init__.py +0 -0
  395. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/layout/app_bar.py +0 -0
  396. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/layout/app_bar_title.py +0 -0
  397. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/layout/app_layout.py +0 -0
  398. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/layout/card.py +0 -0
  399. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/layout/card_actions.py +0 -0
  400. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/layout/column.py +0 -0
  401. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/layout/columns.py +0 -0
  402. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/layout/columns_responsive.py +0 -0
  403. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/layout/details.py +0 -0
  404. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/layout/griddraggable.py +0 -0
  405. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/layout/gridfixed.py +0 -0
  406. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/layout/hbox.py +0 -0
  407. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/layout/row.py +0 -0
  408. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/layout/sidebar.py +0 -0
  409. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/layout/vbox.py +0 -0
  410. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/output/__init__.py +0 -0
  411. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/output/file_download.py +0 -0
  412. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/output/html.py +0 -0
  413. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/output/image.py +0 -0
  414. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/output/markdown.py +0 -0
  415. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/output/markdown_editor.py +0 -0
  416. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/output/tooltip.py +0 -0
  417. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/page/__init__.py +0 -0
  418. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/page/head.py +0 -0
  419. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/status/__init__.py +0 -0
  420. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/status/progress.py +0 -0
  421. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/status/spinner.py +0 -0
  422. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/status/success.py +0 -0
  423. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/status/warning.py +0 -0
  424. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/viz/__init__.py +0 -0
  425. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/viz/altair.py +0 -0
  426. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/viz/echarts.py +0 -0
  427. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/viz/matplotlib.py +0 -0
  428. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/viz/plotly.py +0 -0
  429. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/components/viz/plotly_express.py +0 -0
  430. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/ai/__init__.py +0 -0
  431. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/ai/tokenizer.py +0 -0
  432. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/basics/__init__.py +0 -0
  433. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/basics/sine.py +0 -0
  434. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/fullscreen/__init__.py +0 -0
  435. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/fullscreen/authorization.py +0 -0
  436. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/fullscreen/layout_demo.py +0 -0
  437. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/fullscreen/multipage.py +0 -0
  438. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/fullscreen/scatter.py +0 -0
  439. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/fullscreen/scrolling.py +0 -0
  440. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/fullscreen/tutorial_streamlit.py +0 -0
  441. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/general/__init__.py +0 -0
  442. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/general/custom_storage.py +0 -0
  443. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/general/deploy_model.py +0 -0
  444. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/general/login_oauth.py +0 -0
  445. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/general/mycard.vue +0 -0
  446. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/general/vue_component.py +0 -0
  447. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/ipycanvas.py +0 -0
  448. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/libraries/__init__.py +0 -0
  449. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/libraries/altair.py +0 -0
  450. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/libraries/bqplot.py +0 -0
  451. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/libraries/ipyleaflet.py +0 -0
  452. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/libraries/ipyleaflet_advanced.py +0 -0
  453. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/utilities/__init__.py +0 -0
  454. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/utilities/calculator.py +0 -0
  455. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/utilities/countdown_timer.py +0 -0
  456. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/utilities/todo.py +0 -0
  457. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/visualization/__init__.py +0 -0
  458. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/visualization/annotator.py +0 -0
  459. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/visualization/linked_views.py +0 -0
  460. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/examples/visualization/plotly.py +0 -0
  461. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/faq/__init__.py +0 -0
  462. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/faq/content/99-faq.md +0 -0
  463. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/getting_started/__init__.py +0 -0
  464. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/getting_started/content/00-quickstart.md +0 -0
  465. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/getting_started/content/01-introduction.md +0 -0
  466. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/getting_started/content/02-installing.md +0 -0
  467. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/00-overview.md +0 -0
  468. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/10_data_science.py +0 -0
  469. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/20-web-app.md +0 -0
  470. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/30-ipywidgets.md +0 -0
  471. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/40-streamlit.md +0 -0
  472. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/50-dash.md +0 -0
  473. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/60-jupyter-dashboard-part1.py +0 -0
  474. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/SF_crime_sample.csv.gz +0 -0
  475. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/_data_science.ipynb +0 -0
  476. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/_jupyter_dashboard_1.ipynb +0 -0
  477. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/getting_started/content/05-fundamentals/00-overview.md +0 -0
  478. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/getting_started/content/05-fundamentals/10-components.md +0 -0
  479. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/getting_started/content/05-fundamentals/50-state-management.md +0 -0
  480. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/getting_started/content/07-deploying/00-overview.md +0 -0
  481. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/getting_started/content/07-deploying/10-self-hosted.md +0 -0
  482. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/getting_started/content/07-deploying/20-cloud-hosted.md +0 -0
  483. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/getting_started/content/80-what-is-lab.md +0 -0
  484. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/documentation/getting_started/content/90-troubleshoot.md +0 -0
  485. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/docutils.py +0 -0
  486. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/home.vue +0 -0
  487. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/our_team/__init__.py +0 -0
  488. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/pricing/__init__.py +0 -0
  489. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/roadmap/__init__.py +0 -0
  490. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/roadmap/roadmap.md +0 -0
  491. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/scale_ipywidgets.py +0 -0
  492. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/showcase/__init__.py +0 -0
  493. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/showcase/domino_code_assist.py +0 -0
  494. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/showcase/planeto_tessa.py +0 -0
  495. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/showcase/solara_dev.py +0 -0
  496. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/showcase/solarathon_2023_team_2.py +0 -0
  497. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/showcase/solarathon_2023_team_4.py +0 -0
  498. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/showcase/solarathon_2023_team_5.py +0 -0
  499. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/showcase/solarathon_2023_team_6.py +0 -0
  500. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/pages/showcase/wanderlust.py +0 -0
  501. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/public/beach.jpeg +0 -0
  502. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/public/logo.svg +0 -0
  503. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/public/social/discord.svg +0 -0
  504. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/public/social/github.svg +0 -0
  505. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/public/social/twitter.svg +0 -0
  506. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/public/success.html +0 -0
  507. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/templates/index.html.j2 +0 -0
  508. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/website/utils.py +0 -0
  509. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/widgets/__init__.py +0 -0
  510. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/widgets/vue/gridlayout.vue +0 -0
  511. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/widgets/vue/html.vue +0 -0
  512. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/widgets/vue/navigator.vue +0 -0
  513. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/widgets/vue/vegalite.vue +0 -0
  514. {solara_ui-1.43.0 → solara_ui-1.44.0}/solara/widgets/widgets.py +0 -0
  515. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/__init__.py +0 -0
  516. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/conftest.py +0 -0
  517. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/docs/docs_howto_event_with_future_test.py +0 -0
  518. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/docs/docs_howto_event_with_polling_test.py +0 -0
  519. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/docs/docs_howto_no_browser_api_find_testing_test.py +0 -0
  520. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/docs/docs_howto_no_browser_testing_test.py +0 -0
  521. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/docs/docs_howto_no_browser_threaded_test.py +0 -0
  522. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/__init__.py +0 -0
  523. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/api_test.py +0 -0
  524. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/app_widget.py +0 -0
  525. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/apps/not-allowed +0 -0
  526. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/apps/public/test.txt +0 -0
  527. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/apps/secure/app.py +0 -0
  528. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/assets/assets1/common.js +0 -0
  529. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/assets/assets1/unique1.js +0 -0
  530. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/assets/assets2/common.js +0 -0
  531. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/assets/assets2/custom.css +0 -0
  532. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/assets/assets2/custom.js +0 -0
  533. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/assets/assets2/unique2.js +0 -0
  534. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/assets_test.py +0 -0
  535. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/async_test.py +0 -0
  536. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/cdn_test.py +0 -0
  537. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/cmdline_test.py +0 -0
  538. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/conftest.py +0 -0
  539. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/create_test.py +0 -0
  540. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/enterprise/__init__.py +0 -0
  541. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/error_test.py +0 -0
  542. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/esm_test.py +0 -0
  543. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/file_download_test.py +0 -0
  544. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/flask_test.py +0 -0
  545. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/input_date_test.py +0 -0
  546. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/latex_test.py +0 -0
  547. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/lifecycle_test.py +0 -0
  548. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/markdown_test.py +0 -0
  549. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/memleak_test.py +0 -0
  550. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/menu_test.py +0 -0
  551. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/popout_test.py +0 -0
  552. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/reconnect_test.py +0 -0
  553. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/reload/apps.py +0 -0
  554. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/router_test.py +0 -0
  555. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/server_test.py +0 -0
  556. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/ssg_test.py +0 -0
  557. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/test.vue +0 -0
  558. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/testapp.py +0 -0
  559. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/integration/widget_test.py +0 -0
  560. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/pyinstaller/__init__.py +0 -0
  561. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/pyinstaller/pyinstaller_test.py +0 -0
  562. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-win32-ipywidgets-7-changed-reference.png +0 -0
  563. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-win32-ipywidgets-7-reference.png +0 -0
  564. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-win32-ipywidgets-8-changed-reference.png +0 -0
  565. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-win32-ipywidgets-8-reference.png +0 -0
  566. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_lab-chromium-win32-ipywidgets-7-reference.png +0 -0
  567. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_lab-chromium-win32-ipywidgets-8-reference.png +0 -0
  568. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_notebook-chromium-win32-ipywidgets-7-reference.png +0 -0
  569. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_notebook-chromium-win32-ipywidgets-8-reference.png +0 -0
  570. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-solara-chromium-win32-ipywidgets-7-reference.png +0 -0
  571. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-solara-chromium-win32-ipywidgets-8-reference.png +0 -0
  572. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-voila-chromium-win32-ipywidgets-7-reference.png +0 -0
  573. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-voila-chromium-win32-ipywidgets-8-reference.png +0 -0
  574. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-starlette-solara-chromium-win32-ipywidgets-7-reference.png +0 -0
  575. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-starlette-solara-chromium-win32-ipywidgets-8-reference.png +0 -0
  576. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-jupyter_lab-chromium-win32-reference.png +0 -0
  577. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-jupyter_notebook-chromium-win32-reference.png +0 -0
  578. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-solara-chromium-win32-reference.png +0 -0
  579. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-voila-chromium-win32-reference.png +0 -0
  580. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-starlette-solara-chromium-win32-reference.png +0 -0
  581. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_widget_button_solara-flask-chromium-linux-ipyvuetify3-reference.png +0 -0
  582. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_widget_button_solara-flask-chromium-win32-reference.png +0 -0
  583. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_widget_button_solara-starlette-chromium-linux-ipyvuetify3-reference.png +0 -0
  584. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_widget_button_solara-starlette-chromium-win32-reference.png +0 -0
  585. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/__init__.py +0 -0
  586. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/app_test.py +0 -0
  587. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/applayout_test.py +0 -0
  588. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/autorouting_test.py +0 -0
  589. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/cache_test.py +0 -0
  590. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/cdn_helper_test.py +0 -0
  591. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/chat_test.py +0 -0
  592. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/checkbox_test.py +0 -0
  593. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/common.py +0 -0
  594. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/component_frontend_test.py +0 -0
  595. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/component_vue_test.vue +0 -0
  596. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/confirmation_dialog_test.py +0 -0
  597. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/conftest.py +0 -0
  598. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/cross_filter_component_test.py +0 -0
  599. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/cross_filter_test.py +0 -0
  600. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/dataframe_test.py +0 -0
  601. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/datatable_test.py +0 -0
  602. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/display_test.py +0 -0
  603. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/express_test.py +0 -0
  604. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/file_browser_test.py +0 -0
  605. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/file_download_test.py +0 -0
  606. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/hook_use_invalid_test.py +0 -0
  607. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/hooks_test.py +0 -0
  608. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/input_date_test.py +0 -0
  609. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/input_test.py +0 -0
  610. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/input_time_test.py +0 -0
  611. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/kernel_test.py +0 -0
  612. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/lab/__init__.py +0 -0
  613. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/lifecycle_test.py +0 -0
  614. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/matplotlib_test.py +0 -0
  615. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/no_solara_test.py +0 -0
  616. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/output_widget_test.py +0 -0
  617. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/patch_test.py +0 -0
  618. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/reload_test.py +0 -0
  619. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/router_test.py +0 -0
  620. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/select_test.py +0 -0
  621. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/settings_test.py +0 -0
  622. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/shell_test.py +0 -0
  623. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/slider_test.py +0 -0
  624. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/solara_test_apps/__init__.py +0 -0
  625. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/solara_test_apps/food/__init__.py +0 -0
  626. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/solara_test_apps/food/food.py +0 -0
  627. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/solara_test_apps/food/index.py +0 -0
  628. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/solara_test_apps/kernel_start.py +0 -0
  629. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/solara_test_apps/multipage/01-home.py +0 -0
  630. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/solara_test_apps/multipage/02-my_fruit.py +0 -0
  631. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/solara_test_apps/multipage/03-some-markdown.md +0 -0
  632. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/solara_test_apps/multipage/04-a_directory/00-another-markdown.md +0 -0
  633. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/solara_test_apps/multipage/04-a_directory/01-not-an-app.py +0 -0
  634. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/solara_test_apps/multipage/04-a_directory/__init__.py +0 -0
  635. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/solara_test_apps/multipage/05-and-notebooks.ipynb +0 -0
  636. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/solara_test_apps/multipage/06-custom-routes.py +0 -0
  637. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/solara_test_apps/multipage/10-single-file-directory/single-file.md +0 -0
  638. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/solara_test_apps/multipage/99-some_other_python_script.py +0 -0
  639. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/solara_test_apps/multipage/some_other_file.txt +0 -0
  640. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/solara_test_apps/multipage-widgets/00-overview.md +0 -0
  641. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/solara_test_apps/multipage-widgets/01-views.py +0 -0
  642. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/solara_test_apps/multipage-widgets/02-likes.py +0 -0
  643. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/solara_test_apps/multipage-widgets/03-volume.py +0 -0
  644. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/solara_test_apps/multipage-widgets/04-color.ipynb +0 -0
  645. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/solara_test_apps/notebookapp_component.ipynb +0 -0
  646. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/solara_test_apps/notebookapp_element.ipynb +0 -0
  647. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/solara_test_apps/notebookapp_widget.ipynb +0 -0
  648. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/solara_test_apps/single_file.py +0 -0
  649. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/solara_test_apps/single_file_multiple_routes.py +0 -0
  650. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/solara_test_apps/single_file_routes.py +0 -0
  651. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/switch_test.py +0 -0
  652. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/tabs_test.py +0 -0
  653. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/telemetry_tests.py +0 -0
  654. {solara_ui-1.43.0 → solara_ui-1.44.0}/tests/unit/toestand_computed_reload.py +0 -0
  655. {solara_ui-1.43.0 → solara_ui-1.44.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.43.0
3
+ Version: 1.44.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.43.0"
3
+ __version__ = "1.44.0"
4
4
  github_url = "https://github.com/widgetti/solara"
5
5
  git_branch = "master"
6
6
 
@@ -156,7 +156,7 @@ if "SOLARA_MODE" in os.environ:
156
156
  "--restart-dir",
157
157
  "restart_dirs",
158
158
  multiple=True,
159
- help="Set restart directories explicitly, instead of using the current working" " directory.",
159
+ help="Set restart directories explicitly, instead of using the current working directory.",
160
160
  type=click.Path(exists=True),
161
161
  )
162
162
  @click.option(
@@ -172,7 +172,7 @@ if "SOLARA_MODE" in os.environ:
172
172
  "--workers",
173
173
  default=None,
174
174
  type=int,
175
- help="Number of worker processes. Defaults to the $WEB_CONCURRENCY environment" " variable if available, or 1. Not valid with --auto-restart/-a.",
175
+ help="Number of worker processes. Defaults to the $WEB_CONCURRENCY environment variable if available, or 1. Not valid with --auto-restart/-a.",
176
176
  )
177
177
  @click.option(
178
178
  "--env-file",
@@ -1,10 +1,16 @@
1
1
  import copy
2
2
  import dataclasses
3
3
  import inspect
4
- from typing import Callable, ContextManager, Generic, Optional, Union, cast
4
+ import sys
5
+ import threading
6
+ from typing import Callable, ContextManager, Generic, Optional, Union, cast, Any
5
7
  import warnings
6
- from .toestand import ValueBase, KernelStore, S, _find_outside_solara_frame
8
+
9
+
10
+ from .toestand import ValueBase, S, _find_outside_solara_frame, _DEBUG
11
+
7
12
  import solara.util
13
+ import solara.settings
8
14
 
9
15
 
10
16
  class _PublicValueNotSet:
@@ -25,7 +31,7 @@ class StoreValue(Generic[S]):
25
31
 
26
32
 
27
33
  class MutateDetectorStore(ValueBase[S]):
28
- def __init__(self, store: KernelStore[StoreValue[S]], equals=solara.util.equals_extra):
34
+ def __init__(self, store: ValueBase[StoreValue[S]], equals=solara.util.equals_extra):
29
35
  self._storage = store
30
36
  self._enabled = True
31
37
  super().__init__(equals=equals)
@@ -81,7 +87,7 @@ class MutateDetectorStore(ValueBase[S]):
81
87
  code = tb.code_context[0]
82
88
  else:
83
89
  code = "<No code context available>"
84
- msg += f"The last value was read in the following code:\n" f"{tb.filename}:{tb.lineno}\n" f"{code}"
90
+ msg += f"The last value was read in the following code:\n{tb.filename}:{tb.lineno}\n{code}"
85
91
  raise ValueError(msg)
86
92
  elif not isinstance(store_value.set_value, _SetValueNotSet) and not self.equals(store_value.set_value, store_value.private):
87
93
  tb = store_value.set_traceback
@@ -114,7 +120,7 @@ Good (if you want to keep mutating your own list):
114
120
  code = tb.code_context[0]
115
121
  else:
116
122
  code = "<No code context available>"
117
- msg += "The last time the value was set was at:\n" f"{tb.filename}:{tb.lineno}\n" f"{code}"
123
+ msg += f"The last time the value was set was at:\n{tb.filename}:{tb.lineno}\n{code}"
118
124
  raise ValueError(msg)
119
125
 
120
126
  def _ensure_public_exists(self):
@@ -158,7 +164,7 @@ reactive_df = solara.reactive(df, equals=solara.util.equals_pickle)
158
164
  code = tb.code_context[0]
159
165
  else:
160
166
  code = "<No code context available>"
161
- warn += "This warning was triggered from:\n" f"{tb.filename}:{tb.lineno}\n" f"{code}"
167
+ warn += f"This warning was triggered from:\n{tb.filename}:{tb.lineno}\n{code}"
162
168
  warnings.warn(warn)
163
169
  self._enabled = False
164
170
 
@@ -187,3 +193,105 @@ reactive_df = solara.reactive(df, equals=solara.util.equals_pickle)
187
193
  listener(new_value, previous_value)
188
194
 
189
195
  return self._storage.subscribe_change(listener_wrapper, scope=scope)
196
+
197
+
198
+ class SharedStore(ValueBase[S]):
199
+ """Stores a single value, not kernel scoped."""
200
+
201
+ _traceback: Optional[inspect.Traceback]
202
+ _original_ref: Optional[S]
203
+ _original_ref_copy: Optional[S]
204
+
205
+ def __init__(self, value: S, equals: Callable[[Any, Any], bool] = solara.util.equals_extra, unwrap=lambda x: x):
206
+ # since a set can trigger events, which can trigger new updates, we need a recursive lock
207
+ self._lock = threading.RLock()
208
+ self.local = threading.local()
209
+ self.equals = equals
210
+
211
+ self._value = value
212
+ self._original_ref = None
213
+ self._original_ref_copy = None
214
+ self._unwrap = unwrap
215
+ self._mutation_detection = solara.settings.storage.mutation_detection
216
+ if self._mutation_detection:
217
+ frame = _find_outside_solara_frame()
218
+ if frame is not None:
219
+ self._traceback = inspect.getframeinfo(frame)
220
+ else:
221
+ self._traceback = None
222
+ self._original_ref = value
223
+ self._original_ref_copy = copy.deepcopy(self._original_ref)
224
+ if not self.equals(self._unwrap(self._original_ref), self._unwrap(self._original_ref_copy)):
225
+ msg = """The equals function for this reactive value returned False when comparing a deepcopy to itself.
226
+
227
+ This reactive variable will not be able to detect mutations correctly, and is therefore disabled.
228
+
229
+ To avoid this warning, and to ensure that mutation detection works correctly, please provide a better equals function to the reactive variable.
230
+ A good choice for dataframes and numpy arrays might be solara.util.equals_pickle, which will also attempt to compare the pickled values of the objects.
231
+
232
+ Example:
233
+ df = pd.DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]})
234
+ reactive_df = solara.reactive(df, equals=solara.util.equals_pickle)
235
+ """
236
+ tb = self._traceback
237
+ if tb:
238
+ if tb.code_context:
239
+ code = tb.code_context[0]
240
+ else:
241
+ code = "<No code context available>"
242
+ msg += f"This warning was triggered from:\n{tb.filename}:{tb.lineno}\n{code}"
243
+ warnings.warn(msg)
244
+ self._mutation_detection = False
245
+ super().__init__(equals=equals)
246
+
247
+ def _check_mutation(self):
248
+ if not self._mutation_detection:
249
+ return
250
+ current = self._unwrap(self._original_ref)
251
+ initial = self._unwrap(self._original_ref_copy)
252
+ if not self.equals(initial, current):
253
+ tb = self._traceback
254
+ if tb:
255
+ if tb.code_context:
256
+ code = tb.code_context[0].strip()
257
+ else:
258
+ code = "No code context available"
259
+ msg = f"Reactive variable was initialized at {tb.filename}:{tb.lineno} with {initial!r}, but was mutated to {current!r}.\n{code}"
260
+ else:
261
+ msg = f"Reactive variable was initialized with a value of {initial!r}, but was mutated to {current!r} (unable to report the location in the source code)."
262
+ raise ValueError(msg)
263
+
264
+ @property
265
+ def lock(self):
266
+ return self._lock
267
+
268
+ def peek(self):
269
+ self._check_mutation()
270
+ return self._value
271
+
272
+ def get(self):
273
+ self._check_mutation()
274
+ return self._value
275
+
276
+ def clear(self):
277
+ pass
278
+
279
+ def _get_scope_key(self):
280
+ return "GLOBAL"
281
+
282
+ def set(self, value: S):
283
+ self._check_mutation()
284
+ old = self.get()
285
+ if self.equals(old, value):
286
+ return
287
+ self._value = value
288
+
289
+ if _DEBUG:
290
+ import traceback
291
+
292
+ traceback.print_stack(limit=17, file=sys.stdout)
293
+
294
+ print("change old", old) # noqa
295
+ print("change new", value) # noqa
296
+
297
+ self.fire(value, old)
@@ -1,3 +1,4 @@
1
+ from collections.abc import Hashable
1
2
  import hashlib
2
3
  import inspect
3
4
  import logging
@@ -50,6 +51,7 @@ if has_cachetools:
50
51
  class Memory(cachetools.LRUCache):
51
52
  def __init__(self, max_items=solara.settings.cache.memory_max_items):
52
53
  super().__init__(maxsize=max_items)
54
+
53
55
  else:
54
56
 
55
57
  class Memory(dict): # type: ignore
@@ -64,7 +66,7 @@ def _default_key(*args, **kwargs):
64
66
 
65
67
 
66
68
  class MemoizedFunction(Generic[P, R]):
67
- def __init__(self, function: Callable[P, R], key: Callable[P, R], storage: Optional[Storage], allow_nonlocals=False):
69
+ def __init__(self, function: Callable[P, R], key: Callable[P, Hashable], storage: Optional[Storage], allow_nonlocals=False):
68
70
  self.function = function
69
71
  f: Callable = self.function
70
72
  if not allow_nonlocals:
@@ -170,7 +172,7 @@ def memoize(
170
172
  @overload
171
173
  def memoize(
172
174
  function: None = None,
173
- key: Callable[P, R] = ...,
175
+ key: Callable[P, Hashable] = ...,
174
176
  storage: Optional[Storage] = None,
175
177
  allow_nonlocals=False,
176
178
  ) -> Callable[[Callable[P, R]], MemoizedFunction[P, R]]: ...
@@ -187,7 +189,7 @@ def memoize(
187
189
 
188
190
  def memoize(
189
191
  function: Union[None, Callable[P, R]] = None,
190
- key: Union[None, Callable[P, R]] = None,
192
+ key: Union[None, Callable[P, Hashable]] = None,
191
193
  storage: Optional[Storage] = None,
192
194
  allow_nonlocals: bool = False,
193
195
  ) -> Union[Callable[[Callable[P, R]], MemoizedFunction[P, R]], MemoizedFunction[P, R]]:
@@ -249,7 +251,7 @@ def memoize(
249
251
  def wrapper(func: Callable[P, R]) -> MemoizedFunction[P, R]:
250
252
  return MemoizedFunction[P, R](
251
253
  func,
252
- cast(Callable[P, R], key or _default_key),
254
+ cast(Callable[P, Hashable], key or _default_key),
253
255
  storage,
254
256
  allow_nonlocals,
255
257
  )
@@ -164,7 +164,7 @@ def get_server_python_executable(silent: bool = False):
164
164
  else:
165
165
  python = pythons[0]
166
166
  if not silent:
167
- warnings.warn("Found multiple find servers:\n%s\n" "We are assuming the server is running under Python executable: %s" % (info, python))
167
+ warnings.warn(f"Found multiple find servers:\n{info}\nWe are assuming the server is running under Python executable: {python}")
168
168
  else:
169
169
  python = pythons[0]
170
170
  return python
@@ -174,7 +174,7 @@ def SelectMultiple(
174
174
  items=all_values,
175
175
  label=label,
176
176
  multiple=True,
177
- dense=False,
177
+ dense=dense,
178
178
  disabled=disabled,
179
179
  class_=class_,
180
180
  style_=style_flat,
@@ -101,5 +101,5 @@ module.exports = {
101
101
  {css_content}
102
102
  </style>
103
103
  """
104
- # using .key avoids re-using the template, which causes a flicker (due to ipyvue)
104
+ # using .key avoids reusing the template, which causes a flicker (due to ipyvue)
105
105
  return v.VuetifyTemplate.element(template=template).key(key)
@@ -1,6 +1,7 @@
1
1
  from typing import Any, Callable, Optional, TypeVar, Union
2
2
 
3
3
  import solara
4
+ import solara.settings
4
5
 
5
6
  T = TypeVar("T")
6
7
 
@@ -105,7 +106,21 @@ def use_reactive(
105
106
 
106
107
  def create():
107
108
  if not isinstance(value, solara.Reactive):
108
- return solara.reactive(value)
109
+ from solara._stores import SharedStore, MutateDetectorStore, StoreValue, _PublicValueNotSet, _SetValueNotSet
110
+ from solara.toestand import ValueBase
111
+
112
+ store: ValueBase[T]
113
+
114
+ if solara.settings.storage.mutation_detection is True:
115
+ shared_store = SharedStore[StoreValue[T]](
116
+ StoreValue[T](private=value, public=_PublicValueNotSet(), get_traceback=None, set_value=_SetValueNotSet(), set_traceback=None),
117
+ unwrap=lambda x: x.private,
118
+ )
119
+ store = MutateDetectorStore[T](shared_store, equals=equals)
120
+ else:
121
+ store = SharedStore(value, equals=equals)
122
+
123
+ return solara.Reactive(store)
109
124
 
110
125
  reactive_value = solara.use_memo(create, dependencies=[])
111
126
  if isinstance(value, solara.Reactive):
@@ -45,7 +45,10 @@ def ChatBox(
45
45
  def ChatInput(
46
46
  send_callback: Optional[Callable[[str], None]] = None,
47
47
  disabled: bool = False,
48
+ disabled_input: bool = False,
49
+ disabled_send: bool = False,
48
50
  style: Optional[Union[str, Dict[str, str]]] = None,
51
+ autofocus: bool = False,
49
52
  input_text_style: Optional[Union[str, Dict[str, str]]] = None,
50
53
  classes: List[str] = [],
51
54
  input_text_classes: List[str] = [],
@@ -56,9 +59,11 @@ def ChatInput(
56
59
  # Arguments
57
60
 
58
61
  * `send_callback`: A callback function for when the user presses enter or clicks the send button taking the message as an argument.
59
- * `disabled`: Whether the input should be disabled. Useful for disabling sending further messages while a chatbot is replying,
60
- among other things.
62
+ * `disabled`: disable both input and send.
63
+ * `disabled_input`: Whether the input should be disabled. Useful for disabling messages while a chatbot is replying.
64
+ * `disabled_send`: Whether the send button should be disabled. Useful for disabling sending further messages while a chatbot is replying.
61
65
  * `style`: CSS styles to apply to the `solara.Row` containing the input field and submit button. Either a string or a dictionary.
66
+ * `autofocus`: Determines if a component is to be autofocused or not (Default is False). Autofocus will occur during page load and only one component per page can have autofocus active.
62
67
  * `input_text_style`: CSS styles to apply to the `InputText` part of the component. Either a string or a dictionary.
63
68
  * `classes`: A list of CSS classes to apply to the component. Also applied to the container.
64
69
  * `input_text_classes`: A list of CSS classes to apply to the `InputText` part of the component.
@@ -84,14 +89,15 @@ def ChatInput(
84
89
  rounded=True,
85
90
  filled=True,
86
91
  hide_details=True,
92
+ autofocus=autofocus,
87
93
  style_="flex-grow: 1;" + input_text_style_flat,
88
- disabled=disabled,
94
+ disabled=disabled or disabled_input,
89
95
  class_=" ".join(input_text_classes),
90
96
  )
91
97
 
92
98
  use_change(message_input, send, update_events=["keyup.enter"])
93
99
 
94
- button = solara.v.Btn(color="primary", icon=True, children=[solara.v.Icon(children=["mdi-send"])], disabled=message == "")
100
+ button = solara.v.Btn(color="primary", icon=True, children=[solara.v.Icon(children=["mdi-send"])], disabled=message == "" or disabled or disabled_send)
95
101
 
96
102
  use_change(button, send, update_events=["click"])
97
103
 
@@ -197,12 +203,12 @@ def ChatMessage(
197
203
  .chat-message-{msg_uuid}.left{{
198
204
  border-top-left-radius: 0;
199
205
  background-color:var(--color);
200
- { "margin-left: 10px !important;" if notch else ""}
206
+ {"margin-left: 10px !important;" if notch else ""}
201
207
  }}
202
208
  .chat-message-{msg_uuid}.right{{
203
209
  border-top-right-radius: 0;
204
210
  background-color:var(--color);
205
- { "margin-right: 10px !important;" if notch else ""}
211
+ {"margin-right: 10px !important;" if notch else ""}
206
212
  }}
207
213
  {extra_styles}
208
214
  """
@@ -90,6 +90,7 @@ class AppScript:
90
90
  self.path = Path(spec.origin)
91
91
  self.directory = self.path.parent
92
92
  self._initialized = False
93
+ self._lock = threading.Lock()
93
94
 
94
95
  def init(self):
95
96
  try:
@@ -225,7 +226,9 @@ class AppScript:
225
226
 
226
227
  def check(self):
227
228
  if not self._initialized:
228
- raise RuntimeError("Call solara.server.app.ensure_apps_initialized() first")
229
+ with self._lock:
230
+ if not self._initialized:
231
+ self.init()
229
232
 
230
233
  def run(self):
231
234
  self.check()
@@ -26,7 +26,7 @@ from ipywidgets import DOMWidget, Widget
26
26
  import solara.server.settings
27
27
  import solara.util
28
28
 
29
- from . import kernel, kernel_context, websocket
29
+ from . import kernel, websocket
30
30
  from .. import lifecycle
31
31
  from .kernel import Kernel, WebsocketStreamWrapper
32
32
 
@@ -35,7 +35,7 @@ logger = logging.getLogger("solara.server.app")
35
35
 
36
36
 
37
37
  class Local(threading.local):
38
- kernel_context_stack: Optional[List[Optional["kernel_context.VirtualKernelContext"]]] = None
38
+ kernel_context_stack: Optional[List[Optional["VirtualKernelContext"]]] = None
39
39
 
40
40
 
41
41
  local = Local()
@@ -174,6 +174,8 @@ def display_solara(
174
174
  # if display_id:
175
175
  # return DisplayHandle(display_id)
176
176
 
177
+ get_ipython_original = IPython.get_ipython
178
+
177
179
 
178
180
  def get_ipython():
179
181
  if kernel_context.has_current_context():
@@ -181,7 +183,7 @@ def get_ipython():
181
183
  our_fake_ipython = FakeIPython(context)
182
184
  return our_fake_ipython
183
185
  else:
184
- return None
186
+ return get_ipython_original()
185
187
 
186
188
 
187
189
  class context_dict(MutableMapping):
@@ -187,7 +187,7 @@ async def app_loop(
187
187
  created_widgets_count = len(widgets_ids_after - widgets_ids)
188
188
  close_widgets_count = len(widgets_ids - widgets_ids_after)
189
189
  print( # noqa: T201
190
- f"timing: total={t2-t0:.3f}s, deserialize={t1-t0:.3f}s, kernel={t2-t1:.3f}s"
190
+ f"timing: total={t2 - t0:.3f}s, deserialize={t1 - t0:.3f}s, kernel={t2 - t1:.3f}s"
191
191
  f" widget: created: {created_widgets_count} closed: {close_widgets_count}"
192
192
  )
193
193
  finally:
@@ -113,6 +113,7 @@ class WebsocketWrapper(websocket.WebsocketWrapper):
113
113
  # we store a strong reference
114
114
  self.tasks: Set[asyncio.Task] = set()
115
115
  self.event_loop = asyncio.get_event_loop()
116
+ self._thread_id = threading.get_ident()
116
117
  if settings.main.experimental_performance:
117
118
  self.task = asyncio.ensure_future(self.process_messages_task())
118
119
 
@@ -133,7 +134,10 @@ class WebsocketWrapper(websocket.WebsocketWrapper):
133
134
  await self.ws.send_bytes(data)
134
135
  except (websockets.exceptions.ConnectionClosed, starlette.websockets.WebSocketDisconnect, RuntimeError) as e:
135
136
  # starlette throws a RuntimeError once you call send after the connection is closed
136
- raise websocket.WebSocketDisconnect() from e
137
+ if isinstance(e, RuntimeError) and "close message" in repr(e):
138
+ raise websocket.WebSocketDisconnect() from e
139
+ else:
140
+ raise
137
141
 
138
142
  async def _send_text_exc(self, data: str):
139
143
  # make sures we catch the starlette/websockets specific exception
@@ -141,8 +145,10 @@ class WebsocketWrapper(websocket.WebsocketWrapper):
141
145
  try:
142
146
  await self.ws.send_text(data)
143
147
  except (websockets.exceptions.ConnectionClosed, starlette.websockets.WebSocketDisconnect, RuntimeError) as e:
144
- # starlette throws a RuntimeError once you call send after the connection is closed
145
- raise websocket.WebSocketDisconnect() from e
148
+ if isinstance(e, RuntimeError) and "close message" in repr(e):
149
+ raise websocket.WebSocketDisconnect() from e
150
+ else:
151
+ raise
146
152
 
147
153
  def close(self):
148
154
  if self.portal is None:
@@ -159,7 +165,19 @@ class WebsocketWrapper(websocket.WebsocketWrapper):
159
165
  if settings.main.experimental_performance:
160
166
  self.to_send.append(data)
161
167
  else:
162
- self.portal.call(self._send_text_exc, data)
168
+ if self._thread_id == threading.get_ident():
169
+ warnings.warn("""You are triggering a websocket send from the event loop thread.
170
+ Support for this is experimental, and to avoid this message, make sure you trigger updates
171
+ that trigger this from a different thread, e.g.:
172
+
173
+ from anyio import to_thread
174
+ await to_thread.run_sync(my_update)
175
+ """)
176
+ task = self.event_loop.create_task(self._send_text_exc(data))
177
+ self.tasks.add(task)
178
+ task.add_done_callback(self.tasks.discard)
179
+ else:
180
+ self.portal.call(self._send_text_exc, data)
163
181
 
164
182
  def send_bytes(self, data: bytes) -> None:
165
183
  if self.portal is None:
@@ -170,6 +188,18 @@ class WebsocketWrapper(websocket.WebsocketWrapper):
170
188
  if settings.main.experimental_performance:
171
189
  self.to_send.append(data)
172
190
  else:
191
+ if self._thread_id == threading.get_ident():
192
+ warnings.warn("""You are triggering a websocket send from the event loop thread.
193
+ Support for this is experimental, and to avoid this message, make sure you trigger updates
194
+ that trigger this from a different thread, e.g.:
195
+
196
+ from anyio import to_thread
197
+ await to_thread.run_sync(my_update)
198
+ """)
199
+ task = self.event_loop.create_task(self._send_bytes_exc(data))
200
+ self.tasks.add(task)
201
+ task.add_done_callback(self.tasks.discard)
202
+
173
203
  self.portal.call(self._send_bytes_exc, data)
174
204
 
175
205
  async def receive(self):
@@ -350,7 +380,7 @@ async def root(request: Request, fullpath: str = ""):
350
380
  forwarded_proto = request.headers.get("x-forwarded-proto")
351
381
  host = request.headers.get("host")
352
382
  if forwarded_proto and forwarded_proto != request.scope["scheme"]:
353
- warnings.warn(f"""Header x-forwarded-proto={forwarded_proto!r} does not match scheme={request.scope['scheme']!r} as given by the asgi framework (probably uvicorn)
383
+ warnings.warn(f"""Header x-forwarded-proto={forwarded_proto!r} does not match scheme={request.scope["scheme"]!r} as given by the asgi framework (probably uvicorn)
354
384
 
355
385
  This might be a configuration mismatch behind a reverse proxy and can cause issues with redirect urls, and auth.
356
386
 
@@ -409,10 +439,10 @@ This could be a configuration mismatch behind a reverse proxy and can cause issu
409
439
  See also https://solara.dev/documentation/getting_started/deploying/self-hosted
410
440
  """
411
441
  if "script-name" in request.headers:
412
- msg += f"""It looks like the reverse proxy sets the script-name header to {request.headers['script-name']!r}
442
+ msg += f"""It looks like the reverse proxy sets the script-name header to {request.headers["script-name"]!r}
413
443
  """
414
444
  if "x-script-name" in request.headers:
415
- msg += f"""It looks like the reverse proxy sets the x-script-name header to {request.headers['x-script-name']!r}
445
+ msg += f"""It looks like the reverse proxy sets the x-script-name header to {request.headers["x-script-name"]!r}
416
446
  """
417
447
  if configured_root_path:
418
448
  msg += f"""It looks like the root path was configured to {configured_root_path!r} in the settings
@@ -472,8 +502,8 @@ See also https://solara.dev/documentation/getting_started/deploying/self-hosted
472
502
  samesite = "none"
473
503
  secure = True
474
504
  elif request.base_url.hostname != "localhost":
475
- warnings.warn(f"""Cookies with samesite=none require https, but according to the asgi framework, the scheme is {request.scope['scheme']!r}
476
- and the x-forwarded-proto header is {request.headers.get('x-forwarded-proto', 'http')!r}. We will fallback to samesite=lax.
505
+ warnings.warn(f"""Cookies with samesite=none require https, but according to the asgi framework, the scheme is {request.scope["scheme"]!r}
506
+ and the x-forwarded-proto header is {request.headers.get("x-forwarded-proto", "http")!r}. We will fallback to samesite=lax.
477
507
 
478
508
  If you embed solara in an iframe, make sure you forward the x-forwarded-proto header correctly so that the session cookie can be set.
479
509
 
@@ -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.43.0-py2.py3-none-any.whl", keep_going=True)
122
+ await micropip.install("/wheels/solara-1.44.0-py2.py3-none-any.whl", keep_going=True)
123
123
  import solara
124
124
 
125
125
  el = solara.Warning("lala")
@@ -104,6 +104,9 @@ class Task(Generic[P, R], abc.ABC):
104
104
  self._progress = ref(self._result.fields.progress)
105
105
  self._exception = ref(self._result.fields.exception)
106
106
  self._state_ = ref(self._result.fields._state)
107
+ # used for tests only
108
+ self._start_event = threading.Event()
109
+ self._start_event.set()
107
110
 
108
111
  @property
109
112
  def result(self) -> TaskResult[R]:
@@ -253,6 +256,8 @@ class TaskAsyncio(Task[P, R]):
253
256
  return (self.current_task == asyncio.current_task()) and not running_task.cancelled()
254
257
 
255
258
  async def _async_run(self, call_event_loop: asyncio.AbstractEventLoop, future: asyncio.Future, args, kwargs) -> None:
259
+ self._start_event.wait()
260
+
256
261
  task_for_this_call = asyncio.current_task()
257
262
  assert task_for_this_call is not None
258
263
 
@@ -304,6 +309,7 @@ class TaskThreaded(Task[P, R]):
304
309
  self.__qualname__ = function.__qualname__
305
310
  self.function = function
306
311
  self.lock = threading.Lock()
312
+ self._local = threading.local()
307
313
 
308
314
  def cancel(self) -> None:
309
315
  if self._cancel:
@@ -343,12 +349,17 @@ class TaskThreaded(Task[P, R]):
343
349
  current_thread.start()
344
350
 
345
351
  def is_current(self):
352
+ cancel_event = getattr(self._local, "cancel_event", None)
353
+ if cancel_event is not None and cancel_event.is_set():
354
+ return False
346
355
  return self._current_thread == threading.current_thread()
347
356
 
348
357
  def _run(self, _last_finished_event, previous_thread: Optional[threading.Thread], cancel_event, args, kwargs) -> None:
349
358
  # use_thread has this as default, which can make code run 10x slower
359
+ self._start_event.wait()
350
360
  intrusive_cancel = False
351
361
  wait_on_previous = False
362
+ self._local.cancel_event = cancel_event
352
363
 
353
364
  def runner():
354
365
  if wait_on_previous:
@@ -405,7 +416,7 @@ class TaskThreaded(Task[P, R]):
405
416
  # this means this thread is cancelled not be request, but because
406
417
  # a new thread is running, we can ignore this
407
418
  finally:
408
- if self.is_current():
419
+ if self._current_thread == threading.current_thread():
409
420
  self.running_thread = None
410
421
  logger.info("thread done!")
411
422
  if cancel_event.is_set():
@@ -101,7 +101,7 @@ def context_session(
101
101
  if capture_screenshot:
102
102
  for index, page in enumerate(pages):
103
103
  human_readable_status = "failed" if failed else "finished"
104
- screenshot_path = _build_artifact_test_folder(pytestconfig, request, f"test-{human_readable_status}-{index+1}.png")
104
+ screenshot_path = _build_artifact_test_folder(pytestconfig, request, f"test-{human_readable_status}-{index + 1}.png")
105
105
  try:
106
106
  page.screenshot(timeout=5000, path=screenshot_path)
107
107
  except Error:
@@ -144,13 +144,14 @@ def solara_app(solara_server):
144
144
  used_app = None
145
145
 
146
146
  @contextlib.contextmanager
147
- def run(app: Union[solara.server.app.AppScript, str]):
147
+ def run(app: Union[solara.server.app.AppScript, str], init=True):
148
148
  nonlocal used_app
149
149
  if "__default__" in solara.server.app.apps:
150
150
  solara.server.app.apps["__default__"].close()
151
151
  if isinstance(app, str):
152
152
  app = solara.server.app.AppScript(app)
153
- app.init()
153
+ if init:
154
+ app.init()
154
155
  used_app = app
155
156
  solara.server.app.apps["__default__"] = app
156
157
  try: