diff --git a/.changeset/smooth-ravens-cry.md b/.changeset/smooth-ravens-cry.md
new file mode 100644
index 0000000000..4f80774621
--- /dev/null
+++ b/.changeset/smooth-ravens-cry.md
@@ -0,0 +1,5 @@
+---
+"@comet/admin": patch
+---
+
+Preserve the default `Button` color when using the `sx` prop with the `textLight` or `textDark` variant
diff --git a/demo/build-and-run-site.sh b/demo/build-and-run-site.sh
new file mode 100755
index 0000000000..c0465694f1
--- /dev/null
+++ b/demo/build-and-run-site.sh
@@ -0,0 +1,24 @@
+# Execute this script via `npm run build-and-run-site`
+#
+# This script builds the site like in the CI and starts it.
+#
+# Reasons why you want to do this:
+# - Check if it builds without warnings
+# - Check if there are suggestions from next build
+# - Check if it behaves in the same way like the dev-server
+# - Check caching behaviour, e.g. Cache-Control header (which is always no-cache in dev-server)
+
+#!/usr/bin/env bash
+
+echo "[1/2] Build site..."
+cd site
+rm -f .env .env.local .env.site-configs
+rm -rf .next
+NODE_ENV=production npm run build
+ln -sf ../../.env ./
+ln -sf ../../.env.local ./
+ln -sf ../.env.site-configs ./
+echo ""
+
+echo "[2/2] Start site..."
+npx dotenv -e .env.secrets -e .env.site-configs -- npm run serve
diff --git a/demo/site-pages/package.json b/demo/site-pages/package.json
index b76f465eb2..0010a363d8 100644
--- a/demo/site-pages/package.json
+++ b/demo/site-pages/package.json
@@ -33,6 +33,10 @@
"graphql-request": "^3.7.0",
"graphql-tag": "^2.12.6",
"next": "^14.2.24",
+<<<<<<< HEAD
+=======
+ "pure-react-carousel": "^1.0.0",
+>>>>>>> main
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-intl": "^6.8.9",
diff --git a/demo/site/next.config.mjs b/demo/site/next.config.mjs
index f6ff9807c5..d322f3d79d 100644
--- a/demo/site/next.config.mjs
+++ b/demo/site/next.config.mjs
@@ -29,6 +29,17 @@ const nextConfig = {
},
cacheHandler: process.env.REDIS_ENABLED === "true" ? import.meta.resolve("./dist/cache-handler.js").replace("file://", "") : undefined,
cacheMaxMemorySize: process.env.REDIS_ENABLED === "true" ? 0 : undefined, // disable default in-memory caching
+ rewrites: () => {
+ return {
+ afterFiles: [
+ {
+ // Show a 404 instead of trying to render page for paths starting with /_next/ or /assets/ as they don't get rewritten in DomainRewriteMiddleware and cause errors in ...path page
+ source: "/:prefix(_next|assets)/:path*",
+ destination: "/404",
+ },
+ ],
+ };
+ },
};
export default withBundleAnalyzer(nextConfig);
diff --git a/demo/site/package.json b/demo/site/package.json
index 3fcd9d05b5..3fd43dadff 100644
--- a/demo/site/package.json
+++ b/demo/site/package.json
@@ -30,6 +30,7 @@
"@opentelemetry/sdk-node": "^0.53.0",
"cache-manager": "^5.7.6",
"filesize": "^10.1.6",
+<<<<<<< HEAD
"graphql": "^15.10.1",
"ioredis": "^5.5.0",
"lru-cache": "^11.0.2",
@@ -37,6 +38,20 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-intl": "^6.8.9",
+=======
+ "fs-extra": "^9.0.0",
+ "graphql": "^15.0.0",
+ "graphql-tag": "^2.12.6",
+ "ioredis": "^5.4.1",
+ "lru-cache": "^11.0.1",
+ "next": "^14.2.24",
+ "pure-react-carousel": "^1.0.0",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "react-intl": "^6.0.0",
+ "react-is": "^17.0.2",
+ "react-select": "^5.8.0",
+>>>>>>> main
"redraft": "^0.10.2",
"styled-components": "^6.1.15",
"swiper": "^11.2.4",
diff --git a/demo/site/server.ts b/demo/site/server.ts
index 19deeb073e..cb68b9e98e 100644
--- a/demo/site/server.ts
+++ b/demo/site/server.ts
@@ -53,6 +53,16 @@ app.prepare().then(() => {
};
}
+ const originalWriteHead = res.writeHead;
+ res.writeHead = function (statusCode: number, ...args: unknown[]) {
+ // since writeHead is a callback function, it's called after handle() -> we get the actual response statusCode
+ if (statusCode >= 400) {
+ // prevent caching of error responses
+ res.setHeader("Cache-Control", "private, no-cache, no-store, max-age=0, must-revalidate");
+ }
+ return originalWriteHead.apply(this, [statusCode, ...args]);
+ };
+
await handle(req, res, parsedUrl);
} catch (err) {
console.error("Error occurred handling", req.url, err);
diff --git a/demo/site/src/app/not-found.tsx b/demo/site/src/app/not-found.tsx
new file mode 100644
index 0000000000..62c3d0b989
--- /dev/null
+++ b/demo/site/src/app/not-found.tsx
@@ -0,0 +1,12 @@
+import Link from "next/link";
+
+export default function NotFound404() {
+ return (
+
+
+ Page not found.
+ Return Home
+
+
+ );
+}
diff --git a/docs/docs/6-deployment/index.md b/docs/docs/6-deployment/index.md
index 75ef386725..a169cf0116 100644
--- a/docs/docs/6-deployment/index.md
+++ b/docs/docs/6-deployment/index.md
@@ -42,4 +42,4 @@ Serverless container platforms are a good option for those who want to deploy Co
#### Docker Compose
-For those with budget constraints, Docker Compose can be a viable option for deploying Comet applications.
+For those with budget constraints, [Docker Compose](https://docs.docker.com/compose/) can be a viable option for deploying Comet applications. An example deployment can be found [here](https://github.com/vivid-planet/comet-starter/tree/main/.docker-compose). The deployment only requires Docker to be installed on a server and leverages the power of [Traefik](https://doc.traefik.io/traefik/) to manage the ingress traffic (including SSL certificates).
diff --git a/docs/docs/7-migration-guide/migration-from-v6-to-v7.md b/docs/docs/7-migration-guide/migration-from-v6-to-v7.md
index 5a38010156..0470d5504d 100644
--- a/docs/docs/7-migration-guide/migration-from-v6-to-v7.md
+++ b/docs/docs/7-migration-guide/migration-from-v6-to-v7.md
@@ -236,7 +236,7 @@ DamModule.register({
})
```
-#### How to migrate (only required if CDN is used):
+#### How to migrate (only required if CDN is used with `DAM_CDN_ORIGIN_HEADER`):
Remove the following env vars from the API
@@ -288,26 +288,7 @@ If you want to enable the origin check:
+ }
```
-3. Adjust `site/server.js`
-
-```diff
-// site/server.js
-
-- const cdnEnabled = process.env.CDN_ENABLED === "true";
-- const disableCdnOriginHeaderCheck = process.env.DISABLE_CDN_ORIGIN_HEADER_CHECK === "true";
-- const cdnOriginHeader = process.env.CDN_ORIGIN_HEADER;
-+ const cdnOriginCheckSecret = process.env.CDN_ORIGIN_CHECK_SECRET;
-
-// ...
-
-- if (cdnEnabled && !disableCdnOriginHeaderCheck) {
-- const incomingCdnOriginHeader = req.headers["x-cdn-origin-check"];
-- if (cdnOriginHeader !== incomingCdnOriginHeader) {
-+ if (cdnOriginCheckSecret) {
-+ if (req.headers["x-cdn-origin-check"] !== cdnOriginCheckSecret) {
-```
-
-4. DNS changes might be required. `api.example.com` should point to CDN, CDN should point to internal API domain
+3. DNS changes might be required. `api.example.com` should point to CDN, CDN should point to internal API domain
### API Generator: Remove support for `visible` boolean, use `status` enum instead
@@ -1080,6 +1061,25 @@ const nextConfig = {
module.exports = withBundleAnalyzer(nextConfig);
```
+### Adjust CDN config in `site/server.js`
+
+```diff
+// site/server.js
+
+- const cdnEnabled = process.env.CDN_ENABLED === "true";
+- const disableCdnOriginHeaderCheck = process.env.DISABLE_CDN_ORIGIN_HEADER_CHECK === "true";
+- const cdnOriginHeader = process.env.CDN_ORIGIN_HEADER;
++ const cdnOriginCheckSecret = process.env.CDN_ORIGIN_CHECK_SECRET;
+
+// ...
+
+- if (cdnEnabled && !disableCdnOriginHeaderCheck) {
+- const incomingCdnOriginHeader = req.headers["x-cdn-origin-check"];
+- if (cdnOriginHeader !== incomingCdnOriginHeader) {
++ if (cdnOriginCheckSecret) {
++ if (req.headers["x-cdn-origin-check"] !== cdnOriginCheckSecret) {
+```
+
### Add a custom `InternalLinkBlock`
The `InternalLinkBlock` provided by `@comet/cms-site` is deprecated.
diff --git a/packages/admin/admin/src/common/buttons/Button.tsx b/packages/admin/admin/src/common/buttons/Button.tsx
index d3fadee9b6..cd46c287f4 100644
--- a/packages/admin/admin/src/common/buttons/Button.tsx
+++ b/packages/admin/admin/src/common/buttons/Button.tsx
@@ -71,6 +71,7 @@ const getMobileIconNode = ({ mobileIcon, startIcon, endIcon }: Pick(inProps: ButtonProps, ref: ForwardedRef) => {
const {
slotProps,
+ sx,
variant = "primary",
responsive,
mobileIcon = "auto",
@@ -97,6 +98,10 @@ export const Button = forwardRef((inProps: But
const commonButtonProps = {
...variantToMuiProps[variant],
+ sx: {
+ ...variantToMuiProps[variant].sx,
+ ...sx,
+ },
...restProps,
ownerState,
...slotProps?.root,
diff --git a/packages/site/cms-site/package.json b/packages/site/cms-site/package.json
index 55be42c73f..cbd5ad4fe9 100644
--- a/packages/site/cms-site/package.json
+++ b/packages/site/cms-site/package.json
@@ -41,6 +41,7 @@
"@types/lodash.isequal": "^4.5.8",
"@types/react": "^18.3.18",
"@types/react-dom": "^18.3.5",
+<<<<<<< HEAD
"chokidar-cli": "^3.0.0",
"eslint": "^9.20.1",
"jest": "^29.7.0",
@@ -49,6 +50,16 @@
"next": "^14.2.24",
"npm-run-all2": "^5.0.2",
"prettier": "^3.5.2",
+=======
+ "chokidar-cli": "^2.0.0",
+ "eslint": "^8.0.0",
+ "jest": "^29.5.0",
+ "jest-environment-jsdom": "^29.5.0",
+ "jest-junit": "^15.0.0",
+ "next": "^14.2.24",
+ "npm-run-all": "^4.1.5",
+ "prettier": "^2.0.0",
+>>>>>>> main
"react": "^18.3.1",
"react-dom": "^18.3.1",
"styled-components": "^6.1.15",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b461f9c870..721c6153c8 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -468,7 +468,14 @@ importers:
version: 11.0.2
next:
specifier: ^14.2.24
+<<<<<<< HEAD
version: 14.2.24(@babel/core@7.26.9)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+=======
+ version: 14.2.24(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)
+ pure-react-carousel:
+ specifier: ^1.0.0
+ version: 1.30.1(react-dom@18.3.1)(react@18.3.1)
+>>>>>>> main
react:
specifier: ^18.3.1
version: 18.3.1
@@ -571,7 +578,14 @@ importers:
version: 2.12.6(graphql@15.10.1)
next:
specifier: ^14.2.24
+<<<<<<< HEAD
version: 14.2.24(@babel/core@7.26.9)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+=======
+ version: 14.2.24(@babel/core@7.22.11)(@opentelemetry/api@1.9.0)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)
+ pure-react-carousel:
+ specifier: ^1.0.0
+ version: 1.30.1(react-dom@18.3.1)(react@18.3.1)
+>>>>>>> main
react:
specifier: ^18.3.1
version: 18.3.1
@@ -2132,10 +2146,17 @@ importers:
version: 16.0.0
next:
specifier: ^14.2.24
+<<<<<<< HEAD
version: 14.2.24(@babel/core@7.26.9)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
npm-run-all2:
specifier: ^5.0.2
version: 5.0.2
+=======
+ version: 14.2.24(@babel/core@7.22.11)(@opentelemetry/api@1.9.0)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1)
+ npm-run-all:
+ specifier: ^4.1.5
+ version: 4.1.5
+>>>>>>> main
prettier:
specifier: ^3.5.2
version: 3.5.2
@@ -5677,61 +5698,101 @@ packages:
'@next/bundle-analyzer@14.2.24':
resolution: {integrity: sha512-Dtu4mPkPqmcm81MPlSS2mv+rHf3rdp6S6gYDasH9Pzpdgo5SOvs4hxPiwfxYH7J9a+xkjvvtJ9b+LGw2zcon7w==}
+<<<<<<< HEAD
'@next/env@14.2.24':
+=======
+ /@next/env@14.2.24:
+>>>>>>> main
resolution: {integrity: sha512-LAm0Is2KHTNT6IT16lxT+suD0u+VVfYNQqM+EJTKuFRRuY2z+zj01kueWXPCxbMBDt0B5vONYzabHGUNbZYAhA==}
'@next/eslint-plugin-next@15.1.7':
resolution: {integrity: sha512-kRP7RjSxfTO13NE317ek3mSGzoZlI33nc/i5hs1KaWpK+egs85xg0DJ4p32QEiHnR0mVjuUfhRIun7awqfL7pQ==}
+<<<<<<< HEAD
'@next/swc-darwin-arm64@14.2.24':
+=======
+ /@next/swc-darwin-arm64@14.2.24:
+>>>>>>> main
resolution: {integrity: sha512-7Tdi13aojnAZGpapVU6meVSpNzgrFwZ8joDcNS8cJVNuP3zqqrLqeory9Xec5TJZR/stsGJdfwo8KeyloT3+rQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
+<<<<<<< HEAD
'@next/swc-darwin-x64@14.2.24':
+=======
+ /@next/swc-darwin-x64@14.2.24:
+>>>>>>> main
resolution: {integrity: sha512-lXR2WQqUtu69l5JMdTwSvQUkdqAhEWOqJEYUQ21QczQsAlNOW2kWZCucA6b3EXmPbcvmHB1kSZDua/713d52xg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
+<<<<<<< HEAD
'@next/swc-linux-arm64-gnu@14.2.24':
+=======
+ /@next/swc-linux-arm64-gnu@14.2.24:
+>>>>>>> main
resolution: {integrity: sha512-nxvJgWOpSNmzidYvvGDfXwxkijb6hL9+cjZx1PVG6urr2h2jUqBALkKjT7kpfurRWicK6hFOvarmaWsINT1hnA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
+<<<<<<< HEAD
'@next/swc-linux-arm64-musl@14.2.24':
+=======
+ /@next/swc-linux-arm64-musl@14.2.24:
+>>>>>>> main
resolution: {integrity: sha512-PaBgOPhqa4Abxa3y/P92F3kklNPsiFjcjldQGT7kFmiY5nuFn8ClBEoX8GIpqU1ODP2y8P6hio6vTomx2Vy0UQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
+<<<<<<< HEAD
'@next/swc-linux-x64-gnu@14.2.24':
+=======
+ /@next/swc-linux-x64-gnu@14.2.24:
+>>>>>>> main
resolution: {integrity: sha512-vEbyadiRI7GOr94hd2AB15LFVgcJZQWu7Cdi9cWjCMeCiUsHWA0U5BkGPuoYRnTxTn0HacuMb9NeAmStfBCLoQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
+<<<<<<< HEAD
'@next/swc-linux-x64-musl@14.2.24':
+=======
+ /@next/swc-linux-x64-musl@14.2.24:
+>>>>>>> main
resolution: {integrity: sha512-df0FC9ptaYsd8nQCINCzFtDWtko8PNRTAU0/+d7hy47E0oC17tI54U/0NdGk7l/76jz1J377dvRjmt6IUdkpzQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
+<<<<<<< HEAD
'@next/swc-win32-arm64-msvc@14.2.24':
+=======
+ /@next/swc-win32-arm64-msvc@14.2.24:
+>>>>>>> main
resolution: {integrity: sha512-ZEntbLjeYAJ286eAqbxpZHhDFYpYjArotQ+/TW9j7UROh0DUmX7wYDGtsTPpfCV8V+UoqHBPU7q9D4nDNH014Q==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
+<<<<<<< HEAD
'@next/swc-win32-ia32-msvc@14.2.24':
+=======
+ /@next/swc-win32-ia32-msvc@14.2.24:
+>>>>>>> main
resolution: {integrity: sha512-9KuS+XUXM3T6v7leeWU0erpJ6NsFIwiTFD5nzNg8J5uo/DMIPvCp3L1Ao5HjbHX0gkWPB1VrKoo/Il4F0cGK2Q==}
engines: {node: '>= 10'}
cpu: [ia32]
os: [win32]
+<<<<<<< HEAD
'@next/swc-win32-x64-msvc@14.2.24':
+=======
+ /@next/swc-win32-x64-msvc@14.2.24:
+>>>>>>> main
resolution: {integrity: sha512-cXcJ2+x0fXQ2CntaE00d7uUH+u1Bfp/E0HsNQH79YiLaZE5Rbm7dZzyAYccn3uICM7mw+DxoMqEfGXZtF4Fgaw==}
engines: {node: '>= 10'}
cpu: [x64]
@@ -31234,9 +31295,37 @@ snapshots:
transitivePeerDependencies:
- typescript
+<<<<<<< HEAD
next@14.2.24(@babel/core@7.26.9)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
'@next/env': 14.2.24
+=======
+ /next-line@1.1.0:
+ resolution: {integrity: sha512-+I10J3wKNoKddNxn0CNpoZ3eTZuqxjNM3b1GImVx22+ePI+Y15P8g/j3WsbP0fhzzrFzrtjOAoq5NCCucswXOQ==}
+ dev: false
+
+ /next@14.2.24(@babel/core@7.22.11)(@opentelemetry/api@1.9.0)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1):
+ resolution: {integrity: sha512-En8VEexSJ0Py2FfVnRRh8gtERwDRaJGNvsvad47ShkC2Yi8AXQPXEA2vKoDJlGFSj5WE5SyF21zNi4M5gyi+SQ==}
+ engines: {node: '>=18.17.0'}
+ hasBin: true
+ peerDependencies:
+ '@opentelemetry/api': ^1.1.0
+ '@playwright/test': ^1.41.2
+ '@types/react': ^18.0.0
+ react: ^18.2.0
+ react-dom: ^18.2.0
+ sass: ^1.3.0
+ peerDependenciesMeta:
+ '@opentelemetry/api':
+ optional: true
+ '@playwright/test':
+ optional: true
+ sass:
+ optional: true
+ dependencies:
+ '@next/env': 14.2.24
+ '@opentelemetry/api': 1.9.0
+>>>>>>> main
'@swc/helpers': 0.5.5
busboy: 1.6.0
caniuse-lite: 1.0.30001690
@@ -31255,7 +31344,54 @@ snapshots:
'@next/swc-win32-arm64-msvc': 14.2.24
'@next/swc-win32-ia32-msvc': 14.2.24
'@next/swc-win32-x64-msvc': 14.2.24
+<<<<<<< HEAD
'@opentelemetry/api': 1.9.0
+=======
+ transitivePeerDependencies:
+ - '@babel/core'
+ - babel-plugin-macros
+
+ /next@14.2.24(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@types/react@18.3.18)(react-dom@18.3.1)(react@18.3.1):
+ resolution: {integrity: sha512-En8VEexSJ0Py2FfVnRRh8gtERwDRaJGNvsvad47ShkC2Yi8AXQPXEA2vKoDJlGFSj5WE5SyF21zNi4M5gyi+SQ==}
+ engines: {node: '>=18.17.0'}
+ hasBin: true
+ peerDependencies:
+ '@opentelemetry/api': ^1.1.0
+ '@playwright/test': ^1.41.2
+ '@types/react': ^18.0.0
+ react: ^18.2.0
+ react-dom: ^18.2.0
+ sass: ^1.3.0
+ peerDependenciesMeta:
+ '@opentelemetry/api':
+ optional: true
+ '@playwright/test':
+ optional: true
+ sass:
+ optional: true
+ dependencies:
+ '@next/env': 14.2.24
+ '@opentelemetry/api': 1.9.0
+ '@swc/helpers': 0.5.5
+ '@types/react': 18.3.18
+ busboy: 1.6.0
+ caniuse-lite: 1.0.30001680
+ graceful-fs: 4.2.11
+ postcss: 8.4.31
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ styled-jsx: 5.1.1(@babel/core@7.26.0)(react@18.3.1)
+ optionalDependencies:
+ '@next/swc-darwin-arm64': 14.2.24
+ '@next/swc-darwin-x64': 14.2.24
+ '@next/swc-linux-arm64-gnu': 14.2.24
+ '@next/swc-linux-arm64-musl': 14.2.24
+ '@next/swc-linux-x64-gnu': 14.2.24
+ '@next/swc-linux-x64-musl': 14.2.24
+ '@next/swc-win32-arm64-msvc': 14.2.24
+ '@next/swc-win32-ia32-msvc': 14.2.24
+ '@next/swc-win32-x64-msvc': 14.2.24
+>>>>>>> main
transitivePeerDependencies:
- '@babel/core'
- babel-plugin-macros
diff --git a/project-words.txt b/project-words.txt
index 3b7f4f0fc0..bb343e84d4 100644
--- a/project-words.txt
+++ b/project-words.txt
@@ -21,4 +21,5 @@ typesafe
exceljs
ormconfig
exif
-brevo
\ No newline at end of file
+brevo
+Traefik