Install
Works with Drupal: ^11.2Using Composer to manage Drupal site dependencies
Alternative installation files
Release notes
This release adds page region and global layout management through the internal HTTP API for Canvas CLI and Workbench, strengthens autosave conflict detection, preview stability, component data normalization, image rendering, deleted component dependency handling, and invalid block plugin safeguards.
Contributors (42)
AkhilBabu, AnjaliPrasannan, LeventeB, NarendraR, akhil babu, amangrover90, balintbrews, bnjmnm, bsnodgrass, chandu7929, effulgentsia, f.mazeikis, folders, hooroomoo, isholgueras, jessebaker, joshua1234511, jucs7, justafish, kmwarboy, kunal.sachdev, larowlan, lauriii, lbesenyei, longwave, marcus_johansson, mglaman, mherchel, narendrar, nickolaj, penyaskito, phenaproxima, rikki_iki, sapnil_biswas, shubham.prakash, tedbow, tim.plunkett, traviscarden, utkarsh_33, wes.congruityworks.com, wimleers, wotnak
Changelog
Issues: 44 issues resolved.
Changes since 1.4.1 (compare):
- chore(Internal HTTP API): #3591621 Allow Canvas CLI pushes when a page has auto-save data
- chore: #3591622 Update JS packages
- chore(AI): #3555239 Canvas AI: Make chat history length configurable
- chore: #3588438 Rename `LinkedPropSource` to `LinkedProp` and `LinkedPropSourceInterface` to `LinkablePropSourceInterface`
- fix: #3576410 Canvas' fix for the core bug in TextItemBase::applyDefaultValue() itself caused a bug
- chore(CI): #3591196 ci: Update Drupal core pinned security versions in CI for gitlab jobs
- chore(Shape matching): #3591028 Consistently use JSON-Schema Draft-07 dialect in frontend and backend by updating `justinrainbow/json-schema` to ^6.8.0
- fix: #3591072 getFallbackCompiledJs() returns malformed JS
- chore(Project management): #3588837 phpcs: Organize PHP imports alphabetically to reduce merge conflict frequency
- fix(Component sources): #3580070 Detect and refuse invalid/lying block plugins (with invalid default configuration), instead of allowing them to crash Canvas
- chore(Project management): #3591245 DX: Introduce `composer run lint` that runs PHPCS + PHPStan (sibling to `npm run lint`)
- chore(Project management): #3591249 DX: Faster feedback loop: stop running `phpstan` twice for local development: ~30s → ~15s, only run twice on CI instead (currently 4!)
- revert: #3580919 Align Folder Drag-and-Drop Behavior with Design Specs
- fix: #3582390 Canvas AI: Allow "verbose_context_for_orchestrator" to be passed in user input
- fix(Config management): #3591130 Deleted (code) components can still be referenced by folders: dependency handling is missing
- chore(Project management): #3591594 Gitlab CI broken because of upstream Symfony security releases that are only available in the `drupal/core-recommended`'s development branch, not in tags → adopt `COMPOSER_NO_BLOCKING`
- feat(Internal HTTP API): #3589801 Expose HTTP API for managing Page Regions
- feat(Page builder): #3585452 Create a preview mode for non-default languages
- task: #3562896 Manage props/page data forms with react-hook-form
- chore(Project management): #3591597 phpcs: Enforce consistent placement of `cspell:ignore` comments to reduce merge conflict frequency
- fix: #3587024 Handle change of cardinality (fewer/more values allowed): upgrade component instances with more values than cardinality allows by dropping those values (acceptable data loss)
- chore(Component sources): #3548297 DX: rename `GeneratedFieldExplicitInputUxComponentSourceBase` → `JsonSchemaPropsComponentSourceBase`
- task(Symmetric Translations): #3590572 Indicate translation availability per language in the Canvas language switcher dropdown
- feat(CLI Tool): #3576837 Manage the global layout (aka regions) within Canvas Workbench
- fix(AI): #3590307 revert the code in 3572865
- fix(Page builder): #3588074 Stabilize Canvas preview for in-place vh updates and tall content
- fix: #3591401 `video.spec.ts:21` is flaky: wait for Drupal's auto-upload behavior to attach
- task: #3591374 Add machine name to JsComponent::renderComponent() output
- fix(Symmetric Translations): #3591585 Canvas editor does not support language-prefixed URLs, breaks when accessed as /[langcode]/canvas/...
- bug(Internal HTTP API): #3538825 ApiExceptionSubscriber prevents ExceptionLoggingSubscriber from running
- chore(Project management): #3591606 Automate review using PHPStan: architecture test for `JsonSchemaPropsComponentSourceBase` + `(Js|SingleDirectory)Component`
- task(AI): #3591516 Canvas AI: Restrict component catalog to canvas_test_sdc components when canvas_ai_agents_test is installed
- revert(AI): #3586584 Code Component escaped code when creating with Canvas AI
- fix: #3550869 Add next larger srcset candidate in canvas:image to prevent browser upscaling
- chore(Project management): #3591611 Statically enforce that `CanvasConfigUpdater` `Component` update paths are wired into `::preSave()` (and ship a post_update)
- chore(Project management): #3579681 Add composer run install-dev-deps to CONTRIBUTING.md
- feat(CLI Tool): #3591610 Clean up output of Canvas Create
- fix(Data model): #3591607 Canvas does not properly cast typed data, which results in bad normalization when computing component version hashes
- Resolve #3589076 "Detect conflicts during autosave polling"
- fix: Follow-up #3591585 Canvas editor does not support language-prefixed URLs, breaks when accessed as /[langcode]/canvas/...
- chore(Theme builder): #3590553 Make getPageData() and getSiteData() SSR-compatible
- fix(Symmetric Translations): #3591584 Publishing a canvas_page via auto-save API drops all non-default-language translations
- fix: #3591605 [CI] Adding dev dependencies upgrades Drupal core minor
- fix: #3591609 `undo-redo.cy.js:15` is flaky and never asserted undo/redo: re-query the swapping preview iframe