solara-ui 1.42.0__tar.gz → 1.43.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 (639) hide show
  1. {solara_ui-1.42.0 → solara_ui-1.43.0}/PKG-INFO +2 -2
  2. {solara_ui-1.42.0 → solara_ui-1.43.0}/pyproject.toml +2 -1
  3. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/__init__.py +1 -1
  4. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/__main__.py +10 -5
  5. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/_stores.py +14 -10
  6. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/__init__.py +18 -1
  7. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/datatable.py +4 -4
  8. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/input.py +5 -1
  9. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/markdown.py +46 -10
  10. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/lab/components/__init__.py +1 -0
  11. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/lab/components/chat.py +3 -3
  12. solara_ui-1.43.0/solara/lab/components/input_time.py +133 -0
  13. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/lab/hooks/dataframe.py +1 -0
  14. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/lab/utils/dataframe.py +11 -1
  15. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/app.py +63 -30
  16. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/flask.py +12 -2
  17. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/jupyter/server_extension.py +1 -0
  18. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/kernel.py +50 -3
  19. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/kernel_context.py +66 -7
  20. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/patch.py +25 -29
  21. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/server.py +15 -5
  22. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/settings.py +11 -0
  23. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/shell.py +19 -1
  24. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/starlette.py +37 -9
  25. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/static/solara_bootstrap.py +1 -1
  26. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/settings.py +3 -0
  27. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/tasks.py +18 -8
  28. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/test/pytest_plugin.py +1 -0
  29. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/toestand.py +33 -2
  30. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/util.py +18 -0
  31. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/components/docs.py +4 -0
  32. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/components/markdown.py +17 -3
  33. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/changelog/changelog.md +9 -1
  34. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/20-understanding/50-solara-server.md +10 -0
  35. solara_ui-1.43.0/solara/website/pages/documentation/api/routing/route.py +29 -0
  36. solara_ui-1.43.0/solara/website/pages/documentation/api/routing/use_route.py +76 -0
  37. solara_ui-1.43.0/solara/website/pages/documentation/components/advanced/link.py +25 -0
  38. solara_ui-1.43.0/solara/website/pages/documentation/components/advanced/meta.py +17 -0
  39. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/advanced/style.py +7 -9
  40. solara_ui-1.43.0/solara/website/pages/documentation/components/input/file_browser.py +30 -0
  41. solara_ui-1.43.0/solara/website/pages/documentation/components/lab/input_time.py +15 -0
  42. solara_ui-1.43.0/solara/website/pages/documentation/components/layout/columns_responsive.py +66 -0
  43. solara_ui-1.43.0/solara/website/pages/documentation/components/layout/gridfixed.py +19 -0
  44. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/output/html.py +1 -3
  45. solara_ui-1.43.0/solara/website/pages/documentation/components/page/head.py +15 -0
  46. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/__init__.py +9 -0
  47. solara_ui-1.43.0/solara/website/pages/documentation/examples/ai/chatbot.py +111 -0
  48. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/general/live_update.py +1 -0
  49. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/faq/content/99-faq.md +9 -0
  50. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/getting_started/content/00-quickstart.md +1 -1
  51. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/_jupyter_dashboard_1.ipynb +23 -19
  52. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/getting_started/content/07-deploying/10-self-hosted.md +2 -2
  53. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/roadmap/roadmap.md +3 -0
  54. solara_ui-1.43.0/tests/integration/memleak_test.py +101 -0
  55. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/app_test.py +7 -0
  56. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/autorouting_test.py +2 -0
  57. solara_ui-1.43.0/tests/unit/input_time_test.py +197 -0
  58. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/kernel_test.py +19 -0
  59. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/patch_test.py +4 -3
  60. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/reload_test.py +1 -0
  61. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/task_test.py +10 -9
  62. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/toestand_test.py +1 -0
  63. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/toggle_button_test.py +1 -1
  64. solara_ui-1.42.0/solara/website/pages/documentation/api/routing/route.py +0 -31
  65. solara_ui-1.42.0/solara/website/pages/documentation/api/routing/use_route.py +0 -80
  66. solara_ui-1.42.0/solara/website/pages/documentation/components/advanced/link.py +0 -27
  67. solara_ui-1.42.0/solara/website/pages/documentation/components/advanced/meta.py +0 -20
  68. solara_ui-1.42.0/solara/website/pages/documentation/components/input/file_browser.py +0 -32
  69. solara_ui-1.42.0/solara/website/pages/documentation/components/layout/columns_responsive.py +0 -68
  70. solara_ui-1.42.0/solara/website/pages/documentation/components/layout/gridfixed.py +0 -21
  71. solara_ui-1.42.0/solara/website/pages/documentation/components/page/head.py +0 -18
  72. solara_ui-1.42.0/solara/website/pages/documentation/examples/ai/chatbot.py +0 -95
  73. {solara_ui-1.42.0 → solara_ui-1.43.0}/.gitignore +0 -0
  74. {solara_ui-1.42.0 → solara_ui-1.43.0}/LICENSE +0 -0
  75. {solara_ui-1.42.0 → solara_ui-1.43.0}/README.md +0 -0
  76. {solara_ui-1.42.0 → solara_ui-1.43.0}/prefix/etc/jupyter/jupyter_notebook_config.d/solara.json +0 -0
  77. {solara_ui-1.42.0 → solara_ui-1.43.0}/prefix/etc/jupyter/jupyter_server_config.d/solara.json +0 -0
  78. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/alias.py +0 -0
  79. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/autorouting.py +0 -0
  80. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/cache.py +0 -0
  81. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/checks.html +0 -0
  82. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/checks.py +0 -0
  83. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/comm.py +0 -0
  84. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/alert.py +0 -0
  85. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/applayout.py +0 -0
  86. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/button.py +0 -0
  87. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/card.py +0 -0
  88. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/checkbox.py +0 -0
  89. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/code_highlight_css.py +0 -0
  90. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/code_highlight_css.vue +0 -0
  91. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/columns.py +0 -0
  92. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/component_vue.py +0 -0
  93. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/cross_filter.py +0 -0
  94. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/dataframe.py +0 -0
  95. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/datatable.vue +0 -0
  96. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/details.py +0 -0
  97. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/download.vue +0 -0
  98. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/echarts.py +0 -0
  99. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/echarts.vue +0 -0
  100. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/figure_altair.py +0 -0
  101. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/file_browser.py +0 -0
  102. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/file_download.py +0 -0
  103. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/file_drop.py +0 -0
  104. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/file_drop.vue +0 -0
  105. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/file_list_widget.vue +0 -0
  106. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/head.py +0 -0
  107. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/head_tag.py +0 -0
  108. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/head_tag.vue +0 -0
  109. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/image.py +0 -0
  110. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/input_text_area.py +0 -0
  111. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/link.py +0 -0
  112. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/markdown_editor.py +0 -0
  113. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/markdown_editor.vue +0 -0
  114. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/matplotlib.py +0 -0
  115. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/meta.py +0 -0
  116. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/misc.py +2 -2
  117. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/pivot_table.py +0 -0
  118. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/pivot_table.vue +0 -0
  119. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/progress.py +0 -0
  120. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/select.py +0 -0
  121. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/select.vue +0 -0
  122. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/slider.py +0 -0
  123. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/slider_date.vue +0 -0
  124. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/spinner-solara.vue +0 -0
  125. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/spinner.py +0 -0
  126. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/sql_code.py +0 -0
  127. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/sql_code.vue +0 -0
  128. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/style.py +0 -0
  129. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/switch.py +0 -0
  130. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/tab_navigation.py +0 -0
  131. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/title.py +0 -0
  132. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/title.vue +0 -0
  133. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/togglebuttons.py +0 -0
  134. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/components/tooltip.py +0 -0
  135. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/core.py +0 -0
  136. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/datatypes.py +0 -0
  137. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/express.py +0 -0
  138. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/hooks/__init__.py +0 -0
  139. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/hooks/dataframe.py +0 -0
  140. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/hooks/misc.py +0 -0
  141. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/hooks/use_reactive.py +0 -0
  142. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/hooks/use_thread.py +0 -0
  143. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/kitchensink.py +0 -0
  144. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/lab/__init__.py +0 -0
  145. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/lab/components/confirmation_dialog.py +0 -0
  146. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/lab/components/cross_filter.py +0 -0
  147. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/lab/components/input_date.py +0 -0
  148. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/lab/components/menu.py +0 -0
  149. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/lab/components/menu.vue +0 -0
  150. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/lab/components/tabs.py +0 -0
  151. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/lab/components/theming.py +0 -0
  152. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/lab/components/theming.vue +0 -0
  153. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/lab/hooks/__init__.py +0 -0
  154. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/lab/toestand.py +0 -0
  155. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/lab/utils/__init__.py +0 -0
  156. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/lab/utils/cookies.py +0 -0
  157. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/lab/utils/headers.py +0 -0
  158. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/layout.py +0 -0
  159. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/lifecycle.py +0 -0
  160. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/minisettings.py +0 -0
  161. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/py.typed +0 -0
  162. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/reactive.py +0 -0
  163. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/routing.py +0 -0
  164. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/scope/__init__.py +0 -0
  165. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/scope/types.py +0 -0
  166. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/__init__.py +0 -0
  167. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/assets/custom.css +0 -0
  168. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/assets/custom.js +0 -0
  169. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/assets/favicon.png +0 -0
  170. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/assets/favicon.svg +0 -0
  171. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/assets/style.css +0 -0
  172. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/assets/theme-dark.css +0 -0
  173. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/assets/theme-light.css +0 -0
  174. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/assets/theme.js +0 -0
  175. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/cdn_helper.py +0 -0
  176. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/esm.py +0 -0
  177. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/fastapi.py +0 -0
  178. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/jupyter/__init__.py +0 -0
  179. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/jupyter/cdn_handler.py +0 -0
  180. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/jupyter/solara.py +0 -0
  181. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/jupytertools.py +0 -0
  182. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/pyinstaller/__init__.py +0 -0
  183. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/pyinstaller/hook-ipyreact.py +0 -0
  184. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/pyinstaller/hook-ipyvuetify.py +0 -0
  185. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/pyinstaller/hook-solara.py +0 -0
  186. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/qt.py +0 -0
  187. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/reload.py +0 -0
  188. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/static/ansi.js +0 -0
  189. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/static/highlight-dark.css +0 -0
  190. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/static/highlight.css +0 -0
  191. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/static/main-vuetify.js +0 -0
  192. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/static/main.js +0 -0
  193. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/static/sun.svg +0 -0
  194. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/static/webworker.js +0 -0
  195. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/telemetry.py +0 -0
  196. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/templates/index.html.j2 +0 -0
  197. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/templates/loader-plain.css +0 -0
  198. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/templates/loader-plain.html +0 -0
  199. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/templates/loader-solara.css +0 -0
  200. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/templates/loader-solara.html +0 -0
  201. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/templates/plain.html +0 -0
  202. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/templates/solara.html.j2 +0 -0
  203. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/threaded.py +0 -0
  204. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/utils.py +0 -0
  205. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/server/websocket.py +0 -0
  206. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/template/button.py +0 -0
  207. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/template/markdown.py +0 -0
  208. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/template/portal/.flake8 +0 -0
  209. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/template/portal/.pre-commit-config.yaml +0 -0
  210. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/template/portal/LICENSE +0 -0
  211. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/template/portal/Procfile +0 -0
  212. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/template/portal/mypy.ini +0 -0
  213. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/template/portal/pyproject.toml +0 -0
  214. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/template/portal/solara_portal/__init__.py +0 -0
  215. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/template/portal/solara_portal/components/__init__.py +0 -0
  216. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/template/portal/solara_portal/components/article.py +0 -0
  217. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/template/portal/solara_portal/components/data.py +0 -0
  218. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/template/portal/solara_portal/components/header.py +0 -0
  219. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/template/portal/solara_portal/components/layout.py +0 -0
  220. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/template/portal/solara_portal/content/articles/equis-in-vidi.md +0 -0
  221. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/template/portal/solara_portal/content/articles/substiterat-vati.md +0 -0
  222. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/template/portal/solara_portal/data.py +0 -0
  223. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/template/portal/solara_portal/pages/__init__.py +0 -0
  224. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/template/portal/solara_portal/pages/article/__init__.py +0 -0
  225. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/template/portal/solara_portal/pages/tabular.py +0 -0
  226. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/template/portal/solara_portal/pages/viz/__init__.py +0 -0
  227. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/template/portal/solara_portal/pages/viz/overview.py +0 -0
  228. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/test/__init__.py +0 -0
  229. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/validate_hooks.py +0 -0
  230. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/__init__.py +0 -0
  231. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/assets/custom.css +0 -0
  232. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/assets/images/logo-small.png +0 -0
  233. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/assets/images/logo.svg +0 -0
  234. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/assets/images/logo_white.svg +0 -0
  235. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/assets/theme.js +0 -0
  236. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/components/__init__.py +0 -0
  237. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/components/algolia.py +0 -0
  238. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/components/algolia.vue +0 -0
  239. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/components/algolia_api.vue +0 -0
  240. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/components/breadcrumbs.py +0 -0
  241. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/components/contact.py +0 -0
  242. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/components/header.py +0 -0
  243. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/components/mailchimp.py +0 -0
  244. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/components/mailchimp.vue +0 -0
  245. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/components/markdown_nav.vue +0 -0
  246. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/components/notebook.py +0 -0
  247. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/components/sidebar.py +0 -0
  248. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/__init__.py +0 -0
  249. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/about/__init__.py +0 -0
  250. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/about/about.md +0 -0
  251. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/apps/__init__.py +0 -0
  252. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/apps/authorization/__init__.py +0 -0
  253. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/apps/authorization/admin.py +0 -0
  254. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/apps/authorization/users.py +0 -0
  255. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/apps/jupyter-dashboard-1.py +0 -0
  256. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/apps/layout-demo.py +0 -0
  257. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/apps/multipage/__init__.py +0 -0
  258. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/apps/multipage/page1.py +0 -0
  259. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/apps/multipage/page2.py +0 -0
  260. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/apps/scatter.py +0 -0
  261. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/apps/scrolling.py +0 -0
  262. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/apps/tutorial-streamlit.py +0 -0
  263. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/careers/__init__.py +0 -0
  264. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/changelog/__init__.py +0 -0
  265. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/contact/__init__.py +0 -0
  266. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/doc_use_download.py +0 -0
  267. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/__init__.py +0 -0
  268. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/__init__.py +0 -0
  269. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/00-overview.md +0 -0
  270. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/10-howto/00-overview.md +0 -0
  271. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/10-howto/10-multipage.md +0 -0
  272. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/10-howto/20-layout.md +0 -0
  273. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/10-howto/30-testing.md +0 -0
  274. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/10-howto/31-debugging.md +0 -0
  275. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/10-howto/40-embed.md +0 -0
  276. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/10-howto/50-ipywidget_libraries.md +0 -0
  277. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/15-reference/00-overview.md +0 -0
  278. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/15-reference/40-static_files.md +0 -0
  279. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/15-reference/41-asset-files.md +0 -0
  280. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/15-reference/60-static-site-generation.md +0 -0
  281. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/15-reference/70-search.md +0 -0
  282. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/15-reference/80-reloading.md +0 -0
  283. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/15-reference/90-notebook-support.md +0 -0
  284. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/15-reference/95-caching.md +0 -0
  285. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/20-understanding/00-introduction.md +0 -0
  286. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/20-understanding/05-ipywidgets.md +0 -0
  287. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/20-understanding/06-ipyvuetify.md +0 -0
  288. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/20-understanding/10-reacton.md +0 -0
  289. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/20-understanding/12-reacton-basics.md +0 -0
  290. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/20-understanding/15-anatomy.md +0 -0
  291. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/20-understanding/17-rules-of-hooks.md +0 -0
  292. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/20-understanding/18-containers.md +0 -0
  293. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/20-understanding/20-solara.md +0 -0
  294. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/20-understanding/40-routing.md +0 -0
  295. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/20-understanding/60-voila.md +0 -0
  296. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/30-enterprise/00-overview.md +0 -0
  297. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/30-enterprise/10-oauth.md +0 -0
  298. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/40-development/00-overview.md +0 -0
  299. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/40-development/01-contribute.md +0 -0
  300. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/advanced/content/40-development/10-setup.md +0 -0
  301. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/__init__.py +0 -0
  302. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/cross_filter/__init__.py +0 -0
  303. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/cross_filter/cross_filter_dataframe.py +0 -0
  304. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/cross_filter/cross_filter_report.py +0 -0
  305. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/cross_filter/cross_filter_select.py +0 -0
  306. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/cross_filter/cross_filter_slider.py +0 -0
  307. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/hooks/__init__.py +0 -0
  308. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/hooks/use_cross_filter.py +0 -0
  309. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/hooks/use_dark_effective.py +0 -0
  310. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/hooks/use_effect.md +0 -0
  311. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/hooks/use_effect.py +0 -0
  312. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/hooks/use_exception.py +0 -0
  313. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/hooks/use_memo.md +0 -0
  314. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/hooks/use_memo.py +0 -0
  315. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/hooks/use_previous.py +0 -0
  316. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/hooks/use_reactive.py +0 -0
  317. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/hooks/use_state.py +0 -0
  318. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/hooks/use_state_or_update.py +0 -0
  319. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/hooks/use_thread.md +0 -0
  320. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/hooks/use_thread.py +0 -0
  321. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/hooks/use_trait_observe.py +0 -0
  322. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/routing/__init__.py +0 -0
  323. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/routing/generate_routes.py +0 -0
  324. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/routing/generate_routes_directory.py +0 -0
  325. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/routing/resolve_path.py +0 -0
  326. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/routing/use_router.py +0 -0
  327. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/utilities/__init__.py +0 -0
  328. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/utilities/component_vue.py +0 -0
  329. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/utilities/computed.py +0 -0
  330. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/utilities/display.py +0 -0
  331. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/utilities/get_kernel_id.py +0 -0
  332. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/utilities/get_session_id.py +0 -0
  333. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/utilities/memoize.py +0 -0
  334. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/utilities/on_kernel_start.py +0 -0
  335. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/utilities/reactive.py +0 -0
  336. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/api/utilities/widget.py +0 -0
  337. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/__init__.py +0 -0
  338. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/advanced/__init__.py +0 -0
  339. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/common.py +0 -0
  340. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/data/__init__.py +0 -0
  341. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/data/dataframe.py +0 -0
  342. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/data/pivot_table.py +0 -0
  343. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/enterprise/__init__.py +0 -0
  344. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/enterprise/avatar.py +0 -0
  345. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/enterprise/avatar_menu.py +0 -0
  346. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/input/__init__.py +0 -0
  347. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/input/button.py +0 -0
  348. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/input/checkbox.py +0 -0
  349. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/input/file_drop.py +0 -0
  350. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/input/input.py +0 -0
  351. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/input/select.py +0 -0
  352. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/input/slider.py +0 -0
  353. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/input/switch.py +0 -0
  354. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/input/togglebuttons.py +0 -0
  355. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/lab/__init__.py +0 -0
  356. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/lab/chat.py +0 -0
  357. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/lab/confirmation_dialog.py +0 -0
  358. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/lab/cookies_headers.py +0 -0
  359. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/lab/input_date.py +0 -0
  360. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/lab/menu.py +0 -0
  361. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/lab/tab.py +0 -0
  362. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/lab/tabs.py +0 -0
  363. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/lab/task.py +0 -0
  364. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/lab/theming.py +0 -0
  365. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/lab/use_task.py +0 -0
  366. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/layout/__init__.py +0 -0
  367. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/layout/app_bar.py +0 -0
  368. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/layout/app_bar_title.py +0 -0
  369. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/layout/app_layout.py +0 -0
  370. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/layout/card.py +0 -0
  371. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/layout/card_actions.py +0 -0
  372. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/layout/column.py +0 -0
  373. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/layout/columns.py +0 -0
  374. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/layout/details.py +0 -0
  375. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/layout/griddraggable.py +0 -0
  376. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/layout/hbox.py +0 -0
  377. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/layout/row.py +0 -0
  378. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/layout/sidebar.py +0 -0
  379. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/layout/vbox.py +0 -0
  380. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/output/__init__.py +0 -0
  381. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/output/file_download.py +0 -0
  382. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/output/image.py +0 -0
  383. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/output/markdown.py +0 -0
  384. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/output/markdown_editor.py +0 -0
  385. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/output/sql_code.py +0 -0
  386. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/output/tooltip.py +0 -0
  387. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/page/__init__.py +0 -0
  388. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/page/title.py +0 -0
  389. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/status/__init__.py +0 -0
  390. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/status/error.py +0 -0
  391. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/status/info.py +0 -0
  392. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/status/progress.py +0 -0
  393. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/status/spinner.py +0 -0
  394. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/status/success.py +0 -0
  395. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/status/warning.py +0 -0
  396. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/viz/__init__.py +0 -0
  397. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/viz/altair.py +0 -0
  398. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/viz/echarts.py +0 -0
  399. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/viz/matplotlib.py +0 -0
  400. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/viz/plotly.py +0 -0
  401. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/components/viz/plotly_express.py +0 -0
  402. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/ai/__init__.py +0 -0
  403. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/ai/tokenizer.py +0 -0
  404. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/basics/__init__.py +0 -0
  405. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/basics/sine.py +0 -0
  406. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/fullscreen/__init__.py +0 -0
  407. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/fullscreen/authorization.py +0 -0
  408. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/fullscreen/layout_demo.py +0 -0
  409. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/fullscreen/multipage.py +0 -0
  410. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/fullscreen/scatter.py +0 -0
  411. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/fullscreen/scrolling.py +0 -0
  412. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/fullscreen/tutorial_streamlit.py +0 -0
  413. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/general/__init__.py +0 -0
  414. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/general/custom_storage.py +0 -0
  415. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/general/deploy_model.py +0 -0
  416. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/general/login_oauth.py +0 -0
  417. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/general/mycard.vue +0 -0
  418. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/general/pokemon_search.py +0 -0
  419. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/general/vue_component.py +0 -0
  420. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/ipycanvas.py +0 -0
  421. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/libraries/__init__.py +0 -0
  422. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/libraries/altair.py +0 -0
  423. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/libraries/bqplot.py +0 -0
  424. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/libraries/ipyleaflet.py +0 -0
  425. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/libraries/ipyleaflet_advanced.py +0 -0
  426. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/utilities/__init__.py +0 -0
  427. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/utilities/calculator.py +0 -0
  428. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/utilities/countdown_timer.py +0 -0
  429. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/utilities/todo.py +0 -0
  430. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/visualization/__init__.py +0 -0
  431. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/visualization/annotator.py +0 -0
  432. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/visualization/linked_views.py +0 -0
  433. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/examples/visualization/plotly.py +0 -0
  434. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/faq/__init__.py +0 -0
  435. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/getting_started/__init__.py +0 -0
  436. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/getting_started/content/01-introduction.md +0 -0
  437. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/getting_started/content/02-installing.md +0 -0
  438. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/00-overview.md +0 -0
  439. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/10_data_science.py +0 -0
  440. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/20-web-app.md +0 -0
  441. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/30-ipywidgets.md +0 -0
  442. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/40-streamlit.md +0 -0
  443. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/50-dash.md +0 -0
  444. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/60-jupyter-dashboard-part1.py +0 -0
  445. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/SF_crime_sample.csv.gz +0 -0
  446. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/getting_started/content/04-tutorials/_data_science.ipynb +0 -0
  447. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/getting_started/content/05-fundamentals/00-overview.md +0 -0
  448. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/getting_started/content/05-fundamentals/10-components.md +0 -0
  449. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/getting_started/content/05-fundamentals/50-state-management.md +0 -0
  450. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/getting_started/content/07-deploying/00-overview.md +0 -0
  451. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/getting_started/content/07-deploying/20-cloud-hosted.md +0 -0
  452. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/getting_started/content/80-what-is-lab.md +0 -0
  453. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/documentation/getting_started/content/90-troubleshoot.md +0 -0
  454. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/docutils.py +0 -0
  455. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/home.vue +0 -0
  456. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/our_team/__init__.py +0 -0
  457. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/pricing/__init__.py +0 -0
  458. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/roadmap/__init__.py +0 -0
  459. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/scale_ipywidgets.py +0 -0
  460. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/showcase/__init__.py +0 -0
  461. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/showcase/domino_code_assist.py +0 -0
  462. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/showcase/planeto_tessa.py +0 -0
  463. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/showcase/solara_dev.py +0 -0
  464. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/showcase/solarathon_2023_team_2.py +0 -0
  465. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/showcase/solarathon_2023_team_4.py +0 -0
  466. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/showcase/solarathon_2023_team_5.py +0 -0
  467. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/showcase/solarathon_2023_team_6.py +0 -0
  468. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/pages/showcase/wanderlust.py +0 -0
  469. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/public/beach.jpeg +0 -0
  470. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/public/logo.svg +0 -0
  471. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/public/social/discord.svg +0 -0
  472. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/public/social/github.svg +0 -0
  473. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/public/social/twitter.svg +0 -0
  474. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/public/success.html +0 -0
  475. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/templates/index.html.j2 +0 -0
  476. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/website/utils.py +0 -0
  477. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/widgets/__init__.py +0 -0
  478. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/widgets/vue/gridlayout.vue +0 -0
  479. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/widgets/vue/html.vue +0 -0
  480. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/widgets/vue/navigator.vue +0 -0
  481. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/widgets/vue/vegalite.vue +0 -0
  482. {solara_ui-1.42.0 → solara_ui-1.43.0}/solara/widgets/widgets.py +0 -0
  483. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/__init__.py +0 -0
  484. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/conftest.py +0 -0
  485. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/docs/docs_howto_event_with_future_test.py +0 -0
  486. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/docs/docs_howto_event_with_polling_test.py +0 -0
  487. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/docs/docs_howto_no_browser_api_find_testing_test.py +0 -0
  488. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/docs/docs_howto_no_browser_testing_test.py +0 -0
  489. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/docs/docs_howto_no_browser_threaded_test.py +0 -0
  490. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/__init__.py +0 -0
  491. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/api_test.py +0 -0
  492. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/app_widget.py +0 -0
  493. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/apps/not-allowed +0 -0
  494. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/apps/public/test.txt +0 -0
  495. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/apps/secure/app.py +0 -0
  496. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/assets/assets1/common.js +0 -0
  497. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/assets/assets1/unique1.js +0 -0
  498. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/assets/assets2/common.js +0 -0
  499. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/assets/assets2/custom.css +0 -0
  500. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/assets/assets2/custom.js +0 -0
  501. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/assets/assets2/unique2.js +0 -0
  502. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/assets_test.py +0 -0
  503. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/async_test.py +0 -0
  504. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/cdn_test.py +0 -0
  505. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/cmdline_test.py +0 -0
  506. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/conftest.py +0 -0
  507. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/create_test.py +0 -0
  508. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/enterprise/__init__.py +0 -0
  509. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/enterprise/oauth_test.py +0 -0
  510. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/error_test.py +0 -0
  511. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/esm_test.py +0 -0
  512. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/file_download_test.py +0 -0
  513. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/flask_test.py +0 -0
  514. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/input_date_test.py +0 -0
  515. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/latex_test.py +0 -0
  516. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/lifecycle_test.py +0 -0
  517. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/markdown_test.py +0 -0
  518. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/menu_test.py +0 -0
  519. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/popout_test.py +0 -0
  520. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/reconnect_test.py +0 -0
  521. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/reload/apps.py +0 -0
  522. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/router_test.py +0 -0
  523. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/server_test.py +0 -0
  524. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/ssg_test.py +0 -0
  525. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/starlette_test.py +0 -0
  526. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/test.vue +0 -0
  527. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/testapp.py +0 -0
  528. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/integration/widget_test.py +0 -0
  529. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/pyinstaller/__init__.py +0 -0
  530. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/pyinstaller/pyinstaller_test.py +0 -0
  531. {solara_ui-1.42.0 → 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
  532. {solara_ui-1.42.0 → 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
  533. {solara_ui-1.42.0 → 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
  534. {solara_ui-1.42.0 → 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
  535. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-win32-ipywidgets-7-changed-reference.png +0 -0
  536. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-win32-ipywidgets-7-reference.png +0 -0
  537. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-win32-ipywidgets-8-changed-reference.png +0 -0
  538. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/ui/snapshots/tests/integration/latex_test.py/test_widget_latex_solara-flask-chromium-win32-ipywidgets-8-reference.png +0 -0
  539. {solara_ui-1.42.0 → 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
  540. {solara_ui-1.42.0 → 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
  541. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_lab-chromium-win32-ipywidgets-7-reference.png +0 -0
  542. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_lab-chromium-win32-ipywidgets-8-reference.png +0 -0
  543. {solara_ui-1.42.0 → 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
  544. {solara_ui-1.42.0 → 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
  545. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_notebook-chromium-win32-ipywidgets-7-reference.png +0 -0
  546. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-jupyter_notebook-chromium-win32-ipywidgets-8-reference.png +0 -0
  547. {solara_ui-1.42.0 → 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
  548. {solara_ui-1.42.0 → 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
  549. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-solara-chromium-win32-ipywidgets-7-reference.png +0 -0
  550. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-solara-chromium-win32-ipywidgets-8-reference.png +0 -0
  551. {solara_ui-1.42.0 → 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
  552. {solara_ui-1.42.0 → 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
  553. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-voila-chromium-win32-ipywidgets-7-reference.png +0 -0
  554. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-flask-voila-chromium-win32-ipywidgets-8-reference.png +0 -0
  555. {solara_ui-1.42.0 → 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
  556. {solara_ui-1.42.0 → 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
  557. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-starlette-solara-chromium-win32-ipywidgets-7-reference.png +0 -0
  558. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_slider_all-starlette-solara-chromium-win32-ipywidgets-8-reference.png +0 -0
  559. {solara_ui-1.42.0 → 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
  560. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-jupyter_lab-chromium-win32-reference.png +0 -0
  561. {solara_ui-1.42.0 → 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
  562. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-jupyter_notebook-chromium-win32-reference.png +0 -0
  563. {solara_ui-1.42.0 → 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
  564. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-solara-chromium-win32-reference.png +0 -0
  565. {solara_ui-1.42.0 → 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
  566. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-flask-voila-chromium-win32-reference.png +0 -0
  567. {solara_ui-1.42.0 → 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
  568. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_solara_button_all-starlette-solara-chromium-win32-reference.png +0 -0
  569. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_widget_button_solara-flask-chromium-linux-ipyvuetify3-reference.png +0 -0
  570. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_widget_button_solara-flask-chromium-linux-reference.png +0 -0
  571. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_widget_button_solara-flask-chromium-win32-reference.png +0 -0
  572. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_widget_button_solara-starlette-chromium-linux-ipyvuetify3-reference.png +0 -0
  573. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_widget_button_solara-starlette-chromium-linux-reference.png +0 -0
  574. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/ui/snapshots/tests/integration/widget_test.py/test_widget_button_solara-starlette-chromium-win32-reference.png +0 -0
  575. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/__init__.py +0 -0
  576. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/applayout_test.py +0 -0
  577. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/cache_test.py +0 -0
  578. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/cdn_helper_test.py +0 -0
  579. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/chat_test.py +0 -0
  580. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/checkbox_test.py +0 -0
  581. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/common.py +0 -0
  582. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/component_frontend_test.py +0 -0
  583. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/component_vue_test.vue +0 -0
  584. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/confirmation_dialog_test.py +0 -0
  585. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/conftest.py +0 -0
  586. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/cross_filter_component_test.py +0 -0
  587. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/cross_filter_test.py +0 -0
  588. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/dataframe_test.py +0 -0
  589. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/datatable_test.py +0 -0
  590. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/display_test.py +0 -0
  591. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/express_test.py +0 -0
  592. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/file_browser_test.py +0 -0
  593. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/file_download_test.py +0 -0
  594. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/hook_use_invalid_test.py +0 -0
  595. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/hooks_test.py +0 -0
  596. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/input_date_test.py +0 -0
  597. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/input_test.py +0 -0
  598. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/lab/__init__.py +0 -0
  599. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/lifecycle_test.py +0 -0
  600. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/matplotlib_test.py +0 -0
  601. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/no_solara_test.py +0 -0
  602. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/output_widget_test.py +0 -0
  603. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/pivottable_test.py +0 -0
  604. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/router_test.py +0 -0
  605. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/select_test.py +0 -0
  606. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/settings_test.py +0 -0
  607. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/shell_test.py +0 -0
  608. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/slider_test.py +0 -0
  609. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/solara_test_apps/__init__.py +0 -0
  610. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/solara_test_apps/food/__init__.py +0 -0
  611. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/solara_test_apps/food/food.py +0 -0
  612. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/solara_test_apps/food/index.py +0 -0
  613. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/solara_test_apps/kernel_start.py +0 -0
  614. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/solara_test_apps/multipage/01-home.py +0 -0
  615. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/solara_test_apps/multipage/02-my_fruit.py +0 -0
  616. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/solara_test_apps/multipage/03-some-markdown.md +0 -0
  617. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/solara_test_apps/multipage/04-a_directory/00-another-markdown.md +0 -0
  618. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/solara_test_apps/multipage/04-a_directory/01-not-an-app.py +0 -0
  619. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/solara_test_apps/multipage/04-a_directory/__init__.py +0 -0
  620. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/solara_test_apps/multipage/05-and-notebooks.ipynb +0 -0
  621. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/solara_test_apps/multipage/06-custom-routes.py +0 -0
  622. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/solara_test_apps/multipage/10-single-file-directory/single-file.md +0 -0
  623. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/solara_test_apps/multipage/99-some_other_python_script.py +0 -0
  624. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/solara_test_apps/multipage/some_other_file.txt +0 -0
  625. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/solara_test_apps/multipage-widgets/00-overview.md +0 -0
  626. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/solara_test_apps/multipage-widgets/01-views.py +0 -0
  627. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/solara_test_apps/multipage-widgets/02-likes.py +0 -0
  628. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/solara_test_apps/multipage-widgets/03-volume.py +0 -0
  629. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/solara_test_apps/multipage-widgets/04-color.ipynb +0 -0
  630. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/solara_test_apps/notebookapp_component.ipynb +0 -0
  631. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/solara_test_apps/notebookapp_element.ipynb +0 -0
  632. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/solara_test_apps/notebookapp_widget.ipynb +0 -0
  633. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/solara_test_apps/single_file.py +0 -0
  634. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/solara_test_apps/single_file_multiple_routes.py +0 -0
  635. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/solara_test_apps/single_file_routes.py +0 -0
  636. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/switch_test.py +0 -0
  637. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/tabs_test.py +0 -0
  638. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/telemetry_tests.py +0 -0
  639. {solara_ui-1.42.0 → solara_ui-1.43.0}/tests/unit/toestand_computed_reload.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: solara-ui
3
- Version: 1.42.0
3
+ Version: 1.43.0
4
4
  Dynamic: Summary
5
5
  Project-URL: Home, https://www.github.com/widgetti/solara
6
6
  Project-URL: Documentation, https://solara.dev
@@ -31,7 +31,7 @@ Requires-Dist: humanize
31
31
  Requires-Dist: ipyvue>=1.9.0
32
32
  Requires-Dist: ipyvuetify>=1.6.10
33
33
  Requires-Dist: ipywidgets>=7.7
34
- Requires-Dist: reacton>=1.7.1
34
+ Requires-Dist: reacton>=1.9
35
35
  Requires-Dist: requests
36
36
  Provides-Extra: all
37
37
  Requires-Dist: cachetools; extra == 'all'
@@ -14,7 +14,7 @@ packages = [
14
14
  { include = "solara" }
15
15
  ]
16
16
  dependencies = [
17
- "reacton>=1.7.1",
17
+ "reacton>=1.9",
18
18
  "ipywidgets>=7.7",
19
19
  "ipyvuetify>=1.6.10",
20
20
  "ipyvue>=1.9.0",
@@ -85,6 +85,7 @@ extra = [
85
85
  fix = false
86
86
  line-length = 160
87
87
  lint.ignore = ["E402"]
88
+ target-version = "py38"
88
89
 
89
90
  [tool.black]
90
91
  line-length = 160
@@ -1,6 +1,6 @@
1
1
  """Build webapps using IPywidgets"""
2
2
 
3
- __version__ = "1.42.0"
3
+ __version__ = "1.43.0"
4
4
  github_url = "https://github.com/widgetti/solara"
5
5
  git_branch = "master"
6
6
 
@@ -21,6 +21,8 @@ import solara.server.threaded
21
21
 
22
22
  from .server import telemetry
23
23
 
24
+ print_mutex = threading.Lock()
25
+
24
26
  try:
25
27
  from solara_enterprise.ssg import ssg_crawl
26
28
  except ImportError:
@@ -75,13 +77,15 @@ def _check_version():
75
77
  import requests
76
78
 
77
79
  try:
78
- response = requests.get("https://pypi.org/pypi/solara/json")
80
+ response = requests.get("https://pypi.org/pypi/solara/json", timeout=0.5)
79
81
  latest_version = response.json()["info"]["version"]
80
82
  except: # noqa: E722
83
+ # in case of a firewall, or timeout, we just abort
81
84
  return
82
85
  if latest_version != solara.__version__:
83
- print(f"New version of Solara available: {latest_version}. You have {solara.__version__}. Please upgrade using:") # noqa: T201
84
- print(f'\t$ pip install "solara=={latest_version}"') # noqa: T201
86
+ with print_mutex:
87
+ print(f"New version of Solara available: {latest_version}. You have {solara.__version__}. Please upgrade using:") # noqa: T201
88
+ print(f'\t$ pip install "solara=={latest_version}"') # noqa: T201
85
89
 
86
90
 
87
91
  def find_all_packages_paths():
@@ -306,7 +310,7 @@ def run(
306
310
  print("solara: --reload is deprecated, use --auto-restart/-a instead", file=sys.stderr) # noqa: T201
307
311
  auto_restart = reload
308
312
  if check_version:
309
- _check_version()
313
+ threading.Thread(target=_check_version, daemon=True).run()
310
314
 
311
315
  # uvicorn calls it reload, we call it auto restart
312
316
  reload = auto_restart
@@ -390,7 +394,8 @@ def run(
390
394
  if open and not qt:
391
395
  threading.Thread(target=open_browser, daemon=True).start()
392
396
 
393
- rich.print(f"Solara server is starting at {url}")
397
+ with print_mutex:
398
+ rich.print(f"Solara server is starting at {url}")
394
399
 
395
400
  if log_level is not None:
396
401
  LOGGING_CONFIG["loggers"]["solara"]["level"] = log_level.upper()
@@ -11,12 +11,16 @@ class _PublicValueNotSet:
11
11
  pass
12
12
 
13
13
 
14
+ class _SetValueNotSet:
15
+ pass
16
+
17
+
14
18
  @dataclasses.dataclass
15
19
  class StoreValue(Generic[S]):
16
20
  private: S # the internal private value, should never be mutated
17
21
  public: Union[S, _PublicValueNotSet] # this is the value that is exposed in .get(), it is a deep copy of private
18
22
  get_traceback: Optional[inspect.Traceback]
19
- set_value: Optional[S] # the value that was set using .set(..), we deepcopy this to set private
23
+ set_value: Union[S, _SetValueNotSet] # the value that was set using .set(..), we deepcopy this to set private
20
24
  set_traceback: Optional[inspect.Traceback]
21
25
 
22
26
 
@@ -79,7 +83,7 @@ class MutateDetectorStore(ValueBase[S]):
79
83
  code = "<No code context available>"
80
84
  msg += f"The last value was read in the following code:\n" f"{tb.filename}:{tb.lineno}\n" f"{code}"
81
85
  raise ValueError(msg)
82
- elif store_value.set_value is not None and not self.equals(store_value.set_value, store_value.private):
86
+ elif not isinstance(store_value.set_value, _SetValueNotSet) and not self.equals(store_value.set_value, store_value.private):
83
87
  tb = store_value.set_traceback
84
88
  msg = f"""Reactive variable was set with a value of {store_value.private!r}, but was later mutated mutated to {store_value.set_value!r}.
85
89
 
@@ -161,11 +165,11 @@ reactive_df = solara.reactive(df, equals=solara.util.equals_pickle)
161
165
  def subscribe(self, listener: Callable[[S], None], scope: Optional[ContextManager] = None):
162
166
  def listener_wrapper(new: StoreValue[S], previous: StoreValue[S]):
163
167
  self._ensure_public_exists()
164
- assert new.public is not None
165
- assert previous.public is not None
166
- previous_value = previous.set_value if previous.set_value is not None else previous.private
168
+ assert not isinstance(new.public, _PublicValueNotSet)
169
+ assert not isinstance(previous.public, _PublicValueNotSet)
170
+ previous_value = previous.set_value if not isinstance(previous.set_value, _SetValueNotSet) else previous.private
167
171
  new_value = new.set_value
168
- assert new_value is not None
172
+ assert not isinstance(new_value, _SetValueNotSet)
169
173
  if not self.equals(new_value, previous_value):
170
174
  listener(new_value)
171
175
 
@@ -174,11 +178,11 @@ reactive_df = solara.reactive(df, equals=solara.util.equals_pickle)
174
178
  def subscribe_change(self, listener: Callable[[S, S], None], scope: Optional[ContextManager] = None):
175
179
  def listener_wrapper(new: StoreValue[S], previous: StoreValue[S]):
176
180
  self._ensure_public_exists()
177
- assert new.public is not None
178
- assert previous.public is not None
179
- previous_value = previous.set_value if previous.set_value is not None else previous.private
181
+ assert not isinstance(new.public, _PublicValueNotSet)
182
+ assert not isinstance(previous.public, _PublicValueNotSet)
183
+ previous_value = previous.set_value if not isinstance(previous.set_value, _SetValueNotSet) else previous.private
180
184
  new_value = new.set_value
181
- assert new_value is not None
185
+ assert not isinstance(new_value, _SetValueNotSet)
182
186
  if not self.equals(new_value, previous_value):
183
187
  listener(new_value, previous_value)
184
188
 
@@ -57,4 +57,21 @@ from .progress import ProgressLinear # noqa: F401 F403
57
57
  from .component_vue import _component_vue, component_vue # noqa: F401 F403
58
58
  import reacton.core
59
59
 
60
- reacton.core._default_container = Column # noqa: F405
60
+ try:
61
+ from reacton import Fragment as Fragment # type: ignore
62
+ except ImportError:
63
+ pass
64
+
65
+ import logging
66
+ from ..settings import main
67
+
68
+ _container = None
69
+
70
+ if main.default_container in globals():
71
+ _container = globals()[main.default_container]
72
+ else:
73
+ logger = logging.getLogger("solara.components")
74
+ logger.warning(f"Default container {main.default_container} not found in solara.components. Defaulting to Column.")
75
+
76
+ # TODO: When Solara 2.0 releases Column should be replaced with Fragment
77
+ reacton.core._default_container = _container or Column # noqa: F405
@@ -10,14 +10,14 @@ import solara
10
10
  import solara.hooks.dataframe
11
11
  import solara.lab
12
12
  import traitlets
13
- from solara.lab.hooks.dataframe import use_df_column_names
13
+ from solara.lab.hooks.dataframe import use_df_column_names, df_row_names
14
14
  from solara.lab.utils.dataframe import df_len, df_records, df_slice
15
15
 
16
16
  from .. import CellAction, ColumnAction
17
17
 
18
18
 
19
19
  def _ensure_dict(d):
20
- if dataclasses.is_dataclass(d):
20
+ if dataclasses.is_dataclass(d) and not isinstance(d, type): # is_dataclass also returns True for dataclass type, rather than instance
21
21
  return dataclasses.asdict(d)
22
22
  return d
23
23
 
@@ -100,12 +100,12 @@ def DataTable(
100
100
  i2 = min(total_length, (page + 1) * items_per_page)
101
101
 
102
102
  columns = use_df_column_names(df)
103
-
103
+ rows = df_row_names(df)
104
104
  items = []
105
105
  dfs = df_slice(df, i1, i2)
106
106
  records = df_records(dfs)
107
107
  for i in range(i2 - i1):
108
- item = {"__row__": i + i1} # special key for the row number
108
+ item = {"__row__": format(dfs, columns, i + 1, rows[i + i1])} # special key for the row number
109
109
  for column in columns:
110
110
  item[column] = format(dfs, column, i + i1, records[i][column])
111
111
  items.append(item)
@@ -373,6 +373,10 @@ def _use_input_type(
373
373
  error_message = str(e.args[0])
374
374
 
375
375
  def sync_back_input_value():
376
+ # Make sure we update string_value when the effect is rerun,
377
+ # Since the parsing & stringigying functions might have changed
378
+ set_string_value(stringify(reactive_value.value) if reactive_value.value is not None else None)
379
+
376
380
  def on_external_value_change(new_value: Optional[T]):
377
381
  new_string_value = stringify(new_value)
378
382
  try:
@@ -386,7 +390,7 @@ def _use_input_type(
386
390
 
387
391
  return reactive_value.subscribe(on_external_value_change)
388
392
 
389
- solara.use_effect(sync_back_input_value, [reactive_value])
393
+ solara.use_effect(sync_back_input_value, [reactive_value, parse, stringify])
390
394
 
391
395
  return string_value, error_message, set_string_value
392
396
 
@@ -1,11 +1,10 @@
1
- import functools
2
1
  import hashlib
3
2
  import html
4
3
  import logging
5
4
  import textwrap
6
5
  import traceback
7
6
  import warnings
8
- from typing import Any, Dict, List, Optional, Union, cast
7
+ from typing import Any, Callable, Dict, List, Optional, Union, cast
9
8
  import typing
10
9
 
11
10
  import ipyvuetify as v
@@ -18,6 +17,7 @@ try:
18
17
  has_pymdownx = True
19
18
  except ModuleNotFoundError:
20
19
  has_pymdownx = False
20
+ import reacton.core
21
21
 
22
22
  import solara
23
23
  import solara.components.applayout
@@ -55,7 +55,7 @@ def ExceptionGuard(children=[]):
55
55
  solara.Column(children=children)
56
56
 
57
57
 
58
- def _run_solara(code):
58
+ def _run_solara(code, cleanups):
59
59
  ast = compile(code, "markdown", "exec")
60
60
  local_scope: Dict[Any, Any] = {}
61
61
  exec(ast, local_scope)
@@ -68,6 +68,13 @@ def _run_solara(code):
68
68
  else:
69
69
  raise NameError("No Page or app defined")
70
70
  box = v.Html(tag="div")
71
+
72
+ rc: reacton.core.RenderContext
73
+
74
+ def cleanup():
75
+ rc.close()
76
+
77
+ cleanups.append(cleanup)
71
78
  box, rc = solara.render(cast(solara.Element, app), container=box) # type: ignore
72
79
  widget_id = box._model_id
73
80
  return (
@@ -236,9 +243,8 @@ module.exports = {
236
243
  return template
237
244
 
238
245
 
239
- def _highlight(src, language, unsafe_solara_execute, *args, **kwargs):
246
+ def _highlight(src, language, class_name=None, options=None, md=None, unsafe_solara_execute=False, cleanups=None, **kwargs):
240
247
  """Highlight a block of code"""
241
-
242
248
  if not has_pygments:
243
249
  warnings.warn("Pygments is not installed, code highlighting will not work, use pip install pygments to install it.")
244
250
  src_safe = html.escape(src)
@@ -255,7 +261,7 @@ def _highlight(src, language, unsafe_solara_execute, *args, **kwargs):
255
261
 
256
262
  if run_src_with_solara:
257
263
  if unsafe_solara_execute:
258
- html_widget = _run_solara(src)
264
+ html_widget = _run_solara(src, cleanups)
259
265
  return src_html + html_widget
260
266
  else:
261
267
  return src_html + html_no_execute_enabled
@@ -263,8 +269,17 @@ def _highlight(src, language, unsafe_solara_execute, *args, **kwargs):
263
269
  return src_html
264
270
 
265
271
 
266
- def formatter(unsafe_solara_execute: bool):
267
- return functools.partial(_highlight, unsafe_solara_execute=unsafe_solara_execute)
272
+ def formatter(unsafe_solara_execute: bool, cleanups: List[Callable[[], None]]):
273
+ def wrapper(*args, **kwargs):
274
+ try:
275
+ kwargs["unsafe_solara_execute"] = unsafe_solara_execute
276
+ kwargs["cleanups"] = cleanups
277
+ return _highlight(*args, **kwargs)
278
+ except Exception as e:
279
+ logger.exception("Error while highlighting code")
280
+ raise e
281
+
282
+ return wrapper
268
283
 
269
284
 
270
285
  @solara.component
@@ -276,8 +291,10 @@ def MarkdownIt(md_text: str, highlight: List[int] = [], unsafe_solara_execute: b
276
291
  from mdit_py_plugins.footnote import footnote_plugin # noqa: F401
277
292
  from mdit_py_plugins.front_matter import front_matter_plugin # noqa: F401
278
293
 
294
+ cleanups = solara.use_ref(cast(List[Callable[[], None]], []))
295
+
279
296
  def highlight_code(code, name, attrs):
280
- return _highlight(code, name, unsafe_solara_execute, attrs)
297
+ return _highlight(cleanups.current, code, name, unsafe_solara_execute, attrs)
281
298
 
282
299
  md = MarkdownItMod(
283
300
  "js-default",
@@ -290,6 +307,15 @@ def MarkdownIt(md_text: str, highlight: List[int] = [], unsafe_solara_execute: b
290
307
  md = md.use(container.container_plugin, name="note")
291
308
  html = md.render(md_text)
292
309
  hash = hashlib.sha256((html + str(unsafe_solara_execute) + repr(highlight)).encode("utf-8")).hexdigest()
310
+
311
+ def cleanup_wrapper():
312
+ def cleanup():
313
+ for cleanup in cleanups.current:
314
+ cleanup()
315
+
316
+ return cleanup
317
+
318
+ solara.use_effect(cleanup_wrapper)
293
319
  return v.VuetifyTemplate.element(template=_markdown_template(html)).key(hash)
294
320
 
295
321
 
@@ -349,6 +375,7 @@ def Markdown(md_text: str, unsafe_solara_execute=False, style: Union[str, Dict,
349
375
 
350
376
  md_text = textwrap.dedent(md_text)
351
377
  style = solara.util._flatten_style(style)
378
+ cleanups = solara.use_ref(cast(List[Callable[[], None]], []))
352
379
 
353
380
  def make_markdown_object():
354
381
  if md_parser is not None:
@@ -377,7 +404,7 @@ def Markdown(md_text: str, unsafe_solara_execute=False, style: Union[str, Dict,
377
404
  {
378
405
  "name": "solara",
379
406
  "class": "",
380
- "format": formatter(unsafe_solara_execute),
407
+ "format": formatter(unsafe_solara_execute, cleanups=cleanups.current),
381
408
  },
382
409
  ],
383
410
  },
@@ -399,6 +426,15 @@ def Markdown(md_text: str, unsafe_solara_execute=False, style: Union[str, Dict,
399
426
  assert md_self is not None
400
427
  md_parser = md_self
401
428
  html = md_parser.convert(md_text)
429
+
430
+ def cleanup_wrapper():
431
+ def cleanup():
432
+ for cleanup in cleanups.current:
433
+ cleanup()
434
+
435
+ return cleanup
436
+
437
+ solara.use_effect(cleanup_wrapper, [])
402
438
  # if we update the template value, the whole vue tree will rerender (ipvue/ipyvuetify issue)
403
439
  # however, using the hash we simply generate a new widget each time
404
440
  hash = hashlib.sha256((html + str(unsafe_solara_execute)).encode("utf-8")).hexdigest()
@@ -1,6 +1,7 @@
1
1
  from .chat import ChatBox, ChatInput, ChatMessage # noqa: F401
2
2
  from .confirmation_dialog import ConfirmationDialog # noqa: F401
3
3
  from .input_date import InputDate, InputDateRange # noqa: F401
4
+ from .input_time import InputTime as InputTime
4
5
  from .menu import ClickMenu, ContextMenu, Menu # noqa: F401 F403
5
6
  from .tabs import Tab, Tabs # noqa: F401
6
7
  from .theming import ThemeToggle, theme, use_dark_effective # noqa: F401
@@ -43,7 +43,7 @@ def ChatBox(
43
43
 
44
44
  @solara.component
45
45
  def ChatInput(
46
- send_callback: Optional[Callable] = None,
46
+ send_callback: Optional[Callable[[str], None]] = None,
47
47
  disabled: bool = False,
48
48
  style: Optional[Union[str, Dict[str, str]]] = None,
49
49
  input_text_style: Optional[Union[str, Dict[str, str]]] = None,
@@ -55,7 +55,7 @@ def ChatInput(
55
55
 
56
56
  # Arguments
57
57
 
58
- * `send_callback`: A callback function for when the user presses enter or clicks the send button.
58
+ * `send_callback`: A callback function for when the user presses enter or clicks the send button taking the message as an argument.
59
59
  * `disabled`: Whether the input should be disabled. Useful for disabling sending further messages while a chatbot is replying,
60
60
  among other things.
61
61
  * `style`: CSS styles to apply to the `solara.Row` containing the input field and submit button. Either a string or a dictionary.
@@ -98,7 +98,7 @@ def ChatInput(
98
98
 
99
99
  @solara.component
100
100
  def ChatMessage(
101
- children: Union[List[solara.Element], str],
101
+ children: Union[List[solara.Element], str] = [],
102
102
  user: bool = False,
103
103
  avatar: Union[solara.Element, str, Literal[False], None] = None,
104
104
  name: Optional[str] = None,
@@ -0,0 +1,133 @@
1
+ import datetime as dt
2
+ from typing import Callable, Dict, List, Optional, Union
3
+
4
+ import solara
5
+ import solara.lab
6
+ from solara.lab.components.input_date import use_close_menu
7
+ from solara.components.input import _use_input_type
8
+
9
+
10
+ @solara.component
11
+ def InputTime(
12
+ value: Union[solara.Reactive[Optional[dt.time]], Optional[dt.time]],
13
+ on_value: Optional[Callable[[Optional[dt.time]], None]] = None,
14
+ label: str = "Pick a time",
15
+ children: List[solara.Element] = [],
16
+ open_value: Union[solara.Reactive[bool], bool] = False,
17
+ on_open_value: Optional[Callable[[bool], None]] = None,
18
+ optional: bool = False,
19
+ twelve_hour_clock: bool = False,
20
+ use_seconds: bool = False,
21
+ allowed_minutes: Optional[List[int]] = None,
22
+ style: Optional[Union[str, Dict[str, str]]] = None,
23
+ classes: Optional[List[str]] = None,
24
+ ):
25
+ """
26
+ Show a textfield, which when clicked, opens a timepicker. The input time should be of type `datetime.time`.
27
+
28
+ ## Basic Example
29
+
30
+ ```solara {pycafe-link}
31
+ import solara
32
+ import solara.lab
33
+ import datetime as dt
34
+
35
+
36
+ @solara.component
37
+ def Page():
38
+ time = solara.use_reactive(dt.time(12, 0))
39
+
40
+ solara.lab.InputTime(time, allowed_minutes=[0, 15, 30, 45])
41
+ solara.Text(str(time.value))
42
+ ```
43
+
44
+ ## Arguments
45
+
46
+ * value: Reactive variable of type `datetime.time`, or `None`. This time is selected the first time the component is rendered.
47
+ * on_value: a callback function for when value changes. The callback function receives the new value as an argument.
48
+ * label: Text used to label the text field that triggers the timepicker.
49
+ * children: List of Elements to be rendered under the timepicker. If empty, a close button is rendered.
50
+ * open_value: Controls and communicates the state of the timepicker. If True, the timepicker is open. If False, the timepicker is closed.
51
+ Intended to be used in conjunction with a custom set of controls to close the timepicker.
52
+ * on_open_value: a callback function for when open_value changes. Also receives the new value as an argument.
53
+ * optional: Determines whether to show an error when value is `None`. If `True`, no error is shown.
54
+ * twelve_hour_clock: If `True`, the timepicker will display in 12-hour format. If `False`, the timepicker will display in 24-hour format.
55
+ * use_seconds: If `True`, the timepicker will allow input of seconds.
56
+ * allowed_minutes: List of allowed minutes for the timepicker. Restricts the input to specific minute intervals.
57
+ * style: CSS style to apply to the text field. Either a string or a dictionary of CSS properties (i.e. `{"property": "value"}`).
58
+ * classes: List of CSS classes to apply to the text field.
59
+ """
60
+ time_format_internal = f"%H:%M{':%S' if use_seconds else ''}"
61
+ time_format_display = f"%H:%M{':%S' if use_seconds else ''}"
62
+ if twelve_hour_clock:
63
+ time_format_display = f"%I:%M{':%S' if use_seconds else ''} %p"
64
+ value_reactive = solara.use_reactive(value, on_value) # type: ignore
65
+ del value, on_value
66
+ timepicker_is_open = solara.use_reactive(open_value, on_open_value) # type: ignore
67
+ del open_value, on_open_value
68
+
69
+ def set_time_typed_cast(value: Optional[str]):
70
+ if value:
71
+ try:
72
+ time_value = dt.datetime.strptime(value, time_format_display).time()
73
+ return time_value
74
+ except ValueError:
75
+ raise ValueError(f"Time {value} does not match format {time_format_display.replace('%', '')}")
76
+ elif optional:
77
+ return None
78
+ else:
79
+ raise ValueError("Time cannot be empty")
80
+
81
+ def time_to_str(time: Optional[dt.time]) -> str:
82
+ if time is not None:
83
+ return time.strftime(time_format_display)
84
+ return ""
85
+
86
+ def set_time_cast(new_value: Optional[str]):
87
+ if new_value:
88
+ time_value = dt.datetime.strptime(new_value, time_format_internal).time()
89
+ value_reactive.value = time_value
90
+
91
+ def standard_strfy(time: Optional[dt.time]):
92
+ if time is None:
93
+ return None
94
+ else:
95
+ return time.strftime(time_format_internal)
96
+
97
+ time_standard_str = standard_strfy(value_reactive.value)
98
+
99
+ style_flat = solara.util._flatten_style(style)
100
+
101
+ internal_value, error_message, set_value_cast = _use_input_type(value_reactive, set_time_typed_cast, time_to_str)
102
+
103
+ if error_message:
104
+ label += f" ({error_message})"
105
+ input = solara.v.TextField(
106
+ label=label,
107
+ v_model=internal_value,
108
+ on_v_model=set_value_cast,
109
+ append_icon="mdi-clock",
110
+ error=bool(error_message),
111
+ style_="min-width: 290px;" + style_flat,
112
+ class_=", ".join(classes) if classes else "",
113
+ )
114
+
115
+ use_close_menu(input, timepicker_is_open)
116
+
117
+ with solara.lab.Menu(
118
+ activator=input,
119
+ close_on_content_click=False,
120
+ open_value=timepicker_is_open,
121
+ use_activator_width=False,
122
+ ):
123
+ with solara.v.TimePicker(
124
+ ampm_in_title=twelve_hour_clock,
125
+ v_model=time_standard_str,
126
+ on_v_model=set_time_cast,
127
+ format="24hr" if not twelve_hour_clock else "ampm",
128
+ allowed_minutes=allowed_minutes,
129
+ use_seconds=use_seconds,
130
+ style_="width: 100%;",
131
+ ):
132
+ if len(children) > 0:
133
+ solara.display(*children)
@@ -1 +1,2 @@
1
1
  from ..utils.dataframe import df_columns as use_df_column_names # noqa: F401
2
+ from ..utils.dataframe import df_row_names as df_row_names
@@ -1,4 +1,4 @@
1
- from typing import List
1
+ from typing import List, Union
2
2
 
3
3
 
4
4
  def get_pandas_major():
@@ -28,6 +28,16 @@ def df_columns(df) -> List[str]:
28
28
  raise TypeError(f"{type(df)} not supported")
29
29
 
30
30
 
31
+ def df_row_names(df) -> List[Union[int, str]]:
32
+ """Return a list of row names from a dataframe."""
33
+ if df_type(df) == "vaex" or df_type(df) == "polars":
34
+ return list(range(df_len(df)))
35
+ elif df_type(df) == "pandas":
36
+ return df.index.tolist()
37
+ else:
38
+ raise TypeError(f"{type(df)} not supported")
39
+
40
+
31
41
  def df_slice(df, start: int, stop: int):
32
42
  """Return a subset of rows from a dataframe."""
33
43
  if df_type(df) == "pandas":