diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000000..88d117a1817 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,414 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with +code in this repository. + +## Repository Overview + +GraphCommerce is a React/Next.js framework for building headless ecommerce +storefronts, backed by Magento 2 and Hygraph. It's a **Yarn 4 workspaces +monorepo** with ~68 packages. + +### graphcommerce vs graphcommerce-private + +This repo (`graphcommerce/`) is the **open-source core framework**. It is a +submodule inside the **`graphcommerce-private`** parent repo +(`../graphcommerce-private/`), which adds proprietary packages in +`packagesPrivate/` (Adobe Commerce features, B2B, gift cards, store credit, +returns, cache-notify, private pricing, etc.). + +**Where to put new code:** + +- **This repo (`graphcommerce/`)** — Generic, open-source framework features + that benefit all users. Core Magento integrations, UI components, build + tooling. +- **Parent repo (`graphcommerce-private/packagesPrivate/`)** — Specialized, + proprietary features: B2B (company accounts, purchase orders, requisition + lists, negotiable quotes), Adobe Commerce-specific features (gift cards, store + credit, returns, reward points), private pricing, cache invalidation, etc. + +When building a new feature, ask: "Is this generic enough for the open-source +framework, or is it specific to Adobe Commerce / B2B / a paid add-on?" If the +latter, it belongs in `graphcommerce-private/packagesPrivate/`. Private packages +are activated via `PRIVATE_ADDITIONAL_DEPENDENCIES` in `.env`. + +## Common Commands + +### Development + +```bash +# Start the main example storefront (runs codegen watcher + Next.js dev with Turbopack) +yarn workspace @graphcommerce/magento-graphcms dev + +# Build dev tooling packages (run in parallel, needed when modifying packagesDev/*) +yarn packages + +# Full production build of example +yarn workspace @graphcommerce/magento-graphcms build +``` + +### Testing + +```bash +yarn test # Run all tests (vitest) +yarn test:watch # Watch mode +yarn test packages/foo # Run tests matching a path +``` + +Tests use Vitest with +`include: ['**/__tests__/**/*.ts', '**/*.test.ts', '**/*.test.tsx']`. E2E tests +use Playwright: `yarn playwright`. + +### Linting & Type Checking + +**Important:** For type checking, use `tsgo` (the native TypeScript compiler) +and run it from the **example directory** (not the repo root): + +```bash +# Type check (preferred — fast native TypeScript compiler) +cd examples/magento-graphcms +npx --package=@typescript/native-preview tsgo --noEmit -p . +``` + +Type checking must be run from an example directory because codegen only +generates types for the specific project (`.mesh/`, `.gql.ts` files). Running +from the repo root will fail with missing type errors. + +```bash +yarn eslint:lint # ESLint across all TS/TSX +yarn eslint:fix # ESLint with auto-fix +yarn prettier:fix # Prettier formatting +``` + +### Code Generation + +```bash +# In an example directory — regenerate GraphQL Mesh + codegen types +yarn workspace @graphcommerce/magento-graphcms codegen + +# Individual steps: +graphcommerce codegen # Generate config types +gc-mesh build # Build GraphQL Mesh (merges Magento + Hygraph schemas) +gc-gql-codegen # Generate TypeScript from .graphql files → .gql.ts +``` + +### i18n + +```bash +yarn workspace @graphcommerce/magento-graphcms lingui # Extract translation strings +``` + +## Architecture + +### Directory Layout + +- **`packages/`** — Core feature packages (`@graphcommerce/*`): UI components, + Magento integrations (cart, checkout, product, search, payment), Hygraph/CMS, + analytics, Algolia search +- **`packagesDev/`** — Build tooling: `next-config` (the framework's core build + system), codegen plugins, ESLint/Prettier/TypeScript configs, CLI +- **`examples/`** — Full storefronts: `magento-graphcms` (primary), + `magento-open-source` +- **`docs/`** — Documentation site + +### GraphQL Mesh (Schema Federation) + +Multiple GraphQL/REST sources are combined into a single schema via GraphQL +Mesh. The merged schema is generated into `examples/*/.mesh/index.ts`. Sources +include Magento GraphQL and Hygraph, with transforms for field renaming, +filtering, and type merging. + +### GraphQL Codegen + +`.graphql` files throughout packages generate co-located `.gql.ts` files +containing TypeScript types and Apollo Client hooks. The **fragment injection +system** uses an `@inject` directive to extend existing queries: + +```graphql +fragment MyCustomData on ProductInterface @inject(into: ["ProductListItem"]) { + my_custom_attribute +} +``` + +### Plugin System (Zero-Runtime Interception) + +Plugins live in `plugins/` directories and are auto-discovered at build time. +They work via webpack/Turbopack interceptors — no runtime cost. Three types: + +- **`component`** — Wraps a React component. Receives `Prev` as a prop to render + the original. +- **`function`** — Intercepts a function call. Receives `prev` to call the + original. +- **`replace`** — Completely replaces an export. + +Each plugin exports a `config: PluginConfig` with `type` and `module` (the +`@graphcommerce/*` package to intercept). Conditional plugins use `ifConfig`. +Restart dev server after adding the first plugin; hot-reload works after that. + +### Configuration + +`graphcommerce.config.ts` in each example defines storefront config (Magento +endpoint, Hygraph endpoint, locales, feature flags). Required fields: +`canonicalBaseUrl`, `magentoEndpoint`, `magentoVersion` (245/246/247), +`hygraphEndpoint`, `storefront[]` (locale + magentoStoreCode). + +Access config values in code: + +```tsx +import { cartDisplayPricesInclTax } from '@graphcommerce/next-config/config' +import { useStorefrontConfig } from '@graphcommerce/next-ui' + +// Global value +const global = cartDisplayPricesInclTax + +// Per-storefront with fallback +const scoped = + useStorefrontConfig().cartDisplayPricesInclTax ?? cartDisplayPricesInclTax +``` + +Extend the config schema by creating a `graphql/Config.graphqls` file: + +```graphql +extend input GraphCommerceConfig { + myConfig: String +} +extend input GraphCommerceStorefrontConfig { + myField: Boolean +} +``` + +You can also extend existing enums from other packages: + +```graphql +extend enum WebsitePermissions { + CUSTOMER_ONLY +} +``` + +### Environment Variables (.env) + +Each example directory has a `.env` file. Two types of env vars are used: + +**`GC_*` — GraphCommerce config overrides.** Any config value can be overridden: + +- Convert camelCase to SCREAMING*SNAKE_CASE, prefix with `GC*` +- Arrays indexed with `_0`, `_1`: `GC_STOREFRONT_0_LOCALE="en"` +- Nested objects with `_`: `GC_DEBUG_PLUGIN_STATUS="1"` +- Booleans: `"1"` / `"true"` / `"0"` / `"false"` +- Objects as JSON: `GC_PERMISSIONS='{"cart":"CUSTOMER_ONLY"}'` + +Examples: + +```bash +GC_MAGENTO_ENDPOINT="https://magento.example.com/graphql" +GC_MAGENTO_VERSION="247" +GC_LIMIT_SSG="1" +GC_PREVIEW_SECRET="mySecret" +GC_GOOGLE_RECAPTCHA_KEY="6Ld..." +GC_GRAPHQL_MESH_EDIT_MODE="1" +``` + +Export current config to env vars: `yarn graphcommerce export-config` + +**`PRIVATE_ADDITIONAL_DEPENDENCIES` — Activate optional packages.** +Comma-separated list of `@graphcommerce/*` packages to include in dependency +resolution without adding them to `package.json`. This enables their plugins, +GraphQL fragments, and mesh config extensions: + +```bash +PRIVATE_ADDITIONAL_DEPENDENCIES="@graphcommerce/magento-search-overlay,@graphcommerce/b2b-permissions" +``` + +This is also used in the root `package.json` test scripts to include optional +packages during testing. The resolution system only picks up packages with +`graphcommerce` in the name (configurable via `PRIVATE_PACKAGE_NAMESPACES`). + +## Plugin System (Development Guide) + +**When building new features, prefer plugins over direct code modifications.** +Plugins keep functionality modular and independent from the core codebase. + +### Creating a Plugin + +Place files in `plugins/` directory (in your example project or in a package). +Each plugin file exports a `config` object and the named export to intercept. + +**Component plugin** — wrap a React component: + +```tsx +import type { ProductListItemProps } from '@graphcommerce/magento-product' +import type { PluginConfig, PluginProps } from '@graphcommerce/next-config' + +export const config: PluginConfig = { + type: 'component', + module: '@graphcommerce/magento-product', +} + +export function ProductListItem(props: PluginProps) { + const { Prev, ...rest } = props + return +} +``` + +**Function plugin** — intercept a function: + +```tsx +import type { graphqlConfig as graphqlConfigType } from '@graphcommerce/graphql' +import type { FunctionPlugin, PluginConfig } from '@graphcommerce/next-config' + +export const config: PluginConfig = { + type: 'function', + module: '@graphcommerce/graphql', +} + +export const graphqlConfig: FunctionPlugin = ( + prev, + conf, +) => { + const results = prev(conf) + return { ...results, links: [...results.links, myCustomLink] } +} +``` + +**Replacement plugin** — completely replace an export (no access to original): + +```tsx +export const config: PluginConfig = { + type: 'replace', + module: '@graphcommerce/magento-product', +} + +export function ProductListCount(props: ProductCountProps) { + return
{props.total_count}
+} +``` + +### Plugin Rules + +- The exported function/component name must match the target export exactly +- Restart dev server after creating the first plugin; hot-reload works after + that +- Plugin loading order follows `package.json` dependency order; local plugins + wrap last (closest to the original) +- Auto-discovered via glob: `${packageLocation}/plugins/**/*.{ts,tsx}` +- Only packages with `graphcommerce` in the name are scanned + +### Conditional Plugins + +Load a plugin only when a config value is truthy or matches a specific value: + +```tsx +export const config: PluginConfig = { + type: 'component', + module: '@graphcommerce/magento-product', + ifConfig: 'demoMode', // loads when demoMode is truthy +} + +// Or match a specific value: +export const config: PluginConfig<'compareVariant'> = { + type: 'component', + module: '@graphcommerce/magento-product', + ifConfig: ['compareVariant', 'CHECKBOX'], +} +``` + +### Extending GraphQL Queries via Fragment Injection + +Instead of modifying queries directly, inject fields into existing fragments: + +```graphql +fragment MyCustomFragment on ProductInterface +@inject(into: ["ProductListItem"]) { + my_custom_attribute +} +``` + +After running `yarn codegen`, `my_custom_attribute` will be available in +`ProductListItem.gql.ts` and all queries that use that fragment. + +### Debugging Plugins + +Enable with `debug.pluginStatus: true` in config or `GC_DEBUG_PLUGIN_STATUS=1` +in env. This logs which plugins are enabled/disabled during build. + +## Authentication & Cookies + +Customer auth tokens are stored in Apollo Client cache. Auth state is tracked +via the CSS flags system: the `private-query` flag in the `gc-flags` cookie +indicates a logged-in user. This is set automatically by `setCssFlag` on sign-in +and cleared by `removeCssFlag` on sign-out. The cookie is readable both +client-side and server-side (in Next.js proxy). + +**Cookie utility** (`@graphcommerce/next-ui`): + +```tsx +import { cookie } from '@graphcommerce/next-ui' +cookie('name', 'value') // set +cookie('name') // read +cookie('name', null) // delete +``` + +### CSS Flags + +CSS flags set `data-*` attributes on `` for instant visual toggling before +JS hydrates. Stored in a `gc-flags` cookie (JSON), restored via a blocking +script in `_document.tsx` (`getCssFlagsInitScript()`) that reads +`document.cookie`. The cookie is also readable server-side in Next.js proxy. + +```tsx +import { + setCssFlag, + removeCssFlag, + cssFlag, + cssNotFlag, +} from '@graphcommerce/next-ui' + +setCssFlag('private-query', true) +// In MUI sx: { [cssFlag('private-query')]: { display: 'none' } } +// In MUI sx: { [cssNotFlag('private-query')]: { display: 'none' } } +``` + +The `private-query` flag is set on sign-in, cleared on sign-out. Used by +`GuestOrCustomerMask` and `PrivateQueryMask` to show/hide customer-specific +content without waiting for React hydration. + +### Permissions System + +Permissions are configured via `GraphCommercePermissions` input type in +`Config.graphqls`. Set globally and overridable per storefront: + +```tsx +import { permissions } from '@graphcommerce/next-config/config' +import { useStorefrontConfig } from '@graphcommerce/next-ui' +const perm = + useStorefrontConfig().permissions?.website ?? + permissions?.website ?? + 'ENABLED' +``` + +Existing enums: `WebsitePermissions`, `CustomerAccountPermissions`, +`CartPermissions`, `BillingAddressPermissions`. Extendable via `extend enum` in +package `Config.graphqls` files. + +### GuestOrCustomerMask + +Component for showing different content based on auth state, with CSS-flag-based +masking to avoid flash of wrong content: + +```tsx +} + skeleton={} + loggedIn={} +/> +``` + +## Tech Stack + +- Next.js with Turbopack, React 19, TypeScript 5.9 +- Apollo Client 4 for GraphQL +- MUI (Material-UI) + Emotion for styling +- Lingui for i18n +- Framer Motion for animations +- React Hook Form for forms +- Changesets for versioning/releases diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 3759b5ef1e7..3799f9f0d6a 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,5 +1,27 @@ # Change Log +## 10.1.0 + +## 10.1.0-canary.9 + +## 10.1.0-canary.8 + +## 10.1.0-canary.7 + +## 10.1.0-canary.6 + +## 10.1.0-canary.5 + +## 10.1.0-canary.4 + +## 10.1.0-canary.3 + +## 10.0.4-canary.2 + +## 10.0.4-canary.1 + +## 10.0.4-canary.0 + ## 10.0.3 ## 10.0.3-canary.0 diff --git a/docs/package.json b/docs/package.json index 2ab2fe86e60..e755f93d542 100644 --- a/docs/package.json +++ b/docs/package.json @@ -2,10 +2,10 @@ "name": "@graphcommerce/docs", "homepage": "https://www.graphcommerce.org/docs", "repository": "github:graphcommerce-org/graphcommerce/docs", - "version": "10.0.3", + "version": "10.1.0", "sideEffects": true, "peerDependencies": { - "@graphcommerce/prettier-config-pwa": "^10.0.3" + "@graphcommerce/prettier-config-pwa": "^10.1.0" }, "prettier": "@graphcommerce/prettier-config-pwa" } diff --git a/examples/magento-graphcms/.gitignore b/examples/magento-graphcms/.gitignore index 7ff2e15df4d..5ed613d72b1 100644 --- a/examples/magento-graphcms/.gitignore +++ b/examples/magento-graphcms/.gitignore @@ -38,6 +38,7 @@ pages/account/payment-tokens.tsx pages/downloadable/download/link/id/\[id\].tsx pages/downloadable/download/linkSample/link_id/\[id\].tsx pages/downloadable/download/sample/sample_id/\[id\].tsx +pages/private.tsx pages/test/\[\[...url\]\].tsx pages/test/buttons.tsx pages/test/form-elements.tsx @@ -48,4 +49,5 @@ pages/test/sheet.tsx pages/test/slider.tsx pages/test/typography.tsx pages/test/usebacklink/\[\[...url\]\].tsx +proxy.ts # end managed by: graphcommerce diff --git a/examples/magento-graphcms/CHANGELOG.md b/examples/magento-graphcms/CHANGELOG.md index f0b4f49677e..c67131584e3 100644 --- a/examples/magento-graphcms/CHANGELOG.md +++ b/examples/magento-graphcms/CHANGELOG.md @@ -1,5 +1,27 @@ # Change Log +## 10.1.0 + +## 10.1.0-canary.9 + +## 10.1.0-canary.8 + +## 10.1.0-canary.7 + +## 10.1.0-canary.6 + +## 10.1.0-canary.5 + +## 10.1.0-canary.4 + +## 10.1.0-canary.3 + +## 10.0.4-canary.2 + +## 10.0.4-canary.1 + +## 10.0.4-canary.0 + ## 10.0.3 ## 10.0.3-canary.0 diff --git a/examples/magento-graphcms/lib/graphql/graphqlSsrClient.ts b/examples/magento-graphcms/lib/graphql/graphqlSsrClient.ts index d1d6549a439..38a52d8fa7b 100644 --- a/examples/magento-graphcms/lib/graphql/graphqlSsrClient.ts +++ b/examples/magento-graphcms/lib/graphql/graphqlSsrClient.ts @@ -12,6 +12,7 @@ import { import { MeshApolloLink, getBuiltMesh } from '@graphcommerce/graphql-mesh' import { storefrontConfig, storefrontConfigDefault } from '@graphcommerce/next-ui' import type { GetStaticPropsContext } from 'next' +import fs from 'fs' import { i18nSsrLoader } from '../i18n/I18nProvider' function client(context: GetStaticPropsContext, fetchPolicy: FetchPolicy = 'no-cache') { @@ -53,7 +54,7 @@ export function graphqlSharedClient(context: GetStaticPropsContext) { } const ssrClient: { - [locale: string]: ApolloClient + [locale: string]: { instancedAt: number; client: ApolloClient } } = {} export function graphqlSsrClient(context: GetStaticPropsContext) { @@ -62,8 +63,24 @@ export function graphqlSsrClient(context: GetStaticPropsContext) { if (context.preview || context.draftMode) return client(context, 'no-cache') + const dir = './tmp' + + const shouldCheckCache = fs.existsSync(`${dir}/renew-all-pages-query.txt`) + + if (shouldCheckCache) { + const instancedAt = Number(fs.readFileSync(`${dir}/renew-all-pages-query.txt`, 'utf8')) + + if (ssrClient[locale]?.instancedAt < instancedAt) { + delete ssrClient[locale] + } + } + // Create a client if it doesn't exist for the locale. - if (!ssrClient[locale]) ssrClient[locale] = client(context, 'no-cache') + if (!ssrClient[locale]) + ssrClient[locale] = { + instancedAt: new Date().getTime(), + client: client(context, 'no-cache'), + } - return ssrClient[locale] + return ssrClient[locale].client } diff --git a/examples/magento-graphcms/locales/de.po b/examples/magento-graphcms/locales/de.po index 1b97228858a..a24318dbdfc 100644 --- a/examples/magento-graphcms/locales/de.po +++ b/examples/magento-graphcms/locales/de.po @@ -485,8 +485,8 @@ msgstr "Sendung nicht gefunden" msgid "Be the first to write a review!" msgstr "Schreiben Sie die erste Bewertung!" -msgid "Create a password and tell us your name" -msgstr "Erstellen Sie ein Passwort und teilen Sie uns Ihren Namen mit" +msgid "Enter your details to create your account" +msgstr "Geben Sie Ihre Daten ein, um Ihr Konto zu erstellen" #. placeholder {0}: product?.name msgid "You are reviewing {0}" diff --git a/examples/magento-graphcms/locales/en.po b/examples/magento-graphcms/locales/en.po index e2252e83ef7..8e98de7426d 100644 --- a/examples/magento-graphcms/locales/en.po +++ b/examples/magento-graphcms/locales/en.po @@ -485,8 +485,8 @@ msgstr "Shipment not found" msgid "Be the first to write a review!" msgstr "Be the first to write a review!" -msgid "Create a password and tell us your name" -msgstr "Create a password and tell us your name" +msgid "Enter your details to create your account" +msgstr "Enter your details to create your account" #. placeholder {0}: product?.name msgid "You are reviewing {0}" diff --git a/examples/magento-graphcms/locales/es.po b/examples/magento-graphcms/locales/es.po index a0d9868deea..0746bfa03e4 100644 --- a/examples/magento-graphcms/locales/es.po +++ b/examples/magento-graphcms/locales/es.po @@ -485,8 +485,8 @@ msgstr "Envío no encontrado" msgid "Be the first to write a review!" msgstr "Sé el primero en escribir una reseña!" -msgid "Create a password and tell us your name" -msgstr "Crea una contraseña y nos cuentas tu nombre" +msgid "Enter your details to create your account" +msgstr "Introduce tus datos para crear tu cuenta" #. placeholder {0}: product?.name msgid "You are reviewing {0}" diff --git a/examples/magento-graphcms/locales/fr.po b/examples/magento-graphcms/locales/fr.po index 624326081ae..6dd49aee3c7 100644 --- a/examples/magento-graphcms/locales/fr.po +++ b/examples/magento-graphcms/locales/fr.po @@ -485,8 +485,8 @@ msgstr "Expédition non trouvée" msgid "Be the first to write a review!" msgstr "Soyez le premier à écrire une évaluation!" -msgid "Create a password and tell us your name" -msgstr "Créer un mot de passe et nous indiquer votre nom" +msgid "Enter your details to create your account" +msgstr "Entrez vos informations pour créer votre compte" #. placeholder {0}: product?.name msgid "You are reviewing {0}" diff --git a/examples/magento-graphcms/locales/it.po b/examples/magento-graphcms/locales/it.po index fc17b17d0c8..5cba15d62f4 100644 --- a/examples/magento-graphcms/locales/it.po +++ b/examples/magento-graphcms/locales/it.po @@ -485,8 +485,8 @@ msgstr "Spedizione non trovata" msgid "Be the first to write a review!" msgstr "Sii il primo a scrivere una recensione!" -msgid "Create a password and tell us your name" -msgstr "Crea una password e ti diciamo il tuo nome" +msgid "Enter your details to create your account" +msgstr "Inserisci i tuoi dati per creare il tuo account" #. placeholder {0}: product?.name msgid "You are reviewing {0}" diff --git a/examples/magento-graphcms/locales/nl.po b/examples/magento-graphcms/locales/nl.po index 6bada62e0e0..c42df78d63a 100644 --- a/examples/magento-graphcms/locales/nl.po +++ b/examples/magento-graphcms/locales/nl.po @@ -485,8 +485,8 @@ msgstr "Zending niet gevonden" msgid "Be the first to write a review!" msgstr "Wees de eerste die een review schrijft!" -msgid "Create a password and tell us your name" -msgstr "Maak een wachtwoord en vertel ons uw naam" +msgid "Enter your details to create your account" +msgstr "Vul je gegevens in om een account aan te maken" #. placeholder {0}: product?.name msgid "You are reviewing {0}" diff --git a/examples/magento-graphcms/package.json b/examples/magento-graphcms/package.json index 3308ebace28..c9634a9c213 100644 --- a/examples/magento-graphcms/package.json +++ b/examples/magento-graphcms/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-graphcms", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.3", + "version": "10.1.0", "private": true, "sideEffects": false, "packageManager": "yarn@4.5.3", @@ -27,59 +27,59 @@ "@emotion/react": "^11.14.0", "@emotion/server": "^11.11.0", "@emotion/styled": "^11.14.1", - "@graphcommerce/cli": "10.0.3", - "@graphcommerce/demo-magento-graphcommerce": "10.0.3", - "@graphcommerce/ecommerce-ui": "10.0.3", - "@graphcommerce/framer-next-pages": "10.0.3", - "@graphcommerce/framer-scroller": "10.0.3", - "@graphcommerce/framer-utils": "10.0.3", - "@graphcommerce/google-datalayer": "10.0.3", - "@graphcommerce/google-playstore": "10.0.3", - "@graphcommerce/googleanalytics": "10.0.3", - "@graphcommerce/googlerecaptcha": "10.0.3", - "@graphcommerce/googletagmanager": "10.0.3", - "@graphcommerce/graphql": "10.0.3", - "@graphcommerce/graphql-codegen-near-operation-file": "10.0.3", - "@graphcommerce/graphql-codegen-relay-optimizer-plugin": "10.0.3", - "@graphcommerce/graphql-mesh": "10.0.3", - "@graphcommerce/hygraph-cli": "10.0.3", - "@graphcommerce/hygraph-dynamic-rows": "10.0.3", - "@graphcommerce/hygraph-ui": "10.0.3", - "@graphcommerce/image": "10.0.3", - "@graphcommerce/lingui-next": "10.0.3", - "@graphcommerce/magento-cart": "10.0.3", - "@graphcommerce/magento-cart-checkout": "10.0.3", - "@graphcommerce/magento-cart-coupon": "10.0.3", - "@graphcommerce/magento-cart-email": "10.0.3", - "@graphcommerce/magento-cart-items": "10.0.3", - "@graphcommerce/magento-cart-payment-method": "10.0.3", - "@graphcommerce/magento-cart-shipping-address": "10.0.3", - "@graphcommerce/magento-cart-shipping-method": "10.0.3", - "@graphcommerce/magento-category": "10.0.3", - "@graphcommerce/magento-cms": "10.0.3", - "@graphcommerce/magento-compare": "10.0.3", - "@graphcommerce/magento-customer": "10.0.3", - "@graphcommerce/magento-graphql": "10.0.3", - "@graphcommerce/magento-graphql-rest": "10.0.3", - "@graphcommerce/magento-newsletter": "10.0.3", - "@graphcommerce/magento-payment-included": "10.0.3", - "@graphcommerce/magento-payment-tokens": "10.0.3", - "@graphcommerce/magento-product": "10.0.3", - "@graphcommerce/magento-product-bundle": "10.0.3", - "@graphcommerce/magento-product-configurable": "10.0.3", - "@graphcommerce/magento-product-downloadable": "10.0.3", - "@graphcommerce/magento-product-grouped": "10.0.3", - "@graphcommerce/magento-product-simple": "10.0.3", - "@graphcommerce/magento-product-virtual": "10.0.3", - "@graphcommerce/magento-recently-viewed-products": "10.0.3", - "@graphcommerce/magento-review": "10.0.3", - "@graphcommerce/magento-search": "10.0.3", - "@graphcommerce/magento-store": "10.0.3", - "@graphcommerce/magento-wishlist": "10.0.3", - "@graphcommerce/next-config": "10.0.3", - "@graphcommerce/next-ui": "10.0.3", - "@graphcommerce/react-hook-form": "10.0.3", - "@graphcommerce/service-worker": "10.0.3", + "@graphcommerce/cli": "10.1.0", + "@graphcommerce/demo-magento-graphcommerce": "10.1.0", + "@graphcommerce/ecommerce-ui": "10.1.0", + "@graphcommerce/framer-next-pages": "10.1.0", + "@graphcommerce/framer-scroller": "10.1.0", + "@graphcommerce/framer-utils": "10.1.0", + "@graphcommerce/google-datalayer": "10.1.0", + "@graphcommerce/google-playstore": "10.1.0", + "@graphcommerce/googleanalytics": "10.1.0", + "@graphcommerce/googlerecaptcha": "10.1.0", + "@graphcommerce/googletagmanager": "10.1.0", + "@graphcommerce/graphql": "10.1.0", + "@graphcommerce/graphql-codegen-near-operation-file": "10.1.0", + "@graphcommerce/graphql-codegen-relay-optimizer-plugin": "10.1.0", + "@graphcommerce/graphql-mesh": "10.1.0", + "@graphcommerce/hygraph-cli": "10.1.0", + "@graphcommerce/hygraph-dynamic-rows": "10.1.0", + "@graphcommerce/hygraph-ui": "10.1.0", + "@graphcommerce/image": "10.1.0", + "@graphcommerce/lingui-next": "10.1.0", + "@graphcommerce/magento-cart": "10.1.0", + "@graphcommerce/magento-cart-checkout": "10.1.0", + "@graphcommerce/magento-cart-coupon": "10.1.0", + "@graphcommerce/magento-cart-email": "10.1.0", + "@graphcommerce/magento-cart-items": "10.1.0", + "@graphcommerce/magento-cart-payment-method": "10.1.0", + "@graphcommerce/magento-cart-shipping-address": "10.1.0", + "@graphcommerce/magento-cart-shipping-method": "10.1.0", + "@graphcommerce/magento-category": "10.1.0", + "@graphcommerce/magento-cms": "10.1.0", + "@graphcommerce/magento-compare": "10.1.0", + "@graphcommerce/magento-customer": "10.1.0", + "@graphcommerce/magento-graphql": "10.1.0", + "@graphcommerce/magento-graphql-rest": "10.1.0", + "@graphcommerce/magento-newsletter": "10.1.0", + "@graphcommerce/magento-payment-included": "10.1.0", + "@graphcommerce/magento-payment-tokens": "10.1.0", + "@graphcommerce/magento-product": "10.1.0", + "@graphcommerce/magento-product-bundle": "10.1.0", + "@graphcommerce/magento-product-configurable": "10.1.0", + "@graphcommerce/magento-product-downloadable": "10.1.0", + "@graphcommerce/magento-product-grouped": "10.1.0", + "@graphcommerce/magento-product-simple": "10.1.0", + "@graphcommerce/magento-product-virtual": "10.1.0", + "@graphcommerce/magento-recently-viewed-products": "10.1.0", + "@graphcommerce/magento-review": "10.1.0", + "@graphcommerce/magento-search": "10.1.0", + "@graphcommerce/magento-store": "10.1.0", + "@graphcommerce/magento-wishlist": "10.1.0", + "@graphcommerce/next-config": "10.1.0", + "@graphcommerce/next-ui": "10.1.0", + "@graphcommerce/react-hook-form": "10.1.0", + "@graphcommerce/service-worker": "10.1.0", "@graphql-mesh/cli": "0.100.21", "@graphql-mesh/config": "0.108.21", "@graphql-mesh/cross-helpers": "0.4.11", @@ -131,9 +131,9 @@ "webpack": "^5.103.0" }, "devDependencies": { - "@graphcommerce/eslint-config-pwa": "10.0.3", - "@graphcommerce/prettier-config-pwa": "10.0.3", - "@graphcommerce/typescript-config-pwa": "10.0.3", + "@graphcommerce/eslint-config-pwa": "10.1.0", + "@graphcommerce/prettier-config-pwa": "10.1.0", + "@graphcommerce/typescript-config-pwa": "10.1.0", "@lingui/cli": "5.7.0", "@playwright/test": "1.57.0", "@types/node": "^20.19.27", diff --git a/examples/magento-open-source/CHANGELOG.md b/examples/magento-open-source/CHANGELOG.md index 0cafa10a700..c6cf8e3bac1 100644 --- a/examples/magento-open-source/CHANGELOG.md +++ b/examples/magento-open-source/CHANGELOG.md @@ -1,5 +1,43 @@ # Change Log +## 10.1.0 + +### Patch Changes + +- [#2608](https://github.com/graphcommerce-org/graphcommerce/pull/2608) [`5986400`](https://github.com/graphcommerce-org/graphcommerce/commit/59864002d744da106f16f99636e163209d4165be) - Fix CMS page prerender crash caused by incorrect static-paths source + + `pages/page/[...url].tsx` used `getCategoryStaticPaths`, which feeds Magento **category** URLs into the `cmsPage` query. Any category URL without a matching CMS page identifier caused `getStaticProps` to return a `redirect`, which Next.js rejects during prerender — crashing `next build`. + + The handler now returns `{ paths: [], fallback: 'blocking' }`. CMS pages render on first request and are ISR-cached afterwards. ([@paales](https://github.com/paales)) + +## 10.1.0-canary.9 + +## 10.1.0-canary.8 + +## 10.1.0-canary.7 + +## 10.1.0-canary.6 + +## 10.1.0-canary.5 + +### Patch Changes + +- [#2608](https://github.com/graphcommerce-org/graphcommerce/pull/2608) [`5986400`](https://github.com/graphcommerce-org/graphcommerce/commit/59864002d744da106f16f99636e163209d4165be) - Fix CMS page prerender crash caused by incorrect static-paths source + + `pages/page/[...url].tsx` used `getCategoryStaticPaths`, which feeds Magento **category** URLs into the `cmsPage` query. Any category URL without a matching CMS page identifier caused `getStaticProps` to return a `redirect`, which Next.js rejects during prerender — crashing `next build`. + + The handler now returns `{ paths: [], fallback: 'blocking' }`. CMS pages render on first request and are ISR-cached afterwards. ([@paales](https://github.com/paales)) + +## 10.1.0-canary.4 + +## 10.1.0-canary.3 + +## 10.0.4-canary.2 + +## 10.0.4-canary.1 + +## 10.0.4-canary.0 + ## 10.0.3 ## 10.0.3-canary.0 diff --git a/examples/magento-open-source/package.json b/examples/magento-open-source/package.json index 15704eff1b6..44a4fc54a2c 100644 --- a/examples/magento-open-source/package.json +++ b/examples/magento-open-source/package.json @@ -2,7 +2,7 @@ "name": "@graphcommerce/magento-open-source", "homepage": "https://www.graphcommerce.org/", "repository": "github:graphcommerce-org/graphcommerce", - "version": "10.0.3", + "version": "10.1.0", "private": true, "sideEffects": false, "packageManager": "yarn@4.1.1", @@ -27,55 +27,55 @@ "@emotion/react": "^11.14.0", "@emotion/server": "^11.11.0", "@emotion/styled": "^11.14.1", - "@graphcommerce/cli": "10.0.3", - "@graphcommerce/ecommerce-ui": "10.0.3", - "@graphcommerce/framer-next-pages": "10.0.3", - "@graphcommerce/framer-scroller": "10.0.3", - "@graphcommerce/framer-utils": "10.0.3", - "@graphcommerce/google-datalayer": "10.0.3", - "@graphcommerce/google-playstore": "10.0.3", - "@graphcommerce/googleanalytics": "10.0.3", - "@graphcommerce/googlerecaptcha": "10.0.3", - "@graphcommerce/googletagmanager": "10.0.3", - "@graphcommerce/graphql": "10.0.3", - "@graphcommerce/graphql-codegen-near-operation-file": "10.0.3", - "@graphcommerce/graphql-codegen-relay-optimizer-plugin": "10.0.3", - "@graphcommerce/graphql-mesh": "10.0.3", - "@graphcommerce/image": "10.0.3", - "@graphcommerce/lingui-next": "10.0.3", - "@graphcommerce/magento-cart": "10.0.3", - "@graphcommerce/magento-cart-checkout": "10.0.3", - "@graphcommerce/magento-cart-coupon": "10.0.3", - "@graphcommerce/magento-cart-email": "10.0.3", - "@graphcommerce/magento-cart-items": "10.0.3", - "@graphcommerce/magento-cart-payment-method": "10.0.3", - "@graphcommerce/magento-cart-shipping-address": "10.0.3", - "@graphcommerce/magento-cart-shipping-method": "10.0.3", - "@graphcommerce/magento-category": "10.0.3", - "@graphcommerce/magento-cms": "10.0.3", - "@graphcommerce/magento-compare": "10.0.3", - "@graphcommerce/magento-customer": "10.0.3", - "@graphcommerce/magento-graphql": "10.0.3", - "@graphcommerce/magento-graphql-rest": "10.0.3", - "@graphcommerce/magento-newsletter": "10.0.3", - "@graphcommerce/magento-payment-included": "10.0.3", - "@graphcommerce/magento-payment-tokens": "10.0.3", - "@graphcommerce/magento-product": "10.0.3", - "@graphcommerce/magento-product-bundle": "10.0.3", - "@graphcommerce/magento-product-configurable": "10.0.3", - "@graphcommerce/magento-product-downloadable": "10.0.3", - "@graphcommerce/magento-product-grouped": "10.0.3", - "@graphcommerce/magento-product-simple": "10.0.3", - "@graphcommerce/magento-product-virtual": "10.0.3", - "@graphcommerce/magento-recently-viewed-products": "10.0.3", - "@graphcommerce/magento-review": "10.0.3", - "@graphcommerce/magento-search": "10.0.3", - "@graphcommerce/magento-store": "10.0.3", - "@graphcommerce/magento-wishlist": "10.0.3", - "@graphcommerce/next-config": "10.0.3", - "@graphcommerce/next-ui": "10.0.3", - "@graphcommerce/react-hook-form": "10.0.3", - "@graphcommerce/service-worker": "10.0.3", + "@graphcommerce/cli": "10.1.0", + "@graphcommerce/ecommerce-ui": "10.1.0", + "@graphcommerce/framer-next-pages": "10.1.0", + "@graphcommerce/framer-scroller": "10.1.0", + "@graphcommerce/framer-utils": "10.1.0", + "@graphcommerce/google-datalayer": "10.1.0", + "@graphcommerce/google-playstore": "10.1.0", + "@graphcommerce/googleanalytics": "10.1.0", + "@graphcommerce/googlerecaptcha": "10.1.0", + "@graphcommerce/googletagmanager": "10.1.0", + "@graphcommerce/graphql": "10.1.0", + "@graphcommerce/graphql-codegen-near-operation-file": "10.1.0", + "@graphcommerce/graphql-codegen-relay-optimizer-plugin": "10.1.0", + "@graphcommerce/graphql-mesh": "10.1.0", + "@graphcommerce/image": "10.1.0", + "@graphcommerce/lingui-next": "10.1.0", + "@graphcommerce/magento-cart": "10.1.0", + "@graphcommerce/magento-cart-checkout": "10.1.0", + "@graphcommerce/magento-cart-coupon": "10.1.0", + "@graphcommerce/magento-cart-email": "10.1.0", + "@graphcommerce/magento-cart-items": "10.1.0", + "@graphcommerce/magento-cart-payment-method": "10.1.0", + "@graphcommerce/magento-cart-shipping-address": "10.1.0", + "@graphcommerce/magento-cart-shipping-method": "10.1.0", + "@graphcommerce/magento-category": "10.1.0", + "@graphcommerce/magento-cms": "10.1.0", + "@graphcommerce/magento-compare": "10.1.0", + "@graphcommerce/magento-customer": "10.1.0", + "@graphcommerce/magento-graphql": "10.1.0", + "@graphcommerce/magento-graphql-rest": "10.1.0", + "@graphcommerce/magento-newsletter": "10.1.0", + "@graphcommerce/magento-payment-included": "10.1.0", + "@graphcommerce/magento-payment-tokens": "10.1.0", + "@graphcommerce/magento-product": "10.1.0", + "@graphcommerce/magento-product-bundle": "10.1.0", + "@graphcommerce/magento-product-configurable": "10.1.0", + "@graphcommerce/magento-product-downloadable": "10.1.0", + "@graphcommerce/magento-product-grouped": "10.1.0", + "@graphcommerce/magento-product-simple": "10.1.0", + "@graphcommerce/magento-product-virtual": "10.1.0", + "@graphcommerce/magento-recently-viewed-products": "10.1.0", + "@graphcommerce/magento-review": "10.1.0", + "@graphcommerce/magento-search": "10.1.0", + "@graphcommerce/magento-store": "10.1.0", + "@graphcommerce/magento-wishlist": "10.1.0", + "@graphcommerce/next-config": "10.1.0", + "@graphcommerce/next-ui": "10.1.0", + "@graphcommerce/react-hook-form": "10.1.0", + "@graphcommerce/service-worker": "10.1.0", "@graphql-mesh/cli": "0.100.21", "@graphql-mesh/config": "0.108.21", "@graphql-mesh/cross-helpers": "0.4.11", @@ -127,9 +127,9 @@ "webpack": "^5.103.0" }, "devDependencies": { - "@graphcommerce/eslint-config-pwa": "10.0.3", - "@graphcommerce/prettier-config-pwa": "10.0.3", - "@graphcommerce/typescript-config-pwa": "10.0.3", + "@graphcommerce/eslint-config-pwa": "10.1.0", + "@graphcommerce/prettier-config-pwa": "10.1.0", + "@graphcommerce/typescript-config-pwa": "10.1.0", "@lingui/cli": "5.7.0", "@playwright/test": "1.57.0", "@types/node": "^20.19.27", diff --git a/examples/magento-open-source/pages/page/[...url].tsx b/examples/magento-open-source/pages/page/[...url].tsx index 44fbbb17d33..90ecd1e0ebc 100644 --- a/examples/magento-open-source/pages/page/[...url].tsx +++ b/examples/magento-open-source/pages/page/[...url].tsx @@ -1,6 +1,5 @@ import type { PageOptions } from '@graphcommerce/framer-next-pages' import { cacheFirst } from '@graphcommerce/graphql' -import { getCategoryStaticPaths } from '@graphcommerce/magento-category' import type { CmsPageFragment } from '@graphcommerce/magento-cms' import { CmsPageContent, CmsPageDocument } from '@graphcommerce/magento-cms' import { PageMeta, redirectOrNotFound, StoreConfigDocument } from '@graphcommerce/magento-store' @@ -59,13 +58,14 @@ CmsPage.pageOptions = pageOptions export default CmsPage -export const getStaticPaths: GetPageStaticPaths = async ({ locales = [] }) => { - // Disable getStaticPaths while in development mode - if (process.env.NODE_ENV === 'development') return { paths: [], fallback: 'blocking' } - - const path = (locale: string) => getCategoryStaticPaths(graphqlSsrClient({ locale }), locale) - const paths = (await Promise.all(locales.map(path))).flat(1) - return { paths, fallback: 'blocking' } +export const getStaticPaths: GetPageStaticPaths = async () => { + // CMS pages don't currently expose a query that enumerates them, so + // prerender on first request via fallback: 'blocking' and let ISR cache + // the result. (Previously this used getCategoryStaticPaths, which fed + // category URLs into the cmsPage query — for any URL that didn't match a + // CMS page identifier, getStaticProps returned a redirect, which Next.js + // rejects during prerender and crashes the build.) + return { paths: [], fallback: 'blocking' } } export const getStaticProps: GetPageStaticProps = async (context) => { diff --git a/examples/magento-storyblok/.gitignore b/examples/magento-storyblok/.gitignore new file mode 100644 index 00000000000..2a89af6d011 --- /dev/null +++ b/examples/magento-storyblok/.gitignore @@ -0,0 +1,50 @@ +# dependencies +node_modules + +# next.js +.next/ +out/ +.vercel +next-env.d.ts +._tmp* +.swc + +# misc +.DS_Store +.env* +!.env.example + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# application +**/public/workbox-*.js* +**/public/sw.js* +**/public/sitemap*.xml +**/public/robots.txt + +*.gql.ts + +# storyblok (space-ID directories are generated by pull/types, only keep copied artifacts) +.storyblok/logs/ +.storyblok/reports/ +.storyblok/types/*/ +.storyblok/components/*/ + +# application +.mesh +*.tsbuildinfo + + +certificates + +# managed by: graphcommerce +pages/.well-known/assetlinks.json.tsx +pages/account/downloads.tsx +pages/account/payment-tokens.tsx +pages/downloadable/download/link/id/\[id\].tsx +pages/downloadable/download/linkSample/link_id/\[id\].tsx +pages/downloadable/download/sample/sample_id/\[id\].tsx +# end managed by: graphcommerce diff --git a/examples/magento-storyblok/.graphqlrc.yml b/examples/magento-storyblok/.graphqlrc.yml new file mode 100644 index 00000000000..f45dec8a14c --- /dev/null +++ b/examples/magento-storyblok/.graphqlrc.yml @@ -0,0 +1,17 @@ +projects: + Project: + schema: + - .mesh/schema.graphql + - node_modules/@graphcommerce/graphql/apollo-client.graphql + - node_modules/@graphcommerce/graphql-codegen-near-operation-file/src/directive/env.graphqls + - node_modules/@graphcommerce/graphql-codegen-near-operation-file/src/directive/injectable.graphqls + documents: + - ./components/**/*.graphql + - ./graphql/**/*.graphql + - node_modules/@graphcommerce/**/*.graphql + extensions: + languageService: + useSchemaFileDefinitions: true + endpoints: + default: + url: http://localhost:3000/api/graphql/ diff --git a/examples/magento-storyblok/.meshrc.yml b/examples/magento-storyblok/.meshrc.yml new file mode 100644 index 00000000000..7a6b962c854 --- /dev/null +++ b/examples/magento-storyblok/.meshrc.yml @@ -0,0 +1,21 @@ +sources: + - name: m2 + handler: + graphql: + endpoint: '{graphCommerce.magentoEndpoint}' + useGETForQueries: true + batch: false + operationHeaders: + Store: '{context.headers.store}' + Authorization: '{context.headers.authorization}' + X-ReCaptcha: "{context.headers['x-recaptcha']}" + Preview-Version: "{context.headers['preview-version']}" + Content-Currency: "{context.headers['content-currency']}" + X-Magento-Cache-Id: "{context.headers['x-magento-cache-id']}" + X-Forwarded-For: "{context.headers['x-forwarded-for']}" +serve: + playground: true +plugins: + - '@graphcommerce/graphql-mesh/plugin/forward-headers': + forwardHeaders: + - X-Magento-Cache-Id diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/70s_165401986895815.jpg b/examples/magento-storyblok/.storyblok/assets/291439709879423/70s_165401986895815.jpg new file mode 100644 index 00000000000..1ca2068d977 Binary files /dev/null and b/examples/magento-storyblok/.storyblok/assets/291439709879423/70s_165401986895815.jpg differ diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/70s_165401986895815.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/70s_165401986895815.json new file mode 100644 index 00000000000..0c48617563b --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/70s_165401986895815.json @@ -0,0 +1,25 @@ +{ + "id": 165401986895815, + "alt": "", + "asset_folder_id": 165391418957362, + "content_length": 729068, + "content_type": "image/jpeg", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/800x1200/42ff148d93/70s.jpg", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "70s.jpg", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-13T09:02:24.455Z", + "updated_at": "2026-04-13T09:02:26.692Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/a-peek-into-history_166901094202372.jpg b/examples/magento-storyblok/.storyblok/assets/291439709879423/a-peek-into-history_166901094202372.jpg new file mode 100644 index 00000000000..d796c2b9857 Binary files /dev/null and b/examples/magento-storyblok/.storyblok/assets/291439709879423/a-peek-into-history_166901094202372.jpg differ diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/a-peek-into-history_166901094202372.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/a-peek-into-history_166901094202372.json new file mode 100644 index 00000000000..3de860e836d --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/a-peek-into-history_166901094202372.json @@ -0,0 +1,25 @@ +{ + "id": 166901094202372, + "alt": "", + "asset_folder_id": 165389761433136, + "content_length": 1247616, + "content_type": "image/jpeg", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/1532x1678/8ef6fa232a/a-peek-into-history.jpg", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "a-peek-into-history.jpg", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-17T14:42:17.450Z", + "updated_at": "2026-04-17T14:42:19.717Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/art_165392005584238.jpg b/examples/magento-storyblok/.storyblok/assets/291439709879423/art_165392005584238.jpg new file mode 100644 index 00000000000..2dea157cc7c Binary files /dev/null and b/examples/magento-storyblok/.storyblok/assets/291439709879423/art_165392005584238.jpg differ diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/art_165392005584238.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/art_165392005584238.json new file mode 100644 index 00000000000..14723be37f9 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/art_165392005584238.json @@ -0,0 +1,25 @@ +{ + "id": 165392005584238, + "alt": "", + "asset_folder_id": 165391418957362, + "content_length": 876600, + "content_type": "image/jpeg", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/800x1200/d93923c328/art.jpg", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "art.jpg", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-13T08:21:47.610Z", + "updated_at": "2026-04-13T08:21:48.965Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/backstory_166903246589130.jpg b/examples/magento-storyblok/.storyblok/assets/291439709879423/backstory_166903246589130.jpg new file mode 100644 index 00000000000..180612ada25 Binary files /dev/null and b/examples/magento-storyblok/.storyblok/assets/291439709879423/backstory_166903246589130.jpg differ diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/backstory_166903246589130.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/backstory_166903246589130.json new file mode 100644 index 00000000000..454673dcafa --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/backstory_166903246589130.json @@ -0,0 +1,25 @@ +{ + "id": 166903246589130, + "alt": "", + "asset_folder_id": 165389761433136, + "content_length": 1766866, + "content_type": "image/jpeg", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/1192x1589/fa3215e60f/backstory.jpg", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "backstory.jpg", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-17T14:51:02.935Z", + "updated_at": "2026-04-17T14:51:04.871Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/box-alt2_168667931920555.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/box-alt2_168667931920555.json new file mode 100644 index 00000000000..bdc7b019373 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/box-alt2_168667931920555.json @@ -0,0 +1,25 @@ +{ + "id": 168667931920555, + "alt": "", + "asset_folder_id": 168667752774269, + "content_length": 722, + "content_type": "image/svg+xml", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/32x32/3e8945853f/box-alt2.svg", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "box-alt2.svg", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-22T14:31:34.314Z", + "updated_at": "2026-04-22T14:31:35.248Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/box-alt2_168667931920555.svg b/examples/magento-storyblok/.storyblok/assets/291439709879423/box-alt2_168667931920555.svg new file mode 100644 index 00000000000..44dfb70e5c5 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/box-alt2_168667931920555.svg @@ -0,0 +1,8 @@ + + + box-alt2 + + + + + \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/calendar_168667931322537.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/calendar_168667931322537.json new file mode 100644 index 00000000000..ca9092a1da4 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/calendar_168667931322537.json @@ -0,0 +1,25 @@ +{ + "id": 168667931322537, + "alt": "", + "asset_folder_id": 168667752774269, + "content_length": 802, + "content_type": "image/svg+xml", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/32x32/ef296d40a4/calendar.svg", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "calendar.svg", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-22T14:31:34.169Z", + "updated_at": "2026-04-22T14:31:35.127Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/calendar_168667931322537.svg b/examples/magento-storyblok/.storyblok/assets/291439709879423/calendar_168667931322537.svg new file mode 100644 index 00000000000..b0eebcafb1a --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/calendar_168667931322537.svg @@ -0,0 +1,10 @@ + + + calendar + + + + + + + \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/chromo_165401986908104.jpg b/examples/magento-storyblok/.storyblok/assets/291439709879423/chromo_165401986908104.jpg new file mode 100644 index 00000000000..9afa3c1cf15 Binary files /dev/null and b/examples/magento-storyblok/.storyblok/assets/291439709879423/chromo_165401986908104.jpg differ diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/chromo_165401986908104.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/chromo_165401986908104.json new file mode 100644 index 00000000000..8392a861435 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/chromo_165401986908104.json @@ -0,0 +1,25 @@ +{ + "id": 165401986908104, + "alt": "", + "asset_folder_id": 165391418957362, + "content_length": 291628, + "content_type": "image/jpeg", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/800x1200/2f58cb5a61/chromo.jpg", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "chromo.jpg", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-13T09:02:24.457Z", + "updated_at": "2026-04-13T09:02:25.846Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/facebook_166151364457168.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/facebook_166151364457168.json new file mode 100644 index 00000000000..17f24623935 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/facebook_166151364457168.json @@ -0,0 +1,25 @@ +{ + "id": 166151364457168, + "alt": "", + "asset_folder_id": 166151322288055, + "content_length": 946, + "content_type": "image/svg+xml", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/24x24/c305653f3f/facebook.svg", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "facebook.svg", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-15T11:51:37.962Z", + "updated_at": "2026-04-15T11:51:38.939Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/facebook_166151364457168.svg b/examples/magento-storyblok/.storyblok/assets/291439709879423/facebook_166151364457168.svg new file mode 100644 index 00000000000..cc7ca8dc6c9 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/facebook_166151364457168.svg @@ -0,0 +1,7 @@ + + + facebook + + + + \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/folders/Blog_e8fcae02-568d-43ce-a5cf-f589b262e85c.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/folders/Blog_e8fcae02-568d-43ce-a5cf-f589b262e85c.json new file mode 100644 index 00000000000..b6a142bdb9d --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/folders/Blog_e8fcae02-568d-43ce-a5cf-f589b262e85c.json @@ -0,0 +1,7 @@ +{ + "id": 167930031092474, + "name": "Blog", + "parent_id": 0, + "uuid": "e8fcae02-568d-43ce-a5cf-f589b262e85c", + "parent_uuid": null +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/folders/Brands_1c76b9f3-fcc4-4d2a-b1ba-62e0ab0ad072.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/folders/Brands_1c76b9f3-fcc4-4d2a-b1ba-62e0ab0ad072.json new file mode 100644 index 00000000000..57805ac69cc --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/folders/Brands_1c76b9f3-fcc4-4d2a-b1ba-62e0ab0ad072.json @@ -0,0 +1,7 @@ +{ + "id": 166902351392860, + "name": "Brands", + "parent_id": 165389761433136, + "uuid": "1c76b9f3-fcc4-4d2a-b1ba-62e0ab0ad072", + "parent_uuid": "a00727b3-7697-4b78-9a58-ec43de21a028" +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/folders/Footer_8e9c671b-51b7-4dbd-8137-d882d23685c9.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/folders/Footer_8e9c671b-51b7-4dbd-8137-d882d23685c9.json new file mode 100644 index 00000000000..d9326800f73 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/folders/Footer_8e9c671b-51b7-4dbd-8137-d882d23685c9.json @@ -0,0 +1,7 @@ +{ + "id": 166151252610998, + "name": "Footer", + "parent_id": 0, + "uuid": "8e9c671b-51b7-4dbd-8137-d882d23685c9", + "parent_uuid": null +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/folders/Homepage_a00727b3-7697-4b78-9a58-ec43de21a028.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/folders/Homepage_a00727b3-7697-4b78-9a58-ec43de21a028.json new file mode 100644 index 00000000000..9ea9fdf8f5c --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/folders/Homepage_a00727b3-7697-4b78-9a58-ec43de21a028.json @@ -0,0 +1,7 @@ +{ + "id": 165389761433136, + "name": "Homepage", + "parent_id": 0, + "uuid": "a00727b3-7697-4b78-9a58-ec43de21a028", + "parent_uuid": null +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/folders/Hot & New_4f362798-ab21-473b-a4e4-3338222a215e.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/folders/Hot & New_4f362798-ab21-473b-a4e4-3338222a215e.json new file mode 100644 index 00000000000..db3d7702716 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/folders/Hot & New_4f362798-ab21-473b-a4e4-3338222a215e.json @@ -0,0 +1,7 @@ +{ + "id": 165391418957362, + "name": "Hot & New", + "parent_id": 165389761433136, + "uuid": "4f362798-ab21-473b-a4e4-3338222a215e", + "parent_uuid": "a00727b3-7697-4b78-9a58-ec43de21a028" +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/folders/PLP_026949f0-2960-4853-b74a-7a07e10a363a.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/folders/PLP_026949f0-2960-4853-b74a-7a07e10a363a.json new file mode 100644 index 00000000000..4ca317343a8 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/folders/PLP_026949f0-2960-4853-b74a-7a07e10a363a.json @@ -0,0 +1,7 @@ +{ + "id": 167876033970863, + "name": "PLP", + "parent_id": 0, + "uuid": "026949f0-2960-4853-b74a-7a07e10a363a", + "parent_uuid": null +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/folders/Social icons_f914857f-80a3-4a2d-8ac6-57b585722cec.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/folders/Social icons_f914857f-80a3-4a2d-8ac6-57b585722cec.json new file mode 100644 index 00000000000..f73a7a0b5e9 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/folders/Social icons_f914857f-80a3-4a2d-8ac6-57b585722cec.json @@ -0,0 +1,7 @@ +{ + "id": 166151322288055, + "name": "Social icons", + "parent_id": 166151252610998, + "uuid": "f914857f-80a3-4a2d-8ac6-57b585722cec", + "parent_uuid": "8e9c671b-51b7-4dbd-8137-d882d23685c9" +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/folders/USPs_93c18113-26e0-45a5-a99d-518b29679327.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/folders/USPs_93c18113-26e0-45a5-a99d-518b29679327.json new file mode 100644 index 00000000000..9e50b9b9118 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/folders/USPs_93c18113-26e0-45a5-a99d-518b29679327.json @@ -0,0 +1,7 @@ +{ + "id": 168667752774269, + "name": "USPs", + "parent_id": 0, + "uuid": "93c18113-26e0-45a5-a99d-518b29679327", + "parent_uuid": null +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/folders/manifest.jsonl b/examples/magento-storyblok/.storyblok/assets/291439709879423/folders/manifest.jsonl new file mode 100644 index 00000000000..57ce932106b --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/folders/manifest.jsonl @@ -0,0 +1,8 @@ +{"old_id":167930031092474,"new_id":168997305740207,"created_at":"2026-04-23T12:51:47.834Z"} +{"old_id":166151252610998,"new_id":168997307116464,"created_at":"2026-04-23T12:51:48.191Z"} +{"old_id":165389761433136,"new_id":168997308464049,"created_at":"2026-04-23T12:51:48.498Z"} +{"old_id":165391418957362,"new_id":168997309893554,"created_at":"2026-04-23T12:51:48.860Z"} +{"old_id":167876033970863,"new_id":168997311273907,"created_at":"2026-04-23T12:51:49.186Z"} +{"old_id":166151322288055,"new_id":168997312711604,"created_at":"2026-04-23T12:51:49.538Z"} +{"old_id":168667752774269,"new_id":168997313932213,"created_at":"2026-04-23T12:51:49.832Z"} +{"old_id":166902351392860,"new_id":168997315349430,"created_at":"2026-04-23T12:51:50.209Z"} diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/history_168667931285671.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/history_168667931285671.json new file mode 100644 index 00000000000..d2a9919d553 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/history_168667931285671.json @@ -0,0 +1,25 @@ +{ + "id": 168667931285671, + "alt": "", + "asset_folder_id": 168667752774269, + "content_length": 784, + "content_type": "image/svg+xml", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/32x32/f95b58e1b1/history.svg", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "history.svg", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-22T14:31:34.160Z", + "updated_at": "2026-04-22T14:31:35.152Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/history_168667931285671.svg b/examples/magento-storyblok/.storyblok/assets/291439709879423/history_168667931285671.svg new file mode 100644 index 00000000000..e5949c8b4af --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/history_168667931285671.svg @@ -0,0 +1,9 @@ + + + history + + + + + + \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/homepage-hero-video_164355657721287.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/homepage-hero-video_164355657721287.json new file mode 100644 index 00000000000..22b502d9859 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/homepage-hero-video_164355657721287.json @@ -0,0 +1,25 @@ +{ + "id": 164355657721287, + "alt": "", + "asset_folder_id": 165389761433136, + "content_length": 1718790, + "content_type": "video/mp4", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/x/8626ecde54/homepage-hero-video.mp4", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "homepage-hero-video.mp4", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-10T10:04:52.995Z", + "updated_at": "2026-04-13T08:19:55.595Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/homepage-hero-video_164355657721287.mp4 b/examples/magento-storyblok/.storyblok/assets/291439709879423/homepage-hero-video_164355657721287.mp4 new file mode 100644 index 00000000000..79e80fe5b01 Binary files /dev/null and b/examples/magento-storyblok/.storyblok/assets/291439709879423/homepage-hero-video_164355657721287.mp4 differ diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/icon_usp_check_168667931338922.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/icon_usp_check_168667931338922.json new file mode 100644 index 00000000000..61d257f5769 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/icon_usp_check_168667931338922.json @@ -0,0 +1,25 @@ +{ + "id": 168667931338922, + "alt": "", + "asset_folder_id": 168667752774269, + "content_length": 921, + "content_type": "image/svg+xml", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/17x12/301c668b95/icon_usp_check.svg", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "icon_usp_check.svg", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-22T14:31:34.172Z", + "updated_at": "2026-04-22T14:31:35.275Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/icon_usp_check_168667931338922.svg b/examples/magento-storyblok/.storyblok/assets/291439709879423/icon_usp_check_168667931338922.svg new file mode 100644 index 00000000000..fc576b1b973 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/icon_usp_check_168667931338922.svg @@ -0,0 +1,7 @@ + + + icon_usp_check + + + + \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/img-composition-frantisek-foltyn_168650434669347.jpg b/examples/magento-storyblok/.storyblok/assets/291439709879423/img-composition-frantisek-foltyn_168650434669347.jpg new file mode 100644 index 00000000000..71db79f89a2 Binary files /dev/null and b/examples/magento-storyblok/.storyblok/assets/291439709879423/img-composition-frantisek-foltyn_168650434669347.jpg differ diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/img-composition-frantisek-foltyn_168650434669347.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/img-composition-frantisek-foltyn_168650434669347.json new file mode 100644 index 00000000000..42d3511ebc4 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/img-composition-frantisek-foltyn_168650434669347.json @@ -0,0 +1,25 @@ +{ + "id": 168650434669347, + "alt": "", + "asset_folder_id": 167930031092474, + "content_length": 814193, + "content_type": "image/jpeg", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/2160x1440/1dd88a473e/img-composition-frantisek-foltyn.jpg", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "img-composition-frantisek-foltyn.jpg", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-22T13:20:22.523Z", + "updated_at": "2026-04-22T13:20:23.905Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/img-impression-iii-concert-wassily-kandinsky_167930086280283.jpg b/examples/magento-storyblok/.storyblok/assets/291439709879423/img-impression-iii-concert-wassily-kandinsky_167930086280283.jpg new file mode 100644 index 00000000000..7f4d18cfc39 Binary files /dev/null and b/examples/magento-storyblok/.storyblok/assets/291439709879423/img-impression-iii-concert-wassily-kandinsky_167930086280283.jpg differ diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/img-impression-iii-concert-wassily-kandinsky_167930086280283.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/img-impression-iii-concert-wassily-kandinsky_167930086280283.json new file mode 100644 index 00000000000..030a9ba55fb --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/img-impression-iii-concert-wassily-kandinsky_167930086280283.json @@ -0,0 +1,25 @@ +{ + "id": 167930086280283, + "alt": "", + "asset_folder_id": 167930031092474, + "content_length": 670483, + "content_type": "image/jpeg", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/2159x1440/f50c4bfd9f/img-impression-iii-concert-wassily-kandinsky.jpg", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "img-impression-iii-concert-wassily-kandinsky.jpg", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-20T12:29:16.218Z", + "updated_at": "2026-04-20T12:29:17.656Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/img-in-the-morning-alpes-maritimes-from-antibes-john-russell_168648574728739.jpg b/examples/magento-storyblok/.storyblok/assets/291439709879423/img-in-the-morning-alpes-maritimes-from-antibes-john-russell_168648574728739.jpg new file mode 100644 index 00000000000..0317c61ed79 Binary files /dev/null and b/examples/magento-storyblok/.storyblok/assets/291439709879423/img-in-the-morning-alpes-maritimes-from-antibes-john-russell_168648574728739.jpg differ diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/img-in-the-morning-alpes-maritimes-from-antibes-john-russell_168648574728739.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/img-in-the-morning-alpes-maritimes-from-antibes-john-russell_168648574728739.json new file mode 100644 index 00000000000..75edc10c12c --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/img-in-the-morning-alpes-maritimes-from-antibes-john-russell_168648574728739.json @@ -0,0 +1,25 @@ +{ + "id": 168648574728739, + "alt": "", + "asset_folder_id": 167930031092474, + "content_length": 1363273, + "content_type": "image/jpeg", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/2160x1440/7f6492d962/img-in-the-morning-alpes-maritimes-from-antibes-john-russell.jpg", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "img-in-the-morning-alpes-maritimes-from-antibes-john-russell.jpg", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-22T13:12:48.438Z", + "updated_at": "2026-04-22T13:12:50.602Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/instagram_166151708820295.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/instagram_166151708820295.json new file mode 100644 index 00000000000..78b3af81875 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/instagram_166151708820295.json @@ -0,0 +1,25 @@ +{ + "id": 166151708820295, + "alt": "", + "asset_folder_id": 166151322288055, + "content_length": 3607, + "content_type": "image/svg+xml", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/24x24/8b0fbd16e5/instagram.svg", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "instagram.svg", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-15T11:53:02.035Z", + "updated_at": "2026-04-15T11:53:02.877Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/instagram_166151708820295.svg b/examples/magento-storyblok/.storyblok/assets/291439709879423/instagram_166151708820295.svg new file mode 100644 index 00000000000..94d436dc8cd --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/instagram_166151708820295.svg @@ -0,0 +1,7 @@ + + + instagram + + + + \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/linkedin_166151364453071.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/linkedin_166151364453071.json new file mode 100644 index 00000000000..b38ca139caa --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/linkedin_166151364453071.json @@ -0,0 +1,25 @@ +{ + "id": 166151364453071, + "alt": "", + "asset_folder_id": 166151322288055, + "content_length": 1367, + "content_type": "image/svg+xml", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/24x24/6ee17f05da/linkedin.svg", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "linkedin.svg", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-15T11:51:37.961Z", + "updated_at": "2026-04-15T11:51:38.961Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/linkedin_166151364453071.svg b/examples/magento-storyblok/.storyblok/assets/291439709879423/linkedin_166151364453071.svg new file mode 100644 index 00000000000..6e3fc1ff7e7 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/linkedin_166151364453071.svg @@ -0,0 +1,7 @@ + + + linkedin + + + + \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/manifest.jsonl b/examples/magento-storyblok/.storyblok/assets/291439709879423/manifest.jsonl new file mode 100644 index 00000000000..b506e5d0c9e --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/manifest.jsonl @@ -0,0 +1,29 @@ +{"old_id":168667931920555,"new_id":169013629707640,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/32x32/3e8945853f/box-alt2.svg","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/c12fe8c452/box-alt2.svg","created_at":"2026-04-23T13:58:16.662Z"} +{"old_id":168667931322537,"new_id":169013630363001,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/32x32/ef296d40a4/calendar.svg","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/15d8f13988/calendar.svg","created_at":"2026-04-23T13:58:17.144Z"} +{"old_id":168667931285671,"new_id":169013632382332,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/32x32/f95b58e1b1/history.svg","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/784455ab99/history.svg","created_at":"2026-04-23T13:58:16.996Z"} +{"old_id":166151364457168,"new_id":169013631751547,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/24x24/c305653f3f/facebook.svg","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/a2a366f197/facebook.svg","created_at":"2026-04-23T13:58:16.807Z"} +{"old_id":166901094202372,"new_id":169013627606389,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/1532x1678/8ef6fa232a/a-peek-into-history.jpg","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/1d03d7b750/a-peek-into-history.jpg","created_at":"2026-04-23T13:58:17.311Z"} +{"old_id":168667931338922,"new_id":169013633852798,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/17x12/301c668b95/icon_usp_check.svg","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/262a8e6430/icon_usp_check.svg","created_at":"2026-04-23T13:58:17.483Z"} +{"old_id":166903246589130,"new_id":169013628974455,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/1192x1589/fa3215e60f/backstory.jpg","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/c7b4e7fb02/backstory.jpg","created_at":"2026-04-23T13:58:17.653Z"} +{"old_id":165401986908104,"new_id":169013631104378,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/800x1200/2f58cb5a61/chromo.jpg","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/058722c6df/chromo.jpg","created_at":"2026-04-23T13:58:17.972Z"} +{"old_id":168650434669347,"new_id":169013634995584,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/2160x1440/1dd88a473e/img-composition-frantisek-foltyn.jpg","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/ab5f9893f7/img-composition-frantisek-foltyn.jpg","created_at":"2026-04-23T13:58:18.312Z"} +{"old_id":165392005584238,"new_id":169013628405110,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/800x1200/d93923c328/art.jpg","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/3a7a2fd11b/art.jpg","created_at":"2026-04-23T13:58:18.862Z"} +{"old_id":164355657721287,"new_id":169013633107325,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/x/8626ecde54/homepage-hero-video.mp4","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/fcf350563e/homepage-hero-video.mp4","created_at":"2026-04-23T13:58:18.020Z"} +{"old_id":165401986895815,"new_id":169013626934644,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/800x1200/42ff148d93/70s.jpg","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/557b5c2bac/70s.jpg","created_at":"2026-04-23T13:58:16.332Z"} +{"old_id":166151708820295,"new_id":169013660607877,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/24x24/8b0fbd16e5/instagram.svg","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/32c34fc92d/instagram.svg","created_at":"2026-04-23T13:58:24.524Z"} +{"old_id":167930086280283,"new_id":169013658486147,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/2159x1440/f50c4bfd9f/img-impression-iii-concert-wassily-kandinsky.jpg","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/befd0dfd07/img-impression-iii-concert-wassily-kandinsky.jpg","created_at":"2026-04-23T13:58:24.690Z"} +{"old_id":166902519164047,"new_id":169013663286664,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/296x238/2100fd6392/mcd.svg","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/b622666075/mcd.svg","created_at":"2026-04-23T13:58:24.857Z"} +{"old_id":166151364453071,"new_id":169013661930886,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/24x24/6ee17f05da/linkedin.svg","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/fa92892d14/linkedin.svg","created_at":"2026-04-23T13:58:25.055Z"} +{"old_id":166902519172240,"new_id":169013662606727,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/1001x403/4b68e140fc/marvel.svg","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/b6582d22a6/marvel.svg","created_at":"2026-04-23T13:58:25.202Z"} +{"old_id":168648574728739,"new_id":169013659895172,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/2160x1440/7f6492d962/img-in-the-morning-alpes-maritimes-from-antibes-john-russell.jpg","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/8f922ba540/img-in-the-morning-alpes-maritimes-from-antibes-john-russell.jpg","created_at":"2026-04-23T13:58:25.370Z"} +{"old_id":165401986969545,"new_id":169013663991177,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/800x1200/92e9fef97a/modest.jpg","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/d12eb6c9a2/modest.jpg","created_at":"2026-04-23T13:58:25.526Z"} +{"old_id":166902519180433,"new_id":169013664843146,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/209x53/cf3773fb53/moma.svg","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/33a073684f/moma.svg","created_at":"2026-04-23T13:58:25.733Z"} +{"old_id":168667931306152,"new_id":169013665326475,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/32x32/c7bd733b0f/moon.svg","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/43bf88d932/moon.svg","created_at":"2026-04-23T13:58:25.869Z"} +{"old_id":166902519159950,"new_id":169013666043276,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/1000x356/874f974f07/nike.svg","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/58b667853a/nike.svg","created_at":"2026-04-23T13:58:26.023Z"} +{"old_id":165401986736069,"new_id":169013666719117,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/x/434331495a/pexels-ron-lach-9594574.mp4","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/33cb4216ba/pexels-ron-lach-9594574.mp4","created_at":"2026-04-23T13:58:26.576Z"} +{"old_id":167930523851889,"new_id":169013667407246,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/1920x1280/5add1a8225/sock-img.jpg","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/da3f841f81/sock-img.jpg","created_at":"2026-04-23T13:58:26.428Z"} +{"old_id":165401986854854,"new_id":169013688239504,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/800x1200/74bb012722/special.jpg","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/daf6384c7d/special.jpg","created_at":"2026-04-23T13:58:29.491Z"} +{"old_id":165391341233436,"new_id":169013689320850,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/x/d4aacc4d2a/watermelon.mp4","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/f1a8616147/watermelon.mp4","created_at":"2026-04-23T13:58:30.125Z"} +{"old_id":167917192476403,"new_id":169013690693012,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/1920x2880/a818d7b05f/women.jpg","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/2c878e9d50/women.jpg","created_at":"2026-04-23T13:58:30.261Z"} +{"old_id":166151708812102,"new_id":169013688669585,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/24x24/7302061d46/twitter.svg","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/64015e8a3f/twitter.svg","created_at":"2026-04-23T13:58:28.543Z"} +{"old_id":167876103899563,"new_id":169013690090899,"old_filename":"https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/x/b2d718e8ea/women.mp4","new_filename":"https://s3.amazonaws.com/a.storyblok.com/f/292038218780127/3d37499188/women.mp4","created_at":"2026-04-23T13:58:31.050Z"} diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/marvel_166902519172240.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/marvel_166902519172240.json new file mode 100644 index 00000000000..e6ed2acb59e --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/marvel_166902519172240.json @@ -0,0 +1,25 @@ +{ + "id": 166902519172240, + "alt": "", + "asset_folder_id": 166902351392860, + "content_length": 3229, + "content_type": "image/svg+xml", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/1001x403/4b68e140fc/marvel.svg", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "marvel.svg", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-17T14:48:05.343Z", + "updated_at": "2026-04-17T14:48:06.188Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/marvel_166902519172240.svg b/examples/magento-storyblok/.storyblok/assets/291439709879423/marvel_166902519172240.svg new file mode 100644 index 00000000000..ab1a67e100c --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/marvel_166902519172240.svg @@ -0,0 +1,9 @@ + + + marvel + + + + + + \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/mcd_166902519164047.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/mcd_166902519164047.json new file mode 100644 index 00000000000..1fe366d4cd5 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/mcd_166902519164047.json @@ -0,0 +1,25 @@ +{ + "id": 166902519164047, + "alt": "", + "asset_folder_id": 166902351392860, + "content_length": 1714, + "content_type": "image/svg+xml", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/296x238/2100fd6392/mcd.svg", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "mcd.svg", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-17T14:48:05.340Z", + "updated_at": "2026-04-17T14:48:06.204Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/mcd_166902519164047.svg b/examples/magento-storyblok/.storyblok/assets/291439709879423/mcd_166902519164047.svg new file mode 100644 index 00000000000..9d47f70a135 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/mcd_166902519164047.svg @@ -0,0 +1,9 @@ + + + mcd + + + + + + \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/modest_165401986969545.jpg b/examples/magento-storyblok/.storyblok/assets/291439709879423/modest_165401986969545.jpg new file mode 100644 index 00000000000..af077cbea35 Binary files /dev/null and b/examples/magento-storyblok/.storyblok/assets/291439709879423/modest_165401986969545.jpg differ diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/modest_165401986969545.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/modest_165401986969545.json new file mode 100644 index 00000000000..17038127ce4 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/modest_165401986969545.json @@ -0,0 +1,25 @@ +{ + "id": 165401986969545, + "alt": "", + "asset_folder_id": 165391418957362, + "content_length": 495180, + "content_type": "image/jpeg", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/800x1200/92e9fef97a/modest.jpg", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "modest.jpg", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-13T09:02:24.473Z", + "updated_at": "2026-04-13T09:02:25.904Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/moma_166902519180433.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/moma_166902519180433.json new file mode 100644 index 00000000000..ea258c3f999 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/moma_166902519180433.json @@ -0,0 +1,25 @@ +{ + "id": 166902519180433, + "alt": "", + "asset_folder_id": 166902351392860, + "content_length": 777, + "content_type": "image/svg+xml", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/209x53/cf3773fb53/moma.svg", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "moma.svg", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-17T14:48:05.345Z", + "updated_at": "2026-04-17T14:48:06.210Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/moma_166902519180433.svg b/examples/magento-storyblok/.storyblok/assets/291439709879423/moma_166902519180433.svg new file mode 100644 index 00000000000..d91e5a16071 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/moma_166902519180433.svg @@ -0,0 +1,2 @@ + + diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/moon_168667931306152.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/moon_168667931306152.json new file mode 100644 index 00000000000..e3e0b8f0c6e --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/moon_168667931306152.json @@ -0,0 +1,25 @@ +{ + "id": 168667931306152, + "alt": "", + "asset_folder_id": 168667752774269, + "content_length": 791, + "content_type": "image/svg+xml", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/32x32/c7bd733b0f/moon.svg", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "moon.svg", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-22T14:31:34.165Z", + "updated_at": "2026-04-22T14:31:35.140Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/moon_168667931306152.svg b/examples/magento-storyblok/.storyblok/assets/291439709879423/moon_168667931306152.svg new file mode 100644 index 00000000000..3bd0e0a7a56 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/moon_168667931306152.svg @@ -0,0 +1,7 @@ + + + moon + + + + \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/nike_166902519159950.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/nike_166902519159950.json new file mode 100644 index 00000000000..b16789851e2 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/nike_166902519159950.json @@ -0,0 +1,25 @@ +{ + "id": 166902519159950, + "alt": "", + "asset_folder_id": 166902351392860, + "content_length": 966, + "content_type": "image/svg+xml", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/1000x356/874f974f07/nike.svg", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "nike.svg", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-17T14:48:05.340Z", + "updated_at": "2026-04-17T14:48:06.214Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/nike_166902519159950.svg b/examples/magento-storyblok/.storyblok/assets/291439709879423/nike_166902519159950.svg new file mode 100644 index 00000000000..f8209507130 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/nike_166902519159950.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/pexels-ron-lach-9594574_165401986736069.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/pexels-ron-lach-9594574_165401986736069.json new file mode 100644 index 00000000000..bda20deba98 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/pexels-ron-lach-9594574_165401986736069.json @@ -0,0 +1,25 @@ +{ + "id": 165401986736069, + "alt": "", + "asset_folder_id": 165391418957362, + "content_length": 348411, + "content_type": "video/mp4", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/x/434331495a/pexels-ron-lach-9594574.mp4", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "pexels-ron-lach-9594574.mp4", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-13T09:02:24.416Z", + "updated_at": "2026-04-13T09:02:25.996Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/pexels-ron-lach-9594574_165401986736069.mp4 b/examples/magento-storyblok/.storyblok/assets/291439709879423/pexels-ron-lach-9594574_165401986736069.mp4 new file mode 100644 index 00000000000..4625cd78699 Binary files /dev/null and b/examples/magento-storyblok/.storyblok/assets/291439709879423/pexels-ron-lach-9594574_165401986736069.mp4 differ diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/sock-img_167930523851889.jpg b/examples/magento-storyblok/.storyblok/assets/291439709879423/sock-img_167930523851889.jpg new file mode 100644 index 00000000000..6b89b654e43 Binary files /dev/null and b/examples/magento-storyblok/.storyblok/assets/291439709879423/sock-img_167930523851889.jpg differ diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/sock-img_167930523851889.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/sock-img_167930523851889.json new file mode 100644 index 00000000000..aad69393b82 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/sock-img_167930523851889.json @@ -0,0 +1,25 @@ +{ + "id": 167930523851889, + "alt": "", + "asset_folder_id": 167930031092474, + "content_length": 429245, + "content_type": "image/jpeg", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/1920x1280/5add1a8225/sock-img.jpg", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "sock-img.jpg", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-20T12:31:03.048Z", + "updated_at": "2026-04-20T12:31:04.369Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/special_165401986854854.jpg b/examples/magento-storyblok/.storyblok/assets/291439709879423/special_165401986854854.jpg new file mode 100644 index 00000000000..c9c2898c3c4 Binary files /dev/null and b/examples/magento-storyblok/.storyblok/assets/291439709879423/special_165401986854854.jpg differ diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/special_165401986854854.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/special_165401986854854.json new file mode 100644 index 00000000000..fc88127aaef --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/special_165401986854854.json @@ -0,0 +1,25 @@ +{ + "id": 165401986854854, + "alt": "", + "asset_folder_id": 165391418957362, + "content_length": 412915, + "content_type": "image/jpeg", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/800x1200/74bb012722/special.jpg", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "special.jpg", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-13T09:02:24.445Z", + "updated_at": "2026-04-13T09:02:25.853Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/twitter_166151708812102.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/twitter_166151708812102.json new file mode 100644 index 00000000000..343bcdd3129 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/twitter_166151708812102.json @@ -0,0 +1,25 @@ +{ + "id": 166151708812102, + "alt": "", + "asset_folder_id": 166151322288055, + "content_length": 1746, + "content_type": "image/svg+xml", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/24x24/7302061d46/twitter.svg", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "twitter.svg", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-15T11:53:02.033Z", + "updated_at": "2026-04-15T11:53:02.908Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/twitter_166151708812102.svg b/examples/magento-storyblok/.storyblok/assets/291439709879423/twitter_166151708812102.svg new file mode 100644 index 00000000000..c3843e80204 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/twitter_166151708812102.svg @@ -0,0 +1,7 @@ + + + twitter + + + + \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/watermelon_165391341233436.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/watermelon_165391341233436.json new file mode 100644 index 00000000000..07c1b980c19 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/watermelon_165391341233436.json @@ -0,0 +1,30 @@ +{ + "id": 165391341233436, + "alt": "", + "asset_folder_id": 165391418957362, + "content_length": 558578, + "content_type": "video/mp4", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/x/d4aacc4d2a/watermelon.mp4", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": { + "alt": "", + "title": "", + "source": "", + "copyright": "" + }, + "publish_at": null, + "short_filename": "watermelon.mp4", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-13T08:19:05.416Z", + "updated_at": "2026-04-13T08:20:06.234Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/watermelon_165391341233436.mp4 b/examples/magento-storyblok/.storyblok/assets/291439709879423/watermelon_165391341233436.mp4 new file mode 100644 index 00000000000..87dea803f57 Binary files /dev/null and b/examples/magento-storyblok/.storyblok/assets/291439709879423/watermelon_165391341233436.mp4 differ diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/women_167876103899563.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/women_167876103899563.json new file mode 100644 index 00000000000..57a5e352e7a --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/women_167876103899563.json @@ -0,0 +1,25 @@ +{ + "id": 167876103899563, + "alt": "", + "asset_folder_id": 167876033970863, + "content_length": 9077394, + "content_type": "video/mp4", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/x/b2d718e8ea/women.mp4", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "women.mp4", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-20T08:49:36.926Z", + "updated_at": "2026-04-20T08:49:47.080Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/women_167876103899563.mp4 b/examples/magento-storyblok/.storyblok/assets/291439709879423/women_167876103899563.mp4 new file mode 100644 index 00000000000..5d622dfd29a Binary files /dev/null and b/examples/magento-storyblok/.storyblok/assets/291439709879423/women_167876103899563.mp4 differ diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/women_167917192476403.jpg b/examples/magento-storyblok/.storyblok/assets/291439709879423/women_167917192476403.jpg new file mode 100644 index 00000000000..aa5c05bf322 Binary files /dev/null and b/examples/magento-storyblok/.storyblok/assets/291439709879423/women_167917192476403.jpg differ diff --git a/examples/magento-storyblok/.storyblok/assets/291439709879423/women_167917192476403.json b/examples/magento-storyblok/.storyblok/assets/291439709879423/women_167917192476403.json new file mode 100644 index 00000000000..85fd0dc7fc0 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/assets/291439709879423/women_167917192476403.json @@ -0,0 +1,25 @@ +{ + "id": 167917192476403, + "alt": "", + "asset_folder_id": 167876033970863, + "content_length": 457355, + "content_type": "image/jpeg", + "copyright": "", + "expire_at": null, + "ext_id": null, + "filename": "https://s3.amazonaws.com/a.storyblok.com/f/291439709879423/1920x2880/a818d7b05f/women.jpg", + "focus": "", + "internal_tag_ids": [], + "is_private": false, + "locked": false, + "meta_data": {}, + "publish_at": null, + "short_filename": "women.jpg", + "source": "", + "space_id": 291439709879423, + "title": "", + "created_at": "2026-04-20T11:36:48.318Z", + "updated_at": "2026-04-20T11:36:49.664Z", + "deleted_at": null, + "internal_tags_list": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/components/global_config.json b/examples/magento-storyblok/.storyblok/components/global_config.json new file mode 100644 index 00000000000..b8d351f0bea --- /dev/null +++ b/examples/magento-storyblok/.storyblok/components/global_config.json @@ -0,0 +1,101 @@ +{ + "name": "global_config", + "display_name": "Global Config", + "description": "Global content shared across all pages (header, footer)", + "created_at": "2026-04-15T11:23:42.124Z", + "updated_at": "2026-04-22T14:38:38.371Z", + "id": 166144500243784, + "schema": { + "tab_usps": { + "display_name": "USPs", + "keys": [ + "sidebar_usps", + "content_usps" + ], + "pos": 0, + "type": "tab", + "name": "tab_usps", + "id": "2r_snA" + }, + "tab_footer": { + "type": "tab", + "pos": 1, + "display_name": "Footer", + "keys": [ + "social_links", + "copyright", + "legal_links" + ], + "id": "2r_4jes", + "name": "tab_footer" + }, + "social_links": { + "type": "bloks", + "pos": 1, + "display_name": "Social Links", + "restrict_type": "", + "restrict_components": true, + "component_whitelist": [ + "page_link" + ], + "id": "xm1jg0KQQ1GF2I4KRZ_xpA" + }, + "copyright": { + "type": "text", + "pos": 2, + "translatable": true, + "display_name": "Copyright", + "id": "ZV8VdtDHSOiQzR_xcCWqyA" + }, + "legal_links": { + "type": "bloks", + "pos": 3, + "display_name": "Legal Links", + "restrict_type": "", + "restrict_components": true, + "component_whitelist": [ + "page_link" + ], + "id": "KeT3tDsMQ9W03SlYHjJE_w" + }, + "sidebar_usps": { + "type": "bloks", + "pos": 5, + "restrict_type": "", + "restrict_components": true, + "component_whitelist": [ + "page_link" + ], + "component_denylist": [], + "id": "ovhw79vmSxybKQEd7_fg0Q", + "description": "Used on PDPs" + }, + "content_usps": { + "type": "bloks", + "pos": 6, + "restrict_type": "", + "restrict_components": true, + "component_whitelist": [ + "page_link" + ], + "component_denylist": [], + "description": "Used on PDPs", + "id": "7weDdf20QRyNksMy2odEYQ" + } + }, + "image": null, + "preview_field": null, + "is_root": true, + "preview_tmpl": null, + "is_nestable": false, + "all_presets": [], + "preset_id": null, + "real_name": "Global Config", + "component_group_uuid": null, + "color": null, + "icon": null, + "internal_tags_list": [], + "internal_tag_ids": [], + "content_type_asset_preview": null, + "metadata": {} +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/components/groups.json b/examples/magento-storyblok/.storyblok/components/groups.json new file mode 100644 index 00000000000..988a9c0aa5d --- /dev/null +++ b/examples/magento-storyblok/.storyblok/components/groups.json @@ -0,0 +1,9 @@ +[ + { + "name": "Rows", + "id": 164354699598578, + "uuid": "027fdad5-acf1-44d3-b3c6-607815b14ccc", + "parent_id": null, + "parent_uuid": null + } +] \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/components/link_item.json b/examples/magento-storyblok/.storyblok/components/link_item.json new file mode 100644 index 00000000000..df9fc65675a --- /dev/null +++ b/examples/magento-storyblok/.storyblok/components/link_item.json @@ -0,0 +1,46 @@ +{ + "name": "link_item", + "display_name": "Link Item", + "description": null, + "created_at": "2026-04-24T11:55:43.435Z", + "updated_at": "2026-04-24T14:37:34.911Z", + "id": 169337419519918, + "schema": { + "title": { + "type": "text", + "pos": 0, + "translatable": true, + "display_name": "Title", + "description": "When empty, the target page's title is used.", + "id": "linkItemTitleField00001" + }, + "target": { + "type": "multilink", + "pos": 1, + "translatable": true, + "display_name": "Target", + "restrict_content_types": true, + "component_whitelist": [ + "page" + ], + "filetypes": [], + "force_link_scope": false, + "id": "linkItemTargetField0001" + } + }, + "image": null, + "preview_field": null, + "is_root": false, + "preview_tmpl": null, + "is_nestable": true, + "all_presets": [], + "preset_id": null, + "real_name": "Link Item", + "component_group_uuid": null, + "color": null, + "icon": null, + "internal_tags_list": [], + "internal_tag_ids": [], + "content_type_asset_preview": null, + "metadata": {} +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/components/page.json b/examples/magento-storyblok/.storyblok/components/page.json new file mode 100644 index 00000000000..c3c01af764c --- /dev/null +++ b/examples/magento-storyblok/.storyblok/components/page.json @@ -0,0 +1,120 @@ +{ + "name": "page", + "display_name": "Page", + "description": null, + "created_at": "2026-03-27T12:25:38.958Z", + "updated_at": "2026-04-24T12:34:05.672Z", + "id": 159435730779527, + "schema": { + "meta_title": { + "type": "text", + "pos": 1, + "translatable": true, + "display_name": "Meta Title", + "id": "SHzwzKlGQ4mkQeUaUbmw-w" + }, + "meta_description": { + "type": "textarea", + "pos": 2, + "translatable": true, + "display_name": "Meta Description", + "id": "44IJqP8pSiCXN2WkN7rnVw" + }, + "meta_robots": { + "type": "option", + "pos": 3, + "display_name": "Meta Robots", + "default_value": "INDEX_FOLLOW", + "source": "self", + "options": [ + { + "name": "INDEX_FOLLOW", + "value": "INDEX_FOLLOW" + }, + { + "name": "INDEX_NOFOLLOW", + "value": "INDEX_NOFOLLOW" + }, + { + "name": "NOINDEX_FOLLOW", + "value": "NOINDEX_FOLLOW" + }, + { + "name": "NOINDEX_NOFOLLOW", + "value": "NOINDEX_NOFOLLOW" + } + ], + "id": "KIi4y1O2StWOWkQekNao8g" + }, + "author": { + "type": "text", + "pos": 4, + "display_name": "Author", + "id": "PmX9lO6nTseg7DpDSTruMw" + }, + "date": { + "type": "datetime", + "pos": 5, + "display_name": "Date", + "id": "L0eYmYIHTlCWy8oGoDhLLQ" + }, + "asset": { + "type": "asset", + "pos": 6, + "display_name": "Asset", + "filetypes": [ + "images", + "videos" + ], + "id": "RWuFS5Z5S9S_sPnnLg-k5Q" + }, + "body": { + "type": "bloks", + "pos": 7, + "display_name": "Content", + "restrict_type": "", + "restrict_components": true, + "component_whitelist": [ + "row_column_one", + "row_column_two", + "row_column_three", + "row_hero_banner", + "row_special_banner", + "row_quote", + "row_links", + "row_button_link_list", + "row_service_options", + "row_product", + "row_pdp", + "row_blog_content" + ], + "id": "JSw5kfzNQuGyTfExGF_InQ" + }, + "related_pages": { + "type": "bloks", + "pos": 8, + "display_name": "Related Pages", + "restrict_type": "", + "restrict_components": true, + "component_whitelist": [ + "page_link" + ], + "id": "Mv1AhSdlQAibcdblFxqUpg" + } + }, + "image": null, + "preview_field": null, + "is_root": true, + "preview_tmpl": null, + "is_nestable": false, + "all_presets": [], + "preset_id": null, + "real_name": "Page", + "component_group_uuid": null, + "color": null, + "icon": null, + "internal_tags_list": [], + "internal_tag_ids": [], + "content_type_asset_preview": null, + "metadata": {} +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/components/page_link.json b/examples/magento-storyblok/.storyblok/components/page_link.json new file mode 100644 index 00000000000..8113daf93bf --- /dev/null +++ b/examples/magento-storyblok/.storyblok/components/page_link.json @@ -0,0 +1,58 @@ +{ + "name": "page_link", + "display_name": "Page Link", + "description": null, + "created_at": "2026-03-27T13:20:10.221Z", + "updated_at": "2026-04-24T14:37:35.083Z", + "id": 159449129885407, + "schema": { + "title": { + "type": "text", + "pos": 0, + "translatable": true, + "display_name": "Title", + "id": "RdWpQ9D9T76lDj0FTv8swA" + }, + "url": { + "type": "multilink", + "pos": 1, + "translatable": true, + "display_name": "URL", + "filetypes": [], + "force_link_scope": false, + "id": "23JbBfgXQ5a0_cyMljUbZg" + }, + "description": { + "type": "richtext", + "pos": 2, + "translatable": true, + "display_name": "Description", + "id": "mS3Hc546QoKP21_66mYPPA" + }, + "asset": { + "type": "asset", + "pos": 3, + "display_name": "Asset", + "filetypes": [ + "images", + "videos" + ], + "id": "nCwWHFLLQ3Wo9yES2Aiyxg" + } + }, + "image": null, + "preview_field": null, + "is_root": false, + "preview_tmpl": null, + "is_nestable": true, + "all_presets": [], + "preset_id": null, + "real_name": "Page Link", + "component_group_uuid": null, + "color": null, + "icon": null, + "internal_tags_list": [], + "internal_tag_ids": [], + "content_type_asset_preview": null, + "metadata": {} +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/components/row_blog_content.json b/examples/magento-storyblok/.storyblok/components/row_blog_content.json new file mode 100644 index 00000000000..4eba35ef5ea --- /dev/null +++ b/examples/magento-storyblok/.storyblok/components/row_blog_content.json @@ -0,0 +1,32 @@ +{ + "name": "row_blog_content", + "display_name": "Row Blog Content", + "description": null, + "created_at": "2026-03-27T13:20:11.045Z", + "updated_at": "2026-03-27T13:20:11.045Z", + "id": 159449133260516, + "schema": { + "content": { + "type": "richtext", + "pos": 0, + "translatable": true, + "display_name": "Content", + "id": "q55XDL_yRquiTFVEbePaeA" + } + }, + "image": null, + "preview_field": null, + "is_root": false, + "preview_tmpl": null, + "is_nestable": true, + "all_presets": [], + "preset_id": null, + "real_name": "Row Blog Content", + "component_group_uuid": "027fdad5-acf1-44d3-b3c6-607815b14ccc", + "color": null, + "icon": null, + "internal_tags_list": [], + "internal_tag_ids": [], + "content_type_asset_preview": null, + "metadata": {} +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/components/row_button_link_list.json b/examples/magento-storyblok/.storyblok/components/row_button_link_list.json new file mode 100644 index 00000000000..a73b64750fd --- /dev/null +++ b/examples/magento-storyblok/.storyblok/components/row_button_link_list.json @@ -0,0 +1,43 @@ +{ + "name": "row_button_link_list", + "display_name": "Row Button Link List", + "description": null, + "created_at": "2026-03-27T13:20:12.046Z", + "updated_at": "2026-04-24T11:55:44.425Z", + "id": 159449137352426, + "schema": { + "title": { + "type": "text", + "pos": 0, + "translatable": true, + "display_name": "Title", + "id": "fY2Z4WGrQsO2UWlT8ZcQ7w" + }, + "links": { + "type": "bloks", + "pos": 1, + "display_name": "Links", + "restrict_type": "", + "restrict_components": true, + "component_whitelist": [ + "link_item" + ], + "id": "mymW0CQcSpypvrOofC-grg" + } + }, + "image": null, + "preview_field": null, + "is_root": false, + "preview_tmpl": null, + "is_nestable": true, + "all_presets": [], + "preset_id": null, + "real_name": "Row Button Link List", + "component_group_uuid": "027fdad5-acf1-44d3-b3c6-607815b14ccc", + "color": null, + "icon": null, + "internal_tags_list": [], + "internal_tag_ids": [], + "content_type_asset_preview": null, + "metadata": {} +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/components/row_column_one.json b/examples/magento-storyblok/.storyblok/components/row_column_one.json new file mode 100644 index 00000000000..0ddd63ff6ac --- /dev/null +++ b/examples/magento-storyblok/.storyblok/components/row_column_one.json @@ -0,0 +1,50 @@ +{ + "name": "row_column_one", + "display_name": "Row Column One", + "description": null, + "created_at": "2026-03-27T13:20:10.369Z", + "updated_at": "2026-03-27T13:20:10.369Z", + "id": 159449130479328, + "schema": { + "variant": { + "type": "option", + "pos": 0, + "display_name": "Variant", + "default_value": "Default", + "source": "self", + "options": [ + { + "name": "Default", + "value": "Default" + }, + { + "name": "Message", + "value": "Message" + } + ], + "id": "Qj9cj_yMRFGkHWzpC4rlKg" + }, + "col_one": { + "type": "richtext", + "pos": 1, + "translatable": true, + "display_name": "Column One", + "id": "PV9FACYmSRydup2yqxhv-A" + } + }, + "image": null, + "preview_field": null, + "is_root": false, + "preview_tmpl": null, + "is_nestable": true, + "all_presets": [], + "preset_id": null, + "real_name": "Row Column One", + "component_group_uuid": "027fdad5-acf1-44d3-b3c6-607815b14ccc", + "color": null, + "icon": null, + "internal_tags_list": [], + "internal_tag_ids": [], + "content_type_asset_preview": null, + "metadata": {} +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/components/row_column_three.json b/examples/magento-storyblok/.storyblok/components/row_column_three.json new file mode 100644 index 00000000000..30c0ada319e --- /dev/null +++ b/examples/magento-storyblok/.storyblok/components/row_column_three.json @@ -0,0 +1,46 @@ +{ + "name": "row_column_three", + "display_name": "Row Column Three", + "description": null, + "created_at": "2026-03-27T13:20:10.704Z", + "updated_at": "2026-03-27T13:20:10.704Z", + "id": 159449131855586, + "schema": { + "col_one": { + "type": "richtext", + "pos": 0, + "translatable": true, + "display_name": "Column One", + "id": "iamvtFdTTj-Vox1A5NhxfQ" + }, + "col_two": { + "type": "richtext", + "pos": 1, + "translatable": true, + "display_name": "Column Two", + "id": "iFOKVeskQk-89SDVfb8PXg" + }, + "col_three": { + "type": "richtext", + "pos": 2, + "translatable": true, + "display_name": "Column Three", + "id": "1AX0IDdeSmKNnzgtAkN3nw" + } + }, + "image": null, + "preview_field": null, + "is_root": false, + "preview_tmpl": null, + "is_nestable": true, + "all_presets": [], + "preset_id": null, + "real_name": "Row Column Three", + "component_group_uuid": "027fdad5-acf1-44d3-b3c6-607815b14ccc", + "color": null, + "icon": null, + "internal_tags_list": [], + "internal_tag_ids": [], + "content_type_asset_preview": null, + "metadata": {} +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/components/row_column_two.json b/examples/magento-storyblok/.storyblok/components/row_column_two.json new file mode 100644 index 00000000000..2126ce1585f --- /dev/null +++ b/examples/magento-storyblok/.storyblok/components/row_column_two.json @@ -0,0 +1,39 @@ +{ + "name": "row_column_two", + "display_name": "Row Column Two", + "description": null, + "created_at": "2026-03-27T13:20:10.548Z", + "updated_at": "2026-03-27T13:20:10.548Z", + "id": 159449131216609, + "schema": { + "col_one": { + "type": "richtext", + "pos": 0, + "translatable": true, + "display_name": "Column One", + "id": "_WfLUd79QyKAcXsL1yzIpw" + }, + "col_two": { + "type": "richtext", + "pos": 1, + "translatable": true, + "display_name": "Column Two", + "id": "G-PN3OHLR2aDzRwvOs006w" + } + }, + "image": null, + "preview_field": null, + "is_root": false, + "preview_tmpl": null, + "is_nestable": true, + "all_presets": [], + "preset_id": null, + "real_name": "Row Column Two", + "component_group_uuid": "027fdad5-acf1-44d3-b3c6-607815b14ccc", + "color": null, + "icon": null, + "internal_tags_list": [], + "internal_tag_ids": [], + "content_type_asset_preview": null, + "metadata": {} +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/components/row_hero_banner.json b/examples/magento-storyblok/.storyblok/components/row_hero_banner.json new file mode 100644 index 00000000000..c8b2aec3590 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/components/row_hero_banner.json @@ -0,0 +1,53 @@ +{ + "name": "row_hero_banner", + "display_name": "Row Hero Banner", + "description": null, + "created_at": "2026-03-27T13:20:11.556Z", + "updated_at": "2026-03-27T13:20:11.556Z", + "id": 159449135378151, + "schema": { + "asset": { + "type": "asset", + "pos": 0, + "display_name": "Asset", + "filetypes": [ + "images", + "videos" + ], + "id": "3rC8XMkvQTC1AF7DDTvHig" + }, + "copy": { + "type": "richtext", + "pos": 1, + "translatable": true, + "display_name": "Copy", + "id": "ghTV4gTkSNiCc7eGvyNFwA" + }, + "page_links": { + "type": "bloks", + "pos": 2, + "display_name": "Page Links", + "restrict_type": "", + "restrict_components": true, + "component_whitelist": [ + "page_link" + ], + "id": "yJvkj_sXSgCwIT36nHYYHQ" + } + }, + "image": null, + "preview_field": null, + "is_root": false, + "preview_tmpl": null, + "is_nestable": true, + "all_presets": [], + "preset_id": null, + "real_name": "Row Hero Banner", + "component_group_uuid": "027fdad5-acf1-44d3-b3c6-607815b14ccc", + "color": null, + "icon": null, + "internal_tags_list": [], + "internal_tag_ids": [], + "content_type_asset_preview": null, + "metadata": {} +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/components/row_links.json b/examples/magento-storyblok/.storyblok/components/row_links.json new file mode 100644 index 00000000000..307c261e57f --- /dev/null +++ b/examples/magento-storyblok/.storyblok/components/row_links.json @@ -0,0 +1,75 @@ +{ + "name": "row_links", + "display_name": "Row Links", + "description": null, + "created_at": "2026-03-27T13:20:11.866Z", + "updated_at": "2026-04-17T12:36:44.973Z", + "id": 159449136611049, + "schema": { + "variant": { + "type": "option", + "pos": 0, + "display_name": "Variant", + "source": "self", + "options": [ + { + "name": "Image Label Swiper", + "value": "ImageLabelSwiper" + }, + { + "name": "Inline", + "value": "Inline" + }, + { + "name": "Logo Swiper", + "value": "LogoSwiper" + }, + { + "name": "USPs", + "value": "Usps" + } + ], + "id": "N7eAPQHSR_K5_1snGBKkOg" + }, + "title": { + "type": "text", + "pos": 1, + "translatable": true, + "display_name": "Title", + "id": "tGjyYEgDRe603BYC0K2PbA" + }, + "copy": { + "type": "richtext", + "pos": 2, + "translatable": true, + "display_name": "Copy", + "id": "xMXE1vYoTyufRR1wdDNe8A" + }, + "page_links": { + "type": "bloks", + "pos": 3, + "display_name": "Page Links", + "restrict_type": "", + "restrict_components": true, + "component_whitelist": [ + "page_link" + ], + "id": "0KCngqhQTwCQMspAJffVrA" + } + }, + "image": null, + "preview_field": null, + "is_root": false, + "preview_tmpl": null, + "is_nestable": true, + "all_presets": [], + "preset_id": null, + "real_name": "Row Links", + "component_group_uuid": "027fdad5-acf1-44d3-b3c6-607815b14ccc", + "color": null, + "icon": null, + "internal_tags_list": [], + "internal_tag_ids": [], + "content_type_asset_preview": null, + "metadata": {} +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/components/row_pdp.json b/examples/magento-storyblok/.storyblok/components/row_pdp.json new file mode 100644 index 00000000000..a424d63803a --- /dev/null +++ b/examples/magento-storyblok/.storyblok/components/row_pdp.json @@ -0,0 +1,82 @@ +{ + "name": "row_pdp", + "display_name": "Row PDP", + "description": "PDP-specific rows that use the current product's data (reviews, specs, related, upsells)", + "created_at": "2026-04-17T13:49:07.413Z", + "updated_at": "2026-04-17T13:54:46.731Z", + "id": 166888027812145, + "schema": { + "variant": { + "type": "option", + "pos": 0, + "display_name": "Variant", + "source": "self", + "options": [ + { + "name": "Feature", + "value": "Feature" + }, + { + "name": "Feature Boxed", + "value": "FeatureBoxed" + }, + { + "name": "Related", + "value": "Related" + }, + { + "name": "Reviews", + "value": "Reviews" + }, + { + "name": "Specs", + "value": "Specs" + }, + { + "name": "Upsells", + "value": "Upsells" + } + ], + "id": "1gaZTH2fQqS4qq0h1gsRhg" + }, + "asset": { + "type": "asset", + "pos": 1, + "display_name": "Asset", + "filetypes": [ + "images", + "videos" + ], + "id": "64-2Dg4RQbi8Z6n3USODNA" + }, + "title": { + "type": "text", + "pos": 2, + "translatable": true, + "display_name": "Title", + "id": "SZZVK6vESaOFh-FOYjqNHQ" + }, + "product_copy": { + "type": "richtext", + "pos": 3, + "translatable": true, + "display_name": "Product Copy", + "id": "_COBBHJjTx2UlYEqoKbolA" + } + }, + "image": null, + "preview_field": null, + "is_root": false, + "preview_tmpl": null, + "is_nestable": true, + "all_presets": [], + "preset_id": null, + "real_name": "Row PDP", + "component_group_uuid": "027fdad5-acf1-44d3-b3c6-607815b14ccc", + "color": null, + "icon": null, + "internal_tags_list": [], + "internal_tag_ids": [], + "content_type_asset_preview": null, + "metadata": {} +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/components/row_product.json b/examples/magento-storyblok/.storyblok/components/row_product.json new file mode 100644 index 00000000000..8cbac0c209b --- /dev/null +++ b/examples/magento-storyblok/.storyblok/components/row_product.json @@ -0,0 +1,95 @@ +{ + "name": "row_product", + "display_name": "Row Product", + "description": null, + "created_at": "2026-03-27T13:20:12.372Z", + "updated_at": "2026-04-24T13:27:58.437Z", + "id": 159449138691820, + "schema": { + "variant": { + "type": "option", + "pos": 0, + "display_name": "Variant", + "source": "self", + "options": [ + { + "name": "Backstory", + "value": "Backstory" + }, + { + "name": "Grid", + "value": "Grid" + }, + { + "name": "Swipeable", + "value": "Swipeable" + } + ], + "id": "Qs7x929WQE2gQlimOlTQGQ" + }, + "asset": { + "type": "asset", + "pos": 2, + "display_name": "Asset", + "filetypes": [ + "images", + "videos" + ], + "id": "kdKXFT8HRtKXF8zGr4Kq3g" + }, + "title": { + "type": "text", + "pos": 3, + "translatable": true, + "display_name": "Title", + "id": "gJCGsFmaS4O2hDQFPAkjPw" + }, + "product_copy": { + "type": "richtext", + "pos": 4, + "translatable": true, + "display_name": "Product Copy", + "id": "Z6iYRhpLRUuysWLUKR-yUw" + }, + "magento_product_skus": { + "type": "text", + "pos": 5, + "display_name": "Magento Product SKUs", + "description": "Comma-separated product SKUs to display (e.g. 'WJ04,WJ01,WT09')", + "id": "0x7WotYWSa-hG7pv2wKm5w" + }, + "magento_category_id": { + "type": "text", + "pos": 6, + "display_name": "Magento Category ID", + "description": "Magento category UID to fetch products from. Used when Product SKUs is empty.", + "id": "Wei2N9DLQw-vmEUguoQkbQ" + }, + "page_links": { + "type": "bloks", + "pos": 7, + "display_name": "Page Links", + "restrict_type": "", + "restrict_components": true, + "component_whitelist": [ + "page_link" + ], + "id": "VtzrzSV9QqiJYAvxxeO3Sw" + } + }, + "image": null, + "preview_field": null, + "is_root": false, + "preview_tmpl": null, + "is_nestable": true, + "all_presets": [], + "preset_id": null, + "real_name": "Row Product", + "component_group_uuid": "027fdad5-acf1-44d3-b3c6-607815b14ccc", + "color": null, + "icon": null, + "internal_tags_list": [], + "internal_tag_ids": [], + "content_type_asset_preview": null, + "metadata": {} +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/components/row_quote.json b/examples/magento-storyblok/.storyblok/components/row_quote.json new file mode 100644 index 00000000000..0c83468accc --- /dev/null +++ b/examples/magento-storyblok/.storyblok/components/row_quote.json @@ -0,0 +1,32 @@ +{ + "name": "row_quote", + "display_name": "Row Quote", + "description": null, + "created_at": "2026-03-27T13:20:10.881Z", + "updated_at": "2026-03-27T13:20:10.881Z", + "id": 159449132588771, + "schema": { + "quote": { + "type": "richtext", + "pos": 0, + "translatable": true, + "display_name": "Quote", + "id": "bPm8cPN3TwqXB-o5sUCSVA" + } + }, + "image": null, + "preview_field": null, + "is_root": false, + "preview_tmpl": null, + "is_nestable": true, + "all_presets": [], + "preset_id": null, + "real_name": "Row Quote", + "component_group_uuid": "027fdad5-acf1-44d3-b3c6-607815b14ccc", + "color": null, + "icon": null, + "internal_tags_list": [], + "internal_tag_ids": [], + "content_type_asset_preview": null, + "metadata": {} +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/components/row_service_options.json b/examples/magento-storyblok/.storyblok/components/row_service_options.json new file mode 100644 index 00000000000..83ef9e5881f --- /dev/null +++ b/examples/magento-storyblok/.storyblok/components/row_service_options.json @@ -0,0 +1,43 @@ +{ + "name": "row_service_options", + "display_name": "Row Service Options", + "description": null, + "created_at": "2026-03-27T13:20:12.209Z", + "updated_at": "2026-03-27T13:20:12.209Z", + "id": 159449138028267, + "schema": { + "title": { + "type": "text", + "pos": 0, + "translatable": true, + "display_name": "Title", + "id": "VRjJhAubSE60kbGJlfyh6A" + }, + "service_options": { + "type": "bloks", + "pos": 1, + "display_name": "Service Options", + "restrict_type": "", + "restrict_components": true, + "component_whitelist": [ + "page_link" + ], + "id": "NBsd3uaQQeafuPaZtQ0EjA" + } + }, + "image": null, + "preview_field": null, + "is_root": false, + "preview_tmpl": null, + "is_nestable": true, + "all_presets": [], + "preset_id": null, + "real_name": "Row Service Options", + "component_group_uuid": "027fdad5-acf1-44d3-b3c6-607815b14ccc", + "color": null, + "icon": null, + "internal_tags_list": [], + "internal_tag_ids": [], + "content_type_asset_preview": null, + "metadata": {} +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/components/row_special_banner.json b/examples/magento-storyblok/.storyblok/components/row_special_banner.json new file mode 100644 index 00000000000..2eb3ce67e57 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/components/row_special_banner.json @@ -0,0 +1,60 @@ +{ + "name": "row_special_banner", + "display_name": "Row Special Banner", + "description": null, + "created_at": "2026-03-27T13:20:11.711Z", + "updated_at": "2026-03-27T13:20:11.711Z", + "id": 159449135980264, + "schema": { + "asset": { + "type": "asset", + "pos": 0, + "display_name": "Asset", + "filetypes": [ + "images", + "videos" + ], + "id": "tJ_21MmFQT6UicBnN4lyXA" + }, + "copy": { + "type": "richtext", + "pos": 1, + "translatable": true, + "display_name": "Copy", + "id": "N6210H7XTlC1rSYHWpCuRA" + }, + "page_links": { + "type": "bloks", + "pos": 2, + "display_name": "Page Links", + "restrict_type": "", + "restrict_components": true, + "component_whitelist": [ + "page_link" + ], + "id": "hbNrlevbRRKWRMbH7rFdXQ" + }, + "topic": { + "type": "text", + "pos": 3, + "translatable": true, + "display_name": "Topic", + "id": "goHilD9uRxqlSLXnaTSHOw" + } + }, + "image": null, + "preview_field": null, + "is_root": false, + "preview_tmpl": null, + "is_nestable": true, + "all_presets": [], + "preset_id": null, + "real_name": "Row Special Banner", + "component_group_uuid": "027fdad5-acf1-44d3-b3c6-607815b14ccc", + "color": null, + "icon": null, + "internal_tags_list": [], + "internal_tag_ids": [], + "content_type_asset_preview": null, + "metadata": {} +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/components/tags.json b/examples/magento-storyblok/.storyblok/components/tags.json new file mode 100644 index 00000000000..0637a088a01 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/components/tags.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/components/usps.json b/examples/magento-storyblok/.storyblok/components/usps.json new file mode 100644 index 00000000000..4ad0bb68b1e --- /dev/null +++ b/examples/magento-storyblok/.storyblok/components/usps.json @@ -0,0 +1,36 @@ +{ + "name": "usps", + "display_name": "USPs", + "description": null, + "created_at": "2026-03-27T13:20:11.370Z", + "updated_at": "2026-04-24T13:27:59.103Z", + "id": 159449134583526, + "schema": { + "usps_multiple": { + "type": "bloks", + "pos": 1, + "display_name": "USPs", + "restrict_type": "", + "restrict_components": true, + "component_whitelist": [ + "page_link" + ], + "id": "AmW3aibwQBSuuWAZE_K85w" + } + }, + "image": null, + "preview_field": null, + "is_root": true, + "preview_tmpl": null, + "is_nestable": false, + "all_presets": [], + "preset_id": null, + "real_name": "USPs", + "component_group_uuid": null, + "color": null, + "icon": null, + "internal_tags_list": [], + "internal_tag_ids": [], + "content_type_asset_preview": null, + "metadata": {} +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/stories/291439709879423/13-random-fun-and-useless-facts-about-socks_736133b3-83d8-413a-a051-6ba4c602ee26.json b/examples/magento-storyblok/.storyblok/stories/291439709879423/13-random-fun-and-useless-facts-about-socks_736133b3-83d8-413a-a051-6ba4c602ee26.json new file mode 100644 index 00000000000..25b471f7c48 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/stories/291439709879423/13-random-fun-and-useless-facts-about-socks_736133b3-83d8-413a-a051-6ba4c602ee26.json @@ -0,0 +1,377 @@ +{ + "name": "13 Random, Fun, and Useless Facts About Socks", + "parent_id": 167929327942297, + "group_id": "3b0813ce-0bc3-426c-8482-49ab82806237", + "alternates": [], + "created_at": "2026-04-22T13:11:45.091Z", + "deleted_at": null, + "sort_by_date": null, + "tag_list": [ + "News", + "Tips & tricks" + ], + "updated_at": "2026-04-24T12:35:27.686Z", + "published_at": "2026-04-24T12:35:27.670Z", + "id": 168648315289604, + "uuid": "736133b3-83d8-413a-a051-6ba4c602ee26", + "is_folder": false, + "content": { + "_uid": "08f3250a-bb86-43f9-945a-4475c70c16e5", + "body": [ + { + "_uid": "bf61f012-c8e9-4a95-949f-61600f5972f7", + "content": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Socks can add a fun pop of color and variety to your wardrobe, all while helping to keep your feet protected and dry throughout the day. Yet, how much do you really know about this fun and functional article of clothing? If you are like most people, you have probably not given much thought to where your socks come from or their fascinating history. To help catch you up, here are thirteen fun, random, and useless things you likely never knew about socks.", + "type": "text" + } + ] + }, + { + "type": "ordered_list", + "attrs": { + "order": 1 + }, + "content": [ + { + "type": "list_item", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "The first socks were made in Egypt, over 5,000 years ago. They were made from woven materials, such as wool and linen, and were used to protect the feet from sand and rocks.", + "type": "text" + } + ] + } + ] + }, + { + "type": "list_item", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "In ancient Greece, athletes used to wear socks called \"petasis\" to help protect their feet during competitions.", + "type": "text" + } + ] + } + ] + }, + { + "type": "list_item", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "During World War II, American soldiers were given \"saddle socks\" to help prevent blisters and other foot injuries. These socks were made from heavy-duty wool and were designed to be worn inside their boots.", + "type": "text" + } + ] + } + ] + }, + { + "type": "list_item", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Socks can be used as a DIY cleaning tool. Wetting a sock and tying it around the end of a broom can help you clean hard-to-reach places, such as high corners or baseboards.", + "type": "text" + } + ] + } + ] + }, + { + "type": "list_item", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "There are many different variations of socks, including ankle socks, knee-high socks, crew socks, and thigh-high socks. Some socks even have special features, such as compression to help improve circulation or extra padding to protect the feet.", + "type": "text" + } + ] + } + ] + }, + { + "type": "list_item", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "To keep socks from slipping down, you can use a simple DIY trick: tie a knot in the top of each sock before putting them on.", + "type": "text" + } + ] + } + ] + }, + { + "type": "list_item", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Socks were once used as currency in some parts of the world. In medieval Europe, socks were traded for goods and services, and in some African cultures, socks were used as a form of payment for bride-prices.", + "type": "text" + } + ] + } + ] + }, + { + "type": "list_item", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "To prevent socks from getting lost in the wash, you can sew a button on one sock and a corresponding buttonhole on the other. When you put your socks in the laundry, simply button them together, and you'll never have to worry about mismatched socks again!", + "type": "text" + } + ] + } + ] + }, + { + "type": "list_item", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "In some cultures, socks are seen as lucky. For example, in Japan, it's considered lucky to wear mismatched socks on New Year's Day, and in Italy, it's believed that if you wear red socks on your wedding day, you'll have a long and happy marriage.", + "type": "text" + } + ] + } + ] + }, + { + "type": "list_item", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Socks are used for more than just keeping your feet warm. Some people use socks as dust cloths, to help protect delicate items during storage, and even as makeshift oven mitts!", + "type": "text" + } + ] + } + ] + }, + { + "type": "list_item", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Knee-high socks became popular in the 1960s and 1970s as part of the mod fashion trend.", + "type": "text" + } + ] + } + ] + }, + { + "type": "list_item", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Toeless socks, also known as \"footies,\" were invented for those who wear flip-flops or sandals.", + "type": "text" + } + ] + } + ] + }, + { + "type": "list_item", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Socks are also used for medical purposes, such as compression socks for circulation and anti-fatigue socks for people who stand for long periods of time.", + "type": "text" + } + ] + } + ] + } + ] + }, + { + "type": "paragraph", + "attrs": { + "textAlign": null + } + }, + { + "type": "paragraph", + "attrs": { + "textAlign": null + } + }, + { + "type": "paragraph", + "attrs": { + "textAlign": null + } + } + ] + }, + "component": "row_blog_content" + } + ], + "date": "2023-01-30 00:00", + "asset": { + "id": 168648574728739, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/2160x1440/7f6492d962/img-in-the-morning-alpes-maritimes-from-antibes-john-russell.jpg", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "author": "Erwin Otten", + "component": "page", + "meta_title": "13 Random, Fun, and Useless Facts About Socks", + "meta_robots": "INDEX_FOLLOW", + "related_pages": [], + "meta_description": "....." + }, + "published": true, + "slug": "13-random-fun-and-useless-facts-about-socks", + "path": null, + "full_slug": "blog/13-random-fun-and-useless-facts-about-socks", + "default_root": null, + "disble_fe_editor": false, + "disable_fe_editor": false, + "parent": { + "id": 167929327942297, + "uuid": "eca8a55a-5970-43c1-992a-b89d58753a92", + "name": "Blog", + "slug": "blog", + "disble_fe_editor": false + }, + "is_startpage": false, + "unpublished_changes": false, + "meta_data": null, + "imported_at": null, + "preview_token": { + "token": "015137740df5483d6b9fcd0b4fabc067cd8fa8a7", + "timestamp": "1777036865" + }, + "pinned": false, + "breadcrumbs": [ + { + "id": 167929327942297, + "name": "Blog", + "parent_id": null, + "disble_fe_editor": false, + "disable_fe_editor": false, + "path": null, + "slug": "blog", + "translated_slugs": [] + } + ], + "publish_at": null, + "expire_at": null, + "first_published_at": "2026-04-22T13:14:20.812Z", + "last_author": { + "id": 159433391350340, + "userid": "info@reachdigital.nl", + "friendly_name": "Reach Digital" + }, + "last_author_id": 159433391350340, + "user_ids": [], + "space_role_ids": [], + "translated_slugs": [], + "localized_paths": [ + { + "path": "blog/13-random-fun-and-useless-facts-about-socks", + "name": null, + "lang": "nl", + "published": null + } + ], + "position": -20, + "translated_stories": [], + "can_not_view": false, + "is_scheduled": null, + "scheduled_dates": null, + "ideas": [], + "current_version_id": 169347185042063, + "variant_type": null, + "experiment_ids": [], + "stage": null, + "favourite_for_user_ids": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/stories/291439709879423/blog_5e586825-bf76-4690-8434-6345d1a8bf41.json b/examples/magento-storyblok/.storyblok/stories/291439709879423/blog_5e586825-bf76-4690-8434-6345d1a8bf41.json new file mode 100644 index 00000000000..03324ecf85a --- /dev/null +++ b/examples/magento-storyblok/.storyblok/stories/291439709879423/blog_5e586825-bf76-4690-8434-6345d1a8bf41.json @@ -0,0 +1,146 @@ +{ + "name": "Index", + "parent_id": 167929327942297, + "group_id": "d3ffe556-07a5-420c-ad97-534a863d9e9e", + "alternates": [], + "created_at": "2026-04-20T12:35:01.987Z", + "deleted_at": null, + "sort_by_date": null, + "tag_list": [], + "updated_at": "2026-04-24T12:35:14.944Z", + "published_at": "2026-04-24T12:35:14.928Z", + "id": 167931502567675, + "uuid": "5e586825-bf76-4690-8434-6345d1a8bf41", + "is_folder": false, + "content": { + "_uid": "016b9bb3-d246-40db-940b-960e22292949", + "body": [ + { + "_uid": "e2b97fca-5f1c-45a5-b31d-1bdea5fb6332", + "col_one": { + "type": "doc", + "content": [ + { + "type": "heading", + "attrs": { + "level": 1, + "textAlign": null + }, + "content": [ + { + "text": "Blog", + "type": "text" + } + ] + }, + { + "type": "paragraph", + "attrs": { + "textAlign": null + } + }, + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Features and perspectives", + "type": "text" + } + ] + } + ] + }, + "variant": "Default", + "component": "row_column_one" + } + ], + "date": "", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "filename": null, + "copyright": null, + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "author": "", + "component": "page", + "meta_title": "Blog", + "meta_robots": "INDEX_FOLLOW", + "related_pages": [], + "meta_description": "" + }, + "published": true, + "slug": "blog", + "path": "", + "full_slug": "blog/", + "default_root": null, + "disble_fe_editor": false, + "disable_fe_editor": false, + "parent": { + "id": 167929327942297, + "uuid": "eca8a55a-5970-43c1-992a-b89d58753a92", + "name": "Blog", + "slug": "blog", + "disble_fe_editor": false + }, + "is_startpage": true, + "unpublished_changes": false, + "meta_data": null, + "imported_at": null, + "preview_token": { + "token": "219504c5b73393ee0437847367b962c7041df720", + "timestamp": "1777036864" + }, + "pinned": false, + "breadcrumbs": [ + { + "id": 167929327942297, + "name": "Blog", + "parent_id": null, + "disble_fe_editor": false, + "disable_fe_editor": false, + "path": null, + "slug": "blog", + "translated_slugs": [] + } + ], + "publish_at": null, + "expire_at": null, + "first_published_at": "2026-04-20T12:42:44.212Z", + "last_author": { + "id": 159433391350340, + "userid": "info@reachdigital.nl", + "friendly_name": "Reach Digital" + }, + "last_author_id": 159433391350340, + "user_ids": [], + "space_role_ids": [], + "translated_slugs": [], + "localized_paths": [ + { + "path": "blog/", + "name": null, + "lang": "nl", + "published": true + } + ], + "position": -50, + "translated_stories": [], + "can_not_view": false, + "is_scheduled": null, + "scheduled_dates": null, + "ideas": [], + "current_version_id": 169347132981804, + "variant_type": null, + "experiment_ids": [], + "stage": null, + "favourite_for_user_ids": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/stories/291439709879423/blog_eca8a55a-5970-43c1-992a-b89d58753a92.json b/examples/magento-storyblok/.storyblok/stories/291439709879423/blog_eca8a55a-5970-43c1-992a-b89d58753a92.json new file mode 100644 index 00000000000..a63c32ec244 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/stories/291439709879423/blog_eca8a55a-5970-43c1-992a-b89d58753a92.json @@ -0,0 +1,68 @@ +{ + "name": "Blog", + "parent_id": null, + "group_id": "bea64beb-323b-4a4f-a999-7888b4f711cb", + "alternates": [], + "created_at": "2026-04-20T12:26:11.071Z", + "deleted_at": null, + "sort_by_date": null, + "tag_list": [], + "updated_at": "2026-04-20T12:26:11.071Z", + "published_at": null, + "id": 167929327942297, + "uuid": "eca8a55a-5970-43c1-992a-b89d58753a92", + "is_folder": true, + "content": { + "content_types": [], + "lock_subfolders_content_types": false + }, + "published": false, + "slug": "blog", + "path": null, + "full_slug": "blog", + "default_root": "page", + "disble_fe_editor": false, + "disable_fe_editor": false, + "parent": null, + "is_startpage": false, + "unpublished_changes": false, + "meta_data": null, + "imported_at": null, + "preview_token": { + "token": "219504c5b73393ee0437847367b962c7041df720", + "timestamp": "1777036864" + }, + "pinned": false, + "breadcrumbs": [], + "publish_at": null, + "expire_at": null, + "first_published_at": null, + "last_author": { + "id": 159433391350340, + "userid": "info@reachdigital.nl", + "friendly_name": "Reach Digital" + }, + "last_author_id": 159433391350340, + "user_ids": [], + "space_role_ids": [], + "translated_slugs": [], + "localized_paths": [ + { + "path": "blog", + "name": null, + "lang": "nl", + "published": null + } + ], + "position": -40, + "translated_stories": [], + "can_not_view": false, + "is_scheduled": null, + "scheduled_dates": null, + "ideas": [], + "current_version_id": 167929328014186, + "variant_type": null, + "experiment_ids": [], + "stage": null, + "favourite_for_user_ids": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/stories/291439709879423/brands-and-sizes_751c2493-3834-4372-9c18-5e6c09cef411.json b/examples/magento-storyblok/.storyblok/stories/291439709879423/brands-and-sizes_751c2493-3834-4372-9c18-5e6c09cef411.json new file mode 100644 index 00000000000..4f1f0ae5c3d --- /dev/null +++ b/examples/magento-storyblok/.storyblok/stories/291439709879423/brands-and-sizes_751c2493-3834-4372-9c18-5e6c09cef411.json @@ -0,0 +1,135 @@ +{ + "name": "Brands/Sizes", + "parent_id": 169314617677262, + "group_id": "ddf54adc-ac69-4cf1-9b09-6d9b25a9e51f", + "alternates": [], + "created_at": "2026-04-24T12:14:42.697Z", + "deleted_at": null, + "sort_by_date": null, + "tag_list": [], + "updated_at": "2026-04-24T12:35:45.349Z", + "published_at": "2026-04-24T12:35:45.334Z", + "id": 169342085974919, + "uuid": "751c2493-3834-4372-9c18-5e6c09cef411", + "is_folder": false, + "content": { + "_uid": "3f3116c7-f2c4-4b56-82e9-8271569d52ec", + "body": [ + { + "_uid": "76fd62e7-2518-46c2-915b-13b3a4c6c6ce", + "col_one": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Try clicking different size buttons located at the top of each product page - you will be shown the inventory details of what sizes we are currently offering. Please check back often since we add new products on a daily basis! Or if you know what you're looking for - try the search bar as well.", + "type": "text", + "marks": [ + { + "type": "textStyle", + "attrs": { + "color": "" + } + } + ] + } + ] + } + ] + }, + "variant": "Default", + "component": "row_column_one" + } + ], + "date": "", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "author": "", + "component": "page", + "meta_title": "I want to know if you carry a specific brand/color/size/width?", + "meta_robots": "INDEX_FOLLOW", + "related_pages": [], + "meta_description": "" + }, + "published": true, + "slug": "brands-and-sizes", + "path": null, + "full_slug": "service/brands-and-sizes", + "default_root": null, + "disble_fe_editor": false, + "disable_fe_editor": false, + "parent": { + "id": 169314617677262, + "uuid": "c4b4a580-d22d-446d-86bf-7602bc091cc8", + "name": "Service", + "slug": "service", + "disble_fe_editor": false + }, + "is_startpage": false, + "unpublished_changes": false, + "meta_data": null, + "imported_at": null, + "preview_token": { + "token": "219504c5b73393ee0437847367b962c7041df720", + "timestamp": "1777036864" + }, + "pinned": false, + "breadcrumbs": [ + { + "id": 169314617677262, + "name": "Service", + "parent_id": null, + "disble_fe_editor": false, + "disable_fe_editor": false, + "path": null, + "slug": "service", + "translated_slugs": [] + } + ], + "publish_at": null, + "expire_at": null, + "first_published_at": "2026-04-24T12:15:05.203Z", + "last_author": { + "id": 159433391350340, + "userid": "info@reachdigital.nl", + "friendly_name": "Reach Digital" + }, + "last_author_id": 159433391350340, + "user_ids": [], + "space_role_ids": [], + "translated_slugs": [], + "localized_paths": [ + { + "path": "service/brands-and-sizes", + "name": null, + "lang": "nl", + "published": null + } + ], + "position": -70, + "translated_stories": [], + "can_not_view": false, + "is_scheduled": null, + "scheduled_dates": null, + "ideas": [], + "current_version_id": 169347257570038, + "variant_type": null, + "experiment_ids": [], + "stage": null, + "favourite_for_user_ids": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/stories/291439709879423/config_1df0c706-8033-4500-a645-891bf5ade7c5.json b/examples/magento-storyblok/.storyblok/stories/291439709879423/config_1df0c706-8033-4500-a645-891bf5ade7c5.json new file mode 100644 index 00000000000..b104d7b8835 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/stories/291439709879423/config_1df0c706-8033-4500-a645-891bf5ade7c5.json @@ -0,0 +1,735 @@ +{ + "name": "Config", + "parent_id": 166894755562339, + "group_id": "f429f476-6d1d-4a49-94cf-b7797662c656", + "alternates": [], + "created_at": "2026-04-15T11:04:45.895Z", + "deleted_at": null, + "sort_by_date": null, + "tag_list": [], + "updated_at": "2026-04-24T12:59:46.350Z", + "published_at": "2026-04-24T12:59:46.336Z", + "id": 166139846260389, + "uuid": "1df0c706-8033-4500-a645-891bf5ade7c5", + "is_folder": false, + "content": { + "_uid": "23b1b663-b014-4188-9eed-d4686477019c", + "component": "global_config", + "copyright": "© GraphCommerce", + "legal_links": [ + { + "url": { + "id": "", + "url": "/terms-and-conditions", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/terms-and-conditions" + }, + "_uid": "e047ea37-6c9e-406e-99d6-d50738cfd83e", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "title": "Terms and conditions", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + } + }, + { + "url": { + "id": "", + "url": "/credits", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/credits" + }, + "_uid": "1503f8ad-afda-4593-a693-06e8e79255bf", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "title": "Credits", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + } + }, + { + "url": { + "id": "", + "url": "/newsletter", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/newsletter" + }, + "_uid": "d4353112-6920-4646-8cae-774dacdeea66", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "title": "Subscribe", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + } + }, + { + "url": { + "id": "", + "url": "/service/how-can-i-remove-my-account", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/service/how-can-i-remove-my-account" + }, + "_uid": "883a69c9-6f3b-4b0d-acf3-155fd6280e58", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "title": "Remove account", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + } + } + ], + "content_usps": [ + { + "url": { + "id": "", + "url": "/faq/shipping", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/faq/shipping" + }, + "_uid": "4b2fd961-1f69-4966-b0d8-3277a1c7890f", + "asset": { + "id": 168667931920555, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/32x32/3e8945853f/box-alt2.svg", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "title": "Free shipping", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Free shipping", + "type": "text", + "marks": [ + { + "type": "textStyle", + "attrs": { + "color": "" + } + } + ] + } + ] + } + ] + } + }, + { + "url": { + "id": "", + "url": "/faq/returns", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/faq/returns" + }, + "_uid": "a1182813-e7e5-42ec-9b64-f2c7ea3930d9", + "asset": { + "id": 168667931285671, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/32x32/f95b58e1b1/history.svg", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "title": "30 days return policy", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "30 days return policy", + "type": "text", + "marks": [ + { + "type": "textStyle", + "attrs": { + "color": "" + } + } + ] + } + ] + } + ] + } + }, + { + "url": { + "id": "", + "url": "/faq/shipping", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/faq/shipping" + }, + "_uid": "16c01509-2157-44b9-9bd2-ef3bd0e9c483", + "asset": { + "id": 168667931322537, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/32x32/ef296d40a4/calendar.svg", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "title": "Unlimited Next Day Delivery", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Unlimited Next Day Delivery", + "type": "text" + } + ] + } + ] + } + }, + { + "url": { + "id": "", + "url": "/faq/index", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/faq/index" + }, + "_uid": "a1be9d10-3536-4ff1-92ab-52dcd9e1385d", + "asset": { + "id": 168667931306152, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/32x32/c7bd733b0f/moon.svg", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "title": "Late night delivery", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Late night delivery", + "type": "text" + } + ] + } + ] + } + } + ], + "sidebar_usps": [ + { + "url": { + "id": "", + "url": "#", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "#" + }, + "_uid": "eb5f75db-49b4-4f8f-a78d-ee6621feea17", + "asset": { + "id": 168667931338922, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/17x12/301c668b95/icon_usp_check.svg", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "title": "Free returns within 30 days", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Free", + "type": "text", + "marks": [ + { + "type": "bold" + } + ] + }, + { + "text": " returns within ", + "type": "text" + }, + { + "text": "30", + "type": "text", + "marks": [ + { + "type": "bold" + } + ] + }, + { + "text": " days", + "type": "text" + } + ] + } + ] + } + }, + { + "url": { + "id": "", + "url": "#", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "#" + }, + "_uid": "987e9e43-cdd2-438c-8d32-c24e16289ab6", + "asset": { + "id": 168667931338922, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/17x12/301c668b95/icon_usp_check.svg", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "title": "Dispatched from and sold by GraphCommerce", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Dispatched from and sold by ", + "type": "text" + }, + { + "text": "GraphCommerce", + "type": "text", + "marks": [ + { + "type": "bold" + } + ] + } + ] + } + ] + } + }, + { + "url": { + "id": "", + "url": "#", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "#" + }, + "_uid": "fed645db-4acc-4c45-be7a-a5fbe22583af", + "asset": { + "id": 168667931338922, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/17x12/301c668b95/icon_usp_check.svg", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "title": "We ship over 15 thousand products around the world", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "We ship over ", + "type": "text" + }, + { + "text": "15 thousand", + "type": "text", + "marks": [ + { + "type": "bold" + } + ] + }, + { + "text": " products around ", + "type": "text" + }, + { + "text": "the world", + "type": "text", + "marks": [ + { + "type": "bold" + } + ] + } + ] + } + ] + } + } + ], + "social_links": [ + { + "url": { + "id": "", + "url": "/test", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/test" + }, + "_uid": "17bd26ac-1cc6-4867-b4d0-7c96d8de3d5f", + "asset": { + "id": 166151364457168, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/24x24/c305653f3f/facebook.svg", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "title": "Test", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "test", + "type": "text" + } + ] + } + ] + } + }, + { + "url": { + "id": "", + "url": "/test-2", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/test-2" + }, + "_uid": "436d5cf5-9be0-4be6-80be-c25cda402a0a", + "asset": { + "id": 166151364453071, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/24x24/6ee17f05da/linkedin.svg", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "title": "Test 2", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "bla", + "type": "text" + } + ] + } + ] + } + }, + { + "url": { + "id": "", + "url": "/test-3", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/test-3" + }, + "_uid": "c6a9255f-9263-4575-a5e5-a2167d8a6d08", + "asset": { + "id": 166151708812102, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/24x24/7302061d46/twitter.svg", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "title": "Test 3", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + } + }, + { + "url": { + "id": "", + "url": "/instagram", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/instagram" + }, + "_uid": "b68221a5-9d85-4bb7-8b1f-ee6b00c333ea", + "asset": { + "id": 166151708820295, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/24x24/8b0fbd16e5/instagram.svg", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "title": "Test 4", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + } + } + ] + }, + "published": true, + "slug": "config", + "path": "global-config", + "full_slug": "global/config", + "default_root": null, + "disble_fe_editor": false, + "disable_fe_editor": false, + "parent": { + "id": 166894755562339, + "uuid": "3ab97c2c-f556-4b28-9bd7-fa4ba02438e4", + "name": "Global", + "slug": "global", + "disble_fe_editor": false + }, + "is_startpage": false, + "unpublished_changes": false, + "meta_data": null, + "imported_at": null, + "preview_token": { + "token": "015137740df5483d6b9fcd0b4fabc067cd8fa8a7", + "timestamp": "1777036865" + }, + "pinned": false, + "breadcrumbs": [ + { + "id": 166894755562339, + "name": "Global", + "parent_id": null, + "disble_fe_editor": false, + "disable_fe_editor": false, + "path": null, + "slug": "global", + "translated_slugs": [] + } + ], + "publish_at": null, + "expire_at": null, + "first_published_at": "2026-04-15T11:44:42.622Z", + "last_author": { + "id": 159433391350340, + "userid": "info@reachdigital.nl", + "friendly_name": "Reach Digital" + }, + "last_author_id": 159433391350340, + "user_ids": [], + "space_role_ids": [], + "translated_slugs": [], + "localized_paths": [ + { + "path": "global/config", + "name": null, + "lang": "nl", + "published": null + } + ], + "position": -10, + "translated_stories": [], + "can_not_view": false, + "is_scheduled": null, + "scheduled_dates": null, + "ideas": [], + "current_version_id": 169353159881848, + "variant_type": null, + "experiment_ids": [], + "stage": null, + "favourite_for_user_ids": [] +} diff --git a/examples/magento-storyblok/.storyblok/stories/291439709879423/do-you-do-back-orders_e7adff63-901c-4cf9-9c11-06bb6c1f06ef.json b/examples/magento-storyblok/.storyblok/stories/291439709879423/do-you-do-back-orders_e7adff63-901c-4cf9-9c11-06bb6c1f06ef.json new file mode 100644 index 00000000000..9b97b2c8be3 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/stories/291439709879423/do-you-do-back-orders_e7adff63-901c-4cf9-9c11-06bb6c1f06ef.json @@ -0,0 +1,135 @@ +{ + "name": "Do you do back orders?", + "parent_id": 169314617677262, + "group_id": "767f50b0-5bc4-4285-876b-d580a0e75a37", + "alternates": [], + "created_at": "2026-04-24T12:10:59.369Z", + "deleted_at": null, + "sort_by_date": null, + "tag_list": [], + "updated_at": "2026-04-24T12:35:50.528Z", + "published_at": "2026-04-24T12:35:50.515Z", + "id": 169341171212636, + "uuid": "e7adff63-901c-4cf9-9c11-06bb6c1f06ef", + "is_folder": false, + "content": { + "_uid": "85135e87-04b1-4eab-a367-2b1065587808", + "body": [ + { + "_uid": "a56e347d-ba36-4d6d-85d7-c9f702870e51", + "col_one": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "No. Currently, we have a 'virtual' catalog. In order to ensure that our customers have access to the most current styles, prices, sizes, and overall selection, we do not publish a catalog that you may purchase directly from us. Plus, with all the styles that we carry, a catalog would be as big as a phone book! If there is a particular shoe or style of shoe that you are interested in, please feel free to contact us and we will be happy to help you locate it.", + "type": "text", + "marks": [ + { + "type": "textStyle", + "attrs": { + "color": "" + } + } + ] + } + ] + } + ] + }, + "variant": "Default", + "component": "row_column_one" + } + ], + "date": "", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "author": "", + "component": "page", + "meta_title": "Do you do back orders?", + "meta_robots": "INDEX_FOLLOW", + "related_pages": [], + "meta_description": "..." + }, + "published": true, + "slug": "do-you-do-back-orders", + "path": null, + "full_slug": "service/do-you-do-back-orders", + "default_root": null, + "disble_fe_editor": false, + "disable_fe_editor": false, + "parent": { + "id": 169314617677262, + "uuid": "c4b4a580-d22d-446d-86bf-7602bc091cc8", + "name": "Service", + "slug": "service", + "disble_fe_editor": false + }, + "is_startpage": false, + "unpublished_changes": false, + "meta_data": null, + "imported_at": null, + "preview_token": { + "token": "219504c5b73393ee0437847367b962c7041df720", + "timestamp": "1777036864" + }, + "pinned": false, + "breadcrumbs": [ + { + "id": 169314617677262, + "name": "Service", + "parent_id": null, + "disble_fe_editor": false, + "disable_fe_editor": false, + "path": null, + "slug": "service", + "translated_slugs": [] + } + ], + "publish_at": null, + "expire_at": null, + "first_published_at": "2026-04-24T12:11:51.388Z", + "last_author": { + "id": 159433391350340, + "userid": "info@reachdigital.nl", + "friendly_name": "Reach Digital" + }, + "last_author_id": 159433391350340, + "user_ids": [], + "space_role_ids": [], + "translated_slugs": [], + "localized_paths": [ + { + "path": "service/do-you-do-back-orders", + "name": null, + "lang": "nl", + "published": null + } + ], + "position": -50, + "translated_stories": [], + "can_not_view": false, + "is_scheduled": null, + "scheduled_dates": null, + "ideas": [], + "current_version_id": 169347278762782, + "variant_type": null, + "experiment_ids": [], + "stage": null, + "favourite_for_user_ids": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/stories/291439709879423/global_3ab97c2c-f556-4b28-9bd7-fa4ba02438e4.json b/examples/magento-storyblok/.storyblok/stories/291439709879423/global_3ab97c2c-f556-4b28-9bd7-fa4ba02438e4.json new file mode 100644 index 00000000000..7268b4c043a --- /dev/null +++ b/examples/magento-storyblok/.storyblok/stories/291439709879423/global_3ab97c2c-f556-4b28-9bd7-fa4ba02438e4.json @@ -0,0 +1,71 @@ +{ + "name": "Global", + "parent_id": null, + "group_id": "dd24ad95-8a25-4b60-9d67-f806f8ee659a", + "alternates": [], + "created_at": "2026-04-17T14:16:29.924Z", + "deleted_at": null, + "sort_by_date": null, + "tag_list": [], + "updated_at": "2026-04-17T14:16:29.924Z", + "published_at": null, + "id": 166894755562339, + "uuid": "3ab97c2c-f556-4b28-9bd7-fa4ba02438e4", + "is_folder": true, + "content": { + "content_types": [ + "page", + "global_config" + ], + "lock_subfolders_content_types": false + }, + "published": false, + "slug": "global", + "path": null, + "full_slug": "global", + "default_root": "page", + "disble_fe_editor": false, + "disable_fe_editor": false, + "parent": null, + "is_startpage": false, + "unpublished_changes": false, + "meta_data": null, + "imported_at": null, + "preview_token": { + "token": "015137740df5483d6b9fcd0b4fabc067cd8fa8a7", + "timestamp": "1777036865" + }, + "pinned": false, + "breadcrumbs": [], + "publish_at": null, + "expire_at": null, + "first_published_at": null, + "last_author": { + "id": 159433391350340, + "userid": "info@reachdigital.nl", + "friendly_name": "Reach Digital" + }, + "last_author_id": 159433391350340, + "user_ids": [], + "space_role_ids": [], + "translated_slugs": [], + "localized_paths": [ + { + "path": "global", + "name": null, + "lang": "nl", + "published": null + } + ], + "position": -30, + "translated_stories": [], + "can_not_view": false, + "is_scheduled": null, + "scheduled_dates": null, + "ideas": [], + "current_version_id": 166894755968790, + "variant_type": null, + "experiment_ids": [], + "stage": null, + "favourite_for_user_ids": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/stories/291439709879423/graphcommerce-collaborates-with-moma_abf89a5c-34f6-4703-800f-eee259cc7ca8.json b/examples/magento-storyblok/.storyblok/stories/291439709879423/graphcommerce-collaborates-with-moma_abf89a5c-34f6-4703-800f-eee259cc7ca8.json new file mode 100644 index 00000000000..1617f0df1ff --- /dev/null +++ b/examples/magento-storyblok/.storyblok/stories/291439709879423/graphcommerce-collaborates-with-moma_abf89a5c-34f6-4703-800f-eee259cc7ca8.json @@ -0,0 +1,228 @@ +{ + "name": "GraphCommerce® collaborates with Moma", + "parent_id": 167929327942297, + "group_id": "758644aa-8589-4cc5-82dc-414ed5eff300", + "alternates": [], + "created_at": "2026-04-20T12:27:15.104Z", + "deleted_at": null, + "sort_by_date": null, + "tag_list": [ + "Collaboration", + "News" + ], + "updated_at": "2026-04-24T12:35:32.741Z", + "published_at": "2026-04-24T12:35:32.729Z", + "id": 167929590217384, + "uuid": "abf89a5c-34f6-4703-800f-eee259cc7ca8", + "is_folder": false, + "content": { + "_uid": "cb0b311b-fa75-4f89-8828-373690b97580", + "body": [ + { + "_uid": "dd7edd6a-5aa1-4935-99aa-1bafffcdd9a1", + "content": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "We are thrilled to announce the launch of our new GraphCommerce sock print collection in collaboration with MoMA, The Museum of Modern Art. As a leading institution of modern and contemporary art, MoMA is dedicated to preserving and presenting works from the world's leading artists, designers, and thinkers.", + "type": "text" + } + ] + }, + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "This collaboration combines MoMA's passion for creativity and innovation with GraphCommerce's commitment to delivering high-quality and stylish socks. The result is a collection that features bold, colorful prints inspired by the works of some of the world's most famous artists, including Pablo Picasso, Frida Kahlo, and Vincent van Gogh.", + "type": "text" + } + ] + }, + { + "type": "blockquote", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "“Everyone should have some glam and glitter, and some punk, and some 60s in their life,” – MOMA", + "type": "text" + } + ] + } + ] + }, + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "We believe that everyone should have a little bit of glam, glitter, punk, and 60s in their life, which is why we've created a collection that incorporates elements of each of these styles. Our socks are designed to make a statement, whether you're wearing them to work or out on the town.", + "type": "text" + } + ] + }, + { + "type": "heading", + "attrs": { + "level": 2, + "textAlign": null + }, + "content": [ + { + "text": "Launching next week", + "type": "text" + } + ] + }, + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "The GraphCommerce and MoMA collaboration will launch this week, and we couldn't be more excited to share this new collection with the world. Whether you're an art lover, a fashionista, or just someone who appreciates the finer things in life, we're confident that you'll love our new sock print collection.", + "type": "text" + } + ] + }, + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "So why not add a little art to your everyday look and get ready to make a statement with the new GraphCommerce and MoMA sock print collection!", + "type": "text" + } + ] + }, + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "type": "image", + "attrs": { + "id": 167930523851889, + "alt": "", + "src": "https://a.storyblok.com/f/291439709879423/1920x1280/5add1a8225/sock-img.jpg", + "title": "", + "source": "", + "copyright": "", + "meta_data": {} + } + } + ] + } + ] + }, + "component": "row_blog_content" + } + ], + "date": "2023-02-02 00:00", + "asset": { + "id": 167930086280283, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/2159x1440/f50c4bfd9f/img-impression-iii-concert-wassily-kandinsky.jpg", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "author": "Erwin Otten", + "component": "page", + "meta_title": "..", + "meta_robots": "INDEX_FOLLOW", + "related_pages": [], + "meta_description": ".." + }, + "published": true, + "slug": "graphcommerce-collaborates-with-moma", + "path": null, + "full_slug": "blog/graphcommerce-collaborates-with-moma", + "default_root": null, + "disble_fe_editor": false, + "disable_fe_editor": false, + "parent": { + "id": 167929327942297, + "uuid": "eca8a55a-5970-43c1-992a-b89d58753a92", + "name": "Blog", + "slug": "blog", + "disble_fe_editor": false + }, + "is_startpage": false, + "unpublished_changes": false, + "meta_data": null, + "imported_at": null, + "preview_token": { + "token": "a7231897aabfa5b25fc5696f0547c0dffb8626a6", + "timestamp": "1777036866" + }, + "pinned": false, + "breadcrumbs": [ + { + "id": 167929327942297, + "name": "Blog", + "parent_id": null, + "disble_fe_editor": false, + "disable_fe_editor": false, + "path": null, + "slug": "blog", + "translated_slugs": [] + } + ], + "publish_at": null, + "expire_at": null, + "first_published_at": "2026-04-20T12:31:56.552Z", + "last_author": { + "id": 159433391350340, + "userid": "info@reachdigital.nl", + "friendly_name": "Reach Digital" + }, + "last_author_id": 159433391350340, + "user_ids": [], + "space_role_ids": [], + "translated_slugs": [], + "localized_paths": [ + { + "path": "blog/graphcommerce-collaborates-with-moma", + "name": null, + "lang": "nl", + "published": null + } + ], + "position": 0, + "translated_stories": [], + "can_not_view": false, + "is_scheduled": null, + "scheduled_dates": null, + "ideas": [], + "current_version_id": 169347205923500, + "variant_type": null, + "experiment_ids": [], + "stage": null, + "favourite_for_user_ids": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/stories/291439709879423/home_ec7b095a-b8cf-4435-a4cb-d3e0f224cbaa.json b/examples/magento-storyblok/.storyblok/stories/291439709879423/home_ec7b095a-b8cf-4435-a4cb-d3e0f224cbaa.json new file mode 100644 index 00000000000..a126976ec46 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/stories/291439709879423/home_ec7b095a-b8cf-4435-a4cb-d3e0f224cbaa.json @@ -0,0 +1,1284 @@ +{ + "name": "Home", + "parent_id": 0, + "group_id": "ab8617da-9d4b-4f48-93aa-3d21742d5d59", + "alternates": [], + "created_at": "2026-03-27T12:25:39.039Z", + "deleted_at": null, + "sort_by_date": null, + "tag_list": [], + "updated_at": "2026-04-24T12:34:36.509Z", + "published_at": "2026-04-24T12:34:36.495Z", + "id": 159435731136841, + "uuid": "ec7b095a-b8cf-4435-a4cb-d3e0f224cbaa", + "is_folder": false, + "content": { + "_uid": "91489e5d-2cd9-4557-8c0f-8c7ea4deb879", + "body": [ + { + "_uid": "c512a46c-cb26-4fed-8e05-6209cbe3b840", + "copy": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "A journey through creativity", + "type": "text" + } + ] + }, + { + "type": "heading", + "attrs": { + "level": 1, + "textAlign": null + }, + "content": [ + { + "text": "Discover", + "type": "text", + "marks": [ + { + "type": "bold" + } + ] + }, + { + "text": " beauty beyond boundaries.", + "type": "text" + } + ] + } + ] + }, + "asset": { + "id": 164355657721287, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/x/8626ecde54/homepage-hero-video.mp4", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "component": "row_hero_banner", + "page_links": [ + { + "url": { + "id": "", + "url": "/men/art", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/men/art" + }, + "_uid": "21e0d2ce-1556-41d2-8eda-a73f89712675", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "title": "Shop Art", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + } + } + ], + "copy__i18n__nl": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Rol je mouwen op", + "type": "text" + } + ] + }, + { + "type": "heading", + "attrs": { + "level": 1, + "textAlign": null + }, + "content": [ + { + "text": "Ontdek", + "type": "text", + "marks": [ + { + "type": "bold" + } + ] + }, + { + "text": " de kunstcollectie.", + "type": "text" + } + ] + } + ] + } + }, + { + "_uid": "92e31fac-826f-4426-a80b-26a886b8261f", + "copy": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + }, + "title": "Hot & New", + "variant": "ImageLabelSwiper", + "component": "row_links", + "page_links": [ + { + "url": { + "id": "", + "url": "/p/hot-kitten-gc-19-sock", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/p/hot-kitten-gc-19-sock" + }, + "_uid": "7d20d501-fe9a-4cd6-bf9f-63835aa92ba3", + "asset": { + "id": 165391341233436, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/x/d4aacc4d2a/watermelon.mp4", + "copyright": "", + "fieldtype": "asset", + "meta_data": { + "alt": "", + "title": "", + "source": "", + "copyright": "" + }, + "is_external_url": false + }, + "title": "Watermelon Sugar", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Juice Up Your Look", + "type": "text", + "marks": [ + { + "type": "textStyle", + "attrs": { + "color": "" + } + } + ] + } + ] + } + ] + } + }, + { + "url": { + "id": "", + "url": "/men/art", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/men/art" + }, + "_uid": "eb9ceafb-ecfc-44e1-8df5-667b103c5972", + "asset": { + "id": 165392005584238, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/800x1200/d93923c328/art.jpg", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "title": "Art", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "The ultimate expressions of individuality", + "type": "text", + "marks": [ + { + "type": "textStyle", + "attrs": { + "color": "" + } + } + ] + } + ] + } + ] + } + }, + { + "url": { + "id": "", + "url": "/service", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/service" + }, + "_uid": "c848b7cd-b6f3-4056-9c3e-df0d9914667f", + "asset": { + "id": 165401986736069, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/x/434331495a/pexels-ron-lach-9594574.mp4", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "title": "Seamless service", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Prepare to get your socks knocked off", + "type": "text", + "marks": [ + { + "type": "textStyle", + "attrs": { + "color": "" + } + } + ] + } + ] + } + ] + } + }, + { + "url": { + "id": "", + "url": "/p/super-nummy-gc-74-sock", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/p/super-nummy-gc-74-sock" + }, + "_uid": "354aed70-c1f1-4512-9be3-dde6df900359", + "asset": { + "id": 165401986908104, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/800x1200/2f58cb5a61/chromo.jpg", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "title": "Black & White", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Celebrate the timeless beauty of monochrome fashion", + "type": "text", + "marks": [ + { + "type": "textStyle", + "attrs": { + "color": "" + } + } + ] + } + ] + } + ] + } + }, + { + "url": { + "id": "", + "url": "/men/70s", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/men/70s" + }, + "_uid": "4ec93d7a-e3d9-47f1-91f8-c08852d98db2", + "asset": { + "id": 165401986895815, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/800x1200/42ff148d93/70s.jpg", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "title": "70's", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Tie-dye your way to groovy fashion", + "type": "text", + "marks": [ + { + "type": "textStyle", + "attrs": { + "color": "" + } + } + ] + } + ] + } + ] + } + }, + { + "url": { + "id": "", + "url": "/p/wearing-my-pjs-gc-226-sock", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/p/wearing-my-pjs-gc-226-sock" + }, + "_uid": "0b517d93-e95b-436d-92cd-582ed719a5f3", + "asset": { + "id": 165401986854854, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/800x1200/74bb012722/special.jpg", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "title": "Special occasions", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Get ready to dazzle with impeccable taste", + "type": "text", + "marks": [ + { + "type": "textStyle", + "attrs": { + "color": "" + } + } + ] + } + ] + } + ] + } + }, + { + "url": { + "id": "", + "url": "/women/business", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/women/business" + }, + "_uid": "00ae68f6-a1e7-40ec-b18b-1cc6da814080", + "asset": { + "id": 165401986969545, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/800x1200/92e9fef97a/modest.jpg", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "title": "Modest", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Have a 'sole'-ful celebration", + "type": "text", + "marks": [ + { + "type": "textStyle", + "attrs": { + "color": "" + } + } + ] + } + ] + } + ] + } + } + ] + }, + { + "_uid": "16a507c5-3979-426e-86cd-26a36367b3ea", + "copy": { + "type": "doc", + "content": [ + { + "type": "heading", + "attrs": { + "level": 2, + "textAlign": null + }, + "content": [ + { + "text": "Impressionists", + "type": "text", + "marks": [ + { + "type": "bold" + } + ] + }, + { + "text": " and modern ", + "type": "text" + }, + { + "text": "masters", + "type": "text", + "marks": [ + { + "type": "bold" + } + ] + } + ] + } + ] + }, + "asset": { + "id": 166901094202372, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/1532x1678/8ef6fa232a/a-peek-into-history.jpg", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "topic": "A peek into history", + "component": "row_special_banner", + "page_links": [ + { + "url": { + "id": "", + "url": "/men/art", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/men/art" + }, + "_uid": "e1790aef-ea80-4b28-9c59-48d8c9bbc858", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "title": "A complete collection", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + } + } + ] + }, + { + "_uid": "e2da105b-dc2c-4313-91b4-d949fc18e250", + "copy": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + }, + "title": "Brands", + "variant": "LogoSwiper", + "component": "row_links", + "page_links": [ + { + "url": { + "id": "", + "url": "/", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/" + }, + "_uid": "522d6f36-260b-41d2-bad2-3a1f2a97e8a2", + "asset": { + "id": 166902519180433, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/209x53/cf3773fb53/moma.svg", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "title": "Moma", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + } + }, + { + "url": { + "id": "", + "url": "/", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/" + }, + "_uid": "f111f1ea-6c9b-4ff1-8eaf-21b1c739163b", + "asset": { + "id": 166902519159950, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/1000x356/874f974f07/nike.svg", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "title": "Nike", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + } + }, + { + "url": { + "id": "", + "url": "/", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/" + }, + "_uid": "15bdb3de-074f-4ebf-8945-999f5344d604", + "asset": { + "id": 166902519164047, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/296x238/2100fd6392/mcd.svg", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "title": "McDonalds", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + } + }, + { + "url": { + "id": "", + "url": "/", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/" + }, + "_uid": "ae4cd391-7401-467a-9bc6-28cf2d89808f", + "asset": { + "id": 166902519172240, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/1001x403/4b68e140fc/marvel.svg", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "title": "Marvel", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + } + } + ] + }, + { + "_uid": "b980a253-e340-45b9-912d-387ff11f51cd", + "quote": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Whether you're looking for something stylish for a night time party with friends or something professional for a conference call in the boardroom, GraphCommerce has you covered with socks that are both comfortable and versatile. So why settle for boring and plain socks when you can upgrade your footwear game?", + "type": "text", + "marks": [ + { + "type": "textStyle", + "attrs": { + "color": "" + } + } + ] + } + ] + } + ] + }, + "component": "row_quote" + }, + { + "_uid": "41ff7f7a-75a2-45c7-a78b-5e4fe04bb5a1", + "asset": { + "id": 166903246589130, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/1192x1589/fa3215e60f/backstory.jpg", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "title": "Home Product Backstory", + "variant": "Backstory", + "component": "row_product", + "page_links": [], + "product_copy": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Once upon a time, in a world where art and fashion collided, there lived a small team of designers who dreamed of creating the most unique and intricate sock designs. They took inspiration from modern art and combined it with traditional patterns to create one-of-a-kind prints.", + "type": "text", + "marks": [ + { + "type": "textStyle", + "attrs": { + "color": "" + } + } + ] + } + ] + } + ] + }, + "magento_category_id": "", + "magento_product_skus": "GC-40-SOCK" + }, + { + "_uid": "86217c6b-3d16-4a21-af2a-f86ed85014eb", + "copy": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + }, + "title": "Customer service", + "variant": "Inline", + "component": "row_links", + "page_links": [ + { + "url": { + "id": "", + "url": "/service/order", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/service/order" + }, + "_uid": "c51c62dd-a795-4fde-b280-2c580fda81e6", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "title": "Order", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + } + }, + { + "url": { + "id": "", + "url": "/service/brands-and-sizes", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/service/brands-and-sizes" + }, + "_uid": "489ea008-8373-438b-8711-c3182ae546da", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "title": "Brand/Sizes", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + } + }, + { + "url": { + "id": "", + "url": "/service/newsletter", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/service/newsletter" + }, + "_uid": "fd35760e-e8c5-4b31-a528-c62c88253eb6", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "title": "Newsletter", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + } + }, + { + "url": { + "id": "", + "url": "/service/payment-information", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/service/payment-information" + }, + "_uid": "6f8e9b6b-7d67-4ffa-a489-a76163ae7d66", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "title": "Payment Information", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + } + }, + { + "url": { + "id": "", + "url": "/service/returns", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/service/returns" + }, + "_uid": "be3e4bca-3927-4752-bf3f-104c806fd5a5", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "title": "Returns", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + } + }, + { + "url": { + "id": "", + "url": "/service/shipping", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "/service/shipping" + }, + "_uid": "6778d26e-425a-477c-a78a-bf7f964426a3", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "title": "Shipping", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + } + } + ] + }, + { + "_uid": "d459f7db-bfa8-415a-ab54-bef4d1d1fd0e", + "copy": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + }, + "title": "About Us", + "variant": "Inline", + "component": "row_links", + "page_links": [ + { + "url": { + "id": "", + "url": "#", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "#" + }, + "_uid": "37c3869e-c32e-4b0c-ac3e-0fa3bab03641", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "title": "Contact", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + } + }, + { + "url": { + "id": "", + "url": "#", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "#" + }, + "_uid": "2f8c81bb-05db-4ada-9af8-558d5ecd4080", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "title": "Careers", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + } + }, + { + "url": { + "id": "", + "url": "#", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "#" + }, + "_uid": "18df6d87-963e-4a92-8fac-4adfd50c4aec", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "title": "About Us", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + } + }, + { + "url": { + "id": "", + "url": "#", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "#" + }, + "_uid": "1b0309c4-237b-45db-9da5-7cc9447ec2cd", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "title": "Loyalty program", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + } + }, + { + "url": { + "id": "", + "url": "#", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "#" + }, + "_uid": "1ba98498-ef98-4974-896c-669c37493d4d", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "title": " Corporate responsibility", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + } + } + ] + } + ], + "date": "", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "author": "", + "component": "page", + "meta_title": "", + "meta_robots": "INDEX_FOLLOW", + "related_pages": [], + "meta_description": "" + }, + "published": true, + "slug": "home", + "path": "/", + "full_slug": "home", + "default_root": null, + "disble_fe_editor": false, + "disable_fe_editor": false, + "parent": null, + "is_startpage": false, + "unpublished_changes": false, + "meta_data": null, + "imported_at": null, + "preview_token": { + "token": "a7231897aabfa5b25fc5696f0547c0dffb8626a6", + "timestamp": "1777036866" + }, + "pinned": false, + "breadcrumbs": [], + "publish_at": null, + "expire_at": null, + "first_published_at": "2026-03-30T12:46:26.993Z", + "last_author": { + "id": 159433391350340, + "userid": "info@reachdigital.nl", + "friendly_name": "Reach Digital" + }, + "last_author_id": 159433391350340, + "user_ids": [], + "space_role_ids": [], + "translated_slugs": [], + "localized_paths": [ + { + "path": "home", + "name": null, + "lang": "nl", + "published": null + } + ], + "position": 0, + "translated_stories": [], + "can_not_view": false, + "is_scheduled": null, + "scheduled_dates": null, + "ideas": [], + "current_version_id": 169346975568252, + "variant_type": null, + "experiment_ids": [], + "stage": null, + "favourite_for_user_ids": [] +} diff --git a/examples/magento-storyblok/.storyblok/stories/291439709879423/manifest.jsonl b/examples/magento-storyblok/.storyblok/stories/291439709879423/manifest.jsonl new file mode 100644 index 00000000000..a29662ec2ba --- /dev/null +++ b/examples/magento-storyblok/.storyblok/stories/291439709879423/manifest.jsonl @@ -0,0 +1,72 @@ +{"old_id":"eca8a55a-5970-43c1-992a-b89d58753a92","new_id":"f54a318c-383e-468a-b866-6977b2c28534","created_at":"2026-04-23T12:52:11.520Z"} +{"old_id":167929327942297,"new_id":168997402631573,"created_at":"2026-04-23T12:52:11.520Z"} +{"old_id":"3ab97c2c-f556-4b28-9bd7-fa4ba02438e4","new_id":"20c17ac2-e43b-4796-aca3-7b251b2b9b0b","created_at":"2026-04-23T12:52:11.679Z"} +{"old_id":166894755562339,"new_id":168997403303319,"created_at":"2026-04-23T12:52:11.679Z"} +{"old_id":"ec7b095a-b8cf-4435-a4cb-d3e0f224cbaa","new_id":"b45eb95c-c42c-4744-9a74-528bd198c90a","created_at":"2026-04-23T12:52:11.682Z"} +{"old_id":159435731136841,"new_id":168995599394321,"created_at":"2026-04-23T12:52:11.682Z"} +{"old_id":"5e586825-bf76-4690-8434-6345d1a8bf41","new_id":"9717691b-ef6a-44b0-9a51-43f9cfc85025","created_at":"2026-04-23T12:52:11.858Z"} +{"old_id":167931502567675,"new_id":168997404032409,"created_at":"2026-04-23T12:52:11.858Z"} +{"old_id":"688136b8-109e-495e-b17f-c443d767fdf1","new_id":"4b48bbe5-53f8-4514-a4e2-f0ed196cb036","created_at":"2026-04-23T12:52:12.079Z"} +{"old_id":159449780521670,"new_id":168997404761498,"created_at":"2026-04-23T12:52:12.079Z"} +{"old_id":"736133b3-83d8-413a-a051-6ba4c602ee26","new_id":"0125e5a2-49b5-40b8-867c-fc94a80ff0ae","created_at":"2026-04-23T12:52:12.255Z"} +{"old_id":168648315289604,"new_id":168997405601180,"created_at":"2026-04-23T12:52:12.255Z"} +{"old_id":"1df0c706-8033-4500-a645-891bf5ade7c5","new_id":"3dbfbe1d-e07b-4d3b-94aa-0f218f40272f","created_at":"2026-04-23T12:52:12.461Z"} +{"old_id":166139846260389,"new_id":168997406453150,"created_at":"2026-04-23T12:52:12.461Z"} +{"old_id":"abf89a5c-34f6-4703-800f-eee259cc7ca8","new_id":"7af5c051-6224-4648-971e-e8e3409cab0f","created_at":"2026-04-23T12:52:12.569Z"} +{"old_id":167929590217384,"new_id":168997406846369,"created_at":"2026-04-23T12:52:12.569Z"} +{"old_id":"41d3c30b-1195-45e9-aba9-6210bfbd0ad2","new_id":"063a9bd9-7202-4734-8ebf-fed7189aeb06","created_at":"2026-04-23T12:52:12.727Z"} +{"old_id":166807462157014,"new_id":168997407559075,"created_at":"2026-04-23T12:52:12.727Z"} +{"old_id":"9a740532-b5a7-4b2e-84e2-fe348f1df294","new_id":"c98fe806-d8d4-4ed9-be4b-ff0c4bcc4b28","created_at":"2026-04-23T12:52:12.916Z"} +{"old_id":168650132245886,"new_id":168997408292260,"created_at":"2026-04-23T12:52:12.916Z"} +{"old_id":"eca8a55a-5970-43c1-992a-b89d58753a92","new_id":"4f5745e0-7e7d-42e2-9b9a-27beb46c0687","created_at":"2026-04-23T13:58:32.792Z"} +{"old_id":167929327942297,"new_id":169013708740486,"created_at":"2026-04-23T13:58:32.792Z"} +{"old_id":"3ab97c2c-f556-4b28-9bd7-fa4ba02438e4","new_id":"99b81719-5c2e-4e75-9d43-2e851324980e","created_at":"2026-04-23T13:58:33.316Z"} +{"old_id":166894755562339,"new_id":169013711505287,"created_at":"2026-04-23T13:58:33.316Z"} +{"old_id":"ec7b095a-b8cf-4435-a4cb-d3e0f224cbaa","new_id":"f43abb36-e470-478c-9f9e-aa65958c6f9d","created_at":"2026-04-23T13:58:33.318Z"} +{"old_id":159435731136841,"new_id":169011873424515,"created_at":"2026-04-23T13:58:33.318Z"} +{"old_id":"5e586825-bf76-4690-8434-6345d1a8bf41","new_id":"2961666c-1177-452e-a71e-dd2e0ce1a60f","created_at":"2026-04-23T13:58:33.590Z"} +{"old_id":167931502567675,"new_id":169013712758664,"created_at":"2026-04-23T13:58:33.590Z"} +{"old_id":"688136b8-109e-495e-b17f-c443d767fdf1","new_id":"3542ebdf-77b6-4e1d-999d-b100aac8619f","created_at":"2026-04-23T13:58:33.720Z"} +{"old_id":159449780521670,"new_id":169013713450889,"created_at":"2026-04-23T13:58:33.720Z"} +{"old_id":"736133b3-83d8-413a-a051-6ba4c602ee26","new_id":"a1fe90b6-0338-45c6-a151-c4990218a7be","created_at":"2026-04-23T13:58:34.039Z"} +{"old_id":168648315289604,"new_id":169013714462602,"created_at":"2026-04-23T13:58:34.039Z"} +{"old_id":"1df0c706-8033-4500-a645-891bf5ade7c5","new_id":"3b573c23-642b-449b-a10f-418cfa439d86","created_at":"2026-04-23T13:58:34.077Z"} +{"old_id":166139846260389,"new_id":169013715044236,"created_at":"2026-04-23T13:58:34.077Z"} +{"old_id":"abf89a5c-34f6-4703-800f-eee259cc7ca8","new_id":"b4401b5a-acd9-40ae-8c6c-1d38c6d3e388","created_at":"2026-04-23T13:58:34.522Z"} +{"old_id":167929590217384,"new_id":169013716641679,"created_at":"2026-04-23T13:58:34.522Z"} +{"old_id":"41d3c30b-1195-45e9-aba9-6210bfbd0ad2","new_id":"9e42005a-1fe8-4dc5-bd8b-4bec2e8a1165","created_at":"2026-04-23T13:58:34.529Z"} +{"old_id":166807462157014,"new_id":169013716502414,"created_at":"2026-04-23T13:58:34.529Z"} +{"old_id":"9a740532-b5a7-4b2e-84e2-fe348f1df294","new_id":"87fd6953-5c87-4fd4-aba5-99ede82d8f71","created_at":"2026-04-23T13:58:34.786Z"} +{"old_id":168650132245886,"new_id":169013717407632,"created_at":"2026-04-23T13:58:34.786Z"} +{"old_id":"eca8a55a-5970-43c1-992a-b89d58753a92","new_id":"eca8a55a-5970-43c1-992a-b89d58753a92","created_at":"2026-04-24T14:37:44.586Z"} +{"old_id":"3ab97c2c-f556-4b28-9bd7-fa4ba02438e4","new_id":"3ab97c2c-f556-4b28-9bd7-fa4ba02438e4","created_at":"2026-04-24T14:37:44.587Z"} +{"old_id":"c4b4a580-d22d-446d-86bf-7602bc091cc8","new_id":"c4b4a580-d22d-446d-86bf-7602bc091cc8","created_at":"2026-04-24T14:37:44.587Z"} +{"old_id":167929327942297,"new_id":167929327942297,"created_at":"2026-04-24T14:37:44.586Z"} +{"old_id":166894755562339,"new_id":166894755562339,"created_at":"2026-04-24T14:37:44.587Z"} +{"old_id":169314617677262,"new_id":169314617677262,"created_at":"2026-04-24T14:37:44.587Z"} +{"old_id":"5e586825-bf76-4690-8434-6345d1a8bf41","new_id":"5e586825-bf76-4690-8434-6345d1a8bf41","created_at":"2026-04-24T14:37:44.588Z"} +{"old_id":"ec7b095a-b8cf-4435-a4cb-d3e0f224cbaa","new_id":"ec7b095a-b8cf-4435-a4cb-d3e0f224cbaa","created_at":"2026-04-24T14:37:44.588Z"} +{"old_id":"688136b8-109e-495e-b17f-c443d767fdf1","new_id":"688136b8-109e-495e-b17f-c443d767fdf1","created_at":"2026-04-24T14:37:44.588Z"} +{"old_id":"ebf9c70c-6361-4e67-9071-14bbbbef3e09","new_id":"ebf9c70c-6361-4e67-9071-14bbbbef3e09","created_at":"2026-04-24T14:37:44.588Z"} +{"old_id":167931502567675,"new_id":167931502567675,"created_at":"2026-04-24T14:37:44.588Z"} +{"old_id":159435731136841,"new_id":159435731136841,"created_at":"2026-04-24T14:37:44.588Z"} +{"old_id":159449780521670,"new_id":159449780521670,"created_at":"2026-04-24T14:37:44.588Z"} +{"old_id":169314789008864,"new_id":169314789008864,"created_at":"2026-04-24T14:37:44.588Z"} +{"old_id":"736133b3-83d8-413a-a051-6ba4c602ee26","new_id":"736133b3-83d8-413a-a051-6ba4c602ee26","created_at":"2026-04-24T14:37:44.589Z"} +{"old_id":"751c2493-3834-4372-9c18-5e6c09cef411","new_id":"751c2493-3834-4372-9c18-5e6c09cef411","created_at":"2026-04-24T14:37:44.589Z"} +{"old_id":"1df0c706-8033-4500-a645-891bf5ade7c5","new_id":"1df0c706-8033-4500-a645-891bf5ade7c5","created_at":"2026-04-24T14:37:44.589Z"} +{"old_id":"79168ea2-a90e-4c9e-bac1-ec30ecdbfade","new_id":"79168ea2-a90e-4c9e-bac1-ec30ecdbfade","created_at":"2026-04-24T14:37:44.589Z"} +{"old_id":"e7adff63-901c-4cf9-9c11-06bb6c1f06ef","new_id":"e7adff63-901c-4cf9-9c11-06bb6c1f06ef","created_at":"2026-04-24T14:37:44.589Z"} +{"old_id":"41d3c30b-1195-45e9-aba9-6210bfbd0ad2","new_id":"41d3c30b-1195-45e9-aba9-6210bfbd0ad2","created_at":"2026-04-24T14:37:44.589Z"} +{"old_id":"abf89a5c-34f6-4703-800f-eee259cc7ca8","new_id":"abf89a5c-34f6-4703-800f-eee259cc7ca8","created_at":"2026-04-24T14:37:44.589Z"} +{"old_id":"1f0e6b93-5795-49f7-b028-e33e0f55e71a","new_id":"1f0e6b93-5795-49f7-b028-e33e0f55e71a","created_at":"2026-04-24T14:37:44.589Z"} +{"old_id":"9a740532-b5a7-4b2e-84e2-fe348f1df294","new_id":"9a740532-b5a7-4b2e-84e2-fe348f1df294","created_at":"2026-04-24T14:37:44.589Z"} +{"old_id":168648315289604,"new_id":168648315289604,"created_at":"2026-04-24T14:37:44.589Z"} +{"old_id":169342085974919,"new_id":169342085974919,"created_at":"2026-04-24T14:37:44.589Z"} +{"old_id":166139846260389,"new_id":166139846260389,"created_at":"2026-04-24T14:37:44.589Z"} +{"old_id":169340482886708,"new_id":169340482886708,"created_at":"2026-04-24T14:37:44.589Z"} +{"old_id":169341171212636,"new_id":169341171212636,"created_at":"2026-04-24T14:37:44.589Z"} +{"old_id":166807462157014,"new_id":166807462157014,"created_at":"2026-04-24T14:37:44.589Z"} +{"old_id":167929590217384,"new_id":167929590217384,"created_at":"2026-04-24T14:37:44.589Z"} +{"old_id":169340738651521,"new_id":169340738651521,"created_at":"2026-04-24T14:37:44.589Z"} +{"old_id":168650132245886,"new_id":168650132245886,"created_at":"2026-04-24T14:37:44.589Z"} diff --git a/examples/magento-storyblok/.storyblok/stories/291439709879423/order_79168ea2-a90e-4c9e-bac1-ec30ecdbfade.json b/examples/magento-storyblok/.storyblok/stories/291439709879423/order_79168ea2-a90e-4c9e-bac1-ec30ecdbfade.json new file mode 100644 index 00000000000..3cd3bc9f9be --- /dev/null +++ b/examples/magento-storyblok/.storyblok/stories/291439709879423/order_79168ea2-a90e-4c9e-bac1-ec30ecdbfade.json @@ -0,0 +1,134 @@ +{ + "name": "Order", + "parent_id": 169314617677262, + "group_id": "9a90dc9a-21a7-4ddb-a621-1bd7150296ef", + "alternates": [], + "created_at": "2026-04-24T12:08:11.318Z", + "deleted_at": null, + "sort_by_date": null, + "tag_list": [], + "updated_at": "2026-04-24T12:35:59.628Z", + "published_at": "2026-04-24T12:35:59.613Z", + "id": 169340482886708, + "uuid": "79168ea2-a90e-4c9e-bac1-ec30ecdbfade", + "is_folder": false, + "content": { + "_uid": "ac147dbf-7e46-4273-ac94-2eb38791319e", + "body": [ + { + "_uid": "254903be-20b8-4b6a-ba2e-e08721d1829a", + "links": [ + { + "_uid": "93ec1757-4177-402e-9a60-1b241807d7a8", + "target": { + "id": "1f0e6b93-5795-49f7-b028-e33e0f55e71a", + "url": "", + "linktype": "story", + "fieldtype": "multilink", + "cached_url": "service/what-can-cause-my-order-to-be-delayed" + }, + "component": "link_item" + }, + { + "_uid": "0fb079e4-90c3-466b-8cc1-8c11f6221c30", + "target": { + "id": "e7adff63-901c-4cf9-9c11-06bb6c1f06ef", + "url": "", + "linktype": "story", + "fieldtype": "multilink", + "cached_url": "service/do-you-do-back-orders" + }, + "component": "link_item" + } + ], + "title": "Order FAQs", + "component": "row_button_link_list" + } + ], + "date": "", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "author": "", + "component": "page", + "meta_title": "Order - GraphCommerce Customer Service", + "meta_robots": "INDEX_FOLLOW", + "related_pages": [], + "meta_description": "" + }, + "published": true, + "slug": "order", + "path": null, + "full_slug": "service/order", + "default_root": null, + "disble_fe_editor": false, + "disable_fe_editor": false, + "parent": { + "id": 169314617677262, + "uuid": "c4b4a580-d22d-446d-86bf-7602bc091cc8", + "name": "Service", + "slug": "service", + "disble_fe_editor": false + }, + "is_startpage": false, + "unpublished_changes": false, + "meta_data": null, + "imported_at": null, + "preview_token": { + "token": "015137740df5483d6b9fcd0b4fabc067cd8fa8a7", + "timestamp": "1777036865" + }, + "pinned": false, + "breadcrumbs": [ + { + "id": 169314617677262, + "name": "Service", + "parent_id": null, + "disble_fe_editor": false, + "disable_fe_editor": false, + "path": null, + "slug": "service", + "translated_slugs": [] + } + ], + "publish_at": null, + "expire_at": null, + "first_published_at": "2026-04-24T12:09:00.607Z", + "last_author": { + "id": 159433391350340, + "userid": "info@reachdigital.nl", + "friendly_name": "Reach Digital" + }, + "last_author_id": 159433391350340, + "user_ids": [], + "space_role_ids": [], + "translated_slugs": [], + "localized_paths": [ + { + "path": "service/order", + "name": null, + "lang": "nl", + "published": null + } + ], + "position": -10, + "translated_stories": [], + "can_not_view": false, + "is_scheduled": null, + "scheduled_dates": null, + "ideas": [], + "current_version_id": 169347316015965, + "variant_type": null, + "experiment_ids": [], + "stage": null, + "favourite_for_user_ids": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/stories/291439709879423/pdp_41d3c30b-1195-45e9-aba9-6210bfbd0ad2.json b/examples/magento-storyblok/.storyblok/stories/291439709879423/pdp_41d3c30b-1195-45e9-aba9-6210bfbd0ad2.json new file mode 100644 index 00000000000..56737daf342 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/stories/291439709879423/pdp_41d3c30b-1195-45e9-aba9-6210bfbd0ad2.json @@ -0,0 +1,305 @@ +{ + "name": "PDP", + "parent_id": 166894755562339, + "group_id": "c104fd64-afb8-4938-917b-0db61a1863d9", + "alternates": [], + "created_at": "2026-04-17T08:21:18.058Z", + "deleted_at": null, + "sort_by_date": null, + "tag_list": [], + "updated_at": "2026-04-24T12:59:57.761Z", + "published_at": "2026-04-24T12:59:57.741Z", + "id": 166807462157014, + "uuid": "41d3c30b-1195-45e9-aba9-6210bfbd0ad2", + "is_folder": false, + "content": { + "_uid": "1fac5a3c-d4c5-4920-a392-274e71c4e54d", + "body": [ + { + "_uid": "144f773c-291c-4cbb-8f59-587f709674a6", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "title": "The perfect gift", + "variant": "Feature", + "component": "row_pdp", + "product_copy": { + "type": "doc", + "content": [ + { + "type": "heading", + "attrs": { + "level": 2, + "textAlign": null + }, + "content": [ + { + "text": "Surprise your loved ones", + "type": "text" + } + ] + }, + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec luctus turpis ex, ut placerat enim vestibulum quis. Aliquam finibus accumsan eros, vitae commodo tellus molestie a. Aliquam fringilla in lectus in blandit. Quisque placerat pellentesque orci, et tincidunt nisl fringilla non.", + "type": "text" + } + ] + } + ] + } + }, + { + "_uid": "b05bc1c8-16b8-46d1-98dc-1a7900216646", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "title": "Product Specifications", + "variant": "Specs", + "component": "row_pdp", + "product_copy": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + } + }, + { + "_uid": "150cd208-1034-4f9a-8e9b-251695ed7662", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "title": "About our environmental impact", + "variant": "FeatureBoxed", + "component": "row_pdp", + "product_copy": { + "type": "doc", + "content": [ + { + "type": "heading", + "attrs": { + "level": 2, + "textAlign": null + }, + "content": [ + { + "text": "Color to Dye for", + "type": "text" + } + ] + }, + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Every pair of our socks is a statement for a more colorful, fairer and more ecological world. How do we do it? By making our socks from organic cotton and by avoiding any toxins when dyeing the yarns. But we go beyond just our socks: even our packaging and our hangers are biodegradable.", + "type": "text" + } + ] + } + ] + } + }, + { + "_uid": "852da94d-2056-4265-a28f-d76e2caf15ab", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "title": "Reviews", + "variant": "Reviews", + "component": "row_pdp", + "product_copy": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + } + }, + { + "_uid": "b732fbe4-d499-4ac8-a295-c4ed5a308d64", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "title": "Looking for a better fit?", + "variant": "Upsells", + "component": "row_pdp", + "product_copy": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + } + }, + { + "_uid": "9588e2c8-e0a3-4fae-83cd-443f48e67154", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "title": "More like this", + "variant": "Related", + "component": "row_pdp", + "product_copy": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + } + } + ], + "date": "", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "author": "", + "component": "page", + "meta_title": "", + "meta_robots": "INDEX_FOLLOW", + "related_pages": [], + "meta_description": "" + }, + "published": true, + "slug": "pdp", + "path": "p/fuzzy-unibrow-gc-1114-sock", + "full_slug": "global/pdp", + "default_root": null, + "disble_fe_editor": false, + "disable_fe_editor": false, + "parent": { + "id": 166894755562339, + "uuid": "3ab97c2c-f556-4b28-9bd7-fa4ba02438e4", + "name": "Global", + "slug": "global", + "disble_fe_editor": false + }, + "is_startpage": false, + "unpublished_changes": false, + "meta_data": null, + "imported_at": null, + "preview_token": { + "token": "015137740df5483d6b9fcd0b4fabc067cd8fa8a7", + "timestamp": "1777036865" + }, + "pinned": false, + "breadcrumbs": [ + { + "id": 166894755562339, + "name": "Global", + "parent_id": null, + "disble_fe_editor": false, + "disable_fe_editor": false, + "path": null, + "slug": "global", + "translated_slugs": [] + } + ], + "publish_at": null, + "expire_at": null, + "first_published_at": "2026-04-17T08:50:33.774Z", + "last_author": { + "id": 159433391350340, + "userid": "info@reachdigital.nl", + "friendly_name": "Reach Digital" + }, + "last_author_id": 159433391350340, + "user_ids": [], + "space_role_ids": [], + "translated_slugs": [], + "localized_paths": [ + { + "path": "global/pdp", + "name": null, + "lang": "nl", + "published": null + } + ], + "position": -20, + "translated_stories": [], + "can_not_view": false, + "is_scheduled": null, + "scheduled_dates": null, + "ideas": [], + "current_version_id": 169353206572203, + "variant_type": null, + "experiment_ids": [], + "stage": null, + "favourite_for_user_ids": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/stories/291439709879423/service_c4b4a580-d22d-446d-86bf-7602bc091cc8.json b/examples/magento-storyblok/.storyblok/stories/291439709879423/service_c4b4a580-d22d-446d-86bf-7602bc091cc8.json new file mode 100644 index 00000000000..ee3a823177c --- /dev/null +++ b/examples/magento-storyblok/.storyblok/stories/291439709879423/service_c4b4a580-d22d-446d-86bf-7602bc091cc8.json @@ -0,0 +1,68 @@ +{ + "name": "Service", + "parent_id": null, + "group_id": "5f9fcb51-7008-4454-a60a-1432bf98fdba", + "alternates": [], + "created_at": "2026-04-24T10:22:56.572Z", + "deleted_at": null, + "sort_by_date": null, + "tag_list": [], + "updated_at": "2026-04-24T10:22:56.572Z", + "published_at": null, + "id": 169314617677262, + "uuid": "c4b4a580-d22d-446d-86bf-7602bc091cc8", + "is_folder": true, + "content": { + "content_types": [], + "lock_subfolders_content_types": false + }, + "published": false, + "slug": "service", + "path": null, + "full_slug": "service", + "default_root": "page", + "disble_fe_editor": false, + "disable_fe_editor": false, + "parent": null, + "is_startpage": false, + "unpublished_changes": false, + "meta_data": null, + "imported_at": null, + "preview_token": { + "token": "219504c5b73393ee0437847367b962c7041df720", + "timestamp": "1777036864" + }, + "pinned": false, + "breadcrumbs": [], + "publish_at": null, + "expire_at": null, + "first_published_at": null, + "last_author": { + "id": 159433391350340, + "userid": "info@reachdigital.nl", + "friendly_name": "Reach Digital" + }, + "last_author_id": 159433391350340, + "user_ids": [], + "space_role_ids": [], + "translated_slugs": [], + "localized_paths": [ + { + "path": "service", + "name": null, + "lang": "nl", + "published": null + } + ], + "position": -50, + "translated_stories": [], + "can_not_view": false, + "is_scheduled": null, + "scheduled_dates": null, + "ideas": [], + "current_version_id": 169314617807504, + "variant_type": null, + "experiment_ids": [], + "stage": null, + "favourite_for_user_ids": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/stories/291439709879423/service_ebf9c70c-6361-4e67-9071-14bbbbef3e09.json b/examples/magento-storyblok/.storyblok/stories/291439709879423/service_ebf9c70c-6361-4e67-9071-14bbbbef3e09.json new file mode 100644 index 00000000000..e3fd98e369f --- /dev/null +++ b/examples/magento-storyblok/.storyblok/stories/291439709879423/service_ebf9c70c-6361-4e67-9071-14bbbbef3e09.json @@ -0,0 +1,268 @@ +{ + "name": "Service", + "parent_id": 169314617677262, + "group_id": "991d45ce-6d3f-4e94-ac74-80476a0b36d8", + "alternates": [], + "created_at": "2026-04-24T10:23:38.405Z", + "deleted_at": null, + "sort_by_date": null, + "tag_list": [], + "updated_at": "2026-04-24T12:35:40.207Z", + "published_at": "2026-04-24T12:35:40.195Z", + "id": 169314789008864, + "uuid": "ebf9c70c-6361-4e67-9071-14bbbbef3e09", + "is_folder": false, + "content": { + "_uid": "179a08f8-d56f-4290-affb-960f4dc404f8", + "body": [ + { + "_uid": "16ed2fcb-9a61-4728-8ac8-ec6c24105055", + "links": [ + { + "_uid": "9bc18384-33af-4dc6-873b-06c620ef4696", + "target": { + "id": "79168ea2-a90e-4c9e-bac1-ec30ecdbfade", + "url": "", + "linktype": "story", + "fieldtype": "multilink", + "cached_url": "service/order" + }, + "component": "link_item" + }, + { + "_uid": "7e462181-ec8b-48f5-a10d-8303eb8dd558", + "target": { + "id": "751c2493-3834-4372-9c18-5e6c09cef411", + "url": "", + "linktype": "story", + "fieldtype": "multilink", + "cached_url": "service/brands-and-sizes" + }, + "component": "link_item" + } + ], + "title": "Categories", + "component": "row_button_link_list" + }, + { + "_uid": "7c2b6cd0-d725-4ff8-944e-03ddd097b62f", + "links": [ + { + "_uid": "5d219afa-3013-4e6d-9b02-db08542a29ad", + "target": { + "id": "e7adff63-901c-4cf9-9c11-06bb6c1f06ef", + "url": "", + "linktype": "story", + "fieldtype": "multilink", + "cached_url": "service/do-you-do-back-orders" + }, + "component": "link_item" + }, + { + "_uid": "1c525e3d-3cf1-44c1-b02e-2f4385780e2e", + "target": { + "id": "1f0e6b93-5795-49f7-b028-e33e0f55e71a", + "url": "", + "linktype": "story", + "fieldtype": "multilink", + "cached_url": "service/what-can-cause-my-order-to-be-delayed" + }, + "component": "link_item" + } + ], + "title": "Top FAQs", + "component": "row_button_link_list" + }, + { + "_uid": "a46c71e2-6392-4144-bf1e-5e7807b9a0b1", + "title": "Can't find the answer you've been searching for?", + "component": "row_service_options", + "service_options": [ + { + "url": { + "id": "", + "url": "tel:071 744 0084", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "tel:071 744 0084" + }, + "_uid": "a09cbe46-55a2-4072-a992-3c1f97ec9859", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "title": "Phone", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "We are ready for you. There may be a waiting time of 2 minutes.", + "type": "text", + "marks": [ + { + "type": "textStyle", + "attrs": { + "color": "" + } + } + ] + } + ] + } + ] + } + }, + { + "url": { + "id": "", + "url": "mailto:info@reachdigital.nl", + "linktype": "url", + "fieldtype": "multilink", + "cached_url": "mailto:info@reachdigital.nl" + }, + "_uid": "d125238f-c69c-4f96-8a8f-562b33808ec8", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "title": "E-mail", + "component": "page_link", + "description": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Go oldskool. It may take us a day or two to answer your e-mail.", + "type": "text", + "marks": [ + { + "type": "textStyle", + "attrs": { + "color": "" + } + } + ] + } + ] + } + ] + } + } + ] + } + ], + "date": "", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "author": "", + "component": "page", + "meta_title": "Help Center - GraphCommerce Customer Service", + "meta_robots": "INDEX_FOLLOW", + "related_pages": [], + "meta_description": "Help Center - GraphCommerce Customer Service" + }, + "published": true, + "slug": "service", + "path": null, + "full_slug": "service/", + "default_root": null, + "disble_fe_editor": false, + "disable_fe_editor": false, + "parent": { + "id": 169314617677262, + "uuid": "c4b4a580-d22d-446d-86bf-7602bc091cc8", + "name": "Service", + "slug": "service", + "disble_fe_editor": false + }, + "is_startpage": true, + "unpublished_changes": false, + "meta_data": null, + "imported_at": null, + "preview_token": { + "token": "68015a82116148c330b9fc7d66196e9a970bd30c", + "timestamp": "1777036863" + }, + "pinned": false, + "breadcrumbs": [ + { + "id": 169314617677262, + "name": "Service", + "parent_id": null, + "disble_fe_editor": false, + "disable_fe_editor": false, + "path": null, + "slug": "service", + "translated_slugs": [] + } + ], + "publish_at": null, + "expire_at": null, + "first_published_at": "2026-04-24T11:08:14.201Z", + "last_author": { + "id": 159433391350340, + "userid": "info@reachdigital.nl", + "friendly_name": "Reach Digital" + }, + "last_author_id": 159433391350340, + "user_ids": [], + "space_role_ids": [], + "translated_slugs": [], + "localized_paths": [ + { + "path": "service/", + "name": null, + "lang": "nl", + "published": true + } + ], + "position": -80, + "translated_stories": [], + "can_not_view": false, + "is_scheduled": null, + "scheduled_dates": null, + "ideas": [], + "current_version_id": 169347236508376, + "variant_type": null, + "experiment_ids": [], + "stage": null, + "favourite_for_user_ids": [] +} diff --git a/examples/magento-storyblok/.storyblok/stories/291439709879423/sneak-peak-new-styles-available_9a740532-b5a7-4b2e-84e2-fe348f1df294.json b/examples/magento-storyblok/.storyblok/stories/291439709879423/sneak-peak-new-styles-available_9a740532-b5a7-4b2e-84e2-fe348f1df294.json new file mode 100644 index 00000000000..8a69856ccde --- /dev/null +++ b/examples/magento-storyblok/.storyblok/stories/291439709879423/sneak-peak-new-styles-available_9a740532-b5a7-4b2e-84e2-fe348f1df294.json @@ -0,0 +1,135 @@ +{ + "name": "Sneak peak! New styles available!", + "parent_id": 167929327942297, + "group_id": "256ad927-8409-448f-98fd-3e0a24b1e859", + "alternates": [], + "created_at": "2026-04-22T13:19:08.682Z", + "deleted_at": null, + "sort_by_date": null, + "tag_list": [ + "News" + ], + "updated_at": "2026-04-24T12:35:21.877Z", + "published_at": "2026-04-24T12:35:21.865Z", + "id": 168650132245886, + "uuid": "9a740532-b5a7-4b2e-84e2-fe348f1df294", + "is_folder": false, + "content": { + "_uid": "acc6e5e4-17be-413b-bac1-e6fc2c233c42", + "body": [ + { + "_uid": "e1e71059-1d07-4508-b985-48418fe89d59", + "content": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Get ready for one of the most exciting GraphCommerce® launches ever! 20 BRAND NEW styles are headed your way very soon! Some of our favorite designs ever are included in this next bunch, and we owe a HUGE thanks to many of our fans for helping us create such awesome socks! You talked, we listened! We’re excited to get these socks out on shelves just in time for Fall’s cooler weather and the upcoming holidays!", + "type": "text" + } + ] + }, + { + "type": "paragraph", + "attrs": { + "textAlign": null + } + } + ] + }, + "component": "row_blog_content" + } + ], + "date": "2023-01-27 00:00", + "asset": { + "id": 168650434669347, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/2160x1440/1dd88a473e/img-composition-frantisek-foltyn.jpg", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "author": "Erwin Otten", + "component": "page", + "meta_title": "Sneak peak! New styles available!", + "meta_robots": "INDEX_FOLLOW", + "related_pages": [], + "meta_description": "..." + }, + "published": true, + "slug": "sneak-peak-new-styles-available", + "path": null, + "full_slug": "blog/sneak-peak-new-styles-available", + "default_root": null, + "disble_fe_editor": false, + "disable_fe_editor": false, + "parent": { + "id": 167929327942297, + "uuid": "eca8a55a-5970-43c1-992a-b89d58753a92", + "name": "Blog", + "slug": "blog", + "disble_fe_editor": false + }, + "is_startpage": false, + "unpublished_changes": false, + "meta_data": null, + "imported_at": null, + "preview_token": { + "token": "219504c5b73393ee0437847367b962c7041df720", + "timestamp": "1777036864" + }, + "pinned": false, + "breadcrumbs": [ + { + "id": 167929327942297, + "name": "Blog", + "parent_id": null, + "disble_fe_editor": false, + "disable_fe_editor": false, + "path": null, + "slug": "blog", + "translated_slugs": [] + } + ], + "publish_at": null, + "expire_at": null, + "first_published_at": "2026-04-22T13:19:40.087Z", + "last_author": { + "id": 159433391350340, + "userid": "info@reachdigital.nl", + "friendly_name": "Reach Digital" + }, + "last_author_id": 159433391350340, + "user_ids": [], + "space_role_ids": [], + "translated_slugs": [], + "localized_paths": [ + { + "path": "blog/sneak-peak-new-styles-available", + "name": null, + "lang": "nl", + "published": null + } + ], + "position": -40, + "translated_stories": [], + "can_not_view": false, + "is_scheduled": null, + "scheduled_dates": null, + "ideas": [], + "current_version_id": 169347161428577, + "variant_type": null, + "experiment_ids": [], + "stage": null, + "favourite_for_user_ids": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/stories/291439709879423/what-can-cause-my-order-to-be-delayed_1f0e6b93-5795-49f7-b028-e33e0f55e71a.json b/examples/magento-storyblok/.storyblok/stories/291439709879423/what-can-cause-my-order-to-be-delayed_1f0e6b93-5795-49f7-b028-e33e0f55e71a.json new file mode 100644 index 00000000000..f5967d4cb9a --- /dev/null +++ b/examples/magento-storyblok/.storyblok/stories/291439709879423/what-can-cause-my-order-to-be-delayed_1f0e6b93-5795-49f7-b028-e33e0f55e71a.json @@ -0,0 +1,151 @@ +{ + "name": "What can cause my order to be delayed?", + "parent_id": 169314617677262, + "group_id": "94121891-9510-4c4f-9451-1d89e3e9e6b9", + "alternates": [], + "created_at": "2026-04-24T12:09:13.759Z", + "deleted_at": null, + "sort_by_date": null, + "tag_list": [], + "updated_at": "2026-04-24T12:35:54.728Z", + "published_at": "2026-04-24T12:35:54.717Z", + "id": 169340738651521, + "uuid": "1f0e6b93-5795-49f7-b028-e33e0f55e71a", + "is_folder": false, + "content": { + "_uid": "8bbe3287-a76e-4a9c-b58e-2ee84e94374c", + "body": [ + { + "_uid": "5964d073-929e-429b-8942-600b007e9249", + "col_one": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "If the billing information you provided does not match what your bank has on file (including address and telephone number), your order may be delayed.", + "type": "text" + } + ] + }, + { + "type": "paragraph", + "attrs": { + "textAlign": null + } + }, + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "We all love sending gifts to others and ourselves as much as we love receiving them. However, if you are shipping to an address other than your billing address, your order may be delayed.", + "type": "text" + } + ] + }, + { + "type": "paragraph", + "attrs": { + "textAlign": null + } + } + ] + }, + "variant": "Default", + "component": "row_column_one" + } + ], + "date": "", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "author": "", + "component": "page", + "meta_title": "What can cause my order to be delayed?", + "meta_robots": "INDEX_FOLLOW", + "related_pages": [], + "meta_description": "..." + }, + "published": true, + "slug": "what-can-cause-my-order-to-be-delayed", + "path": null, + "full_slug": "service/what-can-cause-my-order-to-be-delayed", + "default_root": null, + "disble_fe_editor": false, + "disable_fe_editor": false, + "parent": { + "id": 169314617677262, + "uuid": "c4b4a580-d22d-446d-86bf-7602bc091cc8", + "name": "Service", + "slug": "service", + "disble_fe_editor": false + }, + "is_startpage": false, + "unpublished_changes": false, + "meta_data": null, + "imported_at": null, + "preview_token": { + "token": "015137740df5483d6b9fcd0b4fabc067cd8fa8a7", + "timestamp": "1777036865" + }, + "pinned": false, + "breadcrumbs": [ + { + "id": 169314617677262, + "name": "Service", + "parent_id": null, + "disble_fe_editor": false, + "disable_fe_editor": false, + "path": null, + "slug": "service", + "translated_slugs": [] + } + ], + "publish_at": null, + "expire_at": null, + "first_published_at": "2026-04-24T12:10:44.988Z", + "last_author": { + "id": 159433391350340, + "userid": "info@reachdigital.nl", + "friendly_name": "Reach Digital" + }, + "last_author_id": 159433391350340, + "user_ids": [], + "space_role_ids": [], + "translated_slugs": [], + "localized_paths": [ + { + "path": "service/what-can-cause-my-order-to-be-delayed", + "name": null, + "lang": "nl", + "published": null + } + ], + "position": -30, + "translated_stories": [], + "can_not_view": false, + "is_scheduled": null, + "scheduled_dates": null, + "ideas": [], + "current_version_id": 169347296006969, + "variant_type": null, + "experiment_ids": [], + "stage": null, + "favourite_for_user_ids": [] +} \ No newline at end of file diff --git a/examples/magento-storyblok/.storyblok/stories/291439709879423/women_688136b8-109e-495e-b17f-c443d767fdf1.json b/examples/magento-storyblok/.storyblok/stories/291439709879423/women_688136b8-109e-495e-b17f-c443d767fdf1.json new file mode 100644 index 00000000000..b1dbe5c6ea8 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/stories/291439709879423/women_688136b8-109e-495e-b17f-c443d767fdf1.json @@ -0,0 +1,173 @@ +{ + "name": "Women", + "parent_id": null, + "group_id": "55c6a777-a887-4d1b-9ed4-2a10bf0a828f", + "alternates": [], + "created_at": "2026-03-27T13:22:48.976Z", + "deleted_at": null, + "sort_by_date": null, + "tag_list": [], + "updated_at": "2026-04-24T12:34:46.336Z", + "published_at": "2026-04-24T12:34:46.325Z", + "id": 159449780521670, + "uuid": "688136b8-109e-495e-b17f-c443d767fdf1", + "is_folder": false, + "content": { + "_uid": "115d8117-8f0e-4db9-a923-ce7838e438e9", + "body": [ + { + "_uid": "5b476ed4-966e-48c4-bb2d-5d7b73bca1ef", + "asset": { + "id": null, + "alt": null, + "name": "", + "focus": null, + "title": null, + "source": null, + "filename": "", + "copyright": null, + "fieldtype": "asset", + "meta_data": {} + }, + "title": "Popular in Women", + "variant": "Grid", + "component": "row_product", + "page_links": [], + "product_copy": { + "type": "doc", + "content": [ + { + "type": "paragraph" + } + ] + }, + "magento_category_id": "", + "magento_product_skus": "" + }, + { + "_uid": "539f548e-248e-4159-87a0-7fdaf1bf5913", + "asset": { + "id": 167917192476403, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/1920x2880/a818d7b05f/women.jpg", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "title": "Women backstory", + "variant": "Backstory", + "component": "row_product", + "page_links": [], + "product_copy": { + "type": "doc", + "content": [ + { + "type": "paragraph", + "attrs": { + "textAlign": null + }, + "content": [ + { + "text": "Hello, hello, hello, hello ⁠Good-bye, good-bye, good-bye, good-bye ⁠That's all there is ⁠And the leaves that are green turn to brown", + "type": "text", + "marks": [ + { + "type": "textStyle", + "attrs": { + "color": "" + } + } + ] + } + ] + } + ] + }, + "magento_category_id": "", + "magento_product_skus": "" + } + ], + "date": "", + "asset": { + "id": 167876103899563, + "alt": "", + "name": "", + "focus": "", + "title": "", + "source": "", + "filename": "https://a.storyblok.com/f/291439709879423/x/b2d718e8ea/women.mp4", + "copyright": "", + "fieldtype": "asset", + "meta_data": {}, + "is_external_url": false + }, + "author": "", + "component": "page", + "meta_title": "", + "meta_robots": "INDEX_FOLLOW", + "related_pages": [], + "meta_description": "" + }, + "published": true, + "slug": "women", + "path": null, + "full_slug": "women", + "default_root": null, + "disble_fe_editor": false, + "disable_fe_editor": false, + "parent": null, + "is_startpage": false, + "unpublished_changes": false, + "meta_data": null, + "imported_at": null, + "preview_token": { + "token": "a7231897aabfa5b25fc5696f0547c0dffb8626a6", + "timestamp": "1777036866" + }, + "pinned": false, + "breadcrumbs": [], + "publish_at": null, + "expire_at": null, + "first_published_at": "2026-03-30T12:56:31.094Z", + "last_author": { + "id": 159433391350340, + "userid": "info@reachdigital.nl", + "friendly_name": "Reach Digital" + }, + "last_author_id": 159433391350340, + "user_ids": [], + "space_role_ids": [], + "translated_slugs": [ + { + "id": 166877038732010, + "lang": "nl", + "slug": "dames", + "name": "Dames", + "published": null + } + ], + "localized_paths": [ + { + "path": "dames", + "name": "Dames", + "lang": "nl", + "published": true + } + ], + "position": 0, + "translated_stories": [], + "can_not_view": false, + "is_scheduled": null, + "scheduled_dates": null, + "ideas": [], + "current_version_id": 169347015848349, + "variant_type": null, + "experiment_ids": [], + "stage": null, + "favourite_for_user_ids": [] +} diff --git a/examples/magento-storyblok/.storyblok/types/components.d.ts b/examples/magento-storyblok/.storyblok/types/components.d.ts new file mode 100644 index 00000000000..60fe67e606d --- /dev/null +++ b/examples/magento-storyblok/.storyblok/types/components.d.ts @@ -0,0 +1,186 @@ +// This file was generated by the storyblok CLI. +// DO NOT MODIFY THIS FILE BY HAND. +import type { StoryblokRichtext, StoryblokMultilink, StoryblokAsset } from '../storyblok.d.ts'; +export interface StoryblokGlobalConfig { + tab_usps?: unknown; + tab_footer?: unknown; + social_links?: StoryblokPageLink[]; + copyright?: string; + legal_links?: StoryblokPageLink[]; + sidebar_usps?: StoryblokPageLink[]; + content_usps?: StoryblokPageLink[]; + component: "global_config"; + _uid: string; + [k: string]: unknown; +} + +export interface StoryblokLinkItem { + title?: string; + target?: Exclude; + component: "link_item"; + _uid: string; + [k: string]: unknown; +} + +export interface StoryblokPage { + meta_title?: string; + meta_description?: string; + meta_robots?: { + [k: string]: unknown; + }; + author?: string; + date?: string; + asset?: StoryblokAsset; + body?: ( + | StoryblokRowColumnOne + | StoryblokRowColumnTwo + | StoryblokRowColumnThree + | StoryblokRowHeroBanner + | StoryblokRowSpecialBanner + | StoryblokRowQuote + | StoryblokRowLinks + | StoryblokRowButtonLinkList + | StoryblokRowServiceOptions + | StoryblokRowProduct + | StoryblokRowPdp + | StoryblokRowBlogContent + )[]; + related_pages?: StoryblokPageLink[]; + component: "page"; + _uid: string; + [k: string]: unknown; +} + +export interface StoryblokPageLink { + title?: string; + url?: Exclude; + description?: StoryblokRichtext; + asset?: StoryblokAsset; + component: "page_link"; + _uid: string; + [k: string]: unknown; +} + +export interface StoryblokRowBlogContent { + content?: StoryblokRichtext; + component: "row_blog_content"; + _uid: string; + [k: string]: unknown; +} + +export interface StoryblokRowButtonLinkList { + title?: string; + links?: StoryblokLinkItem[]; + component: "row_button_link_list"; + _uid: string; + [k: string]: unknown; +} + +export interface StoryblokRowColumnOne { + variant?: { + [k: string]: unknown; + }; + col_one?: StoryblokRichtext; + component: "row_column_one"; + _uid: string; + [k: string]: unknown; +} + +export interface StoryblokRowColumnThree { + col_one?: StoryblokRichtext; + col_two?: StoryblokRichtext; + col_three?: StoryblokRichtext; + component: "row_column_three"; + _uid: string; + [k: string]: unknown; +} + +export interface StoryblokRowColumnTwo { + col_one?: StoryblokRichtext; + col_two?: StoryblokRichtext; + component: "row_column_two"; + _uid: string; + [k: string]: unknown; +} + +export interface StoryblokRowHeroBanner { + asset?: StoryblokAsset; + copy?: StoryblokRichtext; + page_links?: StoryblokPageLink[]; + component: "row_hero_banner"; + _uid: string; + [k: string]: unknown; +} + +export interface StoryblokRowLinks { + variant?: { + [k: string]: unknown; + }; + title?: string; + copy?: StoryblokRichtext; + page_links?: StoryblokPageLink[]; + component: "row_links"; + _uid: string; + [k: string]: unknown; +} + +export interface StoryblokRowPdp { + variant?: { + [k: string]: unknown; + }; + asset?: StoryblokAsset; + title?: string; + product_copy?: StoryblokRichtext; + component: "row_pdp"; + _uid: string; + [k: string]: unknown; +} + +export interface StoryblokRowProduct { + variant?: { + [k: string]: unknown; + }; + asset?: StoryblokAsset; + title?: string; + product_copy?: StoryblokRichtext; + magento_product_skus?: string; + magento_category_id?: string; + page_links?: StoryblokPageLink[]; + component: "row_product"; + _uid: string; + [k: string]: unknown; +} + +export interface StoryblokRowQuote { + quote?: StoryblokRichtext; + component: "row_quote"; + _uid: string; + [k: string]: unknown; +} + +export interface StoryblokRowServiceOptions { + title?: string; + service_options?: StoryblokPageLink[]; + component: "row_service_options"; + _uid: string; + [k: string]: unknown; +} + +export interface StoryblokRowSpecialBanner { + asset?: StoryblokAsset; + copy?: StoryblokRichtext; + page_links?: StoryblokPageLink[]; + topic?: string; + component: "row_special_banner"; + _uid: string; + [k: string]: unknown; +} + +export interface StoryblokUsps { + usps_multiple?: StoryblokPageLink[]; + component: "usps"; + _uid: string; + [k: string]: unknown; +} + +export type ContentType = StoryblokGlobalConfig | StoryblokPage | StoryblokUsps; diff --git a/examples/magento-storyblok/.storyblok/types/storyblok.d.ts b/examples/magento-storyblok/.storyblok/types/storyblok.d.ts new file mode 100644 index 00000000000..03f08d96c82 --- /dev/null +++ b/examples/magento-storyblok/.storyblok/types/storyblok.d.ts @@ -0,0 +1,116 @@ +// This file was generated by the Storyblok CLI. +// DO NOT MODIFY THIS FILE BY HAND. +import type { ISbStoryData } from '@storyblok/js'; + +type StoryblokPropertyType = 'asset' | 'multiasset' | 'multilink' | 'table' | 'richtext'; +interface StoryblokAsset { + alt: string | null; + copyright: string | null; + fieldtype: 'asset'; + id: number; + filename: string | null; + name: string; + title: string | null; + focus: string | null; + meta_data: Record; + source: string | null; + is_external_url: boolean; + is_private: boolean; + src: string; + updated_at: string; + width: number | null; + height: number | null; + aspect_ratio: number | null; + public_id: string | null; + content_type: string; +} +interface StoryblokMultiasset extends Array { +} +interface StoryblokMultilinkStory { + name: string; + created_at: string; + published_at: string; + id: number; + uuid: string; + content: Record; + slug: string; + full_slug: string; + sort_by_date?: string; + position?: number; + tag_list?: string[]; + is_startpage?: boolean; + parent_id?: number | null; + meta_data?: Record | null; + group_id?: string; + first_published_at?: string; + release_id?: number | null; + lang?: string; + path?: string | null; + alternates?: any[]; + default_full_slug?: string | null; + translated_slugs?: any[] | null; +} +interface StoryblokMultilinkLink { + id: number; + uuid: string; + slug: string; + path: string | null; + parent_id: number; + name: string; + is_folder: boolean; + published: boolean; + is_startpage: boolean; + position: number; + real_path: string; +} +interface StoryblokMultilinkUrl { + name: string; + id: number; + uuid: string; + slug: string; + url: string; + full_slug: string; +} +interface StoryblokMultilink { + fieldtype: 'multilink'; + id: string; + url: string; + cached_url: string; + target?: '_blank' | '_self'; + anchor?: string; + rel?: string; + title?: string; + prep?: string; + linktype: 'story' | 'url' | 'email' | 'asset'; + story?: StoryblokMultilinkStory | StoryblokMultilinkLink | StoryblokMultilinkUrl; + email?: string; +} +interface StoryblokTable { + fieldtype: 'table'; + thead: Array<{ + _uid: string; + value: string; + component: '_table_head'; + _editable?: string; + }>; + tbody: Array<{ + _uid: string; + component: '_table_row'; + _editable?: string; + body: Array<{ + _uid: string; + value: string; + component: '_table_col'; + _editable?: string; + }>; + }>; +} +interface StoryblokRichtext { + type: string; + content?: StoryblokRichtext[]; + marks?: StoryblokRichtext[]; + attrs?: Record; + text?: string; +} + +export type { StoryblokAsset, StoryblokMultiasset, StoryblokMultilink, StoryblokMultilinkLink, StoryblokMultilinkStory, StoryblokMultilinkUrl, StoryblokPropertyType, StoryblokRichtext, StoryblokTable }; diff --git a/examples/magento-storyblok/.vscode/settings.json b/examples/magento-storyblok/.vscode/settings.json new file mode 100644 index 00000000000..ce6226a331b --- /dev/null +++ b/examples/magento-storyblok/.vscode/settings.json @@ -0,0 +1,31 @@ +{ + "editor.formatOnSave": true, + "editor.tabSize": 2, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.codeActionsOnSave": { "source.fixAll.eslint": "never" }, + "editor.snippetSuggestions": "none", + "emmet.showExpandedAbbreviation": "never", + "editor.wordBasedSuggestions": "off", + "javascript.suggest.names": false, + "typescript.tsdk": "node_modules/typescript/lib", + "[typescriptreact]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "search.exclude": { + "**/node_modules": true, + "**/*.code-search": true, + "**/.next": true, + "**/dist": true, + "**/.yarn": true, + "yarn.lock": true, + "**/*.tsbuildinfo": true + }, + "files.readonlyInclude": { + "**/*.interceptor.tsx": true, + "**/*.interceptor.ts": true + }, + "typescript.enablePromptUseWorkspaceTsdk": true +} diff --git a/examples/magento-storyblok/.yarnrc.yml b/examples/magento-storyblok/.yarnrc.yml new file mode 100644 index 00000000000..fe1125f54b5 --- /dev/null +++ b/examples/magento-storyblok/.yarnrc.yml @@ -0,0 +1,3 @@ +enableImmutableInstalls: false + +nodeLinker: node-modules diff --git a/examples/magento-storyblok/CHANGELOG.md b/examples/magento-storyblok/CHANGELOG.md new file mode 100644 index 00000000000..83dd3e37638 --- /dev/null +++ b/examples/magento-storyblok/CHANGELOG.md @@ -0,0 +1,235 @@ +# Change Log + +## 10.1.0 + +### Minor Changes + +- [#2603](https://github.com/graphcommerce-org/graphcommerce/pull/2603) [`7198061`](https://github.com/graphcommerce-org/graphcommerce/commit/71980613241a240fa29ba9894872b90c3d32c2b6) - ## Storyblok example + + We're shipping `examples/magento-storyblok` — a full Storyblok CMS integration alongside the existing Hygraph example, so teams can pick the headless CMS that fits their workflow. + + **What's in the box** + + - Visual editing: live preview, click-to-edit on every blok, and SSR with client hydration + - Row components out of the box: hero banners, special banners, quotes, button link lists, service options, product grids, blog content, and USPs — all editable in the Storyblok Visual Editor + - Global config pattern for content shared across pages (footer links, social links, USPs) with live updates in the editor + - Type-safe integration: generated TypeScript types for every component schema via the Storyblok CLI + - `@graphcommerce/storyblok-ui` helpers: rich text renderer, asset component with video/image support, multilink resolution, product block resolution, and Visual Editor utilities + + **Getting started** + + - `yarn storyblok:bootstrap` seeds a new Storyblok space with all demo content (components, stories, assets) so a fresh install is editable in minutes + - `spaceId` lives in `graphcommerce.config.cjs` alongside your other config — no separate env juggling + - Components, stories, and assets are committed to the repo as the source of truth + + **Also includes** + + - Storyblok-aware Footer, Navigation, and PDP layouts wired to the global config + - Blog support with tag filtering and pagination + - Preview URL routing so the Visual Editor opens the right page for each story type ([@bramvanderholst](https://github.com/bramvanderholst)) + +### Patch Changes + +- [#2606](https://github.com/graphcommerce-org/graphcommerce/pull/2606) [`d30c568`](https://github.com/graphcommerce-org/graphcommerce/commit/d30c5681e018496ce44c349f69b122d143e894d2) - Fix issue where bootstrap from seed project was failing ([@bramvanderholst](https://github.com/bramvanderholst)) + +- [#2606](https://github.com/graphcommerce-org/graphcommerce/pull/2606) [`d30c568`](https://github.com/graphcommerce-org/graphcommerce/commit/d30c5681e018496ce44c349f69b122d143e894d2) - Performance improvements for Storyblok bridge ([@bramvanderholst](https://github.com/bramvanderholst)) + +- [#2609](https://github.com/graphcommerce-org/graphcommerce/pull/2609) [`fe29527`](https://github.com/graphcommerce-org/graphcommerce/commit/fe295278cc159cbb375f3460a4edb5b1f902c27a) - Drop `@graphcommerce/magento-cms` from the Storyblok example, ship locale-redirect proxy with `storyblok-ui` + + The Storyblok example had several leftovers from a half-completed migration off Magento CMS, all conceptually out of place in an example whose purpose is "all content lives in Storyblok": + + - `pages/page/[...url].tsx` — a CMS page handler whose `getStaticPaths` called `getCategoryStaticPaths` (returns Magento **category** URLs). Feeding category URLs into the `cmsPage` query caused `getStaticProps` to return a `redirect`, which Next.js rejects during prerender — crashing `next build`. + - `Layout.graphql` queried `cmsBlocks(["footer_links_block"])` but the resulting prop was destructured-and-discarded in both layout components — the Footer is fully driven by Storyblok's `globalConfig`. The dead query also produced noisy GraphQL errors at build time on backends without the block. + - `pages/404.tsx` rendered a Magento `cms_no_route` CMS page (with a hardcoded fallback if absent). + - `proxy.ts` was a hand-written file with hardcoded `LOCALES = ['en', 'nl']` — broken for any other storefront combination, and not using the plugin system. + + This PR: + + - Removes `pages/page/[...url].tsx`, the dead `cmsBlocks` query and unused destructures, the Magento CMS fallback in `pages/404.tsx`, and the `@graphcommerce/magento-cms` dependency + - Migrates `proxy.ts` → standard managed re-export + - **Adds `@graphcommerce/storyblok-ui/plugins/LocaleRedirectProxy.ts`** with `ifConfig: 'storyblok'` — every project depending on `@graphcommerce/storyblok-ui` now gets locale-redirect (Visual Editor `_storyblok_lang` + Accept-Language root) automatically, with locales read from `storefront` config + + If a project needs Magento CMS pages alongside Storyblok, it can re-add the dependency and a route — but the example should default to pure Storyblok. ([@paales](https://github.com/paales)) + +- [#2606](https://github.com/graphcommerce-org/graphcommerce/pull/2606) [`d30c568`](https://github.com/graphcommerce-org/graphcommerce/commit/d30c5681e018496ce44c349f69b122d143e894d2) - Added Storyblok pages to content sitemap ([@bramvanderholst](https://github.com/bramvanderholst)) + +## 10.1.0-canary.9 + +## 10.1.0-canary.8 + +## 10.1.0-canary.7 + +## 10.1.0-canary.6 + +### Patch Changes + +- [#2609](https://github.com/graphcommerce-org/graphcommerce/pull/2609) [`fe29527`](https://github.com/graphcommerce-org/graphcommerce/commit/fe295278cc159cbb375f3460a4edb5b1f902c27a) - Drop `@graphcommerce/magento-cms` from the Storyblok example, ship locale-redirect proxy with `storyblok-ui` + + The Storyblok example had several leftovers from a half-completed migration off Magento CMS, all conceptually out of place in an example whose purpose is "all content lives in Storyblok": + + - `pages/page/[...url].tsx` — a CMS page handler whose `getStaticPaths` called `getCategoryStaticPaths` (returns Magento **category** URLs). Feeding category URLs into the `cmsPage` query caused `getStaticProps` to return a `redirect`, which Next.js rejects during prerender — crashing `next build`. + - `Layout.graphql` queried `cmsBlocks(["footer_links_block"])` but the resulting prop was destructured-and-discarded in both layout components — the Footer is fully driven by Storyblok's `globalConfig`. The dead query also produced noisy GraphQL errors at build time on backends without the block. + - `pages/404.tsx` rendered a Magento `cms_no_route` CMS page (with a hardcoded fallback if absent). + - `proxy.ts` was a hand-written file with hardcoded `LOCALES = ['en', 'nl']` — broken for any other storefront combination, and not using the plugin system. + + This PR: + + - Removes `pages/page/[...url].tsx`, the dead `cmsBlocks` query and unused destructures, the Magento CMS fallback in `pages/404.tsx`, and the `@graphcommerce/magento-cms` dependency + - Migrates `proxy.ts` → standard managed re-export + - **Adds `@graphcommerce/storyblok-ui/plugins/LocaleRedirectProxy.ts`** with `ifConfig: 'storyblok'` — every project depending on `@graphcommerce/storyblok-ui` now gets locale-redirect (Visual Editor `_storyblok_lang` + Accept-Language root) automatically, with locales read from `storefront` config + + If a project needs Magento CMS pages alongside Storyblok, it can re-add the dependency and a route — but the example should default to pure Storyblok. ([@paales](https://github.com/paales)) + +## 10.1.0-canary.5 + +## 10.1.0-canary.4 + +### Patch Changes + +- [#2606](https://github.com/graphcommerce-org/graphcommerce/pull/2606) [`d30c568`](https://github.com/graphcommerce-org/graphcommerce/commit/d30c5681e018496ce44c349f69b122d143e894d2) - Fix issue where bootstrap from seed project was failing ([@bramvanderholst](https://github.com/bramvanderholst)) + +- [#2606](https://github.com/graphcommerce-org/graphcommerce/pull/2606) [`d30c568`](https://github.com/graphcommerce-org/graphcommerce/commit/d30c5681e018496ce44c349f69b122d143e894d2) - Performance improvements for Storyblok bridge ([@bramvanderholst](https://github.com/bramvanderholst)) + +- [#2606](https://github.com/graphcommerce-org/graphcommerce/pull/2606) [`d30c568`](https://github.com/graphcommerce-org/graphcommerce/commit/d30c5681e018496ce44c349f69b122d143e894d2) - Added Storyblok pages to content sitemap ([@bramvanderholst](https://github.com/bramvanderholst)) + +## 10.1.0-canary.3 + +### Minor Changes + +- [#2603](https://github.com/graphcommerce-org/graphcommerce/pull/2603) [`7198061`](https://github.com/graphcommerce-org/graphcommerce/commit/71980613241a240fa29ba9894872b90c3d32c2b6) - ## Storyblok example + + We're shipping `examples/magento-storyblok` — a full Storyblok CMS integration alongside the existing Hygraph example, so teams can pick the headless CMS that fits their workflow. + + **What's in the box** + + - Visual editing: live preview, click-to-edit on every blok, and SSR with client hydration + - Row components out of the box: hero banners, special banners, quotes, button link lists, service options, product grids, blog content, and USPs — all editable in the Storyblok Visual Editor + - Global config pattern for content shared across pages (footer links, social links, USPs) with live updates in the editor + - Type-safe integration: generated TypeScript types for every component schema via the Storyblok CLI + - `@graphcommerce/storyblok-ui` helpers: rich text renderer, asset component with video/image support, multilink resolution, product block resolution, and Visual Editor utilities + + **Getting started** + + - `yarn storyblok:bootstrap` seeds a new Storyblok space with all demo content (components, stories, assets) so a fresh install is editable in minutes + - `spaceId` lives in `graphcommerce.config.cjs` alongside your other config — no separate env juggling + - Components, stories, and assets are committed to the repo as the source of truth + + **Also includes** + + - Storyblok-aware Footer, Navigation, and PDP layouts wired to the global config + - Blog support with tag filtering and pagination + - Preview URL routing so the Visual Editor opens the right page for each story type ([@bramvanderholst](https://github.com/bramvanderholst)) + +## 10.0.3 + +## 10.0.3-canary.0 + +## 10.0.2 + +## 10.0.2-canary.0 + +## 10.0.1 + +### Patch Changes + +- [#2568](https://github.com/graphcommerce-org/graphcommerce/pull/2568) [`71e2bcc`](https://github.com/graphcommerce-org/graphcommerce/commit/71e2bcc86db52b937b629f8f0a4defef107ff973) - Peer dependency issues ([@paales](https://github.com/paales)) + +## 10.0.0 + +### Major Changes + +- [#2546](https://github.com/graphcommerce-org/graphcommerce/pull/2546) [`ed9332a`](https://github.com/graphcommerce-org/graphcommerce/commit/ed9332a7f78966d932041d9a7725641edc92b28d) - ## GraphCommerce 10 - Turbopack Support + + This major release brings full Turbopack compatibility, dramatically improving development speed. + + ### 🚀 Turbopack-Compatible Interceptor System + + The entire plugin/interceptor system has been rewritten to work with Turbopack: + + - **No more Webpack plugins** - Removed `InterceptorPlugin` webpack plugin entirely + - **File-based interception** - Original files are moved to `.original.tsx` and replaced with interceptor content + - **Direct imports** - Interceptors import from `.original` files instead of embedding source + - **New CLI commands**: + - `graphcommerce codegen-interceptors` - Generate interceptor files + - `graphcommerce cleanup-interceptors` - Reset interceptor system, restore original files + - **Stable file hashing** - Deterministic interceptor generation for better caching + + ### ⚙️ Treeshakable Configuration System + + Replaced Webpack `DefinePlugin`-based `import.meta.graphCommerce` with a new generated configuration system: + + - **New `codegen-config-values` command** - Generates TypeScript files with precise typing + - **Schema-driven** - Dynamically introspects Zod schemas to determine all available properties + - **Fully treeshakable** - Unused config values are eliminated from the bundle + - **Type-safe** - Uses `Get` for nested property access + - **Separate files for nested objects** - Optimal treeshaking for complex configurations + + ### 🔧 withGraphCommerce Changes + + - **Removed** `InterceptorPlugin` - No longer needed with file-based interception + - **Removed** `DefinePlugin` for `import.meta.graphCommerce` - Replaced with generated config + - **Removed** `@mui/*` alias rewrites - No longer required + - **Added** Turbopack loader rules for `.yaml`, `.yml`, and `.po` files + - **Added** `serverExternalPackages` for all `@whatwg-node/*` packages + - **Added** `optimizePackageImports` for better bundle optimization + - **Added** `images.qualities: [52, 75]` for Next.js image optimization + + ### 📦 Lingui Configuration + + - **Renamed** `lingui.config.js` → `lingui.config.ts` with TypeScript support + - **Updated** `@graphcommerce/lingui-next/config` to TypeScript with proper exports + - **Simplified** formatter options + + ### ⚛️ React 19 & Next.js 16 Compatibility + + - Updated `RefObject` types for React 19 (now includes `null` by default) + - Replaced deprecated `React.VFC` with `React.FC` + - Fixed `useRef` calls to require explicit initial values + - Updated `MutableRefObject` usage in `framer-scroller` + + ### 📋 ESLint 9 Flat Config + + - Migrated from legacy `.eslintrc` to new flat config format (`eslint.config.mjs`) + - Updated `@typescript-eslint/*` packages to v8 + - Fixed AST selector for `SxProps` rule (`typeParameters` → `typeArguments`) + + ### 🔄 Apollo Client + + - Fixed deprecated `name` option → `clientAwareness: { name: 'ssr' }` + - Updated error handling types to accept `ApolloError | null | undefined` + + ### ⚠️ Breaking Changes + + - **Node.js 24.x not supported** - Restricted to `>=20 <24.0.0` due to [nodejs/undici#4290](https://github.com/nodejs/undici/issues/4290) + - **Interceptor files changed** - Original components now at `.original.tsx` + - **Config access changed** - Use generated config values instead of `import.meta.graphCommerce` + - **ESLint config format** - Must use flat config (`eslint.config.mjs`) + - **Lingui config** - Rename `lingui.config.js` to `lingui.config.ts` + + ### 🗑️ Removed + + - `InterceptorPlugin` webpack plugin + - `configToImportMeta` utility + - Webpack `DefinePlugin` usage for config + - `@mui/*` modern alias rewrites + - Debug plugins (`CircularDependencyPlugin`, `DuplicatesPlugin`) ([@paales](https://github.com/paales)) + +### Patch Changes + +- [#2539](https://github.com/graphcommerce-org/graphcommerce/pull/2539) [`22094bd`](https://github.com/graphcommerce-org/graphcommerce/commit/22094bd1724bf7917373200501217653bb588f5f) - Solve a version-skew problem where certain JS files weren't properly cached by the Service Worker, but the page was cached. The moment a user wanted to load the page the JS files would not exist and result in a 404. This in turn caused the the frontend to be broken until the page was reloaded. + + The cause is that if the prefetch requests fail, other prefetch requests are not made anymore. And since the js file wasn't cached by other buckets, it would result in a 404. ([@paales](https://github.com/paales)) + +- [#2520](https://github.com/graphcommerce-org/graphcommerce/pull/2520) [`bf153c7`](https://github.com/graphcommerce-org/graphcommerce/commit/bf153c7a55ce02040b3d55045a0a9d9ea521f714) - fix: if relatedUpsells are not defined, use empty object so mergeDeep… ([@FrankHarland](https://github.com/FrankHarland)) + +- [#2540](https://github.com/graphcommerce-org/graphcommerce/pull/2540) [`36e2bac`](https://github.com/graphcommerce-org/graphcommerce/commit/36e2bacb4fe765ce1fcd24dc36736e90bb17a7dc) - Add billingAddress permission (EDITABLE | READONLY) that controls whether the end user can update their billing address in the account section and checkout. ([@Giovanni-Schroevers](https://github.com/Giovanni-Schroevers)) + +- [#2478](https://github.com/graphcommerce-org/graphcommerce/pull/2478) [`16a3b73`](https://github.com/graphcommerce-org/graphcommerce/commit/16a3b73af173695605a0e8dfaa57777391e8b99d) - Solve issue where the performanceLink was only activated during production while it should have been during development. ([@paales](https://github.com/paales)) + +- [#2556](https://github.com/graphcommerce-org/graphcommerce/pull/2556) [`4aa6c92`](https://github.com/graphcommerce-org/graphcommerce/commit/4aa6c9284cdc6a43abe1ba8173ad4840e0e808fc) - Bump next from 16.0.6 to 16.0.7 ([@dependabot](https://github.com/apps/dependabot)) + +- [#2492](https://github.com/graphcommerce-org/graphcommerce/pull/2492) [`2d41445`](https://github.com/graphcommerce-org/graphcommerce/commit/2d414456a827c778db390306a7c174a0b8f16ba1) - Solve issue where the category and search page would rerender on pageload because the mask value would flip from true to false ([@paales](https://github.com/paales)) + +- [#2499](https://github.com/graphcommerce-org/graphcommerce/pull/2499) [`39058be`](https://github.com/graphcommerce-org/graphcommerce/commit/39058bef14622082ab5e327f13b5a52079c92622) - Support for Magento logo and Magento copyright notice in footer ([@paales](https://github.com/paales)) + +- [#2478](https://github.com/graphcommerce-org/graphcommerce/pull/2478) [`87df248`](https://github.com/graphcommerce-org/graphcommerce/commit/87df248a7154eed415da935d33f3cc6e48159ec9) - Solve issue where plurals weren't properly defined ([@paales](https://github.com/paales)) diff --git a/examples/magento-storyblok/README.md b/examples/magento-storyblok/README.md new file mode 100644 index 00000000000..019f756a91b --- /dev/null +++ b/examples/magento-storyblok/README.md @@ -0,0 +1,101 @@ +

+ GraphCommerce Logo +

+ +
+ +📚 [Docs](https://graphcommerce.org/docs) | 🗣 +[Slack](https://join.slack.com/t/graphcommerce/shared_invite/zt-11rmgq1ad-F~0daNtKcSvtcC4eQRzjeQ) +| 📝 +[Release notes](https://github.com/graphcommerce-org/graphcommerce/releases) + +
+ +GraphCommerce is a framework for building headless ecommerce storefronts in +React and Next.js. It provides a best-in-class example, including components and +utilities, to deliver a high-performance, high-quality ecommerce Progressive Web +App (PWA). + +Explore the [GraphCommerce demo](https://graphcommerce.vercel.app/) or start +building your custom GraphCommerce ecommerce frontend. + +https://user-images.githubusercontent.com/1251986/226889542-ec403549-5e4f-4ff6-8fc5-ba879798353f.mp4 + +The GraphCommerce homepage, showcasing content from Magento through a variety of +included UX components. + +--- + +# Getting started with GraphCommerce + +In this guide, you will set up a GraphCommerce app locally, allowing you to +start building. + +### Requirements + +- Install and use node 22/24: `nvm install 22` or `nvm use 22` +- Install yarn: `corepack enable` + +## Step 1: Create a GraphCommerce app + +```bash +git clone -b main --depth 1 https://github.com/graphcommerce-org/graphcommerce.git +# Clone repository +``` + +```bash +mkdir my-project +# Create project folder +``` + +```bash +cp -R graphcommerce/examples/magento-storyblok/. my-project && rm -rf graphcommerce && cd my-project +# Copy example, delete repo, navigate to project folder +``` + +## Step 2: Configure API keys + +(Optional, +[continue reading](https://www.graphcommerce.org/docs/getting-started/create)) + +## Step 3: Start the app + +```bash +yarn +# Install the dependencies +``` + +```bash +yarn codegen +# Converts all .graphql files to typescript files +``` + +```bash +yarn dev +# Run the app +``` + +--- + +🎉 Explore your GraphCommerce app running at https://localhost:3000 + +(Explore the GraphQL Playground running at https://localhost:3000/api/graphql) + +> No success? Consult the +> [troubleshooting guide](../../docs/framework/troubleshooting.md) + +## Next steps + +- The [Quick start](../../docs/getting-started/readme.md) guide covers about 80% + of the concepts you'll use, so it's a great place to start. +- [Start customizing](../../docs/getting-started/start-building.md) to go from + "Hello World" to a fully built GraphCommerce custom storefront. + +

+ + + + + + +

diff --git a/examples/magento-storyblok/codegen.yml b/examples/magento-storyblok/codegen.yml new file mode 100644 index 00000000000..7d5d0798646 --- /dev/null +++ b/examples/magento-storyblok/codegen.yml @@ -0,0 +1,42 @@ +generates: + # Generate a types file + node_modules/@graphcommerce/graphql/generated/types.ts: + schema: + - .mesh/schema.graphql + plugins: + - typescript-apollo-client-helpers + - add + config: + enumsAsTypes: true + content: '/* eslint-disable */' + # Generate a fragments.json + node_modules/@graphcommerce/graphql/generated/fragments.json: + schema: + - .mesh/schema.graphql + plugins: + - fragment-matcher + # Generate .gql.ts files for each GraphQL file + .: + schema: + - .mesh/schema.graphql + documents: + - 'components/**/*.graphql' + - 'graphql/**/*.graphql' + plugins: + - '@graphcommerce/graphql-codegen-relay-optimizer-plugin' + - typed-document-node + - typescript-operations + - add + preset: '@graphcommerce/graphql-codegen-near-operation-file' + presetConfig: + extension: .gql.ts + baseTypesPath: ~@graphcommerce/graphql-mesh/.mesh + injectables: true + config: + skipTypename: true + namingConvention: 'keep' + dedupeOperationSuffix: true + arrayInputCoercion: false + content: /* eslint-disable */ +watchConfig: + usePolling: false diff --git a/examples/magento-storyblok/components/Blog/BlogItem.tsx b/examples/magento-storyblok/components/Blog/BlogItem.tsx new file mode 100644 index 00000000000..3049e0a02f5 --- /dev/null +++ b/examples/magento-storyblok/components/Blog/BlogItem.tsx @@ -0,0 +1,39 @@ +import { BlogListItem } from '@graphcommerce/next-ui' +import { Asset } from '@graphcommerce/storyblok-ui' +import { Trans } from '@lingui/react/macro' +import { Typography, useTheme } from '@mui/material' +import type { StoryblokStory } from '@graphcommerce/storyblok-ui' +import type { StoryblokPage } from '../Storyblok/types' + +export type BlogItemProps = { story: StoryblokStory } + +export function BlogItem({ story }: BlogItemProps) { + const theme = useTheme() + const content = story.content as StoryblokPage + const asset = content?.asset + + return ( + + ) : ( + + No Image + + ) + } + title={story.name} + date={content?.date} + url={story.full_slug} + /> + ) +} diff --git a/examples/magento-storyblok/components/Blog/BlogList.tsx b/examples/magento-storyblok/components/Blog/BlogList.tsx new file mode 100644 index 00000000000..27e52ea789e --- /dev/null +++ b/examples/magento-storyblok/components/Blog/BlogList.tsx @@ -0,0 +1,15 @@ +import { BlogItemGrid } from '@graphcommerce/next-ui' +import type { StoryblokStory } from '@graphcommerce/storyblok-ui' +import { BlogItem } from './BlogItem' + +export type BlogListProps = { stories: StoryblokStory[] } + +export function BlogList({ stories }: BlogListProps) { + return ( + + {stories.map((story) => ( + + ))} + + ) +} diff --git a/examples/magento-storyblok/components/Blog/index.ts b/examples/magento-storyblok/components/Blog/index.ts new file mode 100644 index 00000000000..06f6f75b750 --- /dev/null +++ b/examples/magento-storyblok/components/Blog/index.ts @@ -0,0 +1,2 @@ +export * from './BlogItem' +export * from './BlogList' diff --git a/examples/magento-storyblok/components/Layout/Footer.tsx b/examples/magento-storyblok/components/Layout/Footer.tsx new file mode 100644 index 00000000000..684e149d99c --- /dev/null +++ b/examples/magento-storyblok/components/Layout/Footer.tsx @@ -0,0 +1,99 @@ +import { useQuery } from '@graphcommerce/graphql' +import { Image } from '@graphcommerce/image' +import { useCheckoutGuestEnabled } from '@graphcommerce/magento-cart' +import { StoreConfigDocument, StoreSwitcherButton } from '@graphcommerce/magento-store' +import { magentoVersion } from '@graphcommerce/next-config/config' +import { DateFormat, FindAndReplace, Footer as FooterBase } from '@graphcommerce/next-ui' +import { multilinkHref, storyblokEditable } from '@graphcommerce/storyblok-ui' +import { Trans } from '@lingui/react/macro' +import { Button, IconButton, Link } from '@mui/material' +import { useGlobalConfig } from '../Storyblok/GlobalConfigProvider' +import type { StoryblokGlobalConfig } from '../Storyblok/types' + +export type FooterProps = { globalConfig?: StoryblokGlobalConfig | null } + +export function Footer(props: FooterProps) { + const contextConfig = useGlobalConfig() + const globalConfig = props.globalConfig ?? contextConfig + const cartEnabled = useCheckoutGuestEnabled() + const config = useQuery(StoreConfigDocument).data?.storeConfig + + const websiteName = config?.website_name + const year = + + return ( + ( + + {link.asset?.filename ? ( + {link.title ({ + filter: 'invert(0%)', + ...theme.applyStyles('dark', { + filter: 'invert(100%)', + }), + })} + /> + ) : ( + link.title + )} + + ))} + storeSwitcher={} + customerService={ + + } + copyright={ + <> + + {globalConfig?.copyright ? ( + + ) : config?.copyright ? ( + + ) : null} + + + {globalConfig?.legal_links?.map((link) => ( + + {link.title} + + ))} + {magentoVersion >= 247 && cartEnabled && ( + + Order status + + )} + {magentoVersion >= 247 && ( + + Contact + + )} + + Newletter + + + } + /> + ) +} diff --git a/examples/magento-storyblok/components/Layout/Layout.graphql b/examples/magento-storyblok/components/Layout/Layout.graphql new file mode 100644 index 00000000000..018d5dc9531 --- /dev/null +++ b/examples/magento-storyblok/components/Layout/Layout.graphql @@ -0,0 +1,6 @@ +query Layout { + menu: categories { + __typename + } + ...MenuQueryFragment +} diff --git a/examples/magento-storyblok/components/Layout/LayoutMinimal.tsx b/examples/magento-storyblok/components/Layout/LayoutMinimal.tsx new file mode 100644 index 00000000000..e4bdd728deb --- /dev/null +++ b/examples/magento-storyblok/components/Layout/LayoutMinimal.tsx @@ -0,0 +1,29 @@ +import type { LayoutDefaultProps } from '@graphcommerce/next-ui' +import { LayoutDefault } from '@graphcommerce/next-ui' +import { GlobalConfigProvider } from '../Storyblok/GlobalConfigProvider' +import type { StoryblokGlobalConfig } from '../Storyblok/types' +import { Footer } from './Footer' +import type { LayoutQuery } from './Layout.gql' +import { Logo } from './Logo' + +export type LayoutMinimalProps = LayoutQuery & + Omit & { + globalConfig?: StoryblokGlobalConfig | null + } + +export function LayoutMinimal(props: LayoutMinimalProps) { + const { menu, children, globalConfig, ...uiProps } = props + + return ( + + } + footer={