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