What's Changed
📦 Dependencies
- Login: Removes
@hey-api/openapi-tsfrom the login project by @iOvergaard in #22757 - build(deps): bumps @umbraco-ui/uui to 1.18.0 by @iOvergaard in #23035
- build(deps): bumps @umbraco-ui/uui to 1.18.1 by @iOvergaard in #23184
- Dependencies: Update NuGet packages to latest minor and patch versions by @AndyButland in #23269 and #23454
- Dependencies: Update NuGet packages to latest minor and patch versions by @AndyButland in #23270
- UUI: Upgrade to 2.0.1 by @iOvergaard in #23209
- Build(deps): Bump the npm_and_yarn group across 4 directories with 4 updates by @dependabot[bot] in #23338
- Dependencies: Upgrade Examine to 3.8.0 by @si25 in #23075
- Dependencies: Pin SQLitePCLRaw.lib.e_sqlite3 to a non-vulnerable version (closes #23325) by @AndyButland in #23393
🚀 New Features
- feat(components): adds
umb-entity-framecomponent + Storybook stories by @leekelleher in #22844 - UFM: Add
umbMemberNamecomponent (closes #22147) by @leekelleher in #23165 - UFM: Add
umbElementNamecomponent by @leekelleher in #23162 - Element Picker: Adds
valueSummarydisplay and value resolver by @leekelleher in #23154 - Media: Add umb-media-thumbnail with configurable checkerboard background (closes #23177) by @iOvergaard in #23178
- Media picker: Allows cancellation of folder creation, and adds buttons for better accessibility (closes #20452) by @iOvergaard in #23276
- Notifications: Add htmlMessage for opt-in HTML rendering in toasts by @andrejd22 in #23152
- Property Editors: Add value summary extensions for collection views by @nielslyngsoe in #23027
- Redirects: Adding notification for redirect save and deletion by @NillasKA in #22985
- Property editors: Add configuration and validation of allowed types for element picker, document picker, media picker by @NguyenThuyLan in #23026
- Scheduled publishing: Add configurable period and optional clock-aligned scheduling by @AndyButland in #23127
- Management API: Add endpoints to sort the children of a document or media item by a system field by @AndyButland in #23077
- Delivery API: Include Element names in the Delivery API output (closes #23242) by @kjac in #23260
- Packaging: Add support for Elements by @lauraneto in #23254
- Management API: Introduce published element endpoint by @lauraneto in #23305
- Media: Add support for Media URL providers with cache busting (Closes #23282) by @kjac in #23327
- Global Elements: Adds "Element or Element Folder" User Permission Condition by @leekelleher in #23051
- Elements: Support create-and-publish and update-and-publish as a single operation by @AndyButland in #23277
🚤 Performance
- Performance: Parallelize independent boot API requests (server status/config + public extensions) by @iOvergaard in #23020
- Performance: Load stylesheets parallel to extensions in Tiptap by @nielslyngsoe in #23024
- Cache: Add scope-level cache version tier to reduce DB hits in bulk operations by @nikolajlauridsen in #22563
- Backoffice: Add Cache-Control headers to cache-busted backoffice assets (AB#68478) by @iOvergaard in #22951
- Repositories: Batch WHERE IN queries to avoid SQL Server 2100-parameter limit by @AndyButland in #22987
- Performance: Coalesce concurrent tree data requests (Management API client) by @iOvergaard in #23021
- Request Logging: Avoid forcing a session store load when resolving the session id for logging (closes #23082) by @AndyButland in #23083
- Languages: Page through to load all configured languages by @AndyButland in #22765
- Examine: Stream value sets to a single index during rebuild to reduce reindex peak memory by @AndyButland in #23150
- Document & Media Workspace: Limit route generation (closes #22910) by @nielslyngsoe in #23085
- Caching: Add an optional bounded, limit to the published-content (L0) cache by @AndyButland in #23158
- Performance: Add index on
umbracoContent.contentTypeIdby @AndyButland in #23328 - Performance: Batch the content cache delete on structural content type changes by @AndyButland in #23329
- Performance: Skip the content cache rebuild when a document type property is removed by @AndyButland in #23330
- Media: Port Children/Descendants traversal optimisations to media (#22742 follow-up) by @AndyButland in #23356
- Document URLs: Retrieve only the current culture's URL for the Info workspace links panel (closes #23196) by @AndyButland in #23265
- Performance: Avoid heap allocations when converting between int & Guid by @Henr1k80 in #23389
🌈 Accessibility Improvements
- Accessibility: Added missing labels to code block copy button and embedded media URL input by @andreaslborg in #22825
- Accessibility: Added missing labels to webhook details and headers by @andreaslborg in #22918
🐛 Bug Fixes
- Documents: Alias
DocumentVariantStateModelAPI model for backoffice client by @leekelleher in #22716 - Published Content: Fix
Fallback.ToAncestorswith no match throwing exception at property level (closes #22759) by @AndyButland in #22763 - Tiptap RTE: Ignore no-op transactions in onUpdate to prevent phantom dirty state (closes #22767) by @AndyButland in #22781
- Distributed background jobs: Improve gracefull shutdown behaviour by @Migaroez in #22796
- Sort Children: Show loading state on Sort button (closes #22651) by @AndyButland in #22813
- Backoffice: Preserve user-supplied property editor UI group names (closes #22189) by @AndyButland in #22196
- Log Viewer: Updated the saved log viewer searches for new installs to reference
Umbraco.Cmsinstead ofUmbraco.Core. by @AndyButland in #22843 - Migrations: Add auto upgrade coordination for load-balanced setups by @nikolajlauridsen in #22815
- Redirect URL Tracker: Remove ability to toggle from the UI by @AndyButland in #22830
- Log Viewer: Defensively handle corrupt log files (closes #22820) by @AndyButland in #22826
- Migrations: Append data-anchor value to href when missing in local link migration (closes #22860) by @AndyButland in #22936
- Body Layout: Replace overflow: auto with uui-scroll-container by @engijlr in #22950
- Management API: ensure the order from the search endpoints taking a collection of keys is preserved by @NguyenThuyLan in #22920
- Management API: ensure the order from the search endpoints taking a collection of keys is preserved by @NguyenThuyLan in #22973
- Backoffice search: Preserve Lucene score order through content-picker lookups (closes #22862) by @AndyButland in #22977
- Members: Default Approved to true when creating a member (closes #22991) by @AndyButland in #22993
- Migrations: Convert all sibling RTE blocks (closes #22979) by @AndyButland in #22980
- Sort Dialog: Show current language node names (closes #22872) by @AndyButland in #22948
- Backoffice: Hide "Edit permissions" button in create modals from users without Settings section access (closes #22981) by @AndyButland in #22984
- Content Type Editor: Fix empty Design tab when opened in a modal workspace (closes #22855) by @AndyButland in #22954
- Backoffice: Render $index in block detail overlay label (closes #21154) by @AndyButland in #22959
- References: Fix missing node name when content referenced by media or member (closes #22990) by @AndyButland in #22965
- Link Picker: Render picked content/media as non-interactive when their workspace URL can't be resolved (closes #22955) by @AndyButland in #22964
- EF Core: Retry transient SQLite lock errors during long-running operations (closes #22939) by @AndyButland in #22969
- Document Recycle Bin: Checks user permission for Document "Read" by @leekelleher in #23041
- Media: Restore friendly naming of uploaded media items (closes #22989) by @AndyButland in #22998
- Block Grid: Guard validator against torn-down manager on navigation by @leekelleher in #22852
- Menu Structure: Guard against use-after-destroy in async structure request by @leekelleher in #23055
- Data Types: Tolerate invalid configuration when determining the editor value storage type (closes #23057) by @AndyButland in #23058
- Localization: Add Dutch translations for create and delete actions by @erikjanwestendorp in #23039
- Runtime Cache: Fix
IAppPolicyCache.ClearByKeyintermittently failing to clear cached items (closes #23064) by @AndyButland in #23068 - Tags: Fix null reference error in tags input on render (closes #23044) by @AndyButland in #23049
- Backoffice Search: Batch the ancestors lookup for search results to avoid exceeding the maximum URL length (closes #23032) by @AndyButland in #23048
- Global Search: Localize global search manifest labels and names by @NguyenThuyLan in #23091
- Backoffice: Pre-expand tree to target entity when opening Duplicate and Move To modals (closes #22015) by @madsrasmussen in #23063
- Package migrations: Surface a failed unattended package migration as a boot failure instead of getting stuck on the upgrade screen by @AndyButland in #23114
- Content/Media: Reload content on Sort to avoid data loss with partially loaded entities (closes #23120) by @AndyButland in #23128
- Background Jobs: Recover cache-sync and server-touch jobs when a database call hangs (closes #23106) by @AndyButland in #23119
- User Groups: Clear the user group cache when a language is deleted (closes #23121) by @AndyButland in #23131
- Tiptap RTE: Fixes toolbar button active state not updating on collapsed-cursor mark toggle (closes #22907) by @rammi987 in #22929
- Tiptap: Preserve wrapping link when editing an image (closes #23013) by @AndyButland in #23019
- Cache: Populate the domain cache eagerly during start-up by @kjac in #23139
- Content & Media: Enforce content type filters and allowed children/root rules when validating a create by @AndyButland in #23163
- Block Workspace: Support variant properties and make '$settings' a key-value-object (Closes #23095) by @nielslyngsoe in #23123
- Block RTE: Implement unsupported block rendering (closes #23071) by @leekelleher in #23126
- Entity Data Picker: Implement interaction memory + sync picker memory across all picker inputs by @madsrasmussen in #23172
- Content Types: Show the correct type name (Media/Member Type) in the Compositions dialog (closes #23102) by @AndyButland in #23118
- ModelsBuilder: Avoid
ObjectDisposedExceptioninInMemoryModelFactoryduring shutdown by @AndyButland in #23171 - Examine: Queue cold boot Examine reindexing at start-up, not at first request (Closes #22883) by @kjac in #23181
- Published Cache: Guard against cache poisoning from a render-vs-publish race by @kjac in #23169
- Block Workspace: avoid JS error if destroyed by @nielslyngsoe in #23200
- Fix detail data request manager failing when items hit 40, making document unusable (closes #23198) by @paulwoodland in #23164
- Table dates and User dates by @rammi987 in #22169
- Routing: guard form reads against malformed request bodies by @legacy-git in #23191
- Caching: Add memory cache size reporting background job (observability) by @AndyButland in #23149
- Backoffice: Tabs with external links stop working after resizing by @rammi987 in #22894
- UX: Prevent WebKit popover state lock in workspace action menu items (closes #22777, #22863) by @ShekharTarare in #22864
- Code Editor: Fix crash when loading saved JSON values (closes #23180) by @ShekharTarare in #23223
- Validation: fix removeMessagesAndDescendantsByPath by @nielslyngsoe in #22787
- Interaction memories: Observes memories to keep updated in same view by @nielslyngsoe in #22870
- Tree: Fix "show more" appearing on small lists after sorting children (closes #21614) by @engijlr in #22819
- Auth: Time out the session when the timeout modals "Stay logged in" refresh fails (closes #22986) by @iOvergaard in #23079
- fix(documents): add 1px gap between language rows in publish modal by @milandudhatragd in #23218
- add standalone attr to input-multi-url.element to align ex. input-doc… by @rammi987 in #23211
- Health Probes: Return 503 from the readiness probe when Umbraco is not ready (closes #22020) by @AndyButland in #23236
- Caching: Extend in-memory cache observability and stale-set guard to elements by @AndyButland in #23229
- UFM: Add kebab-case filter alias support with deprecation warning by @leekelleher in #23201
- Installer: Set appropriate autocomplete hints on install forms by @iOvergaard in #23235
- Rich Text Editor: Migrate inline RTE blocks from data-content-udi to data-content-key (closes #23224) by @AndyButland in #23259
- Document: Allow tree navigation through no-access collection ancestors to reach start nodes (closes #22353) by @madsrasmussen in #23252
- Content: Reintroduce create/save-and-publish as a single operation (closes #22577) by @kjac in #22812
- Entity Actions Bundle: fix reopening actions popover on Safari (closes #21580) by @nielslyngsoe in #23253
- Tree Views by @madsrasmussen in #23151
- Package Manifests: Per-package cache-busting for /App_Plugins assets by @iOvergaard in #23094
- Markdown Editor: Auto-expands with content and enables word-wrap (closes #23203) by @ShekharTarare in #23273
- Collections: view loader on initial load by @nielslyngsoe in #23275
- Change password: correct localizations by @nielslyngsoe in #23264
- User management: Fix exception when user creation is cancelled from a
UserSavingNotificationhandler (closes #14830) by @okalangkenneth in #23250 - TextBox, TextArea: Placeholder & AutoComplete configuration by @nielslyngsoe in #23205
- Autocomplete: general corrections by @nielslyngsoe in #23207
- GroupId conditions - js error fix for undefined permission checks by @steveatkiss in #22653
- Packages: Fix Created Package routing by @leekelleher in #23278
- Collection Views: Apply
UmbTableColumnalignsetting to head cell (closes #22582) by @ShekharTarare in #23279 - Table: Set indeterminate of checkbox by @bjarnef in #21969
- Element permissions: Respect custom
IElementPermissionServicefor backoffice UI action visibility (closes #23122) by @AndyButland in #23137 - Timeout Settings: Cap session timeout timer to prevent JavaScript overflow (closes #23246) by @ShekharTarare in #23283
- Hosting: Add stable machine identifier for environments with unstable hostnames (closes #22947, #13909) by @nikolajlauridsen in #23233
- Document Url Service: Always get published value by @Zeegaan in #23290
- Relations: Fix tracking of stale relations for unpublished content (closes #23255) by @rammi987 in #23295
- Default Tree: empty & loading state by @nielslyngsoe in #23204
- Table: make header buttons align left by @nielslyngsoe in #23307
- Documents: Scope mandatory validation to selected variants when scheduling by @leekelleher in #23300
- Delivery API: Never treat Delivery API requests as client-side requests (Closes #20810) by @kjac in #23303
- Localization: Added Workspace footer & Data Type flow input empty state by @Lantzify in #23302
- Documents: Pre-select default template on document creation (closes #23293) by @lauraneto in #23312
- Imaging: Re-sign rich text image URLs on render to survive HMAC key rotation (closes #22876) by @AndyButland in #22962
- Content Type Filters: Add parent context and server-side validation for element library filtering (closes #23136) by @AndyButland in #23161
- Packaging: Fix template assignment when importing packages across different systems (closes #15277) by @lauraneto in #23316
- Error Handling: Show a clear message on network/gateway timeouts instead of a generic error (closes #16041) by @iOvergaard in #23297
- UUI: programmatic control of outline styling by @nielslyngsoe in #23228
- Move/Duplicate: Search the destination picker and unify the duplicate-to modal by @iOvergaard in #23243
- Integration Tests: Fix
GetElementPermissionsCurrentUserControllerconstructor to resolve failing tests (closes #23350) by @idseefeld in #23351 - Numeric property editor: preset only when relevant (Closes #21787) by @nielslyngsoe in #23256
- Discard Changes: Check before unload by @nielslyngsoe in #23107
- Document User Permissions: make condition aware about user start-nodes (closes #22769) by @nielslyngsoe in #23268
- Media Picker: limit abilities based on start nodes (Closes #22747) by @nielslyngsoe in #23285
- Preview: Open non-HTML and external links in a new tab so they work in preview (closes #22637, #20323) by @AndyButland in #22748
- Content Workspaces: dynamic route for variant options (closes #23226) by @nielslyngsoe in #23342
- Media: Assign deterministic keys to SVG Width/Height migration (closes #23337) by @AndyButland in #23341
- Styling: corrects rounded corners (Closes #23232) by @nielslyngsoe in #23352
- Block List/Single: Fix "Property editor width" config not applying (closes #23109) by @andreaslborg in #23130
- Query Builder: Fix Where filter on content properties moved to a base interface (closes #22000) by @AndyButland in #23324
- Rich Text Editor: Use padding-left instead of text-indent for Tiptap indent (closes #23038) by @ShekharTarare in #23145
- Users: Return computed user state from the enable endpoint (closes #22786) by @AndyButland in #22976
- UX: Prevent WebKit popover state lock when opening System Info modal (closes 22455) by @ShekharTarare in #22680
- Tiptap: Fix indent/outdent to nest list items and prevent TAB focus loss (closes #23143) by @ShekharTarare in #23155
- Relations: Avoid persisting relations for a deleted content item (closes #23331) by @AndyButland in #23349
- Markdown Editor: Tweak toolbar background color for UI consistency by @leekelleher in #23374
- Migrations: Preserve segment variation for invariant block list data during v18 upgrade (closes #23357) by @AndyButland in #23369
- Property Context: Handle if destroy happens while executing
_observePropertyby @nielslyngsoe in #23354 - Collection Views: UI consistency for Columns and Layouts configuration editors by @leekelleher in #23380
- Backoffice: Fix workspace view icon/label not updating on late-arriving overrides (closes #23311) by @ShekharTarare in #23371
- Content Routing: Harden front-end serving against the post-upgrade cache-seeding window (#22581) by @AndyButland in #23258
- Content Notifications: Expose the cultures affected by save, publish and unpublish (closes #23288) by @AndyButland in #23313
- Documents: Use single-transaction create/update-and-publish endpoints (FE) by @iOvergaard in #23031
- Migrations: Fix errors upgrading v13 databases with block editors to v17 by @AndyButland in #23401
🧪 Testing
- Test: adds 'mocha' and 'chai' as types for tsconfig by @iOvergaard in #22889
- Document Workspace: Add CRUD and property value tests for document workspace context by @madsrasmussen in #22621
- E2E: QA: add acceptance tests for content versioning by @andr317c in #22702
- E2E: QA: Add .prettierrc.json to acceptance tests for formatting consistency by @andr317c in #22751
- E2E: QA: Add missing helpers for Content Versioning by @andr317c in #22788
- E2E: QA Added acceptance tests for current user workspace by @nhudinh0309 in #22457
- E2E: QA Updated acceptance tests to match the recent changes by @nhudinh0309 in #22801
- QA: Stabilise rollback content versioning E2E test by @AndyButland in #22975
- E2E: QA Added acceptance tests for audit log in element by @nhudinh0309 in #22972
- E2E: QA Added acceptance tests for backoffice element search by @nhudinh0309 in #22884
- E2E: QA Updated acceptance tests for removing the Element Picker from elements to reflect the recent changes by @nhudinh0309 in #23037
- E2E: QA Added acceptance tests for Element Type settings by @nhudinh0309 in #23005
- E2E: QA Added acceptance tests for element folder permission by @nhudinh0309 in #22905
- E2E: QA: Add acceptance test for backoffice search by @andr317c in #22730
- Tests: Update DomainCacheServiceTests to mock GetAllAsync instead of removed GetAll by @NguyenThuyLan in #23097
- E2E: Fixed failing acceptance tests for user group, backoffice search and content picker by @nhudinh0309 in #23108
- E2E: QA Added acceptance tests for broken publish path in legacy routing by @nhudinh0309 in #23090
- Integration Tests: Adjusting Status Codes for Failing Tests by @NillasKA in #23125
- E2E: QA Added acceptance tests for published element extensions by @nhudinh0309 in #23030
- Data Types QA: Reproduce documents with 40+ data types failing to load (mock set + tests) by @madsrasmussen in #23208
- Unit Tests: Client-side path utilities by @nielslyngsoe in #22784
- E2E: QA: Fixed flaky tests by @andr317c in #23190
- E2E: QA Added acceptance tests for user management from user group by @nhudinh0309 in #22919
- E2E: QA Added acceptance tests for AllowEditInvariantFromNonDefault setting in the nested block by @nhudinh0309 in #22762
🛡️ Code Quality, Documentation and Refactoring
- Backoffice: Strip inherited class comments from TypeDoc API docs by @iOvergaard in #23004
- User Permission: Re-export fallback condition config type and global augmentation by @ronaldbarendse in #22794
- Member Group: Migrate custom table collection view to generic table kind by @madsrasmussen in #22833
- Backoffice: Provide entity context via UMB_ENTITY_CONTEXT in menu components by @madsrasmussen in #22835
- Relation Type: Migrate custom table collection view to generic table by @madsrasmussen in #22837
- Code Quality: Fix
CS0618obsolete API warnings inUmbraco.Examine.Luceneproject by @okalangkenneth in #22978 - Tests: Remove AutoFixture from the shipped Umbraco.Cms.Tests package by @ronaldbarendse in #23141
- Deprecations: Annotate warnings with caller origin and suppress core noise in production by @iOvergaard in #23188
- Code Quality: Fixing some warnings relating to XML documentation and whitespace by @lumikrynd in #23182
- Content: Extract
UmbDocumentPublishedPendingChangesManagerto reusable base class by @leekelleher in #23238 - Code Quality: Resolved warnings relating to code documentation by @lumikrynd in #23251
- Content: Extract
UmbDocumentWorkspaceSplitViewVariantSelectorElementreusable base class by @leekelleher in #23240 - Content Variant: Relocate
sortVariantsto sharedcore/variantmodule by @leekelleher in #23241 - Code Documentation: Correct typos in client-side code docs for min and max validation messages by @bjarnef in #23292
- Code Quality: Resolved warnings relating to hidden inherited member by @lumikrynd in #23320
- Publishing: Abstracted unpublish into reusable
contentUnpublishentity action and modal kinds by @leekelleher in #23314 - Publishing: Abstracted publish into reusable
contentPublishentity action and modal kinds by @leekelleher in #23326 - Documents/Media: Configuration contexts use repository by @leekelleher in #23332
- Observe: make value type possibly 'undefined' if observable is possibly 'undefined' by @nielslyngsoe in #23280
- Elements: De-duplication of Element Workspace code by @leekelleher in #23287
- Block Editors: De-duplicate UFM rendering per entry by @leekelleher in #22848
- Provide public, reusable preview controller by @nathanwoulfe in #23294
- Code Quality: Resolved warnings mostly related to code formatting by @lumikrynd in #23370
- Elements: Align publishing behaviour with Documents by @leekelleher in #23298
🧑💻 Developer Experience
- Backoffice: Preserve prerelease tag when hoisting peer dependencies by @iOvergaard in #22841
- Build: app-local ICU is now configurable at runtime by @Migaroez in #23009
- Backoffice Development Mode: Ship GenerateRuntimeConfigDevFile so runtime Razor compilation resolves package refs from build output by @ronaldbarendse in #23257
New Contributors
- @okalangkenneth made their first contribution in #22978
- @si25 made their first contribution in #23075
- @legacy-git made their first contribution in #23191
- @ShekharTarare made their first contribution in #22864
- @milandudhatragd made their first contribution in #23218
- @lumikrynd made their first contribution in #23182
Full Changelog: release-18.0.2...release-18.1.0-rc