solara 1.6.1__tar.gz → 1.7.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 (430) hide show
  1. {solara-1.6.1 → solara-1.7.0}/.bumpversion.cfg +1 -1
  2. {solara-1.6.1 → solara-1.7.0}/PKG-INFO +2 -2
  3. {solara-1.6.1 → solara-1.7.0}/packages/assets/solara_assets/__init__.py +1 -1
  4. {solara-1.6.1 → solara-1.7.0}/packages/solara-enterprise/pyproject.toml +1 -1
  5. {solara-1.6.1 → solara-1.7.0}/packages/solara-enterprise/solara_enterprise/__init__.py +1 -1
  6. {solara-1.6.1 → solara-1.7.0}/pyproject.toml +1 -1
  7. {solara-1.6.1 → solara-1.7.0}/release.md +3 -3
  8. {solara-1.6.1 → solara-1.7.0}/solara/__init__.py +2 -1
  9. {solara-1.6.1 → solara-1.7.0}/solara/autorouting.py +2 -1
  10. {solara-1.6.1 → solara-1.7.0}/solara/components/applayout.py +1 -1
  11. solara-1.7.0/solara/components/datatable.py +220 -0
  12. solara-1.7.0/solara/components/datatable.vue +175 -0
  13. {solara-1.6.1 → solara-1.7.0}/solara/server/assets/style.css +5 -0
  14. {solara-1.6.1 → solara-1.7.0}/solara/server/static/solara_bootstrap.py +1 -1
  15. {solara-1.6.1 → solara-1.7.0}/solara/website/assets/custom.css +0 -1
  16. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/dataframe.py +13 -21
  17. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/warning.py +7 -0
  18. solara-1.7.0/solara/widgets/widgets.py +57 -0
  19. {solara-1.6.1 → solara-1.7.0}/tests/integration/api_test.py +18 -0
  20. solara-1.6.1/solara/components/datatable.py +0 -89
  21. solara-1.6.1/solara/widgets/vue/datatable.vue +0 -173
  22. solara-1.6.1/solara/widgets/widgets.py +0 -114
  23. {solara-1.6.1 → solara-1.7.0}/.flake8 +0 -0
  24. {solara-1.6.1 → solara-1.7.0}/.github/workflows/codequality.yaml +0 -0
  25. {solara-1.6.1 → solara-1.7.0}/.github/workflows/installation.yml +0 -0
  26. {solara-1.6.1 → solara-1.7.0}/.github/workflows/integration.yml +0 -0
  27. {solara-1.6.1 → solara-1.7.0}/.github/workflows/javascript.yaml +0 -0
  28. {solara-1.6.1 → solara-1.7.0}/.github/workflows/release.yaml +0 -0
  29. {solara-1.6.1 → solara-1.7.0}/.github/workflows/release_solara_vuetify_app.yaml +0 -0
  30. {solara-1.6.1 → solara-1.7.0}/.github/workflows/unittest.yml +0 -0
  31. {solara-1.6.1 → solara-1.7.0}/.gitignore +0 -0
  32. {solara-1.6.1 → solara-1.7.0}/.pre-commit-config.yaml +0 -0
  33. {solara-1.6.1 → solara-1.7.0}/LICENSE +0 -0
  34. {solara-1.6.1 → solara-1.7.0}/Procfile +0 -0
  35. {solara-1.6.1 → solara-1.7.0}/README.md +0 -0
  36. {solara-1.6.1 → solara-1.7.0}/mypy.ini +0 -0
  37. {solara-1.6.1 → solara-1.7.0}/packages/assets/.gitignore +0 -0
  38. {solara-1.6.1 → solara-1.7.0}/packages/assets/LICENSE +0 -0
  39. {solara-1.6.1 → solara-1.7.0}/packages/assets/RELEASE.md +0 -0
  40. {solara-1.6.1 → solara-1.7.0}/packages/assets/download_cdn_test.py +0 -0
  41. {solara-1.6.1 → solara-1.7.0}/packages/assets/hatch_build.py +0 -0
  42. {solara-1.6.1 → solara-1.7.0}/packages/assets/pyproject.toml +0 -0
  43. {solara-1.6.1 → solara-1.7.0}/packages/solara-enterprise/LICENSE +0 -0
  44. {solara-1.6.1 → solara-1.7.0}/packages/solara-enterprise/RELEASE.md +0 -0
  45. {solara-1.6.1 → solara-1.7.0}/packages/solara-enterprise/solara_enterprise/cache/__init__.py +0 -0
  46. {solara-1.6.1 → solara-1.7.0}/packages/solara-enterprise/solara_enterprise/cache/base.py +0 -0
  47. {solara-1.6.1 → solara-1.7.0}/packages/solara-enterprise/solara_enterprise/cache/disk.py +0 -0
  48. {solara-1.6.1 → solara-1.7.0}/packages/solara-enterprise/solara_enterprise/cache/memory_size.py +0 -0
  49. {solara-1.6.1 → solara-1.7.0}/packages/solara-enterprise/solara_enterprise/cache/multi_level.py +0 -0
  50. {solara-1.6.1 → solara-1.7.0}/packages/solara-enterprise/solara_enterprise/cache/redis.py +0 -0
  51. {solara-1.6.1 → solara-1.7.0}/packages/solara-enterprise/solara_enterprise/license.py +0 -0
  52. {solara-1.6.1 → solara-1.7.0}/packages/solara-enterprise/solara_enterprise/search/__init__.py +0 -0
  53. {solara-1.6.1 → solara-1.7.0}/packages/solara-enterprise/solara_enterprise/search/index.py +0 -0
  54. {solara-1.6.1 → solara-1.7.0}/packages/solara-enterprise/solara_enterprise/search/search.py +0 -0
  55. {solara-1.6.1 → solara-1.7.0}/packages/solara-enterprise/solara_enterprise/search/search.vue +0 -0
  56. {solara-1.6.1 → solara-1.7.0}/packages/solara-enterprise/solara_enterprise/ssg.py +0 -0
  57. {solara-1.6.1 → solara-1.7.0}/packages/solara-milkdown/package-lock.json +0 -0
  58. {solara-1.6.1 → solara-1.7.0}/packages/solara-milkdown/package.json +0 -0
  59. {solara-1.6.1 → solara-1.7.0}/packages/solara-milkdown/src/index.js +0 -0
  60. {solara-1.6.1 → solara-1.7.0}/packages/solara-milkdown/webpack.config.js +0 -0
  61. {solara-1.6.1 → solara-1.7.0}/packages/solara-vuetify-app/.bumpversion.cfg +0 -0
  62. {solara-1.6.1 → solara-1.7.0}/packages/solara-vuetify-app/README.md +0 -0
  63. {solara-1.6.1 → solara-1.7.0}/packages/solara-vuetify-app/package-lock.json +0 -0
  64. {solara-1.6.1 → solara-1.7.0}/packages/solara-vuetify-app/package.json +0 -0
  65. {solara-1.6.1 → solara-1.7.0}/packages/solara-vuetify-app/release.sh +0 -0
  66. {solara-1.6.1 → solara-1.7.0}/packages/solara-vuetify-app/src/solara-vuetify-app.js +0 -0
  67. {solara-1.6.1 → solara-1.7.0}/packages/solara-vuetify-app/src/solara.js +0 -0
  68. {solara-1.6.1 → solara-1.7.0}/packages/solara-vuetify-app/webpack.config.js +0 -0
  69. {solara-1.6.1 → solara-1.7.0}/packages/solara-widget-manager/LICENSE.voila.txt +0 -0
  70. {solara-1.6.1 → solara-1.7.0}/packages/solara-widget-manager/package-lock.json +0 -0
  71. {solara-1.6.1 → solara-1.7.0}/packages/solara-widget-manager/package.json +0 -0
  72. {solara-1.6.1 → solara-1.7.0}/packages/solara-widget-manager/src/index.ts +0 -0
  73. {solara-1.6.1 → solara-1.7.0}/packages/solara-widget-manager/src/kernel.ts +0 -0
  74. {solara-1.6.1 → solara-1.7.0}/packages/solara-widget-manager/src/loader.ts +0 -0
  75. {solara-1.6.1 → solara-1.7.0}/packages/solara-widget-manager/src/manager.ts +0 -0
  76. {solara-1.6.1 → solara-1.7.0}/packages/solara-widget-manager/src/mathjax.ts +0 -0
  77. {solara-1.6.1 → solara-1.7.0}/packages/solara-widget-manager/src/rendermime.ts +0 -0
  78. {solara-1.6.1 → solara-1.7.0}/packages/solara-widget-manager/src/typings.d.ts +0 -0
  79. {solara-1.6.1 → solara-1.7.0}/packages/solara-widget-manager/style/index.css +0 -0
  80. {solara-1.6.1 → solara-1.7.0}/packages/solara-widget-manager/tsconfig.json +0 -0
  81. {solara-1.6.1 → solara-1.7.0}/packages/solara-widget-manager/webpack.config.js +0 -0
  82. {solara-1.6.1 → solara-1.7.0}/prefix/etc/jupyter/jupyter_notebook_config.d/solara.json +0 -0
  83. {solara-1.6.1 → solara-1.7.0}/prefix/etc/jupyter/jupyter_server_config.d/solara.json +0 -0
  84. {solara-1.6.1 → solara-1.7.0}/release.sh +0 -0
  85. {solara-1.6.1 → solara-1.7.0}/requirements.txt +0 -0
  86. {solara-1.6.1 → solara-1.7.0}/runtime.txt +0 -0
  87. {solara-1.6.1 → solara-1.7.0}/solara/__main__.py +0 -0
  88. {solara-1.6.1 → solara-1.7.0}/solara/alias.py +0 -0
  89. {solara-1.6.1 → solara-1.7.0}/solara/cache.py +0 -0
  90. {solara-1.6.1 → solara-1.7.0}/solara/checks.html +0 -0
  91. {solara-1.6.1 → solara-1.7.0}/solara/checks.py +0 -0
  92. {solara-1.6.1 → solara-1.7.0}/solara/components/__init__.py +0 -0
  93. {solara-1.6.1 → solara-1.7.0}/solara/components/alert.py +0 -0
  94. {solara-1.6.1 → solara-1.7.0}/solara/components/button.py +0 -0
  95. {solara-1.6.1 → solara-1.7.0}/solara/components/checkbox.py +0 -0
  96. {solara-1.6.1 → solara-1.7.0}/solara/components/code_highlight_css.py +0 -0
  97. {solara-1.6.1 → solara-1.7.0}/solara/components/code_highlight_css.vue +0 -0
  98. {solara-1.6.1 → solara-1.7.0}/solara/components/columns.py +0 -0
  99. {solara-1.6.1 → solara-1.7.0}/solara/components/cross_filter.py +0 -0
  100. {solara-1.6.1 → solara-1.7.0}/solara/components/dataframe.py +0 -0
  101. {solara-1.6.1 → solara-1.7.0}/solara/components/details.py +0 -0
  102. {solara-1.6.1 → solara-1.7.0}/solara/components/download.vue +0 -0
  103. {solara-1.6.1 → solara-1.7.0}/solara/components/echarts.py +0 -0
  104. {solara-1.6.1 → solara-1.7.0}/solara/components/echarts.vue +0 -0
  105. {solara-1.6.1 → solara-1.7.0}/solara/components/figure_altair.py +0 -0
  106. {solara-1.6.1 → solara-1.7.0}/solara/components/file_browser.py +0 -0
  107. {solara-1.6.1 → solara-1.7.0}/solara/components/file_download.py +0 -0
  108. {solara-1.6.1 → solara-1.7.0}/solara/components/file_drop.py +0 -0
  109. {solara-1.6.1 → solara-1.7.0}/solara/components/file_drop.vue +0 -0
  110. {solara-1.6.1 → solara-1.7.0}/solara/components/file_list_widget.vue +0 -0
  111. {solara-1.6.1 → solara-1.7.0}/solara/components/head.py +0 -0
  112. {solara-1.6.1 → solara-1.7.0}/solara/components/head_tag.py +0 -0
  113. {solara-1.6.1 → solara-1.7.0}/solara/components/head_tag.vue +0 -0
  114. {solara-1.6.1 → solara-1.7.0}/solara/components/image.py +0 -0
  115. {solara-1.6.1 → solara-1.7.0}/solara/components/input.py +0 -0
  116. {solara-1.6.1 → solara-1.7.0}/solara/components/link.py +0 -0
  117. {solara-1.6.1 → solara-1.7.0}/solara/components/markdown.py +0 -0
  118. {solara-1.6.1 → solara-1.7.0}/solara/components/markdown_editor.py +0 -0
  119. {solara-1.6.1 → solara-1.7.0}/solara/components/markdown_editor.vue +0 -0
  120. {solara-1.6.1 → solara-1.7.0}/solara/components/matplotlib.py +0 -0
  121. {solara-1.6.1 → solara-1.7.0}/solara/components/meta.py +0 -0
  122. {solara-1.6.1 → solara-1.7.0}/solara/components/misc.py +0 -0
  123. {solara-1.6.1 → solara-1.7.0}/solara/components/pivot_table.py +0 -0
  124. {solara-1.6.1 → solara-1.7.0}/solara/components/pivot_table.vue +0 -0
  125. {solara-1.6.1 → solara-1.7.0}/solara/components/select.py +0 -0
  126. {solara-1.6.1 → solara-1.7.0}/solara/components/select.vue +0 -0
  127. {solara-1.6.1 → solara-1.7.0}/solara/components/slider.py +0 -0
  128. {solara-1.6.1 → solara-1.7.0}/solara/components/slider_date.vue +0 -0
  129. {solara-1.6.1 → solara-1.7.0}/solara/components/sql_code.py +0 -0
  130. {solara-1.6.1 → solara-1.7.0}/solara/components/sql_code.vue +0 -0
  131. {solara-1.6.1 → solara-1.7.0}/solara/components/style.py +0 -0
  132. {solara-1.6.1 → solara-1.7.0}/solara/components/tab_navigation.py +0 -0
  133. {solara-1.6.1 → solara-1.7.0}/solara/components/title.py +0 -0
  134. {solara-1.6.1 → solara-1.7.0}/solara/components/title.vue +0 -0
  135. {solara-1.6.1 → solara-1.7.0}/solara/components/togglebuttons.py +0 -0
  136. {solara-1.6.1 → solara-1.7.0}/solara/datatypes.py +0 -0
  137. {solara-1.6.1 → solara-1.7.0}/solara/express.py +0 -0
  138. {solara-1.6.1 → solara-1.7.0}/solara/hooks/__init__.py +0 -0
  139. {solara-1.6.1 → solara-1.7.0}/solara/hooks/dataframe.py +0 -0
  140. {solara-1.6.1 → solara-1.7.0}/solara/hooks/misc.py +0 -0
  141. {solara-1.6.1 → solara-1.7.0}/solara/kitchensink.py +0 -0
  142. {solara-1.6.1 → solara-1.7.0}/solara/lab/__init__.py +0 -0
  143. {solara-1.6.1 → solara-1.7.0}/solara/lab/components/__init__.py +0 -0
  144. {solara-1.6.1 → solara-1.7.0}/solara/lab/components/cross_filter.py +0 -0
  145. {solara-1.6.1 → solara-1.7.0}/solara/lab/hooks/__init__.py +0 -0
  146. {solara-1.6.1 → solara-1.7.0}/solara/lab/hooks/dataframe.py +0 -0
  147. {solara-1.6.1 → solara-1.7.0}/solara/lab/toestand.py +0 -0
  148. {solara-1.6.1 → solara-1.7.0}/solara/lab/utils/__init__.py +0 -0
  149. {solara-1.6.1 → solara-1.7.0}/solara/lab/utils/dataframe.py +0 -0
  150. {solara-1.6.1 → solara-1.7.0}/solara/layout.py +0 -0
  151. {solara-1.6.1 → solara-1.7.0}/solara/py.typed +0 -0
  152. {solara-1.6.1 → solara-1.7.0}/solara/routing.py +0 -0
  153. {solara-1.6.1 → solara-1.7.0}/solara/scope/__init__.py +0 -0
  154. {solara-1.6.1 → solara-1.7.0}/solara/scope/types.py +0 -0
  155. {solara-1.6.1 → solara-1.7.0}/solara/server/__init__.py +0 -0
  156. {solara-1.6.1 → solara-1.7.0}/solara/server/app.py +0 -0
  157. {solara-1.6.1 → solara-1.7.0}/solara/server/assets/custom.css +0 -0
  158. {solara-1.6.1 → solara-1.7.0}/solara/server/assets/custom.js +0 -0
  159. {solara-1.6.1 → solara-1.7.0}/solara/server/assets/favicon.png +0 -0
  160. {solara-1.6.1 → solara-1.7.0}/solara/server/assets/favicon.svg +0 -0
  161. {solara-1.6.1 → solara-1.7.0}/solara/server/assets/theme.js +0 -0
  162. {solara-1.6.1 → solara-1.7.0}/solara/server/cdn_helper.py +0 -0
  163. {solara-1.6.1 → solara-1.7.0}/solara/server/fastapi.py +0 -0
  164. {solara-1.6.1 → solara-1.7.0}/solara/server/flask.py +0 -0
  165. {solara-1.6.1 → solara-1.7.0}/solara/server/jupyter/__init__.py +0 -0
  166. {solara-1.6.1 → solara-1.7.0}/solara/server/jupyter/cdn_handler.py +0 -0
  167. {solara-1.6.1 → solara-1.7.0}/solara/server/jupyter/server_extension.py +0 -0
  168. {solara-1.6.1 → solara-1.7.0}/solara/server/kernel.py +0 -0
  169. {solara-1.6.1 → solara-1.7.0}/solara/server/patch.py +0 -0
  170. {solara-1.6.1 → solara-1.7.0}/solara/server/pyodide.py +0 -0
  171. {solara-1.6.1 → solara-1.7.0}/solara/server/reload.py +0 -0
  172. {solara-1.6.1 → solara-1.7.0}/solara/server/server.py +0 -0
  173. {solara-1.6.1 → solara-1.7.0}/solara/server/settings.py +0 -0
  174. {solara-1.6.1 → solara-1.7.0}/solara/server/starlette.py +0 -0
  175. {solara-1.6.1 → solara-1.7.0}/solara/server/static/ansi.js +0 -0
  176. {solara-1.6.1 → solara-1.7.0}/solara/server/static/highlight-dark.css +0 -0
  177. {solara-1.6.1 → solara-1.7.0}/solara/server/static/highlight.css +0 -0
  178. {solara-1.6.1 → solara-1.7.0}/solara/server/static/main-vuetify.js +0 -0
  179. {solara-1.6.1 → solara-1.7.0}/solara/server/static/main.js +0 -0
  180. {solara-1.6.1 → solara-1.7.0}/solara/server/static/sun.svg +0 -0
  181. {solara-1.6.1 → solara-1.7.0}/solara/server/static/webworker.js +0 -0
  182. {solara-1.6.1 → solara-1.7.0}/solara/server/telemetry.py +0 -0
  183. {solara-1.6.1 → solara-1.7.0}/solara/server/templates/index.html.j2 +0 -0
  184. {solara-1.6.1 → solara-1.7.0}/solara/server/templates/loader-plain.css +0 -0
  185. {solara-1.6.1 → solara-1.7.0}/solara/server/templates/loader-plain.html +0 -0
  186. {solara-1.6.1 → solara-1.7.0}/solara/server/templates/loader-solara.css +0 -0
  187. {solara-1.6.1 → solara-1.7.0}/solara/server/templates/loader-solara.html +0 -0
  188. {solara-1.6.1 → solara-1.7.0}/solara/server/templates/plain.html +0 -0
  189. {solara-1.6.1 → solara-1.7.0}/solara/server/templates/solara.html.j2 +0 -0
  190. {solara-1.6.1 → solara-1.7.0}/solara/server/threaded.py +0 -0
  191. {solara-1.6.1 → solara-1.7.0}/solara/server/utils.py +0 -0
  192. {solara-1.6.1 → solara-1.7.0}/solara/server/websocket.py +0 -0
  193. {solara-1.6.1 → solara-1.7.0}/solara/settings.py +0 -0
  194. {solara-1.6.1 → solara-1.7.0}/solara/template/button.py +0 -0
  195. {solara-1.6.1 → solara-1.7.0}/solara/template/markdown.py +0 -0
  196. {solara-1.6.1 → solara-1.7.0}/solara/template/portal/.flake8 +0 -0
  197. {solara-1.6.1 → solara-1.7.0}/solara/template/portal/.pre-commit-config.yaml +0 -0
  198. {solara-1.6.1 → solara-1.7.0}/solara/template/portal/LICENSE +0 -0
  199. {solara-1.6.1 → solara-1.7.0}/solara/template/portal/Procfile +0 -0
  200. {solara-1.6.1 → solara-1.7.0}/solara/template/portal/mypy.ini +0 -0
  201. {solara-1.6.1 → solara-1.7.0}/solara/template/portal/pyproject.toml +0 -0
  202. {solara-1.6.1 → solara-1.7.0}/solara/template/portal/solara_portal/__init__.py +0 -0
  203. {solara-1.6.1 → solara-1.7.0}/solara/template/portal/solara_portal/components/__init__.py +0 -0
  204. {solara-1.6.1 → solara-1.7.0}/solara/template/portal/solara_portal/components/article.py +0 -0
  205. {solara-1.6.1 → solara-1.7.0}/solara/template/portal/solara_portal/components/data.py +0 -0
  206. {solara-1.6.1 → solara-1.7.0}/solara/template/portal/solara_portal/components/header.py +0 -0
  207. {solara-1.6.1 → solara-1.7.0}/solara/template/portal/solara_portal/components/layout.py +0 -0
  208. {solara-1.6.1 → solara-1.7.0}/solara/template/portal/solara_portal/content/articles/equis-in-vidi.md +0 -0
  209. {solara-1.6.1 → solara-1.7.0}/solara/template/portal/solara_portal/content/articles/substiterat-vati.md +0 -0
  210. {solara-1.6.1 → solara-1.7.0}/solara/template/portal/solara_portal/data.py +0 -0
  211. {solara-1.6.1 → solara-1.7.0}/solara/template/portal/solara_portal/pages/__init__.py +0 -0
  212. {solara-1.6.1 → solara-1.7.0}/solara/template/portal/solara_portal/pages/article/__init__.py +0 -0
  213. {solara-1.6.1 → solara-1.7.0}/solara/template/portal/solara_portal/pages/tabular.py +0 -0
  214. {solara-1.6.1 → solara-1.7.0}/solara/template/portal/solara_portal/pages/viz/__init__.py +0 -0
  215. {solara-1.6.1 → solara-1.7.0}/solara/template/portal/solara_portal/pages/viz/overview.py +0 -0
  216. {solara-1.6.1 → solara-1.7.0}/solara/util.py +0 -0
  217. {solara-1.6.1 → solara-1.7.0}/solara/website/__init__.py +0 -0
  218. {solara-1.6.1 → solara-1.7.0}/solara/website/assets/images/logo-small.png +0 -0
  219. {solara-1.6.1 → solara-1.7.0}/solara/website/assets/images/logo.svg +0 -0
  220. {solara-1.6.1 → solara-1.7.0}/solara/website/assets/theme.js +0 -0
  221. {solara-1.6.1 → solara-1.7.0}/solara/website/components/__init__.py +0 -0
  222. {solara-1.6.1 → solara-1.7.0}/solara/website/components/header.py +0 -0
  223. {solara-1.6.1 → solara-1.7.0}/solara/website/components/hero.py +0 -0
  224. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/README.md +0 -0
  225. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/__init__.py +0 -0
  226. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/__init__.py +0 -0
  227. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/altair.py +0 -0
  228. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/app_bar.py +0 -0
  229. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/app_layout.py +0 -0
  230. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/button.py +0 -0
  231. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/checkbox.py +0 -0
  232. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/column.py +0 -0
  233. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/columns.py +0 -0
  234. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/columns_responsive.py +0 -0
  235. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/common.py +0 -0
  236. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/cross_filter_dataframe.py +0 -0
  237. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/cross_filter_report.py +0 -0
  238. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/cross_filter_select.py +0 -0
  239. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/cross_filter_slider.py +0 -0
  240. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/default_layout.py +0 -0
  241. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/display.py +0 -0
  242. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/echarts.py +0 -0
  243. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/error.py +0 -0
  244. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/file_browser.py +0 -0
  245. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/file_download.py +0 -0
  246. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/file_drop.py +0 -0
  247. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/generate_routes.py +0 -0
  248. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/generate_routes_directory.py +0 -0
  249. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/griddraggable.py +0 -0
  250. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/gridfixed.py +0 -0
  251. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/hbox.py +0 -0
  252. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/head.py +0 -0
  253. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/html.py +0 -0
  254. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/image.py +0 -0
  255. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/info.py +0 -0
  256. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/input.py +0 -0
  257. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/link.py +0 -0
  258. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/markdown.py +0 -0
  259. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/markdown_editor.py +0 -0
  260. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/matplotlib.py +0 -0
  261. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/memoize.py +0 -0
  262. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/meta.py +0 -0
  263. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/pivot_table.py +0 -0
  264. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/plotly.py +0 -0
  265. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/plotly_express.py +0 -0
  266. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/resolve_path.py +0 -0
  267. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/route.py +0 -0
  268. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/row.py +0 -0
  269. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/select.py +0 -0
  270. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/sidebar.py +0 -0
  271. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/slider.py +0 -0
  272. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/sql_code.py +0 -0
  273. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/style.py +0 -0
  274. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/success.py +0 -0
  275. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/title.py +0 -0
  276. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/togglebuttons.py +0 -0
  277. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/use_cross_filter.py +0 -0
  278. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/use_exception.py +0 -0
  279. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/use_previous.py +0 -0
  280. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/use_route.py +0 -0
  281. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/use_state.py +0 -0
  282. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/use_state_or_update.py +0 -0
  283. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/use_thread.md +0 -0
  284. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/use_thread.py +0 -0
  285. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/vbox.py +0 -0
  286. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/api/widget.py +0 -0
  287. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/apps/__init__.py +0 -0
  288. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/apps/layout-demo.py +0 -0
  289. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/apps/multipage/__init__.py +0 -0
  290. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/apps/multipage/page1.py +0 -0
  291. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/apps/multipage/page2.py +0 -0
  292. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/apps/scatter.py +0 -0
  293. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/apps/tutorial-streamlit.py +0 -0
  294. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/doc_use_download.py +0 -0
  295. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/__init__.py +0 -0
  296. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/00-introduction.md +0 -0
  297. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/02-installing.md +0 -0
  298. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/03-quickstart.md +0 -0
  299. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/04-tutorial/00-overview.md +0 -0
  300. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/04-tutorial/10_data_science.py +0 -0
  301. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/04-tutorial/20-web-app.md +0 -0
  302. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/04-tutorial/30-ipywidgets.md +0 -0
  303. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/04-tutorial/40-streamlit.md +0 -0
  304. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/04-tutorial/50-dash.md +0 -0
  305. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/04-tutorial/_data_science.ipynb +0 -0
  306. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/10-howto/00-overview.md +0 -0
  307. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/10-howto/20-multipage.md +0 -0
  308. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/10-howto/30-layout.md +0 -0
  309. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/15-reference/00-overview.md +0 -0
  310. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/15-reference/40-static_files.md +0 -0
  311. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/15-reference/41-asset-files.md +0 -0
  312. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/15-reference/60-static-site-generation.md +0 -0
  313. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/15-reference/70-search.md +0 -0
  314. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/15-reference/80-reloading.md +0 -0
  315. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/15-reference/90-notebook-support.md +0 -0
  316. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/15-reference/95-caching.md +0 -0
  317. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/20-understanding/00-introduction.md +0 -0
  318. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/20-understanding/05-ipywidgets.md +0 -0
  319. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/20-understanding/06-ipyvuetify.md +0 -0
  320. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/20-understanding/10-reacton.md +0 -0
  321. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/20-understanding/12-reacton-basics.md +0 -0
  322. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/20-understanding/15-anatomy.md +0 -0
  323. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/20-understanding/17-rules-of-hooks.md +0 -0
  324. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/20-understanding/18-containers.md +0 -0
  325. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/20-understanding/20-solara.md +0 -0
  326. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/20-understanding/40-routing.md +0 -0
  327. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/20-understanding/50-solara-server.md +0 -0
  328. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/20-understanding/60-voila.md +0 -0
  329. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/30-deploying/00-overview.md +0 -0
  330. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/30-deploying/10-self-hosted.md +0 -0
  331. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/30-deploying/20-cloud-hosted.md +0 -0
  332. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/90-development/10-setup.md +0 -0
  333. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/90-troubleshoot.md +0 -0
  334. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/99-faq.md +0 -0
  335. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/__init__.py +0 -0
  336. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/lab/00-what-is-lab.md +0 -0
  337. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docs/content/lab/toestand.md +0 -0
  338. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/docutils.py +0 -0
  339. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/examples/__init__.py +0 -0
  340. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/examples/basics/__init__.py +0 -0
  341. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/examples/basics/sine.py +0 -0
  342. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/examples/fullscreen.py +0 -0
  343. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/examples/general/__init__.py +0 -0
  344. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/examples/general/pokemon_search.py +0 -0
  345. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/examples/ipycanvas.py +0 -0
  346. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/examples/utilities/__init__.py +0 -0
  347. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/examples/utilities/calculator.py +0 -0
  348. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/examples/utilities/countdown_timer.py +0 -0
  349. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/examples/visualization/__init__.py +0 -0
  350. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/examples/visualization/bqplot.py +0 -0
  351. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/examples/visualization/linked_views.py +0 -0
  352. {solara-1.6.1 → solara-1.7.0}/solara/website/pages/examples/visualization/plotly.py +0 -0
  353. {solara-1.6.1 → solara-1.7.0}/solara/website/public/beach.jpeg +0 -0
  354. {solara-1.6.1 → solara-1.7.0}/solara/website/public/docs/anatomy.png +0 -0
  355. {solara-1.6.1 → solara-1.7.0}/solara/website/public/docs/reacton-basics.png +0 -0
  356. {solara-1.6.1 → solara-1.7.0}/solara/website/public/docs/solara-stack.png +0 -0
  357. {solara-1.6.1 → solara-1.7.0}/solara/website/public/hero.png +0 -0
  358. {solara-1.6.1 → solara-1.7.0}/solara/website/public/landing/complexity.png +0 -0
  359. {solara-1.6.1 → solara-1.7.0}/solara/website/public/landing/python-love-react.png +0 -0
  360. {solara-1.6.1 → solara-1.7.0}/solara/website/public/landing/what.png +0 -0
  361. {solara-1.6.1 → solara-1.7.0}/solara/website/public/quickstart-notebook.png +0 -0
  362. {solara-1.6.1 → solara-1.7.0}/solara/website/templates/index.html.j2 +0 -0
  363. {solara-1.6.1 → solara-1.7.0}/solara/website/utils.py +0 -0
  364. {solara-1.6.1 → solara-1.7.0}/solara/widgets/__init__.py +0 -0
  365. {solara-1.6.1 → solara-1.7.0}/solara/widgets/vue/gridlayout.vue +0 -0
  366. {solara-1.6.1 → solara-1.7.0}/solara/widgets/vue/html.vue +0 -0
  367. {solara-1.6.1 → solara-1.7.0}/solara/widgets/vue/navigator.vue +0 -0
  368. {solara-1.6.1 → solara-1.7.0}/solara/widgets/vue/vegalite.vue +0 -0
  369. {solara-1.6.1 → solara-1.7.0}/tests/__init__.py +0 -0
  370. {solara-1.6.1 → solara-1.7.0}/tests/conftest.py +0 -0
  371. {solara-1.6.1 → solara-1.7.0}/tests/integration/__init__.py +0 -0
  372. {solara-1.6.1 → solara-1.7.0}/tests/integration/app_widget.py +0 -0
  373. {solara-1.6.1 → solara-1.7.0}/tests/integration/cmdline_test.py +0 -0
  374. {solara-1.6.1 → solara-1.7.0}/tests/integration/conftest.py +0 -0
  375. {solara-1.6.1 → solara-1.7.0}/tests/integration/create_test.py +0 -0
  376. {solara-1.6.1 → solara-1.7.0}/tests/integration/error_test.py +0 -0
  377. {solara-1.6.1 → solara-1.7.0}/tests/integration/file_download_test.py +0 -0
  378. {solara-1.6.1 → solara-1.7.0}/tests/integration/markdown_test.py +0 -0
  379. {solara-1.6.1 → solara-1.7.0}/tests/integration/reload_test.py +0 -0
  380. {solara-1.6.1 → solara-1.7.0}/tests/integration/router_test.py +0 -0
  381. {solara-1.6.1 → solara-1.7.0}/tests/integration/server_test.py +0 -0
  382. {solara-1.6.1 → solara-1.7.0}/tests/integration/ssg_test.py +0 -0
  383. {solara-1.6.1 → solara-1.7.0}/tests/integration/test.vue +0 -0
  384. {solara-1.6.1 → solara-1.7.0}/tests/integration/testapp.py +0 -0
  385. {solara-1.6.1 → solara-1.7.0}/tests/unit/__init__.py +0 -0
  386. {solara-1.6.1 → solara-1.7.0}/tests/unit/app_test.py +0 -0
  387. {solara-1.6.1 → solara-1.7.0}/tests/unit/applayout_test.py +0 -0
  388. {solara-1.6.1 → solara-1.7.0}/tests/unit/autorouting_test.py +0 -0
  389. {solara-1.6.1 → solara-1.7.0}/tests/unit/cache_test.py +0 -0
  390. {solara-1.6.1 → solara-1.7.0}/tests/unit/cdn_helper_test.py +0 -0
  391. {solara-1.6.1 → solara-1.7.0}/tests/unit/common.py +0 -0
  392. {solara-1.6.1 → solara-1.7.0}/tests/unit/conftest.py +0 -0
  393. {solara-1.6.1 → solara-1.7.0}/tests/unit/cross_filter_component_test.py +0 -0
  394. {solara-1.6.1 → solara-1.7.0}/tests/unit/cross_filter_test.py +0 -0
  395. {solara-1.6.1 → solara-1.7.0}/tests/unit/dataframe_test.py +0 -0
  396. {solara-1.6.1 → solara-1.7.0}/tests/unit/datatable_test.py +0 -0
  397. {solara-1.6.1 → solara-1.7.0}/tests/unit/express_test.py +0 -0
  398. {solara-1.6.1 → solara-1.7.0}/tests/unit/file_browser_test.py +0 -0
  399. {solara-1.6.1 → solara-1.7.0}/tests/unit/file_download_test.py +0 -0
  400. {solara-1.6.1 → solara-1.7.0}/tests/unit/hooks_test.py +0 -0
  401. {solara-1.6.1 → solara-1.7.0}/tests/unit/lab/__init__.py +0 -0
  402. {solara-1.6.1 → solara-1.7.0}/tests/unit/lab/toestand_test.py +0 -0
  403. {solara-1.6.1 → solara-1.7.0}/tests/unit/matplotlib_test.py +0 -0
  404. {solara-1.6.1 → solara-1.7.0}/tests/unit/patch_test.py +0 -0
  405. {solara-1.6.1 → solara-1.7.0}/tests/unit/pivottable_test.py +0 -0
  406. {solara-1.6.1 → solara-1.7.0}/tests/unit/router_test.py +0 -0
  407. {solara-1.6.1 → solara-1.7.0}/tests/unit/solara_test_apps/__init__.py +0 -0
  408. {solara-1.6.1 → solara-1.7.0}/tests/unit/solara_test_apps/food/__init__.py +0 -0
  409. {solara-1.6.1 → solara-1.7.0}/tests/unit/solara_test_apps/food/food.py +0 -0
  410. {solara-1.6.1 → solara-1.7.0}/tests/unit/solara_test_apps/food/index.py +0 -0
  411. {solara-1.6.1 → solara-1.7.0}/tests/unit/solara_test_apps/multipage/01-home.py +0 -0
  412. {solara-1.6.1 → solara-1.7.0}/tests/unit/solara_test_apps/multipage/02-my_fruit.py +0 -0
  413. {solara-1.6.1 → solara-1.7.0}/tests/unit/solara_test_apps/multipage/03-some-markdown.md +0 -0
  414. {solara-1.6.1 → solara-1.7.0}/tests/unit/solara_test_apps/multipage/04-a_directory/00-another-markdown.md +0 -0
  415. {solara-1.6.1 → solara-1.7.0}/tests/unit/solara_test_apps/multipage/04-a_directory/01-not-an-app.py +0 -0
  416. {solara-1.6.1 → solara-1.7.0}/tests/unit/solara_test_apps/multipage/04-a_directory/__init__.py +0 -0
  417. {solara-1.6.1 → solara-1.7.0}/tests/unit/solara_test_apps/multipage/05-and-notebooks.ipynb +0 -0
  418. {solara-1.6.1 → solara-1.7.0}/tests/unit/solara_test_apps/multipage/10-single-file-directory/single-file.md +0 -0
  419. {solara-1.6.1 → solara-1.7.0}/tests/unit/solara_test_apps/multipage/99-some_other_python_script.py +0 -0
  420. {solara-1.6.1 → solara-1.7.0}/tests/unit/solara_test_apps/multipage/some_other_file.txt +0 -0
  421. {solara-1.6.1 → solara-1.7.0}/tests/unit/solara_test_apps/multipage-widgets/00-overview.md +0 -0
  422. {solara-1.6.1 → solara-1.7.0}/tests/unit/solara_test_apps/multipage-widgets/01-views.py +0 -0
  423. {solara-1.6.1 → solara-1.7.0}/tests/unit/solara_test_apps/multipage-widgets/02-likes.py +0 -0
  424. {solara-1.6.1 → solara-1.7.0}/tests/unit/solara_test_apps/multipage-widgets/03-volume.py +0 -0
  425. {solara-1.6.1 → solara-1.7.0}/tests/unit/solara_test_apps/multipage-widgets/04-color.ipynb +0 -0
  426. {solara-1.6.1 → solara-1.7.0}/tests/unit/solara_test_apps/notebookapp_component.ipynb +0 -0
  427. {solara-1.6.1 → solara-1.7.0}/tests/unit/solara_test_apps/notebookapp_element.ipynb +0 -0
  428. {solara-1.6.1 → solara-1.7.0}/tests/unit/solara_test_apps/notebookapp_widget.ipynb +0 -0
  429. {solara-1.6.1 → solara-1.7.0}/tests/unit/telemetry_tests.py +0 -0
  430. {solara-1.6.1 → solara-1.7.0}/tsconfigbase.json +0 -0
@@ -1,5 +1,5 @@
1
1
  [bumpversion]
2
- current_version = 1.6.1
2
+ current_version = 1.7.0
3
3
  commit = True
4
4
  tag = True
5
5
  parse = (?P<major>\d+)(\.(?P<minor>\d+))(\.(?P<patch>\d+))((?P<release>.)(?P<build>\d+))?
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: solara
3
- Version: 1.6.1
3
+ Version: 1.7.0
4
4
  Summary: Build webapps using IPywidgets
5
5
  Author-email: "Maarten A. Breddels" <maartenbreddels@gmail.com>
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -33,7 +33,7 @@ Requires-Dist: jupyter_client>=7.0.0
33
33
  Requires-Dist: watchdog
34
34
  Requires-Dist: requests
35
35
  Requires-Dist: pygments==2.10; python_version < '3.7'
36
- Requires-Dist: solara-assets==1.6.1 ; extra == "assets"
36
+ Requires-Dist: solara-assets==1.7.0 ; extra == "assets"
37
37
  Requires-Dist: flake8 ; extra == "dev"
38
38
  Requires-Dist: bqplot ; extra == "dev"
39
39
  Requires-Dist: bqplot-image-gl ; extra == "dev"
@@ -1,2 +1,2 @@
1
1
  "CDN assets for Solara"
2
- __version__ = "1.6.1"
2
+ __version__ = "1.7.0"
@@ -11,7 +11,7 @@ license = {file = "LICENSE"}
11
11
  classifiers = ["License :: Free for non-commercial use"]
12
12
  dynamic = ["version", "description"]
13
13
  dependencies = [
14
- "solara==1.6.1",
14
+ "solara==1.7.0",
15
15
  ]
16
16
 
17
17
  ssg = [
@@ -1,2 +1,2 @@
1
1
  "Enterprise features for Solara"
2
- __version__ = "1.6.1"
2
+ __version__ = "1.7.0"
@@ -78,7 +78,7 @@ dev = [
78
78
  "pytest-playwright; python_version > '3.6'",
79
79
  ]
80
80
  assets = [
81
- "solara-assets==1.6.1"
81
+ "solara-assets==1.7.0"
82
82
  ]
83
83
  flask = [
84
84
  "flask",
@@ -7,14 +7,14 @@
7
7
  ## Making an alpha release
8
8
 
9
9
 
10
- $ ./release.sh patch --new-version 1.6.1a1
10
+ $ ./release.sh patch --new-version 1.7.0a1
11
11
 
12
12
 
13
13
  # semi automated
14
14
  To make a new release
15
15
  ```
16
16
  # update solara/__init__.py
17
- $ git add -u && git commit -m 'Release v1.6.1' && git tag v1.6.1 && git push upstream master v1.6.1
17
+ $ git add -u && git commit -m 'Release v1.7.0' && git tag v1.7.0 && git push upstream master v1.7.0
18
18
  ```
19
19
 
20
20
 
@@ -22,5 +22,5 @@ If a problem happens, and you want to keep the history clean
22
22
  ```
23
23
  # do fix
24
24
  $ git rebase -i HEAD~3
25
- $ git tag v1.6.1 -f && git push upstream master v1.6.1 -f
25
+ $ git tag v1.7.0 -f && git push upstream master v1.7.0 -f
26
26
  ```
@@ -1,5 +1,5 @@
1
1
  """Build webapps using IPywidgets"""
2
- __version__ = "1.6.1"
2
+ __version__ = "1.7.0"
3
3
  github_url = "https://github.com/widgetti/solara"
4
4
  git_branch = "master"
5
5
 
@@ -35,6 +35,7 @@ from reacton import (
35
35
  use_state,
36
36
  use_state_widget,
37
37
  ) # noqa: F403, F401
38
+ from reacton.core import Element # noqa: F403, F401
38
39
  from . import util
39
40
 
40
41
  # flake8: noqa: F402
@@ -3,6 +3,7 @@ import importlib
3
3
  import inspect
4
4
  import pkgutil
5
5
  import re
6
+ import warnings
6
7
  from pathlib import Path
7
8
  from types import ModuleType
8
9
  from typing import Any, Callable, List, Optional, cast
@@ -356,7 +357,7 @@ def generate_routes(module: ModuleType) -> List[solara.Route]:
356
357
  raise KeyError(f"Route {k!r} listen in route_order not found in {module}")
357
358
  routes = [lookup[k] for k in route_order]
358
359
  if set(lookup) - set(route_order):
359
- raise KeyError(f"Some routes are not in route_order: {set(lookup) - set(route_order)}")
360
+ warnings.warn(f"Some routes are not in route_order: {set(lookup) - set(route_order)}")
360
361
 
361
362
  else:
362
363
  children = getattr(module, "routes", [])
@@ -218,7 +218,7 @@ def AppLayout(
218
218
 
219
219
  title = t.use_title_get() or title
220
220
 
221
- show_app_bar = title or routes or children_appbar or use_drawer
221
+ show_app_bar = title or (routes and navigation) or children_appbar or use_drawer
222
222
  if not show_app_bar and not children_sidebar and len(children) == 1:
223
223
  return children[0]
224
224
  if embedded_mode and not fullscreen:
@@ -0,0 +1,220 @@
1
+ import dataclasses
2
+ import math
3
+ import os
4
+ from dataclasses import replace
5
+ from typing import Callable, List, Optional
6
+
7
+ import ipyvuetify as v
8
+ import ipywidgets
9
+ import traitlets
10
+
11
+ import solara
12
+ import solara.hooks.dataframe
13
+ import solara.lab
14
+ from solara.lab.hooks.dataframe import use_df_column_names
15
+ from solara.lab.utils.dataframe import df_type
16
+
17
+ from .. import CellAction, ColumnAction
18
+
19
+
20
+ def _ensure_dict(d):
21
+ if dataclasses.is_dataclass(d):
22
+ return dataclasses.asdict(d)
23
+ return d
24
+
25
+
26
+ def _drop_keys_from_list_of_mappings(drop):
27
+ def closure(list_of_dicts, widget):
28
+ return [{k: v for k, v in _ensure_dict(d).items() if k not in drop} for d in list_of_dicts]
29
+
30
+ return closure
31
+
32
+
33
+ class DataTableWidget(v.VuetifyTemplate):
34
+ template_file = os.path.realpath(os.path.join(os.path.dirname(__file__), "datatable.vue"))
35
+
36
+ total_length = traitlets.CInt().tag(sync=True)
37
+ checked = traitlets.List([]).tag(sync=True) # indices of which rows are selected
38
+ column_actions = traitlets.List(trait=traitlets.Instance(ColumnAction), default_value=[]).tag(
39
+ sync=True, to_json=_drop_keys_from_list_of_mappings(["on_click"])
40
+ )
41
+ _column_actions_callbacks = traitlets.List(trait=traitlets.Callable(), default_value=[])
42
+ cell_actions = traitlets.List(trait=traitlets.Instance(CellAction), default_value=[]).tag(sync=True, to_json=_drop_keys_from_list_of_mappings(["on_click"]))
43
+ _cell_actions_callbacks = traitlets.List(trait=traitlets.Callable(), default_value=[])
44
+ items = traitlets.Any().tag(sync=True) # the data, a list of dict
45
+ headers = traitlets.Any().tag(sync=True)
46
+ headers_selections = traitlets.Any().tag(sync=True)
47
+ options = traitlets.Any().tag(sync=True)
48
+ items_per_page = traitlets.CInt(11).tag(sync=True)
49
+ selections = traitlets.Any([]).tag(sync=True)
50
+ selection_colors = traitlets.Any([]).tag(sync=True)
51
+ selection_enabled = traitlets.Bool(True).tag(sync=True)
52
+ highlighted = traitlets.Int(None, allow_none=True).tag(sync=True)
53
+ scrollable = traitlets.Bool(False).tag(sync=True)
54
+
55
+ # for use with scrollable, when used in the default UI
56
+ height = traitlets.Unicode(None, allow_none=True).tag(sync=True)
57
+
58
+ hidden_components = traitlets.List([]).tag(sync=False)
59
+ column_header_hover = traitlets.Unicode(allow_none=True).tag(sync=True)
60
+ column_header_widget = traitlets.Any(allow_none=True).tag(sync=True, **ipywidgets.widget_serialization)
61
+
62
+ def vue_on_column_action(self, data):
63
+ header_value, action_index = data
64
+ on_click = self._column_actions_callbacks[action_index]
65
+ if on_click:
66
+ on_click(header_value)
67
+
68
+ def vue_on_cell_action(self, data):
69
+ row, header_value, action_index = data
70
+ on_click = self._cell_actions_callbacks[action_index]
71
+ if on_click:
72
+ on_click(header_value, row)
73
+
74
+
75
+ def format_default(df, column, row_index, value):
76
+ if isinstance(value, float) and math.isnan(value):
77
+ return "NaN"
78
+ return str(value)
79
+
80
+
81
+ @solara.component
82
+ def DataTable(
83
+ df,
84
+ page=0,
85
+ items_per_page=20,
86
+ format=None,
87
+ column_actions: List[ColumnAction] = [],
88
+ cell_actions: List[CellAction] = [],
89
+ scrollable=False,
90
+ on_column_header_hover: Optional[Callable[[Optional[str]], None]] = None,
91
+ column_header_info: Optional[solara.Element] = None,
92
+ ):
93
+ total_length = len(df)
94
+ options = {"descending": False, "page": page + 1, "itemsPerPage": items_per_page, "sortBy": [], "totalItems": total_length}
95
+ options, set_options = solara.use_state(options, key="options")
96
+ format = format or format_default
97
+ # frontend does 1 base, we use 0 based
98
+ page = options["page"] - 1
99
+ items_per_page = options["itemsPerPage"]
100
+ i1 = page * items_per_page
101
+ i2 = min(total_length, (page + 1) * items_per_page)
102
+
103
+ columns = use_df_column_names(df)
104
+
105
+ items = []
106
+ column_data = {}
107
+ dfs = df[i1:i2]
108
+
109
+ if df_type(df) == "pandas":
110
+ column_data = dfs[columns].to_dict("records")
111
+ else:
112
+ column_data = dfs[columns].to_records()
113
+ for i in range(i2 - i1):
114
+ item = {"__row__": i + i1} # special key for the row number
115
+ for column in columns:
116
+ item[column] = format(dfs, column, i + i1, column_data[i][column])
117
+ items.append(item)
118
+
119
+ headers = [{"text": name, "value": name, "sortable": False} for name in columns]
120
+ column_actions_callbacks = [k.on_click for k in column_actions]
121
+ cell_actions_callbacks = [k.on_click for k in cell_actions]
122
+ column_actions = [replace(k, on_click=None) for k in column_actions]
123
+ cell_actions = [replace(k, on_click=None) for k in cell_actions]
124
+
125
+ return DataTableWidget.element(
126
+ total_length=total_length,
127
+ items=items,
128
+ headers=headers,
129
+ headers_selections=[],
130
+ options=options,
131
+ items_per_page=items_per_page,
132
+ selections=[],
133
+ selection_colors=[],
134
+ selection_enabled=False,
135
+ highlighted=None,
136
+ scrollable=scrollable,
137
+ on_options=set_options,
138
+ column_actions=column_actions,
139
+ cell_actions=cell_actions,
140
+ _column_actions_callbacks=column_actions_callbacks,
141
+ _cell_actions_callbacks=cell_actions_callbacks,
142
+ on_column_header_hover=on_column_header_hover,
143
+ column_header_widget=column_header_info,
144
+ )
145
+
146
+
147
+ @solara.component
148
+ def DataFrame(
149
+ df,
150
+ items_per_page=20,
151
+ column_actions: List[ColumnAction] = [],
152
+ cell_actions: List[CellAction] = [],
153
+ scrollable=False,
154
+ on_column_header_hover: Optional[Callable[[Optional[str]], None]] = None,
155
+ column_header_info: Optional[solara.Element] = None,
156
+ ):
157
+ """Displays a Pandas dataframe in a table.
158
+
159
+ Pass in a dataframe as first argument, and optionally how many items per page to display.
160
+
161
+ ```solara
162
+ import solara
163
+ import pandas as pd
164
+ import plotly
165
+
166
+ df = plotly.data.iris()
167
+
168
+ @solara.component
169
+ def Page():
170
+ solara.DataFrame(df, items_per_page=5)
171
+
172
+ ```
173
+
174
+ # Custom column header info
175
+
176
+ Use the `column_header_info` argument to display a custom component on the column header when
177
+ the user hover above it. In this case we display the value counts for the column.
178
+
179
+ ```solara
180
+ import solara
181
+ import pandas as pd
182
+ import plotly
183
+
184
+ df = plotly.data.iris()
185
+
186
+ @solara.component
187
+ def Page():
188
+ column_hover, set_column_hover = solara.use_state(None)
189
+
190
+ with solara.Column(margin=4) as column_header_info:
191
+ if column_hover:
192
+ solara.Text("Value counts for " + column_hover)
193
+ display(df[column_hover].value_counts())
194
+ # if no column is hovered above, we provide an empty container
195
+ # so we always see the triple dot icon on the column header
196
+
197
+ solara.DataFrame(df, column_header_info=column_header_info, on_column_header_hover=set_column_hover)
198
+ ```
199
+
200
+
201
+ ## Arguments
202
+
203
+ * `df` - `DataFrame` - a Pandas dataframe.
204
+ * `items_per_page` - `int` - number of items per page.
205
+ * `column_actions` - Triggered via clicking on the triple dot icon on the headers (visible when hovering).
206
+ * `cell_actions` - Triggered via clicking on the triple dot icon in the cell (visible when hovering).
207
+ * `on_column_header_hover` - Optional callback when the user hovers over the triple dot icon on a header.
208
+ * `column_header_info` - Element to display in the column menu popup (visible when hovering), provide an
209
+ empty container element (like [Column](/api/column)) to force showing the trigle dot icon (see example).
210
+
211
+ """
212
+ return DataTable(
213
+ df,
214
+ items_per_page=items_per_page,
215
+ column_actions=column_actions,
216
+ cell_actions=cell_actions,
217
+ scrollable=scrollable,
218
+ on_column_header_hover=on_column_header_hover,
219
+ column_header_info=column_header_info,
220
+ )
@@ -0,0 +1,175 @@
1
+ <template>
2
+ <v-slide-x-transition appear>
3
+ <div class="solara-data-table__viewport">
4
+ <v-data-table dense hide-default-header :headers="[...headers]" :items="items"
5
+ :footer-props="{ 'items-per-page-options': [10, 20, 50, 100] }" :options.sync="options"
6
+ :items_per_page.sync="items_per_page" :server-items-length="total_length" :class="[
7
+ 'elevation-1',
8
+ 'solara-data-table',
9
+ scrollable && 'solara-data-table--scrollable',
10
+ ]" :style="scrollable && height != null && `height: ${height}`">
11
+ <template v-slot:header="props">
12
+ <thead>
13
+ <tr>
14
+ <th style="padding: 0 10px; width: 40px">#</th>
15
+ <th style="padding: 0 1px; width: 30px" v-if="selection_enabled">
16
+ <v-btn icon color="primary" text small @click="apply_filter">
17
+ <v-icon>filter_list</v-icon>
18
+ </v-btn>
19
+ </th>
20
+ <th style="padding: 0 1px" v-for="(header, index) in headers_selections" :key="header.text">
21
+ <v-icon style="padding: 0 1px" :key="index" :color="selection_colors[index]">brightness_1</v-icon>
22
+ </th>
23
+ <v-slide-x-transition :key="header.text" v-for="header in headers">
24
+ <th class="text-no-wrap">
25
+ {{ header.text }}
26
+ <v-menu open-on-hover bottom offset-y @input="isOpen => onHeaderHover({ isOpen, header })"
27
+ v-if="(column_actions && column_actions.length) || column_header_widget">
28
+ <template v-slot:activator="{ on, attrs }">
29
+ <v-icon v-bind="attrs" v-on="on" small class="solara-data-table-menu">mdi-dots-vertical</v-icon>
30
+ </template>
31
+ <v-sheet v-if="header.value === column_header_hover" class="solara-data-table-column-header-sheet">
32
+ <jupyter-widget v-if="column_header_widget" :widget="column_header_widget"></jupyter-widget>
33
+ </v-sheet>
34
+ <v-list v-if="column_actions && column_actions.length">
35
+ <v-subheader>Actions:</v-subheader>
36
+ <v-list-item link @click="on_column_action([header.value, index])"
37
+ v-for="(action, index) in column_actions" :key="index">
38
+ <v-list-item-icon><v-icon>{{ action.icon }}</v-icon></v-list-item-icon>
39
+ <v-list-item-title>{{ action.name }}</v-list-item-title>
40
+ </v-list-item>
41
+ </v-list>
42
+ </v-menu>
43
+ </th>
44
+ </v-slide-x-transition>
45
+ </tr>
46
+ </thead>
47
+ </template>
48
+ <template v-slot:item="props">
49
+ <!-- @click="on_row_clicked(props.item.__row__)" -->
50
+ <tr :class="{ highlightedRow: props.item.__row__ === highlighted }">
51
+ <td style="padding: 0 10px" class="text-xs-left">
52
+ <i>{{ props.item.__row__ }}</i>
53
+ </td>
54
+ <td style="padding: 0 1px" class="text-xs-left" v-if="selection_enabled">
55
+ <v-checkbox hide-details style="margin-top: 0; padding-top: 0"
56
+ :input-value="checked.indexOf(props.item.__row__) != -1" :key="props.item.__row__"
57
+ @change="(value) => select({ checked: value, row: props.item.__row__ })" />
58
+ </td>
59
+ <td style="padding: 0 1px" :key="header.text" v-for="(header, index) in headers_selections">
60
+ <v-fade-transition leave-absolute>
61
+ <v-icon v-if="props.item[header.value]" v-model="props.item[header.value]"
62
+ :color="selection_colors[index]">brightness_1</v-icon>
63
+ </v-fade-transition>
64
+ </td>
65
+ <td v-for="header in headers" class="text-truncate text-no-wrap" :key="header.text"
66
+ :title="props.item[header.value]">
67
+ <v-slide-x-transition appear>
68
+ <!-- <span @click="on_item_click([props.item.__row__, header.value])">{{ props.item[header.value] }}</span> -->
69
+ <span>
70
+ {{ props.item[header.value] }}
71
+ <v-menu open-on-hover bottom offset-y v-if="cell_actions.length">
72
+ <template v-slot:activator="{ on, attrs }">
73
+ <v-icon v-bind="attrs" v-on="on" small class="solara-data-table-menu">mdi-dots-vertical</v-icon>
74
+ </template>
75
+ <v-list v-for="(action, index) in cell_actions" :key="index">
76
+ <v-list-item link @click="on_cell_action([props.item.__row__, header.value, index])">
77
+ <v-list-item-icon><v-icon>{{ action.icon }}</v-icon></v-list-item-icon>
78
+ <v-list-item-title>{{ action.name }}</v-list-item-title>
79
+ </v-list-item>
80
+ </v-list>
81
+ </v-menu>
82
+ </span>
83
+
84
+ </v-slide-x-transition>
85
+ </td>
86
+ </tr>
87
+ </template>
88
+ </v-data-table>
89
+ </div>
90
+ </v-slide-x-transition>
91
+ </template>
92
+
93
+ <script>
94
+ module.exports = {
95
+ methods: {
96
+ onHeaderHover({ header, isOpen }) {
97
+ if (isOpen) {
98
+ // if isOpen is true, we clicked, and we set it header.value
99
+ this.column_header_hover = header.value
100
+ } else {
101
+ // if false, we only 'unset' if the current header equals the current open menu
102
+ // because sometimes the menu from another column is closed after opening the new one
103
+ if (this.column_header_hover == header.value) {
104
+ this.column_header_hover = null
105
+ }
106
+ }
107
+ }
108
+ }
109
+ }
110
+ </script>
111
+ <style id="solara_table">
112
+ .highlightedRow {
113
+ background-color: #e3f2fd;
114
+ }
115
+
116
+ .solara-data-table table {
117
+ table-layout: fixed;
118
+ }
119
+
120
+ .solara-data-table--scrollable .v-data-table__wrapper {
121
+ overflow-y: auto;
122
+ height: calc(100% - 59px);
123
+ }
124
+
125
+ .solara-data-table--scrollable thead>tr {
126
+ position: sticky;
127
+ top: 0;
128
+ }
129
+
130
+ .solara-data-table--scrollable .v-data-table__wrapper,
131
+ .solara-data-table--scrollable .v-data-table__wrapper>table,
132
+ .solara-data-table--scrollable .v-data-table__wrapper>table thead,
133
+ .solara-data-table--scrollable .v-data-table__wrapper>table thead * {
134
+ background-color: inherit;
135
+ }
136
+
137
+ /* prevent checkboxes overlaying the table header */
138
+ .solara-data-table--scrollable .v-data-table__wrapper>table thead {
139
+ position: relative;
140
+ z-index: 1;
141
+ }
142
+
143
+ /* avoid margins to collapse, to avoid a white background */
144
+ .solara-data-table-column-header-sheet {
145
+ overflow: auto;
146
+ }
147
+
148
+ .solara-data-table.v-data-table th,
149
+ .solara-data-table.v-data-table td {
150
+ padding-left: 4px;
151
+ padding-right: 0;
152
+ }
153
+
154
+ .v-data-table .solara-data-table-menu {
155
+ opacity: 0;
156
+ transition: opacity 0.5s;
157
+ }
158
+
159
+ .v-data-table th:hover .solara-data-table-menu,
160
+ .v-data-table td:hover .solara-data-table-menu {
161
+ opacity: 1;
162
+ }
163
+
164
+ .solara-data-table__viewport {
165
+ overflow-x: auto;
166
+ width: 100%;
167
+ max-height: 100%;
168
+ }
169
+
170
+ .solara-data-table.v-data-table,
171
+ .solara-data-table.v-data-table table {
172
+ max-width: unset;
173
+ width: unset;
174
+ }
175
+ </style>
@@ -88,3 +88,8 @@ div.highlight {
88
88
  .solara-image {
89
89
  cursor: unset !important;
90
90
  }
91
+
92
+
93
+ .jp-OutputArea-prompt {
94
+ display: none;
95
+ }
@@ -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.6.1-py2.py3-none-any.whl", keep_going=True)
122
+ await micropip.install("/wheels/solara-1.7.0-py2.py3-none-any.whl", keep_going=True)
123
123
  import solara
124
124
 
125
125
  el = solara.Warning("lala")
@@ -38,7 +38,6 @@ a:link {
38
38
  color: var(--color-primary);
39
39
  }
40
40
 
41
- pre,
42
41
  .jp-RenderedHTMLCommon pre {
43
42
  background-color: var(--color-grey-light);
44
43
  display: block;
@@ -5,18 +5,12 @@
5
5
 
6
6
  from typing import Any, Dict, Optional, cast
7
7
 
8
- from solara.website.utils import apidoc
8
+ import plotly
9
9
 
10
- try:
11
- import vaex
12
- except ImportError:
13
- vaex = None
14
10
  import solara
11
+ from solara.website.utils import apidoc
15
12
 
16
- if vaex is not None:
17
- df = vaex.datasets.titanic()
18
- else:
19
- df = None
13
+ df = plotly.data.iris()
20
14
 
21
15
 
22
16
  @solara.component
@@ -32,21 +26,19 @@ def Page():
32
26
 
33
27
  column_actions = [solara.ColumnAction(icon="mdi-sunglasses", name="User column action", on_click=on_action_column)]
34
28
  cell_actions = [solara.CellAction(icon="mdi-white-balance-sunny", name="User cell action", on_click=on_action_cell)]
35
- with solara.Div() as main:
36
- solara.MarkdownIt(
37
- f"""
38
- ## Demo
29
+ solara.MarkdownIt(
30
+ f"""
31
+ ## Demo
39
32
 
40
- Below we show display the titanic dataset, and demonstrate a user colum and cell action. Try clicking on the triple icon when hovering
41
- above a column or cell. And see the following values changes:
33
+ Below we show display the titanic dataset, and demonstrate a user colum and cell action. Try clicking on the triple icon when hovering
34
+ above a column or cell. And see the following values changes:
42
35
 
43
- * Column action on: `{column}`
44
- * Cell action on: `{cell}`
36
+ * Column action on: `{column}`
37
+ * Cell action on: `{cell}`
45
38
 
46
- """
47
- )
48
- solara.DataFrame(df, column_actions=column_actions, cell_actions=cell_actions)
49
- return main
39
+ """
40
+ )
41
+ solara.DataFrame(df, column_actions=column_actions, cell_actions=cell_actions)
50
42
 
51
43
 
52
44
  __doc__ += apidoc(solara.DataFrame.f) # type: ignore
@@ -34,6 +34,13 @@ def Page():
34
34
  outlined=outlined,
35
35
  icon=icon,
36
36
  )
37
+ solara.Warning(
38
+ f"This is solara.Warning(label='...', text={text}, dense={dense}, outlined={outlined}, icon={icon})",
39
+ text=text,
40
+ dense=dense,
41
+ outlined=outlined,
42
+ icon=icon,
43
+ )
37
44
  return main
38
45
 
39
46
 
@@ -0,0 +1,57 @@
1
+ import os
2
+
3
+ import ipyvuetify as v
4
+ import ipywidgets
5
+ import traitlets
6
+
7
+ __all__ = [
8
+ "VegaLite",
9
+ "Navigator",
10
+ "GridLayout",
11
+ "HTML",
12
+ "watch",
13
+ ]
14
+
15
+
16
+ class VegaLite(v.VuetifyTemplate):
17
+ template_file = os.path.realpath(os.path.join(os.path.dirname(__file__), "vue/vegalite.vue"))
18
+ spec = traitlets.Dict().tag(sync=True)
19
+ listen_to_click = traitlets.Bool(False).tag(sync=True)
20
+ listen_to_hover = traitlets.Bool(False).tag(sync=True)
21
+ on_click = traitlets.traitlets.Callable(None, allow_none=True)
22
+ on_hover = traitlets.traitlets.Callable(None, allow_none=True)
23
+
24
+ def vue_altair_click(self, *args):
25
+ if self.on_click:
26
+ self.on_click(*args)
27
+
28
+ def vue_altair_hover(self, *args):
29
+ if self.on_hover:
30
+ self.on_hover(*args)
31
+
32
+
33
+ class Navigator(v.VuetifyTemplate):
34
+ template_file = os.path.realpath(os.path.join(os.path.dirname(__file__), "vue/navigator.vue"))
35
+ location = traitlets.Unicode(None, allow_none=True).tag(sync=True)
36
+
37
+
38
+ class GridLayout(v.VuetifyTemplate):
39
+ template_file = os.path.join(os.path.dirname(__file__), "vue/gridlayout.vue")
40
+ gridlayout_loaded = traitlets.Bool(False).tag(sync=True)
41
+ items = traitlets.Union([traitlets.List(), traitlets.Dict()], default_value=[]).tag(sync=True, **ipywidgets.widget_serialization)
42
+ grid_layout = traitlets.List(default_value=[]).tag(sync=True)
43
+ draggable = traitlets.CBool(True).tag(sync=True)
44
+ resizable = traitlets.CBool(True).tag(sync=True)
45
+
46
+
47
+ class HTML(v.VuetifyTemplate):
48
+ template_file = os.path.realpath(os.path.join(os.path.dirname(__file__), "vue/html.vue"))
49
+ tag = traitlets.Unicode("div").tag(sync=True)
50
+ attributes = traitlets.Dict().tag(sync=True)
51
+ unsafe_innerHTML = traitlets.Unicode(None, allow_none=True).tag(sync=True)
52
+
53
+
54
+ def watch():
55
+ import ipyvue
56
+
57
+ ipyvue.watch(os.path.realpath(os.path.dirname(__file__) + "/vue"))