Repository navigation
xiiui β Update header bar elements and remove headline and breadcrumbs - #27101
Merged
formfcw merged 44 commits intoApr 15, 2026
Merged
Conversation
β¦endar toolbar styling
β¦endar toolbar styling
β¦endar toolbar styling
This ensures it matches the breakpoint.smallerOrEqual() calls
Review note: Build `pnpm --filter themes build`
β¦s to this route
β¦ file and user routes
HZooly
reviewed
Apr 13, 2026
alvarosabu
requested changes
Apr 13, 2026
β¦ hugo/cms-2076-ensure-sidebar-opens-with-initialsnap-size-after-collapsing
β¦e-after-collapsing' into florian/cms-1927-update-header-elements # Conflicts: # app/src/styles/_variables.scss
β¦-with-initialsnap-size-after-collapsing
β¦e-after-collapsing' into florian/cms-1927-update-header-elements
Base automatically changed from
hugo/cms-2076-ensure-sidebar-opens-with-initialsnap-size-after-collapsing
to
feat/twelve-ui
April 15, 2026 10:22
alvarosabu
self-requested a review
April 15, 2026 15:31
HZooly
approved these changes
Apr 15, 2026
formfcw
added a commit
that referenced
this pull request
Apr 20, 2026
This was referenced May 12, 2026
Merged
AlexGaillard
added a commit
that referenced
this pull request
Jun 10, 2026
* xiiui β Update type system, borders, and theme variables (#26938) * xiiui β Refactor focus ring from border/box-shadow to outline (#26941) * xiiui β Put the sidebar into the content area (#26942) * xiiui β Update sidebar styles (#26990) * xiiui β Back button always navigates one level up (#27004) Co-authored-by: formfcw <dev@formfcw.com> * xiiui β Update module navigation bar styling (#27009) Co-authored-by: formfcw <dev@formfcw.com> * xiiui β Update content section spacing and drawer content spacing (#27019) Co-authored-by: formfcw <dev@formfcw.com> * xiiui β Remove rounded buttons and adopt shared header action button across all views (#27030) Co-authored-by: HZooly <torzuoli.hugo@gmail.com> * xiiui β Fix bookmark icon and color not showing in header (#27034) Co-authored-by: HZooly <torzuoli.hugo@gmail.com> * xiiui β Update header and navigation bar and introduce shell theme scope (#27058) Co-authored-by: HZooly <torzuoli.hugo@gmail.com> * xiiui β Remove VResizeable (#27059) Co-authored-by: HZooly <torzuoli.hugo@gmail.com> * xiiui β Fix VButton sizes and padding to match design specs (#27074) * xiiui β Extract the card subheader into a reusable subheader component (#27077) * xiiui β Sidebar reopening at minimum size after being collapsed via drag handle (#27090) Co-authored-by: formfcw <dev@formfcw.com> * xiiui β Update header bar elements and remove headline and breadcrumbs (#27101) * xiiui β Refactor header bar action slots and reorganize CTAs (#27102) * xiiui β Refactor drawer header layout and simplify v-drawer API (#27103) * xiiui β Update module bar buttons style (#27110) Co-authored-by: formfcw <dev@formfcw.com> * xiiui β Extract reusable ModuleBarButton component (#27123) * xiiui β Limit mobile sidebar width (#27118) * xiiui β Body overflow hidden (#27120) Co-authored-by: formfcw <dev@formfcw.com> * xiiui β fix pagination button appearance (#27122) Co-authored-by: formfcw <dev@formfcw.com> * xiiui β update import background checkbox design (#27125) * xiiui β fix v-divider icon alignment (#27127) * xiiui β Fix flow handle button alignment in flow editor (#27128) * xiiui β Add split-menu slot to v-button and migrate primary header actions (#27130) * Add new /ai/object endpoint to generate structured objects (#26862) * wip * fix additional properties bug * wip: fix tests * fix changeset * add telemetry * don't load settings twice for files router * format * switch object endpoint to streaming * fix formatting * fix test ts errors * ok github * format * formatter * Fix MARKETPLACE_REGISTRY env not being passed to registry list call when generating extension settings (#27076) * fix: pass MARKETPLACE_REGISTRY env to registry list call * fix: update changeset * Restore "All Users" tab (#27078) * restore all users tab * changeset * remove changeset * Add save as new file option to image editor (CMS-2099) (#27084) * Add save as new file option to image editor * Add changeset * Update .changeset/old-chairs-end.md * Fix file not creating in correct folder --------- Co-authored-by: Alex Gaillard <alex@directus.io> * Trim trailing spaces and punctuation from search queries (#27089) * sanitize search query - remove trailing spaces and punctuation * changeset * simplify and detect only unicode punctuation * update changeset * just trim leading and trailing spaces * Add case for whitespace only search * Fix formatting errors * Allow for white space only search * Fix formatting * More formatting fixes --------- Co-authored-by: Alex Gaillard <alex@directus.io> * Fix promotion of deleted relation returning invalid date time value error (#27040) * fix: use nullish coalescing for overwriteDefaults in payload transformers * Revert "fix: use nullish coalescing for overwriteDefaults in payload transformers" This reverts commit 79e1e86. * fix: return undefined defaultOverwrites for primitive arrays in splitRecursive * fix: propagate parent overwrite defaults to primitive arrays in splitRecursive * Update moody-papers-help.md --------- Co-authored-by: daedalus <44623501+ComfortablyCoding@users.noreply.github.com> * Improve configurability of health checks (#26987) * suffix file health checks with machine id * add changeset * add ttl support for local cache * improve configurability of healthcheck and cache results * add cahngesets * restrict `/server/health` to authenticated users * tweaks * Ensure consistent bracket usage * Apply suggestion from @ComfortablyCoding * add notice for dropping cache/ratelimiter/ratelimiterglobal * move unauthenticated check to service * add bb tests * improve server health return type * Update shaggy-news-check.md * fix vendor db check * Update shaggy-news-check.md * Fix bb tests * Fix `VBadge` intercepting pointer events on slotted elements (#27087) * prevent VBadge from intercepting clicks on slotted elements * add changeset * Dependabot updates (#27081) * bump axios, basic-ftp and liquidjs * bumping vite * bump overridden packages * bump nodemailer * bump minimatch * bump hono * add changeset * updated basic-ftp * Fix export failing on collections with virtual fields like $thumbnail by excluding them from export defaults and the field picker (#27073) * fix(app): exclude virtual fields from export default field selection * fix(app): exclude virtual fields from export defaults * Add om-singh-D to contributors list * style(app): format export sidebar files * fix(app): exclude virtual fields from export picker * Update .changeset/curvy-tigers-exist.md Co-authored-by: Gaetan SENN <gaetan.senn@gmail.com> --------- Co-authored-by: Gaetan SENN <gaetan.senn@gmail.com> * Fix api building with node_modules (#27067) * start fixing building of api * fully migrate from typebox to zod * add changeset * fmt * cleanup * update lock * fix(app): deduplicate aggregate count requests on content navigation (#26906) * fix(app): deduplicate aggregate count requests on content navigation When navigating to /content/:collection, the useItems composable fired two separate watchers with immediate:true, causing 2-3 redundant aggregate[countDistinct] API calls. This merges both watchers into a single coordinated watcher and reuses the totalCount result for itemCount when no user filters or search are active (or when the user filter matches the system filter). Fixes #25194 * address review feedback: simplify with until, separate watchers, remove spread * fix lockfile * refactor: use useMemoize to prevent duplicate aggregate calls Replace loadingTotalCount/until logic with useMemoize from vueuse, which automatically deduplicates concurrent calls with the same arguments by reusing active promises. * cleanup code * chore: sign CLA * fix: guard against race conditions in getTotalCount and getItemCount Use generation counters to discard stale responses when rapid navigation or filter changes cause overlapping requests. This prevents an older response from overwriting a newer result. * Add om-singh-D to contributors list --------- Co-authored-by: Nitwel <mail@nitwel.de> * fix(api): include custom query params in cache key (#26935) * fix(api): include custom query params in cache key The cache key only used req.sanitizedQuery which strips non-Directus query params. This caused Flow webhook endpoints and custom endpoints to return stale cached responses when called with different custom query parameters. Include req.query in the cache key hash for non-GraphQL requests so requests with different custom params produce different cache keys. Fixes #26929 * fix: only include rawQuery when query params exist Skip adding rawQuery to cache key when req.query is empty ({}), preserving existing cache keys for standard requests without custom query params. This avoids unnecessary cache invalidation on deploy. * fix(api): scope raw query param cache key inclusion to flow triggers Address review feedback from @Nitwel: including all raw query params globally made it trivial to bypass cache on standard REST endpoints. Now only /flows/trigger endpoints include raw query params in the cache key, since those endpoints pass arbitrary query params to the flow execution context. Standard REST endpoints rely on sanitizedQuery which already captures all Directus-recognized parameters. * feat(api): add configurable cache query params for flow triggers Allow admins to configure which query parameters should affect the cache key for webhook flow triggers. When cacheQueryParams is set in the flow trigger options, only those params are included in the cache key. When not configured, all query params are included (preserving the fix for #26929). This prevents unexpected cache busting while still supporting query-param-dependent flow responses. Changes: - FlowManager: store flow options alongside webhook handlers, expose getWebhookFlowOptions() for cache key computation - getCacheKey: extract flow UUID from path, look up flow options, filter req.query by the configured allowlist - Admin UI: add "Cache Query Parameters" tags input on webhook trigger options, visible when Cache is enabled * fix: validate cacheQueryParams type, fix UI visibility, add app changeset - Add runtime Array.isArray validation for cacheQueryParams to prevent silent cache key corruption from non-array values - Fix hidden condition: use cacheEnabled === false instead of !cacheEnabled so the field shows when cache defaults to enabled - Add @directus/app to changeset (UI changes require it) * style: add blank line to satisfy padding-line-between-statements * test(app): add tests for cacheQueryParams UI visibility * fix: use typed function signature instead of Function type * fix: use inline labels instead of missing translation keys for cache query params field * simplify and cleanup * update tests * update text * update changeset * test(api): add FlowManager.getFlow unit tests * style: format flows.test.ts with prettier --------- Co-authored-by: Nitwel <mail@nitwel.de> * Fix "Use named routes instead of hardcoded path strings #26733" (#26809) * In app\src\components\v-list-item.vue, change the type of `to` from RouteLocation to RouteLocationRaw. * In app\src\modules\settings\index.ts, name two paths: 'ai' and 'extensions'. * Update ai-conversation.vue * Update app\src\composables\use-collab.ts * Update app\src\modules\activity\routes\item.vue * Update app\src\modules\content * Update app\src\modules\deployment * Update app\src\modules\files\ * Update app\src\modules\insights\ * Update app\src\modules\users\ * Update app\src\views\private\ * Update app\src\modules\settings\ * Create good-geckos-ask.md * Fix format problems * Fix unit test in app\src\composables\use-collab.test.ts. * Fix format problem. * Update previously missed files. app\src\modules\deployment\routes\provider\dashboard.vue app\src\modules\files\routes\add-new.vue app\src\modules\settings\routes\flows\overview.vue * Modify app\src\modules\settings\routes\flows\overview.test.ts * Fix format issues. * Fix formt issue. * In app\src\modules\deployment\components\navigation.vue, use `if-else` instead of ternary operator to set `link`'s value. * fix item * fix user nav --------- Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com> Co-authored-by: Nitwel <mail@nitwel.de> * Fix MSSQL schema application failing for text fields with MAX length β¦ (#26934) * Fix MSSQL schema application failing for text fields with MAX length (-1) * Add begsaquib to contributors list * fix: Normalize MSSQL text field `MAX` length to `null` in `parseMaxLength` during schema introspection to prevent invalid SQL during schema application, and introduce a new `apply-diff` utility * fix: Normalize MSSQL text field MAX length (`-1`) to `null` in `parseMaxLength` to prevent invalid SQL during schema application. * test: Add comprehensive tests for the `applyDiff` utility, covering snapshot application to collections and fields. * feat: Introduce `FieldsService` for comprehensive field metadata, schema, and permission management, including a new test file. * update changeset --------- Co-authored-by: Nitwel <mail@nitwel.de> * Revert "Improve configurability of health checks (#26987)" (#27131) This reverts commit 41edb6c. * New Crowdin updates (#27063) * Update source file en-US.yaml * Update source file en-US.yaml * Update source file en-US.yaml * Release 11.17.3 (#27132) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * Add opt-in must-revalidate and ETag headers for assets via ASSETS_CACHE_REVALIDATE env var (#27027) * feat: add cache revalidate for assets * build: add changeset * refactor: check conditional headers before loading asset from storage * fix: add env variable to type-map * fix: use admin access to get modified_on field * fix: use admin file service if modified_on return null * fix: remove default config to env-stub * refactor: avoid double permission validation * refactor: move logic to bb testing * refactor: test using conditional ASSET_CACHE_REVALIDATE value * remove redundant accountability:null --------- Co-authored-by: judda <44623501+ComfortablyCoding@users.noreply.github.com> * fix(api): reject collection names containing "/" (#27114) * fix(api): reject collection names containing "/" Collection names with "/" break URL routing because Express interprets the slash as a path separator, making the collection unreachable via REST API. Add input validation at creation time to reject "/" in collection names, following the existing directus_ prefix validation pattern. Closes #27093 * add changeset --------- Co-authored-by: Nitwel <mail@nitwel.de> * Add ai policy (#27146) * add ai policy * simplify * add ai policy note to CoC * Update ai_policy.md * fix(sdk): reflect policies permission system in policy/user types (#27152) * fix(sdk): reflect policies permission system in policy/user types directus_policies.users, directus_policies.roles and directus_users.policies are M2M relations through directus_access, but the SDK types had them typed as direct arrays of DirectusUser / DirectusRole / DirectusPolicy. That meant payloads built from these types didn't match the API at runtime (e.g. creating a policy with users required each entry to be a { user: id } access item, not a user id). Retype them as DirectusAccess[] to match the schema. Closes #25757 * Fix SDK types for user access relations Updated SDK types to correctly link to the directus_access junction collection, reflecting the policies permission system. --------- Co-authored-by: Nitwel <mail@nitwel.de> * Fix `VERSION_SAVE` activity/revisions not respecting collection tracking settings (#27096) * fix(api): respect collection accountability on content version save The VersionsService.save() method was always writing activity and revision records for content version saves, ignoring the accountability configuration of the underlying collection. As a result, collections configured to "Do Not Track Anything" still produced activity and revision rows whenever a version was saved. Check the underlying collection's accountability setting before writing: - accountability === null -> skip both activity and revision - accountability === 'activity' -> create activity, skip revision - accountability === 'all' -> create both (existing behaviour) This matches the gate already used by ItemsService.createOne/updateMany for regular item mutations. Fixes #25894 * Address review feedback on version accountability tracking - Inline activity/revisions service instantiation to match flows.ts pattern - Reword changeset summary for clarity - Share test schema across tracking cases via per-collection fixtures - Use mockItemsService test-utils for consistent items-service mocking - Sign CLA Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * default accountability to null * rename to trackingAccountability to reduce confusion * improve tests * Apply suggestion from @ComfortablyCoding * Apply suggestion from @AlexGaillard --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: daedalus <44623501+ComfortablyCoding@users.noreply.github.com> Co-authored-by: Alex Gaillard <alex@directus.io> * Improve user token flows with immediate save and safer actions (#27108) * Improve user token flows with immediate save and safer actions * Cleanup redudant code, make route logic generic * Remove now invalid translation key * Add in en-GB translation strings --------- Co-authored-by: Alex Gaillard <alex@directus.io> * Add a force option to schema apply to bypass hash check (#27136) * added force option to schema apply * Update api/src/controllers/schema.ts Co-authored-by: judda <44623501+ComfortablyCoding@users.noreply.github.com> * Update .changeset/cute-rivers-mate.md Co-authored-by: judda <44623501+ComfortablyCoding@users.noreply.github.com> * cleanup * default to false * adjust error message * add test * add jsdoc * add new option to service type * Update cute-rivers-mate.md * Update cute-rivers-mate.md --------- Co-authored-by: judda <44623501+ComfortablyCoding@users.noreply.github.com> * Fix `useShortcut` attempting to access document before available (#27155) * move event listener registration to onMounted * add changeset * rework text checks in bb (#27156) * Update license * Fixed flows not awaiting reload (#27137) * fixed flows not awaiting reload * switch to p-queue * fix * only await queue when there are items pending --------- Co-authored-by: judda <44623501+ComfortablyCoding@users.noreply.github.com> * xiiui β Update sidebar styles (#26990) * xiiui β Update header and navigation bar and introduce shell theme scope (#27058) Co-authored-by: HZooly <torzuoli.hugo@gmail.com> * xiiui β Update header bar elements and remove headline and breadcrumbs (#27101) * xiiui β Update primary header actions to show label and replace outlined header action buttons (#27147) * xiiui β Update collab avatar indicator design (#27162) * xiiui β UI refinements: drawer width, disabled ghost button, header alignment, table height (#27171) * xiiui β Introduce VersionChip component (#27172) * xiiui β Update Visual Editor header bar buttons (#27182) * xiiui β Update Visual Editor popover/modal action buttons (#27186) * Enhance public view with TresJS shader background - Replaced the CSS animated-blob fallback in the public view with a TresJS canvas scaffold for a WebGL shader background. - Added new shader components and updated the Vite configuration to include the vite-plugin-glsl. - Updated ESLint configuration to ignore TresJS custom-renderer elements. - Added new dependencies for TresJS and updated existing ones in pnpm-lock.yaml and package.json. * Remove cursor interaction on shader * prevent layout shift when navigating away from visual editor (#27367) * xiiui β Update color system for VChip and VersionMenu components (#27339) * xiiui β Calendar layout toolbar responsiveness (#27317) * xiiui β Image Editor save button uses split button (#27318) * xiiui β Update SearchInput component to match the new design (#27370) * xiiui β Update mobile appearance of drawer sidebar (#27377) * fix merge conflict resolution issue * xiiui β Update UI for the Draft & Publish workflow (#27414) * xiiui β Update theme preview component to match the new design (#27413) * Enhance shader background with dynamic project color support * Add tresjs shader background for public pages in Directus app * update changsets * fix merge conflict resolution issues * Recalculate particles on canvas resize with proper disposal * Enhance shader background and experience components with dynamic color handling and improved particle geometry. Implement responsive resizing for particle density and update shader uniforms for better visual effects. * fix: Adjust clear color calculation in shader background for improved visual consistency * Integrate theme configuration for dynamic clear color adjustment in shader background * feat: add DotGridShader and webgpu rendering * feat: integrate @tresjs/leches controls for tweaking * refactor: enhance canvas controls and update clear color logic in shader background * Enhance DotGridShader and ShaderBackground components with improved color handling and control updates. Adjusted dot radius, noise parameters, and added a secondary color for gradient effects. Updated canvas color logic to support dynamic project color changes. * Add new defaults for shader config and remove dev dep tres leches * Lazy-load shader background to keep three.js out of the eager router chunk Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Remove unused plasma shader leftovers and their deps Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Add motion preference handling to DotGridShader component - Integrated `useLoop` and `usePreferredReducedMotion` for improved performance. - Implemented logic to stop the rendering loop based on user motion preferences, enhancing accessibility. - Updated rendering behavior to accommodate reduced motion settings. --------- Co-authored-by: Florian C. Wachmann <dev@formfcw.com> Co-authored-by: Hugo Torzuoli <torzuoli.hugo@gmail.com> Co-authored-by: Bryant Gillespie <bryant@directus.io> Co-authored-by: Gaetan SENN <gaetan.senn@gmail.com> Co-authored-by: Rob Luton <rob.luton@gmail.com> Co-authored-by: James White <jamesw1013@googlemail.com> Co-authored-by: Alex Gaillard <alex@directus.io> Co-authored-by: daedalus <44623501+ComfortablyCoding@users.noreply.github.com> Co-authored-by: Brainslug <br41nslug@users.noreply.github.com> Co-authored-by: Om Singh <omsingh2849@gmail.com> Co-authored-by: Nitwel <mail@nitwel.de> Co-authored-by: okxint <130782884+okxint@users.noreply.github.com> Co-authored-by: John Costa <costajohnt@gmail.com> Co-authored-by: powerseed <42278237+powerseed@users.noreply.github.com> Co-authored-by: Rijk van Zanten <rijkvanzanten@me.com> Co-authored-by: Saquib Beg <123379270+begsaquib@users.noreply.github.com> Co-authored-by: ian <licitdev@gmail.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Yogeshwaran C <84272111+yogeshwaran-c@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: LZylstra <11338479+LZylstra@users.noreply.github.com>
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
Scope
What's changed:
where applicable
CTAs into dedicated slots
Potential Risks / Drawbacks
lose that content
may depend on
Tested Scenarios
Review Notes / Questions
pnpm --filter themes buildbefore testingbreadcrumb removal
Recommended Review
refactor lives
clear navigation paths without breadcrumbs
overview route
Checklist
Addresses CMS-1927