Skip to content

Support ipyvuetify 3.0 - #263

Merged
maread99 merged 1 commit into
mainfrom
claude/modest-planck-kkxxym
Sep 3, 2026
Merged

Support ipyvuetify 3.0#263
maread99 merged 1 commit into
mainfrom
claude/modest-planck-kkxxym

Conversation

@maread99

@maread99 maread99 commented Aug 27, 2026

Copy link
Copy Markdown
Owner

Crafted with Claude. Manually revised and fully reviewed.

Changes to support ipyvuetify 3.0.0 (i.e. Vuetify 2 -> Vuetify 3). The project will no longer support earlier versions of ipyvuetify.

Also updates all dependencies.

Vuetify 3 migration

The important characteristic of this migration is that most of it failed silently. ipyvuetify raises on some removed arguments (it defines them as explicitly unavailable), but others are simply dropped — not a trait, not synced, no warning, no error, the setting just never applied. The removed css classes behave the same way: they match nothing. Almost every bug below is of that kind, which is why none was caught by the test suite and several only surfaced on review.

The changes, by category:

Removed components. TabsControl subclassed the removed pairing of v.Tabs + v.TabItem. It is now a v.Sheet composing a v.Tabs and a v.TabsWindow, kept in sync via jslink.

Removed arguments, each replaced: dark (now theme), the tooltips' bottom / left / right (now location), the overlay's value, absolute and color (now the model, contained and scrim), the tabs' centered (now align_tabs), v.Icon's small (now size), and the flex layout arguments of the old grid system (now utility classes). The tabs' slider_size was dropped without replacement, so Vuetify's 2px slider is now accepted.

Renamed classes. Colour and typography classes converted to Vuetify 3 syntax — bg- / text- prefixed and hyphenated (grey darken-4 -> bg-grey-darken-4, headline -> text-h5). Note the conversion differs by context: as a class a colour needs the bg-/text- prefix, as a component color argument it needs hyphenating only.

Icons. The font awesome names converted to their MDI equivalents, ipyvuetify 3 bundling only the MDI webfont.

Other fixes found along the way

  • Fixed a longstanding bug in .pre-commit-config.yaml: the astral-sh/ruff-pre-commit entry was missing its - repo: list marker, so it was silently merging into and overriding the pre-commit-hooks entry — meaning check-yaml, end-of-file-fixer and trailing-whitespace had never actually run. Running them accounts for the whitespace-only revisions to AGENTS.md, README.md, LICENSE.txt, pytest.ini, .gitignore and .claude/settings.json.
  • Added CPY001 and PLR0917 to ruff.toml's ignore list — both newly promoted from preview to stable in ruff 0.16, and addressing them (copyright headers repo-wide; reworking many function signatures) is out of scope here. Follows the existing convention for similar rules (PLR0913, S101).
  • Fixed the RUF036 (None not at end of a type union) violations directly, in utils/list_utils.py.

Follow-up, not addressed here

  • utils/ipyvuetify_utils.py still builds tooltips with the vuetify 2 activator idiom (v_slots with v_on="ttip.on"). Tooltips do render and no console warning is raised — vuetify 3's overlay attaches its own activator listeners — so this is inert rather than broken.
  • The audit above is strong on removed apis but blind to those that still exist whilst having changed meaning (the overlay's absolute was of that kind, found only by suspecting it). That category cannot be assumed exhausted.

_Crafted with Claude Code
Manually revised and fully reviewed.

@maread99 maread99 added the dependencies Pull requests that update a dependency file label Aug 27, 2026 — with Claude
Routine dependency update. The lock upgrade brought a major bump of
ipyvuetify, 1.11.3 to 3.0.0 (i.e. vuetify 2 to vuetify 3), which
required revising the guis to support it.

Dependencies and tooling:
- upgraded `uv` and the lock file to the latest versions of all
  dependencies.
- `ipyvuetify` now constrained to '>=3'. `v.TabsWindow` and
  `v.TabsWindowItem` do not exist before ipyvuetify 3 and are used
  unconditionally by `TabsControl`, which every price chart gui
  creates, so any gui would otherwise raise on ipyvuetify 1. NB there
  is no ipyvuetify 2, releases go from 1.x to 3.x.
- updated the pinned versions of the GitHub Actions and the
  ruff pre-commit hook.

Vuetify 3 migration. Note that whilst ipyvuetify raises on some
removed arguments, others are silently dropped - no error is raised
and the setting is simply not applied - as were the removed css
classes. Most of what follows failed silently:

- `TabsControl` no longer subclasses the removed pairing of `v.Tabs`
  and `v.TabItem`. It is now a `v.Sheet` composing a `v.Tabs` and a
  `v.TabsWindow`, kept in sync via `jslink`.
- bound the tabs, the dialog and the loading overlay via the `v_model`
  trait. ipyvuetify only two-way binds a component's 'model-value' via
  `v_model`; `model_value` is passed through as a one-way prop with no
  listener, so client-side changes are never reflected back.
- conveyed tab selection via that trait rather than the 'change' event
  that vuetify 2's tabs raised, without which the selector was neither
  enabled on selecting the selector tab nor removed on returning to
  the cursor tab.
- replaced the arguments vuetify 3 removed: `dark` (now `theme`), the
  tooltips' `bottom` / `left` / `right` (now `location`), the
  overlay's `absolute` and `color` (now `contained` and `scrim`), the
  tabs' `centered` (now `align_tabs`), `v.Icon`'s `small` (now `size`)
  and the flex layout arguments (now utility classes). The tabs'
  `slider_size` was dropped without replacement, vuetify's 2px slider
  now being taken.
- converted the color and typography classes to vuetify 3 syntax,
  'bg-' / 'text-' prefixed and hyphenated. NB a background class also
  sets a contrasting text color, hence not set on the tabs.
- converted the font awesome icon names to their MDI equivalents,
  ipyvuetify 3 bundling only the MDI webfont.
- set 'flex-grow-0' on the containers placed directly in the gui box,
  vuetify styling `v.Layout` as 'flex: 1 1 auto' such that they
  otherwise grew to absorb all the box's spare vertical space.

Other fixes:
- fixed @.pre-commit-config.yaml, in which the ruff entry was missing
  its list marker such that it was overriding, rather than adding to,
  the `pre-commit-hooks` entry - the hooks of which had never run.
  Running them accounts for the whitespace-only revisions to a number
  of files.
- ignored `CPY001` and `PLR0917`, promoted from preview to stable in
  ruff 0.16, and fixed the `RUF036` violations.

Co-Authored-By: Marcus Read <marcusaread@gmail.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MhhjQXPUBYBvTtfZXFTgi8
@maread99
maread99 force-pushed the claude/modest-planck-kkxxym branch from 27e4699 to 95c40b0 Compare September 3, 2026 15:43
@maread99 maread99 changed the title Update Dependencies Aug 27 (auto) Support ipyvuetify 3.0 Sep 3, 2026
@maread99 maread99 added the CI Continuous Integration label Sep 3, 2026
@maread99
maread99 merged commit da23b5f into main Sep 3, 2026
8 checks passed
@maread99
maread99 deleted the claude/modest-planck-kkxxym branch September 3, 2026 16:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CI Continuous Integration dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants