Repository navigation
Conversation
Vondry
force-pushed
the
refactor/vue3-composition-api
branch
3 times, most recently
from
July 6, 2026 17:52
5304b92 to
36f5bda
Compare
Vondry
marked this pull request as ready for review
July 7, 2026 11:49
Vondry
force-pushed
the
refactor/vue3-composition-api
branch
from
July 7, 2026 19:11
4f7e067 to
3778f43
Compare
This was referenced Jul 8, 2026
Vondry
force-pushed
the
refactor/vue3-composition-api
branch
from
July 9, 2026 09:29
b420363 to
ccafced
Compare
Member
|
While I do appreciate the work done, this is simply not reviewable in it's current form. I need to ask you to split the work done in separate PRs to be able to do something with this. My suggestion for PRs would be:
And possibly even more. Keep it simple, keep it reviewable. |
Vondry
force-pushed
the
refactor/vue3-composition-api
branch
from
October 25, 2026 09:52
ccafced to
c71af07
Compare
This was referenced Oct 26, 2026
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR moves the Bolt admin frontend to Vue 3 (Composition API,
<script setup lang="ts">), Pinia and TypeScript. It builds on the groundwork already in 6.2: the TypeScript setup, the ESLint flat config and the Vitest suite.Main changes
Vue 3 migration
assets/js/app/are rewritten with<script setup lang="ts">.mixins/valuefield mixin is replaced by theuseFieldValuecomposable.mittevent bus replaces$root.$emitfor keeping titles and slugs in sync. The payloads are scoped, so a Text field only drives the Slug fields generated from it.vue-multiselect3,vuedraggable4,vue-trumbowyg4 andvue-flatpickr-component12. The Markdown field now driveseasymdedirectly instead of going throughvue-easymde.bolt,editor,listing,sidebar,toolbar) are now TypeScript and boot withcreateApp().Shared utilities
serverFileBrowser.tsholds the server file/image browser modal flow shared by the File and Image fields.upload.tspulls the error message out of a failed upload, preferring the server's message over Axios's generic one.debouncehelper, and shared types for the editor, listing and sidebar.Build tooling
vue-loader17 and thets-loaderfor.tsfiles and SFCs. The webpack config is now ESM (webpack.config.mjs).webpack-cli7,sass-loader17 andpostcss-preset-env11.vuex,vue-easymde,vue-template-compilerand@vitejs/plugin-vue2.Type checking and linting
npm run typechecknow runsvue-tsc --noEmit, so the SFCs are type-checked along with the.tsfiles, under 6.2's strict compiler settings.flat/recommended. typescript-eslint now covers the SFCs too, and@typescript-eslint/no-explicit-anyis an error.eslint-plugin-sonarjsandeslint-plugin-vuejs-accessibility. Rule exceptions are kept only where existing UI behaviour needs them.vue/no-mutating-propsfor File/Image/Select, andno-useless-assignment.Accessibility
aria-labels and screen-reader text are added or fixed across the editor fields, listing, toolbar and sidebar.<label>elements that labelled no input are now plain text. The Checkbox label now points at the input'sid.Backend
ClearCacheControllerandExtensionsControllernow extendTwigAwareController.bolt,publicandfilesasset packages are now declared inconfig/packages/assets.yaml.labelsas a bound prop, and the markdown field bindsmodel-value.Unit tests
6.2's Vitest suite was written against the Vue 2 components as a baseline for this migration. It is ported here rather than replaced:
@vue/test-utils2 (props,global: { plugins, stubs },unmount()).modelValuecontracts.it.skip/it.todothat was waiting on this branch is now a real test. Tests that pinned Vue 2 defects fixed here now assert the fixed behaviour.serverFileBrowser,useFieldValue, and an end-to-end Slug/Text test.Bug fixes
Editor fields
0stays selected.slim-sidebarvalue in localStorage now falls back to a wide sidebar. Without that, a Vue 3 setup error would have removed the sidebar entirely.Listing
Other
Toolbar.createMenu,Filter.enableSorting,SelectBox.orderandRow.sorting.Known issue, unchanged
null, not''). A test pins this.Checks
npm run lint,npm run stylelint,npm run typecheck,npm run test:unit:coverageandnpm run build.vendor/bin/phpstan analyse,vendor/bin/ecs check src,bin/console lint:yaml config --parse-tagsandbin/console lint:twig templates.