What's Changed
๐ Notable Changes
- User group: add description to user group (closes #14986) by @NguyenThuyLan in #21057
- Content Types: Root properties by @nielslyngsoe in #21500
๐ฆ Dependencies
- Storybook: Bumps storybook from 9.0.14 to 10.1.10 by @dependabot[bot] in #21208
- Bump qs from 6.14.0 to 6.14.1 in /src/Umbraco.Web.UI.Client in the npm_and_yarn group across 1 directory by @dependabot[bot] in #21270
- Bump the npm_and_yarn group across 2 directories with 1 update by @dependabot[bot] in #21403
- Dependencies: Bumps login dependencies to latest by @iOvergaard in #21539
- Tiptap RTE: Upgraded to latest v3.x by @leekelleher in #21493
- Dependencies: Bumps @umbraco-ui/uui to 1.17.0-rc.4 by @iOvergaard in #21538
- build(deps): bumps @umbraco-ui/uui to 1.17.0-rc.5 by @iOvergaard in #21569
- Dependencies: Update Microsoft packages to 10.0.1 and pin vulnerable transitive dependencies (closes #21122) by @AndyButland in #21285
- Dependencies: Bump to latest minor/patch versions by @AndyButland in #21540
๐ New Features
- Markdown Conversion: Remove hard dependency on deprecated library and replace with
IMarkdownToHtmlConverterabstraction (closes #21238 and #19500) by @AndyButland in #21242 - UI: Refactor breadcrumb URLs to use Path Constants by @iOvergaard in #21179
- Tree Navigation: Add visual indicators for items with restricted access by @iOvergaard in #21365
- Recycle Bin: Adds
emptyRecycleBincollection action kind for Documents and Media by @leekelleher in #21482 - Tiptap RTE: Adds link (
umbLink) support tostyleMenuAPI by @leekelleher in #21494 - Rollback: Add toggle for diff display (closes #18518) by @AndyButland in #21426
- Dictionary: Add configurable value search functionality by @Nis-Knowit in #21200
๐ค Performance
- Performance: Embeds the API of selected extra conditions by @nielslyngsoe in #21188
- Performance: Bundle Js Libs by @nielslyngsoe in #21187
- Performance: Embed Store API in Manifests to lower number of network request by @madsrasmussen in #21191
- Performance: Avoid database lookup in
UserIdKeyResolverfor super-user by @AndyButland in #21281 - Performance: Only flush ID/Key map in
ContentCacheRefresheron content deletion by @AndyButland in #21283 - Performance: Optimize refresh of hybrid cache for a document by retrieving draft and published in single query by @AndyButland in #21407
- Backoffice Performance: Inline entry point modules to reduce JS chunk count by @madsrasmussen in #21380
- HybridCache: Optimize content type change cache rebuild to resolve SQL timeouts by @AndyButland in #21207
- Backoffice Performance: Use import maps to save requests by @nielslyngsoe in #21363
- Document URL Cache: Ensure URLs are rebuilt after upgrade and prevent duplicate initialization (closes #21337) by @AndyButland in #21379
- Performance: Fix thread safety and optimize cache updates in
PublishStatusServiceafter content changes by @AndyButland in #21415 - Tiptap RTE: Optimize
umb-input-tiptapinitialization and rendering by @leekelleher in #21070 - Routing: Add
DocumentUrlAliasServicefor optimized URL alias lookups (closes #21383) by @AndyButland in #21396 - Performance: Optimize property retrieval and authorization checks in collection views (closes #21367) by @AndyButland in #21470
๐งช Testing
- E2E: QA Replaced unreliable Thread.Sleep(500) with a counter/gate pattern that ensures both transactions are initialized before releasing them to compete for locks by @andr317c in #21165
- E2E QA: Updated integration test that was missing directory setup by @andr317c in #21167
- E2E: QA Added acceptance tests for removing a not-found content picker by @nhudinh0309 in #21177
- E2E: QA Fixed failing tests for the current user profile by @nhudinh0309 in #21214
- Upgrade MSW from 1.3.5 to 2.12.4 by @madsrasmussen in #21096
- E2E: QA Added acceptance tests for rendering content with invariant blocks by @nhudinh0309 in #21180
- E2E: QA Added acceptance tests for content delivery API by @nhudinh0309 in #21095
- E2E: QA Update acceptance tests to use refactored UI helpers by @nhudinh0309 in #21266
- E2E: QA Updated acceptance tests for max length validation message by @nhudinh0309 in #21230
- E2E: QA Update acceptance to use new assertion pattern by @andr317c in #21297
- E2E: QA added temporary waits to flaky acceptance by @andr317c in #21324
- QA: E2E skip running sqlite acceptance test on nightly pipeline by @andr317c in #21331
- E2E: QA Added acceptance tests for removing not-found items by @nhudinh0309 in #21371
- Tests: Fix intermittent failure in
RecycleBinMediaProtectionHelperTestsby @AndyButland in #21332 - E2E: QA updated test helpers to fix flaky acceptance tests by @andr317c in #21373
- E2E: QA Add acceptance tests for user group description by @nhudinh0309 in #21404
- E2E: QA Fixed failing tests for setting up content notifications by @nhudinh0309 in #21441
- E2E: QA Added separate emails for the login tests by @andr317c in #21443
- E2E: QA Updated tests for granular permission in content to match the changes by @nhudinh0309 in #21478
- Testing: Ensure ordering for paged descendants tests (closes #21446) by @idseefeld in #21447
- E2E: QA Added acceptance tests for multi url picker validation message by @nhudinh0309 in #21226
- E2E: QA Updated acceptance tests for collection view search and document type group by @nhudinh0309 in #21522
๐ก๏ธ Code Quality, Documentation and Refactoring
- Tests: Fix CS4014 warnings - add missing await operators by @readingdancer in #21194
- Code Quality: resolve CS0628 warnings - change protected to private in sealed classes by @readingdancer in #21193
- Docs: Fix CS1573 warnings - add missing XML param tags by @readingdancer in #21209
- Logging: Resolves all CA2017 warnings and improves message clarity by @readingdancer in #21210
- Management API: Fixes the warning CS8524 and tidying up the "Set Status Redirect Url Management Controller" by @readingdancer in #21211
- Fix build warning CS0252 - unintended reference comparison in tests by @readingdancer in #21212
- Cryptographic Functions: Fixes obsolete .NET API warnings (SYSLIB0023, SYSLIB0045, SYSLIB0021, SYSLIB0013, SYSLIB0012) by replacing deprecated cryptographic and reflection APIs with their modern equivalents. by @readingdancer in #21213
- Code clean-up: Fixes all SA1117 warnings and adding more XML documentation comments by @readingdancer in #21224
- Code Quality: Fixing the build warnings in the
Umbraco.Tests.Commonproject by @readingdancer in #21245 - Code documentation: Added XML Docs to the files in the
Umbraco.Cms.Imaging.ImageSharpproject by @readingdancer in #21248 - Code documentation: Added XML Docs to the files in the
Umbraco.Cms.Imaging.ImageSharp2project by @readingdancer in #21249 - Benchmarks: Fix obsolete BenchmarkDotNet API warnings by replacing depreciated function calls. by @readingdancer in #21250
- Code quality: Replace obsolete APIs in
Umbraco.TestDatacontrollers by @readingdancer in #21251 - Code quality: Resolve CS0108 compiler warnings by adding explicit 'new' keyword by @readingdancer in #21236
- Code quality: Remove obsolete serialization constructors (fixing SYSLIB0051 warnings) by @readingdancer in #21235
- Code quality: Fixing XML docs issues CS1570, CS1572, CS1723, & CS1575 by @readingdancer in #21256
-
- Build Warnings: Suppress ASPDEPR003 warnings in DevelopmentMode.Backoffice by @readingdancer in #21259
- Code Quality: Fix ASP0019 warnings by replacing
Headers.AddwithHeaders.Appendby @readingdancer in #21260 - Code quality: resolve build warnings
CS0169andCS0649by @readingdancer in #21258 - Gitignore: Exclude acceptance test results from git by @idseefeld in #21336
- Code Quality: Fix
SA1500,SA1111andSA1134StyleCop warnings by @readingdancer in #21369 - Docs: Add branch naming convention details to CLAUDE.md by @AndyButland in #21311
- Code Quality: Fix StyleCop warnings SA1116, SA1401, SA1649, SA1405, SA1121, SA1130, SA1306, SA1028, SA1400, SA1106 by @readingdancer in #21377
- Code Quality: Removing a variable that is not being used fixing warning
CS0168by @readingdancer in #21398 - Code Quality: Fix
CS1574andCS0419XML documentation warnings by @readingdancer in #21400 - Code Quality: Resolve
SA1649warnings by @readingdancer in #21401 - StringExtensions: Refactor into partial classes and optimize methods by @AndyButland in #21370
- Code Quality: Fix
CS0659andCS0661build warnings in Item test class by removing legacy test and setup of little value by @readingdancer in #21399 - Code Quality: Adding all missing XML documentation for the
Umbraco.Cms.Persistence.EFCoreproject by @readingdancer in #21437 - Code Quality: Resolve 128
SA1600documentation warnings inUmbraco.Cms.Persistence.Sqliteby @readingdancer in #21438 - Code Quality: Adding XML documentation to
Umbraco.Cms.Persistence.EFCore.SQLServer&Umbraco.Cms.Persistence.EFCore.SQLiteby @readingdancer in #21439 - Constants: Move media-type guid strings into constants partial by @nathanwoulfe in #21461
- DevOps: Adds
check:duplicate-class-namesdevops script by @leekelleher in #21460 - Task: De-duplicate TypeScript class names by @leekelleher in #21474
- Code Quality: Added missing documentation to the
Umbraco.Cms.Api.Common projectby @readingdancer in #21465 - View Engines: Make
ProfilingViewEngine._innerprivate and modernize string formatting by @bohdansolovie in #21550
๐ Bug Fixes
- Added a migration to remove the property regex validation length limit by @Migaroez in #21175
- Content: Fix name() and getName() to use active variant (closes #20759) by @iOvergaard in #21171
- Cache: Add null checks for entities that may no longer exist during cache refresh by @nikolajlauridsen in #21181
- Block level variance: fix values being polluted when changing variance before publish by @Migaroez in #21121
- Content Types: Fix property variation change when content exists only in non-default language by @nikolajlauridsen in #21182
- Indexing: Gracefully handle element property variance changes at index time by @kjac in #21183
- Culture and Hostnames: Load all languages by @nielslyngsoe in #21169
- News Dashboard: Update styling to fit with new style by @nielslyngsoe in #21185
- Data Types: Add condition to hide delete action in non deletable data types. by @engijlr in #21184
- User Avatar: The "Change Photo" button is not working in all cases by @iOvergaard in #21206
- Hybrid Cache: Clear published content cache on content type change by @AndyButland in #21225
- Media Picker: Always include folders when searching for media by @arknu in #21216
- fix: Update RenderNoContentController to use non-obsolete constructor by @readingdancer in #21246
- Content Type Cache: Clear
ContentTypeCommonRepositorycache when data types change (closes #21261) by @AndyButland in #21289 - Management API: Scope notification headers and add document inclusion abstraction (closes #21231, #21241 and #21240) by @AndyButland in #21244
- Added localize label for entity sign bundle by @Lantzify in #21252
- Auto close focus leave by @Welander1994 in #20700
- Extension insights: Hide icon from table collection by @bjarnef in #21268
- Members: Fix
IMemberService.GetByKeysAsync()by @kjac in #21312 - Docker: Fix Docker template healthcheck, bind mounts, and HTTPS support (fixes #21278) by @nikolajlauridsen in #21299
- Fix login validation messages not showing on submit by @calm329 in #21306
- Entity Signs: Add localization keys to core entity signs by @engijlr in #21302
- Removed margin-top to address the loader icon shifting when entering โฆ by @shelly-chauhan in #21301
- Backoffice entity actions: prevent entity actions dropdown from closing on first click by @calm329 in #21322
- Server Events: Route document updated event when public access entries are modified (closes #21237) by @AndyButland in #21310
- Multi-link picker: Allow drag and drop into empty link picker (fix #21295) by @calm329 in #21325
- Slide Property Editor: Enforce Maximum Value configuration (closes #21323) by @SmartDever02 in #21339
- Entity Signs: rounded infobox top corners by @nielslyngsoe in #21341
- Multi-node picker: Validate content type when filter is configured but object type is not (closes #21338) by @AndyButland in #21342
- Fix MSW typescript compile errors by @madsrasmussen in #21319
- Block workspace: Enforce "AllowEditInvariantFromNonDefault" in variant blocks (closes #20633) by @madsrasmussen in #20868
- TypeScript: Add all CustomEvents to GlobalEventHandlersEventMap by @nielslyngsoe in #21349
- Fix #20769, added support for clip-text for UmbTableColumn by @enkelmedia in #20808
- Mobile navigation: enable horizontal scroll on small screens by @nielslyngsoe in #21354
- Cache: Resolve thread safety issues in
RepositoryCacheKeysandFullDataSetRepositoryCachePolicy(closes #21350) by @AndyButland in #21355 - Collections: fix
createaction causing full page navigation by @rickbutterfield in #21366 - Block Grid: Resolve translation keys for group names (closes #20696) by @iOvergaard in #21362
- Datatype Collection: Add fallback icon for datatype by @bjarnef in #21269
- Sidebar: Make scale grab-area smaller by @nielslyngsoe in #21228
- Add loading indicator to data type picker flow modal by @Copilot in #21085
- Add loading indicator to composition picker modal by @Copilot in #21086
- Content Type Designer: make inherited property appear more like the local, to take less focus by @nielslyngsoe in #21229
- Add loading indicator and error handling to Member Public Access Modal by @Copilot in #21087
- Collection: Introduce Collection Text Filter Extension by @madsrasmussen in #21172
- Migrations: Ensure description column is added before earlier User Group migration runs by @AndyButland in #21378
- Server Events: Add runtime state check and error handling to
ServerEventRouterby @nikolajlauridsen in #21406 - Media Picker: Uploaded files should automatically be selected (closes #21115) by @iOvergaard in #21409
- Backoffice: Fix login logo popover to display Umbraco branding (closes #21078) by @iOvergaard in #21413
- NPM: Move Umbraco Package Schema and custom-elements to root level for IDE discoverability (closes #16667) by @korbi551 in #17866
- Persistence Model: Replace some hard coded strings in DTOs by @idseefeld in #21327
- dotnet Templates: Update Umbraco and Starter Kit versions in templates by @Jeavon in #21395
- Management API: Replace nameof() by constants of DTO (closes #21303) by @idseefeld in #21344
- Thumbnails: Fix image thumbnails cropping to allow the entire image to be shown as a thumbnail (closes #20347) by @Copilot in #21288
- Media Picker: Respect start node when drag+dropping files directly onto picker (closes #21422) by @AndyButland in #21423
- Focal point: Utility functions by @bjarnef in #21264
- Notification Container: Make toast notifications announced by screen readers in Chrome. by @engijlr in #21028
- Content Workspace: Add condition to detect when a content workspace has finished loading. by @engijlr in #21290
- Bulk Publish: Filter variant options to applicable cultures only (closes #19147) by @iOvergaard in #21163
- Router: Destroy route component when disconnected (Fixes #21272) by @nielslyngsoe in #21318
- Content Picker: Provide "content root" origin for dynamic root (closes #21134) by @AndyButland in #21161
- Document Tree: Filter tree items based on user browse permissions (closes #21141) by @AndyButland in #21173
- Media: Unable to see the "Access denied" view when deep-linking to restricted media nodes by @iOvergaard in #21442
- Content picker: Prevent selection of document/member type containers when configuring allowed types (closes #21356) by @AndyButland in #21357
- Examine: Check for registered populators before emptying indexes by @Zeegaan in #21455
- Dotnet Template: Removes unused setting
SanitizeTinyMceby @iOvergaard in #21467 - Backoffice: Fix event listener memory leaks in auth, dropzone, actions, and router by @iOvergaard in #21458
- User Management: Provide informative message on change password validation failure (closes #20665) by @JoseMarcenaro in #21257
- Content-Type Designer: Transfer tab when moving property to inherited tab (Fixes #20789) by @nielslyngsoe in #21234
- Entity Signs: Embed Api & Element for performance by @nielslyngsoe in #21480
- Media: Picker Modal types export (Fixes #21265) by @nielslyngsoe in #21329
- Management API: Fix document URLs returning all languages for invariant content (closes #21459) by @AndyButland in #21473
- Picker: Support embedded Collections in the Collection Item Picker Modal by @madsrasmussen in #21392
- Data Types: Allows transparency for the approved colors in the color picker. by @NillasKA in #21495
- Redirect Tracking: Handle empty string in redirect tracker when restoring from recycle bin by @AndyButland in #21488
- Property Value Preset Builder: accept variant options by @nielslyngsoe in #21382
- Block List & Block Single: Resolve Validation Race condition (Fixes #21313) by @nielslyngsoe in #21491
- Modal: Add 'in modal' condition to modal package by @madsrasmussen in #21503
- Fix for the client side circular dependency. by @readingdancer in #21464
- Log Viewer: Fix polling interval reset when changing intervals (closes #21507) by @GiantDragon9090 in #21508
- Database Providers: Add support for providers offering sequence and null casting support (closes #21418) by @idseefeld in #21419
- Load Balancing: Tracking difference CM and CD redirect and post-logout URIs in load-balanced environments by @Migaroez in #21432
- Media: Only add deleted suffix to URLs for trashed media when recycle bin protection is enabled by @AndyButland in #21412
- Backoffice: Redirect to list view after entity deletion by @eureka928 in #21456
- Block List Editor: Describe that Single Block Mode is deprecated by @nielslyngsoe in #21512
- Block editors: Fix false pending changes indicator for invariant block editor with culture-variant blocks (closes #21223) by @AndyButland in #21292
- Content types: Allow adding composition with clashing property alias when property is being removed (closes #21298) by @kjac in #21527
- Models Builder: Fix nested generic type handling in
WriteClrTypeby @AndyButland in #21429 - Media: Prevent creation of media with GUID v7 keys when using incompatible path scheme (closes #21440) by @AndyButland in #21457
- Dark mode: Added color variable to code block in the system information dialog to make it readable by @Jowaaaa in #21532
- Dotnet Template: Fix trailing comma in appsettings.json by @andr317c in #21529
- Content picker: Fix bug where dynamic root children are not correctly available for selection (closes #21477 and #21537) by @NguyenThuyLan in #21535
- Templates: Allow underscore as first character in template alias (closes #21534) by @AndyButland in #21536
- Members: Fix misleading error message on change password with incorrect current password by @AndyButland in #21504
- Content/Media: Fix deadlock when performing certain operations in parallel (closes #21125) by @lauraneto in #21526
- UFM: Skip leading whitespace in token parser (closes #20341) by @D-Inventor in #21509
- External Logins: Handle duplicate key race condition intermittently triggered in
ExternalLoginRepositoryby @AndyButland in #21551 - Translations: Add missing translations of document type and property names in collection views and user granular permissions (closes #21433) by @NguyenThuyLan in #21541
- Content Type Designer: Property Layout updates by @nielslyngsoe in #21544
- Tiptap RTE: Resolves inline blocks being set as dirty (closes #17749) by @leekelleher in #21546
- Entity Signs: Refactor Entity Sign Bundle to use Popover API. by @engijlr in #21490
- Backoffice: Exclude invariant options for culture-variant properties in preset builder by @AndyButland in #21555
- Content Value Transformation: Clean out values when property-type variation transforms by @nielslyngsoe in #21557
- Content Types: Fix deletion of properties without containers (closes #21566) by @AndyButland in #21585
- Content Editor: Fix display of validation hint badge on tabs by @AndyButland in #21595
- Documents: Remove deprecated
entityTypefrom property values (closes #21567) by @leekelleher in #21609 - Routing: Fix URL aliases not stored for variant content with shared alias property in
DocumentUrlAliasServiceby @AndyButland in #21571 - OEmbed providers: Tighten up resource URL matching for providers by @NguyenThuyLan in #21583
New Contributors
- @calm329 made their first contribution in #21306
- @shelly-chauhan made their first contribution in #21301
- @SmartDever02 made their first contribution in #21339
- @korbi551 made their first contribution in #17866
- @Nis-Knowit made their first contribution in #21200
- @GiantDragon9090 made their first contribution in #21508
- @eureka928 made their first contribution in #21456
- @Jowaaaa made their first contribution in #21532
- @bohdansolovie made their first contribution in #21550
Full Changelog: release-17.1.0...release-17.2.0-rc