diff --git a/.changeset/six-buses-sit.md b/.changeset/six-buses-sit.md
new file mode 100644
index 00000000..231a9826
--- /dev/null
+++ b/.changeset/six-buses-sit.md
@@ -0,0 +1,6 @@
+---
+'@o2s/integrations.contentful-cms': minor
+'@o2s/api-harmonization': minor
+---
+
+feat: added contentful integration
diff --git a/apps/api-harmonization/.env.local b/apps/api-harmonization/.env.local
index 14a06a30..11c19fce 100644
--- a/apps/api-harmonization/.env.local
+++ b/apps/api-harmonization/.env.local
@@ -40,3 +40,8 @@ MEDUSAJS_PUBLISHABLE_API_KEY=
MEDUSAJS_ADMIN_API_KEY=
SEARCH_ARTICLES_INDEX_NAME=mock
+
+CF_TOKEN=
+CF_SPACE_ID=
+CF_ENV=
+CF_MANAGEMENT_TOKEN=
diff --git a/apps/api-harmonization/turbo.json b/apps/api-harmonization/turbo.json
index 8883dcca..06609a24 100644
--- a/apps/api-harmonization/turbo.json
+++ b/apps/api-harmonization/turbo.json
@@ -36,7 +36,12 @@
"MEDUSAJS_ADMIN_API_KEY",
"SEARCH_ARTICLES_INDEX_NAME",
"TELEMETRY_DISABLED",
- "TELEMETRY_BASE_URL"
+ "TELEMETRY_BASE_URL",
+ "ALGOLIA_API_KEY",
+ "CF_TOKEN",
+ "CF_SPACE_ID",
+ "CF_ENV",
+ "CF_MANAGEMENT_TOKEN"
]
}
}
diff --git a/apps/frontend/.env.development b/apps/frontend/.env.development
index 80c08ba9..a1c00ad8 100644
--- a/apps/frontend/.env.development
+++ b/apps/frontend/.env.development
@@ -9,7 +9,7 @@ NEXT_PUBLIC_LOG_FORMAT=text
NEXT_PUBLIC_SUPPORTED_LOCALES=en,de,pl
NEXT_PUBLIC_DEFAULT_LOCALE=en
-NEXT_PUBLIC_BASE_URL=http://localhost:3000
+NEXT_PUBLIC_BASE_URL=https://localhost:3000
NEXT_PUBLIC_API_URL=http://localhost:3001/api
NEXT_PUBLIC_API_URL_INTERNAL=http://localhost:3001/api
@@ -25,3 +25,5 @@ AUTH_GITHUB_SECRET={GITHUB_ID}
AUTH_DATABASE_URL=file:./dev.db
AUTH_DEFAULT_USER_ROLE=selfservice_user
+
+CF_PREVIEW_SECRET=q1AuSoM39k3Mymx7mYOvdsrmQBlAPaGA
diff --git a/apps/frontend/next.config.ts b/apps/frontend/next.config.ts
index d7bc6874..1d8eb386 100644
--- a/apps/frontend/next.config.ts
+++ b/apps/frontend/next.config.ts
@@ -62,6 +62,23 @@ const nextConfig: NextConfig = {
return config;
},
+ async headers() {
+ return [
+ {
+ source: '/:path*',
+ headers: [
+ {
+ key: 'X-Frame-Options',
+ value: 'SAMEORIGIN',
+ },
+ {
+ key: 'Content-Security-Policy',
+ value: `frame-ancestors 'self' https://app.contentful.com`,
+ },
+ ],
+ },
+ ];
+ },
};
export default withPlugins([withBundleAnalyzer, withNextIntl], nextConfig);
diff --git a/apps/frontend/package.json b/apps/frontend/package.json
index b78a1285..f60678bc 100644
--- a/apps/frontend/package.json
+++ b/apps/frontend/package.json
@@ -3,8 +3,8 @@
"version": "1.10.0",
"private": true,
"scripts": {
- "dev": "next dev --turbopack",
- "dev:https": "next dev --turbopack --experimental-https",
+ "dev1": "next dev --turbopack",
+ "dev": "next dev --turbopack --experimental-https",
"build": "next build",
"postbuild": "cp -r public .next/standalone/apps/frontend && cp -r .next/static .next/standalone/apps/frontend/.next/",
"start": "node .next/standalone/apps/frontend/server.js",
@@ -13,10 +13,34 @@
"generate:component": "turbo gen web-component"
},
"dependencies": {
+ "@contentful/live-preview": "^4.6.52",
"@o2s/api-harmonization": "*",
+ "@o2s/blocks.article": "*",
+ "@o2s/blocks.article-list": "*",
+ "@o2s/blocks.article-search": "*",
+ "@o2s/blocks.category": "*",
+ "@o2s/blocks.category-list": "*",
+ "@o2s/blocks.faq": "*",
+ "@o2s/blocks.featured-service-list": "*",
+ "@o2s/blocks.invoice-list": "*",
+ "@o2s/blocks.notification-details": "*",
+ "@o2s/blocks.notification-list": "*",
+ "@o2s/blocks.order-details": "*",
+ "@o2s/blocks.order-list": "*",
+ "@o2s/blocks.orders-summary": "*",
+ "@o2s/blocks.payments-history": "*",
+ "@o2s/blocks.payments-summary": "*",
+ "@o2s/blocks.quick-links": "*",
+ "@o2s/blocks.service-details": "*",
+ "@o2s/blocks.service-list": "*",
+ "@o2s/blocks.surveyjs-form": "*",
+ "@o2s/blocks.ticket-details": "*",
+ "@o2s/blocks.ticket-list": "*",
+ "@o2s/blocks.ticket-recent": "*",
+ "@o2s/blocks.user-account": "*",
"@o2s/framework": "*",
- "@o2s/ui": "*",
"@o2s/integrations.mocked": "*",
+ "@o2s/ui": "*",
"@o2s/utils.api-harmonization": "*",
"@o2s/utils.frontend": "*",
"class-variance-authority": "^0.7.1",
@@ -34,30 +58,7 @@
"react-string-replace": "^1.1.1",
"string-template": "^1.0.0",
"yup": "^1.7.1",
- "zod": "^4.1.12",
- "@o2s/blocks.faq": "*",
- "@o2s/blocks.invoice-list": "*",
- "@o2s/blocks.notification-list": "*",
- "@o2s/blocks.quick-links": "*",
- "@o2s/blocks.ticket-details": "*",
- "@o2s/blocks.ticket-list": "*",
- "@o2s/blocks.ticket-recent": "*",
- "@o2s/blocks.user-account": "*",
- "@o2s/blocks.payments-history": "*",
- "@o2s/blocks.payments-summary": "*",
- "@o2s/blocks.orders-summary": "*",
- "@o2s/blocks.order-details": "*",
- "@o2s/blocks.order-list": "*",
- "@o2s/blocks.service-details": "*",
- "@o2s/blocks.service-list": "*",
- "@o2s/blocks.featured-service-list": "*",
- "@o2s/blocks.article": "*",
- "@o2s/blocks.article-list": "*",
- "@o2s/blocks.category-list": "*",
- "@o2s/blocks.article-search": "*",
- "@o2s/blocks.category": "*",
- "@o2s/blocks.notification-details": "*",
- "@o2s/blocks.surveyjs-form": "*"
+ "zod": "^4.1.12"
},
"devDependencies": {
"@next/bundle-analyzer": "^15.5.6",
diff --git a/apps/frontend/src/app/[locale]/layout.tsx b/apps/frontend/src/app/[locale]/layout.tsx
index 3776165f..0c1620b3 100644
--- a/apps/frontend/src/app/[locale]/layout.tsx
+++ b/apps/frontend/src/app/[locale]/layout.tsx
@@ -1,7 +1,9 @@
+import { LivePreview } from '@o2s/configs.integrations/live-preview';
import { SessionProvider } from 'next-auth/react';
import { NextIntlClientProvider } from 'next-intl';
import { getMessages, setRequestLocale } from 'next-intl/server';
import { Inter } from 'next/font/google';
+import { draftMode } from 'next/headers';
import { notFound } from 'next/navigation';
import React from 'react';
@@ -28,6 +30,7 @@ interface Props {
export default async function RootLayout({ children, params }: Props) {
const session = await auth();
+ const { isEnabled: isDraftModeEnabled } = await draftMode();
const { locale } = await params;
@@ -40,20 +43,26 @@ export default async function RootLayout({ children, params }: Props) {
const messages = await getMessages();
return (
-
-
-
-
-
-
-
-
- {/*@see https://github.com/nextauthjs/next-auth/issues/9504#issuecomment-2516665386*/}
-
-
- {children}
-
-
-
+
+
+
+
+
+
+
+
+
+ {/*@see https://github.com/nextauthjs/next-auth/issues/9504#issuecomment-2516665386*/}
+
+
+ {children}
+
+
+
+
);
}
diff --git a/apps/frontend/src/app/api/disable-draft/route.ts b/apps/frontend/src/app/api/disable-draft/route.ts
new file mode 100644
index 00000000..c47d71cb
--- /dev/null
+++ b/apps/frontend/src/app/api/disable-draft/route.ts
@@ -0,0 +1,6 @@
+import { draftMode } from 'next/headers';
+
+export async function GET() {
+ (await draftMode()).disable();
+ return new Response('Draft mode is disabled');
+}
diff --git a/apps/frontend/src/app/api/enable-draft/route.ts b/apps/frontend/src/app/api/enable-draft/route.ts
new file mode 100644
index 00000000..311be73d
--- /dev/null
+++ b/apps/frontend/src/app/api/enable-draft/route.ts
@@ -0,0 +1,35 @@
+import { draftMode, cookies } from 'next/headers';
+import { redirect } from 'next/navigation';
+import { NextRequest } from 'next/server';
+
+export async function GET(request: NextRequest) {
+ const { searchParams } = new URL(request.url);
+ const secret = searchParams.get('secret');
+ const slug = searchParams.get('slug');
+ const locale = searchParams.get('locale');
+
+ if (!secret || !slug || !locale) {
+ return new Response('Missing parameters', { status: 400 });
+ }
+
+ if (secret !== process.env.CF_PREVIEW_SECRET) {
+ return new Response('Invalid token', { status: 401 });
+ }
+
+ (await draftMode()).enable();
+
+ // Override cookie header for draft mode for usage in live-preview
+ // https://github.com/vercel/next.js/issues/49927
+ const cookieStore = await cookies();
+ const cookie = cookieStore.get('__prerender_bypass')!;
+ cookieStore.set({
+ name: '__prerender_bypass',
+ value: cookie?.value,
+ httpOnly: true,
+ path: '/',
+ secure: true,
+ sameSite: 'none',
+ });
+
+ redirect(`/${locale}/${slug}`);
+}
diff --git a/apps/frontend/src/auth/auth.ts b/apps/frontend/src/auth/auth.ts
index aa4c4203..82ee952a 100644
--- a/apps/frontend/src/auth/auth.ts
+++ b/apps/frontend/src/auth/auth.ts
@@ -32,6 +32,76 @@ export const nextAuthResult = NextAuth({
// Handle sign out
},
},
+ cookies: {
+ sessionToken: {
+ name: `authjs.session-token`,
+ options: {
+ httpOnly: true,
+ sameSite: 'none',
+ path: '/',
+ secure: true,
+ },
+ },
+ callbackUrl: {
+ name: `authjs.callback-url`,
+ options: {
+ httpOnly: true,
+ sameSite: 'none',
+ path: '/',
+ secure: true,
+ },
+ },
+ csrfToken: {
+ // Default to __Host- for CSRF token for additional protection if using useSecureCookies
+ // NB: The `__Host-` prefix is stricter than the `__Secure-` prefix.
+ name: `authjs.csrf-token`,
+ options: {
+ httpOnly: true,
+ sameSite: 'none',
+ path: '/',
+ secure: true,
+ },
+ },
+ pkceCodeVerifier: {
+ name: `authjs.pkce.code_verifier`,
+ options: {
+ httpOnly: true,
+ sameSite: 'none',
+ path: '/',
+ secure: true,
+ maxAge: 60 * 15, // 15 minutes in seconds
+ },
+ },
+ state: {
+ name: `authjs.state`,
+ options: {
+ httpOnly: true,
+ sameSite: 'none',
+ path: '/',
+ secure: true,
+ maxAge: 60 * 15, // 15 minutes in seconds
+ },
+ },
+ nonce: {
+ name: `authjs.nonce`,
+ options: {
+ httpOnly: true,
+ sameSite: 'none',
+ path: '/',
+ secure: true,
+ },
+ },
+ webauthnChallenge: {
+ name: `authjs.challenge`,
+ options: {
+ httpOnly: true,
+ sameSite: 'none',
+ path: '/',
+ secure: true,
+ maxAge: 60 * 15, // 15 minutes in seconds
+ },
+ },
+ },
});
export const { handlers, signIn, signOut } = nextAuthResult;
diff --git a/apps/frontend/src/blocks/renderBlocks.tsx b/apps/frontend/src/blocks/renderBlocks.tsx
index 0976f0ae..a3f6702a 100644
--- a/apps/frontend/src/blocks/renderBlocks.tsx
+++ b/apps/frontend/src/blocks/renderBlocks.tsx
@@ -25,6 +25,7 @@ import * as TicketList from '@o2s/blocks.ticket-list/frontend';
import * as TickeRecent from '@o2s/blocks.ticket-recent/frontend';
import * as UserAccount from '@o2s/blocks.user-account/frontend';
import { getLocale } from 'next-intl/server';
+import { draftMode } from 'next/headers';
import React from 'react';
import { CMS } from '@o2s/framework/modules';
@@ -46,11 +47,13 @@ interface BlockProps {
userId: string | undefined;
routing: typeof routing;
hasPriority?: boolean;
+ isDraftModeEnabled?: boolean;
}
export const renderBlocks = async (blocks: CMS.Model.Page.SlotBlock[], slug: string[]) => {
const session = await auth();
const locale = await getLocale();
+ const { isEnabled: isDraftModeEnabled } = await draftMode();
return blocks.map((block, index) => {
// decides whether the block is above the fold,
@@ -65,6 +68,7 @@ export const renderBlocks = async (blocks: CMS.Model.Page.SlotBlock[], slug: str
userId: session?.user?.id,
routing: routing,
hasPriority,
+ isDraftModeEnabled: isDraftModeEnabled,
};
return (
diff --git a/package-lock.json b/package-lock.json
index c45e1b4a..28501a78 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -332,7 +332,6 @@
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -405,7 +404,6 @@
"integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"readdirp": "^4.0.1"
},
@@ -777,6 +775,7 @@
"name": "@o2s/frontend",
"version": "1.10.0",
"dependencies": {
+ "@contentful/live-preview": "^4.6.52",
"@o2s/api-harmonization": "*",
"@o2s/blocks.article": "*",
"@o2s/blocks.article-list": "*",
@@ -1239,7 +1238,6 @@
"resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.42.0.tgz",
"integrity": "sha512-NZR7yyHj2WzK6D5X8gn+/KOxPdzYEXOqVdSaK/biU8QfYUpUuEA0sCWg/XlO05tPVEcJelF/oLrrNY3UjRbOww==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@algolia/client-common": "5.42.0",
"@algolia/requester-browser-xhr": "5.42.0",
@@ -4413,7 +4411,6 @@
"integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"env-paths": "^2.2.1",
"import-fresh": "^3.3.0",
@@ -4688,6 +4685,59 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
+ "node_modules/@contentful/content-source-maps": {
+ "version": "0.11.39",
+ "resolved": "https://registry.npmjs.org/@contentful/content-source-maps/-/content-source-maps-0.11.39.tgz",
+ "integrity": "sha512-fVhvAubuQRID3NeMJI11NXXMnOaLUDJ+yuqlyfJynfsFfvT2PNmiRzThgumjNuaSP344SceRzZPsonVzxI4qzg==",
+ "license": "MIT",
+ "dependencies": {
+ "@vercel/stega": "^0.1.2",
+ "json-pointer": "^0.6.2"
+ }
+ },
+ "node_modules/@contentful/live-preview": {
+ "version": "4.6.52",
+ "resolved": "https://registry.npmjs.org/@contentful/live-preview/-/live-preview-4.6.52.tgz",
+ "integrity": "sha512-TSEyQLJ4BSxW7v90wi9FGoN66QdDTzjtVu/iSOPlwLI8LHK1Of7HGIXgP2QrdmJX1iDe86Enub4pOySWEjnD0g==",
+ "license": "MIT",
+ "dependencies": {
+ "@contentful/content-source-maps": "^0.11.39",
+ "@contentful/rich-text-types": "^17.0.0",
+ "flatted": "^3.2.9",
+ "graphql-tag": "^2.12.6",
+ "json-pointer": "^0.6.2",
+ "lodash.isequal": "^4.5.0"
+ },
+ "peerDependencies": {
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/@contentful/rich-text-types": {
+ "version": "17.2.4",
+ "resolved": "https://registry.npmjs.org/@contentful/rich-text-types/-/rich-text-types-17.2.4.tgz",
+ "integrity": "sha512-3y456l+x5aPzqcvjpG6L66sIkfH66rBl1QtGKexgJ3Nvd6k4ORvpAJ6gMDBz3WMAYvXGrVZMyhlFE0e6UdHngA==",
+ "license": "MIT",
+ "dependencies": {
+ "@lingui/core": "^5.4.1",
+ "is-plain-obj": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@contentful/rich-text-types/node_modules/is-plain-obj": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz",
+ "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/@cspotcode/source-map-support": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
@@ -4815,7 +4865,6 @@
}
],
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=18"
},
@@ -4838,7 +4887,6 @@
}
],
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=18"
}
@@ -6356,7 +6404,6 @@
"resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.9.2.tgz",
"integrity": "sha512-C5wZsGuKTY8jEYsqdxhhFOe1ZDjH0uIYJ9T/jebHwkyxqnr4wW0jTkB72OMqNjsoQRcb0JN3PcSeTwFlVgzCZg==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@docusaurus/core": "3.9.2",
"@docusaurus/logger": "3.9.2",
@@ -6585,7 +6632,6 @@
"resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.9.2.tgz",
"integrity": "sha512-IGUsArG5hhekXd7RDb11v94ycpJpFdJPkLnt10fFQWOVxAtq5/D7hT6lzc2fhyQKaaCE62qVajOMKL7OiAFAIA==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@docusaurus/core": "3.9.2",
"@docusaurus/logger": "3.9.2",
@@ -6626,7 +6672,6 @@
"resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.9.2.tgz",
"integrity": "sha512-6c4DAbR6n6nPbnZhY2V3tzpnKnGL+6aOsLvFL26VRqhlczli9eWG0VDUNoCQEPnGwDMhPS42UhSAnz5pThm5Ag==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@docusaurus/mdx-loader": "3.9.2",
"@docusaurus/module-type-aliases": "3.9.2",
@@ -11587,6 +11632,44 @@
"resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz",
"integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw=="
},
+ "node_modules/@lingui/core": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/@lingui/core/-/core-5.5.2.tgz",
+ "integrity": "sha512-YhKdfXOSEr64mEsPL7DbgGhoXJhI+DSysZHA43K9ZuG322JEql+luvRZpH/NobLBMiM1SjoLVWazEsqIkGuPDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.20.13",
+ "@lingui/message-utils": "5.5.2"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ },
+ "peerDependencies": {
+ "@lingui/babel-plugin-lingui-macro": "5.5.2",
+ "babel-plugin-macros": "2 || 3"
+ },
+ "peerDependenciesMeta": {
+ "@lingui/babel-plugin-lingui-macro": {
+ "optional": true
+ },
+ "babel-plugin-macros": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@lingui/message-utils": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/@lingui/message-utils/-/message-utils-5.5.2.tgz",
+ "integrity": "sha512-0/xu0nAzYm4ZLUHAdowkTLcP2iM+UOuFEpIsJ40iOIYgHeub1idtn8EFnliCiN83rfrcMaPK63MgGKmyTI4Umg==",
+ "license": "MIT",
+ "dependencies": {
+ "@messageformat/parser": "^5.0.0",
+ "js-sha256": "^0.10.1"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ }
+ },
"node_modules/@lukeed/csprng": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz",
@@ -11797,7 +11880,6 @@
"resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.1.tgz",
"integrity": "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/mdx": "^2.0.0"
},
@@ -11856,6 +11938,15 @@
"langium": "3.3.1"
}
},
+ "node_modules/@messageformat/parser": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@messageformat/parser/-/parser-5.1.1.tgz",
+ "integrity": "sha512-3p0YRGCcTUCYvBKLIxtDDyrJ0YijGIwrTRu1DT8gIviIDZru8H23+FkY6MJBzM1n9n20CiM4VeDYuBsrrwnLjg==",
+ "license": "MIT",
+ "dependencies": {
+ "moo": "^0.5.1"
+ }
+ },
"node_modules/@napi-rs/wasm-runtime": {
"version": "0.2.12",
"resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz",
@@ -11873,7 +11964,6 @@
"resolved": "https://registry.npmjs.org/@nestjs/axios/-/axios-4.0.1.tgz",
"integrity": "sha512-68pFJgu+/AZbWkGu65Z3r55bTsCPlgyKaV4BSG8yUAD72q1PPuyVRgUwFv6BxdnibTUHlyxm06FmYWNC+bjN7A==",
"license": "MIT",
- "peer": true,
"peerDependencies": {
"@nestjs/common": "^10.0.0 || ^11.0.0",
"axios": "^1.3.1",
@@ -11885,7 +11975,6 @@
"resolved": "https://registry.npmjs.org/@nestjs/common/-/common-11.1.8.tgz",
"integrity": "sha512-bbsOqwld/GdBfiRNc4nnjyWWENDEicq4SH+R5AuYatvf++vf1x5JIsHB1i1KtfZMD3eRte0D4K9WXuAYil6XAg==",
"license": "MIT",
- "peer": true,
"dependencies": {
"file-type": "21.0.0",
"iterare": "1.2.1",
@@ -11917,7 +12006,6 @@
"resolved": "https://registry.npmjs.org/@nestjs/config/-/config-4.0.2.tgz",
"integrity": "sha512-McMW6EXtpc8+CwTUwFdg6h7dYcBUpH5iUILCclAsa+MbCEvC9ZKu4dCHRlJqALuhjLw97pbQu62l4+wRwGeZqA==",
"license": "MIT",
- "peer": true,
"dependencies": {
"dotenv": "16.4.7",
"dotenv-expand": "12.0.1",
@@ -11961,7 +12049,6 @@
"integrity": "sha512-7riWfmTmMhCJHZ5ZiaG+crj4t85IPCq/wLRuOUSigBYyFT2JZj0lVHtAdf4Davp9ouNI8GINBDt9h9b5Gz9nTw==",
"hasInstallScript": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@nuxt/opencollective": "0.4.1",
"fast-safe-stringify": "2.1.1",
@@ -12012,7 +12099,6 @@
"resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-11.1.8.tgz",
"integrity": "sha512-rL6pZH9BW7BnL5X2eWbJMtt86uloAKjFgyY5+L2UkizgfEp7rgAs0+Z1z0BcW2Pgu5+q8O7RKPNyHJ/9ZNz/ZQ==",
"license": "MIT",
- "peer": true,
"dependencies": {
"cors": "2.8.5",
"express": "5.1.0",
@@ -13257,6 +13343,10 @@
"resolved": "packages/integrations/algolia",
"link": true
},
+ "node_modules/@o2s/integrations.contentful-cms": {
+ "resolved": "packages/integrations/contentful-cms",
+ "link": true
+ },
"node_modules/@o2s/integrations.medusajs": {
"resolved": "packages/integrations/medusajs",
"link": true
@@ -13381,266 +13471,6 @@
"@noble/hashes": "^1.1.5"
}
},
- "node_modules/@parcel/watcher-android-arm64": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz",
- "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-darwin-arm64": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz",
- "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-darwin-x64": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz",
- "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-freebsd-x64": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz",
- "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm-glibc": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz",
- "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==",
- "cpu": [
- "arm"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm-musl": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz",
- "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==",
- "cpu": [
- "arm"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm64-glibc": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz",
- "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm64-musl": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz",
- "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-x64-glibc": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz",
- "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-x64-musl": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz",
- "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-win32-arm64": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz",
- "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-win32-ia32": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz",
- "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==",
- "cpu": [
- "ia32"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-win32-x64": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz",
- "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
"node_modules/@pkgjs/parseargs": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
@@ -13720,7 +13550,6 @@
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@@ -13830,7 +13659,6 @@
"integrity": "sha512-zL58jbLzYamjnNnmNA51IOZdbk5ci03KviXCuB0Tydc9btH2kDWsi1pQm2VecviRTM7jGia0OPPkgpGnT3nKvw==",
"hasInstallScript": true,
"license": "Apache-2.0",
- "peer": true,
"engines": {
"node": ">=18.18"
},
@@ -16145,7 +15973,6 @@
"resolved": "https://registry.npmjs.org/@redis/client/-/client-5.8.3.tgz",
"integrity": "sha512-MZVUE+l7LmMIYlIjubPosruJ9ltSLGFmJqsXApTqPLyHLjsJUSAbAJb/A3N34fEqean4ddiDkdWzNu4ZKPvRUg==",
"license": "MIT",
- "peer": true,
"dependencies": {
"cluster-key-slot": "1.1.2"
},
@@ -16393,7 +16220,6 @@
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@@ -17056,7 +16882,6 @@
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz",
"integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==",
- "peer": true,
"dependencies": {
"@babel/core": "^7.21.3",
"@svgr/babel-preset": "8.1.0",
@@ -17573,6 +17398,7 @@
"integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@babel/code-frame": "^7.10.4",
"@babel/runtime": "^7.12.5",
@@ -17593,6 +17419,7 @@
"integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"dev": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=10"
},
@@ -17606,6 +17433,7 @@
"integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
"dev": true,
"license": "Apache-2.0",
+ "peer": true,
"dependencies": {
"dequal": "^2.0.3"
}
@@ -17616,6 +17444,7 @@
"integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"ansi-regex": "^5.0.1",
"ansi-styles": "^5.0.0",
@@ -17630,7 +17459,8 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@testing-library/jest-dom": {
"version": "6.8.0",
@@ -18013,7 +17843,8 @@
"resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz",
"integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@types/babel__core": {
"version": "7.20.5",
@@ -18436,7 +18267,6 @@
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz",
"integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/estree": "*",
"@types/json-schema": "*"
@@ -18470,7 +18300,6 @@
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz",
"integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/body-parser": "*",
"@types/express-serve-static-core": "^4.17.33",
@@ -18717,7 +18546,6 @@
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.7.2.tgz",
"integrity": "sha512-/NbVmcGTP+lj5oa4yiYxxeBjRivKQ5Ns1eSZeB99ExsEQ6rX5XYU1Zy/gGxY/ilqtD4Etx9mKyrPxZRetiahhA==",
"license": "MIT",
- "peer": true,
"dependencies": {
"undici-types": "~7.14.0"
}
@@ -18767,7 +18595,6 @@
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.2.tgz",
"integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==",
"license": "MIT",
- "peer": true,
"dependencies": {
"csstype": "^3.0.2"
}
@@ -18787,7 +18614,6 @@
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.2.tgz",
"integrity": "sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==",
"license": "MIT",
- "peer": true,
"peerDependencies": {
"@types/react": "^19.2.0"
}
@@ -19192,7 +19018,6 @@
"integrity": "sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@typescript-eslint/scope-manager": "8.46.2",
"@typescript-eslint/types": "8.46.2",
@@ -19725,6 +19550,12 @@
}
}
},
+ "node_modules/@vercel/stega": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@vercel/stega/-/stega-0.1.2.tgz",
+ "integrity": "sha512-P7mafQXjkrsoyTRppnt0N21udKS9wUmLXHRyP9saLXLHw32j/FgUJ3FscSWgvSqRs4cj7wKZtwqJEvWJ2jbGmA==",
+ "license": "MPL-2.0"
+ },
"node_modules/@vitest/expect": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz",
@@ -20046,7 +19877,6 @@
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"license": "MIT",
- "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -20132,7 +19962,6 @@
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -20193,7 +20022,6 @@
"resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.42.0.tgz",
"integrity": "sha512-X5+PtWc9EJIPafT/cj8ZG+6IU3cjRRnlHGtqMHK/9gsiupQbAyYlH5y7qt/FtsAhfX5AICHffZy69ZAsVrxWkQ==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@algolia/abtesting": "1.8.0",
"@algolia/client-abtesting": "5.42.0",
@@ -20748,7 +20576,6 @@
"resolved": "https://registry.npmjs.org/axios/-/axios-1.13.1.tgz",
"integrity": "sha512-hU4EGxxt+j7TQijx1oYdAjw4xuIp1wRQSsbMFwSthCWeBQur1eF+qJ5iQ5sN3Tw8YRzQNKb8jszgBdMDVqwJcw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"follow-redirects": "^1.15.6",
"form-data": "^4.0.4",
@@ -20808,7 +20635,6 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@@ -21630,7 +21456,6 @@
}
],
"license": "MIT",
- "peer": true,
"dependencies": {
"baseline-browser-mapping": "^2.8.9",
"caniuse-lite": "^1.0.30001746",
@@ -22395,7 +22220,6 @@
"resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-11.0.3.tgz",
"integrity": "sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@chevrotain/cst-dts-gen": "11.0.3",
"@chevrotain/gast": "11.0.3",
@@ -23374,7 +23198,6 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@@ -23820,7 +23643,6 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@@ -24100,7 +23922,6 @@
"resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.33.1.tgz",
"integrity": "sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10"
}
@@ -24515,7 +24336,6 @@
"resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
"integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
"license": "ISC",
- "peer": true,
"engines": {
"node": ">=12"
}
@@ -24714,8 +24534,7 @@
"version": "1.11.19",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz",
"integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==",
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/debounce": {
"version": "1.2.1",
@@ -25235,7 +25054,8 @@
"resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz",
"integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/dom-converter": {
"version": "0.2.0",
@@ -25637,7 +25457,6 @@
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz",
"integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==",
- "peer": true,
"dependencies": {
"ansi-colors": "^4.1.1",
"strip-ansi": "^6.0.1"
@@ -25910,7 +25729,6 @@
"integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==",
"dev": true,
"hasInstallScript": true,
- "peer": true,
"bin": {
"esbuild": "bin/esbuild"
},
@@ -25951,7 +25769,6 @@
"integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"debug": "^4.3.4"
},
@@ -26019,7 +25836,6 @@
"deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1",
@@ -26117,7 +25933,6 @@
"integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==",
"dev": true,
"license": "MIT",
- "peer": true,
"bin": {
"eslint-config-prettier": "bin/cli.js"
},
@@ -26228,7 +26043,6 @@
"resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz",
"integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==",
"dev": true,
- "peer": true,
"dependencies": {
"@rtsao/scc": "^1.1.0",
"array-includes": "^3.1.8",
@@ -27632,6 +27446,12 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/foreach": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz",
+ "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==",
+ "license": "MIT"
+ },
"node_modules/foreground-child": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
@@ -28399,7 +28219,6 @@
"resolved": "https://registry.npmjs.org/graphql/-/graphql-16.11.0.tgz",
"integrity": "sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==",
"license": "MIT",
- "peer": true,
"engines": {
"node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0"
}
@@ -28449,7 +28268,6 @@
"resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-7.3.1.tgz",
"integrity": "sha512-GdinBsBVYrWzwEvOlzadrV5j8mdOc9ZT8In9QyRIZaxbhkTL08j35yNbPp96jAacYzjeD/hKKy2E2RGI7c7Yug==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@graphql-typed-document-node/core": "^3.2.0"
},
@@ -28461,7 +28279,6 @@
"version": "2.12.6",
"resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz",
"integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==",
- "peer": true,
"dependencies": {
"tslib": "^2.1.0"
},
@@ -32695,6 +32512,12 @@
"url": "https://github.com/sponsors/panva"
}
},
+ "node_modules/js-sha256": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.10.1.tgz",
+ "integrity": "sha512-5obBtsz9301ULlsgggLg542s/jqtddfOpV5KJc4hajc9JV8GeY2gZHSVpYBn4nWqAUTJ9v+xwtbJ1mIBgIH5Vw==",
+ "license": "MIT"
+ },
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -32738,6 +32561,15 @@
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
},
+ "node_modules/json-pointer": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.2.tgz",
+ "integrity": "sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==",
+ "license": "MIT",
+ "dependencies": {
+ "foreach": "^2.0.4"
+ }
+ },
"node_modules/json-schema": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
@@ -32829,7 +32661,6 @@
"resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz",
"integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==",
"license": "MIT",
- "peer": true,
"dependencies": {
"jws": "^3.2.2",
"lodash.includes": "^4.3.0",
@@ -33564,6 +33395,13 @@
"resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
"integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="
},
+ "node_modules/lodash.isequal": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+ "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==",
+ "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.",
+ "license": "MIT"
+ },
"node_modules/lodash.isinteger": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
@@ -33955,6 +33793,7 @@
"integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==",
"dev": true,
"license": "MIT",
+ "peer": true,
"bin": {
"lz-string": "bin/bin.js"
}
@@ -36412,7 +36251,6 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@@ -36545,6 +36383,12 @@
"pathe": "^2.0.1"
}
},
+ "node_modules/moo": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz",
+ "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==",
+ "license": "BSD-3-Clause"
+ },
"node_modules/motion-dom": {
"version": "12.23.23",
"resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.23.tgz",
@@ -36710,7 +36554,6 @@
"resolved": "https://registry.npmjs.org/next/-/next-15.5.6.tgz",
"integrity": "sha512-zTxsnI3LQo3c9HSdSf91O1jMNsEzIXDShXd4wVdg9y5shwLqBXi4ZtUUJyB86KGVSJLZx0PFONvO54aheGX8QQ==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@next/env": "15.5.6",
"@swc/helpers": "0.5.15",
@@ -36763,7 +36606,6 @@
"resolved": "https://registry.npmjs.org/next-auth/-/next-auth-5.0.0-beta.29.tgz",
"integrity": "sha512-Ukpnuk3NMc/LiOl32njZPySk7pABEzbjhMUFd5/n10I0ZNC7NCuVv8IY2JgbDek2t/PUOifQEoUiOOTLy4os5A==",
"license": "ISC",
- "peer": true,
"dependencies": {
"@auth/core": "0.40.0"
},
@@ -36802,7 +36644,6 @@
}
],
"license": "MIT",
- "peer": true,
"dependencies": {
"@formatjs/intl-localematcher": "^0.5.4",
"negotiator": "^1.0.0",
@@ -36877,13 +36718,6 @@
"integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==",
"dev": true
},
- "node_modules/node-addon-api": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
- "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
- "license": "MIT",
- "optional": true
- },
"node_modules/node-domexception": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
@@ -38363,7 +38197,6 @@
}
],
"license": "MIT",
- "peer": true,
"dependencies": {
"nanoid": "^3.3.11",
"picocolors": "^1.1.1",
@@ -39605,7 +39438,6 @@
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
"integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
- "peer": true,
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -39695,7 +39527,6 @@
"resolved": "https://registry.npmjs.org/preact/-/preact-10.24.3.tgz",
"integrity": "sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==",
"license": "MIT",
- "peer": true,
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/preact"
@@ -39725,7 +39556,6 @@
"integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"bin": {
"prettier": "bin/prettier.cjs"
},
@@ -39839,7 +39669,6 @@
"integrity": "sha512-ac6h0sM1Tg3zu8NInY+qhP/S9KhENVaw9n1BrGKQVFu05JT5yT5Qqqmb8tMRIE3ZXvVj4xcRA5yfrsy4X7Yy5g==",
"hasInstallScript": true,
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@prisma/config": "6.17.1",
"@prisma/engines": "6.17.1"
@@ -40204,7 +40033,6 @@
"resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz",
"integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -40283,7 +40111,6 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz",
"integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==",
"license": "MIT",
- "peer": true,
"dependencies": {
"scheduler": "^0.27.0"
},
@@ -40359,7 +40186,6 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz",
"integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==",
- "peer": true,
"dependencies": {
"@types/react": "*"
},
@@ -40388,7 +40214,6 @@
"integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==",
"dev": true,
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -40442,7 +40267,6 @@
"version": "5.3.4",
"resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz",
"integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==",
- "peer": true,
"dependencies": {
"@babel/runtime": "^7.12.13",
"history": "^4.9.0",
@@ -40834,8 +40658,7 @@
"node_modules/reflect-metadata": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz",
- "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==",
- "peer": true
+ "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q=="
},
"node_modules/reflect.getprototypeof": {
"version": "1.0.10",
@@ -41609,7 +41432,6 @@
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
"integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"tslib": "^2.1.0"
}
@@ -41706,7 +41528,6 @@
"resolved": "https://registry.npmjs.org/sass/-/sass-1.93.2.tgz",
"integrity": "sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==",
"license": "MIT",
- "peer": true,
"dependencies": {
"chokidar": "^4.0.0",
"immutable": "^5.0.2",
@@ -42916,7 +42737,6 @@
"integrity": "sha512-339U14K6l46EFyRvaPS2ZlL7v7Pb+LlcXT8KAETrGPxq8v1sAjj2HAOB6zrlAK3M+0+ricssfAwsLCwt7Eg8TQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@storybook/global": "^5.0.0",
"@testing-library/jest-dom": "^6.6.3",
@@ -43484,8 +43304,7 @@
"version": "2.3.13",
"resolved": "https://registry.npmjs.org/survey-core/-/survey-core-2.3.13.tgz",
"integrity": "sha512-0sWWkgu2zsG8QSNOYG6QcGiGSX/O7hhOLcf0iXASaUiJxhFQ+O+iDDYCBflmSA7QPYZjFT4LobUCGKYnDqvZdw==",
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/survey-react-ui": {
"version": "2.3.13",
@@ -43768,8 +43587,7 @@
"version": "4.1.16",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.16.tgz",
"integrity": "sha512-pONL5awpaQX4LN5eiv7moSiSPd/DLDzKVRJz8Q9PgzmAdd1R4307GQS2ZpfiN7ZmekdQrfhZZiSE5jkLR4WNaA==",
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/tailwindcss-animate": {
"version": "1.0.7",
@@ -43854,7 +43672,6 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@@ -44402,7 +44219,6 @@
"version": "10.9.2",
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
"integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
- "peer": true,
"dependencies": {
"@cspotcode/source-map-support": "^0.8.0",
"@tsconfig/node10": "^1.0.7",
@@ -44528,8 +44344,7 @@
"node_modules/tslib": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "peer": true
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
},
"node_modules/tsx": {
"version": "4.20.6",
@@ -44564,7 +44379,6 @@
"integrity": "sha512-5c9Fdsr9qfpT3hA0EyYSFRZj1dVVsb6KIWubA9JBYZ/9ZEAijgUEae0BBR/Xl/wekt4w65/lYLTFaP3JmwSO8w==",
"dev": true,
"license": "MIT",
- "peer": true,
"bin": {
"turbo": "bin/turbo"
},
@@ -44697,7 +44511,6 @@
"version": "0.21.3",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
"integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
- "peer": true,
"engines": {
"node": ">=10"
},
@@ -44813,7 +44626,6 @@
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"license": "Apache-2.0",
- "peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -45966,7 +45778,6 @@
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.100.2.tgz",
"integrity": "sha512-QaNKAvGCDRh3wW1dsDjeMdDXwZm2vqq3zn6Pvq4rHOEOGSaUMgOOjG2Y9ZbIGzpfkJk9ZYTHpDqgDfeBDcnLaw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/eslint-scope": "^3.7.7",
"@types/estree": "^1.0.8",
@@ -46092,7 +45903,6 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@@ -46253,7 +46063,6 @@
"version": "8.17.1",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@@ -46363,7 +46172,6 @@
"integrity": "sha512-khZGfAeJx6I8K9zKohEWWYN6KDlVw2DHownoe+6Vtwj1LP9WFgegXnVMSkZ/dBEBtXFwrkkydsaPFlB7f8wU2A==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"ansi-html-community": "0.0.8",
"html-entities": "^2.1.0",
@@ -46413,7 +46221,6 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@@ -46877,7 +46684,6 @@
"version": "7.5.10",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
"integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
- "peer": true,
"engines": {
"node": ">=8.3.0"
},
@@ -47091,7 +46897,6 @@
"resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz",
"integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==",
"license": "MIT",
- "peer": true,
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
@@ -54569,6 +54374,56 @@
"node": "*"
}
},
+ "packages/integrations/contentful-cms": {
+ "name": "@o2s/integrations.contentful-cms",
+ "version": "0.1.0",
+ "license": "MIT",
+ "dependencies": {
+ "@contentful/live-preview": "^4.6.52",
+ "@o2s/framework": "*",
+ "@o2s/utils.logger": "*",
+ "flatted": "^3.3.3",
+ "graphql": "16.11.0",
+ "graphql-request": "7.3.0",
+ "graphql-tag": "2.12.6"
+ },
+ "devDependencies": {
+ "@graphql-codegen/add": "^5.0.3",
+ "@graphql-codegen/cli": "^5.0.7",
+ "@graphql-codegen/introspection": "^4.0.3",
+ "@graphql-codegen/typescript": "^4.1.6",
+ "@graphql-codegen/typescript-graphql-request": "^6.3.0",
+ "@graphql-codegen/typescript-operations": "^4.6.1",
+ "@graphql-codegen/typescript-resolvers": "^4.5.2",
+ "@o2s/eslint-config": "*",
+ "@o2s/prettier-config": "*",
+ "@o2s/typescript-config": "*",
+ "concurrently": "^9.1.2",
+ "eslint": "^8.57.0",
+ "prettier": "^3.5.3",
+ "tsc-alias": "^1.8.13",
+ "typescript": "^5.8.2"
+ },
+ "peerDependencies": {
+ "@nestjs/axios": "^4.0.1",
+ "@nestjs/common": "^11.0.16",
+ "@nestjs/config": "^4.0.2",
+ "@nestjs/core": "^11",
+ "rxjs": "^7"
+ }
+ },
+ "packages/integrations/contentful-cms/node_modules/graphql-request": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-7.3.0.tgz",
+ "integrity": "sha512-cxmQfa/ZknSNtuJpgPpr4CQTwPjSP57EYzOyNoyhPakXqr1yvTtOXNFbxQYaz4DMQ801i2DjnwUkifGLjtXhSQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@graphql-typed-document-node/core": "^3.2.0"
+ },
+ "peerDependencies": {
+ "graphql": "14 - 16"
+ }
+ },
"packages/integrations/medusajs": {
"name": "@o2s/integrations.medusajs",
"version": "1.6.0",
diff --git a/packages/blocks/faq/src/api-harmonization/faq.mapper.ts b/packages/blocks/faq/src/api-harmonization/faq.mapper.ts
index 65f088fb..8271f4df 100644
--- a/packages/blocks/faq/src/api-harmonization/faq.mapper.ts
+++ b/packages/blocks/faq/src/api-harmonization/faq.mapper.ts
@@ -10,5 +10,6 @@ export const mapFaq = (cms: CMS.Model.FaqBlock.FaqBlock): FaqBlock => {
subtitle: cms.subtitle,
items: cms.items,
banner: cms.banner,
+ meta: cms.meta,
};
};
diff --git a/packages/blocks/faq/src/api-harmonization/faq.model.ts b/packages/blocks/faq/src/api-harmonization/faq.model.ts
index fa6140c7..b20fb914 100644
--- a/packages/blocks/faq/src/api-harmonization/faq.model.ts
+++ b/packages/blocks/faq/src/api-harmonization/faq.model.ts
@@ -8,4 +8,5 @@ export class FaqBlock extends Models.Block.Block {
subtitle?: CMS.Model.FaqBlock.FaqBlock['subtitle'];
items!: CMS.Model.FaqBlock.FaqBlock['items'];
banner?: CMS.Model.FaqBlock.FaqBoxWithButton;
+ meta?: CMS.Model.FaqBlock.FaqBlock['meta'];
}
diff --git a/packages/blocks/faq/src/api-harmonization/faq.request.ts b/packages/blocks/faq/src/api-harmonization/faq.request.ts
index eced3a66..e419ec72 100644
--- a/packages/blocks/faq/src/api-harmonization/faq.request.ts
+++ b/packages/blocks/faq/src/api-harmonization/faq.request.ts
@@ -2,4 +2,5 @@ import { CMS } from '@o2s/framework/modules';
export class GetFaqBlockQuery implements Omit {
id!: string;
+ preview?: boolean;
}
diff --git a/packages/blocks/faq/src/frontend/Faq.client.tsx b/packages/blocks/faq/src/frontend/Faq.client.tsx
index fef4147c..c057509a 100644
--- a/packages/blocks/faq/src/frontend/Faq.client.tsx
+++ b/packages/blocks/faq/src/frontend/Faq.client.tsx
@@ -1,5 +1,6 @@
'use client';
+import { LivePreview } from '@o2s/configs.integrations/live-preview';
import { createNavigation } from 'next-intl/navigation';
import React from 'react';
@@ -15,7 +16,7 @@ import { FaqPureProps } from './Faq.types';
export const FaqPure: React.FC = ({ locale, accessToken, routing, ...component }) => {
const { Link: LinkComponent } = createNavigation(routing);
- const { title, subtitle, items, banner } = component;
+ const { title, subtitle, items, banner, meta } = component;
return (
@@ -23,11 +24,15 @@ export const FaqPure: React.FC = ({ locale, accessToken, routing,
{title && (
- {title}
+ {title}
{subtitle && (
-
+
{subtitle}
)}
@@ -36,9 +41,15 @@ export const FaqPure: React.FC = ({ locale, accessToken, routing,
{items.map((item, index) => (
- {item.title}
+
+ {item.title}
+
-
+
))}
@@ -50,13 +61,24 @@ export const FaqPure: React.FC = ({ locale, accessToken, routing,
- {banner?.title}
+
+ {banner?.title}
+
-
+
{banner?.button && (
)}
diff --git a/packages/blocks/faq/src/frontend/Faq.renderer.tsx b/packages/blocks/faq/src/frontend/Faq.renderer.tsx
index b20c44e9..b9e3677c 100644
--- a/packages/blocks/faq/src/frontend/Faq.renderer.tsx
+++ b/packages/blocks/faq/src/frontend/Faq.renderer.tsx
@@ -7,7 +7,13 @@ import { Loading } from '@o2s/ui/components/Loading';
import { Faq } from './Faq.server';
import { FaqRendererProps } from './Faq.types';
-export const FaqRenderer: React.FC = ({ id, accessToken, routing, hasPriority }) => {
+export const FaqRenderer: React.FC = ({
+ id,
+ accessToken,
+ routing,
+ hasPriority,
+ isDraftModeEnabled,
+}) => {
const locale = useLocale();
return (
@@ -19,7 +25,14 @@ export const FaqRenderer: React.FC = ({ id, accessToken, routi
}
>
-
+
);
};
diff --git a/packages/blocks/faq/src/frontend/Faq.server.tsx b/packages/blocks/faq/src/frontend/Faq.server.tsx
index 85344037..e8aaf5af 100644
--- a/packages/blocks/faq/src/frontend/Faq.server.tsx
+++ b/packages/blocks/faq/src/frontend/Faq.server.tsx
@@ -7,11 +7,19 @@ import { FaqProps } from './Faq.types';
export const FaqDynamic = dynamic(() => import('./Faq.client').then((module) => module.FaqPure));
-export const Faq: React.FC = async ({ id, accessToken, locale, routing, hasPriority }) => {
+export const Faq: React.FC = async ({
+ id,
+ accessToken,
+ locale,
+ routing,
+ hasPriority,
+ isDraftModeEnabled,
+}) => {
try {
const data = await sdk.blocks.getFaq(
{
id,
+ preview: isDraftModeEnabled,
},
{ 'x-locale': locale },
accessToken,
diff --git a/packages/blocks/faq/src/frontend/Faq.types.ts b/packages/blocks/faq/src/frontend/Faq.types.ts
index c1df6e86..6a80a553 100644
--- a/packages/blocks/faq/src/frontend/Faq.types.ts
+++ b/packages/blocks/faq/src/frontend/Faq.types.ts
@@ -8,6 +8,7 @@ export interface FaqProps {
locale: string;
routing: ReturnType;
hasPriority?: boolean;
+ isDraftModeEnabled?: boolean;
}
export type FaqPureProps = FaqProps & Model.FaqBlock;
diff --git a/packages/blocks/ticket-list/src/api-harmonization/ticket-list.mapper.ts b/packages/blocks/ticket-list/src/api-harmonization/ticket-list.mapper.ts
index 066ef72c..f5235e08 100644
--- a/packages/blocks/ticket-list/src/api-harmonization/ticket-list.mapper.ts
+++ b/packages/blocks/ticket-list/src/api-harmonization/ticket-list.mapper.ts
@@ -26,6 +26,7 @@ export const mapTicketList = (
},
forms: cms.forms,
labels: cms.labels,
+ meta: cms.meta,
};
};
diff --git a/packages/blocks/ticket-list/src/api-harmonization/ticket-list.model.ts b/packages/blocks/ticket-list/src/api-harmonization/ticket-list.model.ts
index a73fc03b..5c9608aa 100644
--- a/packages/blocks/ticket-list/src/api-harmonization/ticket-list.model.ts
+++ b/packages/blocks/ticket-list/src/api-harmonization/ticket-list.model.ts
@@ -1,4 +1,4 @@
-import { Tickets } from '@o2s/configs.integrations';
+import { CMS, Tickets } from '@o2s/configs.integrations';
import { Models as ApiModels } from '@o2s/utils.api-harmonization';
@@ -24,6 +24,7 @@ export class TicketListBlock extends ApiModels.Block.Block {
showMore: string;
clickToSelect: string;
};
+ meta?: CMS.Model.TicketListBlock.TicketListBlock['meta'];
}
export class Ticket {
diff --git a/packages/blocks/ticket-list/src/api-harmonization/ticket-list.request.ts b/packages/blocks/ticket-list/src/api-harmonization/ticket-list.request.ts
index efdf6392..0546a952 100644
--- a/packages/blocks/ticket-list/src/api-harmonization/ticket-list.request.ts
+++ b/packages/blocks/ticket-list/src/api-harmonization/ticket-list.request.ts
@@ -6,4 +6,5 @@ export class GetTicketListBlockQuery
id!: string;
offset?: number;
limit?: number;
+ preview?: boolean;
}
diff --git a/packages/blocks/ticket-list/src/frontend/TicketList.client.tsx b/packages/blocks/ticket-list/src/frontend/TicketList.client.tsx
index 2d4ac3b9..fead47c3 100644
--- a/packages/blocks/ticket-list/src/frontend/TicketList.client.tsx
+++ b/packages/blocks/ticket-list/src/frontend/TicketList.client.tsx
@@ -1,5 +1,6 @@
'use client';
+import { LivePreview } from '@o2s/configs.integrations/live-preview';
import { ArrowRight } from 'lucide-react';
import { createNavigation } from 'next-intl/navigation';
import React, { useState, useTransition } from 'react';
@@ -7,8 +8,8 @@ import React, { useState, useTransition } from 'react';
import { Mappings } from '@o2s/utils.frontend';
import { ActionList } from '@o2s/ui/components/ActionList';
-import { DataList } from '@o2s/ui/components/DataList';
import type { DataListColumnConfig } from '@o2s/ui/components/DataList';
+import { DataList } from '@o2s/ui/components/DataList';
import { DynamicIcon } from '@o2s/ui/components/DynamicIcon';
import { FiltersSection } from '@o2s/ui/components/Filters';
import { NoResults } from '@o2s/ui/components/NoResults';
@@ -24,7 +25,7 @@ import { sdk } from '../sdk';
import { TicketListPureProps } from './TicketList.types';
-export const TicketListPure: React.FC = ({ locale, accessToken, routing, ...component }) => {
+export const TicketListPure: React.FC = ({ locale, accessToken, routing, meta, ...component }) => {
const { Link: LinkComponent } = createNavigation(routing);
const initialFilters: Request.GetTicketListBlockQuery = {
@@ -107,7 +108,7 @@ export const TicketListPure: React.FC = ({ locale, accessTo
- {data.title}
+ {data.title}
{data.forms && (
diff --git a/packages/blocks/ticket-list/src/frontend/TicketList.renderer.tsx b/packages/blocks/ticket-list/src/frontend/TicketList.renderer.tsx
index cd3dd19c..1c2253fd 100644
--- a/packages/blocks/ticket-list/src/frontend/TicketList.renderer.tsx
+++ b/packages/blocks/ticket-list/src/frontend/TicketList.renderer.tsx
@@ -6,7 +6,13 @@ import { Loading } from '@o2s/ui/components/Loading';
import { TicketListServer } from './TicketList.server';
import { TicketListRendererProps } from './TicketList.types';
-export const TicketListRenderer: React.FC
= ({ id, accessToken, routing, hasPriority }) => {
+export const TicketListRenderer: React.FC = ({
+ id,
+ accessToken,
+ routing,
+ hasPriority,
+ isDraftModeEnabled,
+}) => {
const locale = useLocale();
return (
@@ -25,6 +31,7 @@ export const TicketListRenderer: React.FC = ({ id, acce
locale={locale}
routing={routing}
hasPriority={hasPriority}
+ isDraftModeEnabled={isDraftModeEnabled}
/>
);
diff --git a/packages/blocks/ticket-list/src/frontend/TicketList.server.tsx b/packages/blocks/ticket-list/src/frontend/TicketList.server.tsx
index 0c8287a9..8998128f 100644
--- a/packages/blocks/ticket-list/src/frontend/TicketList.server.tsx
+++ b/packages/blocks/ticket-list/src/frontend/TicketList.server.tsx
@@ -13,11 +13,13 @@ export const TicketListServer: React.FC = async ({
locale,
routing,
hasPriority,
+ isDraftModeEnabled,
}) => {
try {
const data = await sdk.blocks.getTicketList(
{
id,
+ preview: isDraftModeEnabled,
},
{ 'x-locale': locale },
accessToken,
diff --git a/packages/blocks/ticket-list/src/frontend/TicketList.types.ts b/packages/blocks/ticket-list/src/frontend/TicketList.types.ts
index 18385b50..62c2a7c1 100644
--- a/packages/blocks/ticket-list/src/frontend/TicketList.types.ts
+++ b/packages/blocks/ticket-list/src/frontend/TicketList.types.ts
@@ -8,6 +8,7 @@ export interface TicketListProps {
locale: string;
routing: ReturnType;
hasPriority?: boolean;
+ isDraftModeEnabled?: boolean;
}
export type TicketListPureProps = TicketListProps & Model.TicketListBlock;
diff --git a/packages/configs/integrations/package.json b/packages/configs/integrations/package.json
index 92dd3056..2aa808a6 100644
--- a/packages/configs/integrations/package.json
+++ b/packages/configs/integrations/package.json
@@ -4,7 +4,8 @@
"private": true,
"license": "MIT",
"exports": {
- ".": "./dist/src/models/index.js"
+ ".": "./dist/src/models/index.js",
+ "./live-preview": "./dist/src/models/live-preview.js"
},
"files": [
"dist"
diff --git a/packages/configs/integrations/src/models/cms.ts b/packages/configs/integrations/src/models/cms.ts
index 0051b2e5..2119e3a4 100644
--- a/packages/configs/integrations/src/models/cms.ts
+++ b/packages/configs/integrations/src/models/cms.ts
@@ -1,4 +1,4 @@
-import { Config, Integration } from '@o2s/integrations.mocked/integration';
+import { Config, Integration } from '@o2s/integrations.contentful-cms/integration';
import { ApiConfig } from '@o2s/framework/modules';
diff --git a/packages/configs/integrations/src/models/live-preview.ts b/packages/configs/integrations/src/models/live-preview.ts
new file mode 100644
index 00000000..f9332d50
--- /dev/null
+++ b/packages/configs/integrations/src/models/live-preview.ts
@@ -0,0 +1 @@
+export * as LivePreview from '@o2s/integrations.contentful-cms/live-preview';
diff --git a/packages/framework/src/modules/cms/cms.request.ts b/packages/framework/src/modules/cms/cms.request.ts
index 8182b470..654294c3 100644
--- a/packages/framework/src/modules/cms/cms.request.ts
+++ b/packages/framework/src/modules/cms/cms.request.ts
@@ -1,9 +1,13 @@
-export class GetCmsEntryParams {
+export class GetCmsParams {
+ preview?: boolean;
+}
+
+export class GetCmsEntryParams extends GetCmsParams {
id!: string;
locale!: string;
}
-export class GetCmsEntriesParams {
+export class GetCmsEntriesParams extends GetCmsParams {
locale!: string;
type!: string;
filters?: {
@@ -11,45 +15,45 @@ export class GetCmsEntriesParams {
};
}
-export class GetCmsPageParams {
+export class GetCmsPageParams extends GetCmsParams {
slug!: string;
locale!: string;
}
-export class GetCmsPagesParams {
+export class GetCmsPagesParams extends GetCmsParams {
locale!: string;
}
-export class GetCmsAlternativePagesParams {
+export class GetCmsAlternativePagesParams extends GetCmsParams {
id!: string;
slug!: string;
locale!: string;
}
-export class GetCmsLoginPageParams {
+export class GetCmsLoginPageParams extends GetCmsParams {
locale!: string;
}
-export class GetCmsNotFoundPageParams {
+export class GetCmsNotFoundPageParams extends GetCmsParams {
locale!: string;
}
-export class GetCmsHeaderParams {
+export class GetCmsHeaderParams extends GetCmsParams {
id!: string;
locale!: string;
}
-export class GetCmsFooterParams {
+export class GetCmsFooterParams extends GetCmsParams {
id!: string;
locale!: string;
}
-export class GetCmsAppConfigParams {
+export class GetCmsAppConfigParams extends GetCmsParams {
referrer?: string;
locale!: string;
}
-export class GetCmsOrganizationListParams {
+export class GetCmsOrganizationListParams extends GetCmsParams {
locale!: string;
}
-export class GetCmsSurveyParams {
+export class GetCmsSurveyParams extends GetCmsParams {
code!: string;
}
diff --git a/packages/framework/src/modules/cms/models/blocks/faq.model.ts b/packages/framework/src/modules/cms/models/blocks/faq.model.ts
index 8fcd816b..84979546 100644
--- a/packages/framework/src/modules/cms/models/blocks/faq.model.ts
+++ b/packages/framework/src/modules/cms/models/blocks/faq.model.ts
@@ -1,6 +1,6 @@
import { Block, Link, RichText } from '@/utils/models';
-export class FaqBlock extends Block.Block {
+export class FaqBlock extends Block.Block {
title?: string;
subtitle?: string;
items?: FaqItem[];
@@ -17,3 +17,20 @@ export class FaqBoxWithButton {
description?: RichText.RichText;
button?: Link.Link;
}
+
+export class Meta {
+ __id!: string;
+ title!: string;
+ subtitle!: string;
+ items?: {
+ __id: string;
+ title: string;
+ content: string;
+ }[];
+ banner?: {
+ __id: string;
+ title: string;
+ description: string;
+ button: string;
+ };
+}
diff --git a/packages/framework/src/modules/cms/models/blocks/ticket-list.model.ts b/packages/framework/src/modules/cms/models/blocks/ticket-list.model.ts
index 35029385..fc2d3b95 100644
--- a/packages/framework/src/modules/cms/models/blocks/ticket-list.model.ts
+++ b/packages/framework/src/modules/cms/models/blocks/ticket-list.model.ts
@@ -3,7 +3,7 @@ import { Ticket } from '@/modules/tickets/tickets.model';
import { Block, DataTable, Filters, Mapping, Pagination } from '@/utils/models';
import { Link } from '@/utils/models/link';
-export class TicketListBlock extends Block.Block {
+export class TicketListBlock extends Block.Block {
title?: string;
subtitle?: string;
table!: DataTable.DataTable;
@@ -23,3 +23,27 @@ export class TicketListBlock extends Block.Block {
detailsUrl!: string;
forms?: Link[];
}
+
+export class Meta {
+ __id!: string;
+ title!: string;
+ subtitle!: string;
+ table!: DataTable.DataTableMeta;
+ fieldMapping!: Mapping.MappingMeta;
+ // pagination!: string;
+ // filters!: string;
+ noResults!: {
+ __id: string;
+ title: string;
+ description: string;
+ };
+ labels!: {
+ __id: string;
+ today: string;
+ yesterday: string;
+ showMore: string;
+ clickToSelect: string;
+ };
+ detailsUrl!: string;
+ // forms!: string;
+}
diff --git a/packages/framework/src/utils/models/block.ts b/packages/framework/src/utils/models/block.ts
index 95a73141..426ea534 100644
--- a/packages/framework/src/utils/models/block.ts
+++ b/packages/framework/src/utils/models/block.ts
@@ -1,3 +1,4 @@
-export class Block {
+export class Block {
id!: string;
+ meta?: T;
}
diff --git a/packages/framework/src/utils/models/data-table.ts b/packages/framework/src/utils/models/data-table.ts
index edf05c72..24dc1e71 100644
--- a/packages/framework/src/utils/models/data-table.ts
+++ b/packages/framework/src/utils/models/data-table.ts
@@ -12,3 +12,17 @@ export class DataTableActions {
title!: string;
label?: string;
}
+
+export class DataTableMeta {
+ __id!: string;
+ columns!: {
+ __id: string;
+ id: string;
+ title: string;
+ }[];
+ actions?: {
+ __id: string;
+ title: string;
+ label: string;
+ };
+}
diff --git a/packages/framework/src/utils/models/mapping.ts b/packages/framework/src/utils/models/mapping.ts
index e7526310..5f19e90e 100644
--- a/packages/framework/src/utils/models/mapping.ts
+++ b/packages/framework/src/utils/models/mapping.ts
@@ -3,3 +3,14 @@ export type Mapping = {
[key: string]: string;
};
};
+
+export type MappingMeta = {
+ [key in keyof T]?: {
+ [key: string]: {
+ __id: string;
+ value: string;
+ };
+ } & {
+ __id: string;
+ };
+};
diff --git a/packages/integrations/contentful-cms/.gitignore b/packages/integrations/contentful-cms/.gitignore
new file mode 100644
index 00000000..dee1fd82
--- /dev/null
+++ b/packages/integrations/contentful-cms/.gitignore
@@ -0,0 +1,57 @@
+
+# compiled output
+/dist
+/node_modules
+/build
+/graphql.schema.json
+
+# Logs
+logs
+*.log
+npm-debug.log*
+pnpm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+lerna-debug.log*
+
+# OS
+.DS_Store
+
+# Tests
+/coverage
+/.nyc_output
+
+# IDEs and editors
+/.idea
+.project
+.classpath
+.c9/
+*.launch
+.settings/
+*.sublime-workspace
+
+# IDE - VSCode
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+
+# dotenv environment variable files
+.env
+.env.development.local
+.env.test.local
+.env.production.local
+
+# temp directory
+.temp
+.tmp
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Diagnostic reports (https://nodejs.org/api/report.html)
+report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
diff --git a/packages/integrations/contentful-cms/.prettierrc.mjs b/packages/integrations/contentful-cms/.prettierrc.mjs
new file mode 100644
index 00000000..4280c046
--- /dev/null
+++ b/packages/integrations/contentful-cms/.prettierrc.mjs
@@ -0,0 +1,11 @@
+import apiConfig from '@o2s/prettier-config/api.mjs';
+
+/**
+ * @see https://prettier.io/docs/en/configuration.html
+ * @type {import("prettier").Config}
+ */
+const config = {
+ ...apiConfig,
+};
+
+export default config;
diff --git a/packages/integrations/contentful-cms/CHANGELOG.md b/packages/integrations/contentful-cms/CHANGELOG.md
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/integrations/contentful-cms/codegen.ts b/packages/integrations/contentful-cms/codegen.ts
new file mode 100644
index 00000000..dc6894d3
--- /dev/null
+++ b/packages/integrations/contentful-cms/codegen.ts
@@ -0,0 +1,38 @@
+import { CodegenConfig } from '@graphql-codegen/cli';
+
+if (!process.env.CF_SPACE_ID || !process.env.CF_ENV || !process.env.CF_TOKEN) {
+ throw new Error('CF_SPACE_ID, CF_ENV, CF_TOKEN environment variables are not set');
+}
+
+const config: CodegenConfig = {
+ overwrite: true,
+ schema: `https://graphql.contentful.com/content/v1/spaces/${process.env.CF_SPACE_ID}/environments/${process.env.CF_ENV}?access_token=${process.env.CF_TOKEN}`,
+ documents: './src/**/*.graphql',
+ verbose: true,
+ generates: {
+ 'generated/contentful.ts': {
+ plugins: [
+ 'typescript',
+ 'typescript-resolvers',
+ 'typescript-operations',
+ 'typescript-graphql-request',
+ {
+ add: {
+ content: '/* eslint-disable */',
+ },
+ },
+ ],
+ config: {
+ skipTypename: true,
+ rawRequest: true,
+ maybeValue: 'T',
+ avoidOptionals: false,
+ },
+ },
+ './graphql.schema.json': {
+ plugins: ['introspection'],
+ },
+ },
+};
+
+export default config;
diff --git a/packages/integrations/contentful-cms/eslint.config.mjs b/packages/integrations/contentful-cms/eslint.config.mjs
new file mode 100644
index 00000000..93b00e9d
--- /dev/null
+++ b/packages/integrations/contentful-cms/eslint.config.mjs
@@ -0,0 +1,4 @@
+import { config } from '@o2s/eslint-config/api';
+
+/** @type {import("eslint").Linter.Config} */
+export default config;
diff --git a/packages/integrations/contentful-cms/generated/contentful.ts b/packages/integrations/contentful-cms/generated/contentful.ts
new file mode 100644
index 00000000..56a0a6d0
--- /dev/null
+++ b/packages/integrations/contentful-cms/generated/contentful.ts
@@ -0,0 +1,6566 @@
+/* eslint-disable */
+import { GraphQLResolveInfo, GraphQLScalarType, GraphQLScalarTypeConfig } from 'graphql';
+import { GraphQLError, print } from 'graphql';
+import { GraphQLClient, RequestOptions } from 'graphql-request';
+import gql from 'graphql-tag';
+
+export type Maybe = T;
+export type InputMaybe = T;
+export type Exact = { [K in keyof T]: T[K] };
+export type MakeOptional = Omit & { [SubKey in K]?: Maybe };
+export type MakeMaybe = Omit & { [SubKey in K]: Maybe };
+export type MakeEmpty = { [_ in K]?: never };
+export type Incremental = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never };
+export type Omit = Pick>;
+export type RequireFields = Omit & { [P in K]-?: NonNullable };
+type GraphQLClientRequestHeaders = RequestOptions['requestHeaders'];
+/** All built-in and custom scalars, mapped to their actual values */
+export type Scalars = {
+ ID: { input: string; output: string };
+ String: { input: string; output: string };
+ Boolean: { input: boolean; output: boolean };
+ Int: { input: number; output: number };
+ Float: { input: number; output: number };
+ DateTime: { input: any; output: any };
+ Dimension: { input: any; output: any };
+ HexColor: { input: any; output: any };
+ JSON: { input: any; output: any };
+ Quality: { input: any; output: any };
+};
+
+/** Represents a binary file in a space. An asset can be any file type. */
+export type Asset = {
+ contentType?: Maybe;
+ contentfulMetadata: ContentfulMetadata;
+ description?: Maybe;
+ fileName?: Maybe;
+ height?: Maybe;
+ linkedFrom?: Maybe;
+ size?: Maybe;
+ sys: Sys;
+ title?: Maybe;
+ url?: Maybe;
+ width?: Maybe;
+};
+
+/** Represents a binary file in a space. An asset can be any file type. */
+export type AssetContentTypeArgs = {
+ locale?: InputMaybe;
+};
+
+/** Represents a binary file in a space. An asset can be any file type. */
+export type AssetDescriptionArgs = {
+ locale?: InputMaybe;
+};
+
+/** Represents a binary file in a space. An asset can be any file type. */
+export type AssetFileNameArgs = {
+ locale?: InputMaybe;
+};
+
+/** Represents a binary file in a space. An asset can be any file type. */
+export type AssetHeightArgs = {
+ locale?: InputMaybe;
+};
+
+/** Represents a binary file in a space. An asset can be any file type. */
+export type AssetLinkedFromArgs = {
+ allowedLocales?: InputMaybe>>;
+};
+
+/** Represents a binary file in a space. An asset can be any file type. */
+export type AssetSizeArgs = {
+ locale?: InputMaybe;
+};
+
+/** Represents a binary file in a space. An asset can be any file type. */
+export type AssetTitleArgs = {
+ locale?: InputMaybe;
+};
+
+/** Represents a binary file in a space. An asset can be any file type. */
+export type AssetUrlArgs = {
+ locale?: InputMaybe;
+ transform?: InputMaybe;
+};
+
+/** Represents a binary file in a space. An asset can be any file type. */
+export type AssetWidthArgs = {
+ locale?: InputMaybe;
+};
+
+export type AssetCollection = {
+ items: Array>;
+ limit: Scalars['Int']['output'];
+ skip: Scalars['Int']['output'];
+ total: Scalars['Int']['output'];
+};
+
+export type AssetFilter = {
+ AND?: InputMaybe>>;
+ OR?: InputMaybe>>;
+ contentType?: InputMaybe;
+ contentType_contains?: InputMaybe;
+ contentType_exists?: InputMaybe;
+ contentType_in?: InputMaybe>>;
+ contentType_not?: InputMaybe;
+ contentType_not_contains?: InputMaybe;
+ contentType_not_in?: InputMaybe>>;
+ contentfulMetadata?: InputMaybe;
+ description?: InputMaybe;
+ description_contains?: InputMaybe;
+ description_exists?: InputMaybe;
+ description_in?: InputMaybe>>;
+ description_not?: InputMaybe;
+ description_not_contains?: InputMaybe;
+ description_not_in?: InputMaybe>>;
+ fileName?: InputMaybe;
+ fileName_contains?: InputMaybe;
+ fileName_exists?: InputMaybe;
+ fileName_in?: InputMaybe>>;
+ fileName_not?: InputMaybe;
+ fileName_not_contains?: InputMaybe;
+ fileName_not_in?: InputMaybe>>;
+ height?: InputMaybe;
+ height_exists?: InputMaybe;
+ height_gt?: InputMaybe;
+ height_gte?: InputMaybe;
+ height_in?: InputMaybe>>;
+ height_lt?: InputMaybe;
+ height_lte?: InputMaybe;
+ height_not?: InputMaybe;
+ height_not_in?: InputMaybe>>;
+ size?: InputMaybe;
+ size_exists?: InputMaybe;
+ size_gt?: InputMaybe;
+ size_gte?: InputMaybe;
+ size_in?: InputMaybe>>;
+ size_lt?: InputMaybe;
+ size_lte?: InputMaybe;
+ size_not?: InputMaybe;
+ size_not_in?: InputMaybe>>;
+ sys?: InputMaybe;
+ title?: InputMaybe;
+ title_contains?: InputMaybe;
+ title_exists?: InputMaybe;
+ title_in?: InputMaybe>>;
+ title_not?: InputMaybe;
+ title_not_contains?: InputMaybe;
+ title_not_in?: InputMaybe>>;
+ url?: InputMaybe;
+ url_contains?: InputMaybe;
+ url_exists?: InputMaybe;
+ url_in?: InputMaybe>>;
+ url_not?: InputMaybe;
+ url_not_contains?: InputMaybe;
+ url_not_in?: InputMaybe>>;
+ width?: InputMaybe;
+ width_exists?: InputMaybe;
+ width_gt?: InputMaybe;
+ width_gte?: InputMaybe;
+ width_in?: InputMaybe>>;
+ width_lt?: InputMaybe;
+ width_lte?: InputMaybe;
+ width_not?: InputMaybe;
+ width_not_in?: InputMaybe>>;
+};
+
+export type AssetLinkingCollections = {
+ entryCollection?: Maybe;
+};
+
+export type AssetLinkingCollectionsEntryCollectionArgs = {
+ limit?: InputMaybe;
+ locale?: InputMaybe;
+ preview?: InputMaybe;
+ skip?: InputMaybe;
+};
+
+export enum AssetOrder {
+ ContentTypeAsc = 'contentType_ASC',
+ ContentTypeDesc = 'contentType_DESC',
+ FileNameAsc = 'fileName_ASC',
+ FileNameDesc = 'fileName_DESC',
+ HeightAsc = 'height_ASC',
+ HeightDesc = 'height_DESC',
+ SizeAsc = 'size_ASC',
+ SizeDesc = 'size_DESC',
+ SysFirstPublishedAtAsc = 'sys_firstPublishedAt_ASC',
+ SysFirstPublishedAtDesc = 'sys_firstPublishedAt_DESC',
+ SysIdAsc = 'sys_id_ASC',
+ SysIdDesc = 'sys_id_DESC',
+ SysPublishedAtAsc = 'sys_publishedAt_ASC',
+ SysPublishedAtDesc = 'sys_publishedAt_DESC',
+ SysPublishedVersionAsc = 'sys_publishedVersion_ASC',
+ SysPublishedVersionDesc = 'sys_publishedVersion_DESC',
+ UrlAsc = 'url_ASC',
+ UrlDesc = 'url_DESC',
+ WidthAsc = 'width_ASC',
+ WidthDesc = 'width_DESC',
+}
+
+/** [See type definition](https://app.contentful.com/spaces/x7lexi1yira0/content_types/block) */
+export type Block = Entry &
+ _Node & {
+ _id: Scalars['ID']['output'];
+ content?: Maybe;
+ contentfulMetadata: ContentfulMetadata;
+ linkedFrom?: Maybe;
+ name?: Maybe;
+ spacing?: Maybe;
+ sys: Sys;
+ };
+
+/** [See type definition](https://app.contentful.com/spaces/x7lexi1yira0/content_types/block) */
+export type BlockContentArgs = {
+ locale?: InputMaybe;
+ preview?: InputMaybe;
+};
+
+/** [See type definition](https://app.contentful.com/spaces/x7lexi1yira0/content_types/block) */
+export type BlockLinkedFromArgs = {
+ allowedLocales?: InputMaybe>>;
+};
+
+/** [See type definition](https://app.contentful.com/spaces/x7lexi1yira0/content_types/block) */
+export type BlockNameArgs = {
+ locale?: InputMaybe;
+};
+
+/** [See type definition](https://app.contentful.com/spaces/x7lexi1yira0/content_types/block) */
+export type BlockSpacingArgs = {
+ locale?: InputMaybe;
+};
+
+export type BlockCollection = {
+ items: Array>;
+ limit: Scalars['Int']['output'];
+ skip: Scalars['Int']['output'];
+ total: Scalars['Int']['output'];
+};
+
+export type BlockContent = BlockFaq | BlockTicketList;
+
+/** [See type definition](https://app.contentful.com/spaces/x7lexi1yira0/content_types/blockFaq) */
+export type BlockFaq = Entry &
+ _Node & {
+ _id: Scalars['ID']['output'];
+ banner?: Maybe;
+ contentfulMetadata: ContentfulMetadata;
+ itemsCollection?: Maybe;
+ linkedFrom?: Maybe;
+ subtitle?: Maybe;
+ sys: Sys;
+ title?: Maybe;
+ };
+
+/** [See type definition](https://app.contentful.com/spaces/x7lexi1yira0/content_types/blockFaq) */
+export type BlockFaqBannerArgs = {
+ locale?: InputMaybe;
+ preview?: InputMaybe;
+ where?: InputMaybe;
+};
+
+/** [See type definition](https://app.contentful.com/spaces/x7lexi1yira0/content_types/blockFaq) */
+export type BlockFaqItemsCollectionArgs = {
+ limit?: InputMaybe;
+ locale?: InputMaybe;
+ order?: InputMaybe>>;
+ preview?: InputMaybe;
+ skip?: InputMaybe;
+ where?: InputMaybe;
+};
+
+/** [See type definition](https://app.contentful.com/spaces/x7lexi1yira0/content_types/blockFaq) */
+export type BlockFaqLinkedFromArgs = {
+ allowedLocales?: InputMaybe>>;
+};
+
+/** [See type definition](https://app.contentful.com/spaces/x7lexi1yira0/content_types/blockFaq) */
+export type BlockFaqSubtitleArgs = {
+ locale?: InputMaybe;
+};
+
+/** [See type definition](https://app.contentful.com/spaces/x7lexi1yira0/content_types/blockFaq) */
+export type BlockFaqTitleArgs = {
+ locale?: InputMaybe;
+};
+
+export type BlockFaqCollection = {
+ items: Array>;
+ limit: Scalars['Int']['output'];
+ skip: Scalars['Int']['output'];
+ total: Scalars['Int']['output'];
+};
+
+export type BlockFaqFilter = {
+ AND?: InputMaybe>>;
+ OR?: InputMaybe>>;
+ banner?: InputMaybe;
+ banner_exists?: InputMaybe;
+ contentfulMetadata?: InputMaybe;
+ items?: InputMaybe;
+ itemsCollection_exists?: InputMaybe;
+ subtitle?: InputMaybe;
+ subtitle_contains?: InputMaybe;
+ subtitle_exists?: InputMaybe;
+ subtitle_in?: InputMaybe>>;
+ subtitle_not?: InputMaybe;
+ subtitle_not_contains?: InputMaybe;
+ subtitle_not_in?: InputMaybe>>;
+ sys?: InputMaybe;
+ title?: InputMaybe;
+ title_contains?: InputMaybe;
+ title_exists?: InputMaybe;
+ title_in?: InputMaybe>>;
+ title_not?: InputMaybe;
+ title_not_contains?: InputMaybe;
+ title_not_in?: InputMaybe>>;
+};
+
+export type BlockFaqItemsCollection = {
+ items: Array>;
+ limit: Scalars['Int']['output'];
+ skip: Scalars['Int']['output'];
+ total: Scalars['Int']['output'];
+};
+
+export enum BlockFaqItemsCollectionOrder {
+ SysFirstPublishedAtAsc = 'sys_firstPublishedAt_ASC',
+ SysFirstPublishedAtDesc = 'sys_firstPublishedAt_DESC',
+ SysIdAsc = 'sys_id_ASC',
+ SysIdDesc = 'sys_id_DESC',
+ SysPublishedAtAsc = 'sys_publishedAt_ASC',
+ SysPublishedAtDesc = 'sys_publishedAt_DESC',
+ SysPublishedVersionAsc = 'sys_publishedVersion_ASC',
+ SysPublishedVersionDesc = 'sys_publishedVersion_DESC',
+ TitleAsc = 'title_ASC',
+ TitleDesc = 'title_DESC',
+}
+
+export type BlockFaqLinkingCollections = {
+ blockCollection?: Maybe;
+ entryCollection?: Maybe;
+};
+
+export type BlockFaqLinkingCollectionsBlockCollectionArgs = {
+ limit?: InputMaybe;
+ locale?: InputMaybe;
+ order?: InputMaybe>>;
+ preview?: InputMaybe;
+ skip?: InputMaybe;
+};
+
+export type BlockFaqLinkingCollectionsEntryCollectionArgs = {
+ limit?: InputMaybe;
+ locale?: InputMaybe;
+ preview?: InputMaybe;
+ skip?: InputMaybe;
+};
+
+export enum BlockFaqLinkingCollectionsBlockCollectionOrder {
+ NameAsc = 'name_ASC',
+ NameDesc = 'name_DESC',
+ SpacingAsc = 'spacing_ASC',
+ SpacingDesc = 'spacing_DESC',
+ SysFirstPublishedAtAsc = 'sys_firstPublishedAt_ASC',
+ SysFirstPublishedAtDesc = 'sys_firstPublishedAt_DESC',
+ SysIdAsc = 'sys_id_ASC',
+ SysIdDesc = 'sys_id_DESC',
+ SysPublishedAtAsc = 'sys_publishedAt_ASC',
+ SysPublishedAtDesc = 'sys_publishedAt_DESC',
+ SysPublishedVersionAsc = 'sys_publishedVersion_ASC',
+ SysPublishedVersionDesc = 'sys_publishedVersion_DESC',
+}
+
+export enum BlockFaqOrder {
+ SubtitleAsc = 'subtitle_ASC',
+ SubtitleDesc = 'subtitle_DESC',
+ SysFirstPublishedAtAsc = 'sys_firstPublishedAt_ASC',
+ SysFirstPublishedAtDesc = 'sys_firstPublishedAt_DESC',
+ SysIdAsc = 'sys_id_ASC',
+ SysIdDesc = 'sys_id_DESC',
+ SysPublishedAtAsc = 'sys_publishedAt_ASC',
+ SysPublishedAtDesc = 'sys_publishedAt_DESC',
+ SysPublishedVersionAsc = 'sys_publishedVersion_ASC',
+ SysPublishedVersionDesc = 'sys_publishedVersion_DESC',
+ TitleAsc = 'title_ASC',
+ TitleDesc = 'title_DESC',
+}
+
+export type BlockFilter = {
+ AND?: InputMaybe>>;
+ OR?: InputMaybe>>;
+ content_exists?: InputMaybe;
+ contentfulMetadata?: InputMaybe;
+ name?: InputMaybe;
+ name_contains?: InputMaybe;
+ name_exists?: InputMaybe;
+ name_in?: InputMaybe>>;
+ name_not?: InputMaybe;
+ name_not_contains?: InputMaybe;
+ name_not_in?: InputMaybe>>;
+ spacing?: InputMaybe;
+ spacing_contains?: InputMaybe;
+ spacing_exists?: InputMaybe;
+ spacing_in?: InputMaybe>>;
+ spacing_not?: InputMaybe;
+ spacing_not_contains?: InputMaybe;
+ spacing_not_in?: InputMaybe>>;
+ sys?: InputMaybe;
+};
+
+export type BlockLinkingCollections = {
+ entryCollection?: Maybe;
+ pageOneColumnTemplateCollection?: Maybe;
+};
+
+export type BlockLinkingCollectionsEntryCollectionArgs = {
+ limit?: InputMaybe;
+ locale?: InputMaybe;
+ preview?: InputMaybe;
+ skip?: InputMaybe;
+};
+
+export type BlockLinkingCollectionsPageOneColumnTemplateCollectionArgs = {
+ limit?: InputMaybe;
+ locale?: InputMaybe;
+ order?: InputMaybe>>;
+ preview?: InputMaybe;
+ skip?: InputMaybe;
+};
+
+export enum BlockLinkingCollectionsPageOneColumnTemplateCollectionOrder {
+ SysFirstPublishedAtAsc = 'sys_firstPublishedAt_ASC',
+ SysFirstPublishedAtDesc = 'sys_firstPublishedAt_DESC',
+ SysIdAsc = 'sys_id_ASC',
+ SysIdDesc = 'sys_id_DESC',
+ SysPublishedAtAsc = 'sys_publishedAt_ASC',
+ SysPublishedAtDesc = 'sys_publishedAt_DESC',
+ SysPublishedVersionAsc = 'sys_publishedVersion_ASC',
+ SysPublishedVersionDesc = 'sys_publishedVersion_DESC',
+ TitleAsc = 'title_ASC',
+ TitleDesc = 'title_DESC',
+}
+
+export enum BlockOrder {
+ NameAsc = 'name_ASC',
+ NameDesc = 'name_DESC',
+ SpacingAsc = 'spacing_ASC',
+ SpacingDesc = 'spacing_DESC',
+ SysFirstPublishedAtAsc = 'sys_firstPublishedAt_ASC',
+ SysFirstPublishedAtDesc = 'sys_firstPublishedAt_DESC',
+ SysIdAsc = 'sys_id_ASC',
+ SysIdDesc = 'sys_id_DESC',
+ SysPublishedAtAsc = 'sys_publishedAt_ASC',
+ SysPublishedAtDesc = 'sys_publishedAt_DESC',
+ SysPublishedVersionAsc = 'sys_publishedVersion_ASC',
+ SysPublishedVersionDesc = 'sys_publishedVersion_DESC',
+}
+
+/** [See type definition](https://app.contentful.com/spaces/x7lexi1yira0/content_types/blockTicketList) */
+export type BlockTicketList = Entry &
+ _Node & {
+ _id: Scalars['ID']['output'];
+ contentfulMetadata: ContentfulMetadata;
+ detailsUrl?: Maybe;
+ fieldsCollection?: Maybe;
+ labels?: Maybe;
+ linkedFrom?: Maybe;
+ noResults?: Maybe;
+ pagination?: Maybe;
+ subTitle?: Maybe;
+ sys: Sys;
+ table?: Maybe;
+ title?: Maybe;
+ };
+
+/** [See type definition](https://app.contentful.com/spaces/x7lexi1yira0/content_types/blockTicketList) */
+export type BlockTicketListDetailsUrlArgs = {
+ locale?: InputMaybe;
+};
+
+/** [See type definition](https://app.contentful.com/spaces/x7lexi1yira0/content_types/blockTicketList) */
+export type BlockTicketListFieldsCollectionArgs = {
+ limit?: InputMaybe;
+ locale?: InputMaybe;
+ order?: InputMaybe>>;
+ preview?: InputMaybe;
+ skip?: InputMaybe;
+ where?: InputMaybe;
+};
+
+/** [See type definition](https://app.contentful.com/spaces/x7lexi1yira0/content_types/blockTicketList) */
+export type BlockTicketListLabelsArgs = {
+ locale?: InputMaybe;
+ preview?: InputMaybe;
+ where?: InputMaybe;
+};
+
+/** [See type definition](https://app.contentful.com/spaces/x7lexi1yira0/content_types/blockTicketList) */
+export type BlockTicketListLinkedFromArgs = {
+ allowedLocales?: InputMaybe>>;
+};
+
+/** [See type definition](https://app.contentful.com/spaces/x7lexi1yira0/content_types/blockTicketList) */
+export type BlockTicketListNoResultsArgs = {
+ locale?: InputMaybe;
+ preview?: InputMaybe;
+ where?: InputMaybe;
+};
+
+/** [See type definition](https://app.contentful.com/spaces/x7lexi1yira0/content_types/blockTicketList) */
+export type BlockTicketListPaginationArgs = {
+ locale?: InputMaybe;
+ preview?: InputMaybe