11 Commits
v1.9.6 ... main

Author SHA1 Message Date
c52a132d62 fix(ci): repair 'Extract Build Error Logs' undefined token variables
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 9s
Build & Deploy / 🏗️ Build (push) Failing after 9m49s
Build & Deploy / 🚀 Deploy (push) Has been skipped
Build & Deploy / 🧪 QA (push) Has been skipped
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 3s
Nightly QA / 🔍 Static Analysis (push) Successful in 3m35s
Nightly QA / 🎭 Lighthouse (push) Successful in 2m21s
Nightly QA / 📝 E2E (push) Successful in 4m34s
Nightly QA / 🔗 Links & Deps (push) Successful in 1m59s
Nightly QA / 🔔 Notify (push) Has been skipped
- Replaced missing steps.discover_token.outputs reference with secrets.NPM_TOKEN in Job 3 failure extractor
- Prevents the workflow from masking the actual docker build failure logs with a secondary auth failure
2026-03-07 23:36:09 +01:00
11f735bbdf fix: resolve admin white screen via static ChatWindowProvider import
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 16s
Build & Deploy / 🏗️ Build (push) Failing after 6m58s
Build & Deploy / 🚀 Deploy (push) Has been skipped
Build & Deploy / 🧪 QA (push) Has been skipped
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 1s
- Statically declare ChatWindowProvider in payload.config.ts admin.components.providers
- Regenerate importMap.js with correct component mappings
- Update Dockerfile to support _at-mintel monorepo sync for local builds
- Add .gitignore entries for manual build artifacts
- Update blocks and collections (payload-ai integration updates)
- Sync pnpm-lock.yaml
2026-03-07 11:47:52 +01:00
c81dae0b7b fix(next): add transpilePackages for @mintel sibling workspaces to fix CI module resolution
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 8s
Build & Deploy / 🏗️ Build (push) Failing after 14m37s
Build & Deploy / 🚀 Deploy (push) Has been skipped
Build & Deploy / 🧪 QA (push) Has been skipped
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 2s
Nightly QA / 🔗 Links & Deps (push) Successful in 4m18s
Nightly QA / 🔍 Static Analysis (push) Successful in 4m40s
Nightly QA / 🎭 Lighthouse (push) Successful in 4m46s
Nightly QA / 📝 E2E (push) Successful in 5m7s
Nightly QA / 🔔 Notify (push) Has been skipped
2026-03-06 22:43:46 +01:00
716ece1c6c fix(payload): explicitly copy generated importMap.js to nextjs standalone image runner
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 8s
Build & Deploy / 🚀 Deploy (push) Has been skipped
Build & Deploy / 🏗️ Build (push) Failing after 18m27s
Build & Deploy / 🧪 QA (push) Has been skipped
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 2s
2026-03-06 18:33:01 +01:00
e0ccf1cdfb fix(payload): add importMap generation to build script and isolate UI imports
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 8s
Build & Deploy / 🚀 Deploy (push) Has been skipped
Build & Deploy / 🏗️ Build (push) Failing after 18m25s
Build & Deploy / 🧪 QA (push) Has been skipped
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 2s
2026-03-06 13:54:16 +01:00
6a6fbb6f19 feat: register payloadChatPlugin from @mintel/payload-ai in Payload CMS config
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 10s
Build & Deploy / 🏗️ Build (push) Failing after 17m52s
Build & Deploy / 🚀 Deploy (push) Has been skipped
Build & Deploy / 🧪 QA (push) Has been skipped
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 1s
2026-03-06 01:50:54 +01:00
6b6b2b8ece fix(blog): auto-play LoadTimeSimulator, fix Carousel data, filter TableOfContents text, extend CarouselBlock schema
All checks were successful
Build & Deploy / 🔍 Prepare (push) Successful in 8s
Build & Deploy / 🏗️ Build (push) Successful in 21m19s
Build & Deploy / 🚀 Deploy (push) Successful in 14s
Build & Deploy / 🧪 QA (push) Successful in 1m28s
Build & Deploy / 🧪 Post-Deploy Verification (push) Successful in 2m59s
Build & Deploy / 🔔 Notify (push) Successful in 9s
Nightly QA / 🔗 Links & Deps (push) Successful in 3m40s
Nightly QA / 🎭 Lighthouse (push) Successful in 4m18s
Nightly QA / 🔍 Static Analysis (push) Successful in 4m34s
Nightly QA / 📝 E2E (push) Successful in 4m45s
Nightly QA / 🔔 Notify (push) Has been skipped
2026-03-06 00:54:45 +01:00
9f412d81a8 chore: release v1.9.9 to trigger prod deploy
All checks were successful
Build & Deploy / 🔍 Prepare (push) Successful in 7s
Build & Deploy / 🏗️ Build (push) Successful in 10m35s
Build & Deploy / 🚀 Deploy (push) Successful in 15s
Build & Deploy / 🧪 QA (push) Successful in 50s
Build & Deploy / 🧪 Post-Deploy Verification (push) Successful in 1m44s
Build & Deploy / 🔔 Notify (push) Successful in 2s
2026-03-05 23:54:12 +01:00
9c401f13de chore: trigger CI build after clearing infra registry space
All checks were successful
Build & Deploy / 🔍 Prepare (push) Successful in 23s
Build & Deploy / 🏗️ Build (push) Successful in 16m49s
Build & Deploy / 🚀 Deploy (push) Successful in 15s
Build & Deploy / 🧪 QA (push) Successful in 56s
Build & Deploy / 🧪 Post-Deploy Verification (push) Successful in 4m0s
Build & Deploy / 🔔 Notify (push) Successful in 1s
2026-03-05 23:22:45 +01:00
5857404ac1 fix(blog): merge defaultJSXConverters to prevent 'unknown node' on standard Lexical nodes
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 7s
Build & Deploy / 🏗️ Build (push) Failing after 20m40s
Build & Deploy / 🚀 Deploy (push) Has been skipped
Build & Deploy / 🧪 QA (push) Has been skipped
Build & Deploy / 🧪 Post-Deploy Verification (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 1s
2026-03-05 22:53:19 +01:00
34a96f8aef fix(blog): resolve IconList string collision rendering 'Check' text
All checks were successful
Build & Deploy / 🔍 Prepare (push) Successful in 7s
Build & Deploy / 🏗️ Build (push) Successful in 16m0s
Build & Deploy / 🚀 Deploy (push) Successful in 13s
Build & Deploy / 🧪 QA (push) Successful in 1m9s
Build & Deploy / 🧪 Post-Deploy Verification (push) Successful in 2m34s
Build & Deploy / 🔔 Notify (push) Successful in 2s
2026-03-05 21:50:05 +01:00
50 changed files with 331 additions and 114 deletions

View File

@@ -1,9 +1,13 @@
node_modules
.next
out
dist
*.log
.git
# Exclude all binary/dependency folders recursively
**/node_modules
**/.pnpm-store
**/.git
**/.next
**/dist
**/out
**/*.log
# Specific exclusions for this project
.DS_Store
cloned-websites
storage
@@ -11,3 +15,11 @@ storage
verify_ci
pnpm_install_log.txt
full_tree.json
backups
data
# Ensure we don't copy the sibling's build artifacts either
_at-mintel/**/node_modules
_at-mintel/**/dist
_at-mintel/**/.next
_at-mintel/.git

View File

@@ -325,17 +325,16 @@ jobs:
chmod 600 ~/.ssh/id_ed25519
ssh-keyscan -H alpha.mintel.me >> ~/.ssh/known_hosts 2>/dev/null
echo "Re-running docker build with plain progress to capture exact logs..."
echo "${{ steps.discover_token.outputs.token }}" | docker login git.infra.mintel.me -u "${{ steps.discover_token.outputs.user }}" --password-stdin > login.log 2>&1
echo "${{ steps.discover_token.outputs.token }}" > /tmp/npm_token.txt
echo "${{ secrets.NPM_TOKEN }}" > /tmp/npm_token.txt
docker build \
--build-arg NEXT_PUBLIC_BASE_URL=${{ needs.prepare.outputs.next_public_url }} \
--build-arg NEXT_PUBLIC_TARGET=${{ needs.prepare.outputs.target }} \
--build-arg DIRECTUS_URL=${{ needs.prepare.outputs.directus_url }} \
--build-arg NPM_TOKEN=${{ steps.discover_token.outputs.token }} \
--build-arg NPM_TOKEN=${{ secrets.NPM_TOKEN }} \
--secret id=NPM_TOKEN,src=/tmp/npm_token.txt \
--progress plain \
-t temp-image . > docker_build_failed.log 2>&1
cat login.log >> docker_build_failed.log
cat login.log >> docker_build_failed.log || true
scp docker_build_failed.log root@alpha.mintel.me:/root/docker_build_failed.log
# JOB 4: Deploy
# ──────────────────────────────────────────────────────────────────────────────

6
.gitignore vendored
View File

@@ -56,4 +56,8 @@ apps/web/out/estimations/
# Backups
backups/
.turbo
.turbo
# Manual build artifacts
_at-mintel/
local_build_*.log
*.tar

View File

@@ -19,16 +19,18 @@ ENV CI=true
COPY pnpm-lock.yaml pnpm-workspace.yaml package.json .npmrc* ./
COPY apps/web/package.json ./apps/web/package.json
# Copy sibling monorepo for linked dependencies (cloned during CI)
COPY _at-mintel* ./_at-mintel/
# Placing it at root to match the ../../../at-mintel/ links in package.json
COPY _at-mintel* /at-mintel/
# Install dependencies with cache mount and dynamic .npmrc (High Fidelity pattern)
RUN --mount=type=cache,id=pnpm,target=/pnpm/store \
--mount=type=secret,id=NPM_TOKEN \
export NPM_TOKEN=$(cat /run/secrets/NPM_TOKEN 2>/dev/null || echo $NPM_TOKEN) && \
echo "@mintel:registry=https://git.infra.mintel.me/api/packages/mmintel/npm/" > .npmrc && \
echo "//git.infra.mintel.me/api/packages/mmintel/npm/:_authToken=\${NPM_TOKEN}" >> .npmrc && \
echo "@mintel:registry=https://npm.infra.mintel.me" > .npmrc && \
echo "//npm.infra.mintel.me/:_authToken=\"\${NPM_TOKEN}\"" >> .npmrc && \
echo "always-auth=true" >> .npmrc && \
cd _at-mintel && pnpm install --no-frozen-lockfile && pnpm build && \
cd /at-mintel && pnpm install --no-frozen-lockfile && pnpm build && \
cd /app && pnpm install --no-frozen-lockfile && \
rm .npmrc
@@ -49,7 +51,8 @@ COPY --from=builder /app/apps/web/public ./apps/web/public
COPY --from=builder /app/apps/web/.next/standalone ./
COPY --from=builder /app/apps/web/.next/static ./apps/web/.next/static
# Explicitly copy Payload dynamically generated importMap.js excluded by Standalone tracing
COPY --from=builder /app/apps/web/app/(payload)/admin/importMap.js ./apps/web/app/(payload)/admin/importMap.js
# Start from the app directory to ensure references solve correctly
WORKDIR /app/apps/web
CMD ["node", "server.js"]

View File

@@ -1 +1,117 @@
export const importMap = {};
import { AiMediaButtons as AiMediaButtons_1d402a78164f07306f77dce953e62e11 } from "@mintel/payload-ai/components/AiMediaButtons";
import { OptimizeButton as OptimizeButton_338ff118e214cff355f6d710d1a381fb } from "@mintel/payload-ai/components/OptimizeButton";
import { GenerateSlugButton as GenerateSlugButton_5baeea8510d263708dd253e86d55e0b4 } from "@mintel/payload-ai/components/FieldGenerators/GenerateSlugButton";
import { default as default_76cec558bd86098fa1dab70b12eb818f } from "@/src/payload/components/TagSelector";
import { GenerateThumbnailButton as GenerateThumbnailButton_e5e8c00f1c031f15175fef0ff67513dc } from "@mintel/payload-ai/components/FieldGenerators/GenerateThumbnailButton";
import { RscEntryLexicalCell as RscEntryLexicalCell_44fe37237e0ebf4470c9990d8cb7b07e } from "@payloadcms/richtext-lexical/rsc";
import { RscEntryLexicalField as RscEntryLexicalField_44fe37237e0ebf4470c9990d8cb7b07e } from "@payloadcms/richtext-lexical/rsc";
import { LexicalDiffComponent as LexicalDiffComponent_44fe37237e0ebf4470c9990d8cb7b07e } from "@payloadcms/richtext-lexical/rsc";
import { BlocksFeatureClient as BlocksFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client";
import { AiFieldButton as AiFieldButton_9125bc0af442fbb1889d8de3dff98501 } from "@mintel/payload-ai/components/FieldGenerators/AiFieldButton";
import { InlineToolbarFeatureClient as InlineToolbarFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client";
import { HorizontalRuleFeatureClient as HorizontalRuleFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client";
import { UploadFeatureClient as UploadFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client";
import { BlockquoteFeatureClient as BlockquoteFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client";
import { RelationshipFeatureClient as RelationshipFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client";
import { LinkFeatureClient as LinkFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client";
import { ChecklistFeatureClient as ChecklistFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client";
import { OrderedListFeatureClient as OrderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client";
import { UnorderedListFeatureClient as UnorderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client";
import { IndentFeatureClient as IndentFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client";
import { AlignFeatureClient as AlignFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client";
import { HeadingFeatureClient as HeadingFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client";
import { ParagraphFeatureClient as ParagraphFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client";
import { InlineCodeFeatureClient as InlineCodeFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client";
import { SuperscriptFeatureClient as SuperscriptFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client";
import { SubscriptFeatureClient as SubscriptFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client";
import { StrikethroughFeatureClient as StrikethroughFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client";
import { UnderlineFeatureClient as UnderlineFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client";
import { BoldFeatureClient as BoldFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client";
import { ItalicFeatureClient as ItalicFeatureClient_e70f5e05f09f93e00b997edb1ef0c864 } from "@payloadcms/richtext-lexical/client";
import { default as default_2ebf44fdf8ebc607cf0de30cff485248 } from "@/src/payload/components/ColorPicker";
import { default as default_a1c6da8fb7dd9846a8b07123ff256d09 } from "@/src/payload/components/IconSelector";
import { ConvertInquiryButton as ConvertInquiryButton_09fd670bce023a947ab66e4eebea5168 } from "@/src/payload/components/ConvertInquiryButton";
import { AiAnalyzeButton as AiAnalyzeButton_51a6009c2b12d068d736ffd2b8182c71 } from "@/src/payload/components/AiAnalyzeButton";
import { GanttChartView as GanttChartView_0162b82db971e8f1e27fbdd0aaa2f1f4 } from "@/src/payload/views/GanttChart";
import { ChatWindowProvider as ChatWindowProvider_258e2d0901cb901e46c3eeed91676211 } from "@mintel/payload-ai/components/ChatWindow/index";
import { S3ClientUploadHandler as S3ClientUploadHandler_f97aa6c64367fa259c5bc0567239ef24 } from "@payloadcms/storage-s3/client";
import { CollectionCards as CollectionCards_f9c02e79a4aed9a3924487c0cd4cafb1 } from "@payloadcms/next/rsc";
export const importMap = {
"@mintel/payload-ai/components/AiMediaButtons#AiMediaButtons":
AiMediaButtons_1d402a78164f07306f77dce953e62e11,
"@mintel/payload-ai/components/OptimizeButton#OptimizeButton":
OptimizeButton_338ff118e214cff355f6d710d1a381fb,
"@mintel/payload-ai/components/FieldGenerators/GenerateSlugButton#GenerateSlugButton":
GenerateSlugButton_5baeea8510d263708dd253e86d55e0b4,
"@/src/payload/components/TagSelector#default":
default_76cec558bd86098fa1dab70b12eb818f,
"@mintel/payload-ai/components/FieldGenerators/GenerateThumbnailButton#GenerateThumbnailButton":
GenerateThumbnailButton_e5e8c00f1c031f15175fef0ff67513dc,
"@payloadcms/richtext-lexical/rsc#RscEntryLexicalCell":
RscEntryLexicalCell_44fe37237e0ebf4470c9990d8cb7b07e,
"@payloadcms/richtext-lexical/rsc#RscEntryLexicalField":
RscEntryLexicalField_44fe37237e0ebf4470c9990d8cb7b07e,
"@payloadcms/richtext-lexical/rsc#LexicalDiffComponent":
LexicalDiffComponent_44fe37237e0ebf4470c9990d8cb7b07e,
"@payloadcms/richtext-lexical/client#BlocksFeatureClient":
BlocksFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton":
AiFieldButton_9125bc0af442fbb1889d8de3dff98501,
"@payloadcms/richtext-lexical/client#InlineToolbarFeatureClient":
InlineToolbarFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#HorizontalRuleFeatureClient":
HorizontalRuleFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#UploadFeatureClient":
UploadFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#BlockquoteFeatureClient":
BlockquoteFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#RelationshipFeatureClient":
RelationshipFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#LinkFeatureClient":
LinkFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#ChecklistFeatureClient":
ChecklistFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#OrderedListFeatureClient":
OrderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#UnorderedListFeatureClient":
UnorderedListFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#IndentFeatureClient":
IndentFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#AlignFeatureClient":
AlignFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#HeadingFeatureClient":
HeadingFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#ParagraphFeatureClient":
ParagraphFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#InlineCodeFeatureClient":
InlineCodeFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#SuperscriptFeatureClient":
SuperscriptFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#SubscriptFeatureClient":
SubscriptFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#StrikethroughFeatureClient":
StrikethroughFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#UnderlineFeatureClient":
UnderlineFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#BoldFeatureClient":
BoldFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@payloadcms/richtext-lexical/client#ItalicFeatureClient":
ItalicFeatureClient_e70f5e05f09f93e00b997edb1ef0c864,
"@/src/payload/components/ColorPicker#default":
default_2ebf44fdf8ebc607cf0de30cff485248,
"@/src/payload/components/IconSelector#default":
default_a1c6da8fb7dd9846a8b07123ff256d09,
"@/src/payload/components/ConvertInquiryButton#ConvertInquiryButton":
ConvertInquiryButton_09fd670bce023a947ab66e4eebea5168,
"@/src/payload/components/AiAnalyzeButton#AiAnalyzeButton":
AiAnalyzeButton_51a6009c2b12d068d736ffd2b8182c71,
"@/src/payload/views/GanttChart#GanttChartView":
GanttChartView_0162b82db971e8f1e27fbdd0aaa2f1f4,
"@mintel/payload-ai/components/ChatWindow/index#ChatWindowProvider":
ChatWindowProvider_258e2d0901cb901e46c3eeed91676211,
"@payloadcms/storage-s3/client#S3ClientUploadHandler":
S3ClientUploadHandler_f97aa6c64367fa259c5bc0567239ef24,
"@payloadcms/next/rsc#CollectionCards":
CollectionCards_f9c02e79a4aed9a3924487c0cd4cafb1,
};

View File

@@ -10,17 +10,21 @@ const dirname = path.dirname(filename);
/** @type {import('next').NextConfig} */
const nextConfig = {
serverExternalPackages: [
'@mintel/content-engine',
'@mintel/concept-engine',
'@mintel/estimation-engine',
'@mintel/payload-ai',
'@mintel/pdf',
'canvas',
'sharp',
'puppeteer',
'require-in-the-middle',
'import-in-the-middle' // Sentry 10+ instrumentation dependencies
],
transpilePackages: [
'@mintel/content-engine',
'@mintel/concept-engine',
'@mintel/estimation-engine',
'@mintel/meme-generator',
'@mintel/payload-ai',
'@mintel/pdf',
'@mintel/thumbnail-generator'
],
images: {
remotePatterns: [
{

View File

@@ -7,7 +7,7 @@
"dev": "pnpm run seed:context && next dev --webpack --hostname 0.0.0.0",
"dev:native": "DATABASE_URI=postgres://payload:payload@127.0.0.1:54321/payload PAYLOAD_SECRET=dev-secret pnpm run seed:context && DATABASE_URI=postgres://payload:payload@127.0.0.1:54321/payload PAYLOAD_SECRET=dev-secret next dev --webpack",
"seed:context": "node --import tsx --experimental-loader ./ignore-css.mjs ./seed-context.ts",
"build": "next build --webpack",
"build": "payload generate:importmap && next build --webpack",
"start": "next start",
"lint": "eslint app src scripts video",
"test": "echo \"No tests configured\"",
@@ -41,7 +41,7 @@
"@mintel/content-engine": "link:../../../at-mintel/packages/content-engine",
"@mintel/estimation-engine": "link:../../../at-mintel/packages/estimation-engine",
"@mintel/meme-generator": "link:../../../at-mintel/packages/meme-generator",
"@mintel/payload-ai": "^1.9.15",
"@mintel/payload-ai": "link:../../../at-mintel/packages/payload-ai",
"@mintel/pdf": "link:../../../at-mintel/packages/pdf-library",
"@mintel/thumbnail-generator": "link:../../../at-mintel/packages/thumbnail-generator",
"@next/mdx": "^16.1.6",

View File

@@ -26,12 +26,30 @@ import { Projects } from "./src/payload/collections/Projects";
const filename = fileURLToPath(import.meta.url);
const dirname = path.dirname(filename);
const isCLI =
process.argv.includes("migrate") ||
process.argv.includes("generate:importmap");
let aiPlugin: any;
if (!isCLI) {
const { payloadChatPlugin } = await import("@mintel/payload-ai");
aiPlugin = payloadChatPlugin({
enabled: true,
mcpServers: [],
renderChatBubble: false, // disable dynamic injection since it's added statically below
});
}
export default buildConfig({
admin: {
user: Users.slug,
importMap: {
baseDir: path.resolve(dirname),
},
components: {
providers: [
"@mintel/payload-ai/components/ChatWindow/index#ChatWindowProvider",
],
},
},
collections: [
Users,
@@ -103,6 +121,7 @@ export default buildConfig({
}),
]
: []),
...(aiPlugin ? [aiPlugin] : []),
],
endpoints: [
{

View File

@@ -1,4 +1,7 @@
import { RichText } from "@payloadcms/richtext-lexical/react";
import {
RichText,
defaultJSXConverters,
} from "@payloadcms/richtext-lexical/react";
import type { JSXConverters } from "@payloadcms/richtext-lexical/react";
import { MemeCard } from "@/src/components/MemeCard";
import { Mermaid } from "@/src/components/Mermaid";
@@ -40,6 +43,20 @@ function renderInlineMarkdown(text: string): React.ReactNode {
}
const jsxConverters: JSXConverters = {
...defaultJSXConverters,
// Override paragraph to filter out leftover <TableOfContents /> raw text
paragraph: ({ node, nodesToJSX }: any) => {
const children = node?.children;
if (
children?.length === 1 &&
children[0]?.type === "text" &&
children[0]?.text?.trim()?.startsWith("<") &&
children[0]?.text?.trim()?.endsWith("/>")
) {
return null; // suppress raw JSX component text like <TableOfContents />
}
return <p>{nodesToJSX({ nodes: children })}</p>;
},
blocks: {
memeCard: ({ node }: any) => (
<div className="my-8">
@@ -179,12 +196,22 @@ const jsxConverters: JSXConverters = {
),
iconList: ({ node }: any) => (
<mdxComponents.IconList>
{node.fields.items?.map((item: any, i: number) => (
// @ts-ignore
<mdxComponents.IconListItem key={i} icon={item.icon || "check"}>
{item.title || item.description}
</mdxComponents.IconListItem>
))}
{node.fields.items?.map((item: any, i: number) => {
const isCheck = item.icon === "check" || !item.icon;
const isCross = item.icon === "x" || item.icon === "cross";
const isBullet = item.icon === "circle" || item.icon === "bullet";
return (
// @ts-ignore
<mdxComponents.IconListItem
key={i}
check={isCheck}
cross={isCross}
bullet={isBullet}
>
{item.title || item.description}
</mdxComponents.IconListItem>
);
})}
</mdxComponents.IconList>
),
statsGrid: ({ node }: any) => {
@@ -210,8 +237,8 @@ const jsxConverters: JSXConverters = {
<mdxComponents.Carousel
items={
node.fields.slides?.map((s: any) => ({
title: s.caption || "Image",
content: "",
title: s.title || s.caption || "Slide",
content: s.content || s.caption || "",
icon: undefined,
})) || []
}

View File

@@ -1,14 +1,16 @@
"use client";
import React, { useState, useEffect } from 'react';
import React, { useState, useEffect, useRef } from 'react';
import { ComponentShareButton } from '../ComponentShareButton';
import { Reveal } from '../Reveal';
import { Play, RotateCcw } from 'lucide-react';
import { RotateCcw } from 'lucide-react';
export function LoadTimeSimulator({ className = '' }: { className?: string }) {
const [isRunning, setIsRunning] = useState(false);
const [timeElapsed, setTimeElapsed] = useState(0);
const [legacyState, setLegacyState] = useState(0);
const [hasAutoStarted, setHasAutoStarted] = useState(false);
const containerRef = useRef<HTMLDivElement>(null);
const [mintelState, setMintelState] = useState(0);
useEffect(() => {
@@ -36,6 +38,25 @@ export function LoadTimeSimulator({ className = '' }: { className?: string }) {
return () => clearInterval(interval);
}, [isRunning, timeElapsed]);
// Auto-start the race when scrolled into viewport
useEffect(() => {
if (hasAutoStarted) return;
const el = containerRef.current;
if (!el) return;
const observer = new IntersectionObserver(
([entry]) => {
if (entry.isIntersecting) {
setHasAutoStarted(true);
setIsRunning(true);
observer.disconnect();
}
},
{ threshold: 0.4 }
);
observer.observe(el);
return () => observer.disconnect();
}, [hasAutoStarted]);
const startRace = () => {
setTimeElapsed(0);
setLegacyState(0);
@@ -45,7 +66,7 @@ export function LoadTimeSimulator({ className = '' }: { className?: string }) {
return (
<Reveal direction="up" delay={0.1}>
<div className={`not-prose max-w-4xl mx-auto my-12 relative group ${className}`}>
<div ref={containerRef} className={`not-prose max-w-4xl mx-auto my-12 relative group ${className}`}>
<div className="absolute -inset-1 bg-gradient-to-r from-red-100 to-emerald-100 rounded-3xl blur opacity-30" />
<div id="sim-load-time" className="relative bg-white rounded-2xl border border-slate-200 shadow-sm overflow-hidden flex flex-col">
@@ -63,13 +84,15 @@ export function LoadTimeSimulator({ className = '' }: { className?: string }) {
Simulieren Sie den Unterschied zwischen dynamischem Server-Rendering (PHP/MySQL) und statischer Edge-Auslieferung (<span className="font-mono bg-slate-200 px-1 rounded text-[10px]">TTV &lt; 500ms</span>).
</p>
</div>
<button
onClick={startRace}
className="shrink-0 flex items-center gap-2 px-6 py-2.5 bg-slate-900 !text-white rounded-full font-bold text-sm hover:hover:bg-black hover:scale-105 active:scale-95 transition-all shadow-md"
>
{timeElapsed > 0 ? <RotateCcw size={16} /> : <Play size={16} />}
{timeElapsed > 0 ? "Neustart" : "Rennen Starten"}
</button>
{timeElapsed > 0 && !isRunning && (
<button
onClick={startRace}
className="shrink-0 flex items-center gap-2 px-6 py-2.5 bg-slate-900 !text-white rounded-full font-bold text-sm hover:hover:bg-black hover:scale-105 active:scale-95 transition-all shadow-md"
>
<RotateCcw size={16} />
Neustart
</button>
)}
</div>
<div className="grid md:grid-cols-2 divide-y md:divide-y-0 md:divide-x divide-slate-100 bg-slate-50/50">

View File

@@ -19,7 +19,7 @@ export const ArticleBlockquoteBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den mehrzeiligen Text für quote ein.",
@@ -31,7 +31,7 @@ export const ArticleBlockquoteBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für author ein.",
@@ -43,7 +43,7 @@ export const ArticleBlockquoteBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für role ein.",

View File

@@ -25,7 +25,7 @@ export const ArticleMemeBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für alt ein.",
@@ -37,7 +37,7 @@ export const ArticleMemeBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für caption ein.",

View File

@@ -26,7 +26,7 @@ export const ArticleQuoteBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den mehrzeiligen Text für quote ein.",
@@ -39,7 +39,7 @@ export const ArticleQuoteBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für author ein.",
@@ -51,7 +51,7 @@ export const ArticleQuoteBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für role ein.",
@@ -63,7 +63,7 @@ export const ArticleQuoteBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für source ein.",
@@ -75,7 +75,7 @@ export const ArticleQuoteBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für sourceUrl ein.",

View File

@@ -26,7 +26,7 @@ export const BoldNumberBlock: MintelBlock = {
description: "e.g. 53% or 2.5M€",
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
},
@@ -38,7 +38,7 @@ export const BoldNumberBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für label ein.",
@@ -50,7 +50,7 @@ export const BoldNumberBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für source ein.",
@@ -62,7 +62,7 @@ export const BoldNumberBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für sourceUrl ein.",

View File

@@ -19,7 +19,7 @@ export const ButtonBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für label ein.",

View File

@@ -16,6 +16,16 @@ export const CarouselBlock: MintelBlock = {
name: "slides",
type: "array",
fields: [
{
name: "title",
type: "text",
admin: { description: "Titel der Slide-Karte." },
},
{
name: "content",
type: "textarea",
admin: { description: "Beschreibungstext der Slide-Karte." },
},
{
name: "image",
type: "upload",
@@ -28,7 +38,7 @@ export const CarouselBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für caption ein.",

View File

@@ -31,7 +31,7 @@ export const ComparisonRowBlock: MintelBlock = {
description: "Optional overarching description for the comparison.",
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
},
@@ -44,7 +44,7 @@ export const ComparisonRowBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für negativeLabel ein.",
@@ -57,7 +57,7 @@ export const ComparisonRowBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für negativeText ein.",
@@ -71,7 +71,7 @@ export const ComparisonRowBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für positiveLabel ein.",
@@ -84,7 +84,7 @@ export const ComparisonRowBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für positiveText ein.",

View File

@@ -19,7 +19,7 @@ export const DiagramFlowBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den mehrzeiligen Text für definition ein.",

View File

@@ -19,7 +19,7 @@ export const DiagramGanttBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den mehrzeiligen Text für definition ein.",

View File

@@ -19,7 +19,7 @@ export const DiagramPieBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den mehrzeiligen Text für definition ein.",

View File

@@ -19,7 +19,7 @@ export const DiagramSequenceBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den mehrzeiligen Text für definition ein.",

View File

@@ -19,7 +19,7 @@ export const DiagramStateBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den mehrzeiligen Text für definition ein.",

View File

@@ -19,7 +19,7 @@ export const DiagramTimelineBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den mehrzeiligen Text für definition ein.",

View File

@@ -32,7 +32,7 @@ export const ExternalLinkBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für label ein.",

View File

@@ -15,7 +15,7 @@ export const H2Block: MintelBlock = {
description: "Geben Sie den Text für die H2-Überschrift ein.",
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
},

View File

@@ -15,7 +15,7 @@ export const H3Block: MintelBlock = {
description: "Geben Sie den Text für die H3-Überschrift ein.",
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
},

View File

@@ -25,7 +25,7 @@ export const HeadingBlock: MintelBlock = {
description: "Der Text der Überschrift.",
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
},

View File

@@ -44,7 +44,7 @@ export const IconListBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für title ein.",
@@ -56,7 +56,7 @@ export const IconListBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den mehrzeiligen Text für description ein.",

View File

@@ -26,7 +26,7 @@ export const ImageTextBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den mehrzeiligen Text für text ein.",

View File

@@ -27,7 +27,7 @@ export const LeadMagnetBlock: MintelBlock = {
description: "The strong headline for the Call-to-Action",
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
},
@@ -40,7 +40,7 @@ export const LeadMagnetBlock: MintelBlock = {
description: "The value proposition text.",
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
},
@@ -53,7 +53,7 @@ export const LeadMagnetBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für buttonText ein.",

View File

@@ -26,7 +26,7 @@ export const LeadParagraphBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den mehrzeiligen Text für text ein.",

View File

@@ -19,7 +19,7 @@ export const MarkerBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für text ein.",

View File

@@ -28,7 +28,7 @@ export const MemeCardBlock: MintelBlock = {
"The template ID from memegen.link (e.g. 'drake', 'disastergirl')",
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
},
@@ -42,7 +42,7 @@ export const MemeCardBlock: MintelBlock = {
"Pipe-separated captions for the meme (e.g. 'Legacy Code|Mintel Stack'). Maximum 6 words per line.",
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
},

View File

@@ -36,7 +36,7 @@ export const MermaidBlock: MintelBlock = {
description: "Optional title displayed above the diagram.",
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
},
@@ -59,7 +59,7 @@ export const MermaidBlock: MintelBlock = {
"The raw Mermaid.js syntax (e.g. graph TD... shadowing, loops, etc.).",
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
},

View File

@@ -19,7 +19,7 @@ export const MetricBarBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für label ein.",
@@ -44,7 +44,7 @@ export const MetricBarBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für unit ein.",

View File

@@ -26,7 +26,7 @@ export const ParagraphBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den mehrzeiligen Text für text ein.",

View File

@@ -19,7 +19,7 @@ export const PerformanceChartBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für title ein.",

View File

@@ -18,7 +18,7 @@ export const PremiumComparisonChartBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für title ein.",
@@ -30,7 +30,7 @@ export const PremiumComparisonChartBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für subtitle ein.",
@@ -47,7 +47,7 @@ export const PremiumComparisonChartBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für label ein.",
@@ -75,7 +75,7 @@ export const PremiumComparisonChartBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für unit ein.",
@@ -95,7 +95,7 @@ export const PremiumComparisonChartBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für description ein.",

View File

@@ -19,7 +19,7 @@ export const RevenueLossCalculatorBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für title ein.",

View File

@@ -19,7 +19,7 @@ export const SectionBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für title ein.",

View File

@@ -18,7 +18,7 @@ export const StatsDisplayBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für label ein.",
@@ -31,7 +31,7 @@ export const StatsDisplayBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für value ein.",
@@ -43,7 +43,7 @@ export const StatsDisplayBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für subtext ein.",

View File

@@ -23,7 +23,7 @@ export const StatsGridBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für label ein.",
@@ -36,7 +36,7 @@ export const StatsGridBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für value ein.",

View File

@@ -26,7 +26,7 @@ export const TLDRBlock: MintelBlock = {
description: "The summary content for the TLDR box.",
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
},

View File

@@ -25,7 +25,7 @@ export const TrackedLinkBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für label ein.",

View File

@@ -18,7 +18,7 @@ export const WaterfallChartBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für title ein.",
@@ -35,7 +35,7 @@ export const WaterfallChartBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für label ein.",

View File

@@ -36,7 +36,7 @@ export const WebVitalsScoreBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für description ein.",

View File

@@ -31,7 +31,7 @@ export const YouTubeEmbedBlock: MintelBlock = {
admin: {
components: {
afterInput: [
"@mintel/payload-ai/components/AiFieldButton#AiFieldButton",
"@mintel/payload-ai/components/FieldGenerators/AiFieldButton#AiFieldButton",
],
},
description: "Geben Sie den Text für title ein.",

View File

@@ -1,7 +1,7 @@
import type { CollectionConfig } from "payload";
import path from "path";
import { fileURLToPath } from "url";
import { replicateMediaHandler } from "@mintel/payload-ai/endpoints/replicateMediaEndpoint.js";
import { replicateMediaHandler } from "@mintel/payload-ai/endpoints/replicateMediaEndpoint";
const filename = fileURLToPath(import.meta.url);
const dirname = path.dirname(filename);

View File

@@ -39,7 +39,7 @@ export const Posts: CollectionConfig = {
position: "sidebar",
components: {
afterInput: [
"@mintel/payload-ai/components/GenerateSlugButton#GenerateSlugButton",
"@mintel/payload-ai/components/FieldGenerators/GenerateSlugButton#GenerateSlugButton",
],
},
},
@@ -100,7 +100,7 @@ export const Posts: CollectionConfig = {
position: "sidebar",
components: {
afterInput: [
"@mintel/payload-ai/components/GenerateThumbnailButton#GenerateThumbnailButton",
"@mintel/payload-ai/components/FieldGenerators/GenerateThumbnailButton#GenerateThumbnailButton",
],
},
},

6
pnpm-lock.yaml generated
View File

@@ -119,8 +119,8 @@ importers:
specifier: link:../../../at-mintel/packages/meme-generator
version: link:../../../at-mintel/packages/meme-generator
"@mintel/payload-ai":
specifier: ^1.9.15
version: 1.9.15(@payloadcms/next@3.77.0(graphql@16.12.0)(monaco-editor@0.55.1)(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.77.4))(payload@3.77.0(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(@payloadcms/ui@3.77.0(monaco-editor@0.55.1)(next@16.1.6(@opentelemetry/api@1.9.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(sass@1.77.4))(payload@3.77.0(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3))(payload@3.77.0(graphql@16.12.0)(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3)(ws@8.19.0)
specifier: link:../../../at-mintel/packages/payload-ai
version: link:../../../at-mintel/packages/payload-ai
"@mintel/pdf":
specifier: link:../../../at-mintel/packages/pdf-library
version: link:../../../at-mintel/packages/pdf-library
@@ -314,7 +314,7 @@ importers:
specifier: ^0.18.5
version: 0.18.5
zod:
specifier: ^3.25.76
specifier: ^3.23.8
version: 3.25.76
devDependencies:
"@eslint/eslintrc":