@remkoj/optimizely-cms-react 6.0.0-pre8 → 6.0.0-rc.1
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/LICENSE +12 -12
- package/README.md +3 -4
- package/dist/components/cms-content/get-content-type.js +8 -17
- package/dist/components/cms-content/get-content-type.js.map +1 -1
- package/dist/components/cms-content/get-content.js +46 -50
- package/dist/components/cms-content/get-content.js.map +1 -1
- package/dist/components/cms-content/resolve-component.js +8 -9
- package/dist/components/cms-content/resolve-component.js.map +1 -1
- package/dist/components/cms-content/rsc.d.ts +1 -1
- package/dist/components/cms-content/rsc.js +9 -7
- package/dist/components/cms-content/rsc.js.map +1 -1
- package/dist/components/cms-content/types.d.ts +46 -2
- package/dist/components/cms-content-area/index.js +3 -3
- package/dist/components/cms-content-area/index.js.map +1 -1
- package/dist/components/cms-content-area/types.d.ts +51 -10
- package/dist/components/cms-editable/index.d.ts +86 -17
- package/dist/components/cms-editable/index.js +20 -10
- package/dist/components/cms-editable/index.js.map +1 -1
- package/dist/components/rich-text/index.d.ts +2 -1
- package/dist/components/rich-text/index.js +6 -3
- package/dist/components/rich-text/index.js.map +1 -1
- package/dist/components/rsc-components.d.ts +154 -5
- package/dist/components/rsc-components.js +153 -5
- package/dist/components/rsc-components.js.map +1 -1
- package/dist/components/rsc.d.ts +2 -0
- package/dist/components/rsc.js +1 -0
- package/dist/components/rsc.js.map +1 -1
- package/dist/components/visual-builder/functions.js +10 -17
- package/dist/components/visual-builder/functions.js.map +1 -1
- package/dist/components/visual-builder/index.d.ts +3 -1
- package/dist/components/visual-builder/index.js +19 -16
- package/dist/components/visual-builder/index.js.map +1 -1
- package/dist/components/visual-builder/types.d.ts +8 -2
- package/dist/context/client.js +5 -2
- package/dist/context/client.js.map +1 -1
- package/dist/context/rsc.d.ts +1 -1
- package/dist/context/rsc.js +11 -42
- package/dist/context/rsc.js.map +1 -1
- package/dist/context/shared.js +2 -1
- package/dist/context/shared.js.map +1 -1
- package/dist/context/types.d.ts +3 -11
- package/dist/factory/default.d.ts +20 -3
- package/dist/factory/default.js +41 -27
- package/dist/factory/default.js.map +1 -1
- package/dist/factory/types.d.ts +24 -4
- package/dist/factory/undef.d.ts +7 -5
- package/dist/factory/undef.js +10 -4
- package/dist/factory/undef.js.map +1 -1
- package/dist/rsc.d.ts +24 -0
- package/dist/rsc.js +24 -0
- package/dist/rsc.js.map +1 -1
- package/dist/types.d.ts +37 -6
- package/dist/utilities.d.ts +56 -6
- package/dist/utilities.js +112 -14
- package/dist/utilities.js.map +1 -1
- package/package.json +19 -15
package/LICENSE
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
Copyright 2024 Remko Jantzen
|
|
2
|
-
|
|
3
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
you may not use this file except in compliance with the License.
|
|
5
|
-
You may obtain a copy of the License at
|
|
6
|
-
|
|
7
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
|
|
9
|
-
Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
See the License for the specific language governing permissions and
|
|
1
|
+
Copyright 2024 Remko Jantzen
|
|
2
|
+
|
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
you may not use this file except in compliance with the License.
|
|
5
|
+
You may obtain a copy of the License at
|
|
6
|
+
|
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
See the License for the specific language governing permissions and
|
|
13
13
|
limitations under the License.
|
package/README.md
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# Optimizely SaaS CMS React Components
|
|
2
|
+
|
|
2
3
|
> [!WARNING]
|
|
3
|
-
>
|
|
4
|
-
>
|
|
5
|
-
> For some of the commonly used old exports it still contains placeholders, however those are deprecated and will be removed in a future version
|
|
4
|
+
> There'll be an update of Optimizely SaaS CMS that is incompatible with all SDK versions prior to 5.1.6. If you don't upgrade, you will see empty pages (main website) and "Component not found" messages (preview).
|
|
6
5
|
|
|
7
6
|
This package provides two main entry points, depending on your build environment:
|
|
8
7
|
- `@remkoj/optimizely-cms-react` This export contains the library, whith React components that use a client side context
|
|
@@ -46,4 +45,4 @@ An entry within the factory consists of the following fields:
|
|
|
46
45
|
- ***type:*** The identifier of the content type, can either be an array of strings or a string. The implementation *should* normalize the type. The `DefaultComponentFactory` normalized to a string, using `/` as item separator.
|
|
47
46
|
- ***component:*** The component to do the actual rendering of the data. *The factory is indifferent to the actual type, so this could be the output of `next/dynamic` to trigger bundle splitting in Next.js.*
|
|
48
47
|
- ***useSuspense:*** When set to `true` the component will be wrapped in the `<Suspense></Suspense>` from React. Optional, the default value is `false`.
|
|
49
|
-
- ***loader:*** The component to show while Suspense is awaiting the actual component. This component is given to the `fallback` property of `<Suspense>`. Optional, the default value is `undefined`.
|
|
48
|
+
- ***loader:*** The component to show while Suspense is awaiting the actual component. This component is given to the `fallback` property of `<Suspense>`. Optional, the default value is `undefined`.
|
|
@@ -27,19 +27,14 @@ export async function getContentType(link, gqlClient) {
|
|
|
27
27
|
console.error(`🔴 [CmsContent][getContentType] The provided link is not a valid content link: ${contentLinkToString(link)}`);
|
|
28
28
|
throw new Error(`The provided link is not a valid content link: ${contentLinkToString(link)}`);
|
|
29
29
|
}
|
|
30
|
-
const gqlQueryVars = contentLinkToRequestVariables(link);
|
|
30
|
+
const gqlQueryVars = contentLinkToRequestVariables(link, gqlClient);
|
|
31
31
|
const gqlResponse = await gqlClient.request(getContentTypeQuery, gqlQueryVars);
|
|
32
32
|
if (gqlResponse.Content?.total != 1) {
|
|
33
33
|
if (gqlClient.debug)
|
|
34
34
|
console.error(`🔴 [CmsContent][getContentType] Expected exactly one type, received ${gqlResponse.Content?.total ?? 0} types for`, gqlQueryVars);
|
|
35
35
|
return undefined;
|
|
36
36
|
}
|
|
37
|
-
const
|
|
38
|
-
if (!items || items.length == 0) {
|
|
39
|
-
console.error(`🔴 [CmsContent][getContentType] The content item could not be found! (${contentLinkToString(link)})`);
|
|
40
|
-
throw new Error("The content item could not be found!");
|
|
41
|
-
}
|
|
42
|
-
const contentType = normalizeContentType(items[0]?._metadata?.types);
|
|
37
|
+
const contentType = normalizeContentType(gqlResponse.Content?.item?.metadata?.types);
|
|
43
38
|
if (!contentType) {
|
|
44
39
|
console.error(`🔴 [CmsContent][getContentType] The item did not contain type information! (${contentLinkToString(link)})`);
|
|
45
40
|
throw new Error("The item did not contain type information");
|
|
@@ -47,20 +42,16 @@ export async function getContentType(link, gqlClient) {
|
|
|
47
42
|
return contentType;
|
|
48
43
|
}
|
|
49
44
|
export default getContentType;
|
|
50
|
-
const getContentTypeQuery = gql `query getContentType($key: String!, $version: String, $locale: [Locales])
|
|
45
|
+
const getContentTypeQuery = gql `query getContentType($key: [String!]!, $version: String, $locale: [Locales!], $changeset: String, $variation: VariationInput)
|
|
51
46
|
{
|
|
52
47
|
Content: _Content(
|
|
53
|
-
|
|
54
|
-
_metadata: {
|
|
55
|
-
key: { eq: $key }
|
|
56
|
-
version: { eq: $version }
|
|
57
|
-
}
|
|
58
|
-
},
|
|
48
|
+
ids: $key
|
|
59
49
|
locale: $locale
|
|
60
|
-
|
|
50
|
+
variation: $variation
|
|
51
|
+
where: { _metadata: { changeset: { eq: $changeset }, version: { eq: $version } } }
|
|
61
52
|
) {
|
|
62
|
-
|
|
63
|
-
_metadata {
|
|
53
|
+
item {
|
|
54
|
+
metadata: _metadata {
|
|
64
55
|
types
|
|
65
56
|
}
|
|
66
57
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-content-type.js","sourceRoot":"","sources":["../../../src/components/cms-content/get-content-type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,mBAAmB,EAAmE,MAAM,iCAAiC,CAAA;AAE1K,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AACrC,OAAO,EAAE,6BAA6B,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAIxF,MAAM,UAAU,kBAAkB,CAAI,KAAQ;
|
|
1
|
+
{"version":3,"file":"get-content-type.js","sourceRoot":"","sources":["../../../src/components/cms-content/get-content-type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,mBAAmB,EAAmE,MAAM,iCAAiC,CAAA;AAE1K,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AACrC,OAAO,EAAE,6BAA6B,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAIxF,MAAM,UAAU,kBAAkB,CAAI,KAAQ;IAC5C,MAAM,EAAE,GAAmB;QACzB,IAAI,EAAE,CAAe,WAAiF,EAAE,EAAE;YACxG,IAAI,CAAC,WAAW;gBACd,OAAO,KAAyC,CAAA;YAClD,OAAO,WAAW,CAAC,KAAK,CAA0B,CAAA;QACpD,CAAC;KACF,CAAA;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAqC,EAAE,SAA2B;IACrG,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,4GAA4G,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACtJ,MAAM,IAAI,KAAK,CAAC,4EAA4E,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC1H,CAAC;IAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,kFAAkF,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC5H,MAAM,IAAI,KAAK,CAAC,kDAAkD,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChG,CAAC;IAED,MAAM,YAAY,GAAG,6BAA6B,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IACnE,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,OAAO,CAAyB,mBAAmB,EAAE,YAAY,CAAC,CAAA;IACtG,IAAI,WAAW,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpC,IAAI,SAAS,CAAC,KAAK;YACjB,OAAO,CAAC,KAAK,CAAC,uEAAuE,WAAW,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAA;QACjJ,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;IACpF,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,+EAA+E,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC1H,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;IAC9D,CAAC;IAED,OAAO,WAAW,CAAA;AACpB,CAAC;AAED,eAAe,cAAc,CAAA;AAa7B,MAAM,mBAAmB,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;EAe7B,CAAA"}
|
|
@@ -5,8 +5,8 @@ import { validatesFragment, contentLinkToRequestVariables, isCmsComponentWithFra
|
|
|
5
5
|
import { getComponentLabel } from './resolve-component.js';
|
|
6
6
|
export function getContent(client, contentLink, Component, fragmentData, noDataLoad) {
|
|
7
7
|
const debug = client?.debug ?? false;
|
|
8
|
-
// Handle provided fragment
|
|
9
8
|
const componentLabel = getComponentLabel(Component);
|
|
9
|
+
// Handle provided fragment data
|
|
10
10
|
const fragmentProps = fragmentData ? Object.getOwnPropertyNames(fragmentData).filter(x => !CmsContentFragments.IContentDataProps.includes(x)) : [];
|
|
11
11
|
if (fragmentData && fragmentProps.length > 0) {
|
|
12
12
|
// Invalid fragment
|
|
@@ -17,13 +17,11 @@ export function getContent(client, contentLink, Component, fragmentData, noDataL
|
|
|
17
17
|
}
|
|
18
18
|
else if (client?.isPreviewEnabled() && isContentLink(contentLink) && !isInlineContentLink(contentLink)) {
|
|
19
19
|
if (debug)
|
|
20
|
-
console.warn(
|
|
20
|
+
console.warn(`🔴 [CmsContent][getContent] Rendering shared instance (${JSON.stringify(contentLink)}), while in preview mode, falling back to loading for ${componentLabel}`);
|
|
21
21
|
contentLink.version = null;
|
|
22
22
|
// Default mode, use fragment
|
|
23
23
|
}
|
|
24
24
|
else {
|
|
25
|
-
if (debug)
|
|
26
|
-
console.log("⚪ [CmsContent][getContent] Rendering CMS Component using fragment information", fragmentProps);
|
|
27
25
|
return (noDataLoad ? fragmentData : Promise.resolve(fragmentData));
|
|
28
26
|
}
|
|
29
27
|
}
|
|
@@ -33,11 +31,9 @@ export function getContent(client, contentLink, Component, fragmentData, noDataL
|
|
|
33
31
|
console.warn(`🟠 [CmsContent][getContent] No data present for inline content item, this may cause errors if your component expects certain fields to be present`);
|
|
34
32
|
return (noDataLoad ? fragmentData ?? {} : Promise.resolve(fragmentData ?? {}));
|
|
35
33
|
}
|
|
36
|
-
if
|
|
37
|
-
|
|
38
|
-
console.log(`⚪ [CmsContent][getContent] Component of type "${componentLabel}" was prohibited to load data`);
|
|
34
|
+
// Stop before running any Async operation if we're not loading data
|
|
35
|
+
if (noDataLoad)
|
|
39
36
|
return (noDataLoad ? {} : Promise.resolve({}));
|
|
40
|
-
}
|
|
41
37
|
// If we don't have a valid link, stop here
|
|
42
38
|
if (!isContentLink(contentLink)) {
|
|
43
39
|
if (debug)
|
|
@@ -49,69 +45,67 @@ export function getContent(client, contentLink, Component, fragmentData, noDataL
|
|
|
49
45
|
console.error(`🔴 [CmsContent][getContent] Data loading for "${componentLabel}" requires a GraphQL Client`);
|
|
50
46
|
throw new Error(`Data loading for "${componentLabel}" requires a GraphQL Client`);
|
|
51
47
|
}
|
|
48
|
+
if (isCmsComponentWithDataQuery(Component))
|
|
49
|
+
return getComponentDataFromQuery(Component, contentLink, client);
|
|
52
50
|
if (isCmsComponentWithFragment(Component))
|
|
53
51
|
return getComponentDataFromFragment(Component, contentLink, client).then(data => (data || {}));
|
|
54
|
-
if (isCmsComponentWithDataQuery(Component)) {
|
|
55
|
-
const gqlQuery = Component.getDataQuery();
|
|
56
|
-
const gqlVariables = contentLinkToRequestVariables(contentLink);
|
|
57
|
-
// If the CMS Preview mode has been enabled, make sure we include that in the query
|
|
58
|
-
if (client.isPreviewEnabled())
|
|
59
|
-
gqlVariables.changeset = client.getChangeset();
|
|
60
|
-
if (client.debug)
|
|
61
|
-
console.log("⚪ [CmsContent][getContent] Component fetching data using query, provided variables:", gqlVariables);
|
|
62
|
-
return client.request(gqlQuery, gqlVariables);
|
|
63
|
-
}
|
|
64
|
-
// Assume there's no data load required for the component
|
|
65
|
-
if (client.debug)
|
|
66
|
-
console.log(`⚪ [CmsContent] Component of type "${componentLabel}" did not request loading of data`);
|
|
67
52
|
return Promise.resolve({});
|
|
68
53
|
}
|
|
69
54
|
export default getContent;
|
|
55
|
+
async function getComponentDataFromQuery(Component, contentLink, client) {
|
|
56
|
+
const gqlQuery = Component.getDataQuery();
|
|
57
|
+
const gqlVariables = contentLinkToRequestVariables(contentLink, client);
|
|
58
|
+
// Run the Query
|
|
59
|
+
const responseData = await client.request(gqlQuery, gqlVariables);
|
|
60
|
+
// See if this is a templated response, if so return the selected fields.
|
|
61
|
+
if (isTemplatedResponse(responseData)) {
|
|
62
|
+
const responseItem = responseData.data?.item;
|
|
63
|
+
// Transform CMS 12 results
|
|
64
|
+
if (client.currentOptiCmsSchema == OptiCmsSchema.CMS12 && responseItem._locale?.name) {
|
|
65
|
+
const metadata = responseItem._metadata ?? {};
|
|
66
|
+
metadata.locale = responseItem._locale?.name;
|
|
67
|
+
responseItem._metadata = metadata;
|
|
68
|
+
delete responseItem._locale;
|
|
69
|
+
}
|
|
70
|
+
return responseItem;
|
|
71
|
+
}
|
|
72
|
+
// Otherwise return the raw result
|
|
73
|
+
return responseData;
|
|
74
|
+
}
|
|
75
|
+
function isTemplatedResponse(responseData) {
|
|
76
|
+
if (!responseData || typeof (responseData) !== 'object')
|
|
77
|
+
return false;
|
|
78
|
+
const responseKey = responseData?.data?.item?._metadata?.key;
|
|
79
|
+
return typeof (responseKey) === 'string' && responseKey.length > 0;
|
|
80
|
+
}
|
|
70
81
|
async function getComponentDataFromFragment(Component, contentLink, client) {
|
|
71
82
|
const [name, fragment] = Component.getDataFragment();
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const
|
|
76
|
-
//
|
|
77
|
-
if (client.currentOptiCmsSchema == OptiCmsSchema.CMS12)
|
|
78
|
-
fragmentVariables.version = tryParsePositiveInt(fragmentVariables.version);
|
|
79
|
-
// If the CMS Preview mode has been enabled, make sure we include that in the query
|
|
80
|
-
if (client.isPreviewEnabled())
|
|
81
|
-
fragmentVariables.changeset = client.getChangeset();
|
|
82
|
-
if (client.debug)
|
|
83
|
-
console.log(`⚪ [CmsContent] Component data fetching using variables: ${JSON.stringify(fragmentVariables)}`);
|
|
84
|
-
const fragmentResponse = await client.request(fragmentQuery, fragmentVariables);
|
|
83
|
+
const gqlQuery = client.currentOptiCmsSchema == OptiCmsSchema.CMS12 ? buildCms12Query(name, fragment) : buildCms13Query(name, fragment);
|
|
84
|
+
const gqlVariables = contentLinkToRequestVariables(contentLink, client);
|
|
85
|
+
// Run the Query
|
|
86
|
+
const fragmentResponse = await client.request(gqlQuery, gqlVariables);
|
|
87
|
+
// Check the result count
|
|
85
88
|
const totalItems = fragmentResponse.contentById.total || 0;
|
|
86
89
|
if (totalItems < 1)
|
|
87
|
-
throw new Error(`CmsContent expected to load exactly one content item of type ${name}, received ${totalItems} from Optimizely Graph. Content Item: ${JSON.stringify(
|
|
90
|
+
throw new Error(`CmsContent expected to load exactly one content item of type ${name}, received ${totalItems} from Optimizely Graph. Content Item: ${JSON.stringify(gqlVariables)}`);
|
|
88
91
|
if (totalItems > 1 && client.debug)
|
|
89
92
|
console.warn(`🟠 [CmsContent] Resolved ${totalItems} content items, expected only 1. Picked the first one`);
|
|
93
|
+
// Transform CMS 12 results
|
|
90
94
|
if (client.currentOptiCmsSchema == OptiCmsSchema.CMS12) {
|
|
91
95
|
fragmentResponse.contentById.items[0]._metadata.locale = fragmentResponse.contentById.items[0]._metadata.locale ?? fragmentResponse.contentById.items[0]._locale?.name;
|
|
92
96
|
if (fragmentResponse.contentById.items[0]._locale)
|
|
93
97
|
delete fragmentResponse.contentById.items[0]._locale;
|
|
94
98
|
}
|
|
99
|
+
// Return the item
|
|
95
100
|
return fragmentResponse.contentById.items[0];
|
|
96
101
|
}
|
|
97
|
-
function tryParsePositiveInt(value, defaultValue) {
|
|
98
|
-
try {
|
|
99
|
-
const versionNr = value ? Number.parseInt(value) : 0;
|
|
100
|
-
if (!isNaN(versionNr) && versionNr > 0)
|
|
101
|
-
return versionNr;
|
|
102
|
-
}
|
|
103
|
-
catch {
|
|
104
|
-
// Ignore
|
|
105
|
-
}
|
|
106
|
-
return defaultValue;
|
|
107
|
-
}
|
|
108
102
|
const buildCms12Query = (name, fragment) => `query getContentFragmentById($key: String!, $version: Int, $locale: [Locales!]) { contentById: Content(where: { ContentLink: { GuidValue: { eq: $key }, WorkId: { eq: $version } } }, locale: $locale) { total, items { _type: __typename, _metadata: ContentLink { key: GuidValue, version: WorkId }, _locale: Language { name: Name } ...${name} }}}\n${typeof (fragment) == 'string' ? fragment : print(fragment)}`;
|
|
109
|
-
const buildCms13Query = (name, fragment) => `query getContentFragmentById($key: String!, $version: String, $locale: [Locales!], $changeset: String) {
|
|
103
|
+
const buildCms13Query = (name, fragment) => `query getContentFragmentById($key: [String!]!, $version: String, $locale: [Locales!], $changeset: String, $variation: VariationInput) {
|
|
110
104
|
contentById: _Content(
|
|
111
|
-
|
|
112
|
-
_metadata: { key: { eq: $key }, version: { eq: $version }, changeset: { eq: $changeset } }
|
|
113
|
-
}
|
|
105
|
+
ids: $key
|
|
114
106
|
locale: $locale
|
|
107
|
+
variation: $variation
|
|
108
|
+
where: { _metadata: { changeset: { eq: $changeset }, version: { eq: $version } } }
|
|
115
109
|
) {
|
|
116
110
|
total
|
|
117
111
|
items {
|
|
@@ -121,6 +115,8 @@ const buildCms13Query = (name, fragment) => `query getContentFragmentById($key:
|
|
|
121
115
|
key
|
|
122
116
|
version
|
|
123
117
|
locale
|
|
118
|
+
variation
|
|
119
|
+
changeset
|
|
124
120
|
}
|
|
125
121
|
...${name}
|
|
126
122
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-content.js","sourceRoot":"","sources":["../../../src/components/cms-content/get-content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,EAAE,MAAM,SAAS,CAAA;AAExC,OAAO,EAAmE,aAAa,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAErK,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAE/I,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,UAAU,UAAU,CAA8B,MAAoC,EAAE,WAAwD,EAAE,SAAwC,EAAE,YAAoD,EAAE,UAAgB;IACtQ,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"get-content.js","sourceRoot":"","sources":["../../../src/components/cms-content/get-content.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,20 +24,16 @@ export function resolveComponent(contentType, prefix, variant, ctx) {
|
|
|
24
24
|
console.error(`🔴 [CmsContent][resolveComponent] No content type factory registered in the context`);
|
|
25
25
|
throw new Error('Empty factory on the context');
|
|
26
26
|
}
|
|
27
|
-
//
|
|
28
|
-
const myContentType =
|
|
29
|
-
? Utils.normalizeAndPrefixContentType(Array.isArray(contentType) ? [...contentType].reverse() : contentType, prefix)
|
|
30
|
-
: Utils.normalizeContentType(Array.isArray(contentType) ? [...contentType].reverse() : contentType, true);
|
|
27
|
+
// Make sure that we normalize the input from graph into a string array
|
|
28
|
+
const myContentType = Utils.normalizeContentType(contentType, false);
|
|
31
29
|
// Validate that we have a value to ask the factory a component for
|
|
32
30
|
if (!myContentType || myContentType.length == 0) {
|
|
33
31
|
if (isDebug)
|
|
34
32
|
console.error(`🔴 [CmsContent][resolveComponent] The content type ${JSON.stringify(contentType)}, with prefix ${JSON.stringify(prefix)} yielded an empty normalized type`);
|
|
35
33
|
throw new Error(`The content type ${JSON.stringify(contentType)}, with prefix ${JSON.stringify(prefix)} yielded an empty normalized type`);
|
|
36
34
|
}
|
|
37
|
-
if (isDebug)
|
|
38
|
-
console.log(`⚪ [CmsContent][resolveComponent] Normalized content type ${JSON.stringify(contentType)} to ${myContentType}`);
|
|
39
35
|
// Resolve component
|
|
40
|
-
const Component = Utils.resolveComponentType(factory, myContentType,
|
|
36
|
+
const Component = Utils.resolveComponentType(factory, myContentType, [variant, prefix].filter(Utils.isNotNullOrUndefined));
|
|
41
37
|
// Handle component not found in factory
|
|
42
38
|
if (!Component) {
|
|
43
39
|
const contentTypeDisplay = Array.isArray(myContentType)
|
|
@@ -55,8 +51,11 @@ export function resolveComponent(contentType, prefix, variant, ctx) {
|
|
|
55
51
|
return ErrorComponent;
|
|
56
52
|
}
|
|
57
53
|
// Return the component
|
|
58
|
-
if (isDebug)
|
|
59
|
-
|
|
54
|
+
/*if (isDebug)
|
|
55
|
+
console.log(
|
|
56
|
+
'⚪ [CmsContent] Rendering item using component:',
|
|
57
|
+
getComponentLabel(Component as ComponentType)
|
|
58
|
+
)*/
|
|
60
59
|
return Component;
|
|
61
60
|
}
|
|
62
61
|
export default resolveComponent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-component.js","sourceRoot":"","sources":["../../../src/components/cms-content/resolve-component.tsx"],"names":[],"mappings":";AAEA,OAAO,KAAK,KAAK,MAAM,oBAAoB,CAAA;AAS3C,MAAM,UAAU,iBAAiB,CAAC,iBAAwC;IACxE,IAAI,CAAC,iBAAiB;QAAE,OAAO,KAAK,CAAA;IACpC,IAAI,iBAAiB,CAAC,WAAW;QAAE,OAAO,iBAAiB,CAAC,WAAW,CAAA;IACvE,IAAI,OAAO,iBAAiB,IAAI,UAAU,IAAI,iBAAiB,CAAC,IAAI;QAClE,OAAO,iBAAiB,CAAC,IAAI,CAAA;IAC/B,OAAO,iBAAiB,CAAC,QAAQ,EAAE,CAAA;AACrC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAC9B,WAAmD,EACnD,MAAiC,EACjC,OAAkC,EAClC,GAAmB;IAEnB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,GAAG,CAAA;IAE5C,sFAAsF;IACtF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACX,qFAAqF,CACtF,CAAA;QACD,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;IACjD,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"resolve-component.js","sourceRoot":"","sources":["../../../src/components/cms-content/resolve-component.tsx"],"names":[],"mappings":"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"}
|
|
@@ -7,5 +7,5 @@ export type * from './types.js';
|
|
|
7
7
|
* @param param0
|
|
8
8
|
* @returns
|
|
9
9
|
*/
|
|
10
|
-
export declare function CmsContent<LocalesType = string>({ contentType, contentTypePrefix, contentLink: rawContentLink, children, fragmentData, layoutProps, noDataLoad, variant, ctx, }: BaseCmsContentProps<LocalesType>): Promise<ReactNode>;
|
|
10
|
+
export declare function CmsContent<LocalesType = string>({ contentType, contentTypePrefix, contentLink: rawContentLink, children, fragmentData, layoutProps, noDataLoad, variant, ctx, editorComponentId, }: BaseCmsContentProps<LocalesType>): Promise<ReactNode>;
|
|
11
11
|
export default CmsContent;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import getContentType from './get-content-type.js';
|
|
4
4
|
import getContent from './get-content.js';
|
|
5
|
-
import { AuthMode,
|
|
5
|
+
import { AuthMode, normalizeContentLinkWithLocale, } from '@remkoj/optimizely-graph-client';
|
|
6
6
|
import resolveComponent, { isComponentMissingComponent, } from './resolve-component.js';
|
|
7
7
|
import resolveContentType from './resolve-content-type.js';
|
|
8
8
|
/**
|
|
@@ -13,11 +13,11 @@ import resolveContentType from './resolve-content-type.js';
|
|
|
13
13
|
*/
|
|
14
14
|
export async function CmsContent({
|
|
15
15
|
// Own properties
|
|
16
|
-
contentType, contentTypePrefix, contentLink: rawContentLink, children, fragmentData, layoutProps, noDataLoad, variant, ctx, }) {
|
|
16
|
+
contentType, contentTypePrefix, contentLink: rawContentLink, children, fragmentData, layoutProps, noDataLoad, variant, ctx, editorComponentId, }) {
|
|
17
17
|
// Prepare context
|
|
18
18
|
const graphClient = ctx.client;
|
|
19
19
|
// Normalize the ContentLink
|
|
20
|
-
const contentLink =
|
|
20
|
+
const contentLink = normalizeContentLinkWithLocale(rawContentLink);
|
|
21
21
|
// Ensure we have the contentType
|
|
22
22
|
let myContentType = resolveContentType(contentType, fragmentData);
|
|
23
23
|
if (!myContentType) {
|
|
@@ -38,9 +38,6 @@ contentType, contentTypePrefix, contentLink: rawContentLink, children, fragmentD
|
|
|
38
38
|
: ctx.inPreviewMode
|
|
39
39
|
? 'Preview'
|
|
40
40
|
: 'Public';
|
|
41
|
-
/*console.log(
|
|
42
|
-
`👔 [CmsContent] ${mode} mode active for content with id: ${contentLinkToString(contentLink)} of type ${myContentType?.join('/') ?? 'unknown'}`
|
|
43
|
-
)*/
|
|
44
41
|
if ((ctx.inEditMode || ctx.inPreviewMode) &&
|
|
45
42
|
graphClient.currentAuthMode == AuthMode.Public)
|
|
46
43
|
console.warn(`🟠 [CmsContent] ${mode} mode active without an authenticated graphClient, this will cause problems. Make sure the context has an authenticated client.`);
|
|
@@ -51,8 +48,13 @@ contentType, contentTypePrefix, contentLink: rawContentLink, children, fragmentD
|
|
|
51
48
|
return _jsx(Component, { contentLink: contentLink });
|
|
52
49
|
// Ensure we have the data the Component requested
|
|
53
50
|
const data = await getContent(graphClient, contentLink, Component, fragmentData, noDataLoad);
|
|
51
|
+
const editProps = {
|
|
52
|
+
ctx,
|
|
53
|
+
currentContent: ctx.editableContent || undefined,
|
|
54
|
+
cmsId: editorComponentId || contentLink?.key,
|
|
55
|
+
};
|
|
54
56
|
// Output the actual component
|
|
55
|
-
return (_jsx(Component, { contentLink: contentLink, data: data, inEditMode: ctx.inEditMode, layoutProps: layoutProps, ctx: ctx, children: children }));
|
|
57
|
+
return (_jsx(Component, { contentLink: contentLink, data: data, inEditMode: ctx.inEditMode, layoutProps: layoutProps, editProps: editProps, ctx: ctx, children: children }));
|
|
56
58
|
}
|
|
57
59
|
export default CmsContent;
|
|
58
60
|
//# sourceMappingURL=rsc.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rsc.js","sourceRoot":"","sources":["../../../src/components/cms-content/rsc.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;
|
|
1
|
+
{"version":3,"file":"rsc.js","sourceRoot":"","sources":["../../../src/components/cms-content/rsc.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAIZ,OAAO,cAAc,MAAM,uBAAuB,CAAA;AAClD,OAAO,UAAU,MAAM,kBAAkB,CAAA;AACzC,OAAO,EACL,QAAQ,EACR,8BAA8B,GAE/B,MAAM,iCAAiC,CAAA;AACxC,OAAO,gBAAgB,EAAE,EACvB,2BAA2B,GAC5B,MAAM,wBAAwB,CAAA;AAC/B,OAAO,kBAAkB,MAAM,2BAA2B,CAAA;AAI1D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAuB;AACrD,iBAAiB;AACjB,WAAW,EACX,iBAAiB,EACjB,WAAW,EAAE,cAAc,EAC3B,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,UAAU,EACV,OAAO,EACP,GAAG,EACH,iBAAiB,GACgB;IACjC,kBAAkB;IAClB,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAA;IAE9B,4BAA4B;IAC5B,MAAM,WAAW,GAAG,8BAA8B,CAAC,cAAc,CAAC,CAAA;IAElE,iCAAiC;IACjC,IAAI,aAAa,GAAG,kBAAkB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;IACjE,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CACX,kFAAkF,CACnF,CAAA;YACD,OAAM;QACR,CAAC;QACD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CACX,uEAAuE,CACxE,CAAA;YACD,OAAM;QACR,CAAC;QACD,aAAa,GAAG,MAAM,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;IAChE,CAAC;IAED,qCAAqC;IACrC,IAAI,WAAW,EAAE,KAAK,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU;YACzB,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,GAAG,CAAC,aAAa;gBACjB,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,QAAQ,CAAA;QACd,IACE,CAAC,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,aAAa,CAAC;YACrC,WAAW,CAAC,eAAe,IAAI,QAAQ,CAAC,MAAM;YAE9C,OAAO,CAAC,IAAI,CACV,mBAAmB,IAAI,iIAAiI,CACzJ,CAAA;IACL,CAAC;IAED,kDAAkD;IAClD,MAAM,SAAS,GAAG,gBAAgB,CAChC,aAAa,EACb,iBAAiB,EACjB,OAAO,EACP,GAAG,CACJ,CAAA;IACD,IAAI,2BAA2B,CAAC,SAAS,CAAC;QACxC,OAAO,KAAC,SAAS,IAAC,WAAW,EAAE,WAA0B,GAAI,CAAA;IAE/D,kDAAkD;IAClD,MAAM,IAAI,GAAG,MAAM,UAAU,CAC3B,WAAW,EACX,WAAW,EACX,SAAS,EACT,YAAY,EACZ,UAAU,CACX,CAAA;IAED,MAAM,SAAS,GAA8B;QAC3C,GAAG;QACH,cAAc,EAAE,GAAG,CAAC,eAAe,IAAI,SAAS;QAChD,KAAK,EAAE,iBAAiB,IAAI,WAAW,EAAE,GAAG;KAC7C,CAAA;IAED,8BAA8B;IAC9B,OAAO,CACL,KAAC,SAAS,IACR,WAAW,EAAE,WAA0B,EACvC,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,GAAG,CAAC,UAAU,EAC1B,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,GAAG,YAEP,QAAQ,GACC,CACb,CAAA;AACH,CAAC;AAED,eAAe,UAAU,CAAA"}
|
|
@@ -2,6 +2,42 @@ import { type PropsWithChildren, type ComponentType, type ComponentProps, type R
|
|
|
2
2
|
import type { CmsComponent } from '../../types.js';
|
|
3
3
|
import type { PropsWithContext, PropsWithOptionalContext } from "../../context/types.js";
|
|
4
4
|
import type { ContentLinkWithLocale, InlineContentLinkWithLocale } from "@remkoj/optimizely-graph-client";
|
|
5
|
+
/**
|
|
6
|
+
* Properties for `CmsContent`.
|
|
7
|
+
*
|
|
8
|
+
* `CmsContent` resolves and renders a CMS template component for the item
|
|
9
|
+
* identified by `contentLink`.
|
|
10
|
+
*
|
|
11
|
+
* Property overview:
|
|
12
|
+
* - `contentLink` (required): content identity (`key` + optional locale).
|
|
13
|
+
* - `contentType`: explicit content type array; skips content-type lookup when set.
|
|
14
|
+
* - `contentTypePrefix`: template prefix (for example `Page`, `Component`).
|
|
15
|
+
* - `variant`: template variant suffix.
|
|
16
|
+
* - `fragmentData`: preloaded data for rendering.
|
|
17
|
+
* - `noDataLoad`: skip loading data from Graph.
|
|
18
|
+
* - `layoutProps`: layout metadata forwarded to resolved component.
|
|
19
|
+
* - `editorComponentId`: explicit editor id override for `editProps.cmsId`.
|
|
20
|
+
* - `ctx`: explicit CMS context override.
|
|
21
|
+
* - `children`: nested content passed through to resolved component.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```tsx
|
|
25
|
+
* <CmsContent
|
|
26
|
+
* contentLink={{ key: 'b9f76fd06f5d4e2e8d2cc3f010f7abf9', locale: 'en' }}
|
|
27
|
+
* contentTypePrefix="Page"
|
|
28
|
+
* />
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```tsx
|
|
33
|
+
* <CmsContent
|
|
34
|
+
* contentLink={{ key: '4f9ac0f95ed147b6956c9f6bd4151f38' }}
|
|
35
|
+
* contentType={["Component", "HeroBlock"]}
|
|
36
|
+
* fragmentData={heroData}
|
|
37
|
+
* noDataLoad
|
|
38
|
+
* />
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
5
41
|
export type CmsContentProps<LocalesType = string> = PropsWithChildren<PropsWithOptionalContext<{
|
|
6
42
|
/**
|
|
7
43
|
* The content type to render
|
|
@@ -11,6 +47,14 @@ export type CmsContentProps<LocalesType = string> = PropsWithChildren<PropsWithO
|
|
|
11
47
|
* The content link to render
|
|
12
48
|
*/
|
|
13
49
|
contentLink: ContentLinkWithLocale<LocalesType> | InlineContentLinkWithLocale<LocalesType>;
|
|
50
|
+
/**
|
|
51
|
+
* When provided this value will override the value for the `cmsId` field in
|
|
52
|
+
* the `editProps` the CmsComponent will provide to the component.
|
|
53
|
+
*
|
|
54
|
+
* This value is only needed when there's a difference between the Data ID and
|
|
55
|
+
* the ID expected by the editor.
|
|
56
|
+
*/
|
|
57
|
+
editorComponentId?: string;
|
|
14
58
|
/**
|
|
15
59
|
* The initial, pre-loaded data. If set this will be used instead of having the
|
|
16
60
|
* component fetching its' own data. So be sure that this leverages the fragment
|
|
@@ -23,7 +67,7 @@ export type CmsContentProps<LocalesType = string> = PropsWithChildren<PropsWithO
|
|
|
23
67
|
[fieldname: string]: any;
|
|
24
68
|
};
|
|
25
69
|
/**
|
|
26
|
-
|
|
70
|
+
* React key to use when the component is rendered in a list.
|
|
27
71
|
*/
|
|
28
72
|
key?: string;
|
|
29
73
|
/**
|
|
@@ -38,7 +82,7 @@ export type CmsContentProps<LocalesType = string> = PropsWithChildren<PropsWithO
|
|
|
38
82
|
*/
|
|
39
83
|
variant?: string;
|
|
40
84
|
/**
|
|
41
|
-
|
|
85
|
+
* Additional layout properties forwarded to the resolved CMS template.
|
|
42
86
|
*/
|
|
43
87
|
layoutProps?: Record<string, any>;
|
|
44
88
|
/**
|
|
@@ -34,12 +34,12 @@ export const CmsContentArea = ({ items = [], classMapper, fieldName, as: element
|
|
|
34
34
|
// Buld wrapper configuration
|
|
35
35
|
const contentAreaItemContainerProps = {
|
|
36
36
|
'data-epi-block-id': inEditMode && fieldName
|
|
37
|
-
? Utils.getContentEditId(contentLink)
|
|
37
|
+
? Utils.getContentEditId(contentLink)
|
|
38
38
|
: undefined,
|
|
39
39
|
'data-displayoption': item.displayOption || undefined,
|
|
40
40
|
'data-tag': item.tag || undefined,
|
|
41
41
|
'data-component': contentType?.at(0),
|
|
42
|
-
...contentItemElementProps,
|
|
42
|
+
...Utils.filterCmsComponentProps(contentItemElementProps),
|
|
43
43
|
className: `opti-content-area-item opti-content-area-item-${idx}${contentAreaItemClassName ? ' ' + contentAreaItemClassName : ''} ${classMapper ? classMapper(item.displayOption ?? 'default', contentType ?? null, idx) : ''}`,
|
|
44
44
|
};
|
|
45
45
|
const contentAraeItemContent = useSuspense ? (_jsx(Suspense, { fallback: fallback, children: _jsx(CmsContent, { contentLink: contentLink, contentType: contentType, fragmentData: fragmentData, contentTypePrefix: "Component", variant: variant, ctx: ctx }) })) : (_jsx(CmsContent, { contentLink: contentLink, contentType: contentType, fragmentData: fragmentData, contentTypePrefix: "Component", variant: variant, ctx: ctx }));
|
|
@@ -58,7 +58,7 @@ export const CmsContentArea = ({ items = [], classMapper, fieldName, as: element
|
|
|
58
58
|
className: `opti-content-area ${Array.isArray(additionalProps.className) ? additionalProps.className.join(' ') : (additionalProps.className ?? '')}`.trim(),
|
|
59
59
|
'data-epi-edit': inEditMode && fieldName ? fieldName : undefined,
|
|
60
60
|
'data-component': 'ContentArea',
|
|
61
|
-
...additionalProps,
|
|
61
|
+
...Utils.filterCmsComponentProps(additionalProps),
|
|
62
62
|
};
|
|
63
63
|
const contentAreaContainerChildrenTarget = itemsProperty ?? 'children';
|
|
64
64
|
let contentAreaContainerChildren = undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/cms-content-area/index.tsx"],"names":[],"mappings":";AACA,OAAO,KAAK,KAAK,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAA;AACzC,OAAO,EACL,8BAA8B,EAC9B,mBAAmB,GACpB,MAAM,uCAAuC,CAAA;AAO9C,OAAO,EAAE,QAAQ,EAAY,MAAM,OAAO,CAAA;AAS1C,YAAY;AAEZ;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAgC,CAGzD,EACA,KAAK,GAAG,EAA4C,EACpD,WAAW,EACX,SAAS,EACT,EAAE,EAAE,WAAW,EACf,aAAa,EACb,WAAW,EACX,WAAW,GAAG,KAAqD,EACnE,QAAQ,EACR,SAAS,EAAE,sBAAsB,GAAG,KAGtB,EACd,OAAO,EAEP,GAAG,EACH,UAAU,EAAE,UAAU,EAEtB,GAAG,eAAe,EACY,EAAE,EAAE;IAClC,MAAM,EAAE,UAAU,GAAG,KAAK,EAAE,GAAG,GAAG,CAAA;IAElC,8FAA8F;IAC9F,MAAM,aAAa,GACjB,CAAC,KAAK,IAAI,EAAE,CACb;SACE,MAAM,CAAC,wBAAwB,CAAC;SAChC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QACjB,iDAAiD;QACjD,MAAM,WAAW,GAAG,8BAA8B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAClE,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC1E,MAAM,WAAW,GAAG,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QACpE,MAAM,YAAY,GAAG,IAAI,CAAA;QAEzB,qCAAqC;QACrC,MAAM,EACJ,EAAE,EAAE,wBAAwB,GAAG,KAAK,EACpC,aAAa,EAAE,cAAc,GAAG,UAAU,EAC1C,SAAS,EAAE,0BAA0B,GAAG,KAAK,EAC7C,SAAS,EAAE,2BAA2B,EACtC,GAAG,uBAAuB,EAC3B,GAAG,WAAW,IAAI,EAAE,CAAA;QACrB,MAAM,kBAAkB,GAAG,mBAAmB,GAAG,IAAI,mBAAmB,CAAC,WAAW,CAAC,EAAE,CAAA;QACvF,MAAM,wBAAwB,GAAG,KAAK,CAAC,OAAO,CAC5C,2BAA2B,CAC5B;YACC,CAAC,CAAC,2BAA2B,CAAC,IAAI,CAAC,GAAG,CAAC;YACvC,CAAC,CAAC,2BAA2B,CAAA;QAE/B,mCAAmC;QACnC,IAAI,0BAA0B;YAC5B,OAAO,WAAW,CAAC,CAAC,CAAC,CACnB,KAAC,QAAQ,IAA0B,QAAQ,EAAE,QAAQ,YACnD,KAAC,UAAU,IACT,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,YAAY,EAC1B,iBAAiB,EAAC,WAAW,EAC7B,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,GAAG,GACR,IARW,kBAAkB,CAStB,CACZ,CAAC,CAAC,CAAC,CACF,KAAC,UAAU,IAET,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,YAAY,EAC1B,iBAAiB,EAAC,WAAW,EAC7B,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,GAAG,IANH,kBAAkB,CAOvB,CACH,CAAA;QAEH,6BAA6B;QAC7B,MAAM,6BAA6B,GAAQ;YACzC,mBAAmB,EACjB,UAAU,IAAI,SAAS;gBACrB,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,WAAW,CAAC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/cms-content-area/index.tsx"],"names":[],"mappings":"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"}
|