@contentful/experiences-sdk-react 3.8.11-beta.0 → 3.8.11-dev-20260801T1549-f6e8561.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ExperienceRoot.js.map +1 -1
- package/dist/blocks/editor/VisualEditorInjectScript.js.map +1 -1
- package/dist/blocks/editor/VisualEditorLoader.js.map +1 -1
- package/dist/blocks/editor/VisualEditorRoot.js.map +1 -1
- package/dist/blocks/preview/CompositionBlock.js +3 -2
- package/dist/blocks/preview/CompositionBlock.js.map +1 -1
- package/dist/blocks/preview/PreviewDeliveryRoot.js.map +1 -1
- package/dist/components/ErrorBoundary.js +0 -1
- package/dist/components/ErrorBoundary.js.map +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/core/componentRegistry.js +2 -2
- package/dist/core/componentRegistry.js.map +1 -1
- package/dist/core/preview/PrebindingManager.js.map +1 -1
- package/dist/core/preview/assemblyUtils.js.map +1 -1
- package/dist/core/sdkFeatures.js.map +1 -1
- package/dist/core/styles/convertResolvedDesignValuesToMediaQuery.js.map +1 -1
- package/dist/core/styles/createStylesheetsForBuiltInStyles.js.map +1 -1
- package/dist/hooks/useBreakpoints.js.map +1 -1
- package/dist/hooks/useCustomFetch.js.map +1 -1
- package/dist/hooks/useDetectCanvasMode.js +1 -1
- package/dist/hooks/useDetectCanvasMode.js.map +1 -1
- package/dist/hooks/useFetchById.js.map +1 -1
- package/dist/hooks/useFetchBySlug.js.map +1 -1
- package/dist/hooks/useInitializeVisualEditor.js +1 -1
- package/dist/hooks/useInitializeVisualEditor.js.map +1 -1
- package/dist/hooks/useInjectStylesheet.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js.map +1 -1
- package/dist/sdkVersion.js +1 -1
- package/dist/sdkVersion.js.map +1 -1
- package/dist/src/ExperienceRoot.d.ts +1 -2
- package/dist/src/blocks/editor/VisualEditorInjectScript.d.ts +1 -2
- package/dist/src/blocks/preview/CompositionBlock.d.ts +1 -2
- package/dist/src/blocks/preview/PreviewDeliveryRoot.d.ts +1 -2
- package/dist/src/components/ErrorBoundary.d.ts +1 -1
- package/dist/src/core/preview/PrebindingManager.d.ts +2 -2
- package/dist/src/core/preview/__fixtures__.d.ts +33 -33
- package/dist/src/sdkVersion.d.ts +1 -1
- package/dist/test/components/Test.d.ts +1 -2
- package/dist/utils/parseComponentProps.js.map +1 -1
- package/dist/utils/prebindingUtils.js.map +1 -1
- package/dist/utils/withComponentWrapper.js.map +1 -1
- package/package.json +39 -39
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExperienceRoot.js","sources":["../../src/ExperienceRoot.tsx"],"sourcesContent":["'use client';\nimport React from 'react';\nimport {\n VisualEditorMode,\n createExperience,\n validateExperienceBuilderConfig,\n debug as cfDebug,\n} from '@contentful/experiences-core';\nimport { EntityStore } from '@contentful/experiences-core';\nimport type { Experience } from '@contentful/experiences-core/types';\nimport { PreviewDeliveryRoot } from './blocks/preview/PreviewDeliveryRoot';\nimport VisualEditorRoot from './blocks/editor/VisualEditorRoot';\nimport { useDetectCanvasMode } from './hooks/useDetectCanvasMode';\nimport { StudioCanvasMode } from '@contentful/experiences-core/constants';\n\ntype ExperienceRootProps = {\n experience?: Experience<EntityStore> | string | null;\n locale: string;\n visualEditorMode?: VisualEditorMode;\n /** Enables extra logging in the SDK to support troubleshooting.\n * This option is not recommended for production environments as it\n * will result in too many unnecessary logs being produced during runtime.\n * Default: false\n */\n debug?: boolean;\n};\n\nexport const ExperienceRoot = ({\n locale,\n experience,\n visualEditorMode = VisualEditorMode.LazyLoad,\n debug,\n}: ExperienceRootProps) => {\n const mode = useDetectCanvasMode();\n\n if (typeof debug === 'boolean') {\n cfDebug.setActiveLevel(debug ? 'debug' : 'warn');\n }\n\n //If experience is passed in as a JSON string, recreate it to an experience object\n const experienceObject =\n typeof experience === 'string' ? createExperience(experience) : experience;\n\n validateExperienceBuilderConfig({\n locale,\n mode,\n });\n\n if (mode === StudioCanvasMode.EDITOR || mode === StudioCanvasMode.READ_ONLY) {\n return (\n <VisualEditorRoot\n experience={experienceObject as Experience<EntityStore> | undefined}\n visualEditorMode={visualEditorMode}\n initialLocale={locale}\n canvasMode={mode}\n />\n );\n }\n\n if (!experienceObject) return null;\n\n return <PreviewDeliveryRoot locale={locale} experience={experienceObject} />;\n};\n"],"names":[],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"ExperienceRoot.js","sources":["../../src/ExperienceRoot.tsx"],"sourcesContent":["'use client';\nimport React from 'react';\nimport {\n VisualEditorMode,\n createExperience,\n validateExperienceBuilderConfig,\n debug as cfDebug,\n} from '@contentful/experiences-core';\nimport { EntityStore } from '@contentful/experiences-core';\nimport type { Experience } from '@contentful/experiences-core/types';\nimport { PreviewDeliveryRoot } from './blocks/preview/PreviewDeliveryRoot';\nimport VisualEditorRoot from './blocks/editor/VisualEditorRoot';\nimport { useDetectCanvasMode } from './hooks/useDetectCanvasMode';\nimport { StudioCanvasMode } from '@contentful/experiences-core/constants';\n\ntype ExperienceRootProps = {\n experience?: Experience<EntityStore> | string | null;\n locale: string;\n visualEditorMode?: VisualEditorMode;\n /** Enables extra logging in the SDK to support troubleshooting.\n * This option is not recommended for production environments as it\n * will result in too many unnecessary logs being produced during runtime.\n * Default: false\n */\n debug?: boolean;\n};\n\nexport const ExperienceRoot = ({\n locale,\n experience,\n visualEditorMode = VisualEditorMode.LazyLoad,\n debug,\n}: ExperienceRootProps) => {\n const mode = useDetectCanvasMode();\n\n if (typeof debug === 'boolean') {\n cfDebug.setActiveLevel(debug ? 'debug' : 'warn');\n }\n\n //If experience is passed in as a JSON string, recreate it to an experience object\n const experienceObject =\n typeof experience === 'string' ? createExperience(experience) : experience;\n\n validateExperienceBuilderConfig({\n locale,\n mode,\n });\n\n if (mode === StudioCanvasMode.EDITOR || mode === StudioCanvasMode.READ_ONLY) {\n return (\n <VisualEditorRoot\n experience={experienceObject as Experience<EntityStore> | undefined}\n visualEditorMode={visualEditorMode}\n initialLocale={locale}\n canvasMode={mode}\n />\n );\n }\n\n if (!experienceObject) return null;\n\n return <PreviewDeliveryRoot locale={locale} experience={experienceObject} />;\n};\n"],"names":[],"mappings":";;;;;;;;AA2Ba;AAMX;AAEA;AACE;;;AAIF;AAGA;;;AAGC;AAED;;;AAWA;AAAuB;;AAGzB;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisualEditorInjectScript.js","sources":["../../../../src/blocks/editor/VisualEditorInjectScript.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { VISUAL_EDITOR_CONTAINER_ID } from '@contentful/experiences-core/constants';\n\n/**\n * The version can be any semver version or dist tag\n * Examples: @latest, @dev, @pre, @0.0.1-pre-20231213T103332.0\n *\n * If the version is empty, unpkg will redirect to the latest version of the package\n */\nconst version = '@0.0.1-pre-20231213T210727.0';\n\n/**\n * CDN URL for the visual editor script\n *\n * This can be changed to a local file path for development\n *\n * TODO: Reconsider unpkg\n */\nconst scriptUrl = `https://unpkg.com/@contentful/experience-builder-visual-editor${version}/dist/renderApp.js`;\n\n/**\n * This component injects the visual editor script into the page\n */\nexport default function VisualEditorInjectScript() {\n useEffect(() => {\n const script = document.createElement('script');\n script.type = 'module';\n script.src = scriptUrl;\n script.async = true;\n\n document.body.appendChild(script);\n return () => {\n document.body.removeChild(script);\n };\n }, []);\n\n return <div id={VISUAL_EDITOR_CONTAINER_ID} />;\n}\n"],"names":["_jsx"],"mappings":";;;;AAGA;;;;;AAKG;AACH,MAAM,OAAO,GAAG,8BAA8B;
|
|
1
|
+
{"version":3,"file":"VisualEditorInjectScript.js","sources":["../../../../src/blocks/editor/VisualEditorInjectScript.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { VISUAL_EDITOR_CONTAINER_ID } from '@contentful/experiences-core/constants';\n\n/**\n * The version can be any semver version or dist tag\n * Examples: @latest, @dev, @pre, @0.0.1-pre-20231213T103332.0\n *\n * If the version is empty, unpkg will redirect to the latest version of the package\n */\nconst version = '@0.0.1-pre-20231213T210727.0';\n\n/**\n * CDN URL for the visual editor script\n *\n * This can be changed to a local file path for development\n *\n * TODO: Reconsider unpkg\n */\nconst scriptUrl = `https://unpkg.com/@contentful/experience-builder-visual-editor${version}/dist/renderApp.js`;\n\n/**\n * This component injects the visual editor script into the page\n */\nexport default function VisualEditorInjectScript() {\n useEffect(() => {\n const script = document.createElement('script');\n script.type = 'module';\n script.src = scriptUrl;\n script.async = true;\n\n document.body.appendChild(script);\n return () => {\n document.body.removeChild(script);\n };\n }, []);\n\n return <div id={VISUAL_EDITOR_CONTAINER_ID} />;\n}\n"],"names":["_jsx"],"mappings":";;;;AAGA;;;;;AAKG;AACH,MAAM,OAAO,GAAG,8BAA8B,CAAC;AAE/C;;;;;;AAMG;AACH,MAAM,SAAS,GAAG,CAAiE,8DAAA,EAAA,OAAO,oBAAoB,CAAC;AAE/G;;AAEG;AACW,SAAU,wBAAwB,GAAA;IAC9C,SAAS,CAAC,MAAK;QACb,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAChD,QAAA,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;AACvB,QAAA,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC;AACvB,QAAA,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAEpB,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAClC,QAAA,OAAO,MAAK;AACV,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACpC,SAAC,CAAC;KACH,EAAE,EAAE,CAAC,CAAC;AAEP,IAAA,OAAOA,GAAK,CAAA,KAAA,EAAA,EAAA,EAAE,EAAE,0BAA0B,GAAI,CAAC;AACjD;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisualEditorLoader.js","sources":["../../../../src/blocks/editor/VisualEditorLoader.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport {\n type InMemoryEntitiesStore,\n type EntityStore,\n inMemoryEntitiesStore,\n VisualEditorMode,\n} from '@contentful/experiences-core';\nimport type { Experience } from '@contentful/experiences-core/types';\nimport type { StudioCanvasMode } from '@contentful/experiences-core/constants';\n\ntype VisualEditorLoaderProps = {\n visualEditorMode: VisualEditorMode;\n canvasMode?: StudioCanvasMode;\n experience?: Experience<EntityStore>;\n};\n\nexport const VisualEditorLoader: React.FC<VisualEditorLoaderProps> = ({\n visualEditorMode,\n experience,\n canvasMode,\n}) => {\n const [VisualEditor, setVisualEditor] = useState<React.ComponentType<{\n experience?: Experience<EntityStore>;\n inMemoryEntitiesStore?: InMemoryEntitiesStore;\n canvasMode?: StudioCanvasMode;\n }> | null>(null);\n\n useEffect(() => {\n // Dynamically import the visual editor based on the configured mode\n switch (visualEditorMode) {\n case VisualEditorMode.InjectScript:\n import('./VisualEditorInjectScript').then((module) => {\n setVisualEditor(() => module.default);\n });\n break;\n\n // VisualEditorMode.LazyLoad:\n default:\n import('@contentful/experiences-visual-editor-react').then((module) => {\n setVisualEditor(() => module.default);\n });\n }\n }, [visualEditorMode]);\n\n if (!VisualEditor) return null;\n\n return (\n <VisualEditor\n experience={experience}\n inMemoryEntitiesStore={inMemoryEntitiesStore}\n canvasMode={canvasMode}\n />\n );\n};\n\nexport default VisualEditorLoader;\n"],"names":["_jsx"],"mappings":";;;;AAgBO,MAAM,kBAAkB,GAAsC,CAAC,EACpE,gBAAgB,EAChB,UAAU,EACV,UAAU,GACX,KAAI;IACH,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAIrC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"VisualEditorLoader.js","sources":["../../../../src/blocks/editor/VisualEditorLoader.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport {\n type InMemoryEntitiesStore,\n type EntityStore,\n inMemoryEntitiesStore,\n VisualEditorMode,\n} from '@contentful/experiences-core';\nimport type { Experience } from '@contentful/experiences-core/types';\nimport type { StudioCanvasMode } from '@contentful/experiences-core/constants';\n\ntype VisualEditorLoaderProps = {\n visualEditorMode: VisualEditorMode;\n canvasMode?: StudioCanvasMode;\n experience?: Experience<EntityStore>;\n};\n\nexport const VisualEditorLoader: React.FC<VisualEditorLoaderProps> = ({\n visualEditorMode,\n experience,\n canvasMode,\n}) => {\n const [VisualEditor, setVisualEditor] = useState<React.ComponentType<{\n experience?: Experience<EntityStore>;\n inMemoryEntitiesStore?: InMemoryEntitiesStore;\n canvasMode?: StudioCanvasMode;\n }> | null>(null);\n\n useEffect(() => {\n // Dynamically import the visual editor based on the configured mode\n switch (visualEditorMode) {\n case VisualEditorMode.InjectScript:\n import('./VisualEditorInjectScript').then((module) => {\n setVisualEditor(() => module.default);\n });\n break;\n\n // VisualEditorMode.LazyLoad:\n default:\n import('@contentful/experiences-visual-editor-react').then((module) => {\n setVisualEditor(() => module.default);\n });\n }\n }, [visualEditorMode]);\n\n if (!VisualEditor) return null;\n\n return (\n <VisualEditor\n experience={experience}\n inMemoryEntitiesStore={inMemoryEntitiesStore}\n canvasMode={canvasMode}\n />\n );\n};\n\nexport default VisualEditorLoader;\n"],"names":["_jsx"],"mappings":";;;;AAgBO,MAAM,kBAAkB,GAAsC,CAAC,EACpE,gBAAgB,EAChB,UAAU,EACV,UAAU,GACX,KAAI;IACH,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAIrC,IAAI,CAAC,CAAC;IAEjB,SAAS,CAAC,MAAK;;QAEb,QAAQ,gBAAgB;YACtB,KAAK,gBAAgB,CAAC,YAAY;gBAChC,OAAO,+BAA4B,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;oBACnD,eAAe,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;AACxC,iBAAC,CAAC,CAAC;gBACH,MAAM;;AAGR,YAAA;gBACE,OAAO,6CAA6C,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;oBACpE,eAAe,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;AACxC,iBAAC,CAAC,CAAC;SACN;AACH,KAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAEvB,IAAA,IAAI,CAAC,YAAY;AAAE,QAAA,OAAO,IAAI,CAAC;AAE/B,IAAA,QACEA,GAAC,CAAA,YAAY,EACX,EAAA,UAAU,EAAE,UAAU,EACtB,qBAAqB,EAAE,qBAAqB,EAC5C,UAAU,EAAE,UAAU,EAAA,CACtB,EACF;AACJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisualEditorRoot.js","sources":["../../../../src/blocks/editor/VisualEditorRoot.tsx"],"sourcesContent":["import React, { Suspense } from 'react';\nimport { EntityStore, VisualEditorMode } from '@contentful/experiences-core';\nimport { ErrorBoundary } from '../../components/ErrorBoundary';\nimport { useInitializeVisualEditor } from '../../hooks/useInitializeVisualEditor';\nimport type { Experience } from '@contentful/experiences-core/types';\nimport type { StudioCanvasMode } from '@contentful/experiences-core/constants';\n\nconst VisualEditorLoader = React.lazy(() => import('./VisualEditorLoader'));\n\ntype VisualEditorRootProps = {\n visualEditorMode: VisualEditorMode;\n canvasMode?: StudioCanvasMode;\n experience?: Experience<EntityStore>;\n initialLocale: string;\n};\n\nconst VisualEditorRoot: React.FC<VisualEditorRootProps> = ({\n visualEditorMode,\n canvasMode,\n experience,\n initialLocale,\n}) => {\n const initialEntities = experience?.entityStore?.entities || [];\n\n useInitializeVisualEditor({\n initialLocale,\n initialEntities,\n });\n\n return (\n <Suspense fallback={<div>Loading...</div>}>\n <VisualEditorLoader\n experience={experience}\n visualEditorMode={visualEditorMode}\n canvasMode={canvasMode}\n />\n </Suspense>\n );\n};\n\nconst VisualEditorRootWithErrorBoundary: React.FC<VisualEditorRootProps> = (props) => {\n return (\n <ErrorBoundary>\n <VisualEditorRoot {...props} />\n </ErrorBoundary>\n );\n};\n\nexport default VisualEditorRootWithErrorBoundary;\n"],"names":["_jsx"],"mappings":";;;;;AAOA,MAAM,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,OAAO,yBAAsB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"VisualEditorRoot.js","sources":["../../../../src/blocks/editor/VisualEditorRoot.tsx"],"sourcesContent":["import React, { Suspense } from 'react';\nimport { EntityStore, VisualEditorMode } from '@contentful/experiences-core';\nimport { ErrorBoundary } from '../../components/ErrorBoundary';\nimport { useInitializeVisualEditor } from '../../hooks/useInitializeVisualEditor';\nimport type { Experience } from '@contentful/experiences-core/types';\nimport type { StudioCanvasMode } from '@contentful/experiences-core/constants';\n\nconst VisualEditorLoader = React.lazy(() => import('./VisualEditorLoader'));\n\ntype VisualEditorRootProps = {\n visualEditorMode: VisualEditorMode;\n canvasMode?: StudioCanvasMode;\n experience?: Experience<EntityStore>;\n initialLocale: string;\n};\n\nconst VisualEditorRoot: React.FC<VisualEditorRootProps> = ({\n visualEditorMode,\n canvasMode,\n experience,\n initialLocale,\n}) => {\n const initialEntities = experience?.entityStore?.entities || [];\n\n useInitializeVisualEditor({\n initialLocale,\n initialEntities,\n });\n\n return (\n <Suspense fallback={<div>Loading...</div>}>\n <VisualEditorLoader\n experience={experience}\n visualEditorMode={visualEditorMode}\n canvasMode={canvasMode}\n />\n </Suspense>\n );\n};\n\nconst VisualEditorRootWithErrorBoundary: React.FC<VisualEditorRootProps> = (props) => {\n return (\n <ErrorBoundary>\n <VisualEditorRoot {...props} />\n </ErrorBoundary>\n );\n};\n\nexport default VisualEditorRootWithErrorBoundary;\n"],"names":["_jsx"],"mappings":";;;;;AAOA,MAAM,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,OAAO,yBAAsB,CAAC,CAAC,CAAC;AAS5E,MAAM,gBAAgB,GAAoC,CAAC,EACzD,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,aAAa,GACd,KAAI;IACH,MAAM,eAAe,GAAG,UAAU,EAAE,WAAW,EAAE,QAAQ,IAAI,EAAE,CAAC;AAEhE,IAAA,yBAAyB,CAAC;QACxB,aAAa;QACb,eAAe;AAChB,KAAA,CAAC,CAAC;IAEH,QACEA,GAAC,CAAA,QAAQ,EAAC,EAAA,QAAQ,EAAEA,GAAqB,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,YAAA,EAAA,CAAA,EAAA,QAAA,EACvCA,GAAC,CAAA,kBAAkB,EACjB,EAAA,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,gBAAgB,EAClC,UAAU,EAAE,UAAU,EAAA,CACtB,EACO,CAAA,EACX;AACJ,CAAC,CAAC;AAEF,MAAM,iCAAiC,GAAoC,CAAC,KAAK,KAAI;IACnF,QACEA,GAAC,CAAA,aAAa,EACZ,EAAA,QAAA,EAAAA,GAAA,CAAC,gBAAgB,EAAA,EAAA,GAAK,KAAK,EAAA,CAAI,EACjB,CAAA,EAChB;AACJ;;;;"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { jsx, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import React, { useMemo } from 'react';
|
|
3
|
-
import { checkIsAssemblyNode,
|
|
3
|
+
import { checkIsAssemblyNode, transformBoundContentValue, resolveHyperlinkPattern, splitDirectAndSlotChildren, getSdkOptions, sanitizeNodeProps } from '@contentful/experiences-core';
|
|
4
4
|
import { HYPERLINK_DEFAULT_PATTERN, CONTENTFUL_COMPONENTS } from '@contentful/experiences-core/constants';
|
|
5
5
|
import { getComponentRegistration, createAssemblyRegistration } from '../../core/componentRegistry.js';
|
|
6
6
|
import { useInjectStylesheet } from '../../hooks/useInjectStylesheet.js';
|
|
7
|
-
import {
|
|
7
|
+
import { Assembly, ContentfulContainer } from '@contentful/experiences-components-react';
|
|
8
8
|
import { resolvePattern } from '../../core/preview/assemblyUtils.js';
|
|
9
9
|
import { resolveMaybePrebindingDefaultValuePath } from '../../utils/prebindingUtils.js';
|
|
10
10
|
import { parseComponentProps } from '../../utils/parseComponentProps.js';
|
|
@@ -87,6 +87,7 @@ const CompositionBlock = ({ node: rawNode, locale, entityStore, hyperlinkPattern
|
|
|
87
87
|
};
|
|
88
88
|
const { contentProps = {}, styleProps = {}, customDesignProps = {}, mediaQuery, } = parseComponentProps({
|
|
89
89
|
breakpoints: entityStore.breakpoints,
|
|
90
|
+
mainBreakpoint,
|
|
90
91
|
componentDefinition: componentRegistration.definition,
|
|
91
92
|
patternRootNodeIdsChain,
|
|
92
93
|
node,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompositionBlock.js","sources":["../../../../src/blocks/preview/CompositionBlock.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport type { UnresolvedLink } from 'contentful';\nimport { Entry } from 'contentful';\nimport {\n checkIsAssemblyNode,\n EntityStore,\n resolveHyperlinkPattern,\n sanitizeNodeProps,\n transformBoundContentValue,\n splitDirectAndSlotChildren,\n getSdkOptions,\n} from '@contentful/experiences-core';\nimport {\n CONTENTFUL_COMPONENTS,\n HYPERLINK_DEFAULT_PATTERN,\n} from '@contentful/experiences-core/constants';\nimport type {\n ComponentTreeNode,\n DesignValue,\n Parameter,\n PrimitiveValue,\n ResolveDesignValueType,\n StyleProps,\n} from '@contentful/experiences-core/types';\nimport { createAssemblyRegistration, getComponentRegistration } from '../../core/componentRegistry';\nimport { useInjectStylesheet } from '../../hooks/useInjectStylesheet';\nimport { Assembly, ContentfulContainer } from '@contentful/experiences-components-react';\nimport { resolvePattern } from '../../core/preview/assemblyUtils';\nimport { resolveMaybePrebindingDefaultValuePath } from '../../utils/prebindingUtils';\nimport { parseComponentProps } from '../../utils/parseComponentProps';\n\ntype CompositionBlockProps = {\n node: ComponentTreeNode;\n locale: string;\n entityStore: EntityStore;\n hyperlinkPattern?: string | undefined;\n resolveDesignValue: ResolveDesignValueType;\n getPatternChildNodeClassName?: (childNodeId: string) => string | undefined;\n /** Set of definition IDs of wrapping patterns to prevent circular dependencies. */\n wrappingPatternIds?: Set<string>;\n rootPatternParameters?: Record<string, Parameter>;\n /**\n * Chained IDs to ensure uniqueness across multiple instances of the same pattern\n * when storing & accessing cfSsrClassName.\n */\n patternRootNodeIdsChain?: Array<string>;\n};\n\nexport const CompositionBlock = ({\n node: rawNode,\n locale,\n entityStore,\n hyperlinkPattern,\n resolveDesignValue,\n getPatternChildNodeClassName,\n wrappingPatternIds: parentWrappingPatternIds = new Set(),\n patternRootNodeIdsChain: parentPatternRootNodeIdsChain = [],\n rootPatternParameters,\n}: CompositionBlockProps) => {\n const isPatternNode = useMemo(() => {\n return checkIsAssemblyNode({\n componentId: rawNode.definitionId,\n usedComponents: entityStore.usedComponents,\n });\n }, [entityStore.usedComponents, rawNode.definitionId]);\n\n const patternRootNodeIdsChain = useMemo(() => {\n if (isPatternNode) {\n // Pattern nodes are chained without a separator (following the format for prebinding/parameters)\n return [...parentPatternRootNodeIdsChain, rawNode.id!];\n }\n return parentPatternRootNodeIdsChain;\n }, [isPatternNode, parentPatternRootNodeIdsChain, rawNode.id]);\n\n const rootParameters = useMemo(() => {\n // covers the case when previewing a pattern\n // all parameters are defined on the tree root node and will be provided from the start\n if (rootPatternParameters) {\n return rootPatternParameters;\n }\n\n // covers the case when previewing an experience\n // parameters here are stored in CMA, so we retrieve them from the pattern's node and pass it down\n if (isPatternNode && rawNode.parameters && Object.keys(rawNode.parameters).length) {\n return rawNode.parameters;\n }\n\n // in case none exist - it is likely a non-pattern component, or just a pattern that has no parameters\n return undefined;\n }, [rawNode, rootPatternParameters, isPatternNode]);\n\n const node = useMemo(() => {\n if (isPatternNode) {\n return resolvePattern({\n node: rawNode,\n entityStore,\n parentPatternRootNodeIdsChain: patternRootNodeIdsChain,\n rootPatternParameters: rootParameters!,\n });\n } else {\n return rawNode;\n }\n }, [entityStore, isPatternNode, rawNode, patternRootNodeIdsChain, rootParameters]);\n\n const wrappingPatternIds = useMemo(() => {\n if (isPatternNode) {\n return new Set([node.definitionId, ...parentWrappingPatternIds]);\n }\n return parentWrappingPatternIds;\n }, [isPatternNode, node, parentWrappingPatternIds]);\n\n const componentRegistration = useMemo(() => {\n const registration = getComponentRegistration(node.definitionId as string);\n\n if (isPatternNode && !registration) {\n return createAssemblyRegistration({\n definitionId: node.definitionId as string,\n component: Assembly,\n });\n }\n return registration;\n }, [isPatternNode, node.definitionId]);\n\n const { ssrProps, contentProps, props, mediaQuery } = useMemo(() => {\n // In SSR, we store the className under breakpoints[0] which is resolved here to the actual string\n const cfSsrClassNameValues = node.variables.cfSsrClassName as DesignValue | undefined;\n const mainBreakpoint = entityStore.breakpoints[0];\n const cfSsrClassName = cfSsrClassNameValues?.valuesByBreakpoint?.[mainBreakpoint.id] as\n string | undefined;\n\n // Don't enrich the assembly wrapper node with props\n if (!componentRegistration || isPatternNode) {\n const ssrProps = { cfSsrClassName };\n const props: Record<string, PrimitiveValue> = { className: cfSsrClassName };\n return {\n ssrProps,\n props,\n };\n }\n\n const ssrProps: Record<string, string | undefined> = {\n cfSsrClassName:\n node.id && getPatternChildNodeClassName\n ? getPatternChildNodeClassName(node.id)\n : cfSsrClassName,\n };\n\n const {\n contentProps = {},\n styleProps = {},\n customDesignProps = {},\n mediaQuery,\n } = parseComponentProps({\n breakpoints: entityStore.breakpoints,\n mainBreakpoint,\n componentDefinition: componentRegistration.definition,\n patternRootNodeIdsChain,\n node,\n resolveDesignValue,\n resolveBoundValue: ({ binding, propertyName, dataType }) => {\n const [, uuid] = binding.path.split('/');\n const boundEntityLink = entityStore.dataSource[uuid] as UnresolvedLink<'Entry' | 'Asset'>;\n // TODO: Temporary fix while we look into SPA-3212 it occurs where we have prebound props but data source link is missing\n // this only occurs after live updates of nested patterns.\n if (!boundEntityLink) return;\n return transformBoundContentValue(\n node.variables,\n entityStore,\n boundEntityLink,\n resolveDesignValue,\n propertyName,\n dataType,\n binding.path,\n );\n },\n resolveHyperlinkValue: ({ linkTargetKey }) => {\n const boundEntity = entityStore.dataSource[linkTargetKey];\n const hyperlinkEntry = entityStore.getEntryOrAsset(boundEntity, linkTargetKey);\n\n return resolveHyperlinkPattern(\n componentRegistration.definition.hyperlinkPattern ||\n hyperlinkPattern ||\n HYPERLINK_DEFAULT_PATTERN,\n hyperlinkEntry as Entry,\n locale,\n );\n },\n resolveUnboundValue: ({ mappingKey, defaultValue }) => {\n return entityStore.unboundValues[mappingKey]?.value ?? defaultValue;\n },\n resolveComponentValue: ({ mappingKey, propertyName, dataType, resolveBoundValue }) => {\n if (!entityStore.isExperienceAPatternEntry) {\n return;\n }\n\n const path = resolveMaybePrebindingDefaultValuePath({\n componentValueKey: mappingKey,\n patternRootNodeIdsChain,\n entityStore,\n });\n\n if (path) {\n return resolveBoundValue({\n propertyName,\n dataType,\n binding: {\n type: 'BoundValue',\n path,\n },\n });\n }\n },\n });\n\n const props: Record<string, PrimitiveValue> = {\n className: ssrProps.cfSsrClassName ?? mediaQuery?.className,\n ...styleProps,\n ...contentProps,\n ...customDesignProps,\n };\n\n return {\n ssrProps,\n contentProps,\n mediaQuery,\n props,\n };\n }, [\n node,\n entityStore,\n componentRegistration,\n isPatternNode,\n getPatternChildNodeClassName,\n resolveDesignValue,\n hyperlinkPattern,\n locale,\n patternRootNodeIdsChain,\n ]);\n\n // do not inject the stylesheet into the dom because it's already been done on the server side\n useInjectStylesheet(ssrProps.cfSsrClassName ? undefined : mediaQuery?.css);\n\n if (!componentRegistration) {\n return null;\n }\n\n // When detecting a circular dependency, we stop silently. The editor mode will render an actionable error.\n if (parentWrappingPatternIds.has(node.definitionId)) {\n return null;\n }\n\n const { component: component } = componentRegistration;\n\n // Retrieves the CSS class name for a given child node ID.\n const _getPatternChildNodeClassName = (childNodeId: string) => {\n if (isPatternNode) {\n const nodeIdsChain = [...patternRootNodeIdsChain, childNodeId].join('-');\n // @ts-expect-error -- property cfSsrClassName is a map (id to classNames) that is added during rendering in ssrStyles\n const classesForNode: DesignValue | undefined = node.variables.cfSsrClassName?.[nodeIdsChain];\n if (!classesForNode) return undefined;\n return resolveDesignValue(classesForNode.valuesByBreakpoint) as string;\n }\n return getPatternChildNodeClassName?.(childNodeId);\n };\n\n const { slotNodesMap, directChildNodes } = splitDirectAndSlotChildren(\n node.children,\n componentRegistration.definition,\n );\n\n const renderChildNode = (childNode: ComponentTreeNode, index: number) => (\n <CompositionBlock\n getPatternChildNodeClassName={\n isPatternNode || getPatternChildNodeClassName ? _getPatternChildNodeClassName : undefined\n }\n node={childNode}\n key={childNode.id ?? index}\n locale={locale}\n hyperlinkPattern={hyperlinkPattern}\n entityStore={entityStore}\n resolveDesignValue={resolveDesignValue}\n wrappingPatternIds={wrappingPatternIds}\n patternRootNodeIdsChain={patternRootNodeIdsChain}\n rootPatternParameters={rootParameters}\n />\n );\n\n const renderedSlotNodesMap = Object.entries(slotNodesMap).reduce(\n (acc, [slotId, nodes]) => {\n if (nodes?.length) {\n acc[slotId] = <>{nodes.map(renderChildNode)}</>;\n }\n return acc;\n },\n {} as Record<string, React.JSX.Element>,\n );\n\n const renderedChildren = directChildNodes?.map(renderChildNode);\n\n const sdkOptions = getSdkOptions();\n\n // TODO: we might be able to remove this special case as well by not dropping the two props in the sanitizeNodeProps function\n // We allow custom container rendering through a new sdk option (not introducing a breaking change for existing customers).\n if (\n isContainerOrSection(node.definitionId) &&\n !sdkOptions.__unsafe__enableBuiltInStructureOverwrites\n ) {\n return (\n <ContentfulContainer\n cfHyperlink={(contentProps as StyleProps).cfHyperlink}\n cfOpenInNewTab={(contentProps as StyleProps).cfOpenInNewTab}\n className={props.className as string | undefined}>\n {renderedChildren}\n </ContentfulContainer>\n );\n }\n\n return React.createElement(\n component,\n {\n ...sanitizeNodeProps(props),\n ...renderedSlotNodesMap,\n },\n // If there are no children, a custom property called `children` can be passed through to the custom component\n ...(renderedChildren ?? []),\n );\n};\n\nconst isContainerOrSection = (\n nodeDefinitionId: string,\n): nodeDefinitionId is 'contentful-container' | 'contentful-section' =>\n [CONTENTFUL_COMPONENTS.container.id, CONTENTFUL_COMPONENTS.section.id].includes(\n nodeDefinitionId as 'contentful-container' | 'contentful-section',\n );\n"],"names":["_jsx","_Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CompositionBlock.js","sources":["../../../../src/blocks/preview/CompositionBlock.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport type { UnresolvedLink } from 'contentful';\nimport { Entry } from 'contentful';\nimport {\n checkIsAssemblyNode,\n EntityStore,\n resolveHyperlinkPattern,\n sanitizeNodeProps,\n transformBoundContentValue,\n splitDirectAndSlotChildren,\n getSdkOptions,\n} from '@contentful/experiences-core';\nimport {\n CONTENTFUL_COMPONENTS,\n HYPERLINK_DEFAULT_PATTERN,\n} from '@contentful/experiences-core/constants';\nimport type {\n ComponentTreeNode,\n DesignValue,\n Parameter,\n PrimitiveValue,\n ResolveDesignValueType,\n StyleProps,\n} from '@contentful/experiences-core/types';\nimport { createAssemblyRegistration, getComponentRegistration } from '../../core/componentRegistry';\nimport { useInjectStylesheet } from '../../hooks/useInjectStylesheet';\nimport { Assembly, ContentfulContainer } from '@contentful/experiences-components-react';\nimport { resolvePattern } from '../../core/preview/assemblyUtils';\nimport { resolveMaybePrebindingDefaultValuePath } from '../../utils/prebindingUtils';\nimport { parseComponentProps } from '../../utils/parseComponentProps';\n\ntype CompositionBlockProps = {\n node: ComponentTreeNode;\n locale: string;\n entityStore: EntityStore;\n hyperlinkPattern?: string | undefined;\n resolveDesignValue: ResolveDesignValueType;\n getPatternChildNodeClassName?: (childNodeId: string) => string | undefined;\n /** Set of definition IDs of wrapping patterns to prevent circular dependencies. */\n wrappingPatternIds?: Set<string>;\n rootPatternParameters?: Record<string, Parameter>;\n /**\n * Chained IDs to ensure uniqueness across multiple instances of the same pattern\n * when storing & accessing cfSsrClassName.\n */\n patternRootNodeIdsChain?: Array<string>;\n};\n\nexport const CompositionBlock = ({\n node: rawNode,\n locale,\n entityStore,\n hyperlinkPattern,\n resolveDesignValue,\n getPatternChildNodeClassName,\n wrappingPatternIds: parentWrappingPatternIds = new Set(),\n patternRootNodeIdsChain: parentPatternRootNodeIdsChain = [],\n rootPatternParameters,\n}: CompositionBlockProps) => {\n const isPatternNode = useMemo(() => {\n return checkIsAssemblyNode({\n componentId: rawNode.definitionId,\n usedComponents: entityStore.usedComponents,\n });\n }, [entityStore.usedComponents, rawNode.definitionId]);\n\n const patternRootNodeIdsChain = useMemo(() => {\n if (isPatternNode) {\n // Pattern nodes are chained without a separator (following the format for prebinding/parameters)\n return [...parentPatternRootNodeIdsChain, rawNode.id!];\n }\n return parentPatternRootNodeIdsChain;\n }, [isPatternNode, parentPatternRootNodeIdsChain, rawNode.id]);\n\n const rootParameters = useMemo(() => {\n // covers the case when previewing a pattern\n // all parameters are defined on the tree root node and will be provided from the start\n if (rootPatternParameters) {\n return rootPatternParameters;\n }\n\n // covers the case when previewing an experience\n // parameters here are stored in CMA, so we retrieve them from the pattern's node and pass it down\n if (isPatternNode && rawNode.parameters && Object.keys(rawNode.parameters).length) {\n return rawNode.parameters;\n }\n\n // in case none exist - it is likely a non-pattern component, or just a pattern that has no parameters\n return undefined;\n }, [rawNode, rootPatternParameters, isPatternNode]);\n\n const node = useMemo(() => {\n if (isPatternNode) {\n return resolvePattern({\n node: rawNode,\n entityStore,\n parentPatternRootNodeIdsChain: patternRootNodeIdsChain,\n rootPatternParameters: rootParameters!,\n });\n } else {\n return rawNode;\n }\n }, [entityStore, isPatternNode, rawNode, patternRootNodeIdsChain, rootParameters]);\n\n const wrappingPatternIds = useMemo(() => {\n if (isPatternNode) {\n return new Set([node.definitionId, ...parentWrappingPatternIds]);\n }\n return parentWrappingPatternIds;\n }, [isPatternNode, node, parentWrappingPatternIds]);\n\n const componentRegistration = useMemo(() => {\n const registration = getComponentRegistration(node.definitionId as string);\n\n if (isPatternNode && !registration) {\n return createAssemblyRegistration({\n definitionId: node.definitionId as string,\n component: Assembly,\n });\n }\n return registration;\n }, [isPatternNode, node.definitionId]);\n\n const { ssrProps, contentProps, props, mediaQuery } = useMemo(() => {\n // In SSR, we store the className under breakpoints[0] which is resolved here to the actual string\n const cfSsrClassNameValues = node.variables.cfSsrClassName as DesignValue | undefined;\n const mainBreakpoint = entityStore.breakpoints[0];\n const cfSsrClassName = cfSsrClassNameValues?.valuesByBreakpoint?.[mainBreakpoint.id] as\n | string\n | undefined;\n\n // Don't enrich the assembly wrapper node with props\n if (!componentRegistration || isPatternNode) {\n const ssrProps = { cfSsrClassName };\n const props: Record<string, PrimitiveValue> = { className: cfSsrClassName };\n return {\n ssrProps,\n props,\n };\n }\n\n const ssrProps: Record<string, string | undefined> = {\n cfSsrClassName:\n node.id && getPatternChildNodeClassName\n ? getPatternChildNodeClassName(node.id)\n : cfSsrClassName,\n };\n\n const {\n contentProps = {},\n styleProps = {},\n customDesignProps = {},\n mediaQuery,\n } = parseComponentProps({\n breakpoints: entityStore.breakpoints,\n mainBreakpoint,\n componentDefinition: componentRegistration.definition,\n patternRootNodeIdsChain,\n node,\n resolveDesignValue,\n resolveBoundValue: ({ binding, propertyName, dataType }) => {\n const [, uuid] = binding.path.split('/');\n const boundEntityLink = entityStore.dataSource[uuid] as UnresolvedLink<'Entry' | 'Asset'>;\n // TODO: Temporary fix while we look into SPA-3212 it occurs where we have prebound props but data source link is missing\n // this only occurs after live updates of nested patterns.\n if (!boundEntityLink) return;\n return transformBoundContentValue(\n node.variables,\n entityStore,\n boundEntityLink,\n resolveDesignValue,\n propertyName,\n dataType,\n binding.path,\n );\n },\n resolveHyperlinkValue: ({ linkTargetKey }) => {\n const boundEntity = entityStore.dataSource[linkTargetKey];\n const hyperlinkEntry = entityStore.getEntryOrAsset(boundEntity, linkTargetKey);\n\n return resolveHyperlinkPattern(\n componentRegistration.definition.hyperlinkPattern ||\n hyperlinkPattern ||\n HYPERLINK_DEFAULT_PATTERN,\n hyperlinkEntry as Entry,\n locale,\n );\n },\n resolveUnboundValue: ({ mappingKey, defaultValue }) => {\n return entityStore.unboundValues[mappingKey]?.value ?? defaultValue;\n },\n resolveComponentValue: ({ mappingKey, propertyName, dataType, resolveBoundValue }) => {\n if (!entityStore.isExperienceAPatternEntry) {\n return;\n }\n\n const path = resolveMaybePrebindingDefaultValuePath({\n componentValueKey: mappingKey,\n patternRootNodeIdsChain,\n entityStore,\n });\n\n if (path) {\n return resolveBoundValue({\n propertyName,\n dataType,\n binding: {\n type: 'BoundValue',\n path,\n },\n });\n }\n },\n });\n\n const props: Record<string, PrimitiveValue> = {\n className: ssrProps.cfSsrClassName ?? mediaQuery?.className,\n ...styleProps,\n ...contentProps,\n ...customDesignProps,\n };\n\n return {\n ssrProps,\n contentProps,\n mediaQuery,\n props,\n };\n }, [\n node,\n entityStore,\n componentRegistration,\n isPatternNode,\n getPatternChildNodeClassName,\n resolveDesignValue,\n hyperlinkPattern,\n locale,\n patternRootNodeIdsChain,\n ]);\n\n // do not inject the stylesheet into the dom because it's already been done on the server side\n useInjectStylesheet(ssrProps.cfSsrClassName ? undefined : mediaQuery?.css);\n\n if (!componentRegistration) {\n return null;\n }\n\n // When detecting a circular dependency, we stop silently. The editor mode will render an actionable error.\n if (parentWrappingPatternIds.has(node.definitionId)) {\n return null;\n }\n\n const { component: component } = componentRegistration;\n\n // Retrieves the CSS class name for a given child node ID.\n const _getPatternChildNodeClassName = (childNodeId: string) => {\n if (isPatternNode) {\n const nodeIdsChain = [...patternRootNodeIdsChain, childNodeId].join('-');\n // @ts-expect-error -- property cfSsrClassName is a map (id to classNames) that is added during rendering in ssrStyles\n const classesForNode: DesignValue | undefined = node.variables.cfSsrClassName?.[nodeIdsChain];\n if (!classesForNode) return undefined;\n return resolveDesignValue(classesForNode.valuesByBreakpoint) as string;\n }\n return getPatternChildNodeClassName?.(childNodeId);\n };\n\n const { slotNodesMap, directChildNodes } = splitDirectAndSlotChildren(\n node.children,\n componentRegistration.definition,\n );\n\n const renderChildNode = (childNode: ComponentTreeNode, index: number) => (\n <CompositionBlock\n getPatternChildNodeClassName={\n isPatternNode || getPatternChildNodeClassName ? _getPatternChildNodeClassName : undefined\n }\n node={childNode}\n key={childNode.id ?? index}\n locale={locale}\n hyperlinkPattern={hyperlinkPattern}\n entityStore={entityStore}\n resolveDesignValue={resolveDesignValue}\n wrappingPatternIds={wrappingPatternIds}\n patternRootNodeIdsChain={patternRootNodeIdsChain}\n rootPatternParameters={rootParameters}\n />\n );\n\n const renderedSlotNodesMap = Object.entries(slotNodesMap).reduce(\n (acc, [slotId, nodes]) => {\n if (nodes?.length) {\n acc[slotId] = <>{nodes.map(renderChildNode)}</>;\n }\n return acc;\n },\n {} as Record<string, React.JSX.Element>,\n );\n\n const renderedChildren = directChildNodes?.map(renderChildNode);\n\n const sdkOptions = getSdkOptions();\n\n // TODO: we might be able to remove this special case as well by not dropping the two props in the sanitizeNodeProps function\n // We allow custom container rendering through a new sdk option (not introducing a breaking change for existing customers).\n if (\n isContainerOrSection(node.definitionId) &&\n !sdkOptions.__unsafe__enableBuiltInStructureOverwrites\n ) {\n return (\n <ContentfulContainer\n cfHyperlink={(contentProps as StyleProps).cfHyperlink}\n cfOpenInNewTab={(contentProps as StyleProps).cfOpenInNewTab}\n className={props.className as string | undefined}>\n {renderedChildren}\n </ContentfulContainer>\n );\n }\n\n return React.createElement(\n component,\n {\n ...sanitizeNodeProps(props),\n ...renderedSlotNodesMap,\n },\n // If there are no children, a custom property called `children` can be passed through to the custom component\n ...(renderedChildren ?? []),\n );\n};\n\nconst isContainerOrSection = (\n nodeDefinitionId: string,\n): nodeDefinitionId is 'contentful-container' | 'contentful-section' =>\n [CONTENTFUL_COMPONENTS.container.id, CONTENTFUL_COMPONENTS.section.id].includes(\n nodeDefinitionId as 'contentful-container' | 'contentful-section',\n );\n"],"names":["_jsx","_Fragment"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PreviewDeliveryRoot.js","sources":["../../../../src/blocks/preview/PreviewDeliveryRoot.tsx"],"sourcesContent":["import React from 'react';\nimport {\n debug,\n EntityStore,\n generateDefaultDataSourceForPrebindingDefinition,\n} from '@contentful/experiences-core';\nimport type { Experience } from '@contentful/experiences-core/types';\nimport { CompositionBlock } from './CompositionBlock';\nimport { compatibleVersions } from '../../constants';\nimport { useBreakpoints } from '../../hooks';\nimport { PrebindingManager } from '../../core/preview/PrebindingManager';\n\nconst initialPatternRootNodeIdsChain = ['root'];\n\ntype DeliveryRootProps = {\n experience: Experience<EntityStore>;\n locale: string;\n};\n\nexport const PreviewDeliveryRoot = ({ locale, experience }: DeliveryRootProps) => {\n const { entityStore } = experience;\n\n const { resolveDesignValue } = useBreakpoints(entityStore?.breakpoints ?? []);\n\n if (!entityStore?.experienceEntryFields || !entityStore?.schemaVersion) {\n return null;\n }\n\n if (!compatibleVersions.includes(entityStore.schemaVersion)) {\n debug.warn(\n `[experiences-sdk-react::PreviewDeliveryRoot] Contentful experience schema version: ${entityStore.schemaVersion} does not match the compatible schema versions: ${compatibleVersions}. Aborting.`,\n );\n return null;\n }\n\n const isPreviewingAPattern = entityStore.isExperienceAPatternEntry;\n\n if (isPreviewingAPattern) {\n const prebindingDefinitions =\n entityStore.experienceEntryFields.componentSettings?.prebindingDefinitions ?? [];\n PrebindingManager.storePrebindingDefinitions(\n 'root',\n entityStore.experienceEntryId!,\n prebindingDefinitions,\n );\n const { dataSource, parameters: defaultParametersFromRootPattern } =\n generateDefaultDataSourceForPrebindingDefinition(prebindingDefinitions);\n\n if (Object.keys(dataSource).length) {\n entityStore.experienceEntryFields!.dataSource = {\n ...entityStore.dataSource,\n ...dataSource,\n };\n }\n\n return entityStore.experienceEntryFields.componentTree.children.map((childNode, index) => {\n return (\n <CompositionBlock\n key={index}\n node={childNode}\n hyperlinkPattern={experience.hyperlinkPattern}\n locale={locale}\n entityStore={entityStore}\n resolveDesignValue={resolveDesignValue}\n patternRootNodeIdsChain={initialPatternRootNodeIdsChain}\n rootPatternParameters={defaultParametersFromRootPattern}\n />\n );\n });\n }\n\n return (\n <>\n {entityStore.experienceEntryFields.componentTree.children.map((childNode, index) => (\n <CompositionBlock\n key={index}\n node={childNode}\n hyperlinkPattern={experience.hyperlinkPattern}\n locale={locale}\n entityStore={entityStore}\n resolveDesignValue={resolveDesignValue}\n />\n ))}\n </>\n );\n};\n"],"names":["_jsx"],"mappings":";;;;;;;;;AAYA,MAAM,8BAA8B,GAAG,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"PreviewDeliveryRoot.js","sources":["../../../../src/blocks/preview/PreviewDeliveryRoot.tsx"],"sourcesContent":["import React from 'react';\nimport {\n debug,\n EntityStore,\n generateDefaultDataSourceForPrebindingDefinition,\n} from '@contentful/experiences-core';\nimport type { Experience } from '@contentful/experiences-core/types';\nimport { CompositionBlock } from './CompositionBlock';\nimport { compatibleVersions } from '../../constants';\nimport { useBreakpoints } from '../../hooks';\nimport { PrebindingManager } from '../../core/preview/PrebindingManager';\n\nconst initialPatternRootNodeIdsChain = ['root'];\n\ntype DeliveryRootProps = {\n experience: Experience<EntityStore>;\n locale: string;\n};\n\nexport const PreviewDeliveryRoot = ({ locale, experience }: DeliveryRootProps) => {\n const { entityStore } = experience;\n\n const { resolveDesignValue } = useBreakpoints(entityStore?.breakpoints ?? []);\n\n if (!entityStore?.experienceEntryFields || !entityStore?.schemaVersion) {\n return null;\n }\n\n if (!compatibleVersions.includes(entityStore.schemaVersion)) {\n debug.warn(\n `[experiences-sdk-react::PreviewDeliveryRoot] Contentful experience schema version: ${entityStore.schemaVersion} does not match the compatible schema versions: ${compatibleVersions}. Aborting.`,\n );\n return null;\n }\n\n const isPreviewingAPattern = entityStore.isExperienceAPatternEntry;\n\n if (isPreviewingAPattern) {\n const prebindingDefinitions =\n entityStore.experienceEntryFields.componentSettings?.prebindingDefinitions ?? [];\n PrebindingManager.storePrebindingDefinitions(\n 'root',\n entityStore.experienceEntryId!,\n prebindingDefinitions,\n );\n const { dataSource, parameters: defaultParametersFromRootPattern } =\n generateDefaultDataSourceForPrebindingDefinition(prebindingDefinitions);\n\n if (Object.keys(dataSource).length) {\n entityStore.experienceEntryFields!.dataSource = {\n ...entityStore.dataSource,\n ...dataSource,\n };\n }\n\n return entityStore.experienceEntryFields.componentTree.children.map((childNode, index) => {\n return (\n <CompositionBlock\n key={index}\n node={childNode}\n hyperlinkPattern={experience.hyperlinkPattern}\n locale={locale}\n entityStore={entityStore}\n resolveDesignValue={resolveDesignValue}\n patternRootNodeIdsChain={initialPatternRootNodeIdsChain}\n rootPatternParameters={defaultParametersFromRootPattern}\n />\n );\n });\n }\n\n return (\n <>\n {entityStore.experienceEntryFields.componentTree.children.map((childNode, index) => (\n <CompositionBlock\n key={index}\n node={childNode}\n hyperlinkPattern={experience.hyperlinkPattern}\n locale={locale}\n entityStore={entityStore}\n resolveDesignValue={resolveDesignValue}\n />\n ))}\n </>\n );\n};\n"],"names":["_jsx"],"mappings":";;;;;;;;;AAYA,MAAM,8BAA8B,GAAG,CAAC,MAAM,CAAC,CAAC;AAOnC,MAAA,mBAAmB,GAAG,CAAC,EAAE,MAAM,EAAE,UAAU,EAAqB,KAAI;AAC/E,IAAA,MAAM,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC;AAEnC,IAAA,MAAM,EAAE,kBAAkB,EAAE,GAAG,cAAc,CAAC,WAAW,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC;IAE9E,IAAI,CAAC,WAAW,EAAE,qBAAqB,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE;AACtE,QAAA,OAAO,IAAI,CAAC;KACb;IAED,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE;QAC3D,KAAK,CAAC,IAAI,CACR,CAAsF,mFAAA,EAAA,WAAW,CAAC,aAAa,CAAmD,gDAAA,EAAA,kBAAkB,CAAa,WAAA,CAAA,CAClM,CAAC;AACF,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,MAAM,oBAAoB,GAAG,WAAW,CAAC,yBAAyB,CAAC;IAEnE,IAAI,oBAAoB,EAAE;QACxB,MAAM,qBAAqB,GACzB,WAAW,CAAC,qBAAqB,CAAC,iBAAiB,EAAE,qBAAqB,IAAI,EAAE,CAAC;QACnF,iBAAiB,CAAC,0BAA0B,CAC1C,MAAM,EACN,WAAW,CAAC,iBAAkB,EAC9B,qBAAqB,CACtB,CAAC;AACF,QAAA,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,gCAAgC,EAAE,GAChE,gDAAgD,CAAC,qBAAqB,CAAC,CAAC;QAE1E,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE;AAClC,YAAA,WAAW,CAAC,qBAAsB,CAAC,UAAU,GAAG;gBAC9C,GAAG,WAAW,CAAC,UAAU;AACzB,gBAAA,GAAG,UAAU;aACd,CAAC;SACH;AAED,QAAA,OAAO,WAAW,CAAC,qBAAqB,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,KAAI;AACvF,YAAA,QACEA,GAAC,CAAA,gBAAgB,EAEf,EAAA,IAAI,EAAE,SAAS,EACf,gBAAgB,EAAE,UAAU,CAAC,gBAAgB,EAC7C,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EACxB,kBAAkB,EAAE,kBAAkB,EACtC,uBAAuB,EAAE,8BAA8B,EACvD,qBAAqB,EAAE,gCAAgC,IAPlD,KAAK,CAQV,EACF;AACJ,SAAC,CAAC,CAAC;KACJ;IAED,QACEA,0BACG,WAAW,CAAC,qBAAqB,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,MAC7EA,GAAA,CAAC,gBAAgB,EAAA,EAEf,IAAI,EAAE,SAAS,EACf,gBAAgB,EAAE,UAAU,CAAC,gBAAgB,EAC7C,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EACxB,kBAAkB,EAAE,kBAAkB,EALjC,EAAA,KAAK,CAMV,CACH,CAAC,EACD,CAAA,EACH;AACJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorBoundary.js","sources":["../../../src/components/ErrorBoundary.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"ErrorBoundary.js","sources":["../../../src/components/ErrorBoundary.tsx"],"sourcesContent":["import React, { ErrorInfo, ReactElement } from 'react';\nimport { sendMessage } from '@contentful/experiences-core';\nimport { OUTGOING_EVENTS } from '@contentful/experiences-core/constants';\n\n('use client');\n\nconst styles = {\n errorMessage: {\n // These variables are copied over from `global.css` as they are only defined\n // inside the visual-editor package while we need them here already on the public\n // SDK package. In the future, we could move those into the core package to use them\n // in both places without shipping them in preview mode for customers applications.\n '--exp-builder-font-size-m': '0.875rem',\n '--exp-builder-font-size-l': '1rem',\n '--exp-builder-font-stack-primary':\n '-apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol',\n '--exp-builder-red200': '#ffe0e0',\n '--exp-builder-red800': '#7f0010',\n '--exp-builder-blue700': '#0041ab',\n\n margin: '24px',\n fontSize: 'var(--exp-builder-font-size-m)',\n fontFamily: 'var(--exp-builder-font-stack-primary)',\n color: 'var(--exp-builder-red800)',\n padding: '16px',\n backgroundColor: 'var(--exp-builder-red200)',\n },\n title: {\n marginTop: 0,\n fontSize: 'var(--exp-builder-font-size-l)',\n },\n moreDetails: {\n cursor: 'pointer',\n color: 'var(--exp-builder-blue700)',\n },\n};\n\nexport class ErrorBoundary extends React.Component<\n { children: ReactElement },\n { hasError: boolean; error: Error | null; errorInfo: ErrorInfo | null; showErrorDetails: boolean }\n> {\n constructor(props: { children: ReactElement }) {\n super(props);\n this.state = { hasError: false, error: null, errorInfo: null, showErrorDetails: false };\n }\n\n static getDerivedStateFromError() {\n return { hasError: true };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n this.setState({ error, errorInfo });\n if (error.name !== 'ImportedComponentError') {\n sendMessage(OUTGOING_EVENTS.CanvasError, error);\n } else {\n throw error;\n }\n }\n\n render() {\n if (this.state.hasError) {\n return (\n <div style={styles.errorMessage}>\n <h2 style={styles.title}>{`Something went wrong while rendering the experience`}</h2>\n <div>\n The Experience Builder SDK has encountered an error. It may be that the SDK has not been\n set up properly or an imported component has thrown this error. Try to refresh the page\n and find more guidance in our{' '}\n <a\n href=\"https://www.contentful.com/developers/docs/tutorials/general/experience-builder/\"\n rel=\"noreferrer\"\n target=\"_blank\">\n documentation\n </a>\n .\n </div>\n <br />\n <span\n style={styles.moreDetails}\n onClick={() =>\n this.setState((prevState) => ({\n showErrorDetails: !prevState.showErrorDetails,\n }))\n }>\n {this.state.showErrorDetails ? 'Hide' : 'See'} details\n </span>\n {this.state.showErrorDetails && (\n <code>\n {this.state.error?.stack?.split('\\n').map((i, key) => {\n return <div key={key}>{i}</div>;\n })}\n </code>\n )}\n </div>\n );\n }\n return this.props.children;\n }\n}\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sources":["../../src/constants.ts"],"sourcesContent":["// TODO: With the next major version bump, we will drop the \"/types\" subpath but only export types through the index export file.\nimport type { SchemaVersions } from '@contentful/experiences-core/types';\n\n// this is the array of version which currently LATEST_SCHEMA_VERSION is compatible with\nexport const compatibleVersions: SchemaVersions[] = ['2023-09-28'];\n\nexport { SDK_VERSION } from './sdkVersion';\n"],"names":[],"mappings":"AAGA;
|
|
1
|
+
{"version":3,"file":"constants.js","sources":["../../src/constants.ts"],"sourcesContent":["// TODO: With the next major version bump, we will drop the \"/types\" subpath but only export types through the index export file.\nimport type { SchemaVersions } from '@contentful/experiences-core/types';\n\n// this is the array of version which currently LATEST_SCHEMA_VERSION is compatible with\nexport const compatibleVersions: SchemaVersions[] = ['2023-09-28'];\n\nexport { SDK_VERSION } from './sdkVersion';\n"],"names":[],"mappings":"AAGA;AACa,MAAA,kBAAkB,GAAqB,CAAC,YAAY;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as Components from '@contentful/experiences-components-react';
|
|
2
|
-
import { sectionDefinition,
|
|
2
|
+
import { containerDefinition, sectionDefinition, columnsDefinition, singleColumnDefinition, dividerDefinition } from '@contentful/experiences-components-react';
|
|
3
3
|
import { CONTENTFUL_COMPONENTS, INTERNAL_EVENTS, OUTGOING_EVENTS } from '@contentful/experiences-core/constants';
|
|
4
|
-
import {
|
|
4
|
+
import { defineSdkOptions, isContentfulStructureComponent, debug, builtInStyles, optionalBuiltInStyles, createAssemblyDefinition, sendMessage, breakpointsRegistry, designTokensRegistry, checkIsAssemblyDefinition } from '@contentful/experiences-core';
|
|
5
5
|
import { validateComponentDefinition } from '@contentful/experiences-validators';
|
|
6
6
|
import { withComponentWrapper } from '../utils/withComponentWrapper.js';
|
|
7
7
|
import { SDK_VERSION } from '../sdkVersion.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"componentRegistry.js","sources":["../../../src/core/componentRegistry.ts"],"sourcesContent":["import * as Components from '@contentful/experiences-components-react';\nimport type {\n ComponentRegistration,\n ComponentDefinition,\n ComponentRegistrationOptions,\n DesignTokensDefinition,\n} from '@contentful/experiences-core/types';\nimport {\n OUTGOING_EVENTS,\n INTERNAL_EVENTS,\n CONTENTFUL_COMPONENTS,\n} from '@contentful/experiences-core/constants';\nimport {\n builtInStyles as builtInStyleDefinitions,\n designTokensRegistry,\n breakpointsRegistry,\n optionalBuiltInStyles,\n sendMessage,\n defineSdkOptions,\n debug,\n isContentfulStructureComponent,\n checkIsAssemblyDefinition,\n createAssemblyDefinition,\n} from '@contentful/experiences-core';\nimport { validateComponentDefinition } from '@contentful/experiences-validators';\nimport { withComponentWrapper } from '../utils/withComponentWrapper';\nimport { SDK_VERSION } from '../constants';\nimport {\n sectionDefinition,\n containerDefinition,\n columnsDefinition,\n singleColumnDefinition,\n dividerDefinition,\n} from '@contentful/experiences-components-react';\n\nconst CssVarRegex = /var\\(--[\\w-]+\\)/;\n\nconst cloneObject = <T>(targetObject: T): T => {\n if (typeof structuredClone !== 'undefined') {\n return structuredClone(targetObject);\n }\n\n return JSON.parse(JSON.stringify(targetObject));\n};\n\nconst applyComponentDefinitionFallbacks = (componentDefinition: ComponentDefinition) => {\n const clone = cloneObject(componentDefinition);\n for (const variable of Object.values(clone.variables)) {\n variable.group = variable.group ?? 'content';\n }\n return clone;\n};\n\nconst applyBuiltInStyleDefinitions = (componentDefinition: ComponentDefinition) => {\n const clone = cloneObject(componentDefinition);\n\n // set margin built-in style by default\n if (!clone.builtInStyles) {\n clone.builtInStyles = ['cfMargin'];\n }\n\n if (!clone.variables) {\n clone.variables = {};\n }\n\n // Enforce the presence of this property for toggling visibility on any node\n clone.variables['cfVisibility'] = builtInStyleDefinitions['cfVisibility'];\n\n for (const style of clone.builtInStyles || []) {\n if (builtInStyleDefinitions[style]) {\n clone.variables[style] = builtInStyleDefinitions[style] as any; // TODO: fix type\n }\n if (optionalBuiltInStyles[style]) {\n clone.variables[style] = optionalBuiltInStyles[style] as any; // TODO: fix type\n }\n }\n return clone;\n};\n\nexport const enrichComponentDefinition = ({\n component,\n definition,\n options,\n}: ComponentRegistration): ComponentRegistration => {\n const definitionWithFallbacks = applyComponentDefinitionFallbacks(definition);\n const definitionWithBuiltInStyles = applyBuiltInStyleDefinitions(definitionWithFallbacks);\n return {\n component: withComponentWrapper(component, options),\n definition: definitionWithBuiltInStyles,\n options,\n };\n};\n\nconst DEFAULT_COMPONENT_REGISTRATIONS = {\n container: {\n component: Components.ContentfulContainer,\n definition: containerDefinition,\n options: {\n enableEditorProperties: {\n isEditorMode: true,\n isEmpty: true,\n nodeBlockId: true,\n },\n },\n },\n section: {\n component: Components.ContentfulContainer,\n definition: sectionDefinition,\n options: {\n enableEditorProperties: {\n isEditorMode: true,\n isEmpty: true,\n nodeBlockId: true,\n },\n },\n },\n columns: {\n component: Components.Columns,\n definition: columnsDefinition,\n },\n singleColumn: {\n component: Components.SingleColumn,\n definition: singleColumnDefinition,\n options: {\n enableEditorProperties: {\n isEditorMode: true,\n isEmpty: true,\n },\n },\n },\n button: enrichComponentDefinition({\n component: Components.Button,\n definition: Components.ButtonComponentDefinition,\n options: {\n wrapComponent: false,\n },\n }),\n heading: enrichComponentDefinition({\n component: Components.Heading,\n definition: Components.HeadingComponentDefinition,\n options: {\n wrapComponent: false,\n },\n }),\n image: enrichComponentDefinition({\n component: Components.Image,\n definition: Components.ImageComponentDefinition,\n options: { wrapComponent: false },\n }),\n richText: enrichComponentDefinition({\n component: Components.RichText,\n definition: Components.RichTextComponentDefinition,\n options: {\n wrapComponent: false,\n },\n }),\n text: enrichComponentDefinition({\n component: Components.Text,\n definition: Components.TextComponentDefinition,\n options: {\n wrapComponent: false,\n },\n }),\n divider: enrichComponentDefinition({\n component: Components.ContentfulDivider,\n definition: dividerDefinition,\n options: {\n wrapComponent: false,\n },\n }),\n carousel: enrichComponentDefinition({\n component: Components.Carousel,\n definition: Components.carouselDefinition,\n options: {\n wrapComponent: false,\n },\n }),\n} satisfies Record<string, ComponentRegistration>;\n\n// pre-filling with the default component registrations\nexport const componentRegistry = new Map<string, ComponentRegistration>([\n [DEFAULT_COMPONENT_REGISTRATIONS.section.definition.id, DEFAULT_COMPONENT_REGISTRATIONS.section],\n [\n DEFAULT_COMPONENT_REGISTRATIONS.container.definition.id,\n DEFAULT_COMPONENT_REGISTRATIONS.container,\n ],\n [\n DEFAULT_COMPONENT_REGISTRATIONS.singleColumn.definition.id,\n DEFAULT_COMPONENT_REGISTRATIONS.singleColumn,\n ],\n [DEFAULT_COMPONENT_REGISTRATIONS.columns.definition.id, DEFAULT_COMPONENT_REGISTRATIONS.columns],\n [DEFAULT_COMPONENT_REGISTRATIONS.button.definition.id, DEFAULT_COMPONENT_REGISTRATIONS.button],\n [DEFAULT_COMPONENT_REGISTRATIONS.heading.definition.id, DEFAULT_COMPONENT_REGISTRATIONS.heading],\n [DEFAULT_COMPONENT_REGISTRATIONS.image.definition.id, DEFAULT_COMPONENT_REGISTRATIONS.image],\n [\n DEFAULT_COMPONENT_REGISTRATIONS.richText.definition.id,\n DEFAULT_COMPONENT_REGISTRATIONS.richText,\n ],\n [DEFAULT_COMPONENT_REGISTRATIONS.text.definition.id, DEFAULT_COMPONENT_REGISTRATIONS.text],\n [DEFAULT_COMPONENT_REGISTRATIONS.divider.definition.id, DEFAULT_COMPONENT_REGISTRATIONS.divider],\n]);\n\nexport const optionalBuiltInComponents = [\n DEFAULT_COMPONENT_REGISTRATIONS.button.definition.id,\n DEFAULT_COMPONENT_REGISTRATIONS.heading.definition.id,\n DEFAULT_COMPONENT_REGISTRATIONS.image.definition.id,\n DEFAULT_COMPONENT_REGISTRATIONS.richText.definition.id,\n DEFAULT_COMPONENT_REGISTRATIONS.text.definition.id,\n DEFAULT_COMPONENT_REGISTRATIONS.divider.definition.id,\n];\n\nconst getRegisteredComponentDefinitions = () => {\n return (\n Array.from(componentRegistry.values())\n .map(({ definition }) => definition)\n // Assembly definitions are empty placeholder within the SDK without variables\n // We don't send those to the editor as they would overwrite the actual correct definitions.\n .filter((definition) => !checkIsAssemblyDefinition(definition))\n );\n};\n\nexport const sendRegisteredComponentsMessage = () => {\n // Send the definitions (without components) via the register message to the experience builder\n const registeredDefinitions = getRegisteredComponentDefinitions();\n sendMessage(OUTGOING_EVENTS.RegisteredComponents, {\n definitions: registeredDefinitions,\n });\n};\n\nexport const runRegisteredComponentValidations = () => {\n Array.from(componentRegistry.values()).map(({ definition }) => {\n const validation = validateComponentDefinition(definition);\n if (!validation.success) {\n throw new Error(\n `Invalid component definition for component '${definition.name}'. Failed with errors: \\n${JSON.stringify(validation.errors, null, 2)}`,\n );\n }\n });\n};\n\nconst getSingleCssVariableValue = (\n element: HTMLDivElement,\n cssVariableValue: string,\n cssAttribute: any,\n) => {\n element.style[cssAttribute] = cssVariableValue;\n const styles = getComputedStyle(element);\n const resolvedValue = styles.getPropertyValue(cssAttribute);\n return resolvedValue;\n};\n\nconst getAllCssVariableValues = (\n element: HTMLDivElement,\n cssVariable: Record<string, string>,\n cssAttribute: any,\n) => {\n const resolvedCssVariables = {} as Record<string, string>;\n\n Object.keys(cssVariable).forEach((key) => {\n const cssVariableValue = cssVariable[key];\n if (CssVarRegex.test(cssVariableValue)) {\n const resolvedValue = getSingleCssVariableValue(element, cssVariableValue, cssAttribute);\n resolvedCssVariables[cssVariableValue] = resolvedValue;\n }\n });\n return resolvedCssVariables;\n};\n\ntype CssMapType = {\n variable?: Record<string, string>;\n property: string;\n};\n\nconst resolveCssVariables = (designTokensDefinition: DesignTokensDefinition) => {\n const {\n spacing,\n sizing,\n color,\n borderRadius,\n fontSize,\n lineHeight,\n letterSpacing,\n textColor,\n border,\n } = designTokensDefinition;\n const resolvedCssVariables = {} as Record<string, string>;\n\n // Create an element\n const element = document.createElement('div');\n document.body.appendChild(element);\n\n const cssProperties: CssMapType[] = [\n { variable: spacing, property: 'margin' },\n { variable: sizing, property: 'width' },\n { variable: color, property: 'background-color' },\n { variable: borderRadius, property: 'border-radius' },\n { variable: fontSize, property: 'font-size' },\n { variable: lineHeight, property: 'line-height' },\n { variable: letterSpacing, property: 'letter-spacing' },\n { variable: textColor, property: 'color' },\n ];\n\n cssProperties.forEach(({ variable, property }) => {\n if (variable) {\n const rawResolvedValues = getAllCssVariableValues(element, variable, property);\n Object.assign(resolvedCssVariables, rawResolvedValues);\n }\n });\n\n if (border) {\n const tempResolvedValue = {} as Record<string, string>;\n Object.keys(border).forEach((borderKey) => {\n const { width, style, color } = border[borderKey];\n\n if (width && CssVarRegex.test(width)) {\n const resolvedValue = getSingleCssVariableValue(element, width, 'border-width');\n tempResolvedValue[width] = resolvedValue;\n }\n if (style && CssVarRegex.test(style)) {\n const resolvedValue = getSingleCssVariableValue(element, style, 'border-style');\n tempResolvedValue[style] = resolvedValue;\n }\n if (color && CssVarRegex.test(color)) {\n const resolvedValue = getSingleCssVariableValue(element, color, 'border-color');\n tempResolvedValue[color] = resolvedValue;\n }\n Object.assign(resolvedCssVariables, tempResolvedValue);\n });\n }\n\n document.body.removeChild(element);\n return resolvedCssVariables;\n};\n\nexport const sendConnectedEventWithRegisteredComponents = () => {\n // Send the definitions (without components) via the connection message to the experience builder\n const registeredDefinitions = getRegisteredComponentDefinitions();\n sendMessage(OUTGOING_EVENTS.Connected, {\n sdkVersion: SDK_VERSION,\n definitions: registeredDefinitions,\n });\n\n sendMessage(OUTGOING_EVENTS.RegisteredBreakpoints, {\n breakpoints: breakpointsRegistry,\n });\n\n sendMessage(OUTGOING_EVENTS.DesignTokens, {\n designTokens: designTokensRegistry,\n resolvedCssVariables: resolveCssVariables(designTokensRegistry),\n });\n};\n\n/**\n * Registers multiple components and their component definitions at once\n * @param componentRegistrations - ComponentRegistration[]\n * @returns void\n */\nexport const defineComponents = (\n componentRegistrations: ComponentRegistration[],\n options?: ComponentRegistrationOptions,\n) => {\n if (options?.experimentalComponents?.carousel) {\n componentRegistry.set(\n CONTENTFUL_COMPONENTS.carousel.id,\n DEFAULT_COMPONENT_REGISTRATIONS.carousel,\n );\n }\n\n if (options?.enabledBuiltInComponents) {\n for (const id of optionalBuiltInComponents) {\n if (!options.enabledBuiltInComponents.includes(id)) {\n componentRegistry.delete(id);\n }\n }\n }\n\n defineSdkOptions({\n __disableTextAlignmentTransform: !!options?.__disableTextAlignmentTransform,\n __unsafe__enableBuiltInStructureOverwrites:\n !!options?.__unsafe__enableBuiltInStructureOverwrites,\n });\n\n for (const registration of componentRegistrations) {\n if (\n isContentfulStructureComponent(registration.definition.id) &&\n !options?.__unsafe__enableBuiltInStructureOverwrites\n ) {\n debug.warn(\n `[experience-builder-sdk:defineComponents] You are registering a ` +\n `structure component with the reserved id '${registration.definition.id}'. This is not recommended ` +\n `and can lead to unexpected behavior. If you still want to register it, please provide the registry option ` +\n `'__unsafe__enableBuiltInStructureOverwrites' to fully enable built-in structure overwrites.`,\n );\n }\n\n // Fill definitions with fallbacks values\n const enrichedComponentRegistration = enrichComponentDefinition(registration);\n\n componentRegistry.set(\n enrichedComponentRegistration.definition.id,\n enrichedComponentRegistration,\n );\n }\n\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent(INTERNAL_EVENTS.ComponentsRegistered));\n }\n};\n\n/**\n * use this function only in tests\n */\nexport const resetComponentRegistry = () => {\n componentRegistry.clear();\n for (const registration of Object.values(DEFAULT_COMPONENT_REGISTRATIONS)) {\n componentRegistry.set(registration.definition.id, registration);\n }\n};\n\nexport const getComponentRegistration = (id: string) => componentRegistry.get(id);\n\nexport const addComponentRegistration = (componentRegistration: ComponentRegistration) => {\n componentRegistry.set(componentRegistration.definition.id, componentRegistration);\n};\n\nexport const createAssemblyRegistration = ({\n definitionId,\n component,\n}: {\n definitionId: string;\n component: ComponentRegistration['component'];\n}) => {\n const componentRegistration = componentRegistry.get(definitionId);\n\n if (componentRegistration) {\n return componentRegistration;\n }\n\n const definition = createAssemblyDefinition(definitionId);\n\n addComponentRegistration({ component, definition });\n\n return componentRegistry.get(definitionId);\n};\n"],"names":["builtInStyleDefinitions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"componentRegistry.js","sources":["../../../src/core/componentRegistry.ts"],"sourcesContent":["import * as Components from '@contentful/experiences-components-react';\nimport type {\n ComponentRegistration,\n ComponentDefinition,\n ComponentRegistrationOptions,\n DesignTokensDefinition,\n} from '@contentful/experiences-core/types';\nimport {\n OUTGOING_EVENTS,\n INTERNAL_EVENTS,\n CONTENTFUL_COMPONENTS,\n} from '@contentful/experiences-core/constants';\nimport {\n builtInStyles as builtInStyleDefinitions,\n designTokensRegistry,\n breakpointsRegistry,\n optionalBuiltInStyles,\n sendMessage,\n defineSdkOptions,\n debug,\n isContentfulStructureComponent,\n checkIsAssemblyDefinition,\n createAssemblyDefinition,\n} from '@contentful/experiences-core';\nimport { validateComponentDefinition } from '@contentful/experiences-validators';\nimport { withComponentWrapper } from '../utils/withComponentWrapper';\nimport { SDK_VERSION } from '../constants';\nimport {\n sectionDefinition,\n containerDefinition,\n columnsDefinition,\n singleColumnDefinition,\n dividerDefinition,\n} from '@contentful/experiences-components-react';\n\nconst CssVarRegex = /var\\(--[\\w-]+\\)/;\n\nconst cloneObject = <T>(targetObject: T): T => {\n if (typeof structuredClone !== 'undefined') {\n return structuredClone(targetObject);\n }\n\n return JSON.parse(JSON.stringify(targetObject));\n};\n\nconst applyComponentDefinitionFallbacks = (componentDefinition: ComponentDefinition) => {\n const clone = cloneObject(componentDefinition);\n for (const variable of Object.values(clone.variables)) {\n variable.group = variable.group ?? 'content';\n }\n return clone;\n};\n\nconst applyBuiltInStyleDefinitions = (componentDefinition: ComponentDefinition) => {\n const clone = cloneObject(componentDefinition);\n\n // set margin built-in style by default\n if (!clone.builtInStyles) {\n clone.builtInStyles = ['cfMargin'];\n }\n\n if (!clone.variables) {\n clone.variables = {};\n }\n\n // Enforce the presence of this property for toggling visibility on any node\n clone.variables['cfVisibility'] = builtInStyleDefinitions['cfVisibility'];\n\n for (const style of clone.builtInStyles || []) {\n if (builtInStyleDefinitions[style]) {\n clone.variables[style] = builtInStyleDefinitions[style] as any; // TODO: fix type\n }\n if (optionalBuiltInStyles[style]) {\n clone.variables[style] = optionalBuiltInStyles[style] as any; // TODO: fix type\n }\n }\n return clone;\n};\n\nexport const enrichComponentDefinition = ({\n component,\n definition,\n options,\n}: ComponentRegistration): ComponentRegistration => {\n const definitionWithFallbacks = applyComponentDefinitionFallbacks(definition);\n const definitionWithBuiltInStyles = applyBuiltInStyleDefinitions(definitionWithFallbacks);\n return {\n component: withComponentWrapper(component, options),\n definition: definitionWithBuiltInStyles,\n options,\n };\n};\n\nconst DEFAULT_COMPONENT_REGISTRATIONS = {\n container: {\n component: Components.ContentfulContainer,\n definition: containerDefinition,\n options: {\n enableEditorProperties: {\n isEditorMode: true,\n isEmpty: true,\n nodeBlockId: true,\n },\n },\n },\n section: {\n component: Components.ContentfulContainer,\n definition: sectionDefinition,\n options: {\n enableEditorProperties: {\n isEditorMode: true,\n isEmpty: true,\n nodeBlockId: true,\n },\n },\n },\n columns: {\n component: Components.Columns,\n definition: columnsDefinition,\n },\n singleColumn: {\n component: Components.SingleColumn,\n definition: singleColumnDefinition,\n options: {\n enableEditorProperties: {\n isEditorMode: true,\n isEmpty: true,\n },\n },\n },\n button: enrichComponentDefinition({\n component: Components.Button,\n definition: Components.ButtonComponentDefinition,\n options: {\n wrapComponent: false,\n },\n }),\n heading: enrichComponentDefinition({\n component: Components.Heading,\n definition: Components.HeadingComponentDefinition,\n options: {\n wrapComponent: false,\n },\n }),\n image: enrichComponentDefinition({\n component: Components.Image,\n definition: Components.ImageComponentDefinition,\n options: { wrapComponent: false },\n }),\n richText: enrichComponentDefinition({\n component: Components.RichText,\n definition: Components.RichTextComponentDefinition,\n options: {\n wrapComponent: false,\n },\n }),\n text: enrichComponentDefinition({\n component: Components.Text,\n definition: Components.TextComponentDefinition,\n options: {\n wrapComponent: false,\n },\n }),\n divider: enrichComponentDefinition({\n component: Components.ContentfulDivider,\n definition: dividerDefinition,\n options: {\n wrapComponent: false,\n },\n }),\n carousel: enrichComponentDefinition({\n component: Components.Carousel,\n definition: Components.carouselDefinition,\n options: {\n wrapComponent: false,\n },\n }),\n} satisfies Record<string, ComponentRegistration>;\n\n// pre-filling with the default component registrations\nexport const componentRegistry = new Map<string, ComponentRegistration>([\n [DEFAULT_COMPONENT_REGISTRATIONS.section.definition.id, DEFAULT_COMPONENT_REGISTRATIONS.section],\n [\n DEFAULT_COMPONENT_REGISTRATIONS.container.definition.id,\n DEFAULT_COMPONENT_REGISTRATIONS.container,\n ],\n [\n DEFAULT_COMPONENT_REGISTRATIONS.singleColumn.definition.id,\n DEFAULT_COMPONENT_REGISTRATIONS.singleColumn,\n ],\n [DEFAULT_COMPONENT_REGISTRATIONS.columns.definition.id, DEFAULT_COMPONENT_REGISTRATIONS.columns],\n [DEFAULT_COMPONENT_REGISTRATIONS.button.definition.id, DEFAULT_COMPONENT_REGISTRATIONS.button],\n [DEFAULT_COMPONENT_REGISTRATIONS.heading.definition.id, DEFAULT_COMPONENT_REGISTRATIONS.heading],\n [DEFAULT_COMPONENT_REGISTRATIONS.image.definition.id, DEFAULT_COMPONENT_REGISTRATIONS.image],\n [\n DEFAULT_COMPONENT_REGISTRATIONS.richText.definition.id,\n DEFAULT_COMPONENT_REGISTRATIONS.richText,\n ],\n [DEFAULT_COMPONENT_REGISTRATIONS.text.definition.id, DEFAULT_COMPONENT_REGISTRATIONS.text],\n [DEFAULT_COMPONENT_REGISTRATIONS.divider.definition.id, DEFAULT_COMPONENT_REGISTRATIONS.divider],\n]);\n\nexport const optionalBuiltInComponents = [\n DEFAULT_COMPONENT_REGISTRATIONS.button.definition.id,\n DEFAULT_COMPONENT_REGISTRATIONS.heading.definition.id,\n DEFAULT_COMPONENT_REGISTRATIONS.image.definition.id,\n DEFAULT_COMPONENT_REGISTRATIONS.richText.definition.id,\n DEFAULT_COMPONENT_REGISTRATIONS.text.definition.id,\n DEFAULT_COMPONENT_REGISTRATIONS.divider.definition.id,\n];\n\nconst getRegisteredComponentDefinitions = () => {\n return (\n Array.from(componentRegistry.values())\n .map(({ definition }) => definition)\n // Assembly definitions are empty placeholder within the SDK without variables\n // We don't send those to the editor as they would overwrite the actual correct definitions.\n .filter((definition) => !checkIsAssemblyDefinition(definition))\n );\n};\n\nexport const sendRegisteredComponentsMessage = () => {\n // Send the definitions (without components) via the register message to the experience builder\n const registeredDefinitions = getRegisteredComponentDefinitions();\n sendMessage(OUTGOING_EVENTS.RegisteredComponents, {\n definitions: registeredDefinitions,\n });\n};\n\nexport const runRegisteredComponentValidations = () => {\n Array.from(componentRegistry.values()).map(({ definition }) => {\n const validation = validateComponentDefinition(definition);\n if (!validation.success) {\n throw new Error(\n `Invalid component definition for component '${definition.name}'. Failed with errors: \\n${JSON.stringify(validation.errors, null, 2)}`,\n );\n }\n });\n};\n\nconst getSingleCssVariableValue = (\n element: HTMLDivElement,\n cssVariableValue: string,\n cssAttribute: any,\n) => {\n element.style[cssAttribute] = cssVariableValue;\n const styles = getComputedStyle(element);\n const resolvedValue = styles.getPropertyValue(cssAttribute);\n return resolvedValue;\n};\n\nconst getAllCssVariableValues = (\n element: HTMLDivElement,\n cssVariable: Record<string, string>,\n cssAttribute: any,\n) => {\n const resolvedCssVariables = {} as Record<string, string>;\n\n Object.keys(cssVariable).forEach((key) => {\n const cssVariableValue = cssVariable[key];\n if (CssVarRegex.test(cssVariableValue)) {\n const resolvedValue = getSingleCssVariableValue(element, cssVariableValue, cssAttribute);\n resolvedCssVariables[cssVariableValue] = resolvedValue;\n }\n });\n return resolvedCssVariables;\n};\n\ntype CssMapType = {\n variable?: Record<string, string>;\n property: string;\n};\n\nconst resolveCssVariables = (designTokensDefinition: DesignTokensDefinition) => {\n const {\n spacing,\n sizing,\n color,\n borderRadius,\n fontSize,\n lineHeight,\n letterSpacing,\n textColor,\n border,\n } = designTokensDefinition;\n const resolvedCssVariables = {} as Record<string, string>;\n\n // Create an element\n const element = document.createElement('div');\n document.body.appendChild(element);\n\n const cssProperties: CssMapType[] = [\n { variable: spacing, property: 'margin' },\n { variable: sizing, property: 'width' },\n { variable: color, property: 'background-color' },\n { variable: borderRadius, property: 'border-radius' },\n { variable: fontSize, property: 'font-size' },\n { variable: lineHeight, property: 'line-height' },\n { variable: letterSpacing, property: 'letter-spacing' },\n { variable: textColor, property: 'color' },\n ];\n\n cssProperties.forEach(({ variable, property }) => {\n if (variable) {\n const rawResolvedValues = getAllCssVariableValues(element, variable, property);\n Object.assign(resolvedCssVariables, rawResolvedValues);\n }\n });\n\n if (border) {\n const tempResolvedValue = {} as Record<string, string>;\n Object.keys(border).forEach((borderKey) => {\n const { width, style, color } = border[borderKey];\n\n if (width && CssVarRegex.test(width)) {\n const resolvedValue = getSingleCssVariableValue(element, width, 'border-width');\n tempResolvedValue[width] = resolvedValue;\n }\n if (style && CssVarRegex.test(style)) {\n const resolvedValue = getSingleCssVariableValue(element, style, 'border-style');\n tempResolvedValue[style] = resolvedValue;\n }\n if (color && CssVarRegex.test(color)) {\n const resolvedValue = getSingleCssVariableValue(element, color, 'border-color');\n tempResolvedValue[color] = resolvedValue;\n }\n Object.assign(resolvedCssVariables, tempResolvedValue);\n });\n }\n\n document.body.removeChild(element);\n return resolvedCssVariables;\n};\n\nexport const sendConnectedEventWithRegisteredComponents = () => {\n // Send the definitions (without components) via the connection message to the experience builder\n const registeredDefinitions = getRegisteredComponentDefinitions();\n sendMessage(OUTGOING_EVENTS.Connected, {\n sdkVersion: SDK_VERSION,\n definitions: registeredDefinitions,\n });\n\n sendMessage(OUTGOING_EVENTS.RegisteredBreakpoints, {\n breakpoints: breakpointsRegistry,\n });\n\n sendMessage(OUTGOING_EVENTS.DesignTokens, {\n designTokens: designTokensRegistry,\n resolvedCssVariables: resolveCssVariables(designTokensRegistry),\n });\n};\n\n/**\n * Registers multiple components and their component definitions at once\n * @param componentRegistrations - ComponentRegistration[]\n * @returns void\n */\nexport const defineComponents = (\n componentRegistrations: ComponentRegistration[],\n options?: ComponentRegistrationOptions,\n) => {\n if (options?.experimentalComponents?.carousel) {\n componentRegistry.set(\n CONTENTFUL_COMPONENTS.carousel.id,\n DEFAULT_COMPONENT_REGISTRATIONS.carousel,\n );\n }\n\n if (options?.enabledBuiltInComponents) {\n for (const id of optionalBuiltInComponents) {\n if (!options.enabledBuiltInComponents.includes(id)) {\n componentRegistry.delete(id);\n }\n }\n }\n\n defineSdkOptions({\n __disableTextAlignmentTransform: !!options?.__disableTextAlignmentTransform,\n __unsafe__enableBuiltInStructureOverwrites:\n !!options?.__unsafe__enableBuiltInStructureOverwrites,\n });\n\n for (const registration of componentRegistrations) {\n if (\n isContentfulStructureComponent(registration.definition.id) &&\n !options?.__unsafe__enableBuiltInStructureOverwrites\n ) {\n debug.warn(\n `[experience-builder-sdk:defineComponents] You are registering a ` +\n `structure component with the reserved id '${registration.definition.id}'. This is not recommended ` +\n `and can lead to unexpected behavior. If you still want to register it, please provide the registry option ` +\n `'__unsafe__enableBuiltInStructureOverwrites' to fully enable built-in structure overwrites.`,\n );\n }\n\n // Fill definitions with fallbacks values\n const enrichedComponentRegistration = enrichComponentDefinition(registration);\n\n componentRegistry.set(\n enrichedComponentRegistration.definition.id,\n enrichedComponentRegistration,\n );\n }\n\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent(INTERNAL_EVENTS.ComponentsRegistered));\n }\n};\n\n/**\n * use this function only in tests\n */\nexport const resetComponentRegistry = () => {\n componentRegistry.clear();\n for (const registration of Object.values(DEFAULT_COMPONENT_REGISTRATIONS)) {\n componentRegistry.set(registration.definition.id, registration);\n }\n};\n\nexport const getComponentRegistration = (id: string) => componentRegistry.get(id);\n\nexport const addComponentRegistration = (componentRegistration: ComponentRegistration) => {\n componentRegistry.set(componentRegistration.definition.id, componentRegistration);\n};\n\nexport const createAssemblyRegistration = ({\n definitionId,\n component,\n}: {\n definitionId: string;\n component: ComponentRegistration['component'];\n}) => {\n const componentRegistration = componentRegistry.get(definitionId);\n\n if (componentRegistration) {\n return componentRegistration;\n }\n\n const definition = createAssemblyDefinition(definitionId);\n\n addComponentRegistration({ component, definition });\n\n return componentRegistry.get(definitionId);\n};\n"],"names":["builtInStyleDefinitions"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PrebindingManager.js","sources":["../../../../src/core/preview/PrebindingManager.ts"],"sourcesContent":["import {\n ExperienceComponentSettings,\n ParameterDefinition,\n VariableMapping,\n} from '@contentful/experiences-core/types';\n\nconst NODE_ID_SEPARATOR = '---'; // separator used to separate pattern levels in deseralizePatternNode\n\nexport type ParameterDefinitionWithParameterId = {\n parameterId: string;\n parameter: ParameterDefinition;\n};\ntype ParameterOverride = {\n overwrittenByParamId: string;\n originalNodeIdToOverride: string;\n indexedParentPatternNodeId: string;\n};\n\n/**\n * PrebindingManager utility class for resolving parameter bindings across nested patterns.\n *\n * The core approach is to first resolve the top-level parameterId using `getParameterIdByNodeId`,\n * which uses the paramIdToOverwriteIdMap, set when storing pre-binding based on the passToNodes chain to determine which parameter in the parent pattern\n * overrides a given parameterId (with some additionally workaround due to node ID renaming for patterns).\n * Once the owning top-level `parameterId` is found, we can follow the `passToNodes` chain back\n * down to retrieve all nested overrides — including parameter definitions, allowed content types,\n * and default sources — up to three levels deep.\n *\n * ## Lifecycle\n * This utility class currently uses static state, with Zustand stores supplementing the “latest” data\n * for root-level patterns data — for example, when overwriting content types on nested patterns or binding\n * fields on simple patterns. If we need the override mappings to be reactive, we could easily move\n * the full override chain tracking into Zustand but currently we can rely on the pattern definition\n * stores we have currently.\n *\n * The state is populated during deserialization, where we call `storePrebindingDefinitions` for each\n * pattern node. It is ready to be consumed at each level as nodes are deserialized top-down:\n * 1. Pattern C (Template Pattern)\n * 2. Pattern B (Nested Pattern)\n * 3. Pattern A (Simple Pattern)\n *\n * At each level, accessing overrides is possible:\n * - Pattern C has everything it needs once deserialized with its own parameters\n * - Pattern B has everything it needs once deserialized, with its own parameters possibly overridden by C\n * - Pattern A has its own parameters and possiblle overrites by B and/or C\n *\n * After actions that modify patterns without re-deserializing the tree — such as duplication,\n * deletion, or detachment — this state must be kept up to date via storePrebindingDefinitions\n * or storeParameterDefinitions if only parameter definitions are updated.\n *\n * ## Core Data Structures\n *\n * - prebindingDefinitions - A collection of all prebinding definitions aggregated\n * from the parent pattern down to all nested patterns.\n *\n * - prebindingDefinitionIdsByNodeId - Same as above, but indexed by `nodeId`. This allows us\n * to easily find the prebinding definition id for a given node ID.\n *\n * - parameterDefinitionsById - A collection of all parameter definitions aggregated\n * from the parent pattern down to nested patterns.\n *\n * - variableMappingByPatternId - A collection of all variable mappings aggregated from\n * the parent pattern down to nested patterns, indexed by\n * `patternId` for efficient access.\n *\n * - newToOriginalNodeIdMap - When deserializing pattern child nodes, we replace their\n * node IDs with new ones based on their location inside the\n * pattern. This prevents conflicts when multiple instances\n * of the same pattern exist. The issue is that prebinding\n * `passToNodes` resolution requires the original node ID.\n * This map allows us to retrieve it to follow the chain.\n *\n * - paramIdToOverwriteIdMap - Tracks parameter ID overrides through the `passToNodes`\n * chain, allowing us to resolve overrides correctly from\n * the top-level parameter down to the lowest-level.\n */\nexport class PrebindingManager {\n private static prebindingDefinitions: Map<\n string,\n NonNullable<ExperienceComponentSettings['prebindingDefinitions']>[number]\n > = new Map();\n private static prebindingDefinitionIdsByNodeId: Map<string, string[]> = new Map();\n private static parameterDefinitionsById: Map<string, ParameterDefinitionWithParameterId> =\n new Map();\n private static parameterDefinitionsByNodeId: Map<string, ParameterDefinitionWithParameterId[]> =\n new Map();\n private static variableMappingByPatternId: Map<string, Record<string, VariableMapping>> =\n new Map();\n private static newToOriginalNodeIdMap = new Map<string, string>();\n private static paramIdToOverwriteIdMap = new Map<string, Array<ParameterOverride>>();\n\n /**\n * Links new node IDs to original node IDs\n * - This is used to track the original node IDs for pattern instances as we change them when deserializing pattern nodes.\n * @param newNodeId\n * @param originalNodeId\n */\n public static linkOriginalNodeIds(newNodeId: string, originalNodeId: string) {\n PrebindingManager.newToOriginalNodeIdMap.set(newNodeId, originalNodeId);\n }\n\n /**\n * Initializes the pattern editor manager by storing the definitions during deserialization\n * for the root pattern and all nested patterns.\n *\n * @param nodeId - The ID of the pattern node.\n * @param patternEntryId - The ID of the pattern entry from the patterns store.\n * @param prebindingDefinitions - The prebinding definitions from the current pattern's component settings.\n */\n public static storePrebindingDefinitions(\n nodeId: string,\n patternEntryId: string,\n prebindingDefinitions: NonNullable<ExperienceComponentSettings['prebindingDefinitions']>,\n ) {\n for (const definition of prebindingDefinitions ?? []) {\n PrebindingManager.prebindingDefinitions.set(definition.id, { ...definition });\n PrebindingManager.prebindingDefinitionIdsByNodeId.set(nodeId, [definition.id]); // can only be one right now\n\n if (definition.variableMappings) {\n PrebindingManager.variableMappingByPatternId.set(\n patternEntryId,\n definition.variableMappings,\n );\n }\n // Store the parameter definitions for the node\n PrebindingManager.storeParameterDefinitions(nodeId, definition.parameterDefinitions || {});\n }\n }\n\n /**\n * Stores parameter definitions for a given nodeId.\n * @param nodeId - The ID of the node to store parameter definitions for.\n * @param parameterDefinitions - The parameter definitions to store.\n */\n public static storeParameterDefinitions(\n nodeId: string,\n parameterDefinitions?: Record<string, ParameterDefinition>,\n ) {\n // Reset the list of parameter definitions for the nodeId\n PrebindingManager.parameterDefinitionsByNodeId.set(nodeId, []);\n const updatedParameterDefinitionsByNodeId: ParameterDefinitionWithParameterId[] = [];\n\n for (const [parameterId, parameter] of Object.entries(parameterDefinitions || {})) {\n PrebindingManager.parameterDefinitionsById.set(parameterId, {\n parameterId,\n parameter,\n });\n\n if (parameter.passToNodes) {\n const { parameterId: paramIdToOverwrite, nodeId: targetNodeId } =\n parameter.passToNodes[0] ?? {};\n\n if (paramIdToOverwrite) {\n const existing = PrebindingManager.paramIdToOverwriteIdMap.get(paramIdToOverwrite) ?? [];\n const hasMatchingOverride = existing.some(\n (it) =>\n it.overwrittenByParamId === parameterId &&\n it.originalNodeIdToOverride === targetNodeId &&\n it.indexedParentPatternNodeId === nodeId,\n );\n\n // Only add the override if it doesn't already exist to save duplicates\n if (!hasMatchingOverride) {\n PrebindingManager.paramIdToOverwriteIdMap.set(paramIdToOverwrite, [\n ...existing,\n {\n overwrittenByParamId: parameterId,\n originalNodeIdToOverride: targetNodeId,\n indexedParentPatternNodeId: nodeId,\n },\n ]);\n }\n }\n }\n updatedParameterDefinitionsByNodeId.push({ parameterId, parameter });\n }\n PrebindingManager.parameterDefinitionsByNodeId.set(nodeId, updatedParameterDefinitionsByNodeId);\n }\n\n /**\n * Resolves the top-level parameterId for a given nodeId.\n *\n * @param nodeId - The nodeId to resolve the parameterId for\n * @param useStoreParameters - Whether to use the zustand store parameters or not\n * @returns string | undefined - The resolved parameterId or undefined if not found\n **/\n public static getParameterIdByNodeId(nodeId: string): string | undefined {\n const nativeParameterDefinitionForNodeId =\n PrebindingManager.getNativeParameterDefinitionByNodeId(nodeId);\n\n if (!nativeParameterDefinitionForNodeId) {\n return undefined;\n }\n const hoistedParameterId = PrebindingManager.getHoistedIdForParameterId(\n nativeParameterDefinitionForNodeId?.parameterId,\n nodeId,\n );\n\n return hoistedParameterId;\n }\n\n /* Returns the parameter definitions from a parameterId\n * @param parameterId - The parameter to resolve all levels for\n * @param useStoreParameters - Whether to use the zustand store parameters or not\n * @returns [l1ParameterDefinitions, l2ParameterDefinitions, l3ParameterDefinitions]: Array of parameter definitions for each level\n */\n public static getParameterDefinitionsByParameterId(\n parameterId: string,\n ): (ParameterDefinitionWithParameterId | undefined)[] | undefined {\n const l1Definition = PrebindingManager.parameterDefinitionsById.get(parameterId);\n\n const l1PassToNode = (l1Definition?.parameter?.passToNodes || [])[0];\n // Level 2\n const l2Definition = PrebindingManager.parameterDefinitionsById.get(l1PassToNode?.parameterId);\n const l2PassToNode = (l2Definition?.parameter?.passToNodes || [])[0];\n let l3Definition: ParameterDefinitionWithParameterId | undefined;\n // Level 3\n if (l2PassToNode) {\n // If the child definition has passToNodes, we can look up the child parameter definition by its composite key\n l3Definition = PrebindingManager.parameterDefinitionsById.get(l2PassToNode?.parameterId);\n }\n // Return the definitions for all three levels unless they are all empty\n const definitions = [l1Definition, l2Definition, l3Definition];\n if (!definitions || !definitions.filter(Boolean).length) {\n return undefined; // No definitions found\n }\n return definitions;\n }\n\n /**\n * Returns all parameter definitions defined on the pattern of the given nodeId OR the pattern, wrapping the given nodeId\n */\n public static getAllParameterDefinitionsForNodeId(nodeId: string) {\n return Object.fromEntries(\n (PrebindingManager.parameterDefinitionsByNodeId.get(nodeId) ?? []).map(\n ({ parameterId, parameter }) => [parameterId, parameter],\n ),\n );\n }\n\n /**\n * Return all parameter ID's on a pattern by NodeId\n * @param nodeId - The nodeId to return params for\n * @returns string[] An array of parameter IDs or undefined\n */\n public static getAllParameterIdsByNodeId(nodeId: string): string[] | undefined {\n return Object.keys(PrebindingManager.getAllParameterDefinitionsForNodeId(nodeId));\n }\n\n /**\n * Get the highest level overriding parameterId for a given parameterId + nodeId combination\n * @param parameterId - The parameter to resolve\n * @param indexedNodeId - The indexed node ID to resolve the parameterId for\n * @returns string - The resolved parameterId - will be from \"root\" in patterns or the parent pattern node in experiences\n */\n public static getHoistedIdForParameterId(parameterId: string, indexedNodeId: string): string {\n let currentParamId = parameterId;\n let currentIndexedNodeId = indexedNodeId;\n let currentOriginalNodeId: string | undefined =\n PrebindingManager.newToOriginalNodeIdMap.get(indexedNodeId) ?? indexedNodeId;\n let override: ParameterOverride | undefined;\n\n do {\n const overrides = PrebindingManager.paramIdToOverwriteIdMap.get(currentParamId) ?? [];\n const splitByDash = currentIndexedNodeId.split(NODE_ID_SEPARATOR);\n override = overrides.find(\n (it) =>\n it.originalNodeIdToOverride === currentOriginalNodeId &&\n ((splitByDash.length > 1 &&\n currentIndexedNodeId.includes(it.indexedParentPatternNodeId)) ||\n (splitByDash.length === 1 && it.indexedParentPatternNodeId === 'root')),\n );\n if (override) {\n const { overwrittenByParamId, indexedParentPatternNodeId } = override;\n currentParamId = overwrittenByParamId;\n currentIndexedNodeId = indexedParentPatternNodeId;\n currentOriginalNodeId =\n PrebindingManager.newToOriginalNodeIdMap.get(indexedParentPatternNodeId) ??\n indexedParentPatternNodeId;\n }\n } while (override);\n\n return currentParamId;\n }\n\n /**\n * Retrieves the native parameter definition for a given nodeId. ie one without passToNodes on the node.\n * @param nodeId - The nodeId to retrieve the native parameter definition for\n * @returns The native parameter definition for the given nodeId, or undefined if not found\n */\n public static getNativeParameterDefinitionByNodeId(\n nodeId: string,\n ): ParameterDefinitionWithParameterId | undefined {\n const parameterDefinitionsForNodeId =\n PrebindingManager.parameterDefinitionsByNodeId.get(nodeId);\n return PrebindingManager.extractNativeParameterDefinition(parameterDefinitionsForNodeId);\n }\n\n private static extractNativeParameterDefinition(\n parameterDefinitions: ParameterDefinitionWithParameterId[] | undefined,\n ): ParameterDefinitionWithParameterId | undefined {\n const { parameterId, parameter } =\n parameterDefinitions?.find((it) => !it.parameter.passToNodes?.length) || {};\n if (!parameterId || !parameter) return;\n return {\n parameterId,\n parameter,\n };\n }\n\n /**\n * Resets all properties of the PrebindingManager class\n * triggered when we leave ExperienceBuilder back to experience folder view.\n **/\n public static reset() {\n PrebindingManager.prebindingDefinitions = new Map();\n PrebindingManager.parameterDefinitionsById = new Map();\n PrebindingManager.parameterDefinitionsByNodeId = new Map();\n PrebindingManager.variableMappingByPatternId = new Map();\n PrebindingManager.newToOriginalNodeIdMap = new Map();\n PrebindingManager.paramIdToOverwriteIdMap = new Map();\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PrebindingManager.js","sources":["../../../../src/core/preview/PrebindingManager.ts"],"sourcesContent":["import {\n ExperienceComponentSettings,\n ParameterDefinition,\n VariableMapping,\n} from '@contentful/experiences-core/types';\n\nconst NODE_ID_SEPARATOR = '---'; // separator used to separate pattern levels in deseralizePatternNode\n\nexport type ParameterDefinitionWithParameterId = {\n parameterId: string;\n parameter: ParameterDefinition;\n};\ntype ParameterOverride = {\n overwrittenByParamId: string;\n originalNodeIdToOverride: string;\n indexedParentPatternNodeId: string;\n};\n\n/**\n * PrebindingManager utility class for resolving parameter bindings across nested patterns.\n *\n * The core approach is to first resolve the top-level parameterId using `getParameterIdByNodeId`,\n * which uses the paramIdToOverwriteIdMap, set when storing pre-binding based on the passToNodes chain to determine which parameter in the parent pattern\n * overrides a given parameterId (with some additionally workaround due to node ID renaming for patterns).\n * Once the owning top-level `parameterId` is found, we can follow the `passToNodes` chain back\n * down to retrieve all nested overrides — including parameter definitions, allowed content types,\n * and default sources — up to three levels deep.\n *\n * ## Lifecycle\n * This utility class currently uses static state, with Zustand stores supplementing the “latest” data\n * for root-level patterns data — for example, when overwriting content types on nested patterns or binding\n * fields on simple patterns. If we need the override mappings to be reactive, we could easily move\n * the full override chain tracking into Zustand but currently we can rely on the pattern definition\n * stores we have currently.\n *\n * The state is populated during deserialization, where we call `storePrebindingDefinitions` for each\n * pattern node. It is ready to be consumed at each level as nodes are deserialized top-down:\n * 1. Pattern C (Template Pattern)\n * 2. Pattern B (Nested Pattern)\n * 3. Pattern A (Simple Pattern)\n *\n * At each level, accessing overrides is possible:\n * - Pattern C has everything it needs once deserialized with its own parameters\n * - Pattern B has everything it needs once deserialized, with its own parameters possibly overridden by C\n * - Pattern A has its own parameters and possiblle overrites by B and/or C\n *\n * After actions that modify patterns without re-deserializing the tree — such as duplication,\n * deletion, or detachment — this state must be kept up to date via storePrebindingDefinitions\n * or storeParameterDefinitions if only parameter definitions are updated.\n *\n * ## Core Data Structures\n *\n * - prebindingDefinitions - A collection of all prebinding definitions aggregated\n * from the parent pattern down to all nested patterns.\n *\n * - prebindingDefinitionIdsByNodeId - Same as above, but indexed by `nodeId`. This allows us\n * to easily find the prebinding definition id for a given node ID.\n *\n * - parameterDefinitionsById - A collection of all parameter definitions aggregated\n * from the parent pattern down to nested patterns.\n *\n * - variableMappingByPatternId - A collection of all variable mappings aggregated from\n * the parent pattern down to nested patterns, indexed by\n * `patternId` for efficient access.\n *\n * - newToOriginalNodeIdMap - When deserializing pattern child nodes, we replace their\n * node IDs with new ones based on their location inside the\n * pattern. This prevents conflicts when multiple instances\n * of the same pattern exist. The issue is that prebinding\n * `passToNodes` resolution requires the original node ID.\n * This map allows us to retrieve it to follow the chain.\n *\n * - paramIdToOverwriteIdMap - Tracks parameter ID overrides through the `passToNodes`\n * chain, allowing us to resolve overrides correctly from\n * the top-level parameter down to the lowest-level.\n */\nexport class PrebindingManager {\n private static prebindingDefinitions: Map<\n string,\n NonNullable<ExperienceComponentSettings['prebindingDefinitions']>[number]\n > = new Map();\n private static prebindingDefinitionIdsByNodeId: Map<string, string[]> = new Map();\n private static parameterDefinitionsById: Map<string, ParameterDefinitionWithParameterId> =\n new Map();\n private static parameterDefinitionsByNodeId: Map<string, ParameterDefinitionWithParameterId[]> =\n new Map();\n private static variableMappingByPatternId: Map<string, Record<string, VariableMapping>> =\n new Map();\n private static newToOriginalNodeIdMap = new Map<string, string>();\n private static paramIdToOverwriteIdMap = new Map<string, Array<ParameterOverride>>();\n\n /**\n * Links new node IDs to original node IDs\n * - This is used to track the original node IDs for pattern instances as we change them when deserializing pattern nodes.\n * @param newNodeId\n * @param originalNodeId\n */\n public static linkOriginalNodeIds(newNodeId: string, originalNodeId: string) {\n PrebindingManager.newToOriginalNodeIdMap.set(newNodeId, originalNodeId);\n }\n\n /**\n * Initializes the pattern editor manager by storing the definitions during deserialization\n * for the root pattern and all nested patterns.\n *\n * @param nodeId - The ID of the pattern node.\n * @param patternEntryId - The ID of the pattern entry from the patterns store.\n * @param prebindingDefinitions - The prebinding definitions from the current pattern's component settings.\n */\n public static storePrebindingDefinitions(\n nodeId: string,\n patternEntryId: string,\n prebindingDefinitions: NonNullable<ExperienceComponentSettings['prebindingDefinitions']>,\n ) {\n for (const definition of prebindingDefinitions ?? []) {\n PrebindingManager.prebindingDefinitions.set(definition.id, { ...definition });\n PrebindingManager.prebindingDefinitionIdsByNodeId.set(nodeId, [definition.id]); // can only be one right now\n\n if (definition.variableMappings) {\n PrebindingManager.variableMappingByPatternId.set(\n patternEntryId,\n definition.variableMappings,\n );\n }\n // Store the parameter definitions for the node\n PrebindingManager.storeParameterDefinitions(nodeId, definition.parameterDefinitions || {});\n }\n }\n\n /**\n * Stores parameter definitions for a given nodeId.\n * @param nodeId - The ID of the node to store parameter definitions for.\n * @param parameterDefinitions - The parameter definitions to store.\n */\n public static storeParameterDefinitions(\n nodeId: string,\n parameterDefinitions?: Record<string, ParameterDefinition>,\n ) {\n // Reset the list of parameter definitions for the nodeId\n PrebindingManager.parameterDefinitionsByNodeId.set(nodeId, []);\n const updatedParameterDefinitionsByNodeId: ParameterDefinitionWithParameterId[] = [];\n\n for (const [parameterId, parameter] of Object.entries(parameterDefinitions || {})) {\n PrebindingManager.parameterDefinitionsById.set(parameterId, {\n parameterId,\n parameter,\n });\n\n if (parameter.passToNodes) {\n const { parameterId: paramIdToOverwrite, nodeId: targetNodeId } =\n parameter.passToNodes[0] ?? {};\n\n if (paramIdToOverwrite) {\n const existing = PrebindingManager.paramIdToOverwriteIdMap.get(paramIdToOverwrite) ?? [];\n const hasMatchingOverride = existing.some(\n (it) =>\n it.overwrittenByParamId === parameterId &&\n it.originalNodeIdToOverride === targetNodeId &&\n it.indexedParentPatternNodeId === nodeId,\n );\n\n // Only add the override if it doesn't already exist to save duplicates\n if (!hasMatchingOverride) {\n PrebindingManager.paramIdToOverwriteIdMap.set(paramIdToOverwrite, [\n ...existing,\n {\n overwrittenByParamId: parameterId,\n originalNodeIdToOverride: targetNodeId,\n indexedParentPatternNodeId: nodeId,\n },\n ]);\n }\n }\n }\n updatedParameterDefinitionsByNodeId.push({ parameterId, parameter });\n }\n PrebindingManager.parameterDefinitionsByNodeId.set(nodeId, updatedParameterDefinitionsByNodeId);\n }\n\n /**\n * Resolves the top-level parameterId for a given nodeId.\n *\n * @param nodeId - The nodeId to resolve the parameterId for\n * @param useStoreParameters - Whether to use the zustand store parameters or not\n * @returns string | undefined - The resolved parameterId or undefined if not found\n **/\n public static getParameterIdByNodeId(nodeId: string): string | undefined {\n const nativeParameterDefinitionForNodeId =\n PrebindingManager.getNativeParameterDefinitionByNodeId(nodeId);\n\n if (!nativeParameterDefinitionForNodeId) {\n return undefined;\n }\n const hoistedParameterId = PrebindingManager.getHoistedIdForParameterId(\n nativeParameterDefinitionForNodeId?.parameterId,\n nodeId,\n );\n\n return hoistedParameterId;\n }\n\n /* Returns the parameter definitions from a parameterId\n * @param parameterId - The parameter to resolve all levels for\n * @param useStoreParameters - Whether to use the zustand store parameters or not\n * @returns [l1ParameterDefinitions, l2ParameterDefinitions, l3ParameterDefinitions]: Array of parameter definitions for each level\n */\n public static getParameterDefinitionsByParameterId(\n parameterId: string,\n ): (ParameterDefinitionWithParameterId | undefined)[] | undefined {\n const l1Definition = PrebindingManager.parameterDefinitionsById.get(parameterId);\n\n const l1PassToNode = (l1Definition?.parameter?.passToNodes || [])[0];\n // Level 2\n const l2Definition = PrebindingManager.parameterDefinitionsById.get(l1PassToNode?.parameterId);\n const l2PassToNode = (l2Definition?.parameter?.passToNodes || [])[0];\n let l3Definition: ParameterDefinitionWithParameterId | undefined;\n // Level 3\n if (l2PassToNode) {\n // If the child definition has passToNodes, we can look up the child parameter definition by its composite key\n l3Definition = PrebindingManager.parameterDefinitionsById.get(l2PassToNode?.parameterId);\n }\n // Return the definitions for all three levels unless they are all empty\n const definitions = [l1Definition, l2Definition, l3Definition];\n if (!definitions || !definitions.filter(Boolean).length) {\n return undefined; // No definitions found\n }\n return definitions;\n }\n\n /**\n * Returns all parameter definitions defined on the pattern of the given nodeId OR the pattern, wrapping the given nodeId\n */\n public static getAllParameterDefinitionsForNodeId(nodeId: string) {\n return Object.fromEntries(\n (PrebindingManager.parameterDefinitionsByNodeId.get(nodeId) ?? []).map(\n ({ parameterId, parameter }) => [parameterId, parameter],\n ),\n );\n }\n\n /**\n * Return all parameter ID's on a pattern by NodeId\n * @param nodeId - The nodeId to return params for\n * @returns string[] An array of parameter IDs or undefined\n */\n public static getAllParameterIdsByNodeId(nodeId: string): string[] | undefined {\n return Object.keys(PrebindingManager.getAllParameterDefinitionsForNodeId(nodeId));\n }\n\n /**\n * Get the highest level overriding parameterId for a given parameterId + nodeId combination\n * @param parameterId - The parameter to resolve\n * @param indexedNodeId - The indexed node ID to resolve the parameterId for\n * @returns string - The resolved parameterId - will be from \"root\" in patterns or the parent pattern node in experiences\n */\n public static getHoistedIdForParameterId(parameterId: string, indexedNodeId: string): string {\n let currentParamId = parameterId;\n let currentIndexedNodeId = indexedNodeId;\n let currentOriginalNodeId: string | undefined =\n PrebindingManager.newToOriginalNodeIdMap.get(indexedNodeId) ?? indexedNodeId;\n let override: ParameterOverride | undefined;\n\n do {\n const overrides = PrebindingManager.paramIdToOverwriteIdMap.get(currentParamId) ?? [];\n const splitByDash = currentIndexedNodeId.split(NODE_ID_SEPARATOR);\n override = overrides.find(\n (it) =>\n it.originalNodeIdToOverride === currentOriginalNodeId &&\n ((splitByDash.length > 1 &&\n currentIndexedNodeId.includes(it.indexedParentPatternNodeId)) ||\n (splitByDash.length === 1 && it.indexedParentPatternNodeId === 'root')),\n );\n if (override) {\n const { overwrittenByParamId, indexedParentPatternNodeId } = override;\n currentParamId = overwrittenByParamId;\n currentIndexedNodeId = indexedParentPatternNodeId;\n currentOriginalNodeId =\n PrebindingManager.newToOriginalNodeIdMap.get(indexedParentPatternNodeId) ??\n indexedParentPatternNodeId;\n }\n } while (override);\n\n return currentParamId;\n }\n\n /**\n * Retrieves the native parameter definition for a given nodeId. ie one without passToNodes on the node.\n * @param nodeId - The nodeId to retrieve the native parameter definition for\n * @returns The native parameter definition for the given nodeId, or undefined if not found\n */\n public static getNativeParameterDefinitionByNodeId(\n nodeId: string,\n ): ParameterDefinitionWithParameterId | undefined {\n const parameterDefinitionsForNodeId =\n PrebindingManager.parameterDefinitionsByNodeId.get(nodeId);\n return PrebindingManager.extractNativeParameterDefinition(parameterDefinitionsForNodeId);\n }\n\n private static extractNativeParameterDefinition(\n parameterDefinitions: ParameterDefinitionWithParameterId[] | undefined,\n ): ParameterDefinitionWithParameterId | undefined {\n const { parameterId, parameter } =\n parameterDefinitions?.find((it) => !it.parameter.passToNodes?.length) || {};\n if (!parameterId || !parameter) return;\n return {\n parameterId,\n parameter,\n };\n }\n\n /**\n * Resets all properties of the PrebindingManager class\n * triggered when we leave ExperienceBuilder back to experience folder view.\n **/\n public static reset() {\n PrebindingManager.prebindingDefinitions = new Map();\n PrebindingManager.parameterDefinitionsById = new Map();\n PrebindingManager.parameterDefinitionsByNodeId = new Map();\n PrebindingManager.variableMappingByPatternId = new Map();\n PrebindingManager.newToOriginalNodeIdMap = new Map();\n PrebindingManager.paramIdToOverwriteIdMap = new Map();\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assemblyUtils.js","sources":["../../../../src/core/preview/assemblyUtils.ts"],"sourcesContent":["import {\n checkIsAssemblyNode,\n EntityStore,\n mergeDesignValuesByBreakpoint,\n} from '@contentful/experiences-core';\nimport type {\n ComponentPropertyValue,\n ComponentTreeNode,\n DesignValue,\n ExperienceComponentSettings,\n Parameter,\n} from '@contentful/experiences-core/types';\nimport { resolvePrebindingPath, shouldUsePrebinding } from '../../utils/prebindingUtils';\nimport { PrebindingManager } from './PrebindingManager';\n\ntype ComponentTreeNodeWithPatternInformation = ComponentTreeNode & {\n pattern?: {\n parentPatternNodeId: string;\n nodeIdOnPattern: string;\n prefixedNodeId: string;\n };\n};\n\n/** While unfolding the pattern definition on the instance, this function will replace all\n * ComponentValue in the definitions tree with the actual value on the instance. */\nexport const deserializePatternNode = ({\n node,\n rootPatternVariables,\n componentSettings,\n entityStore,\n rootPatternParameters,\n parentPatternRootNodeIdsChain,\n}: {\n node: ComponentTreeNode;\n rootPatternVariables: ComponentTreeNode['variables'];\n componentSettings: ExperienceComponentSettings;\n entityStore: EntityStore;\n rootPatternParameters: Record<string, Parameter>;\n parentPatternRootNodeIdsChain: string[];\n}): ComponentTreeNodeWithPatternInformation => {\n const variables: Record<string, ComponentPropertyValue> = {};\n\n let parentPatternNodeId = parentPatternRootNodeIdsChain.slice(-1)[0];\n if (parentPatternNodeId === node.id) {\n parentPatternNodeId = parentPatternRootNodeIdsChain.slice(-2)[0];\n }\n\n for (const [variableName, variable] of Object.entries(node.variables)) {\n variables[variableName] = variable;\n if (variable.type === 'ComponentValue') {\n const componentValueKey = variable.key;\n const instanceProperty = rootPatternVariables[componentValueKey];\n const variableDefinition = componentSettings.variableDefinitions?.[componentValueKey];\n const defaultValue = variableDefinition?.defaultValue;\n\n const usePrebinding = shouldUsePrebinding({\n componentSettings,\n componentValueKey,\n parameters: rootPatternParameters,\n patternRootNodeIdsChain: parentPatternRootNodeIdsChain,\n });\n const path = resolvePrebindingPath({\n componentSettings,\n componentValueKey,\n parameters: rootPatternParameters,\n entityStore,\n patternRootNodeIdsChain: parentPatternRootNodeIdsChain,\n });\n\n if (usePrebinding && path) {\n variables[variableName] = {\n type: 'BoundValue',\n path,\n };\n\n // For assembly, we look up the variable in the assembly instance and\n // replace the ComponentValue with that one.\n } else if (instanceProperty?.type === 'UnboundValue') {\n variables[variableName] = {\n type: 'UnboundValue',\n key: instanceProperty.key,\n };\n } else if (instanceProperty?.type === 'NoValue') {\n throw new Error(\n `Unexpected NoValue for variable \"${variableName}\" when deserializing pattern \"${node.definitionId}\". ` +\n `This can only happen if you created experience in pre-release version of prebinding and experience contains NoValue properties. ` +\n `Resave experience to fix this issue.`,\n );\n } else if (instanceProperty?.type === 'BoundValue') {\n variables[variableName] = {\n type: 'BoundValue',\n path: instanceProperty.path,\n };\n } else if (instanceProperty?.type === 'HyperlinkValue') {\n variables[variableName] = {\n type: 'HyperlinkValue',\n linkTargetKey: instanceProperty.linkTargetKey,\n };\n } else if (instanceProperty?.type === 'DesignValue') {\n variables[variableName] = mergeDesignValuesByBreakpoint(\n defaultValue as DesignValue | undefined,\n instanceProperty,\n );\n } else if (instanceProperty?.type === 'ComponentValue') {\n if (!usePrebinding) {\n // @ts-expect-error ignore for now\n variables[variableName] = defaultValue;\n }\n } else if (!instanceProperty && defaultValue) {\n // So far, we only automatically fallback to the defaultValue for design properties\n if (variableDefinition.group === 'style') {\n variables[variableName] = {\n type: 'DesignValue',\n valuesByBreakpoint: (defaultValue as DesignValue).valuesByBreakpoint,\n };\n }\n }\n }\n }\n\n const children: ComponentTreeNode[] = node.children.map((child) => {\n const isPatternNode = checkIsAssemblyNode({\n componentId: child.definitionId,\n usedComponents: entityStore.usedComponents,\n });\n\n if (isPatternNode) {\n return deserializePatternNode({\n node: child,\n rootPatternVariables,\n componentSettings,\n entityStore,\n rootPatternParameters,\n parentPatternRootNodeIdsChain,\n });\n }\n\n return deserializePatternNode({\n node: child,\n rootPatternVariables,\n componentSettings,\n entityStore,\n rootPatternParameters,\n parentPatternRootNodeIdsChain,\n });\n });\n\n const patternsChain = parentPatternRootNodeIdsChain.join('---');\n const indexedNodeId = patternsChain ? [patternsChain, node.id!].join('-') : node.id!;\n\n return {\n definitionId: node.definitionId,\n id: node.id,\n variables,\n children,\n pattern: {\n nodeIdOnPattern: node.id!,\n parentPatternNodeId,\n prefixedNodeId: indexedNodeId,\n },\n slotId: node.slotId,\n displayName: node.displayName,\n parameters: node.parameters,\n };\n};\n\nexport const resolvePattern = ({\n node,\n entityStore,\n parentPatternRootNodeIdsChain,\n rootPatternParameters,\n}: {\n node: ComponentTreeNode;\n entityStore: EntityStore;\n parentPatternRootNodeIdsChain: string[];\n rootPatternParameters: Record<string, Parameter>;\n}): ComponentTreeNodeWithPatternInformation => {\n const componentId = node.definitionId as string;\n const patternEntry = entityStore.usedComponents?.find(\n (component) => component.sys.id === componentId,\n );\n\n if (!patternEntry || !('fields' in patternEntry)) {\n return node;\n }\n\n const componentFields = patternEntry.fields;\n const parameters = rootPatternParameters;\n let nodeParameters: Record<string, Parameter> | undefined;\n\n if (rootPatternParameters) {\n nodeParameters = {};\n const prebindingDefinitions = componentFields.componentSettings?.prebindingDefinitions ?? [];\n const indexedNodeId = parentPatternRootNodeIdsChain.join('---');\n PrebindingManager.linkOriginalNodeIds(indexedNodeId, node.id!);\n PrebindingManager.storePrebindingDefinitions(indexedNodeId, componentId, prebindingDefinitions);\n\n const prebindingDefinition = prebindingDefinitions[0];\n\n if (prebindingDefinition && prebindingDefinition.parameterDefinitions) {\n for (const [parameterId] of Object.entries(prebindingDefinition.parameterDefinitions)) {\n const hoistedParameterId = PrebindingManager.getHoistedIdForParameterId(\n parameterId,\n indexedNodeId,\n );\n if (rootPatternParameters[hoistedParameterId]) {\n nodeParameters[parameterId] = rootPatternParameters[hoistedParameterId];\n }\n }\n }\n }\n\n const deserializedNode = deserializePatternNode({\n node: {\n definitionId: node.definitionId,\n id: node.id,\n variables: node.variables,\n children: componentFields.componentTree.children,\n parameters: nodeParameters,\n },\n rootPatternVariables: node.variables,\n componentSettings: componentFields.componentSettings!,\n entityStore,\n rootPatternParameters: parameters,\n parentPatternRootNodeIdsChain,\n });\n\n entityStore.addAssemblyUnboundValues(componentFields.unboundValues);\n\n return deserializedNode;\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"assemblyUtils.js","sources":["../../../../src/core/preview/assemblyUtils.ts"],"sourcesContent":["import {\n checkIsAssemblyNode,\n EntityStore,\n mergeDesignValuesByBreakpoint,\n} from '@contentful/experiences-core';\nimport type {\n ComponentPropertyValue,\n ComponentTreeNode,\n DesignValue,\n ExperienceComponentSettings,\n Parameter,\n} from '@contentful/experiences-core/types';\nimport { resolvePrebindingPath, shouldUsePrebinding } from '../../utils/prebindingUtils';\nimport { PrebindingManager } from './PrebindingManager';\n\ntype ComponentTreeNodeWithPatternInformation = ComponentTreeNode & {\n pattern?: {\n parentPatternNodeId: string;\n nodeIdOnPattern: string;\n prefixedNodeId: string;\n };\n};\n\n/** While unfolding the pattern definition on the instance, this function will replace all\n * ComponentValue in the definitions tree with the actual value on the instance. */\nexport const deserializePatternNode = ({\n node,\n rootPatternVariables,\n componentSettings,\n entityStore,\n rootPatternParameters,\n parentPatternRootNodeIdsChain,\n}: {\n node: ComponentTreeNode;\n rootPatternVariables: ComponentTreeNode['variables'];\n componentSettings: ExperienceComponentSettings;\n entityStore: EntityStore;\n rootPatternParameters: Record<string, Parameter>;\n parentPatternRootNodeIdsChain: string[];\n}): ComponentTreeNodeWithPatternInformation => {\n const variables: Record<string, ComponentPropertyValue> = {};\n\n let parentPatternNodeId = parentPatternRootNodeIdsChain.slice(-1)[0];\n if (parentPatternNodeId === node.id) {\n parentPatternNodeId = parentPatternRootNodeIdsChain.slice(-2)[0];\n }\n\n for (const [variableName, variable] of Object.entries(node.variables)) {\n variables[variableName] = variable;\n if (variable.type === 'ComponentValue') {\n const componentValueKey = variable.key;\n const instanceProperty = rootPatternVariables[componentValueKey];\n const variableDefinition = componentSettings.variableDefinitions?.[componentValueKey];\n const defaultValue = variableDefinition?.defaultValue;\n\n const usePrebinding = shouldUsePrebinding({\n componentSettings,\n componentValueKey,\n parameters: rootPatternParameters,\n patternRootNodeIdsChain: parentPatternRootNodeIdsChain,\n });\n const path = resolvePrebindingPath({\n componentSettings,\n componentValueKey,\n parameters: rootPatternParameters,\n entityStore,\n patternRootNodeIdsChain: parentPatternRootNodeIdsChain,\n });\n\n if (usePrebinding && path) {\n variables[variableName] = {\n type: 'BoundValue',\n path,\n };\n\n // For assembly, we look up the variable in the assembly instance and\n // replace the ComponentValue with that one.\n } else if (instanceProperty?.type === 'UnboundValue') {\n variables[variableName] = {\n type: 'UnboundValue',\n key: instanceProperty.key,\n };\n } else if (instanceProperty?.type === 'NoValue') {\n throw new Error(\n `Unexpected NoValue for variable \"${variableName}\" when deserializing pattern \"${node.definitionId}\". ` +\n `This can only happen if you created experience in pre-release version of prebinding and experience contains NoValue properties. ` +\n `Resave experience to fix this issue.`,\n );\n } else if (instanceProperty?.type === 'BoundValue') {\n variables[variableName] = {\n type: 'BoundValue',\n path: instanceProperty.path,\n };\n } else if (instanceProperty?.type === 'HyperlinkValue') {\n variables[variableName] = {\n type: 'HyperlinkValue',\n linkTargetKey: instanceProperty.linkTargetKey,\n };\n } else if (instanceProperty?.type === 'DesignValue') {\n variables[variableName] = mergeDesignValuesByBreakpoint(\n defaultValue as DesignValue | undefined,\n instanceProperty,\n );\n } else if (instanceProperty?.type === 'ComponentValue') {\n if (!usePrebinding) {\n // @ts-expect-error ignore for now\n variables[variableName] = defaultValue;\n }\n } else if (!instanceProperty && defaultValue) {\n // So far, we only automatically fallback to the defaultValue for design properties\n if (variableDefinition.group === 'style') {\n variables[variableName] = {\n type: 'DesignValue',\n valuesByBreakpoint: (defaultValue as DesignValue).valuesByBreakpoint,\n };\n }\n }\n }\n }\n\n const children: ComponentTreeNode[] = node.children.map((child) => {\n const isPatternNode = checkIsAssemblyNode({\n componentId: child.definitionId,\n usedComponents: entityStore.usedComponents,\n });\n\n if (isPatternNode) {\n return deserializePatternNode({\n node: child,\n rootPatternVariables,\n componentSettings,\n entityStore,\n rootPatternParameters,\n parentPatternRootNodeIdsChain,\n });\n }\n\n return deserializePatternNode({\n node: child,\n rootPatternVariables,\n componentSettings,\n entityStore,\n rootPatternParameters,\n parentPatternRootNodeIdsChain,\n });\n });\n\n const patternsChain = parentPatternRootNodeIdsChain.join('---');\n const indexedNodeId = patternsChain ? [patternsChain, node.id!].join('-') : node.id!;\n\n return {\n definitionId: node.definitionId,\n id: node.id,\n variables,\n children,\n pattern: {\n nodeIdOnPattern: node.id!,\n parentPatternNodeId,\n prefixedNodeId: indexedNodeId,\n },\n slotId: node.slotId,\n displayName: node.displayName,\n parameters: node.parameters,\n };\n};\n\nexport const resolvePattern = ({\n node,\n entityStore,\n parentPatternRootNodeIdsChain,\n rootPatternParameters,\n}: {\n node: ComponentTreeNode;\n entityStore: EntityStore;\n parentPatternRootNodeIdsChain: string[];\n rootPatternParameters: Record<string, Parameter>;\n}): ComponentTreeNodeWithPatternInformation => {\n const componentId = node.definitionId as string;\n const patternEntry = entityStore.usedComponents?.find(\n (component) => component.sys.id === componentId,\n );\n\n if (!patternEntry || !('fields' in patternEntry)) {\n return node;\n }\n\n const componentFields = patternEntry.fields;\n const parameters = rootPatternParameters;\n let nodeParameters: Record<string, Parameter> | undefined;\n\n if (rootPatternParameters) {\n nodeParameters = {};\n const prebindingDefinitions = componentFields.componentSettings?.prebindingDefinitions ?? [];\n const indexedNodeId = parentPatternRootNodeIdsChain.join('---');\n PrebindingManager.linkOriginalNodeIds(indexedNodeId, node.id!);\n PrebindingManager.storePrebindingDefinitions(indexedNodeId, componentId, prebindingDefinitions);\n\n const prebindingDefinition = prebindingDefinitions[0];\n\n if (prebindingDefinition && prebindingDefinition.parameterDefinitions) {\n for (const [parameterId] of Object.entries(prebindingDefinition.parameterDefinitions)) {\n const hoistedParameterId = PrebindingManager.getHoistedIdForParameterId(\n parameterId,\n indexedNodeId,\n );\n if (rootPatternParameters[hoistedParameterId]) {\n nodeParameters[parameterId] = rootPatternParameters[hoistedParameterId];\n }\n }\n }\n }\n\n const deserializedNode = deserializePatternNode({\n node: {\n definitionId: node.definitionId,\n id: node.id,\n variables: node.variables,\n children: componentFields.componentTree.children,\n parameters: nodeParameters,\n },\n rootPatternVariables: node.variables,\n componentSettings: componentFields.componentSettings!,\n entityStore,\n rootPatternParameters: parameters,\n parentPatternRootNodeIdsChain,\n });\n\n entityStore.addAssemblyUnboundValues(componentFields.unboundValues);\n\n return deserializedNode;\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdkFeatures.js","sources":["../../../src/core/sdkFeatures.ts"],"sourcesContent":["// Object to store the SDK features that are enabled/disabled\nexport const sdkFeatures: Record<string, unknown> = {\n hasSDKVersionUI: true,\n hasVersionHistory: true,\n cfVisibility: true,\n patternResolution: true,\n // [SPA-2602] allow merging the default and overwriting design values for patterns by breakpoint\n patternBreakpointDesignValues: true,\n // DND is moving to the host application enabling smoother native event handling\n dndMigration: true,\n hasPrebinding: true,\n};\n"],"names":[],"mappings":"AAAA;
|
|
1
|
+
{"version":3,"file":"sdkFeatures.js","sources":["../../../src/core/sdkFeatures.ts"],"sourcesContent":["// Object to store the SDK features that are enabled/disabled\nexport const sdkFeatures: Record<string, unknown> = {\n hasSDKVersionUI: true,\n hasVersionHistory: true,\n cfVisibility: true,\n patternResolution: true,\n // [SPA-2602] allow merging the default and overwriting design values for patterns by breakpoint\n patternBreakpointDesignValues: true,\n // DND is moving to the host application enabling smoother native event handling\n dndMigration: true,\n hasPrebinding: true,\n};\n"],"names":[],"mappings":"AAAA;AACa,MAAA,WAAW,GAA4B;AAClD,IAAA,eAAe,EAAE,IAAI;AACrB,IAAA,iBAAiB,EAAE,IAAI;AACvB,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,iBAAiB,EAAE,IAAI;;AAEvB,IAAA,6BAA6B,EAAE,IAAI;;AAEnC,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,aAAa,EAAE,IAAI;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertResolvedDesignValuesToMediaQuery.js","sources":["../../../../src/core/styles/convertResolvedDesignValuesToMediaQuery.ts"],"sourcesContent":["import { toMediaQuery } from '@contentful/experiences-core';\nimport { ResolvedStylesheetData } from './createStylesheetsForBuiltInStyles';\n\n/**\n * Takes the CSS code for each breakpoint and merges them into a single CSS string.\n * It will wrap each breakpoint's CSS code in a media query (exception: default breakpoint with '*').\n *\n * **Example Input:**\n * ```\n * [\n * { className: 'cfstyles-123', breakpointCondition: '*', css: 'color:red;', visibilityCss: 'display:none !important;' },\n * { className: 'cfstyles-456', breakpointCondition: '<768px', css: 'color:blue;' },\n * ]\n * ```\n *\n * **Example Output:**\n * ```\n * '.cfstyles-123{color:red;}@media not (max-width:768px){.cfstyles-123{display:none !important;}}@media(max-width:768px){.cfstyles-456{color:blue;}}'\n * ```\n */\nexport const convertResolvedDesignValuesToMediaQuery = (stylesheetData: ResolvedStylesheetData) => {\n const stylesheet = stylesheetData.reduce(\n (acc, { breakpointCondition, className, css, visibilityCss }, index) => {\n if (acc.classNames.includes(className)) {\n return acc;\n }\n\n const mediaQueryCss = toMediaQuery({\n condition: breakpointCondition,\n cssByClassName: { [className]: css },\n });\n const visibilityMediaQueryCss = toMediaQuery({\n condition: breakpointCondition,\n cssByClassName: { [className]: visibilityCss ?? '' },\n // Validation ensures that it starts with the '*' breakpoint\n nextCondition: stylesheetData[index + 1]?.breakpointCondition,\n });\n return {\n classNames: [...acc.classNames, className],\n css: `${acc.css}${mediaQueryCss}${visibilityMediaQueryCss}`,\n };\n },\n {\n classNames: [] as string[],\n css: '',\n },\n );\n\n return {\n css: stylesheet.css,\n className: stylesheet.classNames.join(' '),\n };\n};\n"],"names":[],"mappings":";;AAGA;;;;;;;;;;;;;;;;AAgBG;
|
|
1
|
+
{"version":3,"file":"convertResolvedDesignValuesToMediaQuery.js","sources":["../../../../src/core/styles/convertResolvedDesignValuesToMediaQuery.ts"],"sourcesContent":["import { toMediaQuery } from '@contentful/experiences-core';\nimport { ResolvedStylesheetData } from './createStylesheetsForBuiltInStyles';\n\n/**\n * Takes the CSS code for each breakpoint and merges them into a single CSS string.\n * It will wrap each breakpoint's CSS code in a media query (exception: default breakpoint with '*').\n *\n * **Example Input:**\n * ```\n * [\n * { className: 'cfstyles-123', breakpointCondition: '*', css: 'color:red;', visibilityCss: 'display:none !important;' },\n * { className: 'cfstyles-456', breakpointCondition: '<768px', css: 'color:blue;' },\n * ]\n * ```\n *\n * **Example Output:**\n * ```\n * '.cfstyles-123{color:red;}@media not (max-width:768px){.cfstyles-123{display:none !important;}}@media(max-width:768px){.cfstyles-456{color:blue;}}'\n * ```\n */\nexport const convertResolvedDesignValuesToMediaQuery = (stylesheetData: ResolvedStylesheetData) => {\n const stylesheet = stylesheetData.reduce(\n (acc, { breakpointCondition, className, css, visibilityCss }, index) => {\n if (acc.classNames.includes(className)) {\n return acc;\n }\n\n const mediaQueryCss = toMediaQuery({\n condition: breakpointCondition,\n cssByClassName: { [className]: css },\n });\n const visibilityMediaQueryCss = toMediaQuery({\n condition: breakpointCondition,\n cssByClassName: { [className]: visibilityCss ?? '' },\n // Validation ensures that it starts with the '*' breakpoint\n nextCondition: stylesheetData[index + 1]?.breakpointCondition,\n });\n return {\n classNames: [...acc.classNames, className],\n css: `${acc.css}${mediaQueryCss}${visibilityMediaQueryCss}`,\n };\n },\n {\n classNames: [] as string[],\n css: '',\n },\n );\n\n return {\n css: stylesheet.css,\n className: stylesheet.classNames.join(' '),\n };\n};\n"],"names":[],"mappings":";;AAGA;;;;;;;;;;;;;;;;AAgBG;AACU,MAAA,uCAAuC,GAAG,CAAC,cAAsC,KAAI;IAChG,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CACtC,CAAC,GAAG,EAAE,EAAE,mBAAmB,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,EAAE,EAAE,KAAK,KAAI;QACrE,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AACtC,YAAA,OAAO,GAAG,CAAC;SACZ;QAED,MAAM,aAAa,GAAG,YAAY,CAAC;AACjC,YAAA,SAAS,EAAE,mBAAmB;AAC9B,YAAA,cAAc,EAAE,EAAE,CAAC,SAAS,GAAG,GAAG,EAAE;AACrC,SAAA,CAAC,CAAC;QACH,MAAM,uBAAuB,GAAG,YAAY,CAAC;AAC3C,YAAA,SAAS,EAAE,mBAAmB;YAC9B,cAAc,EAAE,EAAE,CAAC,SAAS,GAAG,aAAa,IAAI,EAAE,EAAE;;YAEpD,aAAa,EAAE,cAAc,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,mBAAmB;AAC9D,SAAA,CAAC,CAAC;QACH,OAAO;YACL,UAAU,EAAE,CAAC,GAAG,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC;YAC1C,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,CAAG,EAAA,aAAa,CAAG,EAAA,uBAAuB,CAAE,CAAA;SAC5D,CAAC;AACJ,KAAC,EACD;AACE,QAAA,UAAU,EAAE,EAAc;AAC1B,QAAA,GAAG,EAAE,EAAE;AACR,KAAA,CACF,CAAC;IAEF,OAAO;QACL,GAAG,EAAE,UAAU,CAAC,GAAG;QACnB,SAAS,EAAE,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;KAC3C,CAAC;AACJ;;;;"}
|