Skip to content

refactor(next)!: move templates and elements to @payloadcms/ui#16765

Merged
jacobsfletch merged 19 commits into
mainfrom
refactor/relocate-next-elements-and-templates
May 29, 2026
Merged

refactor(next)!: move templates and elements to @payloadcms/ui#16765
jacobsfletch merged 19 commits into
mainfrom
refactor/relocate-next-elements-and-templates

Conversation

@jacobsfletch
Copy link
Copy Markdown
Member

@jacobsfletch jacobsfletch commented May 27, 2026

Requires #16763 and #16753.

Moves all elements and templates defined in the @payloadcms/next package to @payloadcms/ui. This is in effort to convert the @payloadcms/next package into a framework adapter.

Relocated exports — code physically moved from @payloadcms/next to @payloadcms/ui:

Component Old source New source
DefaultTemplate @payloadcms/next/templates @payloadcms/ui/rsc
DefaultTemplateProps @payloadcms/next/templates @payloadcms/ui/rsc
MinimalTemplate @payloadcms/next/templates @payloadcms/ui/rsc
MinimalTemplateProps @payloadcms/next/templates @payloadcms/ui/rsc
DocumentHeader @payloadcms/next/rsc @payloadcms/ui/rsc
DefaultNav @payloadcms/next/rsc @payloadcms/ui/rsc
Logo @payloadcms/next/rsc @payloadcms/ui/rsc
HierarchyTypeFieldServer @payloadcms/next/rsc @payloadcms/ui/rsc
DefaultNavClient @payloadcms/next/client @payloadcms/ui
HierarchyTypeField @payloadcms/next/client @payloadcms/ui
NavSidebarToggle @payloadcms/next/client @payloadcms/ui
NavWrapper @payloadcms/next/client @payloadcms/ui

This PR also removes the now unneeded export aliases. These were in place for backwards compatibility during v3. Now, we enforce that all imports point to its canonical source, not the aliased export.

Component Old source New source
CollectionCards @payloadcms/next/rsc @payloadcms/ui/rsc
SlugField @payloadcms/next/client @payloadcms/ui
QueryPresetsAccessCell @payloadcms/next/client @payloadcms/ui
QueryPresetsColumnField @payloadcms/next/client @payloadcms/ui
QueryPresetsColumnsCell @payloadcms/next/client @payloadcms/ui
QueryPresetsGroupByCell @payloadcms/next/client @payloadcms/ui
QueryPresetsGroupByField @payloadcms/next/client @payloadcms/ui
QueryPresetsWhereCell @payloadcms/next/client @payloadcms/ui
QueryPresetsWhereField @payloadcms/next/client @payloadcms/ui

The ./client, ./rsc, and ./templates subpath exports on @payloadcms/next are removed entirely.

Codemod

To migrate automatically, there's a codemod for this change available by running:

npx @payloadcms/codemod --transform migrate-next-subpath-exports

Adds server-side adapter passed into server functions (not React context),
abstracting framework-specific APIs like cookies, headers, redirect, and
forbidden/unauthorized/notFound boundaries.

- Define ServerAdapter type and Next.js implementation
- Wire ServerAdapter through plugin-multi-tenant entrypoints
- Safely access req.server from optional contexts
Groups framework adapter implementations under packages/next/src/adapters/
instead of mixing them into elements/ (UI primitives) and utilities/ (misc
helpers). The Next adapter is neither — it bridges next/navigation into the
RouterAdapterContext contract from payload core. Sets up the structure for
the upcoming ServerAdapter to live alongside as adapters/server.ts.
Co-locates the Next ServerAdapter impl with the RouterAdapter impl under
packages/next/src/adapters/. Both are framework bridges, not utilities.
Separates router contracts from cookie contracts:
- adapters/router.ts: RouterAdapterComponent, RouterAdapterRouter, LinkAdapterProps
- adapters/cookies.ts: CookieStore, CookieOptions
- adapters/index.ts: barrel re-export

Makes room for ServerAdapter to land as adapters/server.ts on its own
branch without re-mingling concerns in a single file.
…-abstraction

Adopts the adapters/ folder split for payload core. Resolves the conflict on
admin/adapters.ts by extracting ServerAdapter into adapters/server.ts and
updating the two ServerAdapter consumers (config/types.ts, types/index.ts).
Moves DocumentHeader, FormHeader, HierarchyTypeField, Logo, Nav, and
Default/Minimal templates out of @payloadcms/next and into @payloadcms/ui.
The two client files that called next/navigation now use the ui
RouterAdapter hooks, so the relocated code has zero next.js imports.
@payloadcms/next exports re-export from @payloadcms/ui to keep the
existing public API stable.
These three subpaths were thin re-exports of @payloadcms/ui after the
admin element relocation. Removing them deletes the indirection and
points all consumers at the canonical @payloadcms/ui (or
@payloadcms/ui/rsc) entry points. Updates the affected example, test,
and template importMap files accordingly.
…ms/ui

Component path strings in payload core (SlugField, CollectionCards,
HierarchyTypeFieldServer, QueryPresets cells/fields) still referenced
the removed @payloadcms/next/{client,rsc} subpaths. Updates them plus
two doc examples to point at the canonical @payloadcms/ui and
@payloadcms/ui/rsc entry points.
…xports + add codemod

Adds a v4 migration guide entry covering the removal of
@payloadcms/next/{client,rsc,templates} and a companion
@payloadcms/codemod transform (migrate-next-subpath-exports) that
rewrites both import declarations and string-literal component paths in
Payload config to point at the canonical @payloadcms/ui entry points.
The relocation PR shouldn't churn the bundled template projects. Their
import maps will be regenerated by `payload generate:importmap` on each
release flow, so the in-tree files revert to the main snapshot.
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 27, 2026

📦 esbuild Bundle Analysis for payload

This analysis was generated by esbuild-bundle-analyzer. 🤖

Meta File Out File Size (raw) Note
packages/next/meta_index.json esbuild/index.js 1.03 MB 🆕 Added
packages/payload/meta_index.json esbuild/index.js 1.41 MB 🆕 Added
packages/payload/meta_shared.json esbuild/exports/shared.js 192.51 KB 🆕 Added
packages/richtext-lexical/meta_client.json esbuild/exports/client_optimized/index.js 304.12 KB 🆕 Added
packages/ui/meta_client.json esbuild/exports/client_optimized/index.js 1.27 MB 🆕 Added
packages/ui/meta_shared.json esbuild/exports/shared_optimized/index.js 18.56 KB 🆕 Added
Largest paths These visualization shows top 20 largest paths in the bundle.

Meta file: packages/next/meta_index.json, Out file: esbuild/index.js

Path Size
../../node_modules ${{\color{Goldenrod}{ █████████████████████ }}}$ 84.3%, 861.09 KB
dist/views/Version ${{\color{Goldenrod}{ █▎ }}}$ 5.0%, 51.56 KB
dist/views/Dashboard ${{\color{Goldenrod}{ ▌ }}}$ 2.1%, 21.85 KB
dist/views/Document ${{\color{Goldenrod}{ ▍ }}}$ 1.6%, 16.76 KB
dist/views/List ${{\color{Goldenrod}{ ▍ }}}$ 1.5%, 15.51 KB
dist/views/Root ${{\color{Goldenrod}{ ▎ }}}$ 1.0%, 10.01 KB
dist/views/Account ${{\color{Goldenrod}{ ▏ }}}$ 0.6%, 6.13 KB
dist/views/API ${{\color{Goldenrod}{ ▏ }}}$ 0.6%, 6.13 KB
dist/views/Versions ${{\color{Goldenrod}{ ▏ }}}$ 0.6%, 5.74 KB
dist/views/Login ${{\color{Goldenrod}{ ▏ }}}$ 0.5%, 4.62 KB
dist/layouts/Root ${{\color{Goldenrod}{ }}}$ 0.4%, 3.61 KB
dist/views/ForgotPassword ${{\color{Goldenrod}{ }}}$ 0.3%, 3.22 KB
dist/views/CreateFirstUser ${{\color{Goldenrod}{ }}}$ 0.3%, 3.02 KB
dist/views/ResetPassword ${{\color{Goldenrod}{ }}}$ 0.2%, 2.46 KB
dist/views/Logout ${{\color{Goldenrod}{ }}}$ 0.2%, 1.96 KB
dist/views/Verify ${{\color{Goldenrod}{ }}}$ 0.1%, 1.35 KB
dist/utilities/initReq.js ${{\color{Goldenrod}{ }}}$ 0.1%, 1.15 KB
dist/views/NotFound ${{\color{Goldenrod}{ }}}$ 0.1%, 1.04 KB
dist/adapters/router.js ${{\color{Goldenrod}{ }}}$ 0.1%, 659 B
dist/adapters/server.js ${{\color{Goldenrod}{ }}}$ 0.1%, 531 B
(other) ${{\color{Goldenrod}{ ███▉ }}}$ 15.7%, 160.89 KB

Meta file: packages/payload/meta_index.json, Out file: esbuild/index.js

Path Size
../../node_modules ${{\color{Goldenrod}{ █████████████████ }}}$ 68.4%, 959.51 KB
dist/fields/hooks ${{\color{Goldenrod}{ ▊ }}}$ 3.1%, 44.07 KB
dist/collections/operations ${{\color{Goldenrod}{ ▋ }}}$ 2.9%, 40.23 KB
dist/versions/migrations ${{\color{Goldenrod}{ ▎ }}}$ 1.3%, 18.50 KB
dist/auth/operations ${{\color{Goldenrod}{ ▎ }}}$ 1.1%, 15.63 KB
dist/fields/config ${{\color{Goldenrod}{ ▎ }}}$ 1.0%, 13.40 KB
dist/globals/operations ${{\color{Goldenrod}{ ▎ }}}$ 1.0%, 13.40 KB
dist/utilities/configToJSONSchema.js ${{\color{Goldenrod}{ ▏ }}}$ 0.9%, 13.10 KB
dist/queues/operations ${{\color{Goldenrod}{ ▏ }}}$ 0.9%, 12.63 KB
dist/fields/validations.js ${{\color{Goldenrod}{ ▏ }}}$ 0.8%, 10.57 KB
dist/collections/config ${{\color{Goldenrod}{ ▏ }}}$ 0.7%, 9.53 KB
dist/bin/generateImportMap ${{\color{Goldenrod}{ ▏ }}}$ 0.7%, 9.44 KB
dist/config/orderable ${{\color{Goldenrod}{ ▏ }}}$ 0.6%, 7.92 KB
dist/uploads/fetchAPI-multipart ${{\color{Goldenrod}{ ▏ }}}$ 0.6%, 7.80 KB
dist/index.js ${{\color{Goldenrod}{ ▏ }}}$ 0.6%, 7.77 KB
dist/hierarchy/utils ${{\color{Goldenrod}{ ▏ }}}$ 0.5%, 7.65 KB
dist/database/migrations ${{\color{Goldenrod}{ ▏ }}}$ 0.5%, 7.54 KB
dist/collections/endpoints ${{\color{Goldenrod}{ }}}$ 0.4%, 6.23 KB
dist/auth/strategies ${{\color{Goldenrod}{ }}}$ 0.4%, 5.43 KB
dist/queues/config ${{\color{Goldenrod}{ }}}$ 0.4%, 5.31 KB
(other) ${{\color{Goldenrod}{ ███████▉ }}}$ 31.6%, 443.27 KB

Meta file: packages/payload/meta_shared.json, Out file: esbuild/exports/shared.js

Path Size
../../node_modules ${{\color{Goldenrod}{ ███████████████████▉ }}}$ 79.5%, 150.12 KB
dist/fields/validations.js ${{\color{Goldenrod}{ █▍ }}}$ 5.6%, 10.57 KB
dist/config/orderable ${{\color{Goldenrod}{ ▍ }}}$ 1.7%, 3.13 KB
dist/fields/baseFields ${{\color{Goldenrod}{ ▍ }}}$ 1.5%, 2.79 KB
dist/utilities/deepCopyObject.js ${{\color{Goldenrod}{ ▎ }}}$ 1.3%, 2.54 KB
dist/auth/cookies.js ${{\color{Goldenrod}{ ▏ }}}$ 0.8%, 1.55 KB
dist/utilities/flattenTopLevelFields.js ${{\color{Goldenrod}{ ▏ }}}$ 0.8%, 1.42 KB
dist/fields/config ${{\color{Goldenrod}{ ▏ }}}$ 0.7%, 1.29 KB
dist/utilities/getVersionsConfig.js ${{\color{Goldenrod}{ ▏ }}}$ 0.6%, 1.04 KB
dist/utilities/flattenAllFields.js ${{\color{Goldenrod}{ ▏ }}}$ 0.5%, 943 B
dist/utilities/unflatten.js ${{\color{Goldenrod}{ }}}$ 0.4%, 779 B
dist/utilities/sanitizeUserDataForEmail.js ${{\color{Goldenrod}{ }}}$ 0.4%, 713 B
dist/utilities/getFieldPermissions.js ${{\color{Goldenrod}{ }}}$ 0.3%, 651 B
dist/collections/config ${{\color{Goldenrod}{ }}}$ 0.3%, 570 B
dist/bin/generateImportMap ${{\color{Goldenrod}{ }}}$ 0.3%, 561 B
dist/auth/sessions.js ${{\color{Goldenrod}{ }}}$ 0.3%, 525 B
dist/fields/getFieldPaths.js ${{\color{Goldenrod}{ }}}$ 0.3%, 485 B
dist/utilities/appendDateTimezoneSelectFields.js ${{\color{Goldenrod}{ }}}$ 0.2%, 451 B
dist/utilities/getSafeRedirect.js ${{\color{Goldenrod}{ }}}$ 0.2%, 423 B
dist/utilities/deepMerge.js ${{\color{Goldenrod}{ }}}$ 0.2%, 413 B
(other) ${{\color{Goldenrod}{ █████▏ }}}$ 20.5%, 38.61 KB

Meta file: packages/richtext-lexical/meta_client.json, Out file: esbuild/exports/client_optimized/index.js

Path Size
dist/features/blocks ${{\color{Goldenrod}{ ███ }}}$ 12.4%, 37.36 KB
dist/lexical/ui ${{\color{Goldenrod}{ ██▊ }}}$ 11.4%, 34.16 KB
dist/lexical/plugins ${{\color{Goldenrod}{ ██▋ }}}$ 10.9%, 32.88 KB
dist/features/experimental_table ${{\color{Goldenrod}{ ██▎ }}}$ 9.0%, 27.16 KB
dist/packages/@lexical ${{\color{Goldenrod}{ █▌ }}}$ 6.3%, 18.99 KB
dist/features/link ${{\color{Goldenrod}{ █▌ }}}$ 6.3%, 18.81 KB
dist/features/toolbars ${{\color{Goldenrod}{ █▍ }}}$ 5.5%, 16.58 KB
dist/features/upload ${{\color{Goldenrod}{ █▏ }}}$ 4.7%, 14.09 KB
dist/features/textState ${{\color{Goldenrod}{ ▉ }}}$ 3.7%, 11.08 KB
dist/features/relationship ${{\color{Goldenrod}{ ▊ }}}$ 3.1%, 9.39 KB
dist/lexical/utils ${{\color{Goldenrod}{ ▋ }}}$ 2.9%, 8.79 KB
dist/features/converters ${{\color{Goldenrod}{ ▋ }}}$ 2.8%, 8.36 KB
dist/features/debug ${{\color{Goldenrod}{ ▋ }}}$ 2.5%, 7.40 KB
dist/utilities/fieldsDrawer ${{\color{Goldenrod}{ ▌ }}}$ 2.4%, 7.29 KB
dist/lexical/config ${{\color{Goldenrod}{ ▍ }}}$ 1.7%, 5.08 KB
dist/features/lists ${{\color{Goldenrod}{ ▍ }}}$ 1.7%, 5.00 KB
dist/features/format ${{\color{Goldenrod}{ ▎ }}}$ 1.2%, 3.46 KB
dist/lexical/LexicalEditor.js ${{\color{Goldenrod}{ ▎ }}}$ 1.1%, 3.23 KB
dist/features/horizontalRule ${{\color{Goldenrod}{ ▎ }}}$ 1.1%, 3.18 KB
dist/field/Field.js ${{\color{Goldenrod}{ ▏ }}}$ 0.9%, 2.84 KB
(other) ${{\color{Goldenrod}{ █████████████████████▉ }}}$ 87.6%, 263.53 KB

Meta file: packages/ui/meta_client.json, Out file: esbuild/exports/client_optimized/index.js

Path Size
../../node_modules ${{\color{Goldenrod}{ ███████████▌ }}}$ 46.2%, 579.79 KB
dist/elements/Hierarchy ${{\color{Goldenrod}{ ▉ }}}$ 3.5%, 44.00 KB
dist/elements/BulkUpload ${{\color{Goldenrod}{ ▌ }}}$ 2.2%, 28.06 KB
dist/views/HierarchyList ${{\color{Goldenrod}{ ▍ }}}$ 1.6%, 20.40 KB
dist/elements/Table ${{\color{Goldenrod}{ ▍ }}}$ 1.5%, 19.25 KB
dist/elements/WhereBuilder ${{\color{Goldenrod}{ ▎ }}}$ 1.4%, 17.34 KB
dist/views/Edit ${{\color{Goldenrod}{ ▎ }}}$ 1.4%, 17.27 KB
dist/forms/Form ${{\color{Goldenrod}{ ▎ }}}$ 1.3%, 15.87 KB
dist/fields/Relationship ${{\color{Goldenrod}{ ▎ }}}$ 1.2%, 15.47 KB
dist/fields/Blocks ${{\color{Goldenrod}{ ▎ }}}$ 1.2%, 15.11 KB
dist/fields/Upload ${{\color{Goldenrod}{ ▎ }}}$ 1.1%, 14.38 KB
dist/elements/QueryPresets ${{\color{Goldenrod}{ ▏ }}}$ 0.8%, 10.22 KB
dist/elements/PublishButton ${{\color{Goldenrod}{ ▏ }}}$ 0.7%, 9.01 KB
dist/elements/HTMLDiff ${{\color{Goldenrod}{ ▏ }}}$ 0.7%, 8.38 KB
dist/elements/LivePreview ${{\color{Goldenrod}{ ▏ }}}$ 0.7%, 8.25 KB
dist/elements/ReactSelect ${{\color{Goldenrod}{ ▏ }}}$ 0.6%, 7.84 KB
dist/fields/Array ${{\color{Goldenrod}{ ▏ }}}$ 0.6%, 7.75 KB
dist/views/List ${{\color{Goldenrod}{ ▏ }}}$ 0.6%, 7.75 KB
dist/elements/Nav ${{\color{Goldenrod}{ ▏ }}}$ 0.6%, 7.54 KB
dist/elements/RelationshipTable ${{\color{Goldenrod}{ ▏ }}}$ 0.5%, 6.87 KB
(other) ${{\color{Goldenrod}{ █████████████▍ }}}$ 53.8%, 676.25 KB

Meta file: packages/ui/meta_shared.json, Out file: esbuild/exports/shared_optimized/index.js

Path Size
dist/graphics/Logo ${{\color{Goldenrod}{ ███████▊ }}}$ 31.1%, 5.57 KB
../../node_modules ${{\color{Goldenrod}{ ███▋ }}}$ 14.8%, 2.65 KB
dist/graphics/Icon ${{\color{Goldenrod}{ ██▏ }}}$ 8.5%, 1.52 KB
dist/utilities/formatDocTitle ${{\color{Goldenrod}{ █▊ }}}$ 7.4%, 1.32 KB
dist/providers/TableColumns ${{\color{Goldenrod}{ █▏ }}}$ 4.8%, 866 B
dist/utilities/getGlobalData.js ${{\color{Goldenrod}{ █ }}}$ 4.2%, 762 B
dist/utilities/api.js ${{\color{Goldenrod}{ █ }}}$ 4.2%, 756 B
dist/utilities/groupNavItems.js ${{\color{Goldenrod}{ █ }}}$ 4.1%, 734 B
dist/elements/Translation ${{\color{Goldenrod}{ ▋ }}}$ 2.7%, 493 B
dist/utilities/handleTakeOver.js ${{\color{Goldenrod}{ ▋ }}}$ 2.5%, 440 B
dist/utilities/traverseForLocalizedFields.js ${{\color{Goldenrod}{ ▌ }}}$ 2.2%, 399 B
dist/elements/withMergedProps ${{\color{Goldenrod}{ ▍ }}}$ 1.9%, 339 B
dist/utilities/getNavGroups.js ${{\color{Goldenrod}{ ▍ }}}$ 1.9%, 338 B
dist/utilities/getVisibleEntities.js ${{\color{Goldenrod}{ ▍ }}}$ 1.8%, 329 B
dist/elements/WithServerSideProps ${{\color{Goldenrod}{ ▎ }}}$ 1.3%, 232 B
dist/utilities/handleGoBack.js ${{\color{Goldenrod}{ ▎ }}}$ 1.0%, 180 B
dist/fields/mergeFieldStyles.js ${{\color{Goldenrod}{ ▏ }}}$ 0.9%, 159 B
dist/utilities/handleBackToDashboard.js ${{\color{Goldenrod}{ ▏ }}}$ 0.8%, 152 B
dist/forms/Form ${{\color{Goldenrod}{ ▏ }}}$ 0.8%, 147 B
dist/utilities/abortAndIgnore.js ${{\color{Goldenrod}{ ▏ }}}$ 0.8%, 146 B
(other) ${{\color{Goldenrod}{ █████████████████▏ }}}$ 68.9%, 12.36 KB
Details

Next to the size is how much the size has increased or decreased compared with the base branch of this PR.

  • ‼️: Size increased by 20% or more. Special attention should be given to this.
  • ⚠️: Size increased in acceptable range (lower than 20%).
  • ✅: No change or even downsized.
  • 🗑️: The out file is deleted: not found in base branch.
  • 🆕: The out file is newly found: will be added to base branch.

@jacobsfletch jacobsfletch changed the title refactor(next)!: relocate templates and elements to @payloadcms/ui refactor(next)!: move templates and elements to @payloadcms/ui May 27, 2026
The relocated DocumentHeader, DefaultNav, SidebarTabs, HierarchyTypeFieldServer,
and DefaultTemplate server components were importing their `'use client'`
collaborators via relative paths. In production bundles that splits the
React context across server and client chunks, which surfaced as
`useServerFunctions must be used within a ServerFunctionsProvider`
when SidebarTabsClient mounted under a RootProvider tree.

Routes each server→client edge through `@payloadcms/ui`'s
`exports/client` barrel (with the standard
`payload/no-imports-from-exports-dir` disable) so the bundler treats the
client modules as the same instance the RootProvider populates.
Base automatically changed from refactor/server-adapter-abstraction to main May 28, 2026 16:16
# Conflicts:
#	docs/migration-guide/v4.mdx
#	packages/next/src/layouts/Root/index.tsx
#	packages/ui/src/elements/DocumentHeader/Tabs/Tab/index.css
#	packages/ui/src/elements/DocumentHeader/Tabs/Tab/index.scss
#	packages/ui/src/elements/DocumentHeader/Tabs/Tab/index.tsx
#	packages/ui/src/elements/DocumentHeader/Tabs/index.css
#	packages/ui/src/elements/DocumentHeader/Tabs/index.scss
#	packages/ui/src/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.css
#	packages/ui/src/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.scss
#	packages/ui/src/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.tsx
perfectionist/sort-imports flagged the blank line between the local
import group and the side-effect `./index.css` import in two relocated
files. Squash the blank line so the imports form one contiguous group.
@jacobsfletch jacobsfletch marked this pull request as ready for review May 28, 2026 17:29
The relocated `tabs/index.tsx` server module was importing the
`'use client'` VersionsPill via a relative path. In production bundles
that splits the DocumentInfo context across server and client chunks,
so useDocumentInfo() returns the default empty object, versionCount is
undefined, and the pill renders null — causing version-count e2e tests
to time out waiting for `.pill-version-count` to appear.

Routes this server→client edge through `@payloadcms/ui`'s
`exports/client` barrel (matching the pattern from
fd020ea) so the bundler treats the client module as the same
instance the DocumentInfoProvider populates.
@jacobsfletch jacobsfletch force-pushed the refactor/relocate-next-elements-and-templates branch from 86eb6bd to 866444a Compare May 28, 2026 18:53
paulpopus
paulpopus previously approved these changes May 28, 2026
@jacobsfletch jacobsfletch merged commit 1b29f7c into main May 29, 2026
321 of 326 checks passed
@jacobsfletch jacobsfletch deleted the refactor/relocate-next-elements-and-templates branch May 29, 2026 11:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants