From 6e9215a9d369182bbe11db35923df7baa5f2239b Mon Sep 17 00:00:00 2001 From: Mario Buikhuizen Date: Fri, 6 Mar 2026 15:57:14 +0100 Subject: [PATCH 1/5] export VuetifyPlugin --- solara/server/static/main-vuetify.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/solara/server/static/main-vuetify.js b/solara/server/static/main-vuetify.js index d4bce71480..4ee292be22 100644 --- a/solara/server/static/main-vuetify.js +++ b/solara/server/static/main-vuetify.js @@ -115,6 +115,9 @@ async function solaraInit(mountId, appName) { console.log('solara init', mountId, appName); define("vue", [], () => Vue); define("vuetify", [], () => Vuetify); + if (typeof vuetifyPlugin !== "undefined") { + define("solara-vuetify-plugin", [], () => ({ vuetifyPlugin })); + } cookies = getCookiesMap(document.cookie); const searchParams = new URLSearchParams(window.location.search); let kernelId = searchParams.get('kernelid') || generateUuid() From af2721279f5fbd7cdfa8f21e83a94fb28765854e Mon Sep 17 00:00:00 2001 From: Mario Buikhuizen Date: Fri, 6 Mar 2026 16:47:40 +0100 Subject: [PATCH 2/5] publish on github releases --- .github/workflows/test.yaml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 04c65b0726..9da8cd901b 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -731,6 +731,7 @@ jobs: runs-on: ubuntu-latest permissions: id-token: write # this permission is mandatory for trusted publishing + contents: write steps: - uses: actions/checkout@v6 @@ -765,6 +766,21 @@ jobs: - name: Test import solara-enterprise run: python -c "import solara_enterprise" + - name: Publish wheels to GitHub Release (vue3-dev) + if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository + env: + GH_TOKEN: ${{ github.token }} + run: | + tag="vue3-dev" + gh release view "$tag" --repo "${{ github.repository }}" >/dev/null 2>&1 || gh release create "$tag" --repo "${{ github.repository }}" --title "$tag" --notes "Auto-updated Vue 3 dev builds" --prerelease --target "${{ github.sha }}" + gh release upload "$tag" \ + dist/*.whl \ + packages/solara-meta/dist/*.whl \ + packages/solara-server/dist/*.whl \ + packages/pytest-ipywidgets/dist/*.whl \ + --repo "${{ github.repository }}" \ + --clobber + - name: Publish solara-meta to PyPI if: startsWith(github.event.ref, 'refs/tags/v') env: From d755fecbbbd9d9ebea022323455dfde3fe9ad9c5 Mon Sep 17 00:00:00 2001 From: Mario Buikhuizen Date: Tue, 10 Mar 2026 10:10:16 +0100 Subject: [PATCH 3/5] use object storage for dev release --- .github/workflows/test.yaml | 55 ++++++++++++++++++++++++++----------- pyproject.toml | 4 +-- 2 files changed, 41 insertions(+), 18 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 9da8cd901b..9512cfa58d 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -107,6 +107,45 @@ jobs: packages/solara-vuetify-app/dist packages/solara-vuetify3-app/dist + - name: Publish dev wheels to object storage + if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository + env: + AWS_ACCESS_KEY_ID: ${{ secrets.S3_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_SECRET_ACCESS_KEY }} + AWS_REGION: nbg1 + AWS_ENDPOINT_URL_S3: https://nbg1.your-objectstorage.com + S3_BUCKET: ipyvue3-packages + run: | + python -m pip install --upgrade awscli + + aws s3 cp dist/ "s3://${S3_BUCKET}/packages/solara/" \ + --recursive \ + --exclude "*" \ + --include "*.whl" \ + --endpoint-url "$AWS_ENDPOINT_URL_S3" \ + --region "$AWS_REGION" + + aws s3 cp packages/solara-meta/dist/ "s3://${S3_BUCKET}/packages/solara-meta/" \ + --recursive \ + --exclude "*" \ + --include "*.whl" \ + --endpoint-url "$AWS_ENDPOINT_URL_S3" \ + --region "$AWS_REGION" + + aws s3 cp packages/solara-server/dist/ "s3://${S3_BUCKET}/packages/solara-server/" \ + --recursive \ + --exclude "*" \ + --include "*.whl" \ + --endpoint-url "$AWS_ENDPOINT_URL_S3" \ + --region "$AWS_REGION" + + aws s3 cp packages/pytest-ipywidgets/dist/ "s3://${S3_BUCKET}/packages/pytest-ipywidgets/" \ + --recursive \ + --exclude "*" \ + --include "*.whl" \ + --endpoint-url "$AWS_ENDPOINT_URL_S3" \ + --region "$AWS_REGION" + code-quality: runs-on: ubuntu-latest strategy: @@ -731,7 +770,6 @@ jobs: runs-on: ubuntu-latest permissions: id-token: write # this permission is mandatory for trusted publishing - contents: write steps: - uses: actions/checkout@v6 @@ -766,21 +804,6 @@ jobs: - name: Test import solara-enterprise run: python -c "import solara_enterprise" - - name: Publish wheels to GitHub Release (vue3-dev) - if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository - env: - GH_TOKEN: ${{ github.token }} - run: | - tag="vue3-dev" - gh release view "$tag" --repo "${{ github.repository }}" >/dev/null 2>&1 || gh release create "$tag" --repo "${{ github.repository }}" --title "$tag" --notes "Auto-updated Vue 3 dev builds" --prerelease --target "${{ github.sha }}" - gh release upload "$tag" \ - dist/*.whl \ - packages/solara-meta/dist/*.whl \ - packages/solara-server/dist/*.whl \ - packages/pytest-ipywidgets/dist/*.whl \ - --repo "${{ github.repository }}" \ - --clobber - - name: Publish solara-meta to PyPI if: startsWith(github.event.ref, 'refs/tags/v') env: diff --git a/pyproject.toml b/pyproject.toml index 5636b9ddd6..acccd17bbd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,8 +17,8 @@ packages = [ dependencies = [ "reacton>=1.9", "ipywidgets>=7.7", - "ipyvuetify>=1.6.10", - "ipyvue>=1.9.0", +# "ipyvuetify>=1.6.10", +# "ipyvue>=1.9.0", "requests", "humanize", ] From 9cd02271e42267d8bf6591bea639f4eb3b63fe61 Mon Sep 17 00:00:00 2001 From: Mario Buikhuizen Date: Tue, 10 Mar 2026 12:40:41 +0100 Subject: [PATCH 4/5] fix CI issue with pixelmatch --- packages/pytest-ipywidgets/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pytest-ipywidgets/pyproject.toml b/packages/pytest-ipywidgets/pyproject.toml index 13921e3295..748a6d645b 100644 --- a/packages/pytest-ipywidgets/pyproject.toml +++ b/packages/pytest-ipywidgets/pyproject.toml @@ -19,7 +19,7 @@ dependencies = [ "playwright", "pytest-playwright", "pillow", - "pixelmatch", + "pixelmatch==0.3.0", ] [project.urls] From 215440b8d3db08dc7211c04f88bba0934c422814 Mon Sep 17 00:00:00 2001 From: Mario Buikhuizen Date: Wed, 22 Apr 2026 12:49:19 +0200 Subject: [PATCH 5/5] Fix FileBrowser list item alignment --- solara/components/file_list_widget.vue | 37 +++++++++++++++++--------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/solara/components/file_list_widget.vue b/solara/components/file_list_widget.vue index 47c4301022..c932a63a9f 100644 --- a/solara/components/file_list_widget.vue +++ b/solara/components/file_list_widget.vue @@ -10,17 +10,16 @@ :key="name + '|' + is_file" @click.stop="clicked = { name, is_file }" @dblclick="double_clicked = { name, is_file }" - :class="(clicked && clicked.name == name) ? 'solara-file-list-selected': ''" + :class="['solara-file-list-item', (clicked && clicked.name == name) ? 'solara-file-list-selected': '']" > - - {{ name === '..' ? 'mdi-keyboard-backspace' : is_file ? 'mdi-file-document' : 'mdi-folder' }} - - - +
+
+ {{ name === '..' ? 'mdi-keyboard-backspace' : is_file ? 'mdi-file-document' : 'mdi-folder' }} +
{{ name }} - {{ size }} - +
@@ -60,19 +59,31 @@ module.exports = { } -.solara-file-list .v-list-item__icon, -.solara-file-list .v-list-item__list { - margin-top: 0; - margin-bottom: 0; +.solara-file-list .solara-file-list-row { + align-items: center; + display: flex; + min-height: 28px; + width: 100%; } -.v-application--is-ltr .solara-file-list .v-list-item__icon { +.solara-file-list .solara-file-list-icon { + align-items: center; + display: flex; + flex: 0 0 32px; + justify-content: center; margin-right: 8px; } +.solara-file-list .solara-file-list-item.v-list-item, .solara-file-list .v-list-item { height: 28px; min-height: 0; - padding-left: 0; + padding: 0; + padding-inline-end: 0; + padding-inline-start: 0; +} + +.solara-file-list .v-list-item-title { + line-height: 28px; }