Skip to content

feat: support ipyvuetify 1 and 3 - #1193

Merged
maartenbreddels merged 32 commits into
masterfrom
codex/ipyvuetify3-button
Aug 4, 2026
Merged

feat: support ipyvuetify 1 and 3#1193
maartenbreddels merged 32 commits into
masterfrom
codex/ipyvuetify3-button

Conversation

@maartenbreddels

Copy link
Copy Markdown
Contributor

Summary

  • port the Python/component changes from feat: add support for ipyvuetify 3 #1163 while retaining ipyvuetify 1.x behavior
  • add explicit, mypy-pruned ipyvuetify 1/3 branches and a second v3 mypy configuration
  • add version-specific Vue templates where Vuetify 2 and 3 markup is structurally different
  • support both Vue 2 and Vue 3 in the Solara server widget bridge, lifecycle hooks, themes, website components, and enterprise avatar menu

Why

PR #1163 moves Solara wholesale to Vuetify 3 and a 2.x release. This branch keeps Solara 1.x compatible with both ipyvuetify 1.x and 3.x so the migration can be shipped and tested incrementally.

Validation

  • full mypy pass against ipyvuetify 1.x: 340 source files
  • full mypy pass against ipyvuetify 3.x: 340 source files
  • focused compatibility suite: 42 passed under each major
  • real Solara browser smoke test under both majors, including stateful Button interaction, inputs, Select, Slider, FileBrowser, SQL editor, and DataTable
  • pre-commit hooks passed on all three signed commits

Notes

Strict component argument checking uses the companion Reacton typing branch codex/fix-implements-mypy-signature. Runtime compatibility does not depend on that branch, but merging/releasing it is needed for clean CI to enforce the restored signatures.

Packaging/version bumps, v3-only dependency minimums, integration selector rewrites, and v3 snapshots from #1163 are intentionally not included in this first 1.x-compatible pass.

@maartenbreddels
maartenbreddels force-pushed the codex/ipyvuetify3-button branch from 725125d to 5535328 Compare July 28, 2026 17:51
@maartenbreddels
maartenbreddels marked this pull request as ready for review July 28, 2026 19:32
maartenbreddels and others added 27 commits August 4, 2026 13:50
---
updated-dependencies:
- dependency-name: shogo82148/actions-setup-redis
  dependency-version: 1.51.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Vuetify 3 matches group items by value and falls back to the item index
when a button has none, so the value-based v_model never selected
anything and clicking wrote an index into the user's reactive. Vuetify 2
keeps using the index, so the buttons are built unchanged there.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The unit matrix has no ipyvuetify dimension and every lock pins 1.x, so
the IPYVUETIFY_V3 branches were never executed in CI - the toggle button
regression sat in a unit test that could not turn red. Starts with the
plain unit run; doctests and solara 2.0 mode can follow.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The alert was gated on vue3, but on vuetify 2 it is the only indicator
left once the refresh dialog is dismissed (that sets needsRefresh=false,
cancelAutoRefresh=true), so a disconnected app showed nothing at all.
Vuetify 2 wants border=left, vuetify 3 border=start.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The vue3 job covered one of the thirty integration files, so almost
nothing was verified in a browser on vuetify 3. Adds the router, error,
menu and date input suites; the list grows as they stay green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The vue3 job covered one of the thirty integration files, so almost
nothing was verified in a browser on vuetify 3. Adds the error, menu and
router suites, which pass; the date input suite and the docs router test
stay out until the vuetify 3 gaps behind them are fixed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The restored alert used the vue3 wording, which duplicates the text of
the vuetify 2 refresh dialog - two elements with the same message, which
also breaks the strict locator in the reconnect integration test.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…on vuetify 3

The options trait went from Any to Dict, so options=None raised and the
vuetify 2 default page size changed from its own 10 to 20; only vuetify
3 needs the shaped object. The pivot table settings dialog kept the
vuetify 2 activator binding on vuetify 3, where the wrapper needs
v_bind=x.props like the dataframe card already does.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Probed the full suite on ipyvuetify 3: only nine tests fail (the date
picker, four api docs pages, the docs router/routes listings and the
reconnect dialog), so run everything except those instead of the four
files picked by hand. The vue3 lock also still had ipyreact 0.6.0, which
loses module hot reload after a kernel restart.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Running the whole suite there needs -n 2, which the job cannot parse
without xdist.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Running the whole suite on ipyvuetify 3 leaves 109 passing tests and two
failures that pass on ipyvuetify 1: the auth0 login flow and ipyreact
module hot reload (with ipyreact 0.6.1, so not the stale module bug).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Vuetify 3 registers list groups and list items in one id namespace and
rejects duplicates ('Multiple nodes with the same ID'), which broke the
docs navigation: a section's overview child has the same path as its
group. Prefix the group ids, which also re-enables the six documentation
integration tests on ipyvuetify 3.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The duplicate list ids are fixed, but the documentation pages still fail
there for a reason that is not diagnosed yet, so put them back on the
list instead of leaving the job red.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
first_day_of_week is a vuetify 3 date picker prop too and style_ is a
base trait, so dropping both there silently ignored two documented
arguments. Only type= is gone in vuetify 3; view_mode is the closest
thing and stays.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Vuetify 3 does not set role=menu on the overlay content, so the
assertions could never match there even when the menu opens.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Vuetify 3 labels each day button with the full date, so its accessible
name is never the day number the test looks for.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The vuetify 3 picker covers the point the outside-click used, and its
menu has no scrim, so dismiss it with the keyboard there. Vuetify 3 also
renders a second, aria-hidden label, which made the text assertion
ambiguous.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The single date picker passes there now; the range variant still fails
because selecting the second date does not clear the 'select two dates'
label, which needs a look at how the vuetify 3 picker reports multiple
values.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Lists the behavior changes that are not visible from the title, so they
do not surprise anyone on ipyvuetify 1.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Review follow-ups: both vuetify 2 readers now guard the global like the
vuetify 3 bundle already does, the date test keeps its strict label
locator on vuetify 2, and the changelog covers the theme colors fix, the
solara.Style cleanup and the vaex alert restyle.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@maartenbreddels
maartenbreddels force-pushed the codex/ipyvuetify3-button branch from fc317fb to 867fe5d Compare August 4, 2026 11:52
@maartenbreddels
maartenbreddels temporarily deployed to codex/ipyvuetify3-button - solara-stable PR #1193 August 4, 2026 11:52 — with Render Destroyed
@maartenbreddels
maartenbreddels merged commit d4a1be0 into master Aug 4, 2026
35 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants