Compare commits

..

2 Commits

Author SHA1 Message Date
65c27e3386 add cloudflare R2 config 2025-10-13 11:37:20 +08:00
pukpuk
8e8ff0bfc7 chore: fix gitignore pattern to exclude build artifacts
Update .gitignore to properly ignore dist directories at any level by
changing /dist to **/dist pattern. Also remove previously tracked
.astro/types.d.ts file which should not be in version control.

- Fix: Change /dist to **/dist to match nested dist directories
- Remove: apps/frontend/.astro/types.d.ts from tracking
- Ensures build artifacts are properly excluded across the project

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-07 16:18:37 +08:00
14 changed files with 17840 additions and 181 deletions

5
.gitignore vendored
View File

@@ -3,7 +3,7 @@
**/node_modules
# Build output
/dist
**/dist
/build
**/.astro
@@ -42,3 +42,6 @@ Thumbs.db
# OS-generated files in subdirs
**/.DS_Store
# BMAD (local only)
.bmad-core/
.bmad-*/

8100
AGENTS.md

File diff suppressed because it is too large Load Diff

9297
apps/backend/cloudflare-env.d.ts vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -34,6 +34,7 @@
"@payloadcms/plugin-search": "3.56.0",
"@payloadcms/plugin-seo": "3.56.0",
"@payloadcms/richtext-lexical": "3.56.0",
"@payloadcms/storage-r2": "^3.59.1",
"@payloadcms/ui": "3.56.0",
"@radix-ui/react-checkbox": "^1.0.4",
"@radix-ui/react-label": "^2.0.2",

View File

@@ -5,7 +5,7 @@ import sharp from 'sharp' // sharp-import
import path from 'path'
import { buildConfig, PayloadRequest } from 'payload'
import { fileURLToPath } from 'url'
import { r2Storage } from '@payloadcms/storage-r2'
import { Categories } from './collections/Categories'
import { Media } from './collections/Media'
import { Pages } from './collections/Pages'
@@ -70,8 +70,11 @@ export default buildConfig({
].filter(Boolean),
globals: [Header, Footer],
plugins: [
...plugins,
// storage-adapter-placeholder
r2Storage({
bucket: cloudflare.env.R2,
collections: { media: true },
}),
],
secret: process.env.PAYLOAD_SECRET,
sharp,

View File

@@ -1 +1 @@
[["Map",1,2],"meta::meta",["Map",3,4,5,6],"astro-version","5.14.1","astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"server\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"index.js\",\"redirects\":false,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"streaming\":true,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[],\"responsiveStyles\":false},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":true},\"security\":{\"checkOrigin\":true},\"env\":{\"schema\":{},\"validateSecrets\":false},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"headingIdCompat\":false,\"preserveScriptOrder\":false,\"liveContentCollections\":false,\"csp\":false,\"staticImportMetaEnv\":false,\"chromeDevtoolsWorkspace\":false,\"failOnPrerenderConflict\":false},\"legacy\":{\"collections\":false},\"session\":{\"driver\":\"cloudflare-kv-binding\",\"options\":{\"binding\":\"SESSION\"}}}"]
[["Map",1,2],"meta::meta",["Map",3,4,5,6],"astro-version","5.14.1","astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"server\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"index.js\",\"redirects\":false,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":true,\"port\":4321,\"streaming\":true,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[],\"responsiveStyles\":false},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":true},\"security\":{\"checkOrigin\":true},\"env\":{\"schema\":{},\"validateSecrets\":false},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"headingIdCompat\":false,\"preserveScriptOrder\":false,\"liveContentCollections\":false,\"csp\":false,\"staticImportMetaEnv\":false,\"chromeDevtoolsWorkspace\":false,\"failOnPrerenderConflict\":false},\"legacy\":{\"collections\":false},\"session\":{\"driver\":\"cloudflare-kv-binding\",\"options\":{\"binding\":\"SESSION\"}}}"]

View File

@@ -1,5 +1,5 @@
{
"_variables": {
"lastUpdateCheck": 1758741038303
"lastUpdateCheck": 1760082709773
}
}

View File

@@ -1 +0,0 @@
/// <reference types="astro/client" />

View File

@@ -4,7 +4,7 @@
"private": true,
"type": "module",
"scripts": {
"dev": "astro dev",
"dev": "astro dev --host --port 4321",
"dev:pages": "wrangler pages dev --compatibility-date=2024-01-01",
"build": "astro build",
"preview": "astro preview",

View File

@@ -1,149 +1,171 @@
---
import { Image } from 'astro:assets';
import { Image } from "astro:assets";
// Header component
---
<header class="sticky top-0 z-50 bg-transparent">
<nav class="max-w-5xl mx-auto px-4 py-4">
<ul class="flex items-center justify-between list-none">
<li class="flex-shrink-0">
<a href="/" class="block">
<!-- Uses Astro's optimized Image component for the site logo -->
<Image src="/enchun-logo.svg" alt="Enchun Digital Marketing"
class="w-32 h-auto"
width={919}
height={201}
loading="eager"
decoding="async"
/>
</a>
</li>
<li class="hidden md:flex items-center space-x-6" id="desktop-nav">
<!-- Navigation items will be populated by JavaScript -->
</li>
<!-- Mobile menu button -->
<li class="md:hidden">
<button class="text-[var(--color-enchunblue)] hover:text-[var(--color-enchunblue)]/80" id="mobile-menu-button">
<svg width="24" height="24" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg" class="w-6 h-6">
<path d="M6 27H22.5C23.325 27 24 26.325 24 25.5C24 24.675 23.325 24 22.5 24H6C5.175 24 4.5 24.675 4.5 25.5C4.5 26.325 5.175 27 6 27ZM6 19.5H18C18.825 19.5 19.5 18.825 19.5 18C19.5 17.175 18.825 16.5 18 16.5H6C5.175 16.5 4.5 17.175 4.5 18C4.5 18.825 5.175 19.5 6 19.5ZM4.5 10.5C4.5 11.325 5.175 12 6 12H22.5C23.325 12 24 11.325 24 10.5C24 9.675 23.325 9 22.5 9H6C5.175 9 4.5 9.675 4.5 10.5ZM30.45 22.32L26.13 18L30.45 13.68C30.5889 13.5411 30.699 13.3763 30.7742 13.1948C30.8493 13.0134 30.888 12.8189 30.888 12.6225C30.888 12.4261 30.8493 12.2316 30.7742 12.0502C30.699 11.8687 30.5889 11.7039 30.45 11.565C30.3111 11.4261 30.1463 11.316 29.9648 11.2408C29.7834 11.1657 29.5889 11.127 29.3925 11.127C29.1961 11.127 29.0016 11.1657 28.8202 11.2408C28.6387 11.316 28.4739 11.4261 28.335 11.565L22.95 16.95C22.8109 17.0888 22.7006 17.2536 22.6254 17.4351C22.5501 17.6165 22.5113 17.811 22.5113 18.0075C22.5113 18.204 22.5501 18.3985 22.6254 18.5799C22.7006 18.7614 22.8109 18.9262 22.95 19.065L28.335 24.45C28.92 25.035 29.865 25.035 30.45 24.45C31.02 23.865 31.035 22.905 30.45 22.32V22.32Z" fill="currentColor"/>
</svg>
</button>
</li>
</ul>
<!-- Mobile menu -->
<div class="md:hidden hidden" id="mobile-menu">
<ul class="pt-4 pb-2 space-y-2" id="mobile-nav">
<!-- Mobile navigation items will be populated by JavaScript -->
</ul>
</div>
</nav>
<nav class="max-w-5xl mx-auto px-4 py-4">
<ul class="flex items-center justify-between list-none">
<li class="flex-shrink-0">
<a href="/" class="block">
<!-- Uses Astro's optimized Image component for the site logo -->
<Image
src="/enchun-logo.svg"
alt="Enchun Digital Marketing"
class="w-32 h-auto"
width={919}
height={201}
loading="eager"
decoding="async"
/>
</a>
</li>
<li class="hidden md:flex items-center space-x-6" id="desktop-nav">
<!-- Navigation items will be populated by JavaScript -->
</li>
<!-- Mobile menu button -->
<li class="md:hidden">
<button
class="text-[var(--color-enchunblue)] hover:text-[var(--color-enchunblue)]/80"
id="mobile-menu-button"
>
<svg
width="24"
height="24"
viewBox="0 0 36 36"
fill="none"
xmlns="http://www.w3.org/2000/svg"
class="w-6 h-6"
>
<path
d="M6 27H22.5C23.325 27 24 26.325 24 25.5C24 24.675 23.325 24 22.5 24H6C5.175 24 4.5 24.675 4.5 25.5C4.5 26.325 5.175 27 6 27ZM6 19.5H18C18.825 19.5 19.5 18.825 19.5 18C19.5 17.175 18.825 16.5 18 16.5H6C5.175 16.5 4.5 17.175 4.5 18C4.5 18.825 5.175 19.5 6 19.5ZM4.5 10.5C4.5 11.325 5.175 12 6 12H22.5C23.325 12 24 11.325 24 10.5C24 9.675 23.325 9 22.5 9H6C5.175 9 4.5 9.675 4.5 10.5ZM30.45 22.32L26.13 18L30.45 13.68C30.5889 13.5411 30.699 13.3763 30.7742 13.1948C30.8493 13.0134 30.888 12.8189 30.888 12.6225C30.888 12.4261 30.8493 12.2316 30.7742 12.0502C30.699 11.8687 30.5889 11.7039 30.45 11.565C30.3111 11.4261 30.1463 11.316 29.9648 11.2408C29.7834 11.1657 29.5889 11.127 29.3925 11.127C29.1961 11.127 29.0016 11.1657 28.8202 11.2408C28.6387 11.316 28.4739 11.4261 28.335 11.565L22.95 16.95C22.8109 17.0888 22.7006 17.2536 22.6254 17.4351C22.5501 17.6165 22.5113 17.811 22.5113 18.0075C22.5113 18.204 22.5501 18.3985 22.6254 18.5799C22.7006 18.7614 22.8109 18.9262 22.95 19.065L28.335 24.45C28.92 25.035 29.865 25.035 30.45 24.45C31.02 23.865 31.035 22.905 30.45 22.32V22.32Z"
fill="currentColor"></path>
</svg>
</button>
</li>
</ul>
<!-- Mobile menu -->
<div class="md:hidden hidden" id="mobile-menu">
<ul class="pt-4 pb-2 space-y-2" id="mobile-nav">
<!-- Mobile navigation items will be populated by JavaScript -->
</ul>
</div>
</nav>
</header>
<script>
interface NavItem {
link: {
type: 'reference' | 'custom';
label: string;
url?: string;
reference?: {
slug: string;
};
newTab?: boolean;
};
}
// Fetch navigation data from Payload CMS
async function fetchNavigation() {
try {
// Use local proxy in development to avoid CORS issues
const apiUrl = `/api/globals/header?depth=2&draft=false&locale=undefined&trash=false`;
const response = await fetch(apiUrl);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
return data.navItems || [];
} catch (error) {
console.error('Error fetching navigation:', error);
throw error;
}
}
// Generate navigation link HTML
function createNavLink(item: NavItem) {
const { link } = item;
let href = '';
if (link.type === 'custom' && link.url) {
href = link.url;
} else if (link.type === 'reference' && link.reference?.slug) {
href = `/${link.reference.slug}`;
interface NavItem {
link: {
type: "reference" | "custom";
label: string;
url?: string;
reference?: {
slug: string;
};
newTab?: boolean;
};
}
const target = link.newTab ? ' target="_blank" rel="noopener noreferrer"' : '';
const label = link.label;
// Fetch navigation data from Payload CMS
async function fetchNavigation() {
try {
// Use local proxy in development to avoid CORS issues
const apiUrl = `/api/globals/header?depth=2&draft=false&locale=undefined&trash=false`;
// Check if current page matches this link
const currentPath = window.location.pathname;
const isActive = currentPath === href || (href === '/' && currentPath === '/');
const response = await fetch(apiUrl);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
// Add badges for specific items (positioned in top right corner)
let badge = '';
if (label.includes('行銷方案')) {
badge = '<span class="absolute -top-1 -right-1 bg-red-500 text-white text-[0.5rem] px-1 py-0.5 rounded-full">hot</span>';
} else if (label.includes('行銷放大鏡')) {
badge = '<span class="absolute -top-1 -right-1 bg-red-500 text-white text-[0.5rem] px-1 py-0.5 rounded-full">new</span>';
const data = await response.json();
return data.navItems || [];
} catch (error) {
console.error("Error fetching navigation:", error);
throw error;
}
}
const containerClass = badge ? 'relative inline-block' : '';
const activeClass = isActive ? ' nav-active' : '';
// Generate navigation link HTML
function createNavLink(item: NavItem) {
const { link } = item;
let href = "";
return `<a href="${href}" class="${containerClass} text-lg font-normal text-shadow-md hover:text-primary transition-colors px-3 py-2${activeClass}"${target}>${label}${badge}</a>`;
}
if (link.type === "custom" && link.url) {
href = link.url;
} else if (link.type === "reference" && link.reference?.slug) {
href = `/${link.reference.slug}`;
}
// Populate navigation
async function populateNavigation() {
const navItems = await fetchNavigation();
const target = link.newTab
? ' target="_blank" rel="noopener noreferrer"'
: "";
const label = link.label;
const desktopNav = document.getElementById('desktop-nav');
const mobileNav = document.getElementById('mobile-nav');
// Check if current page matches this link
const currentPath = window.location.pathname;
const isActive =
currentPath === href || (href === "/" && currentPath === "/");
if (desktopNav && mobileNav) {
// Clear existing content
desktopNav.innerHTML = '';
mobileNav.innerHTML = '';
// Add badges for specific items (positioned in top right corner)
let badge = "";
if (label.includes("行銷方案")) {
badge =
'<span class="absolute -top-1 -right-1 bg-red-500 text-white text-[0.5rem] px-1 py-0.5 rounded-full">hot</span>';
} else if (label.includes("行銷放大鏡")) {
badge =
'<span class="absolute -top-1 -right-1 bg-red-500 text-white text-[0.5rem] px-1 py-0.5 rounded-full">new</span>';
}
// Populate desktop navigation
navItems.forEach((item) => {
const linkHtml = createNavLink(item);
const li = document.createElement('li');
li.innerHTML = linkHtml;
desktopNav.appendChild(li);
});
const containerClass = badge ? "relative inline-block" : "";
const activeClass = isActive ? " nav-active" : "";
// Populate mobile navigation
navItems.forEach((item) => {
const linkHtml = createNavLink(item).replace('px-3 py-2', 'block px-3 py-2').replace('relative inline-block', 'relative inline-block block');
const li = document.createElement('li');
li.innerHTML = linkHtml;
mobileNav.appendChild(li);
});
return `<a href="${href}" class="${containerClass} text-lg font-normal text-shadow-md hover:text-primary transition-colors px-3 py-2${activeClass}"${target}>${label}${badge}</a>`;
}
}
// Initialize navigation
populateNavigation();
// Populate navigation
async function populateNavigation() {
const navItems = await fetchNavigation();
// Simple mobile menu toggle
const button = document.getElementById('mobile-menu-button');
const menu = document.getElementById('mobile-menu');
if (button && menu) {
button.addEventListener('click', () => {
menu.classList.toggle('hidden');
});
}
const desktopNav = document.getElementById("desktop-nav");
const mobileNav = document.getElementById("mobile-nav");
if (desktopNav && mobileNav) {
// Clear existing content
desktopNav.innerHTML = "";
mobileNav.innerHTML = "";
// Populate desktop navigation
navItems.forEach((item) => {
const linkHtml = createNavLink(item);
const li = document.createElement("li");
li.innerHTML = linkHtml;
desktopNav.appendChild(li);
});
// Populate mobile navigation
navItems.forEach((item) => {
const linkHtml = createNavLink(item)
.replace("px-3 py-2", "block px-3 py-2")
.replace(
"relative inline-block",
"relative inline-block block",
);
const li = document.createElement("li");
li.innerHTML = linkHtml;
mobileNav.appendChild(li);
});
}
}
// Initialize navigation
populateNavigation();
// Simple mobile menu toggle
const button = document.getElementById("mobile-menu-button");
const menu = document.getElementById("mobile-menu");
if (button && menu) {
button.addEventListener("click", () => {
menu.classList.toggle("hidden");
});
}
</script>

View File

@@ -1,47 +1,66 @@
---
import Layout from '../layouts/Layout.astro';
import Layout from "../layouts/Layout.astro";
import VideoHero from "../components/videoHero.astro";
---
<Layout>
<!-- Hero Section -->
<section class="bg-gradient-to-r from-primary to-secondary text-white py-20">
<div class="max-w-6xl mx-auto px-4 text-center">
<h1 class="text-4xl md:text-6xl font-bold mb-6">恩群數位行銷</h1>
<p class="text-xl md:text-2xl mb-8">累積多年廣告行銷操作經驗,全方位行銷人才,為您精準規劃每一分廣告預算</p>
<a href="/contact-us" class="bg-white text-primary px-8 py-3 rounded-lg font-semibold hover:bg-gray-100 transition-colors">聯絡我們</a>
</div>
</section>
<!-- Hero Section -->
<VideoHero
desktopVideo="/video/enchun-hero-background-video.mp4"
mobileVideo="/video/enchun-hero-background-video.webm"
logo="/enchun-logo-full.svg"
header="創造企業更多發展的可能性\n是我們的使命"
subheader="Its our destiny to create possibilities for your business."
/>
<!-- Services Section -->
<section class="py-16 bg-surface">
<div class="max-w-6xl mx-auto px-4">
<h2 class="text-3xl font-bold text-center text-text mb-12">我們的服務</h2>
<div class="grid grid-cols-1 md:grid-cols-3 gap-8">
<div class="bg-white p-6 rounded-lg shadow-md">
<h3 class="text-xl font-semibold text-primary mb-4">Google Ads</h3>
<p class="text-text">專業的Google廣告投放服務幫助您的品牌觸及目標客戶。</p>
<!-- Services Section -->
<section class="py-16 bg-surface">
<div class="max-w-6xl mx-auto px-4">
<h2 class="text-3xl font-bold text-center text-text mb-12">
我們的服務
</h2>
<div class="grid grid-cols-1 md:grid-cols-3 gap-8">
<div class="bg-white p-6 rounded-lg shadow-md">
<h3 class="text-xl font-semibold text-primary mb-4">
Google Ads
</h3>
<p class="text-text">
專業的Google廣告投放服務幫助您的品牌觸及目標客戶。
</p>
</div>
<div class="bg-white p-6 rounded-lg shadow-md">
<h3 class="text-xl font-semibold text-primary mb-4">
社群行銷
</h3>
<p class="text-text">
全方位社群媒體經營,從內容策劃到數據分析,一站式服務。
</p>
</div>
<div class="bg-white p-6 rounded-lg shadow-md">
<h3 class="text-xl font-semibold text-primary mb-4">
網站設計
</h3>
<p class="text-text">
現代化響應式網站設計,提升品牌形象和用戶體驗。
</p>
</div>
</div>
</div>
<div class="bg-white p-6 rounded-lg shadow-md">
<h3 class="text-xl font-semibold text-primary mb-4">社群行銷</h3>
<p class="text-text">全方位社群媒體經營,從內容策劃到數據分析,一站式服務。</p>
</div>
<div class="bg-white p-6 rounded-lg shadow-md">
<h3 class="text-xl font-semibold text-primary mb-4">網站設計</h3>
<p class="text-text">現代化響應式網站設計,提升品牌形象和用戶體驗。</p>
</div>
</div>
</div>
</section>
</section>
<!-- About Section -->
<section class="py-16">
<div class="max-w-6xl mx-auto px-4 text-center">
<h2 class="text-3xl font-bold text-text mb-8">關於恩群</h2>
<p class="text-lg text-text max-w-3xl mx-auto">
恩群數位行銷團隊擁有豐富的數位行銷經驗,我們相信在地化優先、高投資轉換率、數據優先、關係優於銷售。
每一個客戶都是我們重視的夥伴,我們珍惜與客戶的合作關係。
</p>
<a href="/about-enchun" class="inline-block mt-6 bg-primary text-white px-6 py-3 rounded-lg font-semibold hover:bg-primary/90 transition-colors">了解更多</a>
</div>
</section>
<!-- About Section -->
<section class="py-16">
<div class="max-w-6xl mx-auto px-4 text-center">
<h2 class="text-3xl font-bold text-text mb-8">關於恩群</h2>
<p class="text-lg text-text max-w-3xl mx-auto">
恩群數位行銷團隊擁有豐富的數位行銷經驗,我們相信在地化優先、高投資轉換率、數據優先、關係優於銷售。
每一個客戶都是我們重視的夥伴,我們珍惜與客戶的合作關係。
</p>
<a
href="/about-enchun"
class="inline-block mt-6 bg-primary text-white px-6 py-3 rounded-lg font-semibold hover:bg-primary/90 transition-colors"
>了解更多</a
>
</div>
</section>
</Layout>

View File

@@ -12,11 +12,6 @@
--color-text: #1A202C;
--color-text-muted: #718096;
--color-border: #E2E8F0;
/*
Purpose:
Define Enchun brand color palette as CSS custom properties for easy, semantic access in components.
Each color is named by its original key (minus 'www.enchun.tw/') in kebab-case for clarity and maintainability.
*/
/*
Purpose:
Define extended Enchun brand color palette as CSS custom properties, all prefixed with --color- for consistency and semantic clarity.

View File

@@ -7,7 +7,10 @@
"dev:stop": "echo 'Stopping dev servers...' && pkill -f 'astro.js dev' && pkill -f 'next dev' && pkill -f 'pnpm dev' && echo 'Dev servers stopped' || echo 'No dev servers were running'",
"build": "turbo run build",
"lint": "turbo run lint",
"test": "turbo run test"
"test": "turbo run test",
"bmad:refresh": "bmad-method install -f -i codex",
"bmad:list": "bmad-method list:agents",
"bmad:validate": "bmad-method validate"
},
"devDependencies": {
"turbo": "^2.0.5"

223
pnpm-lock.yaml generated
View File

@@ -46,7 +46,10 @@ importers:
version: 3.56.0(@types/react@19.1.8)(monaco-editor@0.53.0)(next@15.4.4(@babel/core@7.28.4)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(payload@3.56.0(graphql@16.11.0)(typescript@5.7.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.7.3)
'@payloadcms/richtext-lexical':
specifier: 3.56.0
version: 3.56.0(@faceless-ui/modal@3.0.0-beta.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@faceless-ui/scroll-info@2.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@payloadcms/next@3.56.0(@types/react@19.1.8)(graphql@16.11.0)(monaco-editor@0.53.0)(next@15.4.4(@babel/core@7.28.4)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(payload@3.56.0(graphql@16.11.0)(typescript@5.7.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.7.3))(@types/react@19.1.8)(monaco-editor@0.53.0)(next@15.4.4(@babel/core@7.28.4)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(payload@3.56.0(graphql@16.11.0)(typescript@5.7.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.7.3)(yjs@13.6.27)
version: 3.56.0(@faceless-ui/modal@3.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@faceless-ui/scroll-info@2.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@payloadcms/next@3.56.0(@types/react@19.1.8)(graphql@16.11.0)(monaco-editor@0.53.0)(next@15.4.4(@babel/core@7.28.4)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(payload@3.56.0(graphql@16.11.0)(typescript@5.7.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.7.3))(@types/react@19.1.8)(monaco-editor@0.53.0)(next@15.4.4(@babel/core@7.28.4)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(payload@3.56.0(graphql@16.11.0)(typescript@5.7.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.7.3)(yjs@13.6.27)
'@payloadcms/storage-r2':
specifier: ^3.59.1
version: 3.59.1(@types/react@19.1.8)(monaco-editor@0.53.0)(next@15.4.4(@babel/core@7.28.4)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(payload@3.56.0(graphql@16.11.0)(typescript@5.7.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.7.3)
'@payloadcms/ui':
specifier: 3.56.0
version: 3.56.0(@types/react@19.1.8)(monaco-editor@0.53.0)(next@15.4.4(@babel/core@7.28.4)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(payload@3.56.0(graphql@16.11.0)(typescript@5.7.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.7.3)
@@ -1317,6 +1320,12 @@ packages:
resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@faceless-ui/modal@3.0.0':
resolution: {integrity: sha512-o3oEFsot99EQ8RJc1kL3s/nNMHX+y+WMXVzSSmca9L0l2MR6ez2QM1z1yIelJX93jqkLXQ9tW+R9tmsYa+O4Qg==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
'@faceless-ui/modal@3.0.0-beta.2':
resolution: {integrity: sha512-UmXvz7Iw3KMO4Pm3llZczU4uc5pPQDb6rdqwoBvYDFgWvkraOAHKx0HxSZgwqQvqOhn8joEFBfFp6/Do2562ow==}
peerDependencies:
@@ -1978,6 +1987,13 @@ packages:
peerDependencies:
payload: 3.56.0
'@payloadcms/plugin-cloud-storage@3.59.1':
resolution: {integrity: sha512-XsXtCxkI47djSHHgq9Cyp3bMUxJeUWjB2QjB18eWT9z4w7oQiL9B35F0dKkDj/WkJ5dh0cGyHR4nGF+QC9rbrQ==}
peerDependencies:
payload: 3.59.1
react: ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020
react-dom: ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020
'@payloadcms/plugin-form-builder@3.56.0':
resolution: {integrity: sha512-mFxWIUq4NPmwcUkp4qjU7H3Ngp5zAW23uER93tn8OJb4v0RKul+IfjRcwuZ+q0tQJu7T3PRmWRikREv1YrHEDQ==}
peerDependencies:
@@ -2020,9 +2036,18 @@ packages:
react: ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020
react-dom: ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020
'@payloadcms/storage-r2@3.59.1':
resolution: {integrity: sha512-JxpbZ7OTHi3avoJR4YX1J1PIlzg62qcDWx6C4dz2TmlBvLVsVOZ57YJXXi1esHjiC5oiZY1B3T17vW0iz6qMzQ==}
engines: {node: ^18.20.2 || >=20.9.0}
peerDependencies:
payload: 3.59.1
'@payloadcms/translations@3.56.0':
resolution: {integrity: sha512-4yguZ6boNebG93jtDSn5uz+4URi/EEWx9j+5FXKSg6n/TQPsIthfmhCIA9v6N/nDJFG2ZZKjDU9fgqB4wlnmzQ==}
'@payloadcms/translations@3.59.1':
resolution: {integrity: sha512-kBuYV4tGOUpVkh6es6cBhbJn14dGtNnYkGtHhScbtGVX6ZJyVudY9ypKQhljAEzdQq0n+kkmi1sfwlaRps+t6w==}
'@payloadcms/ui@3.56.0':
resolution: {integrity: sha512-Btl2Lm9Py2UvELypTUJF0UFKgZdhVpgAFzKFupMSDN6U0PqsFePqvzJn2i67cu98/HgvxEduWMJAnYhkmFLbWg==}
engines: {node: ^18.20.2 || >=20.9.0}
@@ -2032,6 +2057,15 @@ packages:
react: ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020
react-dom: ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020
'@payloadcms/ui@3.59.1':
resolution: {integrity: sha512-T6GkdDqj3rd9qkkJ3HfgDTSA5BzU58xq1i5f/4QC8AE21BISRI3ZIiyz4K07BMipaqqN98zw+6j2kwRCPuJ/xw==}
engines: {node: ^18.20.2 || >=20.9.0}
peerDependencies:
next: ^15.2.3
payload: 3.59.1
react: ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020
react-dom: ^19.0.0 || ^19.0.0-rc-65a56d0e-20241020
'@peculiar/asn1-android@2.5.0':
resolution: {integrity: sha512-t8A83hgghWQkcneRsgGs2ebAlRe54ns88p7ouv8PW2tzF1nAW4yHcL4uZKrFpIU+uszIRzTkcCuie37gpkId0A==}
@@ -3732,6 +3766,10 @@ packages:
destr@2.0.5:
resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==}
detect-file@1.0.0:
resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==}
engines: {node: '>=0.10.0'}
detect-libc@2.1.1:
resolution: {integrity: sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw==}
engines: {node: '>=8'}
@@ -4025,6 +4063,10 @@ packages:
resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==}
engines: {node: '>=6'}
expand-tilde@2.0.2:
resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==}
engines: {node: '>=0.10.0'}
expect-type@1.2.2:
resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==}
engines: {node: '>=12.0.0'}
@@ -4096,6 +4138,9 @@ packages:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
find-node-modules@2.1.3:
resolution: {integrity: sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==}
find-root@1.1.0:
resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==}
@@ -4103,6 +4148,10 @@ packages:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
findup-sync@4.0.0:
resolution: {integrity: sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==}
engines: {node: '>= 8'}
flat-cache@4.0.1:
resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
engines: {node: '>=16'}
@@ -4218,6 +4267,14 @@ packages:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
deprecated: Glob versions prior to v9 are no longer supported
global-modules@1.0.0:
resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==}
engines: {node: '>=0.10.0'}
global-prefix@1.0.2:
resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==}
engines: {node: '>=0.10.0'}
globals@14.0.0:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'}
@@ -4324,6 +4381,10 @@ packages:
hoist-non-react-statics@3.3.2:
resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
homedir-polyfill@1.0.3:
resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==}
engines: {node: '>=0.10.0'}
html-encoding-sniffer@4.0.0:
resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==}
engines: {node: '>=18'}
@@ -4390,6 +4451,9 @@ packages:
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
ini@1.3.8:
resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
internal-slot@1.1.0:
resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
engines: {node: '>= 0.4'}
@@ -4550,6 +4614,10 @@ packages:
resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
engines: {node: '>= 0.4'}
is-windows@1.0.2:
resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
engines: {node: '>=0.10.0'}
is-wsl@3.1.0:
resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==}
engines: {node: '>=16'}
@@ -4876,6 +4944,9 @@ packages:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
merge@2.1.1:
resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==}
micromark-core-commonmark@2.0.3:
resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==}
@@ -5262,6 +5333,10 @@ packages:
parse-latin@7.0.0:
resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==}
parse-passwd@1.0.0:
resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==}
engines: {node: '>=0.10.0'}
parse5@7.3.0:
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
@@ -5477,6 +5552,10 @@ packages:
radix3@1.1.2:
resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==}
range-parser@1.2.1:
resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
engines: {node: '>= 0.6'}
react-datepicker@7.6.0:
resolution: {integrity: sha512-9cQH6Z/qa4LrGhzdc3XoHbhrxNcMi9MKjZmYgF/1MNNaJwvdSjv3Xd+jjvrEEbKEf71ZgCA3n7fQbdwd70qCRw==}
peerDependencies:
@@ -5647,6 +5726,10 @@ packages:
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
engines: {node: '>=0.10.0'}
resolve-dir@1.0.1:
resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==}
engines: {node: '>=0.10.0'}
resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
@@ -6589,6 +6672,10 @@ packages:
resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==}
engines: {node: '>= 0.4'}
which@1.3.1:
resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
hasBin: true
which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'}
@@ -8050,6 +8137,14 @@ snapshots:
'@eslint/core': 0.15.2
levn: 0.4.1
'@faceless-ui/modal@3.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
body-scroll-lock: 4.0.0-beta.0
focus-trap: 7.5.4
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
react-transition-group: 4.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@faceless-ui/modal@3.0.0-beta.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
body-scroll-lock: 4.0.0-beta.0
@@ -8705,6 +8800,21 @@ snapshots:
- aws-crt
- encoding
'@payloadcms/plugin-cloud-storage@3.59.1(@types/react@19.1.8)(monaco-editor@0.53.0)(next@15.4.4(@babel/core@7.28.4)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(payload@3.56.0(graphql@16.11.0)(typescript@5.7.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.7.3)':
dependencies:
'@payloadcms/ui': 3.59.1(@types/react@19.1.8)(monaco-editor@0.53.0)(next@15.4.4(@babel/core@7.28.4)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(payload@3.56.0(graphql@16.11.0)(typescript@5.7.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.7.3)
find-node-modules: 2.1.3
payload: 3.56.0(graphql@16.11.0)(typescript@5.7.3)
range-parser: 1.2.1
react: 19.1.0
react-dom: 19.1.0(react@19.1.0)
transitivePeerDependencies:
- '@types/react'
- monaco-editor
- next
- supports-color
- typescript
'@payloadcms/plugin-form-builder@3.56.0(@types/react@19.1.8)(monaco-editor@0.53.0)(next@15.4.4(@babel/core@7.28.4)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(payload@3.56.0(graphql@16.11.0)(typescript@5.7.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.7.3)':
dependencies:
'@payloadcms/ui': 3.56.0(@types/react@19.1.8)(monaco-editor@0.53.0)(next@15.4.4(@babel/core@7.28.4)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(payload@3.56.0(graphql@16.11.0)(typescript@5.7.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.7.3)
@@ -8756,9 +8866,9 @@ snapshots:
- supports-color
- typescript
'@payloadcms/richtext-lexical@3.56.0(@faceless-ui/modal@3.0.0-beta.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@faceless-ui/scroll-info@2.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@payloadcms/next@3.56.0(@types/react@19.1.8)(graphql@16.11.0)(monaco-editor@0.53.0)(next@15.4.4(@babel/core@7.28.4)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(payload@3.56.0(graphql@16.11.0)(typescript@5.7.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.7.3))(@types/react@19.1.8)(monaco-editor@0.53.0)(next@15.4.4(@babel/core@7.28.4)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(payload@3.56.0(graphql@16.11.0)(typescript@5.7.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.7.3)(yjs@13.6.27)':
'@payloadcms/richtext-lexical@3.56.0(@faceless-ui/modal@3.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@faceless-ui/scroll-info@2.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@payloadcms/next@3.56.0(@types/react@19.1.8)(graphql@16.11.0)(monaco-editor@0.53.0)(next@15.4.4(@babel/core@7.28.4)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(payload@3.56.0(graphql@16.11.0)(typescript@5.7.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.7.3))(@types/react@19.1.8)(monaco-editor@0.53.0)(next@15.4.4(@babel/core@7.28.4)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(payload@3.56.0(graphql@16.11.0)(typescript@5.7.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.7.3)(yjs@13.6.27)':
dependencies:
'@faceless-ui/modal': 3.0.0-beta.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@faceless-ui/modal': 3.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@faceless-ui/scroll-info': 2.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@lexical/headless': 0.35.0
'@lexical/html': 0.35.0
@@ -8799,10 +8909,27 @@ snapshots:
- typescript
- yjs
'@payloadcms/storage-r2@3.59.1(@types/react@19.1.8)(monaco-editor@0.53.0)(next@15.4.4(@babel/core@7.28.4)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(payload@3.56.0(graphql@16.11.0)(typescript@5.7.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.7.3)':
dependencies:
'@payloadcms/plugin-cloud-storage': 3.59.1(@types/react@19.1.8)(monaco-editor@0.53.0)(next@15.4.4(@babel/core@7.28.4)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(payload@3.56.0(graphql@16.11.0)(typescript@5.7.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.7.3)
payload: 3.56.0(graphql@16.11.0)(typescript@5.7.3)
transitivePeerDependencies:
- '@types/react'
- monaco-editor
- next
- react
- react-dom
- supports-color
- typescript
'@payloadcms/translations@3.56.0':
dependencies:
date-fns: 4.1.0
'@payloadcms/translations@3.59.1':
dependencies:
date-fns: 4.1.0
'@payloadcms/ui@3.56.0(@types/react@19.1.8)(monaco-editor@0.53.0)(next@15.4.4(@babel/core@7.28.4)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(payload@3.56.0(graphql@16.11.0)(typescript@5.7.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.7.3)':
dependencies:
'@date-fns/tz': 1.2.0
@@ -8838,6 +8965,41 @@ snapshots:
- supports-color
- typescript
'@payloadcms/ui@3.59.1(@types/react@19.1.8)(monaco-editor@0.53.0)(next@15.4.4(@babel/core@7.28.4)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(payload@3.56.0(graphql@16.11.0)(typescript@5.7.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.7.3)':
dependencies:
'@date-fns/tz': 1.2.0
'@dnd-kit/core': 6.0.8(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@dnd-kit/sortable': 7.0.2(@dnd-kit/core@6.0.8(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)
'@dnd-kit/utilities': 3.2.2(react@19.1.0)
'@faceless-ui/modal': 3.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@faceless-ui/scroll-info': 2.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@faceless-ui/window-info': 3.0.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@monaco-editor/react': 4.7.0(monaco-editor@0.53.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@payloadcms/translations': 3.59.1
bson-objectid: 2.0.4
date-fns: 4.1.0
dequal: 2.0.3
md5: 2.3.0
next: 15.4.4(@babel/core@7.28.4)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4)
object-to-formdata: 4.5.1
payload: 3.56.0(graphql@16.11.0)(typescript@5.7.3)
qs-esm: 7.0.2
react: 19.1.0
react-datepicker: 7.6.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
react-dom: 19.1.0(react@19.1.0)
react-image-crop: 10.1.8(react@19.1.0)
react-select: 5.9.0(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
scheduler: 0.25.0
sonner: 1.7.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
ts-essentials: 10.0.3(typescript@5.7.3)
use-context-selector: 2.0.0(react@19.1.0)(scheduler@0.25.0)
uuid: 10.0.0
transitivePeerDependencies:
- '@types/react'
- monaco-editor
- supports-color
- typescript
'@peculiar/asn1-android@2.5.0':
dependencies:
'@peculiar/asn1-schema': 2.5.0
@@ -10757,6 +10919,8 @@ snapshots:
destr@2.0.5: {}
detect-file@1.0.0: {}
detect-libc@2.1.1: {}
detect-node-es@1.1.0: {}
@@ -11264,6 +11428,10 @@ snapshots:
exit-hook@2.2.1: {}
expand-tilde@2.0.2:
dependencies:
homedir-polyfill: 1.0.3
expect-type@1.2.2: {}
exsolve@1.0.7: {}
@@ -11328,6 +11496,11 @@ snapshots:
dependencies:
to-regex-range: 5.0.1
find-node-modules@2.1.3:
dependencies:
findup-sync: 4.0.0
merge: 2.1.1
find-root@1.1.0: {}
find-up@5.0.0:
@@ -11335,6 +11508,13 @@ snapshots:
locate-path: 6.0.0
path-exists: 4.0.0
findup-sync@4.0.0:
dependencies:
detect-file: 1.0.0
is-glob: 4.0.3
micromatch: 4.0.8
resolve-dir: 1.0.1
flat-cache@4.0.1:
dependencies:
flatted: 3.3.3
@@ -11471,6 +11651,20 @@ snapshots:
once: 1.4.0
path-is-absolute: 1.0.1
global-modules@1.0.0:
dependencies:
global-prefix: 1.0.2
is-windows: 1.0.2
resolve-dir: 1.0.1
global-prefix@1.0.2:
dependencies:
expand-tilde: 2.0.2
homedir-polyfill: 1.0.3
ini: 1.3.8
is-windows: 1.0.2
which: 1.3.1
globals@14.0.0: {}
globalthis@1.0.4:
@@ -11628,6 +11822,10 @@ snapshots:
dependencies:
react-is: 16.13.1
homedir-polyfill@1.0.3:
dependencies:
parse-passwd: 1.0.0
html-encoding-sniffer@4.0.0:
dependencies:
whatwg-encoding: 3.1.1
@@ -11684,6 +11882,8 @@ snapshots:
inherits@2.0.4: {}
ini@1.3.8: {}
internal-slot@1.1.0:
dependencies:
es-errors: 1.3.0
@@ -11838,6 +12038,8 @@ snapshots:
call-bound: 1.0.4
get-intrinsic: 1.3.0
is-windows@1.0.2: {}
is-wsl@3.1.0:
dependencies:
is-inside-container: 1.0.0
@@ -12231,6 +12433,8 @@ snapshots:
merge2@1.4.1: {}
merge@2.1.1: {}
micromark-core-commonmark@2.0.3:
dependencies:
decode-named-character-reference: 1.2.0
@@ -12765,6 +12969,8 @@ snapshots:
unist-util-visit-children: 3.0.0
vfile: 6.0.3
parse-passwd@1.0.0: {}
parse5@7.3.0:
dependencies:
entities: 6.0.1
@@ -12995,6 +13201,8 @@ snapshots:
radix3@1.1.2: {}
range-parser@1.2.1: {}
react-datepicker@7.6.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
'@floating-ui/react': 0.27.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
@@ -13224,6 +13432,11 @@ snapshots:
require-from-string@2.0.2: {}
resolve-dir@1.0.1:
dependencies:
expand-tilde: 2.0.2
global-modules: 1.0.0
resolve-from@4.0.0: {}
resolve-pkg-maps@1.0.0: {}
@@ -14304,6 +14517,10 @@ snapshots:
gopd: 1.2.0
has-tostringtag: 1.0.2
which@1.3.1:
dependencies:
isexe: 2.0.0
which@2.0.2:
dependencies:
isexe: 2.0.0